diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index a718e8be41..a7c4384f4f 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -9,7 +9,7 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images /mob/observer/dead name = "ghost" desc = "It's a g-g-g-g-ghooooost!" //jinkies! - icon = 'icons/mob/mob.dmi' + icon = 'icons/mob/ghost.dmi' icon_state = "ghost" layer = 4 stat = DEAD @@ -35,6 +35,39 @@ var/global/list/image/ghost_sightless_images = list() //this is a list of images var/seedarkness = 1 incorporeal_move = 1 + var/is_manifest = 0 //If set to 1, the ghost is able to whisper. Usually only set if a cultist drags them through the veil. + var/ghost_sprite = null + var/global/list/possible_ghost_sprites = list( + "Clear" = "blank", + "Green Blob" = "otherthing", + "Bland" = "ghost", + "Robed-B" = "ghost1", + "Robed-BAlt" = "ghost2", + "Corgi" = "ghostian", + "King" = "ghostking", + "Shade" = "shade", + "Hecate" = "ghost-narsie", + "Glowing Statue" = "armour", + "Artificer" = "artificer", + "Behemoth" = "behemoth", + "Harvester" = "harvester", + "Wraith" = "wraith", + "Viscerator" = "viscerator", + "Bats" = "bat", + "Red Robes" = "robe_red", + "Faithless" = "faithless", + "Shadowform" = "forgotten", + "Black Cat" = "blackcat", + "Dark Ethereal" = "bloodguardian", + "Holy Ethereal" = "lightguardian", + "Red Elemental" = "magicRed", + "Blue Elemental" = "magicBlue", + "Pink Elemental" = "magicPink", + "Orange Elemental" = "magicOrange", + "Green Elemental" = "magicGreen", + "Daemon" = "daemon" + ) + /mob/observer/dead/New(mob/body) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF see_invisible = SEE_INVISIBLE_OBSERVER @@ -617,11 +650,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return 1 /mob/observer/dead/proc/manifest(mob/user) - var/is_manifest = 0 + is_manifest = 0 if(!is_manifest) is_manifest = 1 verbs += /mob/observer/dead/proc/toggle_visibility - + verbs += /mob/observer/dead/proc/ghost_whisper + src << "As you are now in the realm of the living, you can whisper to the living with the Spectral Whisper verb, inside the IC tab." if(src.invisibility != 0) user.visible_message( \ "\The [user] drags ghost, [src], to our plane of reality!", \ @@ -753,3 +787,44 @@ mob/observer/dead/MayRespawn(var/feedback = 0) if((!target) || (!ghost)) return . = "follow" . += target.extra_ghost_link(ghost) + +//Culted Ghosts + +/mob/observer/dead/proc/ghost_whisper() + set name = "Spectral Whisper" + set category = "IC" + + if(is_manifest) //Only able to whisper if it's hit with a tome. + var/list/options = list() + for(var/mob/living/Ms in view(src)) + options += Ms + var/mob/living/M = input(src, "Select who to whisper to:", "Whisper to?", null) as null|mob in options + if(!M) + return 0 + var/msg = sanitize(input(src, "Message:", "Spectral Whisper") as text|null) + if(msg) + log_say("SpectralWhisper: [key_name(usr)]->[M.key] : [msg]") + M << " You hear a strange, unidentifiable voice in your head... [msg]" + src << " You said: '[msg]' to [M]." + else + return + return 1 + else + src << "You have not been pulled past the veil!" + +/mob/observer/dead/verb/choose_ghost_sprite() + set category = "Ghost" + set name = "Choose Sprite" + + icon = 'icons/mob/ghost.dmi' + var/choice + var/finalized = "No" + while(finalized == "No" && src.client) + + choice = input(usr,"What would you like to use for your ghost sprite?") as null|anything in possible_ghost_sprites + if(!choice) return + + icon_state = possible_ghost_sprites[choice] + finalized = alert("Look at your sprite. Is this what you wish to use?",,"No","Yes") + + ghost_sprite = possible_ghost_sprites[choice] diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 8ab162dbc4..7fb8052909 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -84,4 +84,7 @@ if(input) log_emote("Ghost/[src.key] : [input]") - say_dead_direct(input, src) + if(!invisibility) //If the ghost is made visible by admins or cult. And to see if the ghost has toggled its own visibility, as well. -Mech + visible_message("[src] [input]") + else + say_dead_direct(input, src) diff --git a/icons/mob/ghost.dmi b/icons/mob/ghost.dmi new file mode 100644 index 0000000000..5f61e7a1e7 Binary files /dev/null and b/icons/mob/ghost.dmi differ