From e5b51f769ce72e7394131df3b993a7a840115984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Mon, 30 Oct 2023 21:15:40 +0100 Subject: [PATCH] Fix incorrect assertion placement in spinner rotation tracker Checking the delta after the application of rate is not correct. The delta is in screen-space *before* the rate from rate-changing mods were applied; the point of the application of the rate is to compensate for the fact that the spinner is still judged in "track time" - but the goal is to keep the spinner's difficulty *independent* of rate, which means that with DT active the user's spin is "twice as effective" to compensate for the fact that the spinner is twice as short in real time. In another formulation, with DT active, the user gets to record replay frames "half as often" as in normal gameplay. --- .../Skinning/Default/SpinnerRotationTracker.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/osu.Game.Rulesets.Osu/Skinning/Default/SpinnerRotationTracker.cs b/osu.Game.Rulesets.Osu/Skinning/Default/SpinnerRotationTracker.cs index 374f3f461b..1d75663fd9 100644 --- a/osu.Game.Rulesets.Osu/Skinning/Default/SpinnerRotationTracker.cs +++ b/osu.Game.Rulesets.Osu/Skinning/Default/SpinnerRotationTracker.cs @@ -101,11 +101,11 @@ namespace osu.Game.Rulesets.Osu.Skinning.Default rotationTransferred = true; } + Debug.Assert(Math.Abs(delta) <= 180); + double rate = gameplayClock?.GetTrueGameplayRate() ?? Clock.Rate; delta = (float)(delta * Math.Abs(rate)); - Debug.Assert(Math.Abs(delta) <= 180); - currentRotation += delta; drawableSpinner.Result.History.ReportDelta(Time.Current, delta); }