diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index 95d540db49..d500a52a35 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -76,6 +76,7 @@ namespace OpenRA public string Tileset; public bool AllowStartUnitConfig = true; public Bitmap CustomPreview; + public bool InvalidCustomRules { get; private set; } public readonly TileShape TileShape; [FieldLoader.Ignore] @@ -274,7 +275,21 @@ namespace OpenRA void PostInit() { - rules = Exts.Lazy(() => Game.modData.RulesetCache.LoadMapRules(this)); + rules = Exts.Lazy(() => + { + try + { + return Game.modData.RulesetCache.LoadMapRules(this); + } + catch (Exception e) + { + InvalidCustomRules = true; + Log.Write("debug", "Failed to load rules for {0} with error {1}", Title, e.Message); + } + + return Game.modData.DefaultRules; + }); + cachedTileSet = Exts.Lazy(() => Rules.TileSets[Tileset]); var tl = Map.MapToCell(TileShape, new CPos(Bounds.Left, Bounds.Top)); diff --git a/OpenRA.Game/Map/MapPreview.cs b/OpenRA.Game/Map/MapPreview.cs index 622f697e06..975b5efb09 100755 --- a/OpenRA.Game/Map/MapPreview.cs +++ b/OpenRA.Game/Map/MapPreview.cs @@ -237,16 +237,8 @@ namespace OpenRA if (RuleStatus != MapRuleStatus.Unknown) return; - try - { - Map.PreloadRules(); - RuleStatus = MapRuleStatus.Cached; - } - catch (Exception e) - { - Log.Write("debug", "Map {0} failed validation with an exception:\n{1}", Uid, e.Message); - RuleStatus = MapRuleStatus.Invalid; - } + Map.PreloadRules(); + RuleStatus = Map.InvalidCustomRules ? MapRuleStatus.Invalid : MapRuleStatus.Cached; } } }