Economy Balancing Models
When you have a game system that involves the player using loot to buy rewards, I usually start calling that system an “economy.” (Note: This isn’t how some people use the word, so I just want you to know what I mean when I say it here.)
Previous Article | Next Article
In order to get the game to “feel” the way you want it to, you can loosen or tighten your game’s various economies. How easy or difficult it is to do so depends on how your game logically determines what reward a player gets for accomplishing a goal.
This article is not about how to make it feel the way you want it to.
This article is about how to set up the systems so that you can make it feel the way you want it. Imagine that your game is a big flat control panel covered in dials. Some dials are large and have a huge effect on a lot of things. Some dials are small, and only affect very specific things.
This article is about how to set up the control panel to make it easiest for you to do the tuning work.
I’m going to talk about two really common ways of setting this up, but these aren’t the only two ways: 1) The Small Dials Method, and 2) The Big Dials method.
Note: For the sake of brevity, I’m limiting the scope of things we’re tuning to just how much loot enemies drop when they die.
The “D&D” method (small dials)
Many games have enemies drop loot similar to the way it works in Dungeons and Dragons, or other tabletop RPGs.
Each type of enemy (Goblin, Orc, Human, Dragon, etc) has a set of loot it’s allowed to drop when it dies.
In D&D, there’s usually a random factor to it, but I have to ignore that for this article for brevity.
Example Loot Set: “When this enemy dies, it drops 10 gold”
Often, when I see it implemented in games, it’s even more specific (e.g. each enemy instance may have a variable saying how much gold it should drop).
This is an efficient setup for a tabletop game where other human beings (who are not you, the designer) do all the work of creating and balancing content in real-time. When you, as the designer, have to create and balance that content before you ship the game, this method can get really difficult to maintain.
Why is is difficult to maintain?
Here’s one example of where it’s difficult:
Ignoring randomness for a second, let’s say there are 100 identical enemies in level 1, and each enemy gives the player 10 pieces of gold when it is killed, you know that the whole level has 1000 gold in it, assuming the player kills all the enemies.
For the sake of this example, let’s say you discover/decide that 1000 gold is the perfect amount for level 1 to give. You don’t want people getting too much more because it makes later content easier than you want it to be.
If you’re anything like me, though, the number of enemies in your levels constantly changes over the course of development. As certain parts of a level are changed to make it more or less intense, enemy counts can vary wildly. I may remove an enemy from an early setup to make it easier, but then add three enemies to a later setup (and so forth).
So in this example, lets say I adjust the enemies and now there are 150 enemies in the level (each giving 10 gold) my economy is now no longer perfect, since the player will be able to get an extra 500 gold.
In the case of this very simple example, if I want to lower the gold given in the level, I now count all the enemies and reduce the amount of gold given per enemy to compensate. But I have to do this every time I change the enemies in the level.
It gets even more complex when you think how different types of enemies drop different amounts/types of treasure. Sometimes this can be so subtle it’s hard to even tell where the problem is since a problem in level 1 might have knock-on effects on level 10.
Once you start dealing with treasure tables and randomness, these problems get even harder to solve. There are just too many small dials on the control board, and you can only turn one at a time or you risk adding new problems.
I’ve worked on a number of games where the economy is balanced a different way from the D&D method. It has some advantages for use in a video game since it gives you both big and small “dials” to work with.
Because most of your daily tuning work will occur via the larger dials it provides the designer with some protections from the ravages of enemy-count escalation and randomness.
You can focus the majority of the tuning work on (for example) a per-level basis instead of a per-challenge basis.
A simple Big Dial example
Here’s a simple conversion of the D&D style to a Big Dial style:
Let’s say, as before, we want Level 1 to always have 1000 gold in it, no matter how we adjust the enemies. On the first frame of the game, when Level 1 starts, all the enemies are counted up and each enemy gets an equal share of the 1000 gold.
E.G: Lets say there are 50 enemies in level 1, each enemy would be given 20 gold to drop.
A more complex example
That simple example doesn’t sound too much more useful than the D&D method (besides abstracting out the enemy counting problem). It begins to pay real dividends once you start adding complexity.
As an example, let’s say you have a level with a mix of enemy types, instead of all identical enemies. You want each one of those enemy types to drop gold based on how hard they are to defeat — a Dragon enemy should drop more gold than an Orc, for example.
For each enemy type in that level (Goblin, Orc, Human, Dragon, etc), we track a number that indicates what share of the loot that monster type should get, relative to the other types.
- Goblins have a value of 2
- Orcs have a value of 4
- Dragons have a value of 12
The example above would indicate that Goblins get half as many gold as Orcs, and the Dragons get three times as many gold as the Orcs. The specific numbers used have no relevance, only the relationship between the numbers is important. These are ratios, not hard numbers. When the level is run, the game counts how many enemies of each type are in the level, then divvies up the gold to each enemy based on that ratio. This means:
- Goblins as a group get a pool of x gold
- Orcs as a group get a pool of 2x gold
- Dragons as a group get a pool of 6x gold
- That’s a total of 9x
For those of you who, like me, aren’t math nerds, the example comes out something like this:
- If the level has 1000 gold, 1000/9 is about 112
- The Goblin pool is 112 gold
- The Orc pool is 224 gold
- The Dragon pool 672 gold.
Each pool gets divided by the total number of enemies in the level. So if there are 28 swarmers in the level, each swarmer gets 112/28 = 4 gold.
Now lets say you go back and add/delete some enemies. When the level is run, it does the calculations with the new enemy counts and the whole economy is still set up the way you wanted it. E.G. If you took away swarmers, each remaining swarmer would now have more gold.
Besides changing prices, this gives us two large dials we could use to balance the economy:
- How much gold is in the level in total
- How much gold one enemy archetype gets relative to another
If necessary, we can always go down and micromanage individual enemies, just like with the old system. I find it doesn’t happen often, but it’s an option that’s there.
6 Comments Already
Leave a Reply
You must be logged in to post a comment.
I like how you start off using the word “gold” but near the end accidentally switch to calling it “bolts” 😛
Ha, nice catch. I went in and changed them all to gold, though — just for clarity.
Great article and thanks a lot for sharing this.
I’ve a question about your last example.
Considering that Orcs are always stronger than Goblins, we want stronger enemies drop better loot.
Let’s say we decrease the number of Goblins and increasing the number of Orcs at a level, what would happen is Goblins drop more loot than Orcs which isn’t something we wanted. So, I know we can handle this at level design and consider the situation in mind while designing level but you know accidents can happen or simply we forget some modifications.
Is there a systematic way to handle these situations?
Hi Majid, good question.
It’s a much more complicated problem to solve, for sure, and one that we didn’t really address in the Ratchet or Skylanders games that used the system. Since where the loot was coming from is always obscured a little, the player would never run into a situation like that. Further, we would randomize it a bit so that it got even more obscure.
There are probably much more complex ways of doing it so that Orcs always have more than goblins, but here’s the first and simplest thing that comes to mind:
Let’s start with describing the problem you’re talking about:
We’ve got a level with goblins and orcs:
Goblins have a value of 2
Orcs have a value of 4
Goblins as a group get a pool of 1x gold
Orcs as a group get a pool of 2x gold
That’s a total of 3x
So if the level has 1000 gold, 1000/3 is about 333
* The Goblin pool is 333 gold
* The Orc pool is 666 gold
If you have 100 orcs and 10 goblins, each orc gets 6 gold and each goblin gets 33 gold.
This isn’t what we want, so we adjust the two ratio values at the top:
Goblins are now a value of 1 instead of 2
Orcs are now a value of 20 instead of 4
Goblins as a group now get 1X gold
Orcs now get 20x gold.
That’s a total of 21x
With 1000 gold in the level, 1000/21 is about 47
So if you still had 100 orcs and 10 goblins you’d end up with each orc getting 66 Gold and each Goblin getting 47
This won’t stay balanced if you go in and add like 100 more goblins, but you only have to change 2 numbers as opposed to the numbers on each enemy. Ideally you’d have some sort of debug screen or excel file that could spit out all this math for you and make it super quick.
I’m certain there’s a way to do this programmatically so that the system knows if there are more orcs than goblins and automagically adjusts the values to work that way — but I think such a solution would probably need to be designed to be very specific to the game you’re making.
Wait, I think my math was off in that example and goblins still get more — but hopefully you see what I mean by using those two values to fix it.
Your descriptions help me a lot to be precise with what i thought would be right solution.
Also you gave me a new vision for balancing enemy related economies. Thank yo very much sir.