1
0
mirror of https://github.com/ppy/osu.git synced 2024-11-11 12:57:36 +08:00
Commit Graph

5272 Commits

Author SHA1 Message Date
Bartłomiej Dach
cfd8d05fde
Fix spinner ticks not playing samples correctly sometimes
Noticed this during work on https://github.com/ppy/osu/pull/25185.

In some circumstances, it seemed that spinner bonus ticks (and mostly
them specifically) would not always play with the correct volume.
Hours of debugging later pointed at a trace at
`DrawableAudioWrapper.refreshLayoutFromParent()` not firing sometimes.

Initially I thought it to be some sort of framework bug, but after
preparing a diff and running final checks, I noticed that sometimes
the sample was being played *by a `PoolableSkinnableSample` that wasn't
loaded*. And determining why *that* is the case turned out with this
diff.

As it happens, spinner ticks get assigned a start time proportionally,
i.e. the 1st of 10 ticks is placed at 10% of the duration, the 2nd
at 20%, and so on. The start time generally shouldn't matter,
because the spinner is manually judging the ticks. *However*, the ticks
*still* receive a lifetime start / end in the same way normal objects
do, which means that in some cases they can *not be alive* when they're
hit, which means that the `DrawableAudioWrapper` flow *hasn't had
a chance to run*, and rightly so.

To fix, ensure that all spinner ticks are alive throughout the entirety
of the spinner's duration.
2023-10-23 21:29:55 +02:00
Salman Ahmed
0cf572d029 Use existing property and fix nullability 2023-10-23 11:46:21 +03:00
Dean Herbert
4e057b446a
Rename accumulated rotation variable 2023-10-23 16:46:15 +09:00
Dean Herbert
d0599496bd
Merge pull request #25177 from peppy/spinner-max-display 2023-10-21 11:10:09 +09:00
Salman Ahmed
2a70c331b9 Remove animation support from osu! slider reverse arrow 2023-10-20 23:59:03 +03:00
Salman Ahmed
80ce78e05d Remove animation support from osu! hit circle overlay 2023-10-20 23:59:03 +03:00
Salman Ahmed
7373a9a784 Remove unnecessary usage of ApplyWithDoubledAlpha 2023-10-20 23:54:29 +03:00
Salman Ahmed
ac8c2a173b Apply velocity into legacy slider ball animation rate 2023-10-20 22:47:45 +03:00
Bartłomiej Dach
b321d556b6
Enforce minimum gameplay sample volume of 5% 2023-10-20 15:50:13 +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
686c45e21b
Merge branch 'master' into legacy-tick-test-coverage 2023-10-20 16:41:32 +09:00
Dean Herbert
ca3a3f600e
Update visuals of spinner implementations to show MAX score differently 2023-10-20 16:11:09 +09:00
Dean Herbert
181a98e8ef
Remove duplicate definition of bonus text in ArgonSpinner 2023-10-20 16:10:54 +09:00
Dean Herbert
3986cec949
Cap bonus score more correctly 2023-10-20 16:10:54 +09:00
Dean Herbert
f16400929d
Update bindable flow to expose every spin, even after max bonus is reached 2023-10-20 15:38:04 +09:00
Bartłomiej Dach
dcfd6a0a8a
Remove DistancedHitObjectComposer inheritance from osu! composer 2023-10-19 11:46:30 +02:00
Bartłomiej Dach
3ab083b696
Split IPositionSnapProvider from IDistanceSnapProvider
In preparation to remove `DistancedHitObjectComposer`, split off
`IPositionSnapProvider` from `IDistanceSnapProvider`.

`DistancedHitObjectComposer` was not touching `IPositionSnapProvider`'s
only interface member at all, it was just forwarding it for subclasses
to override to their own leisure.
2023-10-19 11:45:24 +02:00
Dean Herbert
3a5490892c
Centralise and repair circle size calculations game-wide 2023-10-18 19:50:42 +09:00
Dean Herbert
6ae82c5e73
Fix circle scale not matching stable due to missing multiplier
This multiplier has to exist.

I'm not guaranteeing that the rest is correct here. Should we be doing
proper cross-testing on this? Maybe, but it's going to be hard to get
right. We could likely check as far as "game pixels", but there's still
a chance that the osu-framework could be doing something weird in the
rest of the hierarchy where playfield scale is involved.

Closes https://github.com/ppy/osu/issues/25162. Tested to fix the linked
replay.
2023-10-18 18:35:14 +09:00
Dean Herbert
54da6f1048
Merge pull request #25160 from bdach/repeat-arrow-hidden-fade
Adjust slider repeat transforms to closer match stable
2023-10-18 18:03:48 +09:00
Dean Herbert
92524d4299
Remove incorrect plural from variable 2023-10-18 17:44:01 +09:00
Dan Balasescu
939b55020c
Merge branch 'master' into legacy-tick-test-coverage 2023-10-18 15:21:31 +09:00
Bartłomiej Dach
f3cda58474
Fix legacy slider repeats becoming much too large on hit
They had scale transforms applied to them in two places: the actual
legacy pieces themselves (esp. `LegacyHitCirclePiece`), and on the
`DrawableSliderRepeat` level.

This change moves all of the scale transforms to the skinnable pieces.
Argon and triangles have received a copy of the previous logic each,
so behaviour on those skins should not change.
2023-10-17 14:47:44 +02:00
Bartłomiej Dach
30e5f47007
Instantly fade out slider repeats when hidden is active 2023-10-17 14:15:21 +02:00
Dean Herbert
4f0d55e1a9
Clean up code and add xmldoc and inline doc 2023-10-17 20:24:23 +09:00
Dean Herbert
af7180a5b5
Add SpinnerSpinHistory and tests 2023-10-17 20:10:22 +09:00
Dean Herbert
5341a335a6
Bypass Parent nullability checks for now 2023-10-17 17:48:45 +09:00
Dean Herbert
0bb95cfa88
Fix incorrect initial rotation transfer value
Should have been removed as part of https://github.com/ppy/osu/pull/24360.
2023-10-16 19:34:55 +09:00
Dean Herbert
10bab61441
Tidy up lastAngle usage and add assertion of maximum delta 2023-10-16 19:34:22 +09:00
Dean Herbert
159b24acf7
Rename RateAdjustedRotation to TotalRotation 2023-10-16 18:25:03 +09:00
Dan Balasescu
84be714d6b
Fix large instantaneous delta on first frame
Happens when the first update frame comes in before any mouse input.
2023-10-16 18:17:11 +09:00
Bartłomiej Dach
8a4c2624bd
Merge branch 'master' into fix-hr-cs-mania-adjustment 2023-10-13 16:08:54 +02:00
Dean Herbert
0b64852181
Limit sliderscorepoint to hitcicle dimensions
You'd never use anything above this unless crazy.
2023-10-13 15:43:20 +09:00
Dean Herbert
17df2fdf01
Restrict followpoint size
See https://github.com/ppy/osu/issues/24940#issuecomment-1760980461.
2023-10-13 15:42:49 +09:00
Dean Herbert
a3b21281e6
Add reordering support to match existing diffcalc 100% 2023-10-13 14:25:38 +09: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
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
0ca05d986d
Merge pull request #25067 from bdach/approach-circle-cutoff
Adjust approach circle maximum size limits for backwards compatibility
2023-10-10 17:05:16 +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
ad6f04cfb0
Hotfix approach circle cutoff 2023-10-09 10:16:57 +02:00
Bartłomiej Dach
96bb8ed150
Apply feedback regarding maximum osu! element sizings
- `default-N` number sprites maximum size increased by 1.25x to a total
  of 320x320 to counteract the 0.8x factor applied onto them when
  displayed on a hitcircle.

- `sliderb` and parts' maximum size increased to 384x384, to match
  `sliderfollowcircle`, as the two are apparently sometimes used
  interchangeably by skinners to achieve different visual effects.
2023-10-05 22:33:49 +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
Dean Herbert
658b6a166f Fix regression in Tracking state handling
It turns out multiple components depend on `Tracking` eventually
becoming `false` at the end of a slider. With my previous changes, this
was no longer the case (as could be seen by the legacy cursor particles
test failure, and heard by slider slide taking too long to stop).
2023-10-04 16:11:40 +09:00
Dean Herbert
d14d885d19 Add test coverage of very fast slider 2023-10-04 14:58:05 +09:00
Dan Balasescu
48209872bf Fix spinner requirements being susceptible to FP precision 2023-10-04 13:53:33 +09:00
Dean Herbert
9361b1879c Add note about early return in DrawableSliderBall.Update 2023-10-04 13:45:26 +09:00
Dean Herbert
8d91991214 Fix difficulty calculation not correct handling slider leniency anymore 2023-10-04 13:45:26 +09:00
Dan Balasescu
854b797ab5
Merge branch 'master' into legacy-tick-not-so-legacy-after-all 2023-10-04 10:52:13 +09:00
Dan Balasescu
a120ea8464
Merge branch 'master' into fix-legacy-score-multipliers-2 2023-10-04 01:19:33 +09:00
Dean Herbert
69ae370e82 Merge branch 'master' into legacy-tick-test-coverage 2023-10-03 19:37:32 +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
Dean Herbert
9e1fec0213 Fix potential out-of-order tail and ticks 2023-10-03 18:52:20 +09:00
Dean Herbert
9a3c21c320 Change comparison of timeOffset to greater-than (in line with others)
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2023-10-03 18:12:55 +09:00
Dean Herbert
0086759395 Fix slider tracking state being set to false after slider end 2023-10-03 18:12:55 +09:00
Dean Herbert
16fcc4eaaa Fix incorrect anchor/origin causing rotation to look wrong on legacy skin arrows 2023-10-03 12:32:52 +09:00
Dean Herbert
3aa51301e8 Add null checks in disposal flow 2023-10-02 22:28:33 +09:00
Dean Herbert
94e49a34fd Adjust legacy reverse arrow implementation to match stable more closely 2023-10-02 22:26:57 +09:00
Dean Herbert
f0070eecf1 Add rotation support for very old skins 2023-10-02 20:09:39 +09:00
Dean Herbert
1bee7bf353 Add note about rotation 2023-10-02 19:22:24 +09:00
Dean Herbert
e4ac8362ec Update other implementations to use non-beat-sync logic 2023-10-02 19:20:11 +09:00
Dean Herbert
8010410487 Stop beat syncing (and close match stable's implementation of arrow animation) 2023-10-02 19:17:35 +09:00
Dean Herbert
ad4e988520 Adjust reverse arrows to bounce more 2023-10-02 18:43:50 +09:00
Dean Herbert
455fc228ad Add edge piece to argon reverse arrow 2023-10-02 18:43:50 +09:00
Dean Herbert
7dd9951c44 Split out reverse arrow implementations to allow better animation 2023-10-02 18:43:50 +09:00
Dan Balasescu
da2a4681d9 Add method to retrieve legacy score multiplier 2023-10-02 16:52:01 +09:00
Dean Herbert
07207ffc32 Fix hitsounds playing too early on fast sliders 2023-10-02 14:09:52 +09:00
Dean Herbert
94f4268ae5 Fix object dim being applied to approach circles
Fixes half of https://github.com/ppy/osu/issues/24956.

The other half is high effort. The number portion is nested deeply and
with reason - depending on skin setting it changes the visual order.

I'm not sure how to fix that one, but I also think it's weird behaviour
and if people don't complain, it's probably fine to just dim the number
for consistency.

That said, the approach circle is an important one to ensure it matches
1:1, so I've fixed that here.
2023-09-29 18:23:23 +09:00
Dean Herbert
dd6d09189e Remove usage of LastTick in osu! ruleset 2023-09-29 16:58:17 +09:00
Dean Herbert
e3695d2be0 Adjust slider judgement logic to allow tracking anywhere after last tick 2023-09-29 16:08:52 +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
c0234ff254 Reduce approach circle's final opacity to match stable
Closes #24941.
2023-09-29 12:44:28 +09:00
Dean Herbert
0a208a5a47
Merge pull request #24932 from smoogipoo/spinner-od-based-max-rpm
Cap maximum spinner RPM based on OD
2023-09-27 15:56:27 +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
05c9f0f9cc Fix bonus requirement not considering number of normal ticks 2023-09-26 18:11:27 +09:00
Dan Balasescu
859155dda1 Cap maximum spinner RPM based on OD 2023-09-26 17:20:20 +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
734ee0e68b Simplify code 2023-09-24 02:22:50 +03:00
Fabian van Oeffelt
7c40072c47 Get first Spinner,Slider or HitCircle instead of only HitCircle
Fixes bug
2023-09-23 13:18:49 +02:00
Bartłomiej Dach
69ed99dfd5
Merge branch 'master' into mania-edit-disable-sv 2023-09-21 09:13:27 +02:00
Bartłomiej Dach
28da5baea4
Merge branch 'master' into fix-slider-length 2023-09-20 11:10:01 +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
8e16b1d507 Simplify some maximum size specs 2023-09-20 12:48:15 +09:00
Bartłomiej Dach
92cafe23fe
Merge pull request #24810 from peppy/remove-slider-head-movement-allowance
Remove slider head circle movement (and remove setting from "classic" mod)
2023-09-19 12:25:33 +02:00
Dean Herbert
0360646e9b Avoid fast fade out if slider head was not hit 2023-09-19 14:38:53 +09:00
Salman Ahmed
922f6f36f2 Add size limitation for hit object numbers 2023-09-19 04:38:10 +03:00
Salman Ahmed
ab5226832a Add size limitation for slider reverse arrow piece 2023-09-19 04:38:10 +03:00
Salman Ahmed
b823507b2a Add size limitation for approach circles 2023-09-19 04:38:10 +03:00
Salman Ahmed
f963a921db Add size limitation for slider follow circle 2023-09-19 04:18:12 +03:00
Salman Ahmed
fc1a39ede3 Add size limitations for slider balls 2023-09-19 04:18:12 +03:00
Salman Ahmed
291a91be66 Change extension from retrieval to post-processing instead 2023-09-19 03:40:30 +03:00
Salman Ahmed
57dc76b345 Revert "Update GetTexture signature rather than creating new overload"
This reverts commit 96f12cfbaa.
2023-09-19 03:21:19 +03:00
Magnus-Cosmos
bd7dab1d86
Add test for slider path edge case 2023-09-18 12:02:20 -04:00
Bartłomiej Dach
5c6cd879dd
Adjust slider calculations to new method API
Code originally read

	Velocity = scoringDistance / beatLength
		 = BASE_SCORING_DISTANCE * SliderMultiplier * GetPrecisionAdjustedSliderVelocityMultiplier() / beatLength

Given (mathematically, floats are not generally as forgiving):

	GetPrecisionAdjustedBeatLength() = beatLength / GetPrecisionAdjustedSliderVelocityMultiplier()

it follows that (inverting both sides):

	1 / GetPrecisionAdjustedBeatLength() = GetPrecisionAdjustedSliderVelocityMultiplier() / beatLength

and therefore

	Velocity = BASE_SCORING_DISTANCE * SliderMultiplier * GetPrecisionAdjustedSliderVelocityMultiplier() / beatLength
		 = BASE_SCORING_DISTANCE * SliderMultiplier / GetPrecisionAdjustedBeatLength()

and to recover `scoringDistance`

	scoringDistance = Velocity * beatLength
2023-09-15 12:30:25 +02:00
Bartłomiej Dach
4275af1343
Merge branch 'master' into fix-slider-tick-misssing 2023-09-15 12:09:54 +02:00
Bartłomiej Dach
86c46a5b3f
Manually reorder objects in expected mapping
The test added in 64baa4d01a was
previously failing despite applying a fix. This was caused by the fact
that in stable, the last `sliderScoreTimingPoint` (i.e. the
`LegacyLastTick` is pulled back by 36ms, but the list of all of them
is not re-sorted afterwards, causing objects to be exported in
non-chronological order to the resultant conversion mapping.
lazer correctly sorts the objects, causing a false positive.
2023-09-15 12:07:59 +02: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
Bartłomiej Dach
a6fab28461
Merge branch 'master' into no-legacy-difficulty-control-point 2023-09-15 11:14:28 +02:00
Dan Balasescu
ed295effc5 Maximise bonus score 2023-09-15 15:51:05 +09:00
Dean Herbert
cf9ca60b09 Change slider body to not animate snaking until head circle is (successfully) hit 2023-09-14 17:49:41 +09:00
Dean Herbert
e3e7a81ad9 Remove slider head circle movement (and remove setting from "classic" mod) 2023-09-14 17:49:41 +09:00
Dan Balasescu
753c1c877c Revert masking SSBO changes 2023-09-13 23:10:13 +09:00
Dean Herbert
e810abf1e6 Rename variable 2023-09-12 20:51:22 +09:00
Dean Herbert
39d69903ab
Merge branch 'master' into stable-spinner-ticks-2 2023-09-12 20:41:43 +09:00
Dean Herbert
7db4b3e83c
Merge pull request #24661 from frenzibyte/stable-spinner-ticks-1
Update osu! spinner ticks calculation method to better match with osu!(stable)
2023-09-12 20:41:28 +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
Bartłomiej Dach
e9b08219e9
Block input to objects lying under already-hit slider heads before slider is fully judged when classic note lock is active 2023-09-08 13:42:18 +02:00
Bartłomiej Dach
168a828f23
Revert "Block input to objects lying under already-hit hitcircles when classic note lock is active"
This reverts commit 03c61a573e.

The goal here was to handle an edge case discovered during work on note
lock, wherein it was determined that on stable hit circles would block
input from reaching objects underneath them. However, the change
mentioned above did that _too_ hard and caused overlaps to also be
blocked even long past a hit circle has been faded out.

Revert the change pending further (and more careful) investigation.
2023-09-08 10:11:21 +02:00
Dan Balasescu
2334be1987 Split legacy scoring attributes into a separate object 2023-09-07 21:10:38 +09:00
Dean Herbert
22ee64cfda Fix sliders not always being the correct length
This is another similar case where stable floating point precision comes
into play due to use of `hitObjectManager.Beatmap.BpmMultiplierAt` (see
1531237b63/osu!/GameplayElements/HitObjects/Osu/SliderOsu.cs#L680)

Closes #24708.
2023-09-07 18:20:08 +09:00
Dean Herbert
64baa4d01a Add test coverage of failing slider tick generation edge case 2023-09-07 18:20:08 +09:00
Dean Herbert
dcbdc114ce Remove precision limitations of SliderVelocity 2023-09-07 17:41:58 +09:00
Bartłomiej Dach
323a4f4522
Only show preempt time when limits are extended 2023-09-07 08:30:02 +02:00
Bartłomiej Dach
bd633889e7
Remove local preempt time calculation
And just use a hitcircle, and read the actual value. Comes with 100%
less chance of forgetting to update either place in the future.
2023-09-07 08:23:50 +02:00
Bartłomiej Dach
9c6f77b26e
Fix too many things being exposed 2023-09-07 08:11:04 +02:00
Dean Herbert
e05d7d5f8d Inline local control 2023-09-07 14:22:06 +09:00
isakvik
2ab11ab568 adds new diffsetting control that shows millisecond values for approach rate override 2023-09-07 01:41:22 +02:00
isakvik
3db0d0d341 extendable minimum AR value for osu!std diff adjust mod, set to -10 2023-09-06 23:26:34 +02:00
Dean Herbert
1a37543d28 Rename SliderVelocity to SliderVelocityMultiplier to distinguish from Velocity 2023-09-06 19:01:08 +09:00
Dean Herbert
d06490220d Add better xmldoc for Slider.Velocity 2023-09-06 18:58:58 +09:00
Salman Ahmed
912c8b0901 currentSpins -> completedFullSpins 2023-09-06 00:10:41 +03:00
Bartłomiej Dach
03c61a573e
Block input to objects lying under already-hit hitcircles when classic note lock is active 2023-09-05 22:50:27 +02:00
Dean Herbert
96f12cfbaa Update GetTexture signature rather than creating new overload 2023-09-05 18:01:19 +09:00
Dean Herbert
0da37e4e99
Merge pull request #24701 from frenzibyte/remove-flashlight-slider-dim-transform
Apply flashlight slider dim immediately to match osu!(stable)
2023-09-04 16:35:30 +09:00
Salman Ahmed
351081eb27 Add limit to osu! hit circle elements 2023-09-03 02:22:53 +03:00
Salman Ahmed
920c6fa48f Update comment 2023-09-01 23:29:51 +03:00
Salman Ahmed
f74dfa9c6c Apply flashlight slider dim immediately to match osu!(stable) 2023-09-01 22:55:33 +03:00
Dean Herbert
90121814f9 Merge branch 'master' into stable-notelock 2023-09-01 17:15:48 +09:00
Dean Herbert
c75b14c729 Apply NRT to new LegacyHitPolicy class (and other implementations) 2023-09-01 16:56:34 +09:00
Salman Ahmed
993cebe785 Fix mod "Classic" interfering with DrawableHitCircle animation while in hit state 2023-08-30 21:42:47 +03:00
Salman Ahmed
3bcddf3cc8 Add gap of two whole spins before achieving bonus score 2023-08-27 01:54:10 +03:00
Salman Ahmed
d614e745b8 Calculate spinner ticks as "whole spins" without arbitrary factors 2023-08-27 01:27:31 +03:00
Salman Ahmed
e77581f641 wholeSpins -> currentSpins 2023-08-27 01:27:31 +03:00
Bartłomiej Dach
7f215f163f
Use reduced hittable range with autopilot active 2023-08-24 08:52:49 +02:00
Bartłomiej Dach
ed2b1a0754
Contain entirety of legacy notelock badness inside the hit policy 2023-08-24 08:52:49 +02:00
Bartłomiej Dach
a045cb71fc
Add assertions checking action type taken by legacy hit policy 2023-08-24 08:52:49 +02:00
Bartłomiej Dach
b777b34cc0
Merge branch 'master' into stable-notelock 2023-08-24 08:43:59 +02:00
Dan Balasescu
e8337c592a Update framework and apply changes to support masking SSBO 2023-08-22 12:50:13 +09:00
Bartłomiej Dach
3c191ff9ea
Expand allowable rotation range to [-360, 360] 2023-08-19 15:09:59 +02:00
Dean Herbert
63080d049f Adjust icons slightly 2023-08-17 19:08:18 +09:00
Dean Herbert
0858bef66e Update SmokeSegment in line with framework vertex changes 2023-08-17 18:12:04 +09:00
Bartłomiej Dach
19f892687a
Add precise rotation control to osu! editor 2023-08-16 11:37:52 +02:00
Bartłomiej Dach
262f25dce8
Make SelectionRotationHandler a Component 2023-07-30 20:18:33 +02:00
Bartłomiej Dach
821cd08f34
Merge branch 'master' into selection-operations-refactor 2023-07-30 19:29:06 +02:00
Bartłomiej Dach
c21167e2ab
Merge pull request #24360 from peppy/spinner-faster-rotation
Change spinner rotation animation to match input 1:1
2023-07-29 00:48:56 +02:00
Dean Herbert
2e9379474d Change spinner rotation animation to match input 1:1 2023-07-25 19:21:20 +09:00
Dean Herbert
eac6271bd0 Add new property to avoid overlapping usages 2023-07-25 18:14:03 +09:00
Dean Herbert
2f7d38d98b Merge branch 'master' into fix-editor-blueprint-input-extension 2023-07-25 18:14:02 +09:00
Bartłomiej Dach
aec3ca250c
Migrate SelectionHandler to use SelectionRotationHandler 2023-07-23 20:56:22 +02:00
Bartłomiej Dach
ba904fd77b
Migrate osu! rotation handling to SelectionRotationHandler 2023-07-23 20:56:22 +02:00
Bartłomiej Dach
4622255cc7
Move out helper methods to static class 2023-07-23 18:24:20 +02:00
Dean Herbert
b58354ac64 Fix playfield getting cut off (again) at tall aspect ratios 2023-07-21 15:20:20 +09:00
Liam DeVoe
6a81230298 rename ObjectOrderedHitPolicy to LegacyHitPolicy 2023-07-19 14:44:28 -04:00
Liam DeVoe
2c97ac7410 convert AliveObjects to list in hit policy instead of globally 2023-07-19 14:28:04 -04:00
Dean Herbert
4a6a5b174a Fix editor blueprints being selectable for too long when hit markers are enabled
Addresses https://github.com/ppy/osu/discussions/24163.
2023-07-19 14:59:22 +09:00
Liam DeVoe
768d7b5e1c correct implementation of stable notelock 2023-07-17 23:31:21 -04:00
Dean Herbert
dd8774a640 Vertically centre the editor osu! playfield 2023-07-14 13:21:28 +09:00
Bartłomiej Dach
d5912165e9
Merge branch 'master' into results-screen-component-metrics 2023-07-13 19:53:52 +02:00
Dean Herbert
9ad63bae37 Add missing heading for statistics section in results screen 2023-07-13 18:50:52 +09:00
Dean Herbert
947b40149f Adjust metrics of SimpleStatisticTable 2023-07-13 18:45:32 +09:00
Dean Herbert
4f089eb5a5 Adjust metrics of AccuracyHeatmap 2023-07-13 18:30:57 +09:00
Dean Herbert
87570ed238 Fix incorrect slider stacking on very old beatmaps
Closes https://github.com/ppy/osu/issues/24185

The stable code has had a bug in this logic forever. So we'll need to
reimplement the bug.

Basically, sliders have to have `UpdateCalculations` run in order to
have a correct `Position2` and `EndTime`, but this wasn't being called
in the inner loop before use of `EndTime` at
1531237b63/osu!/GameplayElements/HitObjectManager.cs#L1813.

To fix this, we use `StartTime` in the inner loop to reproduce the bug.
2023-07-12 17:35:03 +09:00
Bartłomiej Dach
7be5e0e978
Implement back-and-forth conversion of ModScoreV2 and LegacyMods 2023-07-09 16:15:21 +02:00
Bartłomiej Dach
e9ecad9839
Add failing test cases covering NaN-timing-point sliders 2023-07-08 23:24:38 +02:00
Dean Herbert
e0fc97bb93 Replace various local implementations of rewinding checks with new property 2023-07-07 15:21:24 +09:00
Dean Herbert
1629024111 ILegacyScoreProcessor -> ILegacyScoreSimulator 2023-07-04 17:32:54 +09:00
Dan Balasescu
c6ad184d94 Move Ruleset method to ILegacyRuleset interface 2023-06-29 17:24:37 +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
Dan Balasescu
5fadadc3d0 Merge branch 'master' into diffcalc-total-scorev1 2023-06-24 02:46:15 +09: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
Bartłomiej Dach
6d32206a08
Fix slider tails receiving wrong colours
Only visually apparent on legacy skins.
2023-06-19 17:47:01 +02:00
Dan Balasescu
bfa449e47a Adjust attribute data 2023-06-19 21:38:13 +09:00
Dean Herbert
0900cebc0d Avoid doing expensive colour fetch operation every update 2023-06-19 20:12:17 +09:00
Dean Herbert
aa96fefae2 Merge branch 'master' into snap-colour-mod 2023-06-19 20:01:36 +09:00
Dan Balasescu
0844a21a51 Merge branch 'master' into diffcalc-total-scorev1 2023-06-15 19:33:29 +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
024a64e52c
Merge pull request #23866 from bdach/fix-judgement-processing-order
Fix not being able to receive full score for extremely short sliders with repeats
2023-06-12 15:04:08 +09:00
Dean Herbert
bddb91dc0a Adjust adjustment to 1px based on review feedback
Also split out `Size` variable for clarity
2023-06-12 14:24:39 +09:00
Dean Herbert
03a5b701e9
Fix incorrect inline comment
Co-authored-by: Bartłomiej Dach <dach.bartlomiej@gmail.com>
2023-06-12 14:20:54 +09:00
Bartłomiej Dach
7e5533e205
Fix not being able to receive full score for extremely short sliders with repeats
Closes #23862.

Score V2 is a scoring algorithm, which aside from the raw numerical
values of each judgement, incorporates a combo component, wherein each
judgement's "combo score" is derived from both the raw numerical value
of the object and the current combo after the given judgement. In
particular, this means that Score V2 is sensitive to the _order_ of
judging objects, as if two objects with the same start time are judged
using different ordering, they can end up having a different "combo
score".

The issue that this change is fixing is an instance of one such
reordering. Upon inspection, it turned out that the simulated autoplay
run, which is used to determine max possible score so that it can be
standardised to 1 million again, was processing a slider repeat before a
slider tail circle, while actual gameplay was processing the same slider
repeat _after_ the slider tail circle.

The cause of that behaviour is unfortunately due to `LegacyLastTick`.
The sliders which cause the issue are extremely short. Stable had a
behaviour, in which to provide leniency, slider tails were artificially
offset back by 36ms. However, if the slider is not long enough to make
this possible, the last tick is placed in the middle of the slider. If
that slider also happens to have exactly 1 repeat, then this means that
the last tick and the repeat have the same time instant.

Because of the time equality, what begins to matter now is the _order_
of processing the elements of the drawable slider in the hierarchy. For
the purposes of legacy skins, tail circles were moved below ticks in
fce3eacd7d - but in this particular case,
it means that the order of processing the slider elements is now
inadvertently inverted, causing the entire debacle.

While the fact that scoring depends on order of processing of visuals is
suboptimal, there isn't a great way to address this without significant
restructuring. Due to the structure of processing judgements currently
in place, in which each judgement is processed independently from others
by its corresponding drawable hit object, this is probably the best that
can be done for the time being at least.
2023-06-10 12:14:08 +02:00
Dan Balasescu
4b8c4bd503 Fix black jaggies around argon hitcircles 2023-06-10 01:54:13 +09:00
Dean Herbert
95ad18ed2e Reduce the radius of note-to-note snapping in osu! editor
Stable uses `0.15f`, but for whatever reason that feels too large still.

I've ballparked this.

Addresses https://github.com/ppy/osu/discussions/23806.
2023-06-08 17:44:33 +09:00
John Biddle
d07437f810 Added recommendations from bdach:
Fixed null checking in ApplyToDrawableHitObject
Renamed mod to "Synesthesia"
Moved to the "Fun" mod category
2023-06-08 00:52:28 -07:00
Dan Balasescu
d10c63ed2d Fix difficulty calculation when mods are involved 2023-06-08 16:29:34 +09:00
Salman Ahmed
62cb6a98ca Remove redundant nullable suppression directives 2023-06-07 08:20:41 +03:00
Dean Herbert
247fa088db Add IHasNoTimedInputs interface to scope change further 2023-06-06 22:22:42 +09:00
Dan Balasescu
77c745cc94 "TotalScoreV1" -> "LegacyTotalScore" 2023-06-06 17:25:28 +09:00