-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
Fix JuiceStream velocity calculation #25725
Conversation
So I generated expected conversions for all of the changes that changed SR with nomod: conversions.zip And I have bad news. Some of the SR changes are fixes, and some are regressions. The detailed breakdown is thus:
Note that "still broken" may also mean "broken even further". I'm pretty sure I saw at least one case of this already. Detailed test result reports: I will attempt to investigate later, but I need to break for a bit and just wanted to drop this here in the mean time... |
That's very helpful, thanks! If you get to it before me, it'd be good to test those with #25726 merged on top of these changes, since they touch related code. |
More details:
Detailed test reports: The 828828 and 3335242 cases are especially maddening, only breaking down when both pulls are involved. Either way, these results seem to indicate that the other pull seems to be a much less volatile improvement, as in it appears to both not introduce any star rating changes and lead to a net increase in test case passes, so I'll get that one in first, and see if I can get to any conclusions on this one later... |
Looking into the failing cases more, every single one manifests by a last fruit in a juice stream moving temporally.
You would ask, "why didn't this manifest in osu! if this PR brings the two in line?", and, well... osu/osu.Game.Rulesets.Osu.Tests/OsuBeatmapConversionTest.cs Lines 87 to 91 in 568bd85
The test doesn't care about the object times being precisely equal. It just needs to be within 2ms. In fact, when the failing maps are plugged into the osu! conversion tests (as they are all converts), they would also fail conversion if the leniency on end time was turned off. I'm not sure what to do with this information further yet, but there you go... |
Yeah... Unfortunately I don't see a way to get perfect conversion unless we use the exact calculations that osu!stable does (i.e. not using Personally, just from a code PoV, both the new changes look like they should match osu!stable just because the osu! implementation is geared to do so (even if it doesn't exactly due to As for how to make further progress, I'm thinking we should only consider the position of hitobjects and not consider what are effectively "pixeljumps". I wouldn't be opposed to reverting 6f73d78 either. Any opinions? Also @peppy |
From the standpoint of considering catch gameplay mechanics or balance or whatever, I don't feel qualified to answer that question. From a code quality / programming standpoint, to some degree I'd be in favour of merging this simply because it brings osu! and catch in line. If it just broke maps, I would have more reservations about it, but the fact that it breaks some and fixes some has me thinking we're probably never getting 100% accuracy of reproduction of stable calculations anyway. |
I guess one way or another we should make a call on this. I'd be curious to see what a "float calculation" solution would look like (as in how bad it will look). |
cda9440 inadvertently fixes this in the most frequent case by inverting the `TickDistanceMultiplier` from being not-1 to 1 on beatmap versions above v8. This can still potentially go wrong if a beatmap from a version below v8 is edited, because upon save it will be reencoded at the latest version, meaning that the multiplier will change from not-1 to 1 - but this can be handled separately.
I'm actually going to make a shot-call on this now to get it in, and that is because this fixes a majority case of an editor issue, namely #28534. That bug is caused by This branch inverts the value, such that Note that there is still a 1% issue - if an either osu! or catch beatmap that is v8 or earlier is edited and saved, tick spacing will inadvertently change upon save, because of it being derived entirely based on osu! beatmap version, which is hardcoded in the encoder to be v128. That said this is a 1% issue and I'm not sure we need to act upon it until necessary. See deeb2e9 for testament to all of the above (test will fail when cherry-picked onto master, and passes here - hopefully on CI, too). |
This should match the calculations already present / recently made to
Slider
. Not sure why they weren't done for catch.Spreadsheet here: https://docs.google.com/spreadsheets/d/1NA5JK947QmdUMv7Lnv56WXxCAuq-IOYsGWZ83GXAWB0/edit#gid=791502473 ([run]https://github.com/ppy/osu/actions/runs/7163776038)
Todo in this PR: