diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index ba0471e544b..f3037c787a2 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -7,36 +7,36 @@ w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS var/translate_binary = FALSE - var/translate_hive = FALSE var/translate_hivenet = FALSE var/syndie = FALSE // Signifies that it de-crypts Syndicate transmissions var/list/channels = list(CHANNEL_COMMON = TRUE, CHANNEL_ENTERTAINMENT = TRUE) + var/list/additional_channels = list() /obj/item/device/encryptionkey/attackby(obj/item/W, mob/user) return /obj/item/device/encryptionkey/syndicate icon_state = "cypherkey" - channels = list(CHANNEL_COMMON = TRUE, CHANNEL_ENTERTAINMENT = TRUE, CHANNEL_MERCENARY = TRUE) + additional_channels = list(CHANNEL_MERCENARY = TRUE) origin_tech = list(TECH_ILLEGAL = 3) desc_antag = "An encryption key that allows you to intercept comms and speak on private non-station channels. Use :t to access the private channel." syndie = TRUE /obj/item/device/encryptionkey/raider icon_state = "cypherkey" - channels = list(CHANNEL_COMMON = TRUE, CHANNEL_ENTERTAINMENT = TRUE, CHANNEL_RAIDER = TRUE) + additional_channels = list(CHANNEL_RAIDER = TRUE) origin_tech = list(TECH_ILLEGAL = 2) syndie = TRUE /obj/item/device/encryptionkey/burglar icon_state = "cypherkey" - channels = list(CHANNEL_COMMON = TRUE, CHANNEL_ENTERTAINMENT = TRUE, CHANNEL_BURGLAR = TRUE) + additional_channels = list(CHANNEL_BURGLAR = TRUE) origin_tech = list(TECH_ILLEGAL = 2) syndie = TRUE /obj/item/device/encryptionkey/ninja icon_state = "cypherkey" - channels = list(CHANNEL_COMMON = TRUE, CHANNEL_ENTERTAINMENT = TRUE, CHANNEL_NINJA = TRUE) + additional_channels = list(CHANNEL_NINJA = TRUE) origin_tech = list(TECH_ILLEGAL = 3) syndie = TRUE @@ -141,13 +141,57 @@ name = "\improper ERT radio encryption key" channels = list(CHANNEL_RESPONSE_TEAM = TRUE) -/obj/item/device/encryptionkey/entertainment - name = "entertainment radio key" - channels = list(CHANNEL_ENTERTAINMENT = TRUE) - /obj/item/device/encryptionkey/rev name = "standard encryption key" desc = "An encryption key for a radio headset. Contains cypherkeys." - channels = list(CHANNEL_COMMON = TRUE, CHANNEL_ENTERTAINMENT = TRUE, CHANNEL_RAIDER = TRUE) + additional_channels = list(CHANNEL_RAIDER = TRUE) origin_tech = list(TECH_ILLEGAL = 2) desc_antag = "An encryption key that allows you to speak on private non-station channels. Use :x to access the private channel." + +/obj/item/device/encryptionkey/eng_spare + name = "spare engineering radio encryption key" + additional_channels = list(CHANNEL_ENGINEERING = TRUE) + +/obj/item/device/encryptionkey/med_spare + name = "spare medical radio encryption key" + additional_channels = list(CHANNEL_MEDICAL = TRUE) + +/obj/item/device/encryptionkey/sec_spare + name = "spare security radio encryption key" + additional_channels = list(CHANNEL_SECURITY = TRUE) + +/obj/item/device/encryptionkey/sci_spare + name = "spare science radio encryption key" + additional_channels = list(CHANNEL_SCIENCE = TRUE) + + +// Encryption Key Pouch +/obj/item/storage/box/fancy/keypouch + name = "encryption key pouch" + desc = "A pouch designed to store three encryption keys." + icon = 'icons/obj/radio.dmi' + icon_state = "keypouch0" + icon_type = "key" + storage_type = "pouch" + opened = TRUE + closable = FALSE + center_of_mass = list("x" = 16,"y" = 7) + storage_slots = 3 + can_hold = list(/obj/item/device/encryptionkey) + starts_with = null + +/obj/item/storage/box/fancy/keypouch/Initialize() + . = ..() + update_icon() + +/obj/item/storage/box/fancy/keypouch/eng + starts_with = list(/obj/item/device/encryptionkey/eng_spare = 3) + +/obj/item/storage/box/fancy/keypouch/med + starts_with = list(/obj/item/device/encryptionkey/med_spare = 3) + +/obj/item/storage/box/fancy/keypouch/sec + starts_with = list(/obj/item/device/encryptionkey/sec_spare = 3) + +/obj/item/storage/box/fancy/keypouch/sci + starts_with = list(/obj/item/device/encryptionkey/sci_spare = 3) \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index e303966a137..accf92f97bb 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -4,13 +4,12 @@ icon_state = "headset" item_state = "headset" matter = list(DEFAULT_WALL_MATERIAL = 75) - subspace_transmission = 1 + subspace_transmission = TRUE canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_EARS - var/translate_binary = 0 - var/translate_hive = 0 - var/translate_hivenet = 0 + var/translate_binary = FALSE + var/translate_hivenet = FALSE var/obj/item/device/encryptionkey/keyslot1 = null var/obj/item/device/encryptionkey/keyslot2 = null @@ -28,7 +27,7 @@ keyslot1 = new ks1type(src) if(ks2type) keyslot2 = new ks2type(src) - recalculateChannels(1) + recalculateChannels(TRUE) /obj/item/device/radio/headset/Destroy() QDEL_NULL(keyslot1) @@ -45,15 +44,18 @@ to_chat(user, "The following channels are available:") to_chat(user, radio_desc) -/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) - if (channel == "special") - if (translate_binary) - var/datum/language/binary = all_languages["Robot Talk"] +/obj/item/device/radio/headset/setupRadioDescription() + if(translate_binary || translate_hivenet) + ..(", :+ - Special") + else + ..() + +/obj/item/device/radio/headset/handle_message_mode(mob/living/M, message, channel) + if(channel == "special") + if(translate_binary) + var/datum/language/binary = all_languages[LANGUAGE_ROBOT] binary.broadcast(M, message) - if (translate_hive) - var/datum/language/hivemind = all_languages["Hivemind"] - hivemind.broadcast(M, message) - if (translate_hivenet) + if(translate_hivenet) var/datum/language/bug = all_languages[LANGUAGE_VAURCA] bug.broadcast(M, message) return null @@ -69,105 +71,74 @@ return ..(freq, level) return -1 -/obj/item/device/radio/headset/attackby(obj/item/W as obj, mob/user as mob) -// ..() - user.set_machine(src) - if (!( W.isscrewdriver() || (istype(W, /obj/item/device/encryptionkey/ )))) - return - +/obj/item/device/radio/headset/attackby(obj/item/W, mob/user) if(W.isscrewdriver()) if(keyslot1 || keyslot2) - - for(var/ch_name in channels) SSradio.remove_object(src, radiochannels[ch_name]) secure_radio_connections[ch_name] = null - if(keyslot1) var/turf/T = get_turf(user) if(T) keyslot1.forceMove(T) keyslot1 = null - - if(keyslot2) var/turf/T = get_turf(user) if(T) keyslot2.forceMove(T) keyslot2 = null - recalculateChannels() - to_chat(user, "You pop out the encryption keys in the headset!") - + recalculateChannels(TRUE) + to_chat(user, SPAN_NOTICE("You pop out the encryption keys in the headset!")) else - to_chat(user, "This headset doesn't have any encryption keys! How useless...") + to_chat(user, SPAN_WARNING("This headset doesn't have any encryption keys!")) - if(istype(W, /obj/item/device/encryptionkey/)) + else if(istype(W, /obj/item/device/encryptionkey)) if(keyslot1 && keyslot2) - to_chat(user, "The headset can't hold another key!") + to_chat(user, SPAN_WARNING("The headset can't hold another key!")) return if(!keyslot1) - user.drop_from_inventory(W,src) + user.drop_from_inventory(W, src) keyslot1 = W - else - user.drop_from_inventory(W,src) + user.drop_from_inventory(W, src) keyslot2 = W - - recalculateChannels() - - return + recalculateChannels(TRUE) -/obj/item/device/radio/headset/proc/recalculateChannels(var/setDescription = 0) +/obj/item/device/radio/headset/proc/recalculateChannels(var/setDescription = FALSE) src.channels = list() - src.translate_binary = 0 - src.translate_hive = 0 - src.translate_hivenet = 0 - src.syndie = 0 + src.translate_binary = FALSE + src.translate_hivenet = FALSE + src.syndie = FALSE - if(keyslot1) - for(var/ch_name in keyslot1.channels) + for(var/keyslot in list(keyslot1, keyslot2)) + if(!keyslot) + continue + var/obj/item/device/encryptionkey/K = keyslot + + for(var/ch_name in K.channels) if(ch_name in src.channels) continue - src.channels += ch_name - src.channels[ch_name] = keyslot1.channels[ch_name] + src.channels[ch_name] = K.channels[ch_name] - if(keyslot1.translate_binary) - src.translate_binary = 1 - - if(keyslot1.translate_hive) - src.translate_hive = 1 - - if(keyslot1.translate_hivenet) - src.translate_hivenet = 1 - - if(keyslot1.syndie) - src.syndie = 1 - - if(keyslot2) - for(var/ch_name in keyslot2.channels) + for(var/ch_name in K.additional_channels) if(ch_name in src.channels) continue - src.channels += ch_name - src.channels[ch_name] = keyslot2.channels[ch_name] + src.channels[ch_name] = K.additional_channels[ch_name] - if(keyslot2.translate_binary) - src.translate_binary = 1 + if(K.translate_binary) + src.translate_binary = TRUE - if(keyslot2.translate_hive) - src.translate_hive = 1 - - if(keyslot2.translate_hivenet) - src.translate_hivenet = 1 - - if(keyslot2.syndie) - src.syndie = 1 + if(K.translate_hivenet) + src.translate_hivenet = TRUE + if(K.syndie) + src.syndie = TRUE for (var/ch_name in channels) if(!SSradio) @@ -176,7 +147,7 @@ src.name = "broken radio headset" return - secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) + secure_radio_connections[ch_name] = SSradio.add_object(src, radiochannels[ch_name], RADIO_CHAT) if(setDescription) setupRadioDescription() @@ -254,7 +225,7 @@ name = "mining radio headset" desc = "Headset used by dwarves. It has an inbuilt subspace antenna for better reception." icon_state = "mine_headset" - ks1type = /obj/item/device/encryptionkey/headset_cargo + ks2type = /obj/item/device/encryptionkey/headset_cargo /obj/item/device/radio/headset/headset_mining/alt name = "mining bowman radio headset" @@ -393,7 +364,7 @@ /obj/item/device/radio/headset/hivenet translate_hivenet = 1 - ks1type = /obj/item/device/encryptionkey/hivenet + ks2type = /obj/item/device/encryptionkey/hivenet /obj/item/device/radio/headset/syndicate name = "military headset" @@ -427,7 +398,7 @@ /obj/item/device/radio/headset/binary origin_tech = list(TECH_ILLEGAL = 3) - ks1type = /obj/item/device/encryptionkey/binary + ks2type = /obj/item/device/encryptionkey/binary /obj/item/device/radio/headset/ert name = "emergency response team radio headset" @@ -468,4 +439,4 @@ /obj/item/device/radio/headset/heads/ai_integrated/Destroy() myAi = null - return ..() + return ..() \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b4763f75cdc..2087469d5ff 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -126,7 +126,7 @@ var/global/list/default_medbay_channels = list( ui.set_initial_data(data) ui.open() -/obj/item/device/radio/proc/setupRadioDescription() +/obj/item/device/radio/proc/setupRadioDescription(var/additional_radio_desc) var/radio_text = "" for(var/i = 1 to channels.len) var/channel = channels[i] @@ -136,6 +136,8 @@ var/global/list/default_medbay_channels = list( radio_text += ", " radio_desc = radio_text + if(additional_radio_desc) + radio_desc += additional_radio_desc /obj/item/device/radio/proc/list_channels(var/mob/user) return list_internal_channels(user) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index a1ede685c09..85c290574aa 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -37,6 +37,7 @@ new /obj/item/taperoll/engineering(src) new /obj/item/clothing/accessory/storage/overalls/chief(src) new /obj/item/rfd/piping(src) + new /obj/item/storage/box/fancy/keypouch/eng(src) /obj/structure/closet/secure_closet/engineering_chief2 name = "chief engineer's attire" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 8c61022d4e0..0e633c5a3e0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -117,6 +117,7 @@ new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src) new /obj/item/storage/box/inhalers(src) new /obj/item/clothing/glasses/hud/health/aviator(src) + new /obj/item/storage/box/fancy/keypouch/med(src) /obj/structure/closet/secure_closet/CMO2 name = "chief medical officer's attire" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index fc115538811..4cdb8bb7281 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -46,6 +46,7 @@ new /obj/item/device/flash(src) new /obj/item/storage/box/firingpinsRD(src) new /obj/item/device/pin_extractor(src) + new /obj/item/storage/box/fancy/keypouch/sci(src) /obj/structure/closet/secure_closet/RD2 name = "research director's attire" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index c2eeed79fbb..422417e4503 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -154,6 +154,7 @@ //Belts new /obj/item/clothing/accessory/holster/waist(src) new /obj/item/storage/belt/security(src) + new /obj/item/storage/box/fancy/keypouch/sec(src) /obj/structure/closet/secure_closet/hos2 name = "head of security's attire" diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm index c2a17fe4613..11bfc705930 100644 --- a/code/modules/admin/verbs/bluespacetech.dm +++ b/code/modules/admin/verbs/bluespacetech.dm @@ -377,7 +377,7 @@ name = "bluespace technician's headset" desc = "A Bluespace Technician's headset. The letters 'BST' are stamped on the side." translate_binary = 1 - translate_hive = 1 + translate_hivenet = 1 canremove = 0 keyslot1 = new /obj/item/device/encryptionkey/binary keyslot2 = new /obj/item/device/encryptionkey/ert @@ -395,7 +395,6 @@ /obj/item/device/radio/headset/ert/bst/recalculateChannels(var/setDescription = 0) ..(setDescription) translate_binary = 1 - translate_hive = 1 translate_hivenet = 1 //Clothes diff --git a/html/changelogs/geeves-more_keys.yml b/html/changelogs/geeves-more_keys.yml new file mode 100644 index 00000000000..fda987b263b --- /dev/null +++ b/html/changelogs/geeves-more_keys.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Added spare encryption keys to the CE, CMO, RD, and HoS' office lockers." + - rscadd: "The special radio key now shows if you get a headset that comes with binary or hivenet translation." + - bugfix: "Mining, hivenet, and binary headsets now gets the correct first common and entertainment keys." \ No newline at end of file diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi index 7aad9d46244..edce0c3345d 100644 Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ