Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow lower slider velocities in beatmap specification #22152

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

peppy
Copy link
Member

@peppy peppy commented Jan 12, 2023

Lazer counterpart to ppy/osu-stable-issues#1072.

@peppy peppy added the area:beatmap-parsing .osu file format parsing label Jan 12, 2023
@bdach
Copy link
Collaborator

bdach commented Jan 13, 2023

If this is to be allowed in stable too, then I'm not sure this is all. There's also this logic in the decoder:

public LegacyDifficultyControlPoint(int rulesetId, double beatLength)
: this()
{
// Note: In stable, the division occurs on floats, but with compiler optimisations turned on actually seems to occur on doubles via some .NET black magic (possibly inlining?).
if (rulesetId == 1 || rulesetId == 3)
BpmMultiplier = beatLength < 0 ? Math.Clamp((float)-beatLength, 10, 10000) / 100.0 : 1;
else
BpmMultiplier = beatLength < 0 ? Math.Clamp((float)-beatLength, 10, 1000) / 100.0 : 1;

0.01x SVs were previously allowed in taiko and mania specifically. If this is to be allowed for the rest too, then these clamp ranges probably need to be unified to allow 10000 max regardless of ruleset.

Not that it'll have any actual effect, because the other rulesets aren't using BpmMultiplier for anything at all. But if we're cleaning house...

@bdach bdach requested a review from a team January 13, 2023 18:48
@peppy
Copy link
Member Author

peppy commented Jan 16, 2023

That particular code doesn't even show 0.01x being allowed, as far as I can tell. The ranges there are 0.1-100 for mania / taiko and 0.1-10 for osu!. So maybe both need to be adjusted if we want to standardise things? I'm not sure if there's a reason it's a different specification there, though.

@smoogipoo
Copy link
Contributor

That particular code doesn't even show 0.01x being allowed

The ranges there are 0.1-100 for mania / taiko and 0.1-10 for osu!.

I'm confused what you mean by both of these. The purpose of this PR and the proposal is to allow 0.01x.

@peppy
Copy link
Member Author

peppy commented Jan 16, 2023

Okay so taking a step back:

  • @bdach asked for an additional change to be made to BpmMultiplier, which seemingly is only really used for taiko convert purposes.
  • He suggested increasing the max to 10000
  • I responded saying that that seems wrong, and these values already do not match expectations. To make them match with master, the mania minimum should be adjusted. But I'm not sure if this was left non-matching for another reason. It will require further investigation to understand whether this is the case.

@bdach
Copy link
Collaborator

bdach commented Jan 16, 2023

One point that may not be immediately clear from my initial comment and which may clear this confusion up in entirety: BpmMultiplier is the inverse of slider velocity.

@peppy
Copy link
Member Author

peppy commented Jan 16, 2023

I see. In that case it may be correct as it stands, and only require combining the two cases to allow the same clamping everywhere?

@bdach
Copy link
Collaborator

bdach commented Jan 16, 2023

Is my thinking, yep. See also: #20658

@smoogipoo
Copy link
Contributor

smoogipoo commented Jan 16, 2023

What I am saying is that these changes should correspond 1-1 to osu-stable changes. If there is a discrepancy - which there is - one of the two are wrong and it sounds like the testing methodology used is broken.

For reference, the change to stable was:

-               return OsuMathHelper.Clamp((float)-BeatLength, 10, 1000) / 100f;
+               return OsuMathHelper.Clamp((float)-BeatLength, 1, 1000) / 100f;

Edit: With, in osu-stable, taiko/mania being unaltered as:

                return OsuMathHelper.Clamp((float)-BeatLength, 10, 10000) / 100f;

@peppy
Copy link
Member Author

peppy commented Jan 16, 2023

Sure, I can match that here. The discrepancy is that stable uses BpmMultiplier for slider calculations while lazer doesn't.

@peppy
Copy link
Member Author

peppy commented Jan 16, 2023

Check on https://github.com/peppy/osu-stable/pull/2441, which would standardise things at stable's end. We'd need to verify existing ranked beatmaps to ensure nothing breaks, but it would be the sanest solution going forward if it works.

@smoogipoo
Copy link
Contributor

smoogipoo commented Jan 17, 2023

@smoogipoo
Copy link
Contributor

This appears to have significantly broken some beatmaps. Most egregiously is https://osu.ppy.sh/beatmapsets/423194#osu/914570 which now exhibits "2B" layering making it impossible in catch:
image

@peppy
Copy link
Member Author

peppy commented Jan 25, 2023

Awesome, kinda expected that so it's good to have confirmation.

I'll leave this open for now pending investigating how easy it would be to fix backwards compatibility.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:beatmap-parsing .osu file format parsing size/XS
Projects
Status: On hold
Development

Successfully merging this pull request may close these issues.

3 participants