

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.
-
Research examples of well constructed game feel in platformers and utilise findings.
-
Design a simple level encourages the use and exploration of the primary mechanic.
What is Bunny Hop?

Bunny Hop is a 2.5D platformer with a focus on the feel of its jump mechanic. Several visual and audio effects were used to provide good feedback to the player when executing a jump, as well as several non-visible methods of increasing the feel of the jump such as apex modification and edge detection.
​​​
The game was created in Unreal Engine 5.4 and uses a custom bunny character with some simple cubes
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.
-
Celeste uses dashes that extend a players jump alongside regular jumps to create jump combos of varying lengths and heights. This allows for diverse map layouts with a combination of short and long jumps that are fun to execute and the tightness of the controls is maintained well throughout (e.g. no floatiness or moments in which the player loses control of the character) to achieve a similar game feel a variable jump height is used to make sure that the map/jump puzzles don't get stale as the player progresses and has a good variety of different types of puzzles where the player can choose how to approach each jump with their own unique take/playstyle.
​
How:
-
This 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 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 at maximum jump 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 give the player control of their jump/fall direction allowing for more complex manoeuvres in the air. ​​​​​​​​​​​​

Variable Gravity and Apex Modfiers
Why:
-
Allows for more or less control when jumping to achieve better air control without making the jump feel 'Floaty'.
-
Better air control allows fall puzzles to be added to the platform level instead of only jump puzzles.
-
Super meat boy 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. To achieve something of a similar effect it was thought that by having great air control the player would be able to redirect their movement when jumping and falling and would create 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.
-
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 along 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.
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:
-
Sets a Jump Buffer bool to true which the on jump input queues a jump action and jump height dependant on how long the player held the jump input for
​
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:
-
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:
-
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 approach that's safer but takes a little longer.
​
(in progress)