1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 01:27:29 +08:00
Commit Graph

1289 Commits

Author SHA1 Message Date
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
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
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
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
a6fab28461
Merge branch 'master' into no-legacy-difficulty-control-point 2023-09-15 11:14:28 +02: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
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
dcbdc114ce Remove precision limitations of SliderVelocity 2023-09-07 17:41:58 +09: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
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
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
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
Dean Herbert
289e6ad977 Fix follow point animations in legacy skins not always starting at correct point in time 2022-09-16 15:12:05 +09:00
Dean Herbert
6a35b233e5 Merge branch 'master' into remove-dispose-updates 2022-09-01 23:03:19 +09:00
Dean Herbert
105aa01e7d Update usages of RemoveInternal 2022-08-29 15:57:40 +09:00
Dean Herbert
a215d009fe Update Remove/RemoveRange/RemoveAll calls in line with framework changes 2022-08-29 15:57:40 +09:00
Khang
9c6968e96d Remove unused import in Slider 2022-08-24 02:54:40 -04:00
Khang
ec9daec93b Remove unnecessary workaround 2022-08-23 14:18:40 -04:00
Khang
c1ced85b5e Move GenerateTicks to LegacyDifficultyControlPoint and remove support for NaN slider velocity support for other rulesets (at least for now) 2022-08-23 14:07:18 -04:00
Khang
a81672f3dc Use an infinite tick distance instead of directly disabling tick generation for SliderEventGenerator 2022-08-22 23:31:24 -04:00
Khang
9f08c474ca Treat NaN slider velocity timing points as 1.0x but without slider ticks 2022-08-22 21:58:38 -04:00
Dean Herbert
9a4d0494de Adjust various pooling defaults to better handle more intense beatmaps 2022-08-05 18:09:07 +09:00
Salman Ahmed
d8cce5fe36 Fix OsuHitObject not using property wrapper properly 2022-07-19 07:52:12 +03:00
Salman Ahmed
8f80a22ef9 Fix osu! and catch hitobjects no longer scaled to 1 by default 2022-07-19 07:00:13 +03:00
Salman Ahmed
1051009827 Change bindable properties in all HitObjects to be lazily initialised 2022-07-19 05:39:10 +03: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
Dean Herbert
31a447fda0 Update parameter discards 2022-06-24 21:26:19 +09:00
Dan Balasescu
f8830c6850 Automated #nullable processing 2022-06-17 16:37:17 +09:00
Salman Ahmed
b6e97e699a Remove unnecessary position specification 2022-06-07 00:34:18 +03:00
Salman Ahmed
4158146c71 Fix spinenr tick samples not positioned at centre
Causing samples to be played at left ear rather than centre.
2022-06-07 00:30:11 +03:00
Salman Ahmed
0eaf420fa1 Specify full size for spinner ticks container 2022-06-07 00:29:14 +03:00
Salman Ahmed
3a00931e38 Update slider sliding samples balance calculation to use screen-space as well 2022-04-18 09:18:56 +03:00
Salman Ahmed
fcb48c69cf Calculate sample playback position using screen-space drawable rectangles 2022-04-18 07:57:31 +03:00
Dean Herbert
879267862c Fix typo in DrawableOsuHitObject 2022-04-08 15:20:22 +09:00
Dan Balasescu
36772ec652
Merge pull request #17356 from apollo-dw/strict-tracking
Implement "Strict Tracking" mod in osu!
2022-03-22 07:32:36 +09:00
apollo-dw
35e2e6a4e7 Remove slider tick judgement flag 2022-03-20 15:41:46 +00:00
apollo-dw
149cfd338d Use new mod-related object types for Strict Tracking 2022-03-19 18:29:44 +00:00
Dean Herbert
1b8c632b87 Add TailSamples to auxiliary samples list 2022-03-14 17:19:48 +09:00
Dean Herbert
6d6f73e016 Add overrides in DrawableSliderTail to explain/warn that this class never plays its own samples 2022-03-14 17:19:48 +09:00
Dean Herbert
be99202188 Move spinner spin samples to auxiliary specification 2022-03-14 17:19:48 +09:00
Dean Herbert
90e34d7686 Move slider slide samples to auxiliary specification 2022-03-14 17:19:48 +09:00
apollo-dw
e2001148d5 Implement strict tracking mod 2022-03-08 21:47:54 +00:00
Salman Ahmed
3ab13dd78c Assign position to spinner ticks for correct positional playback 2022-01-15 14:24:52 +03:00
Susko3
19467e58c1 Remove unused params from BDL methods 2022-01-15 01:06:39 +01:00
smoogipoo
c3a31a019b Merge branch 'master' into aim-refactor-base 2021-11-03 00:32:51 +09:00
Dean Herbert
e0cdcdd7a4 Merge branch 'master' into spinner-judgement-fix 2021-10-29 12:13:42 +09:00
Xexxar
9f5a7526ed merge in ppy/master 2021-10-28 14:47:28 +00:00
Dean Herbert
5c7623e68e
Merge pull request #15255 from goodtrailer/node-samples-ilist
Change IHasRepeats.NodeSamples to IList from List
2021-10-28 14:24:26 +09:00
Dean Herbert
6944151486 Apply batch fixing of built-in types using var 2021-10-27 13:04:41 +09:00
Roxie Wattz
cf7fbf4b63 updated bdach's suggestion 2021-10-25 17:15:43 -07:00
Roxie is Flux3on
0c57453f4d Reverted special case code changes
As requested by @frenzibyte
2021-10-24 18:16:14 -07:00
Roxie is Flux3on
a8e3d0bacc Added an override for StackedEndPosition
This ensures the spinner's hit judgement will always be centre instead of in the top left corner.
2021-10-24 18:15:40 -07:00
Roxie is Flux3on
861cd4852a Made StackedEndPosition virtual
Done to allow overriding in the other object classes.
2021-10-24 18:14:37 -07:00
Roxie is Flux3on
386910ca2e Cut amount of code down for the spinner judgement fix 2021-10-24 15:29:47 -07:00
Roxie is Flux3on
b8308b9715 Corrected spinner judgement positions.
For some reason, spinner judgements would stack from the top left in an awkward fashion. This patch ensures that the judgement location will always be in the centre of the screen.
2021-10-24 15:28:38 -07:00
Dean Herbert
99d01f2162 Fix a couple of new layout inspections introduces in Rider 2021.3 EAP5 2021-10-24 23:51:49 +09:00
goodtrailer
4440b9ca11 Change IHasRepeats.NodeSamples to IList from List 2021-10-23 01:59:07 -07:00
smoogipoo
30eb08d394 Merge branch 'master' into aim-refactor-base 2021-10-17 12:00:39 +09:00
Xexxar
200149c9d7 updated to newly refactored aim 2021-10-13 15:41:24 +00:00
smoogipoo
bc37cb6f43 Merge branch 'master' into no-more-difficulty-control-points-info 2021-10-08 18:41:17 +09:00
Dean Herbert
a92d499d7a Convert usages of BeatmapDifficulty to IBeatmapDifficultyInfo 2021-10-01 16:55:50 +09:00
Dean Herbert
46bafb6252 Merge branch 'master' into no-more-difficulty-control-points-info 2021-09-28 13:53:56 +09:00
Bartłomiej Dach
c911332540
Merge branch 'master' into correct-reverse-arrow-depth 2021-09-20 22:32:28 +02:00
Bartłomiej Dach
79438c19a4
Fix slider parts not reproxying after first hitobject freed 2021-09-18 16:27:30 +02:00
Dean Herbert
fde7c88999
Merge branch 'master' into update-framework 2021-09-16 22:49:02 +09:00
smoogipoo
d8f27633a4 Fix legacy approach circles accepting alpha 2021-09-16 19:35:15 +09:00
smoogipoo
f9d5abff8a Update with keybinding changes 2021-09-16 18:26:12 +09:00
Dean Herbert
714f55b6bc Clone control points when copying to HitObjects 2021-09-10 14:36:39 +09:00
Dean Herbert
a3d9ab1e2e Move approach rate to EffectControlPoint 2021-09-03 16:58:16 +09:00
Dean Herbert
071c56e90b Update usages of DifficultyPointAt 2021-09-03 16:58:16 +09:00
Dean Herbert
b907c2f4f6 Fix osu! judgements getting scaled twice over different durations 2021-09-02 16:31:43 +09: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
Dan Balasescu
f0296e5d12
Merge branch 'master' into avoid-default-skin-judgement-transform-overhead 2021-08-27 10:02:40 +09:00
Dan Balasescu
a28bc9f6b2
Merge branch 'master' into path-control-point-bindable-removal 2021-08-27 09:37:37 +09:00
Salman Ahmed
b9ea984c36 Remove redundant default value 2021-08-26 08:18:58 +03:00