1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-21 22:07:25 +08:00
Commit Graph

1907 Commits

Author SHA1 Message Date
Bartłomiej Dach
7c9adc7ad3
Fix incorrect score conversion on selected beatmaps due to incorrect difficultyPeppyStars rounding
Fixes issue that occurs on *about* 246 beatmaps and was first described
by me on discord:

    https://discord.com/channels/188630481301012481/188630652340404224/1154367700378865715

and then rediscovered again during work on
https://github.com/ppy/osu/pull/26405:

    https://gist.github.com/bdach/414d5289f65b0399fa8f9732245a4f7c#venenog-on-ultmate-end-by-blacky-overdose-631

It so happens that in stable, due to .NET Framework internals, float
math would be performed using x87 registers and opcodes.
.NET (Core) however uses SSE instructions on 32- and 64-bit words.
x87 registers are _80 bits_ wide. Which is notably wider than _both_
float and double. Therefore, on a significant number of beatmaps,
the rounding would not produce correct values due to insufficient
precision.

See following gist for corroboration of the above:

    https://gist.github.com/bdach/dcde58d5a3607b0408faa3aa2b67bf10

Thus, to crudely - but, seemingly accurately, after checking across
all ranked maps - emulate this, use `decimal`, which is slow, but has
bigger precision than `double`. The single known exception beatmap
in whose case this results in an incorrect result is

    https://osu.ppy.sh/beatmapsets/1156087#osu/2625853

which is considered an "acceptable casualty" of sorts.

Doing this requires some fooling of the compiler / runtime (see second
inline comment in new method). To corroborate that this is required,
you can try the following code snippet:

    Console.WriteLine(string.Join(' ', BitConverter.GetBytes(1.3f).Select(x => x.ToString("X2"))));
    Console.WriteLine(string.Join(' ', BitConverter.GetBytes(1.3).Select(x => x.ToString("X2"))));
    Console.WriteLine();

    decimal d1 = (decimal)1.3f;
    decimal d2 = (decimal)1.3;
    decimal d3 = (decimal)(double)1.3f;

    Console.WriteLine(string.Join(' ', decimal.GetBits(d1).SelectMany(BitConverter.GetBytes).Select(x => x.ToString("X2"))));
    Console.WriteLine(string.Join(' ', decimal.GetBits(d2).SelectMany(BitConverter.GetBytes).Select(x => x.ToString("X2"))));
    Console.WriteLine(string.Join(' ', decimal.GetBits(d3).SelectMany(BitConverter.GetBytes).Select(x => x.ToString("X2"))));

which will print

    66 66 A6 3F
    CD CC CC CC CC CC F4 3F

    0D 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
    0D 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00
    8C 5D 89 FB 3B 76 00 00 00 00 00 00 00 00 0E 00

Note that despite `d1` being converted from a less-precise floating-
-point value than `d2`, it still is represented 100% accurately as
a decimal number.

After applying this change, recomputation of legacy scoring attributes
for *all* rulesets will be required.
2024-01-10 19:30:18 +01:00
Dan Balasescu
6b4b2a57fc
Expose only as one method 2023-12-21 14:58:23 +09:00
Dan Balasescu
4e3b994142
Relocate HitResult numeric score to ScoreProcessor 2023-12-21 14:52:31 +09:00
Dean Herbert
831c273b45
Merge pull request #25887 from smoogipoo/restore-taiko-accuracy
Restore taiko accuracy to ScoreV2 values
2023-12-20 17:29:40 +09:00
OliBomby
ec578e1d9f fix near-zero length sliders n stuff being placeable 2023-12-19 21:20:21 +01:00
Dan Balasescu
35c0eaee1c
Make taiko OKs worth 150 points 2023-12-19 14:01:05 +09:00
Dan Balasescu
c1b55c7fac
Add ScoreProcessor methods to override numeric result 2023-12-19 13:50:31 +09:00
clayton
f84c181573
Don't convert TaikoModRandom to/from legacy mods 2023-12-17 23:47:50 -08:00
Dan Balasescu
30116512ca
Populate MaxCombo scoring attrib for non-osu rulesets 2023-12-18 12:01:51 +09:00
Bartłomiej Dach
0f4d054bfe
Use HitWindows data directly for computing effective OD 2023-12-14 20:41:12 +01:00
Bartłomiej Dach
fd1c72bf74
Use IBeatmapDifficultyInfo.(Inverse)DifficultyRange() instead of local reimplementations
Also adds explicit references to places from where the magic constants
were lifted.
2023-12-14 20:41:12 +01:00
Dean Herbert
9a982a9564
Tidy up GetRateAdjustedDisplayDifficulty implemetations 2023-12-13 17:13:21 +09:00
Dean Herbert
0259ab761b
Merge branch 'master' into arod_rate_adjust 2023-12-13 16:35:18 +09:00
Dan Balasescu
987fe9322e
Merge pull request #24166 from Zyfarok/scorev3
Modify osu! standardised scoring to introduce a combo exponent
2023-12-12 17:38:44 +09:00
Givikap120
faf54bca43
Merge branch 'master' into arod_rate_adjust 2023-12-10 01:49:18 +02:00
Dean Herbert
323808ad1e
Add more inline commenting around VELOCITY_MULTIPLIER application to TimeRange 2023-12-07 16:34:26 +09:00
Dean Herbert
b8694aba98
Remove unnecessary prefix
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2023-12-06 22:00:35 +09:00
Dean Herbert
1b50d1011a
Move constant local to taiko 2023-12-06 15:59:34 +09:00
Dean Herbert
8a0d152bcf
Reapply legacy taiko velocity multiplier in all relevant places 2023-12-06 15:59:34 +09:00
Dean Herbert
1cb3c710ba
Remove complex implementation of taiko SV multiplier 2023-12-06 15:59:34 +09:00
Dean Herbert
f9dd5bd828
Remove unused constant 2023-12-06 13:39:59 +09:00
Dan Balasescu
1c3bcbd548
Use IHasPath instead of IHasDistance for mania/taiko 2023-11-29 17:30:21 +09:00
Dan Balasescu
301d503b0b
Add another source of FP inaccuracy to match osu!stable 2023-11-29 16:41:19 +09:00
Dan Balasescu
16577829e2
Fix mania and taiko slider conversion distance 2023-11-28 21:14:56 +09:00
Zyf
71e5654b64 Account for legacyAccScore in score conversion 2023-11-24 23:07:27 +01:00
Dean Herbert
9172632b0b
Rename method and adjust xmldoc to be very explicit about how wrong this is 2023-11-17 17:04:20 +09:00
Dean Herbert
a04f9aaef7
Apply various inspections 2023-11-12 16:24:35 +09:00
Dean Herbert
6bd5eda2a0
Merge branch 'master' into arod_rate_adjust 2023-11-12 15:49:07 +09:00
Thomas Müller-Höhne
926636cc03 Generalize Bezier curves to BSplines of Nth degree 2023-11-11 13:32:53 +01:00
Givikap120
e451b2197c Delete util functions from rulesets 2023-11-09 18:23:53 +02:00
Givikap120
57170501cd Improve code quality 2023-11-04 17:25:09 +02:00
Dean Herbert
fbba3787d1
Merge pull request #25190 from frenzibyte/match-skin-element-animation-support
Match capability of animating legacy skin elements with osu!(stable)
2023-10-30 18:25:06 +09:00
Dean Herbert
2886d2d4c2
Apply same changes to "argon" osu!taiko barline design that were applied to osu!mania 2023-10-25 14:20:43 +09:00
Salman Ahmed
bcbb77d383 Fix incorrect assumption in taiko circle piece logic 2023-10-24 02:29:46 +03:00
Salman Ahmed
ab3b51e4a0 Refactor osu!taiko circle piece logic to read better 2023-10-21 00:22:34 +03:00
Dean Herbert
52c2eb93de
Merge branch 'master' into taiko-beat-snap-grid 2023-10-19 23:53:01 +09:00
Dean Herbert
5341a335a6
Bypass Parent nullability checks for now 2023-10-17 17:48:45 +09:00
Dean Herbert
4381169a3f
Combine selection and input handling logic for beat snap grids across all rulesets 2023-10-17 17:09:42 +09:00
Dean Herbert
2a89a25790
Add beat snap grid to osu!taiko editor
Addresses https://github.com/ppy/osu/discussions/25150.
2023-10-17 16:59:56 +09:00
Bartłomiej Dach
71c4b138fb
Merge branch 'master' into fix-legacy-score-multipliers-2 2023-10-09 10:53:14 +02:00
Dean Herbert
f2e56bbb65
Fix publicly-settable bindables 2023-10-06 16:51:24 +09:00
Bartłomiej Dach
0ae4a0f11f
Adjust gameplay element maximum size limits for backwards compatibility
The new limits were chosen by sampling across over 4000 skins. The
methodology for doing so is described in the following gist:

	https://gist.github.com/bdach/6228ba41d128b23d1f89142f404108a3
2023-10-05 20:37:10 +02:00
Dean Herbert
d660395850
Ensure there's no chance of a press being ignored during rewind flow 2023-10-05 23:02:45 +09:00
Bartłomiej Dach
a1368df62f
Allow judging at most one swell tick per frame 2023-10-04 19:08:03 +02:00
Dan Balasescu
da2a4681d9 Add method to retrieve legacy score multiplier 2023-10-02 16:52:01 +09:00
Dean Herbert
9d8c3f0f5c
Merge pull request #24779 from smoogipoo/split-legacy-scoring-attribs
Split legacy scoring attribs into its own table
2023-09-26 22:35:38 +09:00
Dan Balasescu
19a442a32a Fix incorrect change in taiko score simulator 2023-09-26 17:46:03 +09:00
Dean Herbert
990c54519b
Merge branch 'master' into limit-gameplay-sprite-dimensions 2023-09-26 16:40:32 +09:00
Dean Herbert
0dcf7a2fa9
Merge branch 'master' into split-legacy-scoring-attribs 2023-09-26 15:52:27 +09:00
Salman Ahmed
ad86bf2d56 Revert redundant size limitations
Already handled by the sprites themselves being resized.
2023-09-21 19:03:59 +03:00