github ppy/osu 2024.412.0

latest release: 2024.412.1
18 days ago

Code Quality

Editor

Improve editor performance when many timeline ticks are present (#27632 by @EVAST9919)

Improve editor performance for maps with many control points (#27630 by @EVAST9919)

Smaller changes

Framework

Fix word wrapping not working well with chinese/japanaese/korean languages (ppy/osu-framework#6231 by @bdach)

Smaller changes

Gameplay

Change gameplay disclaimers to show inline and not delay gameplay start (#27616 by @bdach)

Add delayed resume for taiko/catch/mania (#27079 by @smoogipoo)

Fix some maps requiring multiple intro skips that weren't there on stable (#27784 by @bdach)

Add new icons for hit error meter (ppy/osu-resources#317 by @peppy)

Update hit error metre to use new icons (#27787 by @peppy)

Smaller changes

  • Fix incorrectly encoded score IsPerfect value (#27668 by @smoogipoo)
  • Add sample for gameplay resume countdown (ppy/osu-resources#314 by @nekodex)
  • Fix break overlay arrows look ugly on bright backgrounds (#27760 by @EVAST9919)
    • | before | after |
      |--------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------|
      | master | pr |

Gameplay (osu!)

  • Fix bulbs on Catmull sliders (#27734 by @smoogipoo)
    • Some old maps were showing weird loops in sliders which weren't rendered in stable. Now they don't render here either.

Gameplay (osu!catch)

  • Fix catch banana shower judgement causing fail when at 0 HP (#27677 by @smoogipoo)
    • Fixes the follow-up issue in #27121

Gameplay (osu!mania)

Gameplay (osu!taiko)

Fix taiko mascot size not matching expectations (#27758 by @peppy)

Smaller changes

  • Fix taiko legacy score simulator not including swell tick score gain into bonus portion (#27729 by @bdach)

Import

  • Fix SkinImporter not using invariant culture when parsing skins without skin.ini (#27739 by @Susko3)
  • Avoid reporting an import as successful when all beatmaps failed to import (#27755 by @peppy)

Online

Support Discord game invites in multiplayer lobbies (#27443 by @jvyden)

Smaller changes

Platform

######## Changes

  • (SDL3-CS) from namespace SDL2 & class SDL to namespace SDL & class SDL3 (made more sense as the functions are imported from SDL3.dll)
  • (SDL3-CS) structs and enums now live in the namespace instead of being nested in the SDL3 class
  • (SDL3-CS) pointer types are now proper pointers instead of IntPtr, which means more "unsafe" code
  • (SDL3-CS) minor changes to return/struct types, reducing need for casts
  • (SDL3-CS) simple function signature changes: from ref, in & out to pointers (unfortunate, but automatically generating these would be hell)
  • (SDL3-CS) function that take strings now take ReadOnlySpan<byte>, requiring Encoding.UTF8.GetBytes() calls or UTF-8 string literals
  • (SDL3-CS) function pointers instead of delegates in native callback functions
  • simple renames done via SDL-provided build-scripits/rename_symbols.py
  • migrations from the Migrating to SDL 3.0 guide
  • minor update of SDL3ControllerBindings logic (basically per SDL3 migration guide)
  • removal of borderless fullscreen on macOS and Linux (merged into fullscreen with SDL3)
  • updated windowing logic to account for SDL_DisplayID instead of previously used display index
  • osu!framework DisplayMode.RefreshRate changed from int to float
  • SDL relative mouse mode instead of custom WindowsMouseHandler mouse logic
    including removal of custom tablet handling logic. SDL_pen.h would be the replacement for that, but it's currently only supported on Linux
  • updated WindowsWindow to account for SDL_SYSWMEVENT removal
    has caused some minor regressions in IME handling (the new method isn't giving us all the expected messages)
  • updated JetBrains.Annotations to latest version
  • renamed SDL2 → SDL3

######## Issues

  • IOpenGLGraphicsSurface.BackbufferFramebuffer used to return useful information on iOS
  • waiting un upstream: libsdl-org/SDL#9430
  • OpenGL probably won't work on iOS?
  • minor IME regressions on windows
  • releasing mouse button outside window with relative mouse mode causes next click to be ignored (SDL issue, it seems)
  • (possible issue) non-OTD tablet input with relative mouse mode on windows (WindowsMouseHandler logic was removed)

######## Future work

  • add full support for async raw mouse + keyboard on windows #6235
  • look into windows IME regressions (and maybe switch to SDL IME events)
  • update my currently open PRs to SDL3 (when I feel like it)

######## Testing

I've tested mouse, keyboard

Reliability

Attempt to disable custom rulesets that can be linked to an unhandled crash (#27698 by @bdach)

After seeing yet another report of this something in me broke and I decided I have had enough of it.

What this does is that when the game is dying, it will hand off the exception to RulesetStore for a last-ditch inspection. RulesetStore will walk the call stack, and check if any ruleset has been involved in the trash fire. If it finds one, it banishes it to the blagole by renaming the dll to something that won't match the dll pattern (namely by attaching a .broken faux-extension suffix to the filename).

On launch, the game checks for .dll.broken ruleset files in the rulesets directory, and raises a notification for every single one that it finds to let the users know. And yes it will do that on every startup. I don't much care at this point (partially because I don't even know if reviewers will accept the starting premise of this - if they will I am willing to put some more work into this).

Smaller changes

  • Warn about not using an official "deployed" build (#27681 by @smoogipoo)
    • Some package managers (e.g. the AUR) may choose to build "deployed" game packages from tags, attaching the true game version to the built assembly (e.g. 2024.312.0). This PR allows an attribute to be attached that indicates whether this is an officially sanctioned build, and displays a notification if not.
  • Fix double binding causing game crash after API enters failing state (#27754 by @peppy)
  • Fix possible crash due to race in DiscordRichPresence (#27810 by @smoogipoo)
    • Encountered by chance:

As far as I can tell the failure path looks something like this:

  • OsuGameBase.load() -> loads APIAccess
  • APIAccess will begin receiving Update()s immediately upon game's LoadComplete
  • OsuGameDesktop.LoadComplete() -> begins async load of DiscordRichPresence
  • DiscordRichPresence.load() -> binds event with runOnceImmediately.
  • At some point APIAccess updates the user object (from the update thread), creating a race condition between it and the runOnceImmediately above.

Results

Display misses in the hit accuracy heatmap (#27064 by @smoogipoo)

Screenshot 2024-02-06 at 22 23 37

Apply partial fade on pp display on results screen when score will not give pp (#27756 by @bdach)

osu_2024-03-29_11-14-44
osu_2024-03-29_11-13-02

Skin Editor

  • Fix newly placed items in skin editor not getting correct anchor placement (#27832 by @peppy)
    • | Before | After |
      | :---: | :---: |
      | | |

Song Select

Use title as tiebreaker when sorting beatmap carousel by artist (#27692 by @bdach)

Support filtering for multiple statuses when searching beatmaps in the map picker (#27635 by @vladfrangu)

This adds the ability to search for something like status=r status=l and include both.

Smaller changes

Storyboard

  • Revert recent storyboard optimisations (#27797 by @smoogipoo)
    • They were causing issues with some edge cases.

UI

Remember login by default (#27587 by @peppy)

Kinda what is expected from a user's perspective

Add ability to schedule and rotate main menu content (#27722 by @peppy)

Smaller changes

  • Rearrange rankings overlay tabs to match web (#27595 by @Joehuu)
  • Fix first word bold not applying correctly after first language change (#27601 by @bdach)
  • Fix noticeable masking artifact of beatmap cards when already downloaded (#27607 by @Joehuu)
    • | Before | After |
      | --- | --- |
      | | |
  • Fix animated UI elements not beat syncing correctly at slower playback rates (#26707 by @peppy)
  • Localisation updates (ppy/osu-resources#318 by @peppy)

Don't miss a new osu release

NewReleases is sending notifications on new releases.