diff --git a/code/defines/mob/living/carbon/alien.dm b/code/defines/mob/living/carbon/alien.dm
index 60d652862ae..e236150be51 100644
--- a/code/defines/mob/living/carbon/alien.dm
+++ b/code/defines/mob/living/carbon/alien.dm
@@ -6,4 +6,6 @@
toxloss = 250
var/alien_invis = 0.0
- var/max_plasma = 500
\ No newline at end of file
+ var/max_plasma = 500
+
+ alien_talk_understand = 1
\ No newline at end of file
diff --git a/code/defines/mob/mob.dm b/code/defines/mob/mob.dm
index 55ccc6610e4..6e8b150b9a5 100644
--- a/code/defines/mob/mob.dm
+++ b/code/defines/mob/mob.dm
@@ -168,6 +168,7 @@
var/obj/control_object // Hacking in to control objects -- TLE
var/robot_talk_understand = 0
+ var/alien_talk_understand = 0
// Ruby mode
var/incorporeal_move = 0
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm
index 380ed200d66..931764bf5a0 100644
--- a/code/modules/mob/living/carbon/alien/say.dm
+++ b/code/modules/mob/living/carbon/alien/say.dm
@@ -3,9 +3,68 @@
return 1
return ..()
+/mob/living/carbon/alien/say(var/message)
+
+ if (length(message) >= 2)
+ if (copytext(message, 1, 3) == ":a")
+ message = copytext(message, 3)
+ message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
+ src.alien_talk(message)
+ else
+ return ..(message)
+ else
// ~lol~
/mob/living/carbon/alien/say_quote(var/text)
// var/ending = copytext(text, length(text))
return "hisses, \"[text]\"";
+
+/mob/living/proc/alien_talk(var/message)
+
+ log_say("[key_name(src)] : [message]")
+
+ message = trim(message)
+
+ if (!message)
+ return
+
+ var/message_a = src.say_quote(message)
+ var/rendered = "Hivemind, [src.name] [message_a]"
+ for (var/mob/living/S in world)
+ if(!S.stat)
+ if(S.alien_talk_understand)
+ if(S.alien_talk_understand == src.alien_talk_understand)
+ S.show_message(rendered, 2)
+
+ var/list/listening = hearers(1, src)
+ listening -= src
+ listening += src
+
+ var/list/heard = list()
+ for (var/mob/M in listening)
+ if(!istype(M, /mob/living/carbon/alien) && !M.alien_talk_understand)
+ heard += M
+
+
+ if (length(heard))
+ var/message_b
+
+ message_b = "hsssss"
+ message_b = src.say_quote(message_b)
+ message_b = "[message_b]"
+
+ rendered = "[src.voice_name] [message_b]"
+
+ for (var/mob/M in heard)
+ M.show_message(rendered, 2)
+
+ message = src.say_quote(message)
+
+ rendered = "Hivemind, [src.name] [message_a]"
+
+ for (var/mob/M in world)
+ if (istype(M, /mob/new_player))
+ continue
+ if (M.stat > 1)
+ M.show_message(rendered, 2)
\ No newline at end of file