diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm
index e6e62280e2..e6fad08971 100644
--- a/code/modules/client/verbs/looc.dm
+++ b/code/modules/client/verbs/looc.dm
@@ -37,12 +37,13 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
to_chat(src, "Advertising other servers is not allowed.")
log_admin("[key_name(src)] has attempted to advertise in LOOC: [msg]")
return
- if(mob.stat)
- to_chat(src, "You cannot use LOOC while unconscious or dead.")
- return
- if(isdead(mob))
- to_chat(src, "You cannot use LOOC while ghosting.")
- return
+ //if(mob.stat)
+ // to_chat(src, "You cannot use LOOC while unconscious or dead.")
+ // return
+ //if(isdead(mob))
+ // to_chat(src, "You cannot use LOOC while ghosting.")
+ // return
+ //GS13 - removed LOOC limits for ghosts (paraphrased from old code)
if(HAS_TRAIT(mob, TRAIT_LOOC_MUTE))
to_chat(src, "You cannot use LOOC right now.")
return
@@ -52,29 +53,21 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC")
mob.log_talk(msg,LOG_OOC, tag="LOOC")
- var/list/heard = get_hearers_in_view(7, get_top_level_mob(src.mob))
- for(var/mob/M in heard)
- if(!M.client)
+ // GS13 - LOOC tweaks - Observers, mobs in containers can properly hear LOOC
+ // Search everything in the view for anything that might be a mob, or contain a mob.
+ var/list/client/targets = list()
+ var/list/turf/in_view = list()
+ for(var/turf/viewed_turf in view(get_turf(mob)))
+ in_view[viewed_turf] = TRUE
+ for(var/client/client in GLOB.clients)
+ if(!client.mob || !(client.prefs.toggles & CHAT_OOC) || (client in GLOB.admins))
continue
- var/client/C = M.client
- if (C in GLOB.admins)
- continue //they are handled after that
+ if(in_view[get_turf(client.mob)])
+ targets |= client
+ to_chat(client, "LOOC: [src.mob.name]: [msg]")
- if (isobserver(M))
- continue //Also handled later.
-
- if(C.prefs.chat_toggles & CHAT_OOC)
- if(GLOB.LOOC_COLOR)
- to_chat(C, "LOOC: [src.mob.name]: [msg]")
- else
- to_chat(C, "LOOC: [src.mob.name]: [msg]")
-
- for(var/client/C in GLOB.admins)
- if(C.prefs.chat_toggles & CHAT_OOC)
- var/prefix = "(R)LOOC"
- if (C.mob in heard)
- prefix = "LOOC"
- if(GLOB.LOOC_COLOR)
- to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]")
- else
- to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]")
+ for(var/client/client in GLOB.admins)
+ if(!(client.prefs.toggles & CHAT_OOC))
+ continue
+ var/prefix = "(R)LOOC"
+ to_chat(client, "[prefix]: [ADMIN_LOOKUPFLW(usr)]: [msg]", avoid_highlighting = (client == src))