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

988 Commits

Author SHA1 Message Date
Bartłomiej Dach
0e5a521695
Merge pull request #25157 from peppy/spinner-anti-cheese-final
Fix spinner cheese by accounting for spin directionality
2023-10-24 08:13:32 +02: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
Dean Herbert
686c45e21b
Merge branch 'master' into legacy-tick-test-coverage 2023-10-20 16:41:32 +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
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
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
159b24acf7
Rename RateAdjustedRotation to TotalRotation 2023-10-16 18:25:03 +09: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
9361b1879c Add note about early return in DrawableSliderBall.Update 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
Dean Herbert
69ae370e82 Merge branch 'master' into legacy-tick-test-coverage 2023-10-03 19:37:32 +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
7dd9951c44 Split out reverse arrow implementations to allow better animation 2023-10-02 18:43:50 +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
c0234ff254 Reduce approach circle's final opacity to match stable
Closes #24941.
2023-09-29 12:44:28 +09:00
Dean Herbert
990c54519b
Merge branch 'master' into limit-gameplay-sprite-dimensions 2023-09-26 16:40:32 +09:00
Dean Herbert
8e16b1d507 Simplify some maximum size specs 2023-09-20 12:48:15 +09:00
Dean Herbert
0360646e9b Avoid fast fade out if slider head was not hit 2023-09-19 14:38:53 +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
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
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
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
Salman Ahmed
3bcddf3cc8 Add gap of two whole spins before achieving bonus score 2023-08-27 01:54:10 +03:00
Salman Ahmed
e77581f641 wholeSpins -> currentSpins 2023-08-27 01:27:31 +03:00
Bartłomiej Dach
ed2b1a0754
Contain entirety of legacy notelock badness inside the hit policy 2023-08-24 08:52:49 +02:00
Liam DeVoe
768d7b5e1c correct implementation of stable notelock 2023-07-17 23:31:21 -04:00
Dean Herbert
e0fc97bb93 Replace various local implementations of rewinding checks with new property 2023-07-07 15:21:24 +09:00
Dean Herbert
0ab0c52ad5 Automated pass 2023-06-24 01:00:03 +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
Salman Ahmed
62cb6a98ca Remove redundant nullable suppression directives 2023-06-07 08:20:41 +03:00
Bartłomiej Dach
a45f0b65a1
Merge pull request #23372 from peppy/fix-slider-end-circle-appear-delay
Fix fade in delay for first slider end circle being incorrect when snaking disabled
2023-05-03 19:06:39 +02:00
Dean Herbert
a619812cab Fix nullability and remove extra preempt from SliderEndCircle calculation 2023-05-02 16:36:43 +09:00