• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Symmetrical Hero Scaling

Level 13
Joined
May 24, 2005
Messages
609

Symmetrical Hero Scaling

Or: Secrets and Pitfalls of Hero Balancing

This tutorial discusses some issues and solutions in terms of game mechanics for creating symmetrically scaling heroes.
Symmetrical scaling means that the relation of power between multiple heroes stays constant across increasing hero levels. In terms of proper balance, this might be a desired feature for multiplayer hero maps such as arena, AoS, RPGs etc.
The primary issue that is explored in this tutorial is that different aspects of a hero might not scale up in proper relation to each other. Therefore, balance may get spoiled the higher the hero level raise. This issue can be measured by putting hero aspects in relation to each other. If everythings scales symmetrically, this relation always stays the same.

(For hero roles and design-related hints, you may check out this tutorial: http://www.hiveworkshop.com/forums/...o-craft-function-role-synergy-balance-134337/)


This tutorial is divided upon 5 sections:
1. Hero Attributes
2. Hitpoints and Mana
3. Gameplay Constants
4. Hero Attack Damage
5. Spells/Abilities​



1. Hero Attributes


Heroes usually gain attribute bonuses with each level. An issue in some maps, however, is that attributes do not scale up symmetrically. This may or may not be a wanted effect, depending on your game design. Let’s take an example assuming a warrior hero using the following stats on level 1:

Warrior lvl 1
Str: 20
Agi: 15
Int: 10

Let’s have a look at the relation of these attributes. The strength is 1.3x the amount of his agility and 2x the amount of his intelligence.
Now let’s level up the hero using the following attribute increments per Level:
Attribute increments
Str per lvl: +3
Agi per lvl: +2
Int per lvl: +1
Considering the above increments, on Level 10 the heroes stats are:
Warrior lvl 10
Str: 47
Agi: 33
Int: 19

Again, let’s check the attribute relations. This time the warriors strength is 1.42x the amount of his agility and 2.47x the amount of his intelligence. It is obvious that the relations between the attributes have changed.

The reason is that the attribute increments are not in the same relation to each other as the attributes. Now consider that attributes affect many important game aspects like damage, hitpoints, mana and such. The changed relations of the attributes affects the hero balance so that it may become completely different on the higher levels to the one that was set up for level 1. As a result, you might end up with an uneven balance.

This issue can be solved using increments that are in the same relation to each other as the hero attributes. Therefore, we can use a divisor to calculate the increments. Let’s just assume a divisor of 10 and use it on the prior example using the formula AttributeIncrement = BaseAttribute / Divisor:

Calculated attribute increments
Str per lvl: +2 (20/10)
Agi per lvl: +1.5 (15/10
Int per lvl: +1 (10/10)

With these calculated increments we can be sure that the relation between the attributes always stays the same throughout all hero levels. For instance, on level 10 our warrior now looks like this and you will find that the relations are just the same as on level 1:

Warrior lvl 10
Str: 38
Agi: 28.5
Int: 19

You can set up the divisor as you like. The higher the divisor, the slower is the hero attribute gain progress and the more levels you will need to multiply the heroes attributes.
In summary, you may use this procedure to calculate hero attribute increments which enable your hero attributes to stay in the same relation throughout all levels, providing a symmetric hero scaling.



2. Hitpoints and Mana


Hero hitpoints are calculated as hero base hitpoints (Stats – Hit Points Maximum (Base)) plus the HP bonus per strength point which is set in the gameplay constants.
This calculation might be an issue in terms of a symmetric scaling of hero hitpoints. The following example explains why.

We stick to our warrior hero example from the previous section. This time we focus on his strength and base hitpoints. We assume that the HP bonus per strength is set to 25.

Warrior
Str: 20
Base hitpoints: 100
Str per lvl: +2

Based upon these values, our warrior has 600 hitpoints on level 1 (100+20*25).

Let’s assume a second hero. This time, it is a mage hero which also has 100 base hitpoints but only 10 strength:

Mage
Str: 10
Base hitpoints: 100
Str per lvl: +1

Accordingly, the mage has 350 hitpoints on level 1 (100+10*25).

OK, so where is the problem?
It's easy: though the warrior has two times the strength of the mage, the mage still has more than half of the hitpoints of the warrior. This is not a fair trade when we want our hero hitpoints to be depending on the strength.
To make this issue more clear, let’s check the relation of the warriors hitpoints to the mages hitpoints which is 1.7 on lvl 1 (600/350). When we scale both heroes up to level 10, using a (symmetrical) strength increment of 2 for the warrior and 1 for the mage, the warriors hitpoints are 1050 and the mages hitpoints are 575. Now the relation is 1.82 (1050/575). We note that the hitpoint relation has changed. However, this is not a desired effect when we want to keep our hero hitpoints in a balanced relation throughout all hero levels.

To solve this issue, we need to avoid using base hitpoints. Therefore, they need to be set to zero. To do this, you need to hold the SHIFT-key whily editing the field in the editor. Otherwise, zero values are automatically converted to 1.

When we cut the base hitpoint to zero in our example, on level 1, the warrior has 500 hitpoints and the mage has 250 hitpoints, which is exactly the half of the warrior and results in a relation value of 2 (500/250). When setting the heroes to level 10, the hitpoints are 950 for the warrior and 475 for the mage which is, again, in the very same relation of 2 (950/475). As a result, the hero hitpoints now stay in the same relation and provide a fair balance throughout all levels. Of course, this procedure can be applied just in the same way on mana points. In summary, we note that constant base values can be an issue for balancing, depending on your game design. In addition, keep in mind that this approach only works properly if the increments are set up symmetrical as proposed in section 1.



3. Gameplay constants


Let’s have a look at some hero-specific settings in the gameplay constants. Though these values are mostly self-explaining, it is important that you think carefully about how you set them to enable a fair hero balance.

Hero Attributes - Attack Speed Bonus per Agility Point
Hero Attributes - Defense Bonus per Agility Point
Hero Attributes - Movement Bonus per Agility Point


Do you remember those maps where agility heroes always were overpowered on the higher levels due to their high attack speed and armor?
If you use other values than zero on the above values, you accept that agility heroes will have an increasing advantage the higher their level raises. Carefully think if this fits your game design. If not, it might be better to just set those values to zero and use fixed values for attack speed, armor and movement.​


Hero Attributes - HP Regen. Bonus per Strength Point
Hero Attributes - Mana Regen. Bonus per Intelligence Point


These values reward heroes that gain more strength respectively intelligence than others.
This is another pitfall to balance because regeneration rates may get so high that heroes become overpowered. Again you need to decide if this is an effect you really want in your hero design. If you want regeneration rates to scale with attributes, you could also think of using the same mechanics as described in section 2 to enable a symmetric scaling by avoiding base regeneration factors.​



4. Hero Attack Damage


Hero attack damage is calculated as primary attribute + base damage + a roll of x dices each with y sides. That means, your hero attack power scales up with the heroes main attribute, but also has a random yet fixed amount of damage. The basic issue is the same as with the hitpoints and mana: there is a constant factor that spoils a 100% symmetrical scaling. To make this issue more clear, let's calculate the relation between DPS to Hitpoints for our warrior hero assuming the following stats:

Warrior
Str: 20
Base hitpoints: 0
Str per lvl: +1
HP/per Str: +25
Base damage: 10
Dice count: 1
Sides per Die: 10
Attack speed: 1.5

On level 1, the warrior has the following stats:
Hitpints = Base Hitpoints + Prim. Attr. * HP/Lvl = 0+20*25 = 500
Average damage = Prim. Attr. + Base damage + (DiceCount*Sides+DiceCount)/2 = 20+10+(1*10+1)/2 = 35,5
DPS = Average damage / attack speed = 23,67

Let's caculate the relation between DPS and hitpoints as DPS/Hitpoints = 0,05.
OK, let's do the same calculation for level 10. The results are 725 hitpoints, 29,67 dps and a relation of 0,04.

On raising levels, this example shows clearly that DPS are decreasing in their relation to the other stats. For instance, this issue can cause the effect that a hero that relies on attack damage becomes less effective on higher levels. Of course, you could cut all base damage and only use the attribute damage. However, this is not a very desirable option in most cases since you loose all randomization on attack damage and the hero always deals the same amount of damage. Therefore, you probably want to use at least the dice damage. Still you should keep in mind that this aspect has an influence on the balance and mind it for your game design. Unfortunately, there is no way to set up scaling random damage without triggers (like deal attribute damage + min 10% - max 20% random damage).



5. Spells/Abilities


Spells are a very important aspect of hero design. In fact, there are different ways to scale up spells with higher levels. The most common way is using different spell levels like it is done in standard WC3 melee games and most maps. If you want symmetric balance scaling, you need to take care that your spells scale in the same amount as your hero attributes. For instance, we can have a look at our well-known warrior hero example. With his stats, his attributes are exactly doubled at lvl 21. If you want your spells to scale symmetrically as well, their power should also be about as doubled on that level.

If you are familiar with jass and spell-scripting, another IMHO very elegant option is to use spell/ability powers that directly depend on hero attributes. If you have set up the attributes to scale symmetrically, you now can be sure that all of your spells do the same, as they depend on these attributes.

As a final note, some passive abilities like bash, critical strike and especially evasion need special attention because they can be a fairly tricky to balance. Related issues are explicitly covered in this turorial: http://www.hiveworkshop.com/forums/general-mapping-tutorials-278/problems-balancing-evasion-128383/


That's all for now. I hope this little tutorial is helpful to you. :)

PS: I've added a small example excel chart to show how excel calculation may help you in hero balancing.
 

Attachments

  • Hero_Calculator.rar
    13.5 KB · Views: 178
Last edited:
Level 25
Joined
Jul 10, 2006
Messages
3,315
Thanks for the feedback. I'll see if I can add some aspects to make it more comprehensive. However, it's not meant to cover all aspects. I guess it's mostly focusing on a symmetrical scaling.

Then the problem I have is the grand title you gave it.

Remember that abilities also affect their scaling, for example the Demon Hunter's Evasion.
 
Level 13
Joined
May 24, 2005
Messages
609
I've just added additional contents and uploaded a little excel chart that can be used for hero calculation.

Concerning the graphs, right now, I'm not quite sure which info I should put up for visualization. A curve that shows the increase in damage over the levels would not provide any beneficial information in terms of the issue IMHO. I think the primary issue is that different aspects of hero design might not scale up in proper relation to each other. This issue can be measured by putting these aspects in relation to each other. If everythings scales symmetrically, the relation always stays the same.

Maybe I can put up two comparative graphs, one with a proper relation (which is just a constant) and maybe one with improper relations..

Anyway, I think it would be a good idea to change the title (I need a mod to do this).
 
Level 13
Joined
May 24, 2005
Messages
609
OK, here's another small update: I've included a link to the evasion tutorial in section 5. It should fit there very well.
In addition, there is a bit of an introduction now that shortly explains the general issue respectivly the approach of this tutorial.

Please let me know, if you need additional changes for approval. I think the diagrams are not needed because of the reason stated above. However, if you consist on them, I'm open for suggestions on which variables should be displayed on the graphs.
 
Level 21
Joined
Mar 27, 2012
Messages
3,232
I would of posted it separately, but I guess it also fits into this tutorial.

The extreme OPness of %-based stats and how different stats scale eachother.

Whether the stat is an offensive skill that deals % of max health as damage or lifesteal, such stats always scale exponentially.
I'll use lifesteal as an example.
If you give a unit 10% lifesteal, then how much does the unit gain power? It might seem like 10%, but it's actually somewhere between 21% and 33.1%. That's because it scales together with damage and damage scales with health. Since health is passive, then it doesn't always apply, that's why I said between.
Lets imagine a unit with 200 health, 1 life reg, 15 DPS and 20% lifesteal.
Whenever this unit is attacking it already has 4 times as much life regeneration, even though the lifesteal itself is minor.
Now we add another 15 DPS and 200 health. The lifesteal is still the same, but now suddenly the unit has 7 life regeneration in combat. It would be logical that by multiplying 2 stats with 2 you get a 400% increase in power, but in this case you clearly got more, since life regeneration also increased.

Solution? - minimize the use of lifesteal %. It's also good to create an explicit value lifesteal inside your DDS.

I could also make a similar example from % of max health as damage, but it's far shorter - Never have to increase damage and when enemy increases in health, then he doesn't gain any benefit from that.

Such balance aspects are often quite hard to notice, for example:
Damage and health also scale with eachother, but if they don't get extremely large, then it isn't very noticeable.
With damage and health the formula is simple at least. Multiplying damage or health by 2 doubles the unit's power. Multiplying both of them doubles the power twice, aka power x4.

Practical example for health and damage:
If you increase the health of a unit by 100%, then the expected damage of that unit is doubled, because the unit can survive twice as long. Thus, damage and health scale.

tl;dr: This long post shows why games break when they are scaled up(Footmen frenzy that goes to lvl 10 000).
 
Top