Index: binaries/data/mods/public/globalscripts/Templates.js =================================================================== --- binaries/data/mods/public/globalscripts/Templates.js +++ binaries/data/mods/public/globalscripts/Templates.js @@ -188,14 +188,14 @@ ret.attack[type] = { "minRange": getAttackStat("MinRange"), "maxRange": getAttackStat("MaxRange"), - "elevationBonus": getAttackStat("ElevationBonus"), + "attackHeightOffset": getAttackStat("AttackHeightOffset"), "damage": {} }; for (let damageType in template.Attack[type].Damage) ret.attack[type].damage[damageType] = getAttackStat("Damage/" + damageType); ret.attack[type].elevationAdaptedRange = Math.sqrt(ret.attack[type].maxRange * - (2 * ret.attack[type].elevationBonus + ret.attack[type].maxRange)); + (2 * ret.attack[type].attackHeightOffset + ret.attack[type].maxRange)); } ret.attack[type].repeatTime = getAttackStat("RepeatTime"); Index: binaries/data/mods/public/gui/session/input.js =================================================================== --- binaries/data/mods/public/gui/session/input.js +++ binaries/data/mods/public/gui/session/input.js @@ -166,14 +166,14 @@ { // building can be placed here, and has an attack // show the range advantage in the tooltip - var cmd = { + lt cmd = { "x": placementSupport.position.x, "z": placementSupport.position.z, "range": placementSupport.attack.Ranged.maxRange, - "elevationBonus": placementSupport.attack.Ranged.elevationBonus, + "attackHeightOffset": placementSupport.attack.Ranged.attackHeightOffset, }; - var averageRange = Math.round(Engine.GuiInterfaceCall("GetAverageRangeForBuildings", cmd) - cmd.range); - var range = Math.round(cmd.range); + let averageRange = Math.round(Engine.GuiInterfaceCall("GetAverageRangeForBuildings", cmd) - cmd.range); + let range = Math.round(cmd.range); placementSupport.tooltipMessage = sprintf(translatePlural("Basic range: %(range)s meter", "Basic range: %(range)s meters", range), { "range": range }) + "\n" + sprintf(translatePlural("Average bonus range: %(range)s meter", "Average bonus range: %(range)s meters", averageRange), { "range": averageRange }); } 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 @@ -89,10 +89,10 @@ "" + "44.0" + "20.0" + - "15.0" + + "15.0" + "800" + "1600" + - "1000" + + "1000" + "" + "" + "Cavalry" + @@ -155,7 +155,7 @@ "" + "" + ""+ - "" + + "" + "" + "" + "" + @@ -172,7 +172,9 @@ "" + "" + "" + - "" + + "" + + "" + + ""+ "" + "" + "" + @@ -492,10 +494,10 @@ let min = +(this.template[type].MinRange || 0); min = ApplyValueModificationsToEntity("Attack/" + type + "/MinRange", min, this.entity); - let elevationBonus = +(this.template[type].ElevationBonus || 0); - elevationBonus = ApplyValueModificationsToEntity("Attack/" + type + "/ElevationBonus", elevationBonus, this.entity); + let attackHeightOffset = +(this.template[type].AttackHeightOffset || 0); + attackHeightOffset = ApplyValueModificationsToEntity("Attack/" + type + "/AttackHeightOffset", attackHeightOffset, this.entity); - return { "max": max, "min": min, "elevationBonus": elevationBonus }; + return { "max": max, "min": min, "attackHeightOffset": attackHeightOffset }; }; Attack.prototype.GetBonusTemplate = function(type) @@ -619,7 +621,7 @@ data.splashStrengths = this.GetAttackStrengths(type + ".Splash"); data.splashBonus = this.GetBonusTemplate(type + ".Splash"); } - cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_Damage, "MissileHit", timeToTarget * 1000 + +this.template[type].Delay, data); + cmpTimer.SetTimeout(SYSTEM_ENTITY, IID_Damage, "MissileHit", +(this.template[type].DamageDelay || 0) + timeToTarget * 1000, data); } else if (type == "Capture") { Index: binaries/data/mods/public/simulation/components/BuildingAI.js =================================================================== --- binaries/data/mods/public/simulation/components/BuildingAI.js +++ binaries/data/mods/public/simulation/components/BuildingAI.js @@ -106,31 +106,31 @@ */ BuildingAI.prototype.SetupRangeQuery = function() { - var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); + let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); if (!cmpAttack) return; - var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); + let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); if (this.enemyUnitsQuery) { cmpRangeManager.DestroyActiveQuery(this.enemyUnitsQuery); this.enemyUnitsQuery = undefined; } - var cmpPlayer = QueryOwnerInterface(this.entity); + let cmpPlayer = QueryOwnerInterface(this.entity); if (!cmpPlayer) return; - var enemies = cmpPlayer.GetEnemies(); + let enemies = cmpPlayer.GetEnemies(); if (enemies.length && enemies[0] == 0) enemies.shift(); // remove gaia if (!enemies.length) return; - var range = cmpAttack.GetRange(attackType); + let range = cmpAttack.GetRange(attackType); this.enemyUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery( - this.entity, range.min, range.max, range.elevationBonus, + this.entity, range.min, range.max, range.attackHeightOffset, enemies, IID_DamageReceiver, cmpRangeManager.GetEntityFlagMask("normal")); cmpRangeManager.EnableActiveQuery(this.enemyUnitsQuery); @@ -140,26 +140,26 @@ // This should be called whenever our ownership changes. BuildingAI.prototype.SetupGaiaRangeQuery = function() { - var cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); + let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); if (!cmpAttack) return; - var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); + let cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager); if (this.gaiaUnitsQuery) { cmpRangeManager.DestroyActiveQuery(this.gaiaUnitsQuery); this.gaiaUnitsQuery = undefined; } - var cmpPlayer = QueryOwnerInterface(this.entity); + let cmpPlayer = QueryOwnerInterface(this.entity); if (!cmpPlayer || !cmpPlayer.IsEnemy(0)) return; - var range = cmpAttack.GetRange(attackType); + let range = cmpAttack.GetRange(attackType); // This query is only interested in Gaia entities that can attack. this.gaiaUnitsQuery = cmpRangeManager.CreateActiveParabolicQuery( - this.entity, range.min, range.max, range.elevationBonus, + this.entity, range.min, range.max, range.attackHeightOffset, [0], IID_Attack, cmpRangeManager.GetEntityFlagMask("normal")); cmpRangeManager.EnableActiveQuery(this.gaiaUnitsQuery); Index: binaries/data/mods/public/simulation/components/GuiInterface.js =================================================================== --- binaries/data/mods/public/simulation/components/GuiInterface.js +++ binaries/data/mods/public/simulation/components/GuiInterface.js @@ -407,22 +407,22 @@ if (type != "Ranged") { // not a ranged attack, set some defaults - ret.attack[type].elevationBonus = 0; + ret.attack[type].attackHeightOffset = 0; ret.attack[type].elevationAdaptedRange = ret.attack.maxRange; continue; } - ret.attack[type].elevationBonus = range.elevationBonus; + ret.attack[type].attackHeightOffset = range.attackHeightOffset; if (cmpUnitAI && cmpPosition && cmpPosition.IsInWorld()) { // For units, take the range in front of it, no spread. So angle = 0 - ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.elevationBonus, 0); + ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.attackHeightOffset, 0); } else if(cmpPosition && cmpPosition.IsInWorld()) { // For buildings, take the average elevation around it. So angle = 2*pi - ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.elevationBonus, 2*Math.PI); + ret.attack[type].elevationAdaptedRange = cmpRangeManager.GetElevationAdaptedRange(cmpPosition.GetPosition(), cmpPosition.GetRotation(), range.max, range.attackHeightOffset, 2*Math.PI); } else { @@ -530,10 +530,10 @@ "z": cmd.z }; - let elevationBonus = cmd.elevationBonus || 0; + let attackHeightOffset = cmd.attackHeightOffset || 0; let range = cmd.range; - return cmpRangeManager.GetElevationAdaptedRange(pos, rot, range, elevationBonus, 2*Math.PI); + return cmpRangeManager.GetElevationAdaptedRange(pos, rot, range, attackHeightOffset, 2*Math.PI); }; GuiInterface.prototype.GetTemplateData = function(player, templateName) Index: binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitAI.js +++ binaries/data/mods/public/simulation/components/UnitAI.js @@ -4308,7 +4308,7 @@ let t = targetCmpPosition.GetPosition(); // h is positive when I'm higher than the target - let h = s.y - t.y + range.elevationBonus; + let h = s.y - t.y + range.attackHeightOffset; let parabolicMaxRange = Math.sqrt(Math.square(range.max) + 2 * range.max * h); // No negative roots please @@ -4424,7 +4424,7 @@ let t = targetCmpPosition.GetPosition(); - let h = s.y - t.y + range.elevationBonus; + let h = s.y - t.y + range.attackHeightOffset; let maxRange = Math.sqrt(Math.square(range.max) + 2 * range.max * h); if (maxRange < 0) 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 @@ -34,7 +34,7 @@ "Ranged": { "MaxRange": 50, "MinRange": 0, - "Delay": 0, + "DamageDelay": 0, "Projectile": { "Speed": 75.0, "Spread": 0.5, 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 @@ -21,7 +21,6 @@ 0.0 1200 2000 - 0 75.0 1.5 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 @@ -26,7 +26,6 @@ 0.0 1200 2000 - 0 75.0 1.5 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 @@ -9,7 +9,6 @@ 1200 2000 - 0 75.0 1.5 Index: binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_outpost.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_outpost.xml +++ binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_outpost.xml @@ -17,7 +17,7 @@ 55 13 - 0 + 0 Index: binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml +++ binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_sentry.xml @@ -12,7 +12,7 @@ 70 10 - 9 + 9 Index: binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml +++ binaries/data/mods/public/simulation/templates/template_structure_defensive_tower_stone.xml @@ -7,7 +7,7 @@ 76 10 - 15 + 15 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 @@ -11,7 +11,6 @@ 12.0 1200 2000 - 0 75.0 1.5 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 @@ -16,7 +16,6 @@ 0.0 1200 2000 - 0 75.0 1.5 Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_ranged.xml @@ -11,7 +11,6 @@ 0.0 1000 1500 - 0 75.0 3.0 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 @@ -11,7 +11,6 @@ 0.0 500 1000 - 0 75.0 1.0 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 @@ -11,7 +11,6 @@ 0.0 750 1250 - 0 62.5 1.0 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 @@ -11,7 +11,6 @@ 0.0 300 500 - 0 75.0 1.0 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 @@ -11,7 +11,6 @@ 0.0 500 1000 - 0 62.5 1.0 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 @@ -11,7 +11,6 @@ 0.0 1200 2000 - 0 75.0 0.5 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 @@ -11,7 +11,6 @@ 0.0 750 1250 - 0 62.5 0.5 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 @@ -11,7 +11,6 @@ 0.0 200 300 - 0 75.0 0.5 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 @@ -11,7 +11,6 @@ 0.0 600 1000 - 0 62.5 0.5 Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_ranged.xml @@ -16,7 +16,6 @@ 0.0 750 1250 - 0 75.0 3.0 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 @@ -11,7 +11,6 @@ 0.0 1000 2000 - 0 75.0 2.0 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 @@ -11,7 +11,6 @@ 10.0 2000 5000 - 0 Circular 10 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 @@ -11,7 +11,6 @@ 0.0 1000 2000 - 0 75.0 2.0 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 @@ -11,7 +11,6 @@ 26.0 3000 4000 - 0 Linear 8.0 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 @@ -11,7 +11,6 @@ 26.0 4000 5000 - 0 37.5 4.0 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 @@ -9,10 +9,9 @@ 55.0 10.0 - 10 + 10 1200 2000 - 0 75.0 2.0 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 @@ -11,7 +11,6 @@ 80 0 10000 - 0 75.0 1.0 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 @@ -11,7 +11,6 @@ 8.0 2000 2000 - 0 10.0 2.0