diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index a7b22a4c30..a37a85db57 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -197,34 +197,32 @@ SLIME SCANNER
var/obj/item/organ/O = organ
//EYES
- if(istype(O, /obj/item/organ/eyes))
+ if(istype(O, /obj/item/organ/eyes) && advanced)
var/obj/item/organ/eyes/eyes = O
- if(advanced)
- if(HAS_TRAIT(C, TRAIT_BLIND))
- temp_message += " Subject is blind."
- if(HAS_TRAIT(C, TRAIT_NEARSIGHT))
- temp_message += " Subject is nearsighted."
- if(eyes.damage > 30)
- damage_message += " Subject has severe eye damage."
- else if(eyes.damage > 20)
- damage_message += " Subject has significant eye damage."
- else if(eyes.damage)
- damage_message += " Subject has minor eye damage."
+ if(HAS_TRAIT_NOT_FROM(C, TRAIT_BLIND, EYES_COVERED))
+ temp_message += " Subject is blind."
+ if(HAS_TRAIT_NOT_FROM(C, TRAIT_NEARSIGHT, EYES_COVERED))
+ temp_message += " Subject is nearsighted."
+ if(eyes.damage > 30)
+ damage_message += " Subject has severe eye damage."
+ else if(eyes.damage > 20)
+ damage_message += " Subject has significant eye damage."
+ else if(eyes.damage)
+ damage_message += " Subject has minor eye damage."
//EARS
- else if(istype(O, /obj/item/organ/ears))
+ else if(istype(O, /obj/item/organ/ears) && advanced)
var/obj/item/organ/ears/ears = O
- if(advanced)
- if(HAS_TRAIT_FROM(C, TRAIT_DEAF, GENETIC_MUTATION))
- temp_message += " Subject is genetically deaf."
- else if(HAS_TRAIT(C, TRAIT_DEAF))
- temp_message += " Subject is deaf."
- else
- if(ears.damage)
- damage_message += " Subject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage."
- if(ears.deaf)
- damage_message += " Subject is [ears.damage > ears.maxHealth ? "permanently ": "temporarily "] deaf."
+ if(HAS_TRAIT_FROM(C, TRAIT_DEAF, GENETIC_MUTATION))
+ temp_message += " Subject is genetically deaf."
+ else if(HAS_TRAIT(C, TRAIT_DEAF))
+ temp_message += " Subject is deaf."
+ else
+ if(ears.damage)
+ damage_message += " Subject has [ears.damage > ears.maxHealth ? "permanent ": "temporary "]hearing damage."
+ if(ears.deaf)
+ damage_message += " Subject is [ears.damage > ears.maxHealth ? "permanently ": "temporarily "] deaf."
//BRAIN
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index 00d929a1e0..a4da38c4da 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -24,12 +24,12 @@
if(!eye_blind)
blind_eyes(1)
update_mobility()
- else
- if(stat == UNCONSCIOUS)
- stat = CONSCIOUS
- if(!(combat_flags & COMBAT_FLAG_HARD_STAMCRIT))
- set_resting(FALSE, TRUE)
+ else if(stat == UNCONSCIOUS)
+ stat = CONSCIOUS
+ if(!(combat_flags & COMBAT_FLAG_HARD_STAMCRIT))
+ set_resting(FALSE, TRUE)
+ if(eye_blind <= 1)
adjust_blindness(-1)
- update_mobility()
+ update_mobility()
update_damage_hud()
update_health_hud()
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 39179346f1..0c3a31d990 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -837,7 +837,8 @@
disable_intentional_combat_mode(FALSE, FALSE)
else
stat = CONSCIOUS
- adjust_blindness(-1)
+ if(eye_blind <= 1)
+ adjust_blindness(-1)
update_mobility()
update_damage_hud()
update_health_hud()
diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm
index 0d41347179..0029300936 100644
--- a/code/modules/mob/living/status_procs.dm
+++ b/code/modules/mob/living/status_procs.dm
@@ -571,12 +571,13 @@
/mob/living/proc/cure_blind(source)
REMOVE_TRAIT(src, TRAIT_BLIND, source)
if(!HAS_TRAIT(src, TRAIT_BLIND))
- update_blindness()
+ if(eye_blind <= 1) //little hack now that we don't actively check for trait and unconsciousness on update_blindness.
+ adjust_blindness(-1)
/mob/living/proc/become_blind(source)
if(!HAS_TRAIT(src, TRAIT_BLIND)) // not blind already, add trait then overlay
ADD_TRAIT(src, TRAIT_BLIND, source)
- update_blindness()
+ blind_eyes(1)
else
ADD_TRAIT(src, TRAIT_BLIND, source)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index a09749ba04..4ef7623c83 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -128,15 +128,13 @@
* * target (optional) is the other mob involved with the visible message. For example, the attacker in many combat messages.
* * target_message (optional) is what the target mob will see e.g. "[src] does something to you!"
*/
-/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message)
+/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message)
var/turf/T = get_turf(src)
if(!T)
return
var/list/hearers = get_hearers_in_view(vision_distance, src) //caches the hearers and then removes ignored mobs.
if(!length(hearers))
return
- if(!islist(ignored_mobs))
- ignored_mobs = list(ignored_mobs)
hearers -= ignored_mobs
if(target_message && target && istype(target) && target.client)
@@ -150,7 +148,7 @@
msg = blind_message
if(msg)
target.show_message(msg, MSG_VISUAL,blind_message, MSG_AUDIBLE)
- else if(self_message)
+ if(self_message)
hearers -= src
for(var/mob/M in hearers)
if(!M.client)
@@ -185,15 +183,13 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
* * hearing_distance (optional) is the range, how many tiles away the message can be heard.
* * ignored_mobs (optional) doesn't show any message to any given mob in the list.
*/
-/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, list/ignored_mobs)
+/atom/proc/audible_message(message, deaf_message, hearing_distance = DEFAULT_MESSAGE_RANGE, self_message, ignored_mobs)
var/turf/T = get_turf(src)
if(!T)
return
var/list/hearers = get_hearers_in_view(hearing_distance, src)
if(!length(hearers))
return
- if(!islist(ignored_mobs))
- ignored_mobs = list(ignored_mobs)
hearers -= ignored_mobs
if(self_message)
hearers -= src
diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm
index 6be1afb5de..fbef8fd244 100644
--- a/code/modules/mob/status_procs.dm
+++ b/code/modules/mob/status_procs.dm
@@ -23,9 +23,9 @@
* Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work
*/
/mob/proc/blind_eyes(amount)
- var/old_blind = eye_blind || HAS_TRAIT(src, TRAIT_BLIND)
- eye_blind = max(eye_blind, amount)
- var/new_blind = eye_blind || HAS_TRAIT(src, TRAIT_BLIND)
+ var/old_blind = eye_blind
+ eye_blind = max((!eye_blind && stat == UNCONSCIOUS || HAS_TRAIT(src, TRAIT_BLIND)) ? 1 : eye_blind , amount)
+ var/new_blind = eye_blind
if(old_blind != new_blind)
update_blindness()
@@ -36,21 +36,21 @@
*/
/mob/proc/adjust_blindness(amount)
var/old_eye_blind = eye_blind
- eye_blind = max(0, eye_blind + amount)
- if(!old_eye_blind || !eye_blind && !HAS_TRAIT(src, TRAIT_BLIND))
+ eye_blind = max((stat == UNCONSCIOUS || HAS_TRAIT(src, TRAIT_BLIND)) ? 1 : 0, eye_blind + amount)
+ if(!old_eye_blind || !eye_blind)
update_blindness()
/**
* Force set the blindness of a mob to some level
*/
/mob/proc/set_blindness(amount)
var/old_eye_blind = eye_blind
- eye_blind = max(amount, 0)
- if(!old_eye_blind || !eye_blind && !HAS_TRAIT(src, TRAIT_BLIND))
+ eye_blind = max(amount, (stat == UNCONSCIOUS || HAS_TRAIT(src, TRAIT_BLIND)) ? 1 : 0)
+ if(!old_eye_blind || !eye_blind)
update_blindness()
/// proc that adds and removes blindness overlays when necessary
/mob/proc/update_blindness()
- if(stat == UNCONSCIOUS || HAS_TRAIT(src, TRAIT_BLIND) || eye_blind) // UNCONSCIOUS or has blind trait, or has temporary blindness
+ if(eye_blind) // UNCONSCIOUS or has blind trait, or has temporary blindness
if(stat == CONSCIOUS || stat == SOFT_CRIT)
throw_alert("blind", /obj/screen/alert/blind)
overlay_fullscreen("blind", /obj/screen/fullscreen/blind)