From 8e7de1a4fa0ae39dd43b4a92b0bf84ec24e0d63b Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Tue, 14 Mar 2017 22:37:43 -0500 Subject: [PATCH 1/5] Make UncloakOn Damage check sign with added Heal value for UncloakOn. --- OpenRA.Mods.Common/Traits/Cloak.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 2facb3f929..baa8e57633 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -29,7 +29,8 @@ namespace OpenRA.Mods.Common.Traits Infiltrate = 8, Demolish = 16, Damage = 32, - Dock = 64 + Heal = 64, + Dock = 128 } [Desc("This unit can cloak and uncloak in specific situations.")] @@ -101,7 +102,10 @@ namespace OpenRA.Mods.Common.Traits void INotifyDamage.Damaged(Actor self, AttackInfo e) { - if (Info.UncloakOn.HasFlag(UncloakType.Damage)) + if (e.Damage.Value == 0) + return; + + if (Info.UncloakOn.HasFlag(e.Damage.Value > 0 ? UncloakType.Damage : UncloakType.Heal)) Uncloak(); } From aa8c434668141f78e3c568e9af4e98795088ad9f Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Tue, 14 Mar 2017 23:41:38 -0500 Subject: [PATCH 2/5] Make Repair activity host actor the attacker for repairs. --- OpenRA.Mods.Common/Activities/Repair.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenRA.Mods.Common/Activities/Repair.cs b/OpenRA.Mods.Common/Activities/Repair.cs index a7230e13df..b6809c3043 100644 --- a/OpenRA.Mods.Common/Activities/Repair.cs +++ b/OpenRA.Mods.Common/Activities/Repair.cs @@ -84,7 +84,7 @@ namespace OpenRA.Mods.Common.Activities return this; } - self.InflictDamage(self, new Damage(-hpToRepair)); + self.InflictDamage(host.Actor, new Damage(-hpToRepair)); foreach (var depot in host.Actor.TraitsImplementing()) depot.Repairing(host.Actor, self); From d3e47205077698e2f0f6bd440117d31ff09bca3e Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Tue, 14 Mar 2017 23:45:14 -0500 Subject: [PATCH 3/5] Added UncloakOn: SelfHeal (not overlapping with Heal). --- OpenRA.Mods.Common/Traits/Cloak.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index baa8e57633..65acdf880b 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -30,7 +30,8 @@ namespace OpenRA.Mods.Common.Traits Demolish = 16, Damage = 32, Heal = 64, - Dock = 128 + SelfHeal = 128, + Dock = 256 } [Desc("This unit can cloak and uncloak in specific situations.")] @@ -42,7 +43,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Measured in game ticks.")] public readonly int CloakDelay = 30; - [Desc("Events leading to the actor getting uncloaked. Possible values are: Attack, Move, Unload, Infiltrate, Demolish, Dock and Damage")] + [Desc("Events leading to the actor getting uncloaked. Possible values are: Attack, Move, Unload, Infiltrate, Demolish, Dock, Damage, Heal and SelfHeal.")] public readonly UncloakType UncloakOn = UncloakType.Attack | UncloakType.Unload | UncloakType.Infiltrate | UncloakType.Demolish | UncloakType.Dock; @@ -105,7 +106,10 @@ namespace OpenRA.Mods.Common.Traits if (e.Damage.Value == 0) return; - if (Info.UncloakOn.HasFlag(e.Damage.Value > 0 ? UncloakType.Damage : UncloakType.Heal)) + var type = e.Damage.Value < 0 + ? (e.Attacker == self ? UncloakType.SelfHeal : UncloakType.Heal) + : UncloakType.Damage; + if (Info.UncloakOn.HasFlag(type)) Uncloak(); } From cca7eda5309d6aa3bfc2b9ce054db3e550640e67 Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Tue, 14 Mar 2017 22:42:53 -0500 Subject: [PATCH 4/5] Restore CloakOn: Heal behavior in mods via MiniYaml changes. --- mods/d2k/rules/infantry.yaml | 4 ++-- mods/d2k/rules/vehicles.yaml | 2 +- mods/ts/rules/defaults.yaml | 2 +- mods/ts/rules/nod-vehicles.yaml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml index 4f5a426f75..ed6be9226c 100644 --- a/mods/d2k/rules/infantry.yaml +++ b/mods/d2k/rules/infantry.yaml @@ -150,7 +150,7 @@ fremen: Cloak: InitialDelay: 85 CloakDelay: 85 - UncloakOn: Attack, Unload, Infiltrate, Demolish, Dock, Damage + UncloakOn: Attack, Unload, Infiltrate, Demolish, Dock, Damage, Heal CloakSound: STEALTH1.WAV UncloakSound: STEALTH2.WAV IsPlayerPalette: true @@ -251,7 +251,7 @@ saboteur: CloakDelay: 85 CloakSound: STEALTH1.WAV UncloakSound: STEALTH2.WAV - UncloakOn: Attack, Unload, Infiltrate, Demolish, Move, Damage + UncloakOn: Attack, Unload, Infiltrate, Demolish, Move, Damage, Heal IsPlayerPalette: true RequiresCondition: !cloak-force-disabled GrantConditionOnDamageState@UNCLOAK: diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml index 3825dd3a75..60c6db93b6 100644 --- a/mods/d2k/rules/vehicles.yaml +++ b/mods/d2k/rules/vehicles.yaml @@ -392,7 +392,7 @@ stealth_raider: Cloak: InitialDelay: 45 CloakDelay: 90 - UncloakOn: Attack, Unload, Infiltrate, Demolish, Dock, Damage + UncloakOn: Attack, Unload, Infiltrate, Demolish, Dock, Damage, Heal CloakSound: STEALTH1.WAV UncloakSound: STEALTH2.WAV IsPlayerPalette: true diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index 92bdfbaea9..7a2da51bf6 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -117,7 +117,7 @@ IsPlayerPalette: true CloakSound: cloak5.aud UncloakSound: cloak5.aud - UncloakOn: Attack, Unload, Infiltrate, Demolish, Damage + UncloakOn: Attack, Unload, Infiltrate, Demolish, Damage, Heal ExternalCondition@CLOAKGENERATOR: Condition: cloakgenerator ExternalCondition@CRATE-CLOAK: diff --git a/mods/ts/rules/nod-vehicles.yaml b/mods/ts/rules/nod-vehicles.yaml index 71080cbf7e..3f8663a16c 100644 --- a/mods/ts/rules/nod-vehicles.yaml +++ b/mods/ts/rules/nod-vehicles.yaml @@ -395,7 +395,7 @@ STNK: CloakSound: cloak5.aud UncloakSound: cloak5.aud IsPlayerPalette: true - UncloakOn: Attack, Unload, Infiltrate, Demolish, Damage + UncloakOn: Attack, Unload, Infiltrate, Demolish, Damage, Heal RequiresCondition: !cloak-force-disabled GrantConditionOnDamageState@UNCLOAK: Condition: cloak-force-disabled From abad50d2b9881cd256c7b653a122c07f23f51ac8 Mon Sep 17 00:00:00 2001 From: atlimit8 Date: Wed, 15 Mar 2017 00:18:53 -0500 Subject: [PATCH 5/5] MiniYaml upgrade rule for UncloakOn: Damage => Damage, Heal, SelfHeal --- OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs index 3290542159..3d2727d883 100644 --- a/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs +++ b/OpenRA.Mods.Common/UtilityCommands/UpgradeRules.cs @@ -573,6 +573,11 @@ namespace OpenRA.Mods.Common.UtilityCommands if (node.Key.StartsWith("DisguiseToolTip", StringComparison.Ordinal)) RenameNodeKey(node, "DisguiseTooltip"); + // Split UncloakOn: Damage => Damage, Heal, SelfHeal + if (engineVersion < 20170315) + if (node.Key.StartsWith("UncloakOn", StringComparison.Ordinal)) + node.Value.Value = node.Value.Value.Replace("Damage", "Damage, Heal, SelfHeal"); + UpgradeActorRules(modData, engineVersion, ref node.Value.Nodes, node, depth + 1); }