diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index fb87a77bc9c..b822cd09c05 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -141,6 +141,27 @@ var/list/department_radio_keys = list(
if (!message)
return
+ //work out if we're speaking skrell or not
+ var/is_speaking_skrell = 0
+ if(copytext(message, 1, 3) == ":k" || copytext(message, 1, 3) == ":K")
+ message = copytext(message, 3)
+ if(skrell_talk_understand || universal_speak)
+ is_speaking_skrell = 1
+
+ //work out if we're speaking soghun or not
+ var/is_speaking_soghun = 0
+ if(copytext(message, 1, 3) == ":o" || copytext(message, 1, 3) == ":O")
+ message = copytext(message, 3)
+ if(soghun_talk_understand || universal_speak)
+ is_speaking_soghun = 1
+
+ //work out if we're speaking soghun or not
+ var/is_speaking_taj = 0
+ if(copytext(message, 1, 3) == ":j" || copytext(message, 1, 3) == ":J")
+ message = copytext(message, 3)
+ if(tajaran_talk_understand || universal_speak)
+ is_speaking_taj = 1
+
// :downs:
if (getBrainLoss() >= 60)
message = dd_replacetext(message, " am ", " ")
@@ -324,10 +345,23 @@ var/list/department_radio_keys = list(
for (var/M in listening)
if(hascall(M,"say_understands"))
- if (M:say_understands(src))
+ if (M:say_understands(src) && !is_speaking_skrell && !is_speaking_soghun && !is_speaking_taj)
heard_a += M
+ else if(ismob(M))
+ if(is_speaking_skrell && (M:skrell_talk_understand || M:universal_speak))
+ heard_a += M
+ else if(is_speaking_soghun && (M:soghun_talk_understand || M:universal_speak))
+ heard_a += M
+ else if(is_speaking_taj && (M:tajaran_talk_understand || M:universal_speak))
+ heard_a += M
+ else
+ heard_b += M
else
- heard_b += M
+ heard_a += M
+
+ var/speech_bubble_test = say_test(message)
+ var/image/speech_bubble = image('icons/mob/talk.dmi',src,"h[speech_bubble_test]")
+ spawn(30) del(speech_bubble)
var/rendered = null
if (length(heard_a))
@@ -348,6 +382,7 @@ var/list/department_radio_keys = list(
for (var/M in heard_a)
if(hascall(M,"show_message"))
M:show_message(rendered, 2)
+ M << speech_bubble
if (length(heard_b))
var/message_b
@@ -367,6 +402,7 @@ var/list/department_radio_keys = list(
for (var/M in heard_b)
if(hascall(M,"show_message"))
M:show_message(rendered, 2)
+ M << speech_bubble
/*
if(M.client)
@@ -389,6 +425,9 @@ var/list/department_radio_keys = list(
del(B)
*/
+ //talking crystals
+ for(var/obj/item/weapon/talkingcrystal/O in view(3,src))
+ O.catchMessage(message,src)
log_say("[name]/[key] : [message]")
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index 20917514f43..401383762b6 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -62,13 +62,14 @@
/mob/proc/say_quote(var/text,var/is_speaking_soghun,var/is_speaking_skrell,var/is_speaking_tajaran)
if(!text)
return "says, \"...\""; //not the best solution, but it will stop a large number of runtimes. The cause is somewhere in the Tcomms code
+ //tcomms code is still runtiming somewhere here
var/ending = copytext(text, length(text))
if (is_speaking_soghun)
return "hisses, \"[text]\"";
if (is_speaking_skrell)
return "warbles, \"[text]\"";
if (is_speaking_tajaran)
- return "purrs, \"[text]\"";
+ return "mrowls, \"[text]\"";
//Needs Virus2
// if (src.disease_symptoms & DISEASE_HOARSE)
// return "rasps, \"[text]\"";