Author Topic: Dev Log #7: New Armor Mechanics  (Read 2147 times)


  • Administrator
  • Godman
  • *****
  • Posts: 2354
  • Karma: +500/-12
    • View Profile
Dev Log #7: New Armor Mechanics
« on: November 17, 2023, 02:11:47 pm »
Hi guys,

It's that time of the year again. All the stars and planets are in the right position and it's time for an Infusion dev log.

We already showed you the extent to which we upgraded the visual aspects of the engine, but the mechanical changes that I've done so far and am yet to do are just as extensive, and perhaps more radical. I'm going to talk about them one by one, in separate dev logs, as I continue to test, tweak, and refine them.

Our immediate goal with the engine and the game is to (re-)implement a number of items and mechanics, get a few areas together, and get the game in a state where it can be played for real, so to speak. Mainly so I can better asses how all these changes work in practice, but also so we can produce a short demo video and show you the game in action for the first time.

* * * * * * * * * *

So, anyway, let's get to the changes to the armor mechanics and damage resistance in general.

In Underrail, the damage resistance was divided into percentual resistance and flat threshold. Incoming damage would be reduced either percentually or by flat amount, whichever would reduce more damage in any given case. This caused a lot of balancing problems. Threshold was generally either useless or overpowered (especially when stacked in early game), while resistance was hard to progress with armor quality, as its percentual nature made it already scale innately.

All these problems really came to forefront when I was implementing different types of shotgun shells in Expedition. Balancing usefulness of different shells in this system was just impossible and it took a lot of tweaking to make it even remotely decent with liberal use of seemingly arbitrary threshold and resistance ignore factors. At one point I was tempted to just implement a completely different interaction for the shells specifically, but decided against it for the sake of consistency.

Another problem with the old model was that all resistances stacked globally. Meaning: resistances from boots and helmets were equally effective as body armor and they all aggregated when it came to interacting with incoming damage. This made me really hesitant to put a lot of resistances on helmets and boots because, on one hand, I didn't want them to make the high resistance armors completely broken by just maxing (or near maxing) out all the resistances and, on the other hand, I didn't want these items, because of their high resistances, becoming mandatory for characters that use ligher armor in the body slot.

There are other problems too, but these are the main issues, I think.

So how does the Infusion's new system differ from the old one?

In Infusion we're going to have a lot more gear slots, mainly from separating body armor and helmets into multiple component slots. This will provide the player with a lot more damage resistance sources. But unlike in the old system, these resistances will not stack. Instead, they will all interact with any given attack separately. So whenever you're struck somewhere on the body, the game will check what armor covers that spot, and it will interact with that armor piece. If there are multiple pieces, it will go through each of them separately, from the outer toward the inner. E.g. you might have some minor resistances on the overcoat that will interact with an incoming bullet or a stab before your torso armor.

For now, I have no intention to allow the player to choose which part of the target's body they're attacking (Fallout style), but there will be different special attacks / stances that will influence this (e.g. decapitate). Also, elevation and size of attacker and the target will also play a role here. So, for example, attacking someone from an elevated position will give you a better chance to hit them in the head and worse (if any) chance to hit their feet.

Different types of creatures will have different body part arrangements. For humans it is as follows: Head (5%), Torso (55%), Arms (10%), Legs (including the pelvis) (25%), Feet (5%). The number in brackets is the current working chance to hit distribution for a generic ranged attack. These numbers will vary for different attacks and situations, but it should give you some general idea what areas are going to be most important to cover with armor in most situations.

(enlarge image 1) (enlarge image 2) (enlarge image 3)

Depending on the armor design itself, it may end up covering one or more body parts. In the example of an armored rig/vest, which is the only crafted armor at the moment that's implemented, in addition to covering the torso, it can also provide some additional protection to arms and legs.

(enlarge image 1) (enlarge image 2) (enlarge image 3)

Let's go through the examples above. The armor on the left only provides cover to 80% of the torso part. Like the icon indicates, it does not cover the stomach all the way down. We'll talk about the intricacies of coverage later.

The armor in the middle, however, also sports sleeves and a groin guard. The groin guard covers the rest of the belly in the torso part and also covers the groin area, of course, which falls under the legs part. The sleeves cover the shoulders area of the arms part.

The armor on the right has sleeves, but no groin guard.

Regarding coverage, the way we're going to determine at which point an attack lands in a given body part, and so if it interacts with an armor segment that provides partial coverage, is still under consideration. The tooltip here provides just the coverage percentage, but the icon itself is trying to further illustrate what area of the part is covered. Having 20% coverage in arms at the top (shoulders) is not the same as at the bottom (hands) as both of these can be layered over. It doesn't make much sense that, if you are wearing gloves and shoulder pads, a bullet attack can go through both of these.

The way I treat the coverage number, which is esentially a floating point pair (e.g. 0.8-1.0 for shoulders, 0.0-0.2 for hands), is that 0 is the lowest point of the body part and 1 is the top point of the body part and 0.5 is the middle.

* * * * * * * * * *

Now, if you are an RPG mechanics connoisseur, as you surely must be if you made it this far into the dev log, you might be looking at that armor at the left and thinking how fun it's going to be to get hit by stray bullet to the torso right below your endgame crafting-maxxed armored vest and instakilled 20 hours into your ironman DOMINATING run. And I share your enthusiasm for suffering. However, as this kind of experience might not be pleasurable for most players, there are some additional considerations that I'm going to have to give to this.

One of the mechanics that are in place right now is that there is such a thing as grazing shots, which are basically hits that deal about half as much damage. They occur when the attack roll is within the graze part of the hit chance, the size of which is determined by attack-to-defense ratio. I don't want to get into too much details regarding this right now, as the topic is extensive and this dev log is already too long (it warrants its own). What is relevant for the example above is that the farther you are into the graze area of the roll, the farther the hit lands from the center of the body part.

So, basically, the lethal bullet hit described above would deal half the damage, giving you a better chance to survive. Whether this will be enough to make these situations acceptable, remains to be seen through testing. Just know that I am aware of this potential problem with the system.

So what about other body parts? Are we going to have to cover every bit of our body with heavy armor to avoid the similar scenario? What about getting hit with a plasma gun critical to the pinky toe while wearing tabis? Well, first of all, the chance to get hit in the feet is quite low, outside insects biting you or stepping on caltrops or acid.

Additionally, each body part has its innate damage taken modifier and they are currently set to these values: head - 150%, torso - 100%, arms - 40%, legs - 60%, feet - 25%. So the armor value of your footwear is not nearly as important as your body armor, while if you don't wear a helmet to a gun fight, you're taking quite a risk.

All these numbers are subject to change, of course.

* * * * * * * * * *

The last point I want to cover are the armor values themselves. As you might have noticed, the old format of percentage resistance / flat threshold is gone. What we have now is resistance / soak / material type.

Firstly, ignore these particular numbers, they are just random placeholders. I haven't gotten to writing real component specs yet. That said, let's go through all these values.

Resistance is the first line of defense, so to speak. It is checked against the incoming damage in order to determine what percentage of it will go through the armor. The formula goes something like this (there's also armor penetration, armor bypass and other mods, but for simplicity's sake, we're going to ignore those for now):

damage_done = incoming_damage * (incoming_damage / (incoming_damage + resistance))2

So if the resistance and damage values are the same, the incoming damage is multiplied by 0.25. That is, quarter of it goes through. If the incoming damage is twice the resistance, it's multiplied by 0.43, and for the other way around it's 0.1.

This formula is subject to change, of course, pending testing. But the general idea is that the ratio between damage and resistance is what determines the percentage reduction instead of it being fixed on the item. This makes the resistance much easier to scale/progress.

After the formula above is applied, soak value is deducted:

final_damage_done = damage_done - soak

So, unlike threshold, soak will now be an important stat throughout the playthrough as it is always applied at the very end, reducing already percentually reduced value.

The final property of damage resistance is the material type. I haven't started implementing this yet, but the idea is that this will modify the inputs to the formulas above, and maybe even formula itself, depending on the type of the attack and the type of material. For example, kevlar is going to be really good against bullet attacks, but not that good against other attacks.

* * * * * * * * * *

That's it for now. There are a lot more mechanical changes that are either implemented or are being implemented, so expect more dev logs in the near future. But then again, I always say that and then skip nearly a whole year without posting.

Also, follow me on Twitter, where I post smaller tidbits occasionally.


« Last Edit: November 17, 2023, 02:24:31 pm by Styg »


  • Scavenger
  • ***
  • Posts: 140
  • Karma: +13/-32
    • View Profile
Re: Dev Log #7: New Armor Mechanics
« Reply #1 on: November 17, 2023, 03:21:14 pm »
I will be frank here. I am not fan of the proposal. And I will try to elaborate why (and something you lightly touched on).

One of the big main features, pride of Underrail is its tactical combat. RNG can be kept low but still happens. If you know your enemy, know your hit chance and your damage you can generally predict an outcome of your attack. Bullet will 95% hit, and deal about 50% of its extpected damage range due to enemy heavy armour. Same can be said for defending attacks. You craft a full suite of tungsten metal armour and you know that unless burrower crits they will not get a spine through it.

Here, all of this goes out of the window. You will not be able to rely on your armour. You will not be able to rely on your weapon. Lets say you know you generally hit this enemy for about 50 damage. You have 90% to hit and enough AP for 2 shots and enemy has 40 health. In Underrail you take the chance. Here you also need to calculate chance to hit apendages. As you do less damage when you hit those.
Or on the contrary, you meet heavily armored enemy that should pose a challange. In normal underrail it would be a tough boss fight. Here, stray bullet under helmet can end him in one shot. Would it feel good? Maybe? Would I personally feel cheated by the game? 100%

And I know a game that uses similar system of armour coverage and randomized hits. It always felt awfull there to see two titans in fully decked metalic armour fight dealing scratches, slowly whittling each other down until one got unlucky and all his armour layers got bypassed by bad roll. And he died.

Solution? Hard one. Effectivness instead of coverage? Would feel more gimicky but reliable.
« Last Edit: November 17, 2023, 09:27:48 pm by Valor »


  • Oculite
  • Tchortist
  • **
  • Posts: 483
  • Karma: +80/-29
    • View Profile
Re: Dev Log #7: New Armor Mechanics
« Reply #2 on: November 18, 2023, 12:49:37 am »
Agree w/ everything Valor said.

Also - is riot shield (not energy shield) mechanic currently being work into the new armor mechanics? If yes, can you share a bit of info regarding riot shield?


  • Probably not a Spambot
  • *
  • Posts: 28
  • Karma: +5/-5
    • View Profile
Re: Dev Log #7: New Armor Mechanics
« Reply #3 on: November 18, 2023, 10:35:01 am »
Loving the new mechanics way more than I thought, and with Heavy Duty it's getting me more hyped for Infusion!

No more illogical armor with mechanical resistances with 95% hard caps. No more useless DT against micro damage. No more tanking 12.7 tungsten carbide to the face. Now all snipers are an actual threat against heavy armor. Now choosing an armor is an even more important tactical choice. Now knowing your enemies resistance is necessary to deal with them effectively.

Run down on first impressions from what I've read.

New formula is great. In short, if I am not mistake, it combines DR and DT concepts in a new twist. Hypothetical simplified example depicting my understanding: A flat 100 Damage attack get's resisted by armor equivalent to 50% DR(i'm too lazy to find the accurate flat number), turning it into 50, which is then lowered by -40 (soak, absorb), making the final damage equal to 10. This damage is done if you are hit in the X% coverage zone. And this is further calculated for each separate follow-up armor piece where the X% coverage zone was hit. Which means the 10 can further be reduced to 0. Basically, a layered cake of armor with every armor being unique. This is AMAZING!

The additional amount of armor slots and potential multitude of new armor clothing, and types, it's just perfect, only missing a toolbelt slot, judging by the inventory screenshot.


For now, I have no intention to allow the player to choose which part of the target's body they're attacking (Fallout style), but there will be different special attacks / stances that will influence this (e.g. decapitate). Also, elevation and size of attacker and the target will also play a role here. So, for example, attacking someone from an elevated position will give you a better chance to hit them in the head and worse (if any) chance to hit their feet.

For now the only gripe I have in the post. Without the ability to target specific spots, the randomness of shots, while realistic, will feel constricting, that is the opposite of what hardcore tactical combat should be, i.e. give a plethora of choice and put the proper decision making onto the player amidst hardship.

Elevation is a good example. Not accounting for cover, a sharpshooter sitting on top of a tower won't have a higher chance to hit the upper body vs legs unless the target is right underneath the tower, it's all about direct line of sight to a specific body part and distance + ballistics. At 100m the chance to hit any part of the body is proportionally equal, because the angle of attack allows to see and target the whole body. At longer distances (500m+) it only makes sense to only aim center mass because of ballistics and ammo accuracy.

The same thing can be applied to automatic weapons. Take D-Day and Omaha Beach invasion from Saving Private Ryan. The reason why legs weren't aimed for is because at those distances, center mass aim accounts for bullet spread and allowed for higher overall hit chance all the way till the defilade in front of the elevated bunker nests, where the aiming deadzone didn't allow to get hit, ignoring legs completely. And the same thing happened in reverse, because the MG nests and sandbags covered the lower torso, only the upper body parts were exposed.

Why say this? The principle behind elevation is to have better overview of the battlefield and longer targeting range (e.g. 300m attack instead of 100m). The hit chance idea described would work if the elevation was made of grated steel, which can act like very, very, VERY slim cover, mostly against slower and thick projectiles like crossbow bolts and acid blobs, where as bullets would most likely fracture and act like shrapnel AND the attacks were under 70-80 degree angles. In other words, it's very cool, but a poor substitute for actual selective body part aiming, especially considering the following...

There already exists feats like Aimed Shot and Kneecap Shot (which is probably the special attacks mentioned).

Aimed Shot, taking from it's icon is literally a "headshot". In Underrail it acts as a 100% crit hit. Of course, different creatures have different critical spots which aren't a head, but the principle behind Aimed Shot is right in the name. It's an Aimed. Shot. Only with this new armor system it just needs an Infusion rework.

For example: Aimed Shot increases the chance to hit a specific body part(s), doesn't crit, has no cooldown, has increased AP cost (+25-50%), can't be used if under Suppressive Fire. Kneecap Shot on the other hand can work in tandem with Aimed Shot, while staying effectively the same, only reducing the bonus hit chance from Aimed Shot by 50%. Problem is obviously the implementation, to which I may suggest having an upper and lower body Aimed Shot.

On the other hand, the body part chance to hit is reminiscent of Cyberpunk 2020 and RED TTRPG, both of which I luckily have, an english .pdf for CP2020, for being a sucker for preordering CP2077 and Jumpstart Kit for RED (arguably the better version), which I have to translate to English, but... Reading the rulebooks they both accounted for body part hits differently, in RED it was simplified for easier table gameplay, which isn't a problem for computers. So while I can share the pdf, I can't do that for RED, yet. That will be for a new post on Armor, given the new juicy details here.


One of the mechanics that are in place right now is that there is such a thing as grazing shots, which are basically hits that deal about half as much damage. They occur when the attack roll is within the graze part of the hit chance, the size of which is determined by attack-to-defense ratio... What is relevant for the example above is that the farther you are into the graze area of the roll, the farther the hit lands from the center of the body part.

*Salivates like Homer Simpson* Oh yes! Grazing shot is a perfect compromise for those "95% misses" several times in a row. There is almost nothing to add to it (the math) other than I would tie ammo type and caliber as an additional calculation. Like shotgun shells have a much bigger graze hit chance, but the damage is lower. While 12.7 has a lower graze hit chance, but the damage is much higher. Combined with the new armor system and even possible new armor types. Just *chef's kiss*.


About UI, I hope it has better readability. If I didn't read what they represented, I'd only have a half understanding. I'll draw some examples later to save on writing.


Overall I am very excited and like what I see. Sure, polish and ironing out the balance is part for the course, although I am curious if this system will keep the old quality range of 1-180? Or will there be a new one for easier balancing? There is also the question of how critical hits will behave, will it stay the same, or will critical hits also have an overhaul?


  • Oculite
  • Godman
  • **
  • Posts: 1308
  • Karma: +184/-277
    • View Profile
Re: Dev Log #7: New Armor Mechanics
« Reply #4 on: November 18, 2023, 05:17:08 pm »
You will not be able to rely on your armour.

I get the impression you can just cover every part of your body with armor if you don't care about the penalty or the weight.  As for lighter characters, they have to pick where they want to try to protect.
*eurobeat intensifies*


  • Probably not a Spambot
  • *
  • Posts: 28
  • Karma: +5/-5
    • View Profile
Re: Dev Log #7: New Armor Mechanics
« Reply #5 on: November 22, 2023, 05:28:26 pm »
Finally found the time to finish this.

Okay, first things first, the UI readability. Shown in attached file "Example 1" I've edited the icons and moved around the position of text for better, easier reading. Also added a little bit of my own. To clarify, this is my personal take on the UI tooltip from the experience and knowledge I have, and in no way is the objectively correct way, merely an alternative example.

Starting from the icons. First thing that caught my eye was the design of the vest. The part where it shows the lack of coverage is blurred with the gap the outer border creates between it and the vest, involuntarily making me squint to properly understand what I am looking at. The same principle goes for the shoulder pads and groin guard (I only edited two for time saving). I made a simple edit by making the covered and uncovered part more pronounced, so it was easier to understand at first glance. To the right I made an additional example of coverage just in case for comparison. I had the initial thought there might be several icons for different coverage percentages, after examining the icons closer, the thought faded away. But this ties to the issue I described above. As icons get smaller and smaller the main principle of "convey information with as little shown possible" holds ever stronger, especially with their importance in coverage floating numbers (0.0-1.0). This is further pronounced in combination with the text.

I've shifted the position of both the coverage percentage and material to the icon by grouping up more closely related information, in such, giving a smoother information flow and room for higher Resistance and Soak numbers, and removing unnecessary eye movement. In addition to this I've added "Cvr." abbreviation for "Coverage" on top (the alternative can be "Cover."or even "(Cover.%)"), also semi-colons to separate all of it further.

That's the nitpick on icons.

Second is something I've thought of when examining the screenshots and formulas.

I've added a small icon as seen in "Example 2". Since there will be mechanics for layered armor, and is more complex than before, having access to quick, accurate info is important, hence the icon. In short, it's like the "Defenses" tab from Combat Stats window in Underrail, only shifted to the gear screen.

You click on it and get something like "Example 3" in place of the 3D model. It's a very rough example, but the core idea is there. You get a readout on how much a body region is covered overall and the aggregated amount of armor stats per region. Simple, sure, however, this can be further expanded upon. Like Press-Holding Alt will give you an expanded version, which shows the full specter of information on all armor for a specific region that affects it, all neatly bundled up together.

That about covers it all. Now to revisit the part about hit chance and CP2020 (can't share 82MB here :P) etc..

Reading up in CP2020 the hit location system, I've noticed some similarities. It works like this: any attack that hits, unless it was aimed with a -4 penalty, uses a 1D10 to randomly decided which part of the body was hit. The Body Locations are split among the 1D10 as such: 1 - Head, 2-4 - Torso, 5 - R.Arm, 6 - L.Arm, 7-8 - R.Leg, 9-0 - L.Leg; making it a 10%hit Headshot, 30% Torso, 10% R. or L. Arm, 20% R. or L. Leg. Compare that to given example: Head - 5%, Torso - 55%, Arms - 10%, Legs and pelvis - 25%, Feet 5%. Of course CP2020 is limited by a 1 to 10 die, where as Underrail is limited to math. That being said, in CP2020 there is a clause that if an enemy is partially behind cover (in the example given a chest high wall), then a die that fell on "in-cover" part gets rerolled, all because the location hit is decided AFTER a hit is counted. Seeing how coverage and specific body part targeting is still in dev, this could be an inspiration for a solution.