Introduction
In my short time playing Osu, I’ve noticed a recurring theme. The scoring system is very heavily criticized. One of the issues I’ve heard in particular being the combo score. To be precise I heard it in the following video:
Misses early on don’t matter as much as misses in the end game. The video above explains it better than I probably could, so I really recommend you watch that. I’m not entirely opposed to this “issue,” because personally I think it makes the game more fun, as the farther you get in a song the more pressure there is to not miss. (Maybe I’m just a masochist who enjoys stress.) I do however understand Osu is considered an ESport and therefore a fair and mathematically “correct” scoring system is important to the core fanbase. (Obviously otherwise, it wouldn’t be a point of mass-debate.)
Anyway, I’m not entirely sure if anyone has suggested a similar solution, but I have tried going through forum posts and did a little Googling, and I didn’t see anything similar to a solution like this:
Concept Explanation
The looping system would simply calculate the combo by looping it back around. For example, let’s say you get a combo of 100 before missing your first beat. Then your final combo at the end is 50. In this case we would add the first combo (100) by the final combo (50) for a total of 150 combo to be multiplied by the score achieved in those two time frames, or simply (although not quite accurately) the combo would loop back around. This way misses will/should be weighted equally.
For the “Real Example” section below, I’ll score in, what I’m going to call, “post”. For those unaware, Osu scores on a live note by note basis, (we’ll call this “live,”) so that each note is multiplied by the combo score at the time of its click. I just think “post” is more fair. “Post” is essentially scoring each note in its combo by the total combo at the end of each combo. (Hopefully this makes sense, explaining this isn’t very easy.)
Finally, I’ll score it using scores of 1, 2, and 3, (“ANGEL” scoring system) in the “Real Example”, as opposed to scores of 50, 100, and 300. (“Base” scoring system) These numbers, honestly, just make more sense to me, because the “Base” scoring deviation feels kinda random. Also the numbers are way bigger than they need to be. Especially considering that there was (atleast at one point) a bug where if you scored too high, the binary memory would run out and you would get a negative score. So why have such big numbers when they literally cause leaderboard breaking bugs! If you really like those big numbers though, or have reason to believe the original scores are more fair, then I’ll add a result for “base” using those scores. It shouldn’t matter either way. (Also when it comes to spinner I’ll add the same way Osu does. By number of full rotations, but instead of 100 points per full rotation I’ll just do 2.)
What if you FC?
If you FC the map, then the total combo would just be multiplied by two, so no you won’t get an infinite score, by infinitely looping, hence the addition of “(although not quite accurately)” above. (Although the concept of infinity + your actual score would be cool to see on the leaderboard.)
Real Example
Above is the example video I used. I calculate this new scoring system using the following Python code:
For the calculateScore function I just used the equation provided on the wiki, substituting my own combo and adjusting for using the “post” method mentioned in the “Concept Explanation” section of this post. Notice how we set the difficulty multiplier to just 1. I would set it to an actual difficulty multiplier, but on the wiki it shows a very complex equation, with variables I don’t have access to. Furthermore I didn’t add spinners because that requires the number of full spins, and I’m tired.
If you know even a little bit of python you could test this system out yourself. You just have to put in all of your scores. (which can take a while) I also added the addAshiton (Add a Shit ton) method to allow you to add multiple of the same score in a row at once.
The original score according to Osu is 38,338. Using my code in the “ANGEL” scoring system, the score is 6,319. Using my code in the “Base” scoring system, the score is 625,456. And finally just in case the deviation had a reason I’ll use scores, 1, 2, 6. (ANGELd) This scoring system results in a score of 12,509.
Here is all of these listed out:
Conclusion + Addressing the Issues
From what I’ve heard and read, I know this doesn’t even begin to scratch the surface of issues people pull from the current scoring system. Furthermore I didn’t even talk about the PP system. (Mostly because I don’t get it. I understand that the formula is some combination of aim, speed, accuracy, and strain according to the Osu wiki, but they never show an actual formula, and I have no clue what “strain” is. If you know please explain below, I beg of you!)
This would basically be ScoreV3, or something along those lines. Personally I like the sound of ScoreVloop! (Score the Loop) Although I much prefer a separation. ComboV2/ComboVloop for the changes made to the combo scoring. And ScoreV3/ScoreANGEL/ScoreANGELd for the changes I made to the main scoring system. (Even though that’s not exactly the point of this post.) Setting it out like this would allow for a more modular scoring system so we could have for example: ScoreV1 + ComboVloop, or ScoreV2 + ComboVloop.
And finally if you view my account history, I’ve not been playing for very long, so I probably am completely clueless and this entire post was a waste of energy. Luckily, I enjoy writing pointless essays! /gen (over 1000 words long btw lol, not including this sentence obviously.)
Also one more thing! Assuming this system actually makes sense, maybe I’ll make a mod to use this scoring system. Depends on my energy levels/Community Enthusiasm/Ease of Modding Access and Documentation in Osu.
In my short time playing Osu, I’ve noticed a recurring theme. The scoring system is very heavily criticized. One of the issues I’ve heard in particular being the combo score. To be precise I heard it in the following video:
Misses early on don’t matter as much as misses in the end game. The video above explains it better than I probably could, so I really recommend you watch that. I’m not entirely opposed to this “issue,” because personally I think it makes the game more fun, as the farther you get in a song the more pressure there is to not miss. (Maybe I’m just a masochist who enjoys stress.) I do however understand Osu is considered an ESport and therefore a fair and mathematically “correct” scoring system is important to the core fanbase. (Obviously otherwise, it wouldn’t be a point of mass-debate.)
Anyway, I’m not entirely sure if anyone has suggested a similar solution, but I have tried going through forum posts and did a little Googling, and I didn’t see anything similar to a solution like this:
Concept Explanation
The looping system would simply calculate the combo by looping it back around. For example, let’s say you get a combo of 100 before missing your first beat. Then your final combo at the end is 50. In this case we would add the first combo (100) by the final combo (50) for a total of 150 combo to be multiplied by the score achieved in those two time frames, or simply (although not quite accurately) the combo would loop back around. This way misses will/should be weighted equally.
For the “Real Example” section below, I’ll score in, what I’m going to call, “post”. For those unaware, Osu scores on a live note by note basis, (we’ll call this “live,”) so that each note is multiplied by the combo score at the time of its click. I just think “post” is more fair. “Post” is essentially scoring each note in its combo by the total combo at the end of each combo. (Hopefully this makes sense, explaining this isn’t very easy.)
Finally, I’ll score it using scores of 1, 2, and 3, (“ANGEL” scoring system) in the “Real Example”, as opposed to scores of 50, 100, and 300. (“Base” scoring system) These numbers, honestly, just make more sense to me, because the “Base” scoring deviation feels kinda random. Also the numbers are way bigger than they need to be. Especially considering that there was (atleast at one point) a bug where if you scored too high, the binary memory would run out and you would get a negative score. So why have such big numbers when they literally cause leaderboard breaking bugs! If you really like those big numbers though, or have reason to believe the original scores are more fair, then I’ll add a result for “base” using those scores. It shouldn’t matter either way. (Also when it comes to spinner I’ll add the same way Osu does. By number of full rotations, but instead of 100 points per full rotation I’ll just do 2.)
What if you FC?
If you FC the map, then the total combo would just be multiplied by two, so no you won’t get an infinite score, by infinitely looping, hence the addition of “(although not quite accurately)” above. (Although the concept of infinity + your actual score would be cool to see on the leaderboard.)
Real Example
Above is the example video I used. I calculate this new scoring system using the following Python code:
values = [] #add the hit scores here (remember the miss = 0, 50 = 1, 100 = 2, and 300 = 3) #add a shit ton of the same score in a row to values def addAshiton(value, amount): for index in range(0, amount): values.append(value) addAshiton(3, 9) values.append(2) addAshiton(3, 22) print(values) valuesFinalIndex = len(values) - 1 #calculate the combo including looping def calculateCombo(values): combos = [0] combosIndex = 0 if(0 in values): for index in values: if(index != 0): combos[combosIndex] += 1 else: #index == 0 combos.append(0) combosIndex += 1 #add the last index to the first index combos[0] += combos[combosIndex] combos[combosIndex] = 0 else: combos[combosIndex] = valuesFinalIndex * 2 return combos combos = calculateCombo(values) print(“Combos Array: “, combos) #multiply the combo by the scores def calculateTotalValues(values, combos): combosIndex = 0 totalValues = [0] totalValuesIndex = 0 for index in values: if(index != 0): totalValues[totalValuesIndex] += index * combos[combosIndex] else: #index == 0 totalValues.append(0) totalValuesIndex += 1 combosIndex += 1 #valuesFinalIndex = len(values) - 1 totalValues[0] += values[valuesFinalIndex] * combos[0] return totalValues totalValues = calculateTotalValues(values, combos) print(“Total Values Array: “, totalValues) #add all of the scores togther def calculateFinalValue(totalValues): finalValue = 0 for index in totalValues: finalValue += index return finalValue finalValue = calculateFinalValue(totalValues) print(“Final Value: “, finalValue) #final score calculation def calculateScore(finalValue): difficultyMultiplier = 1 #This depends on a lot of factors, see Osu Wiki: https://osu.ppy.sh/wiki/en/Gameplay/Score/ScoreV1/osu%21 modMultiplier = 1 #in “Real Example” We just do no mods score = finalValue * (1 + (difficultyMultiplier * modMultiplier / 25)) return score score = calculateScore(finalValue) print(“Score: “, score)
For the calculateScore function I just used the equation provided on the wiki, substituting my own combo and adjusting for using the “post” method mentioned in the “Concept Explanation” section of this post. Notice how we set the difficulty multiplier to just 1. I would set it to an actual difficulty multiplier, but on the wiki it shows a very complex equation, with variables I don’t have access to. Furthermore I didn’t add spinners because that requires the number of full spins, and I’m tired.
If you know even a little bit of python you could test this system out yourself. You just have to put in all of your scores. (which can take a while) I also added the addAshiton (Add a Shit ton) method to allow you to add multiple of the same score in a row at once.
The original score according to Osu is 38,338. Using my code in the “ANGEL” scoring system, the score is 6,319. Using my code in the “Base” scoring system, the score is 625,456. And finally just in case the deviation had a reason I’ll use scores, 1, 2, 6. (ANGELd) This scoring system results in a score of 12,509.
Here is all of these listed out:
Original - 38,338
ANGEL - 6,319
Base - 625,456
ANGELd - 12,509
Conclusion + Addressing the Issues
From what I’ve heard and read, I know this doesn’t even begin to scratch the surface of issues people pull from the current scoring system. Furthermore I didn’t even talk about the PP system. (Mostly because I don’t get it. I understand that the formula is some combination of aim, speed, accuracy, and strain according to the Osu wiki, but they never show an actual formula, and I have no clue what “strain” is. If you know please explain below, I beg of you!)
This would basically be ScoreV3, or something along those lines. Personally I like the sound of ScoreVloop! (Score the Loop) Although I much prefer a separation. ComboV2/ComboVloop for the changes made to the combo scoring. And ScoreV3/ScoreANGEL/ScoreANGELd for the changes I made to the main scoring system. (Even though that’s not exactly the point of this post.) Setting it out like this would allow for a more modular scoring system so we could have for example: ScoreV1 + ComboVloop, or ScoreV2 + ComboVloop.
And finally if you view my account history, I’ve not been playing for very long, so I probably am completely clueless and this entire post was a waste of energy. Luckily, I enjoy writing pointless essays! /gen (over 1000 words long btw lol, not including this sentence obviously.)
Also one more thing! Assuming this system actually makes sense, maybe I’ll make a mod to use this scoring system. Depends on my energy levels/Community Enthusiasm/Ease of Modding Access and Documentation in Osu.