Hero_Claive

(Phoenix Ember)
Veteran
Joined
Jan 5, 2016
Messages
148
Reaction score
94
First Language
English
Primarily Uses
RMVXA
Hey all,

I'm here today to give an overview on how to create more balanced damage output using lower stats. If you've ever played bigger franchises like Final Fantasy or Pokemon, you'll notice that the stats intentionally begin very low (10-20) and end up in the multiple 100s range. The purpose of low numbers growing exponentially into higher ones is to give your player an indirect sense of growth and progression with their party - so that's what we're going to try to achieve with our own games here.

__________________________________________
Analyzing the issue:

Let's begin with a well-recognized example - the 9999 damage mark. Hitting this should represent an achievement in maximum or near-maximum strength in your party members. So let's start with the default RPG Maker "Attack" formula:

(a.atk * 4) - (b.def * 2)

Simple enough. This formula provides us with a linear growth model for damage increase, meaning damage increases at a steady, linear rate as A's Attack stat goes up. Dividing 9999 by 4 rounds to 2500, meaning an actor's Attack stat must be 2500 or higher to hit for 9999 damage. This, of course, doesn't even factor in B's defense. So requiring a stat to be at 2500 to reach the damage cap is an obvious issue, but not the main one here. The real issue is that small stat increases barely affect damage output. This is a bigger concern because we want our players to feel like every stat, every equipment, and every buff matters.

When a change of +5 Attack only results in 20 extra damage, the player may not feel like equipment is worth changing until they find stuff which gives 50-100 differentials from what they have right now. I've played RPGM games where end-game weapons had values of 800 or higher, which is a little ridiculous. There's also the fact that bigger stats are also more of a nuisance to compare and manage.

__________________________________________
Exponential Growths:

To fix this, we can first look to an exponential growth model in favor of a linear one. Exponential growth means that the rate of damage growth itself increases as Attack stat increases. Let's look at a sample graph, with red showing linear growth and blue and green showing exponential growth.
300px-Exponential.svg.png

So while the numbers begin low in an exponential growth model, they grow much higher than the linear model does given higher numbers - which is precisely what we want. Using the blue formula (x ** 3), it would only take ~21.54 Attack to reach the 9999 damage cap. That's way less than we want, however, so let's continue refining this.

Let's assume a reasonable cap for a high-Attack party member would be 300 Attack. Stack on that a 120 Attack weapon for 420 Attack stat. A simple formula of (a.atk ** 1.5) gives us around 8600 damage output - a solid option if you don't want your Attack command to reach 9999 without buffs. More importantly, small stat changes now have a bigger impact. Let's go back to our previous example and see how much a change of +5 Attack could help:

damage = (a.atk ** 1.5)

a.atk = 10 -----> damage = ~32
a.atk = 15 -----> damage = ~58
a.atk = 20 -----> damage = ~89
a.atk = 25 -----> damage = 125


So the changes aren't huge but it's more significant than a flat change of +20 damage each time. The numbers here also appear much more balanced than a linear rate of (40, 60, 80, 100) which doesn't give the same feeling of damage progression.

__________________________________________
Exponents in Practice

Here's an example of how I put exponents to use to formally balance a game. Note this formula was designed so "Attack" wouldn't reach 9999, but would still present a desirable growth pattern for basic damage output:

damage = (((a.atk + a.level * 2) - b.def) ** 1.33)

Examples:
a.atk = 26, a.level = 10 ----> ~117
a.atk = 35, a.level = 12 ----> ~226
a.atk = 38, a.level = 14 ----> ~263

a.atk = 84, a.level = 30 ---> ~742
a.atk = 138, a.level = 50 ---> ~1448
a.atk = 219, a.level = 75 ---> ~2595
a.atk = 312, a.level = 99 ---> ~3990


Now this is obviously way different than what I've shown so far, however everything in this formula has a purpose. First, it's at your own discretion whether you want to factor a.atk and b.def in the same exponential function or separate ones. Doing something like ((a.atk + a.level * 2) ** 1.33) - (b.def ** 1.33) is also fully functional, in fact you can basically do whatever you want with b.def because you have full control over the progression of your enemies' stats in the database.

Now, including a a.level in this formula is an interesting choice - basically, I wanted to prevent a feeling of stagnation in characters who have low Attack growth. When you have a basic "Attack" command at the nucleus of your battle system, it's rarely if ever a good idea to have that skill be obsolete even when a character is high-leveled. Using a.level ensures that they'll be getting some bonus from leveling up, establishing a difference in damage output between the last level and the current one, even if their Attack growth was 0.

The 1.33 exponent reiterates what we've discussed here, increasing the rate of damage growth as Attack and Level grow higher. This allows for lower numbers in the beginning parts of the game with way higher numbers towards the end - as it should be and as it is in just about every major RPG out there. Note that any exponent between 1.25 and 2.0 is more or less viable, however the rate may increase way more than you intend the higher you go. Using higher exponents runs the risk of party members becoming extremely overpowered with just a few level/equipment changes.

__________________________________________
Adding in an Attack bonus

Now remember, the point of this type of balancing is to give the player the impression that small stat changes make a significant (or at least some extent of) difference. After tailoring your formula to your own game's stat progression, you can always add in a stat bonus to foster that impression of stat growth. Here's an example building off of my last formula:

damage = (((a.atk + a.level * 2) - b.def) ** 1.33) + (a.atk / 2)

The highlighted portion of this formula is what I call a bonus because it ensures that your player can tell that their stat growths make a difference. Your actor receives a direct +1 damage bonus every time their Attack increases by 2 - you can alter this bonus as much as you want. While the main damage output increases exponentially, your bonus will increase on a linear basis, meaning that at any level, the bonus will convince your player that their decisions/progress matter.

You can also do this with enemy attack formulas (this is in Ruby):
Code:
  def enemy_attack(a, b)
    num = num.to_f
    num = 1 + ((b.def.to_f - a.atk) / 25)
    quo = ((a.atk ** 1.5) / num) - (b.def / 3)
    return quo.round
  end
On the third and fourth lines, you'll see the basis of the formula. Basically the enemy has a fixed damage output of their Attack stat ** 1.5 which is then divided by the result in the third line. However, in the fourth line, you'll see (b.def / 3) as another example of a bonus, where every 3 Defense points that an actor gets results in exactly 1 less damage, ensuring that all defense changes (above 2) are perceived.

This is a totally optional thing to include in your formulas, but I consider it a safety net to ensure statistics play an important and noticeable role in your game.

__________________________________________
Conclusion

Just to conclude, using exponential growth is an effective way to ensure lower stats output greater damage without needing to make your stats exceed 500 or 1000. There's a lot of things you can do with this knowledge and a lot of it boils down to how you've already designed the stats for your game. Therefore, using my personal formulas in this thread may not work the same it does for my database. However, there are a few things for certain to take away from this:
  • Using lower exponents (**) in place of multiplication in formulas results in a better damage progression and allows you to structure the beginning of your game around low damage and low stats. Using this, you can set the minimum of your stats around 5-10 and the maximum in a range of 200-300 for solid balance/modest stat growth.
  • Exponents allow for small stat changes to have bigger impacts. Adding in bonus values in formulas also helps to achieve this.
  • Keeping exponential factors between 1.25 and 1.75 is the best way to avoid overpowering your party members.
  • Include a.level in your damage formula to ensure low-Attack characters achieve some extent of growth.
  • As far as skills are concerned: A personally like using the "Attack" formula to determine the power of skills. Maybe a "Power Attack" skill copies the Attack formula, then multiplies it by 2. This can be repeated rather easily throughout your database and is a good method of organizing the power of your skills.
  • The ultimate goal of damage balancing is to make sure your player is aware and cognizant of statistical changes in their characters, and values their new equipment/stat increases.
The reason I'm not necessarily giving direct instructions on what to set your formulas to is because it's important to understand the concept/theory of balancing a game around exponents. It's also important because there's a lot of trial and error that comes with testing formulas and making sure they give your players the progression you want. Hopefully this thread gives you the tools to redesign your party's damage output so that you can use lower stats/lower growths to help and organize the player. Comment below with any questions!
 

Tamsyn548

️‍⚧️ Proudly trans! ️‍⚧️ (she/her)
Veteran
Joined
Nov 10, 2016
Messages
2,533
Reaction score
4,860
First Language
English
Primarily Uses
RMVXA
Wanted to say how helpful this tutorial is and to bump it up to the top for any members who have not seen it.
 

RCXGaming

Champion of Brightmoon Tor
Veteran
Joined
Jan 4, 2019
Messages
602
Reaction score
1,332
First Language
English
Primarily Uses
RMVXA
... Wow that's actually really interesting! I've been thinking of ways to make the normal attack more useful as a back-up move for my playable characters, since I feel it's too weak as is.
 

Ancient_Eagle

Veteran
Veteran
Joined
Dec 28, 2020
Messages
53
Reaction score
15
First Language
Arabic
Primarily Uses
RMMV
THANK YOU SO MUCH!!
This is what I need it for my project.
 

Latest Threads

Latest Posts

Latest Profile Posts

Wheel of Attacks.png

MORE GAMBLING THEMED ATTACKS!

I AM UNABLE TO STOP!
Is it ok to repost stuff that i've posted to threads in the status feed?
If so, here's art of Shiloh, the main protagonist of the game i'm making:20220807_181702.jpg
They are meant to be ambiguous in gender, like Frisk from Undertale or Gogo from FFVI. I haven't decided what their age will be yet. Any ideas?
Please comment what you think about the art and design!
ScreenShot_8_10_2022_7_15_21.png
Looks like Mike's got a new party member in Robbi...

Calf survival story with a happy ending.
well here's that concept art!
WIN_20220812_16_53_56_Pro (2).jpg
Whaddya think? Name suggestions?

Forum statistics

Threads
124,457
Messages
1,163,809
Members
163,278
Latest member
dreadegen16
Top