diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm index b4429f9d60b..b76597ebde8 100644 --- a/code/defines/procs/gamehelpers.dm +++ b/code/defines/procs/gamehelpers.dm @@ -229,7 +229,7 @@ for(var/mob/M in player_list) if(!M) continue - var/atom/ear = M.get_ear() + var/turf/ear = get_turf(M) if(!ear) continue // Now see if they're near any broadcasting radio diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 1fd388bc258..409f53f4ce0 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -26,21 +26,22 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : /obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) // Don't broadcast rejected signals + var/turf/position = get_turf(src) if(signal.data["reject"]) return //Is it a test signal? if(signal.data["type"] == 4) signal.data["done"] = 1 - signal.data["level"] += src.loc.z + signal.data["level"] += position.z return if(signal.data["message"]) // Prevents massive radio spam - if("[signal.data["message"]]:[signal.data["realname"]]:[src.loc.z]" in recentmessages) + if("[signal.data["message"]]:[signal.data["realname"]]:[position.z]" in recentmessages) return - recentmessages.Add("[signal.data["message"]]:[signal.data["realname"]]:[src.loc.z]") + recentmessages.Add("[signal.data["message"]]:[signal.data["realname"]]:[position.z]") signal.data["done"] = 1 // mark the signal as being broadcasted @@ -61,7 +62,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, signal.data["compression"], src.loc.z) + signal.data["realname"], signal.data["vname"],, signal.data["compression"], position.z) /** #### - Simple Broadcast - #### **/ @@ -71,7 +72,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : /* ###### Broadcast a message using signal.data ###### */ Broadcast_SimpleMessage(signal.data["name"], signal.frequency, signal.data["message"],null, null, - signal.data["compression"]) + signal.data["compression"], position.z) /** #### - Artificial Broadcast - #### **/ @@ -86,7 +87,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], src.loc.z) + signal.data["realname"], signal.data["vname"], 4, signal.data["compression"], position.z) spawn(5) recentmessages = list() @@ -135,20 +136,21 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : /* ###### Broadcast a message using signal.data ###### */ var/datum/radio_frequency/connection = signal.data["connection"] + var/turf/position = get_turf(src) if(connection.frequency == SYND_FREQ) // if syndicate broadcast, just Broadcast_Message(signal.data["connection"], signal.data["mob"], signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"],, signal.data["compression"], src.loc.z) + signal.data["realname"], signal.data["vname"],, signal.data["compression"], position.z) else if(intercept) Broadcast_Message(signal.data["connection"], signal.data["mob"], signal.data["vmask"], signal.data["vmessage"], signal.data["radio"], signal.data["message"], signal.data["name"], signal.data["job"], - signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], src.loc.z) + signal.data["realname"], signal.data["vname"], 3, signal.data["compression"], position.z) @@ -211,12 +213,10 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : var/message, var/name, var/job, var/realname, var/vname, var/data, var/compression, var/level) - /* ###### Prepare the radio connection ###### */ var/display_freq = connection.frequency - var/list/obj/item/device/radio/radios = list() // --- Broadcast only to intercom devices --- @@ -224,8 +224,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : if(data == 1) for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) if(R.receive_range(display_freq, level) > 0) - radios |= R - + radios += R // --- Broadcast only to intercoms and station-bounced radios --- @@ -236,8 +235,7 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : continue if(R.receive_range(display_freq, level) > 0) - radios |= R - + radios += R // --- Broadcast to syndicate radio! --- @@ -247,19 +245,18 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"]) if(R.receive_range(SYND_FREQ, level) > 0) - radios |= R + radios += R // --- Broadcast to ALL radio devices --- else for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) if(R.receive_range(display_freq, level) > 0) - radios |= R + radios += R // Get a list of mobs who can hear from the radios we collected. var/list/receive = get_mobs_in_radio_ranges(radios) - /* ###### Organize the receivers into categories for displaying the message ###### */ // Understood the message: @@ -510,8 +507,9 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : if(data == 1) for (var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"]) - if(R.loc && R.loc.z == level) - receive |= R.send_hear(display_freq) + var/turf/position = get_turf(R) + if(position && position.z == level) + receive |= R.send_hear(display_freq, level) // --- Broadcast only to intercoms and station-bounced radios --- @@ -521,8 +519,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : if(istype(R, /obj/item/device/radio/headset)) continue - - if(R.loc && R.loc.z == level) + var/turf/position = get_turf(R) + if(position && position.z == level) receive |= R.send_hear(display_freq) @@ -532,8 +530,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : var/datum/radio_frequency/syndicateconnection = radio_controller.return_frequency(SYND_FREQ) for (var/obj/item/device/radio/R in syndicateconnection.devices["[RADIO_CHAT]"]) - - if(R.loc && R.loc.z == level) + var/turf/position = get_turf(R) + if(position && position.z == level) receive |= R.send_hear(SYND_FREQ) @@ -541,8 +539,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : else for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) - - if(R.loc && R.loc.z == level) + var/turf/position = get_turf(R) + if(position && position.z == level) receive |= R.send_hear(display_freq) @@ -704,7 +702,8 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : /atom/proc/test_telecomms() var/datum/signal/signal = telecomms_process() - return (src.loc.z in signal.data["level"] && signal.data["done"]) + var/turf/position = get_turf(src) + return (position.z in signal.data["level"] && signal.data["done"]) /atom/proc/telecomms_process() @@ -726,8 +725,10 @@ var/list/recentmessages = list() // global list of recent messages broadcasted : signal.frequency = 1459// Common channel //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in world) - if(src.loc.z == R.loc.z) + var/turf/position = get_turf(src) + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + var/turf/receiver_turf = get_turf(R) + if(position.z == receiver_turf.z) R.receive_signal(signal) sleep(rand(10,25)) diff --git a/code/game/objects/radio/intercom.dm b/code/game/objects/radio/intercom.dm index 879d36504eb..e174d87ed10 100644 --- a/code/game/objects/radio/intercom.dm +++ b/code/game/objects/radio/intercom.dm @@ -26,9 +26,8 @@ attack_self(user) - send_hear(freq) - var/range = receive_range(freq) - + send_hear(freq, level) + var/range = receive_range(freq, level) if(range > 0) return get_mobs_in_view(canhear_range, src) @@ -37,9 +36,8 @@ return 0 if (!(src.wires & WIRE_RECEIVE)) return 0 - if(!src.loc) - return 0 - if(src.loc.z != level) + var/turf/position = get_turf(src) + if(isnull(position) || position.z != level) return 0 if (!src.listening) return 0 diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index 05eec40b5d9..b08fc71ed7a 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -69,7 +69,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use frequency = sanitize_frequency(frequency, maxf) // The max freq is higher than a regular headset to decrease the chance of people listening in, if you use the higher channels. else if (frequency < 1441 || frequency > maxf) - world.log << "[src] ([type]) has a frequency of [frequency], sanitizing." + //world.log << "[src] ([type]) has a frequency of [frequency], sanitizing." frequency = sanitize_frequency(frequency, maxf) set_frequency(frequency) @@ -358,16 +358,21 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use signal.frequency = connection.frequency // Quick frequency set //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in world) - if(src.loc.z == R.loc.z) + + var/turf/position = get_turf(src) + + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + var/turf/receiver_turf = get_turf(R) + if(position.z == receiver_turf.z) R.receive_signal(signal) // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in world) - if(src.loc.z == R.loc.z) + for(var/obj/machinery/telecomms/allinone/R in telecomms_list) + var/turf/receiver_turf = get_turf(R) + if(position.z == receiver_turf.z) R.receive_signal(signal) - // Receiving code can be located in Telecommunications.dm + // Receiving code can be located in Telecommunications.dm return @@ -410,8 +415,11 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use ) signal.frequency = connection.frequency // Quick frequency set - for(var/obj/machinery/telecomms/receiver/R in world) - if(src.loc.z == R.loc.z) + var/turf/position = get_turf(src) + + for(var/obj/machinery/telecomms/receiver/R in telecomms_list) + var/turf/receiver_turf = get_turf(R) + if(position.z == receiver_turf.z) R.receive_signal(signal) @@ -429,7 +437,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use Broadcast_Message(connection, M, voicemask, M.voice_message, src, message, displayname, jobname, real_name, M.voice_name, - filter_type, signal.data["compression"], src.loc.z) + filter_type, signal.data["compression"], position.z) @@ -473,7 +481,7 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use //for (var/obj/item/device/radio/R in radio_connection.devices) for (var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"]) // Modified for security headset code -- TLE //if(R.accept_rad(src, message)) - receive |= R.send_hear(display_freq) + receive |= R.send_hear(display_freq, 0) //world << "DEBUG: receive.len=[receive.len]" var/list/heard_masked = list() // masked name or no real name @@ -633,7 +641,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use if (!(wires & WIRE_RECEIVE)) return 0 - if(isnull(src.loc) || src.loc.z != level) + var/turf/position = get_turf(src) + if(isnull(position) || position.z != level) return 0 if(freq == SYND_FREQ) if(!(src.syndie))//Checks to see if it's allowed on that frequency, based on the encryption keys @@ -656,9 +665,9 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use return canhear_range -/obj/item/device/radio/proc/send_hear(freq) - var/range = receive_range(freq) +/obj/item/device/radio/proc/send_hear(freq, level) + var/range = receive_range(freq, level) if(range > 0) return get_mobs_in_view(canhear_range, src)