Today’s topic is third order balancing, but I’m going to talk about it in the context of a game I’m working on called Genesis. Partly because that makes it easier to understand and partly because writing about the subject might help me find new solutions for that game. Let’s get started!
Genesis is a game in which the players take the role of gods struggling over the world. Each player selects three domains to decide what sort of god they are – these are things that could finish the phrase “God of…” like war, death, love etc.
Each domain grants the player a champion, each one of which has three cards, giving everyone a hand of nine to begin the game. On their turn each player simultaneously chooses and plays a card. If they play a card for a champion they’ve already got in play the old one is discarded, otherwise it’s added to their existing champions. All champions (including ones still present from previous turns) use their special ability. Finally the champion with the highest power is added to a winners pile.
Whoever has the most champions in the winners pile after someone runs out of cards (Usually nine turns) wins the game.
So far, so good – so what’s the balancing problem?
Well obviously it’s desirable to make sure that the domains have a roughly equal chance to win. If one offers champions that are simply better than the others then you may as well pack away the game after domains are chosen and announce the player with that domain the winner.
So the first order balancing problem is “How do I make sure each domain has roughly equal power?”
There are some fairly obvious answers here. Making sure that all champions in a domain have the same total power and then adjusting it up or down a smidge based on how useful their abilities are seems like the answer. The abilities follow a standard form of having two icons, one for who is targeted and one for what happens to them. A handful of standard abilities like “target all enemies” and “discard from play” occur across all domains, but each domain also has a unique icon that only appears to cards from that domain. That’s what makes being a “God of disaster” feel like being a “God of *disaster*” rather than “The god wot gets a 3 5 and 8 rather than a 1 6 and 9”.
Special abilities make things tricky because the context of the game then starts to matter. For instance the champion of beasts has a power 4 monster card that grants itself the pack leader icon which gives +1 power for each monster in play. So what power should I consider that card? Played in isolation its a 4 – but in theory there might be four players with three monsters out each so he could be a 16. I could work out the average number of beasts in play if everyone’s playing randomly – but people won’t play randomly.
You might anticipate that the player choosing the beast domain will choose two other domains that have a lot of monsters in so that they can power up thier own ability. Their opponent might decide to be a god of water. This gives them access to the powerful flood card and its “Destroy all monsters in play” ability.
So is the champion of beasts any good? Are they a decent 7 because their owner will synergise with three monsters, or are they weak because they signal a creature type giving the opponent information to exploit?
The second order balancing problem is “How do I make sure each domain has roughly equal power, accounting for the fact that players will choose other cards knowing it’s in play?”
But wait, it gets worse! Suppose I have chosen to be the god of beasts and my opponent has decided to counter by being a god of water. I still want to play monsters to get my bonus, but have to account for the possibility that my opponent will play “kill all monsters”. Can I do anything about that?
You bet I can! I could decide to be a god of weather and have beasts with the “Unaffected by abilities that cause instant kills” or I could be a god if disaster and have “Destroy and protect effects are reversed, all destroy powers protect and all protect powers destroy”. My opponent has similar options, they could see that I’ve planned for their plan, but they can plan for my plan that I’ve planned for thier plan! Perhaps they’ll take “God of fear” with its “Target does not get to use its ability” powers.
Which gives us a tough time of balancing – because in order to determine how powerful we think the beasts domain is we’re now taking into account the existence of the fear domain. But, when it’s time to edit the fear domain, we need to take into account the existence of the beasts domain.
Which gives us the third order problem that languidly brings us to the point of this post: “How do I make sure each domain has roughly equal power, accounting for the fact that players will choose other cards knowing its in play and then choose cards knowing *those* cards are in play?”
Now the ultimate answer is, of course, the same as it always is: Lots of playtesting!
No matter what tricks we try to pull there’s no substitute for watching the game played lots of times and seeing which domains tend to win and lose and making changes based on that.
But with the interconnectedness of all cards being what it is, there’s a huge advantage to starting playtesting from a position that’s closer to our goal state than one at random. So let’s consider what we can do.
The obvious first step is to aim for the champions of each domain to have the same total power – since printed power ranges 1-9 then an average of 5 might seem appropriate. However we intend to reduce power totals later in line with how good the cards abilities are, so actually starting at an average of 6 or 7 seems like a smarter idea.
The next step is harder, which is to determine the average value of abilities and adjust the power of cards downwards accordingly. Here the goal is to make a determination of how much an ability is worth and remove the appropriate amount of power form some card in its domain.
Now a player can enhance an ability by playing cards it synergises with and their opponent can do the opposite. The active player has an advantage here since they know when they’re going to play the second half of the combo, but their opponent might get their timing wrong. However the active player might not want to pair it with the best possible option to make it harder for their opponent to predict and counter. Here I make the following assumption “The value of an ability is worth approximately what it’ll be worth when combo’d with the second best option in a situation that’s halfway between a random situation and the optimal position to play that ability in.” and go forward on that basis.
The third step is the hardest, how best to account for possible counterplay? Here I forget about balancing individual abilities and try to address the problem through a design philosophy. The philosophy is simply this: “Any tactic that is anticipated and properly countered will be utterly crushed.”
The core of the game is selecting champions and using them at the right moment to maximise their effectiveness. Perfect timing should be rewarded and implementing this philosophy means every ability has the same value at the third order: It’s always 0 because your opponent has always won. This simplifies the calculation substantially.
This calls for the game to contain cards which are very strong given the right predictions. “Kill all X” are highly effective, so long as every card has a class and every class has at least one kill all associated. Also cards of a form “Make a prediction about the card your opponent has chosen but not yet revealed, if you’re right then kill it.” Then things that counter or reverse particular abilities like “Your opponents card targets itself rather than its intended target” or “Kill powers now protect and protect powers now kill”.
This is a process I’ve now been through with this game over nine times.
Each time I rewrite a great many cards trying to obtain a new balance that makes me happy – one that makes the domains equally likely to win, but also preserves their uniquess and makes the game more about skill than luck. A player needs enough information to make a prediction or the game falls apart – a perfect information zero randomness game can be a game of chance if players don’t make meaningful decisions after all.
The iterations of playtesting are having an impact on how easily I can value abilities. At first “This is worth a +1 that is worth a +2” was pretty much guesswork – but as time goes on I’m more likely to change an ability in a way that is right first time. Or to anticipate how making a change in one place means that something that’s worked just fine for the last three iterations now also needs to change, without needing to see an unenjoyable game to see it happen.
So the advice I wanted to offer was this:
1.It’s good to have some sort of abstract (I hesitate to say necessarily mathematical) model to get your early game as close to a goal as possible before testing.
2. Don’t abandon the model when you start testing. Instead refine it and keep using it, it’ll make each iteration more productive.
3. You can nuke the third order balancing problem by making a certain order of prediction powerful against everything (Though this is only a start).
This game isn’t perfect yet and my approach isn’t perfect either, but that’s where I’m at today. I’ll let you know if it’s any different tomorrow.
(Also no pictures this week because the server won’t let me upload them. How do folks feel about that? Are the pictures adding much and nicely breaking up the text or did they just get in the way?)