Okay. This may read a little bit like a rage-post, but I’m largely convinced there is a bug somewhere at work.
Simply put, when turrets/secubots roll a headshot, they do MASSIVE damage that’s usually instantly fatal, even to a helmet-ed character. For example, in a recent game I was wearing power armor over most of my body, and a (pristine) riot helmet on my head. The riot helmet has 95% coverage of head, eyes, and mouth, so it should have protected me from any potential headshots (barring a 5% critical failure). The first time I got shot in the head by a turret, I was instantly killed. While it is possible that I simply failed my 95% roll, it is also highly unlikely. I SUSPECT (and this is merely a suspicion) that there is a headshot damage multiplier, and this multiplier is applied BEFORE armor. So while a riot helmet’s 32 armor would mostly/entirely protect from a 30 damage hit, it would not do much against a 150 damage hit after a 5x damage multiplier.
I’m still new to the code but this is how I’m reading things:
(Creature.cpp)
…
if (goodhit <= .1) {
g->add_msg_if_player(source, _(“Headshot!”));
damage_mult *= rng_float(5, 8);
bp_hit = bp_head; // headshot hits the head, of course}
…
So there’s a 5x-8x multiplier upon being headshotted. If armor applied first that would mean full head protection provides a meaningful protection; since it clearly doesn’t, then we can guess that armor applies after the multiplier (I couldn’t find the relevant code. If someone else can quote it, please do.)
What it seems like it should happen is that armor should reduce damage BEFORE critical/headshot multipliers. Which would allow for the player to actually survive a headshot while wearing moderate levels of armor.
(I also want to mention that a critical hit represents hitting some vital organ, like the brain or heart, not some magic combat eventuality where bullets spontaneously manage to strike with the force of a half-dozen similarly sized bullets)