The limitations of current armor system and damage types

Users who are viewing this thread

When it comes to armor, things are super simple right now. We have a general armor type that applies to every single piece of equipment and the only difference between peasant clothing and lord plate is the magnitude of the armor number.

On the weapon side, we have 3 types of damage, and different formulas that apply to them. However, despite this distinction, there appears to be something missing that makes things dont feel quite right with the current system.

Is the cut damage of a curved sword the same as the cut damage of a two handed heavy axe?
Is the pierce damage of an arrow the same as the pierce damage of a bolt? Of a spear? What about the pierce damage of a polehammer?
Is the blunt damage of a looter rock the same as the blunt damage of a warhammer?

Currently, this difference is handled only like a magnitude, like Cut 40 of a sword and Cut 60 of an axe, or Pierce 60 of a spear.

On the armor side, we can visually see that we have different kinds of armor in game, on a broad level we can identify Clothing > Leather/Padded armor > Chainmail > Scale. We can also see that generally, higher levels armor has several layers, like a coat of scales over a chainmail over a gambeson and things like that.

What if we took those amor layers and applied 'protection level' to the armor, as a way of representing the amount of layers the armor offers to the wielder. We can do the same for the weapons and assign them a 'armor penetration' value to represent how effective they are at penetrating multiple layers of armor. We can then compare the 'protection level' of the armor vs the 'armor piercing' of the weapon and determine if the weapons is enough to injure the wielder of the armor. This could be a second stat given to armor and weapons, along with the existing armor and weapon rating magnitudes. That way, we first check if the weapon is actually capable of penetrating the armor. If it is capable, then we can do the damage calculations of just armor rating vs damage. If its not capable, then a heavy penalty could be applied to the damage to emulate the weapon not being enough to bypass the armor.

The goal of this is, first, to make it so that armor actually matter, so that lowly equiped troops have an actual hard time dealing with properly armored soldiers and that heavy armor offers real protection against common ranged projectiles, and secondly, to make it so that all weapon types have different roles to fulfill on the battlefield, so that bringing soldiers with axes or soldiers with swords, or bringing archers as opposed to bringing crossbowmen is not based on faction flavor alone , but have actual strenghts and weaknesses that need to be considered when deciding which troops to bring vs an enemy army with a given troop composition.

We could have lower quality weapons or even whole weapon types have lower 'armor penetration' to make them effective at dealing with certain tiers of armors, but ineffective when dealing with higher tiers of armors. That way we could have things like swords/axes/spears having different roles,

For example, we could have swords having reach and speed advantage on their move sets, but with lower 'armor penetration' capabilities, lets say basic swords with 'armor penetration' value of 1, capable of dealing with cloth, but having diminishing damage when dealing with armors with higher 'protection level', like gambeson.

Compared to an axe of the same tier, we could have the axe have a slightly higher 'armor penetration' value of 2 to emulate the higher weight of the axe giving it more 'armor penetration', but start having diminishing returns vs armors with 'protection level' 3 or above.

Things like spears/polearms/maces could have higher 'armor penetration' values since lower tiers, so that they are effective at dealing with higher tier armor from the start. each one dealing their own kind of damage.

This 'armor penetration' values could increase based on quality level of the weapon, so higher quality swords could have higher 'armor penetration' than basic swords, or it could even be based on weapon skill level, to simulate that highly trained troops know where to strike in order to bypass armor. Same could apply to all weapon types.

This change could also help differentiate and at the same type balance archers/crossbowsmen by giving their projectiles different 'armor penetration' values, so that they are more or less effective vs different tiers of armor. We could make, for example, archers very effective vs armors tier 1-3, and only crossbowmen projectiles effective when dealing with tier 4 armor, therefore giving them an actual role that is not "slower archer".

Hell, we could even make all kinds of projectiles possible like this, like flesh tearing arrows that deal massive damage, but with very little 'armor piercing' that annihilate troops with low tier armor but dont really do much to higher tier ones, or armor piercing projectiles that dont deal too much damage, but can hurt high tier armored troops.

We could also make melee piercing weapons like spears and polehammers the only effective way of dealing with troops with high tier armor by giving their weapons higher 'armor penetration', making the spearmans/polearms troops have an important role in the infantry mass, justifying their awkward move sets/lack of shields as a tradeoff for being able to deal with highly armored targets.

While still on the infantry topic, we could make 2 handed/polearm troops more viable simply by giving them armors with higher 'protection levels' so that now they dont get instantly annihilated by archers. Give armors with higher 'protection levels' bigger mobility penalties to compensate for their added defense and suddenly we have actual slow melee tanks that can afford to not carry a shield and still survive archers fire and smaller weapons, but can still be countered by spears/thrusting swords/maces. This makes it so that now the sword and shield troop can afford to carry armor with lower 'protection levels' that is lighter and faster since they have a shield to compensate. With this, the shield is no longer the only way to make it to the front lines, its just one of the equally viable alternatives, and at the same time we create more interesting interactions in melee combat now that we have slow armored troops and nimble shielded troops in the front lines.

Im pretty sure this has a lot of downsides and implications I have not considered yet, but it its clear to me that the current system is way too simple for the kind of game Bannerlord is, and that current 'balance' issues some people are noticing cannot be solved simply by tweaking some armor ratings and damage numbers here and there.

What do you guys think?
 
Last edited:
Concept of "protection level" seems to be similar to "armor soak factor" from Warband:
I haven't seen damage formulas for Bannerlord, but they are most likely based on previous games.

Probably damage equations can't be to complicated so they can cover 2000 warriors swinging happily their weapons without burning player CPU.

yes there is probably a limit to the complexity due to how many calculations have to go on in large battles. but basically now we have inflated cut damage to keep those weapons performant, so except for low-tier or low damage weapons the whole system is kind of superfluous. It was flawed in warband as well but soak made it less obvious.

edit: thinking about it more a system like the OP could actually make damage less complicated. you could get rid of the blunt/cut/pierce system and just abstract it away as variable "armor penetration" in the same way armor is abstracted.
 
Last edited:
Parameterizing the armor reduction factor to be based on a new penetration factor property for weapons instead of having a constant for cut/pierce/blunt wouldn't really increase the complexity of the calculations in any significant way.

Armor calculations for weapon types are calculated like this in Bannerlord:
C#:
        public static float ComputeRawDamageNew(DamageTypes damageType, float magnitude, float armorEffectiveness, float absorbedDamageRatio)
        {
            float num = 0f;
            float bluntDamageFactorByDamageType = CombatStatCalculator.GetBluntDamageFactorByDamageType(damageType);
            float num2 = magnitude * bluntDamageFactorByDamageType;
            float num3 = 100f / (100f + armorEffectiveness);
            num += num2 * num3;
            if (damageType != DamageTypes.Blunt)
            {
                float num4;
                if (damageType != DamageTypes.Cut)
                {
                    if (damageType != DamageTypes.Pierce)
                    {
                        return 0f;
                    }
                    num4 = Math.Max(0f, magnitude * num3 - armorEffectiveness * 0.33f);
                }
                else
                {
                    num4 = Math.Max(0f, magnitude * num3 - armorEffectiveness * 0.5f);
                }
                num += num4 * (1f - bluntDamageFactorByDamageType);
            }
            return num * absorbedDamageRatio;
        }

        // Token: 0x06000167 RID: 359 RVA: 0x0000696C File Offset: 0x00004B6C
        private static float GetBluntDamageFactorByDamageType(DamageTypes damageType)
        {
            float result = 0f;
            switch (damageType)
            {
            case DamageTypes.Cut:
                result = 0.1f;
                break;
            case DamageTypes.Pierce:
                result = 0.25f;
                break;
            case DamageTypes.Blunt:
                result = 1f;
                break;
            }
            return result;
        }
 
Back
Top Bottom