From 9257165053fc36b0f081f8461baa8325a4550ad6 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Sun, 25 Aug 2024 05:11:12 -0400 Subject: [PATCH 01/15] ghost qol --- code/_compile_options.dm | 2 +- .../client/preferences/monochrome_ghost.dm | 7 +- .../modules/mob/dead/new_player/new_player.dm | 3 +- code/modules/mob/dead/observer/login.dm | 3 +- code/modules/mob/dead/observer/observer.dm | 134 ++++++++++++++---- code/modules/mob/living/death.dm | 1 + code/modules/mob/mob.dm | 2 +- code/modules/mob/mob_defines.dm | 2 + code/modules/mob/mob_say.dm | 20 +-- 9 files changed, 124 insertions(+), 50 deletions(-) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index cc59b091b212..28b79e8fa1ec 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -162,7 +162,7 @@ /////////////////////// MISC PERFORMANCE //uncomment this to load centcom and runtime station and thats it. -// #define LOWMEMORYMODE +#define LOWMEMORYMODE //uncomment to enable the spatial grid debug proc. // #define SPATIAL_GRID_ZLEVEL_STATS diff --git a/code/modules/client/preferences/monochrome_ghost.dm b/code/modules/client/preferences/monochrome_ghost.dm index 9bd55927b6d9..d1c894d91cf6 100644 --- a/code/modules/client/preferences/monochrome_ghost.dm +++ b/code/modules/client/preferences/monochrome_ghost.dm @@ -10,9 +10,4 @@ if(!istype(M)) return - if(value && !M.started_as_observer) - if(locate(/datum/client_colour/ghostmono) in M.client_colours) - return - M.add_client_colour(/datum/client_colour/ghostmono) - else - M.remove_client_colour(/datum/client_colour/ghostmono) + M.update_monochrome() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index ac4571bbc85b..d75f97302113 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -76,10 +76,11 @@ stack_trace("There's no freaking observer landmark available on this map or you're making observers before the map is initialised") observer.key = key observer.client = client - observer.restore_ghost_appearance() + if(observer.client && observer.client.prefs) observer.set_real_name(observer.client.prefs.read_preference(/datum/preference/name/real_name)) observer.client.init_verbs() + observer.stop_sound_channel(CHANNEL_LOBBYMUSIC) deadchat_broadcast(" has observed.", "[observer.real_name]", follow_target = observer, turf_target = get_turf(observer), message_type = DEADCHAT_DEATHRATTLE) QDEL_NULL(mind) diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index b49495836d0c..4ebc0f6a1b36 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -16,5 +16,4 @@ client.set_right_click_menu_mode(FALSE) lighting_alpha = default_lighting_alpha() update_sight() - - + update_monochrome() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 180b95e9e03a..86f672f7dc34 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -3,6 +3,10 @@ GLOBAL_LIST_EMPTY(ghost_images_robust) //this is a list of all ghost images as a GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) +GLOBAL_VAR_INIT(ghost_adjectives, __ghost_adjectives()) +GLOBAL_VAR_INIT(ghost_synonyms, __ghost_synonyms()) +GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) + /mob/dead/observer name = "ghost" desc = "It's a g-g-g-g-ghooooost!" //jinkies! @@ -24,12 +28,25 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) light_on = FALSE shift_to_open_context_menu = FALSE simulated = FALSE + var/can_reenter_corpse var/datum/hud/living/carbon/hud = null // hud var/bootime = 0 - 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 ghost - 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. + + /// Prefixed adjective to the ghost's name + var/ghost_adjective = "" + /// name = "[ghost_adjective] [ghost_term] of [real_name]" + var/ghost_term = "" + + //This variable is set to 1 when you enter the game as an observer. + //If you died in the game and are a ghost - this will remain false. + //Note that this is not a reliable way to determine if admins started as observers, since they change mobs a lot. + var/started_as_observer = FALSE + /// Was this ghost spawned using the admin ghost command. + var/admin_ghost = FALSE + #warn TODO + var/exorcised = FALSE + var/atom/movable/following = null var/fun_verbs = 0 @@ -48,8 +65,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/datum/spawners_menu/spawners_menu var/datum/minigames_menu/minigames_menu -/mob/dead/observer/Initialize(mapload, started_as_observer = FALSE) +/mob/dead/observer/Initialize(mapload, started_as_observer = FALSE, admin_ghost = FALSE) src.started_as_observer = started_as_observer + src.admin_ghost = admin_ghost set_invisibility(GLOB.observer_default_invisibility) @@ -59,27 +77,42 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /mob/dead/observer/proc/tray_view, /mob/dead/observer/proc/open_minigames_menu)) + ghost_term = pick(GLOB.ghost_synonyms) + ghost_adjective = pick(GLOB.ghost_adjectives) + var/turf/T var/mob/body = loc + var/mind_or_body_name + if(ismob(body)) T = get_turf(body) //Where is the body located? + mind = body.mind //we don't transfer the mind but we keep a reference to it. + set_suicide(body.suiciding) // Transfer whether they committed suicide. + gender = body.gender + + // Pick a name if(body.mind && body.mind.name) if(body.mind.ghostname) - name = body.mind.ghostname + mind_or_body_name = body.mind.ghostname else - name = body.mind.name + mind_or_body_name = body.mind.name else if(body.real_name) - name = body.real_name + mind_or_body_name = body.real_name else - name = random_unique_name(gender) + mind_or_body_name = random_unique_name(gender) - mind = body.mind //we don't transfer the mind but we keep a reference to it. + // If they actually died in round, copy their body. + if(!(started_as_observer || admin_ghost)) + set_ghost_appearance(body) + ghost_adjective = pick(GLOB.fresh_ghost_adjectives) - set_suicide(body.suiciding) // Transfer whether they committed suicide. - set_ghost_appearance(body) + if(!mind_or_body_name) //To prevent nameless ghosts + mind_or_body_name = random_unique_name(gender) + + set_real_name(mind_or_body_name) if(!T || is_secret_level(T.z)) var/list/turfs = get_area_turfs(/area/shuttle/arrival) @@ -90,10 +123,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) abstract_move(T) - if(!name) //To prevent nameless ghosts - name = random_unique_name(gender) - real_name = name - if(!fun_verbs) remove_verb(src, /mob/dead/observer/verb/boo) remove_verb(src, /mob/dead/observer/verb/possess) @@ -129,6 +158,18 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) ) AddComponent(/datum/component/spooky_powers, powers) +/mob/dead/observer/Destroy() + if(data_huds_on) + remove_data_huds() + + // Update our old body's medhud since we're abandoning it + if(mind?.current) + mind.current.med_hud_set_status() + + QDEL_NULL(spawners_menu) + QDEL_NULL(minigames_menu) + return ..() + /mob/dead/observer/get_photo_description(obj/item/camera/camera) if(!invisibility || camera.see_ghosts) return "You can also see a g-g-g-g-ghooooost!" @@ -139,17 +180,26 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) animate(src, color = old_color, time = 10, flags = ANIMATION_PARALLEL) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 10) -/mob/dead/observer/Destroy() - if(data_huds_on) - remove_data_huds() +/mob/dead/observer/get_visible_name() + return "[ghost_adjective] [ghost_term] of [real_name]" - // Update our old body's medhud since we're abandoning it - if(mind?.current) - mind.current.med_hud_set_status() +/mob/dead/observer/update_name(updates) + . = ..() + deadchat_name = name - QDEL_NULL(spawners_menu) - QDEL_NULL(minigames_menu) - return ..() +/// Adds or removes the monochrome filter based on certain traits. +/mob/dead/observer/proc/update_monochrome() + if(admin_ghost || started_as_observer) + remove_client_colour(/datum/client_colour/ghostmono) + return + + if(exorcised || client?.prefs?.read_preference(/datum/preference/toggle/monochrome_ghost) == FALSE) // Null != false + remove_client_colour(/datum/client_colour/ghostmono) + return + + add_client_colour(/datum/client_colour/ghostmono) + +/mob/dead/observer/proc/exorcise() /* * Increase the brightness of a color by calculating the average distance between the R, G and B values, @@ -211,7 +261,7 @@ Works together with spawning an observer, noted above. ethereal_heart.stop_crystalization_process(crystal_fella) //stops the crystallization process stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now - var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc. + var/mob/dead/observer/ghost = new(src, FALSE, admin_ghost) // Transfer safety to observer spawning proc. SStgui.on_transfer(src, ghost) // Transfer NanoUIs. ghost.can_reenter_corpse = can_reenter_corpse ghost.key = key @@ -219,10 +269,6 @@ Works together with spawning an observer, noted above. if(!can_reenter_corpse)// Disassociates observer mind from the body mind ghost.mind = null - if(!admin_ghost) - if(!ghost.client?.prefs || ghost.client.prefs.read_preference(/datum/preference/toggle/monochrome_ghost)) - ghost.add_client_colour(/datum/client_colour/ghostmono) - return ghost /mob/living/ghostize(can_reenter_corpse = TRUE, admin_ghost) @@ -701,6 +747,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, span_notice("Gas scan enabled.")) gas_scan = TRUE +#warn move to admin verbs /mob/dead/observer/verb/restore_ghost_appearance() set name = "Restore Ghost Character" set desc = "Sets your deadchat name and ghost appearance to your \ @@ -713,7 +760,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp deadchat_name = real_name if(mind) mind.ghostname = real_name - name = real_name + set_real_name(real_name) client.prefs.apply_prefs_to(template) set_ghost_appearance(template) @@ -984,3 +1031,30 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/hear_location() return observetarget || orbit_target || ..() + +/proc/__ghost_synonyms() + return list( + "ghost", + "spirit", + "phantom", + ) + +/proc/__ghost_adjectives() + return list( + "fleeting", + "wayward", + "weak", + "fading", + "ephemeral", + "passing", + "wandering", + "restful", + ) + +/proc/__fresh_ghost_adjectives() + return list( + "restless", + "troubled", + "unruly", + "disturbed", + ) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 1d3ce451e6d7..6411752d736e 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -72,6 +72,7 @@ set_stat(DEAD) unset_machine() + died_as_name = name timeofdeath = world.time tod = stationtime2text() var/turf/T = get_turf(src) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d1dafa252c85..fd7d726a2da3 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1178,7 +1178,7 @@ if(change_name) name = real_name if(update_name) - update_name() + update_appearance(UPDATE_NAME) /** * Fully update the name of a mob diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 8b8b8c8cab28..ee85ed3bbe68 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -93,6 +93,8 @@ var/eye_blurry = 0 //Carbon /// What is the mobs real name (name is overridden for disguises etc) var/real_name = null + /// The name this mob had when it died. + var/died_as_name = "" /** * back up of the real name during admin possession diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 62efd9e78949..529046110181 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -65,9 +65,6 @@ ///Speak as a dead person (ghost etc) /mob/proc/say_dead(message) - var/name = real_name - var/alt_name = "" - if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, span_danger("Speech is currently admin-disabled.")) return @@ -94,19 +91,24 @@ if(src.client.handle_spam_prevention(message,MUTE_DEADCHAT)) return + var/display_name = real_name + var/name_append = "" var/mob/dead/observer/O = src if(isobserver(src) && O.deadchat_name) - name = "[O.deadchat_name]" + display_name = "[O.deadchat_name]" + if(real_name != died_as_name) + name_append = " (died as [died_as_name])" else if(mind?.name) - name = "[mind.name]" + display_name = "[mind.name]" else - name = real_name - if(name != real_name) - alt_name = " (died as [real_name])" + display_name = real_name + + if(display_name != died_as_name) + name_append = " (died as [died_as_name])" var/spanned = say_quote(say_emphasis(message)) - var/source = "DEAD: [name][alt_name]" + var/source = "DEAD: [display_name][name_append]" var/rendered = " [emoji_parse(spanned)]" log_talk(message, LOG_SAY, tag="DEAD") if(SEND_SIGNAL(src, COMSIG_MOB_DEADSAY, message) & MOB_DEADSAY_SIGNAL_INTERCEPT) From b4abaf9ee5da1930205900937e827e8397df85e8 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Sun, 25 Aug 2024 05:20:36 -0400 Subject: [PATCH 02/15] fixes --- code/modules/mob/dead/observer/observer.dm | 1 + code/modules/mob/mob_defines.dm | 2 +- code/modules/mob/mob_say.dm | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 86f672f7dc34..c795dcf4046e 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -91,6 +91,7 @@ GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) set_suicide(body.suiciding) // Transfer whether they committed suicide. gender = body.gender + died_as_name = body.died_as_name // Pick a name if(body.mind && body.mind.name) diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index ee85ed3bbe68..2d46f25bed14 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -93,7 +93,7 @@ var/eye_blurry = 0 //Carbon /// What is the mobs real name (name is overridden for disguises etc) var/real_name = null - /// The name this mob had when it died. + /// The name this mob had when it died. Used by dead say. var/died_as_name = "" /** diff --git a/code/modules/mob/mob_say.dm b/code/modules/mob/mob_say.dm index 529046110181..8129c2f6118e 100644 --- a/code/modules/mob/mob_say.dm +++ b/code/modules/mob/mob_say.dm @@ -96,7 +96,7 @@ var/mob/dead/observer/O = src if(isobserver(src) && O.deadchat_name) display_name = "[O.deadchat_name]" - if(real_name != died_as_name) + if(died_as_name && (real_name != died_as_name)) name_append = " (died as [died_as_name])" else if(mind?.name) From a259e4a4b8c0c4edbef33e7fd6c07a1372aef63a Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Sun, 25 Aug 2024 16:29:07 -0400 Subject: [PATCH 03/15] update_name -> update_appearance(UPDATE_NAME) --- .../skill_modifiers/rpg_modifiers.dm | 9 ++++++ code/game/machinery/doors/airlock.dm | 1 - code/game/objects/items/cigs_lighters.dm | 8 ++--- code/game/objects/structures/door_assembly.dm | 4 +-- code/modules/admin/verbs/possess.dm | 2 +- .../atmospherics/machinery/atmosmachinery.dm | 4 +-- .../components/binary_devices/dp_vent_pump.dm | 2 +- .../components/unary_devices/vent_pump.dm | 2 +- .../components/unary_devices/vent_scrubber.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 29 ++++++++++++++----- .../mob/living/carbon/human/init_signals.dm | 2 +- .../mob/living/carbon/human/inventory.dm | 6 ++-- code/modules/mob/living/carbon/inventory.dm | 2 +- .../mob/living/simple_animal/slime/death.dm | 2 +- .../mob/living/simple_animal/slime/powers.dm | 2 +- .../mob/living/simple_animal/slime/slime.dm | 2 +- code/modules/mod/mod_link.dm | 2 +- .../chemistry/recipes/slime_extracts.dm | 2 +- .../reagents/reagent_containers/blood_pack.dm | 2 +- .../surgery/bodyparts/dismemberment.dm | 2 +- code/modules/vehicles/mecha/_mecha.dm | 4 +-- 21 files changed, 56 insertions(+), 35 deletions(-) diff --git a/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm b/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm index 1e5c4e82b4b7..9f87df1e73e3 100644 --- a/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm +++ b/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm @@ -1,3 +1,12 @@ +/proc/status_effect_to_viewers(target, mod_path, message, range = world.view, exclude_mobs) + for(var/mob/living/M in viewers(target, range) - exclude_mobs) + if(M.is_blind() || M.stat != CONSCIOUS) + continue + + M.apply_status_effect(mod_path) + if(message) + to_chat(M, message) + /datum/status_effect/stat_mod tick_interval = -1 status_type = STATUS_EFFECT_MULTIPLE diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index b5b3b23602f3..69c92e4caa12 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1397,7 +1397,6 @@ A.state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS A.created_name = name A.previous_assembly = previous_airlock - A.update_name() A.update_appearance() if(!disassembled) diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm index 2cbeedb09a30..0154703142c2 100644 --- a/code/game/objects/items/cigs_lighters.dm +++ b/code/game/objects/items/cigs_lighters.dm @@ -636,11 +636,11 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/cigarette/pipe/Initialize(mapload) . = ..() - update_name() + update_appearance(UPDATE_NAME) /obj/item/clothing/mask/cigarette/pipe/update_name() - . = ..() name = packeditem ? "[packeditem]-packed [initial(name)]" : "empty [initial(name)]" + return ..() /obj/item/clothing/mask/cigarette/pipe/put_out(mob/user, done_early = FALSE) lit = FALSE @@ -672,7 +672,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM to_chat(user, span_notice("You stuff [to_smoke] into [src].")) smoketime = 13 MINUTES packeditem = to_smoke.name - update_name() + update_appearance(UPDATE_NAME) if(to_smoke.reagents) to_smoke.reagents.trans_to(src, to_smoke.reagents.total_volume, transfered_by = user) qdel(to_smoke) @@ -686,7 +686,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM packeditem = null smoketime = 0 reagents.clear_reagents() - update_name() + update_appearance(UPDATE_NAME) return return ..() diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index c0c5b6ad3ed4..43677ca85494 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -45,7 +45,6 @@ has_fill_overlays = initial(airlock_cast.has_fill_overlays) update_appearance() - update_name() AddComponent(/datum/component/simple_rotation) @@ -299,7 +298,7 @@ qdel(src) else return ..() - update_name() + update_appearance() /obj/structure/door_assembly/update_overlays() @@ -350,7 +349,6 @@ target.electronics = source.electronics source.electronics.forceMove(target) target.update_appearance() - target.update_name() qdel(source) /obj/structure/door_assembly/deconstruct(disassembled = TRUE) diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index bbc9e5ddc3e4..77580942e269 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -36,7 +36,7 @@ usr.name_archive = "" if(ishuman(usr)) var/mob/living/carbon/human/H = usr - H.update_name() + H.update_appearance(UPDATE_NAME) usr.forceMove(get_turf(usr.control_object)) usr.reset_perspective() diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 2e27df677ca1..0db1ed9d366e 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -66,7 +66,7 @@ /obj/machinery/atmospherics/LateInitialize() . = ..() - update_name() + update_appearance(UPDATE_NAME) /obj/machinery/atmospherics/examine(mob/user) . = ..() @@ -482,7 +482,7 @@ GLOBAL_REAL_VAR(atmos_machinery_default_armor) = list(BLUNT = 25, PUNCTURE = 10, if(can_unwrench) add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY) pipe_color = obj_color - update_name() + update_appearance(UPDATE_NAME) set_piping_layer(set_layer) atmos_init() var/list/nodes = pipeline_expansion() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 4307a6456d13..ed8a5b0f36f3 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -166,7 +166,7 @@ var/area/vent_area = get_area(src) if(!GLOB.air_vent_names[id_tag]) - update_name() + update_appearance(UPDATE_NAME) GLOB.air_vent_names[id_tag] = name vent_area.air_vent_info[id_tag] = signal.data diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 79581bf2a7c7..f18cd3cc23ad 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -197,7 +197,7 @@ if(!GLOB.air_vent_names[id_tag]) // If we do not have a name, assign one. // Produces names like "Port Quarter Solar vent pump hZ2l6". - update_name() + update_appearance(UPDATE_NAME) GLOB.air_vent_names[id_tag] = name vent_area.air_vent_info[id_tag] = signal.data diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 15782cf01762..042e99dc3678 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -170,7 +170,7 @@ var/area/scrub_area = get_area(src) if(!GLOB.air_scrub_names[id_tag]) // If we do not have a name, assign one - update_name() + update_appearance(UPDATE_NAME) GLOB.air_scrub_names[id_tag] = name scrub_area.air_scrub_info[id_tag] = signal.data diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c795dcf4046e..1ed5cdb21c85 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -188,6 +188,11 @@ GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) . = ..() deadchat_name = name +/// Helper for setting can_reenter_corpse to FALSE +/mob/dead/observer/proc/unset_reenter_corpse() + can_reenter_corpse = FALSE + mind = null + /// Adds or removes the monochrome filter based on certain traits. /mob/dead/observer/proc/update_monochrome() if(admin_ghost || started_as_observer) @@ -200,7 +205,20 @@ GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) add_client_colour(/datum/client_colour/ghostmono) -/mob/dead/observer/proc/exorcise() +/// Exorcise the ghost. +/mob/dead/observer/proc/exorcise(mob/living/priest) + exorcised = TRUE + + unset_reenter_corpse() + update_monochrome() + qdel(GetComponent(/datum/component/spooky_powers)) + + ghost_adjective = pick(GLOB.ghost_adjectives) + update_appearance(UPDATE_NAME) + set_ghost_appearance(null) + + if(priest) + deadchat_broadcast("'s restless spirit has been put to rest by [priest.name].", real_name, priest, message_type = DEADCHAT_ANNOUNCEMENT) /* * Increase the brightness of a color by calculating the average distance between the R, G and B values, @@ -264,11 +282,10 @@ Works together with spawning an observer, noted above. stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now var/mob/dead/observer/ghost = new(src, FALSE, admin_ghost) // Transfer safety to observer spawning proc. SStgui.on_transfer(src, ghost) // Transfer NanoUIs. - ghost.can_reenter_corpse = can_reenter_corpse ghost.key = key ghost.client?.init_verbs() - if(!can_reenter_corpse)// Disassociates observer mind from the body mind - ghost.mind = null + if(!can_reenter_corpse) + ghost.unset_reenter_corpse() return ghost @@ -392,13 +409,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(response != "DNR") return - can_reenter_corpse = FALSE // Update med huds var/mob/living/carbon/current = mind.current current.med_hud_set_status() - // Disassociates observer mind from the body mind - mind = null + unset_reenter_corpse() to_chat(src, span_boldnotice("You can no longer be brought back into your body.")) return TRUE diff --git a/code/modules/mob/living/carbon/human/init_signals.dm b/code/modules/mob/living/carbon/human/init_signals.dm index 8930a920b5c1..0a649c6fbe91 100644 --- a/code/modules/mob/living/carbon/human/init_signals.dm +++ b/code/modules/mob/living/carbon/human/init_signals.dm @@ -12,4 +12,4 @@ /mob/living/carbon/human/proc/do_name_update(datum/source) SIGNAL_HANDLER - update_name() + update_appearance(UPDATE_NAME) diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 2e9d027d20db..f1985589f44e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -317,14 +317,14 @@ belt = null if(!QDELETED(src)) update_slots_for_item(I, ITEM_SLOT_BELT) - update_name() + update_appearance(UPDATE_NAME) else if(I == wear_id) wear_id = null sec_hud_set_ID() if(!QDELETED(src)) update_slots_for_item(I, ITEM_SLOT_ID) - update_name() + update_appearance(UPDATE_NAME) else if(I == r_store) r_store = null @@ -389,7 +389,7 @@ if(I.flags_inv & HIDEEYES) update_worn_glasses() sec_hud_set_security_status() - update_name() + update_appearance(UPDATE_NAME) ..() /mob/living/carbon/human/proc/equipOutfit(outfit, visualsOnly = FALSE) diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index c07590a4e1a6..c451784d7ad4 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -354,7 +354,7 @@ // Update name if we are changing face visibility var/face_coverage_changed = updated_slots & HIDEFACE if(face_coverage_changed) - update_name() + update_appearance(UPDATE_NAME) // Update body incase any bodyparts or organs changed visibility var/bodypart_coverage_changed = updated_slots & BODYPART_HIDE_FLAGS diff --git a/code/modules/mob/living/simple_animal/slime/death.dm b/code/modules/mob/living/simple_animal/slime/death.dm index 5d5845c41d3d..eb6bca29f604 100644 --- a/code/modules/mob/living/simple_animal/slime/death.dm +++ b/code/modules/mob/living/simple_animal/slime/death.dm @@ -15,7 +15,7 @@ E.Grant(src) revive(full_heal = TRUE, admin_revive = FALSE) regenerate_icons() - update_name() + update_appearance(UPDATE_NAME) return if(buckled) diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 4bfbc9cbd1f3..18c121f22e5b 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -144,7 +144,7 @@ var/datum/action/innate/slime/reproduce/reproduce_action = new reproduce_action.Grant(src) regenerate_icons() - update_name() + update_appearance(UPDATE_NAME) else to_chat(src, "I am not ready to evolve yet...") else diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index e1b890be7330..32b4831a15c3 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -119,7 +119,7 @@ /mob/living/simple_animal/slime/proc/set_colour(new_colour) colour = new_colour - update_name() + update_appearance(UPDATE_NAME) slime_mutation = mutation_table(colour) var/sanitizedcolour = replacetext(colour, " ", "") coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") diff --git a/code/modules/mod/mod_link.dm b/code/modules/mod/mod_link.dm index 7e913d6d1af1..bd0f982b87c9 100644 --- a/code/modules/mod/mod_link.dm +++ b/code/modules/mod/mod_link.dm @@ -190,7 +190,7 @@ return label = new_label balloon_alert(user, "name set") - update_name() + update_appearance(UPDATE_NAME) /obj/item/clothing/neck/link_scryer/process(delta_time) if(!mod_link.link_call) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index 5a0c26afb685..c38eaca92dfe 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -326,7 +326,7 @@ if(slime.docile) //Undoes docility, but doesn't make rabid. slime.visible_message(span_danger("[slime] forgets its training, becoming wild once again!")) slime.docile = FALSE - slime.update_name() + slime.update_appearance(UPDATE_NAME) continue slime.rabid = 1 slime.visible_message(span_danger("The [slime] is driven into a frenzy!")) diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index aece6ffc508c..77767f20eb8f 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -91,6 +91,6 @@ balloon_alert(user, "new label set") else labelled = FALSE - update_name() + update_appearance(UPDATE_NAME) else return ..() diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 5a50f16ca43c..e83aa54587dd 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -318,7 +318,7 @@ var/mob/living/carbon/human/old_owner = owner . = ..() - old_owner.update_name() + old_owner.update_appearance(UPDATE_NAME) if(!special) if(brain?.brainmob) diff --git a/code/modules/vehicles/mecha/_mecha.dm b/code/modules/vehicles/mecha/_mecha.dm index 1bdd88087196..6b2d63d1eafd 100644 --- a/code/modules/vehicles/mecha/_mecha.dm +++ b/code/modules/vehicles/mecha/_mecha.dm @@ -1276,7 +1276,7 @@ A.rounds = A.rounds - ammo_needed if(A.custom_materials) A.set_custom_materials(A.custom_materials, A.rounds / initial(A.rounds)) - A.update_name() + A.update_appearance(UPDATE_NAME) return TRUE if(A.direct_load) @@ -1287,7 +1287,7 @@ to_chat(user, span_notice("You add [A.rounds] [A.ammo_type][A.rounds > 1?"s":""] to the [gun.name]")) A.rounds = 0 A.set_custom_materials(list(/datum/material/iron=2000)) - A.update_name() + A.update_appearance(UPDATE_NAME) return TRUE if(!fail_chat_override) if(found_gun) From 93249c9b00befc73e6fd2eb17247254ace9ba5d6 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Mon, 26 Aug 2024 14:34:22 -0400 Subject: [PATCH 04/15] ghosts inherit speech verbs --- code/modules/mob/dead/observer/observer.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 1ed5cdb21c85..aed8e16ee194 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -287,6 +287,11 @@ Works together with spawning an observer, noted above. if(!can_reenter_corpse) ghost.unset_reenter_corpse() + ghost.verb_say = verb_say + ghost.verb_exclaim = verb_exclaim + ghost.verb_sing = verb_sing + ghost.verb_whisper = verb_whisper + ghost.verb_yell = verb_yell return ghost /mob/living/ghostize(can_reenter_corpse = TRUE, admin_ghost) From 5ac22cb3e1ac0cbab40423aabd39dc7f32abb94c Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Mon, 26 Aug 2024 15:03:45 -0400 Subject: [PATCH 05/15] unset on exorcism --- code/modules/mob/dead/observer/observer.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index aed8e16ee194..4edeb9832ef9 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -214,6 +214,12 @@ GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) qdel(GetComponent(/datum/component/spooky_powers)) ghost_adjective = pick(GLOB.ghost_adjectives) + verb_say = initial(verb_say) + verb_exclaim = initial(verb_exclaim) + verb_sing = initial(verb_sing) + verb_whisper = initial(verb_whisper) + verb_yell = initial(verb_yell) + update_appearance(UPDATE_NAME) set_ghost_appearance(null) From 2dbd9f3f523f5c4514525991c0c6d600d15ddfcb Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Tue, 27 Aug 2024 16:37:22 -0400 Subject: [PATCH 06/15] move to admin fun --- code/modules/admin/admin_verbs.dm | 1 + code/modules/admin/verbs/adminfun.dm | 25 ++++++++++++++++++++++ code/modules/mob/dead/observer/observer.dm | 19 ---------------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 069ff70a16e6..d7a10893082f 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/admin_away, /client/proc/add_mob_ability, /client/proc/set_title_music, + /client/proc/restore_ghost_character, /datum/admins/proc/station_traits_panel, )) GLOBAL_PROTECT(admin_verbs_fun) diff --git a/code/modules/admin/verbs/adminfun.dm b/code/modules/admin/verbs/adminfun.dm index cca3bd276521..8e9374ddbbb2 100644 --- a/code/modules/admin/verbs/adminfun.dm +++ b/code/modules/admin/verbs/adminfun.dm @@ -249,3 +249,28 @@ message_admins(msg) admin_ticket_log(whom, msg) log_admin("[key_name(src)] punished [key_name(whom)] with [punishment].") + +/client/proc/restore_ghost_character() + set category = "Admin.Fun" + set name = "Restore Ghost Character" + set desc = "Sets your deadchat name and ghost appearance to your \ + roundstart character." + + if(!check_rights()) + return + + if(!isobserver(mob)) + return + + var/mob/dead/observer/observer_mob = mob + var/mob/living/carbon/human/dummy/consistent/template = new + if(prefs) + var/real_name = prefs.read_preference(/datum/preference/name/real_name) + observer_mob.deadchat_name = real_name + if(observer_mob.mind) + observer_mob.mind.ghostname = real_name + observer_mob.set_real_name(real_name) + prefs.apply_prefs_to(template) + + observer_mob.set_ghost_appearance(template) + qdel(template) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4edeb9832ef9..fdfa58c20461 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -774,25 +774,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, span_notice("Gas scan enabled.")) gas_scan = TRUE -#warn move to admin verbs -/mob/dead/observer/verb/restore_ghost_appearance() - set name = "Restore Ghost Character" - set desc = "Sets your deadchat name and ghost appearance to your \ - roundstart character." - set category = "Ghost" - - var/mob/living/carbon/human/dummy/consistent/template = new - if(client?.prefs) - var/real_name = client.prefs.read_preference(/datum/preference/name/real_name) - deadchat_name = real_name - if(mind) - mind.ghostname = real_name - set_real_name(real_name) - client.prefs.apply_prefs_to(template) - - set_ghost_appearance(template) - qdel(template) - /mob/dead/observer/proc/set_ghost_appearance(mob/living/to_copy) if(!to_copy || !to_copy.icon) icon = initial(icon) From febbf4efe19910afc02645fc8b320427d6f31088 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Tue, 27 Aug 2024 19:53:51 -0400 Subject: [PATCH 07/15] progress on sanctification --- code/__DEFINES/status_effects.dm | 2 + code/datums/status_effects/_status_effect.dm | 10 +++- .../status_effects/_status_effect_helpers.dm | 5 ++ .../skill_modifiers/negative.dm | 23 +-------- .../skill_modifiers/positive.dm | 9 ++++ .../skill_modifiers/rpg_modifiers.dm | 1 - code/modules/mob/dead/observer/observer.dm | 11 +++-- code/modules/mob/living/carbon/human/death.dm | 10 ---- .../mob/living/carbon/human/status_procs.dm | 12 ----- code/modules/surgery/new_surgery/sanctify.dm | 45 ++++++++++++++++++ code/modules/surgery/organs/fake_heart.dm | 20 ++++++++ code/modules/surgery/organs/heart.dm | 9 ++-- daedalus.dme | 3 ++ goon/sounds/ghostrespawn.ogg | Bin 0 -> 25445 bytes icons/obj/surgery.dmi | Bin 51314 -> 46943 bytes 15 files changed, 107 insertions(+), 53 deletions(-) create mode 100644 code/datums/status_effects/skill_modifiers/positive.dm create mode 100644 code/modules/surgery/new_surgery/sanctify.dm create mode 100644 code/modules/surgery/organs/fake_heart.dm create mode 100644 goon/sounds/ghostrespawn.ogg diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 7f22ae63eeeb..588403bde53f 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -6,6 +6,8 @@ #define STATUS_EFFECT_REPLACE 2 /// if it only allows one, and new instances just instead refresh the timer #define STATUS_EFFECT_REFRESH 3 +/// if it only allows one, and new instances add to the timer +#define STATUS_EFFECT_EXTEND 4 ///Processing flags - used to define the speed at which the status will work ///This is fast - 0.2s between ticks (I believe!) diff --git a/code/datums/status_effects/_status_effect.dm b/code/datums/status_effects/_status_effect.dm index 438d498bb0b0..0bded6ef0486 100644 --- a/code/datums/status_effects/_status_effect.dm +++ b/code/datums/status_effects/_status_effect.dm @@ -129,12 +129,20 @@ /// Called when a status effect of status_type STATUS_EFFECT_REFRESH /// has its duration refreshed in apply_status_effect - is passed New() args -/datum/status_effect/proc/refresh(effect, ...) +/datum/status_effect/proc/refresh(mob/living/parent, effect_path, ...) var/original_duration = initial(duration) if(original_duration == -1) return duration = world.time + original_duration +/// Called when a status effect of status_type STATUS_EFFECT_EXTEND +/// has its duration extended in apply_status_effect - is passed New() args +/datum/status_effect/proc/extend(mob/living/parent, effect_path, ...) + var/original_duration = initial(duration) + if(original_duration == -1) + return + duration += original_duration + /// Adds nextmove modifier multiplicatively to the owner while applied /datum/status_effect/proc/nextmove_modifier() return 1 diff --git a/code/datums/status_effects/_status_effect_helpers.dm b/code/datums/status_effects/_status_effect_helpers.dm index 9cd5f4f3c866..4b6358c72ded 100644 --- a/code/datums/status_effects/_status_effect_helpers.dm +++ b/code/datums/status_effects/_status_effect_helpers.dm @@ -35,8 +35,13 @@ existing_effect.be_replaced() // Refresh the existing type, then early return if(STATUS_EFFECT_REFRESH) + arguments.Insert(1, new_effect) existing_effect.refresh(arglist(arguments)) return + if(STATUS_EFFECT_EXTEND) + arguments.Insert(1, new_effect) + existing_effect.extend(arglist(arguments)) + return // Create the status effect with our mob + our arguments var/datum/status_effect/new_instance = new new_effect(arguments) diff --git a/code/datums/status_effects/skill_modifiers/negative.dm b/code/datums/status_effects/skill_modifiers/negative.dm index efe160a74d5f..7797b4c78b07 100644 --- a/code/datums/status_effects/skill_modifiers/negative.dm +++ b/code/datums/status_effects/skill_modifiers/negative.dm @@ -1,22 +1 @@ -/datum/status_effect/skill_mod/witness_death - status_type = STATUS_EFFECT_REFRESH - duration = 20 MINUTES - - skill_path = /datum/rpg_skill/willpower - modify_amt = -1 - source = SKILL_SOURCE_WITNESS_DEATH - -/datum/status_effect/skill_mod/witness_death/on_apply() - if(!owner.stats.cooldown_finished("death_resolve")) - return FALSE - return ..() - -/datum/status_effect/skill_mod/witness_death/on_remove() - var/datum/roll_result/result = owner.stat_roll(13, /datum/rpg_skill/willpower) - switch(result.outcome) - if(CRIT_SUCCESS, SUCCESS) - to_chat(owner, result.create_tooltip("You come to terms with past events, strengthing your resolve for the road ahead.")) - owner.stats.set_cooldown("death_resolve", INFINITY) - owner.stats.set_skill_modifier(1, /datum/rpg_skill/willpower, SKILL_SOURCE_DEATH_RESOLVE) - - return ..() +//placeholder file diff --git a/code/datums/status_effects/skill_modifiers/positive.dm b/code/datums/status_effects/skill_modifiers/positive.dm new file mode 100644 index 000000000000..e4185eef3f41 --- /dev/null +++ b/code/datums/status_effects/skill_modifiers/positive.dm @@ -0,0 +1,9 @@ +/// Reward for sanctifying corpses +/datum/status_effect/skill_mod/sanctify_corpse + duration = 20 MINUTES + status_type = STATUS_EFFECT_EXTEND + + skill_path = /datum/rpg_skill/willpower + modify_amt = 1 + source = "Sanctified a corpse." + diff --git a/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm b/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm index 9f87df1e73e3..020461df6195 100644 --- a/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm +++ b/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm @@ -50,4 +50,3 @@ /datum/status_effect/skill_mod/on_remove() owner.stats.remove_skill_modifier(skill_path, source) - diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index fdfa58c20461..5ae6bf75fb25 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -223,6 +223,8 @@ GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) update_appearance(UPDATE_NAME) set_ghost_appearance(null) + playsound_local(src, 'goon/sounds/ghostrespawn.ogg', 50, FALSE, pressure_affected = FALSE) + if(priest) deadchat_broadcast("'s restless spirit has been put to rest by [priest.name].", real_name, priest, message_type = DEADCHAT_ANNOUNCEMENT) @@ -288,16 +290,17 @@ Works together with spawning an observer, noted above. stop_sound_channel(CHANNEL_HEARTBEAT) //Stop heartbeat sounds because You Are A Ghost Now var/mob/dead/observer/ghost = new(src, FALSE, admin_ghost) // Transfer safety to observer spawning proc. SStgui.on_transfer(src, ghost) // Transfer NanoUIs. - ghost.key = key - ghost.client?.init_verbs() - if(!can_reenter_corpse) - ghost.unset_reenter_corpse() ghost.verb_say = verb_say ghost.verb_exclaim = verb_exclaim ghost.verb_sing = verb_sing ghost.verb_whisper = verb_whisper ghost.verb_yell = verb_yell + if(!can_reenter_corpse) + ghost.exorcise() + + ghost.key = key + ghost.client?.init_verbs() return ghost /mob/living/ghostize(can_reenter_corpse = TRUE, admin_ghost) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 2c75a1848720..e754caf91937 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -51,16 +51,6 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) to_chat(src, span_warning("You have died. Barring complete bodyloss, you can in most cases be revived by other players. If you do not wish to be brought back, use the \"Do Not Resuscitate\" verb in the ghost tab.")) - for(var/mob/living/L in viewers(src, world.view) - src) - if(L.is_blind() || L.stat != CONSCIOUS || !L.client) - continue - - var/datum/roll_result/result = L.stat_roll(7, /datum/rpg_skill/willpower) - switch(result.outcome) - if(FAILURE, CRIT_FAILURE) - if(L.apply_status_effect(/datum/status_effect/skill_mod/witness_death)) - to_chat(L, result.create_tooltip("For but a moment, there is nothing. Nothing but the gnawing realisation of what you have just witnessed.")) - /mob/living/carbon/human/proc/makeSkeleton() ADD_TRAIT(src, TRAIT_DISFIGURED, TRAIT_GENERIC) set_species(/datum/species/skeleton) diff --git a/code/modules/mob/living/carbon/human/status_procs.dm b/code/modules/mob/living/carbon/human/status_procs.dm index 3abf1865c581..8f1077fcb631 100644 --- a/code/modules/mob/living/carbon/human/status_procs.dm +++ b/code/modules/mob/living/carbon/human/status_procs.dm @@ -38,15 +38,3 @@ . = ..() if(.) update_body_parts() - -/mob/living/carbon/human/fakedeath(source, silent) - . = ..() - for(var/mob/living/L in viewers(src, world.view) - src) - if(L.is_blind() || L.stat != CONSCIOUS || !L.client) - continue - - var/datum/roll_result/result = L.stat_roll(6, /datum/rpg_skill/willpower) - switch(result.outcome) - if(FAILURE, CRIT_FAILURE) - if(L.apply_status_effect(/datum/status_effect/skill_mod/witness_death)) - to_chat(L, result.create_tooltip("For but a moment, there is nothing. Nothing but the gnawing realisation of what you have just witnessed.")) diff --git a/code/modules/surgery/new_surgery/sanctify.dm b/code/modules/surgery/new_surgery/sanctify.dm new file mode 100644 index 000000000000..1f051b70e83f --- /dev/null +++ b/code/modules/surgery/new_surgery/sanctify.dm @@ -0,0 +1,45 @@ +/datum/surgery_step/sanctify + can_infect = 0 + surgery_flags = SURGERY_CANNOT_FAIL + min_duration = 1 SECOND + max_duration = 2 SECONDS + + allowed_tools = list() + +/datum/surgery_step/sanctify/assess_bodypart(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + var/obj/item/bodypart/affected = ..() + if(!istype(affected, /obj/item/bodypart/chest)) + return FALSE + + return TRUE + +/datum/surgery_step/sanctify/pre_surgery_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + if(target.stat != DEAD) + to_chat(user, span_warning("They are not yet ready to pass over.")) + return FALSE + + if(!target.getorganslot(ORGAN_SLOT_BRAIN)) + to_chat(user, span_warning("They cannot be sanctified without their brain.")) + return FALSE + + if(!istype(target.getorganslot(ORGAN_SLOT_HEART), /obj/item/organ/heart/fake)) + to_chat(user, span_warning("They cannot be sanctified without perennial heart.")) + return FALSE + return TRUE + +/datum/surgery_step/sanctify/succeed_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) + . = ..() + var/mob/dead/observer/ghost = target.grab_ghost() || target.ghostize() + if(ghost) + ghost.exorcise() + + status_effect_to_viewers( + target, + /datum/status_effect/skill_mod/sanctify_corpse, + span_statsgood("You feel at peace."), + ) + + + + + diff --git a/code/modules/surgery/organs/fake_heart.dm b/code/modules/surgery/organs/fake_heart.dm new file mode 100644 index 000000000000..245494739bce --- /dev/null +++ b/code/modules/surgery/organs/fake_heart.dm @@ -0,0 +1,20 @@ +/obj/item/organ/heart/fake + name = "perennial heart" + desc = "A symbollic heart made out of wood. To be placed inside those who have been laid to rest in the great pool." + icon_state = "heart-on" + base_icon_state = "heart" + visual = FALSE + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_FAKE_HEART + + cosmetic_only = TRUE + relative_size = 0 + + organ_flags = ORGAN_DEAD | ORGAN_SYNTHETIC + maxHealth = 1 + +/obj/item/organ/heart/fake/is_working() + return FALSE + +/obj/item/organ/heart/fake/set_organ_dead(failing) + return FALSE diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index af8e39031208..3cf9114a2eb1 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -214,7 +214,8 @@ /obj/item/organ/heart/cybernetic name = "basic cybernetic heart" desc = "A basic electronic device designed to mimic the functions of an organic human heart." - icon_state = "heart-c" + base_icon_state = "heart-c" + icon_state = "heart-c-on" organ_flags = ORGAN_SYNTHETIC var/dose_available = FALSE @@ -225,7 +226,8 @@ /obj/item/organ/heart/cybernetic/tier2 name = "cybernetic heart" desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma." - icon_state = "heart-c-u" + icon_state = "heart-c-u-on" + base_icon_state = "heart-c-u" maxHealth = 60 dose_available = TRUE emp_vulnerability = 40 @@ -233,7 +235,8 @@ /obj/item/organ/heart/cybernetic/tier3 name = "upgraded cybernetic heart" desc = "An electronic device designed to mimic the functions of an organic human heart. Also holds an emergency dose of epinephrine, used automatically after facing severe trauma. This upgraded model can regenerate its dose after use." - icon_state = "heart-c-u2" + icon_state = "heart-c-u2-on" + base_icon_state = "heart-c-u2" maxHealth = 90 dose_available = TRUE emp_vulnerability = 20 diff --git a/daedalus.dme b/daedalus.dme index 3d9e6b2fd266..e6ab01fbe12f 100644 --- a/daedalus.dme +++ b/daedalus.dme @@ -1200,6 +1200,7 @@ #include "code\datums\status_effects\debuffs\speech_debuffs.dm" #include "code\datums\status_effects\debuffs\strandling.dm" #include "code\datums\status_effects\skill_modifiers\negative.dm" +#include "code\datums\status_effects\skill_modifiers\positive.dm" #include "code\datums\status_effects\skill_modifiers\rpg_modifiers.dm" #include "code\datums\storage\storage.dm" #include "code\datums\storage\subtypes\backpack.dm" @@ -4358,6 +4359,7 @@ #include "code\modules\surgery\new_surgery\remove_embedded.dm" #include "code\modules\surgery\new_surgery\ribcage.dm" #include "code\modules\surgery\new_surgery\robotics.dm" +#include "code\modules\surgery\new_surgery\sanctify.dm" #include "code\modules\surgery\new_surgery\tend_wounds.dm" #include "code\modules\surgery\organs\_organ.dm" #include "code\modules\surgery\organs\appendix.dm" @@ -4369,6 +4371,7 @@ #include "code\modules\surgery\organs\cell.dm" #include "code\modules\surgery\organs\ears.dm" #include "code\modules\surgery\organs\eyes.dm" +#include "code\modules\surgery\organs\fake_heart.dm" #include "code\modules\surgery\organs\heart.dm" #include "code\modules\surgery\organs\helpers.dm" #include "code\modules\surgery\organs\kidneys.dm" diff --git a/goon/sounds/ghostrespawn.ogg b/goon/sounds/ghostrespawn.ogg new file mode 100644 index 0000000000000000000000000000000000000000..486be89527f0a54df0b254249760b83f40640300 GIT binary patch literal 25445 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 literal 51314 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

(Ik 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

n@A26EphmH6zwkS8}5)>t%pCT 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 sA#jUzwhngc6IEhfzW8q$1(W0s@dJDnpIj&O3 Date: Tue, 27 Aug 2024 20:13:58 -0400 Subject: [PATCH 08/15] more exorcism mechanics --- code/modules/mob/dead/observer/observer.dm | 14 +++++++++++--- code/modules/mob/living/carbon/human/death.dm | 3 +++ code/modules/mob/living/death.dm | 4 ++-- code/modules/surgery/organs/fake_heart.dm | 5 +---- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 5ae6bf75fb25..824fa48f376b 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -223,7 +223,16 @@ GLOBAL_VAR_INIT(fresh_ghost_adjectives, __fresh_ghost_adjectives()) update_appearance(UPDATE_NAME) set_ghost_appearance(null) - playsound_local(src, 'goon/sounds/ghostrespawn.ogg', 50, FALSE, pressure_affected = FALSE) + if(client) + // tgchat displays doc strings with formatting, so we do stupid shit instead + var/list/text = list( + "

[span_statsgood("You were laid to rest.")]
", + "
", + span_obviousnotice("Your soul has moved on from the mortal realm, and may no longer interact with it. You may now return to the lobby, and begin anew."), + ) + to_chat(src, examine_block(jointext(text, ""))) + + playsound_local(src, 'goon/sounds/ghostrespawn.ogg', 50, FALSE, pressure_affected = FALSE) if(priest) deadchat_broadcast("'s restless spirit has been put to rest by [priest.name].", real_name, priest, message_type = DEADCHAT_ANNOUNCEMENT) @@ -427,8 +436,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/mob/living/carbon/current = mind.current current.med_hud_set_status() - unset_reenter_corpse() - to_chat(src, span_boldnotice("You can no longer be brought back into your body.")) + exorcise() return TRUE /mob/dead/observer/proc/notify_revival(message, sound, atom/source, flashwindow = TRUE) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 316fee89b227..8cec1ce03139 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -69,6 +69,9 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) /mob/living/carbon/human/proc/show_death_stats(mob/user) var/list/scan = time_of_death_stats + if(!length(scan)) + return + var/list/ui_content = list() var/datum/browser/popup = new(user, "timeofdeathinfo", "Time of Death Information", 600, 800) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 830c35bed9bc..43b66cb94c16 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -79,8 +79,8 @@ // tgchat displays doc strings with formatting, so we do stupid shit instead var/list/death_message = list( - "
[span_statsbad("You Died")]
", - "
[span_statsbad("Cause of Death: [cause_of_death]")]
", + "
[span_statsbad("You Died")]
", + "
[span_statsbad("Cause of Death: [cause_of_death]")]
", "
", span_obviousnotice("Your story may not be over yet. You are able to be resuscitated as long as your brain was not destroyed, and you have not been dead for 10 minutes."), ) diff --git a/code/modules/surgery/organs/fake_heart.dm b/code/modules/surgery/organs/fake_heart.dm index 245494739bce..2622726d2070 100644 --- a/code/modules/surgery/organs/fake_heart.dm +++ b/code/modules/surgery/organs/fake_heart.dm @@ -3,9 +3,6 @@ desc = "A symbollic heart made out of wood. To be placed inside those who have been laid to rest in the great pool." icon_state = "heart-on" base_icon_state = "heart" - visual = FALSE - zone = BODY_ZONE_CHEST - slot = ORGAN_SLOT_FAKE_HEART cosmetic_only = TRUE relative_size = 0 @@ -16,5 +13,5 @@ /obj/item/organ/heart/fake/is_working() return FALSE -/obj/item/organ/heart/fake/set_organ_dead(failing) +/obj/item/organ/heart/fake/set_organ_dead(failing, cause_of_death) return FALSE From 1e6d9d066cd74b90bdaf484375e66d155408ca18 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Tue, 27 Aug 2024 20:30:26 -0400 Subject: [PATCH 09/15] death stinger --- code/modules/mob/living/death.dm | 2 ++ goon/sounds/revfocus.ogg | Bin 0 -> 21600 bytes 2 files changed, 2 insertions(+) create mode 100644 goon/sounds/revfocus.ogg diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 43b66cb94c16..25165affa66e 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -93,6 +93,8 @@ death_message = examine_block(jointext(death_message, "")) to_chat(src, death_message) + playsound_local(src, 'goon/sounds/revfocus.ogg', 50, vary = FALSE, pressure_affected = FALSE) + var/turf/T = get_turf(src) if(mind && mind.name && mind.active && !istype(T.loc, /area/centcom/ctf)) diff --git a/goon/sounds/revfocus.ogg b/goon/sounds/revfocus.ogg new file mode 100644 index 0000000000000000000000000000000000000000..92a6a1839e12e68642a01e19e808cb6f725b8478 GIT binary patch literal 21600 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 Date: Tue, 27 Aug 2024 21:22:18 -0400 Subject: [PATCH 10/15] headless ghost tech --- code/datums/mind.dm | 3 +++ code/datums/status_effects/debuffs/debuffs.dm | 2 +- code/modules/mob/dead/observer/observer.dm | 10 ++++++---- code/modules/mob/living/brain/brain_item.dm | 6 ++++++ code/modules/mob/living/death.dm | 8 +++++--- code/modules/mob/living/living_defines.dm | 7 ++++--- code/modules/mob/living/status_procs.dm | 4 ++-- 7 files changed, 27 insertions(+), 13 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 64840acd27c7..d35c02506d6b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -36,6 +36,9 @@ var/mob/living/current var/active = FALSE + /// A copy of a corpse appearance, set when transferring a mind to a brainmob. + var/mutable_appearance/body_appearance + ///a list of /datum/memories. assoc type of memory = memory datum. only one type of memory will be stored, new ones of the same type overriding the last. var/list/memories = list() ///reference to the memory panel tgui diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index d7a939f18dea..bedee1a24d85 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -217,7 +217,7 @@ var/delta = world.time - last_dead_time var/new_timeofdeath = owner.timeofdeath + delta owner.timeofdeath = new_timeofdeath - owner.tod = stationtime2text(reference_time=new_timeofdeath) + owner.timeofdeath_as_ingame = stationtime2text(reference_time=new_timeofdeath) last_dead_time = null if(owner.stat == DEAD) last_dead_time = world.time diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 824fa48f376b..78335794f5af 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -786,15 +786,17 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp gas_scan = TRUE /mob/dead/observer/proc/set_ghost_appearance(mob/living/to_copy) - if(!to_copy || !to_copy.icon) + var/mutable_appearance/appearance = to_copy?.mind?.body_appearance || to_copy + + if(!appearance || !appearance.icon) icon = initial(icon) icon_state = "ghost" alpha = 255 overlays.Cut() else - icon = to_copy.icon - icon_state = to_copy.icon_state - overlays = to_copy.overlays + icon = appearance.icon + icon_state = appearance.icon_state + overlays = appearance.overlays alpha = 127 /mob/dead/observer/canUseTopic(atom/movable/target, flags) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index bc6e27d8a4ff..adca2e9fc94b 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -119,10 +119,12 @@ return if(!L.mind) return + brainmob = new(src) brainmob.set_real_name(L.real_name) brainmob.timeofhostdeath = L.timeofdeath brainmob.suiciding = suicided + if(L.has_dna()) var/mob/living/carbon/C = L if(!brainmob.stored_dna) @@ -130,8 +132,12 @@ C.dna.copy_dna(brainmob.stored_dna) if(HAS_TRAIT(L, TRAIT_BADDNA)) LAZYSET(brainmob.status_traits, TRAIT_BADDNA, L.status_traits[TRAIT_BADDNA]) + if(L.mind && L.mind.current) + if(!QDELETED(L)) + L.mind.body_appearance = L.appearance L.mind.transfer_to(brainmob) + to_chat(brainmob, span_notice("You feel slightly disoriented. That's normal when you're just a brain.")) /obj/item/organ/brain/attackby(obj/item/O, mob/user, params) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 25165affa66e..c44cfe8eb6f3 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -75,7 +75,7 @@ died_as_name = name timeofdeath = world.time - tod = stationtime2text() + timeofdeath_as_ingame = stationtime2text() // tgchat displays doc strings with formatting, so we do stupid shit instead var/list/death_message = list( @@ -97,8 +97,10 @@ var/turf/T = get_turf(src) - if(mind && mind.name && mind.active && !istype(T.loc, /area/centcom/ctf)) - deadchat_broadcast(" has died at [get_area_name(T)].", "[mind.name]", follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) + if(mind && mind.name && mind.active) + if(!istype(T.loc, /area/centcom/ctf)) + deadchat_broadcast(" has died at [get_area_name(T)].", "[mind.name]", follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE) + if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP] && !client?.holder) to_chat(src, span_deadsay(span_big("Observer freelook is disabled.\nPlease use Orbit, Teleport, and Jump to look around."))) ghostize(TRUE) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 4ae25f4f7b56..6c87b3668707 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -64,13 +64,14 @@ DEFINE_INTERACTABLE(/mob/living) var/hallucination = 0 ///Directly affects how long a mob will hallucinate for var/last_special = 0 ///Used by the resist verb, likely used to prevent players from bypassing next_move by logging in/out. + /// Time of death as world.time var/timeofdeath = 0 /// Helper vars for quick access to firestacks, these should be updated every time firestacks are adjusted var/on_fire = FALSE var/fire_stacks = 0 - /** + /** mind.mob_appearance = appearance * Allows mobs to move through dense areas without restriction. For instance, in space or out of holder objects. * * FALSE is off, [INCORPOREAL_MOVE_BASIC] is normal, [INCORPOREAL_MOVE_SHADOW] is for ninjas @@ -90,8 +91,8 @@ DEFINE_INTERACTABLE(/mob/living) var/cameraFollow = null - /// Time of death - var/tod = null + /// Time of death in the in-game time format + var/timeofdeath_as_ingame = null var/limb_destroyer = 0 //1 Sets AI behavior that allows mobs to target and dismember limbs with their basic attack. diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 2072d982deb6..b0c13b9e69c0 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -657,7 +657,7 @@ REMOVE_TRAIT(src, TRAIT_FAKEDEATH, source) REMOVE_TRAIT(src, TRAIT_DEATHCOMA, source) if(stat != DEAD) - tod = null + timeofdeath_as_ingame = null /// Induces fake death on a living mob. /mob/living/proc/fakedeath(source, silent = FALSE) @@ -667,7 +667,7 @@ emote("deathgasp") ADD_TRAIT(src, TRAIT_FAKEDEATH, source) ADD_TRAIT(src, TRAIT_DEATHCOMA, source) - tod = stationtime2text() + timeofdeath_as_ingame = stationtime2text() ///Unignores all slowdowns that lack the IGNORE_NOSLOW flag. From 2456c0bfc302f86518f47c0a8245d183d3ea62fc Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:30:07 -0400 Subject: [PATCH 11/15] low memory mode warns --- code/_compile_options.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 28b79e8fa1ec..ff1e09cfbf39 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -243,6 +243,7 @@ #ifdef LOWMEMORYMODE #define FORCE_MAP "runtimestation" #define FORCE_MAP_DIRECTORY "_maps" +#warn LOW MEMORY MODE ENABLED. #endif #ifdef DEBUG From 73bb0905c0c6eb037b73ee928fe72643f6414009 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:52:24 -0400 Subject: [PATCH 12/15] robots dont understand spirituality --- .../datums/status_effects/skill_modifiers/rpg_modifiers.dm | 2 +- code/modules/surgery/new_surgery/sanctify.dm | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm b/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm index 020461df6195..671806011dbb 100644 --- a/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm +++ b/code/datums/status_effects/skill_modifiers/rpg_modifiers.dm @@ -1,5 +1,5 @@ /proc/status_effect_to_viewers(target, mod_path, message, range = world.view, exclude_mobs) - for(var/mob/living/M in viewers(target, range) - exclude_mobs) + for(var/mob/living/carbon/human/M in viewers(target, range) - exclude_mobs) if(M.is_blind() || M.stat != CONSCIOUS) continue diff --git a/code/modules/surgery/new_surgery/sanctify.dm b/code/modules/surgery/new_surgery/sanctify.dm index 1f051b70e83f..f1551cb1588e 100644 --- a/code/modules/surgery/new_surgery/sanctify.dm +++ b/code/modules/surgery/new_surgery/sanctify.dm @@ -33,10 +33,17 @@ if(ghost) ghost.exorcise() + // Robots don't understand + var/list/exclude = list() + for(var/mob/living/carbon/human/H in viewers(world.view, target)) + if(isipc(H)) + exclude += H + status_effect_to_viewers( target, /datum/status_effect/skill_mod/sanctify_corpse, span_statsgood("You feel at peace."), + exclude = exclude, ) From 142adc38d55cd4691cb9da90e82683b6ec61f6f6 Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Tue, 27 Aug 2024 21:54:03 -0400 Subject: [PATCH 13/15] bug fix --- code/modules/mob/dead/observer/observer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 78335794f5af..ed1844a20c05 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -470,10 +470,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(usr, span_warning("Not when you're not dead!")) return var/list/filtered = list() - for(var/V in GLOB.sortedAreas) - var/area/A = V + for(var/area/A in get_sorted_areas()) if(!(A.area_flags & HIDDEN_AREA)) filtered += A + var/area/thearea = tgui_input_list(usr, "Area to jump to", "BOOYEA", filtered) if(isnull(thearea)) From 9388bb205a2e02cf252a177e80f0d085360767eb Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Wed, 28 Aug 2024 12:40:01 -0400 Subject: [PATCH 14/15] bug --- code/modules/mob/dead/new_player/new_player.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index d75f97302113..b7032a824cf3 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -60,7 +60,7 @@ if(QDELETED(src) || !src.client || (!skip_check && (this_is_like_playing_right != "Yes"))) ready = PLAYER_NOT_READY src << browse(null, "window=playersetup") //closes the player setup window - npp.open() + npp?.open() return FALSE var/mob/dead/observer/observer = new(null, TRUE) From a1aa9a8e1ebffc8de48e930aed378cd03a97aa9c Mon Sep 17 00:00:00 2001 From: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Date: Thu, 29 Aug 2024 22:01:22 -0400 Subject: [PATCH 15/15] sanctify WIP --- code/modules/surgery/new_surgery/sanctify.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/new_surgery/sanctify.dm b/code/modules/surgery/new_surgery/sanctify.dm index f1551cb1588e..c2df96e220f6 100644 --- a/code/modules/surgery/new_surgery/sanctify.dm +++ b/code/modules/surgery/new_surgery/sanctify.dm @@ -43,7 +43,7 @@ target, /datum/status_effect/skill_mod/sanctify_corpse, span_statsgood("You feel at peace."), - exclude = exclude, + exclude_mobs = exclude, )