rhythm is just a *click* away!
Following discussions on discord, this seems like the most agreed upon value. Increasing this is important so that imported legacy scores don't lose too much value.
A significant portion of players that play primarily using relax mod have asked for the ability to compile relax with other mods, such as "perfect". This wasn't possible until now as relax blocked failing.
This change allows both "relax" and "autopilot" mods to fail, and as a result allows combining "no fail", "perfect" and "sudden death" with them.
If you're a relax player and want to keep the mod as relaxing as you remember it to, you can make a mod preset with RX+NF!
Users reported that some stable scores would convert to large negative total scores in lazer after the introduction of combo exponent. Those large negative total scores were actually mangled NaNs.
(This fix was in yesterday's release)
I mentioned adding this multiple times this week, so here it is. Design is placeholder in all cases.
The general gist of it is that, right now DT and NC are seen more as a personal preference than mods that have any significant impact to scores. The 1M score cap is seen as "sacred" to the degree that these mods, whether the reader agrees with the idea that these are personal preference or not, are not significant enough to justify breaking the score cap.
I believe we've reached the amicable conclusion that we are not adverse to experimenting with mods and their effects, multipliers, and other ways to display scores for showcasing purposes.
One such idea proposed, is to see whether a DT/NC mod with fixed hitwindows becomes more worthy of having a mod multiplier, combined with a separate mod for the current hitwindow-affecting rate adjustment
But, that is for future work. For the time being, I'm satisfied with the conclusion and bringing things to a common ground that everyone can agree with is an objective point of reference.
"Good"s are now worth 150 instead of 100, bringing things in line with osu!(stable) and TnT.
OnlineMetadataClient.UserStates
(ppy/osu#25931 by @peppy)We have a larger redesign planned, but let's just get this in so people can easily see both leaderboards and beatmap stats.
This also sets the default display mode to local leaderboard, instead of details, as it's a better look.
Was a bit confusing until now. Even I hit this at least once.
This is the reason some sound effects for selecting beatmaps were playing during gameplay.
This fixes the carousel making one unnecessary selection every time the current selection is updated. Basically, on returning from gameplay this will cause the selection sound to no longer (incorrectly) play, but also likely improves smoothness as it's not randomly selecting a beatmap somewhere in the carousel before correcting back to the retained selection.
Full Changelog: https://github.com/ppy/osu/compare/2023.1220.0...2023.1221.0
This is quite an unfortunate one, but I can't see a good way of fixing beyond undoing most of the performance gains from the last major release when certain sort modes (like difficulty sort) are used.
If you have a large library and want best search performance, use a simple sort mode for now (ie. artist or title). We'll iterate on this once things calm down.
Full Changelog: https://github.com/ppy/osu/compare/2023.1218.1...2023.1220.0
Also contains unmerged hotfixes:
Full Changelog: https://github.com/ppy/osu/compare/2023.1218.0...2023.1218.1
CircularProgressDrawNode
and its properties protected (ppy/osu-framework#6060 by @EVAST9919)DrawNode
drawing methods (ppy/osu-framework#6073 by @smoogipoo)BeatmapListingOverlay
(ppy/osu#25671 by @Susko3)IsLegacyScore
to SoloScoreInfo
(ppy/osu#25746 by @smoogipoo)GetRateAdjustedDisplayDifficulty()
(partially incorrectly) locally reimplementing difficulty range calculations (ppy/osu#25762 by @bdach)1.4x
is the default in osu!stable (ie. on creating a new beatmap in the editor) and plays better than 1.0x
, so let's match that on lazer.
.osu
file on export (ppy/osu#25689 by @peppy)Put simply, curves match your user input 100% better, and create smoother corners. Free-hand slider drawing has basically gone from "oh that's cool but i can make better because i am pro mapper" to "why would you ever not use this?"
READ_EXTERNAL_STORAGE
on older android versions (ppy/osu#25636 by @Susko3)IParseable.Parse()
(ppy/osu-framework#6065 by @Neuheit)BindableList
collection changes in dropdown (ppy/osu-framework#6061 by @frenzibyte)Mod | Old | New |
---|---|---|
Half Time | 0.7x | 0.3x |
Classic | 1x | 0.5x |
Synesthesia | 1x | 0.8x |
There may be others we want to adjust. Note that these are basically placeholder safe values (lower is better) so we can allow these scores on the leaderboard without people complaining about unfairness... unless they are complaining the multiplier is too low (which is fine for now).
Avoids getting stuck at some screens. It's a bit ugly having the back button visible like this, but is the best approach we have for now.
ArgonHealthDisplay
sometimes behaving weirdly on miss judgements (ppy/osu#25672 by @frenzibyte)ArgonHealthDisplay
not displaying miss correctly during initial transition (ppy/osu#25673 by @frenzibyte)In osu! with ScoreV1 and ScoreV2, the cost of a miss was growing fast (quadratically) with the surrounding combos. This implied that a single miss could completely ruin the score of a play and cost up to 350k in ScoreV2.
To reduce this effect, a combo exponent of 0.5 was introduced. This effectively reduces the miss-penalty at high combos while keeping it high at low combos, in a similar spirit as how combo is capped in taiko or catch but without any hard-cap.
This combo exponent change is introduced together with a complete re-balance of the Combo/Accuracy split based on user feedback. Note that the new formula will imply higher scores overall and might require a bit of time getting used to. A table showing the effects of the new formula is available at here
Most of my issues appear at higher HP drain rates, but with HR even on old maps the minimum is usually HP 8.4, which falls into the problematic region. I believe the difference is mostly where the judgements are placed - in osu!stable sliders have a big judgement at the end (300 + tick), whereas in lazer they have a medium-high judgement at the start (300) and a small judgement at the end (tick). The raw HP drain rate seems to be quite similar, and if anything osu!stable should be harsher on the cases I've found.
I've also attempted to make lazer stable better, but I haven't been able to get it "just right".
There are others that have wanted the old algorithm back, which pretty much echo what I've said above: https://github.com/ppy/osu/discussions/25631
So... This PR moves the osu!stable algorithm to the classic mod.
Here's a replay demonstrating this: https://drive.google.com/file/d/1-AEIhaVF2YfXVR9GYc8UFAnV7zfFFHvA/view?usp=sharing Note that osu!stable will play with V1 mechanics, but V1 and V2 feel about the same (just accuracy is slightly worse on V2).
For those wishing to delve deeper into this change, please check the technical descriptions (and videos) in the pull request
https://github.com/ppy/osu/assets/191335/f4cfe558-cb05-45ed-8401-0f4ecd4c9670
This is how things look across all modes:
grade | osu! / osu!taiko | osu!catch | osu!mania |
---|---|---|---|
SS | 100% | 100% | 100% |
S | ≥95%FC | ≥98% | ≥95% |
A | ≥90% | ≥94% | ≥90% |
B | ≥80% | ≥90% | ≥80% |
C | ≥70% | ≥85% | ≥70% |
This was originally intended to fix hyperdash generation around "pixeljumps", however it turned into much more general fixing of beatmap conversion because I couldn't provide beatmap conversion comparisons without fixing other issues.
The mobile stretching mode now applies to all skins, and adjusts to your device's aspect ratio. Note that this changes the width of special columns slightly – we'll be watching feedback as to whether this is throwing people off.
The host can now click a handy abort button to end a match at any point!
This avoids any shenanigans from multiple connections.
This will allow finally displaying lazer usage on the changelog page!
This brings us a step closer to sanity with slider end misses. Now you can at least see when you missed a slider end, as it will reduce the "slider ticks" count.
Intended for use in conjunction with https://github.com/ppy/osu-framework/pull/6063. Now that there are many log files, let's compress them on behalf of the user to make reporting bugs easier.
This allows:
Songs
or Skins
folder directly (will automatically use the parent for imports)osu!
folder without it containing a osu!.*.cfg
file (which is the case for some users that have only backed up their Songs
or Skins
folders)Reduces time taken to search beatmaps at song select by 88%.
It was hard to know that you had to click directly on mods previously to use this.
https://drive.google.com/file/d/1bDb6ICbhaAimkQRDHhrQhOhW9QgsyAdu/view?usp=sharing
Note that this currently doesn't update with mod selection.
This feels like a better default for most users. Now, the serach box is focused by default so that you can type immediately after the overlay pops in. But it is also toggleable so that users who are accustomed to hotkeys can continue using hotkeys. As such the "classic" default for the setting is to not focus the search box.
For existing lazer users that want to use classic hotkeys, please adjust the new setting Automatically focus search text box in mod select
.
CollectionDropdown
(ppy/osu#25575 by @frenzibyte)AdjustedAttributesTooltip
being broken by design (ppy/osu#25760 by @bdach)params
and TestCase
attribute (ppy/osu-framework#6069 by @Susko3)SoloScoreInfo
serialisation result does not contain interface members (ppy/osu#25703 by @bdach)This idea came from this comment, which remembered me that indeed it's always assumed it's a single ban, even tho (even in OWC) having 2 bans per team further in the bracket is the norm. This change allows setting the ban count between 0 and 5, and also standardises the rotation order to what is used in most osu! tournaments.
You can finally search for skins by name (and anything else in a dropdown)!
Full Changelog: https://github.com/ppy/osu/compare/2023.1213.0...2023.1218.0
ResourceStore
provided to Skin
to be a fallback, not replacement (ppy/osu#25481 by @peppy)OsuAutoGenerator
to allow custom SPM specifications (ppy/osu#25490 by @peppy)IHasCombo
interfaces (ppy/osu#25536 by @peppy)Collab with @default0.
This allows free-hand drawing of a slider by clicking and dragging in the osu! editor. As a dependent addition, "B-Splines" curve support has been added as a new slider type that generalize Bezier curves. The new B-Spline slider type is used to represent / approximate the hand-drawn slider and exposes a couple of settings for manual control over how the curve is fit.
LargeTextureStore
(ppy/osu-framework#6048 by @EVAST9919)RunOnAudioThread()
logic in audio tests (ppy/osu-framework#6049 by @Susko3)Vector3
interpolation (ppy/osu-framework#6051 by @EVAST9919)ITexturedGlyphLookupStore
s as texture sources (ppy/osu-framework#6059 by @peppy)This makes UR comparable across rate adjust mods, including static (e.g. Double Time), linear (e.g. Wind Up), and dynamic (e.g. Adaptive Speed) mod types.
As mentioned in discussion, while the skin editor has evolved to be really powerful, it's quite hidden from the user. To solve this, I've added a second level menu under the "Edit" button to house both editors.
This frees up resources that would otherwise be held ransom until returning to the menu.
This change reduces the CPU and GPU usage when the window is minimised.
Will fix:
Before | After |
---|---|
BoxElement
(ppy/osu#25458 by @Joehuu)Full Changelog: https://github.com/ppy/osu/compare/2023.1114.1...2023.1130.0
Full Changelog: https://github.com/ppy/osu/compare/2023.1114.0...2023.1114.1
KeyCounterDisplay
to use autosize (ppy/osu#25411 by @peppy)I originally wanted the sounds to match the visuals, but it turns out that mappers want the sound to play immediately. So now it will always play, regardless of whether the pendulum passes the centre point or not.
FrameStatisticsViaTouch
to work as described in the wiki (ppy/osu-framework#6040 by @Susko3)osu!stable's sample volume floor is actually 8%, but it is enforced in what seem to be completely stupid ways (in the UI it's 5%, but actual playback takes place at minimum 8%). Since that seems weird and bad, and basically nobody seems to know about it (source: a brief discussion I had with the NAT today), and it seems there should be no harm in actually having the cap be 5% without weird gymnastics or lying to the users, that's what I ended up doing.
Before:
After:
Until now, the max combo of sliders has been lower than expected due to the tail not giving a combo. This has been fixed, so now max combo will match classic mod (and stable). This will make cross-comparisons much saner.
The "touch device" mod will now be shown when using touch input, both at song select and during gameplay.
Should ease those looking to play the game on mobile until we (potentially) have a better solution in the future.
If this works out well, we can consider rolling it out to other skins.
Keys | |
---|---|
4 | |
5 | |
7 | |
20 |
Before | After |
---|---|
With this change, importing beatmaps scores from stable will now choose a more correct "Last Played" date for beatmaps based on the most recent score imported. This also applies when importing one of your own scores at any point.
ButtonSystem
/MainMenu
(ppy/osu#25395 by @nekodex)Makes the main menu feel a bit more polished IMO while also reducing the ability to spike playback volume by spamming stuff.
ButtonSystem
/MainMenu
(ppy/osu-resources#290 by @nekodex)StopUsingBeatmapClock()
applying adjustments to track it was supposed to stop using (ppy/osu#25253 by @bdach)Allows for a better search experience, as a user usually wants to find a new setting each time they come to the settings screen.
This fixes the previous "disable clicks" toggle from also affecting touch input.
Dragging a skin elements from an edge will now adjust size, not scale. This allows resizing elements which support it without stretching them (which looked really bad).
Support is limited for now, but we can easily roll this out to more components in the future.
Before | After |
---|---|
TestScenePlayerMaxDimensions
texture loading process bottlenecking CI (ppy/osu#25272 by @frenzibyte)Requested by OWC team.
Before | After |
---|---|
Full Changelog: https://github.com/ppy/osu/compare/2023.1013.0...2023.1114.0
generic-error
sample (ppy/osu-resources#288 by @nekodex)A bunch of little fixes grouped together:
NowPlayingOverlay
pop-in/pop-out sounds with newer generic overlay pop-in/pop-out onesNewsCard
select samples from Default
sample set to Button
LoginOverlay
sample panning to match NowPlayingOverlay
KeyBindingPanel
) from ButtonSidebar
to Default
KeyBindingPanel
)RevertToDefaultButton
from Button
sample set to Default
generic-error
sample in appropriate places (ppy/osu#25113 by @nekodex)
password-fail
(incorrect room password popup)multiplayer_scores
table (ppy/osu-server-spectator#192 by @bdach)KeyBindingRow
and related classes (ppy/osu#25092 by @bdach)LargeTick{Hit,Miss}
in mania (ppy/osu#25100 by @bdach)DistancedHitObjectComposer
with composition-based approach (ppy/osu#25171 by @bdach)https://github.com/ppy/osu-framework/assets/191335/560b8924-f5d5-4cc9-b3f1-1bc5e8dbb7b0
MPEG-4 Part 2 is a video coding standard that sits "between" H.262 and H.264. Xvid, DivX and some less known formats implement it.
Scheduler.AddOnce
(ppy/osu-framework#6023 by @peppy)Noticed this while doing some work around the health bar. The flash just wasn't playing due to an oversight in the miss-finish-animation logic. I've also adjusted the flash a bit.
I've gone ahead and matched the osu!stable behaviour for this, as it seems like it's what people are used to and they will settle for no less.
On very fast sliders, you now only need to be tracking somewhere in the last 36ms, rather than precisely at the (hidden) position of the last tick.
######### Miss
######### Valid hits
This fixes some replays incorrectly having misses due to a floating-point scale mismatch.
You now need to spin in one direction for a full spin in order to increment the total spin count.
Overall, here are visual cross-comparisons of the catcher's display between lazer and stable:
master | this PR |
---|---|
Adds invites for multiplayer matches. Players can be invited by right clicking their profile in the user list (F9 menu).
https://github.com/ppy/osu-server-spectator/assets/8039761/d945cf2d-d1ef-4d2b-8faf-2691bd59731a
We will add more places to trigger the invite from in the future!
ChangeBackgroundColour
(ppy/osu#25082 by @peppy)actions-cool/check-user-permission
to check permissions. My intention is for only those with write permissions to this repo to be able to run the action via commenting !diffcalc
.The text at the top of the workflow details how to use this.
A second, somewhat important change is to run the timeout job on the self-hosted runner, since it has different usage limits to the GH runners. This was missed in my initial implementation, but the limits are appropriate for self-hosted runners.
Documentation: https://docs.github.com/en/rest/overview/issue-event-types?apiVersion=2022-11-28#properties-for-commented (grep)
Felt really anti-user when you go to click the results button and the downloads button pops into its place.
Before:
After:
B
to match Ctrl
-B
shortcut (ppy/osu#25180 by @Susko3)
B
is also better than D
because the button says browse
. This matches P
for play
and E
for edit
.Full Changelog: https://github.com/ppy/osu/compare/2023.1013.0...2023.1026.0
Hotfix for mjultiplayer crahes
color
search keyword for colour
settings (ppy/osu#24948 by @NiceAesth)LegacyLastTickOffset
usages and stop passing everywhere (ppy/osu#24965 by @peppy)SettingSource
usage, and WTFing at publicly settable bindables in most cases.Also a few other inconsistencies, touched on in each commit message.
Minor QoL, as i keep wondering for a split second why my cmd-w isn't closing the editor.
DecouplingClock
and obsolete DecoupleableInterpolatingFramedClock
(ppy/osu-framework#6001 by @peppy)WaveformGraph
overhead when DrawPosition
is changed (ppy/osu-framework#6009 by @peppy)SaturationValueSelector
(ppy/osu-framework#6018 by @EVAST9919)TestReplayExport
intermittent failure (ppy/osu#25015 by @peppy)TrackVirtual
(ppy/osu-framework#6019 by @peppy)InterpolatingFramedClock
not correctly handling seeks when source clock is stopped (ppy/osu-framework#6020 by @peppy)This applies to osu! hit circles, taiko hits (drum rolls are already limited), and catch hit objects (fruits, bananas, and droplets). Mania is not included as I'm not even sure how to go about it (if I should).
Lots of complex match, now classic scoring matches better than ever.
1.0
when skin is missing skin.ini
(ppy/osu#24942 by @peppy)GetDisplayScore()
extension for SoloScoreInfo
(ppy/osu#24957 by @bdach)The RPM required to clear spinners (i.e. minimum RPM) is unchanged from stable and the previous implementation:
OD | RPM |
---|---|
0 | 90 |
5 | 150 |
10 | 225 |
With this PR, the RPM required to complete spinners becomes:
OD | RPM |
---|---|
0 | 250 |
5 | 380 |
10 | 430 |
To come to these values, I've taken a mix of:
My (rough, biased, not rooted in absolute fact) observations from this are:
Keep in mind, however, that:
Turns out that approach circles were more visible on lazer until now. So let's bring them back in line with stable expectations.
Before | After |
---|---|
Before | After |
---|---|
This addresses concerns about visibility of repeat arrows on short sliders by adding a border element which animated outwards.
I've also fixed multiple inconsistencies when compared to stable, including disabling beat sync and having the animation start as soon as the hit object appears. This helps massively with visibility, as otherwise the animation may not start until much later. It also looks better as every slider is not longer synchronised to the same animation cycle.
repeat-edge-piece
texture for argon sliders (ppy/osu-resources#287 by @peppy)Applies to both "triangles" and "argon" skins.
Before | After |
---|---|
This changes swell input handling such that only one swell tick can be judged in a given update frame. This is supposed to curtail cases wherein a user binds (either in-game, or via external tools) all four taiko actions to one key, to knock out four hits at a time with one key.
TriangleBorder
shader (ppy/osu-resources#286 by @EVAST9919)WaveformComparisonDisplay
potentially crashing on invalid track length (ppy/osu#25016 by @peppy)
This is a better approach to handle skins that have certain elements with extra empty space on all sides. Take this skin for example, observe the size of the hitcircle number elements:
The size is already larger than the specified maximum size for hit circles (128x128, which affects the glyph sprites). Cropping the texture from the centre fixes the issue. I've also refactored the max dimensions test scene to output upscaled textures all the way from the TextureLoaderStore
for the visual test to be accurate.
This was originally set high because of performance concerns. We have since improved things quite drastically. Even with a very low debounce my song select is amazingly smooth.
UseSkinSprites
being implemented incorrectly (ppy/osu#24861 by @peppy)
Before | After |
---|---|
A remaining usability concern was players adjusting the rate of DT/HT, but this information being hidden when perusing leaderboards. We've changed how mod icons look to allow exposing this information when required.
crowdin.yml
(ppy/osu-resources#282 by @agatemosu)Full Changelog: https://github.com/ppy/osu/compare/2023.1004.0...2023.1008.0