diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index e4c144a2af0..6d501acdc71 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -8,6 +8,7 @@
gas_transfer_coefficient = 0.90
put_on_delay = 20
var/resist_time = 0 //deciseconds of how long you need to gnaw to get rid of the gag, 0 to make it impossible to remove
+ var/mute = 1 // 1 - completely mutes you, 0 - muffles everything you say "MHHPHHMMM!!!"
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/mask.dmi'
@@ -32,6 +33,7 @@
item_state = null
w_class = 1
resist_time = 150
+ mute = 0
species_fit = list("Unathi", "Tajaran", "Vulpkanin")
sprite_sheets = list(
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index dc742e821be..c6d0d8e3ee0 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -166,11 +166,13 @@ proc/get_radio_key_from_channel(var/channel)
verb = say_quote(message, speaking)
if(is_muzzled())
- if(istype(wear_mask, /obj/item/clothing/mask/muzzle/tapegag)) //just for tape
- to_chat(src, "Your mouth is taped and you cannot speak!")
- else
+ var/obj/item/clothing/mask/muzzle/G = wear_mask
+ if(G.mute) //if the mask is supposed to mute you completely or just muffle you
to_chat(src, "You're muzzled and cannot speak!")
- return
+ return
+ else
+ message = muffledspeech(message)
+ verb = "mumbles"
message = trim_left(message)
@@ -359,7 +361,10 @@ proc/get_radio_key_from_channel(var/channel)
return
if(is_muzzled())
- to_chat(src, "You're muzzled and cannot speak!")
+ if(istype(wear_mask, /obj/item/clothing/mask/muzzle/tapegag)) //just for tape
+ to_chat(src, "Your mouth is taped and you cannot speak!")
+ else
+ to_chat(src, "You're muzzled and cannot speak!")
return
var/message_range = 1
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 29577af9526..8d8e2ccfea9 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -412,6 +412,24 @@ proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 fo
return returntext
+proc/muffledspeech(phrase)
+ phrase = html_decode(phrase)
+ var/leng=lentext(phrase)
+ var/counter=lentext(phrase)
+ var/newphrase=""
+ var/newletter=""
+ while(counter>=1)
+ newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2)
+ if(newletter in list(" ", "!", "?", ".", ","))
+ //do nothing
+ else if(lowertext(newletter) in list("a", "e", "i", "o", "u", "y"))
+ newletter = "h"
+ else
+ newletter = "m"
+ newphrase+="[newletter]"
+ counter-=1
+ return newphrase
+
/proc/shake_camera(mob/M, duration, strength=1)
if(!M || !M.client || M.shakecamera)