About
A third-person horror game in Unreal Engine 5 about an aging mage who enters a cursed castle to find a legendary healing flower—the last hope to save his granddaughter. Inspired by Resident Evil Remake, it offers a focused, linear experience with light stealth and deliberate aim-and-shoot combat.
Project Info
Role: Systems Programmer
Team Size: 16
Duration: 7 Weeks
Engine: Unreal Engine
Overview
My main contributions focused on core gameplay systems. I built the saving system, inventory system, and implemented the puzzle logic used throughout the game, ensuring they were stable, scalable, and well-integrated. I also supported VFX integration and other gameplay features when needed. In addition, I was responsible for most of the game’s UI widgets, connecting them directly to the underlying systems architecture I developed.
Inventory System
I developed a lightweight inventory system built around a TMap<EItemType, int32> to track player items. It includes BlueprintCallable helper functions, allowing seamless integration with the HUD and widget blueprints so item data can be displayed dynamically in the UI.
I built a modular ammo UI system with a reusable base widget and an ammo switcher that displays only the currently equipped weapon. The UI updates dynamically through the inventory system, listening to OnInventoryChanged to keep the HUD in sync. Ammo visibility is state-driven, appearing only while aiming, and the rest of the inventory UI follows the same event-based structure.
Puzzle Systems
I implemented both core puzzle systems in the game.
The first is a trigger-based door system, where multiple puzzle trigger actors bind to a door and report when activated. The door tracks the number of triggered locks and opens once all required conditions are met.
I designed and implemented a modular save system, built around a custom SaveGame parent class, structured save data structs, and a dedicated Game Instance handling all save/load logic.
Using a Blueprint Interface to keep responsibilities organized, I implemented async Save, Load, Checkpoint, and Delete functionality. Saving is checkpoint-based (triggered once per checkpoint), while loading is handled through a single centralized function call, keeping the system clean, organized, and scalable.
What I Learned
This project pushed me to deeply understand Unreal Engine 5’s architecture, especially how it differs from Unity. I strengthened my grasp of Blueprint communication, event-driven logic, and writing clean, reusable systems within Unreal’s framework.
I also reflected on my use of Jira, realizing the importance of maintaining consistent and transparent task tracking. While I improved compared to previous projects, I recognized the need for more disciplined, team-oriented workflow management in a professional environment.