Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
explosions, armors, helmets, and decapitation
#7
(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)
Reply


Messages In This Thread
RE: explosions, armors, helmets, and decapitation - by Noah Buttes - 08-10-2016, 01:23 PM

Forum Jump:


Users browsing this thread: 3 Guest(s)