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 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.
Song Select
Reduce delay before loading beatmap after selection change at song select (#24929 by @peppy)
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.
Storyboard
- Fix storyboard
UseSkinSprites
being implemented incorrectly (#24861 by @peppy)- This was implemented as a "fallback", but it's actually intended to be an "override". As in it allows storyboarders to prefer a skin sprite before falling back to a local version contained within the storyboard.
UI
Fix SR/BPM display showing no info in multiplayer playlist rooms (#24922 by @Fabiano1337)
Improve notification display when score import fails (#24928 by @peppy)
Before | After |
---|---|
Add the ability for mod icons to show extended information (#24954 by @peppy)
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.
Smaller changes
- Add missing locales mapping in
crowdin.yml
(ppy/osu-resources#282 by @agatemosu) - Add mod icon resources (ppy/osu-resources#285 by @peppy)
- Display mod icons using stable (consistent, not osu!stable) ordering (#24955 by @peppy)
- Also flash "discard changes" dialog popup when force quitting room/playlist creation with changes (#24962 by @Joehuu)
- Update translations (ppy/osu-resources#284 by @peppy)
- Includes fixes for several languages that had the wrong country code mapping causing translations to not actually display.
- Add legacy ranking texture (ppy/osu-resources#274 by @nanashi-1)
Full Changelog: 2023.1004.0...2023.1008.0