1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-18 00:42:55 +08:00
Commit Graph

691 Commits

Author SHA1 Message Date
Givikap120
4a21ff9726 removed duplication 2024-04-13 13:59:09 +03:00
Givikap120
feb9b5bdb8 Make traceable pp match HD 2024-04-13 13:42:57 +03:00
Andrei Zavatski
22f5a66c02 Reduce allocations during beatmap selection 2024-02-17 15:46:38 +03:00
Givikap120
6402f23f02 Added Traceable support for pp 2024-02-12 21:00:15 +02:00
tsunyoku
c5f392c17d only compute flashlight in osu! difficulty calculations when required 2024-02-10 15:25:03 +00:00
Berkan Diler
6adf0ac01e Use new LINQ Order() instead of OrderBy() when possible 2024-02-08 18:01:00 +01:00
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
Bartłomiej Dach
ca37e1afc2
Merge branch 'master' into scorev3 2023-11-24 10:37:10 +09:00
Samuel Cattini-Schultz
c9ee29028f Fix implicitly used method being named incorrectly 2023-11-21 16:54:20 +11:00
Zyf
cadd9b4ace Merge remote-tracking branch 'upstream/master' into scorev3 2023-11-19 23:53:05 +01:00
Dan Balasescu
939b55020c
Merge branch 'master' into legacy-tick-test-coverage 2023-10-18 15:21:31 +09:00
Dean Herbert
a3b21281e6
Add reordering support to match existing diffcalc 100% 2023-10-13 14:25:38 +09:00
Dean Herbert
5ffc25c8e8
Fix potential failure when slider has no ticks 2023-10-12 03:19:43 +09:00
Dean Herbert
63843c79c3
Amend diffcalc to use something closer to the original calculation for now 2023-10-11 21:12:04 +09:00
Dean Herbert
8d91991214 Fix difficulty calculation not correct handling slider leniency anymore 2023-10-04 13:45:26 +09:00
Dean Herbert
c4992d3479 Fix one case of difficulty calculation no longer accounting for leniency 2023-10-03 19:37:13 +09:00
Dean Herbert
70ec4b060a Rename weird diffcalc parameter name 2023-10-03 19:20:39 +09:00
Dan Balasescu
da2a4681d9 Add method to retrieve legacy score multiplier 2023-10-02 16:52:01 +09:00
Dan Balasescu
2abef4ade5
Expand comment to justify maximising bonus score
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2023-09-15 18:35:17 +09:00
Dan Balasescu
ed295effc5 Maximise bonus score 2023-09-15 15:51:05 +09:00
Dan Balasescu
86330a7cc4 Adjust comment 2023-09-11 18:01:53 +09:00
Dan Balasescu
628517569b Fix another difficulty-specific value 2023-09-08 21:08:09 +09:00
Dan Balasescu
2334be1987 Split legacy scoring attributes into a separate object 2023-09-07 21:10:38 +09:00
Zyf
b672b49e02 Scoring : Implement v1 to v3 conversion. 2023-07-15 23:20:49 +02:00
Dean Herbert
1629024111 ILegacyScoreProcessor -> ILegacyScoreSimulator 2023-07-04 17:32:54 +09:00
Dan Balasescu
09bc8e45de Refactoring 2023-06-28 16:14:32 +09:00
Dan Balasescu
5f350aa66f Fix float division
Firstly, this is intended to be a float division.

Secondly, dividing integers by 0 results in an exception, but dividing
non-zero floats by 0 results in +/- infinity which will be clamped to
the upper range.
In particular, this occurs when the beatmap has 1 hitobject (0 drain
length).
2023-06-27 17:14:35 +09:00
Dan Balasescu
a9c65d200a Initial conversion of scores 2023-06-26 22:19:01 +09:00
Dan Balasescu
e1d723a2cc Merge branch 'master' into diffcalc-total-scorev1 2023-06-26 14:32:14 +09:00
Bartłomiej Dach
e3a89a6273
Fix remaining obvious CI inspections 2023-06-24 16:07:01 +02:00
Dean Herbert
df5b389629 Manual fixes to reduce warnings to zero 2023-06-24 01:52:53 +09:00
Dan Balasescu
06565871d6 Add flag to disable computing legacy scoring values 2023-06-24 01:03:18 +09:00
Dean Herbert
0ab0c52ad5 Automated pass 2023-06-24 01:00:03 +09:00
Dan Balasescu
87447f41d0 Fix incorrect calculation of difficulty 2023-06-24 00:58:45 +09:00
Dan Balasescu
bfa449e47a Adjust attribute data 2023-06-19 21:38:13 +09:00
Dan Balasescu
b9f485b551 Merge classes + split out 2023-06-13 02:32:54 +09:00
Dan Balasescu
446807e7f6 Add combo score / bonus score attributes 2023-06-12 23:00:29 +09:00
Dan Balasescu
d10c63ed2d Fix difficulty calculation when mods are involved 2023-06-08 16:29:34 +09:00
Dan Balasescu
77c745cc94 "TotalScoreV1" -> "LegacyTotalScore" 2023-06-06 17:25:28 +09:00
Dan Balasescu
e402c6d2b4 Write max combo attribute from base class 2023-06-02 21:53:25 +09:00
Dan Balasescu
02111e3854 Implement ScoreV1 calculation for OsuRuleset 2023-06-02 17:36:45 +09:00
abstrakt
6e1edc4d8d Use the StackedEndPosition to determine the jump distance in the FlashlightEvaluator.
Signed-off-by: abstrakt <abstrakt.osu@gmail.com>
2022-09-26 14:06:35 +02:00
Dan Balasescu
1e9b60f07f
Merge pull request #16524 from stanriders/move-td-reduction
Fix touch device difficulty reduction not affecting star rating
2022-09-21 12:51:14 +09:00
StanR
1801ae3c6a Move flashlight TD difficulty reduction to diffcalc 2022-09-14 17:40:22 +03:00
StanR
6338b87c63 attributes 2022-09-09 17:31:52 +03:00
StanR
c2e3fcfa3f Merge branch 'master' into move-td-reduction 2022-09-09 17:24:58 +03:00
apollo-dw
1997519364 Don't use full hit window in rhythm 2022-09-07 13:25:35 +01:00
apollo-dw
b5779508d0 Retrieve great hit window from the hit object 2022-09-06 17:10:32 +01:00
Dan Balasescu
9645bfe708 Bump difficulty calculator versions 2022-09-02 16:27:25 +09:00
apollo-dw
ad650adab0 Fix speed note count sum 2022-08-30 18:03:44 +01:00
Dan Balasescu
e34c8e4975
Merge pull request #19716 from MBmasher/fl-grid
Nerf repeated angles in Flashlight skill
2022-08-29 21:15:45 +09:00
MBmasher
b082dc1fe4 Slightly buff flashlight multiplier 2022-08-27 18:31:07 +10:00
MBmasher
454d868dd5 Remove unnecessary using call 2022-08-26 20:42:02 +10:00
MBmasher
249c3f868f Compare raw angle values instead of rounding angles 2022-08-26 20:40:18 +10:00
MBmasher
5082ee26cf Ensure a negative value cannot be added to angleRepeatCount 2022-08-26 20:30:14 +10:00
MBmasher
08cb70b093 Lessen repeated angle nerf for objects further back in time 2022-08-26 20:27:31 +10:00
MBmasher
d8854413cb Add newline 2022-08-26 12:38:36 +10:00
MBmasher
6651e76e2e Remove whitespace 2022-08-26 12:37:56 +10:00
MBmasher
b0e7f63361 Update angle multiplier to nerf repeated angles 2022-08-26 12:34:33 +10:00
StanR
43e471c2a5 Clamp effective miss count to maximum amount of possible braks 2022-08-16 16:12:13 +03:00
MBmasher
21c5fed45f Adjust capitalisation 2022-08-12 14:09:16 +10:00
MBmasher
f70588a423 Add newline before brace 2022-08-12 14:08:32 +10:00
MBmasher
037f56077b Apply Flashlight grid nerf 2022-08-12 13:29:04 +10:00
Dan Balasescu
61a3758cd9 Merge branch 'master' into pp-balancing 2022-08-11 19:46:16 +09:00
Dan Balasescu
7cac089246
Merge branch 'master' into fl-slider 2022-08-10 21:19:05 +09:00
Dan Balasescu
2c6c315e3a
Merge branch 'master' into pp-balancing 2022-08-04 15:40:46 +09:00
MBmasher
267d55a6a8 Remove osuSlider from statement 2022-07-23 14:48:39 +10:00
MBmasher
230943f698 Merge branch 'fl-slider' of https://github.com/mbmasher/osu into fl-slider 2022-07-23 14:40:54 +10:00
MBmasher
f44a5def90 Move repeat bonus to TravelDistance 2022-07-23 14:40:16 +10:00
Dan Balasescu
71912e10c4
Merge branch 'master' into fl-slider 2022-07-22 15:22:50 +09:00
Dean Herbert
aca19a005e Add versioning to difficulty calculators 2022-07-21 18:15:25 +09:00
StanR
163c3f9c2d Adjust multipliers to account for speed changes 2022-07-20 16:10:34 +03:00
StanR
35e841de95 Move base performance multiplier to a const 2022-07-20 15:54:49 +03:00
StanR
9c9f32b435 Merge branch 'master' into pp-balancing 2022-07-20 15:40:29 +03:00
StanR
633f6fe620 Increase global multiplier 2022-07-18 21:58:11 +03:00
MBmasher
42b9dc877d Divide slider bonus by repeat count 2022-07-18 16:14:06 +10:00
MBmasher
72c096f9af Update xmldoc 2022-07-18 15:59:20 +10:00
MBmasher
7c680afc3c Change initialisation of osuSlider 2022-07-18 15:59:00 +10:00
MBmasher
204fbde07b Remove debug code 2022-07-18 15:58:32 +10:00
MBmasher
8413c40442 Remove debug code 2022-07-18 15:58:09 +10:00
MBmasher
68caafa210 Update xmldoc 2022-07-17 17:02:30 +10:00
MBmasher
dae698638c Add repeat bonus to Flashlight, move repeat multiplier to AimEvaluator 2022-07-17 16:56:05 +10:00
MBmasher
a950deb7db Re-implement slider changes to FlashlightEvaluator 2022-07-17 16:27:55 +10:00
Jamieson Berida
a0dd6cbab3
Merge branch 'master' into fl-slider 2022-07-17 16:18:18 +10:00
StanR
760742e358 Move relax global multiplier to diffcalc 2022-07-14 00:42:50 +03:00
StanR
0983e4f81e Increase 50s nerf again 2022-07-12 17:57:00 +03:00
StanR
58c687172b Reduce low AR bonus 2022-07-12 10:52:44 +03:00
apollo-dw
5b96f67a8b Remove non-overlapping velocity buff 2022-07-04 20:49:26 +01:00
StanR
4f77637946 Update desmos 2022-07-04 21:52:57 +03:00
StanR
bf738aa04f Account for extreme ODs in relax multipliers 2022-07-04 21:49:45 +03:00
StanR
afa3f8cda3 Make relax ok/meh multipliers dependent on OD 2022-07-04 20:53:20 +03:00
StanR
11eb344476 Reduce 50s nerf further 2022-07-04 20:28:15 +03:00
StanR
db8bb07c78 Reduce 50s nerf effect 2022-07-04 20:10:26 +03:00
StanR
212360f67e Make relax ok/meh nerfs less drastic, add flashlight nerf, remove ar bonus for relax 2022-07-04 19:59:30 +03:00
StanR
45258b3f14 Buff aim slightly 2022-07-04 19:53:34 +03:00
Dan Balasescu
d4aa18112b
Merge pull request #15035 from emu1337/speed-acc-scaling
Change speed accuracy scaling to be closer to worst case scenario
2022-06-29 18:04:23 +09:00
Dan Balasescu
6d91c0f375 Resolve inspection issue 2022-06-29 16:57:11 +09:00
Dan Balasescu
ad95f037de Prevent another case of potential div-by-0 2022-06-29 16:42:53 +09:00