From 785eb9dcc6a4051a5ae14e60fd3dac7f96de76fd Mon Sep 17 00:00:00 2001 From: "rastaf.zero@gmail.com" Date: Sat, 12 Feb 2011 00:08:42 +0000 Subject: [PATCH] RADIO HEADSET update by Barhandar and me: Three new channels and new :h-like shortcuts for each channel. shortcuts now are: ":r" = "right hand" (unchanged) ":l" = "left hand" (unchanged) ":i" = "intercom" (unchanged) ":h" = "department" (unchanged for everyone except captain) ":w" = "whisper" (NEW shortcut) ":b" = "binary" (CHANGED) ":a" = "alientalk" (unchanged) ":t" = "Syndicate" (NEW channel) ":c" = "Command" (NEW shortcut) ":n" = "Science" (NEW channel) ("n" because all other letters are occupied) ":m" = "Medical" (NEW shortcut) ":e" = "Engineering" (NEW shortcut) ":s" = "Security" (NEW shortcut) Note: ":h" works as before, i.e. sends on engineering channel for engineers and CE, on medical channel for MD, CMO,etc and so on. All heads have command channel in their headsets along with department channel. Warden and QM aren't heads. Captain have almost all channels in his/her headset, but some are switched off by default. The default channel for captain is "Command" now. Bugs fixed: If headset is tuned to other frequency dept channel don't work. A receive wire in intercoms can be cut. Some others bugs. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1020 316c924e-a436-60f5-8080-3fe189b3f50e --- code/defines/obj/radio.dm | 163 ++++++---- code/game/communications.dm | 18 +- code/game/jobs/jobprocs.dm | 11 +- code/game/objects/radio/electropack.dm | 4 +- code/game/objects/radio/intercom.dm | 2 + code/game/objects/radio/radio.dm | 314 +++++++++++-------- code/game/objects/stacks/stack.dm | 1 + code/modules/mob/living/carbon/human/life.dm | 2 +- code/modules/mob/living/say.dm | 150 +++++---- code/stylesheet.dm | 13 +- icons/changelog.html | 5 +- 11 files changed, 429 insertions(+), 254 deletions(-) diff --git a/code/defines/obj/radio.dm b/code/defines/obj/radio.dm index a469a6420c9..07aeb3fd96f 100644 --- a/code/defines/obj/radio.dm +++ b/code/defines/obj/radio.dm @@ -3,26 +3,30 @@ suffix = "\[3\]" icon_state = "walkietalkie" item_state = "walkietalkie" - var/last_transmission - var/frequency = 1459 - var/secure_frequency - var/traitor_frequency = 0.0 - var/obj/item/device/radio/patch_link = null - var/obj/item/weapon/syndicate_uplink/traitorradio = null - var/wires = WIRE_SIGNAL | WIRE_RECEIVE | WIRE_TRANSMIT - var/b_stat = 0.0 - var/broadcasting = null - var/listening = 1.0 - var/freerange = 0 // 0 - Sanitize frequencies, 1 - Full range - flags = 450.0 + var + last_transmission + frequency = 1459 //common chat + traitor_frequency = 0 //tune to frequency to unlock traitor supplies + obj/item/device/radio/patch_link = null + obj/item/weapon/syndicate_uplink/traitorradio = null + wires = WIRE_SIGNAL | WIRE_RECEIVE | WIRE_TRANSMIT + b_stat = 0 + broadcasting = 0 + listening = 1 + freerange = 0 // 0 - Sanitize frequencies, 1 - Full range + list/channels = list() //see communications.dm for full list. First channes is a "default" for :h +// "Example" = FREQ_LISTENING|FREQ_BROADCASTING + flags = 450 throw_speed = 2 throw_range = 9 - w_class = 2.0 + w_class = 2 var/const WIRE_SIGNAL = 1 //sends a signal, like to set off a bomb or electrocute someone WIRE_RECEIVE = 2 WIRE_TRANSMIT = 4 TRANSMISSION_DELAY = 5 // only 2/second/radio + FREQ_LISTENING = 1 + //FREQ_BROADCASTING = 2 /obj/item/device/radio/beacon name = "Tracking Beacon" @@ -39,62 +43,101 @@ /obj/item/device/radio/electropack name = "Electropack" icon_state = "electropack0" - var/code = 2.0 - var/on = 0.0 + var/code = 2 + var/on = 0 var/e_pads = 0.0 frequency = 1449 w_class = 5.0 - flags = 323.0 + flags = 323 item_state = "electropack" -/obj/item/device/radio/headset - name = "Radio Headset" - icon_state = "headset" - item_state = "headset" - var/protective_temperature = 0 - var/bintran = 0 - -/obj/item/device/radio/headset/traitor - bintran = 1 - -/obj/item/device/radio/headset/headset_sec // -- TLE - name = "Security Radio Headset" - icon_state = "sec_headset" - item_state = "headset" - secure_frequency = 1359 - -/obj/item/device/radio/headset/headset_eng // -- TLE - name = "Engineering Radio Headset" - icon_state = "eng_headset" - item_state = "headset" - secure_frequency = 1357 - -/obj/item/device/radio/headset/headset_med // -- TLE - name = "Medical Radio Headset" - icon_state = "med_headset" - item_state = "headset" - secure_frequency = 1355 - -/obj/item/device/radio/headset/headset_com // -- TLE - name = "Command Radio Headset" - icon_state = "com_headset" - item_state = "headset" - secure_frequency = 1353 - -/obj/item/device/radio/intercom - name = "Station Intercom (Radio)" - icon_state = "intercom" - anchored = 1.0 - var/number = 0 - var/anyai = 1 - var/mob/living/silicon/ai/ai = list() - /obj/item/device/radio/signaler name = "Remote Signaling Device" icon_state = "signaller" item_state = "signaler" - var/code = 30.0 - w_class = 1.0 + var/code = 30 + w_class = 1 frequency = 1457 var/delay = 0 var/airlock_wire = null + +/obj/item/device/radio/intercom + name = "Station Intercom (Radio)" + icon_state = "intercom" + anchored = 1 + var/number = 0 + var/anyai = 1 + var/mob/living/silicon/ai/ai = list() + +/obj/item/device/radio/headset + name = "Radio Headset" + icon_state = "headset" + item_state = "headset" + var + protective_temperature = 0 + translate_binary = 0 + translate_hive = 0 + +/obj/item/device/radio/headset/traitor + translate_binary = 1 + channels = list("Syndicate" = 1) + +/obj/item/device/radio/headset/headset_sec // -- TLE + name = "Security Radio Headset" + icon_state = "sec_headset" + item_state = "headset" + channels = list("Security" = 1) + +/obj/item/device/radio/headset/headset_eng // -- TLE + name = "Engineering Radio Headset" + icon_state = "eng_headset" + item_state = "headset" + channels = list("Engineering" = 1) + +/obj/item/device/radio/headset/headset_med // -- TLE + name = "Medical Radio Headset" + icon_state = "med_headset" + item_state = "headset" + channels = list("Medical" = 1) + +/obj/item/device/radio/headset/headset_com // -- TLE + name = "Command Radio Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Command" = 1) + +/obj/item/device/radio/headset/headset_sci // -- Bar + name = "Science Radio Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Science" = 1) + +/obj/item/device/radio/headset/heads/captain // -- Bar + name = "Captain's Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0) + +/obj/item/device/radio/headset/heads/rd // -- Bar + name = "Research Director's Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Science" = 1, "Command" = 1, "Medical" = 1) + +/obj/item/device/radio/headset/heads/hos // -- Bar + name = "Head of Security's Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Security" = 1, "Command" = 1) + +/obj/item/device/radio/headset/heads/ce // -- Bar + name = "Chief Engineer's Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Engineering" = 1, "Command" = 1) + +/obj/item/device/radio/headset/heads/cmo // -- Bar + name = "Chief Medical Officer's Headset" + icon_state = "com_headset" + item_state = "headset" + channels = list("Medical" = 1, "Command" = 1) \ No newline at end of file diff --git a/code/game/communications.dm b/code/game/communications.dm index e39462f30ea..b4b4ab6ddf9 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -67,6 +67,7 @@ Radiochat range: 1441 to 1489 Radio: 1459 - standard radio chat +1351 - Science 1353 - Command 1355 - Medical 1357 - Engineering @@ -75,8 +76,8 @@ Radio: 1443 - Confession Intercom Devices: -1457 - RSD default 1451 - tracking implant +1457 - RSD default On the map: 1311 for prison shuttle console (in fact, it is not used) @@ -94,6 +95,21 @@ On the map: 1455 for AI access */ +var/list/radiochannels = list( + "Common" = 1459, + "Science" = 1351, + "Command" = 1353, + "Medical" = 1355, + "Engineering" = 1357, + "Security" = 1359, + "Deathsquad" = 1441, + "Syndicate" = 1213, +) +//depenging helpers +var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441) +var/const/COMM_FREQ = 1353 +var/const/SYND_FREQ = 1213 + #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm index 94ece7fa2df..a97e8424cc1 100644 --- a/code/game/jobs/jobprocs.dm +++ b/code/game/jobs/jobprocs.dm @@ -396,7 +396,7 @@ src.equip_if_possible(new /obj/item/device/flashlight/pen(src), slot_r_store) if ("Captain") - src.equip_if_possible(new /obj/item/device/radio/headset/headset_com (src), slot_ears) // -- TLE + src.equip_if_possible(new /obj/item/device/radio/headset/heads/captain (src), slot_ears) src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back) src.equip_if_possible(new /obj/item/device/pda/captain(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/captain(src), slot_w_uniform) @@ -443,6 +443,7 @@ src.equip_if_possible(new /obj/item/device/flash(src), slot_l_store) if ("Scientist") + src.equip_if_possible(new /obj/item/device/radio/headset/headset_sci (src), slot_ears) src.equip_if_possible(new /obj/item/device/pda/toxins(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/scientist(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/shoes/white(src), slot_shoes) @@ -452,7 +453,7 @@ src.equip_if_possible(new /obj/item/weapon/tank/air(src), slot_l_hand) if ("Head of Security") - src.equip_if_possible(new /obj/item/device/radio/headset/headset_sec (src), slot_ears) // -- TLE + src.equip_if_possible(new /obj/item/device/radio/headset/heads/hos (src), slot_ears) src.equip_if_possible(new /obj/item/device/pda/heads(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/under/rank/head_of_security(src), slot_w_uniform) src.equip_if_possible(new /obj/item/clothing/suit/armor/hos(src), slot_wear_suit) @@ -553,7 +554,7 @@ src.equip_if_possible(new /obj/item/device/pda/quartermaster(src), slot_belt) if ("Chief Engineer") - src.equip_if_possible(new /obj/item/device/radio/headset/headset_eng (src), slot_ears) // -- TLE + src.equip_if_possible(new /obj/item/device/radio/headset/heads/ce (src), slot_ears) src.equip_if_possible(new /obj/item/device/pda/heads(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/gloves/yellow(src), slot_gloves) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) @@ -562,7 +563,7 @@ src.equip_if_possible(new /obj/item/clothing/under/rank/chief_engineer(src), slot_w_uniform) if ("Research Director") - src.equip_if_possible(new /obj/item/device/radio/headset/headset_com (src), slot_ears) // -- TLE + src.equip_if_possible(new /obj/item/device/radio/headset/heads/rd (src), slot_ears) src.equip_if_possible(new /obj/item/device/pda/heads(src), slot_belt) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) src.equip_if_possible(new /obj/item/clothing/under/rank/research_director(src), slot_w_uniform) @@ -572,7 +573,7 @@ src.equip_if_possible(new /obj/item/device/flashlight/pen(src), slot_r_store) if ("Chief Medical Officer") - src.equip_if_possible(new /obj/item/device/radio/headset/headset_med (src), slot_ears) // -- TLE + src.equip_if_possible(new /obj/item/device/radio/headset/heads/cmo (src), slot_ears) src.equip_if_possible(new /obj/item/device/pda/medical(src), slot_belt) src.equip_if_possible(new /obj/item/weapon/storage/backpack/medic (src), slot_back) src.equip_if_possible(new /obj/item/clothing/shoes/brown(src), slot_shoes) diff --git a/code/game/objects/radio/electropack.dm b/code/game/objects/radio/electropack.dm index 22e570435d9..cfef515f09e 100644 --- a/code/game/objects/radio/electropack.dm +++ b/code/game/objects/radio/electropack.dm @@ -96,14 +96,14 @@ usr << browse(null, "window=radio") return return - +/* /obj/item/device/radio/electropack/accept_rad(obj/item/device/radio/signaler/R as obj, message) if ((istype(R, /obj/item/device/radio/signaler) && R.frequency == src.frequency && R.code == src.code)) return 1 else return null - return + return*/ /obj/item/device/radio/electropack/receive_signal(datum/signal/signal) if(!signal || (signal.encryption != code)) diff --git a/code/game/objects/radio/intercom.dm b/code/game/objects/radio/intercom.dm index 6456ac6e4e3..04f86f44889 100644 --- a/code/game/objects/radio/intercom.dm +++ b/code/game/objects/radio/intercom.dm @@ -13,6 +13,8 @@ attack_self(user) /obj/item/device/radio/intercom/send_hear() + if (!(src.wires & WIRE_RECEIVE)) + return if (src.listening) return hearers(7, src.loc) diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm index f078495762d..36d91c50599 100644 --- a/code/game/objects/radio/radio.dm +++ b/code/game/objects/radio/radio.dm @@ -12,12 +12,35 @@ src.frequency = sanitize_frequency(src.frequency) set_frequency(frequency) + + for (var/ch_name in channels) + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + /* if(src.secure_frequency) secure_radio_connection = radio_controller.add_object(src, secure_frequency, RADIO_CHAT) + if(src.channels.Find("Medical")) + med_connection = radio_controller.add_object(src, med_freq, RADIO_CHAT) + if(src.channels.Find("Science")) + sci_connection = radio_controller.add_object(src, sci_freq, RADIO_CHAT) + if(src.channels.Find("Security")) + sec_connection = radio_controller.add_object(src, sec_freq, RADIO_CHAT) + if(src.channels.Find("Command")) + com_connection = radio_controller.add_object(src, com_freq, RADIO_CHAT) + if(src.channels.Find("Engineer")) + eng_connection = radio_controller.add_object(src, eng_freq, RADIO_CHAT)*/ /obj/item/device/radio - var/datum/radio_frequency/radio_connection - var/datum/radio_frequency/secure_radio_connection // Shared by Mport2004 for the security headsets -- TLE + var + datum/radio_frequency/radio_connection + + list/datum/radio_frequency/secure_radio_connections = new + /* + datum/radio_frequency/secure_radio_connection // Shared by Mport2004 for the security headsets -- TLE + datum/radio_frequency/med_connection + datum/radio_frequency/sci_connection + datum/radio_frequency/com_connection + datum/radio_frequency/eng_connection + datum/radio_frequency/sec_connection*/ proc set_frequency(new_frequency) @@ -27,17 +50,11 @@ /obj/item/device/radio/attack_self(mob/user as mob) user.machine = src - var/t1 - if (src.b_stat) - t1 = {" --------
-Green Wire: [src.wires & 4 ? "Cut" : "Mend"] Wire
-Red Wire: [src.wires & 2 ? "Cut" : "Mend"] Wire
-Blue Wire: [src.wires & 1 ? "Cut" : "Mend"] Wire
"} - else - t1 = "-------" + interact(user) + +/obj/item/device/radio/proc/interact(mob/user as mob) var/dat = {" - +[src] Microphone: [src.broadcasting ? "Engaged" : "Disengaged"]
Speaker: [src.listening ? "Engaged" : "Disengaged"]
Frequency: @@ -45,103 +62,130 @@ Frequency: - [format_frequency(src.frequency)] + -+
-[t1] -
"} ++
"} + + for (var/ch_name in channels) + dat+=text_sec_channel(ch_name, channels[ch_name]) + dat+={"[text_wires()]
"} user << browse(dat, "window=radio") onclose(user, "radio") return +/obj/item/device/radio/proc/text_wires() + if (!src.b_stat) + return "" + return {" +
+Green Wire: [(src.wires & 4) ? "Cut" : "Mend"] Wire
+Red Wire: [(src.wires & 2) ? "Cut" : "Mend"] Wire
+Blue Wire: [(src.wires & 1) ? "Cut" : "Mend"] Wire
"} + + +/obj/item/device/radio/proc/text_sec_channel(var/chan_name, var/chan_stat) + //var/broad = (chan_stat&FREQ_BROADCASTING)!=0 + var/list = !!(chan_stat&FREQ_LISTENING)!=0 +/* +Microphone:" [broad ? "Engaged" : "Disengaged"]" +*/ + return {" +[chan_name]
+Speaker: [list ? "Engaged" : "Disengaged"]
"} + /obj/item/device/radio/Topic(href, href_list) //..() if (usr.stat) return - if ((usr.contents.Find(src) || in_range(src, usr) && istype(src.loc, /turf)) || (istype(usr, /mob/living/silicon))) - usr.machine = src - if (href_list["track"]) - var/mob/target = locate(href_list["track"]) - var/mob/living/silicon/ai/A = locate(href_list["track2"]) - A.ai_actual_track(target) - return - if (href_list["freq"]) - var/new_frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - set_frequency(new_frequency) - - if (src.traitor_frequency && src.frequency == src.traitor_frequency) - usr.machine = null - usr << browse(null, "window=radio") - onclose(usr, "radio") - // now transform the regular radio, into a (disguised)syndicate uplink! - var/obj/item/weapon/syndicate_uplink/T = src.traitorradio - var/obj/item/device/radio/R = src - R.loc = T - T.loc = usr - R.layer = 0 - if (usr.client) - usr.client.screen -= R - if (usr.r_hand == R) - usr.u_equip(R) - usr.r_hand = T - else - usr.u_equip(R) - usr.l_hand = T - R.loc = T - T.layer = 20 - T.attack_self(usr) - return - else - if (href_list["talk"]) - src.broadcasting = text2num(href_list["talk"]) - else - if (href_list["listen"]) - src.listening = text2num(href_list["listen"]) - else - if (href_list["wires"]) - var/t1 = text2num(href_list["wires"]) - if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) - return - if (t1 & 1) - if (src.wires & 1) - src.wires &= 65534 - else - src.wires |= 1 - else - if (t1 & 2) - if (src.wires & 2) - src.wires &= 65533 - else - src.wires |= 2 - else - if (t1 & 4) - if (src.wires & 4) - src.wires &= 65531 - else - src.wires |= 4 - if (!( src.master )) - if (istype(src.loc, /mob)) - attack_self(src.loc) - else - src.updateDialog() - else - if (istype(src.master.loc, /mob)) - src.attack_self(src.master.loc) - else - src.updateDialog() - src.add_fingerprint(usr) - else + if (\ + !(\ + istype(usr, /mob/living/silicon) || \ + (\ + usr.contents.Find(src) || \ + ( in_range(src, usr) && istype(src.loc, /turf) )\ + )\ + )\ + ) usr << browse(null, "window=radio") + return + usr.machine = src + if (href_list["track"]) + var/mob/target = locate(href_list["track"]) + var/mob/living/silicon/ai/A = locate(href_list["track2"]) + A.ai_actual_track(target) + return + else if (href_list["freq"]) + var/new_frequency = (frequency + text2num(href_list["freq"])) + if (!src.freerange || (src.frequency < 1200 || src.frequency > 1600)) + new_frequency = sanitize_frequency(new_frequency) + set_frequency(new_frequency) -/obj/item/device/radio/talk_into(mob/M as mob, message, secure) + if (src.traitor_frequency && src.frequency == src.traitor_frequency) + usr.machine = null + usr << browse(null, "window=radio") + // now transform the regular radio, into a (disguised)syndicate uplink! + var/obj/item/weapon/syndicate_uplink/T = src.traitorradio + var/obj/item/device/radio/R = src + R.loc = T + T.loc = usr + R.layer = 0 + if (usr.client) + usr.client.screen -= R + if (usr.r_hand == R) + usr.u_equip(R) + usr.r_hand = T + else + usr.u_equip(R) + usr.l_hand = T + R.loc = T + T.layer = 20 + T.attack_self(usr) + return + else if (href_list["talk"]) + src.broadcasting = text2num(href_list["talk"]) + else if (href_list["listen"]) + var/chan_name = href_list["ch_name"] + if (!chan_name) + src.listening = text2num(href_list["listen"]) + else + if (channels[chan_name] & FREQ_LISTENING) + channels[chan_name] &= ~FREQ_LISTENING + else + channels[chan_name] |= FREQ_LISTENING + else if (href_list["wires"]) + var/t1 = text2num(href_list["wires"]) + if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) )) + return + if (src.wires & t1) + src.wires &= ~t1 + else + src.wires |= t1 + if (!( src.master )) + if (istype(src.loc, /mob)) + interact(src.loc) + else + src.updateDialog() + else + if (istype(src.master.loc, /mob)) + interact(src.master.loc) + else + src.updateDialog() + src.add_fingerprint(usr) + +/obj/item/device/radio/talk_into(mob/M as mob, message, channel) var/datum/radio_frequency/connection = null // Code shared by Mport2004 for Security Headsets -- TLE - var/datum/display_freq = src.frequency - if(secure && src.secure_radio_connection) - connection = src.secure_radio_connection - display_freq = src.secure_frequency + if(channel && src.channels && src.channels.len > 0) + if (channel == "department") + //world << "DEBUG: channel=\"[channel]\" switching to \"[src.channels[1]]\"" + channel = src.channels[1] + connection = secure_radio_connections[channel] else connection = src.radio_connection - secure = 0 + channel = null + if (!istype(connection)) + return + var/display_freq = connection.frequency + //world << "DEBUG: used channel=\"[channel]\" frequency= \"[display_freq]\" connection.devices.len = [connection.devices.len]" var/eqjobname @@ -157,18 +201,19 @@ Frequency: else eqjobname = "Unknown" - if (!(src.wires & 4)) + if (!(src.wires & WIRE_TRANSMIT)) return var/list/receive = list() //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)) - for (var/i in R.send_hear()) - if (!(i in receive)) - receive += i + //if(R.accept_rad(src, message)) + for (var/i in R.send_hear(display_freq)) + if (!(i in receive)) + receive += i + //world << "DEBUG: receive.len=[receive.len]" var/list/heard_masked = list() // masked name or no real name var/list/heard_normal = list() // normal message var/list/heard_voice = list() // voice message @@ -187,29 +232,35 @@ Frequency: heard_garbled += R if (length(heard_masked) || length(heard_normal) || length(heard_voice) || length(heard_garbled)) - var/part_a = "" + var/part_a = "" //var/part_b = " \icon[src]\[[format_frequency(src.frequency)]\] " - var/part_b = " \icon[src]\[[format_frequency(display_freq)]\] " // Tweaked for security headsets -- TLE + var/freq_text = (display_freq!=SYND_FREQ) ? format_frequency(display_freq) : "#unkn" + var/part_b = " \icon[src]\[[freq_text]\] " // Tweaked for security headsets -- TLE var/part_c = "" - if(findtext(part_b, "135.3") || findtext(part_b, "135.5") || findtext(part_b, "135.7") || findtext(part_b, "135.9")) + if (display_freq==SYND_FREQ) + part_a = "" + else if (display_freq==COMM_FREQ) + part_a = "" + else if (display_freq in DEPT_FREQS) part_a = "" + var/quotedmsg = M.say_quote(message) if (length(heard_masked)) - var/rendered = "[part_a][M.name][part_b][M.say_quote(message)][part_c]" + var/rendered = "[part_a][M.name][part_b][quotedmsg][part_c]" for (var/mob/R in heard_masked) if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][M.name] ([eqjobname]) [part_b][M.say_quote(message)][part_c]", 2) + R.show_message("[part_a][M.name] ([eqjobname]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) if (length(heard_normal)) - var/rendered = "[part_a][M.real_name][part_b][M.say_quote(message)][part_c]" + var/rendered = "[part_a][M.real_name][part_b][quotedmsg][part_c]" for (var/mob/R in heard_normal) if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][M.real_name] ([eqjobname]) [part_b][M.say_quote(message)][part_c]", 2) + R.show_message("[part_a][M.real_name] ([eqjobname]) [part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) @@ -223,41 +274,56 @@ Frequency: R.show_message(rendered, 2) if (length(heard_garbled)) - var/rendered = "[part_a][M.voice_name][part_b][M.say_quote(stars(message))][part_c]" + quotedmsg = M.say_quote(stars(message)) + var/rendered = "[part_a][M.voice_name][part_b][quotedmsg][part_c]" for (var/mob/R in heard_voice) if(istype(R, /mob/living/silicon/ai)) - R.show_message("[part_a][M.voice_name][part_b][M.say_quote(stars(message))][part_c]", 2) + R.show_message("[part_a][M.voice_name][part_b][quotedmsg][part_c]", 2) else R.show_message(rendered, 2) /obj/item/device/radio/hear_talk(mob/M as mob, msg) if (src.broadcasting) talk_into(M, msg) - +/* /obj/item/device/radio/proc/accept_rad(obj/item/device/radio/R as obj, message) if ((R.frequency == src.frequency && message)) return 1 + else if + else return null return - -/obj/item/device/radio/proc/send_hear() +*/ +/obj/item/device/radio/proc/send_hear(freq) if(last_transmission && world.time < (last_transmission + TRANSMISSION_DELAY)) return last_transmission = world.time - if ((src.listening && src.wires & 2)) - var/list/hear = hearers(1, src.loc) + if (!(src.wires & WIRE_RECEIVE)) + return + if (!freq) //recieved on main frequency + if (!src.listening) + return + else + var/accept = (freq==frequency && src.listening) + if (!accept) + for (var/ch_name in channels) + var/datum/radio_frequency/RF = secure_radio_connections[ch_name] + if (RF.frequency==freq && (channels[ch_name]&FREQ_LISTENING)) + accept = 1 + break + if (!accept) + return + var/list/hear = hearers(1, src.loc) - // modified so that a mob holding the radio is always a hearer of it - // this fixes radio problems when inside something (e.g. mulebot) - - if(ismob(loc)) - if(! hear.Find(loc) ) - hear += loc - return hear - return + // modified so that a mob holding the radio is always a hearer of it + // this fixes radio problems when inside something (e.g. mulebot) + if(ismob(loc)) + if(! (loc in hear) ) + hear += loc + return hear /obj/item/device/radio/examine() set src in view() @@ -279,9 +345,7 @@ Frequency: user.show_message("\blue The radio can now be attached and modified!") else user.show_message("\blue The radio can no longer be modified or attached!") - for(var/mob/M in viewers(1, src)) - if (M.client) - src.attack_self(M) + src.updateDialog() //Foreach goto(83) src.add_fingerprint(user) return @@ -289,4 +353,6 @@ Frequency: /obj/item/device/radio/emp_act(severity) broadcasting = 0 listening = 0 + for (var/ch_name in channels) + channels[ch_name] = 0 ..() diff --git a/code/game/objects/stacks/stack.dm b/code/game/objects/stacks/stack.dm index ba8d7c06d1b..0a40ee130a3 100644 --- a/code/game/objects/stacks/stack.dm +++ b/code/game/objects/stacks/stack.dm @@ -84,6 +84,7 @@ src.fingerprints = from.fingerprints src.fingerprintshidden = from.fingerprintshidden src.fingerprintslast = from.fingerprintslast + //TODO bloody overlay /datum/stack_recipe var/title = "ERROR" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 63205e26303..9abb67f927d 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -685,7 +685,7 @@ if (istype(src.ears, /obj/item/device/radio/headset)) var/obj/item/device/radio/headset/H = src.ears - src.robot_talk_understand = H.bintran + src.robot_talk_understand = H.translate_binary if (src.stat == 2 || src.mutations & 4) src.sight |= SEE_TURFS diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4a9c4c7d79c..3d9dc9f9edf 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -4,23 +4,27 @@ if (!message) return - log_say("[src.name]/[src.key] : [message]") - if (length(message) >= 1) - if (copytext(message, 1, 2) != "*") - if (src.miming) - return - - if (src.muted || src.silent) - return + if (src.miming && copytext(message, 1, 2) != "*") + return if (src.stat == 2) return src.say_dead(message) + if (src.muted || src.silent) + return + // wtf? if (src.stat) return + // Mute disability + if (src.sdisabilities & 2) + return + + if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) + return + // emotes if (copytext(message, 1, 2) == "*" && !src.stat) return src.emote(copytext(message, 2)) @@ -29,13 +33,6 @@ if (istype(src, /mob/living/carbon/human) && src.name != src.real_name) var/mob/living/carbon/human/H = src alt_name = " (as [H.get_visible_name()])" - // Mute disability - if (src.sdisabilities & 2) - return - - if (istype(src.wear_mask, /obj/item/clothing/mask/muzzle)) - return - var/italics = 0 var/message_range = null var/message_mode = null @@ -49,47 +46,51 @@ message_mode = "headset" message = copytext(message, 2) - else if (length(message) >= 2) - if (copytext(message, 1, 3) == ":r") - message_mode = "right hand" - message = copytext(message, 3) + var/channel_prefix = copytext(message, 1, 3) - else if (copytext(message, 1, 3) == ":l") - message_mode = "left hand" - message = copytext(message, 3) - - else if (copytext(message, 1, 3) == ":h" || (copytext(message, 1, 3) == ":ð" )) - if (ishuman(src)) - message_mode = "secure headset" - message = copytext(message, 3) - - /*else if (copytext(message, 1, 3) == ":w") - message_mode = "whisper" - message = copytext(message, 3)*/ - - else if (copytext(message, 1, 3) == ":i") - message_mode = "intercom" - message = copytext(message, 3) - - else if ((copytext(message, 1, 3) == ":s" || (copytext(message, 1, 3) == ":û" )) && src.robot_talk_understand) - message = copytext(message, 3) - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - src.robot_talk(message) - return - - else if ((copytext(message, 1, 3) == ":a" || (copytext(message, 1, 3) == ":ô")) && src.alien_talk_understand) - message = copytext(message, 3) - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - src.alien_talk(message) - return + var/list/keys = list( + ":r" = "right hand", + ":l" = "left hand", + ":i" = "intercom", + ":h" = "department", + ":c" = "Command", + ":n" = "Science", + ":m" = "Medical", + ":e" = "Engineering", + ":s" = "Security", + ":w" = "whisper", + ":b" = "binary", + ":a" = "alientalk", + ":t" = "Syndicate", + + //kinda localization -- rastaf0 + //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. + ":ê" = "right hand", + ":ä" = "left hand", + ":ø" = "intercom", + ":ð" = "department", + ":ñ" = "Command", + ":ò" = "Science", + ":ü" = "Medical", + ":ó" = "Engineering", + ":û" = "Security", + ":ö" = "whisper", + ":è" = "binary", + ":ô" = "alientalk", + ":å" = "Syndicate", + ) + + message_mode = keys[channel_prefix] + //world << "channel_prefix=[channel_prefix]; message_mode=[message_mode]" + if (message_mode) + message = trim(copytext(message, 3)) + if (!ishuman(src) && (message_mode=="department" || (message_mode in radiochannels))) + message_mode = null //only humans can use headsets if (!message) return - if (src.stuttering) - message = stutter(message) - // :downs: if (src.brainloss >= 60) message = dd_replacetext(message, " am ", " ") @@ -98,12 +99,18 @@ message = dd_replacetext(message, "you", "u") message = dd_replacetext(message, "help", "halp") message = dd_replacetext(message, "grief", "grife") + message = dd_replacetext(message, "space", "spess") + message = dd_replacetext(message, "carp", "crap") if(prob(50)) message = uppertext(message) - message = "[message][stutter(pick("!", "!!", "!!!"))]" + message += "[stutter(pick("!", "!!", "!!!"))]" if(!src.stuttering && prob(15)) message = stutter(message) + if (src.stuttering) + message = stutter(message) + +/* //qw do not have beesease atm. if(src.virus) if(src.virus.name=="beesease" && src.virus.stage>=2) if(prob(src.virus.stage*10)) @@ -111,7 +118,7 @@ message = "B" for(var/i=0,i 1 && !(M in heard_a)) + if (M.stat >= 2 && !(M in heard_a)) M.show_message(rendered, 2) + + log_say("[src.name]/[src.key] : [message]") \ No newline at end of file diff --git a/code/stylesheet.dm b/code/stylesheet.dm index d6f9d46f191..559b5c14237 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -89,8 +89,19 @@ h1, h2, h3, h4, h5, h6 .deptradio { - color: #993399 + color: #993399; } + +.comradio +{ + color: #ACA82D; +} + +.syndradio +{ + color: #6D3F40; +} + .alert { color: #ff0000; diff --git a/icons/changelog.html b/icons/changelog.html index 1d6f31c410e..cee395058ad 100644 --- a/icons/changelog.html +++ b/icons/changelog.html @@ -44,8 +44,9 @@ Thanks to: CDK Station devs, GoonStation devs, the original SpaceStation developers and Erikat for the new title image

Changelog

-
11.02.2011, r1001-1019
+
11.02.2011, r1001-1020
    +
  • Headsets upgraded. Shortcuts for channels are: :command :security scie:nce :engineering :medical. Also there is :binary :whisper :traitor and old good :h for your department.
  • "One Click Queue" added: When you quickly click on two things in a row, it will automatically queue the second click and execute it after the default 'action delay' of 1 second after the first click. Previously you had to spam-click until 1 second had passed. THIS AFFECTS EVERYTHING. NEEDS TESTING. - Skie
  • EMP effects added for further revisions. - Darem
  • Goon stuff removed, AI/Bots leave behind hidden fingerprints, firedoors fixed, powersinks eat more, small map changes. - Mport @@ -1419,4 +1420,4 @@

    Creative Commons License
    Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
    Rights are currently extended to SomethingAwful Goons only.

    - \ No newline at end of file +