top of page

My Projects

Featured Project

ASGameplay.png

Astral Spirit

(UE5 GAS / Top Down RPG)

AIWorld.png

AI World (Multiplayer Third Person Shooter)

Fishing for Phishing (Simulation)

Abduct Me!

(3D Platformer)

Oracle Terminal (Third Person Shooter)

Other Projects

Astral Spirit

(Gameplay Ability System)

​Highlights:

  • C++ / Blueprint

  • Gameplay Ability System

  • Fully replicated for Multiplayer

  • Stats/Attribute system

  • XP & Level up system

  • UI/Menu system

  • Enemy AI Behavior Tree, Environment queries

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.

Screenshot 2025-06-03 154522.png

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)

AI World

(Personal project)

​Highlights:

  • Written in C++

  • Multiplayer shooter

  • FABRIK IK

  • Custom game states

  • Respawn system

  • Enhanced Input

  • Different weapon types

ScreenShot00002.png

Screenshots/videos

(Click to view Full screen)

AIWorld_edited_edited.jpg
ScreenShot00000.png

Player Hud

Hosting Multiplayer session online

Game Level

Fishing for Phishing

72-hour 6-person Game jam project

My contributions:

  • set up Level progression

  • Camera zoom/transitions

  • Player hud, menu, Ui

  • Ai behavior / ai spawner

  • Set up game clock, game speed, time limit

  • Player reward balancing

  • fix bugs

  • itch-io.256x256
ScreenShot00008.png

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.

Abduct Me!

36-hour 5-person Game jam project

My contributions:

  • Game pitch / idea

  • Character movement

  • Player hud, menu, Ui

  • level design

  • landscape

  • Game timer

  • speed / add time power ups

  • put everything together into one project (art, sound, animations)

  • Ai (Cow) movement (Added after the game jam)

  • itch-io.256x256
HighresScreenshot00007.png

Screenshots/videos -

Click to view fullScreen

AM_SS.png

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.

Oracle Terminal

Personal project

Highlights:

  • Single-player Shooter

  • Enemy AI pawn sensing

  • Animation Retargeting

  • Character movement

  • Damage/health system

  • pick up system

  • UI widgets

OT2_edited.jpg

Screenshots/Videos -

Click to view FullScreen

OT1_Resized.png

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.

© 2025 Carlos Lee

bottom of page