Idhant

Project
Borne

Action RPG built in Unreal 5, using Gameplay Ability System, and AI. Test your mettle against your jailor as you escape your eternal prison.

SUMMARY

This game was built as an exercise to improve my expertise with Gameplay Ability System and game programming with Unreal Engine 5. The main ideas I've kept in mind while building this project are; to write code that's flexible and Learn the in and outs of GAS.

Project Goals

* Build a robust combat system similar to the soulsborne games made by Fromsoftware.

* Building an extensible weapon system that works with Unreal's Gameplay Ability System, and the stat values, Reusable in future projects.

* Build a Boss AI that's reactive and has a bunch of attack trees and combos.

Project Specifications

* Engine: Unreal Engine, GAS, C++

* Time: 1 month (6h/day)

* Platform: PC

* Team Size: 1 (programmer)

* Plugins and Technologies: Gameplay Ability System, Niagara, UMG, EQS, Pawn Sensing, Behavior Tree, AIServices, Decorators, Tasks

GAME OVERVIEW

* Project Borne is a SoulsBorne inspired combat system game, where you play as a prisoner battling his way out of his prison cell fighting his jailer. Rise, prisoned and choose from multitude of weapons and battle out the jail.

* Pick heavy weapon that pack a punch, or a lighter weapon that have status effects like bleed, and learn the bosses pattern, and reach out to victory.

INITIAL DESIGN

To start off, I ended up analyzing what makes games like these fun, and why I kept going back to the genre.

The player is placed in an seemingly herculean yet possible task, where they have a myriad of tools in their arsenal to target each difficult enemy, with a high focus on agency, and skill expression.

The player is placed in an seemingly herculean yet possible task, where they have a myriad of tools in their arsenal to target each difficult enemy, with a high focus on agency, and skill expression.

While planning, and designing the tech-architecture of my weapon system there were a few challenges I identified;

* Each action needed to have a "Cost" associated with it, to make sure that the player is cognizant of their available resources of all times, and think about actions.

* The boss needed to have multiple "combos" so it feels like it's reading the player's moves.

Each of these issues were targeted and fixed with many architectural decisions, which I will describe in the following sections.

THE PLAYER

Gameplay Ability System, Gameplay Attributes and GAS

To make my features reusable for both the player and the boss, I decided early on to invest in writing a stat system. The player would contain a "StatContianer" that would house the myriad of stats.

THE PROBLEM

But as I decided to scale it, for checks on different abilities having different cost, I started to realize that this would scale too easily. Since The attributes like "Vigor", "Dex", "Strength" etc would be used for almost every action in the game, scaling these would be a little difficult.

THE SOLUTION

The solution was to take a more Interface like approach with these stat values and use Unreal Engine's GAS that does a lot of the initial setup for us. The C++ version of GAS allows us to get into the details and define every little bell and whistles we want.

Now we have a "Ability System Component" that we can attach to both our players and our bosses. All our stats are setup at construction, with their default values, and our abilities each have an ActivateAbility method that checks to see if you have the stats available of the action you want to perform, this allows it to be very flexible.

Code of dodge ability

ActivateAbility method that gets called when you press the dodge button,

executed on the Gameplay Ability Component

THE WEAPONS

Weapon System working in Tandem with the player Stats

I wanted the weapon system to be flexible enough so that once you create a type of weapon, you don't need to interface with code to make many of its types. Weapons would be categorized in weight types like "Heavy" and "Light", which change how much stamina each attack take, and "Sword", "Knives" which change what type of attack combos are played.

Further, I also wanted functionality for status effects like "Bleed", "Poison" and additional effects like "Stance breaking" on heavy weapons once a stance system was created for the boss.

* To solve this issue, I relied on a classic OOP approach. One base weapon class for each type, that allows us to define base parameters which each weapon can define its own values for.

* Enums like DamageType (for status effects like bleed),WeaponClass (for animation data and recovery speeds), and ComboType allow us to mix and match any type of light, medium and heavy weapon with different animations

* This lets us create varied weapons based on different animations and stat requirements and damage. It gives weapons unique movesets but also make the core functionality easy.

Click for a closer look!!

Attack function, an ability taking in the stats, and the cost and speed of the weapons

to determine if you can attack and with how much damage

THE BOSS

The Main Villain, the Sauce of the game

The bosses are the main draw of fromsoft games, so I had to make sure that mine was good too. Using Behavior trees, EQS, and pawn sensing, allowed me to make a basic behavior tree, allowing the boss to walk, attack and chase the player. But like almost everything in game programming, I ran into a problem.

THE PROBLEM

The bosses "moveset" felt quite static if the behavior tree was just run as it was made. Run up to the player, and attack them. Some randomness did help add to the variety, but not enough.

THE SOLUTION

I ended up doing something called "State Reading". Before picking an action, the boss AI makes a few checks to see if the player is in a certain state. Whether they are "far away", "close", "have just attacked etc" and takes that into account before picking an action.

Image of a flowchart showing steam sessions

A basic flow explaining "State Reading"

This allowed for the boss to be more "reactive". Allowing him to pounce at the player when the player expects him to throw his knives. The bosses also has a close distance increasing attack that pushes the player back, all that mixed up with randomness make him feel more like an enemy rather than an AI. 3 combos, leading into each other, with different recovery frames between each, allowing the player to punish if they dodge properly and learn his moveset.

CLOSING THOUGHTS

This project pushed me past my limits, and then more. I learnt so much about system design, boss AI programming, and how to manage scope while also making something cool that I want to make. Though this project is not without things I wanted to do more:

* Plan tech architecture/milestones more effective; a lot of features ended up taking more dev time than required, because appropriate planning and documentation wasn't done before tackling them.

* Extend the stat system; the current stat system, although being quite extensible still is somewhat "basic" for my tastes. Some potential additions that would ask for little dev time but help with making the game feel better would be; attacks that limit stats (max health/max stamina), animation speed/invulnerability frames based on stats rather than equip load etc.

* Optimization; this is an never ending pursuit, though one I try and strive towards. I have a few ideas on how to optimize my code, especially for the boss AI. As it is right now, it's not too bad, however, the checks can definitely be done at a smaller amount, and can be based on player action rather than time.

Devlog:

Gallery:

hover over the images!

Weapon System with attributes UI
Fog gate portal just before the boss fight
Boss swinging his weapon
Jump attack
Training range and damage values
Well done, warrior. You are free.
VER 3.0.1
* I am an Game Developer specializing in Gameplay Programming, Graphics, Feature programming and leading teams. With a knack for creating distict gameplay experiences, my work spans different platforms, seamlessly blending strategic thinking with cross-team solutions.
NEWCASTLE UPON TYNE 5.12.2025
IDHANT DABRAL
ALL RIGHTS RESERVED
  • Email

    i.dabral26@gmail.com

  • Location

    Newcastle Upon Tyne, UK

Building a game?

Lets Chat.