Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Score inconsistency before & after a replay due to mishandling slider ends #27704

Closed
WiIIiamWei opened this issue Mar 23, 2024 · 7 comments
Closed

Comments

@WiIIiamWei
Copy link

Type

Game behaviour

Bug description

I've been watching a lot of replays recently and found a lot of score inconsistencies between leaderboard scores and replay scores. I tried a lot of different replays trying to grasp what is going on, and I found nearly all of them is caused by slider ends. So I assume there is something wrong in slider end judgements with Classic mod (i.e. stable scores in lazer).

Note: There seem to be similar issues, but I failed to find somthing that fully describes my situation imo. Sorry for the disturbance if you think I made a duplicate.

Screenshots or videos

Here are some examples.

# Link Leaderboard score Replay score
1 https://osu.ppy.sh/scores/393079484 score-2c score-2i
2 https://osu.ppy.sh/scores/1627966762 score-3c score-3i
3 https://osu.ppy.sh/scores/1637024169 score-1c score-1i

I intentionally watched a 2B slider map replay (example 3) to confirm whether it's because of slider ends. All the slider ends are considered a Miss in lazer replay rather than a 100/OK as it should be in stable.

Additionally, something interesting happened when I was exploring this situation:

2024-03-23.20-27-44.mp4

The replay score shown in the beginning is after the first time I watched the replay without speeding up or navigating the progress bar to skip and it is correct with 5 100/OKs. After watching it for a second time and navigated the progress bar to skip, an extra slider end 100/OK appeared in the score, causing inconsistency.

I put it here because it is also slider end related. However this could be another issue. Feel free to open another one to discuss this.

All the example replays mentioned in the table is not speeded up or skipped by navigating the progress bar, however in the video the first replay score is correct, meaning it does not reproduce every time and could vary from machines to machines.

Version

2024.312.1

Logs

compressed-logs.zip

@ssz7-ch2
Copy link
Contributor

ssz7-ch2 commented Mar 23, 2024

2nd example is combination of #11311 + #11769
3rd example is a 2b/aspire map so ignore those for now as support for these kinds of maps hasn't been added

Edit: Ignore below, I was looking at the wrong place.
For the 1st example, it appears that speeding up/skipping through the replay can cause the judgement times for sliderends & sliderticks to be inconsistent. The sliderend at 37435.50202502025 in this replay changes from a Great to an Ok when skipping through replay.

playback at normal speed skipping to end of replay
result.Type: Great
result.RawTime: 37436.085754347216
result.Type: Ok
result.RawTime: 37444

The times here are retrieved from the result in ScoreProcessor.ApplyResultInternal

@WiIIiamWei
Copy link
Author

For the 1st example, it appears that speeding up/skipping through the replay can cause the judgement times for sliderends & sliderticks to be inconsistent.

Sometimes without speeding up/skipping through could also cause inconsistency. This happened last week on the very same replay file but I didn't pay much attention. As I said:

it does not reproduce every time and could vary from machines to machines.

I'll watch the replay thoroughly for a few more times when I have time to see if it could be reproduced.

@WiIIiamWei
Copy link
Author

image

Reproduced after changing fps limiter from 2x to VSync. No skipping or speeding up. Does it have something to do with frame rate?

Logs here for diagnose.

compressed-logs.zip

@ssz7-ch2
Copy link
Contributor

ssz7-ch2 commented Mar 24, 2024

Sorry I was looking at the wrong place. The actual problem seems to be how lazer differs from stable with handling decimal numbers.

The check for sliderend starts at 37399.50202502025 in lazer whereas stable truncates it to 37399 afaik
And the replay has a frame with key pressed at 37399 and a frame with key released at 37402
So at 37399 stable counts it as a hit while lazer doesn't

The reason why the sliderend behavior is inconsistent in lazer is because, in order for the sliderend to be hit, the game has to check between 37399.50202502025 and 37402 (not inclusive). And low framerate/skipping through the replay will skip past that timeframe, causing the sliderend to be missed.

@tybug
Copy link
Member

tybug commented Mar 25, 2024

Replay playback — especially when seeking —is known to be a bit buggy; it could be any combination of these:

#22267
#19738
#19766
#21659
#23709

I'm going to cc @ppy/team-client only because @ssz7-ch2's theory on the third replay sounds promising and isn't one I've heard before (slider ticks having fractional times could cause discrepancies in scoring).

@Jasonwanplay
Copy link

I have similar issue too but with spinner.

@tybug
Copy link
Member

tybug commented Apr 3, 2024

Thanks for the report @WiIIiamWei. Since all of these cases are covered by existing issues, I'm going to close this in favor of #21659 and the issues linked here #27704 (comment).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants