top of page
Game Programmer
Self-study project. Started in the end of 2023.
GAS CO-OP RPG

Project Information:
-
Game Genre: RPG
-
Role: Gameplay programmer
-
Team Size: 1
-
Duration: 2.5 months so far
-
Engine: Unreal Engine 5.4 (C++ & GAS)
-
Tools: Git
Note: This project is not a finished project and I am still working on it.
Project Summary:
I started working on this project in the beginning of 2024. This project started as a personal project and was later picked up as Y4 self-study project at BUas. RPG project - is a top-down RPG game build in Unreal Engine using Gameplay Ability System and C++. This project is being developed as a co-op multiplayer game. This is a solo project, work done for this project includes:
-
Character with Primary and Secondary attributes.
-
Equipment, Abilities
-
Enemy AI and more...
Character attributes & attribute menu

To build UI I followed Model-Controller-View pattern which allows me to maintain one way dependency between classes. Data, in my case - attribute set, doesn't know anything about UI or Controllers, it only provides delegates for Controllers to subscribe to; Controllers only interact with Data - process and broadcast it again, for controllers it doesn't matter which widgets subscribe to them. This allows for multiple widgets to subscribe to the same widget controller class.
Additional attribute information such as tooltip text, number display mode, and dependencies are all contained within a data asset, on start of the game Attribute Menu Controller will loop through all attributes, match them to attribute information in the data asset using gameplay tags, and broadcast processed information.
After setting up an attribute set, created an attribute menu which players can use to preview all information about their characters. Currently attribute set contains more than 30 attributes, most of which already affect gameplay - outgoing & received damage and more.

Retrieving Attribute Information


Combat & Interaction interfaces, First Ability & Dealing damage

To describe behavior shared across multiple classes I use interfaces. Currently, I created 2 interfaces - Combat & Interaction interfaces. Interaction interface is responsible for highlighting selected actors, sending interaction requests and more. Combat interface takes care of all combat related features: retrieving combat related animation montages and sockets, updating actor's targets, getting combat related information such as target's level and more.
Any damaging gameplay effect ability, as seen in the video above, can apply multiple damage types simultaneously.

I use Gameplay tags to represent attributes, tags are also used to tie related attributes together, for example: game features different damage types, and each damage type is linked to a damage type resistance attribute using gameplay tags. In the project gameplay tags are stored in a singleton structure, which is initialized during initial loading in an asset manager. Gameplay tags also link damage types to damage meta attributes. PostGameplayEffectExecute (Screenshot below) iterates through damage meta attributes set by DamageExecCalculation, deals damage & sends information about received damage to players.

Attacks can critical strike, miss and more. To pass information about an attack to clients I use Gameplay Effect Context class. Information about an attack is first packed into an 8 bit integer and then net serialized.
Enemies (Work in progress)
Melee & Ranged Enemies
Enemies Level Scaling
Experience & Level Ups



Different enemy types: Warriors, Archers, Mages and more.
Enemies use EQS for decision making.
Enemies scale with their level. High level difference between an enemy and the player additionally multiplies their stats.
Slaying enemies rewards players with experience. Gain enough experience and you will level up.
Inventory & Equipment (Work in progress)
Items & Inventory

Created inventory component, loot manager and equipment system. The loot manager is responsible for generating random equipment. Loot drops from killing enemies or opening chests (WIP).
Equipment

Equipment has randomized attributes and quality. Each piece of equipment has default attributes and optional attributes. The quality and amount of optional attributes depends on the rarity of the item. Added tooltip for item comparisons.
Abilities, Ability Menu & Equipping Abilities
Ability Menu

Added ability menu, using this menu the player can unlock new abilities, or upgrade already owned abilities.

Abilities are defined through a data asset. Each ability has a unique Gameplay Tag, which is used to identify that ability throughout the game, for example: each Ability Slot is also given a tag, using that tag the ability slot knows when to update its status or visuals.

Equipped Abilities

Same menu can be used to customize your equipped abilities. Character Overlay UI displays cooldowns of your abilities.

Ability Specs are given to the player character when the game starts, but abilities are not activatable until the player equips them.
Combat Improvements
Debuffs


Implemented debuffs and a debuff component. Debuff component supports application of multiple debuffs at the same time. (Example: applying bleed and burn).
Buffs are applied using Gameplay Tags. Buff Component subscribes to the owner ACS and listens for changes in Gameplay Tag counts.
Knockback and CC
Added optional knockback to abilities. Other crowd control status effects are in currently in development (Stun, Silence and more).
Electrocute (Slows)

Stun (Disables)

Knockback


Improved HUD
Additionally, added a buff / debuff bar, which displays all effects currently affecting the player.
Coming soon...
Dungeons
Dungeon Generator


Work In Progress. Room and Corridor based dungeon generator.
Gameplay
New Abilities & Passive Abilities




Work In Progress. New AOE abilities. With new debuff types.
Weapon Type <-> Ability compatibility.

Load & Save
Main Menu

Work In Progress. Ability to save and load your progress with multiple save slots.
bottom of page