diff --git a/code/datums/chat_message.dm b/code/datums/chat_message.dm index db10b4ca5fb..b3b76a38ba8 100644 --- a/code/datums/chat_message.dm +++ b/code/datums/chat_message.dm @@ -95,8 +95,8 @@ if (!ismob(target)) extra_classes |= "small" - // Append radio icon if from a virtual speaker - if (extra_classes.Find("virtual-speaker")) + // Append radio icon if comes from a radio + if (extra_classes.Find("spoken_into_radio")) var/image/r_icon = image('icons/chat_icons.dmi', icon_state = "radio") text = "\icon[r_icon] " + text @@ -172,13 +172,14 @@ * * spans - Additional classes to be added to the message * * message_mode - Bitflags relating to the mode of the message */ -/mob/proc/create_chat_message(atom/movable/speaker, datum/language/message_language, raw_message, mode) - var/extra_classes = list() - +/mob/proc/create_chat_message(atom/movable/speaker, datum/language/message_language, raw_message, mode, list/existing_extra_classes) // Check for virtual speakers (aka hearing a message through a radio) - if (istype(speaker, /atom/movable/virtualspeaker)) + if (existing_extra_classes.Find("radio")) return + var/list/extra_classes = list() + extra_classes += existing_extra_classes + if (mode == SPEECH_MODE_WHISPER) extra_classes |= "small" @@ -249,3 +250,9 @@ return "[rgb(x,m,c)]C8" if(5) return "[rgb(c,m,x)]C8" + +/client/verb/toggle_runechat_outline() + set category = "OOC" + set name = "Toggle Runechat Outlines" + toggle_runechat_outlines = !toggle_runechat_outlines + to_chat(mob, "Runechat outlines are now [toggle_runechat_outlines ? "enabled" : "disabled"].") diff --git a/code/datums/saycode/speech.dm b/code/datums/saycode/speech.dm index fbf45c478ad..6768e5bc205 100644 --- a/code/datums/saycode/speech.dm +++ b/code/datums/saycode/speech.dm @@ -164,5 +164,7 @@ if(data) wrapper_classes=data.Copy() + wrapper_classes.Add("radio") + /datum/speech/proc/set_language(var/lang_id) language = all_languages[lang_id] diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index f0243269f6a..ab01320723d 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -546,9 +546,3 @@ NOTE: You will only be polled about this role once per round. To change your ch /client/proc/handle_hear_voice(var/mob/origin) if(prefs.hear_voicesound) mob.playsound_local(get_turf(origin), get_sfx("voice"),50,1) - -/client/verb/toggle_runechat_outlight() - set category = "OOC" - set name = "Toggle Runechat Outlines" - toggle_runechat_outlines = !toggle_runechat_outlines - to_chat(mob, "Runechat outlines are now [toggle_runechat_outlines ? "enabled" : "disabled"].") diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 5ba9f875181..f302ed4bf94 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -46,6 +46,6 @@ say_testing(src, "/mob/dead/observer/Hear(): CHAT_GHOSTRADIO is disabled, blocking. ([client.prefs.toggles] & [CHAT_GHOSTRADIO]) = [client.prefs.toggles & CHAT_GHOSTRADIO]") return if (client?.prefs.mob_chat_on_map && (client.prefs.obj_chat_on_map || ismob(speech.speaker))) - create_chat_message(speech.speaker, speech.language, speech.message, speech.mode) + create_chat_message(speech.speaker, speech.language, speech.message, speech.mode, speech.wrapper_classes) to_chat(src, "(Follow) [rendered_speech]") diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index fe339e87780..aaac7eed6f7 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -74,6 +74,19 @@ var/list/department_radio_keys = list( ":&" = "borerchat", "#&" = "borerchat", ".&" = "borerchat", ) +var/list/headset_modes = list( + "Response Team", + "Command", + "Service", + "Engineering", + "Security", + "Syndicate", + "Supply", + "Medical", + "Science", + "department", +) + /mob/living/proc/get_default_language() if(!default_language) if(languages && languages.len) @@ -181,6 +194,8 @@ var/list/department_radio_keys = list( treat_speech(speech) var/radio_return = get_speech_flags(message_mode) + if (speech_was_spoken_into_radio(message_mode)) + speech.wrapper_classes.Add("spoken_into_radio") if(radio_return & NOPASS) //There's a whisper() message_mode, no need to continue the proc if that is called whisper(speech.message, speech.language) returnToPool(speech) @@ -263,9 +278,9 @@ var/list/department_radio_keys = list( // Runechat messages if (ismob(speech.speaker) && client?.prefs.mob_chat_on_map && stat != UNCONSCIOUS && !is_deaf()) - create_chat_message(speech.speaker, speech.language, speech.message, speech.mode) + create_chat_message(speech.speaker, speech.language, speech.message, speech.mode, speech.wrapper_classes) else if (client?.prefs.obj_chat_on_map && stat != UNCONSCIOUS && !is_deaf()) - create_chat_message(speech.speaker, speech.language, speech.message, speech.mode) + create_chat_message(speech.speaker, speech.language, speech.message, speech.mode, speech.wrapper_classes) if (ismob(speech.speaker)) show_message(rendered_message, type, deaf_message, deaf_type, src) else if (!client.prefs.no_goonchat_for_obj || length_char(speech.message) > client?.prefs.max_chat_length) // Objects : only display if no goonchat on map or if the runemessage is too small. @@ -463,6 +478,14 @@ var/list/department_radio_keys = list( return 0 +/mob/living/proc/speech_was_spoken_into_radio(var/message_mode) + if (message_mode in headset_modes) + return TRUE + switch (message_mode) + if(MODE_HEADSET, MODE_SECURE_HEADSET, MODE_R_HAND, MODE_L_HAND, MODE_INTERCOM, MODE_BINARY) + return TRUE + return FALSE + /mob/living/proc/radio(var/datum/speech/speech, var/message_mode) switch(message_mode) if(MODE_R_HAND)