diff --git a/osu.Game/Utils/ModUtils.cs b/osu.Game/Utils/ModUtils.cs
index 05a07f0459..0eb30cbe36 100644
--- a/osu.Game/Utils/ModUtils.cs
+++ b/osu.Game/Utils/ModUtils.cs
@@ -88,40 +88,22 @@ namespace osu.Game.Utils
/// The mods to check.
/// Invalid mods, if any were found. Can be null if all mods were valid.
/// Whether the input mods were all valid. If false, will contain all invalid entries.
- public static bool CheckValidForGameplay(IEnumerable mods, out Mod[]? invalidMods)
+ public static bool CheckValidForGameplay(IEnumerable mods, out List? invalidMods)
{
mods = mods.ToArray();
- List? foundInvalid = null;
-
- void addInvalid(Mod mod)
- {
- foundInvalid ??= new List();
- foundInvalid.Add(mod);
- }
+ CheckCompatibleSet(mods, out invalidMods);
foreach (var mod in mods)
{
- bool valid = mod.Type != ModType.System
- && mod.HasImplementation
- && !(mod is MultiMod);
-
- if (!valid)
+ if (mod.Type == ModType.System || !mod.HasImplementation || mod is MultiMod)
{
- // if this mod was found as invalid, we can exclude it before potentially excluding more incompatible types.
- addInvalid(mod);
- continue;
- }
-
- foreach (var type in mod.IncompatibleMods)
- {
- foreach (var invalid in mods.Where(m => type.IsInstanceOfType(m)))
- addInvalid(invalid);
+ invalidMods ??= new List();
+ invalidMods.Add(mod);
}
}
- invalidMods = foundInvalid?.ToArray();
- return foundInvalid == null;
+ return invalidMods == null;
}
///