From 33fea55fca66d2708817401b8efe1c8f3aca84fb Mon Sep 17 00:00:00 2001 From: KOCMOHABT <25280520+KOCMODECAHTHUK@users.noreply.github.com> Date: Fri, 27 Feb 2026 19:24:13 +0500 Subject: [PATCH 1/7] aaaaa --- code/__DEFINES/atom_hud.dm | 9 ++ code/_onclick/hud/_defines.dm | 5 +- code/_onclick/hud/ghost.dm | 136 ++++++++++++++++++--- code/_onclick/observer.dm | 12 +- code/modules/mob/dead/observer/observer.dm | 83 +++++++------ icons/hud/screen_ghost.dmi | Bin 20929 -> 22161 bytes 6 files changed, 178 insertions(+), 67 deletions(-) diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 5056899d9b1e..0f7e8143361b 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -87,3 +87,12 @@ /// cooldown for being shown the images for any particular data hud #define ADD_HUD_TO_COOLDOWN 20 + + +#define GHOST_DATA_HUDS (1<<0) +#define GHOST_VISION (1<<1) +#define GHOST_HEALTH (1<<2) +#define GHOST_CHEM (1<<3) +#define GHOST_GAS (1<<4) +#define GHOST_TRAY (1<<5) +#define GHOST_DARKNESS_LEVEL (1<<6) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index c996c0f8b294..71c062397d8b 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -163,8 +163,7 @@ #define ui_ghost_respawn "SOUTH:6,CENTER-3:24" #define ui_ghost_orbit "SOUTH:6,CENTER-2:24" #define ui_ghost_reenter_corpse "SOUTH:6,CENTER-1:24" -#define ui_ghost_teleport "SOUTH:6,CENTER:24" -#define ui_ghost_pai "SOUTH: 6,CENTER+1:24" -#define ui_ghost_spawner_menu "SOUTH:6,CENTER+2:24" +#define ui_dnr "SOUTH:6,CENTER:24" +#define ui_ghost_teleport "SOUTH:6,CENTER+1:24" #define ui_wanted_lvl "NORTH,11" diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index d1c7cb81ca7d..eddad47a1fe3 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -39,6 +39,14 @@ var/mob/dead/observer/G = usr G.reenter_corpse() +/atom/movable/screen/ghost/dnr + name = "Do Not Resuscitate" + icon_state = "dnr" + +/atom/movable/screen/ghost/dnr/Click() + var/mob/dead/observer/dnring = usr + dnring.stay_dead() + /atom/movable/screen/ghost/teleport name = "Teleport" icon_state = "teleport" @@ -47,23 +55,106 @@ var/mob/dead/observer/G = usr G.dead_tele() -/atom/movable/screen/ghost/pai +/atom/movable/screen/ghost/hudbox + icon_state = "smallbox" + bad_type = /atom/movable/screen/ghost/hudbox + /// Icon state used for the overlay representing this hudbox + var/hud_icon_state + /// The flag this hudbox toggles + var/relevant_flag + +/atom/movable/screen/ghost/hudbox/update_overlays() + . = ..() + . += hud_icon_state + +/atom/movable/screen/ghost/hudbox/update_icon_state() + . = ..() + var/mob/dead/observer/observer = usr + if(!istype(observer)) + return + + icon_state = "smallbox[is_active(observer) ? "_active" : ""]" + +/atom/movable/screen/ghost/hudbox/proc/is_active(mob/dead/observer/observer) + return (observer.ghost_hud_flags & relevant_flag) + +/atom/movable/screen/ghost/hudbox/Click(location, control, params) + var/mob/dead/observer/observer = usr + switch(relevant_flag) + if(GHOST_DARKNESS_LEVEL) + observer.toggle_darkness() + if(GHOST_TRAY) + observer.tray_view() + else + observer.toggle_ghost_hud_flag(relevant_flag) + + update_appearance(UPDATE_ICON_STATE) + +/atom/movable/screen/ghost/hudbox/health_scanner + name = "Health Scanner" + desc = "Toggles your ability to health scan mobs on click." + hud_icon_state = "health_vision" + relevant_flag = GHOST_HEALTH + +/atom/movable/screen/ghost/hudbox/chem_scanner + name = "Chem Scanner" + desc = "Toggles your ability to chemical scan mobs on click." + hud_icon_state = "chem_vision" + relevant_flag = GHOST_CHEM + +/atom/movable/screen/ghost/hudbox/gas_scanner + name = "Gas Scanner" + desc = "Toggles your ability to gas scan objects on click." + hud_icon_state = "atmos_vision" + relevant_flag = GHOST_GAS + +/atom/movable/screen/ghost/hudbox/ghost + name = "Ghost Vision" + desc = "Toggles whether you can see other ghosts." + hud_icon_state = "ghost_vision" + relevant_flag = GHOST_VISION + +/atom/movable/screen/ghost/hudbox/data_huds + name = "Data HUDs" + desc = "Toggles the display of data HUDs (health, security, diagnostics, etc)." + hud_icon_state = "data_vision" + relevant_flag = GHOST_DATA_HUDS + +/atom/movable/screen/ghost/hudbox/pai name = "pAI Candidate" - icon_state = "pai" + hud_icon_state = "pai" -/atom/movable/screen/ghost/pai/Click() +/atom/movable/screen/ghost/hudbox/pai/Click() var/mob/dead/observer/G = usr G.register_pai() -/atom/movable/screen/ghost/spawner_menu +/atom/movable/screen/ghost/hudbox/spawner_menu name = "Spawner Menu" - icon = 'icons/hud/screen_ghost.dmi' - icon_state = "spawner_menu" + hud_icon_state = "spawner_menu" -/atom/movable/screen/ghost/spawner_menu/Click() +/atom/movable/screen/ghost/hudbox/spawner_menu/Click() var/mob/dead/observer/G = usr G.open_spawners_menu() +/atom/movable/screen/ghost/hudbox/tray_icon + name = "Tray View" + desc = "Shows the t-ray view of the area around your ghost." + hud_icon_state = "tray_vision" + relevant_flag = GHOST_TRAY + +/atom/movable/screen/ghost/hudbox/darkness_level + name = "Darkness Level" + desc = "Cycles through different darkness levels for ghost vision." + hud_icon_state = "darkness_vision" + relevant_flag = GHOST_DARKNESS_LEVEL + +/atom/movable/screen/ghost/hudbox/language_menu + name = "language menu" + hud_icon_state = "talk_wheel" + +/atom/movable/screen/ghost/hudbox/language_menu/Click() + usr.get_language_holder().open_language_menu(usr) + /datum/hud/ghost/New(mob/owner) ..() var/atom/movable/screen/using @@ -83,25 +174,28 @@ using.hud = src static_inventory += using - using = new /atom/movable/screen/ghost/teleport() - using.screen_loc = ui_ghost_teleport + using = new /atom/movable/screen/ghost/dnr(null, src) + using.screen_loc = ui_dnr using.hud = src static_inventory += using - using = new /atom/movable/screen/ghost/pai() - using.screen_loc = ui_ghost_pai + using = new /atom/movable/screen/ghost/teleport() + using.screen_loc = ui_ghost_teleport using.hud = src static_inventory += using - using = new /atom/movable/screen/language_menu - using.icon = ui_style - using.hud = src - static_inventory += using + var/list/hudboxes = subtypesof(/atom/movable/screen/ghost/hudbox) + for(var/i in 1 to length(hudboxes)) + var/hudbox_type = hudboxes[i] + var/atom/movable/screen/ghost/hudbox/hudbox = new hudbox_type(null, src) + hudbox.screen_loc = position_hudbox(i - 1) + static_inventory += hudbox + hudbox.update_appearance() - using = new /atom/movable/screen/ghost/spawner_menu() - using.screen_loc = ui_ghost_spawner_menu - using.hud = src - static_inventory += using +/datum/hud/ghost/proc/position_hudbox(i) + var/row = floor(i / 5) + var/column = i % 5 + return "SOUTH:[6 + row * 16], CENTER+2:[7 + column * 15]" /datum/hud/ghost/show_hud(version = 0, mob/viewmob) // don't show this HUD if observing; show the HUD of the observee @@ -115,7 +209,9 @@ return var/mob/screenmob = viewmob || mymob if(!screenmob.client.prefs.ghost_hud) - screenmob.client.screen -= static_inventory + screenmob.client.screen |= static_inventory + for(var/atom/movable/screen/ghost/hudbox/hud in static_inventory) + hud.update_appearance() else screenmob.client.screen += static_inventory diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index be934a395b30..8573c616f151 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -51,7 +51,7 @@ if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_GHOST, user) & COMPONENT_NO_ATTACK_HAND) return TRUE if(user.client) - if(user.gas_scan && atmosanalyzer_scan(user, src)) + if((user.ghost_hud_flags & GHOST_GAS) && atmosanalyzer_scan(user, src)) return TRUE else if(isAdminGhostAI(user)) attack_ai(user) @@ -60,9 +60,13 @@ return FALSE /mob/living/attack_ghost(mob/dead/observer/user) - if(user.client && user.health_scan) - healthscan(user, src, 2, TRUE, TRUE) - if(user.client && user.chem_scan) + . = ..() + if(isnull(user.client)) + return + + if (user.ghost_hud_flags & GHOST_HEALTH) + healthscan(user, src, 1, TRUE) + if (user.ghost_hud_flags & GHOST_CHEM) chemscan(user, src) return ..() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index e94a7781dda1..7f8b4c022990 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -34,11 +34,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/ghostvision = 1 //is the ghost able to see things humans can't? var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout() var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD? - var/data_huds_on = 0 //Are data HUDs currently enabled? - var/health_scan = FALSE //Are health scans currently enabled? - var/chem_scan = FALSE //Are chem scans currently enabled? - var/gas_scan = FALSE //Are gas scans currently enabled? var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED) //list of data HUDs shown to ghosts. + ///Selection: GHOST_DATA_HUDS | GHOST_VISION | GHOST_HEALTH | GHOST_CHEM | GHOST_GAS + var/ghost_hud_flags = NONE var/ghost_orbit = GHOST_ORBIT_CIRCLE //These variables store hair data if the ghost originates from a species with head and/or facial hair. @@ -149,9 +147,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) SSpoints_of_interest.make_point_of_interest(src) grant_all_languages() - show_data_huds() - data_huds_on = 1 - + toggle_ghost_hud_flag(GHOST_VISION | GHOST_DATA_HUDS) /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) @@ -164,6 +160,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 10) /mob/dead/observer/Destroy() + if(ghost_hud_flags & GHOST_DATA_HUDS) + remove_data_huds() + // Update our old body's medhud since we're abandoning it if(mind && mind.current) mind.current.med_hud_set_status() @@ -388,7 +387,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, span_warning("You're already stuck out of your body!")) return FALSE - var/response = alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. ","Are you sure you want to stay dead?","DNR","Save Me") + var/response = tgui_alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. ","Are you sure you want to stay dead?", list("DNR","Save Me")) if(response != "DNR") return @@ -459,6 +458,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp orbit_menu.ui_interact(src) +/// Toggles a flag from ghost hud and updates the mob accordingly +/mob/dead/observer/proc/toggle_ghost_hud_flag(toggled) + ghost_hud_flags ^= toggled + if(ghost_hud_flags & GHOST_DATA_HUDS) + show_data_huds() + else + remove_data_huds() + update_sight() + for(var/atom/movable/screen/ghost/hudbox/hud in hud_used?.static_inventory) + if(hud.relevant_flag & toggled) + hud.update_appearance(UPDATE_ICON_STATE) + // This is the ghost's follow verb with an argument /mob/dead/observer/proc/ManualFollow(atom/movable/target) if (!istype(target)) @@ -594,11 +605,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/verb/toggle_ghostsee() set name = "Toggle Ghost Vision" - set desc = "Toggles your ability to see things only ghosts can see, like other ghosts" - set category = "Ghost" - ghostvision = !(ghostvision) + + toggle_ghost_hud_flag(GHOST_VISION) update_sight() - to_chat(usr, span_boldnotice("You [(ghostvision?"now":"no longer")] have ghost vision.")) + to_chat(usr, span_boldnotice("You [(ghost_hud_flags & GHOST_VISION) ? "now" : "no longer"] have ghost vision.")) /mob/dead/observer/verb/toggle_darkness() set name = "Toggle Darkness" @@ -619,7 +629,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(client) ghost_others = client.prefs.ghost_others //A quick update just in case this setting was changed right before calling the proc - if (!ghostvision) + if(!(ghost_hud_flags & GHOST_VISION)) see_invisible = SEE_INVISIBLE_LIVING else see_invisible = SEE_INVISIBLE_OBSERVER @@ -646,7 +656,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(GHOST_OTHERS_SIMPLE) client.images -= GLOB.ghost_images_simple lastsetting = client.prefs.ghost_others - if(!ghostvision) + if(!(ghost_hud_flags & GHOST_VISION)) return if(client.prefs.ghost_others != GHOST_OTHERS_THEIR_SETTING) switch(client.prefs.ghost_others) @@ -744,64 +754,57 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return /mob/dead/observer/proc/show_data_huds() + ghost_hud_flags |= GHOST_DATA_HUDS // only for safety, it should be set already. for(var/hudtype in datahuds) var/datum/atom_hud/H = GLOB.huds[hudtype] H.add_hud_to(src) /mob/dead/observer/proc/remove_data_huds() + ghost_hud_flags &= ~GHOST_DATA_HUDS // only for safety, it should be unset already. for(var/hudtype in datahuds) var/datum/atom_hud/H = GLOB.huds[hudtype] H.remove_hud_from(src) /mob/dead/observer/verb/toggle_data_huds() set name = "Toggle Sec/Med/Diag HUD" - set desc = "Toggles whether you see medical/security/diagnostic HUDs" - set category = "Ghost" - if(data_huds_on) //remove old huds + toggle_ghost_hud_flag(GHOST_DATA_HUDS) + if(ghost_hud_flags & GHOST_DATA_HUDS) remove_data_huds() to_chat(src, span_notice("Data HUDs disabled.")) - data_huds_on = 0 else show_data_huds() to_chat(src, span_notice("Data HUDs enabled.")) - data_huds_on = 1 /mob/dead/observer/verb/toggle_health_scan() set name = "Toggle Health Scan" - set desc = "Toggles whether you health-scan living beings on click" - set category = "Ghost" - if(health_scan) //remove old huds - to_chat(src, span_notice("Health scan disabled.")) - health_scan = FALSE - else + toggle_ghost_hud_flag(GHOST_HEALTH) + if(ghost_hud_flags & GHOST_HEALTH) to_chat(src, span_notice("Health scan enabled.")) - health_scan = TRUE + else + to_chat(src, span_notice("Health scan disabled.")) /mob/dead/observer/verb/toggle_chem_scan() set name = "Toggle Chem Scan" - set desc = "Toggles whether you scan living beings for chemicals and addictions on click" - set category = "Ghost" - if(chem_scan) //remove old huds - to_chat(src, span_notice("Chem scan disabled.")) - chem_scan = FALSE - else + toggle_ghost_hud_flag(GHOST_CHEM) + if(ghost_hud_flags & GHOST_CHEM) to_chat(src, span_notice("Chem scan enabled.")) - chem_scan = TRUE + else + to_chat(src, span_notice("Chem scan disabled.")) /mob/dead/observer/verb/toggle_gas_scan() set name = "Toggle Gas Scan" - set desc = "Toggles whether you analyze gas contents on click" - set category = "Ghost" - if(gas_scan) - to_chat(src, span_notice("Gas scan disabled.")) - gas_scan = FALSE - else + toggle_ghost_hud_flag(GHOST_GAS) + if(ghost_hud_flags & GHOST_GAS) to_chat(src, span_notice("Gas scan enabled.")) - gas_scan = TRUE + else + to_chat(src, span_notice("Gas scan disabled.")) + +/mob/dead/observer/proc/toggle_hud_type(mob/dead/observer/user, hud_type) + user.toggle_ghost_hud_flag(hud_type) /mob/dead/observer/verb/restore_ghost_appearance() set name = "Restore Ghost Character" diff --git a/icons/hud/screen_ghost.dmi b/icons/hud/screen_ghost.dmi index ff14e4e1dd3b341c9df6e4343680c8e4641e38d2..2ba38b33f15ee940ed728712f14d16bcde54b67c 100644 GIT binary patch literal 22161 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 TWo5!wvw$aB2AZ|%c9H)9#^e{z literal 20929 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 Date: Sat, 28 Feb 2026 02:20:23 +0500 Subject: [PATCH 2/7] swap: huds --- code/_onclick/hud/_defines.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 71c062397d8b..316dd894321b 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -160,9 +160,9 @@ #define ui_pai_view_images "SOUTH:6,WEST+13" //Ghosts -#define ui_ghost_respawn "SOUTH:6,CENTER-3:24" -#define ui_ghost_orbit "SOUTH:6,CENTER-2:24" -#define ui_ghost_reenter_corpse "SOUTH:6,CENTER-1:24" +#define ui_ghost_orbit "SOUTH:6,CENTER-3:24" +#define ui_ghost_reenter_corpse "SOUTH:6,CENTER-2:24" +#define ui_ghost_respawn "SOUTH:6,CENTER-1:24" #define ui_dnr "SOUTH:6,CENTER:24" #define ui_ghost_teleport "SOUTH:6,CENTER+1:24" From cbe9a9806bcb514f87806ec248dbab6e4bd590c9 Mon Sep 17 00:00:00 2001 From: KOCMOHABT <25280520+KOCMODECAHTHUK@users.noreply.github.com> Date: Sat, 28 Feb 2026 10:36:05 +0500 Subject: [PATCH 3/7] tweak: simply `if` --- code/modules/mob/dead/observer/observer.dm | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7f8b4c022990..0a5e166007f7 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -771,37 +771,27 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp toggle_ghost_hud_flag(GHOST_DATA_HUDS) if(ghost_hud_flags & GHOST_DATA_HUDS) remove_data_huds() - to_chat(src, span_notice("Data HUDs disabled.")) else show_data_huds() - to_chat(src, span_notice("Data HUDs enabled.")) + to_chat(src, span_notice("Data HUDs [(ghost_hud_flags & GHOST_DATA_HUDS) ? "enabled": "disabled" ].")) /mob/dead/observer/verb/toggle_health_scan() set name = "Toggle Health Scan" toggle_ghost_hud_flag(GHOST_HEALTH) - if(ghost_hud_flags & GHOST_HEALTH) - to_chat(src, span_notice("Health scan enabled.")) - else - to_chat(src, span_notice("Health scan disabled.")) + to_chat(src, span_notice("Health scan [(ghost_hud_flags & GHOST_HEALTH) ? "enabled": "disabled" ].")) /mob/dead/observer/verb/toggle_chem_scan() set name = "Toggle Chem Scan" toggle_ghost_hud_flag(GHOST_CHEM) - if(ghost_hud_flags & GHOST_CHEM) - to_chat(src, span_notice("Chem scan enabled.")) - else - to_chat(src, span_notice("Chem scan disabled.")) + to_chat(src, span_notice("Chem scan [(ghost_hud_flags & GHOST_CHEM) ? "enabled": "disabled" ].")) /mob/dead/observer/verb/toggle_gas_scan() set name = "Toggle Gas Scan" toggle_ghost_hud_flag(GHOST_GAS) - if(ghost_hud_flags & GHOST_GAS) - to_chat(src, span_notice("Gas scan enabled.")) - else - to_chat(src, span_notice("Gas scan disabled.")) + to_chat(src, span_notice("Gas scan [(ghost_hud_flags & GHOST_GAS) ? "enabled": "disabled" ].")) /mob/dead/observer/proc/toggle_hud_type(mob/dead/observer/user, hud_type) user.toggle_ghost_hud_flag(hud_type) From 9e2e25d13575193d6ae1e7f328557d442b4209ad Mon Sep 17 00:00:00 2001 From: KOCMOHABT <25280520+KOCMODECAHTHUK@users.noreply.github.com> Date: Sat, 28 Feb 2026 10:38:56 +0500 Subject: [PATCH 4/7] remove: not actual --- code/modules/mob/dead/observer/observer.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0a5e166007f7..ce703565a36a 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -33,7 +33,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/image/ghostimage_simple = null //this mob with the simple white ghost sprite var/ghostvision = 1 //is the ghost able to see things humans can't? var/mob/observetarget = null //The target mob that the ghost is observing. Used as a reference in logout() - var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD? var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED) //list of data HUDs shown to ghosts. ///Selection: GHOST_DATA_HUDS | GHOST_VISION | GHOST_HEALTH | GHOST_CHEM | GHOST_GAS var/ghost_hud_flags = NONE From 1029d7d5827c8f3b16eb65d2aa9bfe2cde1650f0 Mon Sep 17 00:00:00 2001 From: KOCMOHABT <25280520+KOCMODECAHTHUK@users.noreply.github.com> Date: Mon, 2 Mar 2026 17:42:21 +0500 Subject: [PATCH 5/7] swap: respawn -> teleport --- code/_onclick/hud/_defines.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 316dd894321b..9aff2d57ddb1 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -162,8 +162,8 @@ //Ghosts #define ui_ghost_orbit "SOUTH:6,CENTER-3:24" #define ui_ghost_reenter_corpse "SOUTH:6,CENTER-2:24" -#define ui_ghost_respawn "SOUTH:6,CENTER-1:24" +#define ui_ghost_teleport "SOUTH:6,CENTER-1:24" #define ui_dnr "SOUTH:6,CENTER:24" -#define ui_ghost_teleport "SOUTH:6,CENTER+1:24" +#define ui_ghost_respawn "SOUTH:6,CENTER+1:24" #define ui_wanted_lvl "NORTH,11" From ac327e7e18560c36c968ef996e0b7581614cb7cf Mon Sep 17 00:00:00 2001 From: KOCMOHABT <25280520+KOCMODECAHTHUK@users.noreply.github.com> Date: Mon, 2 Mar 2026 18:22:24 +0500 Subject: [PATCH 6/7] translate: Ugh RLY need this? --- code/modules/mob/dead/observer/observer.dm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index ce703565a36a..90a1caaf6ce4 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -360,18 +360,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!client) return if(!mind || QDELETED(mind.current) || mind.current.loc == null) - to_chat(src, span_warning("You have no body.")) + to_chat(src, span_warning("А тела то и нет.")) return if(!can_reenter_corpse) - to_chat(src, span_warning("You cannot re-enter your body.")) + to_chat(src, span_warning("Не могу вернуться в тело.")) return if(mind.current.key && mind.current.key[1] != "@") //makes sure we don't accidentally kick any clients - to_chat(usr, span_warning("Another consciousness is in your body...It is resisting you.")) + to_chat(usr, span_warning("Кто-то уже копается в моём теле... Оно отвергает меня.")) return client.view_size.setDefault(getScreenSize(client.prefs.widescreenpref))//Let's reset so people can't become allseeing gods SStgui.on_transfer(src, mind.current) // Transfer NanoUIs. if(mind.current.stat == DEAD && SSlag_switch.measures[DISABLE_DEAD_KEYLOOP]) - to_chat(src, span_warning("To leave your body again use the Ghost verb.")) + to_chat(src, span_warning("Чтобы покинуть тело используй кнопку Призрак.")) mind.current.key = key mind.current.client.init_verbs() mind.current.ignore_SSD = FALSE @@ -383,10 +383,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!client) return if(!can_reenter_corpse) - to_chat(usr, span_warning("You're already stuck out of your body!")) + to_chat(usr, span_warning("Да я как бы уже!")) return FALSE - var/response = tgui_alert(src, "Are you sure you want to prevent (almost) all means of resuscitation? This cannot be undone. ","Are you sure you want to stay dead?", list("DNR","Save Me")) + var/response = tgui_alert(src, "Отменяем возможность возродиться?\nОБРАТНОГО ПУТИ НЕ БУДЕТ!", "Умираем?", list("DNR", "Я передумал")) if(response != "DNR") return @@ -397,7 +397,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp // Disassociates observer mind from the body mind mind = null - to_chat(src, span_boldnotice("You can no longer be brought back into your body.")) + to_chat(src, span_boldnotice("Связь с телом потеряна. Приятного времяпрепровождения.")) return TRUE /mob/dead/observer/proc/notify_cloning(message, sound, atom/source, flashwindow = TRUE) @@ -541,8 +541,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/verb/respawn() if(can_reenter_corpse && client?.holder) - var/poll_client = tgui_alert(usr, "Returning to the title screen will forfeit any possible revival. Are you sure?", "Confirmation", list("Yes", "No")) - if(poll_client == "No") + var/poll_client = tgui_alert(usr, "Возврат в лобби-меню, это отменит возможность возрождение этим персонажем.\nВы ТОЧНО уверены?", "Респавн", list("Верни меня в лобби", "Я передумал")) + if(poll_client == "Я передумал") return abandon_mob() From 12af0649c51f8a17f14f4b78624c013ae107e8ab Mon Sep 17 00:00:00 2001 From: KOCMOHABT <25280520+KOCMODECAHTHUK@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:07:39 +0500 Subject: [PATCH 7/7] add: ALERT RESPAWN --- code/modules/mob/dead/observer/observer.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 90a1caaf6ce4..f02576717419 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -540,10 +540,12 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(A, span_danger("This mob is not located in the game world.")) /mob/dead/observer/verb/respawn() - if(can_reenter_corpse && client?.holder) - var/poll_client = tgui_alert(usr, "Возврат в лобби-меню, это отменит возможность возрождение этим персонажем.\nВы ТОЧНО уверены?", "Респавн", list("Верни меня в лобби", "Я передумал")) - if(poll_client == "Я передумал") - return + if(!client) + return + var/poll_client = tgui_alert(usr, "Возврат в лобби-меню, это отменит возможность возрождение этим персонажем.\nВы ТОЧНО уверены?", "Респавн", list("Верни меня в лобби", "Я передумал")) + if(poll_client != "Верни меня в лобби") + return + abandon_mob() /mob/dead/observer/verb/change_view_range()