I have three classes: A, B and C. Each has a burst spell that have a pre-delay before the damage is dealt. Class A also has a burst spell that deals the damage instantly and then has a post-delay before it can be cast again. Post-delay spells are more desirable for the players because they provide easier opportunity for safer hit-run tactics that don't require standing around being hit while your spells prepare to go off.

Class A has no healing and no natural damage mitigation although they can somewhat improve their mitigation with armour.

Class B has an excellent amount of natural damage mitigation but can only improve it a limited amount through additional armour.

Class C can heal itself and has reasonable damage mitigation which can be greatly improved through additional armour.

Class A spell x:

  • pre-cast delay 2 rounds
  • avg damage per round of: 24.3614
  • avg sp cost per round of: 24.2243
  • avg damage taken per round: 11.014

spell y:

  • post cast delay of 2 rounds
  • avg damage per round of: 15.4851
  • avg sp cost per round of: 19.1129
  • avg damage taken per round: 11.45

Class B spell w:

  • pre-cast delay of 3 rounds
  • avg damage per round of: 18.487
  • avg sp cost per round of: 8.333
  • avg damage taken per round: 6.326

So a slower cast time lowers the damage per round even though the actual burst is decent, plus very efficient to cast.

Class C spell z:

  • pre-cast delay of 2 rounds
  • avg damage per round of: 25.1447
  • avg sp cost per round of: 32.7974
  • avg damage taken per round: 8.6371 (base defence, no armour)

So a decent chunk of damage but nearly as efficient to cast.

My question is how can I create some kind of balance calculation for determining the relative values of things? For example my argument is that spell y is significantly under powered, even though it has a post delay, but I don't know how to calculate what might be an appropriate improvement for it. I lack the mathematical vocabulary to describe what I need, but what I think I need is some way to describe a 'balance budget' - "If I add x damage here I have to tweak this" but I don't know how to begin planning it out. Does this make sense? Should I try and get more information? Am I missing something fundamental, which is why I can't untangle my own brain?


1 Answer 1


This answer does not solve the problem. You have been warned.

If you are thinking what I think you are thinking, it might not be possible. I'll describe why. However, I would also argue that if it is possible in you case, you might not want it to be.

The issue is that once you have multidimensional numbers (think vectors, or imaginary numbers, or matrices), there is no total ordering. And by that I mean that regardless of how you decide to compare elements, you may find elements that are different but neither one is greater than the other. Or you may find that if one element X is greater than another element Y, and that other element Y is greater than a third element Z, it does not imply that X is greater than Z.

In your case, we can describe the spells as points in higher dimensional space, where each coordinate is one of its attributes (delay, damage, etc…). And that means there might not necessarily be a way to sort them.

However, there could be a way to sort them. That happens if the attributes are correlated. I mean, they are not independent variables. In which case we could be able to find some hidden variable that can be used as an input parameter to predict the attributes. Then we can sort them by that hidden variable.

And, to be fair, such parameter can be useful in game design. For instance, if we have parameter that controls how difficult the enemies are, we can set it to increase steadily to make a difficulty curve. However, I would encourage to have at least some other parameter to add variety. And then we are back at multidimensional numbers.

In fact, I would like to encourage to go for a rotating meta. To illustrate, consider if A is perceived as the strong class and many player pick it, but B has an edge over A, then there will a growing population of player that pick B as response to players that pick A. In response the players that pick A may move to C to counter the player that pick B, decreasing the number of player that pick A, and eventually the players that pick B would look for a way to counter player picking C... and the counter to picking C can be picking A, making a loop. So the meta game rotates from picking A, to B to C and back to A. Duck season, Rabbit season, Duck season, Rabbit season, you get the idea.

We find this kind of design often. It can be referred as Rock-Paper-Scissors or Water-Plant-Fire or Infantry-Archery-Chivalry. Of course, it does not have to be a loop of three things, it just that those are common and easy to spot. You may also be interested in Intransitive dice. See also the concept of Strange Loop.

So I would encourage you to go for a design like that. So that all your classes are viable. None is evidently the best or the worst. And they all see play. And if that isn't balance, it is a good substitute.

Alright, but is you current design like that or not? And if not, what values should you tweak? And by how much? I HAVE NO IDEA.

I can infer some things from what you say, which I might be getting wrong. Since balance is important between these classes, I'm assuming competitive multiplayer. Since you say hit and run, I know there is movement. But I don't know if these classes all move the same, or if there is some kind of terrain advantage. Also, you say rounds, so I'm guessing this is turn based.

Consider that the difference between a 10 damage and 15 damage is not that relevant when the opponent can only take 3 damage, so they are both one hit death. And the difference between 5, 6, and 7 damage is not that large if the enemy can take 15 damage, so they all kill in three hits. So you don't see result grow linearly with the attributes.

And I don't know how much damage they can take, how their healing and damage mitigation works etc. And... Is there randomness? Critical hits, and stuff like that?

And even if I knew, it would not make the task of figuring out to balance them easier, since there are tons and tons of variables. In fact, that means the "None is evidently the best or the worst" part of our "balance" is covered, which is good. If you don't know if a little tweak here or a little tweak there makes a difference, it means you are getting there.

But your code does know. I presume you have expended some time encoding all the rules in software. So, I will suggest to add to them some autonomous agents that can use them, have them fight and find out who wins over who. And use that as test bed for your possible tweaks.

Of course, that won't account for any clever tactics your player may come up with, but it should give you a base line. Furthermore, once you bring play testers, you might incorporate their feedback. And yes, none of that guarantees you would not have to re-balance after launch.

To future proof the design, you need to find where it breaks. Instead of looking for the perfect balance, look for the edge cases. How much is too much or too little for your attributes. So you can carve an space where you can add new classes with relative confidence that you will not break the balance… too much.

And yes, that means some will be slightly better than others. Let people do their analysis, and come up with their tier lists.

In fact, have your own tier list. If you have statistics of which classes get more play, you can start by re-balancing those that see less play, which are likely those that are lagging behind. Just, don't rush to do it. It might be just Duck season. That way you are less likely to nerf in ways players don't like, because you are buffing the stragglers instead. And you minimize the number of annoyed players because you changed their class, because you are changing the less played classes anyway.

A corollary to that is that you probably want to introduce new classes slightly under-powered, so you have room to buff them if you need to. The new class will see play out of curiosity, which will dwindle after a while. From that initial spike you can gather information on how people use it. Yet, you might want to wait to see if the new class join the rotating meta or not before revisiting it.

  • \$\begingroup\$ This is a really exceptional answer that's given me an enormous amount to think about and has even settled my mind significantly around the question of "why am I finding this so hard?" Thank you for writing it all out and pointing to a few extra topics as well. I'm going to go through it slowly some more, but I suspect soon that the accepted answer here is going to be one that doesn't answer the question at all :) \$\endgroup\$
    – Steerpike
    Apr 19, 2022 at 22:34

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .