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)