procedurally generated balance

After meming about the new balance patch on discord yesterday I learned about Balthazars mod that creates a random balance each game by changing the costs of units within a certain threshhold. I want to "develop" this concept a bit further. Lets imagine a mod that changes balance in a way that the game is still balanced but differently and has near infinite ways of doing so. So for each balance different meta is viable.

An Idea of achieving this would be if you had a decent mathematical description of the efectiveness of a unit. Basically a function that takes all unitstats you can think of and outputs a score. That function should roughly output the same score for every unit for the current balance. So you could start changing some of the stats of one unit and adjust the other stats of the unit accordingly to match the score requirement. Depending of the complexity the optimization would likely have to be done numerically.

Now we come to the most difficult, possibly impossible part: How to develop such a function. The classic approach would be to make assumptions on how a unit stat should influence the score. For instance the score should be monothon in regards to most unitstats because for most (dps, hp, range, speed...) more means better. The issue here is that the different stats are influencing each other. For instance when unit turn speed<turret turn speed, micro becomes a lot more demanding. This means the function will not be a trivial sum of simple only single unit stat dependent subfunction with a few constants. The problem is there is a limit of how many constants can be introduced to the function because the plan would be to get the value of those constants by fitting the function to the current database. Under the assumption that the current balance is balanced. You cannot have more constants than datapoints (in this case units in the database). This issue is refered to as overfitting and it makes the function unsuitable for even interpolation.

Another approach to finding such a balance function would be to train a neural network that takes all the unitstats as input and outputs a score. The neural network would be trained on the current database with the score just being a constant for each unit. Biggest hurdle is again that the training dataset aka the databaase is very small.

In summary it is very unlikely that a balancing function could even get close to the balance quality currently present in FAF. But a balance only needs to better than the players playing it. What I mean by that is if players don't know how to abuse the balance it is not imablanced. So by just switching the balance faster than players can get "good" at it means it is balanced. The competitive aspect of this game mode would not being good at the game itself but rather being good at understanding balance and abusing it. Which can be quite ejoyable as I experienced with se7ven in the SCTA tournament where we won a lot of games due to superior knowledge of the weaknesses of the balance at that time. Looking at you engineering drones and windgenerators.

Fck faction diversity, fck map diversity this game mode has balance diversity. Biggest IQ game mode you can imagine (Kappa).

didn't read whole thing, but sounds interesting

TA4Life: "At the very least we are not slaves to the UI" | http://www.youtube.com/user/dimatularus | http://www.twitch.tv/zlo_rd

If we just develop some DeepMind AI agents that can play FAF at a 1700+ level, we could subject them to all manner of modding/changed circumstances and see what happens.

Without that source of data, it sounds like your random balance idea should only be played as mirror matchups.

Also, would there be any convenient communication to the players of which units are better/worse? Like the way text pops up on some maps instructing you to notify CookieNoob of map errors. Or are the players supposed to click on a factory and scroll their mouse over unit options in order to find out which units are better/worse than default balance? It might just be whoever has the best memory of default stats and the fastest reading comprehension gets to learn which units are buffed/nerfed, which would be kind of an unfair advantage.

Neat idea, basically those 'dota 2 but (some random idea here)' mods.

@arma473 My idea would be to do it a lot slower than on a game to game basis. For instance a change every week or so. So that people can invest time in figuring out the balance. The changes for each week would be public, but knowing which unit is op in this state is basically finding a shortcoming in the balance score algorhythim. Because according to it everything should still be perfectly balanced but in reality it likely isn't.

Figuring out how much change is reasonable for each balance iteration that the gamemode is fun would be a whole new topic.

A very interesting approach.

It sounds a little bit like Chess 960 (the base figures are in random order). In chess it only works with mirror matchup because you can have unfair advantages in the openings. The same would be required here.

There are a few fundamental differences.

  • In Chess 960 you are used to all of your units and swapping colors doesn't change anything. This does not apply to swapping factions.
  • In Chess 960 you immediately see the impact of the changes. The rules of your units do not change, so you have an instant overview of what has changed compared to base game. This is the crucial part of your suggestion. If you randomly change units there must be some sort of easy summary what has changed for players to adopt.

Here is a potential idea on how to solve this:

You define a set of fixed adjustments, e.g.: -50% to +50% in 10% steps

You define a list of mutators, e.g.:

  • Build cost adjusted by x%
  • Build time adjusted by x%
  • Unit health adjusted by x%
  • Unit damage adjusted by x%
  • Unit speed adjusted by x%
  • Income adjusted by x%
  • Floating ability swap (Floaty becomes non-floaty and vice versa)

You define a list of selectors, e.g.:

  • Only one unit tier (T1, T2, T3 or T4)
  • All Land or Navy or Air units
  • All Structures
  • All defensive structures
  • Weapon type missile or laser or shell

Now at the beginning of each game you generate 3,5,7 or whatever random combinations and make the publicly visible on the game screen.
The combination of mutators * selectors * adjustments is nearly infinite, yet the concept is easy to grasp for everyone.

"Nerds have a really complicated relationship with change: Change is awesome when WE'RE the ones doing it. As soon as change is coming from outside of us it becomes untrustworthy and it threatens what we think of is the familiar."
ā€“ Benno Rice

can't wait for the AI to realize that the game is perfectly balanced when every unit has 0 dps

<-- washy