diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm
index 5aef72ae16c..c058173ba39 100644
--- a/code/datums/brain_damage/split_personality.dm
+++ b/code/datums/brain_damage/split_personality.dm
@@ -157,7 +157,7 @@
to_chat(src, "You cannot speak, your other self is controlling your body!")
return FALSE
-/mob/living/split_personality/emote(act, m_type = null, message = null, intentional = FALSE)
+/mob/living/split_personality/emote(act, m_type = null, message = null, intentional = FALSE, force_silence = FALSE)
return FALSE
///////////////BRAINWASHING////////////////////
diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm
index 8fb3cb17eab..a36e062a87d 100644
--- a/code/modules/mob/camera/camera.dm
+++ b/code/modules/mob/camera/camera.dm
@@ -23,5 +23,5 @@
/mob/camera/canUseStorage()
return FALSE
-/mob/camera/emote(act, m_type=1, message = null, intentional = FALSE)
+/mob/camera/emote(act, m_type=1, message = null, intentional = FALSE, force_silence = FALSE)
return FALSE
diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm
index fb6244958be..fcb8b7994c4 100644
--- a/code/modules/mob/dead/observer/observer_say.dm
+++ b/code/modules/mob/dead/observer/observer_say.dm
@@ -1,8 +1,5 @@
/mob/dead/observer/check_emote(message, forced)
- if(message[1] == "*")
- emote(copytext(message, length(message[1]) + 1), intentional = !forced)
- return TRUE
-
+ return emote(copytext(message, length(message[1]) + 1), intentional = !forced, force_silence = TRUE)
//Modified version of get_message_mods, removes the trimming, the only thing we care about here is admin channels
/mob/dead/observer/get_message_mods(message, list/mods)
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index bf460298d2d..59167b77d9b 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -6,7 +6,7 @@
#define BEYBLADE_CONFUSION_LIMIT 40 //A max for how penalized a carbon will be for beyblading
//The code execution of the emote datum is located at code/datums/emotes.dm
-/mob/proc/emote(act, m_type = null, message = null, intentional = FALSE)
+/mob/proc/emote(act, m_type = null, message = null, intentional = FALSE, force_silence = FALSE)
act = lowertext(act)
var/param = message
var/custom_param = findchar(act, " ")
@@ -17,7 +17,7 @@
var/list/key_emotes = GLOB.emote_list[act]
if(!length(key_emotes))
- if(intentional)
+ if(intentional && !force_silence)
to_chat(src, "'[act]' emote does not exist. Say *help for a list.")
return FALSE
var/silenced = FALSE
@@ -28,7 +28,7 @@
if(P.run_emote(src, param, m_type, intentional))
SEND_SIGNAL(src, COMSIG_MOB_EMOTE, P, act, m_type, message, intentional)
return TRUE
- if(intentional && !silenced)
+ if(intentional && !silenced && !force_silence)
to_chat(src, "Unusable emote '[act]'. Say *help for a list.")
return FALSE
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 983a5678ecc..cc857f2022d 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -457,7 +457,7 @@
return ..()
-/mob/living/simple_animal/emote(act, m_type=1, message = null, intentional = FALSE)
+/mob/living/simple_animal/emote(act, m_type=1, message = null, intentional = FALSE, force_silence = FALSE)
if(stat)
return FALSE
return ..()