top of page
CoverPhoto.png

Platform: PC

Engine: Unreal Engine 5.4

Roles: Gameplay Programmer
Development Duration: Aug 2025 - Feb 2026

This project was in the prototype phase of development before being completely canceled. As such, I only have permission to provide examples of the work I completed.

MY ROLE
 

  • Worked with Design team to develop a Spell-Based combat system in Unreal Engine 5.4
     

  • Using the gameplay ability system, I created the framework for what would have been a robust Spell System using a Base Spell that could be manipulated for individual spell techniques.
     

  • Using the developed frame work, I created the first set of spells with their own custom logic.

SPELL FRAMEWORK WORKFLOW

Spell System.png

PLAYER INPUT
 

  • This system uses Unreal's Enhanced Input for Casting Spells

    • Uses a "Hold" InputAction to allow for single press / hold spells

    • On Press, initiates the spell by calling Cast Current Spell

    • On Release, the Complete Spell Cast is called

  • Additionally a standard Pressed Input Action is used to toggle mystic art which when toggled will apply an upgraded spec of the same spell that is cast

image.png
image.png

Bindings are set for Triggered and Completed for IA_CastSpell, and Triggered for IA_ToggleMysticArt in the playerController

SPELL SYSTEM COMPONENT
 

  • The spell system component is a child of the Unreal Actor Component that manages all spell based actions including:​​

    • Granting a list of spells(abilities) to the player's Gameplay Ability System when the game starts​

    • Getting the spawn location via Socket placed on the Player / Actor.

    • Houses the spell casting logic triggered from player input, and associated logic that occurs during spell casts through a delegate placed on the component

    • Toggling and Verifying "Mystic Art" triggered from player input, which can be through of similar to an Ultimate or upgraded version of the spell

    • Leveling up spells which will scale size / attributes of the spell as the spell becomes more powerful

The Input Actions call:

  • CastCurrentSpell on Press, which will call CastSpell in relation to a preselected spell, and toggles the bool flag for casting

  • CompleteCurrentSpell on Release, which resets MysticArt state and allows for another spell to be cast

BASE SPELL
 

  • The Base Spell is the frame work for which all spells are developed from

    • Child of the Gameplay Ability class​

    • Overrides PreActivate, ActivateAbility, and EndAbility methods and implements custom logic for the entire system:

      • Pre Activate:​

        • We retrieve the spell system component from the Caster using an Interface that has been placed on the BaseCharacter class​

      • Activate:

        • Verifies Spell Has correct Gameplay Effects for Mana and Cooldown, and tags associated for the spell

        • Applies a Spec Handle based on if spell is Mystic Art or Not

        • Verifies Spell can be cast

          • Ability can be activated (through the GAS system's native method

          • Spell caster has enough mana to cast​

          • Caster has a Spell System Component and Attribute Set

          • Commits the ability

        • Plays a selected animation​

        • Sets a timer to end the ability based on intended cast time

        • Spawns the attached Spell Actor

          • Uses spawn actor deferred so we can update:​​

            • Applies scaling based on the kind of spell​

              • Damage​​

              • Projectile Size

              • Bonuses to the character such as health, mana, mystic art

            • After scaling is applied, Finish Spawning is called

        • Waits for an event associated with the event tag

          • This varies between spells, at the basic level if a spell collides with a target then onCollision we send an event tag to the ability owner which will Trigger the ApplyEffects Method.​ The Apply Effects method will apply stat changes to the Owner or Target based on the spell, using the associated GameplayEffects.

        • Calls End Ability using a timer to complete the spell based on the intended spell time​​

      • EndAbility:

        • Resets Mystic Art Toggle​

        • Destroys the spell actor

    • There are additional methods here that are used as virtual functions that have some basic logic for standard spells that shoot a projectile with the intention that the child classes will override them with custom logic​

      • SetSpawnAndTargetLocations​

        • Updates the Location of where the spell projectile is ​and the target location where it's aimed

      • ApplyEffectToTarget

        • Method that is used to apply an effect to target, this can be overridden in the event the target needs to change such as the caster receiving the effect. ​

      • ApplySpellScalingBasedonLevel

        • Scaled projectile size, damage, and other attributes, it can be overridden to add scaling to spell specific attributes such as durability on the hourglass spell​

      • ScaleAbilityDamage​

        • Method for scaling damage specifically, this can be overridden if a spell isn't damaging anyone.​

      • ​ApplyEffectSpec

        • This method updates the effect spec which by default just sets baseDamage, it can be overriden in the event different attributes need to be updated such as the hourglass spell which restores attributes to the player.​​​

      • GetTotalAbilityTime​

        • This method returns total ability time. This can vary between spells based on how they work, since not all spells are a standard projectile with velocity.​

      • WaitForAbilityEvents​

        • This method is used to create WaitGameplayEvents so we can apply an effect to a target. It can be overridden in the event more than one task needs to be created for some spells.​

BASE SPELL
 

  • There are additional methods here that are used as virtual functions that have some basic logic for standard spells that shoot a projectile with the intention that the child classes will override them with custom logic​, this isn't a full list but some examples of how this was implemented.​​

    • WaitForAbilityEvents​

      • This method is used to create WaitGameplayEvents so we can apply an effect to a target. It can be overridden in the event more than one task needs to be created for some spells.​

    • GetTotalAbilityTime​

      • This method returns total ability time. This can vary between spells based on how they work, since not all spells are a standard projectile with velocity.​

    • ​ApplyEffectSpec

      • This method updates the effect spec which by default just sets baseDamage, it can be overriden in the event different attributes need to be updated such as the hourglass spell which restores attributes to the player.​​​

    • ScaleAbilityDamage​

      • Method for scaling damage specifically, this can be overridden if a spell isn't damaging anyone.​

    • ApplySpellScalingBasedonLevel

      • Scaled projectile size, damage, and other attributes, it can be overridden to add scaling to spell specific attributes such as durability on the hourglass spell​

    • ApplyEffectToTarget

      • Method that is used to apply an effect to target, this can be overridden in the event the target needs to change such as the caster receiving the effect. ​

    • SetSpawnAndTargetLocations​

      • Updates the Location of where the spell projectile is ​and the target location where it's aimed

BASE SPELL ACTOR
 

  • The base spell actor acts as the framework for all projectile or derived spell actors, since spell actors could be a projectile like a bullet hurling towards the target or they could be stationary for a encompassing area, the Base Spell actor acts as the parent class for the different variations.​

    • Scaling functions that are intended to be overridden on the child classes are placed here such as damage, travel distance, Durability, etc.​

    • Includes a collider which is used to activate spell functionality based on collision

    • HandleOverlap: This method is bound to the delegate of a SpellActor's collider, for example in the Base Projectile which is used for the ThunderClapSpell, we associate HandleOverlap to the sphereCollider.  This sends an event to the caster's ability, which triggers the GamePlay Event, and applies the effects associated to the spell, that was created during the Spell Activation.​​

bottom of page