Graphs for Player Progression Part I

Jiahui Cai
J’s Game Design and Tech Journal
6 min readFeb 15, 2016

You’re an hour into a new game and are slaying some monsters in Noobtopia. These guys take more than a hit or two to kill unlike 30 minutes ago despite your attacks causing more damage. You’ve lost a chunk of life but you’ve gained a level. Now you can equip that Sword of a-Little-More-Power! Awesome!

5 hours later (yes it’s that kind of weekend), you revisit Noobtopia for easy kills. You win every fight with single hits. The points you gain from each fight gains you a pixel in progression on your Experience Bar. Not very effective.

I’m not going to elaborate on the entwining of systems at play here but rather talk about how graphs are used to balance gameplay in an experience like the one described.

In general, player progression should serve the following purpose

  • Make the player believe that the next level is within reach (“Just a bit more and I’ll reach level XXX”)
  • Step up game difficulty in a way that the player could feel increasingly challenged with the next batch of enemies but will find him/herself more powerful when visiting previous areas
  • have a controlled means of deciding at which point in time to feature key moments, increased interactivity or rewards so the player remains engaged

Why Graphs?

Graphs encapsulate visually the story you want to tell with your game balance. Should the player learn slowly or quickly? How fast should the player level up and how much do you want to slow down players who have already been playing the game for a while?

You could think very abstractly about the overall game and come up with something like this:

Or you can think about the game’s difficulty and intend to pursue a learning slope like this.

Graphs are a systematic means of controlling progression and provide a guide for designers to build upon and around.

Linear Curves

General formula:

y = Ax + b (where A is the gradient and b is the y-intercept)

You’ll use curves like this if you want to be predictable. Players will know exactly when and what to anticipate because there isn’t variation. Graphs like this are usually used to complement mechanics with non-linear curves so you can better control the rate of increase of the mechanic.

An example of this would be the balance of enemy health over game time. You could start off with a linear increase of a typical enemy’s health at that point in time.

Now as the game progresses, you’ll expect to see more enemies. Here are two examples of how this could happen.

The resulting cumulative health curve is a polynomial curve since they’re both functions of time.

y = Num_enemy * enemy_health = f(t) * g(t^a) where a >1

To control the rate of increase in the resultant curve, the easiest way would be to vary the gradient on the linear curve (since linear curves are the easiest to visualise).

Polynomial Curves

General formula

y = Ax^B + C

Polynomial curves are usually used to create the sense of an increasing difficulty. An increase in x will result in a progressively-larger increase in y. Examples of what an x-y pairing can be includes level-experience, idle time-life regen rate, playtime — time before next bonus.

In most situations, you’ll want to keep B small so as to not complicate things and also, the larger B is, the steeper the curve as x increases. Also worth noting is that while the curve mirrors for all even values of B, the curve is a rotation for odd values. You’ll want to bear this in mind if you’re putting in values for C that would result in a horizontal shift in the curve and you probably won’t want to end up with negative values of y.

Exponential Curves

General formula

y = A exp(Bx) + C

At a glance, these curves are very similar to polynomial curves in shape. The main difference for our purpose is that the gradient in exponential curves are steeper for the same values of x and that there is an asymptote at y = C.

Note C1 > C

In the above example, we’ll focus first on the purple and red lines. Before the point of interception, the purple line goes through a stage where its gradient is flatter than that of the flat line before transiting into sudden steepness. Such situations could translate into a sudden difficulty step-up when leading to boss fights.

If a quadratic function is used as a baseline, an exponential curve could also be used to vary the pace of the game in comparison to the baseline. Unlike the purple line, the green line cuts the red in 2 spots. Let’s take for instance 2 characters that utilize these curves for damage. The scenario would work out something like this —

  • Green would start with higher stats and feel more powerful while Red would gain stats faster and get satisfaction from closing the gap between the two and the anticipation of being even more powerful at some point.
  • After interception, Green goes through a period of challenge while Red reaps pay-off from finally overtaking Green.
  • Next, Green’s progression picks up as the curve’s gradient steepens substantially. Pay-off comes from this being the first time so far that Green is encountering a significant pace increase.
  • Green overtakes Red once again and gets to feel more powerful.

In general, exponential curves should have an upper limit to X so as to not create situations where the rate of increase gets too high.

Logarithmic Curves

General formula

y = A ln(x+B) + C

A lot of people misidentify these as exponential curves. Log curves have an asymptote at x =-B.

These curves are generally easier to manage in the long run than exponential or polynomial curves because they get increasingly flat. In MMOs, this means that your top players will eventually reach a stage where they time investment won’t matter as much as skills.

In Conclusion

The type of curve chosen depends on your intentions. Mostly, you would seek to answer the question of how fast you want the player to progress at a given time and how you want that to change (or if you want that to change) over time.

The next part will deal with formulating equations. You can read it here.

--

--