Releases: ppy/osu
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
2023.908.2
Hotfix release number 2 for performance regressions (SSBO optimisations are disabled).
Full Changelog: 2023.908.1...2023.908.2
2023.908.1
Hotfix release for notelock breakage with classic mod.
Full Changelog: 2023.908.0...2023.908.1
2023.908.0
Hello fellow lazer enjoyers!
We're switching up focus a bit for the rest of the year. As a result, you may see less forward-facing changes, but don't worry β we're still working hard behind the scenes. Watch the latest release video for the full details!
Audio
Update overlay pop-in/pop-out sample usage (#24576 by @nekodex)
An update to the pop-in/pop-out samples for various overlays. Also adds them to some overlays/popups that were previously missing them.
Updated/added samples for overlays:
ManageCollectionsDialog
,ChatOverlay
,FileChooserPopover
: new sharedoverlay-big-x
NotificationOverlay
,OsuPopover
and children (report, mod presets, etc): updated sharedoverlay-x
SettingsPanel
: updatedsettings-pop-in
BeatmapOptionsOverlay
(aware there is a new design for this incoming, but I had created the samples prior to finding out, so PR'ing for use in the meantime anyway)WaveOverlayContainer.cs
: updatedwave-pop-in
sample
Adds left/right panning to the pop-in/pop-out of:
LoginOverlay
NotificationOverlay
SettingsPanel
Also tweaked on-click sample playback behaviour of some components that didn't work well with the overlay pop-in samples.
Smaller changes
- New overlay pop-in/pop-out samples (ppy/osu-resources#276 by @nekodex)
Behavioural
Fix "date added" not being set correctly when importing stable beatmaps (#24574 by @LiquidPL)
Flash taskbar when receiving notifications while the game is not focused (#24588 by @ItsShamed)
Smaller changes
- Allow slider bars to update their underlying value immediately (#24431 by @bdach)
- Always show supporter-only playlist durations in dropdown (#24366 by @Joehuu)
- This allows better discoverability of durations which were previously hidden to non-supporters. I'd still like to improve this in the future but it's better than what we had.
Code Quality
- Remove slider velocity from
DrumRoll
(#24537 by @OliBomby) - Add various testing improvements to various tournament components (#24564 by @peppy)
- Apply NRT to
osu.Game.Beatmaps.Formats
namespace (#24568 by @peppy) - Fix
SliderPath.GetSegmentEnds
(#24581 by @OliBomby) - Remove global action container input queue workaround (#24610 by @bdach)
- Enable sentry "global mode" as per recommendation (#24634 by @peppy)
- Disable redundant verbatim string prefix inspections (#24668 by @bdach)
Cosmetic
- Fix star fountain directions not matching stable (#24604 by @peppy)
- Use existing localisations for some missed strings (#24707 by @Magnus-Cosmos)
Editor
Add precise rotation control to osu! editor (#24567 by @bdach)
One of the most requested features to return from stable's editor.
Fix sliders being reversed incorrectly in the editor (#24527 by @Pasi4K5)
Smaller changes
- Fix occasional crash when opening the editor (#24562 by @peppy)
- Fix tracking on empty control point groups (#24577 by @OliBomby)
- Fix last slider control point type being included in legacy export (#24570 by @OliBomby)
- Fix hit animation not synchronizing when editing hit objects (#24508 by @OliBomby)
- Fix slider velocity popover crashing when opened during slider placement on empty beatmap (#24711 by @honguyenminh)
Framework
Add support for shader storage buffer objects (SSBOs) (ppy/osu-framework#5950 by @smoogipoo)
SSBOs are a way to submit large amounts of data to GPUs. We now use this when possible as an optimisation everywhere in the game.
Use SSBOs for bindless masking (ppy/osu-framework#5952 by @smoogipoo)
A huge forward step in general framework performance. Now we don't need to split draw calls when masking is toggled (generally a saving of 10-30% draw calls). This will lead to larger gains in the near future when we make texture atlases as large as they should be, pending some further work.
Use floating point rectangles for masking operations (ppy/osu-framework#5960 by @smoogipoo)
Fixes (at least some) 1px masking errors:
before | after |
---|---|
![]() |
![]() |
Smaller changes
- Implement popover positional hinting (ppy/osu-framework#5967 by @bdach)
- Make
KeyBindingContainer.Prioritised
work for positional input too (ppy/osu-framework#5966 by @bdach) - Allow gravity in RigidBodySimulation to be adjustable (ppy/osu-framework#5972 by @hwabis)
- Implement taskbar flashing support (ppy/osu-framework#5970 by @ItsShamed)
- Bump Android target SDK version to 33 (ppy/osu-framework#5973 by @bdach)
- Fix
KeyBindingContainer
propagating release events to removed drawables (ppy/osu-framework#5975 by @bdach) - Adjust shader to support masking SSBO (ppy/osu-resources#277 by @smoogipoo)
- Update framework and apply changes to support masking SSBO (#24613 by @smoogipoo)
- Add D3D11VA video acceleration support (ppy/osu-framework#5976 by @FreezyLemon)
- The newer APIs should generally be used if possible, so D3D11VA > DXVA2 (which uses DX9). But vendor-specific implementations should still be preferred.
- Add test coverage for all video codecs (ppy/osu-framework#5977 by @FreezyLemon)
- Add a cache busting mechanism to the shader compilation cache (ppy/osu-framework#5978 by @smoogipoo)
- Remove now unnecessary blur shader workaround (ppy/osu-framework#5979 by @smoogipoo)
- Free AVIOContext and IO buffer (ppy/osu-framework#5982 by @FreezyLemon)
- Remove libavfilter where possible (ppy/osu-framework#5980 by @FreezyLemon)
- Reduces game filesize by 10-20mb depending on patform.
- Change behaviour of
Storage.Move
to overwrite existing by default (ppy/osu-framework#5984 by @peppy) - Fix crash on minimising from non-native fullscreen resolutions (ppy/osu-framework#5983 by @smoogipoo)
- Update README.md to include VS Code plugin prerequisites (#24645 by @Dreamurrrr)
- Update localisations (ppy/osu-resources#278 by @peppy)
- Update native libraries (ppy/osu-framework#5985 by @peppy)
- Update framework (#24717 by @peppy)
Gameplay
Add ability to toggle gameplay leaderboards with Tab
key (#24402 by @QuantumSno)
There's now a new key binding, defaulting to the classic Tab
key.
Currently this just toggles the setting Gameplay > Hud > Always show gameplay leaderboard
Smaller changes
- Mark "Score V2" mod as not user-playable (#24675 by @bdach)
- The mod generally will only be present on scores imported from stable. As such, it's probably ok to mark it as such.
Gameplay (osu!)
Fix hit circles fading out too fast when hit with classic mod active (#24686 by @frenzibyte)
The animation adjustment applied in classic mod should be specific to when a player misses the hit circle, but it was applied regardless of the circle's state.
Correctly implement osu!stable "note-lock" in Classic mod (#24280 by @tybug)
As far as I can tell, osu!stable note-lock was never implemented correctly in lazer. This implements osu!stable note-lock 1:1.
There are two obvious behavioral changes in this diff, though there may be more that are obscured by the details.
- Previously, clicks on stacked hitobjects which are note-locked cause shakes, while on osu!stable they don't (yes, despite the note being note-locked. stacks are special-cased on osu!stable.)
- osu!stable has a weird extra 3 ms of leniency before hitobjects can be note-locked. Not sure why β the "unsnapped objects" comment doesn't make much sense to me β but it's back now.
Apply flashlight slider dim immediately to match osu!(stable) (#24701 by @frenzibyte)
This removes the slight fade when playing sliders with flashlight enabled, as it didn't match expectations.
Gameplay (osu!mania)
Disable hold end conversion for mania "Hold Off" mod (#24552 by @smoogipoo)
Fix osu!mania hit windows changing with rate adjust mods (#24636 by @smoogipoo)
Brings back the osu!stable behaviour where hit windows would adjust with speed adjustment mods so they don't become tighter/looser.
Smaller changes
Multiplayer
Fix multiplayer spectator potentially taking too long to start (#24451 by @peppy)
When watching from the middle of gameplay, due to a series of failures, SpectatorClock
would not get seeked to the current time, causing all clients to look like they were out of sync.
This is a hotfix for the issue. A better fix will require framework changes or considerable restructuring.
Add score difference display to multiplayer spectator (#24566 by @peppy)
This was recently added for the t...
2023.815.0
Code Quality
- Temporarily allow new difficulty attributes to not exist (#24538 by @smoogipoo)
- Update crowdin.yml to support multiple namespace levels (ppy/osu-resources#273 by @ItsShamed)
- Update localisations (ppy/osu-resources#275 by @peppy)
- Fix incorrect truncation to int (#24541 by @smoogipoo)
- Update framework (#24546 by @peppy)
- Remove
DepthWrappingVertex<T>
(ppy/osu-framework#5943 by @smoogipoo)
Cosmetic
Don't completely fade FPS counter out when running at full FPS (#24540 by @peppy)
I've heard multiple times from uses that this is distracting or confusing. It now fades, but doesn't fully disappear.
Gameplay
Fix kiai stars flickering on and off during gameplay (#24547 by @bdach)
Performance
Add pooling for mania barlines (#24544 by @smoogipoo)
At COE, it was brought up to me that this map wasn't loading. Turns out that it is loading, just very slowly.
Reliability
Fix occasional crash when transitioning to results screen due to unsafe data access (#24548 by @peppy)
Skinning
Fix playfield skinnable layer bounds being incorrectly calculated with multiple stages (#24528 by @bdach)
Song Select
Fix multiple audio tracks playing at once for some users (ppy/osu-framework#5965 by @bdach)
Full Changelog: 2023.814.0...2023.815.0
2023.812.0
Editor
Fix legacy beatmap exports not working correctly for osu!catch banana showers (#24511 by @bdach)
Reliability
- Fix crash on tablet stylus touch when stylus is over inactive area and mouse confine is off (ppy/osu-framework#5964 by @bdach)
Full Changelog: 2023.811.0...2023.812.0
2023.811.0
Code Quality
- Fix nullability inspection in
NowPlayingOverlay
(#24421 by @bdach) - Remove #nullable disable in tournament (#24409 by @cdwcgt)
Cosmetic
Add kiai fountains to main menu (#24208 by @peppy)
osu.2023-07-13.at.11.30.12.mp4
Fix now playing overlay occasionally showing incorrect background (#24418 by @peppy)
Smaller changes
- Fix accuracy break info decimal separator being incorrect in certain languages (#24406 by @Joehuu)
- Fix "new update" notification using upload icon instead of download (#24256 by @tybug)
- Add star fountain sprite (ppy/osu-resources#270 by @peppy)
- Reduce spacing in settings items (#24314 by @peppy)
- Update translations from crowdin (ppy/osu-resources#272 by @peppy)
- Fix osu! logo suddenly disappearing during rapid exit (#24424 by @bdach)
- Add support for changelog entries with url attached (#24461 by @Joehuu)
Editor
Change beatmap editor to always select the closest object in time via clicking (#24289 by @peppy)
Matches osu!stable.
osu.Game.Tests.2023-07-19.at.07.58.34.mp4
Add support for cyclic selection in beatmap editor (#24291 by @peppy)
Update various editor design language (and centre playfield / timeline) (#24220 by @peppy)
Brings us closer to the latest designs. Also centres the playfield and timeline centre as proposed in #24207.
Before | After |
---|---|
![]() |
![]() |
Fix "key count" setting showing as "circle size" in osu!mania editor (#24317 by @peppy)
Add ability to export beatmaps from editor in a stable-compatible format (#24186 by @OliBomby)
This adds a menu button that lets you explicitly export a beatmap set for compatibility with osu!stable. With this feature it becomes a lot more feasible to create beatmaps in Lazer using the full range of features available in Lazer.
The default 'For editing' option now creates the file extension '.olz' (osu! lazer zip) which is accepted by osu! lazer but not by osu! stable, while 'For compatibility' creates a '.osz' file which obviously is accepted by both osu! stable and lazer. This makes it less likely to confuse the two formats.
Note that the 'For compatibility' option is not lossless, and as such shouldn't be used for cases where you want to make further adjustments to the beatmap.
Improve visuals of editor spacers (#24333 by @peppy)
Before | After |
---|---|
![]() |
![]() |
Fix editor blueprints being selectable for too long when hit markers are enabled (#24288 by @peppy)
Smaller changes
- Add checks for breaks obtained via external edits (#24259 by @NiceAesth)
- Fix osu!taiko editor playfield getting cut off incorrectly (#24374 by @peppy)
- Disallow interacting with the global track state in
Player
andEditor
(#24361 by @peppy) - Refactor rotation handling in editor to facilitate reuse (#24341 by @bdach)
- A starting point required to implement more advanced manipulation controls, like the rotation dialog everyone's waiting for.
- Block beatmap editor from testing/exiting/exporting when saving fails (#24467 by @Joehuu)
Framework
- Fix potential user-facing error when same shader is compiled in parallel (ppy/osu-framework#5961 by @peppy)
- Change source generators to only run for release builds (ppy/osu-framework#5938 by @peppy)
- Fix building iOS projects in AOT mode via command line not working (ppy/osu-framework#5940 by @frenzibyte)
- Fix CI test results not working (ppy/osu-framework#5947 by @Susko3)
- Fix integer vertex atributes being cast to floats (ppy/osu-framework#5944 by @smoogipoo)
- Prevent re-entrancy into
VertexBatch.Draw()
(ppy/osu-framework#5948 by @smoogipoo) - Refactor global UBO binding (ppy/osu-framework#5949 by @smoogipoo)
- Update framework (#24430 by @peppy)
- Include type name in long-running exception output (ppy/osu-framework#5957 by @peppy)
- Update workarounds file to fix iOS AOT build issues via command line (ppy/osu-framework#5962 by @frenzibyte)
Gameplay
Change offset calibration control to adjust for all difficulties of the current beatmap set (#24290 by @peppy)
Generally all difficulties in a beatmap set share the same timing information, so it only makes sense to apply a user offset everywhere.
Fix storyboard being see-through in some contexts (#24443 by @peppy)
Before | After |
---|---|
![]() |
![]() |
Gameplay (osu!)
Change spinner rotation animation to match input 1:1 (#24360 by @peppy)
Originally this was halved to make the newer designs look "better" (subjectively) but in testing I think it's fine to apply this across the board. It definitely feels better as a user to have non-slipping control over spinners.
Gameplay (osu!taiko)
Fix not always being able to hit objects when "hidden" mod is applied (#24305 by @chayleaf)
Integration
Fix discord not displaying status after being closed while osu! is running (#24189 by @peppy)
Originally disabled due to performance concerns. Performance issues have now been fixed.
Multiplayer
Add ability to toggle all free mods quickly at multiplayer song select (#24294 by @peppy)
Until now, one would have to open up free mod select and click select all to enable all free mods. Given how common enabling free mods is, the button now allows direct toggling and saves a few clicks.
osu.2023-07-19.at.10.09.35.mp4
General visual improvements to mutliplayer spectatator screen (#24415 by @peppy)
This is an initial pass before I try some more experimental changes.
- Individual screens now have rounded corners and shadows
- The zoom-to-focus now doesn't completely hide other screens, and should feel better in general
- The game toolbar is hidden when entering multiplayer spectator
2023-07-30.02.42.00.mp4
Fix multiplayer spectator not correctly proceeding to the next beatmap in all cases (#24438 by @peppy)
Improve choice of where to start playback of multiplayer spectator (#24448 by @peppy)
This was originally intended to try and fix the startup delay, but the majority of the delay comes from elsewhere.
Regardless, this algorithm should be much better than what we had (and avoid situations where one client being super far behind delays start of the session by forcing you to watch them catch up).
Smaller changes
- Fix deadlock when logging out while at the create match screen (#24295 by @peppy)
- Fix multiplayer screen transitions not always working as expected (#24422 by @bdach)
- Fix centred player not animating correctly (#24440 by @peppy)
Performance
Improve vertex upload performance significantly on iOS (ppy/osu-framework#5931 by @frenzibyte)
With the new performance test scenes we have, VBO uploads have shown to be quite poor on iOS, even when building in AOT.
After multiple days of investigation (interrupted by regressions in our rendering systems), it turns out the intermediate vertex storage allocated in VeldridVertexBuffer
have a significant hit on performance. In an isolated environment, there's +7ms aggregate CPU overhead when uploading to an intermediate vertex storage followed by uploading to the GPU buffer, from uploading & drawing 10k quads.
Shaving that overhead off improves performance on iOS significantly, especially in scenes with a high number of vertex uploads.
Re-enable AOT on android / iOS to greatly improve performance (#24338 by @frenzibyte)
This was disabled when we switched to the new renderer because it was crashing. It turns out this had a huge effect on performance.
This also enables Mono Interpreter as a fallback for areas where dynamic code is utilised. I will look into the steps necessary to remove it to close up any remaining possibilities for gains, but I'll do that as a separate follow-up effort later because building osu! with AOT compilation is quite a tedious task, and the performance gain in this PR alone is probably more than enough.
This adds a magnificent boost in rendering performance on iOS and android. Anyone who's been struggling with performance before on their iPhones/iPads should give this release a try!
Note that due to a startup crash, this is only live for iOS this time around. We'll revisit android!
Fix beatmaps being queued for reprocessing every startup when logged out (#24350 by @peppy)
Smaller changes
- Remove most locking overhead in
TripleBuffer
(ppy/osu-framework#5915 by @peppy)- One of those things I s...