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