diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm
index 5fbafaf4035..0b38d3b88db 100644
--- a/_maps/map_files/generic/centcomm.dmm
+++ b/_maps/map_files/generic/centcomm.dmm
@@ -747,7 +747,6 @@
/turf/simulated/floor/carpet/black,
/area/ghost_bar)
"cS" = (
-/obj/effect/landmark/spawner/teleport_scroll,
/obj/structure/table/wood/fancy/black,
/obj/item/paper/crumpled/bloody/ruins/lavaland/clown_planet{
name = "our demands";
@@ -7375,9 +7374,7 @@
/area/wizard_station)
"Ak" = (
/obj/structure/table/wood/fancy/royalblack,
-/obj/item/radio/phone{
- desc = "How else would the wizards order pizza?"
- },
+/obj/structure/pondering_orb,
/obj/effect/turf_decal/woodsiding{
dir = 6
},
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index 9611bfcdbe0..c46ab304137 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -1001,15 +1001,12 @@ structure_check() searches for nearby cultist structures required for the invoca
/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.")
- ghost = user.ghostize(TRUE)
+ ghost = user.ghostize(TRUE, RUNE_COLOR_DARKRED, "Dark Spirit of [user.name]")
var/datum/action/innate/cult/comm/spirit/CM = new
var/datum/action/innate/cult/check_progress/V = new
//var/datum/action/innate/cult/ghostmark/GM = new
- ghost.name = "Dark Spirit of [ghost.name]"
- ghost.color = "red"
CM.Grant(ghost)
V.Grant(ghost)
//GM.Grant(ghost)
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index f6a00c9cf49..2b50fb1de97 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -293,12 +293,9 @@
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
+ ghost = user.ghostize(TRUE, COLOR_BLUE, "Magic Spirit of [user.name]")
while(!QDELETED(user))
if(user.key || QDELETED(src))
user.visible_message("[user] blinks, returning to the world around [user.p_them()].",
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index 9482984df03..b08762c94cb 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -223,9 +223,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp
/obj/effect/landmark/spawner/nuclear_bomb/death_squad
name = "Death Squad Nuclear Bomb"
-/obj/effect/landmark/spawner/teleport_scroll
- name = "Teleport-Scroll"
-
/obj/effect/landmark/spawner/nuke_code
name = "nukecode"
diff --git a/code/game/objects/structures/pondering_orb.dm b/code/game/objects/structures/pondering_orb.dm
new file mode 100644
index 00000000000..2cfbddc9ef6
--- /dev/null
+++ b/code/game/objects/structures/pondering_orb.dm
@@ -0,0 +1,29 @@
+/obj/structure/pondering_orb
+ name = "pondering orb"
+ desc = "Ponder your plans for the station using this farsight artefact."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "scrying_orb" //TODO : Placeholder sprite
+ anchored = TRUE
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ var/mob/dead/observer/ghost // owners ghost when active
+
+/obj/structure/pondering_orb/attack_hand(mob/user)
+ ADD_TRAIT(user, SCRYING, SCRYING_ORB)
+ 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, COLOR_BLUE, "Magic Spirit of [user.name]")
+ 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(!Adjacent(user))
+ user.grab_ghost()
+ user.visible_message("[user]'s focus is forced away from [src].",
+ "Your vision is ripped away from [src].")
+ break
+ sleep(5)
+ if(QDELETED(user))
+ return
+ user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, COLOR_BLUE)
+ REMOVE_TRAIT(user, SCRYING, SCRYING_ORB)
diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm
index 9174f40d7ce..57ad0d7dc4a 100644
--- a/code/modules/mob/dead/observer/observer_base.dm
+++ b/code/modules/mob/dead/observer/observer_base.dm
@@ -174,7 +174,7 @@ Works together with spawning an observer, noted above.
C.images += target.hud_list[SPECIALROLE_HUD]
return 1
-/mob/proc/ghostize(flags = GHOST_CAN_REENTER)
+/mob/proc/ghostize(flags = GHOST_CAN_REENTER, user_color, ghost_name)
if(key)
if(player_logged) //if they have disconnected we want to remove their SSD overlay
overlays -= image('icons/effects/effects.dmi', icon_state = "zzz_glow")
@@ -186,6 +186,11 @@ Works together with spawning an observer, noted above.
ADD_TRAIT(ghost, TRAIT_RESPAWNABLE, GHOSTED)
else
GLOB.non_respawnable_keys[ckey] = 1
+ if(user_color)
+ add_atom_colour(user_color, ADMIN_COLOUR_PRIORITY)
+ ghost.color = user_color
+ if(ghost_name)
+ ghost.name = ghost_name
ghost.key = key
return ghost
diff --git a/paradise.dme b/paradise.dme
index ea423292a23..2b0bb76d7b1 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1224,6 +1224,7 @@
#include "code\game\objects\structures\nest.dm"
#include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\plasticflaps.dm"
+#include "code\game\objects\structures\pondering_orb.dm"
#include "code\game\objects\structures\railings.dm"
#include "code\game\objects\structures\reflector.dm"
#include "code\game\objects\structures\safe.dm"