Step Lightly
Synopsis
You wake at midnight with just one thing on your mind: you have to leave. Move quietly through a messy house, find a friend along the way, and escape your monstrous family.
Contribution Overview
- Character controls and movement
- State Machine pattern
- AI development assistance
- Scripted events
Development
Step Lightly was the seventh and final game I developed as a student on TGA. It’s a short puzzle-platformer horror game based on Little Nightmares.
My main responsibilities was in implementing character movement and controls, constructing the state machine pattern, as well as assisting with the character AI and scripted events later on in development.
Contribution
State Machine
- The first thing I did this project was implement a state machine for the player and all AI entities.
- This was due to previous projects some classes getting immensely bloated with variables and functions only occuring sometimes. Also it was hard to work in and find your way in the code. So there was a need to seperate the behaviours into multiple classes.
- The state machine pattern consists of:
- A state machine component
- States-classes
- Main-states & Sub-states enums.
- The state machine component can be attached to more or less any gameobject. It contains a list of which state-classes the entity can be in. It is a wrapper which handles the update loop of the state-classes, as well as a smooth transition between states.
- State-classes handles all the logic of the entities. It only knows of itself, and no other state-class.
- Still, the state-classes needed to have some seperate logic. When the player was crouching for examples, they could still be sprinting, jumping, hanging onto ledges and so on. So sub-states where in need. Main-states are just to the identity the state-classes have, such as Default-State, Climbing-State etc.
- The state machine also is used in animations. The animation component check what Main & Sub-state the component is in, and then updates to a new animation.
Character
- Implemented Character movement system with the help of the state machine.
- Different movement depening on states
- Default & Crouching:
- Basic movement using WASD for walking
- SPACE for Jumping.
- Hold in and let go of L-Ctrl to start and stop crouching.
- Hold in L-Shift to sprint.
- Hang on to ledges and climb up on them.
- Climb along certain surfaces.
- Walking slower and limiting movement while being watched by the eye enemy.
- Locking the player while a scripted event was playing or they were respawing.
- Player features where I weren’t the one to mainly work on them, but still contributed with:
- Picking up and throwing objects.
- Dragging boxes along the ground.
- Inserting items into slots.
- The lighter which the player can use to see better while it’s dark.
- Wind up a crank.
Other
- When one of our team members fell ill, I had to take over the development of the dog companion’s AI. Most of the bugs were regarding following the player character correctly, and fix mistakes others have accidentally added.
- Helped with the implementation of the scripted events on the dog. Making sure that it pushed the box correctly at the end.
- Implemented the jump behaviour of the dog. Making sure that it’s jump curvature was correct.
- Implemented a function so that the tutorial text appears and disappears based on the player’s proximity. Though this was late in the project and we didn’t have the time to make it feel polished, so we scrapped it.
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