Index: binaries/data/mods/public/globalscripts/Templates.js
===================================================================
--- binaries/data/mods/public/globalscripts/Templates.js
+++ binaries/data/mods/public/globalscripts/Templates.js
@@ -197,11 +197,11 @@
(2 * ret.attack[type].elevationBonus + ret.attack[type].maxRange));
}
ret.attack[type].repeatTime = getAttackStat("RepeatTime");
+ ret.attack[type].friendlyFire = template.Attack[type].FriendlyFire != "false";
if (template.Attack[type].Splash)
{
ret.attack[type].splash = {
- // true if undefined
"friendlyFire": template.Attack[type].Splash.FriendlyFire != "false",
"shape": template.Attack[type].Splash.Shape,
"damage": {}
Index: binaries/data/mods/public/simulation/components/Attack.js
===================================================================
--- binaries/data/mods/public/simulation/components/Attack.js
+++ binaries/data/mods/public/simulation/components/Attack.js
@@ -101,6 +101,7 @@
"props/units/weapons/rock_flaming.xml" +
"props/units/weapons/rock_explosion.xml" +
"0.1" +
+ "false" +
"" +
"Champion" +
"" +
@@ -187,6 +188,7 @@
"" +
"" +
"" +
+ "" +
"" +
"" +
"" +
@@ -603,17 +605,19 @@
"bonus": this.GetBonusTemplate(type),
"isSplash": false,
"attackerOwner": attackerOwner,
+ "friendlyFire": this.template[type].Projectile.FriendlyFire != "false",
"attackImpactSound": attackImpactSound,
"statusEffects": this.template[type].StatusEffects
};
if (this.template[type].Splash)
{
- 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");
+ data.splash = {
+ "friendlyFire": this.template[type].Splash.FriendlyFire != "false",
+ "radius": +this.template[type].Splash.Range,
+ "shape": this.template[type].Splash.Shape,
+ "strengths": this.GetAttackStrengths(type + ".Splash"),
+ "bonus": this.GetBonusTemplate(type + ".Splash")
+ };
}
cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_Damage, "MissileHit", timeToTarget * 1000 + +this.template[type].Delay, data);
}
Index: binaries/data/mods/public/simulation/components/Damage.js
===================================================================
--- binaries/data/mods/public/simulation/components/Damage.js
+++ binaries/data/mods/public/simulation/components/Damage.js
@@ -94,12 +94,13 @@
* @param {Object} data.bonus - the attack bonus template from the attacker.
* @param {string} data.attackImpactSound - the name of the sound emited on impact.
* @param {Object} data.statusEffects - status effects eg. poisoning, burning etc.
- * ***When splash damage***
* @param {boolean} data.friendlyFire - a flag indicating if allied entities are also damaged.
- * @param {number} data.radius - the radius of the splash damage.
- * @param {string} data.shape - the shape of the splash range.
- * @param {Object} data.splashBonus - the attack bonus template from the attacker.
- * @param {Object} data.splashStrengths - data of the form { 'hack': number, 'pierce': number, 'crush': number }.
+ * ***When splash damage***
+ * @param {boolean} data.splash.friendlyFire - a flag indicating if allied entities are also damaged.
+ * @param {number} data.splash.radius - the radius of the splash damage.
+ * @param {string} data.splash.shape - the shape of the splash range.
+ * @param {Object} data.splash.bonus - the attack bonus template from the attacker.
+ * @param {Object} data.splash.strengths - data of the form { 'hack': number, 'pierce': number, 'crush': number }.
*/
Damage.prototype.MissileHit = function(data, lateness)
{
@@ -111,17 +112,17 @@
cmpSoundManager.PlaySoundGroupAtPosition(data.attackImpactSound, data.position);
// Do this first in case the direct hit kills the target
- if (data.isSplash)
+ if ("splash" in data)
{
this.CauseSplashDamage({
"attacker": data.attacker,
"origin": Vector2D.from3D(data.position),
- "radius": data.radius,
- "shape": data.shape,
- "strengths": data.splashStrengths,
- "splashBonus": data.splashBonus,
+ "radius": data.splash.radius,
+ "shape": data.splash.shape,
+ "strengths": data.splash.strengths,
+ "splashBonus": data.splash.bonus,
"direction": data.direction,
- "playersToDamage": this.GetPlayersToDamage(data.attackerOwner, data.friendlyFire),
+ "playersToDamage": this.GetPlayersToDamage(data.attackerOwner, data.splash.friendlyFire),
"type": data.type,
"attackerOwner": data.attackerOwner
});
@@ -150,8 +151,7 @@
return;
// If we didn't hit the main target look for nearby units
- let cmpPlayer = QueryPlayerIDInterface(data.attackerOwner);
- let ents = this.EntitiesNearPoint(Vector2D.from3D(data.position), targetPosition.horizDistanceTo(data.position) * 2, cmpPlayer.GetEnemies());
+ let ents = this.EntitiesNearPoint(Vector2D.from3D(data.position), targetPosition.horizDistanceTo(data.position) * 2, this.GetPlayersToDamage(data.attackerOwner, data.friendlyFire));
for (let ent of ents)
{
if (!this.TestCollision(ent, data.position, lateness))
Index: binaries/data/mods/public/simulation/components/tests/test_Attack.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_Attack.js
+++ binaries/data/mods/public/simulation/components/tests/test_Attack.js
@@ -78,7 +78,8 @@
"Projectile": {
"Speed": 10,
"Spread": 2,
- "Gravity": 1
+ "Gravity": 1,
+ "FriendlyFire": "false",
},
"PreferredClasses": {
"_string": "Archer"
Index: binaries/data/mods/public/simulation/components/tests/test_Damage.js
===================================================================
--- binaries/data/mods/public/simulation/components/tests/test_Damage.js
+++ binaries/data/mods/public/simulation/components/tests/test_Damage.js
@@ -39,6 +39,7 @@
"Speed": 75.0,
"Spread": 0.5,
"Gravity": 9.81,
+ "FriendlyFire": "false",
"LaunchPoint": { "@y": 3 }
}
}
@@ -61,7 +62,6 @@
"multiplier": 1.0,
"attackerOwner": attackerOwner,
"position": targetPos,
- "isSplash": false,
"projectileId": 9,
"direction": new Vector3D(1,0,0)
};
@@ -351,7 +351,7 @@
"direction": new Vector3D(1, 0, 0),
"projectileId": 9,
"bonus": undefined,
- "isSplash": false,
+ "friendlyFire": false,
"attackerOwner": 1
};
@@ -451,11 +451,11 @@
// Add a splash damage.
- data.friendlyFire = false;
- data.radius = 10;
- data.shape = "Circular";
- data.isSplash = true;
- data.splashStrengths = { "hack": 0, "pierce": 0, "crush": 200 };
+ data.splash = {};
+ data.splash.friendlyFire = false;
+ data.splash.radius = 10;
+ data.splash.shape = "Circular";
+ data.splash.strengths = { "hack": 0, "pierce": 0, "crush": 200 };
AddMock(SYSTEM_ENTITY, IID_RangeManager, {
"ExecuteQueryAroundPos": () => [61, 62]
@@ -519,7 +519,7 @@
dealtDamage = 0;
hitEnts.clear();
- data.splashBonus = splashBonus;
+ data.splash.bonus = splashBonus;
cmpDamage.MissileHit(data, 0);
TS_ASSERT(hitEnts.has(61));
TS_ASSERT_EQUALS(dealtDamage, 400 * 100 + 10000 * 200);
Index: binaries/data/mods/public/simulation/templates/campaigns/campaign_city_minor_test.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/campaigns/campaign_city_minor_test.xml
+++ binaries/data/mods/public/simulation/templates/campaigns/campaign_city_minor_test.xml
@@ -13,6 +13,7 @@
2000
75.0
+ false
Index: binaries/data/mods/public/simulation/templates/campaigns/campaign_city_test.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/campaigns/campaign_city_test.xml
+++ binaries/data/mods/public/simulation/templates/campaigns/campaign_city_test.xml
@@ -13,6 +13,7 @@
2000
75.0
+ false
Index: binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml
+++ binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml
@@ -26,6 +26,7 @@
75.0
1.5
9.81
+ false
Index: binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
+++ binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml
@@ -31,6 +31,7 @@
75.0
1.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_structure_defensive_tower.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_defensive_tower.xml
+++ binaries/data/mods/public/simulation/templates/template_structure_defensive_tower.xml
@@ -14,6 +14,7 @@
75.0
1.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_structure_defensive_wall_tower.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_defensive_wall_tower.xml
+++ binaries/data/mods/public/simulation/templates/template_structure_defensive_wall_tower.xml
@@ -16,6 +16,7 @@
75.0
1.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
+++ binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml
@@ -21,6 +21,7 @@
75.0
1.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_archer.xml
@@ -14,6 +14,7 @@
75.0
3.0
+ false
Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelinist.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelinist.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged_javelinist.xml
@@ -14,6 +14,7 @@
62.5
4.0
+ false
Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_archer.xml
@@ -16,6 +16,7 @@
75.0
1.0
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelinist.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelinist.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_javelinist.xml
@@ -16,6 +16,7 @@
62.5
1.0
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_archer.xml
@@ -16,6 +16,7 @@
75.0
1.0
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelinist.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelinist.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_javelinist.xml
@@ -16,6 +16,7 @@
62.5
1.0
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_archer.xml
@@ -16,6 +16,7 @@
75.0
0.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelinist.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelinist.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_javelinist.xml
@@ -16,6 +16,7 @@
62.5
0.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_archer.xml
@@ -16,6 +16,7 @@
75.0
0.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_javelinist.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_javelinist.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_javelinist.xml
@@ -16,6 +16,7 @@
62.5
0.5
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_archer.xml
@@ -18,6 +18,7 @@
75.0
3.0
+ false
Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelinist.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelinist.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_javelinist.xml
@@ -18,6 +18,7 @@
62.5
4.0
+ false
Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged_slinger.xml
@@ -18,6 +18,7 @@
62.5
3.0
+ false
Index: binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_ship_bireme.xml
@@ -16,6 +16,7 @@
75.0
2.0
9.81
+ false
Ship Human
Index: binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_ship_quinquereme.xml
@@ -26,6 +26,7 @@
37.5
4.0
9.81
+ false
Ship Structure
Index: binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_ship_trireme.xml
@@ -16,6 +16,7 @@
75.0
2.0
9.81
+ false
Ship Human
Index: binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_siege_boltshooter.xml
@@ -26,6 +26,7 @@
150.0
2.0
9.81
+ false
Human Siege
Index: binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_siege_stonethrower.xml
@@ -16,6 +16,7 @@
37.5
4.0
9.81
+ false
props/units/weapons/rock_explosion.xml
0.1
Index: binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_siege_tower.xml
@@ -17,6 +17,7 @@
75.0
2.0
9.81
+ false
Human
Index: binaries/data/mods/public/simulation/templates/units/plane.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/plane.xml
+++ binaries/data/mods/public/simulation/templates/units/plane.xml
@@ -16,6 +16,7 @@
75.0
1.0
9.81
+ false
Index: binaries/data/mods/public/simulation/templates/units/rome_siege_onager.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/rome_siege_onager.xml
+++ binaries/data/mods/public/simulation/templates/units/rome_siege_onager.xml
@@ -19,6 +19,7 @@
37.5
9.81
+ false
Index: binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
+++ binaries/data/mods/public/simulation/templates/units/theb_siege_fireraiser.xml
@@ -16,6 +16,7 @@
10.0
2.0
9.81
+ false