diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 04d66e4d24..f0102a1773 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -108,12 +108,14 @@ return var/agony = agonyforce + var/stun = stunforce var/mob/living/L = M var/contact = 1 if(user.a_intent == "harm") contact = ..() agony *= 0.5 //whacking someone causes a much poorer contact than prodding them. + stun *= 0.5 else //copied from human_defense.dm if (ishuman(L)) @@ -145,14 +147,20 @@ if (contact) msg_admin_attack("[key_name(user)] attempted to stun [key_name(L)] with the [src].") - if (stunforce) - L.Stun(stunforce) - L.Weaken(stunforce) - L.apply_effect(STUTTER, stunforce) + if (ishuman(L)) + var/mob/living/carbon/human/H = L + var/datum/organ/external/affected = get_organ(def_zone) + var/siemens_coeff = H.get_siemens_coefficient_organ(affected) + stun *= siemens_coeff + agony *= siemens_coeff + + if (stun) + L.Stun(stun) + L.Weaken(stun) + L.apply_effect(STUTTER, stun) if (agony) - //Siemens coefficient? - //TODO: Merge this with taser effects + //perhaps this could be merged with taser effects? L.apply_effect(agony,AGONY,0) L.apply_effect(STUTTER, agony/10) L.apply_effect(EYE_BLUR, agony/10) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 7fe9bd63f9..9cb8f8cc09 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -120,6 +120,20 @@ emp_act protection += C.armor[type] return protection +//this proc returns the Siemens coefficient of electrical resistivity for a particular external organ. +/mob/living/carbon/human/proc/get_siemens_coefficient_organ(var/datum/organ/external/def_zone) + if (!def_zone) + return 1.0 + + var/siemens_coefficient = 1.0 + + var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? + for(var/obj/item/clothing/C in clothing_items) + if(istype(C) && (C.body_parts_covered & def_zone.body_part)) // Is that body part being targeted covered? + siemens_coefficient *= C.siemens_coefficient + + return siemens_coefficient + /mob/living/carbon/human/proc/check_head_coverage() var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform)