diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 6260a297a1c..7fe9bd63f9f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -10,23 +10,29 @@ emp_act /mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone) -// BEGIN TASER NERF - /* Commenting out new-old taser nerf. - if(C.siemens_coefficient == 0) //If so, is that clothing shock proof? - if(prob(deflectchance)) - visible_message("\red The [P.name] gets deflected by [src]'s [C.name]!") //DEFLECT! - visible_message("\red Taser hit for [P.damage] damage!") - del P -*/ -/* Commenting out old Taser nerf - if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor)) - if(istype(P, /obj/item/projectile/energy/electrode)) - visible_message("\red The [P.name] gets deflected by [src]'s [wear_suit.name]!") - del P - return -1 -*/ -// END TASER NERF + var/datum/organ/external/organ = get_organ(check_zone(def_zone)) + //Being hit while using a cloaking device + var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) + if(C && C.active) + C.attack_self(src)//Should shut it off + update_icons() + src << "\blue Your [C.name] was disrupted!" + Stun(2) + + //Being hit while using a deadman switch + if(istype(equipped(),/obj/item/device/assembly/signaler)) + var/obj/item/device/assembly/signaler/signaler = equipped() + if(signaler.deadman && prob(80)) + src.visible_message("\red [src] triggers their deadman's switch!") + signaler.signal() + + //Shields + if(check_shields(P.damage, "the [P.name]")) + P.on_hit(src, 2, def_zone) + return 2 + + //Laserproof armour if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof)) if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam)) var/reflectchance = 40 - round(P.damage/3) @@ -50,54 +56,35 @@ emp_act P.xo = new_x - curloc.x return -1 // complete projectile permutation - -//BEGIN BOOK'S TASER NERF. + + //BEGIN BOOK'S TASER NERF. if(istype(P, /obj/item/projectile/beam/stun)) var/datum/organ/external/select_area = get_organ(def_zone) // We're checking the outside, buddy! - var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? - // var/deflectchance=90 //Is it a CRITICAL HIT with that taser? - for(var/bp in body_parts) //Make an unregulated var to pass around. - if(!bp) - continue //Does this thing we're shooting even exist? - if(bp && istype(bp ,/obj/item/clothing)) // If it exists, and it's clothed - var/obj/item/clothing/C = bp // Then call an argument C to be that clothing! - if(C.body_parts_covered & select_area.body_part) // Is that body part being targeted covered? - P.agony=P.agony*C.siemens_coefficient + var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking? + + for(var/obj/item/clothing/CL in clothing_items) //Make an unregulated var to pass around. + if(!istype(CL)) //This isn't necessary, is it? + continue + if(CL.body_parts_covered & select_area.body_part) // Is that body part being targeted covered by CL? + P.agony *= CL.siemens_coefficient + + //blocked = 0 here as we've already adjused based on siemens_coefficient. apply_effect(P.agony,AGONY,0) flash_pain() - src <<"\red You have been shot!" + src <<"\red You have been hit by [P]!" del P - - var/obj/item/weapon/cloaking_device/C = locate((/obj/item/weapon/cloaking_device) in src) - if(C && C.active) - C.attack_self(src)//Should shut it off - update_icons() - src << "\blue Your [C.name] was disrupted!" - Stun(2) - - if(istype(equipped(),/obj/item/device/assembly/signaler)) - var/obj/item/device/assembly/signaler/signaler = equipped() - if(signaler.deadman && prob(80)) - src.visible_message("\red [src] triggers their deadman's switch!") - signaler.signal() - return -//END TASER NERF + //END TASER NERF - if(check_shields(P.damage, "the [P.name]")) - P.on_hit(src, 2, def_zone) - return 2 - - var/datum/organ/external/organ = get_organ(check_zone(def_zone)) - - var/armor = getarmor_organ(organ, "bullet") - - if((P.embed && prob(20 + max(P.damage - armor, -10))) && P.damage_type == BRUTE) - var/obj/item/weapon/shard/shrapnel/SP = new() - (SP.name) = "[P.name] shrapnel" - (SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]." - (SP.loc) = organ - organ.embed(SP) + //Shrapnel + if (P.damage_type == BRUTE) + var/armor = getarmor_organ(organ, "bullet") + if((P.embed && prob(20 + max(P.damage - armor, -10)))) + var/obj/item/weapon/shard/shrapnel/SP = new() + (SP.name) = "[P.name] shrapnel" + (SP.desc) = "[SP.desc] It looks like it was fired from [P.shot_from]." + (SP.loc) = organ + organ.embed(SP) return (..(P , def_zone)) @@ -186,6 +173,7 @@ emp_act ..() +//Returns 1 if the attack hit, 0 if it missed. /mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) if(!I || !user) return 0