diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 0e0283b0aed..33507289e54 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -460,7 +460,14 @@ var/global/list/default_medbay_channels = list( R.receive_signal(signal) // Receiving code can be located in Telecommunications.dm - return signal.data["done"] && (position.z in signal.data["level"]) + var/position_z_in_level = FALSE // this particular band-aid is required to make antag radios say "talks into" and not "tries to talk into" when using a radio, due to how their signals are made + if(islist(signal.data["level"])) + if(position.z in signal.data["level"]) + position_z_in_level = TRUE + else + if(position.z == signal.data["level"]) + position_z_in_level = TRUE + return signal.data["done"] && position_z_in_level /* ###### Intercoms and station-bounced radios ###### */ diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 58d308d54b6..28134a14fd2 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -147,57 +147,64 @@ returns = species.handle_speech_problems(src, returns, message, verb, message_mode) return returns -/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) +/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio) switch(message_mode) if("intercom") for(var/obj/item/device/radio/intercom/I in view(1)) + I.add_fingerprint(src) + used_radios += I if(I.talk_into(src, message, null, verb, speaking)) - I.add_fingerprint(src) - used_radios += I + successful_radio += I if("headset") - if(l_ear && istype(l_ear,/obj/item/device/radio)) + if(istype(l_ear,/obj/item/device/radio)) var/obj/item/device/radio/R = l_ear + used_radios += l_ear if(R.talk_into(src,message,null,verb,speaking)) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) + successful_radio += R + else if(istype(r_ear,/obj/item/device/radio)) var/obj/item/device/radio/R = r_ear + used_radios += r_ear if(R.talk_into(src,message,null,verb,speaking)) - used_radios += r_ear + successful_radio += R if("right ear") var/obj/item/device/radio/R var/has_radio = 0 - if(r_ear && istype(r_ear,/obj/item/device/radio)) + if(istype(r_ear,/obj/item/device/radio)) R = r_ear has_radio = 1 - if(r_hand && istype(r_hand, /obj/item/device/radio)) + if(istype(r_hand, /obj/item/device/radio)) R = r_hand has_radio = 1 if(has_radio) + used_radios += R if(R.talk_into(src,message,null,verb,speaking)) - used_radios += R + successful_radio += R if("left ear") var/obj/item/device/radio/R var/has_radio = 0 - if(l_ear && istype(l_ear,/obj/item/device/radio)) + if(istype(l_ear, /obj/item/device/radio)) R = l_ear has_radio = 1 - if(l_hand && istype(l_hand,/obj/item/device/radio)) + if(istype(l_hand, /obj/item/device/radio)) R = l_hand has_radio = 1 if(has_radio) + used_radios += R if(R.talk_into(src,message,null,verb,speaking)) - used_radios += R + successful_radio += R if("whisper") whisper_say(message, speaking, alt_name) return 1 else if(message_mode) - if(l_ear && istype(l_ear,/obj/item/device/radio)) + if(istype(l_ear, /obj/item/device/radio)) + used_radios += l_ear if(l_ear.talk_into(src,message, message_mode, verb, speaking)) - used_radios += l_ear - else if(r_ear && istype(r_ear,/obj/item/device/radio)) + successful_radio += l_ear + else if(istype(r_ear, /obj/item/device/radio)) + used_radios += r_ear if(r_ear.talk_into(src,message, message_mode, verb, speaking)) - used_radios += r_ear + successful_radio += r_ear /mob/living/carbon/human/handle_speech_sound() var/list/returns = ..() diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index eb7e2b16f5f..a86279eb46d 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -137,11 +137,12 @@ proc/get_radio_key_from_channel(var/channel) returns[4] = world.view return returns -/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name) +/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio) if(message_mode == "intercom") for(var/obj/item/device/radio/intercom/I in view(1, null)) + used_radios += I if(I.talk_into(src, message, verb, speaking)) - used_radios += I + successful_radio += I return 0 /mob/living/proc/handle_speech_sound() @@ -230,7 +231,8 @@ proc/get_radio_key_from_channel(var/channel) return say_signlang(message, pick(speaking.signlang_verb), speaking) var/list/obj/item/used_radios = new - if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)) + var/list/successful_radio = new // passes a list because standard vars don't work when passed + if(handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name, successful_radio)) return 1 var/list/handle_v = handle_speech_sound() @@ -241,19 +243,19 @@ proc/get_radio_key_from_channel(var/channel) //speaking into radios - if(used_radios.len) + if(length(used_radios)) italics = 1 message_range = 1 if(speaking) message_range = speaking.get_talkinto_msg_range(message) var/msg if(!speaking || !(speaking.flags & NO_TALK_MSG)) - msg = "\The [src] talks into \the [used_radios[1]]." - for(var/mob/living/M in hearers(5, src)) - if((M != src) && msg) + msg = "\The [src] [length(successful_radio) ? "talks into" : "tries talking into"] \the [used_radios[1]]." + for(var/mob/living/M in hearers(5, src) - src) + if(msg) M.show_message(msg) - if (speech_sound) - sound_vol *= 0.5 + if(speech_sound) + sound_vol *= 0.5 var/list/listening = list() var/list/listening_obj = list() diff --git a/html/changelogs/geeves-radio_speech.yml b/html/changelogs/geeves-radio_speech.yml new file mode 100644 index 00000000000..fa550d43b3a --- /dev/null +++ b/html/changelogs/geeves-radio_speech.yml @@ -0,0 +1,7 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "Failing to speak into a radio will no longer just slap your message out loud, instead, you will still whisper, and the visible message for speaking will be 'tries speaking into the'." + - bugfix: "Speaking on antagonist channels will no longer speak it out loud."