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

233 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
OliBomby
d97daee96b remove all non-test usage of SampleControlPoint 2023-04-26 13:55:39 +02:00
Dean Herbert
74ab036f3e Refactor SkinnableSound.Samples to be non-nullable 2023-01-27 19:32:30 +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
Salman Ahmed
7d31eaea54 Move ball tinting logic to overwrite SliderBall colour 2022-10-20 03:55:53 +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
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
goodtrailer
e6a05ce3e2 Slow down legacy followcircle animations 2022-07-03 13:51:30 -07:00
goodtrailer
0e0e9968ac Split ball and followcircle into default/legacy files 2022-06-29 01:23:35 -07:00
Dan Balasescu
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
Salman Ahmed
3a00931e38 Update slider sliding samples balance calculation to use screen-space as well 2022-04-18 09:18:56 +03:00
Dean Herbert
90e34d7686 Move slider slide samples to auxiliary specification 2022-03-14 17:19:48 +09:00
Bartłomiej Dach
79438c19a4
Fix slider parts not reproxying after first hitobject freed 2021-09-18 16:27:30 +02:00
Dean Herbert
738ce0f689 Fix repeat arrows being hidden beneath head circles in legacy skins
Aims to make minimal changes to `DrawableSlider` itself. I'm not super
happy about the slider ball being moved above the head circle, but it
*is* what people are used to so no one except for me is going to
complain.

Supersedes and closes https://github.com/ppy/osu/pull/14561.
2021-09-01 19:41:49 +09:00
smoogipoo
3db995c778 Fix sliders jumping around the screen on movement 2021-05-24 17:15:57 +09:00
smoogipoo
f2e811928b Rework slider hackery to not overwrite Samples 2021-04-09 15:28:08 +09:00
smoogipoo
8efa381d3a Actually use whistle sample for sliderwhistle 2021-04-08 23:13:16 +09:00
smoogipoo
7713c8a45f Add support for sliderwhistle 2021-04-08 20:20:09 +09:00
Amber
5ac36a2462 Switch AlwaysPlaySample to SamplePlaysOnlyOnHit in DrawableSliderTail for conformity 2021-04-02 03:56:23 -05:00
Amber
5063cd957f Force hit sample to play when Classic mod is enabled 2021-04-02 02:54:35 -05:00
smoogipoo
5d1d6ec1cb Fix inverted calculation 2021-02-10 22:09:24 +09:00
smoogipoo
bd2486e5a0 Fix grammatical error in comment 2021-02-10 21:27:12 +09:00
smoogipoo
1d425b8322 Simplify case 2021-02-10 21:25:31 +09:00
smoogipoo
4a391ce03d Fix div-by-0 when 0 ticks are hit 2021-02-10 21:24:41 +09:00
smoogipoo
a16f4cee3a Adjust DrawableSlider comment 2021-02-10 18:52:39 +09:00
smoogipoo
2fcc4213e1 Rename IgnoreJudgement -> OnlyJudgeNestedObjects 2021-02-10 18:46:26 +09:00
smoogipoo
2f22dbe06b Make sliders display judgements when not ignored 2021-02-03 22:42:50 +09:00
smoogipoo
03b7817887 Add flags to return to classic slider scoring 2021-02-03 22:12:20 +09:00
ekrctb
245be2c5ed Adjust namespace 2020-12-04 20:21:53 +09:00
smoogipoo
e831c797f3 Merge branch 'master' into hit-sample-pooling 2020-12-02 14:45:24 +09:00
Dean Herbert
71a121389b
Merge pull request #11033 from smoogipoo/immutable-hit-samples
Make HitSampleInfo immutable
2020-12-02 14:44:26 +09:00
Dan Balasescu
46a57921e2
Merge branch 'master' into osu-fade-slider-body-on-hit 2020-12-02 11:03:04 +09:00
smoogipoo
2bb7484608 Merge branch 'immutable-hit-samples' into hit-sample-pooling 2020-12-01 16:05:28 +09:00
smoogipoo
5760e1c1fc Make HitSampleInfo immutable 2020-12-01 15:37:51 +09:00
Dean Herbert
dd05c56a08 Fix sliders playing hit animations when completely missed 2020-12-01 15:34:29 +09:00
Dean Herbert
f8ef822e73 Add short fade to better hide transition on default skin 2020-12-01 15:21:32 +09:00
Dean Herbert
d0852d7f4a Hide slider body immediately on successful hit when snaking is enabled 2020-12-01 14:56:41 +09:00
Dean Herbert
8d101efb24 Remove unused proxy layer 2020-12-01 14:56:14 +09:00
smoogipoo
4bbeb9ebd4 Merge branch 'master' into hit-sample-pooling 2020-11-30 18:31:58 +09:00
ekrctb
57454bbb1c Remove hitObject argument from OnApply and OnFree 2020-11-27 10:13:05 +09:00
ekrctb
c506b438bf Remove more code and make some methods private 2020-11-22 18:51:16 +09:00
smoogipoo
688a04c2ff Make slider/spinner use pooled samples 2020-11-19 20:40:30 +09:00
smoogipoo
04805b78c3 Tighten osu! ruleset lifetime expiry for past hitobjects 2020-11-17 23:20:19 +09:00
smoogipoo
4cf6aca873 Fix slider ball tint not working 2020-11-16 22:40:25 +09:00
smoogipoo
3f0a127196 Fix slider/spinner samples not being disposed 2020-11-12 18:51:58 +09:00
smoogipoo
3f78d81386 Add nested osu! hitobject pooling 2020-11-12 15:59:48 +09:00