As part of my final major project at university, I teamed up with Aziz Ahmed (an environment artist) and Alex Potter (a game designer) to create a stealth game in Unreal C++. The project gave me a lot of time to work in multiple programming disciplines; most notably AI, UI and Animation programming.
I am currently recreating this game in Unreal 5 with further improvements.
Guided by a strange voice, an experimental bio-weapon - Elliot ‘Eli’ Baker - wakes up in an unknown facility with no recollection of his past memories. He has one goal; Escape.
I used Unreal’s behaviour tree (BT) technology to create artificial intelligence behaviour for my enemy soldiers. I would create tasks in C++ for the specified action and call them within the BT. I used blackboards to allow easy access to variables such as booleans set in the enemy manager and AI controller class. As a result, a lot of the AI logic revolved around these booleans. For instance, if the player has been caught by a soldier, the boolean ‘hasBeenSeen’ would be set to true and the soldier would go into ‘attack state’ in which they would immediately run to cover based on the player's position. This project not only allowed me to learn a lot about AI but also to have fun with it. It was amazing to research the AI from my favourite games and adapt it into my own code.
With the player being able to go invisible, change weapons and lose health, the user interface of the game was vital for the player to have a good gaming experience. Consequently, I took some time to implement those UI elements and ensure the player had everything they needed to know from the offset. This includes the objective of the level, their ammunition count, which weapon they have equipped, how much of their power bar they have remaining and if their invisibility is toggled on or off.
As a stealth game, animations play a significant role in conveying the experience. Similar to the AI, I set booleans within the player and enemy classes, which were referenced in their animation blueprints. As a result of the player and enemy soldier sharing the same parent class and having similar movement, setting up the state machines for their respective locomotion was made a lot easier.
I created and maintained a Trello board to organise the design, art and programming tasks.