- closes https://github.com/ppy/osu/issues/36942
- fixes https://osu.ppy.sh/community/forums/topics/2187041?n=1
## [Ensure Simplified Rhythm mod does not produce beatmaps with objects
out of
order](https://github.com/ppy/osu/commit/f4807b3a42dbf46ea0e669b0ba658feaef9baca5)
This is a last ditch safety.
This mod has more apparent issues (see below) but this is a first step
of restoring sanity.
Aside than the other fix described below I have not attempted to figure
out further why this is happening because the conversion logic is in
over my head. I just want hard breakage to not be possible. Why this
extra sort is necessary can be investigated by @Hiviexd if he's so
inclined.
## [Fix `GetClosestBeatDivisor()` not working correctly with negative
time
instants](https://github.com/ppy/osu/commit/88dc0d8a73c712a040635af262d7519fe6d772a0)
This was causing the 1/3 -> 1/2 conversion in Simplified Rhythm to
engage on some maps that weren't even mapped in waltz time. Those maps
had the common trait of having a timing point with a negative start
time.
Notably this could feasibly affect other places as well, like mania beat
snap colouring, or the Synesthesia osu! mod.
<details>
<summary>testing</summary>
Tested with Simplified Rhythm engaged, with 1/6 -> 1/4 and 1/3 -> 1/2
conversion enabled
[BULANOVA - NE PLACH'
[oni]](https://osu.ppy.sh/beatmapsets/1740291#taiko/3664995) (1/8 snap):
- No mods: 5.18*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 3.48*
- Simplified Rhythm @ 933de7ab: 5.18*
[BULANOVA - NE PLACH' [inner
oni]](https://osu.ppy.sh/beatmapsets/1740291#taiko/3648625) (1/8 snap):
- No mods: 5.84*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 4.13*
- Simplified Rhythm @ 933de7ab: 5.84*
[BULANOVA - NE PLACH' [don't
cry]](https://osu.ppy.sh/beatmapsets/1740291#taiko/3557681) (1/8 snap):
- No mods: 6.91*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 4.84*
- Simplified Rhythm @ 933de7ab: 6.91*
[Mili - Peach Pit and Cyanide [nik's
Normal]](https://osu.ppy.sh/beatmapsets/2468654#osu/5405909) (1/6 snap):
- No mods: 1.63*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 1.10*
- Simplified Rhythm @ 933de7ab: 1.10*
[Mili - Peach Pit and Cyanide [Ix's
Hard]](https://osu.ppy.sh/beatmapsets/2468654#osu/5405906) (1/3 snap):
- No mods: 2.50*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 1.71*
- Simplified Rhythm @ 933de7ab: 1.71*
[Mili - Peach Pit and Cyanide [nomi's Hidden
Insane]](https://osu.ppy.sh/beatmapsets/2468654#osu/5405910) (1/3 snap):
- No mods: 3.93*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 2.59*
- Simplified Rhythm @ 933de7ab: 2.59*
[Within Temptation - The Unforgiving [Stairway To The
Skies]](https://osu.ppy.sh/beatmapsets/29157#osu/172617) (1/3 snap in
editor):
- No mods: 1.53*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 1.48*
- Simplified Rhythm @ 933de7ab: 1.48*
[Within Temptation - The Unforgiving
[Iron]](https://osu.ppy.sh/beatmapsets/29157#osu/172612) (1/6 snap in
editor):
- No mods: 2.76*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 1.75*
- Simplified Rhythm @ 933de7ab: 1.75*
[Within Temptation - The Unforgiving
[Marathon]](https://osu.ppy.sh/beatmapsets/29157#osu/156352) (1/4 snap
in editor, but has 1/3 / 1/6 sections for sure):
- No mods: 2.96*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 2.75*
- Simplified Rhythm @ 933de7ab: 2.75*
[Halozy - Genryuu Kaiko [Higan
Torrent]](https://osu.ppy.sh/beatmapsets/180138#osu/433005) (1/4 snap):
- No mods: 5.37*
- Simplified Rhythm @ master: 0.00*
- Simplified Rhythm @ f4807b3a: 3.95*
- Simplified Rhythm @ 933de7ab: 5.37*
</details>
Same deal with this class. Fully qualifying the type names because this
has `#nullable disable` and makes use of `NotNull` which is also present
in the `System.Diagnostics.CodeAnalysis` namespace and AAAAAAARGH
NAMESPACE CONFLICTS.