ppy / osu

rhythm is just a *click* away!
https://osu.ppy.sh
MIT License
15.32k stars 2.28k forks source link

Sliders receive wrong velocities on lazer maps imported and re-exported from stable #17258

Closed frenzibyte closed 1 year ago

frenzibyte commented 2 years ago

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: CleanShot 2022-03-15 at 09 00 04

Same slider after importing to and re-exporting from stable: CleanShot 2022-03-15 at 08 55 56

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

Originally posted by **Axilotl17** March 15, 2022 this is a bit complex, so ive just attached a video detailing the bug. i ramble a bit at the end so you can skip that. video: https://youtu.be/MtQ0U5f720Q video TLDR: the map i mostly made in lazer, uploaded and slightly edited in stable, now doesn't work in lazer but does work in stable (doesnt work meaning slider velocities arent saved right) map: https://osu.ppy.sh/beatmapsets/1719878#osu/3514788 osu lazer map export (its a little different from uploaded version, but the first 2x velocity slider is the same): [BLUE ENCOUNT - Survivor (Axilotl).zip](https://github.com/ppy/osu/files/8250078/BLUE.ENCOUNT.-.Survivor.Axilotl.zip) standard osu map export: [BLUE ENCOUNT - Survivor.zip](https://github.com/ppy/osu/files/8250085/BLUE.ENCOUNT.-.Survivor.zip) i dont think logs help here
peppy commented 2 years 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.

peppy commented 2 years ago

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.

OliBomby commented 2 years ago

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). image Possible solutions:

doctorisyes commented 1 year ago

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.

peppy commented 1 year ago

As for a solution here, I think I'd go with the third of the options that @OliBomby proposed above.

Dimmitsaras commented 1 year ago

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

bdach commented 1 year ago

This will be at least temporarily remedied by the legacy export option added in https://github.com/ppy/osu/pull/24186.