diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index ba8e3d6850a..d6ed808461b 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -67,7 +67,7 @@
if(..())
return
if(a_intent != "harm" || !ismob(A)) return
- if(istype(wear_mask, /obj/item/clothing/mask/muzzle))
+ if(is_muzzled())
return
var/mob/living/carbon/ML = A
var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 06bedadbd4d..7da40ce6f7c 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -76,7 +76,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/mob/living/carbon/human/H = user
- if((invocation_type == "whisper" || invocation_type == "shout") && istype(H.wear_mask, /obj/item/clothing/mask/muzzle))
+ if((invocation_type == "whisper" || invocation_type == "shout") && !H.is_muzzled())
user << "You can't get the words out!"
return 0
diff --git a/code/datums/spells/mime.dm b/code/datums/spells/mime.dm
index 1f2c79b646a..12c4a8e837b 100644
--- a/code/datums/spells/mime.dm
+++ b/code/datums/spells/mime.dm
@@ -14,7 +14,10 @@
/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click()
- if(usr)
+ if(usr && usr.mind)
+ if(!usr.mind.miming)
+ usr << "You must dedicate yourself to silence first."
+ return
invocation = "[usr.real_name] looks as if a wall is in front of them."
else
invocation_type ="none"
diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm
index 1b46d1aca9d..10f61e1b6e0 100644
--- a/code/game/gamemodes/changeling/powers/lesserform.dm
+++ b/code/game/gamemodes/changeling/powers/lesserform.dm
@@ -10,9 +10,9 @@
/obj/effect/proc_holder/changeling/lesserform/sting_action(var/mob/living/carbon/human/user)
user << "Our genes cry out!"
- var/mob/living/carbon/monkey/O = user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSE | TR_KEEPSRC)
+ user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPDAMAGE | TR_KEEPSE | TR_KEEPSRC)
- O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
+ // Human-form power now handled in monkeyize()
feedback_add_details("changeling_powers","LF")
.=1
qdel(user)
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index 1a3e6e188cd..90865e016b3 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -183,11 +183,9 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
if(!iscultist(user))
user << "You can't mouth the arcane scratchings without fumbling over them."
return
- if(ishuman(user))
- var/mob/living/carbon/human/H = user
- if(istype(H.wear_mask, /obj/item/clothing/mask/muzzle))
- H << "You are unable to speak the words of the rune."
- return
+ if(user.is_muzzled())
+ user << "You are unable to speak the words of the rune."
+ return
if(!word1 || !word2 || !word3 || prob(user.getBrainLoss()))
return fizzle()
if(word1 == wordtravel && word2 == wordself)
diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm
index 53b7210d99f..b88f5b482ad 100644
--- a/code/modules/hydroponics/grown.dm
+++ b/code/modules/hydroponics/grown.dm
@@ -796,6 +796,7 @@
icon_state = "angel"
dried_type = /obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/angel
New(var/loc, var/potency = 35)
+ ..()
if(reagents)
reagents.add_reagent("nutriment", 1+round((potency / 50), 1))
reagents.add_reagent("amatoxin", 13+round(potency / 3, 1))
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index c0a4eda32d0..5d7290fedf7 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -475,7 +475,7 @@
/obj/item/seeds/angelmycelium
name = "pack of destroying angel mycelium"
- desc = "This mycelium grows into something devestating."
+ desc = "This mycelium grows into something devastating."
icon_state = "mycelium-angel"
species = "angel"
plantname = "Destroying Angels"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/emote.dm b/code/modules/mob/living/carbon/alien/humanoid/emote.dm
index d0b4fb7be1e..4351ced974f 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/emote.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/emote.dm
@@ -8,7 +8,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
- var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
+ var/muzzled = is_muzzled()
var/m_type = 1
var/message
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index ebe2a488d4f..abda0ce43fa 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -116,7 +116,7 @@
if ("help")
help_shake_act(M)
else
- if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
+ if (is_muzzled())
return
if (health > 0)
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm
index 6a9120a111f..8a662b5dc47 100644
--- a/code/modules/mob/living/carbon/alien/larva/emote.dm
+++ b/code/modules/mob/living/carbon/alien/larva/emote.dm
@@ -8,7 +8,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
- var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
+ var/muzzled = is_muzzled()
var/m_type = 1
var/message
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 12b3713d6df..7503b0d0b35 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -142,7 +142,7 @@
if ("help")
help_shake_act(M)
else
- if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
+ if (is_muzzled())
return
if (health > 0)
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 5745bcea0e5..8cc66e2897b 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -452,12 +452,6 @@
..()
-/mob/living/carbon/say(var/message, var/bubble_type)
- if(istype(wear_mask, /obj/item/clothing/mask/muzzle))
- return
-
- ..(message, bubble_type)
-
/mob/living/carbon/proc/is_mutantrace(var/mrace)
if(mrace)
if(src.dna && src.dna.mutantrace == mrace)
@@ -483,3 +477,6 @@ var/const/GALOSHES_DONT_HELP = 8
/mob/living/carbon/fall(var/forced)
loc.handle_fall(src, forced)//it's loc so it doesn't call the mob's handle_fall which does nothing
+
+/mob/living/carbon/is_muzzled()
+ return(istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm
index af48fdc58b7..90c9809c580 100644
--- a/code/modules/mob/living/carbon/emote.dm
+++ b/code/modules/mob/living/carbon/emote.dm
@@ -13,7 +13,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
- var/muzzled = (src.wear_mask && istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+ var/muzzled = is_muzzled()
//var/m_type = 1
switch(act)//Even carbon organisms want it alphabetically ordered..
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 766b452bfa4..a765805d011 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -9,7 +9,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
- var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
+ var/muzzled = is_muzzled()
//var/m_type = 1
for (var/obj/item/weapon/implant/I in src)
diff --git a/code/modules/mob/living/carbon/human/human_attackpaw.dm b/code/modules/mob/living/carbon/human/human_attackpaw.dm
index 95e00df5d4d..9109084194f 100644
--- a/code/modules/mob/living/carbon/human/human_attackpaw.dm
+++ b/code/modules/mob/living/carbon/human/human_attackpaw.dm
@@ -3,7 +3,7 @@
if (M.a_intent == "help")
help_shake_act(M)
else
- if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
+ if (is_muzzled())
return
visible_message("[M.name] bites [src]!", \
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index 7fe52e16a8b..0fd4a491c57 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -33,7 +33,7 @@
if (src.sdisabilities & MUTE)
return
- if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle))
+ if (is_muzzled())
return
var/whispers = "whispers"
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 3d1c6f8c70c..ef4a1102c17 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -298,7 +298,7 @@
if ("help")
help_shake_act(M)
else
- if (istype(wear_mask, /obj/item/clothing/mask/muzzle))
+ if (is_muzzled())
return
if (health > 0)
attacked += 10
diff --git a/code/modules/mob/living/carbon/monkey/emote.dm b/code/modules/mob/living/carbon/monkey/emote.dm
index 573c9c42f23..2b51ed70355 100644
--- a/code/modules/mob/living/carbon/monkey/emote.dm
+++ b/code/modules/mob/living/carbon/monkey/emote.dm
@@ -9,7 +9,7 @@
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
- var/muzzled = istype(src.wear_mask, /obj/item/clothing/mask/muzzle)
+ var/muzzled = is_muzzled()
var/m_type = 1
var/message
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index d1f94f76d29..233e9501ea3 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -74,7 +74,7 @@
if (M.a_intent == "help")
help_shake_act(M)
else
- if ((M.a_intent == "harm" && !( istype(wear_mask, /obj/item/clothing/mask/muzzle) )))
+ if (M.a_intent == "harm" && !is_muzzled())
if ((prob(75) && health > 0))
playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1)
for(var/mob/O in viewers(src, null))
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 4f722d5d8a5..53977a44810 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -132,7 +132,7 @@ var/list/department_radio_keys = list(
//world << "channel_prefix=[channel_prefix]; message_mode=[message_mode]"
if (message_mode)
message = trim(copytext(message, 3))
- if (!(ishuman(src) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department" || (message_mode in radiochannels))))
+ if (!(ishuman(src) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src)) && (message_mode=="department" || (message_mode in radiochannels))) // If they're not a human, parrot, or robot, and they're trying to use a radio channel
message_mode = null //only humans can use headsets
// Check changed so that parrots can use headsets. Other simple animals do not have ears and will cause runtimes.
// And borgs -Sieve
@@ -156,6 +156,24 @@ var/list/department_radio_keys = list(
for(var/i=0,i[mind.changeling.changelingID]: [message]"
+ return
+
+ if (message_mode == "alientalk")
+ if(alien_talk_understand || hivecheck())
+ //message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) //seems redundant
+ alien_talk(message)
+ return
+
+ if(is_muzzled()) // Intentionally after changeling hivemind check
+ return
+
var/list/obj/item/used_radios = new
switch (message_mode)
@@ -211,12 +229,6 @@ var/list/department_radio_keys = list(
robot_talk(message)
return
- if ("alientalk")
- if(alien_talk_understand || hivecheck())
- //message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) //seems redundant
- alien_talk(message)
- return
-
if ("department")
if (src:ears)
src:ears.talk_into(src, message, message_mode)
@@ -231,13 +243,6 @@ var/list/department_radio_keys = list(
message_range = 1
italics = 1
- if("changeling")
- if(mind && mind.changeling)
- log_say("[mind.changeling.changelingID]/[src.key] : [message]")
- for(var/mob/Changeling in mob_list)
- if((Changeling.mind && Changeling.mind.changeling) || istype(Changeling, /mob/dead/observer))
- Changeling << "[mind.changeling.changelingID]: [message]"
- return
////SPECIAL HEADSETS START
else
//world << "SPECIAL HEADSETS"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index b3f3e3137ce..719514fd6c8 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -558,6 +558,9 @@ var/list/slot_equipment_priority = list( \
/mob/proc/is_active()
return (0 >= usr.stat)
+/mob/proc/is_muzzled()
+ return 0
+
/mob/proc/see(message)
if(!is_active())
return 0
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index 03fb40fb3a9..7b69731d0cd 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -72,6 +72,8 @@
//transfer mind and delete old mob
if(mind)
mind.transfer_to(O)
+ if(O.mind.changeling)
+ O.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/humanform(null)
if (tr_flags & TR_DEFAULTMSG)
O << "You are now a monkey."
updateappearance(O)