Jeff Stevenson - Gameplay Programmer
Jeff Stevenson - Gameplay Programmer
Work In Progress
In-progress gameplay footage
Engine: Unreal Engine 5
Project Duration: 2 Months (September 2025 - Present) - Work In Progress
Team Size: 13Â
Role: Lead Programmer
COLDSNAP is a 3D, third-person, action roguelike with an emphasis on upgrades and a tight-handling melee combat system. This project is currently being developed as a year-long senior capstone project by myself and my group at the University of Central Florida's Game Design program. The project began full development in October 2025 and will continue production until the end of April 2026.
As Lead Programmer on our team, I am responsible for overseeing the codebase for the project, creating and managing tasking for the rest of the programming team, creating core system architecture, and ensuring polish across game mechanics. I am also the sole programmer working within C++ and am specifically responsible for the architecture and implementation of Unreal Engine's Gameplay Ability System (GAS) in both C++ and Blueprints.
COLDSNAP features a high-speed, high-control-fidelity combat system that emphasizes flashy aerial combos. The player can press light and heavy attack buttons to perform attack combos according to a predefined combo tree. Each attack has its own unique animation, hitboxes, knockback forces, and damage. I constructed the system for creating hitboxes, performing attacks, and hitting enemies to support the intended design pillars described above.
The entire combat system is implemented using Unreal Engine's Gameplay Ability System, or GAS. GAS provides a framework to support creating abilities with cooldowns, effects, and specific triggers. To create the combo tree system for attacks, I created a base MeleeAttackGameplayAbility that inherits from the base GameplayAbility class from GAS. This base class is created in C++ and outlines functions for creating hitboxes and hitting objects. Child attack abilities are then made in Blueprints and call the attack's specific animation clip, which uses a custom HitboxAnimNotify notify state to spawn hitboxes unique to that attack on the correct frames. Each individual attack ability has its own Gameplay Tag that is applied to the player when the ability is performed, with further attacks down the combo tree requiring specific tags of previous attacks in order to be activated. This allows for easy implementation of the combo tree, changing which attack is performed based on attacks previously executed.
Screenshot of the hitbox editor notify state, allowing for visual editing of hitbox transform and damage values
The custom HitboxAnimNotify state allows for hitboxes to be created within the Animation Montage window in Unreal. Debug capsules are used as visual representations of the hitboxes on the attack. This custom notify state takes in parameters for hitbox transform data, knockback, damage, and duration, allowing easily adjustable and custom-fit hitboxes for each attack without any new scripting or Blueprinting.
Screenshot of the current upgrade equip screen, allowing upgrades to be equipped to different parts of the robot for different resulting effects
Throughout gameplay, players encounter various upgrade cores that can be equipped to grow stronger. The upgrade system of the game allows for three different attachment options when equipping an upgrade: arms, legs, and fuel (a fourth "torso" attachment point is currently being implemented as well for further upgrade variation). Each upgrade has a overarching theme, such as the "Agile Core" seen above, which all of its different equip effects relate back to. Depending on where the upgrade is equipped to on the robot, a different enhancement is granted.
Building this system required more heavy integration of GAS into the player scripts of the game. GAS allows for Gameplay Effects to be created very easily within Blueprints, which can provide a number of statistical changes to Gameplay Attributes on a given Actor. In order to set up this upgrade system, I created multiple Gameplay Attribute Set classes in C++ that are granted to the PlayerCharacter class on construction. These attribute sets contain attributes for all possible stats and effects that upgrades may interact with. This includes parameters of the movement component and custom attributes such as lifesteal chance, dash speed, and more. In C++, I define the architecture for all of these attributes and right OnAttributeChanged functions for them, which are fired by GAS when the attribute is changed. Each function must then update the end value (such as Walk Speed on the Character Movement Component when adjusting player speed, for instance).
Subscription of some attribute changed events to the GAS delegates
Defintion of a few attribute changed events connecting GAS attributes to component variables