From 1261d5891d33a67d2675ebfde404774fb54957b3 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 17:09:53 +1200 Subject: [PATCH 01/11] Move common DoImpact(Target) method into DamageWarhead. --- .../Warheads/AbsoluteSpreadDamageWarhead.cs | 13 ++----------- OpenRA.Game/GameRules/Warheads/DamageWarhead.cs | 12 ++++++++++++ .../Warheads/HealthPercentageDamageWarhead.cs | 13 ++----------- .../GameRules/Warheads/PerCellDamageWarhead.cs | 13 ++----------- .../GameRules/Warheads/SpreadDamageWarhead.cs | 13 ++----------- 5 files changed, 20 insertions(+), 44 deletions(-) diff --git a/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs index 223fb720d6..17a3398731 100644 --- a/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs +++ b/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs @@ -24,16 +24,7 @@ namespace OpenRA.GameRules [Desc("What factor to multiply the Damage by for this spread range.", "Each factor specified must have an associated Spread defined.")] public readonly float[] SpreadFactor = { 1f }; - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - // Used by traits that damage a single actor, rather than a position - if (target.Type == TargetType.Actor) - DoImpact(target.Actor, firedBy, firepowerModifier); - else - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { var world = firedBy.World; @@ -60,7 +51,7 @@ namespace OpenRA.GameRules } } - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) { if (IsValidAgainst(victim, firedBy)) { diff --git a/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs index a20cbd7435..6ecaadabc0 100644 --- a/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs +++ b/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs @@ -55,5 +55,17 @@ namespace OpenRA.GameRules float versus; return Versus.TryGetValue(armor.Type, out versus) ? versus : 1f; } + + public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) + { + // Used by traits that damage a single actor, rather than a position + if (target.Type == TargetType.Actor) + DoImpact(target.Actor, firedBy, firepowerModifier); + else + DoImpact(target.CenterPosition, firedBy, firepowerModifier); + } + + public abstract void DoImpact(Actor target, Actor firedBy, float firepowerModifier); + public abstract void DoImpact(WPos pos, Actor firedBy, float firepowerModifier); } } diff --git a/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs index fbbf802629..822a003786 100644 --- a/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs +++ b/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs @@ -21,16 +21,7 @@ namespace OpenRA.GameRules [Desc("Size of the area. Damage will be applied to this area.", "If two spreads are defined, the area of effect is a ring, where the second value is the inner radius.")] public readonly WRange[] Spread = { new WRange(43), WRange.Zero }; - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - // Used by traits that damage a single actor, rather than a position - if (target.Type == TargetType.Actor) - DoImpact(target.Actor, firedBy, firepowerModifier); - else - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { var world = firedBy.World; var range = Spread[0]; @@ -42,7 +33,7 @@ namespace OpenRA.GameRules DoImpact(victim, firedBy, firepowerModifier); } - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) { if (IsValidAgainst(victim, firedBy)) { diff --git a/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs index 4641834223..5f0a370bea 100644 --- a/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs +++ b/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs @@ -21,16 +21,7 @@ namespace OpenRA.GameRules [Desc("Size of the area. Damage will be applied to this area.")] public readonly int[] Size = { 0, 0 }; - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - // Used by traits that damage a single actor, rather than a position - if (target.Type == TargetType.Actor) - DoImpact(target.Actor, firedBy, firepowerModifier); - else - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { var world = firedBy.World; var targetTile = world.Map.CellContaining(pos); @@ -42,7 +33,7 @@ namespace OpenRA.GameRules DoImpact(victim, firedBy, firepowerModifier); } - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) { if (IsValidAgainst(victim, firedBy)) { diff --git a/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs index f9af6ea087..150739b302 100644 --- a/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs +++ b/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs @@ -21,16 +21,7 @@ namespace OpenRA.GameRules [Desc("For Normal DamageModel: Distance from the explosion center at which damage is 1/2.")] public readonly WRange Spread = new WRange(43); - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - // Used by traits that damage a single actor, rather than a position - if (target.Type == TargetType.Actor) - DoImpact(target.Actor, firedBy, firepowerModifier); - else - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { var world = firedBy.World; var maxSpread = new WRange((int)(Spread.Range * (float)Math.Log(Math.Abs(Damage), 2))); @@ -44,7 +35,7 @@ namespace OpenRA.GameRules } } - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) { if (IsValidAgainst(victim, firedBy)) { From 34ca30c9f1eb925eee55ea754589653af1147b9d Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 17:44:15 +1200 Subject: [PATCH 02/11] Remove more unnecessary plumbing. --- OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs | 8 ++------ OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs | 7 +------ OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs | 7 +------ OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs | 7 +------ 4 files changed, 5 insertions(+), 24 deletions(-) diff --git a/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs b/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs index 7fe28579de..0abcedfafd 100644 --- a/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs @@ -34,11 +34,6 @@ namespace OpenRA.Mods.RA [Desc("What impact types should this effect NOT apply to.", "Overrides ValidImpactTypes.")] public readonly ImpactType InvalidImpactTypes = ImpactType.None; - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - public static ImpactType GetImpactType(World world, CPos cell, WPos pos) { var isAir = pos.Z > 0; @@ -79,8 +74,9 @@ namespace OpenRA.Mods.RA return false; } - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) { + var pos = target.CenterPosition; var world = firedBy.World; var targetTile = world.Map.CellContaining(pos); var isValid = IsValidImpact(pos, firedBy); diff --git a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs index 86743323ce..cd088f7b84 100644 --- a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs @@ -27,17 +27,12 @@ namespace OpenRA.Mods.RA // TODO: Allow maximum resource splatter to be defined. (Per tile, and in total). public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { if (string.IsNullOrEmpty(AddsResourceType)) return; var world = firedBy.World; - var targetTile = world.Map.CellContaining(pos); + var targetTile = world.Map.CellContaining(target.CenterPosition); var resLayer = world.WorldActor.Trait(); var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; diff --git a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs index 4bde5a3693..bd4048a9d1 100644 --- a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs @@ -24,14 +24,9 @@ namespace OpenRA.Mods.RA // TODO: Allow maximum resource removal to be defined. (Per tile, and in total). public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { var world = firedBy.World; - var targetTile = world.Map.CellContaining(pos); + var targetTile = world.Map.CellContaining(target.CenterPosition); var resLayer = world.WorldActor.Trait(); var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; diff --git a/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs b/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs index 2b051f5555..27bc6e4096 100644 --- a/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs @@ -26,14 +26,9 @@ namespace OpenRA.Mods.RA public readonly string[] SmudgeType = { }; public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) - { - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) { var world = firedBy.World; - var targetTile = world.Map.CellContaining(pos); + var targetTile = world.Map.CellContaining(target.CenterPosition); var smudgeLayers = world.WorldActor.TraitsImplementing().ToDictionary(x => x.Info.Type); var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; From 8e8e02dae8364ce247b8bf0e4ad942b104a0973b Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 20:01:21 +1200 Subject: [PATCH 03/11] Move warheads into mod code. --- OpenRA.Game/GameRules/{Warheads => }/DamageWarhead.cs | 0 OpenRA.Game/OpenRA.Game.csproj | 6 +----- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 4 ++++ .../Warheads/AbsoluteSpreadDamageWarhead.cs | 3 ++- .../Warheads/HealthPercentageDamageWarhead.cs | 3 ++- .../Warheads/PerCellDamageWarhead.cs | 3 ++- .../Warheads/SpreadDamageWarhead.cs | 3 ++- 7 files changed, 13 insertions(+), 9 deletions(-) rename OpenRA.Game/GameRules/{Warheads => }/DamageWarhead.cs (100%) rename {OpenRA.Game/GameRules => OpenRA.Mods.RA}/Warheads/AbsoluteSpreadDamageWarhead.cs (97%) rename {OpenRA.Game/GameRules => OpenRA.Mods.RA}/Warheads/HealthPercentageDamageWarhead.cs (97%) rename {OpenRA.Game/GameRules => OpenRA.Mods.RA}/Warheads/PerCellDamageWarhead.cs (97%) rename {OpenRA.Game/GameRules => OpenRA.Mods.RA}/Warheads/SpreadDamageWarhead.cs (97%) diff --git a/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs b/OpenRA.Game/GameRules/DamageWarhead.cs similarity index 100% rename from OpenRA.Game/GameRules/Warheads/DamageWarhead.cs rename to OpenRA.Game/GameRules/DamageWarhead.cs diff --git a/OpenRA.Game/OpenRA.Game.csproj b/OpenRA.Game/OpenRA.Game.csproj index c66c36231f..626be20eaf 100644 --- a/OpenRA.Game/OpenRA.Game.csproj +++ b/OpenRA.Game/OpenRA.Game.csproj @@ -76,11 +76,6 @@ - - - - - @@ -247,6 +242,7 @@ + diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 6935478767..7ac4a7e41e 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -562,6 +562,10 @@ + + + + diff --git a/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs similarity index 97% rename from OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs rename to OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs index 17a3398731..defa314f15 100644 --- a/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs @@ -12,9 +12,10 @@ using System; using System.Collections.Generic; using System.Linq; using OpenRA.Effects; +using OpenRA.GameRules; using OpenRA.Traits; -namespace OpenRA.GameRules +namespace OpenRA.Mods.RA { public class AbsoluteSpreadDamageWarhead : DamageWarhead { diff --git a/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs similarity index 97% rename from OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs rename to OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs index 822a003786..2bab70e713 100644 --- a/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs @@ -12,9 +12,10 @@ using System; using System.Collections.Generic; using System.Linq; using OpenRA.Effects; +using OpenRA.GameRules; using OpenRA.Traits; -namespace OpenRA.GameRules +namespace OpenRA.Mods.RA { public class HealthPercentageDamageWarhead : DamageWarhead { diff --git a/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs similarity index 97% rename from OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs rename to OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs index 5f0a370bea..92e4e70e15 100644 --- a/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs @@ -12,9 +12,10 @@ using System; using System.Collections.Generic; using System.Linq; using OpenRA.Effects; +using OpenRA.GameRules; using OpenRA.Traits; -namespace OpenRA.GameRules +namespace OpenRA.Mods.RA { public class PerCellDamageWarhead : DamageWarhead { diff --git a/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs similarity index 97% rename from OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs rename to OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs index 150739b302..728f9f91e8 100644 --- a/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs @@ -12,9 +12,10 @@ using System; using System.Collections.Generic; using System.Linq; using OpenRA.Effects; +using OpenRA.GameRules; using OpenRA.Traits; -namespace OpenRA.GameRules +namespace OpenRA.Mods.RA { public class SpreadDamageWarhead : DamageWarhead { From 57ba1b54b4a50b4976f52734611ed5e88c1ecc9f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 17:33:50 +1200 Subject: [PATCH 04/11] Convert weapon plumbing to use integer damage modifiers. --- OpenRA.Game/GameRules/DamageWarhead.cs | 19 ++++++++++--------- OpenRA.Game/GameRules/Warhead.cs | 8 ++++---- OpenRA.Game/GameRules/WeaponInfo.cs | 6 +++--- OpenRA.Mods.Cnc/Effects/IonCannon.cs | 3 ++- OpenRA.Mods.Cnc/PoisonedByTiberium.cs | 2 +- OpenRA.Mods.D2k/DamagedWithoutFoundation.cs | 2 +- OpenRA.Mods.D2k/ThrowsShrapnel.cs | 6 ++---- OpenRA.Mods.RA/Air/FallsToEarth.cs | 3 ++- OpenRA.Mods.RA/Armament.cs | 6 ++---- OpenRA.Mods.RA/Bridge.cs | 2 +- OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs | 3 ++- OpenRA.Mods.RA/Effects/Bullet.cs | 2 +- OpenRA.Mods.RA/Effects/GravityBomb.cs | 2 +- OpenRA.Mods.RA/Effects/LaserZap.cs | 2 +- OpenRA.Mods.RA/Effects/Missile.cs | 2 +- OpenRA.Mods.RA/Effects/NukeLaunch.cs | 2 +- OpenRA.Mods.RA/Effects/TeslaZap.cs | 2 +- OpenRA.Mods.RA/Explodes.cs | 2 +- OpenRA.Mods.RA/MadTank.cs | 5 +++-- .../Warheads/AbsoluteSpreadDamageWarhead.cs | 18 ++++++++++-------- .../Warheads/CreateEffectWarhead.cs | 2 +- .../Warheads/CreateResourceWarhead.cs | 2 +- .../Warheads/DestroyResourceWarhead.cs | 2 +- .../Warheads/HealthPercentageDamageWarhead.cs | 14 ++++++-------- OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs | 2 +- .../Warheads/PerCellDamageWarhead.cs | 14 ++++++-------- .../Warheads/SpreadDamageWarhead.cs | 17 +++++++++-------- 27 files changed, 75 insertions(+), 75 deletions(-) diff --git a/OpenRA.Game/GameRules/DamageWarhead.cs b/OpenRA.Game/GameRules/DamageWarhead.cs index 6ecaadabc0..104c0ce0e0 100644 --- a/OpenRA.Game/GameRules/DamageWarhead.cs +++ b/OpenRA.Game/GameRules/DamageWarhead.cs @@ -42,30 +42,31 @@ namespace OpenRA.GameRules : new Dictionary(); } - public override float EffectivenessAgainst(ActorInfo ai) + public override int EffectivenessAgainst(ActorInfo ai) { var health = ai.Traits.GetOrDefault(); if (health == null) - return 0f; + return 0; var armor = ai.Traits.GetOrDefault(); if (armor == null || armor.Type == null) - return 1f; + return 100; + // TODO: Change versus definitions to integer percentages float versus; - return Versus.TryGetValue(armor.Type, out versus) ? versus : 1f; + return Versus.TryGetValue(armor.Type, out versus) ? (int)(versus * 100) : 100; } - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { // Used by traits that damage a single actor, rather than a position if (target.Type == TargetType.Actor) - DoImpact(target.Actor, firedBy, firepowerModifier); + DoImpact(target.Actor, firedBy, damageModifiers); else - DoImpact(target.CenterPosition, firedBy, firepowerModifier); + DoImpact(target.CenterPosition, firedBy, damageModifiers); } - public abstract void DoImpact(Actor target, Actor firedBy, float firepowerModifier); - public abstract void DoImpact(WPos pos, Actor firedBy, float firepowerModifier); + public abstract void DoImpact(Actor target, Actor firedBy, IEnumerable damageModifiers); + public abstract void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers); } } diff --git a/OpenRA.Game/GameRules/Warhead.cs b/OpenRA.Game/GameRules/Warhead.cs index 9bdd950ace..0dab3044c1 100644 --- a/OpenRA.Game/GameRules/Warhead.cs +++ b/OpenRA.Game/GameRules/Warhead.cs @@ -27,9 +27,9 @@ namespace OpenRA.GameRules [Desc("Delay in ticks before applying the warhead effect.","0 = instant (old model).")] public readonly int Delay = 0; - public abstract void DoImpact(Target target, Actor firedBy, float firepowerModifier); + public abstract void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers); - public virtual float EffectivenessAgainst(ActorInfo ai) { return 0f; } + public virtual int EffectivenessAgainst(ActorInfo ai) { return 0; } public bool IsValidAgainst(Target target, World world, Actor firedBy) { @@ -59,7 +59,7 @@ namespace OpenRA.GameRules public bool IsValidAgainst(Actor victim, Actor firedBy) { // If this warhead is ineffective against the target, then it is not a valid target - if (EffectivenessAgainst(victim.Info) <= 0f) + if (EffectivenessAgainst(victim.Info) <= 0) return false; // A target type is valid if it is in the valid targets list, and not in the invalid targets list. @@ -84,7 +84,7 @@ namespace OpenRA.GameRules public bool IsValidAgainst(FrozenActor victim, Actor firedBy) { // If this warhead is ineffective against the target, then it is not a valid target - if (EffectivenessAgainst(victim.Info) <= 0f) + if (EffectivenessAgainst(victim.Info) <= 0) return false; // A target type is valid if it is in the valid targets list, and not in the invalid targets list. diff --git a/OpenRA.Game/GameRules/WeaponInfo.cs b/OpenRA.Game/GameRules/WeaponInfo.cs index 4f8f46c98b..796bef68da 100644 --- a/OpenRA.Game/GameRules/WeaponInfo.cs +++ b/OpenRA.Game/GameRules/WeaponInfo.cs @@ -19,7 +19,7 @@ namespace OpenRA.GameRules public class ProjectileArgs { public WeaponInfo Weapon; - public float FirepowerModifier = 1.0f; + public IEnumerable DamageModifiers; public int Facing; public WPos Source; public Actor SourceActor; @@ -144,13 +144,13 @@ namespace OpenRA.GameRules return true; } - public void Impact(WPos pos, Actor firedBy, float damageModifier) + public void Impact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { foreach (var wh in Warheads) { Action a; - a = () => wh.DoImpact(Target.FromPos(pos), firedBy, damageModifier); + a = () => wh.DoImpact(Target.FromPos(pos), firedBy, damageModifiers); if (wh.Delay > 0) firedBy.World.AddFrameEndTask( w => w.Add(new DelayedAction(wh.Delay, a))); diff --git a/OpenRA.Mods.Cnc/Effects/IonCannon.cs b/OpenRA.Mods.Cnc/Effects/IonCannon.cs index 114e57170b..2dac66756c 100644 --- a/OpenRA.Mods.Cnc/Effects/IonCannon.cs +++ b/OpenRA.Mods.Cnc/Effects/IonCannon.cs @@ -9,6 +9,7 @@ #endregion using System.Collections.Generic; +using System.Linq; using OpenRA.Effects; using OpenRA.GameRules; using OpenRA.Graphics; @@ -45,7 +46,7 @@ namespace OpenRA.Mods.Cnc.Effects if (!impacted && weaponDelay-- <= 0) { var weapon = world.Map.Rules.Weapons[this.weapon.ToLowerInvariant()]; - weapon.Impact(target.CenterPosition, firedBy.PlayerActor, 1f); + weapon.Impact(target.CenterPosition, firedBy.PlayerActor, Enumerable.Empty()); impacted = true; } } diff --git a/OpenRA.Mods.Cnc/PoisonedByTiberium.cs b/OpenRA.Mods.Cnc/PoisonedByTiberium.cs index 2b5d795f51..80f4aebb3e 100644 --- a/OpenRA.Mods.Cnc/PoisonedByTiberium.cs +++ b/OpenRA.Mods.Cnc/PoisonedByTiberium.cs @@ -43,7 +43,7 @@ namespace OpenRA.Mods.Cnc if (!info.Resources.Contains(r.Info.Name)) return; var weapon = self.World.Map.Rules.Weapons[info.Weapon.ToLowerInvariant()]; - weapon.Impact(self.CenterPosition, self.World.WorldActor, 1f); + weapon.Impact(self.CenterPosition, self.World.WorldActor, Enumerable.Empty()); poisonTicks = weapon.ReloadDelay; } } diff --git a/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs b/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs index c30edebde6..4ce49437e1 100644 --- a/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs +++ b/OpenRA.Mods.D2k/DamagedWithoutFoundation.cs @@ -65,7 +65,7 @@ namespace OpenRA.Mods.D2k if (health.HP <= damageThreshold || --damageTicks > 0) return; - weapon.Impact(self.CenterPosition, self.World.WorldActor, 1f); + weapon.Impact(self.CenterPosition, self.World.WorldActor, Enumerable.Empty()); damageTicks = weapon.ReloadDelay; } } diff --git a/OpenRA.Mods.D2k/ThrowsShrapnel.cs b/OpenRA.Mods.D2k/ThrowsShrapnel.cs index 32e963acad..61a89b4a27 100644 --- a/OpenRA.Mods.D2k/ThrowsShrapnel.cs +++ b/OpenRA.Mods.D2k/ThrowsShrapnel.cs @@ -49,10 +49,8 @@ namespace OpenRA.Mods.D2k Weapon = wep, Facing = self.World.SharedRandom.Next(-1, 255), - // TODO: Convert to ints - FirepowerModifier = self.TraitsImplementing() - .Select(a => a.GetFirepowerModifier() / 100f) - .Product(), + DamageModifiers = self.TraitsImplementing() + .Select(a => a.GetFirepowerModifier()), Source = self.CenterPosition, SourceActor = self, diff --git a/OpenRA.Mods.RA/Air/FallsToEarth.cs b/OpenRA.Mods.RA/Air/FallsToEarth.cs index 06394aa455..2d6654fc8f 100755 --- a/OpenRA.Mods.RA/Air/FallsToEarth.cs +++ b/OpenRA.Mods.RA/Air/FallsToEarth.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Linq; using OpenRA.GameRules; using OpenRA.Traits; @@ -54,7 +55,7 @@ namespace OpenRA.Mods.RA.Air if (info.Explosion != null) { var weapon = self.World.Map.Rules.Weapons[info.Explosion.ToLowerInvariant()]; - weapon.Impact(self.CenterPosition, self, 1f); + weapon.Impact(self.CenterPosition, self, Enumerable.Empty()); } self.Destroy(); diff --git a/OpenRA.Mods.RA/Armament.cs b/OpenRA.Mods.RA/Armament.cs index 397bab0986..e1f68f8053 100644 --- a/OpenRA.Mods.RA/Armament.cs +++ b/OpenRA.Mods.RA/Armament.cs @@ -154,10 +154,8 @@ namespace OpenRA.Mods.RA Weapon = Weapon, Facing = legacyFacing, - // TODO: Convert to ints - FirepowerModifier = self.TraitsImplementing() - .Select(a => a.GetFirepowerModifier() / 100f) - .Product(), + DamageModifiers = self.TraitsImplementing() + .Select(a => a.GetFirepowerModifier()), Source = muzzlePosition, SourceActor = self, diff --git a/OpenRA.Mods.RA/Bridge.cs b/OpenRA.Mods.RA/Bridge.cs index edae6bdbac..72cbf990af 100644 --- a/OpenRA.Mods.RA/Bridge.cs +++ b/OpenRA.Mods.RA/Bridge.cs @@ -299,7 +299,7 @@ namespace OpenRA.Mods.RA self.World.AddFrameEndTask(w => { var weapon = saboteur.World.Map.Rules.Weapons[Info.DemolishWeapon.ToLowerInvariant()]; - weapon.Impact(self.CenterPosition, saboteur, 1f); + weapon.Impact(self.CenterPosition, saboteur, Enumerable.Empty()); self.World.WorldActor.Trait().AddEffect(15, self.CenterPosition, 6); self.Kill(saboteur); }); diff --git a/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs b/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs index 9a6edeafec..27521ffc24 100644 --- a/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs +++ b/OpenRA.Mods.RA/Crates/ExplodeCrateAction.cs @@ -8,6 +8,7 @@ */ #endregion +using System.Linq; using OpenRA.GameRules; using OpenRA.Traits; @@ -30,7 +31,7 @@ namespace OpenRA.Mods.RA public override void Activate(Actor collector) { var weapon = self.World.Map.Rules.Weapons[((ExplodeCrateActionInfo)info).Weapon.ToLowerInvariant()]; - weapon.Impact(collector.CenterPosition, self, 1f); + weapon.Impact(collector.CenterPosition, self, Enumerable.Empty()); base.Activate(collector); } } diff --git a/OpenRA.Mods.RA/Effects/Bullet.cs b/OpenRA.Mods.RA/Effects/Bullet.cs index efc63893c0..9a4d171285 100755 --- a/OpenRA.Mods.RA/Effects/Bullet.cs +++ b/OpenRA.Mods.RA/Effects/Bullet.cs @@ -172,7 +172,7 @@ namespace OpenRA.Mods.RA.Effects world.AddFrameEndTask(w => w.Remove(this)); - args.Weapon.Impact(pos, args.SourceActor, args.FirepowerModifier); + args.Weapon.Impact(pos, args.SourceActor, args.DamageModifiers); } } } diff --git a/OpenRA.Mods.RA/Effects/GravityBomb.cs b/OpenRA.Mods.RA/Effects/GravityBomb.cs index 4a2af0fefd..e2eeeaf5ba 100644 --- a/OpenRA.Mods.RA/Effects/GravityBomb.cs +++ b/OpenRA.Mods.RA/Effects/GravityBomb.cs @@ -56,7 +56,7 @@ namespace OpenRA.Mods.RA.Effects { pos += new WVec(0, 0, args.PassiveTarget.Z - pos.Z); world.AddFrameEndTask(w => w.Remove(this)); - args.Weapon.Impact(pos, args.SourceActor, args.FirepowerModifier); + args.Weapon.Impact(pos, args.SourceActor, args.DamageModifiers); } anim.Tick(); diff --git a/OpenRA.Mods.RA/Effects/LaserZap.cs b/OpenRA.Mods.RA/Effects/LaserZap.cs index ce4b638178..a38c38c09a 100644 --- a/OpenRA.Mods.RA/Effects/LaserZap.cs +++ b/OpenRA.Mods.RA/Effects/LaserZap.cs @@ -69,7 +69,7 @@ namespace OpenRA.Mods.RA.Effects if (hitanim != null) hitanim.PlayThen("idle", () => animationComplete = true); - args.Weapon.Impact(target, args.SourceActor, args.FirepowerModifier); + args.Weapon.Impact(target, args.SourceActor, args.DamageModifiers); doneDamage = true; } diff --git a/OpenRA.Mods.RA/Effects/Missile.cs b/OpenRA.Mods.RA/Effects/Missile.cs index c7a62b8896..20eba6f224 100755 --- a/OpenRA.Mods.RA/Effects/Missile.cs +++ b/OpenRA.Mods.RA/Effects/Missile.cs @@ -180,7 +180,7 @@ namespace OpenRA.Mods.RA.Effects if (ticks <= info.Arm) return; - args.Weapon.Impact(pos, args.SourceActor, args.FirepowerModifier); + args.Weapon.Impact(pos, args.SourceActor, args.DamageModifiers); } public IEnumerable Render(WorldRenderer wr) diff --git a/OpenRA.Mods.RA/Effects/NukeLaunch.cs b/OpenRA.Mods.RA/Effects/NukeLaunch.cs index 7db0ba0ddb..bce7fab50f 100755 --- a/OpenRA.Mods.RA/Effects/NukeLaunch.cs +++ b/OpenRA.Mods.RA/Effects/NukeLaunch.cs @@ -81,7 +81,7 @@ namespace OpenRA.Mods.RA.Effects { world.AddFrameEndTask(w => w.Remove(this)); var weapon = world.Map.Rules.Weapons[this.weapon.ToLowerInvariant()]; - weapon.Impact(pos, firedBy.PlayerActor, 1f); + weapon.Impact(pos, firedBy.PlayerActor, Enumerable.Empty()); world.WorldActor.Trait().AddEffect(20, pos, 5); foreach (var a in world.ActorsWithTrait()) diff --git a/OpenRA.Mods.RA/Effects/TeslaZap.cs b/OpenRA.Mods.RA/Effects/TeslaZap.cs index 9026dcce3a..59b5f1dc36 100644 --- a/OpenRA.Mods.RA/Effects/TeslaZap.cs +++ b/OpenRA.Mods.RA/Effects/TeslaZap.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Effects if (!doneDamage) { var pos = Args.GuidedTarget.IsValidFor(Args.SourceActor) ? Args.GuidedTarget.CenterPosition : Args.PassiveTarget; - Args.Weapon.Impact(pos, Args.SourceActor, Args.FirepowerModifier); + Args.Weapon.Impact(pos, Args.SourceActor, Args.DamageModifiers); doneDamage = true; } } diff --git a/OpenRA.Mods.RA/Explodes.cs b/OpenRA.Mods.RA/Explodes.cs index da310d9c6b..a2af881410 100644 --- a/OpenRA.Mods.RA/Explodes.cs +++ b/OpenRA.Mods.RA/Explodes.cs @@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA if (weapon.Report != null && weapon.Report.Any()) Sound.Play(weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition); - weapon.Impact(self.CenterPosition, e.Attacker, 1f); + weapon.Impact(self.CenterPosition, e.Attacker, Enumerable.Empty()); } } diff --git a/OpenRA.Mods.RA/MadTank.cs b/OpenRA.Mods.RA/MadTank.cs index 93a3a113b0..cb6ed97a4c 100644 --- a/OpenRA.Mods.RA/MadTank.cs +++ b/OpenRA.Mods.RA/MadTank.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.Drawing; +using System.Linq; using OpenRA.GameRules; using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Move; @@ -71,7 +72,7 @@ namespace OpenRA.Mods.RA if (info.ThumpDamageWeapon != null) { var weapon = self.World.Map.Rules.Weapons[info.ThumpDamageWeapon.ToLowerInvariant()]; - weapon.Impact(self.CenterPosition, self, 1f); + weapon.Impact(self.CenterPosition, self, Enumerable.Empty()); } screenShaker.AddEffect(info.ThumpShakeTime, self.CenterPosition, info.ThumpShakeIntensity, info.ThumpShakeMultiplier); tick = 0; @@ -110,7 +111,7 @@ namespace OpenRA.Mods.RA if (info.DetonationWeapon != null) { var weapon = self.World.Map.Rules.Weapons[info.DetonationWeapon.ToLowerInvariant()]; - weapon.Impact(self.CenterPosition, self, 1f); + weapon.Impact(self.CenterPosition, self, Enumerable.Empty()); } self.Kill(self); }); diff --git a/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs index defa314f15..7870fbf5bf 100644 --- a/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA [Desc("What factor to multiply the Damage by for this spread range.", "Each factor specified must have an associated Spread defined.")] public readonly float[] SpreadFactor = { 1f }; - public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { var world = firedBy.World; @@ -44,33 +44,35 @@ namespace OpenRA.Mods.RA hitActors.Except(world.FindActorsInCircle(pos, previousSpread)); foreach (var victim in hitActors) + { if (IsValidAgainst(victim, firedBy)) { - var damage = GetDamageToInflict(victim, firedBy, firepowerModifier * currentFactor); + // TODO: Keep currentFactor as int from the start + var damage = GetDamageToInflict(victim, firedBy, damageModifiers.Append((int)(currentFactor * 100))); victim.InflictDamage(firedBy, damage, this); } + } } } - public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) { if (IsValidAgainst(victim, firedBy)) { + // TODO: Keep currentFactor as int from the start var currentFactor = SpreadFactor[0]; - var damage = (int)GetDamageToInflict(victim, firedBy, firepowerModifier * currentFactor); + var damage = GetDamageToInflict(victim, firedBy, damageModifiers.Append((int)(currentFactor * 100))); victim.InflictDamage(firedBy, damage, this); } } - public int GetDamageToInflict(Actor target, Actor firedBy, float modifier) + public int GetDamageToInflict(Actor target, Actor firedBy, IEnumerable damageModifiers) { var healthInfo = target.Info.Traits.GetOrDefault(); if (healthInfo == null) return 0; - var rawDamage = (float)Damage; - - return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info)); + return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info))); } } } diff --git a/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs b/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs index 0abcedfafd..91bf3af422 100644 --- a/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs @@ -74,7 +74,7 @@ namespace OpenRA.Mods.RA return false; } - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { var pos = target.CenterPosition; var world = firedBy.World; diff --git a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs index cd088f7b84..d80c01e04f 100644 --- a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA // TODO: Allow maximum resource splatter to be defined. (Per tile, and in total). - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { if (string.IsNullOrEmpty(AddsResourceType)) return; diff --git a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs index bd4048a9d1..07e64a288c 100644 --- a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs @@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA // TODO: Allow maximum resource removal to be defined. (Per tile, and in total). - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { var world = firedBy.World; var targetTile = world.Map.CellContaining(target.CenterPosition); diff --git a/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs index 2bab70e713..98dc341b23 100644 --- a/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA [Desc("Size of the area. Damage will be applied to this area.", "If two spreads are defined, the area of effect is a ring, where the second value is the inner radius.")] public readonly WRange[] Spread = { new WRange(43), WRange.Zero }; - public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { var world = firedBy.World; var range = Spread[0]; @@ -31,14 +31,14 @@ namespace OpenRA.Mods.RA hitActors.Except(world.FindActorsInCircle(pos, Spread[1])); foreach (var victim in hitActors) - DoImpact(victim, firedBy, firepowerModifier); + DoImpact(victim, firedBy, damageModifiers); } - public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) { if (IsValidAgainst(victim, firedBy)) { - var damage = GetDamageToInflict(victim, firedBy, firepowerModifier); + var damage = GetDamageToInflict(victim, firedBy, damageModifiers); if (damage != 0) // will be 0 if the target doesn't have HealthInfo { var healthInfo = victim.Info.Traits.Get(); @@ -49,15 +49,13 @@ namespace OpenRA.Mods.RA } } - public float GetDamageToInflict(Actor target, Actor firedBy, float modifier) + public float GetDamageToInflict(Actor target, Actor firedBy, IEnumerable damageModifiers) { var healthInfo = target.Info.Traits.GetOrDefault(); if (healthInfo == null) return 0; - var rawDamage = (float)Damage; - - return rawDamage * modifier * EffectivenessAgainst(target.Info); + return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info))); } } } diff --git a/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs b/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs index 27bc6e4096..a8f944fc4b 100644 --- a/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs @@ -25,7 +25,7 @@ namespace OpenRA.Mods.RA [Desc("Type of smudge to apply to terrain.")] public readonly string[] SmudgeType = { }; - public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { var world = firedBy.World; var targetTile = world.Map.CellContaining(target.CenterPosition); diff --git a/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs index 92e4e70e15..f17f2b36aa 100644 --- a/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs @@ -22,7 +22,7 @@ namespace OpenRA.Mods.RA [Desc("Size of the area. Damage will be applied to this area.")] public readonly int[] Size = { 0, 0 }; - public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { var world = firedBy.World; var targetTile = world.Map.CellContaining(pos); @@ -31,27 +31,25 @@ namespace OpenRA.Mods.RA foreach (var t in affectedTiles) foreach (var victim in world.ActorMap.GetUnitsAt(t)) - DoImpact(victim, firedBy, firepowerModifier); + DoImpact(victim, firedBy, damageModifiers); } - public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) { if (IsValidAgainst(victim, firedBy)) { - var damage = GetDamageToInflict(victim, firedBy, firepowerModifier); + var damage = GetDamageToInflict(victim, firedBy, damageModifiers); victim.InflictDamage(firedBy, damage, this); } } - public int GetDamageToInflict(Actor target, Actor firedBy, float modifier) + public int GetDamageToInflict(Actor target, Actor firedBy, IEnumerable damageModifiers) { var healthInfo = target.Info.Traits.GetOrDefault(); if (healthInfo == null) return 0; - var rawDamage = (float)Damage; - - return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info)); + return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info))); } } } diff --git a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs index 728f9f91e8..bca54147c4 100644 --- a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs @@ -22,40 +22,41 @@ namespace OpenRA.Mods.RA [Desc("For Normal DamageModel: Distance from the explosion center at which damage is 1/2.")] public readonly WRange Spread = new WRange(43); - public override void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { var world = firedBy.World; var maxSpread = new WRange((int)(Spread.Range * (float)Math.Log(Math.Abs(Damage), 2))); var hitActors = world.FindActorsInCircle(pos, maxSpread); foreach (var victim in hitActors) + { if (IsValidAgainst(victim, firedBy)) { - var damage = (int)GetDamageToInflict(pos, victim, firedBy, firepowerModifier); + var damage = (int)GetDamageToInflict(pos, victim, firedBy, damageModifiers); victim.InflictDamage(firedBy, damage, this); } + } } - public override void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) + public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) { if (IsValidAgainst(victim, firedBy)) { - var damage = GetDamageToInflict(victim.CenterPosition, victim, firedBy, firepowerModifier); + var damage = GetDamageToInflict(victim.CenterPosition, victim, firedBy, damageModifiers); victim.InflictDamage(firedBy, damage, this); } } - public int GetDamageToInflict(WPos pos, Actor target, Actor firedBy, float modifier) + public int GetDamageToInflict(WPos pos, Actor target, Actor firedBy, IEnumerable damageModifiers) { var healthInfo = target.Info.Traits.GetOrDefault(); if (healthInfo == null) return 0; var distance = Math.Max(0, (target.CenterPosition - pos).Length - healthInfo.Radius.Range); - var falloff = (float)GetDamageFalloff(distance * 1f / Spread.Range); - var rawDamage = (float)(falloff * Damage); + var falloff = (int)(100 * GetDamageFalloff(distance * 1f / Spread.Range)); - return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info)); + return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info), falloff)); } static readonly float[] falloff = From 227a523878aef9ca19b5386ba1807e7a3ae7943d Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 18:57:43 +1200 Subject: [PATCH 05/11] Further warhead streamlining. --- OpenRA.Game/GameRules/DamageWarhead.cs | 29 +++++++++++----- .../Warheads/AbsoluteSpreadDamageWarhead.cs | 30 ++-------------- .../Warheads/HealthPercentageDamageWarhead.cs | 23 +++---------- .../Warheads/PerCellDamageWarhead.cs | 18 ---------- .../Warheads/SpreadDamageWarhead.cs | 34 ++++++------------- 5 files changed, 38 insertions(+), 96 deletions(-) diff --git a/OpenRA.Game/GameRules/DamageWarhead.cs b/OpenRA.Game/GameRules/DamageWarhead.cs index 104c0ce0e0..7ec8a1ddd7 100644 --- a/OpenRA.Game/GameRules/DamageWarhead.cs +++ b/OpenRA.Game/GameRules/DamageWarhead.cs @@ -42,19 +42,27 @@ namespace OpenRA.GameRules : new Dictionary(); } + public int DamageVersus(ActorInfo victim) + { + var armor = victim.Traits.GetOrDefault(); + if (armor == null || armor.Type == null) + return 100; + + // TODO: Change versus definitions to integer percentages + float versus; + if (Versus.TryGetValue(armor.Type, out versus)) + return (int)(versus * 100); + + return 100; + } + public override int EffectivenessAgainst(ActorInfo ai) { var health = ai.Traits.GetOrDefault(); if (health == null) return 0; - var armor = ai.Traits.GetOrDefault(); - if (armor == null || armor.Type == null) - return 100; - - // TODO: Change versus definitions to integer percentages - float versus; - return Versus.TryGetValue(armor.Type, out versus) ? (int)(versus * 100) : 100; + return DamageVersus(ai); } public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) @@ -66,7 +74,12 @@ namespace OpenRA.GameRules DoImpact(target.CenterPosition, firedBy, damageModifiers); } - public abstract void DoImpact(Actor target, Actor firedBy, IEnumerable damageModifiers); public abstract void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers); + + public virtual void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) + { + var damage = Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(DamageVersus(victim.Info))); + victim.InflictDamage(firedBy, damage, this); + } } } diff --git a/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs index 7870fbf5bf..012ff5f476 100644 --- a/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs @@ -43,36 +43,10 @@ namespace OpenRA.Mods.RA if (previousSpread.Range > 0) hitActors.Except(world.FindActorsInCircle(pos, previousSpread)); - foreach (var victim in hitActors) - { - if (IsValidAgainst(victim, firedBy)) - { - // TODO: Keep currentFactor as int from the start - var damage = GetDamageToInflict(victim, firedBy, damageModifiers.Append((int)(currentFactor * 100))); - victim.InflictDamage(firedBy, damage, this); - } - } - } - } - - public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) - { - if (IsValidAgainst(victim, firedBy)) - { // TODO: Keep currentFactor as int from the start - var currentFactor = SpreadFactor[0]; - var damage = GetDamageToInflict(victim, firedBy, damageModifiers.Append((int)(currentFactor * 100))); - victim.InflictDamage(firedBy, damage, this); + foreach (var victim in hitActors) + DoImpact(victim, firedBy, damageModifiers.Append((int)(currentFactor * 100))); } } - - public int GetDamageToInflict(Actor target, Actor firedBy, IEnumerable damageModifiers) - { - var healthInfo = target.Info.Traits.GetOrDefault(); - if (healthInfo == null) - return 0; - - return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info))); - } } } diff --git a/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs index 98dc341b23..b3b00e5d3c 100644 --- a/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs @@ -36,26 +36,13 @@ namespace OpenRA.Mods.RA public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) { - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim, firedBy, damageModifiers); - if (damage != 0) // will be 0 if the target doesn't have HealthInfo - { - var healthInfo = victim.Info.Traits.Get(); - damage = (float)(damage / 100 * healthInfo.HP); - } - - victim.InflictDamage(firedBy, (int)damage, this); - } - } - - public float GetDamageToInflict(Actor target, Actor firedBy, IEnumerable damageModifiers) - { - var healthInfo = target.Info.Traits.GetOrDefault(); + var healthInfo = victim.Info.Traits.GetOrDefault(); if (healthInfo == null) - return 0; + return; - return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info))); + // Damage is measured as a percentage of the target health + var damage = Util.ApplyPercentageModifiers(healthInfo.HP, damageModifiers.Append(Damage, DamageVersus(victim.Info))); + victim.InflictDamage(firedBy, damage, this); } } } diff --git a/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs index f17f2b36aa..745b82fbc9 100644 --- a/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs @@ -33,23 +33,5 @@ namespace OpenRA.Mods.RA foreach (var victim in world.ActorMap.GetUnitsAt(t)) DoImpact(victim, firedBy, damageModifiers); } - - public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) - { - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim, firedBy, damageModifiers); - victim.InflictDamage(firedBy, damage, this); - } - } - - public int GetDamageToInflict(Actor target, Actor firedBy, IEnumerable damageModifiers) - { - var healthInfo = target.Info.Traits.GetOrDefault(); - if (healthInfo == null) - return 0; - - return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info))); - } } } diff --git a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs index bca54147c4..2ba9f0fbe6 100644 --- a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs @@ -30,35 +30,21 @@ namespace OpenRA.Mods.RA foreach (var victim in hitActors) { - if (IsValidAgainst(victim, firedBy)) + if (!IsValidAgainst(victim, firedBy)) + continue; + + var localModifiers = damageModifiers; + var healthInfo = victim.Info.Traits.GetOrDefault(); + if (healthInfo != null) { - var damage = (int)GetDamageToInflict(pos, victim, firedBy, damageModifiers); - victim.InflictDamage(firedBy, damage, this); + var distance = Math.Max(0, (victim.CenterPosition - pos).Length - healthInfo.Radius.Range); + localModifiers = localModifiers.Append((int)(100 * GetDamageFalloff(distance * 1f / Spread.Range))); } + + DoImpact(victim, firedBy, localModifiers); } } - public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) - { - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim.CenterPosition, victim, firedBy, damageModifiers); - victim.InflictDamage(firedBy, damage, this); - } - } - - public int GetDamageToInflict(WPos pos, Actor target, Actor firedBy, IEnumerable damageModifiers) - { - var healthInfo = target.Info.Traits.GetOrDefault(); - if (healthInfo == null) - return 0; - - var distance = Math.Max(0, (target.CenterPosition - pos).Length - healthInfo.Radius.Range); - var falloff = (int)(100 * GetDamageFalloff(distance * 1f / Spread.Range)); - - return Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(EffectivenessAgainst(target.Info), falloff)); - } - static readonly float[] falloff = { 1f, 0.3678795f, 0.1353353f, 0.04978707f, From d002a23d6763c411eced20ade614dd77c5747875 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 19:41:22 +1200 Subject: [PATCH 06/11] Change EffectivenessAgainst to CanTargetActor. --- OpenRA.Game/GameRules/DamageWarhead.cs | 10 ++++++---- OpenRA.Game/GameRules/Warhead.cs | 12 ++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/OpenRA.Game/GameRules/DamageWarhead.cs b/OpenRA.Game/GameRules/DamageWarhead.cs index 7ec8a1ddd7..c5cd27dea5 100644 --- a/OpenRA.Game/GameRules/DamageWarhead.cs +++ b/OpenRA.Game/GameRules/DamageWarhead.cs @@ -56,13 +56,15 @@ namespace OpenRA.GameRules return 100; } - public override int EffectivenessAgainst(ActorInfo ai) + // TODO: This can be removed after the legacy and redundant 0% = not targetable + // assumption has been removed from the yaml definitions + public override bool CanTargetActor(ActorInfo victim, Actor firedBy) { - var health = ai.Traits.GetOrDefault(); + var health = victim.Traits.GetOrDefault(); if (health == null) - return 0; + return false; - return DamageVersus(ai); + return DamageVersus(victim) > 0; } public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) diff --git a/OpenRA.Game/GameRules/Warhead.cs b/OpenRA.Game/GameRules/Warhead.cs index 0dab3044c1..043e5772e6 100644 --- a/OpenRA.Game/GameRules/Warhead.cs +++ b/OpenRA.Game/GameRules/Warhead.cs @@ -29,8 +29,6 @@ namespace OpenRA.GameRules public abstract void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers); - public virtual int EffectivenessAgainst(ActorInfo ai) { return 0; } - public bool IsValidAgainst(Target target, World world, Actor firedBy) { if (target.Type == TargetType.Actor) @@ -56,10 +54,13 @@ namespace OpenRA.GameRules return false; } + // TODO: This can be removed after the legacy and redundant 0% = not targetable + // assumption has been removed from the yaml definitions + public virtual bool CanTargetActor(ActorInfo victim, Actor firedBy) { return false; } + public bool IsValidAgainst(Actor victim, Actor firedBy) { - // If this warhead is ineffective against the target, then it is not a valid target - if (EffectivenessAgainst(victim.Info) <= 0) + if (!CanTargetActor(victim.Info, firedBy)) return false; // A target type is valid if it is in the valid targets list, and not in the invalid targets list. @@ -83,8 +84,7 @@ namespace OpenRA.GameRules public bool IsValidAgainst(FrozenActor victim, Actor firedBy) { - // If this warhead is ineffective against the target, then it is not a valid target - if (EffectivenessAgainst(victim.Info) <= 0) + if (!CanTargetActor(victim.Info, firedBy)) return false; // A target type is valid if it is in the valid targets list, and not in the invalid targets list. From 97c28e1353a6a9a4e8867112a58e10b4d13cc01e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 21:26:25 +1200 Subject: [PATCH 07/11] Remove fp calculations from SpreadDamageWarhead. --- .../Warheads/SpreadDamageWarhead.cs | 52 ++++++++++++++----- 1 file changed, 38 insertions(+), 14 deletions(-) diff --git a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs index 2ba9f0fbe6..90c7d070ae 100644 --- a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs @@ -19,14 +19,37 @@ namespace OpenRA.Mods.RA { public class SpreadDamageWarhead : DamageWarhead { - [Desc("For Normal DamageModel: Distance from the explosion center at which damage is 1/2.")] + [Desc("Range between falloff steps.")] public readonly WRange Spread = new WRange(43); + [Desc("Ranges at which each Falloff step is defined. Overrides Spread.")] + public WRange[] Range = null; + + [Desc("Damage percentage at each range step")] + public readonly int[] Falloff = { 100, 37, 14, 5, 2, 1, 0 }; + + public void InitializeRange() + { + if (Range != null) + { + if (Range.Length != 1 && Range.Length != Falloff.Length) + throw new InvalidOperationException("Number of range values must be 1 or equal to the number of Falloff values."); + + for (var i = 0; i < Range.Length - 1; i++) + if (Range[i] > Range[i + 1]) + throw new InvalidOperationException("Range values must be specified in an increasing order."); + } + else + Range = Exts.MakeArray(Falloff.Length, i => i * Spread); + } + public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { + if (Range == null) + InitializeRange(); + var world = firedBy.World; - var maxSpread = new WRange((int)(Spread.Range * (float)Math.Log(Math.Abs(Damage), 2))); - var hitActors = world.FindActorsInCircle(pos, maxSpread); + var hitActors = world.FindActorsInCircle(pos, Range[Range.Length - 1]); foreach (var victim in hitActors) { @@ -38,25 +61,26 @@ namespace OpenRA.Mods.RA if (healthInfo != null) { var distance = Math.Max(0, (victim.CenterPosition - pos).Length - healthInfo.Radius.Range); - localModifiers = localModifiers.Append((int)(100 * GetDamageFalloff(distance * 1f / Spread.Range))); + localModifiers = localModifiers.Append(GetDamageFalloff(distance)); } DoImpact(victim, firedBy, localModifiers); } } - static readonly float[] falloff = + int GetDamageFalloff(int distance) { - 1f, 0.3678795f, 0.1353353f, 0.04978707f, - 0.01831564f, 0.006737947f, 0.002478752f, 0.000911882f - }; + var inner = Range[0].Range; + for (var i = 1; i < Range.Length; i++) + { + var outer = Range[i].Range; + if (outer > distance) + return int2.Lerp(Falloff[i - 1], Falloff[i], distance - inner, outer - inner); - static float GetDamageFalloff(float x) - { - var u = (int)x; - if (u >= falloff.Length - 1) return 0; - var t = x - u; - return (falloff[u] * (1 - t)) + (falloff[u + 1] * t); + inner = outer; + } + + return 0; } } } From 50fea12a80aeff9d9518ebfef81aa009041e5401 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 21:44:43 +1200 Subject: [PATCH 08/11] Remove now-redundant AbsoluteSpreadDamageWarhead. --- OpenRA.Mods.RA/OpenRA.Mods.RA.csproj | 1 - .../Warheads/AbsoluteSpreadDamageWarhead.cs | 52 ------------------- 2 files changed, 53 deletions(-) delete mode 100644 OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs diff --git a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 7ac4a7e41e..057f7642ee 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -562,7 +562,6 @@ - diff --git a/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs deleted file mode 100644 index 012ff5f476..0000000000 --- a/OpenRA.Mods.RA/Warheads/AbsoluteSpreadDamageWarhead.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2014 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. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.Collections.Generic; -using System.Linq; -using OpenRA.Effects; -using OpenRA.GameRules; -using OpenRA.Traits; - -namespace OpenRA.Mods.RA -{ - public class AbsoluteSpreadDamageWarhead : DamageWarhead - { - [Desc("Maximum spread of the associated SpreadFactor.")] - public readonly WRange[] Spread = { new WRange(43) }; - - [Desc("What factor to multiply the Damage by for this spread range.", "Each factor specified must have an associated Spread defined.")] - public readonly float[] SpreadFactor = { 1f }; - - public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) - { - var world = firedBy.World; - - for (var i = 0; i < Spread.Length; i++) - { - var currentSpread = Spread[i]; - var currentFactor = SpreadFactor[i]; - var previousSpread = WRange.Zero; - if (i > 0) - previousSpread = Spread[i - 1]; - if (currentFactor <= 0f) - continue; - - var hitActors = world.FindActorsInCircle(pos, currentSpread); - if (previousSpread.Range > 0) - hitActors.Except(world.FindActorsInCircle(pos, previousSpread)); - - // TODO: Keep currentFactor as int from the start - foreach (var victim in hitActors) - DoImpact(victim, firedBy, damageModifiers.Append((int)(currentFactor * 100))); - } - } - } -} From fa3e7b5e1b6a948ff40179bcdcf25bf0df0bbc51 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 17 Aug 2014 21:54:58 +1200 Subject: [PATCH 09/11] Convert versus to integers. --- OpenRA.Game/GameRules/DamageWarhead.cs | 21 +- OpenRA.Utility/UpgradeRules.cs | 9 +- mods/cnc/maps/gdi01/map.yaml | 2 +- mods/cnc/maps/gdi04c/map.yaml | 2 +- mods/cnc/weapons.yaml | 372 +++++++++--------- mods/d2k/weapons.yaml | 272 ++++++------- mods/ra/maps/drop-zone-w/map.yaml | 14 +- mods/ra/maps/fort-lonestar/map.yaml | 72 ++-- mods/ra/maps/training-camp/map.yaml | 24 +- mods/ra/weapons.yaml | 517 ++++++++++++------------- mods/ts/weapons.yaml | 360 ++++++++--------- 11 files changed, 835 insertions(+), 830 deletions(-) diff --git a/OpenRA.Game/GameRules/DamageWarhead.cs b/OpenRA.Game/GameRules/DamageWarhead.cs index c5cd27dea5..ad20e891c9 100644 --- a/OpenRA.Game/GameRules/DamageWarhead.cs +++ b/OpenRA.Game/GameRules/DamageWarhead.cs @@ -31,27 +31,26 @@ namespace OpenRA.GameRules public readonly int ProneModifier = 50; [FieldLoader.LoadUsing("LoadVersus")] - [Desc("Damage vs each armortype. 0% = can't target.")] - public readonly Dictionary Versus; + [Desc("Damage percentage versus each armortype. 0% = can't target.")] + public readonly Dictionary Versus; public static object LoadVersus(MiniYaml yaml) { var nd = yaml.ToDictionary(); return nd.ContainsKey("Versus") - ? nd["Versus"].ToDictionary(my => FieldLoader.GetValue("(value)", my.Value)) - : new Dictionary(); + ? nd["Versus"].ToDictionary(my => FieldLoader.GetValue("(value)", my.Value)) + : new Dictionary(); } public int DamageVersus(ActorInfo victim) { var armor = victim.Traits.GetOrDefault(); - if (armor == null || armor.Type == null) - return 100; - - // TODO: Change versus definitions to integer percentages - float versus; - if (Versus.TryGetValue(armor.Type, out versus)) - return (int)(versus * 100); + if (armor != null && armor.Type != null) + { + int versus; + if (Versus.TryGetValue(armor.Type, out versus)) + return versus; + } return 100; } diff --git a/OpenRA.Utility/UpgradeRules.cs b/OpenRA.Utility/UpgradeRules.cs index c1e348eda7..fe0ec8c408 100644 --- a/OpenRA.Utility/UpgradeRules.cs +++ b/OpenRA.Utility/UpgradeRules.cs @@ -29,7 +29,7 @@ namespace OpenRA.Utility static void ConvertFloatArrayToPercentArray(ref string input) { input = string.Join(", ", input.Split(',') - .Select(s => ((int)(float.Parse(s) * 100)).ToString())); + .Select(s => ((int)Math.Round(FieldLoader.GetValue("(float value)", s) * 100)).ToString())); } static void ConvertPxToRange(ref string input) @@ -755,6 +755,13 @@ namespace OpenRA.Utility } } + if (engineVersion < 20140821) + { + // Converted versus definitions to integers + if (depth == 3 && parentKey == "Versus") + ConvertFloatArrayToPercentArray(ref node.Value.Value); + } + UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1); } } diff --git a/mods/cnc/maps/gdi01/map.yaml b/mods/cnc/maps/gdi01/map.yaml index c06e937d74..8948d0b9f6 100644 --- a/mods/cnc/maps/gdi01/map.yaml +++ b/mods/cnc/maps/gdi01/map.yaml @@ -541,7 +541,7 @@ Weapons: BoatMissile: Warhead: SpreadDamage Versus: - Heavy: 50% + Heavy: 50 Damage: 50 Voices: diff --git a/mods/cnc/maps/gdi04c/map.yaml b/mods/cnc/maps/gdi04c/map.yaml index 91929a834d..705d4534a2 100644 --- a/mods/cnc/maps/gdi04c/map.yaml +++ b/mods/cnc/maps/gdi04c/map.yaml @@ -919,7 +919,7 @@ Weapons: Rockets: Warhead: SpreadDamage Versus: - None: 20% + None: 20 Voices: diff --git a/mods/cnc/weapons.yaml b/mods/cnc/weapons.yaml index ce1ffc0909..cf9199b9b4 100644 --- a/mods/cnc/weapons.yaml +++ b/mods/cnc/weapons.yaml @@ -29,10 +29,10 @@ UnitExplode: Damage: 500 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: poof ImpactSound: xplobig6.aud @@ -43,10 +43,10 @@ UnitExplodeSmall: Damage: 40 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: big_frag ImpactSound: xplobig4.aud @@ -57,10 +57,10 @@ GrenadierExplode: Damage: 10 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: poof ImpactSound: xplosml2.aud @@ -74,10 +74,10 @@ Atomic: InfDeath: 5 ValidTargets: Ground, Air Versus: - None: 100% - Wood: 100% - Light: 60% - Heavy: 50% + None: 100 + Wood: 100 + Light: 60 + Heavy: 50 Warhead@2Eff_impact: CreateEffect Explosion: 6 ImpactSound: nukexplo.aud @@ -88,10 +88,10 @@ Atomic: Delay: 3 ValidTargets: Ground, Air Versus: - None: 100% - Wood: 100% - Light: 60% - Heavy: 50% + None: 100 + Wood: 100 + Light: 60 + Heavy: 50 Warhead@4Res_areanukea: DestroyResource Size: 3 Delay: 3 @@ -109,10 +109,10 @@ Atomic: Delay: 6 ValidTargets: Ground, Air Versus: - None: 100% - Wood: 100% - Light: 60% - Heavy: 50% + None: 100 + Wood: 100 + Light: 60 + Heavy: 50 Warhead@8Res_areanukeb: DestroyResource Size: 4 Delay: 6 @@ -127,10 +127,10 @@ Atomic: Delay: 9 ValidTargets: Ground, Air Versus: - None: 100% - Wood: 100% - Light: 60% - Heavy: 50% + None: 100 + Wood: 100 + Light: 60 + Heavy: 50 Warhead@11Res_areanukec: DestroyResource Size: 5 Delay: 9 @@ -188,10 +188,10 @@ HighV: Damage: 30 InfDeath: 2 Versus: - None: 100% - Wood: 50% - Light: 70% - Heavy: 35% + None: 100 + Wood: 50 + Light: 70 + Heavy: 35 Warhead@2Eff: CreateEffect Explosion: piffs @@ -211,10 +211,10 @@ HeliAGGun: InfDeath: 2 ValidTargets: Ground Versus: - None: 100% - Wood: 50% - Light: 75% - Heavy: 25% + None: 100 + Wood: 50 + Light: 75 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: piffs @@ -234,10 +234,10 @@ HeliAAGun: InfDeath: 2 ValidTargets: Air Versus: - None: 100% - Wood: 50% - Light: 50% - Heavy: 25% + None: 100 + Wood: 50 + Light: 50 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: piffs @@ -254,10 +254,10 @@ Pistol: InfDeath: 2 InvalidTargets: Wall Versus: - None: 100% - Wood: 50% - Light: 50% - Heavy: 25% + None: 100 + Wood: 50 + Light: 50 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: piff @@ -274,10 +274,10 @@ M16: InfDeath: 2 InvalidTargets: Wall Versus: - None: 100% - Wood: 25% - Light: 30% - Heavy: 10% + None: 100 + Wood: 25 + Light: 30 + Heavy: 10 Warhead@2Eff: CreateEffect Explosion: piff @@ -302,11 +302,11 @@ Rockets: InfDeath: 4 ValidTargets: Ground, Air Versus: - None: 50% - Wood: 85% - Light: 100% - Heavy: 100% - Concrete: 25% + None: 50 + Wood: 85 + Light: 100 + Heavy: 100 + Concrete: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -336,11 +336,11 @@ BikeRockets: InfDeath: 4 ValidTargets: Ground, Air Versus: - None: 25% - Wood: 75% - Light: 100% - Heavy: 100% - Concrete: 50% + None: 25 + Wood: 75 + Light: 100 + Heavy: 100 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -370,10 +370,10 @@ OrcaAGMissiles: InfDeath: 4 ValidTargets: Ground Versus: - None: 50% - Wood: 100% - Light: 100% - Heavy: 75% + None: 50 + Wood: 100 + Light: 100 + Heavy: 75 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -403,8 +403,8 @@ OrcaAAMissiles: InfDeath: 4 ValidTargets: Air Versus: - Light: 75% - Heavy: 50% + Light: 75 + Heavy: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -424,10 +424,10 @@ Flamethrower: InfDeath: 5 InvalidTargets: Wall Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 20% + None: 100 + Wood: 100 + Light: 100 + Heavy: 20 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -449,10 +449,10 @@ BigFlamer: InfDeath: 5 InvalidTargets: Wall Versus: - None: 100% - Wood: 100% - Light: 67% - Heavy: 25% + None: 100 + Wood: 100 + Light: 67 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -470,10 +470,10 @@ Chemspray: Damage: 80 InfDeath: 6 Versus: - None: 100% - Wood: 35% - Light: 75% - Heavy: 50% + None: 100 + Wood: 35 + Light: 75 + Heavy: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -495,10 +495,10 @@ Grenade: Damage: 50 InfDeath: 3 Versus: - None: 100% - Wood: 50% - Light: 75% - Heavy: 35% + None: 100 + Wood: 50 + Light: 75 + Heavy: 35 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -517,11 +517,11 @@ Grenade: Damage: 25 InfDeath: 4 Versus: - None: 25% - Wood: 75% - Light: 100% - Heavy: 100% - Concrete: 50% + None: 25 + Wood: 75 + Light: 100 + Heavy: 100 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -540,10 +540,10 @@ Grenade: Damage: 30 InfDeath: 4 Versus: - None: 30% - Wood: 75% - Light: 75% - Heavy: 100% + None: 30 + Wood: 75 + Light: 75 + Heavy: 100 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -562,11 +562,11 @@ Grenade: Damage: 40 InfDeath: 4 Versus: - None: 25% - Wood: 100% - Light: 100% - Heavy: 100% - Concrete: 50% + None: 25 + Wood: 100 + Light: 100 + Heavy: 100 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -587,11 +587,11 @@ Grenade: Damage: 40 InfDeath: 4 Versus: - None: 25% - Wood: 100% - Light: 100% - Heavy: 100% - Concrete: 100% + None: 25 + Wood: 100 + Light: 100 + Heavy: 100 + Concrete: 100 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -610,10 +610,10 @@ TurretGun: Damage: 40 InfDeath: 4 Versus: - None: 20% - Wood: 25% - Light: 100% - Heavy: 100% + None: 20 + Wood: 25 + Light: 100 + Heavy: 100 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -643,10 +643,10 @@ MammothMissiles: InfDeath: 4 ValidTargets: Ground, Air Versus: - None: 50% - Wood: 75% - Light: 100% - Heavy: 50% + None: 50 + Wood: 75 + Light: 100 + Heavy: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -683,10 +683,10 @@ MammothMissiles: InfDeath: 4 ValidTargets: Ground Versus: - None: 35% - Wood: 60% - Light: 100% - Heavy: 50% + None: 35 + Wood: 60 + Light: 100 + Heavy: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -716,10 +716,10 @@ MammothMissiles: InfDeath: 4 ValidTargets: Ground, Air Versus: - None: 25% - Wood: 75% - Light: 100% - Heavy: 90% + None: 25 + Wood: 75 + Light: 100 + Heavy: 90 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -743,10 +743,10 @@ ArtilleryShell: Damage: 150 InfDeath: 3 Versus: - None: 100% - Wood: 80% - Light: 75% - Heavy: 50% + None: 100 + Wood: 80 + Light: 75 + Heavy: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -767,11 +767,11 @@ MachineGun: InfDeath: 2 InvalidTargets: Wall Versus: - None: 100% - Wood: 20% - Light: 50% - Heavy: 20% - Concrete: 10% + None: 100 + Wood: 20 + Light: 50 + Heavy: 20 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs @@ -796,10 +796,10 @@ BoatMissile: Damage: 60 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -832,10 +832,10 @@ TowerMissle: InfDeath: 3 ValidTargets: Ground Versus: - None: 50% - Wood: 25% - Light: 100% - Heavy: 100% + None: 50 + Wood: 25 + Light: 100 + Heavy: 100 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -855,10 +855,10 @@ Vulcan: InfDeath: 2 ValidTargets: Ground, Water Versus: - None: 100% - Wood: 25% - Light: 100% - Heavy: 35% + None: 100 + Wood: 25 + Light: 100 + Heavy: 35 Warhead@2Eff: CreateEffect Explosion: piffs @@ -876,10 +876,10 @@ Napalm: InfDeath: 5 ValidTargets: Ground, Water Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 80% + None: 100 + Wood: 100 + Light: 100 + Heavy: 80 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -892,10 +892,10 @@ Napalm.Crate: Damage: 500 InfDeath: 5 Versus: - None: 90% - Wood: 100% - Light: 60% - Heavy: 25% + None: 90 + Wood: 100 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -915,7 +915,7 @@ Laser: Damage: 360 InfDeath: 5 Versus: - Wood: 50% + Wood: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch @@ -937,10 +937,10 @@ SAMMissile: Spread: 682 ValidTargets: Air Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 75% + None: 100 + Wood: 100 + Light: 100 + Heavy: 75 InfDeath: 4 Damage: 30 Warhead@2Smu: LeaveSmudge @@ -968,10 +968,10 @@ HonestJohn: Damage: 100 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -992,10 +992,10 @@ TiberiumExplosion: Damage: 10 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Res: CreateResource AddsResourceType: Tiberium Size: 1,1 @@ -1022,10 +1022,10 @@ APCGun: Damage: 15 ValidTargets: Ground Versus: - None: 50% - Wood: 50% - Light: 100% - Heavy: 50% + None: 50 + Wood: 50 + Light: 100 + Heavy: 50 Warhead@2Eff: CreateEffect Explosion: small_poof @@ -1042,7 +1042,7 @@ APCGun.AA: Damage: 25 ValidTargets: Air Versus: - Heavy: 50% + Heavy: 50 Warhead@2Eff: CreateEffect Explosion: small_frag @@ -1065,10 +1065,10 @@ Patriot: Spread: 682 ValidTargets: Air Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 75% + None: 100 + Wood: 100 + Light: 100 + Heavy: 75 InfDeath: 4 Damage: 32 Warhead@2Smu: LeaveSmudge @@ -1087,11 +1087,11 @@ Tail: Damage: 180 InfDeath: 1 Versus: - None: 90% - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 Horn: ReloadDelay: 20 @@ -1103,11 +1103,11 @@ Horn: Damage: 120 InfDeath: 1 Versus: - None: 90% - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 Teeth: ReloadDelay: 30 @@ -1119,11 +1119,11 @@ Teeth: Damage: 180 InfDeath: 1 Versus: - None: 90% - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 Claw: ReloadDelay: 10 @@ -1135,11 +1135,11 @@ Claw: Damage: 60 InfDeath: 1 Versus: - None: 90% - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 Demolish: Warhead@1Dam: SpreadDamage diff --git a/mods/d2k/weapons.yaml b/mods/d2k/weapons.yaml index f68ecd0ac1..b67dbd9051 100644 --- a/mods/d2k/weapons.yaml +++ b/mods/d2k/weapons.yaml @@ -13,10 +13,10 @@ LMG: Damage: 15 InfDeath: 2 Versus: - Wood: 25% - Light: 40% - Heavy: 10% - Concrete: 20% + Wood: 25 + Light: 40 + Heavy: 10 + Concrete: 20 Warhead@2Eff: CreateEffect Explosion: piffs @@ -39,11 +39,11 @@ Bazooka: InfDeath: 4 ValidTargets: Ground Versus: - None: 10% - Wood: 75% - Light: 60% - Heavy: 90% - Concrete: 40% + None: 10 + Wood: 75 + Light: 60 + Heavy: 90 + Concrete: 40 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -65,11 +65,11 @@ Sniper: Damage: 60 InfDeath: 2 Versus: - None: 100% - Wood: 0% - Light: 1% - Heavy: 0% - Concrete: 0% + None: 100 + Wood: 0 + Light: 1 + Heavy: 0 + Concrete: 0 Vulcan: ReloadDelay: 30 @@ -88,10 +88,10 @@ Vulcan: InfDeath: 2 ValidTargets: Ground, Air Versus: - Wood: 0% - Light: 60% - Heavy: 10% - Concrete: 0% + Wood: 0 + Light: 60 + Heavy: 10 + Concrete: 0 Warhead@2Eff: CreateEffect Explosion: piffs @@ -114,11 +114,11 @@ Slung: InfDeath: 4 ValidTargets: Ground Versus: - None: 0% - Wood: 75% - Light: 40% - Heavy: 90% - Concrete: 50% + None: 0 + Wood: 75 + Light: 40 + Heavy: 90 + Concrete: 50 Warhead@2Eff: CreateEffect Explosion: small_explosion ImpactSound: EXPLLG5.WAV @@ -140,10 +140,10 @@ HMG: Damage: 30 InfDeath: 2 Versus: - Wood: 15% - Light: 45% - Heavy: 20% - Concrete: 20% + Wood: 15 + Light: 45 + Heavy: 20 + Concrete: 20 Warhead@2Eff: CreateEffect Explosion: piffs @@ -164,10 +164,10 @@ HMGo: Damage: 40 InfDeath: 2 Versus: - Wood: 15% - Light: 45% - Heavy: 25% - Concrete: 20% + Wood: 15 + Light: 45 + Heavy: 25 + Concrete: 20 Warhead@2Eff: CreateEffect Explosion: piffs @@ -191,11 +191,11 @@ QuadRockets: InfDeath: 4 ValidTargets: Ground, Air Versus: - None: 35% - Wood: 45% - Light: 100% - Heavy: 100% - Concrete: 35% + None: 35 + Wood: 45 + Light: 100 + Heavy: 100 + Concrete: 35 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -217,10 +217,10 @@ TurretGun: Damage: 55 InfDeath: 4 Versus: - None: 50% - Wood: 75% - Light: 100% - Concrete: 65% + None: 50 + Wood: 75 + Light: 100 + Concrete: 65 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -251,11 +251,11 @@ TowerMissile: InfDeath: 3 ValidTargets: Ground, Air Versus: - None: 50% - Wood: 45% - Light: 100% - Heavy: 50% - Concrete: 35% + None: 50 + Wood: 45 + Light: 100 + Heavy: 50 + Concrete: 35 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -275,10 +275,10 @@ TowerMissile: Damage: 40 InfDeath: 4 Versus: - None: 50% - Wood: 50% - Light: 100% - Concrete: 50% + None: 50 + Wood: 50 + Light: 100 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -298,10 +298,10 @@ TowerMissile: Damage: 40 InfDeath: 4 Versus: - None: 50% - Wood: 50% - Light: 100% - Concrete: 50% + None: 50 + Wood: 50 + Light: 100 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -320,11 +320,11 @@ DevBullet: Damage: 100 InfDeath: 4 Versus: - None: 100% - Wood: 50% - Light: 100% - Heavy: 100% - Concrete: 80% + None: 100 + Wood: 50 + Light: 100 + Heavy: 100 + Concrete: 80 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -354,11 +354,11 @@ DevBullet: InfDeath: 4 ValidTargets: Ground Versus: - None: 20% - Wood: 50% - Light: 100% - Heavy: 50% - Concrete: 80% + None: 20 + Wood: 50 + Light: 100 + Heavy: 50 + Concrete: 80 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -383,9 +383,9 @@ FakeMissile: Spread: 96 Damage: 10 Versus: - None: 0% - Wood: 0% - Concrete: 0% + None: 0 + Wood: 0 + Concrete: 0 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -410,11 +410,11 @@ FakeMissile: Damage: 100 InfDeath: 3 Versus: - None: 100% - Wood: 80% - Light: 75% - Heavy: 50% - Concrete: 100% + None: 100 + Wood: 80 + Light: 75 + Heavy: 50 + Concrete: 100 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater, RockCrater Warhead@3Eff: CreateEffect @@ -435,10 +435,10 @@ Sound: Damage: 150 InfDeath: 6 Versus: - None: 60% - Wood: 85% - Light: 80% - Concrete: 75% + None: 60 + Wood: 85 + Light: 80 + Concrete: 75 ChainGun: ReloadDelay: 10 @@ -453,10 +453,10 @@ ChainGun: Damage: 20 InfDeath: 2 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@2Eff: CreateEffect Explosion: piffs @@ -471,10 +471,10 @@ Heal: Damage: -50 InfDeath: 1 Versus: - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 WormJaw: ReloadDelay: 10 @@ -484,8 +484,8 @@ WormJaw: Spread: 160 Damage: 100 Versus: - Wood: 0% - Concrete: 0% + Wood: 0 + Concrete: 0 ParaBomb: ReloadDelay: 10 @@ -498,10 +498,10 @@ ParaBomb: Damage: 500 InfDeath: 4 Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -518,11 +518,11 @@ Napalm: Damage: 300 InfDeath: 4 Versus: - None: 20% - Wood: 100% - Light: 30% - Heavy: 20% - Concrete: 70% + None: 20 + Wood: 100 + Light: 30 + Heavy: 20 + Concrete: 70 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -547,11 +547,11 @@ Atomic: Damage: 1800 InfDeath: 5 Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 50% - Concrete: 50% + None: 100 + Wood: 100 + Light: 100 + Heavy: 50 + Concrete: 50 Warhead@2Eff: CreateEffect Explosion: nuke ImpactSound: EXPLLG2.WAV @@ -562,11 +562,11 @@ CrateNuke: Damage: 800 InfDeath: 5 Versus: - None: 20% - Wood: 75% - Light: 25% - Heavy: 25% - Concrete: 50% + None: 20 + Wood: 75 + Light: 25 + Heavy: 25 + Concrete: 50 Warhead@2Eff: CreateEffect Explosion: nuke ImpactSound: EXPLLG2.WAV @@ -577,10 +577,10 @@ CrateExplosion: Damage: 400 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: building ImpactSound: EXPLSML4.WAV @@ -591,10 +591,10 @@ UnitExplode: Damage: 500 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: building ImpactSound: EXPLMD1.WAV @@ -605,10 +605,10 @@ UnitExplodeSmall: Damage: 60 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: self_destruct ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV @@ -619,10 +619,10 @@ UnitExplodeTiny: Damage: 30 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: med_explosion ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV @@ -633,10 +633,10 @@ UnitExplodeScale: Damage: 90 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: building ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV @@ -656,10 +656,10 @@ Grenade: Damage: 60 InfDeath: 3 Versus: - None: 50% - Wood: 100% - Light: 25% - Heavy: 5% + None: 50 + Wood: 100 + Light: 25 + Heavy: 5 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater Warhead@3Eff: CreateEffect @@ -686,10 +686,10 @@ Shrapnel: Damage: 60 InfDeath: 3 Versus: - None: 50% - Wood: 100% - Light: 25% - Heavy: 5% + None: 50 + Wood: 100 + Light: 25 + Heavy: 5 Warhead@2Smu: LeaveSmudge SmudgeType: SandCrater Warhead@3Eff: CreateEffect @@ -702,10 +702,10 @@ SpiceExplosion: Damage: 10 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Res: CreateResource AddsResourceType: Spice Size: 2,2 diff --git a/mods/ra/maps/drop-zone-w/map.yaml b/mods/ra/maps/drop-zone-w/map.yaml index 3a1ed4a6a3..c99546fa8a 100644 --- a/mods/ra/maps/drop-zone-w/map.yaml +++ b/mods/ra/maps/drop-zone-w/map.yaml @@ -316,10 +316,10 @@ Weapons: Warhead: SpreadDamage Spread: 128 Versus: - None: 60% - Wood: 75% - Light: 60% - Heavy: 25% + None: 60 + Wood: 75 + Light: 60 + Heavy: 25 InfDeath: 2 Damage: 250 Warhead@1Eff: CreateEffect @@ -345,9 +345,9 @@ Weapons: Warhead: SpreadDamage Spread: 426 Versus: - None: 40% - Light: 30% - Heavy: 30% + None: 40 + Light: 30 + Heavy: 30 InfDeath: blownaway Damage: 400 Warhead@1Eff: CreateEffect diff --git a/mods/ra/maps/fort-lonestar/map.yaml b/mods/ra/maps/fort-lonestar/map.yaml index bd21cd60a8..bbe725fa56 100644 --- a/mods/ra/maps/fort-lonestar/map.yaml +++ b/mods/ra/maps/fort-lonestar/map.yaml @@ -774,10 +774,10 @@ Weapons: Warhead: SpreadDamage Spread: 256 Versus: - None: 75% - Wood: 75% - Light: 75% - Concrete: 100% + None: 75 + Wood: 75 + Light: 75 + Concrete: 100 InfDeath: 4 Damage: 150 Warhead@2Smu: LeaveSmudge @@ -807,11 +807,11 @@ Weapons: Spread: 640 ValidTargets: Ground, Air Versus: - None: 125% - Wood: 110% - Light: 110% - Heavy: 100% - Concrete: 200% + None: 125 + Wood: 110 + Light: 110 + Heavy: 100 + Concrete: 200 InfDeath: 3 Damage: 250 Warhead@2Smu: LeaveSmudge @@ -836,11 +836,11 @@ Weapons: Spread: 341 ValidTargets: Ground Versus: - None: 90% - Wood: 170% - Light: 100% - Heavy: 100% - Concrete: 100% + None: 90 + Wood: 170 + Light: 100 + Heavy: 100 + Concrete: 100 InfDeath: 4 Damage: 15 Warhead@2Smu: LeaveSmudge @@ -858,10 +858,10 @@ Weapons: Warhead: SpreadDamage Spread: 426 Versus: - None: 125% - Wood: 100% - Light: 60% - Concrete: 25% + None: 125 + Wood: 100 + Light: 60 + Concrete: 25 InfDeath: 5 Damage: 200 Warhead@2Smu: LeaveSmudge @@ -887,11 +887,11 @@ Weapons: Warhead: SpreadDamage Spread: 426 Versus: - None: 80% - Wood: 100% - Light: 60% - Heavy: 75% - Concrete: 35% + None: 80 + Wood: 100 + Light: 60 + Heavy: 75 + Concrete: 35 InfDeath: 5 Damage: 10 Warhead@2Smu: LeaveSmudge @@ -912,11 +912,11 @@ Weapons: Spread: 213 ValidTargets: Air, Ground Versus: - None: 35% - Wood: 30% - Light: 30% - Heavy: 40% - Concrete: 30% + None: 35 + Wood: 30 + Light: 30 + Heavy: 40 + Concrete: 30 Damage: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch @@ -940,10 +940,10 @@ Weapons: Warhead: SpreadDamage Spread: 853 Versus: - None: 100% - Wood: 90% - Light: 80% - Heavy: 70% + None: 100 + Wood: 90 + Light: 80 + Heavy: 70 InfDeath: 3 Damage: 500 Warhead@2Smu: LeaveSmudge @@ -962,10 +962,10 @@ Weapons: Warhead: SpreadDamage Spread: 128 Versus: - Wood: 0% - Light: 0% - Heavy: 50% - Concrete: 0% + Wood: 0 + Light: 0 + Heavy: 50 + Concrete: 0 InfDeath: 2 Damage: 150 Warhead@2Eff: CreateEffect diff --git a/mods/ra/maps/training-camp/map.yaml b/mods/ra/maps/training-camp/map.yaml index e8e6c4c204..05b5fcbcac 100644 --- a/mods/ra/maps/training-camp/map.yaml +++ b/mods/ra/maps/training-camp/map.yaml @@ -1080,10 +1080,10 @@ Weapons: Damage: 250 Size: 4 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Delay: 12 InfDeath: 4 Warhead@areanuke2Smu: LeaveSmudge @@ -1101,10 +1101,10 @@ Weapons: Damage: 250 Size: 3 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Delay: 24 InfDeath: 4 Warhead@areanuke3Smu: LeaveSmudge @@ -1121,10 +1121,10 @@ Weapons: Warhead@areanuke4: PerCellDamage Damage: 250 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Delay: 36 InfDeath: 4 Warhead@areanuke4Smu: LeaveSmudge diff --git a/mods/ra/weapons.yaml b/mods/ra/weapons.yaml index b3c245a8ee..7914d0fe27 100644 --- a/mods/ra/weapons.yaml +++ b/mods/ra/weapons.yaml @@ -9,11 +9,11 @@ Colt45: Damage: 50 InfDeath: 2 Versus: - None: 100% - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + None: 100 + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 Warhead@2Eff: CreateEffect Explosion: piff InvalidImpactTypes: Water @@ -36,10 +36,10 @@ ZSU-23: Damage: 12 ValidTargets: Air Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Eff: CreateEffect Explosion: small_explosion_air @@ -54,10 +54,10 @@ Vulcan: Damage: 10 InfDeath: 2 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@2Eff_1: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -70,10 +70,10 @@ Vulcan: InfDeath: 2 Delay: 2 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@4Eff_2: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -88,10 +88,10 @@ Vulcan: InfDeath: 2 Delay: 4 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@6Eff_3: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -106,10 +106,10 @@ Vulcan: InfDeath: 2 Delay: 6 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@8Eff_4: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -124,10 +124,10 @@ Vulcan: InfDeath: 2 Delay: 8 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@10Eff_5: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -142,10 +142,10 @@ Vulcan: InfDeath: 2 Delay: 10 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@12Eff_6: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -178,10 +178,10 @@ Maverick: InfDeath: 4 ValidTargets: Ground, Water Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -207,11 +207,11 @@ FireballLauncher: Damage: 150 InfDeath: 5 Versus: - None: 90% - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -234,11 +234,11 @@ Flamer: Damage: 8 InfDeath: 5 Versus: - None: 90% - Wood: 100% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Wood: 100 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -258,11 +258,11 @@ ChainGun: Damage: 30 InfDeath: 2 Versus: - None: 120% - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + None: 120 + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -283,10 +283,10 @@ ChainGun.Yak: Damage: 40 InfDeath: 2 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -305,10 +305,10 @@ Pistol: Damage: 1 InfDeath: 2 Versus: - Wood: 50% - Light: 60% - Heavy: 25% - Concrete: 25% + Wood: 50 + Light: 60 + Heavy: 25 + Concrete: 25 Warhead@2Eff: CreateEffect Explosion: piff InvalidImpactTypes: Water @@ -327,10 +327,10 @@ M1Carbine: Damage: 15 InfDeath: 2 Versus: - Wood: 25% - Light: 30% - Heavy: 10% - Concrete: 10% + Wood: 25 + Light: 30 + Heavy: 10 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -359,10 +359,10 @@ Dragon: InfDeath: 4 ValidTargets: Ground, Water Versus: - None: 10% - Wood: 75% - Light: 35% - Concrete: 20% + None: 10 + Wood: 75 + Light: 35 + Concrete: 20 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -396,10 +396,10 @@ HellfireAG: InfDeath: 4 ValidTargets: Ground, Water Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -433,10 +433,10 @@ HellfireAA: InfDeath: 4 ValidTargets: Air Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -463,10 +463,10 @@ Grenade: Damage: 60 InfDeath: 3 Versus: - None: 50% - Wood: 100% - Light: 25% - Heavy: 5% + None: 50 + Wood: 100 + Light: 25 + Heavy: 5 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -490,10 +490,10 @@ Grenade: Damage: 16 InfDeath: 4 Versus: - None: 30% - Wood: 40% - Heavy: 40% - Concrete: 30% + None: 30 + Wood: 40 + Heavy: 40 + Concrete: 30 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3EffGround: CreateEffect @@ -515,10 +515,10 @@ Grenade: Damage: 40 InfDeath: 4 Versus: - None: 20% - Wood: 75% - Light: 75% - Concrete: 50% + None: 20 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3EffGround: CreateEffect @@ -544,10 +544,10 @@ Grenade: Damage: 40 InfDeath: 4 Versus: - None: 20% - Wood: 75% - Light: 75% - Concrete: 50% + None: 20 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3EffGround: CreateEffect @@ -574,10 +574,10 @@ Grenade: InfDeath: 4 InvalidTargets: Air, Infantry Versus: - None: 20% - Wood: 75% - Light: 75% - Concrete: 50% + None: 20 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3EffGround: CreateEffect @@ -601,10 +601,10 @@ TurretGun: Damage: 60 InfDeath: 4 Versus: - None: 20% - Wood: 50% - Light: 75% - Concrete: 50% + None: 20 + Wood: 50 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3EffGround: CreateEffect @@ -637,10 +637,10 @@ MammothTusk: InfDeath: 3 ValidTargets: Air, Infantry Versus: - None: 100% - Wood: 75% - Light: 60% - Heavy: 25% + None: 100 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3EffGround: CreateEffect @@ -673,11 +673,11 @@ MammothTusk: Damage: 220 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -701,10 +701,10 @@ M60mg: Damage: 15 InfDeath: 2 Versus: - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -724,10 +724,10 @@ Napalm: Damage: 100 InfDeath: 5 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -745,10 +745,10 @@ CrateNapalm: Damage: 600 InfDeath: 5 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -761,10 +761,10 @@ CrateExplosion: Damage: 500 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: self_destruct ImpactSound: kaboom15.aud @@ -775,10 +775,10 @@ CrateNuke: Damage: 1000 InfDeath: 5 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Res_impact: DestroyResource Warhead@3Eff_impact: CreateEffect Explosion: nuke @@ -789,19 +789,19 @@ CrateNuke: InfDeath: 5 Delay: 4 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@5Dam_areanuke: SpreadDamage Damage: 250 InfDeath: 5 Delay: 4 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@6Res_areanuke: DestroyResource Size: 5,4 Delay: 4 @@ -824,8 +824,8 @@ TeslaZap: Damage: 100 InfDeath: 6 Versus: - None: 1000% - Wood: 60% + None: 1000 + Wood: 60 Nike: ReloadDelay: 15 @@ -846,11 +846,11 @@ Nike: InfDeath: 3 ValidTargets: Air Versus: - None: 90% - Wood: 0% - Light: 90% - Heavy: 50% - Concrete: 0% + None: 90 + Wood: 0 + Light: 90 + Heavy: 50 + Concrete: 0 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -876,10 +876,10 @@ RedEye: InfDeath: 3 ValidTargets: Air Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -903,10 +903,10 @@ RedEye: Damage: 250 InfDeath: 3 Versus: - None: 60% - Wood: 75% - Light: 60% - Heavy: 25% + None: 60 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -936,9 +936,9 @@ SubMissile: Damage: 300 InfDeath: 3 Versus: - None: 40% - Light: 30% - Heavy: 30% + None: 40 + Light: 30 + Heavy: 30 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -972,10 +972,10 @@ Stinger: InfDeath: 4 ValidTargets: Air, Ground, Water Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1013,10 +1013,10 @@ TorpTube: InfDeath: 4 ValidTargets: Water, Underwater, Bridge Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 500% + None: 30 + Wood: 75 + Light: 75 + Concrete: 500 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1044,10 +1044,10 @@ TorpTube: Damage: 25 InfDeath: 4 Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1075,10 +1075,10 @@ DepthCharge: InfDeath: 4 ValidTargets: Underwater Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1102,10 +1102,10 @@ ParaBomb: Damage: 500 InfDeath: 4 Versus: - None: 30% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1128,10 +1128,10 @@ DogJaw: InfDeath: 1 ValidTargets: Infantry Versus: - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 Heal: ReloadDelay: 80 @@ -1144,10 +1144,10 @@ Heal: Damage: -50 InfDeath: 1 Versus: - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 Repair: ReloadDelay: 80 @@ -1162,11 +1162,11 @@ Repair: InfDeath: 1 ValidTargets: Repair Versus: - None: 0% - Wood: 0% - Light: 100% - Heavy: 100% - Concrete: 0% + None: 0 + Wood: 0 + Light: 100 + Heavy: 100 + Concrete: 0 SilencedPPK: ReloadDelay: 80 @@ -1179,10 +1179,10 @@ SilencedPPK: Damage: 150 InfDeath: 2 Versus: - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -1209,10 +1209,10 @@ SCUD: Damage: 450 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 70% - Heavy: 40% + None: 90 + Wood: 75 + Light: 70 + Heavy: 40 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1224,7 +1224,6 @@ SCUD: ImpactSound: splash9.aud ValidImpactTypes: Water - Atomic: ValidTargets: Ground, Water, Air Warhead@1Dam_impact: SpreadDamage @@ -1233,7 +1232,7 @@ Atomic: InfDeath: 5 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@2Res_impact: DestroyResource Size: 1 Warhead@3Smu_impact: LeaveSmudge @@ -1249,7 +1248,7 @@ Atomic: Delay: 5 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@6Res_areanuke1: DestroyResource Size: 2 Delay: 5 @@ -1267,7 +1266,7 @@ Atomic: Delay: 10 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@10Res_areanuke2: DestroyResource Size: 3 Delay: 10 @@ -1282,7 +1281,7 @@ Atomic: Delay: 15 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@13Res_areanuke3: DestroyResource Size: 4 Delay: 15 @@ -1297,7 +1296,7 @@ Atomic: Delay: 20 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@16Res_areanuke4: DestroyResource Size: 5 Delay: 20 @@ -1314,7 +1313,7 @@ MiniNuke: InfDeath: 5 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@2Res_impact: DestroyResource Size: 1 Warhead@3Eff_impact: CreateEffect @@ -1327,7 +1326,7 @@ MiniNuke: Delay: 5 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@5Res_areanuke1: DestroyResource Size: 2 Delay: 5 @@ -1341,7 +1340,7 @@ MiniNuke: Delay: 10 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@8Res_areanuke2: DestroyResource Size: 3 Delay: 10 @@ -1352,7 +1351,7 @@ MiniNuke: Delay: 15 ValidTargets: Ground, Water, Air Versus: - Concrete: 25% + Concrete: 25 Warhead@10Res_areanuke3: DestroyResource Size: 4 Delay: 15 @@ -1367,10 +1366,10 @@ UnitExplode: Damage: 500 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: self_destruct ImpactSound: kaboom22.aud @@ -1386,10 +1385,10 @@ UnitExplodeShip: Damage: 50 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: building ImpactSound: kaboom25.aud @@ -1400,10 +1399,10 @@ UnitExplodeSubmarine: Damage: 50 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: large_splash ImpactSound: splash9.aud @@ -1414,10 +1413,10 @@ UnitExplodeSmall: Damage: 40 InfDeath: 4 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: large_explosion ImpactSound: kaboom15.aud @@ -1434,11 +1433,11 @@ BarrelExplode: InfDeath: 4 Delay: 5 Versus: - None: 120% - Wood: 200% - Light: 50% - Heavy: 25% - Concrete: 10% + None: 120 + Wood: 200 + Light: 50 + Heavy: 25 + Concrete: 10 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Size: 2,1 @@ -1488,7 +1487,7 @@ PortaTesla: Damage: 45 InfDeath: 6 Versus: - None: 1000% + None: 1000 TTankZap: ReloadDelay: 120 @@ -1501,7 +1500,7 @@ TTankZap: Damage: 100 InfDeath: 6 Versus: - None: 1000% + None: 1000 FLAK-23: ReloadDelay: 10 @@ -1516,11 +1515,11 @@ FLAK-23: Damage: 20 ValidTargets: Air, Ground, Water Versus: - None: 40% - Wood: 10% - Light: 60% - Heavy: 10% - Concrete: 20% + None: 40 + Wood: 10 + Light: 60 + Heavy: 10 + Concrete: 20 Warhead@2Eff: CreateEffect Explosion: small_explosion InvalidImpactTypes: Air, AirHit, Water @@ -1542,11 +1541,11 @@ Sniper: Damage: 140 InfDeath: 2 Versus: - None: 100% - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + None: 100 + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 APTusk: ReloadDelay: 60 @@ -1569,10 +1568,10 @@ APTusk: InfDeath: 4 ValidTargets: Ground, Water Versus: - None: 25% - Wood: 75% - Light: 75% - Concrete: 50% + None: 25 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1594,11 +1593,11 @@ Claw: Damage: 33 InfDeath: 1 Versus: - None: 90% - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 Mandible: ReloadDelay: 10 @@ -1610,11 +1609,11 @@ Mandible: Damage: 60 InfDeath: 1 Versus: - None: 90% - Wood: 10% - Light: 30% - Heavy: 10% - Concrete: 10% + None: 90 + Wood: 10 + Light: 30 + Heavy: 10 + Concrete: 10 MADTankThump: InvalidTargets: MADTank @@ -1623,7 +1622,7 @@ MADTankThump: Damage: 1 InvalidTargets: MADTank Versus: - None: 0% + None: 0 MADTankDetonate: InvalidTargets: MADTank @@ -1632,7 +1631,7 @@ MADTankDetonate: Damage: 19 InvalidTargets: MADTank Versus: - None: 0% + None: 0 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Size: 7,6 @@ -1646,10 +1645,10 @@ OreExplosion: Damage: 10 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Res: CreateResource AddsResourceType: Ore Size: 1,1 diff --git a/mods/ts/weapons.yaml b/mods/ts/weapons.yaml index f7f2bfcb7c..13d6a8dea8 100644 --- a/mods/ts/weapons.yaml +++ b/mods/ts/weapons.yaml @@ -4,10 +4,10 @@ UnitExplode: Damage: 500 InfDeath: 2 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: large_twlt ImpactSound: expnew09.aud @@ -18,10 +18,10 @@ UnitExplodeSmall: Damage: 40 InfDeath: 2 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Eff: CreateEffect Explosion: medium_brnl ImpactSound: expnew13.aud @@ -38,10 +38,10 @@ Minigun: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -65,11 +65,11 @@ Grenade: InfDeath: 3 ProneModifier: 70 Versus: - None: 100% - Wood: 85% - Light: 70% - Heavy: 35% - Concrete: 28% + None: 100 + Wood: 85 + Light: 70 + Heavy: 35 + Concrete: 28 Warhead@2Eff: CreateEffect Explosion: large_grey_explosion ImpactSound: expnew13.aud @@ -100,11 +100,11 @@ Bazooka: InfDeath: 2 ValidTargets: Ground, Air Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: small_clsn ImpactSound: expnew12.aud @@ -139,11 +139,11 @@ MultiCluster: InfDeath: 3 ValidTargets: Ground Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: large_explosion ImpactSound: expnew09.aud @@ -165,10 +165,10 @@ Heal: InfDeath: 1 ProneModifier: 100 Versus: - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 Sniper: ReloadDelay: 60 @@ -182,11 +182,11 @@ Sniper: InfDeath: 1 ProneModifier: 100 Versus: - None: 100% - Wood: 0% - Light: 0% - Heavy: 0% - Concrete: 0% + None: 100 + Wood: 0 + Light: 0 + Heavy: 0 + Concrete: 0 M1Carbine: ReloadDelay: 20 @@ -200,10 +200,10 @@ M1Carbine: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -226,11 +226,11 @@ LtRail: InfDeath: 2 ProneModifier: 100 Versus: - None: 100% - Wood: 130% - Light: 150% - Heavy: 110% - Concrete: 5% + None: 100 + Wood: 130 + Light: 150 + Heavy: 110 + Concrete: 5 CyCannon: ReloadDelay: 50 @@ -249,11 +249,11 @@ CyCannon: ProneModifier: 100 ValidTargets: Ground Versus: - None: 100% - Wood: 65% - Light: 75% - Heavy: 50% - Concrete: 40% + None: 100 + Wood: 65 + Light: 75 + Heavy: 50 + Concrete: 40 Warhead@2Eff: CreateEffect Explosion: large_bang ImpactSound: expnew12.aud @@ -276,10 +276,10 @@ Vulcan3: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -300,11 +300,11 @@ Vulcan2: InfDeath: 1 ProneModifier: 70 Versus: - None: 100% - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + None: 100 + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -324,10 +324,10 @@ Vulcan: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -352,10 +352,10 @@ FiendShard: InfDeath: 1 ProneModifier: 100 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@3EffWater: CreateEffect Explosion: small_watersplash ImpactSound: ssplash3.aud @@ -374,10 +374,10 @@ JumpCannon: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -407,11 +407,11 @@ HoverMissile: InfDeath: 2 ValidTargets: Ground, Air Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: small_clsn ImpactSound: expnew12.aud @@ -442,11 +442,11 @@ HoverMissile: Damage: 50 InfDeath: 2 Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: medium_clsn ImpactSound: expnew14.aud @@ -479,11 +479,11 @@ MammothTusk: ProneModifier: 70 ValidTargets: Air Versus: - None: 100% - Wood: 85% - Light: 70% - Heavy: 35% - Concrete: 28% + None: 100 + Wood: 85 + Light: 70 + Heavy: 35 + Concrete: 28 Warhead@2Eff: CreateEffect Explosion: medium_bang ImpactSound: expnew12.aud @@ -505,11 +505,11 @@ Repair: InfDeath: 1 ProneModifier: 100 Versus: - None: 0% - Wood: 0% - Light: 100% - Heavy: 100% - Concrete: 0% + None: 0 + Wood: 0 + Light: 100 + Heavy: 100 + Concrete: 0 SlimeAttack: ReloadDelay: 80 @@ -523,10 +523,10 @@ SlimeAttack: InfDeath: 2 ProneModifier: 100 Versus: - Wood: 25% - Light: 30% - Heavy: 10% - Concrete: 10% + Wood: 25 + Light: 30 + Heavy: 10 + Concrete: 10 SuicideBomb: ReloadDelay: 1 @@ -537,10 +537,10 @@ SuicideBomb: Damage: 11000 InfDeath: 5 Versus: - None: 90% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Res: DestroyResource 120mm: @@ -554,11 +554,11 @@ SuicideBomb: Damage: 70 InfDeath: 2 Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: large_clsn ImpactSound: expnew14.aud @@ -583,11 +583,11 @@ MechRailgun: InfDeath: 5 ProneModifier: 100 Versus: - None: 200% - Wood: 175% - Light: 160% - Heavy: 100% - Concrete: 25% + None: 200 + Wood: 175 + Light: 160 + Heavy: 100 + Concrete: 25 AssaultCannon: ReloadDelay: 50 @@ -601,10 +601,10 @@ AssaultCannon: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -635,11 +635,11 @@ BikeMissile: InfDeath: 2 ValidTargets: Ground Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: small_clsn ImpactSound: expnew12.aud @@ -663,10 +663,10 @@ RaiderCannon: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -690,11 +690,11 @@ FireballLauncher: InfDeath: 5 ProneModifier: 100 Versus: - None: 600% - Wood: 148% - Light: 59% - Heavy: 6% - Concrete: 2% + None: 600 + Wood: 148 + Light: 59 + Heavy: 6 + Concrete: 2 SonicZap: ReloadDelay: 120 @@ -710,8 +710,8 @@ SonicZap: Damage: 100 InfDeath: 5 Versus: - Heavy: 80% - Concrete: 60% + Heavy: 80 + Concrete: 60 Dragon: ReloadDelay: 50 @@ -735,11 +735,11 @@ Dragon: InfDeath: 2 ValidTargets: Ground, Air Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: small_clsn ImpactSound: expnew12.aud @@ -768,11 +768,11 @@ Dragon: Damage: 36 InfDeath: 2 Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: medium_clsn ImpactSound: expnew14.aud @@ -800,11 +800,11 @@ Dragon: InfDeath: 3 ProneModifier: 100 Versus: - None: 100% - Wood: 85% - Light: 68% - Heavy: 35% - Concrete: 35% + None: 100 + Wood: 85 + Light: 68 + Heavy: 35 + Concrete: 35 Warhead@2Eff: CreateEffect Explosion: large_explosion ImpactSound: expnew06.aud @@ -836,11 +836,11 @@ Hellfire: InfDeath: 2 ValidTargets: Ground, Air Versus: - None: 30% - Wood: 65% - Light: 150% - Heavy: 100% - Concrete: 30% + None: 30 + Wood: 65 + Light: 150 + Heavy: 100 + Concrete: 30 Warhead@2Eff: CreateEffect Explosion: small_bang ImpactSound: expnew12.aud @@ -868,11 +868,11 @@ Bomb: InfDeath: 3 ProneModifier: 100 Versus: - None: 200% - Wood: 90% - Light: 75% - Heavy: 32% - Concrete: 100% + None: 200 + Wood: 90 + Light: 75 + Heavy: 32 + Concrete: 100 Warhead@2Eff: CreateEffect Explosion: large_explosion ImpactSound: expnew09.aud @@ -903,11 +903,11 @@ Proton: InfDeath: 3 ValidTargets: Ground, Air Versus: - None: 25% - Wood: 65% - Light: 75% - Heavy: 100% - Concrete: 60% + None: 25 + Wood: 65 + Light: 75 + Heavy: 100 + Concrete: 60 Warhead@2Eff: CreateEffect Explosion: small_bang ImpactSound: expnew12.aud @@ -931,10 +931,10 @@ HarpyClaw: ProneModifier: 70 ValidTargets: Ground, Air Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -954,10 +954,10 @@ Pistola: InfDeath: 1 ProneModifier: 70 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piff InvalidImpactTypes: Water @@ -1013,10 +1013,10 @@ VulcanTower: Damage: 18 InfDeath: 1 Versus: - Wood: 60% - Light: 40% - Heavy: 25% - Concrete: 10% + Wood: 60 + Light: 40 + Heavy: 25 + Concrete: 10 Warhead@2Eff: CreateEffect Explosion: piffs InvalidImpactTypes: Water @@ -1041,11 +1041,11 @@ RPGTower: InfDeath: 2 ProneModifier: 70 Versus: - None: 30% - Wood: 75% - Light: 90% - Heavy: 100% - Concrete: 70% + None: 30 + Wood: 75 + Light: 90 + Heavy: 100 + Concrete: 70 Warhead@2Eff: CreateEffect Explosion: large_clsn ImpactSound: expnew14.aud @@ -1115,10 +1115,10 @@ TiberiumExplosion: Damage: 10 InfDeath: 3 Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% + None: 90 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Res: CreateResource AddsResourceType: Tiberium Size: 1,1 From db1df48466514ab366efa9c68bf2fb464d66c800 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 18 Aug 2014 17:17:23 +1200 Subject: [PATCH 10/11] Increase falloff accuracy for large damage amounts. --- mods/cnc/weapons.yaml | 24 ++++++++++++------- mods/d2k/weapons.yaml | 18 ++++++++++----- mods/ra/weapons.yaml | 54 ++++++++++++++++++++++++++++--------------- mods/ts/weapons.yaml | 9 +++++--- 4 files changed, 70 insertions(+), 35 deletions(-) diff --git a/mods/cnc/weapons.yaml b/mods/cnc/weapons.yaml index cf9199b9b4..4fdbdae7f1 100644 --- a/mods/cnc/weapons.yaml +++ b/mods/cnc/weapons.yaml @@ -26,7 +26,8 @@ HeliExplode: UnitExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 90 @@ -70,7 +71,8 @@ Atomic: Report: nukemisl.aud Warhead@1Dam_impact: SpreadDamage Spread: 1c0 - Damage: 1500 + Damage: 150 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 ValidTargets: Ground, Air Versus: @@ -83,7 +85,8 @@ Atomic: ImpactSound: nukexplo.aud Warhead@3Dam_areanukea: SpreadDamage Spread: 2c512 - Damage: 1000 + Damage: 100 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 3 ValidTargets: Ground, Air @@ -104,7 +107,8 @@ Atomic: Delay: 3 Warhead@7Dam_areanukeb: SpreadDamage Spread: 3c768 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 6 ValidTargets: Ground, Air @@ -122,7 +126,8 @@ Atomic: Delay: 6 Warhead@10Dam_areanukec: SpreadDamage Spread: 5c0 - Damage: 200 + Damage: 20 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 9 ValidTargets: Ground, Air @@ -143,7 +148,8 @@ IonCannon: ValidTargets: Ground, Air Warhead@1Dam_impact: SpreadDamage Spread: 1c0 - Damage: 1000 + Damage: 100 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 ValidTargets: Ground, Air Warhead@2Res_impact: DestroyResource @@ -872,7 +878,8 @@ Napalm: Image: BOMBLET Warhead@1Dam: SpreadDamage Spread: 341 - Damage: 300 + Damage: 30 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 ValidTargets: Ground, Water Versus: @@ -889,7 +896,8 @@ Napalm: Napalm.Crate: Warhead@1Dam: SpreadDamage Spread: 170 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Versus: None: 90 diff --git a/mods/d2k/weapons.yaml b/mods/d2k/weapons.yaml index b67dbd9051..ea7d467dd3 100644 --- a/mods/d2k/weapons.yaml +++ b/mods/d2k/weapons.yaml @@ -495,7 +495,8 @@ ParaBomb: Image: BOMBS Warhead@1Dam: SpreadDamage Spread: 192 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 30 @@ -515,7 +516,8 @@ Napalm: Image: BOMBS Warhead@1Dam: SpreadDamage Spread: 640 - Damage: 300 + Damage: 30 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 20 @@ -544,7 +546,8 @@ Demolish: Atomic: Warhead@1Dam: SpreadDamage Spread: 2c0 - Damage: 1800 + Damage: 180 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Versus: None: 100 @@ -559,7 +562,8 @@ Atomic: CrateNuke: Warhead@1Dam: SpreadDamage Spread: 1c576 - Damage: 800 + Damage: 80 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Versus: None: 20 @@ -574,7 +578,8 @@ CrateNuke: CrateExplosion: Warhead@1Dam: SpreadDamage Spread: 320 - Damage: 400 + Damage: 40 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 90 @@ -588,7 +593,8 @@ CrateExplosion: UnitExplode: Warhead@1Dam: SpreadDamage Spread: 320 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 90 diff --git a/mods/ra/weapons.yaml b/mods/ra/weapons.yaml index 7914d0fe27..7f31b95f1f 100644 --- a/mods/ra/weapons.yaml +++ b/mods/ra/weapons.yaml @@ -742,7 +742,8 @@ Napalm: CrateNapalm: Warhead@1Dam: SpreadDamage Spread: 170 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Versus: None: 90 @@ -758,7 +759,8 @@ CrateNapalm: CrateExplosion: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 90 @@ -772,7 +774,8 @@ CrateExplosion: CrateNuke: Warhead@1Dam_impact: SpreadDamage Spread: 256 - Damage: 1000 + Damage: 100 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Versus: None: 90 @@ -900,7 +903,8 @@ RedEye: ContrailLength: 30 Warhead@1Dam: SpreadDamage Spread: 213 - Damage: 250 + Damage: 25 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 3 Versus: None: 60 @@ -933,7 +937,8 @@ SubMissile: ContrailLength: 30 Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 300 + Damage: 30 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 3 Versus: None: 40 @@ -1099,7 +1104,8 @@ ParaBomb: Acceleration: 0 Warhead@1Dam: SpreadDamage Spread: 256 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 30 @@ -1206,7 +1212,8 @@ SCUD: Angle: 62 Warhead@1Dam: SpreadDamage Spread: 341 - Damage: 450 + Damage: 45 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 3 Versus: None: 90 @@ -1228,7 +1235,8 @@ Atomic: ValidTargets: Ground, Water, Air Warhead@1Dam_impact: SpreadDamage Spread: 1c0 - Damage: 1500 + Damage: 150 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 ValidTargets: Ground, Water, Air Versus: @@ -1243,7 +1251,8 @@ Atomic: ImpactSound: kaboom1.aud Warhead@5Dam_areanuke1: SpreadDamage Spread: 2c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 5 ValidTargets: Ground, Water, Air @@ -1261,7 +1270,8 @@ Atomic: Delay: 5 Warhead@9Dam_areanuke2: SpreadDamage Spread: 3c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 10 ValidTargets: Ground, Water, Air @@ -1276,7 +1286,8 @@ Atomic: Delay: 10 Warhead@12Dam_areanuke3: SpreadDamage Spread: 4c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 15 ValidTargets: Ground, Water, Air @@ -1291,7 +1302,8 @@ Atomic: Delay: 15 Warhead@15Dam_areanuke4: SpreadDamage Spread: 5c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 20 ValidTargets: Ground, Water, Air @@ -1309,7 +1321,8 @@ MiniNuke: ValidTargets: Ground, Water, Air Warhead@1Dam_impact: SpreadDamage Spread: 1c0 - Damage: 1500 + Damage: 150 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 ValidTargets: Ground, Water, Air Versus: @@ -1321,7 +1334,8 @@ MiniNuke: ImpactSound: kaboom1.aud Warhead@4Dam_areanuke1: SpreadDamage Spread: 2c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 5 ValidTargets: Ground, Water, Air @@ -1335,7 +1349,8 @@ MiniNuke: Delay: 5 Warhead@7Dam_areanuke2: SpreadDamage Spread: 3c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 10 ValidTargets: Ground, Water, Air @@ -1346,7 +1361,8 @@ MiniNuke: Delay: 10 Warhead@9Dam_areanuke3: SpreadDamage Spread: 4c0 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 Delay: 15 ValidTargets: Ground, Water, Air @@ -1363,7 +1379,8 @@ MiniNuke: UnitExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Versus: None: 90 @@ -1429,7 +1446,8 @@ UnitExplodeSmall: BarrelExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 4 Delay: 5 Versus: diff --git a/mods/ts/weapons.yaml b/mods/ts/weapons.yaml index 13d6a8dea8..27239ec93f 100644 --- a/mods/ts/weapons.yaml +++ b/mods/ts/weapons.yaml @@ -1,7 +1,8 @@ UnitExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 2 Versus: None: 90 @@ -534,7 +535,8 @@ SuicideBomb: Report: HUNTER2.AUD Warhead@1Dam: SpreadDamage Spread: 256 - Damage: 11000 + Damage: 110 + Falloff: 10000, 3680, 1350, 500, 180, 70, 0 InfDeath: 5 Versus: None: 90 @@ -985,7 +987,8 @@ IonCannon: ValidTargets: Ground, Air Warhead@1Dam_impact: SpreadDamage Spread: 1c0 - Damage: 1000 + Damage: 100 + Falloff: 1000, 368, 135, 50, 18, 7, 0 InfDeath: 5 ProneModifier: 100 ValidTargets: Ground, Air From 32e099d60ac1e0e91112e68fa319281148a912ce Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Mon, 18 Aug 2014 18:26:40 +1200 Subject: [PATCH 11/11] Fix inner range filtering in HealthPercentageDamageWarhead. --- OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs index b3b00e5d3c..6bc23a56db 100644 --- a/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA public class HealthPercentageDamageWarhead : DamageWarhead { [Desc("Size of the area. Damage will be applied to this area.", "If two spreads are defined, the area of effect is a ring, where the second value is the inner radius.")] - public readonly WRange[] Spread = { new WRange(43), WRange.Zero }; + public readonly WRange[] Spread = { new WRange(43) }; public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) { @@ -28,7 +28,7 @@ namespace OpenRA.Mods.RA var range = Spread[0]; var hitActors = world.FindActorsInCircle(pos, range); if (Spread.Length > 1 && Spread[1].Range > 0) - hitActors.Except(world.FindActorsInCircle(pos, Spread[1])); + hitActors = hitActors.Except(world.FindActorsInCircle(pos, Spread[1])); foreach (var victim in hitActors) DoImpact(victim, firedBy, damageModifiers);