diff --git a/OpenRA.Game/Widgets/WidgetUtils.cs b/OpenRA.Game/Widgets/WidgetUtils.cs index 1cfbefb13f..63f49a0955 100644 --- a/OpenRA.Game/Widgets/WidgetUtils.cs +++ b/OpenRA.Game/Widgets/WidgetUtils.cs @@ -229,7 +229,31 @@ namespace OpenRA.Widgets { var availableMaps = Game.modData.AvailableMaps; if (string.IsNullOrEmpty(map) || !availableMaps.ContainsKey(map)) - return availableMaps.First(m => m.Value.Selectable).Key; + { + Func isIdealMap = m => + { + if (!m.Selectable) + return false; + + // Other map types may have confusing settings or gameplay + if (m.Type != "Conquest") + return false; + + // Maps with bots disabled confuse new players + if (m.Players.Any(s => !s.Value.AllowBots)) + return false; + + // Large maps expose unfortunate performance problems + if (m.MapSize.X > 128 || m.MapSize.Y > 128) + return false; + + return true; + }; + + var selected = availableMaps.Values.Where(m => isIdealMap(m)).RandomOrDefault(Game.CosmeticRandom) ?? + availableMaps.Values.First(m => m.Selectable); + return selected.Uid; + } return map; } diff --git a/OpenRA.Mods.Cnc/Widgets/Logic/CncMenuLogic.cs b/OpenRA.Mods.Cnc/Widgets/Logic/CncMenuLogic.cs index c87ec96f06..a8e5bf046c 100644 --- a/OpenRA.Mods.Cnc/Widgets/Logic/CncMenuLogic.cs +++ b/OpenRA.Mods.Cnc/Widgets/Logic/CncMenuLogic.cs @@ -139,6 +139,8 @@ namespace OpenRA.Mods.Cnc.Widgets.Logic void StartSkirmishGame() { var map = WidgetUtils.ChooseInitialMap(Game.Settings.Server.Map); + Game.Settings.Server.Map = map; + Game.Settings.Save(); ConnectionLogic.Connect(IPAddress.Loopback.ToString(), Game.CreateLocalServer(map),