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

1912 Commits

Author SHA1 Message Date
Dan Balasescu
c18cd65081
Merge pull request #26694 from chandler14362/hit-object-result-allocations
Avoid closure allocations when applying hit object results
2024-02-06 17:49:26 +09:00
Bartłomiej Dach
fb80d76b4a
Apply further changes to remove remaining weirdness 2024-02-05 13:37:38 +01:00
Dan Balasescu
6e4d52863c
Upgrade to .NET 8 SDK 2024-02-02 21:28:51 +09:00
Chandler Stowell
93bd3ce5ae update DrawableHitCircle.ApplyResult to pass this to its callback 2024-01-25 11:25:41 -05:00
OliBomby
c2d57dc77c Merge remote-tracking branch 'upstream/master' into edit-nodesample 2024-01-25 11:33:29 +01:00
Chandler Stowell
d2775680e6 use stack to pass action state when applying hit results
this removes closure allocations
2024-01-24 13:13:45 -05:00
Bartłomiej Dach
cb8ec48717
Make RankFromScore()'s dictionary param readonly
Just to make sure nobody tries any "funny" business.
2024-01-22 19:56:30 +01:00
Dean Herbert
c8521b49cd
Change S rank to require no miss 2024-01-22 21:43:32 +09: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
Bartłomiej Dach
00a4c055b3
Merge branch 'master' into catch-scoring 2024-01-09 15:49:37 +01:00
Bartłomiej Dach
8295ad1feb
Change catch scoring to match score V2 2024-01-05 20:46:11 +01:00
Bartłomiej Dach
72e502e615
Fix backwards z-ordering of fruits in juice streams and banana showers
Closes https://github.com/ppy/osu/issues/25827.

The logic cannot be easily abstracted out (because
`CompareReverseChildID()` is protected and non-static on
`CompositeDrawable`), so a local copy was applied instead.

No testing as any testing would have been purely visual anyways.
2024-01-02 11:55:59 +01:00
Salman Ahmed
e469e06271 Refactor CatchLegacySkinTransformer logic and remove HiddenByRulesetImplementation entirely 2023-12-30 03:55:45 +03:00
Salman Ahmed
eedb436389 Move combo counter to ruleset-specific HUD components target 2023-12-30 03:47:52 +03:00
Bartłomiej Dach
2e8b49b93a
Fix catch drawable objects not being clamped to playfield bounds 2023-12-27 10:55:29 +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
c1b55c7fac
Add ScoreProcessor methods to override numeric result 2023-12-19 13:50:31 +09:00
Dan Balasescu
30116512ca
Populate MaxCombo scoring attrib for non-osu rulesets 2023-12-18 12:01:51 +09:00
Bartłomiej Dach
605269f65f
Extract preempt durations to shared constants 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
Bartłomiej Dach
15ce45ac71
Merge pull request #25726 from smoogipoo/fix-catch-clamping
Fix catch applying positional clamping too early
2023-12-13 18:47:05 +01:00
Bartłomiej Dach
a6bf4cdb98
Remove dead clamping code
`EffectiveX` is already defined as clamped
to `[0, CatchPlayfield.WIDTH]`.
2023-12-13 13:22: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
c255339999
Merge branch 'master' into catch-hyperdash-stable-sort 2023-12-13 12:40:39 +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
Dan Balasescu
6320194e19
Fix catch applying positional clamping too early 2023-12-11 21:52:39 +09:00
Dan Balasescu
cda9440a29
Fix JuiceStream velocity calculation 2023-12-11 15:29:58 +09:00
Givikap120
faf54bca43
Merge branch 'master' into arod_rate_adjust 2023-12-10 01:49:18 +02:00
Dan Balasescu
394ea73055
Add some comments where truncations were added 2023-12-06 14:50:03 +09:00
Dan Balasescu
2c44ca1915
Add more test beatmaps
Move test files to Catch.Tests project
2023-12-06 12:27:11 +09:00
Dan Balasescu
3aaba3183b
Match stable precision when generating catch bananas 2023-12-05 15:39:26 +09:00
Dan Balasescu
7d602c792d
Fix legacy tick distance in JuiceStream generation 2023-12-05 15:10:03 +09:00
Dan Balasescu
b90de83f33
Replicate integer calculations for tiny tick conversion 2023-12-05 11:58:00 +09:00
Bartłomiej Dach
fcb6f40666
Prioritise hyperfruit over non-hyperfruit if simultaneous
In case of simultaneous hyperfruit and non-hyperfruit - which happen to
occur on some aspire maps - the desired behaviour is to hyperdash. This
did not previously occur, due to annoying details in how
`HitObjectContainer` is structured.

`HitObjectContainer`'s drawable comparer determines the order of
updating the objects. One could say that forcing the hyperfruit to be
updated last, after normal fruit, could help; unfortunately this is
complicated by the existence of juice streams and the fact that while a
juice stream can be terminated by a normal fruit that is coincidental
with a hyperfruit, the two are not comparable directly using the
comparer in any feasible way.

Therefore, apply a `Catcher`-level workaround that intends to handle
this locally; in short, if a hyperdash was toggled in a given frame, it
cannot be toggled off again in the same frame. This yields the desired
behaviour.
2023-12-04 09:30:18 +01:00
Bartłomiej Dach
0652ea316d
Merge branch 'master' into catch-hyperdash-stable-sort 2023-12-04 09:05:42 +01:00
Dan Balasescu
6f73d78bc9
Replicate integer calculations for catch hyperdash generation 2023-12-04 14:32:14 +09:00
Dan Balasescu
c755bcbec4
Add failing test 2023-12-04 14:30:08 +09:00
Dan Balasescu
295a1b01d6
Adjust catch score grade cutoffs 2023-11-29 19:05:31 +09:00
Zyf
71e5654b64 Account for legacyAccScore in score conversion 2023-11-24 23:07:27 +01:00
Dan Balasescu
8314f656a3
Encapsulate common HP logic from osu and catch HP calculations 2023-11-24 18:32:06 +09:00
Dan Balasescu
c126c46e2d
Remove legacy implementations (moved to osu-tools) 2023-11-24 15:43:57 +09:00
Dan Balasescu
bb66267634
Actually use CatchHealthProcessor for the ruleset 2023-11-24 13:49:28 +09:00
Dan Balasescu
4ba6450c77
Use better break calculation 2023-11-24 13:49:28 +09:00
Dan Balasescu
acf3de5e25
Add CatchHealthProcessor, following legacy calculations 2023-11-24 13:49:28 +09:00
Dan Balasescu
62a04a93c8
Implement legacy catch health processor 2023-11-24 13:49:28 +09:00
Dean Herbert
039f8e6242
Add note about shared code 2023-11-24 10:25:23 +09:00
Dan Balasescu
7bc2d6e6cd
Merge branch 'master' into fix-combo-handling 2023-11-23 16:22:01 +09:00
Dan Balasescu
7998204cfe
Fix combo/combo colouring issues around spinners 2023-11-23 13:54:05 +09: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
4df1eb1b37
Refactor logic and tooltip formatting 2023-11-12 16:19:55 +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
97caf18036 Update CatchRuleset.cs 2023-11-04 21:57:17 +02:00
Givikap120
5597e819be fixed bug in AR formula 2023-11-04 18:01:10 +02:00
Givikap120
57170501cd Improve code quality 2023-11-04 17:25:09 +02:00
Bartłomiej Dach
359ae31204
Fix catch distance snap grid not moving
Regressed in https://github.com/ppy/osu/pull/25154.
Specifically, in 013b5fa916
and 74b86349d5.

A simple case of too-much-code-deleted-itis.
2023-10-26 15:42:50 +02:00
Dean Herbert
3fb74cb5f9
Move helper method to LegacyRulesetExtensions and stop applying rounding allowance to catch
As discussed, it isn't used in stable like this. Was a mistake.
2023-10-20 18:57:14 +09:00
Dean Herbert
2ba6286470
Merge branch 'master' into fix-circle-radius 2023-10-20 18:53:36 +09:00
Dean Herbert
d49639bec3
Merge pull request #25173 from bdach/floating-fruits-borked
Fix Floating Fruits not flipping playfield properly
2023-10-20 13:04:08 +09:00
Bartłomiej Dach
cc1f1d2270
Fix Floating Fruits not flipping playfield properly
Regressed by https://github.com/ppy/osu/pull/25070.
2023-10-19 19:47:49 +02:00
Dean Herbert
74b86349d5
Tidy up CatchHitObjectComposer 2023-10-19 23:57:36 +09:00
Dean Herbert
013b5fa916
Move beat snap grid implementation details to ScrollingHitObjectComposer 2023-10-19 23:54:34 +09:00
Dean Herbert
52c2eb93de
Merge branch 'master' into taiko-beat-snap-grid 2023-10-19 23:53:01 +09:00
Bartłomiej Dach
0c4e74c82d
Inherit ScrollingHitObjectComposer in catch 2023-10-19 11:58:25 +02:00
Bartłomiej Dach
31849192c3
Remove DistancedHitObjectComposer inheritance from catch composer 2023-10-19 11:46:30 +02:00
Dean Herbert
42087037ae
Fix Catcher code change not accounting for double sizing requirement 2023-10-18 23:56:17 +09:00
Dean Herbert
3a5490892c
Centralise and repair circle size calculations game-wide 2023-10-18 19:50:42 +09:00
Bartłomiej Dach
e927267c4d
Merge pull request #25155 from peppy/fix-new-inspections
Fix various new rider EAP inspections
2023-10-17 17:04:39 +02: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
1b9acdf55c
Abstract out common implementation of BeatSnapGrid 2023-10-17 16:42:52 +09:00
Bartłomiej Dach
79a4b985fe
Use left mouse as alternative default binding for catch dash
This mirrors stable. Although the way stable does this is pretty dodgy,
see:
	https://github.com/peppy/osu-stable-reference/blob/master/osu!/GameModes/Play/Rulesets/Fruits/RulesetFruits.cs#L274-L275
2023-10-17 09:31:29 +02:00
Dean Herbert
3849b11644
Fix "Hard Rock" mod affecting CS/AR in osu!mania
Closes https://github.com/ppy/osu/issues/25090.

Not sure if there are other exceptions we should account for here.
2023-10-12 19:48:47 +09:00
Salman Ahmed
6073f3e756 Refactor catch playfield size adjustment logic w.r.t. catcher position 2023-10-10 02:42:37 +03:00
Salman Ahmed
b2987caf7c Adjust the catch playfield's position to match 1:1 with stable 2023-10-10 02:17:43 +03:00
Salman Ahmed
fed0deac02 Add brief explaination of BASE_SIZE 2023-10-10 01:26:59 +03:00
Salman Ahmed
fc63ee43be Fix legacy catcher sprites getting shrunk 2023-10-10 01:26:59 +03:00
Salman Ahmed
0fb7895a52 Adjust catcher origin position to match 1:1 with stable
Change catcher origin position logic to 1:1 match stable on legacy skin
2023-10-10 01:26:59 +03:00
Bartłomiej Dach
71c4b138fb
Merge branch 'master' into fix-legacy-score-multipliers-2 2023-10-09 10:53:14 +02: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
Dan Balasescu
bbe9d95b3d
Merge branch 'master' into catch-hyperdash-stable-sort 2023-10-04 20:38:08 +09:00
Dan Balasescu
da2a4681d9 Add method to retrieve legacy score multiplier 2023-10-02 16:52:01 +09:00
Dean Herbert
d7119674e8 Update comments to better explain what LastTick is doing 2023-09-29 14:40:44 +09:00
Dean Herbert
81485c548c Move LegacyLastTickOffset specification to generation code and stop passing everywhere 2023-09-29 14:32:29 +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
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
c4fc4199d1 Use correct maximum size for droplets 2023-09-21 19:02:31 +03:00
Bartłomiej Dach
f2791d4f3e
Move comment a bit to fix formatting
Would otherwise trigger IDE0055, but that isn't resolveable without
an inspection cycle with resharper, so just move in a more sane place.
2023-09-20 12:22:05 +02:00
Dean Herbert
41a8239e49 Remvoe null default for mods which can't be null 2023-09-20 15:27:50 +09:00
Dean Herbert
c5397bdbb3
Merge branch 'master' into mania-edit-disable-sv 2023-09-20 14:23:07 +09:00
Dean Herbert
8e16b1d507 Simplify some maximum size specs 2023-09-20 12:48:15 +09:00
Dan Balasescu
4e1800860e
Merge branch 'master' into catch-hyperdash-stable-sort 2023-09-19 10:10:57 +09:00
Salman Ahmed
291a91be66 Change extension from retrieval to post-processing instead 2023-09-19 03:40:30 +03:00