Audio
Reduce startup volume (#28031 by @peppy)
Constant complaints about startup volume mean we should reduce it further and let users adjust as they see fit.
Values are from matching roughly with Apple Music volume of the same song, which should be a good guideline for not overpowering other things on system.
Smaller changes
Editor
Add a chevron to distinguish editor menus with submenus (#27974 by @peppy)
Before | After |
---|---|
Preserve storyboard events when saving a beatmap in the editor (#28033 by @peppy)
Until we have full encoding support for storyboards, this stop-gap measure ensures that storyboards don't just disappear from existence. Without this, saving a beatmap in the editor removes all local storyboard content (ie. anything in the .osu file). The most noticeable is any video background.
Smaller changes
- Improve performance in timing setup screen (#27958 by @EVAST9919)
- Add verify checks for incorrect audio formats (#27895 by @64ArthurAraujo)
- Fix deleting modified difficulty via editor leaving user in broken state (#27996 by @bdach)
- If the difficulty being edited has unsaved changes, the editor exit flow would prompt for save after the deletion method has run. This is undesirable from a UX standpoint, and also leaves the user in a broken state.
- Fully refetch working beatmap when entering editor (#27997 by @bdach)
- Fix adding slider control points via context menu not undoing correctly (#27993 by @bdach)
- Fix changing distance spacing multiplier hiding the distance snap grid when it's already shown (#28066 by @bdach)
- Improve slider placement performance (#28102 by @EVAST9919)
- Reduce container nesting inside
PathControlPointPiece
(#28205 by @EVAST9919)
Framework
Fix texture memory leak in Direct3D (ppy/osu-framework#6250 by @smoogipoo)
If you were seeing sluggish performance the longer the game was running (and potentially switched your renderer as a result), please give direct3d another chance!
Upgrade to SDL3 (#27815 by @Susko3)
Migrate Android framework to SDL (ppy/osu-framework#6105 by @hwsmm)
Removes a lot of legacy code and means we have less things to worry about with android.
Smaller changes
- Fix ChannelGetPosition param not being used (ppy/osu-framework#6242 by @smoogipoo)
- Fix tablet info not clearing when unplugged (ppy/osu-framework#6239 by @Joehuu)
- Avoid masking calculations on valid drawables (ppy/osu-framework#6243 by @EVAST9919)
- Perform rounding to
Precision
inBindableNumber
ondecimal
to avoid rounding error accumulation (ppy/osu-framework#6249 by @bdach) - Update to latest SDL3-CS friendly overload and null-terminated UTF8 conversion (ppy/osu-framework#6245 by @Susko3)
- Move user tab selection events to
TabItem
s (ppy/osu-framework#6251 by @frenzibyte) - Fix unnecessary array copying in
WindowsClipboard.SetImage()
(ppy/osu-framework#6252 by @Susko3) - Fix flaky test attribute not working (ppy/osu-framework#6253 by @smoogipoo)
- Remove unused method (#27934 by @smoogipoo)
- Remove unused members from GameplaySkinComponentLookup (#27931 by @smoogipoo)
- Give SerialisedDrawableInfo sane defaults (#27935 by @smoogipoo)
- Update framework (#27930 by @peppy)
- Set IME rectangle before starting text input (ppy/osu-framework#6257 by @Susko3)
- Set event filter early in the startup process to work around SDL issue (ppy/osu-framework#6259 by @Susko3)
- Work around broken
SDL_EVENT_FINGER_DOWN
events that lead to stuck touches (ppy/osu-framework#6258 by @Susko3) - Use generic math for bindable numbers (ppy/osu-framework#6248 by @huoyaoyuan)
- Log SDL3 version and revision on successful initialisation (ppy/osu-framework#6265 by @Susko3)
- Guard against unsupported window mode on startup (ppy/osu-framework#6263 by @Susko3)
- Ignore autogenerated .idea android file (#27986 by @Joehuu)
- Apply nullability annotations to
ResultsScreen
& inheritors (#27995 by @bdach) - Set SDL_HINT_APP_NAME in SDL3GameHost constructor (ppy/osu-framework#6260 by @FreezyLemon)
- Apply generic math-related changes (#27965 by @bdach)
- Delete osuTK windowing (ppy/osu-framework#6267 by @Susko3)
- Add
Update
event toIWindow
(ppy/osu-framework#6270 by @Susko3) - Use SDL3 screen saver functions to implement
AllowScreenSuspension
(ppy/osu-framework#6271 by @Susko3) - Refactor
DisplayHandle
into seperate android and linux properties (ppy/osu-framework#6268 by @Susko3) - Handle new naming inspections on certain enums (#28051 by @frenzibyte)
- Fix broken macOS CI build (ppy/osu-framework#6277 by @smoogipoo)
- Update localisations (ppy/osu-resources#320 by @peppy)
- Add "HP" to the abbreviations list (#28108 by @frenzibyte)
- Fix
userTriggered
param not being passed to private helper (#28124 by @Susko3) - Fix
Xamarin.Jetbrains.Annotations
conflicting withJetbrains.Annotations
(ppy/osu-framework#6279 by @Susko3) - Fix compilation failure in release mode (ppy/osu-server-spectator#232 by @bdach)
- Refactor child masking bounds handling (ppy/osu-framework#6266 by @EVAST9919)
- Apply adjustments after framework changes (#28028 by @bdach)
- Add support for deferred SDL3 clipboard callbacks (and use it for images) (ppy/osu-framework#6254 by @Susko3)
- Use
MustDisposeResource
annotation to appease new ReSharper inspection (#28153 by @frenzibyte) - Apply NRT to results-related components (#28172 by @bdach)
- Update
BouncyCastle.Cryptography
to 2.3.1 (ppy/osu-server-spectator#233 by @bdach) - Fix xmldoc mismatches in localisation files (#28191 by @bdach)
- Remove
TreatWarningsAsErrors
flags from local builds for developer convenience (#28198 by @frenzibyte) - Avoid colour space conversion when multiplying
SRGBColour
by white (ppy/osu-framework#6287 by @EVAST9919)
Gameplay
Tweak resume overlay to allow better visibility of hit objects underneath (#28050 by @peppy)
This change decreases alpha as the count proceeds. It also adds an initial delay before the countdown starts, to make things feel a bit less jank when resuming gameplay. Had to restructure slightly to make that part work.
Don't hide playfield layer with HUD (#28062 by @peppy)
Touched on in #12039. I think this makes sense - things which are attached to the playfield are expected to always be attached and not disappear. Something like an osu!mania health bar.
This gives users a way to make elements always display (regardless of the HUD hide setting) which is also cool.
Improve storyboard performance by using native loop support (#27539 by @frenzibyte)
Smaller changes
- Fix storyboard videos not accepting transforms (#27967 by @peppy)
- In stable, storyboard videos can actually accept all kinds of transforms just like other sprites. That wasn't working until now.
- Continue loading even when osu! logo is being dragged at loading screen (#28174 by @peppy)
Gameplay (osu!)
- Add Traceable performance calculation support (#27148 by @Givikap120)
- Fix resume overlay not appearing after pausing when mouse cursor is inside window but outside of actual playfield area (#27896 by @bdach)
- Fix
cursormiddle
not using the same skin source ascursor
(#27964 by @smoogipoo) - Fix touches on judged circles changing cursor position (#28167 by @smoogipoo)
Gameplay (osu!catch)
Fix gameplay PP counter not matching results screen (#27808 by @smoogipoo)
Gameplay (osu!mania)
Add more usable osu!mania touch input system (#28173 by @peppy)
This takes smoogi's previous effort (#27790) and presents it in a state where it can be merged without skin configurability concerns. I've left the configurable settings in code for exposing in the future.
I've made changes to bring it more in line with how taiko's touch area system was implemented for conformity. The major change is that it no longer uses the presence of touch mod to decide whether to display (and can now be summoned using a mouse click or touch).
Do not change mania column width on mobile platforms (#28186 by @bdach)
With the new touch overlay, this doesn't make as much sense.
Input
- Implement focus traps (ppy/osu-framework#6286 by @smoogipoo)
- By extracting focus-management logic out of
InputManager
, we can implement something akin to a focus trap. Components can trap the focus management (ChangeFocus()
/TriggerFocusContention()
) of their subcomponents to add supplementary logic.
- By extracting focus-management logic out of
This PR features a partial redesign of Dropdown
making use of this. There are two components wanting to manage focus here - the Menu
and the TextBox
.
- The
Menu
's focus is trapped byDropdown
and reduced to a no-op. - The
TextBox
's focus is trapped withinDropdownSearchBox
to perform additional functionality such as opening the dropdown on focus, selecting items on commit, clearing text on escape, etc.
This is not a breaking change, but I've obsoleted InputManager.TriggerFocusContention()
and InputManager.ChangeFocus()
partially to make this easy to test.
Main Menu
- Fix incorrect background being loaded due to async race (#28040 by @peppy)
- If the API login (and thus user set) completed between
load
andLoadComplete
, the re-fetch on user change would not yet be hooked up, causing an incorrect default background to be used instead.
- If the API login (and thus user set) completed between
Of note, moving this out of async load doesn't really affect load performance as the bulk of the load operation is already scheduled and LoadComponentAsync
ed anyway
- Randomise which menu content is shown on arriving at the menu (#28127 by @peppy)
- Many users don't spend much time at the main menu, so let's randomise where in the carousel of available images we start at to give each a fair chance.
Multiplayer
Apply chat filters to room name when editing multiplayer room settings (ppy/osu-server-spectator#227 by @bdach)
Fix audio being paused in a spectator session when all players finish playing (#28003 by @peppy)
Better signify private rooms by showing a different status pill design (#28080 by @peppy)
Smaller changes
- Add extended capabilities for chat filters (ppy/osu-server-spectator#229 by @bdach)
- Ensure ranks are properly populated in spectated scores (ppy/osu-server-spectator#231 by @bdach)
- Fix
APIUser
andRealmUser
silently desyncing on spectator-tracked scores (ppy/osu-server-spectator#230 by @bdach)
Network
- Allow insecure requests on debug builds via
OSU_INSECURE_REQUESTS
environment variable (ppy/osu-framework#6283 by @smoogipoo)-
- Adds the environment variable (
OSU_INSECURE_REQUESTS
).
- Adds the environment variable (
-
WebRequest.AllowInsecureRequests
updated to act as an override of the environment variable.- Added validation to
OnlineStore.GetAsync()
. This existed originally but was removed and incorrectly reverted at some point. Can't seem to pinpoint the exact commit where this happened. - Adjusted
OnlineStore
to check for eitherhttp
orhttp
schemes. Added tests.
WIki entry: https://github.com/ppy/osu-framework/wiki/Environment-variables#osu_insecure_requests
Online
- Use hash rather than online ID as primary lookup key when presenting score (#28171 by @bdach)
- If inclined to test this manually, here's a pair of replays that should demonstrate the issue: example-replays.zip
One should have cursor movement start-to-end (client-side recording), one should have no movement for the first half a minute or so and then resume playback after (server-side recording after a restart)
Performance
- Fix high memory usage during spectator modes when background processing is running (#27891 by @peppy)
- Don't redraw
Path
on colour invalidation (ppy/osu-framework#6276 by @EVAST9919) - Set a rudimentary lifetime end to improve seek performance in scrolling rulesets (#28170 by @peppy)
Platform
- Check realm file can be written to before attempting further initialisation (#28019 by @peppy)
- Rather than creating a "corrupt" realm file in such cases, the game will now refuse to start. This behaviour is usually what we want. In most cases a second click on the game will start it successfully (the previous instance's file handles are still doing stuff, or windows defender is being silly).
- Fix filenames containing japanese not being read correctly (#28034 by @peppy)
Reliability
- Globally silence Discord RPC registration failures (#27908 by @smoogipoo)
- Update local metadata lookup cache more often (#28067 by @bdach)
Results
Add ability to quick exit from results screen (#27922 by @peppy)
Smaller changes
- Fix replay export not working correctly from online leaderboards (#27866 by @Joehuu)
- Stop showing non-timed results in timing distribution graph (#27994 by @bdach)
Scoring
Store total score without mod multipliers to local database and to replays, and send it on score submission (#27912 by @bdach)
Groundwork for adjusting mod multipliers in the future.
Smaller changes
- Preserve score rank on lazer scores during encode/decode (#28058 by @frenzibyte)
- Do not lookup usernames for scores without an online ID (#28082 by @bdach)
- Persist user ID to replay data (#28119 by @bdach)
Settings
Update bundled beatmaps (#28128 by @peppy)
Provided courtesy of pishifat and the mappers' guild.
Note that this increases the number of bundled map downloads – I think this is okay.
I did add a new text line to let users know they can continue with game setup, as I have seen countless people wait at this screen for the progress bar to fill before moving on. I want to improve the screen further but this is a minimum requirement for adding more bundled beatmaps to the mix.
Add setting to allow hiding all country flags (#28144 by @peppy)
There have been enough requests for this at this point to implement it. Required for some countries which have outlawed displaying some flags.
Smaller changes
- Do not show integration settings on mobile (#28116 by @bdach)
- The settings weren't actually doing anything at all there anyway.
Skin Editor
Autosave edited skin on skin change (#28030 by @bdach)
Automatically choose origin (along with anchor) to make skin editor placement easier for users (#28089 by @peppy)
Users still don't really understand anchors and origins (and I kinda don't blame them – as a concept it takes a bit of brain power to get right), so let's choose for them in most cases and take the guesswork out of it.
Smaller changes
- Fix settings colour scheme wrong when viewing gameplay from skin editor button (#27973 by @peppy)
- Add ability to show beatmap source using skin editor's beatmap attribute text (#27978 by @peppy)
- Fix
BeatmapAttributeText
breaking due to enum serialisation woes (#28083 by @bdach) - Fix sizing of gameplay preview in skin editor not updating on scaling mode change (#28118 by @bdach)
Song Select
- Don't re-filter unless mods may change the filter (#27881 by @smoogipoo)
- Do not attempt to preserve incompatible system mods when activating mod presets (#28095 by @cdwcgt)
- Add mod display and unranked indicator to new song select footer (#28141 by @frenzibyte)
- For future use.
- Improve animation of new song select footer buttons (#28142 by @frenzibyte)
- For future use.
- Add glow to footerV2 buttons (#28154 by @tomm13)
- For future use.
- Rename and move new footer classes to appropriate places (#28182 by @frenzibyte)
UI
Fix toolbar volume bar looking weird at low volume levels (#27853 by @Drison64)
Add chevron to distinguish menus with submenus (#27982 by @Joehuu)
Fix beatmap listing cards being far too large (#28074 by @peppy)
I'm going to start fixing these locally to the screens/elements which look out of place, one at a time.
Before | After |
---|---|
Fix chat overlay being far too large (#28075 by @peppy)
Before | After |
---|---|
Scroll now playing overlay text when overflowing (#28017 by @Joehuu)
Before | After |
---|---|
Takes inspiration of Winamp (Classic skin) and Apple Music:
Allow using right click in dropdown menus to toggle state without closing menu (#28086 by @424ever)
menu.webm
Make deletion confirmation less confusing (#28122 by @Ekischleki)
This also has the neat side effect, of allowing localisation for deletion confirmation content
Before | After |
---|---|
Update logo to new version "v4b" (#28143 by @peppy)
Goodbye dot. Also adjusts metrics a bit based on user feedback.
Smaller changes
- Fix missing underscore in
invalid beatmap_hash
notification message (#27845 by @Loreos7) - Fix stable scores showing with faded out pp display due to classic mod presence (#27877 by @bdach)
- Add sound feedback to all tab controls when using keyboard interaction (#27909 by @frenzibyte)
- Fix mod search box not tracking external changes to focus state (#27780 by @mafarrica)
- Fix mod select overlay columns not displaying properly sometimes (#27972 by @bdach)
- Allow confirming keybinding overwrite on conflict via "select" binding (#27969 by @bdach)
- Add missing space in setup wizard (#28014 by @TTTaevas)
- Stop using visually noisy
bg4
for default backgrounds (#28078 by @peppy)- This has always really annoyed me. The illustration doesn't match what the background is visualising (a fallback when nothing else is available).
- Fix beatmap backgrounds loading default briefly before final display (#28079 by @peppy)
- Use existing
AutomaticallyDownloadMissingBeatmaps
localisation on solo spectator screen (#28109 by @Joehuu) - Fix now playing overlay text scroll breaking when toggling metadata language setting (#28111 by @Joehuu)
- Localisation updates (ppy/osu-resources#322 by @peppy)
- Fix duplicated localisation key in
DeleteConfirmationContentStrings
(#28190 by @bdach) - Add "daily challenge" icon (ppy/osu-resources#324 by @bdach)
- For future use :).
- Fix checkboxes looking misaligned when placed next to a slider bar (#28201 by @frenzibyte)
I just noticed this while working on this and it felt jarring. The padding existed for a very long time, and I couldn't find any reason for it. @peppy requesting your review because I'm not sure if this remains to be intentional.
New Contributors
- @64ArthurAraujo made their first contribution in #27639
- @vladfrangu made their first contribution in #27635
- @mafarrica made their first contribution in #27780
- @TTTaevas made their first contribution in #28014
- @424ever made their first contribution in #28086
- @Ekischleki made their first contribution in #28122
- @tomm13 made their first contribution in #28154
Full Changelog: 2024.312.1...2024.519.0