08-10-2016, 01:23 PM
(08-10-2016, 01:11 PM)misto Wrote: i would have thought that the indy space helmet would also offer blast protection, that is part of the whole point of the indy space armor set.
how about armors, then? is their blast protection reduced or removed without some helmet to accompany them, or do they magically offer protection to even an exposed head?
Indy space helmet used to provide blast protection, but doesn't anymore for some reason.
Armor protects you even without a helmet.
Here's the relevant code for explosion interaction with a human.
Code:
/mob/living/carbon/human/ex_act(severity)
..() // Logs.
if (src.nodamage) return
// there used to be mining radiation check here which increases severity by one
// this needs to be derived from material properties instead and is disabled for now
src.flash(30)
if (src.stat == 2 && src.client)
spawn(1)
src.gib(1)
return
else if (src.stat == 2 && !src.client)
var/list/virus = src.ailments
var/bdna = null // For forensics (Convair880).
var/btype = null
if (src.bioHolder.Uid && src.bioHolder.bloodType)
bdna = src.bioHolder.Uid
btype = src.bioHolder.bloodType
gibs(src.loc, virus, null, bdna, btype)
qdel(src)
return
var/shielded = 0
var/spellshielded = 0
for (var/obj/item/device/shield/S in src)
if (S.active)
shielded = 1
break
var/reduction = 0
if (src.energy_shield) reduction = src.energy_shield.protect()
if (src.spellshield)
reduction += 30
spellshielded = 1
boutput(src, "<span style=\"color:red\"><b>Your Spell Shield absorbs some blast!</b></span>")
var/in_severity = severity
if (src.wear_suit && istype(src.wear_suit, /obj/item/clothing/suit/armor/EOD))
reduction += rand(10,40)
severity++ // let's make this function like mining armor
boutput(src, "<span style=\"color:red\"><b>Your armor absorbs some of the blast!</span>")
if (src.head && istype(src.head, /obj/item/clothing/head/helmet/EOD))
reduction += rand(5,20) // buffed a bit - cogwerks
severity++
if (client && client.hellbanned)
reduction = 0
severity = in_severity
else if (src.wear_suit && src.wear_suit.armor_value_explosion)
var/sevmod = max(0,round(src.wear_suit.armor_value_explosion / 4))
severity += sevmod
reduction = rand(src.wear_suit.armor_value_explosion, src.wear_suit.armor_value_explosion * 4)
if (client && client.hellbanned)
reduction = 0
severity = in_severity
boutput(src, "<span style=\"color:red\"><b>Your armor absorbs some of the blast!</span>")
else if (src.w_uniform && src.w_uniform.armor_value_explosion)
var/sevmod = max(0,round(src.w_uniform.armor_value_explosion / 4))
severity += sevmod
reduction = rand(src.w_uniform.armor_value_explosion, src.w_uniform.armor_value_explosion * 4)
if (client && client.hellbanned)
reduction = 0
severity = in_severity
boutput(src, "<span style=\"color:red\"><b>Your jumpsuit absorbs some of the blast!</span>")
var/b_loss = null
var/f_loss = null
if (spellshielded)
severity++
switch (severity)
if (1.0)
b_loss += max(500 - reduction, 0)
spawn(1)
src.gib(1)
return
if (2.0)
if (!shielded)
b_loss += max(60 - reduction, 0)
f_loss += max(60 - reduction, 0)
src.apply_sonic_stun(0, 0, 0, 0, 0, 30, 30)
var/curprob = 30
if (src.traitHolder && src.traitHolder.hasTrait("explolimbs"))
curprob = round(curprob / 2)
for (var/limb in list("l_arm","r_arm","l_leg","r_leg"))
if (prob(curprob))
src.sever_limb(limb)
curprob -= 20 // let's not get too crazy
if (3.0)
b_loss += max(30 - reduction, 0)
if (prob(50) && !shielded && !reduction)
src.paralysis += 7
src.apply_sonic_stun(0, 0, 0, 0, 0, 15, 15)
var/curprob = 10
if (src.traitHolder && src.traitHolder.hasTrait("explolimbs"))
curprob = round(curprob / 2)
for (var/limb in list("l_arm","r_arm","l_leg","r_leg"))
if (prob(curprob))
src.sever_limb(limb)
curprob -= 10 // let's not get too crazy
if (4.0 to INFINITY)
boutput(src, "<span style=\"color:red\"><b>Your armor shields you from the blast!</b></span>")
TakeDamage(zone="All", brute=b_loss, burn=f_loss, tox=0, damage_type=0, disallow_limb_loss=1)