Releases: ppy/osu
2023.1130.0
Code Quality
- Add test coverage of accessing skin layout after importing customised default skins (#25468 by @peppy)
- Change
ResourceStore
provided toSkin
to be a fallback, not replacement (#25481 by @peppy) - Update localisation analyser (#25491 by @peppy)
- Refactor
OsuAutoGenerator
to allow custom SPM specifications (#25490 by @peppy) - Fix implicitly used method being named incorrectly (#25521 by @Syriiin)
- Fix android compile failures due to invalid java version (#25533 by @bdach)
- Improve commenting around
IHasCombo
interfaces (#25536 by @peppy) - Attempt to fix intermittent failures on new tests (#25540 by @peppy)
- Remove manual changes to Xcode versions in CI (#25544 by @Frederisk)
- Fix a couple of new r# inspections (#25552 by @peppy)
- Replace all hexacon lookups with strongly typed properties (#25560 by @peppy)
Editor
Allow opening editor timestamp URLs from modding discussions in browser (#25371 by @RatinFX)
Add free-hand drawing of sliders to the editor (#25409 by @Tom94)
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.
Smaller changes
- Fix slider length not updating when adding new anchor via ctrl-click (#25549 by @bdach)
- Fix freehand-drawn sliders with distance snap (#25539 by @default0)
Framework
- PathApproximator: no BSpline degree <1 and better special case handling (ppy/osu-framework#6045 by @Tom94)
- Fix audio tests not checking for unobserved exceptions and not disposing on the audio thread (ppy/osu-framework#5946 by @Susko3)
- Allow enabling computed mipmaps in
LargeTextureStore
(ppy/osu-framework#6048 by @EVAST9919) - Update some inspections to (mostly) satisfy latest rider EAP (ppy/osu-framework#6050 by @peppy)
- IncrementalBSplineBuilder: rewrite algorithm with many improvements (ppy/osu-framework#6047 by @Tom94)
- Use better
RunOnAudioThread()
logic in audio tests (ppy/osu-framework#6049 by @Susko3) - Add support for
Vector3
interpolation (ppy/osu-framework#6051 by @EVAST9919) - Fix android pack action failing due to missing OpenJDK (ppy/osu-framework#6054 by @peppy)
- Expose B-spline to Bezier conversion method (ppy/osu-framework#6053 by @bdach)
- Improve incremental b-spline builder (ppy/osu-framework#6055 by @Tom94)
- Attempt to fix android compile failures due to invalid java version again (ppy/osu-framework#6057 by @bdach)
- Allow using custom
ITexturedGlyphLookupStore
s as texture sources (ppy/osu-framework#6059 by @peppy)
Gameplay
Change unstable rate calculation to account for rate-change mods (#25415 by @Poyo-SSB)
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.
Fix handling of combo and combo colours around spinners (#25551 by @smoogipoo)
Smaller changes
- Fix classic scoring overflowing in osu! ruleset due to integer multiplication overflow (#25546 by @bdach)
- Fix break time simulation in HP calculation not matching osu!stable (#25420 by @smoogipoo)
Gameplay (osu!)
Adjust slider follow circle animation to not abruptly scale on early ticks (#25493 by @peppy)
Reimplement HP drain to match osu!stable (#25418 by @smoogipoo)
Gameplay (osu!catch)
Reimplement HP drain to match osu!stable (#25563 by @smoogipoo)
Main Menu
Add second level menu for editors (#25561 by @peppy)
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.
Performance
Unload beatmap storyboards when not in main menu screen (#25400 by @frenzibyte)
This frees up resources that would otherwise be held ransom until returning to the menu.
Don't draw the game when the window is minimised (ppy/osu-framework#6052 by @Susko3)
This change reduces the CPU and GPU usage when the window is minimised.
Skinning
Fix default argon health bar width being zero (#25466 by @bdach)
Will fix:
- appearance of the health bar in toolbox
- size of the health bar when added from toolbox
- skins which had the default value of the width setting set
Fix argon health bar folding in on itself when too narrow (#25472 by @bdach)
Add ability to toggle labels on argon counter components (#25469 by @Joehuu)
Save any unsaved changes in the skin editor when game changes screens (#25523 by @peppy)
Allow use of skin username/flag/avatar components outside of gameplay (#25553 by @peppy)
Load gameplay immediately on entering the skin editor while at the main menu (#25568 by @peppy)
Smaller changes
- Fix skin editor crashing when pasting with nothing in clipboard (#25547 by @bdach)
- Fix skin element "PlayerFlag" responding to clicks/hovers (#25530 by @yesseruser)
Spectator
Fix spectator mode not showing when a spectated user quits correctly (#25565 by @peppy)
Fix spectator not immediately showing when a spectated user fails (#25566 by @peppy)
UI
Show full user cards when hovering avatars everywhere in the game (#25339 by @joshika39)
Allow context menus to have visible spacers (#25520 by @peppy)
More correctly handle login flow when user profile overlay is visible (#25510 by @Stedoss)
Before | After |
---|---|
osu._VW2mjYjK2F.mp4 |
osu._IDEdvKFjxL.mp4 |
Add drag bar on chat overlay to better signal resize-ability (#25567 by @peppy)
Smaller changes
- Use existing localisation for corner radius in
BoxElement
(#25458 by @Joehuu) - Fix links in comments not showing with correct styling (#25478 by @Joehuu)
- Update translations (ppy/osu-resources#297 by @peppy)
New Contributors
- @joshika39 made their first contribution in #25339
- @RatinFX made their first contribution in #25371
- @yesseruser made their first contribution in #25530
Full Changelog: 2023.1114.1...2023.1130.0
2023.1114.1
2023.1114.0
Code Quality
- Update country code names to match database (#25217 by @peppy)
- Fix some new nullable inspections (#25301 by @peppy)
- Improve log output surrounding score submission (#25300 by @peppy)
- Clean up mod usability flags (#25328 by @bdach)
- Rename and invert flags for slider classic behaviours (#25341 by @peppy)
- Refactor
KeyCounterDisplay
to use autosize (#25411 by @peppy)
Editor
Fix editor not prompting before saving beatmap for export (#25223 by @peppy)
Fix various osu!catch distance snap grid breakage (#25240 by @bdach)
Fix slider velocity changes not being undone correctly (#25307 by @bdach)
Decouple metronome tick playback from pendulum movement (#25316 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.
Smaller changes
- Fix right clicks on timeline potentially not working as expected (#25304 by @peppy)
- Select text in beat divisor popover automatically (#23823 by @peppy)
- Automatically refresh the verify screen's issue list on re-entering it (#25376 by @peppy)
- Fix editor crash when creating a new difficulty in a non-existent beatmap (#25380 by @frenzibyte)
Framework
Fix releasing mouse buttons outside of window not working in relative mode (ppy/osu-framework#6036 by @Susko3)
Fix mouse not working as expected on iOS (ppy/osu-framework#6041 by @Susko3)
Smaller changes
- Disable retrieval of SDL display modes on non-desktop platforms (ppy/osu-framework#6032 by @frenzibyte)
- Correctly handle tablets which report mutliple pieces of information per report (ppy/osu-framework#6035 by @Susko3)
- Allow selecting all text in a textbox programatically (ppy/osu-framework#5823 by @peppy)
- Fix wrong bytes per sample in TrackBass (ppy/osu-framework#6039 by @hwsmm)
- Fix
FrameStatisticsViaTouch
to work as described in the wiki (ppy/osu-framework#6040 by @Susko3) - Update framework (#25407 by @peppy)
- Add class for efficiently building B-Splines (ppy/osu-framework#6044 by @default0)
Gameplay
Enforce minimum gameplay sample volume of 5% (#25185 by @bdach)
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.
Add ability to quick retry using Ctrl-R (#25235 by @peppy)
Fix quick retry immediately after completion marking score as failed (#25264 by @bdach)
Allow argon's key counter display to be rotated while keeping text upright (#25349 by @Joehuu)
Smaller changes
- Exclude video events from being accounted for when calculating storyboard time bounds (#25269 by @bdach)
- Add "Argon" score digit textures (ppy/osu-resources#292 by @frenzibyte)
- Fix resume cursor changing clickable radius depending on cursor size setting (#25364 by @frenzibyte)
- Add more "Argon" counter symbols (ppy/osu-resources#295 by @frenzibyte)
Gameplay (osu!)
Fix repeat circles on sliders not correctly getting dimmed (#25221 by @peppy)
Before:
After:
Fix all spinner ticks being alive and causing performance degradation (#25333 by @peppy)
Continue to play spinner bonus sounds when MAX display occurs (#25343 by @peppy)
Fix osu! (slider) combo not matching expectations when classic mod is disabled (#25342 by @peppy)
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.
Implement basic touchscreen detection (#25348 by @bdach)
The "touch device" mod will now be shown when using touch input, both at song select and during gameplay.
Smaller changes
- Fix out-of-order judgements when missing a slider head (#25218 by @peppy)
- Would sometimes lead to unstable total score calculations.
Gameplay (osu!mania)
Add support for "argon" default skin to expand columns when on mobile devices (#25336 by @peppy)
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 | ![]() |
Gameplay (osu!taiko)
Apply same changes to "argon" osu!taiko barline design that were applies to osu!mania (#25222 by @peppy)
Before | After |
---|---|
![]() |
![]() |
Import
Update the last played date of a beatmap when importing a replay by the local user (#25303 by @peppy)
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.
Main Menu
SFX improvements for ButtonSystem
/MainMenu
(#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.
Smaller changes
- Update samples for
ButtonSystem
/MainMenu
(ppy/osu-resources#290 by @nekodex)
Mods
- Make FreezeFrame and Transform Incompatible (#25233 by @Termincc)
- Fix
StopUsingBeatmapClock()
applying adjustments to track it was supposed to stop using (#25253 by @bdach) - Fix another potential crash in bubbles mod (#25334 by @peppy)
Online
- Fix replay upload flow not encoding player username (ppy/osu-server-spectator#194 by @bdach)
- Correctly handle multiple online score ID types (#24794 by @bdach)
- Update game packages (ppy/osu-server-spectator#195 by @bdach)
Overlays
Update user profile overlay to show more than one tournament banner (#25287 by @frenzibyte)
Add ability to view kudosu rankings (#25388 by @Joehuu)
Reliability
- Fix iOS AOT compilation failure due to SharpCompress library upgrade (#25236 by @peppy)
- Do not revert to default value when double-clicking disabled slider (#25230 by @bdach)
- Fix skin editor freezing game if opened during active gameplay (#25265 by @bdach)
- Update installer to latest release (#25385 by @peppy)
Settings
Automatically select existing search text when opening settings (#25286 by @frenzibyte)
Allows for a better search experience, as a user usually wants to find a new setting each time they come to the settings screen.
Add "disable taps during gameplay" to touch input settings and related UI (#25366 by @Susko3)
This fixes the previous "disable clicks" toggle from also affecting touch input.
Smaller changes
Skin Editor
Add skin editor context menu items to reset rotation and scale (#25375 by @peppy)
Fix skin editor not clearing undo history on skin change (#25406 by @bdach)
Add "export" item to skin editor menu (#25408 by @peppy)
Add support for adjusting size of skin elements (#25402 by @peppy)
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 |
---|---|
![]() |
![]() |
2023.1026.0
Audio
Add new generic-error
sample (ppy/osu-resources#288 by @nekodex)
SFX tweaks (#25178 by @nekodex)
A bunch of little fixes grouped together:
- Fixes toolbar ruleset buttons not having hover sounds
- Replaces
NowPlayingOverlay
pop-in/pop-out sounds with newer generic overlay pop-in/pop-out ones - Changes
NewsCard
select samples fromDefault
sample set toButton
- Reduces
LoginOverlay
sample panning to matchNowPlayingOverlay
- Changes back button sample set (in
KeyBindingPanel
) fromButtonSidebar
toDefault
- Adds keypress feedback/sound when binding keys (in
KeyBindingPanel
) - Changes
RevertToDefaultButton
fromButton
sample set toDefault
Smaller changes
- Use new
generic-error
sample in appropriate places (#25113 by @nekodex)- Used by the duplicate keybinding popup and also replaces
password-fail
(incorrect room password popup)
- Used by the duplicate keybinding popup and also replaces
Code Quality
Remove reference to multiplayer_scores
table (ppy/osu-server-spectator#192 by @bdach)
Smaller changes
- Clean up
KeyBindingRow
and related classes (#25092 by @bdach) - Remove remaining usages of
LargeTick{Hit,Miss}
in mania (#25100 by @bdach) - Refactor key binding panel for easier usage (#25104 by @bdach)
- Remove no longer used scoring difficulty attributes (#25142 by @bdach)
- Apply various fixes and cleanup to spinner logic (#25143 by @peppy)
- Fix various new rider EAP inspections (#25155 by @peppy)
- Replace
DistancedHitObjectComposer
with composition-based approach (#25171 by @bdach) - Isolate diffcalc workflow runs (#25176 by @smoogipoo)
Editor
Fix osu!mania beat snap grid sometimes not displaying correctly (#25073 by @peppy)
Persist the state of "show speed changes" between editor sessions (#25153 by @peppy)
Add beat snap grid to osu!taiko editor (#25154 by @peppy)
Framework
Add button to randomise test scene background colour (ppy/osu-framework#6022 by @peppy)
osu.Framework.Tests.2023-10-10.at.09.52.03.mp4
Fix some beatmap videos no longer rendering (ppy/osu-framework#6024 by @FreezyLemon)
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.
Smaller changes
- Add notes regarding using inline delegates with
Scheduler.AddOnce
(ppy/osu-framework#6023 by @peppy) - Update FFmpeg binaries (ppy/osu-framework#6026 by @github-actions[bot])
- Update native libs (ppy/osu-framework#6027 by @peppy)
- Bring back shader workaround to fix blur on iOS (ppy/osu-framework#6031 by @frenzibyte)
- Throw exception when pushing a screen at OnExiting without blocking (ppy/osu-framework#6033 by @hwabis)
Gameplay
Fix argon health bar not completing flash animation correctly (#25074 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.
Show results immediately if user hits "back" key after finishing gameplay (#25097 by @peppy)
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.
Smaller changes
- Fix legacy score calculators using incorrect mod multipliers (#24988 by @smoogipoo)
- Fix multiplayer not correctly pausing the track on initialisation (#25079 by @peppy)
- This resolves crashes experience in the last release (before the hotfix).
- Fix default preview point being incorrect on old beatmaps (#25083 by @peppy)
- Fix health bar animating startup sequence when it shouldn't be (#25136 by @peppy)
- Fix incorrect volume on some beatmaps (#25179 by @bdach)
Gameplay (osu!)
Adjust slider repeat animation on legacy skins to closer match stable (#25160 by @bdach)
Add an "Adjust pitch" switch to DT/HT (#24640 by @Givikap120)
Adjust slider ends to be more lenient during very fast sliders (#24966 by @peppy)
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
Fix circle scale not matching stable due to missing multiplier (#25167 by @peppy)
This fixes some replays incorrectly having misses due to a floating-point scale mismatch.
Change spinner score display to show when reaching max bonus score (#25177 by @peppy)
Fix spinner cheese by accounting for spin directionality (#25157 by @peppy)
You now need to spin in one direction for a full spin in order to increment the total spin count.
Smaller changes
- Adjust approach circle maximum size limits for backwards compatibility (#25067 by @bdach)
- Apply a few more object sizing limits (#25110 by @peppy)
- Fix spinner ticks not playing samples correctly sometimes (#25216 by @bdach)
- This was probably revealed by the lowering of the spinner cap, which made the ticks more spread out and made this issue more likely to occur.
Gameplay (osu!catch)
Adjust legacy skin catcher sizing to match 1:1 with osu!(stable) (#25070 by @frenzibyte)
Overall, here are visual cross-comparisons of the catcher's display between lazer and stable:
master | this PR |
---|---|
![]() |
![]() |
Fix "Floating Fruits" mod not flipping playfield properly (#25173 by @bdach)
Gameplay (osu!mania)
Remove osu!mania hold note "ticks" (#25062 by @smoogipoo)
Change osu!mania "perfect" judgements to only award bonus score (#25111 by @peppy)
Online
Add ability to invite players to multiplayer rooms (#25005 by @minetoblend)
Adds invites for multiplayer matches. Players can be invited by right clicking their profile in the user list (F9 menu).
2023-10-03.21-41-17.mp4
We will add more places to trigger the invite from in the future!
Smaller changes
- Fix score importer looking up guest user by username online (#25077 by @bdach)
- Add ability to invite players to multiplayer rooms (ppy/osu-server-spectator#188 by @minetoblend)
- Server-side changes.
- Don't upload replays for failed scores (ppy/osu-server-spectator#190 by @smoogipoo)
Performance
Ensure health displays don't pile up transforms when off-screen (#25076 by @peppy)
Results
Show maximum bonus statistics on results screen (#25096 by @peppy)
Settings
Disallow binding multiple bindings in a single section to one key (#25105 by @bdach)
Add ability to revert slider settings to default when double-clicking nub (#25163 by @Joehuu)
Smaller changes
Song Select
Improve mouse interactions at song select (#25182 by @peppy)
Add ability to search for difficulty names using square brackets (#24921 by @Pasi4K5)
Smaller changes
- Fix "Hard Rock" mod affecting CS/AR in osu!mania and osu!taiko (#25101 by @peppy)
- Not sure if there are other exceptions we should account for here. This is mostly fixing this for visual purposes. We'd probably want to hide these stats in the mod select screen at some point if they are not relevant to a ruleset.
- Remove drag handles from manage collections dialog for now (#25140 by @peppy)
- The realm implementation doesn't support this. May come back at a future date, but this matches stable so it's not a huge deal.
- Fix collections not being sorted alphabetically in context menus (#25139 by @peppy)
- As mentioned in #21602 (comment).
Testing
- Remove test scene background stack and use ...
2023.1008.1
Hotfix for mjultiplayer crahes
2023.1008.0
Behavioural
- Add
color
search keyword forcolour
settings (#24948 by @NiceAesth) - Don't show replay import "missing beatmap" notifications during stable import (#24943 by @peppy)
- Fix legacy beatmap importer not always handling nested paths correctly (#24998 by @peppy)
Code Quality
- Tidy up
LegacyLastTickOffset
usages and stop passing everywhere (#24965 by @peppy) - Adjust clock usage in line with framework changes (#24885 by @peppy)
- This removes four workarounds/hacks. Wow.
- Fix some incorrect bindable-related code (#25028 by @peppy)
- Came across these while doing a find-in-files for
SettingSource
usage, and WTFing at publicly settable bindables in most cases.
- Came across these while doing a find-in-files for
Also a few other inconsistencies, touched on in each commit message.
Editor
Flash dialog popup when attempting to exit editor while exit is being blocked (#24953 by @peppy)
Minor QoL, as i keep wondering for a split second why my cmd-w isn't closing the editor.
Framework
- Stop logging non-error output from OpenTabletDriver (ppy/osu-framework#6006 by @peppy)
- Add new
DecouplingClock
and obsoleteDecoupleableInterpolatingFramedClock
(ppy/osu-framework#6001 by @peppy) - Fix flaky editor beatmap creation test (#24935 by @bdach)
- Fix keyboard handler getting disabled on window creation failure (ppy/osu-framework#6005 by @peppy)
- Fix
WaveformGraph
overhead whenDrawPosition
is changed (ppy/osu-framework#6009 by @peppy) - Increase tolerance in decoupling framed clock tests (ppy/osu-framework#6011 by @bdach)
- Reduce FFmpeg binary size (ppy/osu-framework#5981 by @FreezyLemon)
- Disable linux video hardware acceleration for now (ppy/osu-framework#6015 by @peppy)
- Fix race condition in ThreadedTaskScheduler when adding tasks (ppy/osu-framework#6014 by @smoogipoo)
- Update nativelibs to latest version (ppy/osu-framework#6013 by @peppy)
- Fix source clock not correctly getting started after a decoupled transition (ppy/osu-framework#6017 by @peppy)
- Simplify
SaturationValueSelector
(ppy/osu-framework#6018 by @EVAST9919) - Fix
TestReplayExport
intermittent failure (#25015 by @peppy) - Fix incorrect implementation of
TrackVirtual
(ppy/osu-framework#6019 by @peppy) - Add new GitHub Actions diffcalc spreadsheet generator workflow (#25013 by @smoogipoo)
- Fix
InterpolatingFramedClock
not correctly handling seeks when source clock is stopped (ppy/osu-framework#6020 by @peppy)
Gameplay
Add maximum dimensions limit to skinnable gameplay elements (#24706 by @frenzibyte)
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).
Update classic scoring formula to closer match stable score V1 (#24924 by @bdach)
Lots of complex match, now classic scoring matches better than ever.
Implement redesigned health bar display for "Argon" skin (#24980 by @frenzibyte)
Smaller changes
- Split legacy scoring attributes into their own table (#24779 by @smoogipoo)
- Fix skin version being incorrectly set to
1.0
when skin is missingskin.ini
(#24942 by @peppy) - Add
GetDisplayScore()
extension forSoloScoreInfo
(#24957 by @bdach) - Adjust gameplay element maximum size limits for backwards compatibility (#25023 by @bdach)
- Adjust argon health bar to fit with existing layout (#25030 by @peppy)
- Add initial animation for health bars (#24986 by @peppy)
- Pretty jank and I'm not sure how to make better, or how to get it matching stable. Probably need to make a subcomponent which is operating in game time to track the interpolation correctly. Main goal was to breathe some life back into things, so maybe this is fine as a first step.
Gameplay (osu!)
Cap maximum spinner RPM based on OD (#24932 by @smoogipoo)
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:
- Watching players I could find on YouTube, trying to take a healthy mix of all skill levels.
- My personal experience as what I would consider an "advanced" player but someone that has never cared about getting full score on spinners.
- Spinning through a remote desktop connection + mouse. This artifically lowers my skill.
My (rough, biased, not rooted in absolute fact) observations from this are:
- New players tend to range around 200-280 RPM.
- Intermediate players tend to range around 250-320 RPM.
- Advanced players tend to range around 320-380 RPM.
- Expert players tend to sit comfortably around 450 RPM.
- Even top players - those that are considered good at the game, tend to sit in the 300-400 RPM range
Keep in mind, however, that:
- OD is skewed upwards such that it is more typical for even new players to see ODs >= 4. Those at the advanced level, for example, are usually going to see at least OD >= 7 (~405 RPM) which should still give them a bit of a challenge (at least they'll need to try).
- Once you reach 6*, which is not considered hard these days, it's rare to see OD < 8.
- RPM isn't consistent - there's ramp-up time whether caused by acceleration (stable) or by the player realising they need to start spinning.
Reduce approach circle's final opacity to match stable (#24964 by @peppy)
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 |
---|---|
![]() |
![]() |
Fix object dim being applied to approach circles (#24968 by @peppy)
Before | After |
---|---|
![]() |
![]() |
Add edge highlight to "argon" slider repeat arrow (and improve all skins' reverse arrow animations) (#24990 by @peppy)
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.
Smaller changes
- Fix game crash when using "Bubbles" mod on a beatmap with no hit circles (#24889 by @Fabiano1337)
- Add
repeat-edge-piece
texture for argon sliders (ppy/osu-resources#287 by @peppy) - Fix spinner requirements being susceptible to FP precision (#25006 by @smoogipoo)
Gameplay (osu!mania)
Adjust osu!mania "major" barlines to be less visually distracting (#24930 by @peppy)
Applies to both "triangles" and "argon" skins.
Before | After |
---|---|
![]() |
![]() |
Gameplay (osu!taiko)
Allow judging at most one swell tick per frame (#25010 by @bdach)
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.
Performance
- Improve
TriangleBorder
shader (ppy/osu-resources#286 by @EVAST9919)
Reliability
- Fix
WaveformComparisonDisplay
potentially crashing on invalid track length (#25016 by @peppy)- As seen at https://github.com/ppy/osu/runs/17415814918#r0s2.
- Fix OAuth refresh attempt when no network available causing full logout (part 2) (#25029 by @peppy)
Skinning
- Crop oversized gameplay textures instead of downscaling them (#24975 by @frenzibyte)
-
- Resolves mainly the "incorrect glyph rendering" part of #24973
-
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 spec...
2023.924.1
Framework
- Bump SPIRV with
plist
versioning fix (ppy/osu-framework#6004 by @peppy) - Add missing locales mapping in
crowdin.yml
(ppy/osu-resources#282 by @agatemosu)
Online
Fix some users getting incorrectly logged out when network connection becomes unavailable (#24897 by @peppy)
Testing
Full Changelog: 2023.924.0...2023.924.1
2023.924.0
Code Quality
- Rename
SliderVelocity
toSliderVelocityMultiplier
to distinguish fromVelocity
(#24728 by @peppy) - Add debug output for skin configuration lookups (#24726 by @peppy)
- We've struggled with debugging these over the years so I think this was worth a couple of hours of work.
- Clean up
ImportTask
/ArchiveReader
implementations (#24807 by @peppy) - Remove
LegacyDifficultyControlPoint
/LegacyBpmMultiplier
(#24738 by @peppy) - Parse only supported schemes as URIs (#24814 by @LukynkaCZE)
- Refactor storyboard resource lookup to be more streamlined (#24809 by @peppy)
- Fix issues after storyboard resource lookup refactor (#24863 by @bdach)
- General improvements to README (#24875 by @peppy)
Editor
Add ability to toggle velocity change visualisation in osu!taiko and osu!mania editors (#24550 by @smoogipoo)
Stable never had this, and it's more natural to edit in linear speed.
Framework
Bump OpenTabletDriver to 0.6.3.0 (ppy/osu-framework#5999 by @X9VoiD)
Added support for over 30 new tablets. Improved support for many already supported ones. Fixed some bugs.
Smaller changes
- Fix masking broken with TexturedVertex3D (ppy/osu-framework#5987 by @smoogipoo)
- Revert masking SSBO changes (ppy/osu-resources#279 by @smoogipoo)
- Tidy up
InterpolatingFramedClock
(ppy/osu-framework#5992 by @peppy) - Fix opening links potentially causing crashes due to system misconfigurations (and log errors instead) (ppy/osu-framework#5989 by @yesseruser)
- Remove local veldrid-spirv iOS native libraries (ppy/osu-framework#5995 by @frenzibyte)
- Update all dependencies (except for Moq) (#24831 by @peppy)
- Avoid throwing exception when attempting to access
WebRequest
response in fail path (ppy/osu-framework#5998 by @peppy) - Don't block cut/copy platform actions on empty textbox selection (ppy/osu-framework#5997 by @peppy)
- Update clocks in line with framework changes (#24870 by @peppy)
- Fix crash when clicking update notification on iOS (ppy/osu-framework#5991 by @peppy)
Gameplay
- Default to normal bank if invalid sample bank is specified (#24800 by @sw1tchbl4d3r)
- Some existing beatmaps specify an invalid sample bank in the
.osu
file. While stable would fallback to the normal sample bank, lazer would - until now - just refuse to play the sample. This change replicates the behaviour of stable.
- Some existing beatmaps specify an invalid sample bank in the
Gameplay (osu!)
Allow "Difficulty Adjust" mod's extended AR selection to go below zero (#24736 by @isakvik)
Adds the ability to set negative ARs down to -10 to the difficulty adjust mod for osu!standard (for the extended range), and adds millisecond value information to the selection slider when the extended limits are active to explain what "negative AR" even is.
Remove slider head circle movement (and remove setting from "classic" mod) (#24810 by @peppy)
I've gone with the most simple approach animation wise, which feels quite good to me: the snaking path will only begin snaking after the head circle is hit. I can see that others came to roughly the same consensus in the original discussion, so I don't think there will be too much contention over this change.
Things to note:
- I considered having the slider ball not appear until the head is hit, but I don't think a change like this would sit well as it would potentially reduce readability
- I intentionally made the snaking only happen on a successful hit. So if you miss the slider head completely, the outwards snaking will never complete. This could be a good visual cue.
- The original plan I had animation wise was to have the portion of path before the slider ball's current position fade out on slider head hit, but this would mean duplicating the slider path. And I don't think this is a good idea from a performance perspective for such an edge case.
Here's how it looks in slow motion:
It's important to note that in the majority of cases, these kinds of sliders are so fast you can't even catch this visually. It's usually hidden under the head / tail. Even when it's not, it's hard to catch:
Finally, here's what missing a slider head completely looks like:
(basically, as if snaking was not enabled)
Smaller changes
- Apply further fixes to note lock when classic mod is enabled (#24720 by @bdach)
- Apply further fixes to note lock when classic mod is enabled (#24762 by @bdach)
- This change in particular moves across an edge case from stable wherein slider heads will always block input from reaching objects underneath them, until the slider is fully completed.
- Update osu! spinner ticks calculation method to better match osu!(stable) (#24661 by @frenzibyte)
- osu!(stable) calculates the spins requirement for completion in "half spins", meanwhile lazer tried to do roughly the same but applied a slightly overestimated 0.6x factor to "convert" into full spins. This PR updates the number of spins required to be closer to expectations.
- Add two spins gap before awarding bonus score on osu! spinners (#24662 by @frenzibyte)
- As it turns out, in previous lazer versions a player could gain two extra bonus spins on any spinner in any map compared to stable. For the sake of balancing, this PR mimics stable behaviour and adds a gap of two spins which need to be performed after required spins in order to receive bonus score.
- Fix sliders not always being the correct length on some beatmaps (#24739 by @peppy)
- Intentionally reintroduces some floating-point imprecisions from stable to fix a rare case wherein a particular beatmap was missing a slider tick.
- Fix sliders not always being the correct length on some more beatmaps (#24848 by @Magnus-Cosmos)
- Fixes another edge case beatmap wherein some sliders were too short.
- Fix game crash when using "Bubbles" mod on a beatmap with no hit circles (#24889 by @Fabiano1337)
- Fixes bubbles mod crashing when no HitCircle is placed in a map like in Issue #24444
First PR tell me if you want me to change anything
Gameplay (osu!mania)
- Fix osu!mania legacy skin configurations not working when notes are not skinned (#24727 by @peppy)
- Originally disabled a while back, but as far as I can tell this does not look required anymore (we have much better classic fallback support these days).
Platform
Reliability
- Fix
MemoryStreamArchiveReader.GetStream()
failing in some cases (#24846 by @bdach) - Fix broken automatic beatmap download setting migration (#24866 by @bdach)
Song Select
Add star rating / BPM / difficulty display while mod select is open (#24705 by @Givikap120)
Collapse mod presets column slightly when not in use (#24796 by @peppy)
Frees up a bit of space.
Move mod overlay difficulty multiplier display to bottom of screen (#24799 by @peppy)
In order to aid the user in knowing how their mod customisation is affecting the score multiplier, this needs to be displayed at the bottom of the screen.
Simplify multiplier display implementation (#24801 by @peppy)
Rename "difficulty multiplier" to "score multiplier" and add more animation hinting (#24802 by @peppy)
Slight vertical bump indicating direction of change of multiplier, and rename to make the actual text make sense. It's not a difficulty multiplier, it's a score multiplier.
Smaller changes
- Fix rate adjust mods not showing "x...
2023.914.0
The final hotfix for this release, rolls back all new optimisations as they weren't playing well for some. Sorry about the delay in getting things back on track!
Full Changelog: 2023.913.0...2023.914.0
2023.913.0
Another hotfix to fix sliders and things disappearing.
Full Changelog: 2023.908.2...2023.913.0