How Tough Is Your Game? Creating Difficulty Graphs: Part I
Games Development
[Having trouble figuring out how difficult your game really is? Xibalba Studios lead game designer Rafael Vázquez devises a method for plotting difficulty -- and uses three popular sidescrolling action games to test the theory, in the process explaining how difficulty meshes their overall design.]
A few months ago, during the prototype stage for a new project, I noticed a problem starting to brew. We were having lots of trouble identifying the ideal difficulty for our game, as different members of the team had very different ideas on what is the perfect challenge.
I know this is a common issue for small, diverse teams, as what one member might think is a walk in the park another will find more akin to torture. The problem was that everyone had different skill levels, and because of this we weren't going to reach an agreement anytime soon.
After thinking about this issue for some time, it came to me that difficulty in a game should not be related to player skill, but to the game itself. Instead of looking at the game's difficulty as a static, all-encompassing threshold, we would do better to discuss how it changes throughout the game.
With this in mind, I tried to develop a method to measure and compare how challenge rises and falls across a game, independent of the player's skill. This article tries to explain this method. It might still be a little rough around the edges, but I believe it's a good start, and I hope it encourages discussion in the community so the method can be perfected.
Enter Difficulty Graphs
Getting difficulty right is tough. It might seem redundant, but that doesn't make it any less true. Make the game too difficult, and people will get frustrated; make it too easy, and they get bored. This is common knowledge, and so designers typically strive for the middle ground. Most of the time, we do this by gut feeling, which is fine.
As it is, the game's difficulty really depends on the type of game and the type of response we want to get out of the player. A calming social game and an adrenaline-pumping FPS are worlds apart in challenge. The problem comes when you try to talk about this challenge to your fellow team. Long hours pass, and no one seems to agree if that game section is just the right amount of tough.
This is because difficulty is subjective; it depends a great deal on an individual's skill. To make things worse, the right difficulty also depends on what each person finds fun; some people like masocore games like Super Meat Boy. So when you're trying to create a game, it's a real problem to find common ground from where to start discussing.
There is a solution, however -- a method to find a common base which we can all agree on: difficulty graphs. Before we dive in though, a quick disclaimer. This method is not for creating difficulty (that's still up to the designer's gut, I'm afraid), but for difficulty analysis, and as a means to start meaningful conversation with the rest of your team about it. These graphs don't show you how a difficult a game should be -- only how difficult it is.
So What Are They?
They are graphical representations of how difficulty changes throughout the game. This is to say that they plot how challenge changes over time. There are two main types, time-based and distance-based. The first places the spikes in challenge according to the time spent played (taking away paused time and death); while the second places them depending on where the challenges appear (assuming a direct route from start to goal).

Both have their advantages, and some work best depending on which type of game you're testing. For arcade games like Asteroids or Geometry Wars, time-based is really the only way to go, as there is no real displacement towards a goal.
On the other hand, most FPS use location-based triggers for their enemies, so distance-based graphs work very well. Personally, I like time-based graphs better, and we'll get to why in a moment.
Nitpickers might have already noticed that both of these still depend on the player. How fast the player goes through a level and how much time it takes him to get from one challenge to the other depends on how good he is at the game, and also at his play style (if he likes exploring, you can kiss time-based graphs goodbye).
The truth is that our medium is experienced differently by each and every one of us, and this is something we have to live with. The best we can do is get data from multiple playthroughs from different people and average them out. As a matter of fact, difficulty curves can only be applied after playtesting the game several times. After enough testers have tried the game, you'll get a pretty good idea of what the average player experience is.
As you might recall, difficulty is subjective, and asking all the testers if they felt the game too difficult might give you wildly different answers (you should still do it, though). How then can we measure a game's difficulty if it depends on the eye of the beholder? The trick is we compare it onto itself.
Say we have a basic enemy that deals x amount of damage. Let's say he has a threat level of 1; this will be our base enemy. The threat level is basically how difficult an enemy is compared to the player. If, on the other hand, we have another enemy with twice the amount of firepower but the same in all other aspects, we can go ahead and say that it is twice as dangerous and give him a threat level of 2.
I know this might seem to oversimplify things, and that other factors like location, position, and the presence of other enemies matter... We'll get there. The point is that, by taking the easiest challenge present as a standard (your base enemy), and comparing it with other challenges in the game we can quantify how tough each one is independent of skill. No matter how good you are, an enemy that is three times faster is tougher than the standard.
However, the enemy's stats are not the only things that affect difficulty. If the enemy spawns behind the player or on top of him, it changes how tough they appear to be. Even puny low-level enemies can be quite a challenge if they appear out of nowhere.
That's not all. A flying enemy is tougher than a land-based foe, as is one that is hiding behind cover. On the other hand, a distracted enemy, or one that is looking for you somewhere else, is a piece of cake. The situation affects dramatically the difficulty of a given challenge. To account for this, we use a situation multiplier.
A situation multiplier is a number that tells us how much more difficult an obstacle is due to its spatial relation to the player. The exact nature of each multiplier depends largely on the design of the game.
Flying enemies are not as much of a problem in a twin stick shooter as they are in a D-pad based shooter, simply due to the precision of aiming. Hence how much each multiplier weighs is up to the designer, who has to check them depending on the game's mechanics.
A good way to get an idea of how easy it is to overcome an enemy is basing it on how many actions the player has to do to get them. The more straightforward the killing, the easier it is.
Having this, we can multiply them by the enemy's difficulty value. Suppose, for example, spawning behind the player is a 1.2 multiplier and that we have an enemy of threat level 3; if that enemy spawns behind the player his new threat value would be 3.6.
We also have to take into account that most of the times enemies don't come alone; they bring along buddies. In that case we simply add the difficulty of all enemies that appear at the same time (or at the same place). This would give us the difficulty value for the wave of enemies. This is why I like using time-based graphs, as an enemy encounter (borrowing Mike Birkhead's definition) can have several waves in the same spot, most of the time triggered by defeating the previous wave. A distance-based curve might mark them up as being all at once, which is not entirely true.
So the base formula to find a wave's difficulty would be:
Ʃn=0 = (ETn)(ESn)
Where: n is a specific enemy in a wave.
ET is the enemy threat level.
ES is the situation multiplier.
After finding the total difficulty value for the wave, you just have to plot when or where the player finds it. Do this for all waves in a level and... ta-da! You get a difficulty graph!
Player Power
There's one more aspect that I haven't touched yet: power-ups. It's a really big field, and it probably deserves its own piece, but we can't just ignore how it affects difficulty. You see, when comparing an enemy's or wave's difficulty we do it under standard conditions.
Among other things, this means that we assume the player character will be at the same level of power and have the same set of skills during the progress of the level. Frequently this is not the case, and the player will gain or lose abilities throughout the game. This presents a problem, as enemy A will not have the same threat level before and after you give the player a nuclear bomb. Power-ups can occur at any point of the game, even inside an encounter -- and so they have to be taken into account.
We can roughly divide power-ups into two main types: permanent and temporary. Permanent power-ups are those that once obtained are never lost during gameplay. This includes new abilities ("You can now double jump!") and new weapons with easily acquired ammunition (for example, by enemy drops). On the other hand, temporary power-ups are those which can be lost during gameplay, for example by dying, or that have limited ammunition (only six bullets in the whole level). Once lost, they are gone for good.
When faced with the first kind, you can safely assume that the standard conditions have changed (sticking to your pea shooter throughout a game is not normal player behavior.) This means that you can recalculate the enemies' threat level to this new standard. An enemy which needed 10 shots to kill now only needs two, if everything else stays the same, he would be five times less dangerous.
Temporary power-ups are trickier. The problem with these is that you can't really know if the player has them at any given moment. Balancing difficulty with the idea that they have the power-up can lead to severe player frustration as they face enormous difficulty spikes. There is no easy way around this, but what we can do is to create a graph under the previous standard condition (as if the player never acquired the power-up) and then mark their position on the graph with a vertical line. This way, although we plot for the worst case scenario, we can clearly see where power-ups could help the player.
Thanks for reading, are you still in?
If you enjoyed this article, it would be cool if you press like, or write something to me, it will make me to post more often and more cooler content ;)
Further Reading:
Linear algebra for Game Developers
How to create hyper-casual game ?