Merge pull request #6265 from pchote/warhead-intification

Warhead cleanups
This commit is contained in:
Matthias Mailänder
2014-08-23 09:31:41 +02:00
43 changed files with 1197 additions and 1281 deletions

View File

@@ -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<string, int> Versus;
public static object LoadVersus(MiniYaml yaml)
{
var nd = yaml.ToDictionary();
return nd.ContainsKey("Versus")
? nd["Versus"].ToDictionary(my => FieldLoader.GetValue<int>("(value)", my.Value))
: new Dictionary<string, int>();
}
public int DamageVersus(ActorInfo victim)
{
var armor = victim.Traits.GetOrDefault<ArmorInfo>();
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<HealthInfo>();
if (health == null)
return false;
return DamageVersus(victim) > 0;
}
public override void DoImpact(Target target, Actor firedBy, IEnumerable<int> 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<int> damageModifiers);
public virtual void DoImpact(Actor victim, Actor firedBy, IEnumerable<int> damageModifiers)
{
var damage = Util.ApplyPercentageModifiers(Damage, damageModifiers.Append(DamageVersus(victim.Info)));
victim.InflictDamage(firedBy, damage, this);
}
}
}

View File

@@ -27,9 +27,7 @@ namespace OpenRA.GameRules
[Desc("Delay in ticks before applying the warhead effect.","0 = instant (old model).")] [Desc("Delay in ticks before applying the warhead effect.","0 = instant (old model).")]
public readonly int Delay = 0; public readonly int Delay = 0;
public abstract void DoImpact(Target target, Actor firedBy, float firepowerModifier); public abstract void DoImpact(Target target, Actor firedBy, IEnumerable<int> damageModifiers);
public virtual float EffectivenessAgainst(ActorInfo ai) { return 0f; }
public bool IsValidAgainst(Target target, World world, Actor firedBy) public bool IsValidAgainst(Target target, World world, Actor firedBy)
{ {
@@ -56,10 +54,13 @@ namespace OpenRA.GameRules
return false; 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) public bool IsValidAgainst(Actor victim, Actor firedBy)
{ {
// If this warhead is ineffective against the target, then it is not a valid target if (!CanTargetActor(victim.Info, firedBy))
if (EffectivenessAgainst(victim.Info) <= 0f)
return false; return false;
// A target type is valid if it is in the valid targets list, and not in the invalid targets list. // 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) public bool IsValidAgainst(FrozenActor victim, Actor firedBy)
{ {
// If this warhead is ineffective against the target, then it is not a valid target if (!CanTargetActor(victim.Info, firedBy))
if (EffectivenessAgainst(victim.Info) <= 0f)
return false; return false;
// A target type is valid if it is in the valid targets list, and not in the invalid targets list. // A target type is valid if it is in the valid targets list, and not in the invalid targets list.

View File

@@ -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<HealthInfo>();
if (healthInfo == null)
return 0;
var rawDamage = (float)Damage;
return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info));
}
}
}

View File

@@ -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<string, float> Versus;
public static object LoadVersus(MiniYaml yaml)
{
var nd = yaml.ToDictionary();
return nd.ContainsKey("Versus")
? nd["Versus"].ToDictionary(my => FieldLoader.GetValue<float>("(value)", my.Value))
: new Dictionary<string, float>();
}
public override float EffectivenessAgainst(ActorInfo ai)
{
var health = ai.Traits.GetOrDefault<HealthInfo>();
if (health == null)
return 0f;
var armor = ai.Traits.GetOrDefault<ArmorInfo>();
if (armor == null || armor.Type == null)
return 1f;
float versus;
return Versus.TryGetValue(armor.Type, out versus) ? versus : 1f;
}
}
}

View File

@@ -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<HealthInfo>();
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<HealthInfo>();
if (healthInfo == null)
return 0;
var rawDamage = (float)Damage;
return rawDamage * modifier * EffectivenessAgainst(target.Info);
}
}
}

View File

@@ -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<HealthInfo>();
if (healthInfo == null)
return 0;
var rawDamage = (float)Damage;
return (int)(rawDamage * modifier * EffectivenessAgainst(target.Info));
}
}
}

View File

@@ -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<HealthInfo>();
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);
}
}
}

View File

@@ -19,7 +19,7 @@ namespace OpenRA.GameRules
public class ProjectileArgs public class ProjectileArgs
{ {
public WeaponInfo Weapon; public WeaponInfo Weapon;
public float FirepowerModifier = 1.0f; public IEnumerable<int> DamageModifiers;
public int Facing; public int Facing;
public WPos Source; public WPos Source;
public Actor SourceActor; public Actor SourceActor;
@@ -144,13 +144,13 @@ namespace OpenRA.GameRules
return true; return true;
} }
public void Impact(WPos pos, Actor firedBy, float damageModifier) public void Impact(WPos pos, Actor firedBy, IEnumerable<int> damageModifiers)
{ {
foreach (var wh in Warheads) foreach (var wh in Warheads)
{ {
Action a; Action a;
a = () => wh.DoImpact(Target.FromPos(pos), firedBy, damageModifier); a = () => wh.DoImpact(Target.FromPos(pos), firedBy, damageModifiers);
if (wh.Delay > 0) if (wh.Delay > 0)
firedBy.World.AddFrameEndTask( firedBy.World.AddFrameEndTask(
w => w.Add(new DelayedAction(wh.Delay, a))); w => w.Add(new DelayedAction(wh.Delay, a)));

View File

@@ -76,11 +76,6 @@
<ItemGroup> <ItemGroup>
<Compile Include="Actor.cs" /> <Compile Include="Actor.cs" />
<Compile Include="GameRules\Warhead.cs" /> <Compile Include="GameRules\Warhead.cs" />
<Compile Include="GameRules\Warheads\AbsoluteSpreadDamageWarhead.cs" />
<Compile Include="GameRules\Warheads\DamageWarhead.cs" />
<Compile Include="GameRules\Warheads\HealthPercentageDamageWarhead.cs" />
<Compile Include="GameRules\Warheads\PerCellDamageWarhead.cs" />
<Compile Include="GameRules\Warheads\SpreadDamageWarhead.cs" />
<Compile Include="Graphics\QuadRenderer.cs" /> <Compile Include="Graphics\QuadRenderer.cs" />
<Compile Include="Download.cs" /> <Compile Include="Download.cs" />
<Compile Include="Effects\DelayedAction.cs" /> <Compile Include="Effects\DelayedAction.cs" />
@@ -247,6 +242,7 @@
<Compile Include="Graphics\SelectionBarsRenderable.cs" /> <Compile Include="Graphics\SelectionBarsRenderable.cs" />
<Compile Include="Graphics\TargetLineRenderable.cs" /> <Compile Include="Graphics\TargetLineRenderable.cs" />
<Compile Include="Graphics\UISpriteRenderable.cs" /> <Compile Include="Graphics\UISpriteRenderable.cs" />
<Compile Include="GameRules\DamageWarhead.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="FileSystem\D2kSoundResources.cs" /> <Compile Include="FileSystem\D2kSoundResources.cs" />

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using OpenRA.Effects; using OpenRA.Effects;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Graphics; using OpenRA.Graphics;
@@ -45,7 +46,7 @@ namespace OpenRA.Mods.Cnc.Effects
if (!impacted && weaponDelay-- <= 0) if (!impacted && weaponDelay-- <= 0)
{ {
var weapon = world.Map.Rules.Weapons[this.weapon.ToLowerInvariant()]; var weapon = world.Map.Rules.Weapons[this.weapon.ToLowerInvariant()];
weapon.Impact(target.CenterPosition, firedBy.PlayerActor, 1f); weapon.Impact(target.CenterPosition, firedBy.PlayerActor, Enumerable.Empty<int>());
impacted = true; impacted = true;
} }
} }

View File

@@ -43,7 +43,7 @@ namespace OpenRA.Mods.Cnc
if (!info.Resources.Contains(r.Info.Name)) return; if (!info.Resources.Contains(r.Info.Name)) return;
var weapon = self.World.Map.Rules.Weapons[info.Weapon.ToLowerInvariant()]; 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<int>());
poisonTicks = weapon.ReloadDelay; poisonTicks = weapon.ReloadDelay;
} }
} }

View File

@@ -65,7 +65,7 @@ namespace OpenRA.Mods.D2k
if (health.HP <= damageThreshold || --damageTicks > 0) if (health.HP <= damageThreshold || --damageTicks > 0)
return; return;
weapon.Impact(self.CenterPosition, self.World.WorldActor, 1f); weapon.Impact(self.CenterPosition, self.World.WorldActor, Enumerable.Empty<int>());
damageTicks = weapon.ReloadDelay; damageTicks = weapon.ReloadDelay;
} }
} }

View File

@@ -49,10 +49,8 @@ namespace OpenRA.Mods.D2k
Weapon = wep, Weapon = wep,
Facing = self.World.SharedRandom.Next(-1, 255), Facing = self.World.SharedRandom.Next(-1, 255),
// TODO: Convert to ints DamageModifiers = self.TraitsImplementing<IFirepowerModifier>()
FirepowerModifier = self.TraitsImplementing<IFirepowerModifier>() .Select(a => a.GetFirepowerModifier()),
.Select(a => a.GetFirepowerModifier() / 100f)
.Product(),
Source = self.CenterPosition, Source = self.CenterPosition,
SourceActor = self, SourceActor = self,

View File

@@ -8,6 +8,7 @@
*/ */
#endregion #endregion
using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Traits; using OpenRA.Traits;
@@ -54,7 +55,7 @@ namespace OpenRA.Mods.RA.Air
if (info.Explosion != null) if (info.Explosion != null)
{ {
var weapon = self.World.Map.Rules.Weapons[info.Explosion.ToLowerInvariant()]; var weapon = self.World.Map.Rules.Weapons[info.Explosion.ToLowerInvariant()];
weapon.Impact(self.CenterPosition, self, 1f); weapon.Impact(self.CenterPosition, self, Enumerable.Empty<int>());
} }
self.Destroy(); self.Destroy();

View File

@@ -154,10 +154,8 @@ namespace OpenRA.Mods.RA
Weapon = Weapon, Weapon = Weapon,
Facing = legacyFacing, Facing = legacyFacing,
// TODO: Convert to ints DamageModifiers = self.TraitsImplementing<IFirepowerModifier>()
FirepowerModifier = self.TraitsImplementing<IFirepowerModifier>() .Select(a => a.GetFirepowerModifier()),
.Select(a => a.GetFirepowerModifier() / 100f)
.Product(),
Source = muzzlePosition, Source = muzzlePosition,
SourceActor = self, SourceActor = self,

View File

@@ -299,7 +299,7 @@ namespace OpenRA.Mods.RA
self.World.AddFrameEndTask(w => self.World.AddFrameEndTask(w =>
{ {
var weapon = saboteur.World.Map.Rules.Weapons[Info.DemolishWeapon.ToLowerInvariant()]; var weapon = saboteur.World.Map.Rules.Weapons[Info.DemolishWeapon.ToLowerInvariant()];
weapon.Impact(self.CenterPosition, saboteur, 1f); weapon.Impact(self.CenterPosition, saboteur, Enumerable.Empty<int>());
self.World.WorldActor.Trait<ScreenShaker>().AddEffect(15, self.CenterPosition, 6); self.World.WorldActor.Trait<ScreenShaker>().AddEffect(15, self.CenterPosition, 6);
self.Kill(saboteur); self.Kill(saboteur);
}); });

View File

@@ -8,6 +8,7 @@
*/ */
#endregion #endregion
using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Traits; using OpenRA.Traits;
@@ -30,7 +31,7 @@ namespace OpenRA.Mods.RA
public override void Activate(Actor collector) public override void Activate(Actor collector)
{ {
var weapon = self.World.Map.Rules.Weapons[((ExplodeCrateActionInfo)info).Weapon.ToLowerInvariant()]; var weapon = self.World.Map.Rules.Weapons[((ExplodeCrateActionInfo)info).Weapon.ToLowerInvariant()];
weapon.Impact(collector.CenterPosition, self, 1f); weapon.Impact(collector.CenterPosition, self, Enumerable.Empty<int>());
base.Activate(collector); base.Activate(collector);
} }
} }

View File

@@ -172,7 +172,7 @@ namespace OpenRA.Mods.RA.Effects
world.AddFrameEndTask(w => w.Remove(this)); world.AddFrameEndTask(w => w.Remove(this));
args.Weapon.Impact(pos, args.SourceActor, args.FirepowerModifier); args.Weapon.Impact(pos, args.SourceActor, args.DamageModifiers);
} }
} }
} }

View File

@@ -56,7 +56,7 @@ namespace OpenRA.Mods.RA.Effects
{ {
pos += new WVec(0, 0, args.PassiveTarget.Z - pos.Z); pos += new WVec(0, 0, args.PassiveTarget.Z - pos.Z);
world.AddFrameEndTask(w => w.Remove(this)); world.AddFrameEndTask(w => w.Remove(this));
args.Weapon.Impact(pos, args.SourceActor, args.FirepowerModifier); args.Weapon.Impact(pos, args.SourceActor, args.DamageModifiers);
} }
anim.Tick(); anim.Tick();

View File

@@ -69,7 +69,7 @@ namespace OpenRA.Mods.RA.Effects
if (hitanim != null) if (hitanim != null)
hitanim.PlayThen("idle", () => animationComplete = true); hitanim.PlayThen("idle", () => animationComplete = true);
args.Weapon.Impact(target, args.SourceActor, args.FirepowerModifier); args.Weapon.Impact(target, args.SourceActor, args.DamageModifiers);
doneDamage = true; doneDamage = true;
} }

View File

@@ -180,7 +180,7 @@ namespace OpenRA.Mods.RA.Effects
if (ticks <= info.Arm) if (ticks <= info.Arm)
return; return;
args.Weapon.Impact(pos, args.SourceActor, args.FirepowerModifier); args.Weapon.Impact(pos, args.SourceActor, args.DamageModifiers);
} }
public IEnumerable<IRenderable> Render(WorldRenderer wr) public IEnumerable<IRenderable> Render(WorldRenderer wr)

View File

@@ -81,7 +81,7 @@ namespace OpenRA.Mods.RA.Effects
{ {
world.AddFrameEndTask(w => w.Remove(this)); world.AddFrameEndTask(w => w.Remove(this));
var weapon = world.Map.Rules.Weapons[this.weapon.ToLowerInvariant()]; var weapon = world.Map.Rules.Weapons[this.weapon.ToLowerInvariant()];
weapon.Impact(pos, firedBy.PlayerActor, 1f); weapon.Impact(pos, firedBy.PlayerActor, Enumerable.Empty<int>());
world.WorldActor.Trait<ScreenShaker>().AddEffect(20, pos, 5); world.WorldActor.Trait<ScreenShaker>().AddEffect(20, pos, 5);
foreach (var a in world.ActorsWithTrait<NukePaletteEffect>()) foreach (var a in world.ActorsWithTrait<NukePaletteEffect>())

View File

@@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Effects
if (!doneDamage) if (!doneDamage)
{ {
var pos = Args.GuidedTarget.IsValidFor(Args.SourceActor) ? Args.GuidedTarget.CenterPosition : Args.PassiveTarget; 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; doneDamage = true;
} }
} }

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Mods.RA
if (weapon.Report != null && weapon.Report.Any()) if (weapon.Report != null && weapon.Report.Any())
Sound.Play(weapon.Report.Random(e.Attacker.World.SharedRandom), self.CenterPosition); 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<int>());
} }
} }

View File

@@ -10,6 +10,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq;
using OpenRA.GameRules; using OpenRA.GameRules;
using OpenRA.Mods.RA.Activities; using OpenRA.Mods.RA.Activities;
using OpenRA.Mods.RA.Move; using OpenRA.Mods.RA.Move;
@@ -71,7 +72,7 @@ namespace OpenRA.Mods.RA
if (info.ThumpDamageWeapon != null) if (info.ThumpDamageWeapon != null)
{ {
var weapon = self.World.Map.Rules.Weapons[info.ThumpDamageWeapon.ToLowerInvariant()]; var weapon = self.World.Map.Rules.Weapons[info.ThumpDamageWeapon.ToLowerInvariant()];
weapon.Impact(self.CenterPosition, self, 1f); weapon.Impact(self.CenterPosition, self, Enumerable.Empty<int>());
} }
screenShaker.AddEffect(info.ThumpShakeTime, self.CenterPosition, info.ThumpShakeIntensity, info.ThumpShakeMultiplier); screenShaker.AddEffect(info.ThumpShakeTime, self.CenterPosition, info.ThumpShakeIntensity, info.ThumpShakeMultiplier);
tick = 0; tick = 0;
@@ -110,7 +111,7 @@ namespace OpenRA.Mods.RA
if (info.DetonationWeapon != null) if (info.DetonationWeapon != null)
{ {
var weapon = self.World.Map.Rules.Weapons[info.DetonationWeapon.ToLowerInvariant()]; var weapon = self.World.Map.Rules.Weapons[info.DetonationWeapon.ToLowerInvariant()];
weapon.Impact(self.CenterPosition, self, 1f); weapon.Impact(self.CenterPosition, self, Enumerable.Empty<int>());
} }
self.Kill(self); self.Kill(self);
}); });

View File

@@ -562,6 +562,9 @@
<Compile Include="GainsStatUpgrades.cs" /> <Compile Include="GainsStatUpgrades.cs" />
<Compile Include="Player\Extensions.cs" /> <Compile Include="Player\Extensions.cs" />
<Compile Include="ServerTraits\LobbySettingsNotification.cs" /> <Compile Include="ServerTraits\LobbySettingsNotification.cs" />
<Compile Include="Warheads\HealthPercentageDamageWarhead.cs" />
<Compile Include="Warheads\PerCellDamageWarhead.cs" />
<Compile Include="Warheads\SpreadDamageWarhead.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj"> <ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">

View File

@@ -34,11 +34,6 @@ namespace OpenRA.Mods.RA
[Desc("What impact types should this effect NOT apply to.", "Overrides ValidImpactTypes.")] [Desc("What impact types should this effect NOT apply to.", "Overrides ValidImpactTypes.")]
public readonly ImpactType InvalidImpactTypes = ImpactType.None; 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) public static ImpactType GetImpactType(World world, CPos cell, WPos pos)
{ {
var isAir = pos.Z > 0; var isAir = pos.Z > 0;
@@ -79,8 +74,9 @@ namespace OpenRA.Mods.RA
return false; return false;
} }
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier) public override void DoImpact(Target target, Actor firedBy, IEnumerable<int> damageModifiers)
{ {
var pos = target.CenterPosition;
var world = firedBy.World; var world = firedBy.World;
var targetTile = world.Map.CellContaining(pos); var targetTile = world.Map.CellContaining(pos);
var isValid = IsValidImpact(pos, firedBy); var isValid = IsValidImpact(pos, firedBy);

View File

@@ -26,18 +26,13 @@ namespace OpenRA.Mods.RA
// TODO: Allow maximum resource splatter to be defined. (Per tile, and in total). // TODO: Allow maximum resource splatter to be defined. (Per tile, and in total).
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) public override void DoImpact(Target target, Actor firedBy, IEnumerable<int> damageModifiers)
{
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
}
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
{ {
if (string.IsNullOrEmpty(AddsResourceType)) if (string.IsNullOrEmpty(AddsResourceType))
return; return;
var world = firedBy.World; var world = firedBy.World;
var targetTile = world.Map.CellContaining(pos); var targetTile = world.Map.CellContaining(target.CenterPosition);
var resLayer = world.WorldActor.Trait<ResourceLayer>(); var resLayer = world.WorldActor.Trait<ResourceLayer>();
var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0;

View File

@@ -23,15 +23,10 @@ namespace OpenRA.Mods.RA
// TODO: Allow maximum resource removal to be defined. (Per tile, and in total). // TODO: Allow maximum resource removal to be defined. (Per tile, and in total).
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) public override void DoImpact(Target target, Actor firedBy, IEnumerable<int> damageModifiers)
{
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
}
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
{ {
var world = firedBy.World; var world = firedBy.World;
var targetTile = world.Map.CellContaining(pos); var targetTile = world.Map.CellContaining(target.CenterPosition);
var resLayer = world.WorldActor.Trait<ResourceLayer>(); var resLayer = world.WorldActor.Trait<ResourceLayer>();
var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0;

View File

@@ -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<int> 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<int> damageModifiers)
{
var healthInfo = victim.Info.Traits.GetOrDefault<HealthInfo>();
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);
}
}
}

View File

@@ -25,15 +25,10 @@ namespace OpenRA.Mods.RA
[Desc("Type of smudge to apply to terrain.")] [Desc("Type of smudge to apply to terrain.")]
public readonly string[] SmudgeType = { }; public readonly string[] SmudgeType = { };
public override void DoImpact(Target target, Actor firedBy, float firepowerModifier) public override void DoImpact(Target target, Actor firedBy, IEnumerable<int> damageModifiers)
{
DoImpact(target.CenterPosition, firedBy, firepowerModifier);
}
public void DoImpact(WPos pos, Actor firedBy, float firepowerModifier)
{ {
var world = firedBy.World; var world = firedBy.World;
var targetTile = world.Map.CellContaining(pos); var targetTile = world.Map.CellContaining(target.CenterPosition);
var smudgeLayers = world.WorldActor.TraitsImplementing<SmudgeLayer>().ToDictionary(x => x.Info.Type); var smudgeLayers = world.WorldActor.TraitsImplementing<SmudgeLayer>().ToDictionary(x => x.Info.Type);
var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0; var minRange = (Size.Length > 1 && Size[1] > 0) ? Size[1] : 0;

View File

@@ -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<int> 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);
}
}
}

View File

@@ -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<int> 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<HealthInfo>();
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;
}
}
}

View File

@@ -29,7 +29,7 @@ namespace OpenRA.Utility
static void ConvertFloatArrayToPercentArray(ref string input) static void ConvertFloatArrayToPercentArray(ref string input)
{ {
input = string.Join(", ", input.Split(',') input = string.Join(", ", input.Split(',')
.Select(s => ((int)(float.Parse(s) * 100)).ToString())); .Select(s => ((int)Math.Round(FieldLoader.GetValue<float>("(float value)", s) * 100)).ToString()));
} }
static void ConvertPxToRange(ref string input) 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); UpgradeWeaponRules(engineVersion, ref node.Value.Nodes, node, depth + 1);
} }
} }

View File

@@ -541,7 +541,7 @@ Weapons:
BoatMissile: BoatMissile:
Warhead: SpreadDamage Warhead: SpreadDamage
Versus: Versus:
Heavy: 50% Heavy: 50
Damage: 50 Damage: 50
Voices: Voices:

View File

@@ -919,7 +919,7 @@ Weapons:
Rockets: Rockets:
Warhead: SpreadDamage Warhead: SpreadDamage
Versus: Versus:
None: 20% None: 20
Voices: Voices:

View File

@@ -26,13 +26,14 @@ HeliExplode:
UnitExplode: UnitExplode:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 426 Spread: 426
Damage: 500 Damage: 50
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: poof Explosion: poof
ImpactSound: xplobig6.aud ImpactSound: xplobig6.aud
@@ -43,10 +44,10 @@ UnitExplodeSmall:
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: big_frag Explosion: big_frag
ImpactSound: xplobig4.aud ImpactSound: xplobig4.aud
@@ -57,10 +58,10 @@ GrenadierExplode:
Damage: 10 Damage: 10
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: poof Explosion: poof
ImpactSound: xplosml2.aud ImpactSound: xplosml2.aud
@@ -70,28 +71,30 @@ Atomic:
Report: nukemisl.aud Report: nukemisl.aud
Warhead@1Dam_impact: SpreadDamage Warhead@1Dam_impact: SpreadDamage
Spread: 1c0 Spread: 1c0
Damage: 1500 Damage: 150
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 60% Light: 60
Heavy: 50% Heavy: 50
Warhead@2Eff_impact: CreateEffect Warhead@2Eff_impact: CreateEffect
Explosion: 6 Explosion: 6
ImpactSound: nukexplo.aud ImpactSound: nukexplo.aud
Warhead@3Dam_areanukea: SpreadDamage Warhead@3Dam_areanukea: SpreadDamage
Spread: 2c512 Spread: 2c512
Damage: 1000 Damage: 100
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
Delay: 3 Delay: 3
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 60% Light: 60
Heavy: 50% Heavy: 50
Warhead@4Res_areanukea: DestroyResource Warhead@4Res_areanukea: DestroyResource
Size: 3 Size: 3
Delay: 3 Delay: 3
@@ -104,15 +107,16 @@ Atomic:
Delay: 3 Delay: 3
Warhead@7Dam_areanukeb: SpreadDamage Warhead@7Dam_areanukeb: SpreadDamage
Spread: 3c768 Spread: 3c768
Damage: 500 Damage: 50
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
Delay: 6 Delay: 6
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 60% Light: 60
Heavy: 50% Heavy: 50
Warhead@8Res_areanukeb: DestroyResource Warhead@8Res_areanukeb: DestroyResource
Size: 4 Size: 4
Delay: 6 Delay: 6
@@ -122,15 +126,16 @@ Atomic:
Delay: 6 Delay: 6
Warhead@10Dam_areanukec: SpreadDamage Warhead@10Dam_areanukec: SpreadDamage
Spread: 5c0 Spread: 5c0
Damage: 200 Damage: 20
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
Delay: 9 Delay: 9
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 60% Light: 60
Heavy: 50% Heavy: 50
Warhead@11Res_areanukec: DestroyResource Warhead@11Res_areanukec: DestroyResource
Size: 5 Size: 5
Delay: 9 Delay: 9
@@ -143,7 +148,8 @@ IonCannon:
ValidTargets: Ground, Air ValidTargets: Ground, Air
Warhead@1Dam_impact: SpreadDamage Warhead@1Dam_impact: SpreadDamage
Spread: 1c0 Spread: 1c0
Damage: 1000 Damage: 100
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Air ValidTargets: Ground, Air
Warhead@2Res_impact: DestroyResource Warhead@2Res_impact: DestroyResource
@@ -188,10 +194,10 @@ HighV:
Damage: 30 Damage: 30
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 100% None: 100
Wood: 50% Wood: 50
Light: 70% Light: 70
Heavy: 35% Heavy: 35
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -211,10 +217,10 @@ HeliAGGun:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 100% None: 100
Wood: 50% Wood: 50
Light: 75% Light: 75
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -234,10 +240,10 @@ HeliAAGun:
InfDeath: 2 InfDeath: 2
ValidTargets: Air ValidTargets: Air
Versus: Versus:
None: 100% None: 100
Wood: 50% Wood: 50
Light: 50% Light: 50
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -254,10 +260,10 @@ Pistol:
InfDeath: 2 InfDeath: 2
InvalidTargets: Wall InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100
Wood: 50% Wood: 50
Light: 50% Light: 50
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piff Explosion: piff
@@ -274,10 +280,10 @@ M16:
InfDeath: 2 InfDeath: 2
InvalidTargets: Wall InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100
Wood: 25% Wood: 25
Light: 30% Light: 30
Heavy: 10% Heavy: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piff Explosion: piff
@@ -302,11 +308,11 @@ Rockets:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 50% None: 50
Wood: 85% Wood: 85
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 25% Concrete: 25
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -336,11 +342,11 @@ BikeRockets:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25
Wood: 75% Wood: 75
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 50% Concrete: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -370,10 +376,10 @@ OrcaAGMissiles:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 50% None: 50
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 75% Heavy: 75
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -403,8 +409,8 @@ OrcaAAMissiles:
InfDeath: 4 InfDeath: 4
ValidTargets: Air ValidTargets: Air
Versus: Versus:
Light: 75% Light: 75
Heavy: 50% Heavy: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -424,10 +430,10 @@ Flamethrower:
InfDeath: 5 InfDeath: 5
InvalidTargets: Wall InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 20% Heavy: 20
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -449,10 +455,10 @@ BigFlamer:
InfDeath: 5 InfDeath: 5
InvalidTargets: Wall InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 67% Light: 67
Heavy: 25% Heavy: 25
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -470,10 +476,10 @@ Chemspray:
Damage: 80 Damage: 80
InfDeath: 6 InfDeath: 6
Versus: Versus:
None: 100% None: 100
Wood: 35% Wood: 35
Light: 75% Light: 75
Heavy: 50% Heavy: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -495,10 +501,10 @@ Grenade:
Damage: 50 Damage: 50
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 100% None: 100
Wood: 50% Wood: 50
Light: 75% Light: 75
Heavy: 35% Heavy: 35
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -517,11 +523,11 @@ Grenade:
Damage: 25 Damage: 25
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 25% None: 25
Wood: 75% Wood: 75
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 50% Concrete: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -540,10 +546,10 @@ Grenade:
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 30% None: 30
Wood: 75% Wood: 75
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -562,11 +568,11 @@ Grenade:
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 25% None: 25
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 50% Concrete: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -587,11 +593,11 @@ Grenade:
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 25% None: 25
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 100% Concrete: 100
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -610,10 +616,10 @@ TurretGun:
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 20% None: 20
Wood: 25% Wood: 25
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -643,10 +649,10 @@ MammothMissiles:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 50% None: 50
Wood: 75% Wood: 75
Light: 100% Light: 100
Heavy: 50% Heavy: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -683,10 +689,10 @@ MammothMissiles:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 35% None: 35
Wood: 60% Wood: 60
Light: 100% Light: 100
Heavy: 50% Heavy: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -716,10 +722,10 @@ MammothMissiles:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25
Wood: 75% Wood: 75
Light: 100% Light: 100
Heavy: 90% Heavy: 90
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -743,10 +749,10 @@ ArtilleryShell:
Damage: 150 Damage: 150
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 100% None: 100
Wood: 80% Wood: 80
Light: 75% Light: 75
Heavy: 50% Heavy: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -767,11 +773,11 @@ MachineGun:
InfDeath: 2 InfDeath: 2
InvalidTargets: Wall InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100
Wood: 20% Wood: 20
Light: 50% Light: 50
Heavy: 20% Heavy: 20
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -796,10 +802,10 @@ BoatMissile:
Damage: 60 Damage: 60
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -832,10 +838,10 @@ TowerMissle:
InfDeath: 3 InfDeath: 3
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 50% None: 50
Wood: 25% Wood: 25
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -855,10 +861,10 @@ Vulcan:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Water ValidTargets: Ground, Water
Versus: Versus:
None: 100% None: 100
Wood: 25% Wood: 25
Light: 100% Light: 100
Heavy: 35% Heavy: 35
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -872,14 +878,15 @@ Napalm:
Image: BOMBLET Image: BOMBLET
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 341 Spread: 341
Damage: 300 Damage: 30
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Water ValidTargets: Ground, Water
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 80% Heavy: 80
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -889,13 +896,14 @@ Napalm:
Napalm.Crate: Napalm.Crate:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 170 Spread: 170
Damage: 500 Damage: 50
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
Versus: Versus:
None: 90% None: 90
Wood: 100% Wood: 100
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -915,7 +923,7 @@ Laser:
Damage: 360 Damage: 360
InfDeath: 5 InfDeath: 5
Versus: Versus:
Wood: 50% Wood: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
@@ -937,10 +945,10 @@ SAMMissile:
Spread: 682 Spread: 682
ValidTargets: Air ValidTargets: Air
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 75% Heavy: 75
InfDeath: 4 InfDeath: 4
Damage: 30 Damage: 30
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -968,10 +976,10 @@ HonestJohn:
Damage: 100 Damage: 100
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -992,10 +1000,10 @@ TiberiumExplosion:
Damage: 10 Damage: 10
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Res: CreateResource Warhead@2Res: CreateResource
AddsResourceType: Tiberium AddsResourceType: Tiberium
Size: 1,1 Size: 1,1
@@ -1022,10 +1030,10 @@ APCGun:
Damage: 15 Damage: 15
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 50% None: 50
Wood: 50% Wood: 50
Light: 100% Light: 100
Heavy: 50% Heavy: 50
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_poof Explosion: small_poof
@@ -1042,7 +1050,7 @@ APCGun.AA:
Damage: 25 Damage: 25
ValidTargets: Air ValidTargets: Air
Versus: Versus:
Heavy: 50% Heavy: 50
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_frag Explosion: small_frag
@@ -1065,10 +1073,10 @@ Patriot:
Spread: 682 Spread: 682
ValidTargets: Air ValidTargets: Air
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 75% Heavy: 75
InfDeath: 4 InfDeath: 4
Damage: 32 Damage: 32
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -1087,11 +1095,11 @@ Tail:
Damage: 180 Damage: 180
InfDeath: 1 InfDeath: 1
Versus: Versus:
None: 90% None: 90
Wood: 10% Wood: 10
Light: 30% Light: 30
Heavy: 10% Heavy: 10
Concrete: 10% Concrete: 10
Horn: Horn:
ReloadDelay: 20 ReloadDelay: 20
@@ -1103,11 +1111,11 @@ Horn:
Damage: 120 Damage: 120
InfDeath: 1 InfDeath: 1
Versus: Versus:
None: 90% None: 90
Wood: 10% Wood: 10
Light: 30% Light: 30
Heavy: 10% Heavy: 10
Concrete: 10% Concrete: 10
Teeth: Teeth:
ReloadDelay: 30 ReloadDelay: 30
@@ -1119,11 +1127,11 @@ Teeth:
Damage: 180 Damage: 180
InfDeath: 1 InfDeath: 1
Versus: Versus:
None: 90% None: 90
Wood: 10% Wood: 10
Light: 30% Light: 30
Heavy: 10% Heavy: 10
Concrete: 10% Concrete: 10
Claw: Claw:
ReloadDelay: 10 ReloadDelay: 10
@@ -1135,11 +1143,11 @@ Claw:
Damage: 60 Damage: 60
InfDeath: 1 InfDeath: 1
Versus: Versus:
None: 90% None: 90
Wood: 10% Wood: 10
Light: 30% Light: 30
Heavy: 10% Heavy: 10
Concrete: 10% Concrete: 10
Demolish: Demolish:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage

View File

@@ -13,10 +13,10 @@ LMG:
Damage: 15 Damage: 15
InfDeath: 2 InfDeath: 2
Versus: Versus:
Wood: 25% Wood: 25
Light: 40% Light: 40
Heavy: 10% Heavy: 10
Concrete: 20% Concrete: 20
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -39,11 +39,11 @@ Bazooka:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 10% None: 10
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 90% Heavy: 90
Concrete: 40% Concrete: 40
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -65,11 +65,11 @@ Sniper:
Damage: 60 Damage: 60
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 100% None: 100
Wood: 0% Wood: 0
Light: 1% Light: 1
Heavy: 0% Heavy: 0
Concrete: 0% Concrete: 0
Vulcan: Vulcan:
ReloadDelay: 30 ReloadDelay: 30
@@ -88,10 +88,10 @@ Vulcan:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
Wood: 0% Wood: 0
Light: 60% Light: 60
Heavy: 10% Heavy: 10
Concrete: 0% Concrete: 0
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -114,11 +114,11 @@ Slung:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 0% None: 0
Wood: 75% Wood: 75
Light: 40% Light: 40
Heavy: 90% Heavy: 90
Concrete: 50% Concrete: 50
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_explosion Explosion: small_explosion
ImpactSound: EXPLLG5.WAV ImpactSound: EXPLLG5.WAV
@@ -140,10 +140,10 @@ HMG:
Damage: 30 Damage: 30
InfDeath: 2 InfDeath: 2
Versus: Versus:
Wood: 15% Wood: 15
Light: 45% Light: 45
Heavy: 20% Heavy: 20
Concrete: 20% Concrete: 20
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -164,10 +164,10 @@ HMGo:
Damage: 40 Damage: 40
InfDeath: 2 InfDeath: 2
Versus: Versus:
Wood: 15% Wood: 15
Light: 45% Light: 45
Heavy: 25% Heavy: 25
Concrete: 20% Concrete: 20
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -191,11 +191,11 @@ QuadRockets:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 35% None: 35
Wood: 45% Wood: 45
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 35% Concrete: 35
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -217,10 +217,10 @@ TurretGun:
Damage: 55 Damage: 55
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 50% None: 50
Wood: 75% Wood: 75
Light: 100% Light: 100
Concrete: 65% Concrete: 65
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -251,11 +251,11 @@ TowerMissile:
InfDeath: 3 InfDeath: 3
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 50% None: 50
Wood: 45% Wood: 45
Light: 100% Light: 100
Heavy: 50% Heavy: 50
Concrete: 35% Concrete: 35
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -275,10 +275,10 @@ TowerMissile:
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 50% None: 50
Wood: 50% Wood: 50
Light: 100% Light: 100
Concrete: 50% Concrete: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -298,10 +298,10 @@ TowerMissile:
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 50% None: 50
Wood: 50% Wood: 50
Light: 100% Light: 100
Concrete: 50% Concrete: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -320,11 +320,11 @@ DevBullet:
Damage: 100 Damage: 100
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 100% None: 100
Wood: 50% Wood: 50
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 80% Concrete: 80
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -354,11 +354,11 @@ DevBullet:
InfDeath: 4 InfDeath: 4
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 20% None: 20
Wood: 50% Wood: 50
Light: 100% Light: 100
Heavy: 50% Heavy: 50
Concrete: 80% Concrete: 80
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -383,9 +383,9 @@ FakeMissile:
Spread: 96 Spread: 96
Damage: 10 Damage: 10
Versus: Versus:
None: 0% None: 0
Wood: 0% Wood: 0
Concrete: 0% Concrete: 0
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -410,11 +410,11 @@ FakeMissile:
Damage: 100 Damage: 100
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 100% None: 100
Wood: 80% Wood: 80
Light: 75% Light: 75
Heavy: 50% Heavy: 50
Concrete: 100% Concrete: 100
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater, RockCrater SmudgeType: SandCrater, RockCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -435,10 +435,10 @@ Sound:
Damage: 150 Damage: 150
InfDeath: 6 InfDeath: 6
Versus: Versus:
None: 60% None: 60
Wood: 85% Wood: 85
Light: 80% Light: 80
Concrete: 75% Concrete: 75
ChainGun: ChainGun:
ReloadDelay: 10 ReloadDelay: 10
@@ -453,10 +453,10 @@ ChainGun:
Damage: 20 Damage: 20
InfDeath: 2 InfDeath: 2
Versus: Versus:
Wood: 50% Wood: 50
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Concrete: 25% Concrete: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
@@ -471,10 +471,10 @@ Heal:
Damage: -50 Damage: -50
InfDeath: 1 InfDeath: 1
Versus: Versus:
Wood: 0% Wood: 0
Light: 0% Light: 0
Heavy: 0% Heavy: 0
Concrete: 0% Concrete: 0
WormJaw: WormJaw:
ReloadDelay: 10 ReloadDelay: 10
@@ -484,8 +484,8 @@ WormJaw:
Spread: 160 Spread: 160
Damage: 100 Damage: 100
Versus: Versus:
Wood: 0% Wood: 0
Concrete: 0% Concrete: 0
ParaBomb: ParaBomb:
ReloadDelay: 10 ReloadDelay: 10
@@ -495,13 +495,14 @@ ParaBomb:
Image: BOMBS Image: BOMBS
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 192 Spread: 192
Damage: 500 Damage: 50
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 30% None: 30
Wood: 75% Wood: 75
Light: 75% Light: 75
Concrete: 50% Concrete: 50
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -515,14 +516,15 @@ Napalm:
Image: BOMBS Image: BOMBS
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 640 Spread: 640
Damage: 300 Damage: 30
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 20% None: 20
Wood: 100% Wood: 100
Light: 30% Light: 30
Heavy: 20% Heavy: 20
Concrete: 70% Concrete: 70
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -544,14 +546,15 @@ Demolish:
Atomic: Atomic:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 2c0 Spread: 2c0
Damage: 1800 Damage: 180
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
Versus: Versus:
None: 100% None: 100
Wood: 100% Wood: 100
Light: 100% Light: 100
Heavy: 50% Heavy: 50
Concrete: 50% Concrete: 50
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: nuke Explosion: nuke
ImpactSound: EXPLLG2.WAV ImpactSound: EXPLLG2.WAV
@@ -559,14 +562,15 @@ Atomic:
CrateNuke: CrateNuke:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 1c576 Spread: 1c576
Damage: 800 Damage: 80
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
Versus: Versus:
None: 20% None: 20
Wood: 75% Wood: 75
Light: 25% Light: 25
Heavy: 25% Heavy: 25
Concrete: 50% Concrete: 50
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: nuke Explosion: nuke
ImpactSound: EXPLLG2.WAV ImpactSound: EXPLLG2.WAV
@@ -574,13 +578,14 @@ CrateNuke:
CrateExplosion: CrateExplosion:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 320 Spread: 320
Damage: 400 Damage: 40
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: building Explosion: building
ImpactSound: EXPLSML4.WAV ImpactSound: EXPLSML4.WAV
@@ -588,13 +593,14 @@ CrateExplosion:
UnitExplode: UnitExplode:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 320 Spread: 320
Damage: 500 Damage: 50
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: building Explosion: building
ImpactSound: EXPLMD1.WAV ImpactSound: EXPLMD1.WAV
@@ -605,10 +611,10 @@ UnitExplodeSmall:
Damage: 60 Damage: 60
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: self_destruct Explosion: self_destruct
ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV
@@ -619,10 +625,10 @@ UnitExplodeTiny:
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: med_explosion Explosion: med_explosion
ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV
@@ -633,10 +639,10 @@ UnitExplodeScale:
Damage: 90 Damage: 90
InfDeath: 4 InfDeath: 4
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: building Explosion: building
ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV
@@ -656,10 +662,10 @@ Grenade:
Damage: 60 Damage: 60
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 50% None: 50
Wood: 100% Wood: 100
Light: 25% Light: 25
Heavy: 5% Heavy: 5
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater SmudgeType: SandCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -686,10 +692,10 @@ Shrapnel:
Damage: 60 Damage: 60
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 50% None: 50
Wood: 100% Wood: 100
Light: 25% Light: 25
Heavy: 5% Heavy: 5
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: SandCrater SmudgeType: SandCrater
Warhead@3Eff: CreateEffect Warhead@3Eff: CreateEffect
@@ -702,10 +708,10 @@ SpiceExplosion:
Damage: 10 Damage: 10
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Res: CreateResource Warhead@2Res: CreateResource
AddsResourceType: Spice AddsResourceType: Spice
Size: 2,2 Size: 2,2

View File

@@ -316,10 +316,10 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 128 Spread: 128
Versus: Versus:
None: 60% None: 60
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
InfDeath: 2 InfDeath: 2
Damage: 250 Damage: 250
Warhead@1Eff: CreateEffect Warhead@1Eff: CreateEffect
@@ -345,9 +345,9 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 426 Spread: 426
Versus: Versus:
None: 40% None: 40
Light: 30% Light: 30
Heavy: 30% Heavy: 30
InfDeath: blownaway InfDeath: blownaway
Damage: 400 Damage: 400
Warhead@1Eff: CreateEffect Warhead@1Eff: CreateEffect

View File

@@ -774,10 +774,10 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 256 Spread: 256
Versus: Versus:
None: 75% None: 75
Wood: 75% Wood: 75
Light: 75% Light: 75
Concrete: 100% Concrete: 100
InfDeath: 4 InfDeath: 4
Damage: 150 Damage: 150
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -807,11 +807,11 @@ Weapons:
Spread: 640 Spread: 640
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 125% None: 125
Wood: 110% Wood: 110
Light: 110% Light: 110
Heavy: 100% Heavy: 100
Concrete: 200% Concrete: 200
InfDeath: 3 InfDeath: 3
Damage: 250 Damage: 250
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -836,11 +836,11 @@ Weapons:
Spread: 341 Spread: 341
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 90% None: 90
Wood: 170% Wood: 170
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 100% Concrete: 100
InfDeath: 4 InfDeath: 4
Damage: 15 Damage: 15
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -858,10 +858,10 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 426 Spread: 426
Versus: Versus:
None: 125% None: 125
Wood: 100% Wood: 100
Light: 60% Light: 60
Concrete: 25% Concrete: 25
InfDeath: 5 InfDeath: 5
Damage: 200 Damage: 200
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -887,11 +887,11 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 426 Spread: 426
Versus: Versus:
None: 80% None: 80
Wood: 100% Wood: 100
Light: 60% Light: 60
Heavy: 75% Heavy: 75
Concrete: 35% Concrete: 35
InfDeath: 5 InfDeath: 5
Damage: 10 Damage: 10
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -912,11 +912,11 @@ Weapons:
Spread: 213 Spread: 213
ValidTargets: Air, Ground ValidTargets: Air, Ground
Versus: Versus:
None: 35% None: 35
Wood: 30% Wood: 30
Light: 30% Light: 30
Heavy: 40% Heavy: 40
Concrete: 30% Concrete: 30
Damage: 25 Damage: 25
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
@@ -940,10 +940,10 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 853 Spread: 853
Versus: Versus:
None: 100% None: 100
Wood: 90% Wood: 90
Light: 80% Light: 80
Heavy: 70% Heavy: 70
InfDeath: 3 InfDeath: 3
Damage: 500 Damage: 500
Warhead@2Smu: LeaveSmudge Warhead@2Smu: LeaveSmudge
@@ -962,10 +962,10 @@ Weapons:
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 128 Spread: 128
Versus: Versus:
Wood: 0% Wood: 0
Light: 0% Light: 0
Heavy: 50% Heavy: 50
Concrete: 0% Concrete: 0
InfDeath: 2 InfDeath: 2
Damage: 150 Damage: 150
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect

View File

@@ -1080,10 +1080,10 @@ Weapons:
Damage: 250 Damage: 250
Size: 4 Size: 4
Versus: Versus:
None: 90% None: 90
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Concrete: 50% Concrete: 50
Delay: 12 Delay: 12
InfDeath: 4 InfDeath: 4
Warhead@areanuke2Smu: LeaveSmudge Warhead@areanuke2Smu: LeaveSmudge
@@ -1101,10 +1101,10 @@ Weapons:
Damage: 250 Damage: 250
Size: 3 Size: 3
Versus: Versus:
None: 90% None: 90
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Concrete: 50% Concrete: 50
Delay: 24 Delay: 24
InfDeath: 4 InfDeath: 4
Warhead@areanuke3Smu: LeaveSmudge Warhead@areanuke3Smu: LeaveSmudge
@@ -1121,10 +1121,10 @@ Weapons:
Warhead@areanuke4: PerCellDamage Warhead@areanuke4: PerCellDamage
Damage: 250 Damage: 250
Versus: Versus:
None: 90% None: 90
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Concrete: 50% Concrete: 50
Delay: 36 Delay: 36
InfDeath: 4 InfDeath: 4
Warhead@areanuke4Smu: LeaveSmudge Warhead@areanuke4Smu: LeaveSmudge

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,14 @@
UnitExplode: UnitExplode:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 426 Spread: 426
Damage: 500 Damage: 50
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_twlt Explosion: large_twlt
ImpactSound: expnew09.aud ImpactSound: expnew09.aud
@@ -18,10 +19,10 @@ UnitExplodeSmall:
Damage: 40 Damage: 40
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: medium_brnl Explosion: medium_brnl
ImpactSound: expnew13.aud ImpactSound: expnew13.aud
@@ -38,10 +39,10 @@ Minigun:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -65,11 +66,11 @@ Grenade:
InfDeath: 3 InfDeath: 3
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
None: 100% None: 100
Wood: 85% Wood: 85
Light: 70% Light: 70
Heavy: 35% Heavy: 35
Concrete: 28% Concrete: 28
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_grey_explosion Explosion: large_grey_explosion
ImpactSound: expnew13.aud ImpactSound: expnew13.aud
@@ -100,11 +101,11 @@ Bazooka:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_clsn Explosion: small_clsn
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -139,11 +140,11 @@ MultiCluster:
InfDeath: 3 InfDeath: 3
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_explosion Explosion: large_explosion
ImpactSound: expnew09.aud ImpactSound: expnew09.aud
@@ -165,10 +166,10 @@ Heal:
InfDeath: 1 InfDeath: 1
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
Wood: 0% Wood: 0
Light: 0% Light: 0
Heavy: 0% Heavy: 0
Concrete: 0% Concrete: 0
Sniper: Sniper:
ReloadDelay: 60 ReloadDelay: 60
@@ -182,11 +183,11 @@ Sniper:
InfDeath: 1 InfDeath: 1
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 100% None: 100
Wood: 0% Wood: 0
Light: 0% Light: 0
Heavy: 0% Heavy: 0
Concrete: 0% Concrete: 0
M1Carbine: M1Carbine:
ReloadDelay: 20 ReloadDelay: 20
@@ -200,10 +201,10 @@ M1Carbine:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -226,11 +227,11 @@ LtRail:
InfDeath: 2 InfDeath: 2
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 100% None: 100
Wood: 130% Wood: 130
Light: 150% Light: 150
Heavy: 110% Heavy: 110
Concrete: 5% Concrete: 5
CyCannon: CyCannon:
ReloadDelay: 50 ReloadDelay: 50
@@ -249,11 +250,11 @@ CyCannon:
ProneModifier: 100 ProneModifier: 100
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 100% None: 100
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 50% Heavy: 50
Concrete: 40% Concrete: 40
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_bang Explosion: large_bang
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -276,10 +277,10 @@ Vulcan3:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -300,11 +301,11 @@ Vulcan2:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
None: 100% None: 100
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -324,10 +325,10 @@ Vulcan:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -352,10 +353,10 @@ FiendShard:
InfDeath: 1 InfDeath: 1
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@3EffWater: CreateEffect Warhead@3EffWater: CreateEffect
Explosion: small_watersplash Explosion: small_watersplash
ImpactSound: ssplash3.aud ImpactSound: ssplash3.aud
@@ -374,10 +375,10 @@ JumpCannon:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -407,11 +408,11 @@ HoverMissile:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_clsn Explosion: small_clsn
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -442,11 +443,11 @@ HoverMissile:
Damage: 50 Damage: 50
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: medium_clsn Explosion: medium_clsn
ImpactSound: expnew14.aud ImpactSound: expnew14.aud
@@ -479,11 +480,11 @@ MammothTusk:
ProneModifier: 70 ProneModifier: 70
ValidTargets: Air ValidTargets: Air
Versus: Versus:
None: 100% None: 100
Wood: 85% Wood: 85
Light: 70% Light: 70
Heavy: 35% Heavy: 35
Concrete: 28% Concrete: 28
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: medium_bang Explosion: medium_bang
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -505,11 +506,11 @@ Repair:
InfDeath: 1 InfDeath: 1
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 0% None: 0
Wood: 0% Wood: 0
Light: 100% Light: 100
Heavy: 100% Heavy: 100
Concrete: 0% Concrete: 0
SlimeAttack: SlimeAttack:
ReloadDelay: 80 ReloadDelay: 80
@@ -523,10 +524,10 @@ SlimeAttack:
InfDeath: 2 InfDeath: 2
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
Wood: 25% Wood: 25
Light: 30% Light: 30
Heavy: 10% Heavy: 10
Concrete: 10% Concrete: 10
SuicideBomb: SuicideBomb:
ReloadDelay: 1 ReloadDelay: 1
@@ -534,13 +535,14 @@ SuicideBomb:
Report: HUNTER2.AUD Report: HUNTER2.AUD
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 256 Spread: 256
Damage: 11000 Damage: 110
Falloff: 10000, 3680, 1350, 500, 180, 70, 0
InfDeath: 5 InfDeath: 5
Versus: Versus:
None: 90% None: 90
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Concrete: 50% Concrete: 50
Warhead@2Res: DestroyResource Warhead@2Res: DestroyResource
120mm: 120mm:
@@ -554,11 +556,11 @@ SuicideBomb:
Damage: 70 Damage: 70
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_clsn Explosion: large_clsn
ImpactSound: expnew14.aud ImpactSound: expnew14.aud
@@ -583,11 +585,11 @@ MechRailgun:
InfDeath: 5 InfDeath: 5
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 200% None: 200
Wood: 175% Wood: 175
Light: 160% Light: 160
Heavy: 100% Heavy: 100
Concrete: 25% Concrete: 25
AssaultCannon: AssaultCannon:
ReloadDelay: 50 ReloadDelay: 50
@@ -601,10 +603,10 @@ AssaultCannon:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -635,11 +637,11 @@ BikeMissile:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground ValidTargets: Ground
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_clsn Explosion: small_clsn
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -663,10 +665,10 @@ RaiderCannon:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -690,11 +692,11 @@ FireballLauncher:
InfDeath: 5 InfDeath: 5
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 600% None: 600
Wood: 148% Wood: 148
Light: 59% Light: 59
Heavy: 6% Heavy: 6
Concrete: 2% Concrete: 2
SonicZap: SonicZap:
ReloadDelay: 120 ReloadDelay: 120
@@ -710,8 +712,8 @@ SonicZap:
Damage: 100 Damage: 100
InfDeath: 5 InfDeath: 5
Versus: Versus:
Heavy: 80% Heavy: 80
Concrete: 60% Concrete: 60
Dragon: Dragon:
ReloadDelay: 50 ReloadDelay: 50
@@ -735,11 +737,11 @@ Dragon:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_clsn Explosion: small_clsn
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -768,11 +770,11 @@ Dragon:
Damage: 36 Damage: 36
InfDeath: 2 InfDeath: 2
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: medium_clsn Explosion: medium_clsn
ImpactSound: expnew14.aud ImpactSound: expnew14.aud
@@ -800,11 +802,11 @@ Dragon:
InfDeath: 3 InfDeath: 3
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 100% None: 100
Wood: 85% Wood: 85
Light: 68% Light: 68
Heavy: 35% Heavy: 35
Concrete: 35% Concrete: 35
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_explosion Explosion: large_explosion
ImpactSound: expnew06.aud ImpactSound: expnew06.aud
@@ -836,11 +838,11 @@ Hellfire:
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 30% None: 30
Wood: 65% Wood: 65
Light: 150% Light: 150
Heavy: 100% Heavy: 100
Concrete: 30% Concrete: 30
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_bang Explosion: small_bang
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -868,11 +870,11 @@ Bomb:
InfDeath: 3 InfDeath: 3
ProneModifier: 100 ProneModifier: 100
Versus: Versus:
None: 200% None: 200
Wood: 90% Wood: 90
Light: 75% Light: 75
Heavy: 32% Heavy: 32
Concrete: 100% Concrete: 100
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_explosion Explosion: large_explosion
ImpactSound: expnew09.aud ImpactSound: expnew09.aud
@@ -903,11 +905,11 @@ Proton:
InfDeath: 3 InfDeath: 3
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25
Wood: 65% Wood: 65
Light: 75% Light: 75
Heavy: 100% Heavy: 100
Concrete: 60% Concrete: 60
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_bang Explosion: small_bang
ImpactSound: expnew12.aud ImpactSound: expnew12.aud
@@ -931,10 +933,10 @@ HarpyClaw:
ProneModifier: 70 ProneModifier: 70
ValidTargets: Ground, Air ValidTargets: Ground, Air
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -954,10 +956,10 @@ Pistola:
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piff Explosion: piff
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -985,7 +987,8 @@ IonCannon:
ValidTargets: Ground, Air ValidTargets: Ground, Air
Warhead@1Dam_impact: SpreadDamage Warhead@1Dam_impact: SpreadDamage
Spread: 1c0 Spread: 1c0
Damage: 1000 Damage: 100
Falloff: 1000, 368, 135, 50, 18, 7, 0
InfDeath: 5 InfDeath: 5
ProneModifier: 100 ProneModifier: 100
ValidTargets: Ground, Air ValidTargets: Ground, Air
@@ -1013,10 +1016,10 @@ VulcanTower:
Damage: 18 Damage: 18
InfDeath: 1 InfDeath: 1
Versus: Versus:
Wood: 60% Wood: 60
Light: 40% Light: 40
Heavy: 25% Heavy: 25
Concrete: 10% Concrete: 10
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: piffs Explosion: piffs
InvalidImpactTypes: Water InvalidImpactTypes: Water
@@ -1041,11 +1044,11 @@ RPGTower:
InfDeath: 2 InfDeath: 2
ProneModifier: 70 ProneModifier: 70
Versus: Versus:
None: 30% None: 30
Wood: 75% Wood: 75
Light: 90% Light: 90
Heavy: 100% Heavy: 100
Concrete: 70% Concrete: 70
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: large_clsn Explosion: large_clsn
ImpactSound: expnew14.aud ImpactSound: expnew14.aud
@@ -1115,10 +1118,10 @@ TiberiumExplosion:
Damage: 10 Damage: 10
InfDeath: 3 InfDeath: 3
Versus: Versus:
None: 90% None: 90
Wood: 75% Wood: 75
Light: 60% Light: 60
Heavy: 25% Heavy: 25
Warhead@2Res: CreateResource Warhead@2Res: CreateResource
AddsResourceType: Tiberium AddsResourceType: Tiberium
Size: 1,1 Size: 1,1