From cce9b06a40a807444eeae4a69ce2e02c8eba5516 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Thu, 14 Jun 2018 15:37:15 +0000 Subject: [PATCH] Move SupportPowerDecisions to a single parent node. This is required before we can force all trait properties to match a TraitInfo-defined field. --- .../AI/AISupportPowerManager.cs | 2 +- OpenRA.Mods.Common/AI/HackyAI.cs | 7 +- OpenRA.Mods.Common/OpenRA.Mods.Common.csproj | 1 + .../Rules/MoveHackyAISupportPowerDecisions.cs | 56 +++ OpenRA.Mods.Common/UpdateRules/UpdatePath.cs | 1 + mods/cnc/rules/ai.yaml | 351 ++++++++-------- mods/d2k/rules/ai.yaml | 243 +++++------ mods/ra/rules/ai.yaml | 388 +++++++++--------- 8 files changed, 559 insertions(+), 490 deletions(-) create mode 100644 OpenRA.Mods.Common/UpdateRules/Rules/MoveHackyAISupportPowerDecisions.cs diff --git a/OpenRA.Mods.Common/AI/AISupportPowerManager.cs b/OpenRA.Mods.Common/AI/AISupportPowerManager.cs index 8a71abe193..9104cfc307 100644 --- a/OpenRA.Mods.Common/AI/AISupportPowerManager.cs +++ b/OpenRA.Mods.Common/AI/AISupportPowerManager.cs @@ -37,7 +37,7 @@ namespace OpenRA.Mods.Common.AI player = p; frozenLayer = p.PlayerActor.Trait(); supportPowerManager = p.PlayerActor.TraitOrDefault(); - foreach (var decision in ai.Info.PowerDecisions) + foreach (var decision in ai.Info.SupportPowerDecisions) powerDecisions.Add(decision.OrderName, decision); } diff --git a/OpenRA.Mods.Common/AI/HackyAI.cs b/OpenRA.Mods.Common/AI/HackyAI.cs index a14b6e47e3..ecde59da1b 100644 --- a/OpenRA.Mods.Common/AI/HackyAI.cs +++ b/OpenRA.Mods.Common/AI/HackyAI.cs @@ -195,7 +195,7 @@ namespace OpenRA.Mods.Common.AI // TODO Update OpenRA.Utility/Command.cs#L300 to first handle lists and also read nested ones [Desc("Tells the AI how to use its support powers.")] [FieldLoader.LoadUsing("LoadDecisions")] - public readonly List PowerDecisions = new List(); + public readonly List SupportPowerDecisions = new List(); [Desc("Actor types that can capture other actors (via `Captures` or `ExternalCaptures`).", "Leave this empty to disable capturing.")] @@ -233,8 +233,9 @@ namespace OpenRA.Mods.Common.AI static object LoadDecisions(MiniYaml yaml) { var ret = new List(); - foreach (var d in yaml.Nodes) - if (d.Key.Split('@')[0] == "SupportPowerDecision") + var decisions = yaml.Nodes.FirstOrDefault(n => n.Key == "SupportPowerDecisions"); + if (decisions != null) + foreach (var d in decisions.Value.Nodes) ret.Add(new SupportPowerDecision(d.Value)); return ret; diff --git a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj index 0b3275c61e..5ba9556701 100644 --- a/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj +++ b/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj @@ -883,6 +883,7 @@ + diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/MoveHackyAISupportPowerDecisions.cs b/OpenRA.Mods.Common/UpdateRules/Rules/MoveHackyAISupportPowerDecisions.cs new file mode 100644 index 0000000000..be70f249f2 --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/MoveHackyAISupportPowerDecisions.cs @@ -0,0 +1,56 @@ +#region Copyright & License Information +/* + * Copyright 2007-2018 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 MoveHackyAISupportPowerDecisions : UpdateRule + { + public override string Name { get { return "Move HackyAI SupportPowerDecisions to a trait property"; } } + public override string Description + { + get + { + return "The SupportPowerDefinitions on HackyAI are moved from top-level trait properties\n" + + "to children of a single SupportPowerDecisions property."; + } + } + + public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) + { + foreach (var hackyAINode in actorNode.ChildrenMatching("HackyAI")) + { + var children = hackyAINode.ChildrenMatching("SupportPowerDecision"); + if (!children.Any()) + continue; + + var parent = hackyAINode.LastChildMatching("SupportPowerDecisions"); + if (parent == null) + { + parent = new MiniYamlNode("SupportPowerDecisions", ""); + hackyAINode.AddNode(parent); + } + + foreach (var child in children.ToList()) + { + var split = child.Key.Split('@'); + child.Key = split.Length > 1 ? split[1] : "Default"; + parent.AddNode(child); + hackyAINode.RemoveNode(child); + } + } + + yield break; + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index 9882844fa3..92373c284c 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -54,6 +54,7 @@ namespace OpenRA.Mods.Common.UpdateRules new DefineOwnerLostAction(), new RenameEmitInfantryOnSell(), new SplitRepairDecoration(), + new MoveHackyAISupportPowerDecisions(), }) }; diff --git a/mods/cnc/rules/ai.yaml b/mods/cnc/rules/ai.yaml index 18e14dc424..35958973d5 100644 --- a/mods/cnc/rules/ai.yaml +++ b/mods/cnc/rules/ai.yaml @@ -71,64 +71,65 @@ Player: UnitLimits: harv: 8 SquadSize: 15 - SupportPowerDecision@Airstrike: - OrderName: AirstrikePowerInfoOrder - MinimumAttractiveness: 2000 - Consideration@1: - Against: Enemy - Types: Vehicle, Infantry - Attractiveness: 3 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@2: - Against: Ally - Types: Ground, Water - Attractiveness: -20 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - SupportPowerDecision@IonCannonPower: - OrderName: IonCannonPowerInfoOrder - MinimumAttractiveness: 1000 - FineScanRadius: 2 - Consideration@1: - Against: Enemy - Types: Air, Tank, Vehicle, Infantry, Water - Attractiveness: 2 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@2: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Ally - Types: Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 3c0 - SupportPowerDecision@NukePower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + Airstrike: + OrderName: AirstrikePowerInfoOrder + MinimumAttractiveness: 2000 + Consideration@1: + Against: Enemy + Types: Vehicle, Infantry + Attractiveness: 3 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@2: + Against: Ally + Types: Ground, Water + Attractiveness: -20 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + IonCannonPower: + OrderName: IonCannonPowerInfoOrder + MinimumAttractiveness: 1000 + FineScanRadius: 2 + Consideration@1: + Against: Enemy + Types: Air, Tank, Vehicle, Infantry, Water + Attractiveness: 2 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@2: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Ally + Types: Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 3c0 + NukePower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 HackyAI@Watson: Name: Watson Type: watson @@ -201,64 +202,65 @@ Player: UnitLimits: harv: 8 SquadSize: 15 - SupportPowerDecision@Airstrike: - OrderName: AirstrikePowerInfoOrder - MinimumAttractiveness: 2000 - Consideration@1: - Against: Enemy - Types: Vehicle, Infantry - Attractiveness: 3 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@2: - Against: Ally - Types: Ground, Water - Attractiveness: -20 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - SupportPowerDecision@IonCannonPower: - OrderName: IonCannonPowerInfoOrder - MinimumAttractiveness: 1000 - FineScanRadius: 2 - Consideration@1: - Against: Enemy - Types: Air, Tank, Vehicle, Infantry, Water - Attractiveness: 2 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@2: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Ally - Types: Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 3c0 - SupportPowerDecision@NukePower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + Airstrike: + OrderName: AirstrikePowerInfoOrder + MinimumAttractiveness: 2000 + Consideration@1: + Against: Enemy + Types: Vehicle, Infantry + Attractiveness: 3 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@2: + Against: Ally + Types: Ground, Water + Attractiveness: -20 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + IonCannonPower: + OrderName: IonCannonPowerInfoOrder + MinimumAttractiveness: 1000 + FineScanRadius: 2 + Consideration@1: + Against: Enemy + Types: Air, Tank, Vehicle, Infantry, Water + Attractiveness: 2 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@2: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Ally + Types: Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 3c0 + NukePower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 HackyAI@HAL9001: Name: HAL 9001 Type: hal9001 @@ -333,61 +335,62 @@ Player: UnitLimits: harv: 8 SquadSize: 8 - SupportPowerDecision@Airstrike: - OrderName: AirstrikePowerInfoOrder - MinimumAttractiveness: 2000 - Consideration@1: - Against: Enemy - Types: Vehicle, Infantry - Attractiveness: 3 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@2: - Against: Ally - Types: Ground, Water - Attractiveness: -20 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - SupportPowerDecision@IonCannonPower: - OrderName: IonCannonPowerInfoOrder - MinimumAttractiveness: 1000 - FineScanRadius: 2 - Consideration@1: - Against: Enemy - Types: Air, Tank, Vehicle, Infantry, Water - Attractiveness: 2 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@2: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Ally - Types: Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 3c0 - SupportPowerDecision@NukePower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + Airstrike: + OrderName: AirstrikePowerInfoOrder + MinimumAttractiveness: 2000 + Consideration@1: + Against: Enemy + Types: Vehicle, Infantry + Attractiveness: 3 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@2: + Against: Ally + Types: Ground, Water + Attractiveness: -20 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + IonCannonPower: + OrderName: IonCannonPowerInfoOrder + MinimumAttractiveness: 1000 + FineScanRadius: 2 + Consideration@1: + Against: Enemy + Types: Air, Tank, Vehicle, Infantry, Water + Attractiveness: 2 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@2: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Ally + Types: Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 3c0 + NukePower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 diff --git a/mods/d2k/rules/ai.yaml b/mods/d2k/rules/ai.yaml index 0e86e686b3..dea45190c3 100644 --- a/mods/d2k/rules/ai.yaml +++ b/mods/d2k/rules/ai.yaml @@ -81,46 +81,47 @@ Player: carryall: 4 SquadSize: 8 MaxBaseRadius: 40 - SupportPowerDecision@Airstrike: - OrderName: AirstrikePowerInfoOrder - MinimumAttractiveness: 2000 - Consideration@1: - Against: Enemy - Types: Vehicle, Tank, Infantry - Attractiveness: 2 - TargetMetric: Value - CheckRadius: 3c0 - Consideration@2: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Ally - Types: Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 4c0 - SupportPowerDecision@NukePower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 - SupportPowerDecision@Fremen: - OrderName: ProduceActorPower.Fremen - Consideration@1: - Against: Ally + SupportPowerDecisions: + Airstrike: + OrderName: AirstrikePowerInfoOrder + MinimumAttractiveness: 2000 + Consideration@1: + Against: Enemy + Types: Vehicle, Tank, Infantry + Attractiveness: 2 + TargetMetric: Value + CheckRadius: 3c0 + Consideration@2: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Ally + Types: Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 4c0 + NukePower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 + Fremen: + OrderName: ProduceActorPower.Fremen + Consideration@1: + Against: Ally HackyAI@Vidius: Name: Vidious Type: vidious @@ -205,46 +206,47 @@ Player: carryall: 4 SquadSize: 6 MaxBaseRadius: 40 - SupportPowerDecision@Airstrike: - OrderName: AirstrikePowerInfoOrder - MinimumAttractiveness: 2000 - Consideration@1: - Against: Enemy - Types: Vehicle, Tank, Infantry - Attractiveness: 2 - TargetMetric: Value - CheckRadius: 3c0 - Consideration@2: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Ally - Types: Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 4c0 - SupportPowerDecision@NukePower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 - SupportPowerDecision@Fremen: - OrderName: ProduceActorPower.Fremen - Consideration@1: - Against: Ally + SupportPowerDecisions: + Airstrike: + OrderName: AirstrikePowerInfoOrder + MinimumAttractiveness: 2000 + Consideration@1: + Against: Enemy + Types: Vehicle, Tank, Infantry + Attractiveness: 2 + TargetMetric: Value + CheckRadius: 3c0 + Consideration@2: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Ally + Types: Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 4c0 + NukePower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 + Fremen: + OrderName: ProduceActorPower.Fremen + Consideration@1: + Against: Ally HackyAI@Gladius: Name: Gladius Type: gladius @@ -328,43 +330,44 @@ Player: carryall: 4 SquadSize: 10 MaxBaseRadius: 40 - SupportPowerDecision@Airstrike: - OrderName: AirstrikePowerInfoOrder - MinimumAttractiveness: 2000 - Consideration@1: - Against: Enemy - Types: Vehicle, Tank, Infantry - Attractiveness: 2 - TargetMetric: Value - CheckRadius: 3c0 - Consideration@2: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 2c0 - Consideration@3: - Against: Ally - Types: Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 4c0 - SupportPowerDecision@NukePower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 - SupportPowerDecision@Fremen: - OrderName: ProduceActorPower.Fremen - Consideration@1: - Against: Ally + SupportPowerDecisions: + Airstrike: + OrderName: AirstrikePowerInfoOrder + MinimumAttractiveness: 2000 + Consideration@1: + Against: Enemy + Types: Vehicle, Tank, Infantry + Attractiveness: 2 + TargetMetric: Value + CheckRadius: 3c0 + Consideration@2: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 2c0 + Consideration@3: + Against: Ally + Types: Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 4c0 + NukePower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 + Fremen: + OrderName: ProduceActorPower.Fremen + Consideration@1: + Against: Ally diff --git a/mods/ra/rules/ai.yaml b/mods/ra/rules/ai.yaml index 534ba2ff31..6996733cef 100644 --- a/mods/ra/rules/ai.yaml +++ b/mods/ra/rules/ai.yaml @@ -68,54 +68,55 @@ Player: dog: 4 harv: 8 SquadSize: 20 - SupportPowerDecision@spyplane: - OrderName: SovietSpyPlane - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@paratroopers: - OrderName: SovietParatroopers - MinimumAttractiveness: 5 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 8c0 - Consideration@2: - Against: Enemy - Types: Water - Attractiveness: -5 - TargetMetric: None - CheckRadius: 8c0 - SupportPowerDecision@parabombs: - OrderName: UkraineParabombs - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@nukepower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 HackyAI@NormalAI: Name: Normal AI Type: normal @@ -203,54 +204,55 @@ Player: dog: 4 harv: 8 SquadSize: 40 - SupportPowerDecision@spyplane: - OrderName: SovietSpyPlane - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@paratroopers: - OrderName: SovietParatroopers - MinimumAttractiveness: 5 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 8c0 - Consideration@2: - Against: Enemy - Types: Water - Attractiveness: -5 - TargetMetric: None - CheckRadius: 8c0 - SupportPowerDecision@parabombs: - OrderName: UkraineParabombs - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@nukepower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 HackyAI@TurtleAI: Name: Turtle AI Type: turtle @@ -338,54 +340,55 @@ Player: dog: 4 harv: 8 SquadSize: 10 - SupportPowerDecision@spyplane: - OrderName: SovietSpyPlane - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@paratroopers: - OrderName: SovietParatroopers - MinimumAttractiveness: 5 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 8c0 - Consideration@2: - Against: Enemy - Types: Water - Attractiveness: -5 - TargetMetric: None - CheckRadius: 8c0 - SupportPowerDecision@parabombs: - OrderName: UkraineParabombs - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@nukepower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0 HackyAI@NavalAI: Name: Naval AI Type: naval @@ -451,51 +454,52 @@ Player: UnitLimits: harv: 8 SquadSize: 1 - SupportPowerDecision@spyplane: - OrderName: SovietSpyPlane - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@paratroopers: - OrderName: SovietParatroopers - MinimumAttractiveness: 5 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 8c0 - Consideration@2: - Against: Enemy - Types: Water - Attractiveness: -5 - TargetMetric: None - CheckRadius: 8c0 - SupportPowerDecision@parabombs: - OrderName: UkraineParabombs - MinimumAttractiveness: 1 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: None - CheckRadius: 5c0 - SupportPowerDecision@nukepower: - OrderName: NukePowerInfoOrder - MinimumAttractiveness: 3000 - Consideration@1: - Against: Enemy - Types: Structure - Attractiveness: 1 - TargetMetric: Value - CheckRadius: 5c0 - Consideration@2: - Against: Ally - Types: Air, Ground, Water - Attractiveness: -10 - TargetMetric: Value - CheckRadius: 7c0 + SupportPowerDecisions: + spyplane: + OrderName: SovietSpyPlane + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + paratroopers: + OrderName: SovietParatroopers + MinimumAttractiveness: 5 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 8c0 + Consideration@2: + Against: Enemy + Types: Water + Attractiveness: -5 + TargetMetric: None + CheckRadius: 8c0 + parabombs: + OrderName: UkraineParabombs + MinimumAttractiveness: 1 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: None + CheckRadius: 5c0 + nukepower: + OrderName: NukePowerInfoOrder + MinimumAttractiveness: 3000 + Consideration@1: + Against: Enemy + Types: Structure + Attractiveness: 1 + TargetMetric: Value + CheckRadius: 5c0 + Consideration@2: + Against: Ally + Types: Air, Ground, Water + Attractiveness: -10 + TargetMetric: Value + CheckRadius: 7c0