Adds Earmuffs providing immunity to Changeling shriek (#14033)

* Adds Earmuff immunity to shriek

* Refactors hearing protection and adds deafness

* Update human.dm

* Removed implicit src
This commit is contained in:
Ryal
2020-09-20 15:32:27 -07:00
committed by GitHub
parent 01da8413de
commit 08c05a4814
6 changed files with 24 additions and 8 deletions
+6
View File
@@ -241,3 +241,9 @@
#define is_admin(user) (check_rights(R_ADMIN, 0, (user)) != 0)
#define SLEEP_CHECK_DEATH(X) sleep(X); if(QDELETED(src) || stat == DEAD) return;
// Hearing protection
#define HEARING_PROTECTION_NONE 0
#define HEARING_PROTECTION_MINOR 1
#define HEARING_PROTECTION_MAJOR 2
#define HEARING_PROTECTION_TOTAL 3
@@ -11,6 +11,10 @@
/datum/action/changeling/resonant_shriek/sting_action(var/mob/user)
for(var/mob/living/M in get_mobs_in_view(4, user))
if(iscarbon(M))
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.check_ear_prot() >= HEARING_PROTECTION_TOTAL)
continue
if(!M.mind || !M.mind.changeling)
M.MinimumDeafTicks(30)
M.AdjustConfused(20)
@@ -264,7 +264,7 @@
continue
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
if(H.check_ear_prot() >= HEARING_PROTECTION_TOTAL)
continue
if(!affects(C))
continue
+1 -1
View File
@@ -209,7 +209,7 @@
for(var/mob/living/carbon/M in ohearers(6, chassis))
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
if(H.check_ear_prot() >= HEARING_PROTECTION_TOTAL)
continue
to_chat(M, "<font color='red' size='7'>HONK</font>")
M.SetSleeping(0)
+11 -5
View File
@@ -254,7 +254,7 @@
limbs_affected -= 1
else valid_limbs -= processing_dismember
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
if(check_ear_prot() < HEARING_PROTECTION_TOTAL)
AdjustEarDamage(30, 120)
if(prob(70) && !shielded)
Paralyse(10)
@@ -278,7 +278,7 @@
limbs_affected -= 1
else valid_limbs -= processing_dismember
if(!istype(l_ear, /obj/item/clothing/ears/earmuffs) && !istype(r_ear, /obj/item/clothing/ears/earmuffs))
if(check_ear_prot() < HEARING_PROTECTION_TOTAL)
AdjustEarDamage(15, 60)
if(prob(50) && !shielded)
Paralyse(10)
@@ -931,12 +931,18 @@
return number
/mob/living/carbon/human/check_ear_prot()
if(!can_hear())
return HEARING_PROTECTION_TOTAL
if(istype(l_ear, /obj/item/clothing/ears/earmuffs))
return HEARING_PROTECTION_TOTAL
if(istype(r_ear, /obj/item/clothing/ears/earmuffs))
return HEARING_PROTECTION_TOTAL
if(head && (head.flags & HEADBANGPROTECT))
return 1
return HEARING_PROTECTION_MINOR
if(l_ear && (l_ear.flags & EARBANGPROTECT))
return 1
return HEARING_PROTECTION_MINOR
if(r_ear && (r_ear.flags & EARBANGPROTECT))
return 1
return HEARING_PROTECTION_MINOR
///tintcheck()
///Checks eye covering items for visually impairing tinting, such as welding masks
+1 -1
View File
@@ -157,7 +157,7 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby"))
if(L.can_hear() && !L.null_rod_check() && L != owner && L.stat != DEAD)
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(istype(H.l_ear, /obj/item/clothing/ears/earmuffs) || istype(H.r_ear, /obj/item/clothing/ears/earmuffs))
if(H.check_ear_prot() >= HEARING_PROTECTION_TOTAL)
continue
listeners += L