From 604bc648ffe06c892cf54b88d0170afe09ab699f Mon Sep 17 00:00:00 2001 From: GunHog Date: Mon, 3 Nov 2014 21:59:36 -0600 Subject: [PATCH 1/2] Gives Traitor AIs the Syndicate Channel! This PR is intended to support #5283 . - Traitor AIs, when set as a traitor, will be given a new internal radio calibrated to hear and transmit to the encrypted syndicate frequency. Since traitors can buy a headset key for getting the Syndicate Channel, Traitor AIs can get one too, as they cannot purchase their own TC items. --- code/game/gamemodes/traitor/traitor.dm | 2 ++ code/game/objects/items/devices/radio/headset.dm | 10 ++++++++++ code/modules/mob/living/silicon/ai/ai.dm | 3 +++ 3 files changed, 15 insertions(+) diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index d1c5b769b03..d76412ca680 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -195,6 +195,8 @@ killer.set_zeroth_law(law, law_borg) killer << "New law: 0. [law]" give_codewords(killer) + killer.set_syndie_radio() + killer << "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!" /datum/game_mode/proc/auto_declare_completion_traitor() diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 0eb78121d83..4922a7e7825 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -48,6 +48,9 @@ /obj/item/device/radio/headset/syndicate/New() ..() + make_syndie() + +/obj/item/device/radio/headset/proc/make_syndie() qdel(keyslot1) keyslot1 = new /obj/item/device/encryptionkey/syndicate syndie = 1 @@ -193,6 +196,13 @@ name = "\proper Integrated Subspace Transceiver " keyslot2 = new /obj/item/device/encryptionkey/ai +/obj/item/device/radio/headset/ai/syndie + name = "\proper Syndicate Subspace Intercepter" + +/obj/item/device/radio/headset/ai/syndie/New() + ..() + make_syndie() + /obj/item/device/radio/headset/ai/receive_range(freq, level) return ..(freq, level, 1) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index abe9b340810..6390ff12d53 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -762,3 +762,6 @@ var/list/ai_list = list() src << "Accessing Subspace Transceiver control..." if (radio) radio.interact(src) +/mob/living/silicon/ai/proc/set_syndie_radio() + qdel(radio) + radio = new /obj/item/device/radio/headset/ai/syndie(src) \ No newline at end of file From 3c58bf743560967f0160a9863824c7ca5ae17834 Mon Sep 17 00:00:00 2001 From: GunHog Date: Tue, 4 Nov 2014 10:46:18 -0600 Subject: [PATCH 2/2] Moved some things around! All radios now have a keyslot var (replacing keyslot1 for headsets). - recalculateChannels() proc moved to radios instead of just headsets. - Removed the duplicated recalc proc for borg radios. - Moved the translate vars to radios as well. - The syndicate headset subtype has been removed in favor of using the make_syndie() proc on it instead. --- code/game/jobs/job/security.dm | 8 +-- .../objects/items/devices/radio/headset.dm | 64 ++++--------------- .../game/objects/items/devices/radio/radio.dm | 62 ++++++++++-------- code/modules/mob/living/silicon/ai/ai.dm | 4 +- 4 files changed, 55 insertions(+), 83 deletions(-) diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 613b07e545c..3636f968e3e 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -255,17 +255,17 @@ var/list/sec_departments = list("engineering", "supply", "medical", "science") recalculateChannels() /obj/item/device/radio/headset/headset_sec/department/engi - keyslot1 = new /obj/item/device/encryptionkey/headset_sec + keyslot = new /obj/item/device/encryptionkey/headset_sec keyslot2 = new /obj/item/device/encryptionkey/headset_eng /obj/item/device/radio/headset/headset_sec/department/supply - keyslot1 = new /obj/item/device/encryptionkey/headset_sec + keyslot = new /obj/item/device/encryptionkey/headset_sec keyslot2 = new /obj/item/device/encryptionkey/headset_cargo /obj/item/device/radio/headset/headset_sec/department/med - keyslot1 = new /obj/item/device/encryptionkey/headset_sec + keyslot = new /obj/item/device/encryptionkey/headset_sec keyslot2 = new /obj/item/device/encryptionkey/headset_med /obj/item/device/radio/headset/headset_sec/department/sci - keyslot1 = new /obj/item/device/encryptionkey/headset_sec + keyslot = new /obj/item/device/encryptionkey/headset_sec keyslot2 = new /obj/item/device/encryptionkey/headset_sci diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 4922a7e7825..07bd49700f9 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -9,21 +9,18 @@ canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_EARS - var/translate_binary = 0 - var/translate_hive = 0 - var/obj/item/device/encryptionkey/keyslot1 = null var/obj/item/device/encryptionkey/keyslot2 = null maxf = 1489 /obj/item/device/radio/headset/New() ..() - keyslot1 = new /obj/item/device/encryptionkey/ + keyslot = new /obj/item/device/encryptionkey/ recalculateChannels() /obj/item/device/radio/headset/Destroy() - qdel(keyslot1) + qdel(keyslot) qdel(keyslot2) - keyslot1 = null + keyslot = null keyslot2 = null ..() @@ -50,18 +47,12 @@ ..() make_syndie() -/obj/item/device/radio/headset/proc/make_syndie() - qdel(keyslot1) - keyslot1 = new /obj/item/device/encryptionkey/syndicate - syndie = 1 - recalculateChannels() - /obj/item/device/radio/headset/binary origin_tech = "syndicate=3" /obj/item/device/radio/headset/binary/New() ..() - qdel(keyslot1) - keyslot1 = new /obj/item/device/encryptionkey/binary + qdel(keyslot) + keyslot = new /obj/item/device/encryptionkey/binary recalculateChannels() /obj/item/device/radio/headset/headset_sec @@ -196,13 +187,6 @@ name = "\proper Integrated Subspace Transceiver " keyslot2 = new /obj/item/device/encryptionkey/ai -/obj/item/device/radio/headset/ai/syndie - name = "\proper Syndicate Subspace Intercepter" - -/obj/item/device/radio/headset/ai/syndie/New() - ..() - make_syndie() - /obj/item/device/radio/headset/ai/receive_range(freq, level) return ..(freq, level, 1) @@ -213,7 +197,7 @@ return if(istype(W, /obj/item/weapon/screwdriver)) - if(keyslot1 || keyslot2) + if(keyslot || keyslot2) for(var/ch_name in channels) @@ -221,11 +205,11 @@ secure_radio_connections[ch_name] = null - if(keyslot1) + if(keyslot) var/turf/T = get_turf(user) if(T) - keyslot1.loc = T - keyslot1 = null + keyslot.loc = T + keyslot = null @@ -242,14 +226,14 @@ user << "This headset doesn't have any encryption keys! How useless..." if(istype(W, /obj/item/device/encryptionkey/)) - if(keyslot1 && keyslot2) + if(keyslot && keyslot2) user << "The headset can't hold another key!" return - if(!keyslot1) + if(!keyslot) user.drop_item() W.loc = src - keyslot1 = W + keyslot = W else user.drop_item() @@ -262,28 +246,8 @@ return -/obj/item/device/radio/headset/proc/recalculateChannels() - src.channels = list() - src.translate_binary = 0 - src.translate_hive = 0 - src.syndie = 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(keyslot1.syndie) - src.syndie = 1 - +/obj/item/device/radio/headset/recalculateChannels() + ..() if(keyslot2) for(var/ch_name in keyslot2.channels) if(ch_name in src.channels) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 60b7a1d6c8e..cb8854cc0e1 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -16,8 +16,11 @@ var/b_stat = 0 var/broadcasting = 0 var/listening = 1 + var/translate_binary = 0 + var/translate_hive = 0 var/freerange = 0 // 0 - Sanitize frequencies, 1 - Full range var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h + var/obj/item/device/encryptionkey/keyslot //To allow the radio to accept encryption keys. var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrpyed radio var/maxf = 1499 @@ -49,6 +52,38 @@ if(radio_controller) initialize() + +/obj/item/device/radio/proc/recalculateChannels() + channels = list() + translate_binary = 0 + translate_hive = 0 + syndie = 0 + + if(keyslot) + for(var/ch_name in keyslot.channels) + if(ch_name in src.channels) + continue + channels += ch_name + channels[ch_name] = keyslot.channels[ch_name] + + if(keyslot.translate_binary) + translate_binary = 1 + + if(keyslot.translate_hive) + translate_hive = 1 + + if(keyslot.syndie) + syndie = 1 + + for(var/ch_name in channels) + secure_radio_connections[ch_name] = add_radio(src, radiochannels[ch_name]) + +/obj/item/device/radio/proc/make_syndie() //Turns normal radios into Syndicate radios! + qdel(keyslot) + keyslot = new /obj/item/device/encryptionkey/syndicate + syndie = 1 + recalculateChannels() + /obj/item/device/radio/Destroy() qdel(wires) wires = null @@ -493,7 +528,6 @@ //Giving borgs their own radio to have some more room to work with -Sieve /obj/item/device/radio/borg - var/obj/item/device/encryptionkey/keyslot = null//Borg radios can handle a single encryption key /obj/item/device/radio/borg/syndicate syndie = 1 @@ -543,32 +577,6 @@ return -/obj/item/device/radio/borg/proc/recalculateChannels() - src.channels = list() - src.syndie = 0 - - if(keyslot) - for(var/ch_name in keyslot.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] = keyslot.channels[ch_name] - - if(keyslot.syndie) - src.syndie = 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" - return - - secure_radio_connections[ch_name] = add_radio(src, radiochannels[ch_name]) - - return - /obj/item/device/radio/borg/Topic(href, href_list) if(usr.stat || !on) return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 6390ff12d53..bd09a52b0f7 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -763,5 +763,5 @@ var/list/ai_list = list() if (radio) radio.interact(src) /mob/living/silicon/ai/proc/set_syndie_radio() - qdel(radio) - radio = new /obj/item/device/radio/headset/ai/syndie(src) \ No newline at end of file + if(radio) + radio.make_syndie() \ No newline at end of file