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,12 @@ (2 * ret.attack[type].elevationBonus + ret.attack[type].maxRange)); } ret.attack[type].repeatTime = getAttackStat("RepeatTime"); + if (template.Attack[type].Projectile) + ret.attack[type].friendlyFire = template.Attack[type].Projectile.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 @@ "" + "" + "" + + "" + "" + "" + "" + @@ -473,10 +475,11 @@ if (!this.template[type].Splash) return false; - let splash = {}; - splash.damage = this.GetAttackStrengths(type + ".Splash"); - splash.friendlyFire = this.template[type].Splash.FriendlyFire != "false"; - splash.shape = this.template[type].Splash.Shape; + let splash = { + "damage": this.GetAttackStrengths(type + ".Splash"), + "friendlyFire": this.template[type].Splash.FriendlyFire != "false", + "shape": this.template[type].Splash.Shape + }; return splash; }; @@ -571,7 +574,7 @@ // 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) { @@ -603,18 +606,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); } else if (type == "Capture") 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,21 +112,19 @@ cmpSoundManager.PlaySoundGroupAtPosition(data.attackImpactSound, data.position); // Do this first in case the direct hit kills the target - if (data.isSplash) - { + if (data.splash) 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 }); - } let cmpProjectileManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_ProjectileManager); @@ -150,8 +149,8 @@ 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 playersToDamage = this.GetPlayersToDamage(data.attackerOwner, data.friendlyFire); + let ents = this.EntitiesNearPoint(Vector2D.from3D(data.position), targetPosition.horizDistanceTo(data.position) * 2, playersToDamage); 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 }; @@ -450,12 +450,12 @@ hitEnts.clear(); // 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 = { + "friendlyFire": "false", + "radius": 10, + "shape": "Circular", + "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