diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 4fa4063554..6f2515b55d 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -303,6 +303,10 @@ BLIND // can't see anything
body_parts_covered = FACE|EYES
sprite_sheets = list("Vox" = 'icons/mob/species/vox/masks.dmi')
+ var/voicechange = 0
+ var/list/say_messages
+ var/list/say_verbs
+
/obj/item/clothing/mask/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 3d3db7c736..f7b6ecbc6c 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -7,6 +7,12 @@
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.90
+ voicechange = 1
+
+/obj/item/clothing/mask/muzzle/New()
+ ..()
+ say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!")
+ say_verbs = list("mumbles", "says")
// Clumsy folks can't take the mask off themselves.
/obj/item/clothing/mask/muzzle/attack_hand(mob/user as mob)
@@ -99,9 +105,14 @@
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE|EYES
w_class = 2
- var/voicechange = 0
siemens_coefficient = 0.9
+/obj/item/clothing/mask/horsehead/New()
+ ..()
+ // The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary
+ say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
+ say_verbs = list("whinnies", "neighs", "says")
+
/obj/item/clothing/mask/ai
name = "camera MIU"
desc = "Allows for direct mental connection to accessible camera networks."
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index bbf1844c45..44b8e6f238 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -6,9 +6,6 @@
message = sanitize(message)
..(message, alt_name = alt_name)
-/mob/living/carbon/human/is_muzzled()
- return istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
-
/mob/living/carbon/human/proc/forcesay(list/append)
if(stat == CONSCIOUS)
if(client)
@@ -132,11 +129,11 @@
if(silent || (sdisabilities & MUTE))
message = ""
speech_problem_flag = 1
- else if(istype(wear_mask, /obj/item/clothing/mask/horsehead))
- var/obj/item/clothing/mask/horsehead/hoers = wear_mask
- if(hoers.voicechange)
- message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
- verb = pick("whinnies","neighs", "says")
+ else if(istype(wear_mask, /obj/item/clothing/mask))
+ var/obj/item/clothing/mask/M = wear_mask
+ if(M.voicechange)
+ message = pick(M.say_messages)
+ verb = pick(M.say_verbs)
speech_problem_flag = 1
if(message != "")
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 90f82d9304..20e8ba14d6 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -139,10 +139,6 @@ proc/get_radio_key_from_channel(var/channel)
return say_dead(message)
return
- if(is_muzzled())
- src << "You're muzzled and cannot speak!"
- return
-
var/message_mode = parse_message_mode(message, "headset")
switch(copytext(message,1,2))
@@ -180,6 +176,10 @@ proc/get_radio_key_from_channel(var/channel)
else
verb = say_quote(message)
+ if(is_muzzled())
+ src << "You're muzzled and cannot speak!"
+ return
+
message = trim_left(message)
if(!(speaking && (speaking.flags & NO_STUTTER)))