Trigger Happy (2025)
Project info
Role:
Technical & System Designer / Project Owner / Lead Designer
Engine:
Unreal Engine
Teamsize:
10
Duration:
4 Weeks
Genre:
FPS
Platform:
PC
About
You play as Happy, a Reaper, an enforcer in a world ruled by ruthless megacorporation's. When a company fails, it’s your job to liquidate everything: assets, personnel, and the building itself. Your next assignment takes you to a massive, bankrupt megatower and nothing inside wants to go quietly.

Introduction
This game was created during a four-week project at Futuregames. We were given three songs to choose from, and we decided to go for something fun and different by picking “Happy” by Pharrell Williams. In our version, Happy is a gun-loving teenage girl whose best friend is her gun, “Sunshine.” This idea let us go a little wild with the design and really lean into the crazy, over-the-top vibe we wanted for the game.
Elevator System
The elevator system was one of the features I spent the most time developing, alongside level management. Initially, I tried moving the elevator between positions, but collisions became an issue since levels weren’t aligned vertically. After some debugging, I switched to teleporting the player between elevators instead, which worked much better.
I created an Elevator Data Handler blueprint with two elevators; one for entering and one for exiting a level and ensured levels loaded and unloaded correctly. This system was used by the level designer to be able to create their levels without any restrictions on sizing, rotation or location.
Code Snippets
Elevator System
Level Management
I created a Level Manager that handles all logic for loading and unloading levels. When the player enters the elevator, it selects a random level to load.
To make testing and progression setup easier, I added the option to define an array of levels that the system goes through in order. Once that list is empty, it switches to selecting random levels. This made it simple to test specific levels or start the player in a particular sequence.
I also implemented event dispatchers in the Level Manager to manage timing for UI updates and connections with other systems. The setup worked well overall, though it could use some refactoring since a few dispatchers currently serve similar purposes due to time constraints.
Code Snippets
Level Manager
UI
UI was one of my main focuses during the project.
I managed it through a UI Controller Component attached to the player, which references the HUD containing all UI update functions. The UI Controller binds to various event dispatchers for updating elements like health, shield, killstreak, recharge, floor info, and enemy count.
These dispatchers receive the necessary data (e.g., current kills, total enemies) and are triggered across different systems. The setup worked smoothly overall but it would also need some refactor together with the event dispatcher on the level manager.
The settings system saves and loads audio, graphics, and control preferences. I ran into an issue where setting music volume to 0 stopped it from playing again. The fix was enabling Unreal’s option to keep audio active even at 0 volume.
Code Snippets
UI Controller
Highscore Save & Load
Handling high score saving and loading required careful setup. I created a player actor component that saves the score on death and adds it to an array in the save system, which loads at the start of a game.
To prevent the array from growing indefinitely, I implemented a system that keeps only the top scores copying, trimming, and updating the array safely. This approach now works reliably and allows setting a maximum number of high scores to store.
Code Snippets
Highscore
Player Abilities
I worked on several player abilities: shuriken, flamethrower, shield, and grenade launcher. The shuriken travels in a straight line, hitting all enemies in its path. The flamethrower deals damage over time, while the shield acts as an extra health bar that regenerates after 3 seconds. The grenade launcher throws grenades that explode on impact, dealing heavy area damage.
The systems worked smoothly overall. The only minor issue was showing the grenade on the weapon before throwing it. Using the actual grenade mesh made it appear too large near the camera, so I added a scaled static mesh on the gun as a visual placeholder. The thrown grenade then uses this position to stay hidden, which worked well.
Grenade
Shuriken
Code Snippets
Grenade
Shuriken

Product Owner
I served as Product Owner and Lead Designer for this project, focusing on keeping the scope manageable and ensuring the game remained cohesive. While the team generally aligned well with our core pillars and intended game feel, I occasionally had to step in to prevent scope creep.
Some “nice-to-have” features were paused or deprioritized when more important tasks required attention. I made these decisions transparently, and the team was understanding, knowing these features could be revisited later. I also guided discussions to keep the team focused on the main game and avoid overly complex systems that couldn’t be implemented in time.
Tools
I created several tools for this project to help the level designers.
One tool allows designers to rotate, move, and scale objects individually using each object’s own pivot rather than a combined pivot.
The screenshot tool lets designers add multiple cameras to a scene, take screenshots from each, and save them locally. I also added a button to delete all cameras at once. Ideally, I would have used Unreal’s bookmarks for this, but they were only accessible via the source code API, which wasn’t available.
Additionally, I built a renaming tool that automatically prefixes files in the outliner based on type for example, textures get T_ and static meshes get SM_.
Code Snippets
Tools

What I learned
This project taught me a lot about keeping code and projects clean. I gained a clear understanding of which parts of the code could be refactored and which areas are not optimally organized. Due to time constraints, I wasn’t able to implement all improvements, but it’s something I plan to address in the future.
The team dynamic was excellent, with a strong focus on transparency, which I believe improved our overall work. After the project, we held a retrospective to discuss what could have been done better and how to improve communication and understanding of each team member’s workload.
.png)




