For our final project, five of us created a game over five weeks. The Developer Academy tasked us each to create a C++ based mechanic, an AI character with unique behavior, and a level. The rest was up to us!
We used this prompt to help guide our game design. Soulstice is a platformer/puzzler inspired by Mario Odyssey. The player is a ghost with the ability to possess robots each with a special ability. The goal of each level is simply to reach the end but there are whispy souls to collect, providing an addition goal for players to find them all.
We created Soulstice in Unreal Engine 5.3, and C++.
The Collectable Souls
Interaction with the Game State
The core possession mechanic needs the player to be able to take control of all the AI robots. The mechanic destroys the player’s pawn, and changes the AI’s controller to be the player. I therefore used the GameState to store variables like CollectedSouls and functions to receive damage. We will never expand the game into multiplayer, so this is a viable solution.
Receiving Damage and Dropping Souls
When the player is struck, a function checks if the player has any souls collected. Like Sonic, if the player has none, then its game over. If they do, however, then they will drop them all in a ring. These souls will only hang around for a few seconds before vanishing so the player has to avoid enemies if they want a perfect run.
Blueprints and Behaviour Tree
I was also in charge of designing the level format for Soulstice. Here are the design images I used to plan out the puzzles of my level, and some screenshots demonstrating how it evolved in the world editor of Unreal Engine 5.3.
I was also responsable for the pause menu.