fix: MUTE trait no longer blocks say emotes (\! prefix) or radio say emotes (;\!) (#19302)

Noise language is used for audible emotes when '\!' is prefixed in say.
handle_speech_problems() was unconditionally clearing the message for
any mob with sdisabilities & MUTE, including Noise language pieces.

'*emote' in say() bypasses mute entirely by redirecting to emote()
before handle_speech_problems is reached. '\!emote' and ';\!emote' should
be consistent with that: MUTE suppresses speech but not emote actions.

Now, when MUTE is the sole reason the suppression block fires (not
silent or paralysis), Noise language pieces fall through to the parent
proc instead of being cleared.
This commit is contained in:
ARGUS
2026-03-20 00:28:32 +01:00
committed by GitHub
parent fe41eb88d6
commit 4e0ee95fec
@@ -142,6 +142,13 @@
/mob/living/carbon/human/handle_speech_problems(var/list/message_data)
if(silent || (sdisabilities & MUTE) || is_paralyzed())
// MUTE shouldn't suppress noise language (audible say emotes), consistent with * emotes bypassing mute in say().
if((sdisabilities & MUTE) && !silent && !is_paralyzed())
var/list/pieces = message_data[1]
if(islist(pieces) && LAZYLEN(pieces))
var/datum/multilingual_say_piece/first = pieces[1]
if(istype(first) && first.speaking == GLOB.all_languages["Noise"])
return ..()
message_data[1] = ""
. = 1