Devlog #12 - Score in a procedural world


Lately I've been working on something that I initially didn't want to include in the game: a score system. Sound Horizons could indeed benefit from a bit of replayability. There is one big question though: how can we measure this score?

Why I don't like numbers in games

As a player, I'm usually not very fond of scores. I often find them too opaque, and adding too much complexity to the rules. When I'm facing a challenge, my only satisfaction comes from overcoming it. I'm very simple minded, if I loose I loose, and if I win I win. I just care about finishing the level, not getting an evaluation afterward telling me that I did it wrong.

However not everyone think like me. And after several playtests and difficulty balancing, I came to the realization that Sound Horizon is now  a very short and easy game for some players. Which might be problematic if I want them to enjoy the game enough to be interested in a bigger version. They probably won't remember a 15 minutes demo. I must provide to these skilled players a higher challenge: playing the game perfectly.

This could be another mode or modifier. But then not only it would add something more to develop, but also it would mean that the UX of the menu will get more complex, and I'd had to think when this is unlocked, how it's presented… So instead, I can include it in the base game by presenting a score at the end of the level. The game remains the same, but competitive players can play it again to improve their performance! It will certainly motivate rhythm game players, which are one of my target audiences. Score is a relevant reward here, even though it's not one that I usually enjoy.

Counting from 0 to Infinite

However for creating a consistent score system, there is one big problem we have to solve: the procedural generation of the levels. Not only are the notes random, preventing us to point specific chains or combo, but also the level runs in a loop that ends only once it is completed. When a player fails, they're juste taken a little back. This means that they could potentially stay in the level for a really long time, hitting a unpredictable quantity of notes. Two separate sessions can last a very different time. Thus, an accumulative score wouldn't make sense. We can't give more points to players who stay longer in the level because they made a lot of mistakes!

Every mistake just makes the level longer

Another point of attention is that, in the minimalist spirit of the game, I want the score system to be easy to understand. I don't like when scores don't clearly tell you how you can improve, or come with a set of meta rules to remember that transform an enjoyable game into an optimisation conundrum. The score system must be used to encourage player to just play well.

Here are the criteria that can be relevant for a score:

  • Number of notes missed : The more the player miss notes, the lower their final score should be. This seems pretty intuitive. The only catch is that there is no top limit to this value.
  • Number of layers failed: If a player miss too many notes, they fail and go back one layer down. However that doesn't necessarily mean that they played less well, it could just be that they missed at a bad time. So we shouldn't rely on it to compute a final score. However, we can still show it at the end, as it is a fun statistics regarding the player's experience.
  • Accuracy: Hitting a note perfectly on the beat should increase the score. But we must remember once again that there can be any number of notes!

Regarding accuracy, this isn't something that the game was reading until now. So once again, I implemented it in a simple, understandable way: a note is either invalid, ok or perfect. And of course, the perfect state isn't frame perfect, there is a margin for it, just tighter than the initial one. I had to update the animations a bit to differentiate OK notes and perfect ones. I also tried some sound effects on the instruments, but it ended up being confusing and not musically pleasant. In the end, I don't want to punish players with a negative feedback if they just hit "OK". It works better the other way around: "Perfect" is an extra reward, and "OK" is still a positive feedback that is slightly more subtle.


At the end of the level, the accuracy is computed from the ratio between OK and perfect notes. This means that it will always be a percentage, no matter how many notes the player hits in total. Actually it even means that this score can fluctuate during the game. If a player starts poorly, but then performs enough perfects, it can bring their total accuracy back up!

What about the total of hit notes? We have seen that it isn't relevant for a score, as this number can vary between attempts. However, if the results only show missed notes, failed layers, and an imperfect accuracy… It would a bit too negative for a score, wouldn't it? Exactly the kind of judgement I don't like in scores! So even if we don't use it for our final calcul, the number of successfully hit notes is displayed at the end of the level, next to the other criteria. This provides to players a good summary of their experience.

Evaluation time

But a list of numbers alone is not really a satisfying score. We need something more "conclusive" to give a final result! And so I used a classical system in rhythm game: Ranks. Going from S to D, it's a comprehensible value that is less intimidating than a four digit numbers. And also one that even I can enjoy a bit, as I find it motivational enough to target a higher rank!

To measure this rank, we have two quantifiable and objective values at our disposition: number of miss, and accuracy. I decided to base the rank on the missed notes. 0 Would give an S, naturally, as it means a faultless performance. Then the rank goes down after a certain value of missed notes, used as a step. Giving a value to this step was tricky. For now, Sound Horizons only have a single level, but it is planned to include several. And those levels won't have the same length each, some would be longer than other. And naturally, longer levels likely means more mistakes on the way. The step should thus be relative to the level's length. I could fix it arbitrarily, but I eventually decided to align it with the number of layers, with a factor of 1.5. For example for the main level of Sound Horizons, which has 6 layers, the step is 6x1.5 = 9. Which gives us: S for 0, A between 0 and 8, B between 9 and 17, C between 18 and 26, and D for higher.

We don't ignore the accuracy though! The accuracy is used for giving a plus mention if it is higher than 80%. This means that a player making numerous mistakes can still get something like a "C+" if they hit notes with enough precision. I think it balances the system well, and is rewarding enough.


The score system was also the occasion to implement the save! The best score is now saved locally, as well as the unlocked modes. Which are now implemented as well! But I'll present them in a future video. The game is now very close to be finished! I'm feeling optimistic for its release in September. Don't forget that you can whishlist it. See you on the next entry!

Leave a comment

Log in with itch.io to leave a comment.