Armour. Why it doesn't work and how to make it work

Users who are viewing this thread


the only difference between looters and every other troop is their weapons
5 cataphracts charging looters and lose 2, no point in upgrading beyond sheilds


Sergeant at Arms
What is really sad is that this formula give absurd results while being needlessly complex.
It could be made much better by being simpler and more intuitive.

Like just having a part of armour acting as direct reduction and then applying a percentage one. Could make the three types of damage working in very different ways, while still being simple and logical.

For example :
Cut having the highest damage but being the most affected by armour.
Blunt does little damage, but is not much affected by armour (due to it already being a rather inefficient form of damage that spreads the energy on a large surface, so spreading it around even more is harder).
Piercing does average damage, is the most affected by threshold (piercing weapons tend to have less mass and kinetic energy, and to damage something with piercing you need to breach the outer casing first), but once the armor is pierced it's the less affected by armor.

That would give this code :

public override float ComputeRawDamage(DamageTypes damageType, float magnitude, float armorEffectiveness, float absorbedDamageRatio) { float soak = SoakAmountByDamageType(damageType, armorEffectiveness); float reductionRatio = ReductionRatioByDamageType(damageType, armorEffectiveness); return (magnitude - soak) * reductionRatio; } private float SoakAmountByDamageType(DamageTypes damageType, float armor) { float result = 0f; switch (damageType) { case DamageTypes.Blunt: result = 0.1f * armor; break; case DamageTypes.Cut: result = 0.2f * armor; break; case DamageTypes.Pierce: result = 0.3f * armor; break; } return result; } private float ReductionRatioByDamageType(DamageTypes damageType, float armor) { float armorMultiplier = 1f; switch (damageType) { case DamageTypes.Blunt: armorMultiplier = 1.5f; break; case DamageTypes.Cut: armorMultiplier = 2f; break; case DamageTypes.Pierce: armorMultiplier = 1f; break; } return 100 / (100 + (armorMultiplier * armor)); }

I dare to claim it's easier to read, simpler, more logical and giving more variety than the results we get in the game actually.


2022 and armor is still wet tissue paper. Hope they fix armor... Within the next two centuries. Maybe?
Forwarded to the developers and designers. Thanks for the post!
Top Bottom