Index: binaries/data/mods/public/globalscripts/Templates.js =================================================================== --- binaries/data/mods/public/globalscripts/Templates.js +++ binaries/data/mods/public/globalscripts/Templates.js @@ -160,12 +160,33 @@ let ret = {}; - if (template.Armour) + if (template.Resistance) { - ret.armour = {}; - for (let damageType in template.Armour) - if (damageType != "Foundation") - ret.armour[damageType] = getEntityValue("Armour/" + damageType); + ret.resistance = {}; + for (let resistanceType in template.Resistance) + { + if (resistanceType != "Foundation") + { + if (template.Resistance[resistanceType].Damage) + { + if (!ret.resistance.Damage) + ret.resistance.Damage = {}; + for (let damageType in template.Resistance[resistanceType].Damage) + { + if (!ret.resistance.Damage[damageType]) + ret.resistance.Damage[damageType] = 0; + ret.resistance.Damage[damageType] += getEntityValue("Resistance/" + resistanceType + "/Damage/" + damageType); + } + } + if (template.Resistance[resistanceType].Capture) + { + if (!ret.resistance.Capture) + ret.resistance.Capture = 0; + ret.resistance.Capture += getEntityValue("Resistance/" + resistanceType + "/Capture"); + } + } + + } } let getAttackEffects = (temp, path) => { Index: binaries/data/mods/public/gui/common/tooltips.js =================================================================== --- binaries/data/mods/public/gui/common/tooltips.js +++ binaries/data/mods/public/gui/common/tooltips.js @@ -152,35 +152,67 @@ } /** - * Converts an armor level into the actual reduction percentage + * Converts an resistance level into the actual reduction percentage */ -function armorLevelToPercentageString(level) +function resistanceLevelToPercentageString(level) { return sprintf(translate("%(percentage)s%%"), { "percentage": (100 - Math.round(Math.pow(0.9, level) * 100)) }); } -function getArmorTooltip(template) +function getResistanceTooltip(template) { - if (!template.armour) + if (!template.resistance) return ""; + let tooltips = []; - return sprintf(translate("%(label)s %(details)s"), { - "label": headerFont(translate("Armor:")), - "details": - Object.keys(template.armour).map( - dmgType => sprintf(translate("%(damage)s %(damageType)s %(armorPercentage)s"), { - "damage": template.armour[dmgType].toFixed(1), - "damageType": unitFont(translateWithContext("damage type", dmgType)), - "armorPercentage": + if (template.resistance.Damage) + tooltips.push(sprintf(translate("%(label)s %(details)s"), { + "label": headerFont(translate("Damage Resistance:")), + "details": + Object.keys(template.resistance.Damage).map( + dmgType => sprintf(translate("%(damage)s %(damageType)s %(resistancePercentage)s"), { + "damage": template.resistance.Damage[dmgType].toFixed(1), + "damageType": unitFont(translateWithContext("damage type", dmgType)), + "resistancePercentage": + '[font="sans-10"]' + + sprintf(translate("(%(resistancePercentage)s)"), { + "resistancePercentage": resistanceLevelToPercentageString(template.resistance.Damage[dmgType]) + }) + '[/font]' + }) + ).join(commaFont(translate(", "))) + })); + if (template.resistance.Capture) + tooltips.push(sprintf(translate("%(label)s %(details)s"), { + "label": headerFont(translate("Capture Resistance:")), + "details": + sprintf(translate("%(damage)s %(damageType)s %(resistancePercentage)s"), { + "damage": template.resistance.Capture.toFixed(1), + "damageType": unitFont(translateWithContext("damage type", "Capture")), + "resistancePercentage": '[font="sans-10"]' + - sprintf(translate("(%(armorPercentage)s)"), { - "armorPercentage": armorLevelToPercentageString(template.armour[dmgType]) + sprintf(translate("(%(resistancePercentage)s)"), { + "resistancePercentage": resistanceLevelToPercentageString(template.resistance.Capture) }) + '[/font]' }) - ).join(commaFont(translate(", "))) - }); + })); + if (template.resistance.StatusEffects) + tooltips.push(sprintf(translate("%(label)s %(details)s"), { + "label": headerFont(translate("Status Effects Resistance:")), + "details": "ToDo." + //sprintf(translate("%(damage)s %(damageType)s %(resistancePercentage)s"), { + // "damage": template.resistance.Capture.toFixed(1), + // "damageType": unitFont(translateWithContext("damage type", "Capture")), + // "resistancePercentage": + // '[font="sans-10"]' + + // sprintf(translate("(%(resistancePercentage)s)"), { + // "resistancePercentage": resistanceLevelToPercentageString(template.resistance.Capture) + // }) + '[/font]' + //}) + })); + + return tooltips.join("\n"); } function attackRateDetails(interval, projectiles) Index: binaries/data/mods/public/gui/reference/common/draw.js =================================================================== --- binaries/data/mods/public/gui/reference/common/draw.js +++ binaries/data/mods/public/gui/reference/common/draw.js @@ -14,7 +14,7 @@ getHealerTooltip, getAttackTooltip, getSplashDamageTooltip, - getArmorTooltip, + getResistanceTooltip, getGarrisonTooltip, getProjectilesTooltip, getSpeedTooltip, Index: binaries/data/mods/public/gui/reference/common/load.js =================================================================== --- binaries/data/mods/public/gui/reference/common/load.js +++ binaries/data/mods/public/gui/reference/common/load.js @@ -140,9 +140,9 @@ if (!parsed.upgrades) parsed.upgrades = []; - // Note: An assumption is made here that wall segments all have the same armor and auras + // Note: An assumption is made here that wall segments all have the same resistance and auras let struct = loadEntityTemplate(parsed.wallSet.templates.long); - parsed.armour = struct.armour; + parsed.resistance = struct.resistance; parsed.auras = struct.auras; // For technology cost multiplier, we need to use the tower Index: binaries/data/mods/public/gui/session/selection_details.js =================================================================== --- binaries/data/mods/public/gui/session/selection_details.js +++ binaries/data/mods/public/gui/session/selection_details.js @@ -283,11 +283,11 @@ showTemplateDetails(entState.template); }; - Engine.GetGUIObjectByName("attackAndArmorStats").tooltip = [ + Engine.GetGUIObjectByName("attackAndResistanceStats").tooltip = [ getAttackTooltip, getSplashDamageTooltip, getHealerTooltip, - getArmorTooltip, + getResistanceTooltip, getGatherTooltip, getSpeedTooltip, getGarrisonTooltip, Index: binaries/data/mods/public/gui/session/selection_panels.js =================================================================== --- binaries/data/mods/public/gui/session/selection_panels.js +++ binaries/data/mods/public/gui/session/selection_panels.js @@ -983,7 +983,7 @@ getAttackTooltip, getSplashDamageTooltip, getHealerTooltip, - getArmorTooltip, + getResistanceTooltip, getGarrisonTooltip, getProjectilesTooltip, getSpeedTooltip Index: binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml =================================================================== --- binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml +++ binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml @@ -55,9 +55,9 @@ - - - Attack and Armor + + + Attack and Resistance @@ -85,7 +85,7 @@ - + Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -1075,7 +1075,7 @@ getPanelEntNameTooltip, getCurrentHealthTooltip, getAttackTooltip, - getArmorTooltip, + getResistanceTooltip, getEntityTooltip, getAurasTooltip ].map(tooltip => tooltip(panelEntState)).filter(tip => tip).join("\n"); Index: binaries/data/mods/public/maps/random/polar_sea_triggers.js =================================================================== --- binaries/data/mods/public/maps/random/polar_sea_triggers.js +++ binaries/data/mods/public/maps/random/polar_sea_triggers.js @@ -51,7 +51,7 @@ continue; // The returned entities are sorted by RangeManager already - let targets = Attacking.EntitiesNearPoint(attackerPos, 200, players).filter(ent => { + let targets = Attacking.EntitiesNearPoint(attackerPos, 0, 200, players).filter(ent => { let cmpIdentity = Engine.QueryInterface(ent, IID_Identity); return cmpIdentity && MatchesClassList(cmpIdentity.GetClassesList(), targetClasses); }); Index: binaries/data/mods/public/simulation/ai/common-api/entity.js =================================================================== --- binaries/data/mods/public/simulation/ai/common-api/entity.js +++ binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -197,17 +197,41 @@ "getPopulationBonus": function() { return +this.get("Cost/PopulationBonus"); }, - "armourStrengths": function() { - let armourDamageTypes = this.get("Armour"); - if (!armourDamageTypes) + "resistanceStrengths": function() { + let resistanceDamageTypes = this.get("Resistance"); + if (!resistanceDamageTypes) return undefined; - let armour = {}; - for (let damageType in armourDamageTypes) - if (damageType != "Foundation") - armour[damageType] = +armourDamageTypes[damageType]; + let resistance = {}; + let effectTypes = ["Damage", "Capture"]; + for (let effectType of effectTypes) + for (let resistanceType in resistanceDamageTypes) + { + let template = resistanceDamageTypes[resistanceType][effectType]; + if (template) + { + if (effectType == "Capture") + { + if (!resistance.Capture) + resistance.Capture = 0; + resistance.Capture += +this.get("Resistance/" + resistanceType + "/Capture"); + } + else if (effectType == "Damage") + { + if (!resistance.Damage) + resistance.Damage = {}; + for (let damageType in template) + { + if (!resistance.Damage[damageType]) + resistance.Damage[damageType] = 0; + resistance.Damage[damageType] += +this.get("Resistance/" + resistanceType + "/Damage/" + damageType); + } + } + } + + } - return armour; + return resistance; }, "attackTypes": function() { Index: binaries/data/mods/public/simulation/ai/petra/entityExtend.js =================================================================== --- binaries/data/mods/public/simulation/ai/petra/entityExtend.js +++ binaries/data/mods/public/simulation/ai/petra/entityExtend.js @@ -52,14 +52,18 @@ } } - let armourStrength = ent.armourStrengths(); - for (let str in armourStrength) + let resistanceStrength = ent.resistanceStrengths(); + for (let effectType in resistanceStrength) { - let val = parseFloat(armourStrength[str]); - if (DamageTypeImportance[str]) - strength += DamageTypeImportance[str] * val / damageTypes.length; - else if (debugLevel > 0) - API3.warn("Petra: " + str + " unknown armourStrength in getMaxStrength (please add " + str + " to config.js)."); + if (effectType == "Damage") + for (let str in resistanceStrength[effectType]) + { + let val = parseFloat(resistanceStrength[effectType][str]); + if (DamageTypeImportance[str]) + strength += DamageTypeImportance[str] * val / damageTypes.length; + else if (debugLevel > 0) + API3.warn("Petra: " + str + " unknown resistanceStrength in getMaxStrength (please add " + str + " to config.js)."); + } } return strength * ent.maxHitpoints() / 100.0; Index: binaries/data/mods/public/simulation/components/Armour.js =================================================================== --- binaries/data/mods/public/simulation/components/Armour.js +++ binaries/data/mods/public/simulation/components/Armour.js @@ -1,73 +0,0 @@ -function Armour() {} - -Armour.prototype.DamageResistanceSchema = "" + - "" + - "" + - "" + - "Foundation" + - "" + - "" + - "" + - ""; - -Armour.prototype.Schema = - "Controls the damage resistance of the unit." + - "" + - "10.0" + - "0.0" + - "5.0" + - "" + - Armour.prototype.DamageResistanceSchema + - "" + - "" + - Armour.prototype.DamageResistanceSchema + - "" + - ""; - -Armour.prototype.Init = function() -{ - this.invulnerable = false; -}; - -Armour.prototype.IsInvulnerable = function() -{ - return this.invulnerable; -}; - -Armour.prototype.SetInvulnerability = function(invulnerability) -{ - this.invulnerable = invulnerability; - Engine.PostMessage(this.entity, MT_InvulnerabilityChanged, { "entity": this.entity, "invulnerability": invulnerability }); -}; - -Armour.prototype.GetArmourStrengths = function(effectType) -{ - // Work out the armour values with technology effects. - let applyMods = (type, foundation) => { - let strength; - if (foundation) - { - strength = +this.template.Foundation[type]; - type = "Foundation/" + type; - } - else - strength = +this.template[type]; - - return ApplyValueModificationsToEntity("Armour/" + type, strength, this.entity); - }; - - let foundation = Engine.QueryInterface(this.entity, IID_Foundation) && this.template.Foundation; - - let ret = {}; - - if (effectType != "Damage") - return ret; - - for (let damageType in this.template) - if (damageType != "Foundation") - ret[damageType] = applyMods(damageType, foundation); - - return ret; -}; - -Engine.RegisterComponentType(IID_Resistance, "Armour", Armour); 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 @@ -138,6 +138,9 @@ "" + "" + "" + + "" + + "" + + "" + "" + "" + Attacking.BuildAttackEffectsSchema() + @@ -540,7 +543,8 @@ if (this.template[type].Splash) data.splash = { "friendlyFire": this.template[type].Splash.FriendlyFire != "false", - "radius": +this.template[type].Splash.Range, + "minRange": +(this.template[type].Splash.MinRange || 0), + "maxRange": +this.template[type].Splash.Range, "shape": this.template[type].Splash.Shape, "attackData": this.GetAttackEffectsData(type, true), }; Index: binaries/data/mods/public/simulation/components/Capturable.js =================================================================== --- binaries/data/mods/public/simulation/components/Capturable.js +++ binaries/data/mods/public/simulation/components/Capturable.js @@ -58,7 +58,7 @@ bonusMultiplier *= cmpHealth.GetMaxHitpoints() / (0.1 * cmpHealth.GetMaxHitpoints() + 0.9 * cmpHealth.GetHitpoints()); - let total = Attacking.GetTotalAttackEffects({ "Capture": effectData }, "Capture") * bonusMultiplier; + let total = Attacking.GetTotalAttackEffects({ "Capture": effectData }, "Capture", this.entity) * bonusMultiplier; let change = this.Reduce(total, attackerOwner); // TODO: implement loot Index: binaries/data/mods/public/simulation/components/DeathDamage.js =================================================================== --- binaries/data/mods/public/simulation/components/DeathDamage.js +++ binaries/data/mods/public/simulation/components/DeathDamage.js @@ -1,23 +1,5 @@ function DeathDamage() {} -DeathDamage.prototype.bonusesSchema = - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - ""; - DeathDamage.prototype.Schema = "When a unit or building is destroyed, it inflicts damage to nearby units." + "" + @@ -31,6 +13,9 @@ "" + "" + "" + + "" + + "" + + "" + "" + "" + Attacking.BuildAttackEffectsSchema(); @@ -58,7 +43,8 @@ if (owner == INVALID_PLAYER) warn("Unit causing death damage does not have any owner."); - let radius = ApplyValueModificationsToEntity("DeathDamage/Range", +this.template.Range, this.entity); + let minRange = ApplyValueModificationsToEntity("DeathDamage/MinRange", +(this.template.MinRange || 0), this.entity); + let maxRange = ApplyValueModificationsToEntity("DeathDamage/Range", +this.template.Range, this.entity); Attacking.CauseDamageOverArea({ "type": "Death", @@ -66,7 +52,8 @@ "attacker": this.entity, "attackerOwner": owner, "origin": pos, - "radius": radius, + "minRange": minRange, + "maxRange": maxRange, "shape": this.template.Shape, "friendlyFire": this.template.FriendlyFire == "true", }); Index: binaries/data/mods/public/simulation/components/DelayedDamage.js =================================================================== --- binaries/data/mods/public/simulation/components/DelayedDamage.js +++ binaries/data/mods/public/simulation/components/DelayedDamage.js @@ -44,7 +44,8 @@ "attacker": data.attacker, "attackerOwner": data.attackerOwner, "origin": Vector2D.from3D(data.position), - "radius": data.splash.radius, + "minRange": data.splash.minRange, + "maxRange": data.splash.maxRange, "shape": data.splash.shape, "direction": data.direction, "friendlyFire": data.splash.friendlyFire @@ -69,7 +70,7 @@ // If we didn't hit the main target look for nearby units let cmpPlayer = QueryPlayerIDInterface(data.attackerOwner); - let ents = Attacking.EntitiesNearPoint(Vector2D.from3D(data.position), targetPosition.horizDistanceTo(data.position) * 2, cmpPlayer.GetEnemies()); + let ents = Attacking.EntitiesNearPoint(Vector2D.from3D(data.position), 0, targetPosition.horizDistanceTo(data.position) * 2, cmpPlayer.GetEnemies()); for (let ent of ents) { if (!Attacking.TestCollision(ent, data.position, lateness)) 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 @@ -432,9 +432,13 @@ } } - let cmpArmour = Engine.QueryInterface(ent, IID_Resistance); - if (cmpArmour) - ret.armour = cmpArmour.GetArmourStrengths("Damage"); + let cmpResistance = Engine.QueryInterface(ent, IID_Resistance); + if (cmpResistance) + { + ret.resistance = {} + Object.assign(ret.resistance, cmpResistance.GetResistanceStrengths("Damage")); + Object.assign(ret.resistance, cmpResistance.GetResistanceStrengths("Capture")); + } let cmpBuildingAI = Engine.QueryInterface(ent, IID_BuildingAI); if (cmpBuildingAI) Index: binaries/data/mods/public/simulation/components/Health.js =================================================================== --- binaries/data/mods/public/simulation/components/Health.js +++ binaries/data/mods/public/simulation/components/Health.js @@ -186,11 +186,10 @@ Health.prototype.TakeDamage = function(effectData, attacker, attackerOwner, bonusMultiplier) { let cmpResistance = Engine.QueryInterface(this.entity, IID_Resistance); - if (cmpResistance && cmpResistance.IsInvulnerable()) return { "killed": false }; - let total = Attacking.GetTotalAttackEffects(effectData, "Damage", cmpResistance) * bonusMultiplier; + let total = Attacking.GetTotalAttackEffects(effectData, "Damage", this.entity) * bonusMultiplier; // Reduce health let change = this.Reduce(total); Index: binaries/data/mods/public/simulation/components/Resistance.js =================================================================== --- binaries/data/mods/public/simulation/components/Resistance.js +++ binaries/data/mods/public/simulation/components/Resistance.js @@ -1,73 +1,142 @@ -function Armour() {} +function Resistance() {} -Armour.prototype.DamageResistanceSchema = "" + +/** + * Builds a RelaxRNG schema of possible attack effects. + * Currently harcoded to "Damage", "Capture" and "StatusEffects". + * + * @return {string} - RelaxNG schema string + */ +Resistance.prototype.BuildResistanceSchema = function() +{ + return "" + "" + - "" + - "" + - "Foundation" + - "" + - "" + - "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + ""; +}; -Armour.prototype.Schema = +Resistance.prototype.Schema = "Controls the damage resistance of the unit." + "" + - "10.0" + - "0.0" + - "5.0" + + "" + + "" + + "10.0" + + "0.0" + + "5.0" + + "" + + "10" + + "" + + "" + + "" + + "" + + "10" + + "0" + + "5.0" + + "" + + "" + + "" + "" + - Armour.prototype.DamageResistanceSchema + - "" + - "" + - Armour.prototype.DamageResistanceSchema + + "" + + "" + + "" + + Resistance.prototype.BuildResistanceSchema() + "" + - ""; + ""; -Armour.prototype.Init = function() +Resistance.prototype.Init = function() { this.invulnerable = false; }; -Armour.prototype.IsInvulnerable = function() +Resistance.prototype.IsInvulnerable = function() { return this.invulnerable; }; -Armour.prototype.SetInvulnerability = function(invulnerability) +Resistance.prototype.SetInvulnerability = function(invulnerability) { this.invulnerable = invulnerability; Engine.PostMessage(this.entity, MT_InvulnerabilityChanged, { "entity": this.entity, "invulnerability": invulnerability }); }; -Armour.prototype.GetArmourStrengths = function(effectType) +/** + * Calculate the resistance of an entity. + * @param {string} effectType - The type of attack effect the resistance has to be calculated for (e.g. "Damage", "Capture"). + * @param {string} circumvent - An optional array consisting of the resistance types not to use in calculation (e.g. "Shield"). + * @return {object} - An object of the type { "Damage": { "Crush": 10, "Hack": 2 }, "Capture": 2 } + */ +Resistance.prototype.GetResistanceStrengths = function(effectType, circumvent = []) { - // Work out the armour values with technology effects. - let applyMods = (type, foundation) => { - let strength; - if (foundation) - { - strength = +this.template.Foundation[type]; - type = "Foundation/" + type; - } - else - strength = +this.template[type]; + // Work out the resistance values with technology effects. + let applyMods = (resistanceType, damageType) => { + let strength = +this.template[resistanceType][effectType][damageType]; - return ApplyValueModificationsToEntity("Armour/" + type, strength, this.entity); + return ApplyValueModificationsToEntity("Resistance/" + resistanceType + "/" + effectType + "/" + damageType, strength, this.entity); }; let foundation = Engine.QueryInterface(this.entity, IID_Foundation) && this.template.Foundation; let ret = {}; - if (effectType != "Damage") + // ToDo: Support resistance against status effects. + if (effectType == "StatusEffects") return ret; - for (let damageType in this.template) - if (damageType != "Foundation") - ret[damageType] = applyMods(damageType, foundation); + for (let resistanceType in this.template) + { + if (circumvent.length && circumvent.indexOf(resistanceType) != -1) + continue; + if (!foundation && resistanceType == "Foundation") + continue; + if (foundation && resistanceType != "Foundation") + continue; + let template = this.template[resistanceType][effectType]; + if (template) + { + if (effectType == "Capture") + { + if (!ret.Capture) + ret.Capture = 0; + ret.Capture += ApplyValueModificationsToEntity("Resistance/" + resistanceType + "/Capture", +this.template[resistanceType].Capture, this.entity); + } + else if (effectType == "Damage") + { + if (!ret.Damage) + ret.Damage = {}; + for (let damageType in template) + { + if (!ret.Damage[damageType]) + ret.Damage[damageType] = 0; + ret.Damage[damageType] += applyMods(resistanceType, damageType); + } + } + } + } return ret; }; -Engine.RegisterComponentType(IID_Resistance, "Armour", Armour); +Engine.RegisterComponentType(IID_Resistance, "Resistance", Resistance); 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 @@ -166,7 +166,8 @@ "attacker": attacker, "attackerOwner": attackerOwner, "origin": origin, - "radius": 10, + "minRange": 0, + "maxRange": 10, "shape": "Linear", "direction": new Vector3D(1, 747, 0), "friendlyFire": false, @@ -174,7 +175,7 @@ let fallOff = function(x, y) { - return (1 - x * x / (data.radius * data.radius)) * (1 - 25 * y * y / (data.radius * data.radius)); + return (1 - x * x / (data.maxRange * data.maxRange)) * (1 - 25 * y * y / (data.maxRange * data.maxRange)); }; let hitEnts = new Set(); @@ -340,7 +341,8 @@ "attacker": 50, "attackerOwner": attackerOwner, "origin": new Vector2D(3, 4), - "radius": radius, + "minRange": 0, + "maxRange": radius, "shape": "Circular", "friendlyFire": false, }); @@ -470,7 +472,8 @@ // Add a splash damage. data.splash = {}; data.splash.friendlyFire = false; - data.splash.radius = 10; + data.splash.minRange = 0; + data.splash.maxRange = 10; data.splash.shape = "Circular"; data.splash.attackData = { "Damage": { "Hack": 0, "Pierce": 0, "Crush": 200 } }; Index: binaries/data/mods/public/simulation/components/tests/test_DeathDamage.js =================================================================== --- binaries/data/mods/public/simulation/components/tests/test_DeathDamage.js +++ binaries/data/mods/public/simulation/components/tests/test_DeathDamage.js @@ -45,7 +45,8 @@ "attacker": deadEnt, "attackerOwner": player, "origin": pos, - "radius": template.Range, + "minRange": 0, + "maxRange": template.Range, "shape": template.Shape, "friendlyFire": false }; Index: binaries/data/mods/public/simulation/data/auras/structures/wall_garrisoned.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/structures/wall_garrisoned.json +++ binaries/data/mods/public/simulation/data/auras/structures/wall_garrisoned.json @@ -2,9 +2,9 @@ "type": "garrisonedUnits", "affects": ["Soldier"], "modifications": [ - { "value": "Armour/Pierce", "add": 3 }, - { "value": "Armour/Hack", "add": 3 }, - { "value": "Armour/Crush", "add": 3 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 3 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 3 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 3 }, { "value": "Vision/Range", "add": 20 } ], "auraName": "Wall Protection", Index: binaries/data/mods/public/simulation/data/auras/units/catafalques/cart_catafalque.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/catafalques/cart_catafalque.json +++ binaries/data/mods/public/simulation/data/auras/units/catafalques/cart_catafalque.json @@ -2,9 +2,9 @@ "type": "global", "affects": ["Melee Cavalry"], "modifications": [ - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 }, { "value": "Health/Max", "multiply": 1.1 } ], "auraName": "Commander of Heavy Cavalry", Index: binaries/data/mods/public/simulation/data/auras/units/catafalques/rome_catafalque_2.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/catafalques/rome_catafalque_2.json +++ binaries/data/mods/public/simulation/data/auras/units/catafalques/rome_catafalque_2.json @@ -2,9 +2,9 @@ "type": "global", "affects": ["Human", "Siege"], "modifications": [ - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 } ], "auraName": "Founder and Defender of the Republic", "auraDescription": "Brutus was one of the key figures in the overthrow of the monarchy and the founding of the Roman Republic. Later, as consul he led a Roman army to victory against the Etruscan King Tarquinius who sought to retake the throne.\nHumans and Siege Engines +1 armor." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_1.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_1.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/athen_hero_iphicrates_1.json @@ -2,9 +2,9 @@ "type": "formation", "affects": ["Soldier"], "modifications": [ - { "value": "Armour/Pierce", "add": 3 }, - { "value": "Armour/Hack", "add": 3 }, - { "value": "Armour/Crush", "add": 3 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 3 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 3 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 3 }, { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 } ], "auraName": "Formation Reforms", Index: binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_caratacos.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_caratacos.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/brit_hero_caratacos.json @@ -3,9 +3,9 @@ "affects": ["Soldier", "Siege"], "modifications": [ { "value": "UnitMotion/WalkSpeed", "multiply": 1.15 }, - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 } ], "auraName": "Guerrilla Chief", "auraDescription": "All soldiers and siege engines +15% speed and +1 armor." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/iber_hero_caros_2.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/iber_hero_caros_2.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/iber_hero_caros_2.json @@ -3,9 +3,9 @@ "radius": 50, "affects": ["Soldier"], "modifications": [ - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 } ], "auraDescription": "+1 armor for soldiers.", "auraName": "Battle Fervor", Index: binaries/data/mods/public/simulation/data/auras/units/heroes/mace_hero_demetrius.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/mace_hero_demetrius.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/mace_hero_demetrius.json @@ -3,9 +3,9 @@ "radius": 60, "affects": ["Siege"], "modifications": [ - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 }, { "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 }, { "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 }, { "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 }, Index: binaries/data/mods/public/simulation/data/auras/units/heroes/rome_hero_maximus.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/rome_hero_maximus.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/rome_hero_maximus.json @@ -2,9 +2,9 @@ "type": "global", "affects": ["Human", "Structure"], "modifications": [ - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 } ], "auraName": "Shield of Rome", "auraDescription": "+1 armor for all units and structures." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/sele_hero_antiochus_great.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/sele_hero_antiochus_great.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/sele_hero_antiochus_great.json @@ -3,9 +3,9 @@ "radius": 45, "affects": ["Cavalry"], "modifications": [ - { "value": "Armour/Pierce", "add": 2 }, - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Crush", "add": 2 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 2 } ], "auraName": "Ilarchès", "auraDescription": "Nearby cavalry gains +2 levels of all armor types." Index: binaries/data/mods/public/simulation/data/auras/units/heroes/spart_hero_brasidas.json =================================================================== --- binaries/data/mods/public/simulation/data/auras/units/heroes/spart_hero_brasidas.json +++ binaries/data/mods/public/simulation/data/auras/units/heroes/spart_hero_brasidas.json @@ -4,9 +4,9 @@ "affects": ["Citizen Infantry Javelinist"], "modifications": [ { "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.25 }, - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Crush", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 } ], "auraName": "Helot Reforms", "auraDescription": "+25% attack and +1 armor for javelin infantry citizen-soldiers.", Index: binaries/data/mods/public/simulation/data/technologies/advanced_unit_bonus.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/advanced_unit_bonus.json +++ binaries/data/mods/public/simulation/data/technologies/advanced_unit_bonus.json @@ -4,9 +4,9 @@ "tooltip": "Units promoted to the advanced class gain a lot of quality: 20% extra health, 1 extra armor level of every type, 20% extra loot, 20% extra attack for melee units, 4m extra range and better precision for ranged units, faster movement speeds and extra heal speed and range for healers.", "modifications": [ { "value": "Health/Max", "multiply": 1.2 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Crush", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 }, { "value": "Attack/Capture/Capture", "add": 0.4 }, { "value": "ResourceGatherer/BaseSpeed", "multiply": 0.5 }, { "value": "UnitMotion/WalkSpeed", "add": 0.5, "affects": "Infantry" }, Index: binaries/data/mods/public/simulation/data/technologies/armor_cav_01.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_cav_01.json +++ binaries/data/mods/public/simulation/data/technologies/armor_cav_01.json @@ -15,8 +15,8 @@ "researchTime": 40, "tooltip": "Equip your cavalry mounts with armor. All Cavalry +1 Hack and Pierce armor level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Pierce", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 } ], "affects": ["Cavalry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_cav_02.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_cav_02.json +++ binaries/data/mods/public/simulation/data/technologies/armor_cav_02.json @@ -9,8 +9,8 @@ "researchTime": 40, "tooltip": "Equip your cavalry mounts with armor. All Cavalry +1 Hack and Pierce armor level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Pierce", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 } ], "affects": ["Cavalry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_cav_chamfron.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_cav_chamfron.json +++ binaries/data/mods/public/simulation/data/technologies/armor_cav_chamfron.json @@ -16,7 +16,7 @@ "researchTime": 40, "tooltip": "Equip your cavalry mounts with armor. All Cavalry +1 Hack armor level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 } ], "affects": ["Cavalry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_hero_01.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_hero_01.json +++ binaries/data/mods/public/simulation/data/technologies/armor_hero_01.json @@ -16,8 +16,8 @@ "researchTime": 40, "tooltip": "All heroes +2 Hack Armor Levels and +2 Pierce Armor Levels, but also +50 Metal Cost.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, { "value": "Cost/Resources/metal", "add": 50 } ], "affects": ["Hero"], Index: binaries/data/mods/public/simulation/data/technologies/armor_infantry_01.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantry_01.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantry_01.json @@ -21,8 +21,8 @@ "researchTime": 40, "tooltip": "All Infantry +1 Hack and Pierce Armor Level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Pierce", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 } ], "affects": ["Infantry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantry_02.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantry_02.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantry_02.json @@ -19,8 +19,8 @@ "researchTime": 40, "tooltip": "All Infantry +1 Hack and Pierce Armor Level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Pierce", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 } ], "affects": ["Infantry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_01.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_01.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_01.json @@ -22,7 +22,7 @@ "researchTime": 40, "tooltip": "All Infantry +1 Hack Armor Level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 } ], "affects": ["Infantry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_02.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_02.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_02.json @@ -19,7 +19,7 @@ "researchTime": 40, "tooltip": "All Infantry +1 Hack Armor Level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 } ], "affects": ["Infantry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_03.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_03.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_03.json @@ -12,7 +12,7 @@ "researchTime": 40, "tooltip": "All Infantry +1 Hack Armor Level.", "modifications": [ - { "value": "Armour/Hack", "add": 1 } + { "value": "Resistance/Armour/Damage/Hack", "add": 1 } ], "affects": ["Infantry"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_04.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_04.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantry_hack_04.json @@ -12,7 +12,7 @@ "researchTime": 40, "tooltip": "Champions +2 Hack Armor Levels, but also +10 Metal Cost.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, { "value": "Cost/Resources/metal", "add": 10 } ], "affects": ["Champion"], Index: binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_01.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_01.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_01.json @@ -16,7 +16,7 @@ "researchTime": 40, "tooltip": "Infantry Spearmen +2 Pierce Armor Levels.", "modifications": [ - { "value": "Armour/Pierce", "add": 2 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 } ], "affects": ["Infantry Spearman"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_02.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_02.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_02.json @@ -16,7 +16,7 @@ "researchTime": 40, "tooltip": "Infantry Spearmen +1 Pierce Armor Level.", "modifications": [ - { "value": "Armour/Pierce", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 } ], "affects": ["Infantry Spearman"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_03.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_03.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_03.json @@ -16,7 +16,7 @@ "researchTime": 40, "tooltip": "Infantry Spearmen +1 Pierce Armor Level.", "modifications": [ - { "value": "Armour/Pierce", "add": 1 } + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 } ], "affects": ["Infantry Spearman"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_04.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_04.json +++ binaries/data/mods/public/simulation/data/technologies/armor_infantryspearmen_pierce_04.json @@ -16,7 +16,7 @@ "researchTime": 40, "tooltip": "Champions +2 Pierce Armor Levels, but also +10 Metal Cost.", "modifications": [ - { "value": "Armour/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, { "value": "Cost/Resources/metal", "add": 10 } ], "affects": ["Champion"], Index: binaries/data/mods/public/simulation/data/technologies/armor_ship_hullsheathing.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_ship_hullsheathing.json +++ binaries/data/mods/public/simulation/data/technologies/armor_ship_hullsheathing.json @@ -9,9 +9,9 @@ "researchTime": 40, "tooltip": "Lead sheathing protects ship hulls. +2 levels to all ship armor types.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Pierce", "add": 2 }, - { "value": "Armour/Crush", "add": 2 } + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 2 } ], "affects": ["Ship"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_ship_hypozomata.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_ship_hypozomata.json +++ binaries/data/mods/public/simulation/data/technologies/armor_ship_hypozomata.json @@ -9,9 +9,9 @@ "researchTime": 40, "tooltip": "The hypozomata braces the ship's structure. +2 levels to all ship armor types.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Pierce", "add": 2 }, - { "value": "Armour/Crush", "add": 2 } + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 2 } ], "affects": ["Ship"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/armor_ship_reinforcedhull.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/armor_ship_reinforcedhull.json +++ binaries/data/mods/public/simulation/data/technologies/armor_ship_reinforcedhull.json @@ -8,9 +8,9 @@ "researchTime": 40, "tooltip": "Wooden reinforcement beams for hulls. +2 levels to all ship armor types.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Pierce", "add": 2 }, - { "value": "Armour/Crush", "add": 2 } + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 2 } ], "affects": ["Ship"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/buildtime_walls_rubble.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/buildtime_walls_rubble.json +++ binaries/data/mods/public/simulation/data/technologies/buildtime_walls_rubble.json @@ -10,7 +10,7 @@ "tooltip": "City walls -20% build time, but -1 crush armor level.", "modifications": [ { "value": "Cost/BuildTime", "multiply": 0.8 }, - { "value": "Armour/Crush", "add": -1 } + { "value": "Resistance/Armour/Damage/Crush", "add": -1 } ], "affects": ["StoneWall"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/elite_unit_bonus.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/elite_unit_bonus.json +++ binaries/data/mods/public/simulation/data/technologies/elite_unit_bonus.json @@ -4,9 +4,9 @@ "tooltip": "Units promoted to the elite class gain a lot of quality: 20% extra health, 1 extra armor level of every type, 20% extra loot, 20% extra attack for melee units, 4m extra range and better precision for ranged units, faster movement speeds and extra heal speed and range for healers.", "modifications": [ { "value": "Health/Max", "multiply": 1.2 }, - { "value": "Armour/Hack", "add": 1 }, - { "value": "Armour/Pierce", "add": 1 }, - { "value": "Armour/Crush", "add": 1 }, + { "value": "Resistance/Armour/Damage/Hack", "add": 1 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 1 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 1 }, { "value": "Attack/Capture/Capture", "add": 0.4 }, { "value": "ResourceGatherer/BaseSpeed", "multiply": 0.5 }, { "value": "UnitMotion/WalkSpeed", "add": 0.5, "affects": "Infantry" }, Index: binaries/data/mods/public/simulation/data/technologies/health_walls_geometric_masonry.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/health_walls_geometric_masonry.json +++ binaries/data/mods/public/simulation/data/technologies/health_walls_geometric_masonry.json @@ -10,7 +10,7 @@ "tooltip": "City walls +2 crush armor levels, but +10% build time.", "modifications": [ { "value": "Cost/BuildTime", "multiply": 1.1 }, - { "value": "Armour/Crush", "add": 2 } + { "value": "Resistance/Armour/Damage/Crush", "add": 2 } ], "affects": ["StoneWall"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/siege_armor.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/siege_armor.json +++ binaries/data/mods/public/simulation/data/technologies/siege_armor.json @@ -8,7 +8,7 @@ "researchTime": 40, "tooltip": "Siege Engines +2 hack armor.", "modifications": [ - { "value": "Armour/Hack", "add": 2 } + { "value": "Resistance/Armour/Damage/Hack", "add": 2 } ], "affects": ["Siege"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/tower_armour.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/tower_armour.json +++ binaries/data/mods/public/simulation/data/technologies/tower_armour.json @@ -8,9 +8,9 @@ "researchTime": 40, "tooltip": "Increases armor of defensive towers by 2 levels.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Pierce", "add": 2 }, - { "value": "Armour/Crush", "add": 2 } + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 }, + { "value": "Resistance/Armour/Damage/Crush", "add": 2 } ], "affects": ["DefenseTower"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/data/technologies/trade_convoys_armor.json =================================================================== --- binaries/data/mods/public/simulation/data/technologies/trade_convoys_armor.json +++ binaries/data/mods/public/simulation/data/technologies/trade_convoys_armor.json @@ -9,8 +9,8 @@ "researchTime": 40, "tooltip": "Traders +2 Hack and Pierce armor levels.", "modifications": [ - { "value": "Armour/Hack", "add": 2 }, - { "value": "Armour/Pierce", "add": 2 } + { "value": "Resistance/Armour/Damage/Hack", "add": 2 }, + { "value": "Resistance/Armour/Damage/Pierce", "add": 2 } ], "affects": ["Trader"], "soundComplete": "interface/alarm/alarm_upgradearmory.xml" Index: binaries/data/mods/public/simulation/helpers/Attacking.js =================================================================== --- binaries/data/mods/public/simulation/helpers/Attacking.js +++ binaries/data/mods/public/simulation/helpers/Attacking.js @@ -18,10 +18,7 @@ "" + "" + "" + - "" + - // Armour requires Foundation to not be a damage type. - "Foundation" + - "" + + "" + "" + "" + "" + @@ -88,13 +85,20 @@ return ret; }; -Attacking.prototype.GetTotalAttackEffects = function(effectData, effectType, cmpResistance) +Attacking.prototype.GetTotalAttackEffects = function(effectData, effectType, target) { + let cmpResistance = Engine.QueryInterface(target, IID_Resistance); let total = 0; - let armourStrengths = cmpResistance ? cmpResistance.GetArmourStrengths(effectType) : {}; - + let resistanceStrengths = {}; + if (cmpResistance) + { + if (effectType == "Capture") + resistanceStrengths = cmpResistance.GetResistanceStrengths(effectType); + else + resistanceStrengths = cmpResistance.GetResistanceStrengths(effectType)[effectType]; + } for (let type in effectData) - total += effectData[type] * Math.pow(0.9, armourStrengths[type] || 0); + total += effectData[type] * Math.pow(0.9, resistanceStrengths[type] || 0); return total; }; @@ -179,14 +183,15 @@ * @param {number} data.attacker - The entity id of the attacker. * @param {number} data.attackerOwner - The player id of the attacker. * @param {Vector2D} data.origin - The origin of the projectile hit. - * @param {number} data.radius - The radius of the splash damage. + * @param {number} data.minRange - The minimal radius of the area damage. + * @param {number} data.maxRange - The maximum radius of the area damage. * @param {string} data.shape - The shape of the radius. * @param {Vector3D} [data.direction] - The unit vector defining the direction. Needed for linear splash damage. * @param {boolean} data.friendlyFire - A flag indicating if allied entities also ought to be damaged. */ Attacking.prototype.CauseDamageOverArea = function(data) { - let nearEnts = this.EntitiesNearPoint(data.origin, data.radius, + let nearEnts = this.EntitiesNearPoint(data.origin, data.minRange, data.maxRange, this.GetPlayersToDamage(data.attackerOwner, data.friendlyFire)); let damageMultiplier = 1; @@ -195,7 +200,7 @@ { let entityPosition = Engine.QueryInterface(ent, IID_Position).GetPosition2D(); if (data.shape == 'Circular') // circular effect with quadratic falloff in every direction - damageMultiplier = 1 - data.origin.distanceToSquared(entityPosition) / (data.radius * data.radius); + damageMultiplier = 1 - data.origin.distanceToSquared(entityPosition) / (data.maxRange * data.maxRange); else if (data.shape == 'Linear') // linear effect with quadratic falloff in two directions (only used for certain missiles) { // Get position of entity relative to splash origin. @@ -207,12 +212,12 @@ let perpPos = relativePos.cross(direction); // The width of linear splash is one fifth of the normal splash radius. - let width = data.radius / 5; + let width = data.maxRange / 5; // Check that the unit is within the distance splash width of the line starting at the missile's // landing point which extends in the direction of the missile for length splash radius. if (parallelPos >= 0 && Math.abs(perpPos) < width) // If in radius, quadratic falloff in both directions - damageMultiplier = (1 - parallelPos * parallelPos / (data.radius * data.radius)) * + damageMultiplier = (1 - parallelPos * parallelPos / (data.maxRange * data.maxRange)) * (1 - perpPos * perpPos / (width * width)); else damageMultiplier = 0; @@ -265,17 +270,18 @@ /** * Gets entities near a give point for given players. * @param {Vector2D} origin - The point to check around. - * @param {number} radius - The radius around the point to check. + * @param {number} minRange - The minimum distance the entities may have from the point to check. + * @param {number} maxRange - The maximum distance the entities may have from the point to check. * @param {number[]} players - The players of which we need to check entities. * @return {number[]} The id's of the entities in range of the given point. */ -Attacking.prototype.EntitiesNearPoint = function(origin, radius, players) +Attacking.prototype.EntitiesNearPoint = function(origin, minRange, maxRange, players) { // If there is insufficient data return an empty array. - if (!origin || !radius || !players) + if (!origin || !maxRange || !players) return []; - return Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager).ExecuteQueryAroundPos(origin, 0, radius, players, IID_Resistance); + return Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager).ExecuteQueryAroundPos(origin, minRange, maxRange, players, IID_Resistance); }; /** Index: binaries/data/mods/public/simulation/templates/campaigns/army_mace_hero_alexander.xml =================================================================== --- binaries/data/mods/public/simulation/templates/campaigns/army_mace_hero_alexander.xml +++ binaries/data/mods/public/simulation/templates/campaigns/army_mace_hero_alexander.xml @@ -1,8 +1,12 @@ - - 20.0 - + + + + 20.0 + + + 7.0 Index: binaries/data/mods/public/simulation/templates/campaigns/army_spart_hero_leonidas.xml =================================================================== --- binaries/data/mods/public/simulation/templates/campaigns/army_spart_hero_leonidas.xml +++ binaries/data/mods/public/simulation/templates/campaigns/army_spart_hero_leonidas.xml @@ -1,8 +1,12 @@ - - 20.0 - + + + + 20.0 + + + 7.0 Index: binaries/data/mods/public/simulation/templates/gaia/fauna_walrus.xml =================================================================== --- binaries/data/mods/public/simulation/templates/gaia/fauna_walrus.xml +++ binaries/data/mods/public/simulation/templates/gaia/fauna_walrus.xml @@ -1,10 +1,14 @@ - - 3 - 4 - 5 - + + + + 3 + 4 + 5 + + + Index: binaries/data/mods/public/simulation/templates/other/bench.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/bench.xml +++ binaries/data/mods/public/simulation/templates/other/bench.xml @@ -1,10 +1,14 @@ - - 1 - 10 - 1 - + + + + 1 + 10 + 1 + + + Special Index: binaries/data/mods/public/simulation/templates/other/column_doric.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/column_doric.xml +++ binaries/data/mods/public/simulation/templates/other/column_doric.xml @@ -1,10 +1,14 @@ - - 2 - 5 - 2 - + + + + 2 + 5 + 2 + + + Fence Index: binaries/data/mods/public/simulation/templates/other/column_doric_fallen.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/column_doric_fallen.xml +++ binaries/data/mods/public/simulation/templates/other/column_doric_fallen.xml @@ -1,10 +1,14 @@ - - 2 - 5 - 2 - + + + + 2 + 5 + 2 + + + Special Index: binaries/data/mods/public/simulation/templates/other/column_doric_fallen_b.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/column_doric_fallen_b.xml +++ binaries/data/mods/public/simulation/templates/other/column_doric_fallen_b.xml @@ -1,10 +1,14 @@ - - 2 - 5 - 2 - + + + + 2 + 5 + 2 + + + Special Index: binaries/data/mods/public/simulation/templates/other/fence_long.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/fence_long.xml +++ binaries/data/mods/public/simulation/templates/other/fence_long.xml @@ -1,10 +1,14 @@ - - 1 - 10 - 1 - + + + + 1 + 10 + 1 + + + Special Index: binaries/data/mods/public/simulation/templates/other/fence_short.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/fence_short.xml +++ binaries/data/mods/public/simulation/templates/other/fence_short.xml @@ -1,10 +1,14 @@ - - 1 - 10 - 1 - + + + + 1 + 10 + 1 + + + Special Index: binaries/data/mods/public/simulation/templates/other/fence_stone.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/fence_stone.xml +++ binaries/data/mods/public/simulation/templates/other/fence_stone.xml @@ -1,10 +1,14 @@ - - 2 - 10 - 2 - + + + + 2 + 10 + 2 + + + Special Index: binaries/data/mods/public/simulation/templates/other/obelisk.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/obelisk.xml +++ binaries/data/mods/public/simulation/templates/other/obelisk.xml @@ -1,10 +1,14 @@ - - 2 - 10 - 2 - + + + + 2 + 10 + 2 + + + Special Index: binaries/data/mods/public/simulation/templates/other/sele_colonnade.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/sele_colonnade.xml +++ binaries/data/mods/public/simulation/templates/other/sele_colonnade.xml @@ -1,10 +1,14 @@ - - 2 - 5 - 2 - + + + + 2 + 5 + 2 + + + Fence Index: binaries/data/mods/public/simulation/templates/other/table_rectangle.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/table_rectangle.xml +++ binaries/data/mods/public/simulation/templates/other/table_rectangle.xml @@ -1,10 +1,14 @@ - - 1 - 10 - 1 - + + + + 1 + 10 + 1 + + + Special Index: binaries/data/mods/public/simulation/templates/other/table_square.xml =================================================================== --- binaries/data/mods/public/simulation/templates/other/table_square.xml +++ binaries/data/mods/public/simulation/templates/other/table_square.xml @@ -1,10 +1,14 @@ - - 1 - 10 - 1 - + + + + 1 + 10 + 1 + + + Special Index: binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml =================================================================== --- binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml +++ binaries/data/mods/public/simulation/templates/structures/cart_super_dock.xml @@ -1,8 +1,12 @@ - - 35 - + + + + 35 + + + structures/cart_super_dock_repair 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 @@ -1,15 +1,21 @@ - - -5.0 - -5.0 - -1.0 + + + + -5.0 + -5.0 + -1.0 + + - 1.0 - 5.0 - 1.0 + + 1.0 + 5.0 + 1.0 + - + Index: binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_gate.xml =================================================================== --- binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_gate.xml +++ binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_gate.xml @@ -1,15 +1,21 @@ - - 15.0 - 35.0 - 5.0 + + + + 15.0 + 35.0 + 5.0 + + - 4.0 - 7.0 - 3.0 + + 4.0 + 7.0 + 3.0 + - + own neutral enemy Index: binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_long.xml =================================================================== --- binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_long.xml +++ binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_long.xml @@ -1,15 +1,21 @@ - - 15.0 - 35.0 - 5.0 + + + + 15.0 + 35.0 + 5.0 + + - 4.0 - 7.0 - 3.0 + + 4.0 + 7.0 + 3.0 + - + own neutral enemy Index: binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_medium.xml =================================================================== --- binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_medium.xml +++ binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_medium.xml @@ -1,15 +1,21 @@ - - 15.0 - 35.0 - 5.0 + + + + 15.0 + 35.0 + 5.0 + + - 4.0 - 7.0 - 3.0 + + 4.0 + 7.0 + 3.0 + - + own neutral enemy Index: binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_short.xml =================================================================== --- binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_short.xml +++ binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_short.xml @@ -1,15 +1,21 @@ - - 15.0 - 35.0 - 5.0 + + + + 15.0 + 35.0 + 5.0 + + - 4.0 - 7.0 - 3.0 + + 4.0 + 7.0 + 3.0 + - + own neutral enemy Index: binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_tower.xml =================================================================== --- binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_tower.xml +++ binaries/data/mods/public/simulation/templates/structures/rome_siege_wall_tower.xml @@ -1,15 +1,21 @@ - - 15.0 - 35.0 - 5.0 + + + + 15.0 + 35.0 + 5.0 + + - 4.0 - 7.0 - 3.0 + + 4.0 + 7.0 + 3.0 + - + own neutral enemy Index: binaries/data/mods/public/simulation/templates/template_structure.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure.xml +++ binaries/data/mods/public/simulation/templates/template_structure.xml @@ -1,16 +1,22 @@ - - 1 - 1 - 1 + + + + 1 + 1 + 1 + + - 1 - 1 - 1 + + 1 + 1 + 1 + - + 0 0 Index: binaries/data/mods/public/simulation/templates/template_structure_civic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_civic.xml +++ binaries/data/mods/public/simulation/templates/template_structure_civic.xml @@ -1,15 +1,21 @@ - - 20 - 30 - 3 + + + + 20 + 30 + 3 + + - 1 - 5 - 1 + + 1 + 5 + 1 + - + ConquestCritical Civic Structure 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 @@ -6,15 +6,21 @@ 190 100 - - 5 - 5 + + + + 5 + 5 + + - 5 - 15 - 3 + + 5 + 15 + 3 + - + Index: binaries/data/mods/public/simulation/templates/template_structure_defensive.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_defensive.xml +++ binaries/data/mods/public/simulation/templates/template_structure_defensive.xml @@ -1,15 +1,21 @@ - - 25 - 30 - 3 + + + + 25 + 30 + 3 + + - 1.0 - 5.0 - 1.0 + + 1.0 + 5.0 + 1.0 + - + Defensive Structure Defensive Index: binaries/data/mods/public/simulation/templates/template_structure_defensive_palisade.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_defensive_palisade.xml +++ binaries/data/mods/public/simulation/templates/template_structure_defensive_palisade.xml @@ -1,10 +1,14 @@ - - 4 - 25 - 2 - + + + + 4 + 25 + 2 + + + land-shore Wall 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 @@ -1,15 +1,21 @@ - - 5 - 20 - 1 + + + + 5 + 20 + 1 + + - 1 - 5 - 1 + + 1 + 5 + 1 + - + 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 @@ -1,10 +1,14 @@ - - -5 - -5 - -2 - + + + + -5 + -5 + -2 + + + Index: binaries/data/mods/public/simulation/templates/template_structure_economic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_economic.xml +++ binaries/data/mods/public/simulation/templates/template_structure_economic.xml @@ -1,15 +1,21 @@ - - 5 - 20 - 1 + + + + 5 + 20 + 1 + + - 1 - 5 - 1 + + 1 + 5 + 1 + - + Economic Structure Economic Index: binaries/data/mods/public/simulation/templates/template_structure_military.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_military.xml +++ binaries/data/mods/public/simulation/templates/template_structure_military.xml @@ -1,15 +1,21 @@ - - 20 - 35 - 3 + + + + 20 + 35 + 3 + + - 1 - 5 - 1 + + 1 + 5 + 1 + - + Military Index: binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml +++ binaries/data/mods/public/simulation/templates/template_structure_military_embassy.xml @@ -1,13 +1,19 @@ - - 30 + + + + 30 + + - 3 - 10 - 3 + + 3 + 10 + 3 + - + Embassy 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 @@ -1,10 +1,14 @@ - - 5 - 5 - 3 - + + + + 5 + 5 + 3 + + + Index: binaries/data/mods/public/simulation/templates/template_structure_military_kennel.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_military_kennel.xml +++ binaries/data/mods/public/simulation/templates/template_structure_military_kennel.xml @@ -1,15 +1,21 @@ - - 10 - 40 - 5 + + + + 10 + 40 + 5 + + - 3 - 8 - 2 + + 3 + 8 + 2 + - + Kennel Index: binaries/data/mods/public/simulation/templates/template_structure_resource.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_resource.xml +++ binaries/data/mods/public/simulation/templates/template_structure_resource.xml @@ -1,15 +1,21 @@ - - 1 - 20 - 1 + + + + 1 + 20 + 1 + + - 1 - 10 - 1 + + 1 + 10 + 1 + - + Resource Index: binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml +++ binaries/data/mods/public/simulation/templates/template_structure_resource_field.xml @@ -1,10 +1,14 @@ - - 15 - 40 - 5 - + + + + 15 + 40 + 5 + + + Field Index: binaries/data/mods/public/simulation/templates/template_structure_special.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_special.xml +++ binaries/data/mods/public/simulation/templates/template_structure_special.xml @@ -1,15 +1,21 @@ - - 20 - 30 - 3 + + + + 20 + 30 + 3 + + - 3 - 10 - 3 + + 3 + 10 + 3 + - + Special Index: binaries/data/mods/public/simulation/templates/template_structure_wonder.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_structure_wonder.xml +++ binaries/data/mods/public/simulation/templates/template_structure_wonder.xml @@ -1,15 +1,21 @@ - - 15 - 25 - 3 + + + + 15 + 25 + 3 + + - 2 - 10 - 2 + + 2 + 10 + 2 + - + structures/wonder_pop_1 structures/wonder_pop_2 Index: binaries/data/mods/public/simulation/templates/template_unit.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit.xml +++ binaries/data/mods/public/simulation/templates/template_unit.xml @@ -1,11 +1,15 @@ - - 1 - 1 - 15 - + + + + 1 + 1 + 15 + + + 1 0 Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry.xml @@ -1,10 +1,14 @@ - - 3 - 1 - 15 - + + + + 3 + 1 + 15 + + + 2 Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee.xml @@ -1,9 +1,13 @@ - - 4 - 3 - + + + + 4 + 3 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_cavalry_melee_swordsman.xml @@ -1,9 +1,13 @@ - - 4 - 2 - + + + + 4 + 2 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry.xml @@ -1,10 +1,14 @@ - - 7 - 5 - 20 - + + + + 7 + 5 + 20 + + + 1 30 Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_spearman.xml @@ -1,9 +1,13 @@ - - 1 - 2 - + + + + 1 + 2 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_cavalry_swordsman.xml @@ -1,9 +1,13 @@ - - 1 - 2 - + + + + 1 + 2 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_elephant.xml @@ -1,10 +1,14 @@ - - 10 - 10 - 25 - + + + + 10 + 10 + 25 + + + 3 30 Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry.xml @@ -1,10 +1,14 @@ - - 5 - 5 - 20 - + + + + 5 + 5 + 20 + + + 20 Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_maceman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_maceman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_maceman.xml @@ -1,9 +1,13 @@ - - 1 - 1 - + + + + 1 + 1 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_pikeman.xml @@ -1,10 +1,14 @@ - - 8 - 8 - 20 - + + + + 8 + 8 + 20 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_spearman.xml @@ -1,9 +1,13 @@ - - 3 - 3 - + + + + 3 + 3 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_champion_infantry_swordsman.xml @@ -1,9 +1,13 @@ - - 3 - 3 - + + + + 3 + 3 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_dog.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_dog.xml +++ binaries/data/mods/public/simulation/templates/template_unit_dog.xml @@ -1,10 +1,14 @@ - - 1 - 2 - 1 - + + + + 1 + 2 + 1 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_defensive_elephant.xml @@ -1,10 +1,14 @@ - - 3 - 4 - 5 - + + + + 3 + 4 + 5 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish_elephant_infant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish_elephant_infant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna_hunt_skittish_elephant_infant.xml @@ -1,10 +1,14 @@ - - 1 - 3 - 1 - + + + + 1 + 3 + 1 + + + 1.5 Index: binaries/data/mods/public/simulation/templates/template_unit_hero.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero.xml @@ -1,10 +1,14 @@ - - 10.0 - 20.0 - 15.0 - + + + + 10.0 + 20.0 + 15.0 + + + 15 Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry.xml @@ -1,10 +1,14 @@ - - 10 - 8 - 25 - + + + + 10 + 8 + 25 + + + 50 Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_spearman.xml @@ -1,9 +1,13 @@ - - 1 - 2 - + + + + 1 + 2 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_cavalry_swordsman.xml @@ -1,9 +1,13 @@ - - 1 - 1 - + + + + 1 + 1 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_elephant_melee.xml @@ -1,10 +1,14 @@ - - 10 - 10 - 25 - + + + + 10 + 10 + 25 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_healer.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_healer.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_healer.xml @@ -1,10 +1,14 @@ - - 4.0 - 8.0 - 4.0 - + + + + 4.0 + 8.0 + 4.0 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry.xml @@ -1,10 +1,14 @@ - - 8 - 8 - 25 - + + + + 8 + 8 + 25 + + + 40 Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_pikeman.xml @@ -1,9 +1,13 @@ - - 9 - 9 - + + + + 9 + 9 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_spearman.xml @@ -1,9 +1,13 @@ - - 4 - 4 - + + + + 4 + 4 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_hero_infantry_swordsman.xml @@ -1,9 +1,13 @@ - - 4 - 4 - + + + + 4 + 4 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_infantry.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry.xml @@ -1,10 +1,14 @@ - - 2 - 4 - 15 - + + + + 2 + 4 + 15 + + + 2 Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_pikeman.xml @@ -1,9 +1,13 @@ - - 10 - 10 - + + + + 10 + 10 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_spearman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_spearman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_spearman.xml @@ -1,9 +1,13 @@ - - 5 - 5 - + + + + 5 + 5 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_swordsman.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_swordsman.xml +++ binaries/data/mods/public/simulation/templates/template_unit_infantry_melee_swordsman.xml @@ -1,9 +1,13 @@ - - 5 - 5 - + + + + 5 + 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 @@ -1,10 +1,14 @@ - - 1 - 1 - 10 - + + + + 1 + 1 + 10 + + + 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 @@ -1,9 +1,13 @@ - - 1 - 1 - + + + + 1 + 1 + + + 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 @@ -1,9 +1,13 @@ - - 1 - 1 - + + + + 1 + 1 + + + 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 @@ -1,9 +1,13 @@ - - 1 - 1 - + + + + 1 + 1 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_ship.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_ship.xml +++ binaries/data/mods/public/simulation/templates/template_unit_ship.xml @@ -1,10 +1,14 @@ - - 5 - 10 - 5 - + + + + 5 + 10 + 5 + + + 1 20 Index: binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml +++ binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml @@ -1,10 +1,14 @@ - - 2 - 5 - 2 - + + + + 2 + 5 + 2 + + + Index: binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml @@ -1,10 +1,14 @@ - - 2 - 5 - 2 - + + + + 2 + 5 + 2 + + + 0 Index: binaries/data/mods/public/simulation/templates/template_unit_siege.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_siege.xml +++ binaries/data/mods/public/simulation/templates/template_unit_siege.xml @@ -1,10 +1,14 @@ - - 1 - 50 - 5 - + + + + 1 + 50 + 5 + + + 500 10 Index: binaries/data/mods/public/simulation/templates/template_unit_support.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support.xml @@ -1,10 +1,14 @@ - - 1 - 1 - 1 - + + + + 1 + 1 + 1 + + + 8 Index: binaries/data/mods/public/simulation/templates/units/gaul_champion_fanatic.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/gaul_champion_fanatic.xml +++ binaries/data/mods/public/simulation/templates/units/gaul_champion_fanatic.xml @@ -1,9 +1,13 @@ - - -4 - -4 - + + + + -4 + -4 + + + 0.75 Index: binaries/data/mods/public/simulation/templates/units/kush_champion_infantry_apedemak.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/kush_champion_infantry_apedemak.xml +++ binaries/data/mods/public/simulation/templates/units/kush_champion_infantry_apedemak.xml @@ -1,9 +1,13 @@ - - -1 - -1 - + + + + -1 + -1 + + + Index: binaries/data/mods/public/simulation/templates/units/kush_infantry_clubman_b.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/kush_infantry_clubman_b.xml +++ binaries/data/mods/public/simulation/templates/units/kush_infantry_clubman_b.xml @@ -1,8 +1,12 @@ - - -1 - + + + + -1 + + + Index: binaries/data/mods/public/simulation/templates/units/mace_champion_infantry_e.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/mace_champion_infantry_e.xml +++ binaries/data/mods/public/simulation/templates/units/mace_champion_infantry_e.xml @@ -1,9 +1,13 @@ - - 1 - 1 - + + + + 1 + 1 + + + 1.1 Index: binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml +++ binaries/data/mods/public/simulation/templates/units/maur_elephant_archer_b.xml @@ -1,9 +1,13 @@ - - 1.0 - 2.0 - + + + + 1.0 + 2.0 + + + Index: binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml +++ binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml @@ -1,10 +1,14 @@ - - 5 - 8 - 10 - + + + + 5 + 8 + 10 + + + 2.0 Index: binaries/data/mods/public/simulation/templates/units/merc_thorakites.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/merc_thorakites.xml +++ binaries/data/mods/public/simulation/templates/units/merc_thorakites.xml @@ -1,9 +1,13 @@ - - 2 - 2 - + + + + 2 + 2 + + +