Finders Keepers
Synopsis
Play as a master thief contracted to infilitrate the king’s keep. Snatch powerful arcane crystals, enabling you to perform acrobatic traversal, evade the watchers, and steal the priceless heirloom.
Contribution Overview
- Character controls and movement
- Camera controls, collision and panning
- Implementation of character abilities
- Scripted events
- Dash Bubbles
Development
Finders Keepers was the sixth game I developed as a student on TGA. It’s a 3D platformer game based on Psuedoregalia.
My main responsibilities was in implementing character movement and controls, as well as the camera behaviour and collision handling.
Contribution
Character
- Implemented Character movement system with the help of physX.
- Movement applies a force in a certain direction on the physX engine.
- If a max velocity is reached, the force will be limited as to not exceed the maximum allowed.
- Basic movement using WASD for walking and SPACE for Jumping (on keyboard).
- State machine indicating what the player can do at each specific point in time.
- If an airborne player applies an input close to the ground, the input will be stored for when they land and applied then instead.
- Effects of abilities which the player can unlock through the game (more info below)


Abilities


Slide
- First ability which you unlock.
- Sliding grants higher velocity and being able to go below tight spaces.
- If the player jumps while sliding they’ll perform a Slide Jump.
- Shorter vertically compared to a normal jump, but massively increased horizontal distance.
- Limited mobility. The player may slightly steer where they’re able to slide.


Air Kick
- Second ability which you unlock.
- Can only be performed while in the air.
- Slightly launces the player in the direction they’re currently facing.
- If they apply an while activating, the launch will be apllied in that direction.
- If no directions nor inputs are applied, the kick will be stationary.
- The player will enter a kick state for about a second. If they collide with a wall from the front they will perform a wall kick.
- Wall kicks launches you in the air and in the opposite diretion which you were facing the wall, as well as resetting to let you perform another air kick.
- Up to three air kicks may be used before landing.
- Up to three air kicks may be used before landing.


Plunge
- Third and last ability which you unlock.
- Can also only be performed while in the air.
- Stops the player’s velocity, then lunge them downwards into the ground.
- After the player has hit the ground, they have a short window to perform Plunge Jump.
- Plunge Jump let’s you jump much higher than previously possible.
Camera
- 3D orbital camera rotating around a Focus Point by the player. Controlled by mouse movement.
- The Focus Point is placed a few dm above the player’s head.
- While able to rotate 360° horizontally, there are limited angles vertically to not flip the camera over, nor to look to much upwards to land in an awkward collision with the player.
- While the camera moves it ignore walls between it and the Focus Point. To still be able to view the player, a shader is put to higlight them through walls and terrain.
- If the camera collides with terrain, it will recalculate a new position by keeping its current angle, and raycast from the Focus Point backwards until it hits a wall (or maximum distance). This is to prevent it from clipping into walls.
- If the camera ends up near the player due to wall collision, the Focus Point will lower down so that one can still see the top of the character’s head.


Camera Panning
Horizontal Panning
- Walking around, the Focus Point of the camera will slowly pan horizontally.
- The panning is based on player input. For example:
- If the player walks to the left, the Focus Point will pan to the left to better view what’s in front. This naturally places the player on the right side of the screen
- If the player turns the camera while panning, the player will still be positioned in the same spot on the screen, to the right.
- If the player stops moving, the Focus Point will pan smoothly back to its original place, above the player.
- While applying inputs, the camera controller will check if the Focus Point would collide with terrain. If that’s the case, it will stop a small distance away from the terrain as to not clip into it.
- If the Focus Point were to clip into the terrain, then camera’s recalculation would be based from a position inside of the terrain, allowing it to clip through.


Vertical Panning
- The Focus Point will naturally try to place itself a bit above the player’s head, vertically.
- However, if they jump the Focus Point will stay put. This it to not have the camera shake around while player jumps quite a bit. When the player lands, the Focus Point will return to above the player’s head.
- The Focus Point will pan upwards a meter or so as to not make the player’s head go outside of the screen during a normal jump.
- If the player would jump out of the screen due to wall kicking or falling from a cliff, the camera will pan back towartds the player.
- If a Plunge Jump is performed, the camera will start panning towards the player slightly before they exit the screen.
- Otherwise the camera would accelerate too fast to catch up with the player.
- When jumping towards a close ledge which the player can reach, the camera will prematuraly slowly pan towards the ground level at that ledge. This gives a smoother experience than if the camera stayed still then quickly tried to readjust.
- If the player enters a dash bubble or ledge grab state, the all panning will immediately go back towards the player.


Other
- Dash Bubbles in the air which the player may enter do gain an extra jump and replenish their Air Kicks.
- Contributed on the respawn system. Worked on making the death screen fade out and respawning timings feel good and natural. As well as resetting the player’s state and movements.
- The player character logic while in scripted events and ending them correctly, both for the player and rotating the camera back to its correct placement.
- Implemented the logic for when the player may interact with levers.
- Helped with the enemy detection system and particle system.



First Level

Final Level
Credits
Programming
- David Grahn
- Ylver Blum Buer
- Elias Ronefors
- Jonathan Rozenberg
- Abraham Alberto
- Erik Edfors
Level Design
- Erik Gatewood
- Ahab Ibrahim
- Johan Rosdahl
Animation
- Emilia Eriksson
- Theo Hübner Sallis
- Rebecca Kornmalm
Graphical Art
- Milla Jaakkola Landin
- Emmett Motamed
- Marcus Carlsson
- Kim Betsgren
- Melker Ljung
Music & SFX
- Abraham Alberto