From 45c5f0136336cc83a68d9f6aea2e39e601c596eb Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Tue, 18 Nov 2014 18:43:12 +0100 Subject: [PATCH] Dynamic Headset Description Headsets now generate a description of available radio channels based on the installed encryption key(s). Currently only updates on creation, not when changing encryption keys, to ensure that less than legal keys are not detected by a mere casual glance. --- code/game/atoms.dm | 4 +- code/game/objects/items.dm | 8 +-- .../objects/items/devices/radio/headset.dm | 64 +++++++++++++------ .../game/objects/items/devices/radio/radio.dm | 2 +- 4 files changed, 49 insertions(+), 29 deletions(-) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 2ccfb5b2490..c53296c0d15 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -187,7 +187,7 @@ its easier to just keep the beam vertical. //All atoms -/atom/proc/examine(mob/user, var/distance = -1) +/atom/proc/examine(mob/user, var/distance = -1, var/sufix = "") //This reformat names to get a/an properly working on item descriptions when they are bloody var/f_name = "\a [src]." if(src.blood_DNA && !istype(src, /obj/effect/decal)) @@ -197,7 +197,7 @@ its easier to just keep the beam vertical. f_name = "a " f_name += "blood-stained [name]!" - user << "\icon[src] That's [f_name]" + user << "\icon[src] That's [f_name] [sufix]" if(desc) user << desc diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 4544156923d..f426a343469 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -102,7 +102,7 @@ src.loc = T -/obj/item/examine(mob/user) +/obj/item/examine(mob/user, var/distance = -1) var/size switch(src.w_class) if(1.0) @@ -117,10 +117,8 @@ size = "huge" else //if ((CLUMSY in usr.mutations) && prob(50)) t = "funny-looking" - user << "This is a [src.blood_DNA ? "bloody " : ""]\icon[src][src.name]. It is a [size] item." - if(src.desc) - user << src.desc - return + var/custom_sufix = "It is a [size] item." + return ..(user, distance, custom_sufix) /obj/item/attack_hand(mob/user as mob) if (!user) return diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index f697520b23a..aa58c01ee6e 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -1,6 +1,7 @@ /obj/item/device/radio/headset name = "radio headset" desc = "An updated, modular intercom that fits over the head. Takes encryption keys" + var/radio_desc = "" icon_state = "headset" item_state = "headset" matter = list("metal" = 75) @@ -17,7 +18,14 @@ /obj/item/device/radio/headset/New() ..() keyslot1 = new /obj/item/device/encryptionkey/ - recalculateChannels() + recalculateChannels(1) + +/obj/item/device/radio/headset/examine(mob/user) + if(!(..(user, 1) && radio_desc)) + return + + user << "The following channels are built-in:" + user << radio_desc /obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) if (channel == "special") @@ -47,7 +55,7 @@ del(keyslot1) keyslot1 = new /obj/item/device/encryptionkey/syndicate syndie = 1 - recalculateChannels() + recalculateChannels(1) /obj/item/device/radio/headset/binary origin_tech = "syndicate=3" @@ -55,60 +63,60 @@ ..() del(keyslot1) keyslot1 = new /obj/item/device/encryptionkey/binary - recalculateChannels() + recalculateChannels(1) /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." + desc = "This is used by your elite security force." icon_state = "sec_headset" item_state = "headset" keyslot2 = new /obj/item/device/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. " + desc = "When the engineers wish to chat like girls." icon_state = "eng_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "Made specifically for the roboticists who cannot decide between departments." icon_state = "rob_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "A headset for the trained staff of the medbay." icon_state = "med_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "A sciency headset. Like usual." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "A headset that is a result of the mating between medical and science." icon_state = "med_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "A headset with a commanding channel." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/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, :u - supply, :v - service, :m - medical, :n - science." + desc = "The headset of the boss." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/captain @@ -130,35 +138,35 @@ /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." + desc = "Headset of the researching God." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "The headset of the man who protects your worthless lifes." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "The headset of the guy who is in charge of morons" icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/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." + desc = "The headset of the highly trained medical chief." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/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: :u - supply, :v - service, :c - command, :s - security" + desc = "The headset of the guy who will one day be captain." icon_state = "com_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/heads/hop @@ -179,21 +187,21 @@ */ /obj/item/device/radio/headset/headset_cargo name = "supply radio headset" - desc = "A headset used by the QM and his slaves. To access the supply channel, use :u." + desc = "A headset used by the QM and his slaves." icon_state = "cargo_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_cargo /obj/item/device/radio/headset/headset_service name = "service radio headset" - desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean. To access the service channel, use :v." + desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean." icon_state = "srv_headset" item_state = "headset" keyslot2 = new /obj/item/device/encryptionkey/headset_service /obj/item/device/radio/headset/ert name = "CentCom Response Team headset" - desc = "The headset of the boss's boss. Channels are as follows: :h - Response Team :c - command, :s - security, :e - engineering, :d - mining, :u - cargo, :v - service, :m - medical, :n - science." + desc = "The headset of the boss's boss." icon_state = "com_headset" item_state = "headset" freerange = 1 @@ -255,7 +263,7 @@ return -/obj/item/device/radio/headset/proc/recalculateChannels() +/obj/item/device/radio/headset/proc/recalculateChannels(var/setDescription = 0) src.channels = list() src.translate_binary = 0 src.translate_hive = 0 @@ -303,4 +311,18 @@ secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) - return \ No newline at end of file + if(setDescription) + setupRadioDescription() + + return + +/obj/item/device/radio/headset/proc/setupRadioDescription() + var/radio_text = "" + for(var/i = 1 to channels.len) + var/channel = channels[i] + var/key = get_radio_key_from_channel(channel) + radio_text += "[key] - [channel]" + if(i != channels.len) + radio_text += ", " + + radio_desc = radio_text diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 814b3044966..415ba656954 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -491,7 +491,7 @@ /obj/item/device/radio/examine(mob/user) - ..(user) + . = ..() if ((in_range(src, user) || loc == user)) if (b_stat) user.show_message("\blue \the [src] can be attached and modified!")