The Hermit

Project Summary

The Hermit is an action-adventure game where you work together with the spirits of the forest to defeat a band of evil weasels

Role: Game Designer & Product Owner
Date: May - June 2020
Time:  7 Weeks
Team Size:  10 People (2 Designers)

Genre : Action Adventure
Engine:  Unity
Version Control:  Perforce
Code Language:  C#

  • Role
    Gameplay & Level Designer

  • Time
    7 weeks

  • Team
    10 people

  • Favourite Snack
    Dried Mango

  • Genre
    Action Adventure

  • Engine
    Unity

  • Version Control
    Perforce

  • Code Language
    C#

My Contributions

Gameplay Design
Core Gameplay
Ability Variety
Level Design
Overall Level Structure
Level Progression
C# Scripting
UI Implementation
Gameplay Events

Game Overview

Fighting

The player character has a staff which he can swing to attack enemies. Attacking is done in combos of up to three hits. Hitting an enemy with the staff also staggers them for a short while.

Throwing

To make your minions aid you in combat or with puzzles, you throw them at the target, either doing damage to an enemy on impact, or finding a task to complete when they land.

Minions

Neutral

All minions start off as neutral, these are the baseline minions with can perform basic tasks, such as pulling levers to open doors.

Ember

Ember minions are quite hot-headed, if you throw them they explode upon impact, getting rid of destructible objects.

Basalt

Basalt minions are made of solid basalt, and are therefore heavier than the other minion types, they can weigh down pressure plates.

Ice

Ice minions are cold and hard, they don't have a unique use in puzzles, but throwing them at enemies does increased damage.

Problem Solving

Mechanic

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Read MoreRead Less

Information

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Problem

Minion-throw target indicator having a clamped distance makes the player feel restricted

Solution

Add a mouse location indicator without a clamped distance
Read More
Read Less
Show Script

Throwing

One of the main mechanics of the game is throwing the player's little minion friends. Both to direct them toward puzzle elements that only they can interact with, and to have them help the player in combat. This is done by aiming with the mouse and pressing the right mouse button.

What we discovered was that players felt very restricted in their movement, because there was nothing indicating where the mouse actually was, there was only the throw indicator with a clamped distance. This mean that whenever the mouse was outside of the area, it felt like the mouse got stuck.

As a solution to this problem, we decided to add an indication of where the mouse was, which removed the restricting feeling, without affecting anything else.

Problem

Selecting minions with radial wheel feels clunky when repeated

Solution

Change the minion selection from radial wheel to alpha keys 1-4
Read More
Read Less
Show Script

Selecting

Initially we had a radial wheel which you accessed using Tab and moved the mouse to select which minion type you wanted to use. This worked when minions weren't meant to aid the player in combat, but when we introduced them into combat, it quickly became very tedious to get your minions to help you with quick repeated minion selections.

The radial menu also had the problem of not having an indicator that players could easily reference to know how to select minion types. This made us decide that we needed an alternative and what we ended up deciding to go with was having each of the minion types on the alpha keys.

This removed the problem of repeated actions being cumbersome and also obstructed less of the screen during combat. The end result was more user friendly, easier to access during combat and was less cumbersome upon repeated actions.

Scripting

Health Display Script

In The Hermit, the player has 3 pinecones that display their health. Each pinecone has 5 health points. To reduce the amount of gameobjects displayed, I chose to swap the sprite of each pinecone instead of enabling and disabling gameobjects with sprite renderers.

Each time the health is updated, I loop through each pinecone and set their sprite based on a value produced by the calculation CurrentHealth - (healthPerPinecone*1), this value is then clamped between 0 and the amount of health a pinecone can have.

Read More
Read Less
Show Script
Hide Script
    public void SetHealthImage(int currentHealth) {
        for (int i = 0; i < healthBars.Length; i++) {
            healthBars[i].sprite = HealthImages[Mathf.Clamp(currentHealth - healthPerPinecone * i, 0, healthPerPinecone)];
        }
        previousHealth = currentHealth;
    }

Quick Select Script

The quick select system in the Hermit has an animation for the entire bar, and individual animations for each button. To keep track of which animations to run, I made a script that checks when the last input on the quick select bar was made, if none has been made for 1 second, the entire bar hides itself.

If the player has made an input, the selected button is emphasised, and if the player makes another input, the emphasis shifts from the previous button to the new one.

Read More
Read Less
Show Script
Hide Script
    private IEnumerator ShowQuickSelect(int alphaInput) {
        float localTime = Time.time;
        latestInput = Time.time;
        currentSelection = alphaInput + 1;
        if (active) {
            tweens[previousSelection]?.OpenCloseObjectAnimation();
            tweens[currentSelection].OpenCloseObjectAnimation();
            previousSelection = currentSelection;
            yield return new WaitForSeconds(DisplayTime);
        }
        else {
            previousSelection = currentSelection;
            tweens[0].OpenCloseObjectAnimation();
            tweens[currentSelection].OpenCloseObjectAnimation();
            yield return new WaitForSeconds(DisplayTime);
        }
        if (latestInput - localTime <= 0)
            HideQuickSelect(currentSelection);
    }

Level Design

The Thought

Initial Intent

The level was designed to have a tutorial area, teaching the player about enemies and minions and their function. Followed by a portion introducing elements and the fire minion to the minions and teaching the players what situations they can be used in. Then Basalt and Ice were introduced in similar ways.

Along the way, the player was meant to collect keys, unlocking one door each at the end, with a total of three doors required. One minion would have to carry these keys.

Final Result

Most of the intended aspects of the level design were kept in the final design of the level, which is something I am happy about. But due to the amount of mechanics we needed to introduce, I don't feel like each had enough time to be introduced in, while keeping the game's playtime below 20 minutes.

Each iteration saw some part of the map being cut off, as they were to allow the introduction time to feel better, but in the end, it became too long, and thus they were removed.