diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 3b5b415964d..4e2c7acb2b2 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -1,6 +1,6 @@
/obj/item/device/mmi/posibrain
name = "positronic brain"
- desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. The speaker switch is set to 'on'."
+ desc = "A cube of shining metal, four inches to a side and covered in shallow grooves."
icon = 'icons/obj/assemblies.dmi'
icon_state = "posibrain"
w_class = 3
@@ -15,11 +15,14 @@
var/silenced = 0 //if set to 1, they can't talk.
var/next_ping_at = 0
+/obj/item/device/mmi/posibrain/examine(mob/user)
+ if(..(user, 1))
+ to_chat(user, "Its speaker is turned [silenced ? "off" : "on"].")
-/obj/item/device/mmi/posibrain/attack_self(mob/user as mob)
+/obj/item/device/mmi/posibrain/attack_self(mob/user)
if(brainmob && !brainmob.key && searching == 0)
//Start the process of searching for a new user.
- to_chat(user, "\blue You carefully locate the manual activation switch and start the positronic brain's boot process.")
+ to_chat(user, "You carefully locate the manual activation switch and start the positronic brain's boot process.")
icon_state = "posibrain-searching"
ghost_volunteers.Cut()
src.searching = 1
@@ -31,18 +34,10 @@
transfer_personality(O)
reset_search()
else
- if(silenced)
- silenced = 0
- to_chat(user, "You toggle the speaker to 'on', on the [src].")
- desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. The speaker switch is set to 'on'."
- if(brainmob && brainmob.key)
- to_chat(brainmob, "Your internal speaker has been toggled to 'on'.")
- else
- silenced = 1
- to_chat(user, "You toggle the speaker to 'off', on the [src].")
- desc = "A cube of shining metal, four inches to a side and covered in shallow grooves. The speaker switch is set to 'off'."
- if(brainmob && brainmob.key)
- to_chat(brainmob, "Your internal speaker has been toggled to 'off'.")
+ silenced = !silenced
+ to_chat(user, "You toggle the speaker [silenced ? "off" : "on"].")
+ if(brainmob && brainmob.key)
+ to_chat(brainmob, "Your internal speaker has been toggled [silenced ? "off" : "on"].")
/obj/item/device/mmi/posibrain/proc/request_player()
for(var/mob/dead/observer/O in player_list)
diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm
index a343d245424..bd2420aca88 100644
--- a/code/modules/mob/living/carbon/brain/say.dm
+++ b/code/modules/mob/living/carbon/brain/say.dm
@@ -1,23 +1,35 @@
//TODO: Convert this over for languages.
/mob/living/carbon/brain/say(var/message, var/datum/language/speaking = null)
- if(silent)
+ if(!can_speak(warning = TRUE))
+ return
+
+ if(prob(emp_damage * 4))
+ if(prob(10)) //10% chance to drop the message entirely
+ return
+ else
+ message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher
+
+ ..(message)
+
+/mob/living/carbon/brain/whisper(message as text)
+ if(!can_speak(warning = TRUE))
return
- if(!(container && istype(container, /obj/item/device/mmi)))
- return //No MMI, can't speak, bucko./N
- else
- if(container && istype(container, /obj/item/device/mmi/posibrain))
- var/obj/item/device/mmi/posibrain/P = container
- if(P && P.silenced)
- to_chat(usr, "You cannot speak, as your internal speaker has been toggled to 'off'.")
- return
- if(prob(emp_damage*4))
- if(prob(10))//10% chane to drop the message entirely
- return
- else
- message = Gibberish(message, (emp_damage*6))//scrambles the message, gets worse when emp_damage is higher
+ ..()
+
+/mob/living/carbon/brain/can_speak(var/warning = FALSE)
+ . = ..()
- ..(message)
+ if(!container)
+ . = FALSE
+ else if(!istype(container, /obj/item/device/mmi))
+ . = FALSE
+ else if(istype(container, /obj/item/device/mmi/posibrain))
+ var/obj/item/device/mmi/posibrain/P = container
+ if(P && P.silenced)
+ if(warning)
+ to_chat(usr, "You cannot speak, as your internal speaker is turned off.")
+ . = FALSE
/mob/living/carbon/brain/handle_message_mode(var/message_mode, var/message, var/verb, var/speaking, var/used_radios, var/alt_name)
switch(message_mode)