Spirits: Character Controller Case Study

This post is documenting Spirits, a game in development.

Spirits is a third person, action, shooter game created by myself and 3 others. This game was created as a capstone project at Sheridan College's Bachelor of Game Design Program.

Designed to catch and retain the player's attention, many aspects of the game were made to engage the player. The game focuses on the responsiveness of the character, the interactions with the environment, and dynamic combat the player partakes in.

In order to achieve this, the game features a single boss fight that demonstrates the core pillars.

Dynamic Combat

Spirit's combat is designed to put the player in sticky situations, and give them multiple tools that can get them out those. In order to accomplish this, we aimed to give each mechanic more than a single purpose. For example, the character's dodge can double as a dash, or their Telekinetic Pull can be used to steal ammunition away from the boss.

Retro Nostalgia

Spirits is designed to evoke nostalgia of the 80s and 90s. Our demographic are young adults from the age 13-25, and popular trends going on for this age range was the consumption of media inspired by that time period. To ensure that players understand the time period, we made it mandatory for players to pay attention to the environment, as they will always be on the look out to collect ammunition.

Power Struggle

The Boss in Spirits is designed to evoke the sense that its an equal to you through solely gameplay. If we wanted to make the player feel powerful, we needed the player to feel that there were points where the boss was too. In order to accomplish this, the Boss progression was designed to take advantage of when the player feels comfortable by increasing difficulty at specific moments.

The Character Controller in Spirits is designed to always be giving the player immediate feedback on what they're trying to do. My philosophy for when I create Character Controllers that influenced Spirits was:


When a player provides input, the character should respond as soon as possible (within reason) and should respond in a way that's expected. In Spirits, using Telekinesis and Time Stop are both abilities that are tied to gestures that the player performs.

(Left Telekinesis has the character thrust with his right hand. Right, Time Stop has the character lift his left hand.)

In Spirits, the animations are tailored to be quick, playing as quickly as possible after the input. From playtesting, many players mentioned the sluggishness of the Telekinesis Push when it followed the physicality of the animation. From surveying, it was most likely because players were accustomed to third-person shooters with guns that have immediate feedback. So, in this case, the gesture the player perform occurs slightly after the object launches, where the action of launching the object happens immediately on input.

Additionally, the reason for why Time Stop and Telekinesis have gestures on different hands was to allow simultaneous use of both abilities while having the appropriate feedback for each.


In order to provide the best looking movement for the Character Controller, the character moves with root motion. In order to save on time, a movement asset pack was used, but each animation had to be modified to be the correct speed.

The range of motion that the Controller covers is:

- 8 Directional Run

- 8 Directional Walk

- 4 Directional Run Stop

- 4 Directional Walk Stop

In order to save resources, a Run Start and Walk Start were not included. Although preferable to have, we found that this increased responsiveness.

The character's movement is always strafing, making them always look forward. This helps with aiming, as the character will always be facing in the direction they're shooting.


The player has the ability to dodge attacks. This dodge doubles as a dash, as it moves them faster than moving normally. The Dodge is able to be cancelled at various points during the animation, as illustrated in the diagram:

When the Controller is in its Locomotion State, as soon as the player hits the input for dodge, it commits to a dodge in the direction the player is going (backwards if the player is idle).

It starts with the player performing Dodge Animation Start heading into the the dodge direction, then vanishing on Phase Out with VFX. The player is invulnerable during Movement until they reappear during Phase In, and can also be extended if the player is holding the Dodge input. The Controller immediately performs the Dodge Animation End, and during this time, if the player inputs dodge again, the character will immediately Phase Out again in whatever direction the player is providing. During Dodge Animation End, the trajectory of the Controller can be influenced by directional input. The Controller can still use its other abilities up to Phase Out, and until Phase In. Any gesture the Controller plays while it transitions into Phase In is cancelled, with the action (Telekinesis, Time Stop) still occurring. Dodge Animation End blends back into Locomotion, if the character is moving, or Idle, if they are not.

This was done to enable the player and give a clear indication of their periods of invulnerability/vulnerability. By allowing the player to cancel the dodge with another dodge, it also increases the perceived responsiveness of the Controller. Preferably, there would of been another animation state after Dodge Animation End that would occur if the Controller was Idle, but resources did not permit.

Telekinesis Pull

The ability to pick up items is called Telekinetic Pull. Basically it takes whatever the camera is aimed at, and brings it toward the player, and hovers them around. This mechanic uses both the Collection System and the Inventory System.

The Collection System's job is to evaluate each item that the Controller can pick up, then chooses the best one to bring toward the player. The Inventory System's job is to hold onto collected items, and either continue adding more, or shoot them out with Telekinesis Push.

Starting with the Collection System, basically how it works is that the camera raycasts forward until it hits something in the environment. From there, it checks all of the objects in a certain radius of that hit point. From those objects, the system scores which one is the most desirable to be pulled based on certain factors:

- How close it is to the hit point in world space

- How close it is to the player in world space

- How close is it to the crosshair in screen space

Each of these are scored on a scale of 0-1, multiplied with each other, and then arranged so that the first element is the item that is being collected. The rationale for this system was that when collecting objects, it needs to be 100% clear what object is being grabbed, and for the user, its based off of those 3 elements. To further drive this idea, the evaluation is performed at all times, and the most desirable object is indicated with a UI element, clearly showing the player what object they will pull.

Spirits is in development. This will be updated accordingly.