diff --git a/OpenRA.Game/GameRules/DamageWarhead.cs b/OpenRA.Game/GameRules/DamageWarhead.cs new file mode 100644 index 0000000000..ad20e891c9 --- /dev/null +++ b/OpenRA.Game/GameRules/DamageWarhead.cs @@ -0,0 +1,86 @@ +#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.Traits; + +namespace OpenRA.GameRules +{ + public abstract class DamageWarhead : Warhead + { + [Desc("How much (raw) damage to deal")] + public readonly int Damage = 0; + + [Desc("Infantry death animation to use")] + public readonly string InfDeath = "1"; + + [Desc("Whether we should prevent prone response for infantry.")] + public readonly bool PreventProne = false; + + [Desc("By what percentage should damage be modified against prone infantry.")] + public readonly int ProneModifier = 50; + + [FieldLoader.LoadUsing("LoadVersus")] + [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(); + } + + public int DamageVersus(ActorInfo victim) + { + var armor = victim.Traits.GetOrDefault(); + if (armor != null && armor.Type != null) + { + int versus; + if (Versus.TryGetValue(armor.Type, out versus)) + return versus; + } + + return 100; + } + + // 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 = victim.Traits.GetOrDefault(); + if (health == null) + return false; + + return DamageVersus(victim) > 0; + } + + 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, damageModifiers); + else + DoImpact(target.CenterPosition, firedBy, 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.Game/GameRules/Warhead.cs b/OpenRA.Game/GameRules/Warhead.cs index 9bdd950ace..043e5772e6 100644 --- a/OpenRA.Game/GameRules/Warhead.cs +++ b/OpenRA.Game/GameRules/Warhead.cs @@ -27,9 +27,7 @@ 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 virtual float EffectivenessAgainst(ActorInfo ai) { return 0f; } + public abstract void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers); public bool IsValidAgainst(Target target, World world, Actor firedBy) { @@ -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) <= 0f) + 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) <= 0f) + 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. diff --git a/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs deleted file mode 100644 index 223fb720d6..0000000000 --- a/OpenRA.Game/GameRules/Warheads/AbsoluteSpreadDamageWarhead.cs +++ /dev/null @@ -1,84 +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.Traits; - -namespace OpenRA.GameRules -{ - 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(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) - { - 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)); - - foreach (var victim in hitActors) - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim, firedBy, firepowerModifier * currentFactor); - victim.InflictDamage(firedBy, damage, this); - } - } - } - - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) - { - if (IsValidAgainst(victim, firedBy)) - { - var currentFactor = SpreadFactor[0]; - var damage = (int)GetDamageToInflict(victim, firedBy, firepowerModifier * currentFactor); - victim.InflictDamage(firedBy, damage, this); - } - } - - public int GetDamageToInflict(Actor target, Actor firedBy, float modifier) - { - var healthInfo = target.Info.Traits.GetOrDefault(); - if (healthInfo == null) - return 0; - - var rawDamage = (float)Damage; - - return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info)); - } - } -} diff --git a/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs deleted file mode 100644 index a20cbd7435..0000000000 --- a/OpenRA.Game/GameRules/Warheads/DamageWarhead.cs +++ /dev/null @@ -1,59 +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.Traits; - -namespace OpenRA.GameRules -{ - public abstract class DamageWarhead : Warhead - { - [Desc("How much (raw) damage to deal")] - public readonly int Damage = 0; - - [Desc("Infantry death animation to use")] - public readonly string InfDeath = "1"; - - [Desc("Whether we should prevent prone response for infantry.")] - public readonly bool PreventProne = false; - - [Desc("By what percentage should damage be modified against prone infantry.")] - public readonly int ProneModifier = 50; - - [FieldLoader.LoadUsing("LoadVersus")] - [Desc("Damage vs 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(); - } - - public override float EffectivenessAgainst(ActorInfo ai) - { - var health = ai.Traits.GetOrDefault(); - if (health == null) - return 0f; - - var armor = ai.Traits.GetOrDefault(); - if (armor == null || armor.Type == null) - return 1f; - - float versus; - return Versus.TryGetValue(armor.Type, out versus) ? versus : 1f; - } - } -} diff --git a/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs deleted file mode 100644 index fbbf802629..0000000000 --- a/OpenRA.Game/GameRules/Warheads/HealthPercentageDamageWarhead.cs +++ /dev/null @@ -1,71 +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.Traits; - -namespace OpenRA.GameRules -{ - 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 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) - { - var world = firedBy.World; - 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])); - - foreach (var victim in hitActors) - DoImpact(victim, firedBy, firepowerModifier); - } - - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) - { - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim, firedBy, firepowerModifier); - 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, float modifier) - { - var healthInfo = target.Info.Traits.GetOrDefault(); - if (healthInfo == null) - return 0; - - var rawDamage = (float)Damage; - - return rawDamage * modifier * EffectivenessAgainst(target.Info); - } - } -} diff --git a/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs deleted file mode 100644 index 4641834223..0000000000 --- a/OpenRA.Game/GameRules/Warheads/PerCellDamageWarhead.cs +++ /dev/null @@ -1,65 +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.Traits; - -namespace OpenRA.GameRules -{ - public class PerCellDamageWarhead : DamageWarhead - { - [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) - { - var world = firedBy.World; - var targetTile = world.Map.CellContaining(pos); - var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; - var affectedTiles = world.Map.FindTilesInAnnulus(targetTile, minRange, Size[0]); - - foreach (var t in affectedTiles) - foreach (var victim in world.ActorMap.GetUnitsAt(t)) - DoImpact(victim, firedBy, firepowerModifier); - } - - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) - { - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim, firedBy, firepowerModifier); - victim.InflictDamage(firedBy, damage, this); - } - } - - public int GetDamageToInflict(Actor target, Actor firedBy, float modifier) - { - var healthInfo = target.Info.Traits.GetOrDefault(); - if (healthInfo == null) - return 0; - - var rawDamage = (float)Damage; - - return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info)); - } - } -} diff --git a/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs b/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs deleted file mode 100644 index f9af6ea087..0000000000 --- a/OpenRA.Game/GameRules/Warheads/SpreadDamageWarhead.cs +++ /dev/null @@ -1,83 +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.Traits; - -namespace OpenRA.GameRules -{ - public class SpreadDamageWarhead : DamageWarhead - { - [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) - { - 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); - victim.InflictDamage(firedBy, damage, this); - } - } - - public void DoImpact(Actor victim, Actor firedBy, float firepowerModifier) - { - if (IsValidAgainst(victim, firedBy)) - { - var damage = GetDamageToInflict(victim.CenterPosition, victim, firedBy, firepowerModifier); - victim.InflictDamage(firedBy, damage, this); - } - } - - public int GetDamageToInflict(WPos pos, Actor target, Actor firedBy, float modifier) - { - 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); - - return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info)); - } - - static readonly float[] falloff = - { - 1f, 0.3678795f, 0.1353353f, 0.04978707f, - 0.01831564f, 0.006737947f, 0.002478752f, 0.000911882f - }; - - 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); - } - } -} 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.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.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/OpenRA.Mods.RA.csproj b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj index 6935478767..057f7642ee 100644 --- a/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj +++ b/OpenRA.Mods.RA/OpenRA.Mods.RA.csproj @@ -562,6 +562,9 @@ + + + diff --git a/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs b/OpenRA.Mods.RA/Warheads/CreateEffectWarhead.cs index 7fe28579de..91bf3af422 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, IEnumerable damageModifiers) { + 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..d80c01e04f 100644 --- a/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/CreateResourceWarhead.cs @@ -26,18 +26,13 @@ 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) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { 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..07e64a288c 100644 --- a/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/DestroyResourceWarhead.cs @@ -23,15 +23,10 @@ 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) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { 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/HealthPercentageDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs new file mode 100644 index 0000000000..6bc23a56db --- /dev/null +++ b/OpenRA.Mods.RA/Warheads/HealthPercentageDamageWarhead.cs @@ -0,0 +1,48 @@ +#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 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) }; + + public override void DoImpact(WPos pos, Actor firedBy, IEnumerable damageModifiers) + { + var world = firedBy.World; + var range = Spread[0]; + var hitActors = world.FindActorsInCircle(pos, range); + if (Spread.Length > 1 && Spread[1].Range > 0) + hitActors = hitActors.Except(world.FindActorsInCircle(pos, Spread[1])); + + foreach (var victim in hitActors) + DoImpact(victim, firedBy, damageModifiers); + } + + public override void DoImpact(Actor victim, Actor firedBy, IEnumerable damageModifiers) + { + var healthInfo = victim.Info.Traits.GetOrDefault(); + if (healthInfo == null) + return; + + // 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/LeaveSmudgeWarhead.cs b/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs index 2b051f5555..a8f944fc4b 100644 --- a/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs +++ b/OpenRA.Mods.RA/Warheads/LeaveSmudgeWarhead.cs @@ -25,15 +25,10 @@ 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) - { - DoImpact(target.CenterPosition, firedBy, firepowerModifier); - } - - public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) + public override void DoImpact(Target target, Actor firedBy, IEnumerable damageModifiers) { 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; diff --git a/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs new file mode 100644 index 0000000000..745b82fbc9 --- /dev/null +++ b/OpenRA.Mods.RA/Warheads/PerCellDamageWarhead.cs @@ -0,0 +1,37 @@ +#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 PerCellDamageWarhead : DamageWarhead + { + [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, IEnumerable damageModifiers) + { + var world = firedBy.World; + var targetTile = world.Map.CellContaining(pos); + var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; + var affectedTiles = world.Map.FindTilesInAnnulus(targetTile, minRange, Size[0]); + + foreach (var t in affectedTiles) + foreach (var victim in world.ActorMap.GetUnitsAt(t)) + DoImpact(victim, firedBy, damageModifiers); + } + } +} diff --git a/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs new file mode 100644 index 0000000000..90c7d070ae --- /dev/null +++ b/OpenRA.Mods.RA/Warheads/SpreadDamageWarhead.cs @@ -0,0 +1,86 @@ +#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 SpreadDamageWarhead : DamageWarhead + { + [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 hitActors = world.FindActorsInCircle(pos, Range[Range.Length - 1]); + + foreach (var victim in hitActors) + { + if (!IsValidAgainst(victim, firedBy)) + continue; + + var localModifiers = damageModifiers; + var healthInfo = victim.Info.Traits.GetOrDefault(); + if (healthInfo != null) + { + var distance = Math.Max(0, (victim.CenterPosition - pos).Length - healthInfo.Radius.Range); + localModifiers = localModifiers.Append(GetDamageFalloff(distance)); + } + + DoImpact(victim, firedBy, localModifiers); + } + } + + int GetDamageFalloff(int distance) + { + 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); + + inner = outer; + } + + return 0; + } + } +} 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..4fdbdae7f1 100644 --- a/mods/cnc/weapons.yaml +++ b/mods/cnc/weapons.yaml @@ -26,13 +26,14 @@ HeliExplode: UnitExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 +44,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 +58,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 @@ -70,28 +71,30 @@ 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: - 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 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 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 @@ -104,15 +107,16 @@ 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 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 @@ -122,15 +126,16 @@ 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 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 @@ -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 @@ -188,10 +194,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 +217,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 +240,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 +260,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 +280,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 +308,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 +342,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 +376,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 +409,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 +430,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 +455,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 +476,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 +501,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 +523,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 +546,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 +568,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 +593,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 +616,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 +649,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 +689,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 +722,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 +749,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 +773,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 +802,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 +838,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 +861,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 @@ -872,14 +878,15 @@ 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: - None: 100% - Wood: 100% - Light: 100% - Heavy: 80% + None: 100 + Wood: 100 + Light: 100 + Heavy: 80 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -889,13 +896,14 @@ 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% - Wood: 100% - Light: 60% - Heavy: 25% + None: 90 + Wood: 100 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch Warhead@3Eff: CreateEffect @@ -915,7 +923,7 @@ Laser: Damage: 360 InfDeath: 5 Versus: - Wood: 50% + Wood: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Scorch @@ -937,10 +945,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 +976,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 +1000,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 +1030,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 +1050,7 @@ APCGun.AA: Damage: 25 ValidTargets: Air Versus: - Heavy: 50% + Heavy: 50 Warhead@2Eff: CreateEffect Explosion: small_frag @@ -1065,10 +1073,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 +1095,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 +1111,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 +1127,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 +1143,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..ea7d467dd3 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 @@ -495,13 +495,14 @@ 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% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -515,14 +516,15 @@ 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% - 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 @@ -544,14 +546,15 @@ Demolish: Atomic: Warhead@1Dam: SpreadDamage Spread: 2c0 - Damage: 1800 + Damage: 180 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 @@ -559,14 +562,15 @@ Atomic: CrateNuke: Warhead@1Dam: SpreadDamage Spread: 1c576 - Damage: 800 + Damage: 80 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 @@ -574,13 +578,14 @@ CrateNuke: CrateExplosion: Warhead@1Dam: SpreadDamage Spread: 320 - Damage: 400 + Damage: 40 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 @@ -588,13 +593,14 @@ CrateExplosion: UnitExplode: Warhead@1Dam: SpreadDamage Spread: 320 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 +611,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 +625,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 +639,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 +662,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 +692,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 +708,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..7f31b95f1f 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 @@ -742,13 +742,14 @@ Napalm: CrateNapalm: Warhead@1Dam: SpreadDamage Spread: 170 - Damage: 600 + Damage: 60 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 @@ -758,13 +759,14 @@ CrateNapalm: CrateExplosion: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 @@ -772,13 +774,14 @@ 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% - 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 +792,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 +827,8 @@ TeslaZap: Damage: 100 InfDeath: 6 Versus: - None: 1000% - Wood: 60% + None: 1000 + Wood: 60 Nike: ReloadDelay: 15 @@ -846,11 +849,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 +879,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 @@ -900,13 +903,14 @@ 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% - Wood: 75% - Light: 60% - Heavy: 25% + None: 60 + Wood: 75 + Light: 60 + Heavy: 25 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -933,12 +937,13 @@ 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% - Light: 30% - Heavy: 30% + None: 40 + Light: 30 + Heavy: 30 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -972,10 +977,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 +1018,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 +1049,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 +1080,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 @@ -1099,13 +1104,14 @@ 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% - Wood: 75% - Light: 75% - Concrete: 50% + None: 30 + Wood: 75 + Light: 75 + Concrete: 50 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1128,10 +1134,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 +1150,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 +1168,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 +1185,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 @@ -1206,13 +1212,14 @@ 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% - Wood: 75% - Light: 70% - Heavy: 40% + None: 90 + Wood: 75 + Light: 70 + Heavy: 40 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Warhead@3Eff: CreateEffect @@ -1224,16 +1231,16 @@ SCUD: ImpactSound: splash9.aud ValidImpactTypes: Water - 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: - Concrete: 25% + Concrete: 25 Warhead@2Res_impact: DestroyResource Size: 1 Warhead@3Smu_impact: LeaveSmudge @@ -1244,12 +1251,13 @@ 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@6Res_areanuke1: DestroyResource Size: 2 Delay: 5 @@ -1262,12 +1270,13 @@ 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@10Res_areanuke2: DestroyResource Size: 3 Delay: 10 @@ -1277,12 +1286,13 @@ 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@13Res_areanuke3: DestroyResource Size: 4 Delay: 15 @@ -1292,12 +1302,13 @@ 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@16Res_areanuke4: DestroyResource Size: 5 Delay: 20 @@ -1310,11 +1321,12 @@ 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: - Concrete: 25% + Concrete: 25 Warhead@2Res_impact: DestroyResource Size: 1 Warhead@3Eff_impact: CreateEffect @@ -1322,12 +1334,13 @@ 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@5Res_areanuke1: DestroyResource Size: 2 Delay: 5 @@ -1336,23 +1349,25 @@ 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@8Res_areanuke2: DestroyResource Size: 3 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 Versus: - Concrete: 25% + Concrete: 25 Warhead@10Res_areanuke3: DestroyResource Size: 4 Delay: 15 @@ -1364,13 +1379,14 @@ MiniNuke: UnitExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 +1402,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 +1416,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 +1430,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 @@ -1430,15 +1446,16 @@ UnitExplodeSmall: BarrelExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 +1505,7 @@ PortaTesla: Damage: 45 InfDeath: 6 Versus: - None: 1000% + None: 1000 TTankZap: ReloadDelay: 120 @@ -1501,7 +1518,7 @@ TTankZap: Damage: 100 InfDeath: 6 Versus: - None: 1000% + None: 1000 FLAK-23: ReloadDelay: 10 @@ -1516,11 +1533,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 +1559,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 +1586,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 +1611,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 +1627,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 +1640,7 @@ MADTankThump: Damage: 1 InvalidTargets: MADTank Versus: - None: 0% + None: 0 MADTankDetonate: InvalidTargets: MADTank @@ -1632,7 +1649,7 @@ MADTankDetonate: Damage: 19 InvalidTargets: MADTank Versus: - None: 0% + None: 0 Warhead@2Smu: LeaveSmudge SmudgeType: Crater Size: 7,6 @@ -1646,10 +1663,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..27239ec93f 100644 --- a/mods/ts/weapons.yaml +++ b/mods/ts/weapons.yaml @@ -1,13 +1,14 @@ UnitExplode: Warhead@1Dam: SpreadDamage Spread: 426 - Damage: 500 + Damage: 50 + Falloff: 1000, 368, 135, 50, 18, 7, 0 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 +19,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 +39,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 +66,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 +101,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 +140,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 +166,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 +183,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 +201,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 +227,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 +250,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 +277,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 +301,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 +325,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 +353,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 +375,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 +408,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 +443,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 +480,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 +506,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 +524,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 @@ -534,13 +535,14 @@ 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% - Light: 60% - Heavy: 25% - Concrete: 50% + None: 90 + Light: 60 + Heavy: 25 + Concrete: 50 Warhead@2Res: DestroyResource 120mm: @@ -554,11 +556,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 +585,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 +603,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 +637,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 +665,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 +692,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 +712,8 @@ SonicZap: Damage: 100 InfDeath: 5 Versus: - Heavy: 80% - Concrete: 60% + Heavy: 80 + Concrete: 60 Dragon: ReloadDelay: 50 @@ -735,11 +737,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 +770,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 +802,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 +838,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 +870,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 +905,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 +933,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 +956,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 @@ -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 @@ -1013,10 +1016,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 +1044,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 +1118,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