1
0
mirror of https://github.com/ppy/osu.git synced 2024-12-14 14:25:05 +08:00
Commit Graph

1153 Commits

Author SHA1 Message Date
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
Dean Herbert
dc51d5ecf3 Rename GetSampleInfo to better describe what method does
Also add full xmldoc
2023-05-17 14:07:48 +09: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
Dean Herbert
1a04be15c7 Fix fade in delay for first slider end circle being incorrect when snaking disabled 2023-05-02 16:27:17 +09:00
OliBomby
27cfadca16 add sample info to Banana and SpinnerBonusTick 2023-05-01 14:54:06 +02:00
OliBomby
41d4894aa3 add min and max value to SliderVelocity 2023-04-30 19:32:24 +02:00
OliBomby
1eb2e35dff fix ticks not being generated by default 2023-04-30 16:03:58 +02:00
OliBomby
d97daee96b remove all non-test usage of SampleControlPoint 2023-04-26 13:55:39 +02:00
OliBomby
6c70948681 Remove IContext & add IHasGenerateTicks 2023-04-26 13:10:57 +02:00
OliBomby
e4b64bdc3e clean up code stuff 2023-04-25 19:06:29 +02:00
OliBomby
66eda40cdf fix implementations of IHasSliderVelocity 2023-04-25 18:22:22 +02:00
OliBomby
065464d90c Fixed DifficultyPointPiece 2023-04-25 18:12:53 +02:00
OliBomby
97910d6be6 remove unused directives 2023-04-25 13:06:37 +02:00
OliBomby
891b87a5ff remove ApplyLegacyInfo method 2023-04-25 12:52:21 +02:00
OliBomby
ea1e6e9798 Add LegacyContext 2023-04-25 12:12:46 +02:00
OliBomby
a4c6850ab2 made the SampleControlPoint and DifficultyControlPoint obsolete 2023-04-25 11:34:09 +02:00
Bartłomiej Dach
6b9472c367
Merge branch 'master' into skin-per-ruleset-layouts 2023-02-17 22:58:38 +01:00
Dean Herbert
675e5b81f3 Fix SkinnableLighting showing up as a user placeable component 2023-02-17 18:24:05 +09:00
Dean Herbert
da8ab7143b
Merge branch 'master' into maximum-judgement-offset-in-hit-object 2023-02-15 14:48:15 +09:00
Dean Herbert
74ab036f3e Refactor SkinnableSound.Samples to be non-nullable 2023-01-27 19:32:30 +09:00
ekrctb
11e1b22bf5 Move MaximumJudgementOffset to HitObject
We want to access this property for computing lifetime
2023-01-19 21:23:55 +09:00
Dan Balasescu
7bc8908ca9 Partial everything 2022-11-27 00:00:27 +09:00
Dean Herbert
1aa0e40f2f Add "Component" prefix to lookup naming 2022-11-09 17:46:43 +09:00
Dean Herbert
c908969d9b Rename ISkinComponent to ISkinLookup 2022-11-09 17:46:43 +09:00
Dean Herbert
ab458320c4 Fix some lingering inspections 2022-11-09 17:46:24 +09:00
Dean Herbert
710c224de4 Remove unused IHasMainCirclePiece interface 2022-11-09 13:31:50 +09:00
Dean Herbert
8c9250285f Revert incorrect removal default value (causing a new warning) 2022-10-29 18:09:27 +09:00
Dean Herbert
19e0b9085c Remove redundant parameters 2022-10-29 00:24:33 +09:00
Dean Herbert
674ae9e742 Refactor DrawableSliderHead to never update the drawable position
Slider heads are guaranteed to always be drawn at (0,0). This fixes
weird behaviour in the editor, but also simplifies things in the
process. Win-win.

Closes #20644.
2022-10-26 15:26:22 +09:00
Salman Ahmed
7d31eaea54 Move ball tinting logic to overwrite SliderBall colour 2022-10-20 03:55:53 +03:00
Dean Herbert
299131c985
Merge pull request #20816 from frenzibyte/adjust-slider-fade-parameters
Adjust slider fade out transition to match stable
2022-10-19 12:04:24 +09:00
Salman Ahmed
13e2323791 Adjust fade out duration to match stable 2022-10-18 23:48:51 +03:00
Salman Ahmed
03edfce822 Remove fade easing from sliders 2022-10-18 23:43:42 +03:00
Salman Ahmed
d46bc7f72a Adjust fade out time to match stable 2022-10-18 23:43:31 +03:00
Dan Balasescu
083a13f041
Merge pull request #20680 from peppy/fix-slider-ball-editor-rewind
Fix slider ball facing incorrect direction during rewinding in editor
2022-10-11 17:47:17 +09:00
Dean Herbert
f060e6a780 Implement hold "sliding" samples in osu!mania 2022-10-11 16:31:37 +09:00
Dean Herbert
33620b7bd6 Fix slider ball facing incorrect direction during rewinding in editor
Closes https://github.com/ppy/osu/issues/20648.
2022-10-10 15:24:18 +09:00
Dan Balasescu
b6db36dcca
Merge pull request #20580 from peppy/approach-circle-fade-out
Hide approach circles immediate on successful hit
2022-10-05 19:17:57 +09:00
Dean Herbert
52002d91dd Only apply dim at top level objects 2022-10-05 17:48:56 +09:00
Dean Herbert
56d424003d Fix sliders not dimming correctly due to modified miss window 2022-10-05 14:25:04 +09:00
Dean Herbert
44b99444a7 Hide approach circles immediate on successful hit 2022-10-05 13:42:04 +09:00
Dean Herbert
c2956c6e1e Add osu! hit object dim
Stable would dim objects when they can't be hit (ie. the "miss" window
is not active yet). This was never implemented in lazer, and causes
quite large visual differences.

No one has mentioned this yet, but it will definitely be one of those
missing pieces which makes lazer feel different to stable.
2022-10-04 17:28:17 +09:00
Dan Balasescu
cbed268ac9
Merge pull request #20510 from sw1tchbl4d3r/high_bpm_judgements
Clamp `LifetimeStart` of `HitObject`s to their judgement windows
2022-09-28 17:49:35 +09:00
sw1tchbl4d3
0cffbb7562 Clamp LifetimeStart of HitObject's to their judgement windows 2022-09-27 16:54:24 +02:00
Dean Herbert
a7449380cd Fix osu! slider ticks appearing too late 2022-09-26 14:11:59 +09:00
Dean Herbert
749053481a Update osu! hitobject implementation to avoid triggering ClearInternal 2022-09-22 15:04:20 +09:00
Dean Herbert
b844d76311 Move Shake logic local to hitcircle/slider 2022-09-22 15:04:20 +09:00
Dean Herbert
2bdc6417e9 Mark DrawableOsuHitObject abstract for clarity 2022-09-22 14:44:03 +09:00