From 06b4c17d97cb393bea8b22cc1aee8c0dabbed86e Mon Sep 17 00:00:00 2001 From: "VivianFoxfoot@gmail.com" Date: Sat, 25 Feb 2012 02:28:17 +0000 Subject: [PATCH] Headsets are now modular, and come with encryption keys that correspond to secure channels. Currently, encryption keys are based around previous groupings (HoS encrpytion key, Captain encrpytion key). Consideration was made to giving an encrpytion key for each channel (Security encryption key, Command encryption key), and might be switched to that. Turns the binary translator into an encryption key and makes it actually work properly. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3189 316c924e-a436-60f5-8080-3fe189b3f50e --- code/game/objects/devices/PDA/uplink.dm | 2 +- code/game/objects/radio/encryptionkey.dm | 98 ++++++++++++++ code/game/objects/radio/headset.dm | 163 +++++++++++++++++++---- code/modules/mob/living/silicon/say.dm | 5 +- html/changelog.html | 9 ++ icons/obj/radio.dmi | Bin 4323 -> 4429 bytes tgstation.dme | 3 +- 7 files changed, 248 insertions(+), 32 deletions(-) create mode 100644 code/game/objects/radio/encryptionkey.dm diff --git a/code/game/objects/devices/PDA/uplink.dm b/code/game/objects/devices/PDA/uplink.dm index 8c6faf0f523..19bd8eae388 100644 --- a/code/game/objects/devices/PDA/uplink.dm +++ b/code/game/objects/devices/PDA/uplink.dm @@ -205,7 +205,7 @@ if("botchat") if (uses >= 3) uses -= 3 - new /obj/item/device/radio/headset/binary(get_turf(hostpda)) + new /obj/item/device/radio/headset/encryptionkey/binary(get_turf(hostpda)) feedback_add_details("traitor_uplink_items_bought","BT") if("singubeacon") if(uses >= 7) diff --git a/code/game/objects/radio/encryptionkey.dm b/code/game/objects/radio/encryptionkey.dm new file mode 100644 index 00000000000..82a771fd5ec --- /dev/null +++ b/code/game/objects/radio/encryptionkey.dm @@ -0,0 +1,98 @@ + +/obj/item/device/radio/headset/encryptionkey/ + name = "Standard Encrpytion Key" + desc = "An encyption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN." + icon_state = "cypherkey" + item_state = "" + +/obj/item/device/radio/headset/encryptionkey/New() + +/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) + +/obj/item/device/radio/headset/encryptionkey/traitor + channels = list("Syndicate" = 1) + origin_tech = "syndicate=3" + +/obj/item/device/radio/headset/encryptionkey/binary + translate_binary = 1 + origin_tech = "syndicate=3" + +/obj/item/device/radio/headset/encryptionkey/headset_sec + name = "Security Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Security" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_eng + name = "Engineering Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Engineering" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_rob + name = "Robotics Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Engineering" = 1, "Science" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_med + name = "Medical Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Medical" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_sci + name = "Science Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Science" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_medsci + name = "Medical Research Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Medical" = 1, "Science" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_com + name = "Command Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Command" = 1) + +/obj/item/device/radio/headset/encryptionkey/heads/captain + name = "Captain's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0, "Mining" = 0, "Cargo" = 0) + +/obj/item/device/radio/headset/encryptionkey/heads/rd + name = "Research Director's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Science" = 1, "Command" = 1) + +/obj/item/device/radio/headset/encryptionkey/heads/hos + name = "Head of Security's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Security" = 1, "Command" = 1) + +/obj/item/device/radio/headset/encryptionkey/heads/ce + name = "Chief Engineer's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Engineering" = 1, "Command" = 1) + +/obj/item/device/radio/headset/encryptionkey/heads/cmo + name = "Chief Medical Officer's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Medical" = 1, "Command" = 1) + +/obj/item/device/radio/headset/encryptionkey/heads/hop + name = "Head of Personnel's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Command" = 1, "Security" = 0, "Cargo" = 1, "Mining" = 0) + +/obj/item/device/radio/headset/encryptionkey/headset_mine + name = "Mining Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Mining" = 1) + +/obj/item/device/radio/headset/encryptionkey/heads/qm + name = "Quartermaster's Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Cargo" = 1, "Mining" = 1) + +/obj/item/device/radio/headset/encryptionkey/headset_cargo + name = "Cargo Radio Encryption Key" + desc = "An encyption key for a radio headset. Contains cypherkeys." + channels = list("Cargo" = 1) \ No newline at end of file diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm index 25ba6283d20..51525d7ddac 100644 --- a/code/game/objects/radio/headset.dm +++ b/code/game/objects/radio/headset.dm @@ -1,136 +1,245 @@ /obj/item/device/radio/headset name = "Radio Headset" - desc = "An intercom that fits over the head." + desc = "An updated, modular intercom that fits over the head. Takes encryption keys" icon_state = "headset" item_state = "headset" g_amt = 0 m_amt = 75 subspace_transmission = 1 - var - protective_temperature = 0 - translate_binary = 0 - translate_hive = 0 + + var/protective_temperature = 0 + var/translate_binary = 0 + var/translate_hive = 0 + var/obj/item/device/radio/headset/encryptionkey/keyslot1 = null + var/obj/item/device/radio/headset/encryptionkey/keyslot2 = null + +/obj/item/device/radio/headset/New() + ..() + keyslot1 = new /obj/item/device/radio/headset/encryptionkey/ + recalculateChannels() /obj/item/device/radio/headset/traitor - channels = list("Syndicate" = 1) origin_tech = "syndicate=3" +/obj/item/device/radio/headset/traitor/New() + ..() + del(keyslot1) + keyslot1 = new /obj/item/device/radio/headset/encryptionkey/traitor /obj/item/device/radio/headset/binary - translate_binary = 1 origin_tech = "syndicate=3" +/obj/item/device/radio/headset/binary/New() + ..() + del(keyslot1) + keyslot1 = new /obj/item/device/radio/headset/encryptionkey/binary /obj/item/device/radio/headset/headset_sec name = "Security Radio Headset" desc = "This is used by your elite security force. To access the security channel, use :s." icon_state = "sec_headset" item_state = "headset" - channels = list("Security" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_sec /obj/item/device/radio/headset/headset_eng name = "Engineering Radio Headset" desc = "When the engineers wish to chat like girls. To access the engineering channel, use :e. " icon_state = "eng_headset" item_state = "headset" - channels = list("Engineering" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_eng /obj/item/device/radio/headset/headset_rob name = "Robotics Radio Headset" desc = "Made specifically for the roboticists who cannot decide between departments. To access the engineering channel, use :e. For research, use :n." icon_state = "rob_headset" item_state = "headset" - channels = list("Engineering" = 1, "Science" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_rob /obj/item/device/radio/headset/headset_med name = "Medical Radio Headset" desc = "A headset for the trained staff of the medbay. To access the medical channel, use :m." icon_state = "med_headset" item_state = "headset" - channels = list("Medical" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_med /obj/item/device/radio/headset/headset_sci name = "Science Radio Headset" desc = "A sciency headset. Like usual. To access the science channel, use :n." icon_state = "com_headset" item_state = "headset" - channels = list("Science" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_sci /obj/item/device/radio/headset/headset_medsci name = "Medical Research Radio Headset" desc = "A headset that is a result of the mating between medical and science. To access the medical channel, use :m. For science, use :n." icon_state = "med_headset" item_state = "headset" - channels = list("Medical" = 1, "Science" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_medsci /obj/item/device/radio/headset/headset_com name = "Command Radio Headset" desc = "A headset with a commanding channel. To access the command channel, use :c." icon_state = "com_headset" item_state = "headset" - channels = list("Command" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_com /obj/item/device/radio/headset/heads/captain name = "Captain's Headset" desc = "The headset of the boss. Channels are as follows: :c - command, :s - security, :e - engineering, :d - mining, :q - cargo, :m - medical, :n - science." icon_state = "com_headset" item_state = "headset" - channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0, "Mining" = 0, "Cargo" = 0) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/captain /obj/item/device/radio/headset/heads/rd name = "Research Director's Headset" desc = "Headset of the researching God. To access the science channel, use :n. For command, use :c." icon_state = "com_headset" item_state = "headset" - channels = list("Science" = 1, "Command" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/rd /obj/item/device/radio/headset/heads/hos name = "Head of Security's Headset" desc = "The headset of the man who protects your worthless lifes. To access the security channel, use :s. For command, use :c." icon_state = "com_headset" item_state = "headset" - channels = list("Security" = 1, "Command" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/hos /obj/item/device/radio/headset/heads/ce name = "Chief Engineer's Headset" desc = "The headset of the guy who is in charge of morons. To access the engineering channel, use :e. For command, use :c." icon_state = "com_headset" item_state = "headset" - channels = list("Engineering" = 1, "Command" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/ce /obj/item/device/radio/headset/heads/cmo name = "Chief Medical Officer's Headset" desc = "The headset of the highly trained medical chief. To access the medical channel, use :m. For command, use :c." icon_state = "com_headset" item_state = "headset" - channels = list("Medical" = 1, "Command" = 1) + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/cmo /obj/item/device/radio/headset/heads/hop name = "Head of Personnel's Headset" desc = "The headset of the guy who will one day be captain. Channels are as follows: :c - command, :s - security, :q - cargo, :d - mining." icon_state = "com_headset" item_state = "headset" - channels = list("Command" = 1, "Security" = 0, "Cargo" = 1, "Mining" = 0) - + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/hop /obj/item/device/radio/headset/headset_mine name = "Mining Radio Headset" desc = "Headset used by miners. How useless. To access the mining channel, use :d." icon_state = "mine_headset" item_state = "headset" - channels = list("Mining" = 1) - - + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_mine /obj/item/device/radio/headset/heads/qm name = "Quartermaster's Headset" desc = "The headset of the man who control your toiletpaper supply. To access the cargo channel, use :q. For mining, use :d." icon_state = "cargo_headset" item_state = "headset" - channels = list("Cargo" = 1, "Mining" = 1) - + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/heads/qm /obj/item/device/radio/headset/headset_cargo name = "Cargo Radio Headset" desc = "Headset used by the QM's slaves. To access the cargo channel, use :q." icon_state = "cargo_headset" item_state = "headset" - channels = list("Cargo" = 1) \ No newline at end of file + keyslot2 = new /obj/item/device/radio/headset/encryptionkey/headset_cargo + +/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob) +// ..() + user.machine = src + if (!( istype(W, /obj/item/weapon/screwdriver) || (istype(W, /obj/item/device/radio/headset/encryptionkey/ )))) + return + + if(istype(W, /obj/item/weapon/screwdriver)) + if(keyslot1 || keyslot2) + + + for(var/ch_name in channels) + radio_controller.remove_object(src, radiochannels[ch_name]) + secure_radio_connections[ch_name] = null + + + if(keyslot1) + var/turf/T = get_turf(user) + if(T) + keyslot1.loc = T + keyslot1 = null + + + + if(keyslot2) + var/turf/T = get_turf(user) + if(T) + keyslot2.loc = T + keyslot2 = null + + + recalculateChannels() + user << "You pop out the encryption keys in the headset!" + + else + user << "This headset doesn't have any encryption keys! How useless..." + + if(istype(W, /obj/item/device/radio/headset/encryptionkey/)) + if(keyslot1 && keyslot2) + user << "The headset can't hold another key!" + return + + if(!keyslot1) + user.drop_item() + W.loc = src + keyslot1 = W + + else + user.drop_item() + W.loc = src + keyslot2 = W + + + recalculateChannels() + + return + + +/obj/item/device/radio/headset/proc/recalculateChannels() + src.channels = list() + src.translate_binary = 0 + src.translate_hive = 0 + + if(keyslot1) + for(var/ch_name in keyslot1.channels) + if(ch_name in src.channels) + continue + src.channels += ch_name + src.channels[ch_name] = keyslot1.channels[ch_name] + + if(keyslot1.translate_binary) + src.translate_binary = 1 + + if(keyslot1.translate_hive) + src.translate_hive = 1 + + if(keyslot2) + for(var/ch_name in keyslot2.channels) + if(ch_name in src.channels) + continue + src.channels += ch_name + src.channels[ch_name] = keyslot2.channels[ch_name] + + if(keyslot2.translate_binary) + src.translate_binary = 1 + + if(keyslot2.translate_hive) + src.translate_hive = 1 + + + for (var/ch_name in channels) + if(!radio_controller) + sleep(30) // Waiting for the radio_controller to be created. + if(!radio_controller) + src.name = "Broken Radio Headset" + return + + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + + return \ No newline at end of file diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 6108dd392ba..8efd1d52297 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -81,9 +81,8 @@ var/rendered = "Robotic Talk, [name] [message_a]" for (var/mob/living/S in world) if(!S.stat) - if(S.robot_talk_understand) - if(S.robot_talk_understand == robot_talk_understand) - S.show_message(rendered, 2) + if(S.robot_talk_understand && (S.robot_talk_understand == robot_talk_understand)) + S.show_message(rendered, 2) else if (S.binarycheck()) S.show_message(rendered, 2) diff --git a/html/changelog.html b/html/changelog.html index 0fcc9e162d1..c8eee310613 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -92,6 +92,15 @@ should be listed in the changelog upon commit tho. Thanks. --> +
+

2/24/2012

+

PolymorphBlue updated:

+ +
+

2/23/2012

PolymorphBlue updated:

diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index d066b144abb937632bafaba24812712dfd60f14e..69180436a7c4ea7e1b0476a0ed07aa7b623d80ff 100644 GIT binary patch delta 4322 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 E1L6j4&;S4c delta 4205 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 DBiAhA diff --git a/tgstation.dme b/tgstation.dme index ce15a77f0c4..7e9d4d6906f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -163,10 +163,10 @@ #define FILE_DIR "icons/vending_icons" #define FILE_DIR "interface" #define FILE_DIR "maps" +#define FILE_DIR "maps/backup" #define FILE_DIR "sound" #define FILE_DIR "sound/AI" #define FILE_DIR "sound/ambience" -#define FILE_DIR "sound/announcer" #define FILE_DIR "sound/effects" #define FILE_DIR "sound/items" #define FILE_DIR "sound/machines" @@ -677,6 +677,7 @@ #include "code\game\objects\items\weapons\implants\implantpad.dm" #include "code\game\objects\radio\beacon.dm" #include "code\game\objects\radio\electropack.dm" +#include "code\game\objects\radio\encryptionkey.dm" #include "code\game\objects\radio\headset.dm" #include "code\game\objects\radio\intercom.dm" #include "code\game\objects\radio\radio.dm"