osu icon indicating copy to clipboard operation
osu copied to clipboard

Scrolling through replay can cause sliderticks and sliderends to show as misses

Open sz-da opened this issue 1 year ago • 1 comments

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

sz-da avatar Feb 15 '24 06:02 sz-da

This is probably worth investigating since it looks to be easily reproducible over a single frame.

peppy avatar Feb 15 '24 07:02 peppy

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.

bdach avatar Feb 29 '24 09:02 bdach

This is mostly fixed by https://github.com/ppy/osu/pull/27429.

bdach avatar Mar 13 '24 05:03 bdach