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
@@ -241,7 +241,7 @@
return g_DamageTypes.GetTypes().filter(
dmgType => dmg[dmgType]).map(
dmgType => sprintf(translate("%(damage)s %(damageType)s"), {
- "damage": dmg[dmgType].toFixed(1),
+ "damage": dmg[dmgType] == "Infinity" ? "∞" : dmg[dmgType].toFixed(1),
"damageType": unitFont(translateWithContext("damage type", g_DamageTypes.GetNames()[dmgType]))
})).join(commaFont(translate(", ")));
}
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
@@ -34,26 +34,34 @@
/**
* Take damage according to the entity's armor.
- * @param {Object} strengths - { "hack": number, "pierce": number, "crush": number } or something like that.
+ * @param {Object} attackStrengths - { "hack": number, "pierce": number, "crush": number } or something like that.
* @param {number} multiplier - the damage multiplier.
* Returns object of the form { "killed": false, "change": -12 }.
*/
-Armour.prototype.TakeDamage = function(strengths, multiplier = 1)
+Armour.prototype.TakeDamage = function(attackStrengths, multiplier = 1)
{
if (this.invulnerable)
return { "killed": false, "change": 0 };
// Adjust damage values based on armour; exponential armour: damage = attack * 0.9^armour
- var armourStrengths = this.GetArmourStrengths();
+ let armourStrengths = this.GetArmourStrengths();
// Total is sum of individual damages
// Don't bother rounding, since HP is no longer integral.
- var total = 0;
- for (let type in strengths)
- total += strengths[type] * multiplier * Math.pow(0.9, armourStrengths[type] || 0);
+ let cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
+ let total = 0;
+ for (let type in attackStrengths)
+ {
+ if (attackStrengths[type] == "Infinity")
+ {
+ // Special damage to instantly kill entities.
+ total = cmpHealth.GetHitpoints();
+ break;
+ }
+ total += attackStrengths[type] * multiplier * Math.pow(0.9, armourStrengths[type] || 0);
+ }
// Reduce health
- var cmpHealth = Engine.QueryInterface(this.entity, IID_Health);
return cmpHealth.Reduce(total);
};
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
@@ -456,7 +456,8 @@
}
let applyMods = damageType =>
- ApplyValueModificationsToEntity("Attack/" + type + splash + "/Damage/" + damageType, +(template.Damage[damageType] || 0), this.entity);
+ template.Damage[damageType] == "Infinity" ? "Infinity" :
+ ApplyValueModificationsToEntity("Attack/" + type + splash + "/Damage/" + damageType, +(template.Damage[damageType] || 0), this.entity);
if (type == "Capture")
return { "value": ApplyValueModificationsToEntity("Attack/Capture/Value", +(template.Value || 0), this.entity) };
Index: binaries/data/mods/public/simulation/helpers/DamageTypes.js
===================================================================
--- binaries/data/mods/public/simulation/helpers/DamageTypes.js
+++ binaries/data/mods/public/simulation/helpers/DamageTypes.js
@@ -1,7 +1,7 @@
DamageTypes.prototype.BuildSchema = function(helptext = "")
{
return "" + this.GetTypes().reduce((schema, type) =>
- schema + "",
+ schema + "Infinity",
"") + "";
};
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
@@ -14,7 +14,7 @@
- 100.0
+ Infinity
0.0
0.0
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
@@ -14,7 +14,7 @@
- 50.0
+ Infinity
0.0
0.0
Index: binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
+++ binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml
@@ -13,7 +13,7 @@
- 25.0
+ Infinity
0.0
0.0