My Projects
Main / Load menu
Overview:
I implemented a Load Menu using the Model-View-ViewModel (MVVM) design pattern in Unreal Engine 5. The screen features three load slots, each displaying saved game data (e.g., save name, map level, player level), and is fully reactive to data changes.
Key Features:
-
Dynamic Data binding:
-
Each load slot is bound to its own ViewModel
-
UI updates automatically when save game data changes (e.g., when slot is overwritten or deleted)
-
-
Reusable ViewModels:
-
Created a ULoadSlotViewModel to manage display logic for each slot
-
Exposed data like PlayerName, MapName, and PlayerLevel
-
-
Scalability:
-
Easily expandable to more slots or different save profiles by adding new ViewModel instances.
-
Project Showcase
Custom Gameplay Ability class
Overview:
I implemented damage abilities using the Gameplay Ability System. Each ability features custom targeting logic, VFX, Damage effects, and anim montages. Additionally, I created a custom GameplayAbility class, which applies customizable damage effect parameters such as knockback chance or debuff chance. This class allows for modular extension across different damage abilities.
Key Features:
-
Custom UASDamageGameplayAbility class:
-
All damage abilities inherit from this class.
-
-
Gameplay Effects integration:
-
Effects include damage over time, stun, knockback, and burst damage.
-
Saving player data
Overview:
I implemented full save/load logic in a custom GameModeBase class, using a GAS-integrated custom USaveGame object. This system captures and stores all relevant player data (attributes, abilities, gameplay tags, level, XP, and last checkpoint).
Key Features:
-
Save Game Logic:
-
Creates a custom USaveGame object and populates it with relevant player data
-
-
Load Game Logic:
-
Load the specified save slot
-
Restores all previously saved properties including GAS attributes and abilities
-
Transitions the player to the correct map
-
Checkpoint / Map Transition
Overview:
I created a custom PlayerStart class to manage player checkpoints throughout the game. This class is responsible for tracking player progress, setting respawn locations, and saving game state. It serves as the parent class for more advanced checkpoint types like Map Entrances, which handles map transitions.
Key Features:
-
Activation Logic:
-
When the player overlaps with a checkpoint, saves progress
-
When the player overlaps with a map entrance, load to the destination map
-
UI - Attributes / Skill Tree
Overview:
I implemented a Widget Controller architecture using the Model-View-Controller (MVC) pattern. Each major UI menu — such as the Attribute Menu and Skill Menu — is backed by a dedicated C++ controller that handles data fetching and logic, keeping the UI widgets themselves focused purely on presentation.
Key Features:
-
Attribute Menu Widget Controller:
-
Queries player attributes from the AttributeSet.
-
Listens for value changes and updates UI accordingly.
-
-
Skill Menu Widget Controller:
-
Manages logic for selecting and deselecting skills for equipping or upgrading, using gameplay tags
-
Determines if buttons should be enabled by filtering which abilities are available the player based on level progression state.
-
Loot Drops
Overview:
To support randomized but controlled item drops, I implemented a Loot Tiers system. This system determines what items an enemy drops on death, based on a tiered rarity structure and customizable drop rates.
Key Features:
-
Random Selection by Probability:
-
Items are selected using a weighted random system based on tier probability.
-
-
Scalable Design:
-
New item types or tier types can be added without changing the loot logic — just by updating the data list.
-

AI Behavior tree (Click to enlarge image)
Overview:
I created a modular enemy AI system using Unreal Engine’s Behavior Tree and Blackboard system. The tree supports both melee and ranged combat AI, with dynamic decision-making based on player distance, current state (e.g., stunned, hit reacting), and ability cooldowns. Enemy state is synchronized with Gameplay Tags, allowing effects like stun and death to interrupt and redirect AI behavior cleanly.
Key Features:
-
Dynamic Targeting:
-
The FindNearestPlayer task runs every x amount of seconds, constantly updating TargetToFollow and DistanceToTarget.
-
-
State Checks Before Action:
-
Enemies only act when:
-
A valid target is detected
-
Not stunned or reacting to being hit
-
They are still alive
-
-
-
Combat:
-
Ranged Attacker:
-
If marked as ranged and within range:
-
Runs EQS to find an optimal position (Run EQS Query)
-
Moves to position and attacks (Ranged Attack)
-
-
-
Melee Attacker:
-
If within attack range:
-
Moves close and attacks (Melee Attack)
-
-
-
Screenshots/videos
(Click to view Full screen)


Player Hud
Hosting Multiplayer session online
Game Level
Screenshots/Videos
(Click to view fullScreen)

First Phase
Gameplay footage
Player HUD
BLueprints - Game timer (Click image to zoom)




The timer/clock starts at 9:00 and ends at 5:00PM (17:00). When it reaches 5PM, the day is over, and the end of round screen widget will appear displaying all the stats saved from the player blueprint. Designed to show only the hour mark, and not every minute of the day.
Blueprints - AI Spawn & Game instance



Game Instance contains all the variables for days, rewards and AI spawning multipliers. Customers (AI) spawn every X amount of seconds determined by the current level which is set in the game instance. The delay is added every start of a level for "set up" time.
Blueprints - Set up Level & Camera functionality




When the player loads into the level, the game plays the appropriate music, sets the camera location (there are 2 minigame modes) and the HUD widget to show the current day, money earned, and rent goal. The camera switches from one location to another when the game modes are toggled, smoothly transitioning using Timeline.
Screenshots/videos -
Click to view fullScreen

First Phase
Gameplay Footage
Gameplay Screenshot
Blueprints - Countdown Timer



A simple countdown timer rounded to two decimal places displayed at the top of the screen which triggers an end screen widget when it ends. The countdown variable can be manipulated through time powerups.
Blueprints - Powerups




The powerups are destroyed from the map when colliding with the player tag. The time powerup adds seconds into the countdown widget and triggers a screen prompt temporarily. The speed powerup increases the speed of the player for a set amount of time and creates a temporary screen prompt. Previously had a bug that was fixed - multiple screen prompts could be created at the same time; I simply had to remove the screen prompt widget before creating one.
Screenshots/Videos -
Click to view FullScreen


Game Screenshot
Gameplay Footage
Boss Fight Screenshot
Blueprints - AI Behavior




Enemy AI uses pawn sensing that moves to the player when within a certain radius, then when it has reached close enough, the melee AI will start swinging. Projectiles / Melee attacks have a collision that does damage when overlapped with player and vice versa. Health widgets are shown above AI enemy minions except bosses, which are shown on player's UI once the boss area is triggered.
Blueprints - Player Movement & Aim/Shoot




Character movement has an added "roll" uses to dodge enemy attacks. The correct rotation of the character is needed to animate it correctly according to the direction it's going. Aiming in third person is done through Timeline using two different camera locations. Shooting is done through line tracing starting from the rifle muzzle point and applying damage to actors hit by it.