Hell's Delivery
Check out the game here!
I worked as a sound designer, game designer and programmer on this project! All the music and sound (excluding the voice acting) was done by me!
Key Feature Analysis
Character Controller
The character controller is what the player uses to control our two main characters shmink and shmonk. It handles walking, running, jumping, parachuting and falling. The character controller may seem simple but it takes a long period of testing and tweaking to get it feeling good and giving the right amount of control to the player.

How Does it Work/Features

(A comparison of a changed Air Velocity Curve)

(A comparison of a changed Jump Velocity Curve)
Our character controller reads inputs from the player using Unity's input system and manually applies movement to the player's physics object (rigidbody) using speed, acceleration and deceleration values.
The character controller I created for this project has a ton of tweakable values including a speed velocity curve (time to maximum, peak speed, time to zero speed), jump curve (jump acceleration, peak jump speed, float time, jump speed decay), fall speed acceleration curve (time to max fall speed, maximum fall speed) and a run speed curve (time to max run speed, max run speed) among other things. These are tweakable in editor using Unity's animation curves.
Game Feel and Accessibility
The character controller includes coyote time (a brief moment of time where the player just leaves a platform that allows them to jump still), jump buffer (players can press jump just before hitting the ground to still jump after landing), quick turn/skidding (the character has to decrease their velocity back to zero before making a large change in direction), particle effects (dust/cloud bursts for jumping, landing and reaching peak run speed, sweat particles for carrying big objects) and lenient collision boxes (players have a bigger area than it seems to stand on small objects).

Problems Solved and Issues

(Demonstration of the Air Acceleration being too high)
The character controller is a complex problem that every game solves differently. Our game was a unique case and although references were helpful, I needed to solve problems that were unique to our project often.
​
​
A notable problem from this document was solving the problem of the character feeling "too responsive". This problem made players feel like they had to be super gentle with the character afraid they would make the wrong move. Solving this problem made me have to think backwards, normally I want to make the character more responsive. I solved this issue by making the character feel more weighty by increasing time to maximum speed and time to minimum speed and adding quick turn. I knew quick turn was needed when I observed players trying to make small adjustments while mid air, they went flying in the opposite direction despite only tapping it for a second. Quick turn and some adjustments to the movement curves made small repositions a lot easier by making quick inputs less impactful to overall movement speed.
More Features
Button System
A system that's meant to be usable, adaptable and expandable. I used the Unity event system to create a drag and drop system for our level designer to connect buttons to other objects like moving platforms. Our level designer and other programmer were able to take the base I created and create a host of different button types!

Badge System

The badge system is a reward system that gives players gold and silver badges based on actions they did throughout the level. This could be things such as who jumped more, who spent more time in the air etc.
For our badge system I wanted to make something that could be added to and expanded on easily with new badges being able to be created with scriptable objects right in the editor. The issue was that each condition needed a custom function to work, these would be things such as which value do we read (jumps, deaths, envelopes collected etc.), how do we compare the two player's values (who was more, who has less, who was x number etc.). To solve this I created an enum list of different conditions. Each enum has a custom check attached to it and this way I could create a whole bunch of different conditions for our designers to create new badges with.
Mail Collectables
We wanted to add a simple collectable to our game, the goal of this was to balance the risk/reward of sabotaging your opponent. My goal for this feature was to create something satisfying to collect. To make the collection of mail satisfying I created a UI effect that makes the mail object shrink and move towards the player's mail count. I also created a dynamic animation to the mail UI that scales based on how much mail you collect in a short period of time. To finalize it I added a golden mail mechanic, if players collect a whole trail of mail, the final envelope will be a gold envelope giving the player between 3-5 envelopes in quick succession. Combined with the sound I created I feel I was successful in making the mail satisfying to collect.
