diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 0c27da40fa..56f3967cc6 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -400,11 +400,9 @@ /datum/status_effect/duskndawn/on_apply() . = ..() ADD_TRAIT(owner,TRAIT_XRAY_VISION,type) - owner.update_sight() /datum/status_effect/duskndawn/on_remove() REMOVE_TRAIT(owner,TRAIT_XRAY_VISION,type) - owner.update_sight() return ..() /datum/status_effect/marshal diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 403b0a36b6..67f4c5b52f 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -185,7 +185,6 @@ REMOVE_TRAIT(current_owner, TRAIT_SIXTHSENSE, SCRYING_ORB) REMOVE_TRAIT(current_owner, TRAIT_XRAY_VISION, SCRYING_ORB) - current_owner.update_sight() current_owner = null @@ -196,7 +195,6 @@ ADD_TRAIT(current_owner, TRAIT_SIXTHSENSE, SCRYING_ORB) ADD_TRAIT(current_owner, TRAIT_XRAY_VISION, SCRYING_ORB) - current_owner.update_sight() /obj/item/scrying/attack_self(mob/user) visible_message("[user] stares into [src], their eyes glazing over.") diff --git a/code/modules/mob/living/carbon/init_signals.dm b/code/modules/mob/living/carbon/init_signals.dm index b780e155d6..4053382344 100644 --- a/code/modules/mob/living/carbon/init_signals.dm +++ b/code/modules/mob/living/carbon/init_signals.dm @@ -5,6 +5,15 @@ RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_NOBREATH), PROC_REF(on_nobreath_trait_gain)) RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_NOMETABOLISM), PROC_REF(on_nometabolism_trait_gain)) + // Vision traits gain and removal + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_THERMAL_VISION), PROC_REF(on_thermal_vision_gain)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_XRAY_VISION), PROC_REF(on_xray_vision_gain)) + RegisterSignal(src, SIGNAL_ADDTRAIT(TRAIT_NIGHT_VISION), PROC_REF(on_night_vision_gain)) + + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_THERMAL_VISION), PROC_REF(on_thermal_vision_loss)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_XRAY_VISION), PROC_REF(on_xray_vision_loss)) + RegisterSignal(src, SIGNAL_REMOVETRAIT(TRAIT_NIGHT_VISION), PROC_REF(on_night_vision_loss)) + /** * On gain of TRAIT_NOBREATH * @@ -42,3 +51,35 @@ LAZYREMOVE(reagents.addiction_list, R) qdel(R) reagents.end_metabolization(keep_liverless = TRUE) + + +/* +Handles vision trait updates: + TRAIT_THERMAL_VISION + TRAIT_XRAY_VISION + TRAIT_NIGHT_VISION +*/ + +/mob/living/carbon/proc/on_thermal_vision_gain() + ADD_TRAIT(src, TRAIT_THERMAL_VISION, TRAIT_GENERIC) + update_sight() + +/mob/living/carbon/proc/on_thermal_vision_loss() + REMOVE_TRAIT(src, TRAIT_THERMAL_VISION, TRAIT_GENERIC) + update_sight() + +/mob/living/carbon/proc/on_xray_vision_gain() + ADD_TRAIT(src, TRAIT_XRAY_VISION, TRAIT_GENERIC) + update_sight() + +/mob/living/carbon/proc/on_xray_vision_loss() + REMOVE_TRAIT(src, TRAIT_XRAY_VISION, TRAIT_GENERIC) + update_sight() + +/mob/living/carbon/proc/on_night_vision_gain() + ADD_TRAIT(src, TRAIT_NIGHT_VISION, TRAIT_GENERIC) + update_sight() + +/mob/living/carbon/proc/on_night_vision_loss() + REMOVE_TRAIT(src, TRAIT_NIGHT_VISION, TRAIT_GENERIC) + update_sight() diff --git a/code/modules/vtmb/chi_disciplines.dm b/code/modules/vtmb/chi_disciplines.dm index a2a7c40d35..1e75500183 100644 --- a/code/modules/vtmb/chi_disciplines.dm +++ b/code/modules/vtmb/chi_disciplines.dm @@ -1840,9 +1840,8 @@ if(1) var/sound/auspexbeat = sound('code/modules/wod13/sounds/auspex.ogg', repeat = TRUE) caster.playsound_local(caster, auspexbeat, 75, 0, channel = CHANNEL_DISCIPLINES, use_reverb = FALSE) - ADD_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) - caster.update_sight() caster.add_client_colour(/datum/client_colour/glass_colour/lightblue) + ADD_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) var/datum/atom_hud/abductor_hud = GLOB.huds[DATA_HUD_ABDUCTOR] abductor_hud.add_hud_to(caster) caster.auspex_examine = TRUE @@ -1853,15 +1852,13 @@ abductor_hud.remove_hud_from(caster) caster.stop_sound_channel(CHANNEL_DISCIPLINES) caster.playsound_local(caster.loc, 'code/modules/wod13/sounds/auspex_deactivate.ogg', 50, FALSE) - REMOVE_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) caster.remove_client_colour(/datum/client_colour/glass_colour/lightblue) - caster.update_sight() + REMOVE_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) if(2) var/sound/auspexbeat = sound('code/modules/wod13/sounds/auspex.ogg', repeat = TRUE) caster.playsound_local(caster, auspexbeat, 75, 0, channel = CHANNEL_DISCIPLINES, use_reverb = FALSE) ADD_TRAIT(caster, TRAIT_THERMAL_VISION, TRAIT_GENERIC) ADD_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) - caster.update_sight() var/datum/atom_hud/health_hud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] health_hud.add_hud_to(caster) caster.auspex_examine = TRUE @@ -1874,7 +1871,6 @@ caster.playsound_local(caster.loc, 'code/modules/wod13/sounds/auspex_deactivate.ogg', 50, FALSE) REMOVE_TRAIT(caster, TRAIT_THERMAL_VISION, TRAIT_GENERIC) REMOVE_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) - caster.update_sight() if(3) if(caster.lastattacked) if(isliving(caster.lastattacked)) diff --git a/code/modules/vtmb/disciplines.dm b/code/modules/vtmb/disciplines.dm index 7d3c629906..0d2ff2f31e 100644 --- a/code/modules/vtmb/disciplines.dm +++ b/code/modules/vtmb/disciplines.dm @@ -393,13 +393,12 @@ . = ..() var/sound/auspexbeat = sound('code/modules/wod13/sounds/auspex.ogg', repeat = TRUE) caster.playsound_local(caster, auspexbeat, 75, 0, channel = CHANNEL_DISCIPLINES, use_reverb = FALSE) + caster.add_client_colour(/datum/client_colour/glass_colour/lightblue) ADD_TRAIT(caster, TRAIT_THERMAL_VISION, TRAIT_GENERIC) var/loh = FALSE if(!HAS_TRAIT(caster, TRAIT_NIGHT_VISION)) ADD_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) loh = TRUE - caster.update_sight() - caster.add_client_colour(/datum/client_colour/glass_colour/lightblue) var/shitcasted = FALSE if(level_casting >= 2) var/datum/atom_hud/abductor_hud = GLOB.huds[DATA_HUD_ABDUCTOR] @@ -425,11 +424,10 @@ health_hud.remove_hud_from(caster) caster.stop_sound_channel(CHANNEL_DISCIPLINES) caster.playsound_local(caster.loc, 'code/modules/wod13/sounds/auspex_deactivate.ogg', 50, FALSE) + caster.remove_client_colour(/datum/client_colour/glass_colour/lightblue) REMOVE_TRAIT(caster, TRAIT_THERMAL_VISION, TRAIT_GENERIC) if(loh) REMOVE_TRAIT(caster, TRAIT_NIGHT_VISION, TRAIT_GENERIC) - caster.remove_client_colour(/datum/client_colour/glass_colour/lightblue) - caster.update_sight() /datum/discipline/celerity name = "Celerity"