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).

Advertisements

Playskool, my first Game! – Part 2

Follow up from part 1, game dev story about my 1rst game : Cube Overlord

Better code

Once I had my theme set, I started going deeper into coding, I found those two very nice Libgdx tutorials :

The code is slightly outdated because of the newer version of libgdx but still VERY useful. I had a go at it, learned a bunch of stuff and reworked a lot of my code.

Iterate

I try not to get stuck on details at first, work out the base gameplay and iterate, I would say that I have trashed about 70% of the code I have wrote while working on my game. So now I test gameplay ideas and don’t get too attached. I will iterate through, and throw them out if necessary. My first iterations were usually not good enough but some ideas stick and other may pop up to be reused later.

Emerging gameplay : similar to the emerging Architecture trend we have in the lean/scrum methodology. Don’t get too hang up on your ideas, they might look good on paper, but it’s a whole different experience when playing. Set up something simple at first and see where it takes you – what works and what doesn’t -, try out your new ideas, keep the ones that works and throw out the others. Keep doing it until you get something that you feel is good enough. Only then should you start polishing your game. You should probably follow the same route  when you want to add new features.

Testers

I kept on working on my game for some time before I was ready to show it to friends/family. It was hard for me (and I guess so for many people) to show my game to others. I kept thinking that it wasn’t good enough to show. But try not to let that thought block you. It’s very useful to discuss your game and get feedback early on.

It is very hard to find good testers and get good feedback, but it is a very valuable resource to have available and will easily make your game much better, what they can do for you:

  • Find bugs (obviously)
  • Feedback on gameplay mechanism (not fun, unfair, unplayable etc…)
  • Feedback on controls
  • Feedback on graphics and usability
  • Brainstorm with you when you are stuck, give you ideas

You have to shift through lots of ideas, some goods, some bads (or simply not adapted to your situation). I try not to be negative with my testers when they give me feedback, I let them talk, note their ideas. I also learned not to dismiss their ideas straight on, even if they sound bad, they can hint to deeper problems within the game.

If this is hard for you, you should try to find other indie game devs, their feedback is often very useful and they are also very supportive of other game devs. I have been lurking reddit’s gamedev community and I love it :)

Have a thick skin: It doesn’t help that some people will simply not be interested in what you show to them, friend or family alike. In this case, just move on, you can maybe show them a better version later, but for now, look for other testers. Learn to accept criticism even if you don’t like it, some people will be very direct, sometime even in a rude way, don’t get hung up, get the meaningful information and work on it.

Keep looking : Congratulation, you found some testers ready to try your game and give you feedback, great, use them, listen to them but don’t stop looking! More eyes on your product means more feedback, more bug reports, more devices (if you are targeting android). It’s also useful to get some fresh eyes on your product once in a while, testers will become better players after a while, skewing their vision of the game. They will also probably be among the early adopters and spread the words about your game once it is out, free marketing!