diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20230225/ExplicitSequenceFilenames.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20230225/ExplicitSequenceFilenames.cs index f7d17f17bf..e5435da4a2 100644 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20230225/ExplicitSequenceFilenames.cs +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20230225/ExplicitSequenceFilenames.cs @@ -92,19 +92,73 @@ namespace OpenRA.Mods.Common.UpdateRules.Rules defaultSpriteExtension = defaultSpriteExtensionNode.Value.Value; } - var tilesetExtensionsNode = spriteSequenceFormatNode.LastChildMatching("TilesetExtensions"); + var fromBackup = false; + + var tilesetExtensionsNode = spriteSequenceFormatNode.LastChildMatching("TilesetExtensions")?.Value?.Nodes; + if (tilesetExtensionsNode == null) + { + switch (modData.Manifest.Id) + { + case "cnc": + fromBackup = true; + tilesetExtensionsNode = new List() + { + new MiniYamlNode("TEMPERAT", ".tem"), + new MiniYamlNode("SNOW", ".sno"), + new MiniYamlNode("INTERIOR", ".int"), + new MiniYamlNode("DESERT", ".des"), + new MiniYamlNode("JUNGLE", ".jun"), + }; + break; + case "ra": + fromBackup = true; + tilesetExtensionsNode = new List() + { + new MiniYamlNode("TEMPERAT", ".tem"), + new MiniYamlNode("SNOW", ".sno"), + new MiniYamlNode("INTERIOR", ".int"), + new MiniYamlNode("DESERT", ".des"), + }; + break; + case "ts": + fromBackup = true; + tilesetExtensionsNode = new List() + { + new MiniYamlNode("TEMPERATE", ".tem"), + new MiniYamlNode("SNOW", ".sno"), + }; + break; + } + } + if (tilesetExtensionsNode != null) { - reportModYamlChanges = true; - foreach (var n in tilesetExtensionsNode.Value.Nodes) + if (!fromBackup) + reportModYamlChanges = true; + + foreach (var n in tilesetExtensionsNode) tilesetExtensions[n.Key] = n.Value.Value; } - var tilesetCodesNode = spriteSequenceFormatNode.LastChildMatching("TilesetCodes"); + fromBackup = false; + + var tilesetCodesNode = spriteSequenceFormatNode.LastChildMatching("TilesetCodes")?.Value?.Nodes; + if (tilesetCodesNode == null && modData.Manifest.Id == "ts") + { + fromBackup = true; + tilesetCodesNode = new List() + { + new MiniYamlNode("TEMPERATE", "t"), + new MiniYamlNode("SNOW", "a"), + }; + } + if (tilesetCodesNode != null) { - reportModYamlChanges = true; - foreach (var n in tilesetCodesNode.Value.Nodes) + if (!fromBackup) + reportModYamlChanges = true; + + foreach (var n in tilesetCodesNode) tilesetCodes[n.Key] = n.Value.Value; } }