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
Parabolic
y = mx2 +b
Inverse
y = m*sqr(x) + b
Hyperbolic
y = m * (1/x) + b
Logistic
y = (1/(a + c * e-m * x) ) + b
Logarithmic
y = m * log(x) + b
Exponential
y = m * ea * x + b
Exponential Decay
y= m * ax + b (where 0 < a < 1 & m > 0)
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)
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.
- Define your axis
- Define your key points (moments you want the curve to have an exact value )
- Chose a curve you think will fit well based on the shape and intended experience
- Use a regression tool (like Desmos) to find approx values
- 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.
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:
From here we can now transcribe the values to a table and playtest to make sure players respond as we expect.
- MDA FrameworkOne of the most widespread ways to analyze a game holistically.
- One PagerA critical part of pitching a game idea to the wider team.
- SWOT AnalysisAn easy framework for analyzing the competition.
- Bartle’s Player TypesOne of the oldest & most widely used player categorizations
- PersonasA technique to humanize the intended players of the game
- X-StatementThe first step in development after having the game idea.