diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddAirAttackTypes.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddAirAttackTypes.cs deleted file mode 100644 index 6c52700f16..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddAirAttackTypes.cs +++ /dev/null @@ -1,74 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class AddAirAttackTypes : UpdateRule - { - public override string Name { get { return "Add AttackType field to AttackAircraft"; } } - public override string Description - { - get - { - return "Aircraft attack behavior now depends on AttackAircraft.AttackType\n" - + "instead of Aircraft.CanHover."; - } - } - - readonly List> hoveringActors = new List>(); - - public override IEnumerable AfterUpdate(ModData modData) - { - var message = "Aircraft attack behavior (Hover or Strafe) is now controlled via AttackAircraft.AttackType.\n" - + "Aircraft with CanHover: true will now also need AttackType: Hover on AttackAircraft\n" - + "to maintain position while attacking as before.\n" - + "The following places might need manual changes:\n" - + UpdateUtils.FormatMessageList(hoveringActors.Select(n => n.Item1 + " (" + n.Item2 + ")")); - - if (hoveringActors.Any()) - yield return message; - - hoveringActors.Clear(); - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var aircraftTraits = actorNode.ChildrenMatching("Aircraft"); - var attackAircraftTraits = actorNode.ChildrenMatching("AttackAircraft"); - foreach (var attackAircraft in attackAircraftTraits) - { - var isHover = false; - foreach (var aircraft in aircraftTraits) - { - var canHoverNode = aircraft.LastChildMatching("CanHover"); - if (canHoverNode != null) - isHover = canHoverNode.NodeValue(); - - if (isHover) - break; - } - - // It's still possible that CanHover: true is inherited, so let modders check manually if 'false', - // otherwise add AttackType: Hover. - if (!isHover) - hoveringActors.Add(Tuple.Create(actorNode.Key, actorNode.Location.Filename)); - else - attackAircraft.AddNode("AttackType", "Hover"); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddAircraftIdleBehavior.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddAircraftIdleBehavior.cs deleted file mode 100644 index 5ee85e96b6..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddAircraftIdleBehavior.cs +++ /dev/null @@ -1,83 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class AddAircraftIdleBehavior : UpdateRule - { - public override string Name { get { return "Several aircraft traits and fields were replaced by Aircraft.IdleBehavior"; } } - public override string Description - { - get - { - return "ReturnOnIdle and FlyAwayOnIdle traits as well as LandWhenIdle boolean\n" - + "were replaced by Aircraft.IdleBehavior."; - } - } - - readonly List> returnOnIdles = new List>(); - - public override IEnumerable AfterUpdate(ModData modData) - { - var message = "ReturnOnIdle trait has been removed from the places listed below.\n" - + "Since this trait has been dysfunctional for a long time,\n" - + "IdleBehavior: ReturnToBase is NOT being set automatically.\n" - + "If you want your aircraft to return when idle, manually set it on the following definitions:\n" - + UpdateUtils.FormatMessageList(returnOnIdles.Select(n => n.Item1 + " (" + n.Item2 + ")")); - - if (returnOnIdles.Any()) - yield return message; - - returnOnIdles.Clear(); - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var aircraft = actorNode.LastChildMatching("Aircraft"); - var returnOnIdle = actorNode.LastChildMatching("ReturnOnIdle"); - var flyAwayOnIdle = actorNode.LastChildMatching("FlyAwayOnIdle"); - - if (aircraft != null) - { - var landWhenIdle = false; - var landWhenIdleNode = aircraft.LastChildMatching("LandWhenIdle"); - if (landWhenIdleNode != null) - { - landWhenIdle = landWhenIdleNode.NodeValue(); - aircraft.RemoveNode(landWhenIdleNode); - } - - // FlyAwayOnIdle should have had higher priority than LandWhenIdle even if both were 'true'. - // ReturnOnIdle has been broken for so long that it's safer to ignore it here and only inform - // the modder of the places it's been removed from, so they can change the IdleBehavior manually if desired. - if (flyAwayOnIdle != null && !flyAwayOnIdle.IsRemoval()) - aircraft.AddNode(new MiniYamlNode("IdleBehavior", "LeaveMap")); - else if (landWhenIdle) - aircraft.AddNode(new MiniYamlNode("IdleBehavior", "Land")); - } - - if (flyAwayOnIdle != null) - actorNode.RemoveNode(flyAwayOnIdle); - - if (returnOnIdle != null) - { - returnOnIdles.Add(Tuple.Create(actorNode.Key, actorNode.Location.Filename)); - actorNode.RemoveNode(returnOnIdle); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddCanSlide.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddCanSlide.cs deleted file mode 100644 index 1ea5d29ecf..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/AddCanSlide.cs +++ /dev/null @@ -1,48 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class AddCanSlide : UpdateRule - { - public override string Name { get { return "Split CanSlide from CanHover"; } } - public override string Description - { - get - { - return "Aircraft.CanHover was split into two flags; CanHover now only makes aircraft hover when idle,\n" - + "while CanSlide toggles the ability to immediately changing direction without flying a curve."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var aircraftTraits = actorNode.ChildrenMatching("Aircraft"); - foreach (var aircraft in aircraftTraits) - { - var canHover = false; - var canHoverNode = aircraft.LastChildMatching("CanHover"); - if (canHoverNode != null) - canHover = canHoverNode.NodeValue(); - else - yield break; - - aircraft.AddNode("CanSlide", canHover.ToString()); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MakeMobilePausableConditional.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MakeMobilePausableConditional.cs deleted file mode 100644 index 2d53793533..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MakeMobilePausableConditional.cs +++ /dev/null @@ -1,54 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class MakeMobilePausableConditional : UpdateRule - { - public override string Name { get { return "Change Mobile>RequiresCondition to PauseOnCondition"; } } - public override string Description - { - get - { - return "Mobile is now a PausableConditionalTrait instead of a ConditionalTrait.\n" + - "RequiresCondition is changed to PauseOnCondition."; - } - } - - bool displayedMessage; - public override IEnumerable AfterUpdate(ModData modData) - { - var message = "You may want to update the result of PauseOnCondition, as this update\n" + - "just adds ! prefix to RequiresCondition's value to reverse it."; - - if (!displayedMessage) - yield return message; - - displayedMessage = true; - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var node in actorNode.ChildrenMatching("Mobile").Where(t => t.ChildrenMatching("RequiresCondition").Any())) - { - var rc = node.LastChildMatching("RequiresCondition"); - - rc.ReplaceValue("!(" + rc.Value.Value + ")"); - rc.RenameKey("PauseOnCondition"); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MoveAbortOnResupply.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MoveAbortOnResupply.cs deleted file mode 100644 index f26a8668ac..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MoveAbortOnResupply.cs +++ /dev/null @@ -1,60 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class MoveAbortOnResupply : UpdateRule - { - public override string Name { get { return "Moved AbortOnResupply from Aircraft to AttackAircraft"; } } - public override string Description - { - get - { - return "AbortOnResupply boolean was moved to AttackAircraft."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var aircraft = actorNode.LastChildMatching("Aircraft"); - var attackAircraft = actorNode.ChildrenMatching("AttackAircraft"); - - if (aircraft != null) - { - var abortOnResupply = aircraft.LastChildMatching("AbortOnResupply"); - if (abortOnResupply == null) - yield break; - - // Only add field to AttackAircraft if explicitly set to 'false' - if (!abortOnResupply.NodeValue()) - { - if (attackAircraft.Any()) - foreach (var a in attackAircraft) - a.AddNode(abortOnResupply); - else - { - var newAttackAircraft = new MiniYamlNode("AttackAircraft", ""); - newAttackAircraft.AddNode(abortOnResupply); - actorNode.AddNode(newAttackAircraft); - } - } - - aircraft.RemoveNode(abortOnResupply); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MultipleDeploySounds.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MultipleDeploySounds.cs deleted file mode 100644 index da45439c35..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/MultipleDeploySounds.cs +++ /dev/null @@ -1,46 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class MultipleDeploySounds : UpdateRule - { - public override string Name { get { return "'GrantConditionOnDeploy' now supports multiple (un)deploy sounds"; } } - public override string Description - { - get - { - return "Renamed 'DeploySound' to 'DeploySounds' and 'UndeploySound' to 'UndeploySounds'\n" + - "on 'GrantConditionOnDeploy'."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var grants = actorNode.ChildrenMatching("GrantConditionOnDeploy"); - foreach (var g in grants) - { - var deploy = g.LastChildMatching("DeploySound"); - if (deploy != null) - deploy.RenameKey("DeploySounds"); - - var undeploy = g.LastChildMatching("UndeploySound"); - if (undeploy != null) - undeploy.RenameKey("UndeploySounds"); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RefactorHarvesterIdle.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RefactorHarvesterIdle.cs deleted file mode 100644 index 62cb90b655..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RefactorHarvesterIdle.cs +++ /dev/null @@ -1,40 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RefactorHarvesterIdle : UpdateRule - { - public override string Name { get { return "Refactor harvester idle behavior."; } } - public override string Description - { - get - { - return "The MaxIdleDuration parameter has been removed from the Harvester trait as part of a\n" + - " refactoring of harvester idling behavior."; - } - } - - readonly List locations = new List(); - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var t in actorNode.ChildrenMatching("Harvester")) - if (t.RemoveNodes("MaxIdleDuration") > 0) - locations.Add("{0} ({1})".F(actorNode.Key, actorNode.Location.Filename)); - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemoveMoveIntoWorldFromExit.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemoveMoveIntoWorldFromExit.cs deleted file mode 100644 index 6e26d046c4..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemoveMoveIntoWorldFromExit.cs +++ /dev/null @@ -1,38 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RemoveMoveIntoWorldFromExit : UpdateRule - { - public override string Name { get { return "Remove MoveIntoWorld from Exit."; } } - public override string Description - { - get - { - return "The MoveIntoWorld parameter has been removed from the Exit trait because it no\n" + - "longer serves a purpose (aircraft can now use the same exit procedure as other\n" + - "units)."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var t in actorNode.ChildrenMatching("Exit")) - t.RemoveNodes("MoveIntoWorld"); - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemovePlaceBuildingPalettes.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemovePlaceBuildingPalettes.cs deleted file mode 100644 index 4966d321b2..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemovePlaceBuildingPalettes.cs +++ /dev/null @@ -1,40 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RemovePlaceBuildingPalettes : UpdateRule - { - public override string Name { get { return "Remove Palette and LineBuildSegmentPalette from PlaceBuilding"; } } - public override string Description - { - get - { - return "The Palette and LineBuildSegmentPalette fields have been moved from PlaceBuilding,\n" + - "to the *PlaceBuildingPreview traits."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - // Repairable isn't conditional or otherwise supports multiple traits, so LastChildMatching should be fine. - foreach (var placeBuilding in actorNode.ChildrenMatching("PlaceBuilding")) - { - placeBuilding.RemoveNodes("Palette"); - placeBuilding.RemoveNodes("LineBuildSegmentPalette"); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemoveSimpleBeacon.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemoveSimpleBeacon.cs deleted file mode 100644 index ab54e94443..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RemoveSimpleBeacon.cs +++ /dev/null @@ -1,55 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RemoveSimpleBeacon : UpdateRule - { - public override string Name { get { return "Remove 'PlaceSimpleBeacon'."; } } - public override string Description - { - get - { - return "The 'PlaceSimpleBeacon' trait was removed.\n" + - "Use the new functionality of the 'PlaceBeacon' trait instead."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var psb = actorNode.LastChildMatching("PlaceSimpleBeacon"); - if (psb == null) - yield break; - - psb.RenameKey("PlaceBeacon"); - - var palette = psb.LastChildMatching("Palette"); - var isPlayer = psb.LastChildMatching("IsPlayerPalette"); - var sequence = psb.LastChildMatching("BeaconSequence"); - - if (palette == null) - psb.AddNode("Palette", "effect"); - - if (isPlayer == null) - psb.AddNode("IsPlayerPalette", "false"); - - if (sequence == null) - psb.AddNode("BeaconSequence", "idle"); - - psb.AddNode("ArrowSequence", ""); - psb.AddNode("CircleSequence", ""); - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameAttackMoveConditions.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameAttackMoveConditions.cs deleted file mode 100644 index 26b26949d1..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameAttackMoveConditions.cs +++ /dev/null @@ -1,43 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RenameAttackMoveConditions : UpdateRule - { - public override string Name { get { return "Rename AttackMove *ScanConditions"; } } - public override string Description - { - get - { - return "AttackMove's AttackMoveScanCondition and AssaultMoveScanCondition\n" + - "now remain active while attacking, and are have been renamed to\n" + - "AttackMoveCondition and AssaultMoveCondition to reflect this.\n"; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var at in actorNode.ChildrenMatching("AttackMove")) - { - foreach (var node in at.ChildrenMatching("AttackMoveScanCondition")) - node.RenameKey("AttackMoveCondition"); - - foreach (var node in at.ChildrenMatching("AssaultMoveScanCondition")) - node.RenameKey("AssaultMoveCondition"); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameCarryallDelays.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameCarryallDelays.cs deleted file mode 100644 index 8ccbcd1767..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameCarryallDelays.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RenameCarryallDelays : UpdateRule - { - public override string Name { get { return "Rename Carryall and Cargo delay parameters"; } } - public override string Description - { - get - { - return "Carryall's LoadingDelay and UnloadingDelay parameters have been renamed\n" - + "to BeforeLoadDelay and BeforeUnloadDelay to match new parameters on Cargo."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var carryall in actorNode.ChildrenMatching("Carryall")) - { - foreach (var node in carryall.ChildrenMatching("LoadingDelay")) - node.RenameKey("BeforeLoadDelay"); - - foreach (var node in carryall.ChildrenMatching("UnloadingDelay")) - node.RenameKey("BeforeUnloadDelay"); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameChronoshiftFootprint.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameChronoshiftFootprint.cs deleted file mode 100644 index 12eee24b6e..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameChronoshiftFootprint.cs +++ /dev/null @@ -1,46 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RenameChronoshiftFootprint : UpdateRule - { - public override string Name { get { return "Rename footprint related ChronoshiftPower parameters"; } } - public override string Description - { - get - { - return "The parameters that define the footprint tiles to use in ChronoshiftPower\n" + - "are renamed to follow standard conventions."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - // Repairable isn't conditional or otherwise supports multiple traits, so LastChildMatching should be fine. - foreach (var placeBuilding in actorNode.ChildrenMatching("ChronoshiftPower")) - { - placeBuilding.RenameChildrenMatching("OverlaySpriteGroup", "FootprintImage"); - placeBuilding.RenameChildrenMatching("InvalidTileSequencePrefix", "InvalidFootprintSequence"); - placeBuilding.RenameChildrenMatching("SourceTileSequencePrefix", "SourceFootprintSequence"); - foreach (var valid in placeBuilding.ChildrenMatching("ValidTileSequencePrefix")) - { - valid.RenameKey("ValidFootprintSequence"); - valid.Value.Value = valid.Value.Value.Substring(0, valid.Value.Value.Length - 1); - } - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameHoversOffsetModifier.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameHoversOffsetModifier.cs deleted file mode 100644 index b7d326906d..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameHoversOffsetModifier.cs +++ /dev/null @@ -1,38 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class RenameHoversOffsetModifier : UpdateRule - { - public override string Name { get { return "Rename Hovers OffsetModifier"; } } - public override string Description - { - get - { - return "Hovers' OffsetModifier was renamed to BobDistance,\n" + - "as 'Modifier' is a term we don't normally use for distance,\n" + - "while 'Offset' would imply a 3D vector, which isn't the case here."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var h in actorNode.ChildrenMatching("Hovers")) - foreach (var node in h.ChildrenMatching("OffsetModifier")) - node.RenameKey("BobDistance"); - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameSearchRadius.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameSearchRadius.cs deleted file mode 100644 index 69f1ec513c..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/RenameSearchRadius.cs +++ /dev/null @@ -1,35 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - class RenameSearchRadius : UpdateRule - { - public override string Name { get { return "Rename SearchFromOrderRadius to SearchFromHarvesterRadius"; } } - public override string Description - { - get - { - return "Renamed 'SearchFromOrderRadius' to 'SearchFromHarvesterRadius'."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - foreach (var harvester in actorNode.ChildrenMatching("Harvester")) - harvester.RenameChildrenMatching("SearchFromOrderRadius", "SearchFromHarvesterRadius"); - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/ReplaceSpecialMoveConsiderations.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/ReplaceSpecialMoveConsiderations.cs deleted file mode 100644 index b8d8d87c8b..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/ReplaceSpecialMoveConsiderations.cs +++ /dev/null @@ -1,78 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class ReplaceSpecialMoveConsiderations : UpdateRule - { - public override string Name { get { return "Replaced special-case movement type considerations"; } } - public override string Description - { - get - { - return "Removed AlwaysConsiderTurnAsMove from Mobile and ConsiderVerticalMovement\n" + - "from GrantConditionOnMovement. Add 'Turn' and/or 'Vertical' on new ValidMovementTypes\n" + - "fields on WithMoveAnimation and GrantConditionOnMovement instead."; - } - } - - readonly Dictionary> locations = new Dictionary>(); - - public override IEnumerable AfterUpdate(ModData modData) - { - if (locations.Any()) - yield return "The following definitions implement WithMoveAnimation\n" + - "or GrantConditionOnMovement. Check if they need updated ValidMovementTypes:\n" + - UpdateUtils.FormatMessageList(locations.Select( - kv => kv.Key + ":\n" + UpdateUtils.FormatMessageList(kv.Value))); - - locations.Clear(); - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var mobileNode = actorNode.ChildrenMatching("Mobile").FirstOrDefault(m => !m.IsRemoval()); - if (mobileNode != null) - { - var considerTurnAsMoveNode = mobileNode.LastChildMatching("AlwaysConsiderTurnAsMove"); - if (considerTurnAsMoveNode != null) - mobileNode.RemoveNode(considerTurnAsMoveNode); - } - - var used = new List(); - var grantMoveConditions = actorNode.ChildrenMatching("GrantConditionOnMovement"); - foreach (var g in grantMoveConditions) - { - var considerVerticalNode = g.LastChildMatching("ConsiderVerticalMovement"); - if (considerVerticalNode != null) - g.RemoveNode(considerVerticalNode); - } - - if (grantMoveConditions.Any()) - used.Add("GrantConditionOnMovement"); - - var moveAnim = actorNode.LastChildMatching("WithMoveAnimation"); - if (moveAnim != null) - used.Add("WithMoveAnimation"); - - if (used.Any()) - { - var location = "{0} ({1})".F(actorNode.Key, actorNode.Location.Filename); - locations[location] = used; - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/SplitHarvesterSpriteBody.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/SplitHarvesterSpriteBody.cs deleted file mode 100644 index 0e6564ef87..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/SplitHarvesterSpriteBody.cs +++ /dev/null @@ -1,64 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class SplitHarvesterSpriteBody : UpdateRule - { - public override string Name { get { return "Split fullness display from WithHarvestAnimation to new WithHarvesterSpriteBody"; } } - public override string Description - { - get - { - return "WithHarvestAnimation.PrefixByFullness logic was moved to a dedicated WithHarvesterSpriteBody."; - } - } - - readonly List> fullnessPrefixes = new List>(); - - public override IEnumerable AfterUpdate(ModData modData) - { - var message = "PrefixByFullness has been removed from WithHarvestAnimation.\n" - + "To display fullness levels, use the new WithHarvesterSpriteBody\n" - + "to switch between separate image sprites instead (see RA mod harvester for reference).\n" - + "The following places most likely need manual changes:\n" - + UpdateUtils.FormatMessageList(fullnessPrefixes.Select(n => n.Item1 + " (" + n.Item2 + ")")); - - if (fullnessPrefixes.Any()) - yield return message; - - fullnessPrefixes.Clear(); - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - var harvAnim = actorNode.LastChildMatching("WithHarvestAnimation"); - if (harvAnim != null) - { - var fullnessPrefix = harvAnim.LastChildMatching("PrefixByFullness"); - - // If PrefixByFullness is empty, no changes are needed. - if (fullnessPrefix == null) - yield break; - - harvAnim.RemoveNode(fullnessPrefix); - - fullnessPrefixes.Add(Tuple.Create(actorNode.Key, actorNode.Location.Filename)); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/StreamlineRepairableTraits.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20190314/StreamlineRepairableTraits.cs deleted file mode 100644 index 0e372ee977..0000000000 --- a/OpenRA.Mods.Common/UpdateRules/Rules/20190314/StreamlineRepairableTraits.cs +++ /dev/null @@ -1,56 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. For more - * information, see COPYING. - */ -#endregion - -using System.Collections.Generic; - -namespace OpenRA.Mods.Common.UpdateRules.Rules -{ - public class StreamlineRepairableTraits : UpdateRule - { - public override string Name { get { return "Streamline RepairableNear and Repairable"; } } - public override string Description - { - get - { - return "Renamed Repairable.RepairBuildings and RepairableNear.Buildings to RepairActors,\n" + - "for consistency with RearmActors (and since repairing at other actors should already be possible).\n" + - "Additionally, removed internal 'fix' and 'spen, syrd' default values."; - } - } - - public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) - { - // Repairable isn't conditional or otherwise supports multiple traits, so LastChildMatching should be fine. - var repairableNode = actorNode.LastChildMatching("Repairable"); - if (repairableNode != null) - { - var repairBuildings = repairableNode.LastChildMatching("RepairBuildings"); - if (repairBuildings != null) - repairBuildings.RenameKey("RepairActors"); - else - repairableNode.AddNode(new MiniYamlNode("RepairActors", "fix")); - } - - // RepairableNear isn't conditional or otherwise supports multiple traits, so LastChildMatching should be fine. - var repairableNearNode = actorNode.LastChildMatching("RepairableNear"); - if (repairableNearNode != null) - { - var repairBuildings = repairableNearNode.LastChildMatching("Buildings"); - if (repairBuildings != null) - repairBuildings.RenameKey("RepairActors"); - else - repairableNearNode.AddNode(new MiniYamlNode("RepairActors", "spen, syrd")); - } - - yield break; - } - } -} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index 5bfea952b2..f906f2f8f8 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -34,28 +34,6 @@ namespace OpenRA.Mods.Common.UpdateRules Justification = "Extracting update lists to temporary variables obfuscates the definitions.")] static readonly UpdatePath[] Paths = { - new UpdatePath("release-20190314", "release-20191117", new UpdateRule[] - { - new MultipleDeploySounds(), - new RemoveSimpleBeacon(), - new MakeMobilePausableConditional(), - new StreamlineRepairableTraits(), - new ReplaceSpecialMoveConsiderations(), - new RefactorHarvesterIdle(), - new SplitHarvesterSpriteBody(), - new RenameAttackMoveConditions(), - new RemovePlaceBuildingPalettes(), - new RenameHoversOffsetModifier(), - new AddAirAttackTypes(), - new MoveAbortOnResupply(), - new RenameCarryallDelays(), - new AddCanSlide(), - new AddAircraftIdleBehavior(), - new RenameSearchRadius(), - new RenameChronoshiftFootprint(), - new RemoveMoveIntoWorldFromExit(), - }), - new UpdatePath("release-20191117", "release-20200202", new UpdateRule[] { new ReplaceAttackTypeStrafe()