ppy / osu

rhythm is just a *click* away!
https://osu.ppy.sh
MIT License
15.41k stars 2.29k forks source link

Downloaded osu!catch replay show different result #6563

Open GSculerlor opened 5 years ago

GSculerlor commented 5 years ago

Describe the bug: Downloading replay for osu!catch will give you different rank and accuracy compared with the actual replay.

Screenshots or videos showing encountered issue: https://streamable.com/1kzkx

osu!lazer version: 2019.1021.0

bdach commented 5 years ago

Even though it's catch, I suppose this still falls within scope of #5514; closing as duplicate.

GSculerlor commented 5 years ago

I personally think that's different issue since 5514 is related to timing and gameplay problem and this issue is caused by in lazer osu!catch is read Perfect and Miss value when on replay from stable it have Great, Good, Meh, and Miss. But I think adding this issue to 5514's scope is make sense since that issue is bit too general

smoogipoo commented 5 years ago

Definitely different than #5514, #5514 covers actual gameplay/scoring/rank, while this seems like either accuracy isn't calculated correctly or imported legacy scores aren't upgraded correctly.

ekrctb commented 2 years ago

Accuracy is calculated as (num300 + num100 + num50) / (max300 + max100 + max50) in stable whereas in lazer it is calculated as (300 * num300 + 30 * num100 + 10 * num50) / (300 * max300 + 30 * max100 + 10 * max50). The rank assignment (S/A/B/C...) uses a different threshold as well. Is the direction to match lazer to stable?

peppy commented 2 years ago

@ekrctb where are you seeing the accuracy calculation difference? on a quick check that doesn't look to be the case (accuracy uses the baseScore ratio, which uses numeric hit results)

https://github.com/ppy/osu/blob/7d3249019887d1ee8ce62f61c7e17d92e55908e0/osu.Game/Rulesets/Scoring/ScoreProcessor.cs#L493

https://github.com/ppy/osu/blob/7d3249019887d1ee8ce62f61c7e17d92e55908e0/osu.Game/Rulesets/Scoring/ScoreProcessor.cs#L232-L233

ekrctb commented 2 years ago

@peppy The expression for lazer was wrong (tick results are scored 30, 10 https://github.com/ppy/osu/blob/f41e34ae2c840adadc16dffb04994b1da815a4ed/osu.Game/Rulesets/Judgements/Judgement.cs#L144-L148). Anyways, the difference is that lazer uses weighted sum but stable uses unweighted sum.

peppy commented 2 years ago

Right, I read your message back-to-front, it looks more correct now that I re-read. I'm not immediately sure of the correct direction here, would need to look into it further. @smoogipoo may have a better idea.

smoogipoo commented 2 years ago

I'm not sure either. Accuracy is tricky since we've lost data (e.g. ticks in osu-ruleset), but maybe we can recompute the accuracy server-side at some point to match the current lazer values.