Skip to Content

Liminal Detective is a Third Person Mystery-Action hybrid where you defeat demons and solve the mystery of who murdered your brother.

It was developed from January 2024 to May 2024 with a team of 9 people on Unreal Engine 5.

Liminal Detective has the player alternating between combat and mystery sections. In the beginning of each room, the player must utilize their special abilities, such as casting energy attacks and grabbing objects or enemies, to defeat the demons that haunt the room and find the clue that is on one of the enemies. Afterwards, they use that item to interrogate other characters on the phone. After discovering all of the clues, they must figure out who committed the crime, and then fight them afterwards.

Gameplay Image of Liminal Detective. The player is grabbing and throwing an enemy.

Primary Contributions

I worked on creating, designing, and implementing the combat, which includes implementation of classic over the shoulder third person controls. This implementation was done through Unreal Engine 5’s Blueprints visual scripting system, which came with benefits and challenges for the team.

While I enjoyed using the scripting system for certain tasks, there were periods where both I and the programmers felt very constrained by some of the limitations of the system. The programmers had to take time to learn Blueprints and visual scripting, while I also had periods of time where I had difficulty organizing and cleaning the encroaching spaghetti of scripts and code modules.

Blueprint script for player abilities and attacks.

A core feature of the game is being able to grab and throw physics objects or enemies themselves to do damage. This feature was challenging to implementing into the game, and required many revisions, testing, and workaround solutions to make it to final release. Implementing this feature required various flowchart drafts, which helped significantly during implementation. Overall, I am very pleased with the result.

Blueprint script for grabbing and throwing objects and enemies.

Enemy AI

I also worked closely with programmers to implement the enemy behavior for the game, using Unreal Engine 5’s Behavior Tree system. I worked with the primary AI programmer, Jeffrey, in pair programming sessions in person to implement behavior nodes for the tree and fix any bugs that might come up with the gameplay abilities the player has. When we had to access the project on seperate computers, we utilized SVN version control’s locking system to ensure that merge conflicts wouldn’t occur with the binary file system that Unreal utilizes.

An example of an enemy behavior tree in UE5.

Visual Contributions

I collaborated with artists and programmers to help create visual effects and UI elements that were cohesive with the rest of the art style for the game. When we weren’t meeting in person for artistic discussions and feedback for our work, we would utilize Mattermost to get feedback on the work that was done over each work session. We also utilized SVN when artists were in engine, so we wouldn’t run into disruptive merge conflicts.

Enemy Destruction Visual Effect in editor

Testing and Playtester Feedback

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Retrospective

Working on this project was a great learning experience.

A mistake we made near the beginning of development was going for a primarily Blueprints project, as we locked ourselves out of using C++ and some of the benefits working in a classic programming language gave us.

The team was made up of a very diverse group of people with various backgrounds, experiences, and personalities. It was also the largest team I had worked in to that point. I learned how to mediate between strong personalities in the group, coordinate between disciplines on a larger team, and communicate ideas effectively and respectfully amongst the team.

You can download and play it here on itch.io.