Ghost Busting (#18854)

* bustin

makes me feel good

* Update vorestation.dme

* Update trap.dm

* more

* Edits

* Make this work on incorp entities

* Update entrepreneur_items.dm

* Ghost Capture!

* awwa

* Update entrepreneur_items.dm

* Update entrepreneur_items.dm

* vore

* Other ways to spawn it

* Spectral shot

* ammo

* yeh

* get these

* Update ammo.dm

* AAAA

* Update weapons.dm

* Update weapons.dm

* beeem

* better

* Update weapons.dm

* more stuffs

* make sure this is unticked

* Update supplypack.dm

* spooky

* yeh

* mob sprites

* aaa

* Update research_nodes.dm

* Remove RND_CATEGORY_INITIAL from ammunition designs

* ?.

* subtype
This commit is contained in:
Cameron Lennox
2026-04-02 08:40:32 -04:00
committed by GitHub
parent ce1ce403a9
commit 981aaee9fa
44 changed files with 886 additions and 54 deletions
+33 -16
View File
@@ -11,8 +11,8 @@
icon = 'icons/mob/ghost.dmi'
icon_state = "ghost"
stat = DEAD
canmove = 0
blinded = 0
canmove = FALSE
blinded = FALSE
anchored = TRUE // don't get pushed around
var/list/visibleChunks = list()
var/datum/visualnet/ghost/visualnet
@@ -24,21 +24,23 @@
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
//If you died in the game and are a ghsot - this will remain as null.
//Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot.
var/has_enabled_antagHUD = 0
var/medHUD = 0
var/secHUD = 0
var/antagHUD = 0
universal_speak = 1
var/has_enabled_antagHUD = FALSE
var/medHUD = FALSE
var/secHUD = FALSE
var/antagHUD = FALSE
universal_speak = TRUE
var/atom/movable/following = null
var/admin_ghosted = 0
var/anonsay = 0
var/ghostvision = 1 //is the ghost able to see things humans can't?
var/admin_ghosted = FALSE
var/anonsay = FALSE
var/ghostvision = TRUE //is the ghost able to see things humans can't?
var/lighting_alpha = 255
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/toggled_invisible = 0
incorporeal_move = TRUE
/// If set to TRUE, the ghost is able to whisper. Usually only set if a cultist drags them through the veil.
var/is_manifest = FALSE
var/toggled_invisible = FALSE
var/ghost_sprite = null
/// If TRUE, the ghost can be interacted with by the corporeal world (ghost traps, photon pack, etc)
var/interact_with_world = TRUE
var/last_revive_notification = null // world.time of last notification, used to avoid spamming players from defibs or cloners.
var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns
var/selecting_ghostrole = FALSE
@@ -568,11 +570,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return ..()
/mob/proc/check_holy(var/turf/T)
return 0
return FALSE
/mob/observer/dead/check_holy(var/turf/T)
if(check_rights_for(src.client, R_ADMIN|R_FUN|R_EVENT))
return 0
return FALSE
return (T && T.holy) && (is_manifest || (mind in GLOB.cult.current_antagonists))
@@ -783,6 +785,21 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/image/J = image('icons/mob/mob.dmi', loc = src, icon_state = icon)
client.images += J
/mob/observer/dead/verb/toggle_interactions()
set name = "Toggle Interactions"
set desc = "Allows you to toggle if you wish for the corporeal world to interact with you!"
set category = "Ghost.Settings"
toggle_ghost_interactions()
/mob/observer/dead/proc/toggle_ghost_interactions()
if(is_manifest)
to_chat(src, span_info("You are currently manifested into the world and can not toggle this!"))
return
interact_with_world = !interact_with_world
to_chat(src, span_info("You will [interact_with_world ? "now" : "no longer"] be able to be interacted with by the corporeal world!"))
/mob/observer/dead/verb/toggle_visibility()
set name = "Toggle Visibility"
+1 -1
View File
@@ -1438,7 +1438,7 @@
if(!.)
return
client.screen.Remove(GLOB.global_hud.blurry, GLOB.global_hud.druggy, GLOB.global_hud.vimpaired, GLOB.global_hud.darkMask, GLOB.global_hud.nvg, GLOB.global_hud.thermal, GLOB.global_hud.meson, GLOB.global_hud.science, GLOB.global_hud.material, GLOB.global_hud.whitense)
client.screen.Remove(GLOB.global_hud.blurry, GLOB.global_hud.druggy, GLOB.global_hud.vimpaired, GLOB.global_hud.darkMask, GLOB.global_hud.nvg, GLOB.global_hud.thermal, GLOB.global_hud.meson, GLOB.global_hud.science, GLOB.global_hud.material, GLOB.global_hud.whitense, GLOB.global_hud.heavy_whitense)
if(istype(client.eye,/obj/machinery/camera))
var/obj/machinery/camera/cam = client.eye
+3
View File
@@ -285,3 +285,6 @@
var/vent_crawl_time = 4.5 SECONDS // Time to animate entering a vent
VAR_PRIVATE/is_motion_tracking = FALSE // Prevent multiple unsubs and resubs, also used to check if the vis layer is enabled, use has_motiontracking() to get externally.
VAR_PRIVATE/wants_to_see_motion_echos = TRUE
var/is_slipping = FALSE
var/slip_protect = 1
+2
View File
@@ -389,6 +389,8 @@
is_leaving_belly = FALSE
return
is_leaving_belly = FALSE
if(isghosttrap(mob.loc))
return
var/turf/mobloc = get_turf(mob)
if(incorporeal_speed)