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