diff --git a/code/__HELPERS/traits.dm b/code/__HELPERS/traits.dm
index dd16f7ee66e..dcd979ee1fd 100644
--- a/code/__HELPERS/traits.dm
+++ b/code/__HELPERS/traits.dm
@@ -222,6 +222,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai
#define CHANGELING_DRAIN "drain"
#define TRAIT_HULK "hulk"
#define STASIS_MUTE "stasis"
+#define SCRYING "scrying" // for mobs that have ghosted, but their ghosts are allowed to return to their body outside of aghosting (spirit rune, scrying orb, etc)
#define SCRYING_ORB "scrying-orb"
#define CULT_EYES "cult_eyes"
#define DOGGO_SPACESUIT "doggo_spacesuit"
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index e34425862df..2dd6444094b 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -947,6 +947,7 @@ structure_check() searches for nearby cultist structures required for the invoca
new_human.dust()
/obj/effect/rune/manifest/proc/ghostify(mob/living/user, turf/T)
+ ADD_TRAIT(user, SCRYING, CULT_TRAIT)
user.add_atom_colour(RUNE_COLOR_DARKRED, ADMIN_COLOUR_PRIORITY)
user.visible_message("[user] freezes statue-still, glowing an unearthly red.",
"You see what lies beyond. All is revealed. In this form you find that your voice booms above all others.")
@@ -977,6 +978,7 @@ structure_check() searches for nearby cultist structures required for the invoca
CM.Remove(ghost)
V.Remove(ghost)
//GM.Remove(ghost)
+ REMOVE_TRAIT(user, SCRYING, CULT_TRAIT)
user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED)
user = null
rune_in_use = FALSE
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index 795ac8ec8d2..c8e3fd4de38 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -213,6 +213,7 @@
force = 15
hitsound = 'sound/items/welder2.ogg'
var/mob/current_owner
+ var/mob/dead/observer/ghost // owners ghost when active
/obj/item/scrying/Initialize(mapload)
. = ..()
@@ -245,9 +246,32 @@
current_owner.update_icons()
/obj/item/scrying/attack_self(mob/user as mob)
- to_chat(user, " You can see...everything!")
- visible_message("[user] stares into [src], [user.p_their()] eyes glazing over.")
- user.ghostize(1)
+ if(in_use)
+ return
+ in_use = TRUE
+ ADD_TRAIT(user, SCRYING, SCRYING_ORB)
+ user.add_atom_colour(COLOR_BLUE, ADMIN_COLOUR_PRIORITY) // stolen spirit rune code
+ user.visible_message("[user] stares into [src], [user.p_their()] eyes glazing over.",
+ " You stare into [src], you can see the entire universe!")
+ ghost = user.ghostize(TRUE)
+ ghost.name = "Magic Spirit of [ghost.name]"
+ ghost.color = COLOR_BLUE
+ while(!QDELETED(user))
+ if(user.key || QDELETED(src))
+ user.visible_message("[user] blinks, returning to the world around [user.p_them()].",
+ "You look away from [src].")
+ break
+ if(user.get_active_hand() != src)
+ user.grab_ghost()
+ user.visible_message("[user]'s focus is forced away from [src].",
+ "Your vision is ripped away from [src].")
+ break
+ sleep(5)
+ in_use = FALSE
+ if(QDELETED(user))
+ return
+ user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, COLOR_BLUE)
+ REMOVE_TRAIT(user, SCRYING, SCRYING_ORB)
/////////////////////Multiverse Blade////////////////////
GLOBAL_LIST_EMPTY(multiverse)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 142a08f098e..32920e20fea 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -95,8 +95,14 @@
if(blood_DNA)
msg += "[p_they(TRUE)] [p_have()] [hand_blood_color != "#030303" ? "blood-stained":"oil-stained"] hands!\n"
if("eyes")
- if(iscultist(src) && HAS_TRAIT(src, CULT_EYES))
- msg += "[p_their(TRUE)] eyes are glowing an unnatural red!\n"
+ if(HAS_TRAIT(src, SCRYING))
+ if(iscultist(src) && HAS_TRAIT(src, CULT_EYES))
+ msg += "[p_their(TRUE)] glowing red eyes are glazed over!\n"
+ else
+ msg += "[p_their(TRUE)] eyes are glazed over.\n"
+ else
+ if(iscultist(src) && HAS_TRAIT(src, CULT_EYES))
+ msg += "[p_their(TRUE)] eyes are glowing an unnatural red!\n"
continue
//handcuffed?
@@ -269,10 +275,11 @@
if(get_int_organ(/obj/item/organ/internal/brain))
if(dna.species.show_ssd)
- if(!key)
- msg += "[p_they(TRUE)] [p_are()] totally catatonic. The stresses of life in deep-space must have been too much for [p_them()]. Any recovery is unlikely.\n"
- else if(!client)
- msg += "[p_they(TRUE)] [p_have()] suddenly fallen asleep, suffering from Space Sleep Disorder. [p_they(TRUE)] may wake up soon.\n"
+ if(!HAS_TRAIT(src, SCRYING))
+ if(!key)
+ msg += "[p_they(TRUE)] [p_are()] totally catatonic. The stresses of life in deep-space must have been too much for [p_them()]. Any recovery is unlikely.\n"
+ else if(!client)
+ msg += "[p_they(TRUE)] [p_have()] suddenly fallen asleep, suffering from Space Sleep Disorder. [p_they(TRUE)] may wake up soon.\n"
if(decaylevel == 1)
msg += "[p_they(TRUE)] [p_are()] starting to smell.\n"