The Shape of Curves

When balancing progression (player power, difficulty, costs, etc…) It is often useful to think about the shape of the curve first. This will give you a sense of how quickly progression will ocurr at different part of the game. Here is a collection of graphs and their base formulas:

Linear

y = mx+b

m = the slope of the curve;
b = where the curve crosses the y axis

Parabolic

y = mx2 +b

This curve is y = 1 * x + 0
m = the apperture of the curve,
b = where it crosses the y axis

Inverse

y = m*sqr(x) + b

This curve is y= 2.1 * sqr(x) + 0
m = the openess of the curve
b = where the curve touches the y axis

Hyperbolic

y = m * (1/x) + b

This curve is y = 5(1/x) + 0
m = the sharpness of the curve
b = where the ‘floor’ is.

Logistic

y = (1/(a + c * e-m * x) ) + b

This curve is (1/(0.4 + 75 * e-3.4 * x) ) + 1.4
a = changes the top of the S-shape
b = moves the S-shape up and down
c = moves the S-shape along the x-axis
m = changes the slope of the S-shape

Logarithmic

y = m * log(x) + b

This curve is y = 3.4 * log(x) + 2.5
m = the openess of the curve
b = moves the curve up and down

Exponential

y = m * ea * x + b

This curve is y = 0.4 * e 0.3*x + 0.2
a = the openess of the curve (in smaller detail)
m = the openess of the curve (broadly)
b = the ‘floor’ of the curve

Exponential Decay

y= m * ax + b (where 0 < a < 1 & m > 0)

This curve is 36 * 0.72x + 0.5
m = shift the curve to the right (inverts it if negative)
a = how sharp the curve is (the closer to 0 the closer to a 90ยบ angle)
b = moves the curve vertically

An interesting trait of this curve, is that… if a > 1, it approximates a linear interpolation, where the difference between each number increases in a linear fashion. This causes a curve as follows:

y= m * ax + b (where a > 1 & m > 0)

This curve is 0.3 * 1.3x + 0.4

In other words, it allows for exponential growth where each level of x increases by a percentage. If you want a curve where each unit of x increases by 20% then y= 1.2x . In the case above, it grows by 30%.

For all of these, I like to use graphing calculators like Desmos to play around with he values. The formulas above are not complete and you can definitley add, substract, multiply, etc… more factors to get the kind of curve you want.

One useful tip is that your progression doesn’t need to match a single curve. You can break down the progression into different sections (for example from a player journey) and have an individual curve for each. This allows you to be kind to new players and tough on experienced ones.

The shapes of curves como from algebra. If you want to learn more about them I suggest taking math courses in Coursera or Brilliant.

  1. Define your axis
  2. Define your key points (moments you want the curve to have an exact value )
  3. Chose a curve you think will fit well based on the shape and intended experience
  4. Use a regression tool (like Desmos) to find approx values
  5. Adjust the values to have the best shape

Depending on the situation, it might be hard to find a curve that hits all the values you want. Don’t sweat it! You have two options here:

  • Divide the curve into subsections and find a different curve for each
  • Transcribe the curve values to a table. The curve will give approximate values, but you can then adjust them manually during the transcription. Useful for example when you want to round your values to a specific zero point.

Let’s imagine that we are working in the player progression for a mobile RPG. You get some experience points, and once you’ve passed a certain threshold, you increase in level. Rewards ensue.

https://i.stack.imgur.com/lFdDJ.gif

Another designer, in charge of the tutorial, has mentioned that they want the first 5 levels to be at 10, 25, 40, 65, 100. On the other hand, the lead designer has stipulated that they want players to earn levels fast early, but then for it to become harder and harder (a very common design pattern). He wants te inflection point to be at level 10.

The problem above already tells us which axis to use, xp points on the y-axis and levels on the x. The first designer has also given us some key points, while the lead has suggested that we divide the curve into two: one for the beginner players (up to level 10) and one for the rest.

Beginner curve

If we plot out the first designer’s values, we can see that it follows a slight quadratic formula. Using regression, we can find the approximate values they are following.

With this formula we can approximate the next 5 levels so it’s up to 10. Now the values are not exact; but we can massage them as we transcribe it. (i.e. level 7 is 186 xp… we could fudge the number to 190xp to make it easier on the players to remember). That would give us a table as follows:

For the second curve, let’s say we feel an exponential curve would be the best way to go based on the shape. This gives us a formula to use as a base

y= m * ax + b (where a > 1 & m > 0)

We know tha it the transition is around 370, so we can set b to that to start. By trying to align the ‘elbow’ of the second curve at that 10,370 mark, we can also move n to 0.43 and to make it less extreme, we can set a to 1.42. Together our curves look like this:

I moved b of the second curve to 390 to give it a bit of a boost at that point. Once you have the basic shapes, you can play around with the values to get the exact curve you want.

From here we can now transcribe the values to a table and playtest to make sure players respond as we expect.


  • MDA Framework
    One of the most widespread ways to analyze a game holistically.
  • One Pager
    A critical part of pitching a game idea to the wider team.
  • SWOT Analysis
    An easy framework for analyzing the competition.
  • Bartle’s Player Types
    One of the oldest & most widely used player categorizations
  • Personas
    A technique to humanize the intended players of the game
  • X-Statement
    The first step in development after having the game idea.