From 1da5a27b981e5f9a2ba93f028befc1fbe52303e0 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 18 May 2017 12:07:33 -0500 Subject: [PATCH] Adjusts ear/eye protection based on missing organs (#999) --- .../mob/living/carbon/carbon_defense.dm | 60 +++++++++++++------ .../mob/living/carbon/human/human_defense.dm | 19 ------ .../living/carbon/monkey/monkey_defense.dm | 8 --- code/modules/surgery/organs/ears.dm | 2 + 4 files changed, 43 insertions(+), 46 deletions(-) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 84cbc01a33..57caa35c42 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -2,16 +2,38 @@ /mob/living/carbon/get_eye_protection() var/number = ..() + if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head + var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item + number += HFP.flash_protect + + if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses + var/obj/item/clothing/glasses/GFP = src.glasses + number += GFP.flash_protect + + if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask + var/obj/item/clothing/mask/MFP = src.wear_mask + number += MFP.flash_protect + var/obj/item/organ/eyes/E = getorganslot("eye_sight") if(!E) number = INFINITY //Can't get flashed without eyes else number += E.flash_protect + return number /mob/living/carbon/get_ear_protection() + var/number = ..() + if(ears && HAS_SECONDARY_FLAG(ears, BANG_PROTECT)) + number += 1 if(head && HAS_SECONDARY_FLAG(head, BANG_PROTECT)) - return 1 + number += 1 + var/obj/item/organ/ears/E = getorganslot("ears") + if(!E) + number = INFINITY + else + number += E.bang_protect + return number /mob/living/carbon/check_projectile_dismemberment(obj/item/projectile/P, def_zone) var/obj/item/bodypart/affecting = get_bodypart(def_zone) @@ -276,25 +298,25 @@ /mob/living/carbon/soundbang_act(intensity = 1, stun_pwr = 1, damage_pwr = 5, deafen_pwr = 15) var/ear_safety = get_ear_protection() var/obj/item/organ/ears/ears = getorganslot("ears") - if(ear_safety < 2) //has ears - var/effect_amount = intensity - ear_safety - if(effect_amount > 0) - if(stun_pwr) - Stun(stun_pwr*effect_amount) - Weaken(stun_pwr*effect_amount) - if(istype(ears) && (deafen_pwr || damage_pwr)) - ears.ear_damage += damage_pwr * effect_amount - ears.deaf = max(ears.deaf, deafen_pwr * effect_amount) + var/effect_amount = intensity - ear_safety + if(effect_amount > 0) + if(stun_pwr) + Stun(stun_pwr*effect_amount) + Weaken(stun_pwr*effect_amount) - if(ears.ear_damage >= 15) - to_chat(src, "Your ears start to ring badly!") - if(prob(ears.ear_damage - 5)) - to_chat(src, "You can't hear anything!") - ears.ear_damage = min(ears.ear_damage, UNHEALING_EAR_DAMAGE) - // you need earmuffs, inacusiate, or replacement - else if(ears.ear_damage >= 5) - to_chat(src, "Your ears start to ring!") - src << sound('sound/weapons/flash_ring.ogg',0,1,0,250) + if(istype(ears) && (deafen_pwr || damage_pwr)) + ears.ear_damage += damage_pwr * effect_amount + ears.deaf = max(ears.deaf, deafen_pwr * effect_amount) + + if(ears.ear_damage >= 15) + to_chat(src, "Your ears start to ring badly!") + if(prob(ears.ear_damage - 5)) + to_chat(src, "You can't hear anything!") + ears.ear_damage = min(ears.ear_damage, UNHEALING_EAR_DAMAGE) + // you need earmuffs, inacusiate, or replacement + else if(ears.ear_damage >= 5) + to_chat(src, "Your ears start to ring!") + src << sound('sound/weapons/flash_ring.ogg',0,1,0,250) return effect_amount //how soundbanged we are diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d7a2282a98..0623921d63 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -31,25 +31,6 @@ protection += C.armor[d_type] return protection -///checkeyeprot() -///Returns a number between -1 to 2 -/mob/living/carbon/human/get_eye_protection() - var/number = ..() - if(istype(src.head, /obj/item/clothing/head)) //are they wearing something on their head - var/obj/item/clothing/head/HFP = src.head //if yes gets the flash protection value from that item - number += HFP.flash_protect - if(istype(src.glasses, /obj/item/clothing/glasses)) //glasses - var/obj/item/clothing/glasses/GFP = src.glasses - number += GFP.flash_protect - if(istype(src.wear_mask, /obj/item/clothing/mask)) //mask - var/obj/item/clothing/mask/MFP = src.wear_mask - number += MFP.flash_protect - return number - -/mob/living/carbon/human/get_ear_protection() - if((ears && HAS_SECONDARY_FLAG(ears, BANG_PROTECT)) || (head && HAS_SECONDARY_FLAG(head, BANG_PROTECT))) - return 1 - /mob/living/carbon/human/on_hit(obj/item/projectile/P) dna.species.on_hit(P, src) diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index a8cf291c02..4a432bb66b 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -1,11 +1,3 @@ - -/mob/living/carbon/monkey/get_eye_protection() - var/number = ..() - if(istype(src.wear_mask, /obj/item/clothing/mask)) - var/obj/item/clothing/mask/MFP = src.wear_mask - number += MFP.flash_protect - return number - /mob/living/carbon/monkey/help_shake_act(mob/living/carbon/M) if(health < 0 && ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index e66346a2c8..fd6a3466bd 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -15,6 +15,8 @@ // without external aid (earmuffs, drugs) var/ear_damage = 0 + var/bang_protect = 0 //Resistance against loud noises + /obj/item/organ/ears/on_life() if(!iscarbon(owner)) return