From 2c11b12814f2546bd6d362a94a46eda786641510 Mon Sep 17 00:00:00 2001 From: Killian <49700375+KillianKirilenko@users.noreply.github.com> Date: Wed, 6 Nov 2024 17:49:11 +0000 Subject: [PATCH 1/2] Headset Refactor and Selection (#16568) * headset refactor and selection * Update headset.dm formatting * Update code/modules/client/preference_setup/general/04_equipment.dm Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> * Update code/_helpers/global_lists.dm Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> * Update code/modules/client/preference_setup/general/04_equipment.dm Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> * Update code/modules/client/preference_setup/general/04_equipment.dm Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> * Update code/modules/client/preference_setup/general/04_equipment.dm Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> * Update code/modules/client/preference_setup/general/04_equipment.dm Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> --------- Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> --- code/_helpers/global_lists.dm | 5 +- code/datums/outfits/jobs/cargo.dm | 15 +- code/datums/outfits/jobs/civilian.dm | 15 +- code/datums/outfits/jobs/command.dm | 16 +- code/datums/outfits/jobs/engineering.dm | 11 +- code/datums/outfits/jobs/job.dm | 5 +- code/datums/outfits/jobs/medical.dm | 11 +- code/datums/outfits/jobs/science.dm | 11 +- code/datums/outfits/jobs/security.dm | 11 +- code/datums/outfits/outfit.dm | 10 +- code/datums/outfits/outfit_vr.dm | 20 +- code/datums/supplypacks/medical.dm | 2 +- code/datums/supplypacks/security.dm | 2 +- code/datums/supplypacks/supply.dm | 4 +- .../objects/items/devices/radio/headset.dm | 687 +++++++++++------- .../objects/items/devices/radio/headset_vr.dm | 131 ---- code/game/objects/random/mapping.dm | 4 +- .../crates_lockers/closets/job_closets.dm | 12 +- .../crates_lockers/closets/misc_vr.dm | 8 +- .../crates_lockers/closets/secure/cargo.dm | 12 +- .../closets/secure/engineering.dm | 9 +- .../closets/secure/hydroponics.dm | 4 +- .../crates_lockers/closets/secure/medical.dm | 10 +- .../closets/secure/scientist.dm | 3 +- .../crates_lockers/closets/secure/security.dm | 18 +- .../closets/secure/security_vr.dm | 15 +- .../crates_lockers/closets/wardrobe.dm | 2 +- .../crates_lockers/closets/wardrobe_vr.dm | 9 +- code/modules/awaymissions/corpse.dm | 2 +- .../preference_setup/general/04_equipment.dm | 14 + code/modules/client/preferences.dm | 1 + code/modules/economy/vending_machines.dm | 2 +- code/modules/economy/vending_machines_vr.dm | 2 +- .../human/ai_controlled/ai_controlled.dm | 2 +- .../mob/living/carbon/human/human_defines.dm | 1 + .../mob/new_player/preferences_setup.dm | 1 + icons/inventory/ears/mob.dmi | Bin 19096 -> 19037 bytes icons/inventory/ears/mob_teshari.dmi | Bin 2642 -> 2750 bytes icons/obj/radio_vr.dmi | Bin 24928 -> 25687 bytes maps/cynosure/cynosure-6.dmm | 8 +- maps/submaps/admin_use_vr/kk_mercship.dmm | 8 +- maps/submaps/depreciated_vr/mercbase.dmm | 8 +- vorestation.dme | 1 - 43 files changed, 645 insertions(+), 467 deletions(-) delete mode 100644 code/game/objects/items/devices/radio/headset_vr.dm diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 72bed469c9..80abfae652 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -52,8 +52,9 @@ GLOBAL_LIST_INIT(custom_species_bases, new) // Species that can be used for a Cu //Underwear var/datum/category_collection/underwear/global_underwear = new() - //Backpacks -var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag", "Strapless Satchel") //VOREStation edit + //Customizables +GLOBAL_LIST_INIT(headsetlist, list("Standard","Bowman","Earbud")) +var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt", "Messenger Bag", "Sports Bag", "Strapless Satchel") var/global/list/pdachoicelist = list("Default", "Slim", "Old", "Rugged", "Holographic", "Wrist-Bound","Slider", "Vintage") var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg) diff --git a/code/datums/outfits/jobs/cargo.dm b/code/datums/outfits/jobs/cargo.dm index 30955983df..bed1308f39 100644 --- a/code/datums/outfits/jobs/cargo.dm +++ b/code/datums/outfits/jobs/cargo.dm @@ -1,17 +1,23 @@ /decl/hierarchy/outfit/job/cargo - l_ear = /obj/item/radio/headset/headset_cargo hierarchy_type = /decl/hierarchy/outfit/job/cargo + headset = /obj/item/radio/headset/cargo + headset_alt = /obj/item/radio/headset/alt/cargo + headset_earbud = /obj/item/radio/headset/earbud/cargo + /decl/hierarchy/outfit/job/cargo/qm name = OUTFIT_JOB_NAME("Cargo") uniform = /obj/item/clothing/under/rank/cargo - l_ear = /obj/item/radio/headset/headset_qm //VOREStation Add shoes = /obj/item/clothing/shoes/brown glasses = /obj/item/clothing/glasses/sunglasses l_hand = /obj/item/clipboard id_type = /obj/item/card/id/cargo/head pda_type = /obj/item/pda/quartermaster + headset = /obj/item/radio/headset/qm + headset_alt = /obj/item/radio/headset/alt/qm + headset_earbud = /obj/item/radio/headset/earbud/qm + /decl/hierarchy/outfit/job/cargo/cargo_tech name = OUTFIT_JOB_NAME("Cargo technician") uniform = /obj/item/clothing/under/rank/cargotech @@ -21,10 +27,13 @@ /decl/hierarchy/outfit/job/cargo/mining name = OUTFIT_JOB_NAME("Shaft miner") uniform = /obj/item/clothing/under/rank/miner - l_ear = /obj/item/radio/headset/headset_mine backpack = /obj/item/storage/backpack/industrial satchel_one = /obj/item/storage/backpack/satchel/eng id_type = /obj/item/card/id/cargo/miner pda_type = /obj/item/pda/shaftminer backpack_contents = list(/obj/item/tool/crowbar = 1, /obj/item/storage/bag/ore = 1) flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + + headset = /obj/item/radio/headset/miner + headset_alt = /obj/item/radio/headset/miner + headset_earbud = /obj/item/radio/headset/miner diff --git a/code/datums/outfits/jobs/civilian.dm b/code/datums/outfits/jobs/civilian.dm index a62600a6ee..829e6f9c64 100644 --- a/code/datums/outfits/jobs/civilian.dm +++ b/code/datums/outfits/jobs/civilian.dm @@ -19,9 +19,12 @@ uniform = /obj/item/clothing/under/color/white /decl/hierarchy/outfit/job/service - l_ear = /obj/item/radio/headset/headset_service hierarchy_type = /decl/hierarchy/outfit/job/service + headset = /obj/item/radio/headset/service + headset_alt = /obj/item/radio/headset/alt/service + headset_earbud = /obj/item/radio/headset/earbud/service + /decl/hierarchy/outfit/job/service/bartender name = OUTFIT_JOB_NAME(JOB_BARTENDER) uniform = /obj/item/clothing/under/rank/bartender @@ -91,7 +94,6 @@ /decl/hierarchy/outfit/job/internal_affairs_agent name = OUTFIT_JOB_NAME("Internal affairs agent") - l_ear = /obj/item/radio/headset/ia uniform = /obj/item/clothing/under/rank/internalaffairs suit = /obj/item/clothing/suit/storage/toggle/internalaffairs shoes = /obj/item/clothing/shoes/brown @@ -100,6 +102,10 @@ id_type = /obj/item/card/id/civilian/internal_affairs pda_type = /obj/item/pda/lawyer + headset = /obj/item/radio/headset/ia + headset_alt = /obj/item/radio/headset/alt/ia + headset_earbud = /obj/item/radio/headset/earbud/ia + /decl/hierarchy/outfit/job/chaplain name = OUTFIT_JOB_NAME(JOB_CHAPLAIN) uniform = /obj/item/clothing/under/rank/chaplain @@ -114,10 +120,13 @@ mask = /obj/item/clothing/mask/gas/explorer suit = /obj/item/clothing/suit/storage/hooded/explorer gloves = /obj/item/clothing/gloves/black - l_ear = /obj/item/radio/headset id_slot = slot_wear_id id_type = /obj/item/card/id/exploration //VOREStation Edit pda_slot = slot_belt pda_type = /obj/item/pda/cargo // Brown looks more rugged r_pocket = /obj/item/gps/explorer id_pda_assignment = JOB_EXPLORER + + headset = /obj/item/radio/headset + headset_alt = /obj/item/radio/headset/alt + headset_earbud = /obj/item/radio/headset/earbud diff --git a/code/datums/outfits/jobs/command.dm b/code/datums/outfits/jobs/command.dm index 149020e4fe..e5a869d9dd 100644 --- a/code/datums/outfits/jobs/command.dm +++ b/code/datums/outfits/jobs/command.dm @@ -2,7 +2,7 @@ name = OUTFIT_JOB_NAME(JOB_ALT_CAPTAIN) // Keep Captain for now, not JOB_SITE_MANAGER glasses = /obj/item/clothing/glasses/sunglasses uniform = /obj/item/clothing/under/rank/captain - l_ear = /obj/item/radio/headset/heads/captain + shoes = /obj/item/clothing/shoes/brown backpack = /obj/item/storage/backpack/captain satchel_one = /obj/item/storage/backpack/satchel/cap @@ -10,6 +10,10 @@ id_type = /obj/item/card/id/gold pda_type = /obj/item/pda/captain + headset = /obj/item/radio/headset/heads/captain + headset_alt = /obj/item/radio/headset/alt/heads/captain + headset_earbud = /obj/item/radio/headset/earbud/heads/captain + /decl/hierarchy/outfit/job/captain/post_equip(var/mob/living/carbon/human/H) ..() if(H.age>49) @@ -26,19 +30,25 @@ /decl/hierarchy/outfit/job/hop name = OUTFIT_JOB_NAME(JOB_HEAD_OF_PERSONNEL) uniform = /obj/item/clothing/under/rank/head_of_personnel - l_ear = /obj/item/radio/headset/heads/hop shoes = /obj/item/clothing/shoes/brown id_type = /obj/item/card/id/silver/hop pda_type = /obj/item/pda/heads/hop + headset = /obj/item/radio/headset/heads/hop + headset_alt = /obj/item/radio/headset/alt/heads/hop + headset_earbud = /obj/item/radio/headset/earbud/heads/hop + /decl/hierarchy/outfit/job/secretary name = OUTFIT_JOB_NAME(JOB_COMMAND_SECRETARY) - l_ear = /obj/item/radio/headset/headset_com shoes = /obj/item/clothing/shoes/brown id_type = /obj/item/card/id/silver/secretary pda_type = /obj/item/pda/heads r_hand = /obj/item/clipboard + headset = /obj/item/radio/headset/headset_com + headset_alt = /obj/item/radio/headset/alt/headset_com + headset_earbud = /obj/item/radio/headset/earbud/headset_com + /decl/hierarchy/outfit/job/secretary/pre_equip(mob/living/carbon/human/H) ..() if(H.gender == FEMALE) diff --git a/code/datums/outfits/jobs/engineering.dm b/code/datums/outfits/jobs/engineering.dm index 16de1539c3..11c4a4cd3c 100644 --- a/code/datums/outfits/jobs/engineering.dm +++ b/code/datums/outfits/jobs/engineering.dm @@ -1,7 +1,6 @@ /decl/hierarchy/outfit/job/engineering hierarchy_type = /decl/hierarchy/outfit/job/engineering belt = /obj/item/storage/belt/utility/full/multitool - l_ear = /obj/item/radio/headset/headset_eng shoes = /obj/item/clothing/shoes/boots/workboots r_pocket = /obj/item/t_scanner backpack = /obj/item/storage/backpack/industrial @@ -10,15 +9,23 @@ pda_slot = slot_l_store flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL + headset = /obj/item/radio/headset/headset_eng + headset_alt = /obj/item/radio/headset/alt/headset_eng + headset_earbud = /obj/item/radio/headset/earbud/headset_eng + /decl/hierarchy/outfit/job/engineering/chief_engineer name = OUTFIT_JOB_NAME(JOB_CHIEF_ENGINEER) head = /obj/item/clothing/head/hardhat/white uniform = /obj/item/clothing/under/rank/chief_engineer - l_ear = /obj/item/radio/headset/heads/ce + gloves = /obj/item/clothing/gloves/black id_type = /obj/item/card/id/engineering/head pda_type = /obj/item/pda/heads/ce + headset = /obj/item/radio/headset/heads/ce + headset_alt = /obj/item/radio/headset/alt/heads/ce + headset_earbud = /obj/item/radio/headset/earbud/heads/ce + /decl/hierarchy/outfit/job/engineering/engineer name = OUTFIT_JOB_NAME(JOB_ENGINEER) head = /obj/item/clothing/head/hardhat diff --git a/code/datums/outfits/jobs/job.dm b/code/datums/outfits/jobs/job.dm index adfa938bf3..fdb7af5dbe 100644 --- a/code/datums/outfits/jobs/job.dm +++ b/code/datums/outfits/jobs/job.dm @@ -3,7 +3,6 @@ hierarchy_type = /decl/hierarchy/outfit/job uniform = /obj/item/clothing/under/color/grey - l_ear = /obj/item/radio/headset shoes = /obj/item/clothing/shoes/black id_slot = slot_wear_id @@ -13,6 +12,10 @@ flags = OUTFIT_HAS_BACKPACK + headset = /obj/item/radio/headset + headset_alt = /obj/item/radio/headset/alt + headset_earbud = /obj/item/radio/headset/earbud + /decl/hierarchy/outfit/job/equip_id(mob/living/carbon/human/H, rank, assignment) var/obj/item/card/id/C = ..() var/datum/job/J = job_master.GetJob(rank) diff --git a/code/datums/outfits/jobs/medical.dm b/code/datums/outfits/jobs/medical.dm index a78636ea63..6a4d120d37 100644 --- a/code/datums/outfits/jobs/medical.dm +++ b/code/datums/outfits/jobs/medical.dm @@ -1,16 +1,19 @@ /decl/hierarchy/outfit/job/medical hierarchy_type = /decl/hierarchy/outfit/job/medical - l_ear = /obj/item/radio/headset/headset_med shoes = /obj/item/clothing/shoes/white pda_type = /obj/item/pda/medical pda_slot = slot_l_store + backpack = /obj/item/storage/backpack/medic satchel_one = /obj/item/storage/backpack/satchel/med messenger_bag = /obj/item/storage/backpack/messenger/med + headset = /obj/item/radio/headset/headset_med + headset_alt = /obj/item/radio/headset/alt/headset_med + headset_earbud = /obj/item/radio/headset/earbud/headset_med + /decl/hierarchy/outfit/job/medical/cmo name = OUTFIT_JOB_NAME(JOB_CHIEF_MEDICAL_OFFICER) - l_ear =/obj/item/radio/headset/heads/cmo uniform = /obj/item/clothing/under/rank/chief_medical_officer suit = /obj/item/clothing/suit/storage/toggle/labcoat/cmo shoes = /obj/item/clothing/shoes/brown @@ -19,6 +22,10 @@ id_type = /obj/item/card/id/medical/head pda_type = /obj/item/pda/heads/cmo + headset = /obj/item/radio/headset/heads/cmo + headset_alt = /obj/item/radio/headset/alt/heads/cmo + headset_earbud = /obj/item/radio/headset/earbud/heads/cmo + /decl/hierarchy/outfit/job/medical/doctor name = OUTFIT_JOB_NAME(JOB_MEDICAL_DOCTOR) uniform = /obj/item/clothing/under/rank/medical diff --git a/code/datums/outfits/jobs/science.dm b/code/datums/outfits/jobs/science.dm index a9fe8a4437..eeeb84951d 100644 --- a/code/datums/outfits/jobs/science.dm +++ b/code/datums/outfits/jobs/science.dm @@ -1,23 +1,30 @@ /decl/hierarchy/outfit/job/science hierarchy_type = /decl/hierarchy/outfit/job/science - l_ear = /obj/item/radio/headset/headset_sci suit = /obj/item/clothing/suit/storage/toggle/labcoat shoes = /obj/item/clothing/shoes/white pda_type = /obj/item/pda/science + backpack = /obj/item/storage/backpack/toxins satchel_one = /obj/item/storage/backpack/satchel/tox messenger_bag = /obj/item/storage/backpack/messenger/tox sports_bag = /obj/item/storage/backpack/sport/tox + headset = /obj/item/radio/headset/headset_sci + headset_alt = /obj/item/radio/headset/alt/headset_sci + headset_earbud = /obj/item/radio/headset/earbud/headset_sci + /decl/hierarchy/outfit/job/science/rd name = OUTFIT_JOB_NAME("Research Director") - l_ear = /obj/item/radio/headset/heads/rd uniform = /obj/item/clothing/under/rank/research_director shoes = /obj/item/clothing/shoes/brown l_hand = /obj/item/clipboard id_type = /obj/item/card/id/science/head pda_type = /obj/item/pda/heads/rd + headset = /obj/item/radio/headset/heads/rd + headset_alt = /obj/item/radio/headset/alt/heads/rd + headset_earbud = /obj/item/radio/headset/earbud/heads/rd + /decl/hierarchy/outfit/job/science/scientist name = OUTFIT_JOB_NAME(JOB_SCIENTIST) uniform = /obj/item/clothing/under/rank/scientist diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm index e73b45e06b..595601bbcd 100644 --- a/code/datums/outfits/jobs/security.dm +++ b/code/datums/outfits/jobs/security.dm @@ -1,22 +1,29 @@ /decl/hierarchy/outfit/job/security hierarchy_type = /decl/hierarchy/outfit/job/security glasses = /obj/item/clothing/glasses/sunglasses/sechud - l_ear = /obj/item/radio/headset/headset_sec gloves = /obj/item/clothing/gloves/black shoes = /obj/item/clothing/shoes/boots/jackboots + backpack = /obj/item/storage/backpack/security satchel_one = /obj/item/storage/backpack/satchel/sec backpack_contents = list(/obj/item/handcuffs = 1) messenger_bag = /obj/item/storage/backpack/messenger/sec sports_bag = /obj/item/storage/backpack/sport/sec + headset = /obj/item/radio/headset/headset_sec + headset_alt = /obj/item/radio/headset/alt/headset_sec + headset_earbud = /obj/item/radio/headset/earbud/headset_sec + /decl/hierarchy/outfit/job/security/hos name = OUTFIT_JOB_NAME(JOB_HEAD_OF_SECURITY) - l_ear = /obj/item/radio/headset/heads/hos uniform = /obj/item/clothing/under/rank/head_of_security id_type = /obj/item/card/id/security/head pda_type = /obj/item/pda/heads/hos + headset = /obj/item/radio/headset/heads/hos + headset_alt = /obj/item/radio/headset/alt/heads/hos + headset_earbud = /obj/item/radio/headset/earbud/heads/hos + /decl/hierarchy/outfit/job/security/warden name = OUTFIT_JOB_NAME(JOB_WARDEN) uniform = /obj/item/clothing/under/rank/warden diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index ed8e81f992..43fe69f0f2 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -52,6 +52,10 @@ var/list/outfits_decls_by_type_ var/id_pda_assignment + var/headset = /obj/item/radio/headset + var/headset_alt = /obj/item/radio/headset/alt + var/headset_earbud = /obj/item/radio/headset/earbud + var/backpack = /obj/item/storage/backpack var/satchel_one = /obj/item/storage/backpack/satchel/norm var/satchel_two = /obj/item/storage/backpack/satchel @@ -72,7 +76,11 @@ var/list/outfits_decls_by_type_ dd_insertObjectList(outfits_decls_, src) /decl/hierarchy/outfit/proc/pre_equip(mob/living/carbon/human/H) - if(flags & OUTFIT_HAS_BACKPACK) + switch(H.headset) + if(1) l_ear = headset + if(2) l_ear = headset_alt + if(3) l_ear = headset_earbud + if(flags && OUTFIT_HAS_BACKPACK) switch(H.backbag) if(2) back = backpack if(3) back = satchel_one diff --git a/code/datums/outfits/outfit_vr.dm b/code/datums/outfits/outfit_vr.dm index 97281f1a56..537f13d834 100644 --- a/code/datums/outfits/outfit_vr.dm +++ b/code/datums/outfits/outfit_vr.dm @@ -112,7 +112,6 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go name = OUTFIT_JOB_NAME(JOB_EXPLORER) shoes = /obj/item/clothing/shoes/boots/winter/explorer uniform = /obj/item/clothing/under/explorer - l_ear = /obj/item/radio/headset/explorer id_slot = slot_wear_id pda_slot = slot_l_store pda_type = /obj/item/pda/explorer @@ -123,6 +122,10 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go messenger_bag = /obj/item/storage/backpack/messenger/explorer flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL + headset = /obj/item/radio/headset/explorer + headset_alt = /obj/item/radio/headset/alt/explorer + headset_earbud = /obj/item/radio/headset/explorer + /decl/hierarchy/outfit/job/pilot name = OUTFIT_JOB_NAME(JOB_PILOT) shoes = /obj/item/clothing/shoes/black @@ -130,7 +133,6 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go suit = /obj/item/clothing/suit/storage/toggle/bomber/pilot gloves = /obj/item/clothing/gloves/fingerless glasses = /obj/item/clothing/glasses/fakesunglasses/aviator - l_ear = /obj/item/radio/headset/pilot/alt uniform_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1 = 1) id_slot = slot_wear_id pda_slot = slot_belt @@ -139,12 +141,15 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go id_pda_assignment = JOB_PILOT flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL + headset = /obj/item/radio/headset/pilot + headset_alt = /obj/item/radio/headset/alt/pilot + headset_earbud = /obj/item/radio/headset/alt/pilot + /decl/hierarchy/outfit/job/medical/sar name = OUTFIT_JOB_NAME(JOB_FIELD_MEDIC) uniform = /obj/item/clothing/under/utility/blue //suit = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar shoes = /obj/item/clothing/shoes/boots/winter/explorer - l_ear = /obj/item/radio/headset/sar l_hand = /obj/item/storage/firstaid/regular belt = /obj/item/storage/belt/medical/emt pda_slot = slot_l_store @@ -156,11 +161,14 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go messenger_bag = /obj/item/storage/backpack/messenger/explorer flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL + headset = /obj/item/radio/headset/sar + headset_alt = /obj/item/radio/headset/alt/sar + headset_earbud = /obj/item/radio/headset/sar + /decl/hierarchy/outfit/job/pathfinder name = OUTFIT_JOB_NAME(JOB_PATHFINDER) shoes = /obj/item/clothing/shoes/boots/winter/explorer uniform = /obj/item/clothing/under/explorer //TODO: Uniforms. - l_ear = /obj/item/radio/headset/pathfinder id_slot = slot_wear_id pda_slot = slot_l_store pda_type = /obj/item/pda/pathfinder @@ -168,6 +176,10 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go id_pda_assignment = JOB_PATHFINDER flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL + headset = /obj/item/radio/headset/pathfinder + headset_alt = /obj/item/radio/headset/alt/pathfinder + headset_earbud = /obj/item/radio/headset/pathfinder + /decl/hierarchy/outfit/job/assistant/explorer id_type = /obj/item/card/id/exploration flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 0c099b3231..2e498c92f1 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -112,7 +112,7 @@ contains = list( /obj/item/storage/belt/medical = 3, /obj/item/clothing/glasses/hud/health = 3, - /obj/item/radio/headset/headset_med/alt = 3, + /obj/item/radio/headset/alt/headset_med = 3, /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3 ) cost = 10 diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index 1404b06e42..1f2cf06f89 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -444,7 +444,7 @@ contains = list( /obj/item/storage/belt/security = 3, /obj/item/clothing/glasses/sunglasses/sechud = 3, - /obj/item/radio/headset/headset_sec/alt = 3, + /obj/item/radio/headset/alt/headset_sec = 3, /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3, /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis = 3 ) diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm index 0629a55d8e..68a6b420c0 100644 --- a/code/datums/supplypacks/supply.dm +++ b/code/datums/supplypacks/supply.dm @@ -118,7 +118,7 @@ /obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng, /obj/item/clothing/suit/storage/hooded/wintercoat/miner, - /obj/item/radio/headset/headset_cargo, + /obj/item/radio/headset/miner, /obj/item/clothing/under/rank/miner, /obj/item/clothing/gloves/black, /obj/item/clothing/shoes/black, @@ -187,7 +187,7 @@ contains = list ( /obj/item/storage/backpack/parachute, /obj/item/radio/headset/pilot, - /obj/item/radio/headset/pilot/alt, + /obj/item/radio/headset/alt/pilot, /obj/item/clothing/mask/gas/half, /obj/item/flashlight/glowstick, /obj/item/stack/marker_beacon/thirty, diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index f6af18a4aa..24728cee21 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -8,7 +8,8 @@ subspace_transmission = 1 canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_EARS - sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi') + sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi', + SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi') var/translate_binary = 0 var/translate_hive = 0 @@ -83,254 +84,6 @@ /obj/item/radio/headset/tgui_state(mob/user) return GLOB.tgui_inventory_state -/obj/item/radio/headset/syndicate - origin_tech = list(TECH_ILLEGAL = 3) - syndie = 1 - ks1type = /obj/item/encryptionkey/syndicate - -/obj/item/radio/headset/syndicate/alt - icon_state = "syndie_headset" - item_state = "headset" - origin_tech = list(TECH_ILLEGAL = 3) - syndie = 1 - ks1type = /obj/item/encryptionkey/syndicate - -/obj/item/radio/headset/raider - origin_tech = list(TECH_ILLEGAL = 2) - syndie = 1 - ks1type = /obj/item/encryptionkey/raider - -/obj/item/radio/headset/raider/Initialize() - . = ..() - set_frequency(RAID_FREQ) - -/obj/item/radio/headset/binary - origin_tech = list(TECH_ILLEGAL = 3) - ks1type = /obj/item/encryptionkey/binary - -/obj/item/radio/headset/headset_sec - name = "security radio headset" - desc = "This is used by your elite security force." - icon_state = "sec_headset" - ks2type = /obj/item/encryptionkey/headset_sec - -/obj/item/radio/headset/headset_sec/alt - name = "security bowman headset" - desc = "This is used by your elite security force." - icon_state = "sec_headset_alt" - ks2type = /obj/item/encryptionkey/headset_sec - -/obj/item/radio/headset/headset_eng - name = "engineering radio headset" - desc = "When the engineers wish to chat like girls." - icon_state = "eng_headset" - ks2type = /obj/item/encryptionkey/headset_eng - -/obj/item/radio/headset/headset_eng/alt - name = "engineering bowman headset" - desc = "When the engineers wish to chat like girls." - icon_state = "eng_headset_alt" - ks2type = /obj/item/encryptionkey/headset_eng - -/obj/item/radio/headset/headset_rob - name = "robotics radio headset" - desc = "Made specifically for the roboticists who cannot decide between departments." - icon_state = "rob_headset" - ks2type = /obj/item/encryptionkey/headset_rob - -/obj/item/radio/headset/headset_med - name = "medical radio headset" - desc = "A headset for the trained staff of the medbay." - icon_state = "med_headset" - ks2type = /obj/item/encryptionkey/headset_med - -/obj/item/radio/headset/headset_med/alt - name = "medical bowman headset" - desc = "A headset for the trained staff of the medbay." - icon_state = "med_headset_alt" - ks2type = /obj/item/encryptionkey/headset_med - -/obj/item/radio/headset/headset_sci - name = "science radio headset" - desc = "A sciency headset. Like usual." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/headset_sci - -/obj/item/radio/headset/headset_medsci - name = "medical research radio headset" - desc = "A headset that is a result of the mating between medical and science." - icon_state = "med_headset" - ks2type = /obj/item/encryptionkey/headset_medsci - -/obj/item/radio/headset/headset_com - name = "command radio headset" - desc = "A headset with a commanding channel." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/headset_com - -/obj/item/radio/headset/headset_com/alt - name = "command bowman headset" - desc = "A headset with a commanding channel." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/headset_com - - -/obj/item/radio/headset/heads/captain - name = "site manager's headset" - desc = "The headset of the boss." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/captain - -/obj/item/radio/headset/heads/captain/alt - name = "site manager's bowman headset" - desc = "The headset of the boss." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/captain - -/obj/item/radio/headset/heads/captain/sfr - name = "SFR headset" - desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/captain - -/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. - name = "\improper AI subspace transceiver" - desc = "Integrated AI radio transceiver." - icon = 'icons/obj/robot_component.dmi' - icon_state = "radio" - item_state = "headset" - ks2type = /obj/item/encryptionkey/heads/ai_integrated - var/myAi = null // Atlantis: Reference back to the AI which has this radio. - var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu. - -/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level) - if (disabledAi) - return -1 //Transciever Disabled. - return ..(freq, level, 1) - -/obj/item/radio/headset/heads/rd - name = "research director's headset" - desc = "Headset of the eccentric-in-chief." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/rd - -/obj/item/radio/headset/heads/rd/alt - name = "research director's bowman headset" - desc = "Headset of the eccentric-in-chief." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/rd - -/obj/item/radio/headset/heads/hos - name = "head of security's headset" - desc = "The headset of the hardass who protects your worthless lives." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/hos - -/obj/item/radio/headset/heads/hos/alt - name = "head of security's bowman headset" - desc = "The headset of the hardass who protects your worthless lives." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/hos - -/obj/item/radio/headset/heads/ce - name = "chief engineer's headset" - desc = "The headset of the clown who is in charge of the circus." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/ce - -/obj/item/radio/headset/heads/ce/alt - name = "chief engineer's bowman headset" - desc = "The headset of the clown who is in charge of the circus." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/ce - -/obj/item/radio/headset/heads/cmo - name = "chief medical officer's headset" - desc = "The headset of the highly trained medical chief." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/cmo - -/obj/item/radio/headset/heads/cmo/alt - name = "chief medical officer's bowman headset" - desc = "The headset of the highly trained medical chief." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/cmo - -/obj/item/radio/headset/heads/hop - name = "head of personnel's headset" - desc = "The headset of the poor fool who will one day be " + JOB_SITE_MANAGER + "." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/hop - -/obj/item/radio/headset/heads/hop/alt - name = "head of personnel's bowman headset" - desc = "The headset of the poor fool who will one day be " + JOB_SITE_MANAGER + "." - icon_state = "com_headset_alt" - ks2type = /obj/item/encryptionkey/heads/hop - -/obj/item/radio/headset/headset_mine - name = "mining radio headset" - desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down." - icon_state = "mine_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/encryptionkey/headset_cargo - -/obj/item/radio/headset/headset_cargo - name = "supply radio headset" - desc = "A headset used by the QM and their cronies." - icon_state = "cargo_headset" - ks2type = /obj/item/encryptionkey/headset_cargo - -/obj/item/radio/headset/headset_cargo/alt - name = "supply bowman headset" - desc = "A bowman headset used by the QM and their cronies." - icon_state = "cargo_headset_alt" - ks2type = /obj/item/encryptionkey/headset_cargo - -/obj/item/radio/headset/headset_service - name = "service radio headset" - desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean." - icon_state = "srv_headset" - ks2type = /obj/item/encryptionkey/headset_service - -/obj/item/radio/headset/ert - name = "emergency response team radio headset" - desc = "The headset of the boss's boss." - icon_state = "com_headset" - centComm = 1 -// freerange = 1 - ks2type = /obj/item/encryptionkey/ert - -/obj/item/radio/headset/ert/alt - name = "emergency response team bowman headset" - desc = "The headset of the boss's boss." - icon_state = "com_headset_alt" -// freerange = 1 - ks2type = /obj/item/encryptionkey/ert - -/obj/item/radio/headset/omni //Only for the admin intercoms - ks2type = /obj/item/encryptionkey/omni - -/obj/item/radio/headset/ia - name = "internal affair's headset" - desc = "The headset of your worst enemy." - icon_state = "com_headset" - ks2type = /obj/item/encryptionkey/heads/hos - -/obj/item/radio/headset/mmi_radio - name = "brain-integrated radio" - desc = "MMIs and synthetic brains are often equipped with these." - icon = 'icons/obj/robot_component.dmi' - icon_state = "radio" - item_state = "headset" - var/mmiowner = null - var/radio_enabled = 1 - -/obj/item/radio/headset/mmi_radio/receive_range(freq, level) - if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal)) - return -1 //Transciever Disabled. - return ..(freq, level, 1) - /obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob) // ..() user.set_machine(src) @@ -361,15 +114,15 @@ keyslot2 = null recalculateChannels() - to_chat(user, "You pop out the encryption keys in the headset!") + to_chat(user, span_notice("You pop out the encryption keys in the headset!")) playsound(src, W.usesound, 50, 1) else - to_chat(user, "This headset doesn't have any encryption keys! How useless...") + to_chat(user, span_notice("This headset doesn't have any encryption keys! How useless...")) if(istype(W, /obj/item/encryptionkey/)) if(keyslot1 && keyslot2) - to_chat(user, "The headset can't hold another key!") + to_chat(user, span_notice("The headset can't hold another key!")) return if(!keyslot1) @@ -387,7 +140,6 @@ return - /obj/item/radio/headset/recalculateChannels(var/setDescription = 0) src.channels = list() src.translate_binary = 0 @@ -451,3 +203,432 @@ radio_text += ", " radio_desc = radio_text + +/obj/item/radio/headset/mob_headset/receive_range(freq, level) + if(ismob(src.loc)) + return ..(freq, level, 1) + return -1 + +/obj/item/radio/headset/mob_headset/afterattack(var/atom/movable/target, mob/living/user, proximity) + if(!proximity) + return + if(istype(target,/mob/living/simple_mob)) + var/mob/living/simple_mob/M = target + if(!M.mob_radio) + user.drop_item() + forceMove(M) + M.mob_radio = src + return + if(M.mob_radio) + M.mob_radio.forceMove(M.loc) + M.mob_radio = null + return + ..() + +/obj/item/radio/headset/alt + name = "bowman radio headset" + desc = "A larger, sturdier radio headset. A bit bulky, but guaranteed to stay on no matter what." + icon_state = "headset_alt" + +/obj/item/radio/headset/earbud + name = "radio earbud" + desc = "A discreet radio earbud and low-profile mic. Simple and unobtrusive." + icon_state = "headset_earbud" + +/obj/item/radio/headset/headset_sec + name = "security radio headset" + icon_state = "sec_headset" + ks2type = /obj/item/encryptionkey/headset_sec + +/obj/item/radio/headset/alt/headset_sec + name = "security bowman headset" + icon_state = "sec_headset_alt" + ks2type = /obj/item/encryptionkey/headset_sec + +/obj/item/radio/headset/earbud/headset_sec + name = "security earbud" + icon_state = "sec_earbud" + ks2type = /obj/item/encryptionkey/headset_sec + +/obj/item/radio/headset/headset_eng + name = "engineering radio headset" + icon_state = "eng_headset" + ks2type = /obj/item/encryptionkey/headset_eng + +/obj/item/radio/headset/alt/headset_eng + name = "engineering bowman headset" + icon_state = "eng_headset_alt" + ks2type = /obj/item/encryptionkey/headset_eng + +/obj/item/radio/headset/earbud/headset_eng + name = "engineering earbud" + icon_state = "eng_earbud" + ks2type = /obj/item/encryptionkey/headset_eng + +/obj/item/radio/headset/headset_med + name = "medical radio headset" + icon_state = "med_headset" + ks2type = /obj/item/encryptionkey/headset_med + +/obj/item/radio/headset/alt/headset_med + name = "medical bowman headset" + icon_state = "med_headset_alt" + ks2type = /obj/item/encryptionkey/headset_med + +/obj/item/radio/headset/earbud/headset_med + name = "medical earbud" + icon_state = "med_earbud" + ks2type = /obj/item/encryptionkey/headset_med + +/obj/item/radio/headset/headset_sci + name = "science radio headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/headset_sci + +/obj/item/radio/headset/alt/headset_sci + name = "science bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/headset_sci + +/obj/item/radio/headset/earbud/headset_sci + name = "science earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/headset_sci + +/obj/item/radio/headset/headset_com + name = "command radio headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/headset_com + +/obj/item/radio/headset/alt/headset_com + name = "command bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/headset_com + +/obj/item/radio/headset/earbud/headset_com + name = "command earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/headset_com + +/obj/item/radio/headset/heads/captain + name = "site manager's headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/captain + +/obj/item/radio/headset/heads/captain/sfr + name = "SFR headset" + desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness." + icon_state = "com_headset_alt" + +/obj/item/radio/headset/alt/heads/captain + name = "site manager's bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/captain + +/obj/item/radio/headset/earbud/heads/captain + name = "site manager's earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/captain + +/obj/item/radio/headset/heads/rd + name = "research director's headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/rd + +/obj/item/radio/headset/alt/heads/rd + name = "research director's bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/rd + +/obj/item/radio/headset/earbud/heads/rd + name = "research director's earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/rd + +/obj/item/radio/headset/heads/hos + name = "head of security's headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/hos + +/obj/item/radio/headset/alt/heads/hos + name = "head of security's bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/hos + +/obj/item/radio/headset/earbud/heads/hos + name = "head of security's earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/hos + +/obj/item/radio/headset/heads/ce + name = "chief engineer's headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/ce + +/obj/item/radio/headset/alt/heads/ce + name = "chief engineer's bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/ce + +/obj/item/radio/headset/earbud/heads/ce + name = "chief engineer's earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/ce + +/obj/item/radio/headset/heads/cmo + name = "chief medical officer's headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/cmo + +/obj/item/radio/headset/alt/heads/cmo + name = "chief medical officer's bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/cmo + +/obj/item/radio/headset/earbud/heads/cmo + name = "chief medical officer's earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/cmo + +/obj/item/radio/headset/heads/hop + name = "head of personnel's headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/hop + +/obj/item/radio/headset/alt/heads/hop + name = "head of personnel's bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/hop + +/obj/item/radio/headset/earbud/heads/hop + name = "head of personnel's earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/hop + +/obj/item/radio/headset/miner + name = "mining radio headset" + desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down." + icon_state = "mine_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/encryptionkey/headset_cargo + +/obj/item/radio/headset/cargo + name = "supply radio headset" + icon_state = "cargo_headset" + ks2type = /obj/item/encryptionkey/headset_cargo + +/obj/item/radio/headset/alt/cargo + name = "supply bowman headset" + icon_state = "cargo_headset_alt" + ks2type = /obj/item/encryptionkey/headset_cargo + +/obj/item/radio/headset/earbud/cargo + name = "supply earbud" + icon_state = "cargo_earbud" + ks2type = /obj/item/encryptionkey/headset_cargo + +/obj/item/radio/headset/qm + name = "qm radio headset" + icon_state = "cargo_headset" + ks2type = /obj/item/encryptionkey/qm + +/obj/item/radio/headset/alt/qm + name = "qm bowman headset" + icon_state = "cargo_headset_alt" + ks2type = /obj/item/encryptionkey/qm + +/obj/item/radio/headset/earbud/qm + name = "qm earbud" + icon_state = "cargo_earbud" + ks2type = /obj/item/encryptionkey/qm + +/obj/item/radio/headset/service + name = "service radio headset" + icon_state = "srv_headset" + ks2type = /obj/item/encryptionkey/headset_service + +/obj/item/radio/headset/alt/service + name = "service bowman headset" + icon_state = "srv_headset_alt" + ks2type = /obj/item/encryptionkey/headset_service + +/obj/item/radio/headset/earbud/service + name = "service earbud" + icon_state = "srv_earbud" + ks2type = /obj/item/encryptionkey/headset_service + +/obj/item/radio/headset/ert + name = "emergency response team radio headset" + icon_state = "com_headset" + centComm = 1 + ks2type = /obj/item/encryptionkey/ert + +/obj/item/radio/headset/alt/ert + name = "emergency response team bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/ert + +/obj/item/radio/headset/ia + name = "internal affairs headset" + icon_state = "com_headset" + ks2type = /obj/item/encryptionkey/heads/hos + +/obj/item/radio/headset/alt/ia + name = "internal affairs bowman headset" + icon_state = "com_headset_alt" + ks2type = /obj/item/encryptionkey/heads/hos + +/obj/item/radio/headset/earbud/ia + name = "internal affairs earbud" + icon_state = "com_earbud" + ks2type = /obj/item/encryptionkey/heads/hos + +/obj/item/radio/headset/centcom + name = "centcom radio headset" + icon_state = "cent_headset" + item_state = "headset" + centComm = 1 + ks2type = /obj/item/encryptionkey/ert + +/obj/item/radio/headset/alt/centcom + name = "centcom bowman headset" + icon_state = "com_headset_alt" + +/obj/item/radio/headset/nanotrasen + name = "\improper NT radio headset" + icon_state = "nt_headset" + centComm = 1 + ks2type = /obj/item/encryptionkey/ert + +/obj/item/radio/headset/alt/nanotrasen + name = "\improper NT bowman headset" + icon_state = "nt_headset_alt" + +/obj/item/radio/headset/pathfinder + name = "pathfinder's headset" + icon_state = "exp_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/encryptionkey/pathfinder + +/obj/item/radio/headset/alt/pathfinder + name = "pathfinder's bowman headset" + icon_state = "exp_headset_alt" + +/obj/item/radio/headset/pilot + name = "pilot's headset" + icon_state = "pilot_headset" + adhoc_fallback = TRUE + +/obj/item/radio/headset/alt/pilot + name = "pilot's bowman headset" + icon_state = "pilot_headset_alt" + +/obj/item/radio/headset/explorer + name = "away team member's headset" + icon_state = "exp_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/encryptionkey/explorer + +/obj/item/radio/headset/alt/explorer + name = "away team's bowman headset" + icon_state = "exp_headset_alt" + +/obj/item/radio/headset/sar + name = "search and rescue headset" + icon_state = "sar_headset" + adhoc_fallback = TRUE + ks2type = /obj/item/encryptionkey/sar + +/obj/item/radio/headset/alt/sar + name = "search and rescue bowman headset" + icon_state = "sar_headset_alt" + adhoc_fallback = TRUE + ks2type = /obj/item/encryptionkey/sar + +/obj/item/radio/headset/talon + name = "talon headset" + adhoc_fallback = TRUE + icon_state = "pilot_headset" + ks2type = /obj/item/encryptionkey/talon + +/obj/item/radio/headset/alt/talon + name = "talon bowman headset" + adhoc_fallback = TRUE + icon_state = "pilot_headset" + ks2type = /obj/item/encryptionkey/talon + +/obj/item/radio/headset/earbud/talon + name = "talon earbud" + adhoc_fallback = TRUE + icon_state = "pilot_headset" + ks2type = /obj/item/encryptionkey/talon + +/obj/item/radio/headset/headset_rob + name = "robotics radio headset" + icon_state = "rob_headset" + ks2type = /obj/item/encryptionkey/headset_rob + +// Special Antag/Admin/Event/Other headsets + +/obj/item/radio/headset/syndicate + origin_tech = list(TECH_ILLEGAL = 3) + syndie = 1 + ks1type = /obj/item/encryptionkey/syndicate + +/obj/item/radio/headset/alt/syndicate + origin_tech = list(TECH_ILLEGAL = 3) + syndie = 1 + ks1type = /obj/item/encryptionkey/syndicate + +/obj/item/radio/headset/earbud/syndicate + origin_tech = list(TECH_ILLEGAL = 3) + syndie = 1 + ks1type = /obj/item/encryptionkey/syndicate + +/obj/item/radio/headset/raider + origin_tech = list(TECH_ILLEGAL = 2) + syndie = 1 + ks1type = /obj/item/encryptionkey/raider + +/obj/item/radio/headset/raider/Initialize() + . = ..() + set_frequency(RAID_FREQ) + +/obj/item/radio/headset/binary + origin_tech = list(TECH_ILLEGAL = 3) + ks1type = /obj/item/encryptionkey/binary + +/obj/item/radio/headset/omni //Only for the admin intercoms + ks2type = /obj/item/encryptionkey/omni + +/obj/item/radio/headset/mmi_radio + name = "brain-integrated radio" + icon = 'icons/obj/robot_component.dmi' + icon_state = "radio" + item_state = "headset" + var/mmiowner = null + var/radio_enabled = 1 + +/obj/item/radio/headset/mmi_radio/receive_range(freq, level) + if (!radio_enabled || istype(src.loc.loc, /mob/living/silicon) || istype(src.loc.loc, /obj/item/organ/internal)) + return -1 //Transciever Disabled. + return ..(freq, level, 1) + +/obj/item/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans. + name = "nonhuman radio receiver" + desc = "An updated, self-adhesive modular intercom that requires no hands to operate or ears to hold, just stick it on. Takes encryption keys" + +/obj/item/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway. + name = "\improper AI subspace transceiver" + desc = "Integrated AI radio transceiver." + icon = 'icons/obj/robot_component.dmi' + icon_state = "radio" + item_state = "headset" + ks2type = /obj/item/encryptionkey/heads/ai_integrated + var/myAi = null // Atlantis: Reference back to the AI which has this radio. + var/disabledAi = 0 // Atlantis: Used to manually disable AI's integrated radio via intellicard menu. + +/obj/item/radio/headset/heads/ai_integrated/receive_range(freq, level) + if (disabledAi) + return -1 //Transciever Disabled. + return ..(freq, level, 1) \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/headset_vr.dm b/code/game/objects/items/devices/radio/headset_vr.dm deleted file mode 100644 index bad15ccd48..0000000000 --- a/code/game/objects/items/devices/radio/headset_vr.dm +++ /dev/null @@ -1,131 +0,0 @@ -/obj/item/radio/headset/centcom - name = "centcom radio headset" - desc = "The headset of the boss's boss." - icon_state = "cent_headset" - item_state = "headset" - centComm = 1 - ks2type = /obj/item/encryptionkey/ert - -/obj/item/radio/headset/centcom/alt - name = "centcom bowman headset" - icon_state = "com_headset_alt" - -/obj/item/radio/headset/nanotrasen - name = "\improper NT radio headset" - desc = "The headset of a Nanotrasen corporate employee." - icon_state = "nt_headset" - centComm = 1 - ks2type = /obj/item/encryptionkey/ert - -/obj/item/radio/headset/nanotrasen/alt - name = "\improper NT bowman headset" - icon_state = "nt_headset_alt" - -/obj/item/radio/headset - sprite_sheets = list(SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi', - SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi') - -/obj/item/radio/headset/mob_headset //Adminbus headset for simplemob shenanigans. - name = "nonhuman radio receiver" - desc = "An updated, self-adhesive modular intercom that requires no hands to operate or ears to hold, just stick it on. Takes encryption keys" - -/obj/item/radio/headset/mob_headset/receive_range(freq, level) - if(ismob(src.loc)) - return ..(freq, level, 1) - return -1 - -/obj/item/radio/headset/mob_headset/afterattack(var/atom/movable/target, mob/living/user, proximity) - if(!proximity) - return - if(istype(target,/mob/living/simple_mob)) - var/mob/living/simple_mob/M = target - if(!M.mob_radio) - user.drop_item() - forceMove(M) - M.mob_radio = src - return - if(M.mob_radio) - M.mob_radio.forceMove(M.loc) - M.mob_radio = null - return - ..() - -/obj/item/radio/headset/headset_cargo - desc = "A headset used by the QM's slaves." - -/obj/item/radio/headset/headset_cargo/alt - desc = "A bowman headset used by the QM's slaves." - -/obj/item/radio/headset/headset_qm - name = "qm radio headset" - desc = "A headset used by the QM." - icon_state = "cargo_headset" - ks2type = /obj/item/encryptionkey/qm - -/obj/item/radio/headset/headset_qm/alt - name = "qm bowman headset" - desc = "A bowman headset used by the QM." - icon_state = "cargo_headset_alt" - -/obj/item/radio/headset/pathfinder - name = "pathfinder's headset" - desc = "Headset used by pathfinders for exploring. Access to the explorer and command channels." - icon_state = "exp_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/encryptionkey/pathfinder - -/obj/item/radio/headset/pathfinder/alt - name = "pathfinder's bowman headset" - desc = "Bowman headset used by pathfinders for exploring. Access to the explorer and command channels." - icon_state = "exp_headset_alt" - -/obj/item/radio/headset/pilot - name = "pilot's headset" - desc = "A headset used by pilots." - icon_state = "pilot_headset" - adhoc_fallback = TRUE - -/obj/item/radio/headset/pilot/alt - name = "pilot's bowman headset" - desc = "A bowman headset used by pilots." - icon_state = "pilot_headset_alt" - -/obj/item/radio/headset/explorer - name = "away team member's headset" - desc = "Headset used by the away team for exploring. Access to the away team channel." - icon_state = "exp_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/encryptionkey/explorer - -/obj/item/radio/headset/explorer/alt - name = "away team's bowman headset" - desc = "Bowman headset used by the away team for exploring. Access to the away team channel." - icon_state = "exp_headset_alt" - -/obj/item/radio/headset/sar - name = "fm radio headset" - desc = "A headset for field medics." - icon_state = "sar_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/encryptionkey/sar - -/obj/item/radio/headset/sar/alt - name = "fm radio bowman headset" - desc = "A bowman headset for field medics." - icon_state = "sar_headset_alt" - -/* //They're all volunteers now. -/obj/item/radio/headset/volunteer - name = "volunteer's headset" - desc = "A headset used by volunteers to expedition teams, has access to the Away Team channel." - icon_state = "pilot_headset" - adhoc_fallback = TRUE - ks2type = /obj/item/encryptionkey/explorer -*/ - -/obj/item/radio/headset/talon - name = "talon headset" - desc = "A headset for communication between the crew of the ITV Talon." - adhoc_fallback = TRUE - icon_state = "pilot_headset" - ks2type = /obj/item/encryptionkey/talon diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm index 3496fe8bb0..aa2a1bb880 100644 --- a/code/game/objects/random/mapping.dm +++ b/code/game/objects/random/mapping.dm @@ -223,8 +223,8 @@ /obj/random/sfr/item_to_spawn() return pick(prob(25);/obj/item/radio/headset/heads/captain/sfr, - prob(25);/obj/item/radio/headset/headset_cargo/alt, - prob(25);/obj/item/radio/headset/headset_com/alt, + prob(25);/obj/item/radio/headset/alt/cargo, + prob(25);/obj/item/radio/headset/alt/headset_com, prob(25);/obj/item/radio/headset) // Mining Goodies diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index aa09e9fc5b..cb8732ecba 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -23,7 +23,9 @@ starts_with = list( /obj/item/clothing/head/that = 2, - /obj/item/radio/headset/headset_service = 2, + /obj/item/radio/headset/service = 2, + /obj/item/radio/headset/alt/service = 2, + /obj/item/radio/headset/earbud/service = 2, /obj/item/clothing/head/pin/flower, /obj/item/clothing/head/pin/flower/pink, /obj/item/clothing/head/pin/flower/yellow, @@ -51,7 +53,9 @@ starts_with = list( /obj/item/clothing/under/sundress, /obj/item/clothing/under/waiter = 2, - /obj/item/radio/headset/headset_service = 2, + /obj/item/radio/headset/service = 2, + /obj/item/radio/headset/alt/service = 2, + /obj/item/radio/headset/earbud/service = 2, /obj/item/storage/box/mousetraps = 2, /obj/item/clothing/under/rank/chef, /obj/item/clothing/head/chefhat, @@ -69,7 +73,9 @@ starts_with = list( /obj/item/clothing/under/rank/janitor, /obj/item/clothing/under/dress/maid/janitor, - /obj/item/radio/headset/headset_service, + /obj/item/radio/headset/service, + /obj/item/radio/headset/alt/service, + /obj/item/radio/headset/earbud/service, /obj/item/cartridge/janitor, /obj/item/clothing/suit/storage/hooded/wintercoat/janitor, /obj/item/clothing/gloves/black, diff --git a/code/game/objects/structures/crates_lockers/closets/misc_vr.dm b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm index d8ccfd6025..1aba1626ec 100644 --- a/code/game/objects/structures/crates_lockers/closets/misc_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm @@ -63,7 +63,7 @@ /obj/item/clothing/shoes/boots/winter/explorer, /obj/item/clothing/gloves/black, /obj/item/radio/headset/explorer, - /obj/item/radio/headset/explorer/alt, + /obj/item/radio/headset/alt/explorer, /obj/item/cartridge/explorer, /obj/item/flashlight, /obj/item/gps/explorer, @@ -104,7 +104,7 @@ /obj/item/clothing/shoes/boots/winter/explorer, /obj/item/clothing/gloves/black, /obj/item/radio/headset/pathfinder, - /obj/item/radio/headset/pathfinder/alt, + /obj/item/radio/headset/alt/pathfinder, /obj/item/cartridge/explorer, /obj/item/flashlight, /obj/item/gps/explorer, @@ -153,7 +153,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar, /obj/item/clothing/shoes/boots/winter/explorer, /obj/item/radio/headset/sar, - /obj/item/radio/headset/sar/alt, + /obj/item/radio/headset/alt/sar, /obj/item/cartridge/sar, /obj/item/flashlight, /obj/item/tank/emergency/oxygen/engi, @@ -201,7 +201,7 @@ /obj/item/clothing/shoes/black, /obj/item/clothing/gloves/fingerless, /obj/item/radio/headset/pilot, - /obj/item/radio/headset/pilot/alt, + /obj/item/radio/headset/alt/pilot, /obj/item/flashlight, /obj/item/reagent_containers/food/snacks/liquidfood, /obj/item/reagent_containers/food/snacks/liquidprotein, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 34810bfe42..9ede8e655c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -11,8 +11,9 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/cargo, /obj/item/clothing/shoes/boots/winter/supply, /obj/item/clothing/shoes/black, - /obj/item/radio/headset/headset_cargo, - /obj/item/radio/headset/headset_cargo/alt, + /obj/item/radio/headset/cargo, + /obj/item/radio/headset/alt/cargo, + /obj/item/radio/headset/earbud/cargo, /obj/item/clothing/gloves/black, /obj/item/clothing/gloves/fingerless, /obj/item/clothing/head/soft) @@ -37,8 +38,9 @@ /obj/item/clothing/under/rank/cargo/jeans, /obj/item/clothing/under/rank/cargo/jeans/female, /obj/item/clothing/shoes/brown, - /obj/item/radio/headset/headset_qm, //VOREStation Edit, - /obj/item/radio/headset/headset_qm/alt, //VOREStation Edit, + /obj/item/radio/headset/qm, + /obj/item/radio/headset/alt/qm, + /obj/item/radio/headset/earbud/qm, /obj/item/clothing/under/rank/neo_qm, /obj/item/clothing/under/rank/neo_qm_skirt, /obj/item/clothing/under/rank/neo_qm_jacket, @@ -73,7 +75,7 @@ closet_appearance = /decl/closet_appearance/secure_closet/mining starts_with = list( - /obj/item/radio/headset/headset_mine, + /obj/item/radio/headset/miner, /obj/item/clothing/under/rank/miner, /obj/item/clothing/gloves/black, /obj/item/clothing/shoes/black, 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 7186779efe..78018e247e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -20,7 +20,8 @@ /obj/item/clothing/shoes/brown, /obj/item/cartridge/ce, /obj/item/radio/headset/heads/ce, - /obj/item/radio/headset/heads/ce/alt, + /obj/item/radio/headset/alt/heads/ce, + /obj/item/radio/headset/earbud/heads/ce, /obj/item/storage/toolbox/mechanical, /obj/item/clothing/suit/storage/hazardvest, ///obj/item/clothing/mask/gas, //VOREStation Removal: Locker bloat, grr. The fancy one below functions as a mask & helmet combined. @@ -92,7 +93,8 @@ /obj/item/clothing/accessory/storage/brown_vest, /obj/item/storage/toolbox/mechanical, /obj/item/radio/headset/headset_eng, - /obj/item/radio/headset/headset_eng/alt, + /obj/item/radio/headset/alt/headset_eng, + /obj/item/radio/headset/earbud/headset_eng, /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/mask/gas, /obj/item/clothing/glasses/meson, @@ -129,7 +131,8 @@ /obj/item/extinguisher/atmo, ///obj/item/clamp, //VOREStation Removal: without leaks those are pointless, /obj/item/radio/headset/headset_eng, - /obj/item/radio/headset/headset_eng/alt, + /obj/item/radio/headset/alt/headset_eng, + /obj/item/radio/headset/earbud/headset_eng, /obj/item/clothing/suit/storage/hazardvest/atmos, //VOREStation edit. Eng locker gets regular haz-vest, atmos gets the themed one of their own /obj/item/clothing/mask/gas, /obj/item/cartridge/atmos, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index e5fc9ce56e..5e4389f0ef 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -8,7 +8,9 @@ /obj/item/clothing/under/rank/hydroponics, /obj/item/clothing/gloves/botanic_leather, /obj/item/analyzer/plant_analyzer, - /obj/item/radio/headset/headset_service, + /obj/item/radio/headset/service, + /obj/item/radio/headset/alt/service, + /obj/item/radio/headset/earbud/service, /obj/item/clothing/head/greenbandana, /obj/item/shovel/spade, /obj/item/material/minihoe, 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 a747bf9e3e..231b17b610 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -39,7 +39,8 @@ /obj/item/clothing/shoes/white, /obj/item/cartridge/medical, /obj/item/radio/headset/headset_med, - /obj/item/radio/headset/headset_med/alt, + /obj/item/radio/headset/alt/headset_med, + /obj/item/radio/headset/earbud/headset_med, /obj/item/clothing/suit/storage/hooded/wintercoat/medical, /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt, /obj/item/clothing/shoes/boots/winter/medical, @@ -108,7 +109,9 @@ /obj/item/clothing/suit/storage/toggle/labcoat/emt, /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para, /obj/item/clothing/shoes/boots/winter/medical, - /obj/item/radio/headset/headset_med/alt, + /obj/item/radio/headset/headset_med, + /obj/item/radio/headset/alt/headset_med, + /obj/item/radio/headset/earbud/headset_med, /obj/item/cartridge/medical, /obj/item/storage/briefcase/inflatable, /obj/item/flashlight, @@ -143,7 +146,8 @@ /obj/item/clothing/under/rank/neo_cmo_turtle_skirt, /obj/item/clothing/under/rank/neo_cmo_gorka, /obj/item/radio/headset/heads/cmo, - /obj/item/radio/headset/heads/cmo/alt, + /obj/item/radio/headset/alt/heads/cmo, + /obj/item/radio/headset/earbud/heads/cmo, /obj/item/flash, /obj/item/reagent_containers/hypospray/vial, /obj/item/clothing/suit/storage/hooded/wintercoat/medical, 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 5b5d4c42f2..f33d9ba9ae 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -45,7 +45,8 @@ /obj/item/clothing/shoes/laceup/brown, /obj/item/clothing/gloves/sterile/latex, /obj/item/radio/headset/heads/rd, - /obj/item/radio/headset/heads/rd/alt, + /obj/item/radio/headset/alt/heads/rd, + /obj/item/radio/headset/earbud/heads/rd, /obj/item/tank/air, /obj/item/clothing/mask/gas, /obj/item/flash, 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 80d3bb90eb..90661f4dd4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -10,7 +10,8 @@ /obj/item/cartridge/captain, /obj/item/storage/lockbox/medal, /obj/item/radio/headset/heads/captain, - /obj/item/radio/headset/heads/captain/alt, + /obj/item/radio/headset/alt/heads/captain, + /obj/item/radio/headset/earbud/heads/captain, /obj/item/gun/energy/gun, /obj/item/melee/telebaton, /obj/item/flash, @@ -27,7 +28,8 @@ /obj/item/clothing/head/helmet, /obj/item/cartridge/hop, /obj/item/radio/headset/heads/hop, - /obj/item/radio/headset/heads/hop/alt, + /obj/item/radio/headset/alt/heads/hop, + /obj/item/radio/headset/earbud/heads/hop, /obj/item/storage/box/ids = 2, /obj/item/gun/energy/gun/compact, /obj/item/storage/box/commandkeys, @@ -90,7 +92,8 @@ /obj/item/clothing/head/helmet/dermal, /obj/item/cartridge/hos, /obj/item/radio/headset/heads/hos, - /obj/item/radio/headset/heads/hos/alt, + /obj/item/radio/headset/alt/heads/hos, + /obj/item/radio/headset/earbud/heads/hos, /obj/item/clothing/glasses/sunglasses/sechud, /obj/item/taperoll/police, /obj/item/shield/riot, @@ -151,7 +154,8 @@ /obj/item/clothing/under/rank/neo_sec_gorka, /obj/item/cartridge/security, /obj/item/radio/headset/headset_sec, - /obj/item/radio/headset/headset_sec/alt, + /obj/item/radio/headset/alt/headset_sec, + /obj/item/radio/headset/earbud/headset_sec, /obj/item/clothing/glasses/sunglasses/sechud, /obj/item/taperoll/police, /obj/item/clothing/accessory/badge/holo/warden, @@ -189,7 +193,8 @@ /obj/item/clothing/head/helmet, /obj/item/cartridge/security, /obj/item/radio/headset/headset_sec, - /obj/item/radio/headset/headset_sec/alt, + /obj/item/radio/headset/alt/headset_sec, + /obj/item/radio/headset/earbud/headset_sec, /obj/item/storage/belt/security, /obj/item/flash, /obj/item/reagent_containers/spray/pepper, @@ -257,7 +262,8 @@ /obj/item/storage/belt/detective, /obj/item/storage/box/evidence, /obj/item/radio/headset/headset_sec, - /obj/item/radio/headset/headset_sec/alt, + /obj/item/radio/headset/alt/headset_sec, + /obj/item/radio/headset/earbud/headset_sec, /obj/item/clothing/suit/storage/vest/detective, /obj/item/taperoll/police, /obj/item/clothing/accessory/holster/armpit, diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm index 7761b7f03f..e627ad4a49 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm @@ -31,7 +31,8 @@ /obj/item/clothing/head/helmet/HoS/hat/blue, /obj/item/clothing/head/helmet/dermal, /obj/item/radio/headset/heads/hos, - /obj/item/radio/headset/heads/hos/alt, + /obj/item/radio/headset/alt/heads/hos, + /obj/item/radio/headset/earbud/heads/hos, /obj/item/clothing/glasses/sunglasses/sechud, /obj/item/storage/belt/security, /obj/item/clothing/accessory/holster/waist, @@ -76,7 +77,8 @@ /obj/item/clothing/head/helmet, /obj/item/cartridge/security, /obj/item/radio/headset/headset_sec, - /obj/item/radio/headset/headset_sec/alt, + /obj/item/radio/headset/alt/headset_sec, + /obj/item/radio/headset/earbud/headset_sec, /obj/item/storage/belt/security, /obj/item/flash, /obj/item/reagent_containers/spray/pepper, @@ -122,7 +124,8 @@ /obj/item/clothing/head/helmet/dermal, /obj/item/cartridge/hos, /obj/item/radio/headset/heads/hos, - /obj/item/radio/headset/heads/hos/alt, + /obj/item/radio/headset/alt/heads/hos, + /obj/item/radio/headset/earbud/heads/hos, /obj/item/clothing/glasses/sunglasses/sechud, /obj/item/taperoll/police, /obj/item/shield/riot, @@ -169,7 +172,8 @@ /obj/item/clothing/head/helmet/warden, /obj/item/cartridge/security, /obj/item/radio/headset/headset_sec, - /obj/item/radio/headset/headset_sec/alt, + /obj/item/radio/headset/alt/headset_sec, + /obj/item/radio/headset/earbud/headset_sec, /obj/item/clothing/glasses/sunglasses/sechud, /obj/item/taperoll/police, /obj/item/clothing/accessory/badge/holo/warden, @@ -204,7 +208,8 @@ /obj/item/cartridge/captain, /obj/item/storage/lockbox/medal, /obj/item/radio/headset/heads/captain, - /obj/item/radio/headset/heads/captain/alt, + /obj/item/radio/headset/alt/heads/captain, + /obj/item/radio/headset/earbud/heads/captain, /obj/item/gunbox/captain, /obj/item/melee/telebaton, /obj/item/flash, diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index b920ecd8b7..f010c116e9 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -410,7 +410,7 @@ /obj/item/clothing/under/rank/centcom, /obj/item/clothing/under/ert, /obj/item/clothing/under/syndicate/combat, - /obj/item/radio/headset/ert/alt, + /obj/item/radio/headset/alt/ert, /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/shoes/boots/swat, /obj/item/clothing/gloves/swat, diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe_vr.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe_vr.dm index 67deb1eec8..7f9956a855 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe_vr.dm @@ -3,13 +3,14 @@ closet_appearance = /decl/closet_appearance/tactical/alt //because ert lockers are red for some dumb reason starts_with = list( /obj/item/clothing/under/ert, - /obj/item/radio/headset/ert/alt, + /obj/item/radio/headset/ert, + /obj/item/radio/headset/alt/ert, /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/shoes/boots/swat, /obj/item/clothing/gloves/swat, /obj/item/clothing/mask/balaclava/tactical, /obj/item/clothing/mask/balaclava) - + //would you believe mercs have no official locker? well, now they do. basically just a rebranded ERT locker but hey, it's an option. -Killian /obj/structure/closet/wardrobe/merc name = "mercenary equipment" @@ -18,7 +19,9 @@ starts_with = list( /obj/item/clothing/under/tactical, /obj/item/clothing/under/syndicate/combat, - /obj/item/radio/headset/syndicate/alt, + /obj/item/radio/headset/syndicate, + /obj/item/radio/headset/alt/syndicate, + /obj/item/radio/headset/earbud/syndicate, /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/shoes/boots/combat, /obj/item/clothing/gloves/combat, diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index c61f8cd792..95a17a4f71 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -237,7 +237,7 @@ random_species = TRUE /obj/effect/landmark/corpse/miner - corpseradio = /obj/item/radio/headset/headset_cargo + corpseradio = /obj/item/radio/headset/miner corpseuniform = /obj/item/clothing/under/rank/miner corpsegloves = /obj/item/clothing/gloves/black corpseback = /obj/item/storage/backpack/industrial diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 14c56354f9..b76ff9ee38 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -11,6 +11,7 @@ pref.all_underwear_metadata = check_list_copy(save_data["all_underwear_metadata"]) for(var/i in pref.all_underwear_metadata) pref.all_underwear_metadata[i] = path2text_list(pref.all_underwear_metadata[i]) + pref.headset = save_data["headset"] pref.backbag = save_data["backbag"] pref.pdachoice = save_data["pdachoice"] pref.communicator_visibility = save_data["communicator_visibility"] @@ -23,6 +24,7 @@ for(var/i in pref.all_underwear_metadata) underwear[i] = check_list_copy(pref.all_underwear_metadata[i]) save_data["all_underwear_metadata"] = underwear + save_data["headset"] = pref.headset save_data["backbag"] = pref.backbag save_data["pdachoice"] = pref.pdachoice save_data["communicator_visibility"] = pref.communicator_visibility @@ -72,6 +74,10 @@ var/global/list/valid_ringtones = list( pref.all_underwear -= underwear_category_name // TODO - Looks like this is duplicating the work of sanitize_character() if so, remove + if(pref.headset > GLOB.headsetlist.len || pref.headset < 1) + pref.headset = 1 //Same as above + character.headset = pref.headset + if(pref.backbag > backbaglist.len || pref.backbag < 1) pref.backbag = 2 //Same as above character.backbag = pref.backbag @@ -107,6 +113,7 @@ var/global/list/valid_ringtones = list( for(var/underwear_metadata in pref.all_underwear_metadata) if(!(underwear_metadata in pref.all_underwear)) pref.all_underwear_metadata -= underwear_metadata + pref.headset = sanitize_integer(pref.headset, 1, GLOB.headsetlist.len, initial(pref.headset)) pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) pref.ringtone = sanitize(pref.ringtone, 20) @@ -123,6 +130,7 @@ var/global/list/valid_ringtones = list( . += " [gt.get_contents(get_metadata(UWC.name, gt))]" . += "
" + . += "Headset Type: [GLOB.headsetlist[pref.headset]]
" . += "Backpack Type: [backbaglist[pref.backbag]]
" . += "PDA Type: [pdachoicelist[pref.pdachoice]]
" . += "Communicator Visibility: [(pref.communicator_visibility) ? "Yes" : "No"]
" @@ -149,6 +157,12 @@ var/global/list/valid_ringtones = list( /datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) + if(href_list["change_headset"]) + var/new_headset = tgui_input_list(user, "Choose your character's style of headset:", "Character Preference", GLOB.headsetlist, GLOB.headsetlist[pref.headset]) + if(!isnull(new_headset) && CanUseTopic(user)) + pref.headset = GLOB.headsetlist.Find(new_headset) + return TOPIC_REFRESH_UPDATE_PREVIEW + if(href_list["change_backpack"]) var/new_backbag = tgui_input_list(user, "Choose your character's style of bag:", "Character Preference", backbaglist, backbaglist[pref.backbag]) if(!isnull(new_backbag) && CanUseTopic(user)) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a6fbe93881..31899796a2 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -47,6 +47,7 @@ var/list/preferences_datums = list() var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). var/b_type = "A+" //blood type (not-chooseable) var/blood_reagents = "default" //blood restoration reagents + var/headset = 1 //headset type var/backbag = 2 //backpack type var/pdachoice = 1 //PDA type var/shoe_hater = FALSE //RS ADD - if true, will spawn with no shoes diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm index 7942381c9d..052cab2a26 100644 --- a/code/modules/economy/vending_machines.dm +++ b/code/modules/economy/vending_machines.dm @@ -1615,7 +1615,7 @@ /obj/item/clothing/head/soft/purple = 5, /obj/item/clothing/head/beret/purple = 5, /obj/item/clothing/head/headband/maid = 5, - /obj/item/radio/headset/headset_service = 5, + /obj/item/radio/headset/service = 5, /obj/item/clothing/under/rank/janitor = 5, /obj/item/clothing/under/dress/maid/janitor = 5, /obj/item/clothing/suit/storage/hooded/wintercoat/janitor = 5, diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm index 41e3645f00..fa8331cc34 100644 --- a/code/modules/economy/vending_machines_vr.dm +++ b/code/modules/economy/vending_machines_vr.dm @@ -343,7 +343,7 @@ /obj/item/storage/box/syndie_kit/chameleon = 1, /obj/item/clothing/mask/bandana = 1, /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/radio/headset/syndicate/alt = 1, + /obj/item/radio/headset/syndicate = 1, /obj/item/pda = 1, /obj/item/communicator = 1, /obj/item/tape_roll = 2, diff --git a/code/modules/mob/living/carbon/human/ai_controlled/ai_controlled.dm b/code/modules/mob/living/carbon/human/ai_controlled/ai_controlled.dm index 7beb027663..82243467c8 100644 --- a/code/modules/mob/living/carbon/human/ai_controlled/ai_controlled.dm +++ b/code/modules/mob/living/carbon/human/ai_controlled/ai_controlled.dm @@ -126,7 +126,7 @@ to_wear_helmet = /obj/item/clothing/head/helmet/dermal to_wear_glasses = /obj/item/clothing/glasses/goggles to_wear_mask = /obj/item/clothing/mask/gas/half - to_wear_l_radio = /obj/item/radio/headset/headset_rob + to_wear_l_radio = /obj/item/radio/headset to_wear_r_radio = null to_wear_uniform = /obj/item/clothing/under/color/grey to_wear_suit = /obj/item/clothing/suit/armor/vest diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index d182593d1f..8dca9ab08f 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -54,6 +54,7 @@ var/list/all_underwear = list() var/list/all_underwear_metadata = list() var/list/hide_underwear = list() + var/headset = 1 //Which headset type the player has chosen. var/backbag = 2 //Which backpack type the player has chosen. var/pdachoice = 1 //Which PDA type the player has chosen. diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 54a5f2cf29..b2a03e9cf9 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -29,6 +29,7 @@ all_underwear[WRC.name] = WRI.name + headset = rand(1,3) backbag = rand(1,6) pdachoice = rand(1,7) age = rand(current_species.min_age, current_species.max_age) diff --git a/icons/inventory/ears/mob.dmi b/icons/inventory/ears/mob.dmi index 95ec0e9c8a954c4865e18051e65bb2de6ecf3540..016c3d081d25304cbc40cf231e4847ae0f734bcf 100644 GIT binary patch literal 19037 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 IRqL1k3-yi@_W%F@ literal 19096 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 diff --git a/icons/inventory/ears/mob_teshari.dmi b/icons/inventory/ears/mob_teshari.dmi index d41f5d871f28ee1c3acce50994b548f47721ebf0..69b6b42b0bc36f69546ca7e7fb3bfa3b5041e22d 100644 GIT binary patch literal 2750 zcma)7cTm&W8vVgq0Clk-0!mXbvVaLiK!k)Y5ed>3R1idIQW7ZwK?%F;%0|Jgv`CTY zf*_~_q(lNFKqwD2AfZGlB9JIWKp`Q7l;6Ymhi`m;y>I5u{k}72=ALuz%)R(CsFOPs z)D!>!*nxC*@Bjdr2j7<5PaDYSjD5t$HhJc>mt$*dYh+}kySsb6x~u>qi{C5bBq#S; zTQ-N@0D(X<6%;P++=<8I;c)nc-Mg!+tBs6|Iw1gWNFAI6?>+9Q)53KbA_&8uP=B_vZ`T6+`cSrB4)NDX9aULj7z~*X8g5FC3cCL9wNj*bR^#G*&Jw$Ti&osR5Py{DHWyj_Fz#^XG7E1!o|rD9aJD{R?@ z@tdH1I9gPRWISFDu^|w^d+5B*QK*rNGwq5%=ZxK+O`H{GUi2@$F%l4$Pf)eiU|p zh;6@7&iwLRzT*`Wt*2S%_!vUpA786XYD%6&HR_@DGae{K_o3!uuMp(D38L*(ZI$<# z1xT$5Qh%GgF3#BS7W%hIUPaXQUReDRTK3DtqOBD&p|YmYTSK8oG~g$c(5{&SV4~|t z$8YKVO?xAh8*0&4%oEBc5~6>7=0<^ebJqv!A9TM6k82tid3F{=CYXa&b>@YsEiIM& zS>+QqEBy%bp=_qX);F{K<)tgGFFKADhbtclb*6U6Y>4@9sXd%nB7>L-+F~?J#bU^O z>=`eDDUF(^Hl^_*kaWLsI)h)&o^E}Xl8*%vSma;$Z-k_` z!V=-ytwZfqi}QTV_s6|Zsa}fr!HNQerKROBYy>WqD4pMt)gD|;Hh`+iO}p@qCw*OQ zsID9JBX+Tem&yWOO_Ti|?gOchLlwWU5IFlIG+JkHbt0A9hZb6M0s|MJLr}ah=Q4$D z;`NAXN^3}o6U;2WTuaEi08U~59vayClw_AH3PsCxvWa~z(wp9iDK1OeMD*2lsmBde zZ#fTJR_R6Tg7)M13f3etOtNCWNyH|>FE6lR0(QWJE=qEu)QfNpA9WfWd8&DVJ16I| zf!t7U9cn;}eHFo&96WJd)ql6Qo8Vu_h$x<)3Wz_+m4;QTf36`=gSImcA z)*8mi7*uHJgE@WoK2E+XocVfnwN~uk{3WI4v4}arQIO~l-dKe;M=43q1%SF61dOTL z(PHn(%6z8xuYy8)kJ38S&}uY*?4v^W0^3KOq--_OlT44H`9&eIeXa9R>O14M_4R%B z|0E5Ucd^Nn3%g7Fw&@RTn}$NiUx&C%fH0!~yA1wkpDiLbdEM}kSoghVxZzVl{c{w) zWVs?)LRR%jt1B22U5PF4aL;W~7lWm#`cVsr$TXap`&>yQQ_=Yp8N)A;6Ef6%g5g$C zwsszG)z=9J?er*p=I~2nzuWKp9=h(|^l*!1bEdL2F3p>z@JGRl`MvX;fV$g>QylcI z6r;UMcttY&nu)3Dl-*Wq;fFE`}M&!~=l-3oilt84Y{-ds6r2FHB+o4(hKRo0XdVQSUQI%V0* z2fN-Olvi;gC9jJAtl~{I#^M+=p3^${_vW&DU)5Z_Zd7>j{fD9XJ2l{7_JoE@p~c@P zaZ*ujs>INV6z4YhXZ9i|m-oTEOHZZO43>Nh`M!XXXrMlg;`EbL30HlTOCkhc-dtZj z-Qq&e2p<3ZsjEDQm^Z*=_%^4sxX7RX>yl27p2_7hMA}%lMgrHCvr;#1bvo@LCW-ez zLWbYAo`E%V@?ePX>c2Iq%J}=ZhxA7HY_l1}z;6ZWAq{Demkhl>9M1{J>Jcf2$Ems{{S67T>j%RR{Qr{zeZYv_?IC@%!fFOa zjlkVaxX}+D!*b}5)kqb)E7k$wpC)B$yW9oMMQJt}qz{HRy$Ot~&xr_j76<Zw&U_u=dLPl)twJY>w={v35v8m9_m*d1tyffa2Fq#A-7oee z@h-f%G-kR^cfsY5A>G71mo4NQphq(x_q@^z-}N55P&x*^`qwRCc-^Hc^p9cyAkewY xH%f;ITDml2yxhi4uoO^Cm-k&Y;bD!ahn{|&ugT<8D* literal 2642 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 literal 24928 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 diff --git a/maps/cynosure/cynosure-6.dmm b/maps/cynosure/cynosure-6.dmm index 56fe694d8c..95ac6376a5 100644 --- a/maps/cynosure/cynosure-6.dmm +++ b/maps/cynosure/cynosure-6.dmm @@ -10652,10 +10652,10 @@ /area/beach) "lQh" = ( /obj/structure/table/standard, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, /turf/unsimulated/floor{ icon_state = "lino" }, diff --git a/maps/submaps/admin_use_vr/kk_mercship.dmm b/maps/submaps/admin_use_vr/kk_mercship.dmm index 79a61b4b31..899fd7f736 100644 --- a/maps/submaps/admin_use_vr/kk_mercship.dmm +++ b/maps/submaps/admin_use_vr/kk_mercship.dmm @@ -6594,10 +6594,10 @@ /obj/item/radio/headset/syndicate, /obj/item/radio/headset/syndicate, /obj/item/radio/headset/syndicate, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, /obj/effect/floor_decal/techfloor{ dir = 10 }, diff --git a/maps/submaps/depreciated_vr/mercbase.dmm b/maps/submaps/depreciated_vr/mercbase.dmm index 097b6bf8a4..ca3b40f71b 100644 --- a/maps/submaps/depreciated_vr/mercbase.dmm +++ b/maps/submaps/depreciated_vr/mercbase.dmm @@ -419,10 +419,10 @@ /obj/item/radio/headset/syndicate, /obj/item/radio/headset/syndicate, /obj/item/radio/headset/syndicate, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, -/obj/item/radio/headset/syndicate/alt, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, +/obj/item/radio/headset/alt/syndicate, /turf/unsimulated/floor{ icon_state = "lino" }, diff --git a/vorestation.dme b/vorestation.dme index efa6a21a29..b16e5b01f8 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -1356,7 +1356,6 @@ #include "code\game\objects\items\devices\radio\encryptionkey.dm" #include "code\game\objects\items\devices\radio\encryptionkey_vr.dm" #include "code\game\objects\items\devices\radio\headset.dm" -#include "code\game\objects\items\devices\radio\headset_vr.dm" #include "code\game\objects\items\devices\radio\intercom.dm" #include "code\game\objects\items\devices\radio\jammer.dm" #include "code\game\objects\items\devices\radio\jammer_vr.dm" From caa6f83e14d8129de80f45906fe89acce7f7e330 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Wed, 6 Nov 2024 22:07:54 +0100 Subject: [PATCH 2/2] fixes an invisibility exploit (#16573) --- code/modules/vehicles/rover_vr.dm | 7 +++++-- code/modules/vehicles/vehicle.dm | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/vehicles/rover_vr.dm b/code/modules/vehicles/rover_vr.dm index 12094f58c6..9ad03c25bf 100644 --- a/code/modules/vehicles/rover_vr.dm +++ b/code/modules/vehicles/rover_vr.dm @@ -292,12 +292,15 @@ if(!istype(C, /mob/living/carbon/human)) return 0 + . = ..(C) + + if(!.) + return + if(ismob(C)) buckle_mob(C) C.alpha = 0 - return ..() - /obj/vehicle/train/rover/engine/unload(var/mob/user, var/direction) var/mob/living/carbon/human/C = load diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm index 97e9dfa746..963faa32f8 100644 --- a/code/modules/vehicles/vehicle.dm +++ b/code/modules/vehicles/vehicle.dm @@ -340,7 +340,7 @@ C.pixel_y += load_offset_y C.layer = layer + 0.1 - if(ismob(C)) + if(ismob(C) && user) user_buckle_mob(C, user) return 1