Index: ps/trunk/binaries/data/mods/public/simulation/components/Attack.js
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/components/Attack.js
+++ ps/trunk/binaries/data/mods/public/simulation/components/Attack.js
@@ -93,35 +93,13 @@
"0.0" +
"0.0" +
"" +
+ "1000" +
"4.0" +
"" +
"" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- Attacking.BuildAttackEffectsSchema() +
- "" +
- "" +
- "" +
- "" +
- "" + // TODO: it shouldn't be stretched
- "" +
- "" +
- Attack.prototype.preferredClassesSchema +
- Attack.prototype.restrictedClassesSchema +
- "" +
- "" +
- "" +
- "" +
- "" +
+ "" +
+ "" +
+ "" +
"" +
"" +
"" +
@@ -133,9 +111,11 @@
"" +
Attacking.BuildAttackEffectsSchema() +
"" +
- "" +
+ "" +
+ "" +
+ "" +
""+
- "" +
+ "" +
"" +
"" +
"" +
@@ -146,13 +126,17 @@
"" +
"" +
"" +
- "" +
- "" +
- "" +
- "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" + // TODO: it shouldn't be stretched
"" +
"" +
- "" +
+ "" +
+ "" +
+ "" +
"" +
"" +
"" +
@@ -163,82 +147,45 @@
"" +
"" +
"" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
+ "" +
+ "" +
+ "" +
+ "" +
"" +
"" +
- "" +
- "" +
- "" +
- Attack.prototype.preferredClassesSchema +
- Attack.prototype.restrictedClassesSchema +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- Attacking.BuildAttackEffectsSchema() +
- "" +
- "" + // TODO: it shouldn't be stretched
- "" +
- "" +
- Attack.prototype.preferredClassesSchema +
- Attack.prototype.restrictedClassesSchema +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- "" +
- Attacking.BuildAttackEffectsSchema() +
- "" + // TODO: how do these work?
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
+ "" +
Attack.prototype.preferredClassesSchema +
Attack.prototype.restrictedClassesSchema +
"" +
"" +
- "";
+ "";
Attack.prototype.Init = function()
{
@@ -502,18 +449,33 @@
*/
Attack.prototype.PerformAttack = function(type, target)
{
- let attackerOwner = Engine.QueryInterface(this.entity, IID_Ownership).GetOwner();
+ let cmpPosition = Engine.QueryInterface(this.entity, IID_Position);
+ if (!cmpPosition || !cmpPosition.IsInWorld())
+ return;
+ let selfPosition = cmpPosition.GetPosition();
+
+ let cmpTargetPosition = Engine.QueryInterface(target, IID_Position);
+ if (!cmpTargetPosition || !cmpTargetPosition.IsInWorld())
+ return;
+ let targetPosition = cmpTargetPosition.GetPosition();
+
+ let cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
+ if (!cmpOwnership)
+ return;
+ let attackerOwner = cmpOwnership.GetOwner();
let data = {
"type": type,
"attackData": this.GetAttackEffectsData(type),
- "target": target,
+ "splash": this.GetSplashData(type),
"attacker": this.entity,
"attackerOwner": attackerOwner,
+ "target": target,
};
- // If this is a ranged attack, then launch a projectile
- if (type == "Ranged")
+ let delay = +(this.template[type].Delay || 0);
+
+ if (this.template[type].Projectile)
{
let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
let turnLength = cmpTimer.GetLatestTurnLength()/1000;
@@ -528,15 +490,6 @@
// We will try to estimate the position of the target, where we can hit it.
// We first estimate the time-till-hit by extrapolating linearly the movement
// of the last turn. We compute the time till an arrow will intersect the target.
- let cmpPosition = Engine.QueryInterface(this.entity, IID_Position);
- if (!cmpPosition || !cmpPosition.IsInWorld())
- return;
- let selfPosition = cmpPosition.GetPosition();
- let cmpTargetPosition = Engine.QueryInterface(target, IID_Position);
- if (!cmpTargetPosition || !cmpTargetPosition.IsInWorld())
- return;
- let targetPosition = cmpTargetPosition.GetPosition();
-
let targetVelocity = Vector3D.sub(targetPosition, cmpTargetPosition.GetPreviousPosition()).div(turnLength);
let timeToTarget = PositionHelper.PredictTimeToTarget(selfPosition, horizSpeed, targetPosition, targetVelocity);
@@ -571,31 +524,24 @@
let predictedHeight = cmpTargetPosition.GetHeightAt(predictedPosition.x, predictedPosition.z);
// Add inaccuracy based on spread.
- let distanceModifiedSpread = ApplyValueModificationsToEntity("Attack/Ranged/Spread", +this.template[type].Projectile.Spread, this.entity) *
+ let distanceModifiedSpread = ApplyValueModificationsToEntity("Attack/" + type + "/Spread", +this.template[type].Projectile.Spread, this.entity) *
predictedPosition.horizDistanceTo(selfPosition) / 100;
let randNorm = randomNormal2D();
let offsetX = randNorm[0] * distanceModifiedSpread;
let offsetZ = randNorm[1] * distanceModifiedSpread;
- let realTargetPosition = new Vector3D(predictedPosition.x + offsetX, predictedHeight, predictedPosition.z + offsetZ);
+ data.position = new Vector3D(predictedPosition.x + offsetX, predictedHeight, predictedPosition.z + offsetZ);
- // Recalculate when the missile will hit the target position.
- let realHorizDistance = realTargetPosition.horizDistanceTo(selfPosition);
+ let realHorizDistance = data.position.horizDistanceTo(selfPosition);
timeToTarget = realHorizDistance / horizSpeed;
+ delay += timeToTarget * 1000;
- let missileDirection = Vector3D.sub(realTargetPosition, selfPosition).div(realHorizDistance);
-
- // Launch the graphical projectile.
- let cmpProjectileManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ProjectileManager);
+ data.direction = Vector3D.sub(data.position, selfPosition).div(realHorizDistance);
- let actorName = "";
- let impactActorName = "";
- let impactAnimationLifetime = 0;
-
- actorName = this.template[type].Projectile.ActorName || "";
- impactActorName = this.template[type].Projectile.ImpactActorName || "";
- impactAnimationLifetime = this.template[type].Projectile.ImpactAnimationLifetime || 0;
+ let actorName = this.template[type].Projectile.ActorName || "";
+ let impactActorName = this.template[type].Projectile.ImpactActorName || "";
+ let 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);
@@ -614,24 +560,26 @@
launchPoint = visualActorLaunchPoint;
}
- let id = cmpProjectileManager.LaunchProjectileAtPoint(launchPoint, realTargetPosition, horizSpeed, gravity, actorName, impactActorName, impactAnimationLifetime);
+ let cmpProjectileManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ProjectileManager);
+ data.projectileId = cmpProjectileManager.LaunchProjectileAtPoint(launchPoint, data.position, horizSpeed, gravity, actorName, impactActorName, impactAnimationLifetime);
- let attackImpactSound = "";
let cmpSound = Engine.QueryInterface(this.entity, IID_Sound);
- if (cmpSound)
- attackImpactSound = cmpSound.GetSoundGroup("attack_impact_" + type.toLowerCase());
+ data.attackImpactSound = cmpSound ? cmpSound.GetSoundGroup("attack_impact_" + type.toLowerCase()) : "";
- data.position = realTargetPosition;
- data.direction = missileDirection;
- data.projectileId = id;
- data.attackImpactSound = attackImpactSound;
- data.splash = this.GetSplashData(type);
data.friendlyFire = this.template[type].Projectile.FriendlyFire == "true";
-
- cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_DelayedDamage, "MissileHit", +this.template[type].Delay + timeToTarget * 1000, data);
}
else
- Attacking.HandleAttackEffects(target, data);
+ {
+ data.position = targetPosition;
+ data.direction = Vector3D.sub(targetPosition, selfPosition);
+ }
+ if (delay)
+ {
+ let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer);
+ cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_DelayedDamage, "Hit", delay, data);
+ }
+ else
+ Engine.QueryInterface(SYSTEM_ENTITY, IID_DelayedDamage).Hit(data, 0);
};
Attack.prototype.OnValueModification = function(msg)
@@ -648,20 +596,20 @@
cmpUnitAI.UpdateRangeQueries();
};
-Attack.prototype.GetRangeOverlays = function()
+Attack.prototype.GetRangeOverlays = function(type = "Ranged")
{
- if (!this.template.Ranged || !this.template.Ranged.RangeOverlay)
+ if (!this.template[type] || !this.template[type].RangeOverlay)
return [];
- let range = this.GetRange("Ranged");
+ let range = this.GetRange(type);
let rangeOverlays = [];
for (let i in range)
if ((i == "min" || i == "max") && range[i])
rangeOverlays.push({
"radius": range[i],
- "texture": this.template.Ranged.RangeOverlay.LineTexture,
- "textureMask": this.template.Ranged.RangeOverlay.LineTextureMask,
- "thickness": +this.template.Ranged.RangeOverlay.LineThickness,
+ "texture": this.template[type].RangeOverlay.LineTexture,
+ "textureMask": this.template[type].RangeOverlay.LineTextureMask,
+ "thickness": +this.template[type].RangeOverlay.LineThickness,
});
return rangeOverlays;
};
Index: ps/trunk/binaries/data/mods/public/simulation/components/DelayedDamage.js
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/components/DelayedDamage.js
+++ ps/trunk/binaries/data/mods/public/simulation/components/DelayedDamage.js
@@ -15,14 +15,13 @@
DelayedDamage.prototype.MISSILE_HIT_RADIUS = 2;
/**
- * Handles hit logic after the projectile travel time has passed.
+ * Handles hit logic (after a delay has passed).
* @param {Object} data - The data sent by the caller.
* @param {string} data.type - The type of damage.
* @param {Object} data.attackData - Data of the form { 'effectType': { ...opaque effect data... }, 'Bonuses': {...} }.
* @param {number} data.target - The entity id of the target.
* @param {number} data.attacker - The entity id of the attacker.
* @param {number} data.attackerOwner - The player id of the owner of the attacker.
- * @param {Vector2D} data.origin - The origin of the projectile hit.
* @param {Vector3D} data.position - The expected position of the target.
* @param {number} data.projectileId - The id of the projectile.
* @param {Vector3D} data.direction - The unit vector defining the direction.
@@ -34,16 +33,14 @@
* @param {string} data.splash.shape - The shape of the splash range.
* @param {Object} data.splash.attackData - same as attackData, for splash.
*/
-DelayedDamage.prototype.MissileHit = function(data, lateness)
+DelayedDamage.prototype.Hit = function(data, lateness)
{
if (!data.position)
return;
- let cmpSoundManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_SoundManager);
- if (cmpSoundManager && data.attackImpactSound)
- cmpSoundManager.PlaySoundGroupAtPosition(data.attackImpactSound, data.position);
+ if (data.attackImpactSound)
+ Engine.QueryInterface(SYSTEM_ENTITY, IID_SoundManager).PlaySoundGroupAtPosition(data.attackImpactSound, data.position);
- // Do this first in case the direct hit kills the target.
if (data.splash)
Attacking.CauseDamageOverArea({
"type": data.type,
@@ -57,14 +54,20 @@
"friendlyFire": data.splash.friendlyFire
});
- let cmpProjectileManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ProjectileManager);
-
- let target = data.target;
// Since we can't damage mirages, replace a miraged target by the real target.
+ let target = data.target;
let cmpMirage = Engine.QueryInterface(data.target, IID_Mirage);
if (cmpMirage)
target = cmpMirage.GetParent();
+ if (!data.projectileId)
+ {
+ Attacking.HandleAttackEffects(target, data);
+ return;
+ }
+
+ let cmpProjectileManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ProjectileManager);
+
// Deal direct damage if we hit the main target
// and we could handle the attack.
if (PositionHelper.TestCollision(target, data.position, lateness) &&
Index: ps/trunk/binaries/data/mods/public/simulation/components/tests/test_Damage.js
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/components/tests/test_Damage.js
+++ ps/trunk/binaries/data/mods/public/simulation/components/tests/test_Damage.js
@@ -107,7 +107,7 @@
});
AddMock(SYSTEM_ENTITY, IID_DelayedDamage, {
- "MissileHit": () => {
+ "Hit": () => {
damageTaken = true;
},
});
@@ -478,7 +478,7 @@
"GetEnemies": () => [2]
});
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(60));
hitEnts.clear();
@@ -510,13 +510,13 @@
"GetShape": () => ({ "type": "circle", "radius": 20 })
});
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
hitEnts.clear();
// Make sure we don't corrupt other tests.
DeleteMock(60, IID_Mirage);
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(60));
hitEnts.clear();
@@ -539,7 +539,7 @@
"ExecuteQueryAroundPos": () => [61]
});
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
hitEnts.clear();
@@ -589,7 +589,7 @@
"GetShape": () => ({ "type": "circle", "radius": 20 }),
});
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 100 + 200);
dealtDamage = 0;
@@ -616,35 +616,35 @@
});
data.attackData.Bonuses = bonus;
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 400 * 100 + 200);
dealtDamage = 0;
hitEnts.clear();
data.splash.attackData.Bonuses = splashBonus;
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 400 * 100 + 10000 * 200);
dealtDamage = 0;
hitEnts.clear();
data.attackData.Bonuses = undefined;
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 100 + 10000 * 200);
dealtDamage = 0;
hitEnts.clear();
data.attackData.Bonuses = null;
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 100 + 10000 * 200);
dealtDamage = 0;
hitEnts.clear();
data.attackData.Bonuses = {};
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 100 + 10000 * 200);
dealtDamage = 0;
@@ -696,7 +696,7 @@
"GetShape": () => ({ "type": "circle", "radius": 20 }),
});
- cmpDelayedDamage.MissileHit(data, 0);
+ cmpDelayedDamage.Hit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 100 + 200);
dealtDamage = 0;
Index: ps/trunk/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/structures/rome/army_camp.xml
@@ -7,10 +7,8 @@
25
60
- 0
1200
2000
- 0
100
1.5
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
@@ -13,10 +13,8 @@
12
60
- 0
1200
2000
- 0
100
1.5
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_defensive_tower.xml
@@ -7,7 +7,6 @@
10
1200
2000
- 0
100
1.5
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
@@ -7,10 +7,8 @@
16
60
- 0
1200
2000
- 0
100
1.5
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml
@@ -14,6 +14,8 @@
1000
2
+ 1000
+ !Domestic
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml
@@ -7,10 +7,8 @@
7
60
- 0
500
1000
- 0
100
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_crossbowman.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_crossbowman.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_crossbowman.xml
@@ -7,10 +7,8 @@
20
60
- 0
2400
3000
- 0
120
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelineer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelineer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelineer.xml
@@ -7,10 +7,8 @@
18
30
- 0
750
1250
- 0
70
4
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
@@ -7,10 +7,8 @@
14
60
- 0
500
1000
- 0
100
0.8
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_crossbowman.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_crossbowman.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_crossbowman.xml
@@ -7,10 +7,8 @@
40
60
- 0
2400
3000
- 0
120
0.8
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelineer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelineer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelineer.xml
@@ -7,10 +7,8 @@
36
30
- 0
750
1250
- 0
70
1.6
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml
@@ -7,10 +7,8 @@
13.5
60
- 0
500
1000
- 0
100
0.8
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_crossbowman.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_crossbowman.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_crossbowman.xml
@@ -7,10 +7,8 @@
40
60
- 0
2400
3000
- 0
120
0.8
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelineer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelineer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelineer.xml
@@ -7,10 +7,8 @@
26
30
- 0
500
1000
- 0
70
1.6
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_elephant_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_elephant_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_elephant_archer.xml
@@ -7,10 +7,8 @@
14
60
- 0
500
1000
- 0
100
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml
@@ -7,10 +7,8 @@
28
60
- 0
500
1000
- 0
100
0.4
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_crossbowman.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_crossbowman.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_crossbowman.xml
@@ -7,10 +7,8 @@
80
60
- 0
2400
3000
- 0
120
0.4
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelineer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelineer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelineer.xml
@@ -7,10 +7,8 @@
60
30
- 0
750
1250
- 0
70
0.8
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_archer.xml
@@ -7,10 +7,8 @@
27
60
- 0
500
1000
- 0
100
0.4
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_crossbowman.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_crossbowman.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_crossbowman.xml
@@ -7,10 +7,8 @@
80
60
- 0
2400
3000
- 0
120
0.4
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_javelineer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_javelineer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_javelineer.xml
@@ -7,10 +7,8 @@
50
30
- 0
600
1000
- 0
70
0.8
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry.xml
@@ -14,6 +14,8 @@
1000
2
+ 1000
+ !Domestic
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
@@ -7,10 +7,8 @@
6.7
60
- 0
500
1000
- 0
100
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_crossbowman.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_crossbowman.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_crossbowman.xml
@@ -7,10 +7,8 @@
20
60
- 0
2400
3000
- 0
120
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelineer.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelineer.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelineer.xml
@@ -7,10 +7,8 @@
16
30
- 0
750
1250
- 0
70
4
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml
@@ -8,10 +8,8 @@
1.1
45
- 0
750
1250
- 0
90
3
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml
@@ -7,10 +7,8 @@
35
45
- 0
1000
2000
- 0
100
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml
@@ -10,7 +10,6 @@
40
2000
5000
- 0
40
6
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml
@@ -7,10 +7,8 @@
35
55
- 0
1000
2000
- 0
100
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml
@@ -10,7 +10,6 @@
15
5000
6000
- 0
150
1
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml
@@ -10,7 +10,6 @@
40
6000
7000
- 0
40
6
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml
@@ -12,7 +12,6 @@
10
1200
2000
- 0
100
2
Index: ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
@@ -16,6 +16,8 @@
1000
2
+ 1000
+ !Domestic
Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/plane.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/units/plane.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/units/plane.xml
@@ -11,7 +11,6 @@
80
0
10000
- 0
75
1
Index: ps/trunk/binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
===================================================================
--- ps/trunk/binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
+++ ps/trunk/binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
@@ -10,7 +10,6 @@
10
2000
2000
- 0
10
2