From 1b86ff11e5efccab0db1f36ce75a7bc51ce4590a Mon Sep 17 00:00:00 2001 From: Dan Balasescu Date: Fri, 24 Apr 2026 21:56:26 +0900 Subject: [PATCH] Hide red failing layer in ranked play (#37503) In ranked play, scores are always counted regardless of whether they are a fail or a pass. Beyond that, there's also no concept of revival in multiplayer right now, so players are just stuck at 0 HP with a red overlay. Not doing what `ModNoFail` does, which is to hide the healthbar altogether, because some user skins use the healthbar to skin a gameplay border. --- .../Matchmaking/Match/Gameplay/ScreenGameplay.cs | 2 +- .../Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs | 4 +++- osu.Game/Screens/Play/HUDOverlay.cs | 7 ++++++- osu.Game/Screens/Play/PlayerConfiguration.cs | 5 +++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Gameplay/ScreenGameplay.cs b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Gameplay/ScreenGameplay.cs index f6f324eb90..45344b4d7d 100644 --- a/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Gameplay/ScreenGameplay.cs +++ b/osu.Game/Screens/OnlinePlay/Matchmaking/Match/Gameplay/ScreenGameplay.cs @@ -13,7 +13,7 @@ namespace osu.Game.Screens.OnlinePlay.Matchmaking.Match.Gameplay public partial class ScreenGameplay : MultiplayerPlayer { public ScreenGameplay(Room room, PlaylistItem playlistItem, MultiplayerRoomUser[] users) - : base(room, playlistItem, users) + : base(room, playlistItem, users, showFailingOverlay: false) { } diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs index d7cbd02918..66e98d1c32 100644 --- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs +++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerPlayer.cs @@ -51,13 +51,15 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer /// The room. /// The playlist item to be played. /// The users which are participating in this game. - public MultiplayerPlayer(Room room, PlaylistItem playlistItem, MultiplayerRoomUser[] users) + /// Whether to show the red failing overlay. + public MultiplayerPlayer(Room room, PlaylistItem playlistItem, MultiplayerRoomUser[] users, bool showFailingOverlay = true) : base(room, playlistItem, new PlayerConfiguration { AllowPause = false, AllowRestart = false, AutomaticallySkipIntro = room.AutoSkip, ShowLeaderboard = true, + ShowFailingOverlay = showFailingOverlay }) { leaderboardProvider = new MultiplayerLeaderboardProvider(users); diff --git a/osu.Game/Screens/Play/HUDOverlay.cs b/osu.Game/Screens/Play/HUDOverlay.cs index d913673fc8..7da996c208 100644 --- a/osu.Game/Screens/Play/HUDOverlay.cs +++ b/osu.Game/Screens/Play/HUDOverlay.cs @@ -117,7 +117,12 @@ namespace osu.Game.Screens.Play Children = new[] { - CreateFailingLayer(), + new Container + { + RelativeSizeAxes = Axes.Both, + Alpha = configuration.ShowFailingOverlay ? 1 : 0, + Child = CreateFailingLayer() + }, //Needs to be initialized before skinnable drawables. judgementCountController = new JudgementCountController(), clicksPerSecondController = new ClicksPerSecondController(), diff --git a/osu.Game/Screens/Play/PlayerConfiguration.cs b/osu.Game/Screens/Play/PlayerConfiguration.cs index f529859bfb..00a5653970 100644 --- a/osu.Game/Screens/Play/PlayerConfiguration.cs +++ b/osu.Game/Screens/Play/PlayerConfiguration.cs @@ -39,5 +39,10 @@ namespace osu.Game.Screens.Play /// Whether the gameplay leaderboard should be shown. /// public bool ShowLeaderboard { get; set; } + + /// + /// Whether to show the red failing overlay. + /// + public bool ShowFailingOverlay { get; set; } = true; } }