- Joined
- May 24, 2005
- Messages
- 609
Symmetrical Hero Scaling
Or: Secrets and Pitfalls of Hero BalancingThis 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
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 1Str: 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 incrementsStr per lvl: +3
Agi per lvl: +2
Int per lvl: +1
Warrior lvl 10Str: 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 incrementsStr 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 10Str: 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.
WarriorStr: 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:
MageStr: 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.
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.
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:
WarriorStr: 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
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
Last edited: