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
I like no-braces for single-line ifs as much as anyone, but with inline comments involved it gets rather dicey.
Reverse()
SliderPath
segmentEnds
IndexOutOfRangeException
.Distinct()
truncateEndingDuplicates()
Extract control point reversing to separate method
GenerateTicks
Judged
Without this change, when the `Judged` value is checked on an `HitObjectLifetimeEntry` it would return `true` if a `DrawableHitObject` has not yet been associated with the entry. Which is completely wrong. Of note, the usage in `DrawableHitObject` will have never fallen through to this incorrect value as they always have a result populated: https://github.com/ppy/osu/blob/f26f001e1d01ca6bb53225da7bf06c0ad21153c5/osu.Game/Rulesets/Objects/Drawables/DrawableHitObject.cs#L721-L726