Change unstable rate calculation to account for rate-change mods
IHasCombo
Following discusion with smoogi IRL.
Seems better to use the rate from a non-gameplay clock than to arbitrarily apply 1.
ToString
PathType
The "Perfect curve" one in particular... fixes test failures, as some tests were relying on this particular casing. But the new version feels more correct anyway, so it's whatever.
BEZIER
Also throw on unknown types.
LegacyRulesetExtensions
As discussed, it isn't used in stable like this. Was a mistake.
LastTick
LegacyLastTickOffset
Default to normal bank if invalid sample bank is specified
stable does not treat unknown enum members as `None` / `Auto`, it treats them as `Normal`: switch (sampleSet) { case SampleSet.Normal: default: sample = 0; break; case SampleSet.None: case SampleSet.Soft: sample = 1; break; case SampleSet.Drum: sample = 2; break; } (from https://github.com/peppy/osu-stable-reference/blob/1531237b63392e82c003c712faa028406073aa8f/osu!/Audio/AudioEngine.cs#L1158-L1171).
Basically matching the old code more closely to avoid too much precision from doing math in a slightly different way.
LegacyDifficultyControlPoint
SliderVelocity
SliderVelocityMultiplier
Velocity