

Project Aims
-
Create a short game play experience that focuses on constructing good game feel with a single primary mechanic
-
Use visual and audio elements to enhance game feel.
-
Design a simple level encourages the use and exploration of the primary mechanic.
What is Bunny Hop?

Bunny Hop is a 2.5D platform level that was created to experiment with various methods of improving game feel.
The game was created in Unreal Engine 5.4 and features a custom character Bun.
I'll talk through some of the implemented features below.
Variable Jump Height
Variable jump height:
Gives the player control over the jumps height. By holding the jump key for longer the player will jump higher

Variable Jump Height
Why:
-
Allows for more interesting level design and gives the player multiple ways to complete the route through the level.
-
When researching games with great jumps Celeste by Maddy Makes Games was a standout. It uses dashes that extend a players jump alongside regular jumps to create jump combos of varying lengths and heights. I wanted to try to create a similar effect in BunnyHop where control and versatility were the focus allowing players to use their own unique playstyles and have full control over their character at all times
How:
-
(Technical) Variable jump height was achieved by adding increments of 30 to the players jump velocity to a value of 2000 as the player holds down the jump key.
Elements that further improve game feel:
-
To determine when the max jump height has been reached a small ding sound occurs and the player's character shakes to portray tension as if the character is holding back a lot of force before jumping.
-
To determine that a jump is being 'charged' an ascending whistle sound plays dependent on how long the jump key is held for. When the charge reaches maximum height the character starts to shake and sweat.
-
A small camera shake is used on landing to sell the physics behind the jump and make the character feel as though they have weight.
Variable Gravity and Apex Modifiers
Variable Gravity and Apex Modifiers:
Gives the player control during jumping and falling allowing for more complex manoeuvres in the air.

Variable Gravity and Apex Modfiers
Why:
-
Allows for better control when jumping and falling.
-
Better control allows vertical jump and fall puzzles to be added to the platform level creating a wider variety of gameplay.
-
Super Meat Boy by Team Meat utilises a wall grab that allows for redirection when jumping and makes for some fun, difficult and intricate puzzles with both upward and downward player travel. I wanted something similar to this in BunnyHop without actually stopping on walls to create fluid feeling movement. With enhanced air control the player is able to redirect their movement when jumping and falling and creates an experience that makes the player feel skilled when managing to dodge all of the obstacles when falling or take a shortcut by not landing on ledges and dodging around them instead when jumping.
How:
-
Gravity force that is affecting the player is altered dependant on players position in the jump cycle
-
Players fall velocity is clamped so that the player doesn't experience control loss when falling.
-
(Technical) Players Gravity Cycle: Players normal gravity force is x2, when player reaches the apex of their jump gravity is turned off (to zero) for a very brief amount of time while simultaneously increasing the characters movement speed slightly to form a tiny boost effect this makes the jump more responsive to the players controls and allows for a change in direction if the player has made a mistake. After this tiny boost the players gravity is set to 3 to make sure that there is no floatiness to the jump where the player feels a loss of control. If players falling velocity reaches -1000, indicating a long fall, gravity is switch to 1 to allow for much greater air control where the player can easily glide around obstacles.
Elements that improve game feel:
-
The jump has great air control and allows for responsive changes in direction which allows the player to correct mistakes and remain in control of their character throughout the jump cycle rather than losing control during the fall or having no air control while in the process of jumping.
-
Gameplay feels fluid and makes players feel skillful.
Jump Buffering
Jump Buffering:
Allows the player to essentially queue a jump within a small time window to prevent "dead" landings in which the player would press the jump key slightly before the character touches the ground resulting in a failed jump.

Jump Buffering
Why:
-
Allows a jump to happen if the player taps the jump key just before landing providing some margin for error.
-
Is seen in games like Super Meat Boy and Celeste, providing the player with a seamless jump experience where an early jump press doesn't result in the player remaining stationary because the original jump hasn't finished.
-
Allows jumps to be chained together for a quick succession of jumps.
How:
-
(Technical) Sets a Jump Buffer boolean to true for 0.1 seconds. if the jump key is pressed during this time a jump is queued. Jump height of the queued jump is dependant on how long the player held the jump input for. As long as the key press is in the 0.1 second window, the key hold is registered until released.
Elements that improve gameplay:
-
Allows the player to queue charged jumps enabling seamless transitions between jump inputs.
-
Quick succession of jumps and successful landings feels satisfying to the player and allows the player to complete the level faster and without any movement interruptions.
Coyote Time
Coyote Time:
A term coined from the Looney Toons character Wile E. Coyote and his cartoonish ability to remain in the air after stepping off a ledge. In game design it is a technique use to give the player a grace period in which a jump is still able to be executed for a very short window after stepping off a platform.

Coyote Time
Why:
-
Gives the player a grace period in which a jump can still be performed after stepping off a ledge.
-
Is seen in games like Super Meat Boy, Celeste, Hollow Knight, and a huge variety of other platformers, drastically improves the feel of a jumps responsiveness and feels less frustrating to the player.
How:
-
(Technical) Detects when the player is falling within a set time window (0.1 seconds) and allows the player to execute a jump within this time frame.
Elements that improve gameplay:
-
The player being given this small amount of leeway, is able to perform a jump even if they accidentally step over the edge of a platform instead of simply falling. While small and difficult to notice visually, it improves the game feel making the jump feel smooth and responsive
Edge Detection
Edge Detection:
Gives the player a small bump up onto a ledge if their jump is slightly off that would otherwise result in the player unfairly falling and missing the platform

Edge Detection
Why:
-
Gives the player some leeway by helping them onto a ledge in instances where they would have just clipped a corner and fallen.
-
Is seen in a huge variety of other platformers, and improves game feel by creating a smooth and intuitive player experience.
How:
-
(Technical) Uses a line trace to detect how close to an edge the player is and sets the player location to the very edge of a platform if the player starts to fall when within a specific distance from the edge.
Elements that improve gameplay:
-
The player being given this small amount of leeway, is able to land on a platform without bouncing off its edge and falling back down. This results in a frustration free and fun player experience
Level Design

The level was designed with a progressive difficulty curve in mind that encourages the player to experiment with the jump mechanic. The majority of puzzle, while having only one linear paths through them, can be completed in various ways by using jump buffering, taking advantage of the variable jump height or utilising more methodical approaches that are safer but take a little longer.
(in progress)