diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 890725fbb1..974d870a8a 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -401,6 +401,9 @@ SUBSYSTEM_DEF(ticker)
qdel(player)
living.notransform = TRUE
if(living.client)
+ if (living.client.prefs && living.client.prefs.auto_ooc)
+ if (living.client.prefs.chat_toggles & CHAT_OOC)
+ living.client.prefs.chat_toggles ^= CHAT_OOC
var/obj/screen/splash/S = new(living.client, TRUE)
S.Fade(TRUE)
livings += living
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index d1b4e51a7d..a0aa729a8d 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -135,6 +135,9 @@
if(L.client && L.client.prefs)
L.canbearoused = L.client.prefs.arousable //Technically this should make taking over a character mean the body gain the new minds setting...
L.update_arousal_hud() //Removes the old icon
+ if (L.client.prefs.auto_ooc)
+ if (L.client.prefs.chat_toggles & CHAT_OOC)
+ L.client.prefs.chat_toggles ^= CHAT_OOC
SEND_SIGNAL(src, COMSIG_MIND_TRANSFER, new_character, old_character)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 53fdb315b5..f08112939a 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -492,7 +492,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
message_admins("[key_name_admin(usr)] assumed direct control of [M].")
log_admin("[key_name(usr)] assumed direct control of [M].")
var/mob/adminmob = src.mob
- M.ckey = src.ckey
+ adminmob.transfer_ckey(M, send_signal = FALSE)
if( isobserver(adminmob) )
qdel(adminmob)
SSblackbox.record_feedback("tally", "admin_verb", 1, "Assume Direct Control") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 00cc01105d..bbb58b4341 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -841,6 +841,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Lewdchem:[lewdchem == TRUE ? "Enabled" : "Disabled"]
"
dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
"
dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
"
+ dat += "Auto OOC: [auto_ooc ? "Enabled" : "Disabled"]
"
dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
"
if (user && user.client && !user.client.prefs.screenshake==0)
dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
"
@@ -2069,6 +2070,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
user.client.change_view(CONFIG_GET(string/default_view))
if("autostand")
autostand = !autostand
+ if("auto_ooc")
+ auto_ooc = !auto_ooc
if ("screenshake")
var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num
if (!isnull(desiredshake))
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index c88d246b96..db60cb70f3 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -183,6 +183,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
S["cit_toggles"] >> cit_toggles
S["lewdchem"] >> lewdchem
S["preferred_chaos"] >> preferred_chaos
+ S["auto_ooc"] >> auto_ooc
//try to fix any outdated data if necessary
@@ -219,7 +220,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref))
autostand = sanitize_integer(autostand, 0, 1, initial(autostand))
cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles))
-
+ auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc))
return 1
@@ -280,6 +281,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
WRITE_FILE(S["cit_toggles"], cit_toggles)
WRITE_FILE(S["lewdchem"], lewdchem)
WRITE_FILE(S["preferred_chaos"], preferred_chaos)
+ WRITE_FILE(S["auto_ooc"], auto_ooc)
return 1
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 2b9b01dc18..1e13f6fa57 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -281,6 +281,9 @@ Works together with spawning an observer, noted above.
ghost.reenter_round_timeout = world.realtime + penalty
if(ghost.reenter_round_timeout - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
ghost.reenter_round_timeout = CANT_REENTER_ROUND
+ if (client && client.prefs && client.prefs.auto_ooc)
+ if (!(client.prefs.chat_toggles & CHAT_OOC))
+ client.prefs.chat_toggles ^= CHAT_OOC
transfer_ckey(ghost, FALSE)
return ghost
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 8345ef916d..1c6546fd83 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -91,7 +91,9 @@
if(mind && mind.name && mind.active && !istype(T.loc, /area/ctf) && !(signal & COMPONENT_BLOCK_DEATH_BROADCAST))
var/rendered = "[mind.name] has died at [get_area_name(T)]."
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
-
+ if (client && client.prefs && client.prefs.auto_ooc)
+ if (!(client.prefs.chat_toggles & CHAT_OOC))
+ client.prefs.chat_toggles ^= CHAT_OOC
if (client)
client.move_delay = initial(client.move_delay)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 1a3f2fca3b..427e30f2e2 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -459,6 +459,11 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA
if(!ckey || !new_mob)
CRASH("transfer_ckey() called [ckey ? "" : "on a ckey-less mob[new_mob ? "" : " and "]"][new_mob ? "" : "without a valid mob target"]!")
SEND_SIGNAL(new_mob, COMSIG_MOB_PRE_PLAYER_CHANGE, new_mob, src)
+ if (client && client.prefs && client.prefs.auto_ooc)
+ if (client.prefs.chat_toggles & CHAT_OOC && isliving(new_mob))
+ client.prefs.chat_toggles ^= CHAT_OOC
+ if (!(client.prefs.chat_toggles & CHAT_OOC) && isdead(new_mob))
+ client.prefs.chat_toggles ^= CHAT_OOC
new_mob.ckey = ckey
if(send_signal)
SEND_SIGNAL(src, COMSIG_MOB_KEY_CHANGE, new_mob, src)
diff --git a/modular_citadel/code/modules/client/preferences.dm b/modular_citadel/code/modules/client/preferences.dm
index 29f8a113e8..6c3467125a 100644
--- a/modular_citadel/code/modules/client/preferences.dm
+++ b/modular_citadel/code/modules/client/preferences.dm
@@ -15,6 +15,7 @@
var/arousable = TRUE
var/widescreenpref = TRUE
var/autostand = TRUE
+ var/auto_ooc = FALSE
var/lewdchem = FALSE
//vore prefs