Finders Keepers
Project 6 at The Game Assembly, a third person game
Synopsis
Play as a master thief contracted to infiltrate the king's keep. Snatch powerful arcane crystals, enabling you to perform acrobatic traversal, evade the watchers and steal the priceless hierloom.
Development
This game was developed by a group of 20 students at The Game Assembly in our own custom made engine.
Contributions
My primary contributions during this game project was enemy AI, UI implementation, environmental hazards, visual scripting system for pickups and VFX, environmental movement and VFX implementation as well as animation blend space.
UI, Slideshows & Subtitles
Menues
All the menues in game were created using my UI Editor tool.
Intro & Outro slideshows
I also created more functionality for the UI Editor tool to add support for displaying slideshows. This functionality was used to create the intro and outro cinematic slideshows.

Subtitles & Pop ups
In order to allow other disciplines to replace or reposition the pop ups in game (like "Press E to Interact" or "Checkpoint") I added functionality to preview the placement in the UI Editor and export a layout that could be faded in or out using an event system.
I created a subtitle manager that could cooperate with our sound manager in order to fade in the correct subtitles and fade them out when the voice line was finished.


Visual Scripting
I expanded our visual scripting system to include functionality for our technical artists to activate VFX on specific objects or free floating VFX in the game world.
I also created visual scripting functionality later used in our scripted event to play a specific animation and fade in the tutorial pop ups.

Enemy AI Behaviour
The enemies had three different patrolling sequences. I created a system where level design could place patrolling positions in their level and assign these to a specific enemy. When the level was loaded to the engine, my system would create a suitable patrolling behaviour: static (watcher), cyclic or noncyclic.

Detection frustum vs vision radius
To make the enemy behaviour more realistic I created a detection frustum for the enemy vision, which enables the player to sneak behind the enemies. We soon noticed that the game got too easy and the AI seemed dumb if the enemies didn't notice you at all while you were walking behind them. Therefore I added a small vision radius that would trigger the enemy to turn around if the player came too close.

Enemy attacks
I created functionality to allow the enemy to shoot projectiles (following the animation) once the distance between them reached a certain threshold. In early iterations the enemy would cancel their attack in order to chase the player if the player moved further away. This looked very weird and caused a lot of issues with animation blending. Therefore I instead made sure the enemy finished their attack before repositioning themselves closer to the player. In cases where the player was far away I implemented so the enemy instead returned to their patrol.

Environmental Hazards
Swinging Axes
When I created the movement for the swinging axes I created a system that enabled our level designers to easily and independently tweak values for individual axes in order to change the degrees and tempo of the swing. All axe variations displayed here use the same system but has different inputs from level design to create different variations.



Hazard Floors
I implemented electrical fields with a shader created by technical art and a special collision layer in order to trigger the electrified animation. I also used the texture for the enemy projectiles to create a VFX using the player mesh in order to exaggerate the electrocution.

Environmental movement & VFX Implementation
Rotating cogwheels
To make the environment more interesting I added some movement to the environment f.ex. by rotating the cogwheels throughout the game.

After Image
I created the after image trail by pooling 10 player meshes with the after image texture. Then I made sure that when the player entered a specific state, the after images would copy the player transform matrix and become visible for a limited time.

Animation blend space
I implemented animation blend space to blend one animation with another using a factor computed between 0 and 1. In the case below you can see how a fear factor is used to gradually blend "scared run" into "normal run" when the player gets closer to an enemy.



What I learned
During this project I learned a lot about creating more interesting AI behaviour (for example implementing a detection frustum) as well as how to combine our physX system with our navmesh system to limit enemy movement and fascilitate for pathfinding. I also learned more about visual scripting, specifically using and expanding a visual scripting system to create functionality for technical artists and level designers. I gained more insights into creating blend space animations and the caveats one has to consider when blending animations gradually.
Credits
Water Leaks Studio
Programming
- Ylver Blum Buer
- Elias Ronefors
- David Grahn
- Abraham Alberto
- Erik Edfors
- Jonathan Rozenberg
Graphics
- Melker Ljung
- Marcus Carlsson
- Kim Betsgren
- Milla Jaakkola Landin
- Emmett Motamed
Level Design
- Johan Rosdahl
- Erik Gatewood
- Ahab Ibrahim
Animators
- Theo Hübner Sallis
- Emilia Eriksson
- Rebecca Kornemalm
Technical Art
- Isabelle Neuman
- Elvira Paxborn
- Philip Bäcklund
Third Party
FMOD Studio by Firelight Technologies
Level building in Unreal Engine by Epic Games Inc.





