15
\$\begingroup\$

I have a parkour game with over 200 levels and I want to be able to compare players by assigning each one a score that is based on their overall performance on the levels (how fast they can finish the levels). This score then determines the "ultimate" leaderboard for who the best players are.

How I currently do it:

  • I look at the leaderboard of each individual level and award points based on the position on that leaderboard. 1st player gets 10 000 points, 100th player gets 100 points - everyone else in between gets their points calculated from an exponential curve. Beyond position 100 players get 0 points
  • I then divide everyone's points by the total number of levels to get an average - this is their final score I compare everyone with

I average the points because new levels are frequently added and I don't want the score to be inflated with the addition of new levels.

The problem:

  • Some people are extremely good and are 1st on many levels but have only played about half of all levels. This gives them a decent score but the averaging process severely punishes them for not having finished all levels. Players that are noticeably worse but have played all levels and finished with a good (but not great) placement in the top100 are ranked higher in the final score.
  • I thought about taking the average of only those levels that a player has actually finished, but then someone might get punished for trying a new level and not playing it a lot to get a good time, thus lowering their average points per level

Is there a way for how I can make this system fairer such that

  • better players actually get a better score
  • the score does not inflate with the addition of new levels
  • finishing a level for the first time with a bad time doesn't decrease the players score

I'd be happy to hear your suggestions for how to improve my system.

\$\endgroup\$
7
  • 4
    \$\begingroup\$ If you find a viable solution, please purpose it to SE meta. \$\endgroup\$
    – user122973
    Feb 9 at 2:22
  • \$\begingroup\$ Have you thought about adjusting your exponential curve? Because its sounds like a good idea that should precisely reward very good performances on only some games. By just tweaking the exponent parameter, you should be able to reach the desired hierarchy between isolated high performances and constant average performance. \$\endgroup\$
    – Johan
    Feb 9 at 22:28
  • 1
    \$\begingroup\$ Taking a player's maximum level score as their score deals with the "playing a new level" issue, but it loses a lot of discriminatory power. Taking the sum of a player's scores gives good discriminatory power but rewards completionists unduly. Now here's the cool bit: sum is the L1 norm, max is the L infinity norm, and there's a completely smooth continuum between them. Pick any number to get closer to one or the other of those properties. For the Ln norm, add the n'th powers of all the scores, then take the n'th root. You might recognize the L2 norm as the distance formula we learn in school. \$\endgroup\$ Feb 10 at 5:04
  • 1
    \$\begingroup\$ Considering 2 possible sets of player times for the same level: 5, 5.1, 5.2, 5.3, 5.4, 100 and 5, 25, 45, 65, 85. Do you want those to be scored equally? If not, you might want to score (primarily/exclusively) based on time, rather than position. Although large gaps probably wouldn't exist for too long in a competitive position-based scoring system, as that provides a specific strong incentive for other players to land in that gap. \$\endgroup\$
    – NotThatGuy
    Feb 10 at 10:26
  • \$\begingroup\$ @NotThatGuy I believe it is safer to score both equally. Points in many sports are only for ranking, also differences won't be all that large in most cases. And, most important, if op makes a mistake and has a bug in a level allowing you to complete it in 10 seconds instead of 50, ranking doesn't change but giving points based on time makes playing such levels absolutely needed to compete for the top spots. And if the bug is tedious to exploit it might push off many people that would otherwise compete in N-1 levels but now see no point as the top players are required to exploit that level. \$\endgroup\$ Feb 11 at 14:42

3 Answers 3

23
\$\begingroup\$

I wouldn't actually consider it a bad idea to have a leaderboard that takes scores of all levels into account. Even those the player hasn't played at all, using a score of 0 for them.

  • It avoids a global ranking that is dominated by "one trick ponies" who specialize in only a few selected levels and ignore the rest. Due to the difficulty of perfectly balancing the difficulty and scoring of over 200 levels, I would suspect that quite a lot of players will choose the same levels for this purpose, making this metagame rather boring. If you still want to encourage players to become masters at their one favorite level, then you can have level-specific leaderboards as well.
  • It can't be exploited by players who create new accounts to only play the one level they are good at and ignore all the rest.
  • It generates an incentive for players to play and master all the levels, because doing so can only increase their score. This results in more variety in their game experience.
  • It increases player retention, because when new levels get released, then inactive players with good leaderboard positions will have to return to the game and get some good scores in the new levels as well in order to defend their rank.
  • And if they choose not to, then that makes the game more attractive to new players. Inactive players won't be able to hog the leaderboard positions due to all the newly released levels making their score far less impressive. So new players who play the old and the new levels will be able to dethrone them. This is actually a reason why you want some score inflation and power creep in an online game. It gives new and active players a way to compete with old and inactive players.
\$\endgroup\$
4
  • 1
    \$\begingroup\$ In general I agree, something like simply adding the points from all levels works fairly well. It does have the disadvantage that it rewards people who are able to spend endless hours on the game though. This is a common drawback, people who play the game 8 hours per day will reach scores that are impossible to achieve for someone who plays 'only' 10 hours a week even if per time played they are the better player. \$\endgroup\$
    – quarague
    Feb 9 at 17:27
  • 1
    \$\begingroup\$ @quarague How much time people are willing to invest into practice is a factor that affects any form of competition, not just in video games. People who dedicate their life to a skill will always be better than those who only do it casually. \$\endgroup\$
    – Philipp
    Feb 10 at 8:03
  • 2
    \$\begingroup\$ You comment is not really addressing my point. It is true that in general people who spend more time will be better. But my point was that in this scoring system people who spend more time will score higher even if they are a slightly worse player. You need to spend a huge amount of hours to reach a high score. Zizy Archers proposal addresses this problem. \$\endgroup\$
    – quarague
    Feb 10 at 9:03
  • \$\begingroup\$ "Due to the difficulty of perfectly balancing the difficulty and scoring of over 200 levels, I would suspect that quite a lot of players will choose the same levels for this purpose" Huh? The scores are relative; they are based on player ranking. If lots of players focus on a level, there will be a lot of competition for the tops spots, making it less attractive. \$\endgroup\$ Feb 11 at 6:59
11
\$\begingroup\$

You can use the same 1/x function you are using to calculate your score in a level to weigh score of your levels. You get 100% for your best level, then 50% for the next one and so on. This means that starting your 100th level will only net you 1/100 points you could get - so, you don't lose points no matter how bad you did, but you barely gain any new ones even if you are as high as in your other levels. Once you add levels, yup, score will keep increasing, but slowly. First 100 levels will give you 5.2x points (of a single level) while levels 101-400 - 3 times as many - will only improve your score by 1.4x - 1/3 of the first 100 levels.

Note that this combination of functions (scoring per level and weighing level score) means that rank 2 in 3 levels is still worse than rank 1 in one level - meaning if you want to be the best on the main leaderboard, getting to rank 1 in some levels matters the most - top players are going to be those that manage to be the best in some levels, even if they compete in (and completed) only 10 levels out of say 500.

A side note: I wouldn't make a cutoff for level points at top 100 players (unless you have some specific reason for that) - I would simply calculate score as 1/x as you are already doing, without any cutoff - yeah, your poor run that gives you only rank 20000 for that level only nets you 0.5 points, but that's still an improvement to your score, making you feel your level run wasn't a complete waste of time. Additionally, this should help for retention of non-top players. Yeah, you are fighting for spot around 1000 instead of top players battling for the top ones, but you still get a feeling of improvement as you climb up the ranks. When paired with 1/x function for level scoring, getting those 0.5 points, divided by say 100, means you don't actually improve your score meaningfully. But you still don't regress by trying new levels.

As mentioned by @quarague in comment, you can also change proposed function from 1/x (= x^-1) to something steeper or slower - steeper means fewer levels matter, slower means more matter. I believe sensible range for the exponent is between 0 and -2. 0 means that all levels matter the same, so you reward griding of all levels. -2 means the best level is worth more than all the rest combined and you shouldn't really bother with more than few. I believe you should probably try -1 or -1/2 first.

\$\endgroup\$
2
  • 5
    \$\begingroup\$ This is very nice. One could experiment a bit whether an exponent of -1 as in 1/x is ideal. Having the score drop of a little slower say x^{-1/2} = 1/\sqrt(x)$ would mean you need to do well in a few more levels, increasing the exponent to -2 with 1/x^2 rewards even more being number 1 in one specific level. What works best here depends on taste and game specifics. \$\endgroup\$
    – quarague
    Feb 9 at 17:34
  • \$\begingroup\$ Very nice, going from averaging to less and less meaningful contribution encourages experimenting and makes creating a new account self-defeating. \$\endgroup\$ Feb 10 at 8:21
5
\$\begingroup\$

There won't be a perfect scoring system. There will be always someone who is unhappy or feels it is unfair.

How I would tweek it:

  • Your score is calculated from the X best played games. This way, people can try out new levels without having to fear that their score drops. It does not even need to be an average that way. (If X is 10, sort all levels the player played by score and take the top 10 scores)
  • Add a small bonus for each level played. The bonus gives a player the incentive to play more levels, even if they don't place well there. Just for a small increase in score.
  • Keep the current leaderboard for each level to give the player a benchmark how good they are in comparison.
  • Add maybe a small reward for the top player of a leaderboard that they are allowed to keep as long as they keep their position. (For example level 1-20 gives a green hat, 21-40 sun glasses, 41-60 a clown nose). Just some cosmetic extra with no playing benefit.

This way new players final score are fast done but it will take a lot of practise to get a top score. Players that play a lot still get a small increase compared to new players.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .