Wrap damage types in a Damage element in XML templates to prepare for genericizing them.

Patch By: Freagarach
Reviewed By: Wraitii
Differential Revision: https://code.wildfiregames.com/D1950
This was SVN commit r22379.
This commit is contained in:
wraitii 2019-06-16 17:08:27 +00:00
parent 61db02790c
commit f4babd9b34
141 changed files with 689 additions and 468 deletions

View File

@ -187,10 +187,11 @@ function GetTemplateDataHelper(template, player, auraTemplates, resources, damag
ret.attack[type] = {
"minRange": getAttackStat("MinRange"),
"maxRange": getAttackStat("MaxRange"),
"elevationBonus": getAttackStat("ElevationBonus")
"elevationBonus": getAttackStat("ElevationBonus"),
"damage": {}
};
for (let damageType of damageTypes.GetTypes())
ret.attack[type][damageType] = getAttackStat(damageType);
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));
@ -202,10 +203,11 @@ function GetTemplateDataHelper(template, player, auraTemplates, resources, damag
ret.attack[type].splash = {
// true if undefined
"friendlyFire": template.Attack[type].Splash.FriendlyFire != "false",
"shape": template.Attack[type].Splash.Shape
"shape": template.Attack[type].Splash.Shape,
"damage": {}
};
for (let damageType of damageTypes.GetTypes())
ret.attack[type].splash[damageType] = getAttackStat("Splash/" + damageType);
ret.attack[type].splash.damage[damageType] = getAttackStat("Splash/Damage/" + damageType);
}
}
}
@ -213,10 +215,11 @@ function GetTemplateDataHelper(template, player, auraTemplates, resources, damag
if (template.DeathDamage)
{
ret.deathDamage = {
"friendlyFire": template.DeathDamage.FriendlyFire != "false"
"friendlyFire": template.DeathDamage.FriendlyFire != "false",
"damage": {}
};
for (let damageType of damageTypes.GetTypes())
ret.deathDamage[damageType] = getEntityValue("DeathDamage/" + damageType);
ret.deathDamage.damage[damageType] = getEntityValue("DeathDamage/Damage/" + damageType);
}
if (template.Auras && auraTemplates)
@ -226,10 +229,10 @@ function GetTemplateDataHelper(template, player, auraTemplates, resources, damag
{
let aura = auraTemplates[auraID];
ret.auras[auraID] = {
"name": aura.auraName,
"description": aura.auraDescription || null,
"radius": aura.radius || null
};
"name": aura.auraName,
"description": aura.auraDescription || null,
"radius": aura.radius || null
};
}
}

View File

@ -274,7 +274,7 @@ function getAttackTooltip(template)
"details":
type == "Capture" ?
template.attack.Capture.value :
damageTypesToText(template.attack[type]),
damageTypesToText(template.attack[type].damage),
"rate": rate
}));
continue;
@ -284,10 +284,9 @@ function getAttackTooltip(template)
let maxRange = Math.round(template.attack[type].maxRange);
let realRange = template.attack[type].elevationAdaptedRange;
let relativeRange = realRange ? Math.round(realRange - maxRange) : 0;
tooltips.push(sprintf(g_RangeTooltipString[relativeRange ? "relative" : "non-relative"][minRange ? "minRange" : "no-minRange"], {
"attackLabel": attackLabel,
"damageTypes": damageTypesToText(template.attack[type]),
"damageTypes": damageTypesToText(template.attack[type].damage),
"rangeLabel": headerFont(translate("Range:")),
"minRange": minRange,
"maxRange": maxRange,
@ -317,7 +316,7 @@ function getSplashDamageTooltip(template)
let splashDamageTooltip = sprintf(translate("%(label)s: %(value)s"), {
"label": headerFont(g_SplashDamageTypes[splash.shape]),
"value": damageTypesToText(splash)
"value": damageTypesToText(splash.damage)
});
if (g_AlwaysDisplayFriendlyFire || splash.friendlyFire)

View File

@ -87,6 +87,7 @@
{"nick": "Fire Giant", "name": "Malte Schwarzkopf"},
{"name": "Fork AD"},
{"nick": "fpre", "name": "Frederick Stallmeyer"},
{"nick": "Freagarach"},
{"nick": "freenity", "name": "Anton Galitch"},
{"nick": "Gallaecio", "name": "Adrián Chaves"},
{"nick": "gbish (aka Iny)", "name": "Grant Bishop"},

View File

@ -233,9 +233,9 @@ m.Template = m.Class({
return undefined;
return {
"Hack": +(this.get("Attack/" + type + "/Hack") || 0),
"Pierce": +(this.get("Attack/" + type + "/Pierce") || 0),
"Crush": +(this.get("Attack/" + type + "/Crush") || 0)
"Hack": +(this.get("Attack/" + type + "/Damage/Hack") || 0),
"Pierce": +(this.get("Attack/" + type + "/Damage/Pierce") || 0),
"Crush": +(this.get("Attack/" + type + "/Damage/Crush") || 0)
};
},

View File

@ -122,7 +122,9 @@ Attack.prototype.Schema =
"<optional>" +
"<element name='Melee'>" +
"<interleave>" +
DamageTypes.BuildSchema("damage strength") +
"<element name='Damage'>" +
DamageTypes.BuildSchema("damage strength") +
"</element>" +
"<element name='MaxRange' a:help='Maximum attack range (in metres)'><ref name='nonNegativeDecimal'/></element>" +
"<element name='PrepareTime' a:help='Time from the start of the attack command until the attack actually occurs (in milliseconds). This value relative to RepeatTime should closely match the \"event\" point in the actor&apos;s attack animation'>" +
"<data type='nonNegativeInteger'/>" +
@ -139,7 +141,9 @@ Attack.prototype.Schema =
"<optional>" +
"<element name='Ranged'>" +
"<interleave>" +
DamageTypes.BuildSchema("damage strength") +
"<element name='Damage'>" +
DamageTypes.BuildSchema("damage strength") +
"</element>" +
"<element name='MaxRange' a:help='Maximum attack range (in metres)'><ref name='nonNegativeDecimal'/></element>" +
"<element name='MinRange' a:help='Minimum attack range (in metres)'><ref name='nonNegativeDecimal'/></element>" +
"<optional>"+
@ -167,7 +171,9 @@ Attack.prototype.Schema =
"<element name='Shape' a:help='Shape of the splash damage, can be circular or linear'><text/></element>" +
"<element name='Range' a:help='Size of the area affected by the splash'><ref name='nonNegativeDecimal'/></element>" +
"<element name='FriendlyFire' a:help='Whether the splash damage can hurt non enemy units'><data type='boolean'/></element>" +
DamageTypes.BuildSchema("damage strength") +
"<element name='Damage'>" +
DamageTypes.BuildSchema("damage strength") +
"</element>" +
Attack.prototype.bonusesSchema +
"</interleave>" +
"</element>" +
@ -227,7 +233,9 @@ Attack.prototype.Schema =
"<optional>" +
"<element name='Slaughter' a:help='A special attack to kill domestic animals'>" +
"<interleave>" +
DamageTypes.BuildSchema("damage strength") +
"<element name='Damage'>" +
DamageTypes.BuildSchema("damage strength") +
"</element>" +
"<element name='MaxRange'><ref name='nonNegativeDecimal'/></element>" + // TODO: how do these work?
Attack.prototype.bonusesSchema +
Attack.prototype.preferredClassesSchema +
@ -448,10 +456,10 @@ Attack.prototype.GetAttackStrengths = function(type)
}
let applyMods = damageType =>
ApplyValueModificationsToEntity("Attack/" + type + splash + "/" + damageType, +(template[damageType] || 0), this.entity);
ApplyValueModificationsToEntity("Attack/" + type + splash + "/Damage/" + damageType, +(template.Damage[damageType] || 0), this.entity);
if (type == "Capture")
return { "value": applyMods("Value") };
return { "value": ApplyValueModificationsToEntity("Attack/Capture/Value", +(template.Value || 0), this.entity) };
let ret = {};
for (let damageType of DamageTypes.GetTypes())
@ -465,7 +473,8 @@ Attack.prototype.GetSplashDamage = function(type)
if (!this.template[type].Splash)
return false;
let splash = this.GetAttackStrengths(type + ".Splash");
let splash = {};
splash.damage = this.GetAttackStrengths(type + ".Splash");
splash.friendlyFire = this.template[type].Splash.FriendlyFire != "false";
splash.shape = this.template[type].Splash.Shape;
return splash;

View File

@ -31,7 +31,9 @@ DeathDamage.prototype.Schema =
"<element name='Shape' a:help='Shape of the splash damage, can be circular'><text/></element>" +
"<element name='Range' a:help='Size of the area affected by the splash'><ref name='nonNegativeDecimal'/></element>" +
"<element name='FriendlyFire' a:help='Whether the splash damage can hurt non enemy units'><data type='boolean'/></element>" +
DamageTypes.BuildSchema("damage strength") +
"<element name='Damage'>" +
DamageTypes.BuildSchema("damage strength") +
"</element>" +
DeathDamage.prototype.bonusesSchema;
DeathDamage.prototype.Init = function()
@ -44,7 +46,7 @@ DeathDamage.prototype.GetDeathDamageStrengths = function()
{
// Work out the damage values with technology effects
let applyMods = damageType =>
ApplyValueModificationsToEntity("DeathDamage/" + damageType, +(this.template[damageType] || 0), this.entity);
ApplyValueModificationsToEntity("DeathDamage/Damage/" + damageType, +(this.template.Damage[damageType] || 0), this.entity);
let ret = {};
for (let damageType of DamageTypes.GetTypes())

View File

@ -388,7 +388,12 @@ GuiInterface.prototype.GetEntityState = function(player, ent)
for (let type of types)
{
ret.attack[type] = cmpAttack.GetAttackStrengths(type);
ret.attack[type] = {};
if (type == "Capture")
ret.attack[type] = cmpAttack.GetAttackStrengths(type);
else
ret.attack[type].damage = cmpAttack.GetAttackStrengths(type);
ret.attack[type].splash = cmpAttack.GetSplashDamage(type);
let range = cmpAttack.GetRange(type);

View File

@ -36,7 +36,7 @@ TechnologyManager.prototype.Init = function()
// ]}
this.modifications = {};
this.modificationCache = {}; // Caches the values after technologies have been applied
// e.g. { "Attack/Melee/Hack" : {5: {"origValue": 8, "newValue": 10}, 7: {"origValue": 9, "newValue": 12}, ...}, ...}
// e.g. { "Attack/Melee/Damage/Hack" : {5: {"origValue": 8, "newValue": 10}, 7: {"origValue": 9, "newValue": 12}, ...}, ...}
// where 5 and 7 are entity id's
this.classCounts = {}; // stores the number of entities of each Class

View File

@ -43,10 +43,12 @@ function attackComponentTest(defenderClass, isEnemy, test_function)
});
let cmpAttack = ConstructComponent(attacker, "Attack", {
"Melee" : {
"Hack": 11,
"Pierce": 5,
"Crush": 0,
"Melee": {
"Damage": {
"Hack": 11,
"Pierce": 5,
"Crush": 0
},
"MinRange": 3,
"MaxRange": 5,
"PreferredClasses": {
@ -63,10 +65,12 @@ function attackComponentTest(defenderClass, isEnemy, test_function)
}
}
},
"Ranged" : {
"Hack": 0,
"Pierce": 10,
"Crush": 0,
"Ranged": {
"Damage": {
"Hack": 0,
"Pierce": 10,
"Crush": 0
},
"MinRange": 10,
"MaxRange": 80,
"PrepareTime": 300,
@ -82,13 +86,15 @@ function attackComponentTest(defenderClass, isEnemy, test_function)
"RestrictedClasses": {
"_string": "Elephant"
},
"Splash" : {
"Splash": {
"Shape": "Circular",
"Range": 10,
"FriendlyFire": "false",
"Hack": 0.0,
"Pierce": 15.0,
"Crush": 35.0,
"Damage": {
"Hack": 0.0,
"Pierce": 15.0,
"Crush": 35.0
},
"Bonuses": {
"BonusCav": {
"Classes": "Cavalry",
@ -97,7 +103,7 @@ function attackComponentTest(defenderClass, isEnemy, test_function)
}
}
},
"Capture" : {
"Capture": {
"Value": 8,
"MaxRange": 10,
},
@ -128,7 +134,7 @@ function attackComponentTest(defenderClass, isEnemy, test_function)
}
// Validate template getter functions
attackComponentTest(undefined, true ,(attacker, cmpAttack, defender) => {
attackComponentTest(undefined, true, (attacker, cmpAttack, defender) => {
TS_ASSERT_UNEVAL_EQUALS(cmpAttack.GetAttackTypes(), ["Melee", "Ranged", "Capture"]);
TS_ASSERT_UNEVAL_EQUALS(cmpAttack.GetAttackTypes([]), ["Melee", "Ranged", "Capture"]);
@ -151,7 +157,7 @@ attackComponentTest(undefined, true ,(attacker, cmpAttack, defender) => {
"Pierce": 10,
"Crush": 0
});
TS_ASSERT_UNEVAL_EQUALS(cmpAttack.GetAttackStrengths("Ranged.Splash"), {
"Hack": 0.0,
"Pierce": 15.0,
@ -169,9 +175,11 @@ attackComponentTest(undefined, true ,(attacker, cmpAttack, defender) => {
});
TS_ASSERT_UNEVAL_EQUALS(cmpAttack.GetSplashDamage("Ranged"), {
"Hack": 0,
"Pierce": 15,
"Crush": 35,
"damage": {
"Hack": 0,
"Pierce": 15,
"Crush": 35,
},
"friendlyFire": false,
"shape": "Circular"
});

View File

@ -12,7 +12,7 @@ let player = 1;
ApplyValueModificationsToEntity = function(value, stat, ent)
{
if (value == "DeathDamage/Pierce" && ent == deadEnt)
if (value == "DeathDamage/Damage/Pierce" && ent == deadEnt)
return stat + 200;
return stat;
};
@ -21,9 +21,11 @@ let template = {
"Shape": "Circular",
"Range": 10.7,
"FriendlyFire": "false",
"Hack": 0.0,
"Pierce": 15.0,
"Crush": 35.0
"Damage": {
"Hack": 0.0,
"Pierce": 15.0,
"Crush": 35.0
}
};
let modifiedDamage = {

View File

@ -3,12 +3,12 @@
"radius": 50,
"affects": ["Soldier"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.20 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.20 },
{ "value": "Attack/Melee/Crush", "multiply": 1.20 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.20 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.20 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.20 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.20 }
],
"auraName": "Religious Fervor",
"auraDescription": "+20% attack damage for soldiers.",

View File

@ -3,12 +3,12 @@
"radius": 60,
"affects": ["Soldier"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.1 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.1 },
{ "value": "Attack/Melee/Crush", "multiply": 1.1 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.1 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.1 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.1 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.1 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.1 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.1 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.1 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.1 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.1 }
],
"auraName": "Exhortative Presence",
"auraDescription": "Soldiers near Large Pyramids +10% attack.",

View File

@ -3,12 +3,12 @@
"affects": ["Soldier"],
"modifications": [
{ "value": "Promotion/RequiredXp", "multiply": 0.75 },
{ "value": "Attack/Melee/Hack", "multiply": 1.05 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.05 },
{ "value": "Attack/Melee/Crush", "multiply": 1.05 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.05 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.05 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.05 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.05 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.05 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.05 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.05 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.05 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.05 }
],
"auraName": "Ambush Slaughter",

View File

@ -4,12 +4,12 @@
"affects": ["Champion"],
"modifications": [
{ "value": "UnitMotion/WalkSpeed", "multiply": 1.1 },
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Capture/Value", "add": 2 }
],
"auraName": "Champion Army",

View File

@ -4,12 +4,12 @@
"affects": ["Mercenary"],
"affectedPlayers": ["Enemy"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 0.8 },
{ "value": "Attack/Melee/Pierce", "multiply": 0.8 },
{ "value": "Attack/Melee/Crush", "multiply": 0.8 },
{ "value": "Attack/Ranged/Hack", "multiply": 0.8 },
{ "value": "Attack/Ranged/Pierce", "multiply": 0.8 },
{ "value": "Attack/Ranged/Crush", "multiply": 0.8 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 0.8 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 0.8 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 0.8 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 0.8 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 0.8 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 0.8 }
],
"auraName": "Subduer of Mercenaries",
"auraDescription": "-20% attack for enemy mercenaries."

View File

@ -4,12 +4,12 @@
"affects": ["Soldier", "Siege"],
"affectedPlayers": ["Ally"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.20 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.20 },
{ "value": "Attack/Melee/Crush", "multiply": 1.20 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.20 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.20 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.20 },
{ "value": "Attack/Capture/Value", "add": 1 }
],
"auraName": "Tactician",

View File

@ -3,9 +3,9 @@
"radius": 60,
"affects": ["Melee Cavalry"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.3 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.3 },
{ "value": "Attack/Melee/Crush", "multiply": 1.3 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.3 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.3 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.3 }
],
"auraName": "Cavalry Commander",
"auraDescription": "+30% attack for cavalry melee soldiers.",

View File

@ -3,12 +3,12 @@
"radius": 60,
"affects": ["Soldier", "Siege"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.20 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.20 },
{ "value": "Attack/Melee/Crush", "multiply": 1.20 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.20 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.20 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.20 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.20 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.20 },
{ "value": "Attack/Capture/Value", "add": 1 }
],
"auraName": "Celtic Warlord",

View File

@ -3,12 +3,12 @@
"radius": 60,
"affects": ["Champion"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Capture/Value", "add": 2 }
],
"auraName": "Warrior Queen",

View File

@ -7,12 +7,12 @@
{ "value": "Looter/Resource/wood", "multiply": 1.5 },
{ "value": "Looter/Resource/stone", "multiply": 1.5 },
{ "value": "Looter/Resource/metal", "multiply": 1.5 },
{ "value": "Attack/Melee/Hack", "multiply": 1.1 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.1 },
{ "value": "Attack/Melee/Crush", "multiply": 1.1 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.1 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.1 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.1 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.1 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.1 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.1 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.1 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.1 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.1 }
],
"auraName": "Savior of Kush",
"auraDescription": "Own units +10% attack.\nNastasen acquired lots of bounty from the defeated invaders. Gain +50% loot from killing enemy units."

View File

@ -3,9 +3,9 @@
"radius": 60,
"affects": ["Infantry Pike"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Capture/Value", "multiply": 1.2 }
],
"auraName": "Taxiarchès",

View File

@ -6,12 +6,12 @@
{ "value": "Armour/Pierce", "add": 1 },
{ "value": "Armour/Hack", "add": 1 },
{ "value": "Armour/Crush", "add": 1 },
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/MaxRange", "multiply": 1.1 },
{ "value": "Vision/Range", "multiply": 1.1 }
],

View File

@ -3,12 +3,12 @@
"radius": 60,
"affects": ["Champion"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Capture/Value", "add": 2 }
],
"auraName": "Rise of Macedon",

View File

@ -2,12 +2,12 @@
"type": "global",
"affects": ["Soldier"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Health/Max", "multiply": 0.85 }
],
"auraName": "Pyrrhic Victory",

View File

@ -3,12 +3,12 @@
"radius": 45,
"affects": ["Cavalry"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Capture/Value", "add": 1 }
],
"auraName": "Forefront Leader",

View File

@ -3,12 +3,12 @@
"radius": 60,
"affects": ["Cavalry"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.15 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.15 },
{ "value": "Attack/Melee/Crush", "multiply": 1.15 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.15 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.15 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.15 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.15 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.15 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.15 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.15 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.15 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.15 }
],
"auraName": "Sword of Rome",
"auraDescription": "+15% attack for cavalry.",

View File

@ -4,12 +4,12 @@
"affects": ["Infantry"],
"affectedPlayers": ["Enemy"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 0.9 },
{ "value": "Attack/Melee/Pierce", "multiply": 0.9 },
{ "value": "Attack/Melee/Crush", "multiply": 0.9 },
{ "value": "Attack/Ranged/Hack", "multiply": 0.9 },
{ "value": "Attack/Ranged/Pierce", "multiply": 0.9 },
{ "value": "Attack/Ranged/Crush", "multiply": 0.9 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 0.9 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 0.9 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 0.9 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 0.9 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 0.9 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 0.9 }
],
"auraName": "Sword of Rome",
"auraDescription": "-10% attack for enemy infantry."

View File

@ -3,12 +3,12 @@
"radius": 30,
"affects": ["Soldier", "Siege"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Crush", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2 },
{ "value": "Attack/Ranged/Damage/Crush", "multiply": 1.2 },
{ "value": "Attack/Capture/Value", "add": 2 }
],
"auraName": "Triumph",

View File

@ -4,8 +4,8 @@
"affects": ["Elephant Champion"],
"modifications": [
{ "value": "UnitMotion/WalkSpeed", "multiply": 1.2 },
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 }
],
"auraName": "Zooiarchos",
"auraDescription": "+20% attack and movement speed for war elephants.",

View File

@ -3,7 +3,7 @@
"radius": 60,
"affects": ["Javelin Infantry Citizen"],
"modifications": [
{ "value": "Attack/Ranged/Pierce", "multiply": 1.25 },
{ "value": "Attack/Ranged/Damage/Pierce", "multiply": 1.25 },
{ "value": "Armour/Pierce", "add": 1 },
{ "value": "Armour/Hack", "add": 1 },
{ "value": "Armour/Crush", "add": 1 }

View File

@ -3,9 +3,9 @@
"radius": 30,
"affects": ["Spear"],
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.25 },
{ "value": "Attack/Melee/Pierce", "multiply": 1.25 },
{ "value": "Attack/Melee/Crush", "multiply": 1.25 },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.25 },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.25 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.25 },
{ "value": "Attack/Capture/Value", "add": 1 }
],
"auraName": "Last Stand",

View File

@ -14,8 +14,8 @@
{ "value": "Attack/Ranged/MaxRange", "add": 4, "affects": "Ranged" },
{ "value": "Vision/Range", "add": 4, "affects": "Ranged" },
{ "value": "Attack/Ranged/Spread", "multiply": 0.9, "affects": "Ranged" },
{ "value": "Attack/Melee/Hack", "multiply": 1.2, "affects": "Melee" },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2, "affects": "Melee" },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2, "affects": "Melee" },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2, "affects": "Melee" },
{ "value": "Vision/Range", "add": 3, "affects": "Healer" },
{ "value": "Heal/Range", "add": 3, "affects": "Healer" },
{ "value": "Heal/HP", "add": 5, "affects": "Healer" },

View File

@ -16,7 +16,7 @@
"icon": "spear_cavalry.png",
"researchTime": 40,
"tooltip": "Equip your melee cavalry with better weapons. Melee Cavalry +2 Hack Attack.",
"modifications": [{"value": "Attack/Melee/Hack", "add": 2.0}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "add": 2.0}],
"affects": ["Cavalry Melee"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -15,9 +15,9 @@
"icon": "horse_trainer.png",
"researchTime": 40,
"tooltip": "+20% melee cavalry attack.",
"modifications": [{"value": "Attack/Melee/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Crush", "multiply": 1.2}],
"affects": ["Cavalry Melee"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -16,9 +16,9 @@
"icon": "spear_cavalry.png",
"researchTime": 40,
"tooltip": "Equip your melee cavalry with better weapons. +20% melee cavalry attack.",
"modifications": [{"value": "Attack/Melee/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Crush", "multiply": 1.2}],
"affects": ["Cavalry Melee"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -15,9 +15,9 @@
"icon": "horse_rider.png",
"researchTime": 40,
"tooltip": "+20% ranged cavalry attack.",
"modifications": [{"value": "Attack/Ranged/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Ranged/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.2}],
"affects": ["Cavalry Ranged"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -16,9 +16,9 @@
"icon": "horse_rider.png",
"researchTime": 40,
"tooltip": "Equip your ranged cavalry with better weapons. +20% ranged cavalry attack.",
"modifications": [{"value": "Attack/Ranged/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Ranged/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.2}],
"affects": ["Cavalry Ranged"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -16,8 +16,8 @@
"researchTime": 40,
"tooltip": "Guard units have uncommon courage and valor in battle. Champions +2 attack.",
"modifications": [
{"value": "Attack/Melee/Hack", "add": 2.0, "affects": "Champion Melee"},
{"value": "Attack/Ranged/Pierce", "add": 2.0, "affects": "Champion Ranged"}
{"value": "Attack/Melee/Damage/Hack", "add": 2.0, "affects": "Champion Melee"},
{"value": "Attack/Ranged/Damage/Pierce", "add": 2.0, "affects": "Champion Ranged"}
],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -15,9 +15,9 @@
"icon": "sword.png",
"researchTime": 40,
"tooltip": "+20% melee infantry attack.",
"modifications": [{"value": "Attack/Melee/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Crush", "multiply": 1.2}],
"affects": ["Infantry Melee"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -8,9 +8,9 @@
"icon": "sword_cross.png",
"researchTime": 40,
"tooltip": "+20% melee infantry attack.",
"modifications": [{"value": "Attack/Melee/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Melee/Damage/Crush", "multiply": 1.2}],
"affects": ["Infantry Melee"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -14,9 +14,9 @@
"icon": "arrow.png",
"researchTime": 40,
"tooltip": "+20% ranged infantry attack.",
"modifications": [{"value": "Attack/Ranged/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Ranged/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.2}],
"affects": ["Infantry Ranged"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -15,9 +15,9 @@
"icon": "javelin_thong.png",
"researchTime": 40,
"tooltip": "+20% ranged infantry attack.",
"modifications": [{"value": "Attack/Ranged/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Ranged/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.2}],
"affects": ["Infantry Ranged"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -15,12 +15,12 @@
"researchTime": 40,
"tooltip": "Inspire your troops with higher pay. All land and naval army +25% attack.",
"modifications": [
{"value": "Attack/Melee/Hack", "multiply": 1.25},
{"value": "Attack/Melee/Pierce", "multiply": 1.25},
{"value": "Attack/Melee/Crush", "multiply": 1.25},
{"value": "Attack/Ranged/Hack", "multiply": 1.25},
{"value": "Attack/Ranged/Pierce", "multiply": 1.25},
{"value": "Attack/Ranged/Crush", "multiply": 1.25}
{"value": "Attack/Melee/Damage/Hack", "multiply": 1.25},
{"value": "Attack/Melee/Damage/Pierce", "multiply": 1.25},
{"value": "Attack/Melee/Damage/Crush", "multiply": 1.25},
{"value": "Attack/Ranged/Damage/Hack", "multiply": 1.25},
{"value": "Attack/Ranged/Damage/Pierce", "multiply": 1.25},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.25}
],
"affects": ["Melee", "Ranged"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"

View File

@ -12,8 +12,8 @@
"researchTime": 60,
"tooltip": "+20% Hack attack for all swordsmen and macemen.",
"modifications": [
{ "value": "Attack/Melee/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Crush", "multiply": 1.2 }
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2 },
{ "value": "Attack/Melee/Damage/Crush", "multiply": 1.2 }
],
"affects": ["Sword", "Maceman"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"

View File

@ -14,8 +14,8 @@
{ "value": "Attack/Ranged/MaxRange", "add": 4, "affects": "Ranged" },
{ "value": "Vision/Range", "add": 4, "affects": "Ranged" },
{ "value": "Attack/Ranged/Spread", "multiply": 0.9, "affects": "Ranged" },
{ "value": "Attack/Melee/Hack", "multiply": 1.2, "affects": "Melee" },
{ "value": "Attack/Melee/Pierce", "multiply": 1.2, "affects": "Melee" },
{ "value": "Attack/Melee/Damage/Hack", "multiply": 1.2, "affects": "Melee" },
{ "value": "Attack/Melee/Damage/Pierce", "multiply": 1.2, "affects": "Melee" },
{ "value": "Vision/Range", "add": 3, "affects": "Healer" },
{ "value": "Heal/Range", "add": 3, "affects": "Healer" },
{ "value": "Heal/HP", "add": 5, "affects": "Healer" },

View File

@ -12,7 +12,7 @@
"icon": "spear.png",
"researchTime": 40,
"tooltip": "Spearmen +2 hack attack.",
"modifications": [{"value": "Attack/Melee/Hack", "add": 2.0}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "add": 2.0}],
"affects": ["Infantry Spear"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -16,7 +16,7 @@
"icon": "sword.png",
"researchTime": 40,
"tooltip": "Melee infantry +1 hack attack.",
"modifications": [{"value": "Attack/Melee/Hack", "add": 1.0}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "add": 1.0}],
"affects": ["Infantry Melee"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -14,7 +14,7 @@
"icon": "spear.png",
"researchTime": 40,
"tooltip": "All Spear units +2 hack attack.",
"modifications": [{"value": "Attack/Melee/Hack", "add": 2.0}],
"modifications": [{"value": "Attack/Melee/Damage/Hack", "add": 2.0}],
"affects": ["Spear"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -14,9 +14,9 @@
"icon": "arrow.png",
"researchTime": 40,
"tooltip": "+20% ranged infantry attack.",
"modifications": [{"value": "Attack/Ranged/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Crush", "multiply": 1.2}],
"modifications": [{"value": "Attack/Ranged/Damage/Hack", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Pierce", "multiply": 1.2},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.2}],
"affects": ["Infantry Ranged"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -16,7 +16,7 @@
"researchTime": 30,
"tooltip": "All Javelin units +2 pierce attack and +4 range.",
"modifications": [
{"value": "Attack/Ranged/Pierce", "add": 2.0},
{"value": "Attack/Ranged/Damage/Pierce", "add": 2.0},
{"value": "Attack/Ranged/MaxRange", "add": 4.0},
{"value": "Vision/Range", "add": 4.0}],
"affects": ["Javelin"],

View File

@ -8,8 +8,8 @@
"researchTime": 40,
"tooltip": "All siege weapons +25% Crush damage.",
"modifications": [
{"value": "Attack/Melee/Crush", "multiply": 1.25},
{"value": "Attack/Ranged/Crush", "multiply": 1.25}],
{"value": "Attack/Melee/Damage/Crush", "multiply": 1.25},
{"value": "Attack/Ranged/Damage/Crush", "multiply": 1.25}],
"affects": ["Siege"],
"soundComplete": "interface/alarm/alarm_upgradearmory.xml"
}

View File

@ -1,8 +1,8 @@
DamageTypes.prototype.BuildSchema = function(helptext = "")
{
return this.GetTypes().reduce((schema, type) =>
return "<interleave>" + this.GetTypes().reduce((schema, type) =>
schema + "<element name='"+type+"' a:help='"+type+" "+helptext+"'><ref name='nonNegativeDecimal'/></element>",
"");
"") + "</interleave>";
};
DamageTypes = new DamageTypes();

View File

@ -2,9 +2,11 @@
<Entity parent="template_structure_civic_civil_centre">
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>25.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>25.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>50.0</MaxRange>
<MinRange>1.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_structure_civic_civil_centre">
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>25.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>25.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>50.0</MaxRange>
<MinRange>1.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_hunt_aggressive">
<Attack>
<Melee>
<Hack>20.0</Hack>
<Pierce>0.0</Pierce>
<Crush>20.0</Crush>
<Damage>
<Hack>20.0</Hack>
<Pierce>0.0</Pierce>
<Crush>20.0</Crush>
</Damage>
<MaxRange>6.0</MaxRange>
<RepeatTime>2000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_hunt_aggressive">
<Attack>
<Melee>
<Hack>12.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>12.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>1.0</MaxRange>
<RepeatTime>1000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild_aggressive">
<Attack>
<Melee>
<Hack>30.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>30.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>8.0</MaxRange>
<RepeatTime>2000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild_violent">
<Attack>
<Melee>
<Hack>20.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>20.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.0</MaxRange>
<RepeatTime>2000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_hunt_aggressive">
<Attack>
<Melee>
<Hack>20.0</Hack>
<Pierce>0.0</Pierce>
<Crush>20.0</Crush>
<Damage>
<Hack>20.0</Hack>
<Pierce>0.0</Pierce>
<Crush>20.0</Crush>
</Damage>
<MaxRange>6.0</MaxRange>
<RepeatTime>2000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild_violent">
<Attack>
<Melee>
<Hack>30.0</Hack>
<Pierce>20.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>30.0</Hack>
<Pierce>20.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.0</MaxRange>
<RepeatTime>2000</RepeatTime>
</Melee>

View File

@ -7,9 +7,11 @@
</Armour>
<Attack>
<Melee>
<Hack>15.0</Hack>
<Pierce>10.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>15.0</Hack>
<Pierce>10.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.0</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -12,9 +12,11 @@
</Armour>
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>25.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>25.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>60.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -17,9 +17,11 @@
</Armour>
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>12.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>12.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>72.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_structure_defensive">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>0</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>0</Pierce>
<Crush>0</Crush>
</Damage>
<PrepareTime>1200</PrepareTime>
<RepeatTime>2000</RepeatTime>
<Delay>0</Delay>

View File

@ -12,7 +12,9 @@
</Armour>
<Attack>
<Ranged>
<Pierce>16</Pierce>
<Damage>
<Pierce>16</Pierce>
</Damage>
<MaxRange>55</MaxRange>
<MinRange>13</MinRange>
<ElevationBonus>0</ElevationBonus>

View File

@ -7,7 +7,9 @@
</Armour>
<Attack>
<Ranged>
<Pierce>9</Pierce>
<Damage>
<Pierce>9</Pierce>
</Damage>
<MaxRange>70</MaxRange>
<MinRange>10</MinRange>
<ElevationBonus>9</ElevationBonus>

View File

@ -2,7 +2,9 @@
<Entity parent="template_structure_defensive_tower">
<Attack>
<Ranged>
<Pierce>12</Pierce>
<Damage>
<Pierce>12</Pierce>
</Damage>
<MaxRange>76</MaxRange>
<MinRange>10</MinRange>
<ElevationBonus>15</ElevationBonus>

View File

@ -2,9 +2,11 @@
<Entity parent="template_structure_defensive_wall">
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>8.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>8.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>72.0</MaxRange>
<MinRange>12.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -7,9 +7,11 @@
</Armour>
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>16.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>16.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>72.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -13,9 +13,11 @@
<RestrictedClasses datatype="tokens">Field Palisade SiegeWall StoneWall</RestrictedClasses>
</Capture>
<Slaughter>
<Hack>100.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>100.0</Hack>
<Pierce>0.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>2</MaxRange>
</Slaughter>
</Attack>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>13</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>13</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>3.5</MaxRange>
<PrepareTime>375</PrepareTime>
<RepeatTime>750</RepeatTime>

View File

@ -2,8 +2,10 @@
<Entity parent="template_unit_cavalry_melee">
<Attack>
<Melee>
<Hack>6.0</Hack>
<Pierce>5.0</Pierce>
<Damage>
<Hack>6.0</Hack>
<Pierce>5.0</Pierce>
</Damage>
<MaxRange>4.5</MaxRange>
<Bonuses>
<BonusCavMelee>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>6.5</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>6.5</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
</Damage>
<PreferredClasses datatype="tokens">Siege</PreferredClasses>
</Melee>
</Attack>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_cavalry">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>9.0</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>9.0</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>16.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>1000</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_cavalry_ranged">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>7.0</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>7.0</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>72.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>500</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_cavalry_ranged">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>18.0</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>18.0</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>28.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>750</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_champion_cavalry">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>14.0</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>14.0</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>76.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>500</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_champion_cavalry">
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>36.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>36.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>32.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>750</PrepareTime>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>12.0</Hack>
<Pierce>10.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>12.0</Hack>
<Pierce>10.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.5</MaxRange>
<Bonuses>
<BonusCavMelee>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>13.0</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>13.0</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>3.5</MaxRange>
<PrepareTime>375</PrepareTime>
<RepeatTime>750</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_champion_elephant">
<Attack replace="">
<Melee>
<Hack>20</Hack>
<Pierce>0</Pierce>
<Crush>150.0</Crush>
<Damage>
<Hack>20</Hack>
<Pierce>0</Pierce>
<Crush>150.0</Crush>
</Damage>
<MaxRange>8.0</MaxRange>
<PrepareTime>750</PrepareTime>
<RepeatTime>1500</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_champion_infantry">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>6.5</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>6.5</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>76</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>300</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_champion_infantry">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>26.0</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>26.0</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>28.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>500</PrepareTime>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>0</Hack>
<Pierce>0</Pierce>
<Crush>10.5</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>0</Pierce>
<Crush>10.5</Crush>
</Damage>
<MaxRange>3.5</MaxRange>
<PrepareTime>375</PrepareTime>
<RepeatTime>750</RepeatTime>

View File

@ -7,9 +7,11 @@
</Armour>
<Attack>
<Melee>
<Hack>2.0</Hack>
<Pierce>6.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>2.0</Hack>
<Pierce>6.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>7</MaxRange>
<PrepareTime>1000</PrepareTime>
<RepeatTime>2000</RepeatTime>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>6.0</Hack>
<Pierce>5.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>6.0</Hack>
<Pierce>5.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.5</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>900</RepeatTime>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>11.0</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>11.0</Hack>
<Pierce>0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>3.5</MaxRange>
<PrepareTime>375</PrepareTime>
<RepeatTime>750</RepeatTime>

View File

@ -7,9 +7,11 @@
</Armour>
<Attack>
<Melee>
<Hack>7</Hack>
<Pierce>2</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>7</Hack>
<Pierce>2</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>3</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_hunt">
<Attack>
<Melee>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>4</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -6,9 +6,11 @@
</Footprint>
<Attack>
<Melee>
<Hack>1</Hack>
<Pierce>5</Pierce>
<Crush>2</Crush>
<Damage>
<Hack>1</Hack>
<Pierce>5</Pierce>
<Crush>2</Crush>
</Damage>
<MaxRange>4</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -7,9 +7,11 @@
</Armour>
<Attack>
<Melee>
<Hack>25.0</Hack>
<Pierce>10.0</Pierce>
<Crush>20.0</Crush>
<Damage>
<Hack>25.0</Hack>
<Pierce>10.0</Pierce>
<Crush>20.0</Crush>
</Damage>
<MaxRange>6.0</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_hunt">
<Attack>
<Melee>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>4</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild">
<Attack>
<Melee>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>4</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -2,8 +2,10 @@
<Entity parent="template_unit_fauna_wild_aggressive_wolf">
<Attack>
<Melee>
<Hack>7</Hack>
<Pierce>2</Pierce>
<Damage>
<Hack>7</Hack>
<Pierce>2</Pierce>
</Damage>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild_aggressive">
<Attack>
<Melee>
<Hack>10.0</Hack>
<Pierce>10.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>10.0</Hack>
<Pierce>10.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.0</MaxRange>
<RepeatTime>1000</RepeatTime>
</Melee>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild_defensive">
<Attack>
<Melee>
<Hack>2.5</Hack>
<Pierce>5.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>2.5</Hack>
<Pierce>5.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>3.0</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_fauna_wild">
<Attack>
<Melee>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>1</Hack>
<Pierce>1</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>4</MaxRange>
<PrepareTime>500</PrepareTime>
<RepeatTime>1000</RepeatTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_hero_cavalry">
<Attack>
<Ranged>
<Hack>0</Hack>
<Pierce>35</Pierce>
<Crush>0</Crush>
<Damage>
<Hack>0</Hack>
<Pierce>35</Pierce>
<Crush>0</Crush>
</Damage>
<MaxRange>80.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>1200</PrepareTime>

View File

@ -2,9 +2,11 @@
<Entity parent="template_unit_hero_cavalry">
<Attack>
<Ranged>
<Hack>0.0</Hack>
<Pierce>60.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>0.0</Hack>
<Pierce>60.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>36.0</MaxRange>
<MinRange>0.0</MinRange>
<PrepareTime>750</PrepareTime>

View File

@ -6,9 +6,11 @@
</Armour>
<Attack>
<Melee>
<Hack>24.0</Hack>
<Pierce>20.0</Pierce>
<Crush>0.0</Crush>
<Damage>
<Hack>24.0</Hack>
<Pierce>20.0</Pierce>
<Crush>0.0</Crush>
</Damage>
<MaxRange>4.5</MaxRange>
<Bonuses>
<BonusCavMelee>

Some files were not shown because too many files have changed in this diff Show More