Closed frenzibyte closed 1 year ago
This is known and expected behaviour, but the same truncation should be handled in the control point mapping (we've been through this over countless PRs in the past), so there's more to this than meets the eye.
Sounds like the issue is going to be that the truncation is done at parsing, but not at export. It was implemented to allow lazer maps to work on stable, but there was no thought given to then re-exporting the same beatmap from stable and expecting it to work again on lazer.
Requires some further thought. Probably truncating all values in the stable editor.
This looks like an issue with the stable editor. If you give it decimal time values in timingpoints and hitobjects, then it will remember the decimal values of the timingpoint time but remove the decimals in the hitobject time, thus creating the difference in time between SV change and slider. The stable editor still treats the decimal time timingpoint as if it has truncated time, so in stable the slider still gets the correct SV, but lazer might be using the actual decimal value of the timingpoint time or round it instead of truncating (i didn't check the code). Possible solutions:
I encountered a very similar issue to yours. I was making my own beatmap on osu!lazer because my main computer is a Mac, so then I exported it, and put it onto my outdated windows laptop to add videos and break times (features that aren't on lazer) and then uploaded it. But when I updated the one on my Mac (through osu!lazer direct) so it had the videos, one of the sliders claimed to be at x1.15 velocity like the rest, yet it functioned exactly like x1. So I tried downloading the one I just uploaded back on to my stable client, and it continued to be correct, unlike lazer. I'm not sure however if this is a separate issue.
As for a solution here, I think I'd go with the third of the options that @OliBomby proposed above.
As a note, for those sliders of lazer exported maps, the stable editor behaves normally for timeline/slider length/slider speed, but when it comes to slider ticks it uses the incorrect speed value. In stable gameplay, the slider ticks behave normally. When exporting back to lazer, all slider stuff use the incorrect speed value. Here's an example https://imgur.com/a/hShxzd4
This will be at least temporarily remedied by the legacy export option added in https://github.com/ppy/osu/pull/24186.
This is due to stable seemingly truncating hitobject start times when saving/exporting in it, causing sliders to potentially receive velocities from a previous control point rather than its own.
One slider in osu!(lazer) map:
Same slider after importing to and re-exporting from stable:
Map in question exported from lazer: https://github.com/ppy/osu/files/8250078/BLUE.ENCOUNT.-.Survivor.Axilotl.zip
Map after importing and re-exporting from stable: https://github.com/ppy/osu/files/8250085/BLUE.ENCOUNT.-.Survivor.zip
Discussed in https://github.com/ppy/osu/discussions/17257