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
exponentialgrowth.
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!
本贴来自国际rpgmaker官方论坛作者:Hero_Claive处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:
https://forums.rpgmakerweb.com/threads/balancing-damage-output-with-low-stats-mv-ace.110096/