Scoring System – Balancing and Handling difficulty

It’s been quite some time since I have posted! What have I been up to ?

  • I’ve updated my first game: Cube Overlord for Android.
  • I am waiting for libgdx free iOS publishing solution to come out of beta so I can start publishing on iOS too.
  • And….I’ve started working on a new Game !

My first game was a vertical scroller, I am happy that I did and released it. I am mostly happy about the results but it took quite some time and there are a lot of parts I am not so happy about. For my second game I want a simpler project where I can focus on those parts to improve my skills, so I am going for a puzzle game!

It doesn’t have a name yet but it’s going to be some sort of mix between Boogle and Tetris . The basis is quite simple you combine letters to make words and earn points.

I don’t have much to show yet, but I want to talk about the scoring system.

Most, if not all games nowadays have some kind of scoring system. You get 1, 2, 3…stars at the end of each level (I will refer to this as the “Star” system for the rest of this post), awards, achievements…

Cube Overlord - 3 Stars

Cube Overlord – 3 Stars

The Star System

The logic behind this is that it gives the players more goals to achieve and awards to collect, adding to the replayability of your game. Some players will be satisfied simply completing a level, but other want to beat the game 100% and get all 3 stars for each level. It’s usually good to cater to all kind of players.

Here I am not going to discuss whether or not this is a good idea but I want to talk about how I implemented and balanced this Scoring System in my new game, specifically how I designed my “Star” system

First, let’s talk about the possible criteria for this system:

Point based:

You get a star after you pass a certain threshold. The way the user collect those points is specific to your game and can vary in difficulty

Checkpoint based:

You get a star for a specific action or for filling a specific game condition in the level, there are many possibilities and of course most will be specific to your game. Here are some examples :

  • Finish the level under x seconds
  • Finish the level without getting hit more than x times
  • Collect one or several special/hidden items

This is usually a good idea when you want your users to experience your game in a different ways, explore the level instead of rushing to the exit (or vice versa), play stealthy rather than rush into the battle etc…

All is one

You might be tempted to convert those conditions into points as well:

  • The remaining time is converted into points,
  • The player looses points when  he gets hit
  • Special items gives a set amount of points.

but there are several drawbacks to this method

  1. If there are several ways to earn points, you loose the ability to “orient” the user toward a specific action/gameplay. Which is not a bad thing by itself depending on what kind of game you are going for. Leaving multiple options to earn stars means that you can play the way you want and not be punished, of course this work only if you have viable gameplay alternatives.
  2. You risk complicating the scoring system and making it too opaque for your player.

Examples

Cube Overlord

Most games will base their scoring system on points only or on a mix between points and checkpoint. Here is what I did for Cube Overlord:

  1. A star for completing the level (minimum required)
  2. A star when getting more than X points
  3. A star if you completed the level without being hit a set number of times (0 for harder levels)

What does this achieve ? Well in Cube Overlord, there is a mechanic to increase your score multiplier but it requires you to stay in the same color for long period of times, this create a whole new sets of challenges for the player that I will not detail here. If the player only wants to complete the level, then he can play it safe, but if he wants to get this extra star, he will have to use this “optional” game mechanic and engage in this new gameplay.

In this game, I play tested each level several times and estimated the point threshold to get this star based on my own scores. This was quite time consuming and required me to retest each level after a redesign. I didn’t want to make the same mistake this time so I looked into other solutions. (I am not saying you shouldn’t play test your game!).

My new project

For my new game, I decided to base my scoring system solely on points. This is a decision that you have to make on a case to case basis. For me it was quite straightforward, in my game you will get more points by making longer words. There is no reason to add extra incentives such as “Make a 6 letters word to get a star” and since there is already a time based game mode planned I didn’t want to add a time based condition such as “Get X words under Y seconds”. There is nothing stopping me from adding those as Challenges/Awards later on anyway.

Using a point system has the extra advantage that it is easier to decide the thresholds value for each extra stars using a systematic approach:

Warning: The numbers used below are used for this example and may not apply in reality, but the logic remain true.

I have the following point system:

  • 2 letters word : 15  points
  • 3 letters word : 30 points
  • 4 letters word : 50 points
  • 5 letters word : 75 points
  • 6 letters word : 105 points

It’s not linear because the difficulty to find longer words increases exponentially so the point system reflects that.

This is not set in stone but we will use this as a base, I evaluate the difficulty for each possibility:

  • 2 letters word : Very easy
  • 3 letters word : Easy
  • 4 letters word : Medium
  • 5 letters word  : Hard
  • 6 letters word: Very hard

First solution

Let’s say I want my first level to be very easy, and I want it to last about 30 seconds, I evaluate it takes the average user about 3 seconds to make a 2 letters words. So to make the level last 30 seconds, the user will be limited to 10 words (10*3 = 30, my math checks out!). So the target for my first level would be 150 points!

Now I want my players to be able to over achieve and earn extra stars,

  • so for one extra star the difficulty should go from “very easy” to “easy”
  • and for two extra stars it should go up to “medium”.

Let’s say it takes 5 seconds for a player to make a 3 letters word, and 7 seconds for a 4 letter words.

  • So for a 30 second game session, the first extra star will require (30/5 * 30 pts) = 180 points
  • And the second extra star will require (30/7 * 50 pts) = 214

This is not perfect of course, in this case I think I should increase the score for each extra letter, but it’s a good start.

Second solution (not necessary incompatible with the first one)

Let’s say I don’t want players to keep entering words after they get the minimum numbers of points required to finish the level.

Using the numbers from the previous solution:

  • If the user skills correspond to the “very easy” difficulty level, then he will finish the level (150 points required) when he uses up his last move.
  • If the user skills correspond to the “easy” difficulty level (3 letters words), then he will reach 150 points after (150/30) 5 moves, with 5 moves lefts.
  • If the user skills correspond to the “medium” difficulty level (4 letters words), then he will reach 150 points after (150/50) 3 moves, with 7 moves left.

With this information, I can give each moves a set number of points (20 for example), and set the threshold for each star accordingly.

  • Second star : 5 stars left * 20 points = 100 points. Threshold is at 150 + 100 = 250 points
  • Third star : 7 stars left * 20 points = 140 points. Threshold is at 150 + 140 = 290 points

Of course, players will find words of different lengths during the same play session but this even out in average and you should still get a star corresponding to your skill level.

Following this system, it should be quite easy to establish a scoring system adapted to your game. You will need to tweak your numbers for other factors (for example take into account added difficulty in the level design).