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
I like no-braces for single-line ifs as much as anyone, but with inline comments involved it gets rather dicey.
Reverse()
SliderPath
segmentEnds