forked from 0ad/0ad
Move more things in the projectile part of the Attack/Ranged component
Following D945, I reckon more things should be moved from Attack/Ranged to Attack/Ranged/Projectile. In the long run, I think most things should be moved to the Projectile, which would let us have several projectiles per attack (for example), make it easier to abstract away from the Melee/Ranged attack types, and would also be more coherent. This is the first step, as it adds the Projectile to all templates. This also makes the launch point a parameter, though I only add "y" as implementing the rotation is left as an exercise to the reader. Reviewed By: bb Differential Revision: https://code.wildfiregames.com/D1171 This was SVN commit r22184.
This commit is contained in:
parent
4a5fb3ba94
commit
b1659e7618
@ -72,8 +72,6 @@ Attack.prototype.Schema =
|
||||
"<ElevationBonus>15.0</ElevationBonus>" +
|
||||
"<PrepareTime>800</PrepareTime>" +
|
||||
"<RepeatTime>1600</RepeatTime>" +
|
||||
"<ProjectileSpeed>50.0</ProjectileSpeed>" +
|
||||
"<Spread>2.5</Spread>" +
|
||||
"<Delay>1000</Delay>" +
|
||||
"<Bonuses>" +
|
||||
"<Bonus1>" +
|
||||
@ -82,6 +80,8 @@ Attack.prototype.Schema =
|
||||
"</Bonus1>" +
|
||||
"</Bonuses>" +
|
||||
"<Projectile>" +
|
||||
"<Speed>50.0</Speed>" +
|
||||
"<Spread>2.5</Spread>" +
|
||||
"<ActorName>props/units/weapons/rock_flaming.xml</ActorName>" +
|
||||
"<ImpactActorName>props/units/weapons/rock_explosion.xml</ImpactActorName>" +
|
||||
"<ImpactAnimationLifetime>0.1</ImpactAnimationLifetime>" +
|
||||
@ -144,38 +144,7 @@ Attack.prototype.Schema =
|
||||
"<element name='RepeatTime' a:help='Time between attacks (in milliseconds). The attack animation will be stretched to match this time'>" +
|
||||
"<data type='positiveInteger'/>" +
|
||||
"</element>" +
|
||||
"<element name='ProjectileSpeed' a:help='Speed of projectiles (in metres per second)'>" +
|
||||
"<ref name='positiveDecimal'/>" +
|
||||
"</element>" +
|
||||
"<element name='Gravity' a:help='The gravity affecting the projectile. This affects the shape of the flight curve.'>" +
|
||||
"<ref name='nonNegativeDecimal'/>" +
|
||||
"</element>" +
|
||||
"<element name='Spread' a:help='Standard deviation of the bivariate normal distribution of hits at 100 meters. A disk at 100 meters from the attacker with this radius (2x this radius, 3x this radius) is expected to include the landing points of 39.3% (86.5%, 98.9%) of the rounds.'><ref name='nonNegativeDecimal'/></element>" +
|
||||
"<element name='Delay' a:help='Delay of the damage in milliseconds'><ref name='nonNegativeDecimal'/></element>" +
|
||||
Attack.prototype.bonusesSchema +
|
||||
Attack.prototype.preferredClassesSchema +
|
||||
Attack.prototype.restrictedClassesSchema +
|
||||
"<optional>" +
|
||||
"<element name='Projectile'>" +
|
||||
"<interleave>" +
|
||||
"<oneOrMore>" +
|
||||
"<choice>" +
|
||||
"<element name='ActorName' a:help='actor of the projectile animation'>" +
|
||||
"<text/>" +
|
||||
"</element>" +
|
||||
"<interleave>" +
|
||||
"<element name='ImpactActorName' a:help='actor of the projectile impact animation'>" +
|
||||
"<text/>" +
|
||||
"</element>" +
|
||||
"<element name='ImpactAnimationLifetime' a:help='length of the projectile impact animation'>" +
|
||||
"<ref name='positiveDecimal'/>" +
|
||||
"</element>" +
|
||||
"</interleave>" +
|
||||
"</choice>" +
|
||||
"</oneOrMore>" +
|
||||
"</interleave>" +
|
||||
"</element>" +
|
||||
"</optional>" +
|
||||
"<optional>" +
|
||||
"<element name='Splash'>" +
|
||||
"<interleave>" +
|
||||
@ -187,6 +156,40 @@ Attack.prototype.Schema =
|
||||
"</interleave>" +
|
||||
"</element>" +
|
||||
"</optional>" +
|
||||
"<element name='Projectile'>" +
|
||||
"<interleave>" +
|
||||
"<element name='Speed' a:help='Speed of projectiles (in meters per second).'>" +
|
||||
"<ref name='positiveDecimal'/>" +
|
||||
"</element>" +
|
||||
"<element name='Spread' a:help='Standard deviation of the bivariate normal distribution of hits at 100 meters. A disk at 100 meters from the attacker with this radius (2x this radius, 3x this radius) is expected to include the landing points of 39.3% (86.5%, 98.9%) of the rounds.'><ref name='nonNegativeDecimal'/></element>" +
|
||||
"<element name='Gravity' a:help='The gravity affecting the projectile. This affects the shape of the flight curve.'>" +
|
||||
"<ref name='nonNegativeDecimal'/>" +
|
||||
"</element>" +
|
||||
"<optional>" +
|
||||
"<element name='LaunchPoint' a:help='Delta from the unit position where to launch the projectile.'>" +
|
||||
"<attribute name='y'>" +
|
||||
"<data type='decimal'/>" +
|
||||
"</attribute>" +
|
||||
"</element>" +
|
||||
"</optional>" +
|
||||
"<optional>" +
|
||||
"<element name='ActorName' a:help='actor of the projectile animation.'>" +
|
||||
"<text/>" +
|
||||
"</element>" +
|
||||
"</optional>" +
|
||||
"<optional>" +
|
||||
"<element name='ImpactActorName' a:help='actor of the projectile impact animation'>" +
|
||||
"<text/>" +
|
||||
"</element>" +
|
||||
"<element name='ImpactAnimationLifetime' a:help='length of the projectile impact animation.'>" +
|
||||
"<ref name='positiveDecimal'/>" +
|
||||
"</element>" +
|
||||
"</optional>" +
|
||||
"</interleave>" +
|
||||
"</element>" +
|
||||
Attack.prototype.bonusesSchema +
|
||||
Attack.prototype.preferredClassesSchema +
|
||||
Attack.prototype.restrictedClassesSchema +
|
||||
"</interleave>" +
|
||||
"</element>" +
|
||||
"</optional>" +
|
||||
@ -493,8 +496,8 @@ Attack.prototype.PerformAttack = function(type, target)
|
||||
// * Obstacles like trees could reduce the probability of the target being hit
|
||||
// * Obstacles like walls should block projectiles entirely
|
||||
|
||||
let horizSpeed = +this.template[type].ProjectileSpeed;
|
||||
let gravity = +this.template[type].Gravity;
|
||||
let horizSpeed = +this.template[type].Projectile.Speed;
|
||||
let gravity = +this.template[type].Projectile.Gravity;
|
||||
//horizSpeed /= 2; gravity /= 2; // slow it down for testing
|
||||
|
||||
let cmpPosition = Engine.QueryInterface(this.entity, IID_Position);
|
||||
@ -513,7 +516,7 @@ Attack.prototype.PerformAttack = function(type, target)
|
||||
let predictedPosition = (timeToTarget !== false) ? Vector3D.mult(targetVelocity, timeToTarget).add(targetPosition) : targetPosition;
|
||||
|
||||
// Add inaccuracy based on spread.
|
||||
let distanceModifiedSpread = ApplyValueModificationsToEntity("Attack/Ranged/Spread", +this.template.Ranged.Spread, this.entity) *
|
||||
let distanceModifiedSpread = ApplyValueModificationsToEntity("Attack/Ranged/Spread", +this.template[type].Projectile.Spread, this.entity) *
|
||||
predictedPosition.horizDistanceTo(selfPosition) / 100;
|
||||
|
||||
let randNorm = randomNormal2D();
|
||||
@ -534,16 +537,14 @@ Attack.prototype.PerformAttack = function(type, target)
|
||||
let actorName = "";
|
||||
let impactActorName = "";
|
||||
let impactAnimationLifetime = 0;
|
||||
if (this.template.Ranged.Projectile)
|
||||
{
|
||||
actorName = this.template.Ranged.Projectile.ActorName || "";
|
||||
impactActorName = this.template.Ranged.Projectile.ImpactActorName || "";
|
||||
impactAnimationLifetime = this.template.Ranged.Projectile.ImpactAnimationLifetime || 0;
|
||||
}
|
||||
|
||||
let launchPoint = selfPosition.clone();
|
||||
// TODO: remove this when all the ranged unit templates are updated with Projectile/Launchpoint
|
||||
launchPoint.y += 3;
|
||||
actorName = this.template[type].Projectile.ActorName || "";
|
||||
impactActorName = this.template[type].Projectile.ImpactActorName || "";
|
||||
impactAnimationLifetime = this.template[type].Projectile.ImpactAnimationLifetime || 0;
|
||||
|
||||
// TODO: Use unit rotation to implement x/z offsets.
|
||||
let deltaLaunchPoint = new Vector3D(0, this.template[type].Projectile.LaunchPoint["@y"], 0.0);
|
||||
let launchPoint = Vector3D.add(selfPosition, deltaLaunchPoint);
|
||||
|
||||
let cmpVisual = Engine.QueryInterface(this.entity, IID_Visual);
|
||||
if (cmpVisual)
|
||||
@ -578,16 +579,16 @@ Attack.prototype.PerformAttack = function(type, target)
|
||||
"attackerOwner": attackerOwner,
|
||||
"attackImpactSound": attackImpactSound
|
||||
};
|
||||
if (this.template.Ranged.Splash)
|
||||
if (this.template[type].Splash)
|
||||
{
|
||||
data.friendlyFire = this.template.Ranged.Splash.FriendlyFire != "false";
|
||||
data.radius = +this.template.Ranged.Splash.Range;
|
||||
data.shape = this.template.Ranged.Splash.Shape;
|
||||
data.friendlyFire = this.template[type].Splash.FriendlyFire != "false";
|
||||
data.radius = +this.template[type].Splash.Range;
|
||||
data.shape = this.template[type].Splash.Shape;
|
||||
data.isSplash = true;
|
||||
data.splashStrengths = this.GetAttackStrengths(type + ".Splash");
|
||||
data.splashBonus = this.GetBonusTemplate(type + ".Splash");
|
||||
}
|
||||
cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_Damage, "MissileHit", timeToTarget * 1000 + +this.template.Ranged.Delay, data);
|
||||
cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_Damage, "MissileHit", timeToTarget * 1000 + +this.template[type].Delay, data);
|
||||
}
|
||||
else if (type == "Capture")
|
||||
{
|
||||
|
@ -71,9 +71,11 @@ function attackComponentTest(defenderClass, isEnemy, test_function)
|
||||
"MaxRange": 80,
|
||||
"PrepareTime": 300,
|
||||
"RepeatTime": 500,
|
||||
"ProjectileSpeed": 50,
|
||||
"Gravity": 9.81,
|
||||
"Spread": 2.5,
|
||||
"Projectile": {
|
||||
"Speed": 10,
|
||||
"Spread": 2,
|
||||
"Gravity": 1
|
||||
}
|
||||
"PreferredClasses": {
|
||||
"_string": "Archer"
|
||||
},
|
||||
|
@ -28,7 +28,20 @@ function Test_Generic()
|
||||
let attacker = 11;
|
||||
let atkPlayerEntity = 1;
|
||||
let attackerOwner = 6;
|
||||
let cmpAttack = ConstructComponent(attacker, "Attack", { "Ranged": { "ProjectileSpeed": 500, "Gravity": 9.81, "Spread": 0.5, "MaxRange": 50, "MinRange": 0, "Delay": 0 } } );
|
||||
let cmpAttack = ConstructComponent(attacker, "Attack",
|
||||
{
|
||||
"Ranged": {
|
||||
"MaxRange": 50,
|
||||
"MinRange": 0,
|
||||
"Delay": 0,
|
||||
"Projectile": {
|
||||
"Speed": 75.0,
|
||||
"Spread": 0.5,
|
||||
"Gravity": 9.81,
|
||||
"LaunchPoint": { "@y": 3 }
|
||||
}
|
||||
}
|
||||
});
|
||||
let damage = 5;
|
||||
let target = 21;
|
||||
let targetOwner = 7;
|
||||
|
@ -7,9 +7,11 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>50.0</MaxRange>
|
||||
<MinRange>1.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<BuildingAI>
|
||||
|
@ -7,9 +7,11 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>50.0</MaxRange>
|
||||
<MinRange>1.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<BuildingAI>
|
||||
|
@ -17,12 +17,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>60.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>1.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<RangeOverlay>
|
||||
<LineTexture>outline_border.png</LineTexture>
|
||||
<LineTextureMask>outline_border_mask.png</LineTextureMask>
|
||||
|
@ -22,12 +22,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>72.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>1.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
<RangeOverlay>
|
||||
<LineTexture>outline_border.png</LineTexture>
|
||||
|
@ -5,12 +5,15 @@
|
||||
<Hack>0</Hack>
|
||||
<Pierce>0</Pierce>
|
||||
<Crush>0</Crush>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>1.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
<RangeOverlay>
|
||||
<LineTexture>outline_border.png</LineTexture>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>72.0</MaxRange>
|
||||
<MinRange>12.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>1.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
<RangeOverlay>
|
||||
<LineTexture>outline_border.png</LineTexture>
|
||||
|
@ -12,12 +12,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>72.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>1.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
<RangeOverlay>
|
||||
<LineTexture>outline_border.png</LineTexture>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>16.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1000</PrepareTime>
|
||||
<RepeatTime>1500</RepeatTime>
|
||||
<Spread>3.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>3.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,10 +7,12 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>72.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<PrepareTime>500</PrepareTime>
|
||||
<RepeatTime>1000</RepeatTime>
|
||||
<Spread>3.0</Spread>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>3.0</Spread>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<Cost>
|
||||
|
@ -7,10 +7,12 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>28.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<PrepareTime>750</PrepareTime>
|
||||
<RepeatTime>1250</RepeatTime>
|
||||
<Spread>4.0</Spread>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>4.0</Spread>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<Cost>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>76.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>500</PrepareTime>
|
||||
<RepeatTime>1000</RepeatTime>
|
||||
<Spread>1.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>32.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>750</PrepareTime>
|
||||
<RepeatTime>1250</RepeatTime>
|
||||
<Spread>1.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>1.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>76</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>300</PrepareTime>
|
||||
<RepeatTime>500</RepeatTime>
|
||||
<Spread>1.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>28.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>500</PrepareTime>
|
||||
<RepeatTime>1000</RepeatTime>
|
||||
<Spread>1.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>1.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>80.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>0.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>0.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>36.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>750</PrepareTime>
|
||||
<RepeatTime>1250</RepeatTime>
|
||||
<Spread>0.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>0.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>80</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>200</PrepareTime>
|
||||
<RepeatTime>300</RepeatTime>
|
||||
<Spread>0.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>0.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>32.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>600</PrepareTime>
|
||||
<RepeatTime>1000</RepeatTime>
|
||||
<Spread>0.5</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>0.5</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -12,12 +12,15 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>10.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>750</PrepareTime>
|
||||
<RepeatTime>1250</RepeatTime>
|
||||
<Spread>3.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>3.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -11,10 +11,12 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>72.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<PrepareTime>600</PrepareTime>
|
||||
<RepeatTime>1000</RepeatTime>
|
||||
<Spread>3.0</Spread>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>3.0</Spread>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<Cost>
|
||||
|
@ -11,10 +11,12 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>24.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<PrepareTime>750</PrepareTime>
|
||||
<RepeatTime>1250</RepeatTime>
|
||||
<Spread>4.0</Spread>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>4.0</Spread>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<Cost>
|
||||
|
@ -11,10 +11,12 @@
|
||||
<Crush>1.0</Crush>
|
||||
<MaxRange>48.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>62.5</ProjectileSpeed>
|
||||
<PrepareTime>500</PrepareTime>
|
||||
<RepeatTime>1000</RepeatTime>
|
||||
<Spread>3.0</Spread>
|
||||
<Projectile>
|
||||
<Speed>62.5</Speed>
|
||||
<Spread>3.0</Spread>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<Cost>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>45.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1000</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>2.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>2.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Ship Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,11 +7,8 @@
|
||||
<Crush>100.0</Crush>
|
||||
<MaxRange>72.0</MaxRange>
|
||||
<MinRange>10.0</MinRange>
|
||||
<ProjectileSpeed>37.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>2000</PrepareTime>
|
||||
<RepeatTime>5000</RepeatTime>
|
||||
<Spread>4.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Splash>
|
||||
<Shape>Circular</Shape>
|
||||
@ -21,6 +18,12 @@
|
||||
<Pierce>15.0</Pierce>
|
||||
<Crush>35.0</Crush>
|
||||
</Splash>
|
||||
<Projectile>
|
||||
<Speed>37.5</Speed>
|
||||
<Spread>4.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Ship Structure</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>0.0</Crush>
|
||||
<MaxRange>55.0</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1000</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>2.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>2.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Ship Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,9 +7,6 @@
|
||||
<Crush>25.0</Crush>
|
||||
<MaxRange>80.0</MaxRange>
|
||||
<MinRange>26.0</MinRange>
|
||||
<Spread>2.0</Spread>
|
||||
<ProjectileSpeed>150.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>3000</PrepareTime>
|
||||
<RepeatTime>4000</RepeatTime>
|
||||
<Delay>0</Delay>
|
||||
@ -21,6 +18,12 @@
|
||||
<Pierce>75.0</Pierce>
|
||||
<Crush>5.0</Crush>
|
||||
</Splash>
|
||||
<Projectile>
|
||||
<Speed>150.0</Speed>
|
||||
<Spread>2.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human Siege</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,13 +7,14 @@
|
||||
<Crush>100.0</Crush>
|
||||
<MaxRange>80.0</MaxRange>
|
||||
<MinRange>26.0</MinRange>
|
||||
<ProjectileSpeed>37.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>4000</PrepareTime>
|
||||
<RepeatTime>5000</RepeatTime>
|
||||
<Spread>4.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>37.5</Speed>
|
||||
<Spread>4.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
<ImpactActorName>props/units/weapons/rock_explosion.xml</ImpactActorName>
|
||||
<ImpactAnimationLifetime>0.1</ImpactAnimationLifetime>
|
||||
</Projectile>
|
||||
|
@ -8,12 +8,15 @@
|
||||
<MaxRange>55.0</MaxRange>
|
||||
<MinRange>10.0</MinRange>
|
||||
<ElevationBonus>10</ElevationBonus>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>1200</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>2.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>2.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
<RangeOverlay>
|
||||
<LineTexture>outline_border.png</LineTexture>
|
||||
|
@ -7,10 +7,11 @@
|
||||
<Crush>0</Crush>
|
||||
<MaxRange>76</MaxRange>
|
||||
<MinRange>0.0</MinRange>
|
||||
<ProjectileSpeed>100.0</ProjectileSpeed>
|
||||
<PrepareTime>2320</PrepareTime>
|
||||
<RepeatTime>3000</RepeatTime>
|
||||
<Spread>1.0</Spread>
|
||||
<Projectile>
|
||||
<Speed>100.0</Speed>
|
||||
</Projectile>
|
||||
<PreferredClasses datatype="tokens">Human</PreferredClasses>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>227.0</Crush>
|
||||
<MaxRange>120</MaxRange>
|
||||
<MinRange>80</MinRange>
|
||||
<ProjectileSpeed>75.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>0</PrepareTime>
|
||||
<RepeatTime>10000</RepeatTime>
|
||||
<Spread>1.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>75.0</Speed>
|
||||
<Spread>1.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<BuildingAI>
|
||||
|
@ -4,8 +4,6 @@
|
||||
<Ranged>
|
||||
<MaxRange>76</MaxRange>
|
||||
<MinRange>26.0</MinRange>
|
||||
<ProjectileSpeed>37.5</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>3700</PrepareTime>
|
||||
<RepeatTime>5000</RepeatTime>
|
||||
<Splash>
|
||||
@ -16,6 +14,10 @@
|
||||
<Pierce>0.0</Pierce>
|
||||
<Crush>40.0</Crush>
|
||||
</Splash>
|
||||
<Projectile>
|
||||
<Speed>37.5</Speed>
|
||||
<Gravity>9.81</Gravity>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<Cost>
|
||||
|
@ -7,12 +7,15 @@
|
||||
<Crush>50.0</Crush>
|
||||
<MaxRange>12</MaxRange>
|
||||
<MinRange>8.0</MinRange>
|
||||
<ProjectileSpeed>10.0</ProjectileSpeed>
|
||||
<Gravity>9.81</Gravity>
|
||||
<PrepareTime>2000</PrepareTime>
|
||||
<RepeatTime>2000</RepeatTime>
|
||||
<Spread>2.0</Spread>
|
||||
<Delay>0</Delay>
|
||||
<Projectile>
|
||||
<Speed>10.0</Speed>
|
||||
<Spread>2.0</Spread>
|
||||
<Gravity>9.81</Gravity>
|
||||
<LaunchPoint y="3"/>
|
||||
</Projectile>
|
||||
</Ranged>
|
||||
</Attack>
|
||||
<DeathDamage>
|
||||
|
Loading…
Reference in New Issue
Block a user