From 32a63d39a8a6af707086e11d1b4337f8e06ed5af Mon Sep 17 00:00:00 2001 From: Sparky Date: Wed, 22 May 2024 10:09:35 +0100 Subject: [PATCH] Clip-On Radios (#19164) Adds Clip-On Radios, which can be equipped to both ear or wrist slots, always appearing on the body, clipped onto your uniform or jacket. --- code/__DEFINES/outfit.dm | 1 + code/__HELPERS/global_lists.dm | 2 +- code/datums/outfits/outfit.dm | 4 + code/game/jobs/job/captain.dm | 3 + code/game/jobs/job/civilian.dm | 10 ++ code/game/jobs/job/engineering.dm | 5 + code/game/jobs/job/job.dm | 1 + code/game/jobs/job/medical.dm | 6 + code/game/jobs/job/science.dm | 4 + code/game/jobs/job/security.dm | 5 + code/game/objects/items.dm | 3 + .../objects/items/devices/radio/headset.dm | 157 +++++++++++++++++- code/modules/client/preferences.dm | 2 +- .../mob/living/carbon/human/examine.dm | 2 +- html/changelogs/clipon_radios.yml | 7 + icons/obj/item/tools/radio/clip.dmi | Bin 0 -> 3708 bytes 16 files changed, 203 insertions(+), 9 deletions(-) create mode 100644 html/changelogs/clipon_radios.yml create mode 100644 icons/obj/item/tools/radio/clip.dmi diff --git a/code/__DEFINES/outfit.dm b/code/__DEFINES/outfit.dm index f40447f0ab4..9c72fb04c61 100644 --- a/code/__DEFINES/outfit.dm +++ b/code/__DEFINES/outfit.dm @@ -39,3 +39,4 @@ #define OUTFIT_DOUBLE 4 #define OUTFIT_WRISTRAD 5 #define OUTFIT_THIN_WRISTRAD 6 +#define OUTFIT_CLIPON 7 diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index c58b867c6fd..6ecc00f0b22 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(exclude_jobs, list(/datum/job/ai, /datum/job/cyborg, /datum/job GLOBAL_LIST_INIT(pdalist, list("Nothing", "Standard PDA", "Classic PDA", "Rugged PDA", "Slate PDA", "Smart PDA", "Tablet", "Wristbound")) /// Headset loadout choices. -GLOBAL_LIST_INIT(headsetlist, list("Nothing", "Headset", "Bowman Headset", "Double Headset", "Wristbound Radio", "Sleek Wristbound Radio")) +GLOBAL_LIST_INIT(headsetlist, list("Nothing", "Headset", "Bowman Headset", "Double Headset", "Wristbound Radio", "Sleek Wristbound Radio", "Clip-on Radio")) /// Primary Radio Slot loadout choices. GLOBAL_LIST_INIT(primary_radio_slot_choice, list("Left Ear", "Right Ear", "Wrist")) diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index e0ffadf91c2..78a3ad415e7 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -80,6 +80,7 @@ var/bowman = /obj/item/device/radio/headset/alt var/double_headset = /obj/item/device/radio/headset/alt/double var/wrist_radio = /obj/item/device/radio/headset/wrist + var/clipon_radio = /obj/item/device/radio/headset/wrist/clip var/id_iff = IFF_DEFAULT // when spawning in, the ID will be set to this iff, preventing friendly fire @@ -285,6 +286,9 @@ wrist = wrist_radio if(H.headset_choice == OUTFIT_THIN_WRISTRAD) radio_callback = CALLBACK(src, PROC_REF(turn_into_thinset)) + if(OUTFIT_CLIPON) + l_ear = null + wrist = clipon_radio else l_ear = headset //Department headset if(l_ear) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index b81a05c0aab..cf2cd9fe175 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -40,6 +40,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) bowman = /obj/item/device/radio/headset/heads/captain/alt double_headset = /obj/item/device/radio/headset/alt/double/captain wrist_radio = /obj/item/device/radio/headset/wrist/captain + clipon_radio = /obj/item/device/radio/headset/wrist/clip/captain tab_pda = /obj/item/modular_computer/handheld/pda/command/captain wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/command/captain @@ -122,6 +123,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) bowman = /obj/item/device/radio/headset/heads/xo/alt double_headset = /obj/item/device/radio/headset/alt/double/xo wrist_radio = /obj/item/device/radio/headset/wrist/xo + clipon_radio = /obj/item/device/radio/headset/wrist/clip/xo tab_pda = /obj/item/modular_computer/handheld/pda/command/xo wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/command/xo @@ -172,4 +174,5 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1) bowman = /obj/item/device/radio/headset/headset_com/alt double_headset = /obj/item/device/radio/headset/alt/double/command wrist_radio = /obj/item/device/radio/headset/wrist/command + clipon_radio = /obj/item/device/radio/headset/wrist/clip/command messengerbag = /obj/item/storage/backpack/messenger/com diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 89e38637110..6f452f15645 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -38,6 +38,7 @@ bowman = /obj/item/device/radio/headset/headset_service/alt double_headset = /obj/item/device/radio/headset/alt/double/service wrist_radio = /obj/item/device/radio/headset/wrist/service + clipon_radio = /obj/item/device/radio/headset/wrist/clip/service backpack_faction = /obj/item/storage/backpack/nt satchel_faction = /obj/item/storage/backpack/satchel/nt @@ -84,6 +85,7 @@ bowman = /obj/item/device/radio/headset/headset_service/alt double_headset = /obj/item/device/radio/headset/alt/double/service wrist_radio = /obj/item/device/radio/headset/wrist/service + clipon_radio = /obj/item/device/radio/headset/wrist/clip/service backpack_faction = /obj/item/storage/backpack/nt satchel_faction = /obj/item/storage/backpack/satchel/nt @@ -134,6 +136,7 @@ bowman = /obj/item/device/radio/headset/headset_service/alt double_headset = /obj/item/device/radio/headset/alt/double/service wrist_radio = /obj/item/device/radio/headset/wrist/service + clipon_radio = /obj/item/device/radio/headset/wrist/clip/service backpack = /obj/item/storage/backpack/hydroponics backpack_faction = /obj/item/storage/backpack/nt @@ -185,6 +188,7 @@ bowman = /obj/item/device/radio/headset/headset_service/alt double_headset = /obj/item/device/radio/headset/alt/double/service wrist_radio = /obj/item/device/radio/headset/wrist/service + clipon_radio = /obj/item/device/radio/headset/wrist/clip/service backpack_faction = /obj/item/storage/backpack/nt satchel_faction = /obj/item/storage/backpack/satchel/nt @@ -227,6 +231,7 @@ bowman = /obj/item/device/radio/headset/headset_service/alt double_headset = /obj/item/device/radio/headset/alt/double/service wrist_radio = /obj/item/device/radio/headset/wrist/service + clipon_radio = /obj/item/device/radio/headset/wrist/clip/service backpack_faction = /obj/item/storage/backpack/nt satchel_faction = /obj/item/storage/backpack/satchel/nt @@ -286,6 +291,7 @@ bowman = /obj/item/device/radio/headset/headset_service/alt double_headset = /obj/item/device/radio/headset/alt/double/service wrist_radio = /obj/item/device/radio/headset/wrist/service + clipon_radio = /obj/item/device/radio/headset/wrist/clip/service tab_pda = /obj/item/modular_computer/handheld/pda/civilian/chaplain wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian/chaplain @@ -374,6 +380,7 @@ bowman = /obj/item/device/radio/headset/operations_manager/alt double_headset = /obj/item/device/radio/headset/alt/double/operations_manager wrist_radio = /obj/item/device/radio/headset/wrist/cargo/operations_manager + clipon_radio = /obj/item/device/radio/headset/wrist/clip/cargo/operations_manager backpack = /obj/item/storage/backpack/om satchel = /obj/item/storage/backpack/satchel/om @@ -420,6 +427,7 @@ bowman = /obj/item/device/radio/headset/headset_cargo/alt double_headset = /obj/item/device/radio/headset/alt/double/cargo wrist_radio = /obj/item/device/radio/headset/wrist/cargo + clipon_radio = /obj/item/device/radio/headset/wrist/cargo /datum/job/mining title = "Shaft Miner" @@ -462,6 +470,7 @@ bowman = /obj/item/device/radio/headset/headset_mining/alt double_headset = /obj/item/device/radio/headset/alt/double/mining wrist_radio = /obj/item/device/radio/headset/wrist/cargo/mining + clipon_radio = /obj/item/device/radio/headset/wrist/clip/cargo/mining backpack_contents = list( /obj/item/storage/bag/ore = 1 @@ -518,6 +527,7 @@ bowman = /obj/item/device/radio/headset/headset_cargo/alt double_headset = /obj/item/device/radio/headset/alt/double/cargo wrist_radio = /obj/item/device/radio/headset/wrist/cargo + clipon_radio = /obj/item/device/radio/headset/wrist/clip/cargo belt_contents = list( /obj/item/screwdriver = 1, diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 72d2c2ff26e..33a2fddef2c 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -48,6 +48,7 @@ bowman = /obj/item/device/radio/headset/heads/ce/alt double_headset = /obj/item/device/radio/headset/alt/double/ce wrist_radio = /obj/item/device/radio/headset/wrist/ce + clipon_radio = /obj/item/device/radio/headset/wrist/clip/ce tab_pda = /obj/item/modular_computer/handheld/pda/engineering/ce wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/engineering/ce @@ -110,6 +111,7 @@ bowman = /obj/item/device/radio/headset/headset_eng/alt double_headset = /obj/item/device/radio/headset/alt/double/eng wrist_radio = /obj/item/device/radio/headset/wrist/eng + clipon_radio = /obj/item/device/radio/headset/wrist/clip/eng tab_pda = /obj/item/modular_computer/handheld/pda/engineering wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/engineering @@ -175,6 +177,7 @@ bowman = /obj/item/device/radio/headset/headset_eng/alt double_headset = /obj/item/device/radio/headset/alt/double/eng wrist_radio = /obj/item/device/radio/headset/wrist/eng + clipon_radio = /obj/item/device/radio/headset/wrist/clip/eng backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng @@ -250,6 +253,7 @@ bowman = /obj/item/device/radio/headset/headset_eng/alt double_headset = /obj/item/device/radio/headset/alt/double/eng wrist_radio = /obj/item/device/radio/headset/wrist/eng + clipon_radio = /obj/item/device/radio/headset/wrist/clip/eng backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng @@ -284,6 +288,7 @@ bowman = /obj/item/device/radio/headset/headset_eng/alt double_headset = /obj/item/device/radio/headset/alt/double/eng wrist_radio = /obj/item/device/radio/headset/wrist/eng + clipon_radio = /obj/item/device/radio/headset/wrist/clip/eng backpack = /obj/item/storage/backpack/industrial satchel = /obj/item/storage/backpack/satchel/eng diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 6b083b409f4..529557a77e8 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -199,6 +199,7 @@ bowman = /obj/item/device/radio/headset/alt double_headset = /obj/item/device/radio/headset/alt/double wrist_radio = /obj/item/device/radio/headset/wrist + clipon_radio = /obj/item/device/radio/headset/wrist/clip tab_pda = /obj/item/modular_computer/handheld/pda/civilian wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/civilian diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 9ad5e4426e0..5be309e673b 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -46,6 +46,7 @@ bowman = /obj/item/device/radio/headset/heads/cmo/alt double_headset = /obj/item/device/radio/headset/alt/double/cmo wrist_radio = /obj/item/device/radio/headset/wrist/cmo + clipon_radio = /obj/item/device/radio/headset/wrist/clip/cmo tab_pda = /obj/item/modular_computer/handheld/pda/medical/cmo wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical/cmo @@ -118,6 +119,7 @@ bowman = /obj/item/device/radio/headset/headset_med/alt double_headset = /obj/item/device/radio/headset/alt/double/med wrist_radio = /obj/item/device/radio/headset/wrist/med + clipon_radio = /obj/item/device/radio/headset/wrist/clip/med tab_pda = /obj/item/modular_computer/handheld/pda/medical wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical @@ -180,6 +182,7 @@ bowman = /obj/item/device/radio/headset/headset_med/alt double_headset = /obj/item/device/radio/headset/alt/double/med wrist_radio = /obj/item/device/radio/headset/wrist/med + clipon_radio = /obj/item/device/radio/headset/wrist/clip/med tab_pda = /obj/item/modular_computer/handheld/pda/medical wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical @@ -233,6 +236,7 @@ bowman = /obj/item/device/radio/headset/headset_med/alt double_headset = /obj/item/device/radio/headset/alt/double/med wrist_radio = /obj/item/device/radio/headset/wrist/med + clipon_radio = /obj/item/device/radio/headset/wrist/clip/med tab_pda = /obj/item/modular_computer/handheld/pda/medical/psych wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical/psych @@ -290,6 +294,7 @@ bowman = /obj/item/device/radio/headset/headset_med/alt double_headset = /obj/item/device/radio/headset/alt/double/med wrist_radio = /obj/item/device/radio/headset/wrist/med + clipon_radio = /obj/item/device/radio/headset/wrist/clip/med tab_pda = /obj/item/modular_computer/handheld/pda/medical wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/medical @@ -360,6 +365,7 @@ bowman = /obj/item/device/radio/headset/headset_med/alt double_headset = /obj/item/device/radio/headset/alt/double/med wrist_radio = /obj/item/device/radio/headset/wrist/med + clipon_radio = /obj/item/device/radio/headset/wrist/clip/med backpack = /obj/item/storage/backpack/medic backpack_faction = /obj/item/storage/backpack/nt diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 3141a2ec798..f8a53368595 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -48,6 +48,7 @@ bowman = /obj/item/device/radio/headset/heads/rd/alt double_headset = /obj/item/device/radio/headset/alt/double/rd wrist_radio = /obj/item/device/radio/headset/wrist/rd + clipon_radio = /obj/item/device/radio/headset/wrist/clip/rd tab_pda = /obj/item/modular_computer/handheld/pda/research/rd wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/research/rd @@ -96,6 +97,7 @@ bowman = /obj/item/device/radio/headset/headset_sci/alt double_headset = /obj/item/device/radio/headset/alt/double/sci wrist_radio = /obj/item/device/radio/headset/wrist/sci + clipon_radio = /obj/item/device/radio/headset/wrist/clip/sci tab_pda = /obj/item/modular_computer/handheld/pda/research wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/research @@ -145,6 +147,7 @@ bowman = /obj/item/device/radio/headset/headset_xenoarch/alt double_headset = /obj/item/device/radio/headset/alt/double/xenoarch wrist_radio = /obj/item/device/radio/headset/wrist/xenoarch + clipon_radio = /obj/item/device/radio/headset/wrist/clip/xenoarch /datum/job/xenobiologist title = "Xenobiologist" @@ -236,6 +239,7 @@ bowman = /obj/item/device/radio/headset/headset_sci/alt double_headset = /obj/item/device/radio/headset/alt/double/sci wrist_radio = /obj/item/device/radio/headset/wrist/sci + clipon_radio = /obj/item/device/radio/headset/wrist/clip/sci backpack = /obj/item/storage/backpack/toxins backpack_faction = /obj/item/storage/backpack/nt diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index d35b0a289ee..bcc728da049 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -48,6 +48,7 @@ bowman = /obj/item/device/radio/headset/heads/hos/alt double_headset = /obj/item/device/radio/headset/alt/double/hos wrist_radio = /obj/item/device/radio/headset/wrist/hos + clipon_radio = /obj/item/device/radio/headset/wrist/clip/hos tab_pda = /obj/item/modular_computer/handheld/pda/security/hos wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security/hos @@ -112,6 +113,7 @@ bowman = /obj/item/device/radio/headset/headset_warden/alt double_headset = /obj/item/device/radio/headset/alt/double/sec/warden wrist_radio = /obj/item/device/radio/headset/wrist/sec/warden + clipon_radio = /obj/item/device/radio/headset/wrist/clip/sec/warden tab_pda = /obj/item/modular_computer/handheld/pda/security wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security @@ -169,6 +171,7 @@ bowman = /obj/item/device/radio/headset/headset_sec/alt double_headset = /obj/item/device/radio/headset/alt/double/sec wrist_radio = /obj/item/device/radio/headset/wrist/sec + clipon_radio = /obj/item/device/radio/headset/wrist/clip/sec tab_pda = /obj/item/modular_computer/handheld/pda/security/detective wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security/detective @@ -223,6 +226,7 @@ bowman = /obj/item/device/radio/headset/headset_sec/alt double_headset = /obj/item/device/radio/headset/alt/double/sec wrist_radio = /obj/item/device/radio/headset/wrist/sec + clipon_radio = /obj/item/device/radio/headset/wrist/clip/sec tab_pda = /obj/item/modular_computer/handheld/pda/security wristbound = /obj/item/modular_computer/handheld/wristbound/preset/pda/security @@ -290,6 +294,7 @@ bowman = /obj/item/device/radio/headset/headset_sec/alt double_headset = /obj/item/device/radio/headset/alt/double/sec wrist_radio = /obj/item/device/radio/headset/wrist/sec + clipon_radio = /obj/item/device/radio/headset/wrist/clip/sec backpack = /obj/item/storage/backpack/security satchel = /obj/item/storage/backpack/satchel/sec diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index ccd4bb75dee..2c74361f240 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1234,6 +1234,9 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/proc/get_head_examine_text(var/mob/user) return "on [user.get_pronoun("his")] head" +/obj/item/proc/get_wrist_examine_text(var/mob/user) + return "around [user.get_pronoun("his")] [gender==PLURAL?"wrists":"wrist"]" + /obj/item/proc/should_equip() // when you press E with an empty hand, will this item be pulled from suit storage / back slot and put into your hand return FALSE diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index a2452674162..9d6f869e903 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -213,7 +213,7 @@ item_state = "wristset" slot_flags = SLOT_WRISTS canhear_range = 1 - var/normal_layer = TRUE + var/mob_wear_layer = WRISTS_LAYER_OVER EarSound = FALSE /obj/item/device/radio/headset/wrist/verb/change_layer() @@ -221,11 +221,59 @@ set name = "Change Wrist Layer" set src in usr - normal_layer = !normal_layer - to_chat(usr, SPAN_NOTICE("\The [src] will now layer [normal_layer ? "over" : "under"] your outerwear.")) - if (ismob(src.loc)) - var/mob/M = src.loc - M.update_inv_wrists() + if(mob_wear_layer == WRISTS_LAYER_OVER) + mob_wear_layer = WRISTS_LAYER_UNIFORM + else + mob_wear_layer = WRISTS_LAYER_OVER + to_chat(usr, SPAN_NOTICE("\The [src] will now layer [mob_wear_layer == WRISTS_LAYER_OVER ? "over" : "under"] your outerwear.")) + if (ishuman(src.loc)) + var/mob/living/carbon/human/H = src.loc + if(H.wrists == src) + H.update_inv_wrists() + else if(H.l_ear == src) + H.update_inv_l_ear() + else if(H.r_ear == src) + H.update_inv_r_ear() + + +/obj/item/device/radio/headset/wrist/clip + name = "clip-on radio" + desc = "A radio designed to clip onto your clothes. Often known for broadcasting loudly enough that those closeby might overhear it." + desc_info = "This radio can be heard by people standing next to the one wearing it." + icon = 'icons/obj/item/tools/radio/clip.dmi' + icon_state = "clip" + item_state = "clip" + slot_flags = SLOT_WRISTS | SLOT_EARS + contained_sprite = TRUE + +/obj/item/device/radio/headset/wrist/clip/verb/flip_radio() + set category = "Object" + set name = "Flip Radio" + set src in usr + + if(item_state == initial(item_state)) + item_state = "[initial(item_state)]_r" + else + item_state = initial(item_state) + to_chat(usr, SPAN_NOTICE("\The [src] will now be worn on your [(item_state == initial(item_state)) ? "left" : "right"] side.")) + if (ishuman(src.loc)) + var/mob/living/carbon/human/H = src.loc + if(H.wrists == src) + H.update_inv_wrists() + else if(H.l_ear == src) + H.update_inv_l_ear() + else if(H.r_ear == src) + H.update_inv_r_ear() + +/obj/item/device/radio/headset/wrist/clip/get_wrist_examine_text(mob/living/carbon/human/user) + if(!istype(user)) + return ..() + return "clipped to [user.get_pronoun("his")] [(mob_wear_layer == WRISTS_LAYER_OVER) && user.wear_suit ? user.wear_suit.name : user.w_uniform ? user.w_uniform.name : "chest"]" + +/obj/item/device/radio/headset/wrist/clip/get_ear_examine_text(mob/living/carbon/human/user) + if(!istype(user)) + return ..() + return "clipped to [user.get_pronoun("his")] [user.wear_suit ? user.wear_suit.name : user.w_uniform ? user.w_uniform.name : "chest"]" /* * Civillian @@ -254,6 +302,12 @@ item_state = "wristset_srv" ks2type = /obj/item/device/encryptionkey/headset_service +/obj/item/device/radio/headset/wrist/clip/service + name = "clip-on service radio" + icon_state = "clip_srv" + item_state = "clip_srv" + ks2type = /obj/item/device/encryptionkey/headset_service + /obj/item/device/radio/headset/heads/xo name = "executive officer's headset" desc = "The headset of the guy who will one day be captain." @@ -277,6 +331,12 @@ item_state = "wristset_HoP" ks2type = /obj/item/device/encryptionkey/heads/xo +/obj/item/device/radio/headset/wrist/clip/xo + name = "executive officer's clip-on radio" + icon_state = "clip_HoP" + item_state = "clip_HoP" + ks2type = /obj/item/device/encryptionkey/heads/xo + /* * Engineering */ @@ -304,6 +364,12 @@ item_state = "wristset_eng" ks2type = /obj/item/device/encryptionkey/headset_eng +/obj/item/device/radio/headset/wrist/clip/eng + name = "clip-on engineering radio" + icon_state = "clip_eng" + item_state = "clip_eng" + ks2type = /obj/item/device/encryptionkey/headset_eng + /obj/item/device/radio/headset/heads/ce name = "chief engineer's headset" desc = "The headset of the guy who is in charge of morons." @@ -327,6 +393,11 @@ item_state = "wristset_CE" ks2type = /obj/item/device/encryptionkey/heads/ce +/obj/item/device/radio/headset/wrist/clip/ce + name = "chief engineer's clip-on radio" + icon_state = "clip_CE" + item_state = "clip_CE" + ks2type = /obj/item/device/encryptionkey/heads/ce /* * Cargo @@ -355,6 +426,11 @@ item_state = "wristset_cargo" ks2type = /obj/item/device/encryptionkey/headset_cargo +/obj/item/device/radio/headset/wrist/clip/cargo + name = "clip-on cargo radio" + icon_state = "clip_cargo" + item_state = "clip_cargo" + ks2type = /obj/item/device/encryptionkey/headset_cargo /obj/item/device/radio/headset/headset_mining name = "mining radio headset" @@ -378,6 +454,11 @@ icon_state = "wristset_mine" item_state = "wristset_mine" +/obj/item/device/radio/headset/wrist/clip/cargo/mining + name = "clip-on mining radio" + icon_state = "clip_mine" + item_state = "clip_mine" + /obj/item/device/radio/headset/operations_manager name = "operations manager's headset" desc = "A headset used by the head honcho of paper pushing." @@ -401,6 +482,12 @@ item_state = "wristset_QM" ks2type = /obj/item/device/encryptionkey/headset_operations_manager +/obj/item/device/radio/headset/wrist/clip/cargo/operations_manager + name = "clip-on operations manager radio" + icon_state = "clip_QM" + item_state = "clip_QM" + ks2type = /obj/item/device/encryptionkey/headset_operations_manager + /* * Medical */ @@ -428,6 +515,12 @@ item_state = "wristset_med" ks2type = /obj/item/device/encryptionkey/headset_med +/obj/item/device/radio/headset/wrist/clip/med + name = "clip-on medical radio" + icon_state = "clip_med" + item_state = "clip_med" + ks2type = /obj/item/device/encryptionkey/headset_med + /obj/item/device/radio/headset/heads/cmo name = "chief medical officer's headset" desc = "The headset of the highly trained medical chief." @@ -451,6 +544,12 @@ item_state = "wristset_CMO" ks2type = /obj/item/device/encryptionkey/heads/cmo +/obj/item/device/radio/headset/wrist/clip/cmo + name = "chief medical officer's clip-on radio" + icon_state = "clip_CMO" + item_state = "clip_CMO" + ks2type = /obj/item/device/encryptionkey/heads/cmo + /* * Science */ @@ -477,6 +576,12 @@ item_state = "wristset_sci" ks2type = /obj/item/device/encryptionkey/headset_sci +/obj/item/device/radio/headset/wrist/clip/sci + name = "clip-on science radio" + icon_state = "clip_sci" + item_state = "clip_sci" + ks2type = /obj/item/device/encryptionkey/headset_sci + /obj/item/device/radio/headset/headset_xenoarch name = "xenoarchaeology radio headset" desc = "A sciency headset for Xenoarchaeologists." @@ -499,6 +604,12 @@ item_state = "wristset_sci" ks2type = /obj/item/device/encryptionkey/headset_xenoarch +/obj/item/device/radio/headset/wrist/clip/xenoarch + name = "clip-on xenoarchaeology radio" + icon_state = "clip_sci" + item_state = "clip_sci" + ks2type = /obj/item/device/encryptionkey/headset_xenoarch + /obj/item/device/radio/headset/headset_rob name = "robotics radio headset" desc = "Made specifically for the roboticists who cannot decide between departments." @@ -528,6 +639,12 @@ item_state = "wristset_RD" ks2type = /obj/item/device/encryptionkey/heads/rd +/obj/item/device/radio/headset/wrist/clip/rd + name = "research director's clip-on radio" + icon_state = "clip_RD" + item_state = "clip_RD" + ks2type = /obj/item/device/encryptionkey/heads/rd + /* * Security */ @@ -555,6 +672,12 @@ item_state = "wristset_sec" ks2type = /obj/item/device/encryptionkey/headset_sec +/obj/item/device/radio/headset/wrist/sec + name = "clip-on security radio" + icon_state = "clip_sec" + item_state = "clip_sec" + ks2type = /obj/item/device/encryptionkey/headset_sec + /obj/item/device/radio/headset/headset_warden name = "warden radio headset" desc = "This is used by your all-powerful overseer." @@ -574,6 +697,10 @@ name = "wristbound warden radio" ks2type = /obj/item/device/encryptionkey/headset_warden +/obj/item/device/radio/headset/wrist/clip/sec/warden + name = "clip-on warden radio" + ks2type = /obj/item/device/encryptionkey/headset_warden + /obj/item/device/radio/headset/headset_penal name = "penal radio headset" desc = "A headset used by people who have chosen or been chosen to work the fields." @@ -603,6 +730,12 @@ item_state = "wristset_HoS" ks2type = /obj/item/device/encryptionkey/heads/hos +/obj/item/device/radio/headset/wrist/clip/hos + name = "head of security's clip-on radio" + icon_state = "clip_HoS" + item_state = "clip_HoS" + ks2type = /obj/item/device/encryptionkey/heads/hos + /* * Captain */ @@ -630,6 +763,12 @@ item_state = "wristset_com" ks2type = /obj/item/device/encryptionkey/headset_com +/obj/item/device/radio/headset/wrist/clip/command + name = "clip-on command radio" + icon_state = "clip_com" + item_state = "clip_com" + ks2type = /obj/item/device/encryptionkey/headset_com + /obj/item/device/radio/headset/heads/captain name = "captain's headset" desc = "The headset of the boss." @@ -653,6 +792,12 @@ item_state = "wristset_cap" ks2type = /obj/item/device/encryptionkey/heads/captain +/obj/item/device/radio/headset/wrist/clip/captain + name = "captain's clip-on radio" + icon_state = "clip_cap" + item_state = "clip_cap" + ks2type = /obj/item/device/encryptionkey/heads/captain + /* * Misc */ diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index e3f231d8a62..c586cf0af9f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -495,7 +495,7 @@ var/list/preferences_datums = list() character.pda_choice = pda_choice - if(headset_choice > OUTFIT_THIN_WRISTRAD || headset_choice < OUTFIT_NOTHING) + if(headset_choice > OUTFIT_CLIPON || headset_choice < OUTFIT_NOTHING) headset_choice = OUTFIT_HEADSET character.headset_choice = headset_choice diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 91c7ec2af92..a35909ec3e4 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -200,7 +200,7 @@ //wrists if(wrists && !skipwrists) - msg += "[get_pronoun("He")] [get_pronoun("is")] wearing [icon2html(wrists, user)] \a [wrists] on [get_pronoun("his")] [wrists.gender==PLURAL?"wrists":"wrist"].\n" + msg += "[get_pronoun("He")] [get_pronoun("is")] wearing [icon2html(wrists, user)] \a [wrists] [wrists.get_wrist_examine_text(src)].\n" //Jitters if(is_jittery) diff --git a/html/changelogs/clipon_radios.yml b/html/changelogs/clipon_radios.yml new file mode 100644 index 00000000000..6d63da00ddd --- /dev/null +++ b/html/changelogs/clipon_radios.yml @@ -0,0 +1,7 @@ +author: Sparky_hotdog + +delete-after: True + +changes: + - rscadd: "Added clip-on radios, available in the radio selection. They can be equipped in either ear slot or the wrist slot." + - bugfix: "Fixed an issue causing wrist radios to not display on mob." diff --git a/icons/obj/item/tools/radio/clip.dmi b/icons/obj/item/tools/radio/clip.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b0ee36352f07ae2b0fcd8615bfc473edc78ffeed GIT binary patch literal 3708 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