diff --git a/code/datums/diseases/advance/symptoms/deafness.dm b/code/datums/diseases/advance/symptoms/deafness.dm
index 5666eed62d4..1edf47c6366 100644
--- a/code/datums/diseases/advance/symptoms/deafness.dm
+++ b/code/datums/diseases/advance/symptoms/deafness.dm
@@ -35,8 +35,8 @@ Bonus
if(5)
if(!(M.ear_deaf))
M << "Your ears pop and begin ringing loudly!"
- M.ear_deaf = INFINITY //Shall be enough
+ M.setEarDamage(-1,INFINITY) //Shall be enough
spawn(200)
if(M)
- M.ear_deaf = 0
+ M.setEarDamage(-1,0)
return
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm
index 026a0aa4a1b..8642feef895 100644
--- a/code/game/gamemodes/changeling/powers/shriek.dm
+++ b/code/game/gamemodes/changeling/powers/shriek.dm
@@ -11,7 +11,7 @@
for(var/mob/living/M in get_hearers_in_view(4, user))
if(iscarbon(M))
if(!M.mind || !M.mind.changeling)
- M.ear_deaf += 30
+ M.adjustEarDamage(0,30)
M.confused += 20
M.Jitter(50)
else
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index de9e1540a1a..c718aec32d1 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -883,7 +883,7 @@ var/list/sacrificed = list()
var/obj/item/weapon/nullrod/N = locate() in C
if(N)
continue
- C.ear_deaf += 50
+ C.adjustEarDamage(0, 50)
C.show_message("The world around you suddenly becomes quiet.", 3)
affected++
if(prob(1) && ishuman(C))
@@ -902,7 +902,7 @@ var/list/sacrificed = list()
var/obj/item/weapon/nullrod/N = locate() in C
if(N)
continue
- C.ear_deaf += 30
+ C.adjustEarDamage(0, 30)
//talismans is weaker.
C.show_message("The world around you suddenly becomes quiet.", 3)
affected++
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 531f9fecfd2..1cc0b25e9cc 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -131,7 +131,7 @@
M << "HONK"
M.sleeping = 0
M.stuttering += 20
- M.ear_deaf += 30
+ M.adjustEarDamage(0, 30)
M.Weaken(3)
if(prob(30))
M.Stun(10)
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index 214448b8911..aa0f5052714 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -58,8 +58,7 @@
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
- M.ear_damage += rand(0, 5)
- M.ear_deaf = max(M.ear_deaf,15)
+ M.setEarDamage(M.ear_damage + rand(0, 5), max(M.ear_deaf,15))
if (M.ear_damage >= 15)
M << "Your ears start to ring badly!"
if(!banglet && !(istype(src , /obj/item/weapon/grenade/flashbang/clusterbang)))
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 0185f4ebe4b..2e08765961a 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -46,15 +46,13 @@
f_loss += 60
- ear_damage += 30
- ear_deaf += 120
+ adjustEarDamage(30, 120)
if(3.0)
b_loss += 30
if (prob(50) && !shielded)
Paralyse(1)
- ear_damage += 15
- ear_deaf += 60
+ adjustEarDamage(15 , 60)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index ee4e6ebbe16..9fbb635bb06 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -132,11 +132,11 @@
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
- ear_deaf = max(ear_deaf, 1)
- else if(ear_deaf) //deafness, heals slowly over time
- ear_deaf = max(ear_deaf-1, 0)
- else if(ear_damage < 25) //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
- ear_damage = max(ear_damage-0.05, 0)
+ setEarDamage(-1, max(ear_deaf, 1))
+ else
+ adjustEarDamage(-1, (ear_damage < 25 ? -0.05 : 0))
+ //deafness, heals slowly over time
+ //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
//Other
if(stunned)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 515edc002a3..c6e325d4f03 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -50,15 +50,13 @@
f_loss += 60
- ear_damage += 30
- ear_deaf += 120
+ adjustEarDamage(30,120)
if(3.0)
b_loss += 30
if (prob(50))
Paralyse(1)
- ear_damage += 15
- ear_deaf += 60
+ adjustEarDamage(15,60)
adjustBruteLoss(b_loss)
adjustFireLoss(f_loss)
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index e5f64597566..955ca3030f9 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -109,12 +109,12 @@
eye_blurry = max(eye_blurry-1, 0)
//Ears
- if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
- ear_deaf = max(ear_deaf, 1)
- else if(ear_deaf) //deafness, heals slowly over time
- ear_deaf = max(ear_deaf-1, 0)
- else if(ear_damage < 25) //ear damage heals slowly under this threshold.
- ear_damage = max(ear_damage-0.05, 0)
+ if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
+ setEarDamage(-1, max(ear_deaf, 1))
+ else
+ adjustEarDamage(-1, (ear_damage < 25 ? -0.05 : 0))
+ //deafness, heals slowly over time
+ //ear damage heals slowly under this threshold. otherwise you'll need earmuffs
//Other
if(stunned)
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index f8c4dc9adad..1a96953f239 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -144,7 +144,7 @@
emp_damage = 30//Let's not overdo it
if(21 to 30)//High level of EMP damage, unable to see, hear, or speak
eye_blind = max(eye_blind, 1)
- ear_deaf = 1
+ setEarDamage(-1,1)
silent = 1
if(!alert)//Sounds an alarm, but only once per 'level'
emote("alarm")
@@ -155,12 +155,12 @@
if(20)
alert = 0
eye_blind = 0
- ear_deaf = 0
+ setEarDamage(-1,0)
silent = 0
emp_damage -= 1
if(11 to 19)//Moderate level of EMP damage, resulting in nearsightedness and ear damage
eye_blurry = 1
- ear_damage = 1
+ setEarDamage(1,-1)
if(!alert)
emote("alert")
src << "Primary systems are now online."
@@ -170,7 +170,7 @@
if(10)
alert = 0
eye_blurry = 0
- ear_damage = 0
+ setEarDamage(0,-1)
emp_damage -= 1
if(2 to 9)//Low level of EMP damage, has few effects(handled elsewhere)
if(!alert)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index e0496ef45fc..d2943e4bc65 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -104,8 +104,7 @@
f_loss = f_loss/1.5
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
- ear_damage += 30
- ear_deaf += 120
+ adjustEarDamage(30, 120)
if (prob(70) && !shielded)
Paralyse(10)
@@ -114,8 +113,7 @@
if (prob(getarmor(null, "bomb")))
b_loss = b_loss/2
if (!istype(ears, /obj/item/clothing/ears/earmuffs))
- ear_damage += 15
- ear_deaf += 60
+ adjustEarDamage(15,60)
if (prob(50) && !shielded)
Paralyse(10)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index e8d5e681478..6cd23c11da9 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -473,18 +473,12 @@
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
- ear_deaf = max(ear_deaf, 1)
- else
- /* might be better to create a variable here, and instead of doing this nested for. */
- // deafness heals slowly over time, unless ear_damage is over 100
- if (ear_damage < 100)
- // Heal the first 1/3 here
- ear_deaf = max(ear_deaf - 1, 0)
- ear_damage = max(ear_damage-0.05, 0)
- if(istype(ears, /obj/item/clothing/ears/earmuffs)) // earmuffs rest your ears, healing 3x faster, but keeping you deaf.
- // Heal the 2/3 here
- ear_deaf = max(ear_deaf, 1)
- ear_damage = max(ear_damage-0.10, 0)
+ setEarDamage(-1, max(ear_deaf, 1))
+ else if (ear_damage < 100) // deafness heals slowly over time, unless ear_damage is over 100
+ if(istype(ears, /obj/item/clothing/ears/earmuffs)) // earmuffs rest your ears, healing 3x faster, but keeping you deaf.
+ setEarDamage(max(ear_damage-0.15, 0), max(ear_deaf - 1, 1))
+ else
+ adjustEarDamage(-0.05, -1)
//Dizziness
if(dizziness)
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 60d0172da01..7a55c54c882 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -391,14 +391,11 @@
//Ears
if(disabilities & DEAF) //disabled-deaf, doesn't get better on its own
- ear_deaf = max(ear_deaf, 1)
+ setEarDamage(-1, max(ear_deaf, 1))
else
- /* might be better to create a variable here, and instead of doing this nested for. */
// deafness heals slowly over time, unless ear_damage is over 100
if (ear_damage < 100)
- // Heal the first 1/3 here
- ear_deaf = max(ear_deaf - 1, 0)
- ear_damage = max(ear_damage-0.05, 0)
+ adjustEarDamage(-0.05,-1)
//Other
if(stunned)
diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm
index 3c01af2f867..e4122c9e01a 100644
--- a/code/modules/mob/living/carbon/slime/life.dm
+++ b/code/modules/mob/living/carbon/slime/life.dm
@@ -235,16 +235,12 @@
src.eye_blind = 0
src.eye_blind = max(eye_blind, 1)
- if (src.ear_deaf > 0) src.ear_deaf = 0
- if (src.ear_damage < 25)
- src.ear_damage = 0
+ setEarDamage((ear_damage < 25 ? 0 : ear_damage),(disabilities & DEAF ? 1 :0))
src.density = !( src.lying )
if (src.disabilities & BLIND)
src.eye_blind = max(eye_blind, 1)
- if (src.disabilities & DEAF)
- src.ear_deaf = 1
if (src.eye_blurry > 0)
src.eye_blurry = 0
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 4af16d18e77..6484310e1da 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -277,9 +277,6 @@ Sorry Giacom. Please don't be mad :(
// MOB PROCS //END
-
-/mob/proc/get_contents()
-
/mob/living/proc/mob_sleep()
set name = "Sleep"
set category = "IC"
@@ -291,6 +288,7 @@ Sorry Giacom. Please don't be mad :(
if(alert(src, "You sure you want to sleep for a while?", "Sleep", "Yes", "No") == "Yes")
usr.sleeping = 20 //Short nap
+/mob/proc/get_contents()
/mob/living/proc/lay_down()
set name = "Rest"
@@ -343,6 +341,17 @@ Sorry Giacom. Please don't be mad :(
var/obj/item/organ/limb/def_zone = ran_zone(t)
return def_zone
+//damage/heal the mob ears and adjust the deaf amount
+/mob/living/adjustEarDamage(var/damage, var/deaf)
+ ear_damage = max(0, ear_damage + damage)
+ ear_deaf = max(0, ear_deaf + deaf)
+
+//pass a negative argument to skip one of the variable
+/mob/living/setEarDamage(var/damage, var/deaf)
+ if(damage >= 0)
+ ear_damage = damage
+ if(deaf >= 0)
+ ear_deaf = deaf
// heal ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/heal_organ_damage(var/brute, var/burn)
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
index 6bb20acc14f..50cadcbfe26 100644
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ b/code/modules/mob/living/silicon/ai/say.dm
@@ -170,7 +170,7 @@ var/const/VOX_DELAY = 600
if(!only_listener)
// Play voice for all mobs in the z level
for(var/mob/M in player_list)
- if(M.client)
+ if(M.client && !M.ear_deaf)
var/turf/T = get_turf(M)
if(T.z == z_level)
M << voice
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 79b70795d43..99ca6525d46 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -110,17 +110,10 @@
if (src.eye_blind)
src.eye_blind--
- if (src.ear_deaf > 0) src.ear_deaf--
- if (src.ear_damage < 25)
- src.ear_damage -= 0.05
- src.ear_damage = max(src.ear_damage, 0)
-
src.density = !( src.lying )
if (src.disabilities & BLIND)
src.eye_blind = max(1, eye_blind)
- if (src.disabilities & DEAF)
- src.ear_deaf = 1
if (src.eye_blurry > 0)
src.eye_blurry--
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 5136cea9f14..4b6e2ae91e5 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -408,3 +408,9 @@
visible_message("[M] punches [src], but doesn't leave a dent.", \
"[M] punches [src], but doesn't leave a dent.!")
return 0
+
+/mob/living/silicon/adjustEarDamage()
+ return
+
+/mob/living/silicon/setEarDamage()
+ return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 14b9f3a920e..4329928105a 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -109,6 +109,8 @@
if(paralysis)
AdjustParalysis(-1)
+ adjustEarDamage((ear_damage < 25 ? -0.05 : 0), -1)
+
//Movement
if(!client && !stop_automated_movement && wander)
if(isturf(src.loc) && !resting && !buckled && canmove) //This is so it only moves if it's not inside a closet, gentics machine, etc.
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index d9cd7e92bd7..28b8530e7d8 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -941,3 +941,9 @@ var/list/slot_equipment_priority = list( \
if(G.can_reenter_corpse || even_if_they_cant_reenter)
return G
break
+
+/mob/proc/adjustEarDamage()
+ return
+
+/mob/proc/setEarDamage()
+ return
\ No newline at end of file
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 815dd381e49..d48d0456900 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -47,10 +47,10 @@
var/next_move = null
var/notransform = null //Carbon
var/hand = null
- var/eye_blind = null //Carbon
- var/eye_blurry = null //Carbon
- var/ear_deaf = null //Carbon
- var/ear_damage = null //Carbon
+ var/eye_blind = 0 //Carbon
+ var/eye_blurry = 0 //Carbon
+ var/ear_deaf = 0 //Carbon
+ var/ear_damage = 0 //Carbon
var/stuttering = null //Carbon
var/real_name = null
var/bhunger = 0 //Carbon
@@ -111,10 +111,6 @@
var/job = null//Living
- var/const/blindness = 1//Carbon
- var/const/deafness = 2//Carbon
- var/const/muteness = 4//Carbon
-
var/radiation = 0//Carbon
var/list/mutations = list() //Carbon -- Doohl
diff --git a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm
index aeb76afb339..b05bf89826d 100644
--- a/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Medicine-Reagents.dm
@@ -304,8 +304,7 @@ datum/reagent/medicine/inacusiate
color = "#6600FF" // rgb: 100, 165, 255
datum/reagent/medicine/inacusiate/on_mob_life(var/mob/living/M as mob)
- M.ear_damage = 0
- M.ear_deaf = 0
+ M.setEarDamage(0,0)
..()
return