diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index ac40f3962f..7cd4a1b2ec 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -774,6 +774,61 @@ namespace OpenRA.Mods.Common.UtilityCommands node.Key = "StandSequences"; } + if (engineVersion < 20150323) + { + // Moved Reloads functionality to LimitedAmmo and refactored the latter into AmmoPool + if (depth == 0) + { + var actorTraits = node.Value.Nodes; + var limitedAmmo = actorTraits.FirstOrDefault(l => l.Key == "LimitedAmmo"); + var reloads = actorTraits.FirstOrDefault(r => r.Key == "Reloads"); + + if (reloads != null) + { + var reloadsFields = reloads.Value.Nodes; + var limitedAmmoFields = limitedAmmo.Value.Nodes; + var count = reloadsFields.FirstOrDefault(c => c.Key == "Count"); + var period = reloadsFields.FirstOrDefault(p => p.Key == "Period"); + var resets = reloadsFields.FirstOrDefault(res => res.Key == "ResetOnFire"); + + var reloadsCount = count != null ? FieldLoader.GetValue("Count", count.Value.Value) : -1; + var reloadsPeriod = period != null ? FieldLoader.GetValue("Period", period.Value.Value) : 50; + var reloadsResetOnFire = resets != null ? FieldLoader.GetValue("ResetOnFire", resets.Value.Value) : false; + + limitedAmmoFields.Add(new MiniYamlNode("SelfReloads", "true")); + limitedAmmoFields.Add(new MiniYamlNode("ReloadCount", reloadsCount.ToString())); + limitedAmmoFields.Add(new MiniYamlNode("SelfReloadTicks", reloadsPeriod.ToString())); + limitedAmmoFields.Add(new MiniYamlNode("ResetOnFire", reloadsResetOnFire.ToString())); + + node.Value.Nodes.RemoveAll(n => n.Key == "Reloads"); + node.Value.Nodes.RemoveAll(n => n.Key == "-Reloads"); + } + } + + // Moved RearmSound from Minelayer to LimitedAmmo/AmmoPool + if (depth == 0) + { + var actorTraits = node.Value.Nodes; + var limitedAmmo = actorTraits.FirstOrDefault(la => la.Key == "LimitedAmmo"); + var minelayer = actorTraits.FirstOrDefault(ml => ml.Key == "Minelayer"); + + if (minelayer != null) + { + var minelayerFields = minelayer.Value.Nodes; + var limitedAmmoFields = limitedAmmo.Value.Nodes; + var rearmSound = minelayerFields.FirstOrDefault(rs => rs.Key == "RearmSound"); + var minelayerRearmSound = rearmSound != null ? FieldLoader.GetValue("RearmSound", rearmSound.Value.Value) : "minelay1.aud"; + + limitedAmmoFields.Add(new MiniYamlNode("RearmSound", minelayerRearmSound.ToString())); + minelayerFields.Remove(rearmSound); + } + } + + // Rename LimitedAmmo to AmmoPool + if (node.Key == "LimitedAmmo") + node.Key = "AmmoPool"; + } + UpgradeActorRules(engineVersion, ref node.Value.Nodes, node, depth + 1); } }