Scrolling through replay can cause sliderticks and sliderends to show as misses
Type
Game behaviour
Bug description
As seen here https://github.com/ppy/osu/issues/27171 Slidertickmiss and sliderendmiss appear even though the cursor is clearly within the slider followcircle. And somehow combo isn't breaking?
https://github.com/ppy/osu/assets/76718358/08264395-3d98-43e0-a196-fa7e6a97a073
Scrolling frame by frame
https://github.com/ppy/osu/assets/76718358/a63d479e-c487-4e75-ba69-7ebe9dec8168
Note: I could only get this to happen by scrolling backwards through the replay.
Screenshots or videos
No response
Version
2024.131.0.0
Logs
N/A
This is probably worth investigating since it looks to be easily reproducible over a single frame.
There are at least 2 disparate bugs associated with this.
The first one is that SliderInputManager just does not handle rewind correctly with respect of the value of Tracking, period. What happens is that the slider begins tracking in the forward run correctly, and completes correctly. After that, if you rewind before the first tick, Tracking never becomes true again, because the whole update of Tracking has a self-feedback cycle, because the valid tracking radius in frame N+1 depends on the value of Tracking in frame N:
https://github.com/ppy/osu/blob/9a1403d22ac17380dccc297a871859b324022167/osu.Game.Rulesets.Osu/Objects/Drawables/SliderInputManager.cs#L68
In this particular user initially hit the head using the slider ball radius (because you have to), making Tracking = true happen, and then continued tracking using the extended radius. Rewind effectively inverts this order and the slider will become tracking only if you're in the slider ball radius at the end of the slider.
This can be seen by rewinding past the slider's end and playing it in its entirety start-to-end - but if you do this you will see the red miss dot showing again (but with no combo break this time). This is the second bug.
JudgementContainer is supposed to be handling this via
https://github.com/ppy/osu/blob/9a1403d22ac17380dccc297a871859b324022167/osu.Game/Rulesets/UI/JudgementContainer.cs#L17-L19
but it does so via hooking onto Add(). The issue is that a tick hit doesn't actually add a judgement to the container:
https://github.com/ppy/osu/blob/9a1403d22ac17380dccc297a871859b324022167/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs#L66-L74 https://github.com/ppy/osu/blob/9a1403d22ac17380dccc297a871859b324022167/osu.Game.Rulesets.Osu/UI/OsuPlayfield.cs#L174-L179
so none of this ever fires. I'm not sure this actually needs to be addressed, because the primary issue is way more serious, but it seems worth mentioning.
Not sure how to fix right now. Maybe by storing historical Tracking values and reapplying them during rewind.
This is mostly fixed by https://github.com/ppy/osu/pull/27429.