START Status System Setup

Create a status system for your RPG from scratch in this ORK 3 tutorial series.

This tutorial series will go through setting up a complete status system in a new ORK Framework project.

We’ll set up:

  • status values
  • status development
  • attack/defence modifiers
  • status effects
  • damage and chance formulas
  • abilities
  • items
  • equipment
  • loot
  • battle AI
  • combatants

In the end, we’ll have a ready-to-use status system that we just need to plug into a game – i.e. add prefabs (e.g. for combatants), set up the UI, set up the battle system and animate battle actions (using schematics). These things will be the topic of other tutorial series that’ll be based on this status system setup.

Download the Completed Setup #

Don’t have the time to do all of that or already know how to do it? Want to immediately start working on some other tutorial series (based on this status system setup) or just play around in a set up system?

You can download the finished status system setup here:

Download Status System Setup

Please note!

This package requires using at least Unity 2019.4.

It’s recommended to use Unity 2020.3 or higher other LTS (long term support) versions.

The unitypackage file contains:

  • ORK/Makinom data assets
  • icons and font with TMP setup
  • flying text prefab and schematic

You need to import ORK 3 (and Makinom) and TextMesh Pro into your project before importing the status system setup package, i.e. in a new Unity project:

  • import TextMesh Pro
    usually already part of a new Unity project, otherwise use the Package Manager
  • import TMP Essential Resources
    Window > TextMeshPro > Import TMP Essential Resources
  • import ORK 3
    including Makinom and the Unity UI module
  • import the status system setup package

If you want to use the font and icons included in the package as TMP’s default setup, you need to select them in the TMP Settings asset (Assets/TextMesh Pro/Resources/). See all details in the TMP setup UI tutorial.

Please Note!

The package import might lose prefab references.

It’s recommended to simply close Unity after finishing the status system setup package import and open it again. This’ll resolve lost references.

Planning a Status System #

When you start working on your own projects, you’ll most likely want to implement your own, unique status system. For this, it’s best to take some time to think about how everything should work together – e.g. which status values do you need and what are they used for? Do you use attack/defence modifiers to influence the damage, complex formulas calculating results from multiple values, etc.

Want to know how you can do this? If yes, I’ll try to explain how I developed the status system for this tutorial series to give you some ideas on how to go about it.

Otherwise, just skip this part and continue below with the First Steps.

Status Values, Formulas #

I already had an idea for the direction in which the status system should go – i.e. do separate physical and magical damage, use hit and critical hit chances and gradually increase in power with each level.

The status system of this tutorial series will use the following status values (beside HP, MP and experience):

  • Weapon Damage
    Damage factor coming from weapons.
  • Attack
    The attacker’s physical attack power, used for physical damage calculations.
  • Defence
    The target’s defence, used for physical damage calculations.
  • Magic Attack
    The attacker’s magical attack power, used for magical damage calculations.
  • Magic Defence
    The target’s defence, used for magical damage calculations.
  • Agility
    Used for hit chance calculations and will later be used by other tutorial series for battle order calculations.
  • Dexterity
    Used for hit chance and critical chance calculations.
  • Luck
    Used for critical chance calculations.

These status values will operate in a value range from 1 to 255. It’s a pretty basic system that allows separate physical and magical calculations, e.g. a fighter would be good at physical damage, but lousy at magical, while a mage is good at magical damage and lousy at physical – you know, the standard RPG stuff.

The status system operates on a maximum level of 50, at which the primary status values of a combatant will be at around 100. A primary status value is the one that’s most important for the combatant’s role in battle, e.g. Attack for a physical DPS (damage dealer) or Magic Attack for a magical DPS.

Why at 100? Because we still need room for bonuses to increase a status value before hitting the 255 maximum – status value bonuses can be given in fix values or in percent.

Now, the basics in mind, I started testing out some formulas – you can either do that directly in ORK (e.g. formula testing allows you to test for level ranges), but for that you’d already have to have a ready to use setup with status values, status development and combatants. So, what to do? Good old spreadsheets, that’s what!

Here’s an example of how I checked the physical damage formula. The A column is the attacker’s Attack, the 1 row is the defender’s Defence. You can see the used formula at the bottom (will be part of the formulas tutorial). The blue marked column/row is the value 100 sweat spot for a combatant’s maximum development, everything past those lines is in bonus territory. All of these values are for a Weapon Damage of 1 (cell A1, changing it’s value will update all values in the spreadsheet).

I’ve done the same for all other formulas as well, magic damage (which scales a bit differently), hit chance, etc.

Take your time, play around with different formulas – search on the internet, there’s a lot of good advice out there on how to do damage calculations.

Status Development #

With 100 being the upper limit for a status value’s development at level 50, it wasn’t too hard to figure out a good composition. The spreadsheet helped immensely at testing things out.

The tutorial uses Percent Points to distribute status values evenly across levels, keeping the same ration between them. This allows to quickly change things and test out how the system works.

I’m using the percent points to define the values the status values should have at level 50 (max level), i.e. level 50 has 100 percent points, a status value that should have 100 at level 50 will use 100 percent points. Pretty simple to plan and use.

If things need a bit tweaking, you just have to go back to the status development, change a value or two and you’re good for the next test, scaled accross the whole level range. No need to set up strictly defined value curves – this is something you can do later once everything clicked together and you’re happy with your results. Or not, percent points are perfectly fine to use instead of defined curves.

Attack/Defence Modifiers #

This optional system is used to influence damages with percent based modifiers. Learn more about them in this documentation.

I’m using attack modifiers to add elemental damages to the game, the standard fire, water, earth, etc. – it’s pretty straight forward. Attacks can have an element, e.g. a fire magic spell, combatants can have strength and weaknesses, even get healed instead of damaged.

Defence modifiers give attributes to combatants, I’m using them to give a size attribute to them. The weapons of this status system will give bonuses to different sizes, e.g. daggers will do more damage on small targets and less damage on larger targets, while bows will do 100% damage on all targets. This gives each weapon category it’s own strengths and weaknesses.

Status Effects, Abilities, Items, Equipment, etc. #

The rest is just cranking stuff out – what kind of abilities do you want? How much should a potion heal, what bonuses does your equipment give?

At this point, when your status system is more or less ready to be tested, you’ll already know the limits and values of your system. E.g. how much bonus can low level or high level equipment give without breaking the system, or how much damage should an attack or spell do, if you take the damage formulas and modifiers into account.

It doesn’t matter if it’s a fireball, a thunderstrike or a sword, they all operate under the same rules you set up with your status values and formulas.

First Steps #

Before getting started with the actual status system setup, we need to start with the usual first steps:

  1. Import ORK Framework (including Makinom)
    If you haven’t already done so, import ORK Framework and Makinom’s complete package (DLL files, gizmo icons).
  2. Open the Makinom Editor
    Open the Makinom editor for the first time to create an initial project setup.
    E.g. use the Unity menu: Window > Gaming Is Love > Makinom
    Or the keyboard shortcut, e.g. for Windows: CTRL + Alt + M
  3. Change UI System
    Navigate to UI > UI System and change the UI System Type to Unity UI.
    We’ll use the Unity UI module for this project.
  4. Save Changes
    Save the changes via Save Settings button.

Please see the first step documentation for more details on this.

You need to have a new project set up for you before continuing this tutorial series.

I’d also recommend to take a look at this information on using the editor efficiently, as it’ll make the following tutorials a lot easier.

TextMesh Pro Setup #

Using the Unity UI module will require using TextMesh Pro. Make sure TMP is imported in your project (via the Unity Package Manager), the TMP essential resources are imported and you’ve set up font and icons you want to use.

See this UI tutorial on how to do this – it also includes the font and icons used for these tutorials.

Flying Texts Setup #

We’ll use flying texts to display changes, e.g. damage and healing of health. These tutorials assume you’ve already set up a flying text prefab and schematic to animate the flying text. If you haven’t done so yet, please follow the following toturials:

See this UI tutorial to set up a flying text prefab.

See this schematic tutorial to set up a schematic to animate flying texts.

 

And with that, it’s time to start with the setup – we’ll start with setting up the status values, the basis for every status system.