diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm
index 24b21c761e6..cdb8e195b7c 100644
--- a/_maps/map_files/stations/boxstation.dmm
+++ b/_maps/map_files/stations/boxstation.dmm
@@ -67155,11 +67155,11 @@
name = "north bump";
pixel_y = 24
},
-/obj/structure/dresser,
/obj/machinery/power/apc/directional/east,
/obj/structure/cable{
icon_state = "0-8"
},
+/obj/structure/dresser/wardrobe/captain,
/turf/simulated/floor/carpet,
/area/station/command/office/captain/bedroom)
"ooI" = (
diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm
index 8a38ef61780..8d4713dd581 100644
--- a/_maps/map_files/stations/cerestation.dmm
+++ b/_maps/map_files/stations/cerestation.dmm
@@ -2753,7 +2753,7 @@
/turf/simulated/floor/plasteel/dark,
/area/station/legal/courtroom)
"auR" = (
-/obj/structure/dresser,
+/obj/structure/dresser/wardrobe/captain,
/turf/simulated/floor/wood,
/area/station/command/office/captain)
"auS" = (
@@ -4494,20 +4494,6 @@
},
/turf/simulated/floor/plating,
/area/station/maintenance/storage)
-"aLQ" = (
-/obj/machinery/door/airlock/command{
- name = "Captain's Quarters"
- },
-/obj/effect/mapping_helpers/airlock/access/all/command/captain,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/hidden/supply{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/turf/simulated/floor/wood,
-/area/station/command/office/captain)
"aLU" = (
/obj/structure/chair/comfy/brown{
dir = 1
@@ -18389,6 +18375,15 @@
/obj/structure/lattice/catwalk,
/turf/space,
/area/station/maintenance/disposal/external/southeast)
+"cSI" = (
+/obj/structure/bed,
+/obj/item/bedsheet/captain,
+/obj/item/radio/intercom{
+ name = "east bump";
+ pixel_x = 28
+ },
+/turf/simulated/floor/carpet/royalblack,
+/area/station/command/office/captain)
"cSJ" = (
/obj/structure/closet/secure_closet/magistrate,
/obj/item/megaphone,
@@ -23419,12 +23414,6 @@
/obj/effect/turf_decal/tiles/neutral,
/turf/simulated/floor/plasteel,
/area/station/hallway/secondary/entry/north)
-"dPP" = (
-/obj/machinery/computer/arcade{
- dir = 4
- },
-/turf/simulated/floor/carpet/black,
-/area/station/command/office/captain)
"dPY" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 1
@@ -54567,6 +54556,9 @@
/obj/effect/turf_decal/tiles/neutral,
/turf/simulated/floor/plasteel,
/area/station/hallway/primary/fore/north)
+"kHX" = (
+/turf/simulated/floor/wood,
+/area/station/command/office/captain)
"kHZ" = (
/obj/structure/table,
/obj/item/dest_tagger,
@@ -63251,6 +63243,12 @@
/obj/machinery/door/firedoor,
/turf/simulated/floor/plating,
/area/station/supply/miningdock)
+"mEo" = (
+/obj/machinery/computer/arcade{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/black,
+/area/station/command/office/captain)
"mEq" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/turf/simulated/wall,
@@ -75198,9 +75196,6 @@
},
/turf/simulated/floor/plasteel,
/area/station/security/lobby)
-"poW" = (
-/turf/simulated/floor/wood,
-/area/station/command/office/captain)
"poY" = (
/obj/effect/spawner/random/dirt/often,
/turf/simulated/floor/plasteel/freezer,
@@ -104113,15 +104108,6 @@
/obj/machinery/firealarm/directional/south,
/turf/simulated/floor/carpet/green,
/area/station/service/library)
-"vGs" = (
-/obj/structure/bed,
-/obj/item/bedsheet/captain,
-/obj/item/radio/intercom{
- name = "east bump";
- pixel_x = 28
- },
-/turf/simulated/floor/carpet/royalblack,
-/area/station/command/office/captain)
"vGt" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -112518,6 +112504,20 @@
icon_regular_floor = "yellowsiding"
},
/area/station/service/theatre)
+"xxS" = (
+/obj/machinery/door/airlock/command{
+ name = "Captain's Quarters"
+ },
+/obj/effect/mapping_helpers/airlock/access/all/command/captain,
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/turf/simulated/floor/wood,
+/area/station/command/office/captain)
"xxU" = (
/obj/structure/disposalpipe/segment,
/turf/simulated/floor/plating,
@@ -147865,8 +147865,8 @@ abW
dxS
auU
ikc
-vGs
-poW
+cSI
+kHX
wPw
uXj
aCb
@@ -148124,7 +148124,7 @@ eTm
awk
eTm
eTm
-aLQ
+xxS
uXj
uXj
uXj
@@ -148383,7 +148383,7 @@ eTm
uBe
vUn
aVo
-dPP
+mEo
qEF
uaz
eTm
diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm
index cbaa7f38ea6..577be7b1abc 100644
--- a/_maps/map_files/stations/deltastation.dmm
+++ b/_maps/map_files/stations/deltastation.dmm
@@ -27224,7 +27224,7 @@
/turf/simulated/floor/carpet/black,
/area/station/command/office/captain/bedroom)
"cea" = (
-/obj/structure/dresser,
+/obj/structure/dresser/wardrobe/captain,
/turf/simulated/floor/carpet/black,
/area/station/command/office/captain/bedroom)
"ceb" = (
diff --git a/_maps/map_files/stations/emeraldstation.dmm b/_maps/map_files/stations/emeraldstation.dmm
index 4259a29a68e..f5b967f57d4 100644
--- a/_maps/map_files/stations/emeraldstation.dmm
+++ b/_maps/map_files/stations/emeraldstation.dmm
@@ -67453,7 +67453,7 @@
/turf/simulated/floor/plating,
/area/station/engineering/atmos/asteroid_maint)
"nGM" = (
-/obj/structure/dresser,
+/obj/structure/dresser/wardrobe/captain,
/turf/simulated/floor/wood,
/area/station/command/office/captain/bedroom)
"nGR" = (
diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm
index d740d2ecd7c..f13bcbc3259 100644
--- a/_maps/map_files/stations/metastation.dmm
+++ b/_maps/map_files/stations/metastation.dmm
@@ -11039,7 +11039,7 @@
/turf/simulated/floor/engine,
/area/station/science/test_chamber)
"bnE" = (
-/obj/structure/dresser,
+/obj/structure/dresser/wardrobe/captain,
/obj/structure/sign/bobross{
pixel_y = 32
},
diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm
index 3ae28ed64b1..df608e5595d 100644
--- a/code/game/objects/items/storage/garment.dm
+++ b/code/game/objects/items/storage/garment.dm
@@ -23,39 +23,6 @@
/obj/item/clothing/gloves/color/black/krav_maga,
)
-/obj/item/storage/bag/garment/captain
- name = "captain's garment bag"
- desc = "A bag for storing extra clothes and shoes. This one belongs to the captain."
-
-/obj/item/storage/bag/garment/captain/populate_contents()
- new /obj/item/clothing/head/caphat(src)
- new /obj/item/clothing/head/caphat/parade(src)
- new /obj/item/clothing/head/caphat/parade/white(src)
- new /obj/item/clothing/head/beret/captain(src)
- new /obj/item/clothing/head/beret/captain/white(src)
- new /obj/item/clothing/head/crown/fancy(src)
- new /obj/item/clothing/neck/cloak/captain(src)
- new /obj/item/clothing/suit/armor/vest/capcarapace(src)
- new /obj/item/clothing/suit/armor/vest/capcarapace/jacket(src)
- new /obj/item/clothing/suit/armor/vest/capcarapace/jacket/tunic(src)
- new /obj/item/clothing/suit/armor/vest/capcarapace/coat(src)
- new /obj/item/clothing/suit/armor/vest/capcarapace/coat/white(src)
- new /obj/item/clothing/neck/cloak/captain_mantle(src)
- new /obj/item/clothing/under/rank/captain(src)
- new /obj/item/clothing/under/rank/captain/skirt(src)
- new /obj/item/clothing/under/rank/captain/white(src)
- new /obj/item/clothing/under/rank/captain/skirt/white(src)
- new /obj/item/clothing/under/rank/captain/parade(src)
- new /obj/item/clothing/under/rank/captain/dress(src)
- new /obj/item/clothing/gloves/color/captain(src)
- new /obj/item/clothing/shoes/brown(src)
- new /obj/item/clothing/shoes/laceup(src)
- new /obj/item/clothing/glasses/sunglasses(src)
- new /obj/item/clothing/glasses/hud/security/sunglasses(src)
- new /obj/item/clothing/glasses/hud/health/sunglasses(src)
- new /obj/item/clothing/head/helmet/space/plasmaman/captain(src)
- new /obj/item/clothing/under/plasmaman/captain(src)
-
/obj/item/storage/bag/garment/head_of_personnel
name = "head of personnel's garment bag"
desc = "A bag for storing extra clothes and shoes. This one belongs to the head of personnel."
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm
index 435c9d1dd41..145f42bcfdd 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security_lockers.dm
@@ -10,7 +10,6 @@
new /obj/item/storage/backpack/satchel_cap(src)
new /obj/item/book/manual/wiki/faxes(src)
new /obj/item/storage/backpack/duffel/captain(src)
- new /obj/item/storage/bag/garment/captain(src)
new /obj/item/cartridge/captain(src)
new /obj/item/radio/headset/heads/captain/alt(src)
new /obj/item/storage/belt/sheath/saber(src)
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index 39953e0f3be..ae27d9cf907 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -6,57 +6,60 @@
density = TRUE
anchored = TRUE
-/obj/structure/dresser/attack_hand(mob/user as mob)
+/obj/structure/dresser/attack_hand(mob/user)
+ change_undergarments(user)
+
+/obj/structure/dresser/proc/change_undergarments(mob/user)
if(!Adjacent(user))//no tele-grooming
return
- if(ishuman(user) && anchored)
- var/mob/living/carbon/human/H = user
+ if(!(ishuman(user) && anchored))
+ return
+ var/mob/living/carbon/human/H = user
- var/choice = tgui_input_list(user, "Underwear, Undershirt, or Socks?", "Changing", list("Underwear","Undershirt","Socks"))
+ var/choice = tgui_input_list(user, "Underwear, Undershirt, or Socks?", "Changing", list("Underwear", "Undershirt", "Socks"))
- if(!Adjacent(user))
- return
- switch(choice)
- if("Underwear")
- var/list/valid_underwear = list()
- for(var/underwear in GLOB.underwear_list)
- var/datum/sprite_accessory/S = GLOB.underwear_list[underwear]
- if(!(H.dna.species.name in S.species_allowed))
- continue
- valid_underwear[underwear] = GLOB.underwear_list[underwear]
- var/new_underwear = tgui_input_list(user, "Choose your underwear:", "Changing", valid_underwear)
- if(new_underwear)
- H.underwear = new_underwear
+ if(!Adjacent(user))
+ return
+ switch(choice)
+ if("Underwear")
+ var/list/valid_underwear = list()
+ for(var/underwear in GLOB.underwear_list)
+ var/datum/sprite_accessory/S = GLOB.underwear_list[underwear]
+ if(!(H.dna.species.name in S.species_allowed))
+ continue
+ valid_underwear[underwear] = GLOB.underwear_list[underwear]
+ var/new_underwear = tgui_input_list(user, "Choose your underwear:", "Changing", valid_underwear)
+ if(new_underwear)
+ H.underwear = new_underwear
- if("Undershirt")
- var/list/valid_undershirts = list()
- for(var/undershirt in GLOB.undershirt_list)
- var/datum/sprite_accessory/S = GLOB.undershirt_list[undershirt]
- if(!(H.dna.species.name in S.species_allowed))
- continue
- valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt]
- for(var/config in GLOB.configuration.custom_sprites.fluff_undershirts)
- if(user.ckey in config["ckeys"])
- valid_undershirts[config["name"]] = GLOB.undershirt_full_list[config["name"]]
- sortTim(valid_undershirts, GLOBAL_PROC_REF(cmp_text_asc))
- var/new_undershirt = tgui_input_list(user, "Choose your undershirt:", "Changing", valid_undershirts)
- if(new_undershirt)
- H.undershirt = new_undershirt
+ if("Undershirt")
+ var/list/valid_undershirts = list()
+ for(var/undershirt in GLOB.undershirt_list)
+ var/datum/sprite_accessory/S = GLOB.undershirt_list[undershirt]
+ if(!(H.dna.species.name in S.species_allowed))
+ continue
+ valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt]
+ for(var/config in GLOB.configuration.custom_sprites.fluff_undershirts)
+ if(user.ckey in config["ckeys"])
+ valid_undershirts[config["name"]] = GLOB.undershirt_full_list[config["name"]]
+ sortTim(valid_undershirts, GLOBAL_PROC_REF(cmp_text_asc))
+ var/new_undershirt = tgui_input_list(user, "Choose your undershirt:", "Changing", valid_undershirts)
+ if(new_undershirt)
+ H.undershirt = new_undershirt
- if("Socks")
- var/list/valid_sockstyles = list()
- for(var/sockstyle in GLOB.socks_list)
- var/datum/sprite_accessory/S = GLOB.socks_list[sockstyle]
- if(!(H.dna.species.name in S.species_allowed))
- continue
- valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle]
- var/new_socks = tgui_input_list(user, "Choose your socks:", "Changing", valid_sockstyles)
- if(new_socks)
- H.socks = new_socks
-
- add_fingerprint(H)
- H.update_body()
+ if("Socks")
+ var/list/valid_sockstyles = list()
+ for(var/sockstyle in GLOB.socks_list)
+ var/datum/sprite_accessory/S = GLOB.socks_list[sockstyle]
+ if(!(H.dna.species.name in S.species_allowed))
+ continue
+ valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle]
+ var/new_socks = tgui_input_list(user, "Choose your socks:", "Changing", valid_sockstyles)
+ if(new_socks)
+ H.socks = new_socks
+ add_fingerprint(H)
+ H.update_body()
/obj/structure/dresser/crowbar_act(mob/user, obj/item/I)
. = TRUE
@@ -77,3 +80,133 @@
mat_drop = 30
new /obj/item/stack/sheet/wood(drop_location(), mat_drop)
..()
+
+/obj/structure/dresser/wardrobe
+ name = "wardrobe"
+ desc = "A good place to store all your clothes."
+ icon_state = "wardrobe"
+ var/locked_overlay = "wardrobe_locked"
+ /// List of objects which this item can store (if set, it can't store anything else)
+ var/list/can_hold = list(/obj/item/clothing)
+ /// List of objects which this item can't store (can make exceptions to can_hold)
+ var/list/cant_hold = list(
+ /obj/item/storage,
+ /obj/item/clothing/suit/space,
+ /obj/item/clothing/mask/cigarette,
+ /obj/item/clothing/mask/facehugger, //Why would you do this
+ /obj/item/clothing/accessory/medal,
+ /obj/item/clothing/suit/armor/riot,
+ /obj/item/clothing/suit/armor/reactive,
+ /obj/item/clothing/suit/armor/laserproof,
+ /obj/item/clothing/suit/hooded/ablative,
+ /obj/item/clothing/gloves/color/black/krav_maga
+ )
+ var/locked = FALSE
+
+/obj/structure/dresser/wardrobe/Initialize(mapload)
+ . = ..()
+ update_appearance(UPDATE_OVERLAYS)
+
+/obj/structure/dresser/wardrobe/update_overlays()
+ . = ..()
+ . += locked ? locked_overlay : null
+
+/obj/structure/dresser/wardrobe/examine(mob/user)
+ . = ..()
+ . += "It's currently [locked ? null : "un"]locked."
+
+/obj/structure/dresser/wardrobe/AltShiftClick(mob/user)
+ change_undergarments(user)
+
+/obj/structure/dresser/wardrobe/AltClick(mob/user)
+ toggle_lock(user)
+
+/obj/structure/dresser/wardrobe/attack_hand(mob/user)
+ if(user.a_intent == INTENT_HARM)
+ return CONTINUE_ATTACK
+ if(locked)
+ toggle_lock(user)
+ return
+ if(!length(contents))
+ return ..()
+ if(!Adjacent(user))
+ return ..()
+ var/obj/item/item_to_retrieve = tgui_input_list(user, "What would you like to take out?", src, contents)
+ if(!item_to_retrieve)
+ return
+ if(!Adjacent(user))
+ return
+ item_to_retrieve.forceMove(loc)
+ to_chat(user, "You take [item_to_retrieve] out of [src].")
+ if(issilicon(user))
+ return
+ user.put_in_hands(item_to_retrieve)
+ var/mob/living/carbon/human/H = user
+ add_fingerprint(H)
+
+/obj/structure/dresser/wardrobe/item_interaction(mob/living/user, obj/item/used, list/modifiers)
+ if(locked)
+ toggle_lock(user)
+ return ITEM_INTERACT_COMPLETE
+ if(!Adjacent(user))
+ return ITEM_INTERACT_COMPLETE
+ if(!is_type_in_list(used, can_hold) || is_type_in_list(used, cant_hold))
+ to_chat(user, "You can't put [used] in [src]. It doesn't fit.")
+ return ITEM_INTERACT_COMPLETE
+ if(!user.drop_item())
+ to_chat(user, "[used] is stuck to you!")
+ return ITEM_INTERACT_COMPLETE
+ used.forceMove(src)
+ var/mob/living/carbon/human/H = user
+ add_fingerprint(H)
+ to_chat(user, "You put [used] in [src].")
+ return ITEM_INTERACT_COMPLETE
+
+/obj/structure/dresser/wardrobe/proc/toggle_lock(mob/user)
+ if(!allowed(user))
+ to_chat(user, "Access Denied.")
+ return
+ locked = !locked
+ visible_message("[user] [locked ? null : "un"]lock[user.p_s()] [src].")
+ var/mob/living/carbon/human/H = user
+ add_fingerprint(H)
+ update_appearance(UPDATE_OVERLAYS)
+
+/obj/structure/dresser/wardrobe/captain
+ name = "Captain's Wardrobe"
+ desc = "All the clothes you need to lead a station."
+ icon_state = "wardrobe_captain"
+ locked = TRUE
+ req_access = list(ACCESS_CAPTAIN)
+
+/obj/structure/dresser/wardrobe/captain/Initialize(mapload)
+ . = ..()
+ new /obj/item/clothing/head/caphat(src)
+ new /obj/item/clothing/head/caphat/parade(src)
+ new /obj/item/clothing/head/caphat/parade/white(src)
+ new /obj/item/clothing/head/beret/captain(src)
+ new /obj/item/clothing/head/beret/captain/white(src)
+ new /obj/item/clothing/head/crown/fancy(src)
+ new /obj/item/clothing/neck/cloak/captain(src)
+ new /obj/item/clothing/suit/armor/vest/capcarapace(src)
+ new /obj/item/clothing/suit/armor/vest/capcarapace/jacket(src)
+ new /obj/item/clothing/suit/armor/vest/capcarapace/jacket/tunic(src)
+ new /obj/item/clothing/suit/armor/vest/capcarapace/coat(src)
+ new /obj/item/clothing/suit/armor/vest/capcarapace/coat/white(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/captain(src)
+ new /obj/item/clothing/suit/hooded/wintercoat/captain/white(src)
+ new /obj/item/clothing/neck/cloak/captain_mantle(src)
+ new /obj/item/clothing/under/rank/captain(src)
+ new /obj/item/clothing/under/rank/captain/skirt(src)
+ new /obj/item/clothing/under/rank/captain/white(src)
+ new /obj/item/clothing/under/rank/captain/skirt/white(src)
+ new /obj/item/clothing/under/rank/captain/parade(src)
+ new /obj/item/clothing/under/rank/captain/dress(src)
+ new /obj/item/clothing/gloves/color/captain(src)
+ new /obj/item/clothing/shoes/brown(src)
+ new /obj/item/clothing/shoes/laceup(src)
+ new /obj/item/clothing/glasses/sunglasses(src)
+ new /obj/item/clothing/glasses/hud/security/sunglasses(src)
+ new /obj/item/clothing/glasses/hud/health/sunglasses(src)
+ new /obj/item/clothing/head/helmet/space/plasmaman/captain(src)
+ new /obj/item/clothing/under/plasmaman/captain(src)
diff --git a/code/modules/clothing/head/job_hats.dm b/code/modules/clothing/head/job_hats.dm
index f596541f58b..4558c2fe2b4 100644
--- a/code/modules/clothing/head/job_hats.dm
+++ b/code/modules/clothing/head/job_hats.dm
@@ -60,6 +60,7 @@
RemoveElement(/datum/element/clothing_adjustment/monitor_headgear, 0, 1)
/obj/item/clothing/head/caphat/parade/white
+ name = "captain's white parade cap"
icon_state = "captain_capwhite"
//Head of Personnel
diff --git a/code/modules/clothing/suits/misc_suits.dm b/code/modules/clothing/suits/misc_suits.dm
index 483b929cf4d..30eeb010dbe 100644
--- a/code/modules/clothing/suits/misc_suits.dm
+++ b/code/modules/clothing/suits/misc_suits.dm
@@ -520,6 +520,7 @@
icon_state = "winterhood_captain"
/obj/item/clothing/suit/hooded/wintercoat/captain/white
+ name = "captain's white winter coat"
icon_state = "wintercoat_captainw"
inhand_icon_state = "coatcaptainw"
hoodtype = /obj/item/clothing/head/hooded/winterhood/captain/white
diff --git a/code/modules/clothing/under/jobs/captain.dm b/code/modules/clothing/under/jobs/captain.dm
index 20da7b483d0..2e7980b72e8 100644
--- a/code/modules/clothing/under/jobs/captain.dm
+++ b/code/modules/clothing/under/jobs/captain.dm
@@ -17,10 +17,12 @@
icon_state = "captain_skirt"
/obj/item/clothing/under/rank/captain/white
+ name = "captain's white uniform"
desc = "It's a white dress shirt and black slacks with some gold markings denoting the rank of \"Captain\"."
icon_state = "captain_white"
/obj/item/clothing/under/rank/captain/skirt/white
+ name = "captain's white skirt"
desc = "It's a white dress shirt and black skirt with some gold markings denoting the rank of \"Captain\"."
icon_state = "captain_skirt_white"
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index c4f6e14c011..78cc9f13215 100644
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ