KTFR
Reiterating mission brief. Your task is locating and neutralizing Major Ajax Grey, suspected of breaking into decommissioned facility number 3682 belonging to Obsidian Blade technologies and unlawfully appropriating military grade company tech. On-site you are also obliged to destroy any remaining Class 6 records and equipment in order to prevent further misused by unauthorized entities. End of mission brief.
My Roles
Lead Programmer, Tech Designer
Team Size
8
Engine
Unreal Engine
Timespan
4 Weeks
The Concept
KTFR is a tactical shooter game inspired by the story-driven hardcore shooter game GTFO as well as the bodycam game demo Deppart. We wanted to put our own twist on it, you play as a special ops soldier infiltrating a facility of advanced robots to eliminate an ex-military soldier gone rogue. Part of the assignment from our university was to base the game on one of a select list of songs, and we chose "How To Dissapear Completely" by Radiohead, which tied into the narrative of the game.
As the lead programmer, I took on the role of managing the other programmers and assigning areas for everyone to work on. I personally wanted to challenge myself to work more with blueprints as well as make AI for the game. Therefore I ended up working on the enemies in the game and tying in their gameplay with blueprint functions for more modularity and designer accessibility. Additionally, I also made some UI for the game such as the HUD and worked on other random smaller programming tasks that needed to be completed.

I wanted to challenge myself for this game project, so I set out to learn a new system. I used Unreal Engine's StateTree combined with C++ functions for optimization. I prioritized making performance heavy systems in code, with blueprint callable functions to access them. I wanted the AI to be dynamic and scalable and choose different behavior types on the fly, such as some enemy types being very aggressive and then retreating into cover at low health. Other enemies always prioritizing taking cover and repositioning to more advantageous positions. I use Environment Query System (EQS) to find viable cover positions. It checks if the position is within a certain distance from the player, is out of sight and is next to a wall and picks the best one, telling the AI to move there.
Originally, all enemies spawned at once in a level. We realized this was not very optimized, and therefore I set out to implement a spawning system. We can trigger it through a collider or through another event, so it is very flexible. This can lead to things like enemies suddenly spawning behind the player in an ambush, or only populating half the level with enemies until the player reaches a checkpoint. I also used this system for the final boss, where we spawn endless waves of enemies as well as one final wave triggered once the boss fight progresses to a certain point.
The enemy spawning was a good start, but to further optimize the game we also load each level individually in the game. At certain points in the game, the player enters elevators which exist in the persistent level. They unload the previously loaded level and load in the next one. This also became the perfect place to put lore for the game. Instead of distracting the player with dialogue in the middle of combat, we play it during the elevator "travel time" (where we load the level async). Additionally, they serve as a respawn if the player dies through the playthrough. If any area becomes performance tanking, we can just cut it up into smaller levels with elevator segments in between.
Other than the main things, I filled in and aimed to fix the gaps wherever needed such as conveyor belts that can move objects and entities to make the factory feel more alive.
Overall as a project, I am very happy with how the game came out to be in the end. We scoped it hard and delivered practically everything we aimed to do.








