diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index f8c0615ef95..21f80375063 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -113,6 +113,13 @@ var/list/_client_preferences_by_type enabled_description = "Visible" disabled_description = "Hidden" enabled_by_default = FALSE + +/datum/client_preference/ghost_see_whisubtle + description = "See subtles/whispers as ghost" + key = "GHOST_SEE_WHISUBTLE" + enabled_description = "Visible" + disabled_description = "Hidden" + enabled_by_default = TRUE //VOREStation Add End /datum/client_preference/weather_sounds description ="Weather sounds" @@ -373,7 +380,7 @@ var/list/_client_preferences_by_type key = "RECEIVE_TIPS" enabled_description = "Enabled" disabled_description = "Disabled" - + /datum/client_preference/pain_frequency description = "Pain Messages Cooldown" key = "PAIN_FREQUENCY" diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm index 5de49fd1c15..99e81035092 100644 --- a/code/modules/client/preferences_vr.dm +++ b/code/modules/client/preferences_vr.dm @@ -88,6 +88,21 @@ feedback_add_details("admin_verb","TWhisubtleVis") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/verb/toggle_ghost_privacyvision() + set name = "Toggle Ghost Private Eyes/ears" + set category = "Preferences" + set desc = "Toggles your ability to see subtles/whispers. Overrides admin status. Respects Ghost Privacy" + + var/pref_path = /datum/client_preference/ghost_see_whisubtle + + toggle_preference(pref_path) + + to_chat(src, "As a ghost, you will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear subtles/whispers made by players.") + + SScharacter_setup.queue_preferences_save(prefs) + + feedback_add_details("admin_verb","TGhostSeeWhisSubtle") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /client/verb/toggle_capture_crystal() set name = "Toggle Catchable" set category = "Preferences" diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index e6f3c5edeed..04a257cc5d4 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -363,7 +363,8 @@ var/list/channel_to_radio_key = new if(M && src) //If we still exist, when the spawn processes //VOREStation Add - Ghosts don't hear whispers - if(whispering && !is_preference_enabled(/datum/client_preference/whisubtle_vis) && isobserver(M) && !M.client?.holder) + if(whispering && isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \ + (!is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder))) M.show_message("[src.name] [w_not_heard].", 2) return //VOREStation Add End diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index e692cc107bd..86d9d833346 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -513,7 +513,8 @@ if (istype(G, /mob/new_player)) continue else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears)) - if(is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder) + if((is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder) && \ + G.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle)) to_chat(G, "[src.name]'s screen prints, \"[message]\"") /mob/living/silicon/pai/proc/touch_window(soft_name) //This lets us touch TGUI procs and windows that may be nested behind other TGUI procs and windows diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm index e7e0e9ecca7..54b63aef977 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/alien animals/stardog.dm @@ -500,7 +500,8 @@ for(var/mob/M as anything in vis_mobs) if(isnewplayer(M)) continue - if(isobserver(M) && !L.is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder) + if(isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \ + !L.is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder)) spawn(0) M.show_message(undisplayed_message, 2) else @@ -1171,7 +1172,8 @@ for(var/mob/M as anything in vis_mobs) if(isnewplayer(M)) continue - if(isobserver(M) && !L.is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder) + if(isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \ + !L.is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder)) spawn(0) M.show_message(undisplayed_message, 2) else diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index efbd0c308ed..ce58e3d8517 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -200,7 +200,8 @@ for(var/mob/M as anything in vis_mobs) if(isnewplayer(M)) continue - if(isobserver(M) && !is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder) + if(isobserver(M) && (!M.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle) || \ + !is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder)) spawn(0) M.show_message(undisplayed_message, 2) else @@ -341,7 +342,8 @@ for (var/mob/G in player_list) if (istype(G, /mob/new_player)) continue - else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears)) + else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears && \ + G.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle))) if(is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder) to_chat(G, "\The [M] thinks, \"[message]\"") log_say(message,M) @@ -438,7 +440,8 @@ for (var/mob/G in player_list) if (istype(G, /mob/new_player)) continue - else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears)) + else if(isobserver(G) && G.is_preference_enabled(/datum/client_preference/ghost_ears && \ + G.is_preference_enabled(/datum/client_preference/ghost_see_whisubtle))) if(is_preference_enabled(/datum/client_preference/whisubtle_vis) || G.client.holder) to_chat(G, "\The [M] [message]") log_say(message,M)