Overview
This was a small project I had started working on while on break from school. With guidance from a tutorial, I put together a turn based RPG system and blueprints in Unreal Engine 5 to control the battle, as well as all the menus the player would interact with to use the different attacks, spells, skills, and items at their disposal.
When I began this project, I was still learning a lot about how to actually make games and work within Unreal Engine 5. As such, it originally started as me following a tutorial to put together the basic gameplay system for a turn based RPG. On top of learning how much more complicating a turn based RPG’s system actually is to create, I also started diverting from the tutorial in certain areas because I had my own ideas for what I wanted from this system. The end result was me encountering some problems that I had to solve on my own, making it a much larger learning experience than I had originally expected it to be.
What I Changed/Added
With the tutorial I was following, it made a standard RPG experience with a party of characters for the player to control. However, with the idea I was running with, I would only have a single character for the player to control, and as such would need a way to balance around that. One of those decisions was giving an additional function to the characters Agility stat. On top of adjusting the characters dodge chance and accuracy with the Agility stat, I also made it so that the more Agility the player had, the more turns the player would get in that round of combat. This way, it’ll give the player a decision to make, deciding between increasing the amount of damage their abilities can do but only getting one or two turns each round, or dealing less damage with their abilities but getting upwards of six turns in a round.
2 Agility
Agility Affecting The Player
8 Agility
Multi Hit Attacks
Similar to the buffs and status effects, I also wanted to make some abilities that would hit every enemy at once, rather than just a single chosen enemy. I had assumed this would be an easy and simple addition, but once again realized its actual implementation would be anything but simple. I encountered a couple different problems with aspects of these abilities I had not considered until I began making them, such as the ability just hitting the first enemy and ignoring the rest, as well as the player still able to select an enemy to hit despite them hitting all of the enemies.
Eventually, instead of trying to make it work with the events I have already created, I realized I needed to create a new event specifically for abilities that would hit every enemy. This allowed me to control more easily when the code would let the player choose which target to hit or when it would skip the target select screen and just hit every enemy that is in combat.
12 Agility
Buffs and Status Effects
Once the tutorial showed me how to make different abilities for the player to choose from, I immediately diverted and added some additional ones. Namely, a variety of buffs for the player to apply to themselves and an attack that would inflict poison on the enemy. However, the further I went into creating these abilities, the more I realized the amount of details I’d have to account for. How do I get each status to do what I want it to do? How do I get it to undo the status when it’s removed? How do I manage multiple status changes at once? How would two status changes effecting similar parts of the character interact with one another?
By the time I was through debating these questions, I had a system set up that would add these status changes into an array within that character. Buffs would increase the characters corresponding stat by a set amount when that buff goes onto the player, then decrease by the same amount when the buff is removed. This would prevent the buff from overriding and messing with the characters built in stat modifiers, ensuring the characters stat is properly returned to the amount it should be at. I also realized I would need the code controlling the removal of the status changes to be within the status change objects themselves to simplify the problem of how to call for the status change to be removed.
Buff - Strength Up
Before
After
Status Effect - Poison