diff --git a/osu.Game/Overlays/BeatmapSet/LeaderboardModSelector.cs b/osu.Game/Overlays/BeatmapSet/LeaderboardModSelector.cs
index caeb757d7a..17ea117018 100644
--- a/osu.Game/Overlays/BeatmapSet/LeaderboardModSelector.cs
+++ b/osu.Game/Overlays/BeatmapSet/LeaderboardModSelector.cs
@@ -63,7 +63,7 @@ namespace osu.Game.Overlays.BeatmapSet
return;
modsContainer.Add(new ModButton(new ModNoMod()));
- modsContainer.AddRange(rulesetInstance.AllMods.Where(m => m.IsPlayable(ModUsage.User)).Select(m => new ModButton(m)));
+ modsContainer.AddRange(rulesetInstance.AllMods.Where(m => m.IsPlayable(ModUsage.SoloLocal)).Select(m => new ModButton(m)));
modsContainer.ForEach(button =>
{
diff --git a/osu.Game/Rulesets/Mods/IMod.cs b/osu.Game/Rulesets/Mods/IMod.cs
index 325b75b76e..d37ef53a66 100644
--- a/osu.Game/Rulesets/Mods/IMod.cs
+++ b/osu.Game/Rulesets/Mods/IMod.cs
@@ -39,8 +39,8 @@ namespace osu.Game.Rulesets.Mods
///
///
/// - Should be always false for cases where the user is not interacting with the game.
- /// - Should be false in for mods that make gameplay duration dependent on user input (e.g. ).
- /// - Should be false in for mods that affect the gameplay duration (e.g. and ).
+ /// - Should be false in for mods that make gameplay duration dependent on user input (e.g. ).
+ /// - Should be false in for mods that affect the gameplay duration (e.g. and ).
///
///
/// The mod usage.
diff --git a/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs b/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs
index 801cd3cba7..700ad30c08 100644
--- a/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs
+++ b/osu.Game/Rulesets/Mods/ModAdaptiveSpeed.cs
@@ -31,7 +31,7 @@ namespace osu.Game.Rulesets.Mods
public override double ScoreMultiplier => 1;
- public override bool IsPlayable(ModUsage usage) => usage == ModUsage.User;
+ public override bool IsPlayable(ModUsage usage) => usage == ModUsage.SoloLocal;
public override Type[] IncompatibleMods => new[] { typeof(ModRateAdjust), typeof(ModTimeRamp) };
diff --git a/osu.Game/Rulesets/Mods/ModRateAdjust.cs b/osu.Game/Rulesets/Mods/ModRateAdjust.cs
index 59d9026f3b..acb39bfbe6 100644
--- a/osu.Game/Rulesets/Mods/ModRateAdjust.cs
+++ b/osu.Game/Rulesets/Mods/ModRateAdjust.cs
@@ -11,7 +11,7 @@ namespace osu.Game.Rulesets.Mods
{
public abstract class ModRateAdjust : Mod, IApplicableToRate
{
- public override bool IsPlayable(ModUsage usage) => usage != ModUsage.MultiplayerPerPlayer;
+ public override bool IsPlayable(ModUsage usage) => usage != ModUsage.MultiplayerLocal;
public abstract BindableNumber SpeedChange { get; }
diff --git a/osu.Game/Rulesets/Mods/ModTimeRamp.cs b/osu.Game/Rulesets/Mods/ModTimeRamp.cs
index 96b38301b5..c554c39010 100644
--- a/osu.Game/Rulesets/Mods/ModTimeRamp.cs
+++ b/osu.Game/Rulesets/Mods/ModTimeRamp.cs
@@ -30,7 +30,7 @@ namespace osu.Game.Rulesets.Mods
[SettingSource("Adjust pitch", "Should pitch be adjusted with speed")]
public abstract BindableBool AdjustPitch { get; }
- public override bool IsPlayable(ModUsage usage) => usage != ModUsage.MultiplayerPerPlayer;
+ public override bool IsPlayable(ModUsage usage) => usage != ModUsage.MultiplayerLocal;
public override Type[] IncompatibleMods => new[] { typeof(ModRateAdjust), typeof(ModAdaptiveSpeed) };
diff --git a/osu.Game/Rulesets/Mods/ModUsage.cs b/osu.Game/Rulesets/Mods/ModUsage.cs
index 04d99149dd..3f25154d73 100644
--- a/osu.Game/Rulesets/Mods/ModUsage.cs
+++ b/osu.Game/Rulesets/Mods/ModUsage.cs
@@ -11,17 +11,17 @@ namespace osu.Game.Rulesets.Mods
///
/// This mod can be used for a per-user gameplay session.
///
- User,
+ SoloLocal,
///
/// This mod can be used in multiplayer but must be applied to all users.
/// This is generally the case for mods which affect the length of gameplay.
///
- MultiplayerRoomWide,
+ MultiplayerGlobal,
///
/// This mod can be used in multiplayer either at a room or per-player level (i.e. "free mod").
///
- MultiplayerPerPlayer,
+ MultiplayerLocal,
}
}
diff --git a/osu.Game/Screens/OnlinePlay/FreeModSelectOverlay.cs b/osu.Game/Screens/OnlinePlay/FreeModSelectOverlay.cs
index 37cffd8343..13d5dd8927 100644
--- a/osu.Game/Screens/OnlinePlay/FreeModSelectOverlay.cs
+++ b/osu.Game/Screens/OnlinePlay/FreeModSelectOverlay.cs
@@ -25,7 +25,7 @@ namespace osu.Game.Screens.OnlinePlay
public new Func IsValidMod
{
get => base.IsValidMod;
- set => base.IsValidMod = m => m.HasImplementation && m.IsPlayable(ModUsage.User) && value(m);
+ set => base.IsValidMod = m => m.HasImplementation && m.IsPlayable(ModUsage.SoloLocal) && value(m);
}
public FreeModSelectOverlay()
diff --git a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSongSelect.cs b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSongSelect.cs
index 5bf217031a..d7e752623d 100644
--- a/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSongSelect.cs
+++ b/osu.Game/Screens/OnlinePlay/Multiplayer/MultiplayerMatchSongSelect.cs
@@ -95,8 +95,8 @@ namespace osu.Game.Screens.OnlinePlay.Multiplayer
protected override BeatmapDetailArea CreateBeatmapDetailArea() => new PlayBeatmapDetailArea();
- protected override bool IsValidMod(Mod mod) => base.IsValidMod(mod) && mod.IsPlayable(ModUsage.MultiplayerRoomWide);
+ protected override bool IsValidMod(Mod mod) => base.IsValidMod(mod) && mod.IsPlayable(ModUsage.MultiplayerGlobal);
- protected override bool IsValidFreeMod(Mod mod) => base.IsValidFreeMod(mod) && mod.IsPlayable(ModUsage.MultiplayerPerPlayer);
+ protected override bool IsValidFreeMod(Mod mod) => base.IsValidFreeMod(mod) && mod.IsPlayable(ModUsage.MultiplayerLocal);
}
}
diff --git a/osu.Game/Screens/OnlinePlay/OnlinePlaySongSelect.cs b/osu.Game/Screens/OnlinePlay/OnlinePlaySongSelect.cs
index d9da230f58..b8b0604c79 100644
--- a/osu.Game/Screens/OnlinePlay/OnlinePlaySongSelect.cs
+++ b/osu.Game/Screens/OnlinePlay/OnlinePlaySongSelect.cs
@@ -170,7 +170,7 @@ namespace osu.Game.Screens.OnlinePlay
///
/// The to check.
/// Whether is a valid mod for online play.
- protected virtual bool IsValidMod(Mod mod) => mod.HasImplementation && ModUtils.FlattenMod(mod).All(m => m.IsPlayable(ModUsage.User));
+ protected virtual bool IsValidMod(Mod mod) => mod.HasImplementation && ModUtils.FlattenMod(mod).All(m => m.IsPlayable(ModUsage.SoloLocal));
///
/// Checks whether a given is valid for per-player free-mod selection.
diff --git a/osu.Game/Screens/Play/PlayerSettings/BeatmapOffsetControl.cs b/osu.Game/Screens/Play/PlayerSettings/BeatmapOffsetControl.cs
index 554b58f481..af2cecfba5 100644
--- a/osu.Game/Screens/Play/PlayerSettings/BeatmapOffsetControl.cs
+++ b/osu.Game/Screens/Play/PlayerSettings/BeatmapOffsetControl.cs
@@ -188,7 +188,7 @@ namespace osu.Game.Screens.Play.PlayerSettings
if (score.NewValue == null)
return;
- if (score.NewValue.Mods.Any(m => !m.IsPlayable(ModUsage.User)))
+ if (score.NewValue.Mods.Any(m => !m.IsPlayable(ModUsage.SoloLocal)))
return;
var hitEvents = score.NewValue.HitEvents;
diff --git a/osu.Game/Screens/Play/SubmittingPlayer.cs b/osu.Game/Screens/Play/SubmittingPlayer.cs
index 6846992b13..b33ff87d55 100644
--- a/osu.Game/Screens/Play/SubmittingPlayer.cs
+++ b/osu.Game/Screens/Play/SubmittingPlayer.cs
@@ -48,7 +48,7 @@ namespace osu.Game.Screens.Play
// Token request construction should happen post-load to allow derived classes to potentially prepare DI backings that are used to create the request.
var tcs = new TaskCompletionSource();
- if (Mods.Value.Any(m => !m.IsPlayable(ModUsage.User)))
+ if (Mods.Value.Any(m => !m.IsPlayable(ModUsage.SoloLocal)))
{
handleTokenFailure(new InvalidOperationException("Non-user playable mod selected."));
return false;
diff --git a/osu.Game/Screens/Ranking/ResultsScreen.cs b/osu.Game/Screens/Ranking/ResultsScreen.cs
index ee2c00a135..e0ae0309ce 100644
--- a/osu.Game/Screens/Ranking/ResultsScreen.cs
+++ b/osu.Game/Screens/Ranking/ResultsScreen.cs
@@ -146,7 +146,7 @@ namespace osu.Game.Screens.Ranking
if (Score != null)
{
// only show flair / animation when arriving after watching a play that isn't autoplay.
- bool shouldFlair = player != null && Score.Mods.All(m => m.IsPlayable(ModUsage.User));
+ bool shouldFlair = player != null && Score.Mods.All(m => m.IsPlayable(ModUsage.SoloLocal));
ScorePanelList.AddScore(Score, shouldFlair);
}
diff --git a/osu.Game/Utils/ModUtils.cs b/osu.Game/Utils/ModUtils.cs
index c5cf469f7c..e19020a959 100644
--- a/osu.Game/Utils/ModUtils.cs
+++ b/osu.Game/Utils/ModUtils.cs
@@ -121,7 +121,7 @@ namespace osu.Game.Utils
/// Invalid mods, if any were found. Will be null if all mods were valid.
/// Whether the input mods were all valid. If false, will contain all invalid entries.
public static bool CheckValidRequiredModsForMultiplayer(IEnumerable mods, [NotNullWhen(false)] out List? invalidMods)
- => checkValid(mods, m => m.IsPlayable(ModUsage.MultiplayerRoomWide), out invalidMods);
+ => checkValid(mods, m => m.IsPlayable(ModUsage.MultiplayerGlobal), out invalidMods);
///
/// Checks that all s in a combination are valid as "free mods" in a multiplayer match session.
@@ -130,7 +130,7 @@ namespace osu.Game.Utils
/// Invalid mods, if any were found. Will be null if all mods were valid.
/// Whether the input mods were all valid. If false, will contain all invalid entries.
public static bool CheckValidFreeModsForMultiplayer(IEnumerable mods, [NotNullWhen(false)] out List? invalidMods)
- => checkValid(mods, m => m.IsPlayable(ModUsage.MultiplayerPerPlayer), out invalidMods);
+ => checkValid(mods, m => m.IsPlayable(ModUsage.MultiplayerLocal), out invalidMods);
private static bool checkValid(IEnumerable mods, Predicate valid, [NotNullWhen(false)] out List? invalidMods)
{