Merge pull request #6183 from UberWaffe/6030Fix_UpgradeRules

Closes #6177
Closes #6222
Closes #6240
Closes #6245
This commit is contained in:
Matthias Mailänder
2014-08-16 18:07:56 +02:00
12 changed files with 175 additions and 78 deletions

View File

@@ -19,7 +19,7 @@ namespace OpenRA.GameRules
public abstract class Warhead public abstract class Warhead
{ {
[Desc("What types of targets are affected.")] [Desc("What types of targets are affected.")]
public readonly string[] ValidTargets = { "Air", "Ground", "Water" }; public readonly string[] ValidTargets = { "Ground", "Water" };
[Desc("What types of targets are unaffected.", "Overrules ValidTargets.")] [Desc("What types of targets are unaffected.", "Overrules ValidTargets.")]
public readonly string[] InvalidTargets = { }; public readonly string[] InvalidTargets = { };
@@ -29,7 +29,7 @@ namespace OpenRA.GameRules
public abstract void DoImpact(Target target, Actor firedBy, float firepowerModifier); public abstract void DoImpact(Target target, Actor firedBy, float firepowerModifier);
public abstract float EffectivenessAgainst(ActorInfo ai); 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)
{ {
@@ -58,6 +58,10 @@ namespace OpenRA.GameRules
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 (EffectivenessAgainst(victim.Info) <= 0f)
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.
return InTargetList(victim, firedBy, ValidTargets) && return InTargetList(victim, firedBy, ValidTargets) &&
!InTargetList(victim, firedBy, InvalidTargets); !InTargetList(victim, firedBy, InvalidTargets);
@@ -79,6 +83,10 @@ 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 (EffectivenessAgainst(victim.Info) <= 0f)
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.
return InTargetList(victim, firedBy, ValidTargets) && return InTargetList(victim, firedBy, ValidTargets) &&
!InTargetList(victim, firedBy, InvalidTargets); !InTargetList(victim, firedBy, InvalidTargets);

View File

@@ -95,8 +95,6 @@ namespace OpenRA.Mods.RA
Sound.Play(ImpactSound, pos); Sound.Play(ImpactSound, pos);
} }
public override float EffectivenessAgainst(ActorInfo ai) { return 1f; }
public bool IsValidImpact(WPos pos, Actor firedBy) public bool IsValidImpact(WPos pos, Actor firedBy)
{ {
var world = firedBy.World; var world = firedBy.World;

View File

@@ -60,7 +60,5 @@ namespace OpenRA.Mods.RA
} }
} }
} }
public override float EffectivenessAgainst(ActorInfo ai) { return 1f; }
} }
} }

View File

@@ -41,7 +41,5 @@ namespace OpenRA.Mods.RA
foreach (var cell in allCells) foreach (var cell in allCells)
resLayer.Destroy(cell); resLayer.Destroy(cell);
} }
public override float EffectivenessAgainst(ActorInfo ai) { return 1f; }
} }
} }

View File

@@ -52,7 +52,5 @@ namespace OpenRA.Mods.RA
smudgeLayer.AddSmudge(sc); smudgeLayer.AddSmudge(sc);
} }
} }
public override float EffectivenessAgainst(ActorInfo ai) { return 1f; }
} }
} }

View File

@@ -509,6 +509,9 @@ namespace OpenRA.Utility
// Split out the warheads to individual warhead types. // Split out the warheads to individual warhead types.
if (depth == 0) if (depth == 0)
{ {
var validTargets = node.Value.Nodes.FirstOrDefault(n => n.Key == "ValidTargets"); // Weapon's ValidTargets need to be copied to the warheads, so find it
var invalidTargets = node.Value.Nodes.FirstOrDefault(n => n.Key == "InvalidTargets"); // Weapon's InvalidTargets need to be copied to the warheads, so find it
var warheadCounter = 0; var warheadCounter = 0;
foreach(var curNode in node.Value.Nodes.ToArray()) foreach(var curNode in node.Value.Nodes.ToArray())
{ {
@@ -527,14 +530,27 @@ namespace OpenRA.Utility
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var keywords = new List<String>{ "Size","Damage","InfDeath","PreventProne","ProneModifier","Delay","ValidTargets","InvalidTargets" }; var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Size"); // New PerCell warhead allows 2 sizes, as opposed to 1 size
if (temp != null)
{
var newValue = temp.Value.Value.Split(',').First();
newYaml.Add(new MiniYamlNode("Size", newValue));
}
var keywords = new List<string>{ "Damage", "InfDeath", "PreventProne", "ProneModifier", "Delay" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp2 = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
if (temp != null) if (temp2 != null)
newYaml.Add(new MiniYamlNode(keyword, temp.Value.Value)); newYaml.Add(new MiniYamlNode(keyword, temp2.Value.Value));
} }
if (validTargets != null)
newYaml.Add(validTargets);
if (invalidTargets != null)
newYaml.Add(invalidTargets);
var tempVersus = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Versus"); var tempVersus = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Versus");
if (tempVersus != null) if (tempVersus != null)
newYaml.Add(new MiniYamlNode("Versus", tempVersus.Value)); newYaml.Add(new MiniYamlNode("Versus", tempVersus.Value));
@@ -550,17 +566,15 @@ namespace OpenRA.Utility
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Size"); // New HealthPercentage warhead allows spreads, as opposed to size var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Size"); // New HealthPercentage warhead allows 2 spreads, as opposed to 1 size
if (temp != null) if (temp != null)
{ {
var newValue = temp.Value.Value.Split(',').First() + "c0"; var newValue = temp.Value.Value.Split(',').First() + "c0";
if (temp.Value.Value.Contains(','))
newValue = newValue + "," + temp.Value.Value.Split(',')[1] + "c0"; ;
newYaml.Add(new MiniYamlNode("Spread", newValue)); newYaml.Add(new MiniYamlNode("Spread", newValue));
} }
var keywords = new List<String>{ "Damage","InfDeath","PreventProne","ProneModifier","Delay","ValidTargets","InvalidTargets" }; var keywords = new List<string>{ "Damage", "InfDeath", "PreventProne", "ProneModifier", "Delay" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp2 = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp2 = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
@@ -568,6 +582,11 @@ namespace OpenRA.Utility
newYaml.Add(new MiniYamlNode(keyword, temp2.Value.Value)); newYaml.Add(new MiniYamlNode(keyword, temp2.Value.Value));
} }
if (validTargets != null)
newYaml.Add(validTargets);
if (invalidTargets != null)
newYaml.Add(invalidTargets);
var tempVersus = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Versus"); var tempVersus = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Versus");
if (tempVersus != null) if (tempVersus != null)
newYaml.Add(new MiniYamlNode("Versus", tempVersus.Value)); newYaml.Add(new MiniYamlNode("Versus", tempVersus.Value));
@@ -581,7 +600,8 @@ namespace OpenRA.Utility
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var keywords = new List<String>{ "Spread","Damage","InfDeath","PreventProne","ProneModifier","Delay","ValidTargets","InvalidTargets" }; var keywords = new List<string>{ "Spread", "Damage", "InfDeath", "PreventProne", "ProneModifier", "Delay" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
@@ -589,6 +609,11 @@ namespace OpenRA.Utility
newYaml.Add(new MiniYamlNode(keyword, temp.Value.Value)); newYaml.Add(new MiniYamlNode(keyword, temp.Value.Value));
} }
if (validTargets != null)
newYaml.Add(validTargets);
if (invalidTargets != null)
newYaml.Add(invalidTargets);
var tempVersus = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Versus"); var tempVersus = curNode.Value.Nodes.FirstOrDefault(n => n.Key == "Versus");
if (tempVersus != null) if (tempVersus != null)
newYaml.Add(new MiniYamlNode("Versus", tempVersus.Value)); newYaml.Add(new MiniYamlNode("Versus", tempVersus.Value));
@@ -604,7 +629,7 @@ namespace OpenRA.Utility
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var keywords = new List<String>{ "Size","Delay","ValidTargets","InvalidTargets" }; var keywords = new List<string>{ "Size", "Delay", "ValidTargets", "InvalidTargets" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
@@ -622,7 +647,8 @@ namespace OpenRA.Utility
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var keywords = new List<String>{ "AddsResourceType","Size","Delay","ValidTargets","InvalidTargets" }; var keywords = new List<string>{ "AddsResourceType", "Size", "Delay", "ValidTargets", "InvalidTargets" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
@@ -640,7 +666,8 @@ namespace OpenRA.Utility
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var keywords = new List<String>{ "SmudgeType","Size","Delay","ValidTargets","InvalidTargets" }; var keywords = new List<string>{ "SmudgeType", "Size", "Delay", "ValidTargets", "InvalidTargets" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
@@ -651,23 +678,50 @@ namespace OpenRA.Utility
newNodes.Add(new MiniYamlNode("Warhead@" + warheadCounter.ToString() + "Smu" + oldNodeAtName, "LeaveSmudge", newYaml)); newNodes.Add(new MiniYamlNode("Warhead@" + warheadCounter.ToString() + "Smu" + oldNodeAtName, "LeaveSmudge", newYaml));
} }
// CreateEffect // CreateEffect - Explosion
if (curNode.Value.Nodes.Where(n => n.Key.Contains("Explosion") || if (curNode.Value.Nodes.Where(n => n.Key.Contains("Explosion") ||
n.Key.Contains("WaterExplosion") || n.Key.Contains("ImpactSound")).Any())
n.Key.Contains("ImpactSound") ||
n.Key.Contains("WaterImpactSound")).Any())
{ {
warheadCounter++; warheadCounter++;
var newYaml = new List<MiniYamlNode>(); var newYaml = new List<MiniYamlNode>();
var keywords = new List<String>{ "Explosion","WaterExplosion","ImpactSound","WaterImpactSound","Delay","ValidTargets","InvalidTargets" }; var keywords = new List<string>{ "Explosion", "ImpactSound", "Delay", "ValidTargets", "InvalidTargets", "ValidImpactTypes", "InvalidImpactTypes" };
foreach(var keyword in keywords) foreach(var keyword in keywords)
{ {
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword); var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
if (temp != null) if (temp != null)
newYaml.Add(new MiniYamlNode(keyword, temp.Value.Value)); newYaml.Add(new MiniYamlNode(keyword, temp.Value.Value));
} }
newYaml.Add(new MiniYamlNode("InvalidImpactTypes", "Water"));
newNodes.Add(new MiniYamlNode("Warhead@" + warheadCounter.ToString() + "Eff" + oldNodeAtName, "CreateEffect", newYaml));
}
// CreateEffect - Water Explosion
if (curNode.Value.Nodes.Where(n => n.Key.Contains("WaterExplosion") ||
n.Key.Contains("WaterImpactSound")).Any())
{
warheadCounter++;
var newYaml = new List<MiniYamlNode>();
var keywords = new List<string>{ "WaterExplosion", "WaterImpactSound", "Delay", "ValidTargets", "InvalidTargets", "ValidImpactTypes", "InvalidImpactTypes" };
foreach(var keyword in keywords)
{
var temp = curNode.Value.Nodes.FirstOrDefault(n => n.Key == keyword);
if (temp != null)
{
if (temp.Key == "WaterExplosion")
temp.Key = "Explosion";
if (temp.Key == "WaterImpactSound")
temp.Key = "ImpactSound";
newYaml.Add(new MiniYamlNode(temp.Key, temp.Value.Value));
}
}
newYaml.Add(new MiniYamlNode("ValidImpactTypes", "Water"));
newNodes.Add(new MiniYamlNode("Warhead@" + warheadCounter.ToString() + "Eff" + oldNodeAtName, "CreateEffect", newYaml)); newNodes.Add(new MiniYamlNode("Warhead@" + warheadCounter.ToString() + "Eff" + oldNodeAtName, "CreateEffect", newYaml));
} }

View File

@@ -72,6 +72,7 @@ Atomic:
Spread: 1c0 Spread: 1c0
Damage: 1500 Damage: 1500
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -85,6 +86,7 @@ Atomic:
Damage: 1000 Damage: 1000
InfDeath: 5 InfDeath: 5
Delay: 3 Delay: 3
ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -105,6 +107,7 @@ Atomic:
Damage: 500 Damage: 500
InfDeath: 5 InfDeath: 5
Delay: 6 Delay: 6
ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -122,6 +125,7 @@ Atomic:
Damage: 200 Damage: 200
InfDeath: 5 InfDeath: 5
Delay: 9 Delay: 9
ValidTargets: Ground, Air
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -141,38 +145,21 @@ IonCannon:
Spread: 1c0 Spread: 1c0
Damage: 1000 Damage: 1000
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Air
Warhead@2Res_impact: DestroyResource Warhead@2Res_impact: DestroyResource
Warhead@3Smu_impact: LeaveSmudge Warhead@3Smu_impact: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Warhead@4Dam_area: PerCellDamage Warhead@4Res_area: DestroyResource
Size: 2,1
Damage: 0
InfDeath: 5
Delay: 3
Warhead@5Dam_area: SpreadDamage
Damage: 0
InfDeath: 5
Delay: 3
Warhead@6Res_area: DestroyResource
Size: 2,1 Size: 2,1
Delay: 3 Delay: 3
Warhead@7Smu_area: LeaveSmudge Warhead@5Smu_area: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Size: 2,1 Size: 2,1
Delay: 3 Delay: 3
Warhead@8Dam_area2: PerCellDamage Warhead@6Res_area2: DestroyResource
Size: 1
Damage: 0
InfDeath: 5
Delay: 3
Warhead@9Dam_area2: SpreadDamage
Damage: 0
InfDeath: 5
Delay: 3
Warhead@10Res_area2: DestroyResource
Size: 1 Size: 1
Delay: 3 Delay: 3
Warhead@11Smu_area2: LeaveSmudge Warhead@7Smu_area2: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Size: 1 Size: 1
Delay: 3 Delay: 3
@@ -188,6 +175,7 @@ Sniper:
Spread: 42 Spread: 42
Damage: 100 Damage: 100
InfDeath: 2 InfDeath: 2
ValidTargets: Infantry
HighV: HighV:
ROF: 25 ROF: 25
@@ -221,6 +209,7 @@ HeliAGGun:
Spread: 256 Spread: 256
Damage: 20 Damage: 20
InfDeath: 2 InfDeath: 2
ValidTargets: Ground
Versus: Versus:
None: 100% None: 100%
Wood: 50% Wood: 50%
@@ -243,6 +232,7 @@ HeliAAGun:
Spread: 128 Spread: 128
Damage: 20 Damage: 20
InfDeath: 2 InfDeath: 2
ValidTargets: Air
Versus: Versus:
None: 100% None: 100%
Wood: 50% Wood: 50%
@@ -262,6 +252,7 @@ Pistol:
Spread: 128 Spread: 128
Damage: 1 Damage: 1
InfDeath: 2 InfDeath: 2
InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100%
Wood: 50% Wood: 50%
@@ -281,6 +272,7 @@ M16:
Spread: 128 Spread: 128
Damage: 15 Damage: 15
InfDeath: 2 InfDeath: 2
InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100%
Wood: 25% Wood: 25%
@@ -308,6 +300,7 @@ Rockets:
Spread: 128 Spread: 128
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air
Versus: Versus:
None: 50% None: 50%
Wood: 85% Wood: 85%
@@ -341,6 +334,7 @@ BikeRockets:
Spread: 128 Spread: 128
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25%
Wood: 75% Wood: 75%
@@ -374,6 +368,7 @@ OrcaAGMissiles:
Spread: 128 Spread: 128
Damage: 25 Damage: 25
InfDeath: 4 InfDeath: 4
ValidTargets: Ground
Versus: Versus:
None: 50% None: 50%
Wood: 100% Wood: 100%
@@ -406,6 +401,7 @@ OrcaAAMissiles:
Spread: 128 Spread: 128
Damage: 25 Damage: 25
InfDeath: 4 InfDeath: 4
ValidTargets: Air
Versus: Versus:
Light: 75% Light: 75%
Heavy: 50% Heavy: 50%
@@ -426,6 +422,7 @@ Flamethrower:
Spread: 341 Spread: 341
Damage: 40 Damage: 40
InfDeath: 5 InfDeath: 5
InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -450,6 +447,7 @@ BigFlamer:
Spread: 341 Spread: 341
Damage: 75 Damage: 75
InfDeath: 5 InfDeath: 5
InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -643,6 +641,7 @@ MammothMissiles:
Spread: 298 Spread: 298
Damage: 45 Damage: 45
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air
Versus: Versus:
None: 50% None: 50%
Wood: 75% Wood: 75%
@@ -682,6 +681,7 @@ MammothMissiles:
Spread: 683 Spread: 683
Damage: 25 Damage: 25
InfDeath: 4 InfDeath: 4
ValidTargets: Ground
Versus: Versus:
None: 35% None: 35%
Wood: 60% Wood: 60%
@@ -714,6 +714,7 @@ MammothMissiles:
Spread: 128 Spread: 128
Damage: 60 Damage: 60
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25%
Wood: 75% Wood: 75%
@@ -764,6 +765,7 @@ MachineGun:
Spread: 128 Spread: 128
Damage: 15 Damage: 15
InfDeath: 2 InfDeath: 2
InvalidTargets: Wall
Versus: Versus:
None: 100% None: 100%
Wood: 20% Wood: 20%
@@ -828,6 +830,7 @@ TowerMissle:
Spread: 683 Spread: 683
Damage: 25 Damage: 25
InfDeath: 3 InfDeath: 3
ValidTargets: Ground
Versus: Versus:
None: 50% None: 50%
Wood: 25% Wood: 25%
@@ -850,6 +853,7 @@ Vulcan:
Spread: 426 Spread: 426
Damage: 100 Damage: 100
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Water
Versus: Versus:
None: 100% None: 100%
Wood: 25% Wood: 25%
@@ -870,6 +874,7 @@ Napalm:
Spread: 341 Spread: 341
Damage: 300 Damage: 300
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Water
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -930,6 +935,7 @@ SAMMissile:
ContrailLength: 8 ContrailLength: 8
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 682 Spread: 682
ValidTargets: Air
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%
@@ -1014,6 +1020,7 @@ APCGun:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 128 Spread: 128
Damage: 15 Damage: 15
ValidTargets: Ground
Versus: Versus:
None: 50% None: 50%
Wood: 50% Wood: 50%
@@ -1033,6 +1040,7 @@ APCGun.AA:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 128 Spread: 128
Damage: 25 Damage: 25
ValidTargets: Air
Versus: Versus:
Heavy: 50% Heavy: 50%
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
@@ -1055,6 +1063,7 @@ Patriot:
Angle: 88 Angle: 88
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 682 Spread: 682
ValidTargets: Air
Versus: Versus:
None: 100% None: 100%
Wood: 100% Wood: 100%

View File

@@ -37,6 +37,7 @@ Bazooka:
Spread: 96 Spread: 96
Damage: 50 Damage: 50
InfDeath: 4 InfDeath: 4
ValidTargets: Ground
Versus: Versus:
None: 10% None: 10%
Wood: 75% Wood: 75%
@@ -85,6 +86,7 @@ Vulcan:
Spread: 96 Spread: 96
Damage: 30 Damage: 30
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air
Versus: Versus:
Wood: 0% Wood: 0%
Light: 60% Light: 60%
@@ -110,6 +112,7 @@ Slung:
Spread: 192 Spread: 192
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
ValidTargets: Ground
Versus: Versus:
None: 0% None: 0%
Wood: 75% Wood: 75%
@@ -186,6 +189,7 @@ QuadRockets:
Spread: 96 Spread: 96
Damage: 25 Damage: 25
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Air
Versus: Versus:
None: 35% None: 35%
Wood: 45% Wood: 45%
@@ -245,6 +249,7 @@ TowerMissile:
Spread: 384 Spread: 384
Damage: 50 Damage: 50
InfDeath: 3 InfDeath: 3
ValidTargets: Ground, Air
Versus: Versus:
None: 50% None: 50%
Wood: 45% Wood: 45%
@@ -347,6 +352,7 @@ DevBullet:
Spread: 384 Spread: 384
Damage: 60 Damage: 60
InfDeath: 4 InfDeath: 4
ValidTargets: Ground
Versus: Versus:
None: 20% None: 20%
Wood: 50% Wood: 50%

View File

@@ -790,7 +790,7 @@ Weapons:
Range: 10c0 Range: 10c0
Report: MISSILE6.AUD Report: MISSILE6.AUD
Burst: 2 Burst: 2
ValidTargets: Ground, Air, Enemy, Neutral, Ally ValidTargets: Ground, Air
Projectile: Missile Projectile: Missile
Speed: 128 Speed: 128
Arm: 2 Arm: 2
@@ -805,6 +805,7 @@ Weapons:
RangeLimit: 80 RangeLimit: 80
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 640 Spread: 640
ValidTargets: Ground, Air
Versus: Versus:
None: 125% None: 125%
Wood: 110% Wood: 110%
@@ -822,7 +823,7 @@ Weapons:
ROF: 40 ROF: 40
Range: 8c0 Range: 8c0
Report: AACANON3.AUD Report: AACANON3.AUD
ValidTargets: Ground, Enemy, Neutral, Ally ValidTargets: Ground
Burst: 6 Burst: 6
BurstDelay: 1 BurstDelay: 1
Projectile: Bullet Projectile: Bullet
@@ -833,6 +834,7 @@ Weapons:
ContrailLength: 2 ContrailLength: 2
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 341 Spread: 341
ValidTargets: Ground
Versus: Versus:
None: 90% None: 90%
Wood: 170% Wood: 170%
@@ -902,12 +904,13 @@ Weapons:
ROF: 10 ROF: 10
Range: 8c0 Range: 8c0
Report: AACANON3.AUD Report: AACANON3.AUD
ValidTargets: Air, Ground, Enemy, Neutral, Ally ValidTargets: Air, Ground
Projectile: Bullet Projectile: Bullet
Speed: 1c682 Speed: 1c682
High: true High: true
Warhead: SpreadDamage Warhead: SpreadDamage
Spread: 213 Spread: 213
ValidTargets: Air, Ground
Versus: Versus:
None: 35% None: 35%
Wood: 30% Wood: 30%

View File

@@ -1076,8 +1076,7 @@ VoxelSequences:
Weapons: Weapons:
CrateNuke: CrateNuke:
Warhead@areanuke2: SpreadDamage Warhead@areanuke2: PerCellDamage
DamageModel: PerCell
Damage: 250 Damage: 250
Size: 4 Size: 4
Versus: Versus:
@@ -1098,8 +1097,7 @@ Weapons:
Warhead@areanuke2Eff: CreateEffect Warhead@areanuke2Eff: CreateEffect
ImpactSound: kaboom22 ImpactSound: kaboom22
Delay: 12 Delay: 12
Warhead@areanuke3: SpreadDamage Warhead@areanuke3: PerCellDamage
DamageModel: PerCell
Damage: 250 Damage: 250
Size: 3 Size: 3
Versus: Versus:
@@ -1120,8 +1118,7 @@ Weapons:
Warhead@areanuke3Eff: CreateEffect Warhead@areanuke3Eff: CreateEffect
ImpactSound: kaboom22 ImpactSound: kaboom22
Delay: 24 Delay: 24
Warhead@areanuke4: SpreadDamage Warhead@areanuke4: PerCellDamage
DamageModel: PerCell
Damage: 250 Damage: 250
Versus: Versus:
None: 90% None: 90%

View File

@@ -34,6 +34,7 @@ ZSU-23:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 213 Spread: 213
Damage: 12 Damage: 12
ValidTargets: Air
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -175,6 +176,7 @@ Maverick:
Spread: 128 Spread: 128
Damage: 70 Damage: 70
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Water
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -355,6 +357,7 @@ Dragon:
Spread: 128 Spread: 128
Damage: 50 Damage: 50
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Water
Versus: Versus:
None: 10% None: 10%
Wood: 75% Wood: 75%
@@ -391,6 +394,7 @@ HellfireAG:
Spread: 128 Spread: 128
Damage: 60 Damage: 60
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Water
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -427,6 +431,7 @@ HellfireAA:
Spread: 128 Spread: 128
Damage: 40 Damage: 40
InfDeath: 4 InfDeath: 4
ValidTargets: Air
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -567,6 +572,7 @@ Grenade:
Spread: 128 Spread: 128
Damage: 60 Damage: 60
InfDeath: 4 InfDeath: 4
InvalidTargets: Air, Infantry
Versus: Versus:
None: 20% None: 20%
Wood: 75% Wood: 75%
@@ -629,6 +635,7 @@ MammothTusk:
Spread: 256 Spread: 256
Damage: 50 Damage: 50
InfDeath: 3 InfDeath: 3
ValidTargets: Air, Infantry
Versus: Versus:
None: 100% None: 100%
Wood: 75% Wood: 75%
@@ -777,7 +784,7 @@ CrateNuke:
Explosion: nuke Explosion: nuke
ImpactSound: kaboom1.aud ImpactSound: kaboom1.aud
Warhead@4Dam_areanuke: PerCellDamage Warhead@4Dam_areanuke: PerCellDamage
Size: 5,4 Size: 5
Damage: 250 Damage: 250
InfDeath: 5 InfDeath: 5
Delay: 4 Delay: 4
@@ -837,6 +844,7 @@ Nike:
Spread: 128 Spread: 128
Damage: 50 Damage: 50
InfDeath: 3 InfDeath: 3
ValidTargets: Air
Versus: Versus:
None: 90% None: 90%
Wood: 0% Wood: 0%
@@ -866,6 +874,7 @@ RedEye:
Spread: 128 Spread: 128
Damage: 40 Damage: 40
InfDeath: 3 InfDeath: 3
ValidTargets: Air
Versus: Versus:
None: 90% None: 90%
Wood: 75% Wood: 75%
@@ -961,6 +970,7 @@ Stinger:
Spread: 128 Spread: 128
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
ValidTargets: Air, Ground, Water
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -1001,6 +1011,7 @@ TorpTube:
Spread: 426 Spread: 426
Damage: 180 Damage: 180
InfDeath: 4 InfDeath: 4
ValidTargets: Water, Underwater, Bridge
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -1062,6 +1073,7 @@ DepthCharge:
Spread: 128 Spread: 128
Damage: 80 Damage: 80
InfDeath: 4 InfDeath: 4
ValidTargets: Underwater
Versus: Versus:
None: 30% None: 30%
Wood: 75% Wood: 75%
@@ -1114,6 +1126,7 @@ DogJaw:
Spread: 213 Spread: 213
Damage: 100 Damage: 100
InfDeath: 1 InfDeath: 1
ValidTargets: Infantry
Versus: Versus:
Wood: 0% Wood: 0%
Light: 0% Light: 0%
@@ -1147,6 +1160,7 @@ Repair:
Spread: 213 Spread: 213
Damage: -20 Damage: -20
InfDeath: 1 InfDeath: 1
ValidTargets: Repair
Versus: Versus:
None: 0% None: 0%
Wood: 0% Wood: 0%
@@ -1217,6 +1231,7 @@ Atomic:
Spread: 1c0 Spread: 1c0
Damage: 1500 Damage: 1500
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@2Res_impact: DestroyResource Warhead@2Res_impact: DestroyResource
@@ -1232,6 +1247,7 @@ Atomic:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 5 Delay: 5
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@6Res_areanuke1: DestroyResource Warhead@6Res_areanuke1: DestroyResource
@@ -1249,6 +1265,7 @@ Atomic:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 10 Delay: 10
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@10Res_areanuke2: DestroyResource Warhead@10Res_areanuke2: DestroyResource
@@ -1263,6 +1280,7 @@ Atomic:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 15 Delay: 15
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@13Res_areanuke3: DestroyResource Warhead@13Res_areanuke3: DestroyResource
@@ -1277,6 +1295,7 @@ Atomic:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 20 Delay: 20
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@16Res_areanuke4: DestroyResource Warhead@16Res_areanuke4: DestroyResource
@@ -1293,6 +1312,7 @@ MiniNuke:
Spread: 1c0 Spread: 1c0
Damage: 1500 Damage: 1500
InfDeath: 5 InfDeath: 5
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@2Res_impact: DestroyResource Warhead@2Res_impact: DestroyResource
@@ -1305,6 +1325,7 @@ MiniNuke:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 5 Delay: 5
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@5Res_areanuke1: DestroyResource Warhead@5Res_areanuke1: DestroyResource
@@ -1318,6 +1339,7 @@ MiniNuke:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 10 Delay: 10
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@8Res_areanuke2: DestroyResource Warhead@8Res_areanuke2: DestroyResource
@@ -1328,6 +1350,7 @@ MiniNuke:
Damage: 600 Damage: 600
InfDeath: 5 InfDeath: 5
Delay: 15 Delay: 15
ValidTargets: Ground, Water, Air
Versus: Versus:
Concrete: 25% Concrete: 25%
Warhead@10Res_areanuke3: DestroyResource Warhead@10Res_areanuke3: DestroyResource
@@ -1491,6 +1514,7 @@ FLAK-23:
Warhead@1Dam: SpreadDamage Warhead@1Dam: SpreadDamage
Spread: 213 Spread: 213
Damage: 20 Damage: 20
ValidTargets: Air, Ground, Water
Versus: Versus:
None: 40% None: 40%
Wood: 10% Wood: 10%
@@ -1543,6 +1567,7 @@ APTusk:
Spread: 128 Spread: 128
Damage: 30 Damage: 30
InfDeath: 4 InfDeath: 4
ValidTargets: Ground, Water
Versus: Versus:
None: 25% None: 25%
Wood: 75% Wood: 75%
@@ -1594,30 +1619,24 @@ Mandible:
MADTankThump: MADTankThump:
InvalidTargets: MADTank InvalidTargets: MADTank
Warhead@1Dam: HealthPercentageDamage Warhead@1Dam: HealthPercentageDamage
Spread: 7c0,6c0 Spread: 7c0
Damage: 1
Versus:
None: 0%
Warhead@2Dam: SpreadDamage
Damage: 1 Damage: 1
InvalidTargets: MADTank
Versus: Versus:
None: 0% None: 0%
MADTankDetonate: MADTankDetonate:
InvalidTargets: MADTank InvalidTargets: MADTank
Warhead@1Dam: HealthPercentageDamage Warhead@1Dam: HealthPercentageDamage
Spread: 7c0,6c0 Spread: 7c0
Damage: 19 Damage: 19
InvalidTargets: MADTank
Versus: Versus:
None: 0% None: 0%
Warhead@2Dam: SpreadDamage Warhead@2Smu: LeaveSmudge
Damage: 19
Versus:
None: 0%
Warhead@3Smu: LeaveSmudge
SmudgeType: Crater SmudgeType: Crater
Size: 7,6 Size: 7,6
Warhead@4Eff: CreateEffect Warhead@3Eff: CreateEffect
Explosion: med_explosion Explosion: med_explosion
ImpactSound: mineblo1.aud ImpactSound: mineblo1.aud

View File

@@ -98,6 +98,7 @@ Bazooka:
Spread: 128 Spread: 128
Damage: 25 Damage: 25
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25%
Wood: 65% Wood: 65%
@@ -136,6 +137,7 @@ MultiCluster:
Spread: 128 Spread: 128
Damage: 65 Damage: 65
InfDeath: 3 InfDeath: 3
ValidTargets: Ground
Versus: Versus:
None: 25% None: 25%
Wood: 65% Wood: 65%
@@ -245,6 +247,7 @@ CyCannon:
Damage: 120 Damage: 120
InfDeath: 6 InfDeath: 6
ProneModifier: 100 ProneModifier: 100
ValidTargets: Ground
Versus: Versus:
None: 100% None: 100%
Wood: 65% Wood: 65%
@@ -402,6 +405,7 @@ HoverMissile:
Spread: 128 Spread: 128
Damage: 30 Damage: 30
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25%
Wood: 65% Wood: 65%
@@ -473,6 +477,7 @@ MammothTusk:
Damage: 40 Damage: 40
InfDeath: 3 InfDeath: 3
ProneModifier: 70 ProneModifier: 70
ValidTargets: Air
Versus: Versus:
None: 100% None: 100%
Wood: 85% Wood: 85%
@@ -628,6 +633,7 @@ BikeMissile:
Spread: 256 Spread: 256
Damage: 40 Damage: 40
InfDeath: 2 InfDeath: 2
ValidTargets: Ground
Versus: Versus:
None: 25% None: 25%
Wood: 65% Wood: 65%
@@ -727,6 +733,7 @@ Dragon:
Spread: 128 Spread: 128
Damage: 30 Damage: 30
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25%
Wood: 65% Wood: 65%
@@ -827,6 +834,7 @@ Hellfire:
Spread: 85 Spread: 85
Damage: 30 Damage: 30
InfDeath: 2 InfDeath: 2
ValidTargets: Ground, Air
Versus: Versus:
None: 30% None: 30%
Wood: 65% Wood: 65%
@@ -893,6 +901,7 @@ Proton:
Spread: 128 Spread: 128
Damage: 20 Damage: 20
InfDeath: 3 InfDeath: 3
ValidTargets: Ground, Air
Versus: Versus:
None: 25% None: 25%
Wood: 65% Wood: 65%
@@ -920,6 +929,7 @@ HarpyClaw:
Damage: 60 Damage: 60
InfDeath: 1 InfDeath: 1
ProneModifier: 70 ProneModifier: 70
ValidTargets: Ground, Air
Versus: Versus:
Wood: 60% Wood: 60%
Light: 40% Light: 40%
@@ -978,18 +988,16 @@ IonCannon:
Damage: 1000 Damage: 1000
InfDeath: 5 InfDeath: 5
ProneModifier: 100 ProneModifier: 100
ValidTargets: Ground, Air
Warhead@2Eff_impact: CreateEffect Warhead@2Eff_impact: CreateEffect
Explosion: ring1 Explosion: ring1
Warhead@3Dam_area: PerCellDamage Warhead@3Dam_area: PerCellDamage
Size: 2,1 Size: 2
Damage: 250 Damage: 250
InfDeath: 5 InfDeath: 5
Delay: 3 Delay: 3
Warhead@4Dam_area: SpreadDamage ValidTargets: Ground, Air
Damage: 250 Warhead@4Smu_area: LeaveSmudge
InfDeath: 5
Delay: 3
Warhead@5Smu_area: LeaveSmudge
SmudgeType: Scorch SmudgeType: Scorch
Size: 2,1 Size: 2,1
Delay: 3 Delay: 3
@@ -1066,6 +1074,7 @@ SAMTower:
Spread: 128 Spread: 128
Damage: 33 Damage: 33
InfDeath: 2 InfDeath: 2
ValidTargets: Air
Warhead@2Eff: CreateEffect Warhead@2Eff: CreateEffect
Explosion: small_clsn Explosion: small_clsn
ImpactSound: expnew12.aud ImpactSound: expnew12.aud