Releases: ppy/osu
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
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