diff --git a/.gitignore b/.gitignore
index a888a47c90..f3af83cda0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@ vchat.db*
*.dmb
*.lk
*.backup
+*.before
*.pyc
data/
cfg/
diff --git a/code/ATMOSPHERICS/_atmos_setup.dm b/code/ATMOSPHERICS/_atmos_setup.dm
index 6af102cf38..a2735133e2 100644
--- a/code/ATMOSPHERICS/_atmos_setup.dm
+++ b/code/ATMOSPHERICS/_atmos_setup.dm
@@ -6,15 +6,6 @@
// atmospherics devices.
//--------------------------------------------
-#define PIPE_COLOR_GREY "#ffffff" //yes white is grey
-#define PIPE_COLOR_RED "#ff0000"
-#define PIPE_COLOR_BLUE "#0000ff"
-#define PIPE_COLOR_CYAN "#00ffff"
-#define PIPE_COLOR_GREEN "#00ff00"
-#define PIPE_COLOR_YELLOW "#ffcc00"
-#define PIPE_COLOR_BLACK "#444444"
-#define PIPE_COLOR_PURPLE "#5c1ec0"
-
var/global/list/pipe_colors = list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "black" = PIPE_COLOR_BLACK, "purple" = PIPE_COLOR_PURPLE)
/proc/pipe_color_lookup(var/color)
diff --git a/code/__defines/_planes+layers.dm b/code/__defines/_planes+layers.dm
index c2d33e0726..586a87cd4e 100644
--- a/code/__defines/_planes+layers.dm
+++ b/code/__defines/_planes+layers.dm
@@ -64,10 +64,11 @@ What is the naming convention for planes or layers?
#define ABOVE_UTILITY 2.5 // Above stuff like pipes and wires
#define TURF_PLANE -45 // Turfs themselves, most flooring
#define WATER_FLOOR_LAYER 2.0 // The 'bottom' of water tiles.
+ #define BUILTIN_DECAL_LAYER 2.01 // For floors that automatically add decal overlays
+ #define MAPPER_DECAL_LAYER 2.02 // For intentionally placed floor decal overlays
#define UNDERWATER_LAYER 2.5 // Anything on this layer will render under the water layer.
#define WATER_LAYER 3.0 // Layer for water overlays.
#define ABOVE_TURF_LAYER 3.1 // Snow and wallmounted/floormounted equipment
- #define TURF_DECAL_LAYER 3.2 // Mapped in floor decals, not automatic edges/corners
#define DECAL_PLANE -44 // Permanent decals
#define DIRTY_PLANE -43 // Nonpermanent decals
#define BLOOD_PLANE -42 // Blood is really dirty, but we can do special stuff if we separate it
diff --git a/code/__defines/color.dm b/code/__defines/color.dm
index c1416a5e92..56c3f5fa7e 100644
--- a/code/__defines/color.dm
+++ b/code/__defines/color.dm
@@ -1,3 +1,141 @@
+// BYOND lower-cases color values, and thus we do so as well to ensure atom.color == COLOR_X will work correctly
+#define COLOR_BLACK "#000000"
+#define COLOR_NAVY "#000080"
+#define COLOR_NAVY_BLUE "#000080"
+#define COLOR_GREEN "#008000"
+#define COLOR_DARK_GRAY "#404040"
+#define COLOR_MAROON "#800000"
+#define COLOR_PURPLE "#800080"
+#define COLOR_VIOLET "#9933ff"
+#define COLOR_OLIVE "#808000"
+#define COLOR_BROWN_ORANGE "#824b28"
+#define COLOR_DARK_ORANGE "#b95a00"
+#define COLOR_GRAY40 "#666666"
+#define COLOR_GRAY20 "#333333"
+#define COLOR_GRAY15 "#151515"
+#define COLOR_SEDONA "#cc6600"
+#define COLOR_DARK_BROWN "#917448"
+#define COLOR_BLUE "#0000ff"
+#define COLOR_DEEP_SKY_BLUE "#00e1ff"
+#define COLOR_LIME "#00ff00"
+#define COLOR_CYAN "#00ffff"
+#define COLOR_TEAL "#33cccc"
+#define COLOR_RED "#ff0000"
+#define COLOR_PINK "#ff00ff"
+#define COLOR_PALE_PINK "#bf89ba"
+#define COLOR_ORANGE "#ff9900"
+#define COLOR_YELLOW "#ffff00"
+#define COLOR_YELLOW_GRAY "#c9a344"
+#define COLOR_PALE_YELLOW "#c1bb7a"
+#define COLOR_WARM_YELLOW "#b3863c"
+#define COLOR_GRAY "#808080"
+#define COLOR_RED_GRAY "#aa5f61"
+#define COLOR_BROWN "#b19664"
+#define COLOR_GREEN_GRAY "#8daf6a"
+#define COLOR_DARK_GREEN_GRAY "#54654c"
+#define COLOR_BLUE_GRAY "#6a97b0"
+#define COLOR_DARK_BLUE_GRAY "#3e4855"
+#define COLOR_SURGERY_BLUE "#e0f2f6"
+#define COLOR_SUN "#ec8b2f"
+#define COLOR_PURPLE_GRAY "#a2819e"
+#define COLOR_BLUE_LIGHT "#33ccff"
+#define COLOR_RED_LIGHT "#ff3333"
+#define COLOR_BEIGE "#ceb689"
+#define COLOR_BABY_BLUE "#89cff0"
+#define COLOR_PALE_GREEN_GRAY "#aed18b"
+#define COLOR_PALE_RED_GRAY "#cc9090"
+#define COLOR_PALE_PURPLE_GRAY "#bda2ba"
+#define COLOR_PALE_BLUE_GRAY "#8bbbd5"
+#define COLOR_LUMINOL "#66ffff"
+#define COLOR_SILVER "#c0c0c0"
+#define COLOR_GRAY80 "#cccccc"
+#define COLOR_OFF_WHITE "#eeeeee"
+#define COLOR_WHITE "#ffffff"
+#define COLOR_GOLD "#ffcc33"
+#define COLOR_CLOSET_GOLD "#6d6133"
+#define COLOR_NT_RED "#9d2300"
+#define COLOR_BOTTLE_GREEN "#1f6b4f"
+#define COLOR_PALE_BTL_GREEN "#57967f"
+#define COLOR_GUNMETAL "#545c68"
+#define COLOR_WALL_GUNMETAL "#353a42"
+#define COLOR_STEEL "#a8b0b2"
+#define COLOR_MUZZLE_FLASH "#ffffb2"
+#define COLOR_CHESTNUT "#996633"
+#define COLOR_BEASTY_BROWN "#663300"
+#define COLOR_WHEAT "#ffff99"
+#define COLOR_CYAN_BLUE "#3366cc"
+#define COLOR_LIGHT_CYAN "#66ccff"
+#define COLOR_PAKISTAN_GREEN "#006600"
+#define COLOR_HULL "#436b8e"
+#define COLOR_AMBER "#ffbf00"
+#define COLOR_COMMAND_BLUE "#46698c"
+#define COLOR_SKY_BLUE "#5ca1cc"
+#define COLOR_PALE_ORANGE "#b88a3b"
+#define COLOR_CIVIE_GREEN "#b7f27d"
+#define COLOR_TITANIUM "#d1e6e3"
+#define COLOR_DARK_GUNMETAL "#4c535b"
+#define COLOR_BRONZE "#8c7853"
+#define COLOR_BRASS "#b99d71"
+#define COLOR_INDIGO "#4b0082"
+#define COLOR_ALUMINIUM "#bbbbbb"
+#define COLOR_CRYSTAL "#00c8a5"
+#define COLOR_ASTEROID_ROCK "#735555"
+#define COLOR_NULLGLASS "#ff6088"
+#define COLOR_DIAMOND "#d8d4ea"
+
+#define PIPE_COLOR_GREY "#808080"
+#define PIPE_COLOR_RED "#ff0000"
+#define PIPE_COLOR_BLUE "#0000ff"
+#define PIPE_COLOR_CYAN "#00ffff"
+#define PIPE_COLOR_GREEN "#00ff00"
+#define PIPE_COLOR_YELLOW "#ffcc00"
+#define PIPE_COLOR_BLACK "#444444"
+#define PIPE_COLOR_ORANGE "#b95a00"
+#define PIPE_COLOR_WHITE "#ffffff"
+#define PIPE_COLOR_PURPLE "#5c1ec0"
+
+#define COMMS_COLOR_DEFAULT "#ff00ff"
+#define COMMS_COLOR_ENTERTAIN "#666666"
+#define COMMS_COLOR_AI "#ff00ff"
+#define COMMS_COLOR_COMMON "#408010"
+#define COMMS_COLOR_SERVICE "#709b00"
+#define COMMS_COLOR_SUPPLY "#7f6539"
+#define COMMS_COLOR_SCIENCE "#993399"
+#define COMMS_COLOR_MEDICAL "#009190"
+#define COMMS_COLOR_MEDICAL_I "#509190"
+#define COMMS_COLOR_EXPLORER "#929820"
+#define COMMS_COLOR_ENGINEER "#a66300"
+#define COMMS_COLOR_SECURITY "#930000"
+#define COMMS_COLOR_SECURITY_I "#935050"
+#define COMMS_COLOR_COMMAND "#204090"
+#define COMMS_COLOR_CENTCOMM "#5c5c7c"
+#define COMMS_COLOR_SYNDICATE "#6d3f40"
+#define COMMS_COLOR_SKRELL "#7331c4"
+
+#define WOOD_COLOR_GENERIC "#d5a66e"
+#define WOOD_COLOR_RICH "#792f27"
+#define WOOD_COLOR_PALE "#d2bc9d"
+#define WOOD_COLOR_PALE2 "#e6d2ba"
+#define WOOD_COLOR_BLACK "#332521"
+#define WOOD_COLOR_CHOCOLATE "#543c30"
+#define WOOD_COLOR_YELLOW "#e3994e"
+
+#define GLASS_COLOR "#74c1ee"
+#define GLASS_COLOR_PHORON "#7c3a9a"
+#define GLASS_COLOR_TINTED "#222222"
+#define GLASS_COLOR_FROSTED "#ffffff"
+
+#define COLOR_BLOOD_HUMAN "#a10808"
+
+//Colors defines used by e-sword lighting
+#define COLOR_SABER_BLUE "#40ceff"
+#define COLOR_SABER_RED "#ff0000" //In case someone wants to tweak COLOR_RED, since COLOR_GREEN is not #00ff00
+#define COLOR_SABER_GREEN "#00ff00"
+#define COLOR_SABER_PURPLE "#6800f4"
+#define COLOR_SABER_SKRELL "#6600cc"
+#define COLOR_SABER_AXE "#00ccff"
+#define COLOR_SABER_CUTLASS "#ff0033"
+
//Color defines used by the assembly detailer.
#define COLOR_ASSEMBLY_BLACK "#545454"
#define COLOR_ASSEMBLY_BGRAY "#9497AB"
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index 4db75508b3..0a0e4b7fe7 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -44,40 +44,6 @@
#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
#define TOTAL_HUDS 10 // Total number of HUDs. Like body layers, and other things, it comes up sometimes.
-//some colors
-#define COLOR_WHITE "#FFFFFF"
-#define COLOR_SILVER "#C0C0C0"
-#define COLOR_GRAY "#808080"
-#define COLOR_BLACK "#000000"
-#define COLOR_RED "#FF0000"
-#define COLOR_MAROON "#800000"
-#define COLOR_YELLOW "#FFFF00"
-#define COLOR_OLIVE "#808000"
-#define COLOR_LIME "#00FF00"
-#define COLOR_GREEN "#008000"
-#define COLOR_CYAN "#00FFFF"
-#define COLOR_TEAL "#008080"
-#define COLOR_BLUE "#0000FF"
-#define COLOR_NAVY "#000080"
-#define COLOR_PINK "#FF00FF"
-#define COLOR_PURPLE "#800080"
-#define COLOR_ORANGE "#FF9900"
-#define COLOR_LUMINOL "#66FFFF"
-#define COLOR_BEIGE "#CEB689"
-#define COLOR_BLUE_GRAY "#6A97B0"
-#define COLOR_BROWN "#B19664"
-#define COLOR_DARK_BROWN "#917448"
-#define COLOR_DARK_ORANGE "#B95A00"
-#define COLOR_GREEN_GRAY "#8DAF6A"
-#define COLOR_RED_GRAY "#AA5F61"
-#define COLOR_PALE_BLUE_GRAY "#8BBBD5"
-#define COLOR_PALE_GREEN_GRAY "#AED18B"
-#define COLOR_PALE_RED_GRAY "#CC9090"
-#define COLOR_PALE_PURPLE_GRAY "#BDA2BA"
-#define COLOR_PURPLE_GRAY "#A2819E"
-#define COLOR_RED_LIGHT "#FF3333"
-#define COLOR_DEEP_SKY_BLUE "#00e1ff"
-
#define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (isclient(I) ? I : null))
// Shuttles.
diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm
index 8a34fb50b7..7b82945564 100644
--- a/code/_helpers/global_lists.dm
+++ b/code/_helpers/global_lists.dm
@@ -25,6 +25,9 @@ var/list/mannequins_
// Times that players are allowed to respawn ("ckey" = world.time)
GLOBAL_LIST_EMPTY(respawn_timers)
+// Closets have magic appearances
+GLOBAL_LIST_EMPTY(closet_appearances)
+
// Posters
var/global/list/poster_designs = list()
var/global/list/NT_poster_designs = list()
@@ -204,6 +207,12 @@ var/global/list/string_slot_flags = list(
var/datum/poster/P = new T
NT_poster_designs += P
+ //Closet appearances
+ paths = typesof(/decl/closet_appearance)
+ for(var/T in paths)
+ var/decl/closet_appearance/app = new T()
+ GLOB.closet_appearances[T] = app
+
// VOREStation Add - Vore Modes!
paths = typesof(/datum/digest_mode) - /datum/digest_mode/transform
for(var/T in paths)
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 69e644a239..c4edacd933 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -52,12 +52,14 @@
animate(alert, transform = matrix(), time = 2.5, easing = CUBIC_EASING)
if(alert.timeout)
- spawn(alert.timeout)
- if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout)
- clear_alert(category)
+ addtimer(CALLBACK(src, .proc/alert_timeout, alert, category), alert.timeout)
alert.timeout = world.time + alert.timeout - world.tick_lag
return alert
+/mob/proc/alert_timeout(obj/screen/alert/alert, category)
+ if(alert.timeout && alerts[category] == alert && world.time >= alert.timeout)
+ clear_alert(category)
+
// Proc to clear an existing alert.
/mob/proc/clear_alert(category)
var/obj/screen/alert/alert = alerts[category]
@@ -455,7 +457,7 @@ so as to remain in compliance with the most up-to-date laws."
return
var/paramslist = params2list(params)
if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat
- usr << "[name] - [desc]"
+ to_chat(usr,"[name] - [desc]")
return
if(master)
return usr.client.Click(master, location, control, params)
diff --git a/code/datums/outfits/outfit_vr.dm b/code/datums/outfits/outfit_vr.dm
index e262fba3b7..7f978fafb0 100644
--- a/code/datums/outfits/outfit_vr.dm
+++ b/code/datums/outfits/outfit_vr.dm
@@ -115,16 +115,10 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
l_ear = /obj/item/device/radio/headset/explorer
id_slot = slot_wear_id
pda_slot = slot_l_store
- pda_type = /obj/item/device/pda/explorer //VORESTation Edit - Better Brown
- id_type = /obj/item/weapon/card/id/explorer //VOREStation Edit
+ pda_type = /obj/item/device/pda/explorer
+ id_type = /obj/item/weapon/card/id/explorer
id_pda_assignment = "Explorer"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
- backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1)
-
-/decl/hierarchy/outfit/job/explorer2/post_equip(mob/living/carbon/human/H)
- ..()
- for(var/obj/item/clothing/accessory/permit/gun/planetside/permit in H.back.contents)
- permit.set_name(H.real_name)
/decl/hierarchy/outfit/job/pilot
name = OUTFIT_JOB_NAME("Pilot")
@@ -136,21 +130,21 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
l_ear = /obj/item/device/radio/headset/pilot/alt
id_slot = slot_wear_id
pda_slot = slot_belt
- pda_type = /obj/item/device/pda //VOREStation Edit - Civilian
+ pda_type = /obj/item/device/pda
id_pda_assignment = "Pilot"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_COMPREHENSIVE_SURVIVAL
/decl/hierarchy/outfit/job/medical/sar
- name = OUTFIT_JOB_NAME("Field Medic") //VOREStation Edit
+ name = OUTFIT_JOB_NAME("Field Medic")
uniform = /obj/item/clothing/under/utility/blue
- //suit = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar //VOREStation Edit
+ //suit = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar
shoes = /obj/item/clothing/shoes/boots/winter/explorer
l_ear = /obj/item/device/radio/headset/sar
l_hand = /obj/item/weapon/storage/firstaid/regular
belt = /obj/item/weapon/storage/belt/medical/emt
pda_slot = slot_l_store
- pda_type = /obj/item/device/pda/sar //VOREStation Add
- id_pda_assignment = "Field Medic" //VOREStation Edit
+ pda_type = /obj/item/device/pda/sar
+ id_pda_assignment = "Field Medic"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
/decl/hierarchy/outfit/job/pathfinder
@@ -164,12 +158,6 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go
id_type = /obj/item/weapon/card/id/explorer/head
id_pda_assignment = "Pathfinder"
flags = OUTFIT_HAS_BACKPACK|OUTFIT_EXTENDED_SURVIVAL|OUTFIT_COMPREHENSIVE_SURVIVAL
- backpack_contents = list(/obj/item/clothing/accessory/permit/gun/planetside = 1)
-
-/decl/hierarchy/outfit/job/pathfinder/post_equip(mob/living/carbon/human/H)
- ..()
- for(var/obj/item/clothing/accessory/permit/gun/planetside/permit in H.back.contents)
- permit.set_name(H.real_name)
/decl/hierarchy/outfit/job/assistant/explorer
id_type = /obj/item/weapon/card/id/explorer
diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm
index 357f0eaead..134ae76e30 100644
--- a/code/datums/supplypacks/recreation.dm
+++ b/code/datums/supplypacks/recreation.dm
@@ -66,7 +66,7 @@
contains = list(
/obj/item/device/pipe_painter = 2,
/obj/item/device/floor_painter = 2,
- /obj/item/device/closet_painter = 2
+ ///obj/item/device/closet_painter = 2
)
/datum/supply_pack/recreation/cheapbait
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index f8e6351380..d303fce767 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1721,7 +1721,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/security/brig/prison_break()
for(var/obj/structure/closet/secure_closet/brig/temp_closet in src)
temp_closet.locked = 0
- temp_closet.icon_state = temp_closet.icon_closed
+ temp_closet.icon_state = "closed_unlocked"
for(var/obj/machinery/door_timer/temp_timer in src)
temp_timer.releasetime = 1
..()
@@ -1733,7 +1733,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
/area/security/prison/prison_break()
for(var/obj/structure/closet/secure_closet/brig/temp_closet in src)
temp_closet.locked = 0
- temp_closet.icon_state = temp_closet.icon_closed
+ temp_closet.icon_state = "closed_unlocked"
for(var/obj/machinery/door_timer/temp_timer in src)
temp_timer.releasetime = 1
..()
diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm
index ba737a416a..083a90fc09 100644
--- a/code/game/gamemodes/events.dm
+++ b/code/game/gamemodes/events.dm
@@ -187,7 +187,7 @@ var/hadevent = 0
for (var/obj/structure/closet/secure_closet/brig/temp_closet in A)
temp_closet.locked = 0
- temp_closet.icon_state = temp_closet.icon_closed
+ temp_closet.icon_state = "closed_unlocked"
for (var/obj/machinery/door/airlock/security/temp_airlock in A)
spawn(0) temp_airlock.prison_open()
diff --git a/code/game/machinery/deployable_vr.dm b/code/game/machinery/deployable_vr.dm
index 9f7e79af5b..2f2f2f6adf 100644
--- a/code/game/machinery/deployable_vr.dm
+++ b/code/game/machinery/deployable_vr.dm
@@ -15,7 +15,7 @@
var/human_name = TRUE
var/static/list/cutout_types
- var/static/list/painters = list(/obj/item/weapon/reagent_containers/glass/paint, /obj/item/device/floor_painter, /obj/item/device/closet_painter)
+ var/static/list/painters = list(/obj/item/weapon/reagent_containers/glass/paint, /obj/item/device/floor_painter)//, /obj/item/device/closet_painter)
/obj/structure/barricade/cutout/New()
. = ..()
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index a15887cc58..3722e66cf6 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -114,7 +114,7 @@
if(C.broken) continue
if(C.opened && !C.close()) continue
C.locked = 1
- C.icon_state = C.icon_locked
+ C.icon_state = "closed_locked"
return 1
@@ -135,7 +135,7 @@
if(C.broken) continue
if(C.opened) continue
C.locked = 0
- C.icon_state = C.icon_closed
+ C.icon_state = "closed_unlocked"
return 1
diff --git a/code/game/machinery/machinery_power.dm b/code/game/machinery/machinery_power.dm
index aa3d301e53..be648d0f80 100644
--- a/code/game/machinery/machinery_power.dm
+++ b/code/game/machinery/machinery_power.dm
@@ -42,8 +42,7 @@
stat &= ~NOPOWER
else
stat |= NOPOWER
- . = (stat != oldstat)
- return
+ return (stat != oldstat)
// Get the amount of power this machine will consume each cycle. Override by experts only!
/obj/machinery/proc/get_power_usage()
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index db5594685e..75b78d4114 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -10,7 +10,7 @@
active_power_usage = 40000 //40 kW
var/efficiency = 40000 //will provide the modified power rate when upgraded
var/obj/item/charging = null
- var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery) //VOREStation Add - NSFW Batteries
+ var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/modular_computer, /obj/item/weapon/computer_hardware/battery_module, /obj/item/weapon/cell, /obj/item/device/suit_cooling_unit/emergency, /obj/item/device/flashlight, /obj/item/device/electronic_assembly, /obj/item/weapon/weldingtool/electric, /obj/item/ammo_magazine/smart, /obj/item/device/flash, /obj/item/device/defib_kit, /obj/item/ammo_casing/microbattery) //VOREStation Add - NSFW Batteries
var/icon_state_charged = "recharger2"
var/icon_state_charging = "recharger1"
var/icon_state_idle = "recharger0" //also when unpowered
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index a95f2e3b7e..b56a964626 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -780,15 +780,13 @@
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
icon_state = "snack"
- products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6,
- /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 6,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 6,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 6,
- /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 6, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 6, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 3)
- contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6,/obj/item/weapon/reagent_containers/food/snacks/unajerky = 6,)
- //VOREStation Edit Start
- prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 2,/obj/item/weapon/reagent_containers/food/snacks/chips = 1,
+ products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 12,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 12,/obj/item/weapon/reagent_containers/food/snacks/chips =12,
+ /obj/item/weapon/reagent_containers/food/snacks/sosjerky = 12,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 12,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 12,
+ /obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 12, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 12, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 6)
+ contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6,/obj/item/weapon/reagent_containers/food/snacks/unajerky = 12,)
+ prices = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 1,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 5,/obj/item/weapon/reagent_containers/food/snacks/chips = 1,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 2,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 1,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 1,
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 1, /obj/item/weapon/reagent_containers/food/snacks/tastybread = 2, /obj/item/weapon/reagent_containers/food/snacks/skrellsnacks = 2)
- //VOREStation Edit End
/obj/machinery/vending/cola
name = "Robust Softdrinks"
@@ -814,11 +812,11 @@
name = "SweatMAX"
desc = "Fueled by your inner inadequacy!"
icon_state = "fitness"
- products = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 8,
- /obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 8,
- /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 16, //VOREStation Edit,
+ products = list(/obj/item/weapon/reagent_containers/food/drinks/smallmilk = 16,
+ /obj/item/weapon/reagent_containers/food/drinks/smallchocmilk = 16,
+ /obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask/proteinshake = 8,
/obj/item/weapon/reagent_containers/food/drinks/glass2/fitnessflask = 8,
- /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 8,
+ /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar = 16,
/obj/item/weapon/reagent_containers/food/snacks/liquidfood = 8,
/obj/item/weapon/reagent_containers/pill/diet = 8,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5, //VOREStation Removal, YW Readdition,
@@ -858,13 +856,13 @@
product_ads = "Probably not bad for you!;Don't believe the scientists!;It's good for you!;Don't quit, buy more!;Smoke!;Nicotine heaven.;Best cigarettes since 2150.;Award-winning cigs.;Feeling temperamental? Try a Temperamento!;Carcinoma Angels - go fuck yerself!;Don't be so hard on yourself, kid. Smoke a Lucky Star!"
vend_delay = 34
icon_state = "cigs"
- products = list(/obj/item/weapon/storage/fancy/cigarettes = 5,
- /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 5,
- /obj/item/weapon/storage/fancy/cigarettes/killthroat = 5,
- /obj/item/weapon/storage/fancy/cigarettes/luckystars = 5,
- /obj/item/weapon/storage/fancy/cigarettes/jerichos = 5,
- /obj/item/weapon/storage/fancy/cigarettes/menthols = 5,
- /obj/item/weapon/storage/rollingpapers = 5,
+ products = list(/obj/item/weapon/storage/fancy/cigarettes = 10,
+ /obj/item/weapon/storage/fancy/cigarettes/dromedaryco = 10,
+ /obj/item/weapon/storage/fancy/cigarettes/killthroat = 10,
+ /obj/item/weapon/storage/fancy/cigarettes/luckystars = 10,
+ /obj/item/weapon/storage/fancy/cigarettes/jerichos = 10,
+ /obj/item/weapon/storage/fancy/cigarettes/menthols = 10,
+ /obj/item/weapon/storage/rollingpapers = 10,
/obj/item/weapon/storage/box/matches = 10,
/obj/item/weapon/flame/lighter/random = 4)
contraband = list(/obj/item/weapon/flame/lighter/zippo = 4)
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 181eea4137..87f2c2d1a5 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -3,7 +3,7 @@
/obj/item/bodybag
name = "body bag"
desc = "A folded bag designed for the storage and transportation of cadavers."
- icon = 'icons/obj/bodybag.dmi'
+ icon = 'icons/obj/closets/bodybag.dmi'
icon_state = "bodybag_folded"
w_class = ITEMSIZE_SMALL
@@ -31,10 +31,8 @@
/obj/structure/closet/body_bag
name = "body bag"
desc = "A plastic bag designed for the storage and transportation of cadavers."
- icon = 'icons/obj/bodybag.dmi'
- icon_state = "bodybag_closed"
- icon_closed = "bodybag_closed"
- icon_opened = "bodybag_open"
+ icon = 'icons/obj/closets/bodybag.dmi'
+ closet_appearance = null
open_sound = 'sound/items/zip.ogg'
close_sound = 'sound/items/zip.ogg'
var/item_path = /obj/item/bodybag
@@ -128,19 +126,22 @@
/obj/structure/closet/body_bag/update_icon()
if(opened)
- icon_state = icon_opened
+ icon_state = "open"
else
- if(contains_body > 0)
- icon_state = "bodybag_closed1"
- else
- icon_state = icon_closed
+ icon_state = "closed_unlocked"
+
+ src.overlays.Cut()
+ /* Ours don't have toetags
+ if(has_label)
+ src.overlays += image(src.icon, "bodybag_label")
+ */
/obj/item/bodybag/cryobag
name = "stasis bag"
desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \
especially useful if short on time or in a hostile enviroment."
- icon = 'icons/obj/cryobag.dmi'
+ icon = 'icons/obj/closets/cryobag.dmi'
icon_state = "bodybag_folded"
item_state = "bodybag_cryo_folded"
origin_tech = list(TECH_BIO = 4)
@@ -158,7 +159,7 @@
name = "stasis bag"
desc = "A non-reusable plastic bag designed to slow down bodily functions such as circulation and breathing, \
especially useful if short on time or in a hostile enviroment."
- icon = 'icons/obj/cryobag.dmi'
+ icon = 'icons/obj/closets/cryobag.dmi'
item_path = /obj/item/bodybag/cryobag
store_misc = 0
store_items = 0
@@ -189,13 +190,17 @@
/obj/structure/closet/body_bag/cryobag/open()
. = ..()
if(used)
- var/obj/item/O = new/obj/item(src.loc)
- O.name = "used [name]"
- O.icon = src.icon
- O.icon_state = "bodybag_used"
- O.desc = "Pretty useless now..."
+ new /obj/item/usedcryobag(loc)
qdel(src)
+/obj/structure/closet/body_bag/cryobag/update_icon()
+ ..()
+ overlays.Cut()
+ var/image/I = image(icon, "indicator[opened]")
+ I.appearance_flags = RESET_COLOR
+ I.color = COLOR_LIME
+ overlays += I
+
/obj/structure/closet/body_bag/cryobag/MouseDrop(over_object, src_location, over_location)
. = ..()
if(. && syringe)
@@ -283,3 +288,9 @@
else
..()
+
+/obj/item/usedcryobag
+ name = "used stasis bag"
+ desc = "Pretty useless now.."
+ icon_state = "bodybag_used"
+ icon = 'icons/obj/closets/cryobag.dmi'
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index 0c097295bb..390084f9fe 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -18,7 +18,7 @@
var/on = 0 //is it turned on?
var/cover_open = 0 //is the cover open?
- var/obj/item/weapon/cell/cell
+ var/obj/item/weapon/cell/cell = /obj/item/weapon/cell/high
var/max_cooling = 15 // in degrees per second - probably don't need to mess with heat capacity here
var/charge_consumption = 3 // charge per second at max_cooling
var/thermostat = T20C
@@ -30,7 +30,8 @@
/obj/item/device/suit_cooling_unit/Initialize()
. = ..()
- cell = new/obj/item/weapon/cell/high(src) //comes not with the crappy default power cell - because this is dedicated EVA equipment
+ if(ispath(cell))
+ cell = new cell(src)
/obj/item/device/suit_cooling_unit/Destroy()
qdel_null(cell)
@@ -200,3 +201,23 @@
. += "The charge meter reads [round(cell.percent())]%."
else
. += "It doesn't have a power cell installed."
+
+/obj/item/device/suit_cooling_unit/emergency
+ icon_state = "esuitcooler"
+ cell = /obj/item/weapon/cell
+ w_class = ITEMSIZE_NORMAL
+
+/obj/item/device/suit_cooling_unit/emergency/updateicon()
+ return
+
+/obj/item/device/suit_cooling_unit/emergency/get_cell()
+ if(on)
+ return null // Don't let recharging happen while we're on
+ return cell
+
+/obj/item/device/suit_cooling_unit/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if (W.is_screwdriver())
+ to_chat(user, "This model has the cell permanently installed!")
+ return
+
+ return ..()
diff --git a/code/game/objects/items/poi_items.dm b/code/game/objects/items/poi_items.dm
index b86d93aec8..4300eeed71 100644
--- a/code/game/objects/items/poi_items.dm
+++ b/code/game/objects/items/poi_items.dm
@@ -61,10 +61,8 @@
/obj/structure/closet/crate/oldreactor
name = "fission reactor rack"
desc = "Used in older models of nuclear reactors, essentially a cooling rack for high volumes of radioactive material."
- icon = 'icons/obj/objects.dmi'
- icon_state = "poireactor"
- icon_opened = "poireactor_open"
- icon_closed = "poireactor"
+ icon = 'icons/obj/closets/poireactor.dmi'
+ closet_appearance = null
catalogue_data = list(/datum/category_item/catalogue/information/objects/oldreactor)
climbable = 0
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm
similarity index 85%
rename from code/game/objects/structures/crates_lockers/closets.dm
rename to code/game/objects/structures/crates_lockers/__closets.dm
index 9938173a2b..2706e11bd3 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/__closets.dm
@@ -1,474 +1,486 @@
-/obj/structure/closet
- name = "closet"
- desc = "It's a basic storage unit."
- icon = 'icons/obj/closet.dmi'
- icon_state = "closed"
- density = 1
- w_class = ITEMSIZE_HUGE
- layer = UNDER_JUNK_LAYER
- var/icon_closed = "closed"
- var/icon_opened = "open"
- var/opened = 0
- var/sealed = 0
- var/seal_tool = /obj/item/weapon/weldingtool //Tool used to seal the closet, defaults to welder
- var/wall_mounted = 0 //never solid (You can always pass over it)
- var/health = 100
-
- var/breakout = 0 //if someone is currently breaking out. mutex
- var/breakout_time = 2 //2 minutes by default
- var/breakout_sound = 'sound/effects/grillehit.ogg' //Sound that plays while breaking out
-
- var/storage_capacity = 2 * MOB_MEDIUM //This is so that someone can't pack hundreds of items in a locker/crate
- //then open it in a populated area to crash clients.
- var/storage_cost = 40 //How much space this closet takes up if it's stuffed in another closet
-
- var/open_sound = 'sound/machines/click.ogg'
- var/close_sound = 'sound/machines/click.ogg'
-
- var/store_misc = 1 //Chameleon item check
- var/store_items = 1 //Will the closet store items?
- var/store_mobs = 1 //Will the closet store mobs?
- var/max_closets = 0 //Number of other closets allowed on tile before it won't close.
-
- var/list/starts_with
-
-/obj/structure/closet/Initialize()
- ..()
- // Closets need to come later because of spawners potentially creating objects during init.
- return INITIALIZE_HINT_LATELOAD
-
-/obj/structure/closet/LateInitialize()
- . = ..()
- if(starts_with)
- create_objects_in_loc(src, starts_with)
- starts_with = null
-
- if(!opened) // if closed, any item at the crate's loc is put in the contents
- if(istype(loc, /mob/living)) return //VOREStation Edit - No collecting mob organs if spawned inside mob
- var/obj/item/I
- for(I in src.loc)
- if(I.density || I.anchored || I == src) continue
- I.forceMove(src)
- // adjust locker size to hold all items with 5 units of free store room
- var/content_size = 0
- for(I in src.contents)
- content_size += CEILING(I.w_class/2, 1)
- if(content_size > storage_capacity-5)
- storage_capacity = content_size + 5
- update_icon()
-
-/obj/structure/closet/examine(mob/user)
- . = ..()
- if(Adjacent(user) || isobserver(user))
- var/content_size = 0
- for(var/obj/item/I in src.contents)
- if(!I.anchored)
- content_size += CEILING(I.w_class/2, 1)
- if(!content_size)
- . += "It is empty."
- else if(storage_capacity > content_size*4)
- . += "It is barely filled."
- else if(storage_capacity > content_size*2)
- . += "It is less than half full."
- else if(storage_capacity > content_size)
- . += "There is still some free space."
- else
- . += "It is full."
-
- if(!src.opened && isobserver(user))
- . += "It contains: [counting_english_list(contents)]"
-
-/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
- if(wall_mounted)
- return TRUE
- return ..()
-
-/obj/structure/closet/proc/can_open()
- if(src.sealed)
- return 0
- return 1
-
-/obj/structure/closet/proc/can_close()
- var/closet_count = 0
- for(var/obj/structure/closet/closet in get_turf(src))
- if(closet != src)
- if(!closet.anchored)
- closet_count ++
- if(closet_count > max_closets)
- return 0
- return 1
-
-/obj/structure/closet/proc/dump_contents()
- //Cham Projector Exception
- for(var/obj/effect/dummy/chameleon/AD in src)
- AD.forceMove(src.loc)
-
- for(var/obj/I in src)
- I.forceMove(src.loc)
-
- for(var/mob/M in src)
- M.forceMove(src.loc)
- if(M.client)
- M.client.eye = M.client.mob
- M.client.perspective = MOB_PERSPECTIVE
-
-/obj/structure/closet/proc/open()
- if(src.opened)
- return 0
-
- if(!src.can_open())
- return 0
-
- src.dump_contents()
-
- src.icon_state = src.icon_opened
- src.opened = 1
- playsound(src, open_sound, 15, 1, -3)
- if(initial(density))
- density = !density
- return 1
-
-/obj/structure/closet/proc/close()
- if(!src.opened)
- return 0
- if(!src.can_close())
- return 0
-
- var/stored_units = 0
-
- if(store_misc)
- stored_units += store_misc(stored_units)
- if(store_items)
- stored_units += store_items(stored_units)
- if(store_mobs)
- stored_units += store_mobs(stored_units)
- if(max_closets)
- stored_units += store_closets(stored_units)
-
- src.icon_state = src.icon_closed
- src.opened = 0
-
- playsound(src, close_sound, 15, 1, -3)
- if(initial(density))
- density = !density
- return 1
-
-//Cham Projector Exception
-/obj/structure/closet/proc/store_misc(var/stored_units)
- var/added_units = 0
- for(var/obj/effect/dummy/chameleon/AD in src.loc)
- if((stored_units + added_units) > storage_capacity)
- break
- AD.forceMove(src)
- added_units++
- return added_units
-
-/obj/structure/closet/proc/store_items(var/stored_units)
- var/added_units = 0
- for(var/obj/item/I in src.loc)
- var/item_size = CEILING(I.w_class / 2, 1)
- if(stored_units + added_units + item_size > storage_capacity)
- continue
- if(!I.anchored)
- I.forceMove(src)
- added_units += item_size
- return added_units
-
-/obj/structure/closet/proc/store_mobs(var/stored_units)
- var/added_units = 0
- for(var/mob/living/M in src.loc)
- if(M.buckled || M.pinned.len)
- continue
- if(stored_units + added_units + M.mob_size > storage_capacity)
- break
- if(M.client)
- M.client.perspective = EYE_PERSPECTIVE
- M.client.eye = src
- M.forceMove(src)
- added_units += M.mob_size
- return added_units
-
-/obj/structure/closet/proc/store_closets(var/stored_units)
- var/added_units = 0
- for(var/obj/structure/closet/C in src.loc)
- if(C == src) //Don't store ourself
- continue
- if(C.anchored) //Don't worry about anchored things on the same tile
- continue
- if(C.max_closets) //Prevents recursive storage
- continue
- if(stored_units + added_units + storage_cost > storage_capacity)
- break
- C.forceMove(src)
- added_units += storage_cost
- return added_units
-
-
-/obj/structure/closet/proc/toggle(mob/user as mob)
- if(!(src.opened ? src.close() : src.open()))
- to_chat(user, "It won't budge!")
- return
- update_icon()
-
-// this should probably use dump_contents()
-/obj/structure/closet/ex_act(severity)
- switch(severity)
- if(1)
- for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion
- A.forceMove(src.loc)
- A.ex_act(severity + 1)
- qdel(src)
- if(2)
- if(prob(50))
- for (var/atom/movable/A as mob|obj in src)
- A.forceMove(src.loc)
- A.ex_act(severity + 1)
- qdel(src)
- if(3)
- if(prob(5))
- for(var/atom/movable/A as mob|obj in src)
- A.forceMove(src.loc)
- qdel(src)
-
-/obj/structure/closet/blob_act()
- damage(100)
-
-/obj/structure/closet/proc/damage(var/damage)
- health -= damage
- if(health <= 0)
- for(var/atom/movable/A in src)
- A.forceMove(src.loc)
- qdel(src)
-
-/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
- var/proj_damage = Proj.get_structure_damage()
- if(!proj_damage)
- return
-
- ..()
- damage(proj_damage)
-
- return
-
-/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(src.opened)
- if(istype(W, /obj/item/weapon/grab))
- var/obj/item/weapon/grab/G = W
- src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
- return 0
- if(istype(W,/obj/item/tk_grab))
- return 0
- if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(!WT.remove_fuel(0,user))
- if(!WT.isOn())
- return
- else
- to_chat(user, "You need more welding fuel to complete this task.")
- return
- playsound(src, WT.usesound, 50)
- new /obj/item/stack/material/steel(src.loc)
- for(var/mob/M in viewers(src))
- M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2)
- qdel(src)
- return
- if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len)
- var/obj/item/weapon/storage/laundry_basket/LB = W
- var/turf/T = get_turf(src)
- for(var/obj/item/I in LB.contents)
- LB.remove_from_storage(I, T)
- user.visible_message("[user] empties \the [LB] into \the [src].", \
- "You empty \the [LB] into \the [src].", \
- "You hear rustling of clothes.")
- return
- if(isrobot(user))
- return
- if(W.loc != user) // This should stop mounted modules ending up outside the module.
- return
- usr.drop_item()
- if(W)
- W.forceMove(src.loc)
- else if(istype(W, /obj/item/weapon/packageWrap))
- return
- else if(seal_tool)
- if(istype(W, seal_tool))
- var/obj/item/weapon/S = W
- if(istype(S, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = S
- if(!WT.remove_fuel(0,user))
- if(!WT.isOn())
- return
- else
- to_chat(user, "You need more welding fuel to complete this task.")
- return
- if(do_after(user, 20 * S.toolspeed))
- playsound(src, S.usesound, 50)
- src.sealed = !src.sealed
- src.update_icon()
- for(var/mob/M in viewers(src))
- M.show_message("[src] has been [sealed?"sealed":"unsealed"] by [user.name].", 3)
- else if(W.is_wrench())
- if(sealed)
- if(anchored)
- user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
- else
- user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
- playsound(src, W.usesound, 50)
- if(do_after(user, 20 * W.toolspeed))
- if(!src) return
- to_chat(user, "You [anchored? "un" : ""]secured \the [src]!")
- anchored = !anchored
- else
- src.attack_hand(user)
- return
-
-/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
- if(istype(O, /obj/screen)) //fix for HUD elements making their way into the world -Pete
- return
- if(O.loc == user)
- return
- if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis)
- return
- if((!( istype(O, /atom/movable) ) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O) || user.contents.Find(src)))
- return
- if(!isturf(user.loc)) // are you in a container/closet/pod/etc?
- return
- if(!src.opened)
- return
- if(istype(O, /obj/structure/closet))
- return
- step_towards(O, src.loc)
- if(user != O)
- user.show_viewers("[user] stuffs [O] into [src]!")
- src.add_fingerprint(user)
- return
-
-/obj/structure/closet/attack_robot(mob/user)
- if(Adjacent(user))
- attack_hand(user)
-
-/obj/structure/closet/relaymove(mob/user as mob)
- if(user.stat || !isturf(src.loc))
- return
-
- if(!src.open())
- to_chat(user, "It won't budge!")
-
-/obj/structure/closet/attack_hand(mob/user as mob)
- src.add_fingerprint(user)
- src.toggle(user)
-
-// tk grab then use on self
-/obj/structure/closet/attack_self_tk(mob/user as mob)
- src.add_fingerprint(user)
- if(!src.toggle())
- to_chat(usr, "It won't budge!")
-
-/obj/structure/closet/verb/verb_toggleopen()
- set src in oview(1)
- set category = "Object"
- set name = "Toggle Open"
-
- if(!usr.canmove || usr.stat || usr.restrained())
- return
-
- if(ishuman(usr) || isrobot(usr))
- src.add_fingerprint(usr)
- src.toggle(usr)
- else
- to_chat(usr, "This mob type can't use this verb.")
-
-/obj/structure/closet/update_icon()//Putting the sealed stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
- overlays.Cut()
- if(!opened)
- icon_state = icon_closed
- if(sealed)
- overlays += "welded"
- else
- icon_state = icon_opened
-
-/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys")
- if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
- return
- user.do_attack_animation(src)
- visible_message("[user] [attack_message] the [src]!")
- dump_contents()
- spawn(1) qdel(src)
- return 1
-
-/obj/structure/closet/proc/req_breakout()
- if(opened)
- return 0 //Door's open... wait, why are you in it's contents then?
- if(!sealed)
- return 0 //closed but not sealed...
- return 1
-
-/obj/structure/closet/container_resist(var/mob/living/escapee)
- if(breakout || !req_breakout())
- return
-
- escapee.setClickCooldown(100)
-
- //okay, so the closet is either sealed or locked... resist!!!
- to_chat(escapee, "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)")
-
- visible_message("\The [src] begins to shake violently!")
-
- breakout = 1 //can't think of a better way to do this right now.
- for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2
- if(!do_after(escapee, 50)) //5 seconds
- breakout = 0
- return
- if(!escapee || escapee.incapacitated() || escapee.loc != src)
- breakout = 0
- return //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
- //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
- if(!req_breakout())
- breakout = 0
- return
-
- playsound(src, breakout_sound, 100, 1)
- animate_shake()
- add_fingerprint(escapee)
-
- //Well then break it!
- breakout = 0
- to_chat(escapee, "You successfully break out!")
- visible_message("\The [escapee] successfully broke out of \the [src]!")
- playsound(src, breakout_sound, 100, 1)
- break_open()
- animate_shake()
-
-/obj/structure/closet/proc/break_open()
- sealed = 0
- update_icon()
- //Do this to prevent contents from being opened into nullspace (read: bluespace)
- if(istype(loc, /obj/structure/bigDelivery))
- var/obj/structure/bigDelivery/BD = loc
- BD.unwrap()
- open()
-
-/obj/structure/closet/proc/animate_shake()
- var/init_px = pixel_x
- var/shake_dir = pick(-1, 1)
- animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
- animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
-
-/obj/structure/closet/onDropInto(var/atom/movable/AM)
- return
-
-/obj/structure/closet/AllowDrop()
- return TRUE
-
-/obj/structure/closet/return_air_for_internal_lifeform(var/mob/living/L)
- if(src.loc)
- if(istype(src.loc, /obj/structure/closet))
- return (loc.return_air_for_internal_lifeform(L))
- return return_air()
-
-/obj/structure/closet/take_damage(var/damage)
- if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
- return
- dump_contents()
- spawn(1) qdel(src)
- return 1
+// Someone should really merge secure closets and crates into this, which Bay has done already.
+/obj/structure/closet
+ name = "closet"
+ desc = "It's a basic storage unit."
+ icon = 'icons/obj/closets/bases/closet.dmi'
+ icon_state = "base"
+ density = 1
+ w_class = ITEMSIZE_HUGE
+ layer = UNDER_JUNK_LAYER
+
+ var/opened = 0
+ var/sealed = 0
+
+ var/seal_tool = /obj/item/weapon/weldingtool //Tool used to seal the closet, defaults to welder
+ var/wall_mounted = 0 //never solid (You can always pass over it)
+ var/health = 100
+
+ var/breakout = 0 //if someone is currently breaking out. mutex
+ var/breakout_time = 2 //2 minutes by default
+ var/breakout_sound = 'sound/effects/grillehit.ogg' //Sound that plays while breaking out
+
+ var/storage_capacity = 2 * MOB_MEDIUM //This is so that someone can't pack hundreds of items in a locker/crate
+ //then open it in a populated area to crash clients.
+ var/storage_cost = 40 //How much space this closet takes up if it's stuffed in another closet
+
+ var/open_sound = 'sound/machines/click.ogg'
+ var/close_sound = 'sound/machines/click.ogg'
+
+ var/store_misc = 1 //Chameleon item check
+ var/store_items = 1 //Will the closet store items?
+ var/store_mobs = 1 //Will the closet store mobs?
+ var/max_closets = 0 //Number of other closets allowed on tile before it won't close.
+
+ var/list/starts_with // List of type = count (or just type for 1)
+
+ var/closet_appearance = /decl/closet_appearance // The /decl that defines what decals we end up with, that makes our look unique
+
+/obj/structure/closet/Initialize()
+ ..()
+ // Closets need to come later because of spawners potentially creating objects during init.
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/structure/closet/LateInitialize()
+ . = ..()
+ if(starts_with)
+ create_objects_in_loc(src, starts_with)
+ starts_with = null
+
+ if(!opened) // if closed, any item at the crate's loc is put in the contents
+ if(istype(loc, /mob/living)) return //VOREStation Edit - No collecting mob organs if spawned inside mob
+ var/obj/item/I
+ for(I in loc)
+ if(I.density || I.anchored || I == src) continue
+ I.forceMove(src)
+ // adjust locker size to hold all items with 5 units of free store room
+ var/content_size = 0
+ for(I in contents)
+ content_size += CEILING(I.w_class/2, 1)
+ if(content_size > storage_capacity-5)
+ storage_capacity = content_size + 5
+
+ if(ispath(closet_appearance))
+ var/decl/closet_appearance/app = GLOB.closet_appearances[closet_appearance]
+ if(app)
+ icon = app.icon
+ color = null
+ update_icon()
+
+/obj/structure/closet/examine(mob/user)
+ . = ..()
+ if(Adjacent(user) || isobserver(user))
+ var/content_size = 0
+ for(var/obj/item/I in contents)
+ if(!I.anchored)
+ content_size += CEILING(I.w_class/2, 1)
+ if(!content_size)
+ . += "It is empty."
+ else if(storage_capacity > content_size*4)
+ . += "It is barely filled."
+ else if(storage_capacity > content_size*2)
+ . += "It is less than half full."
+ else if(storage_capacity > content_size)
+ . += "There is still some free space."
+ else
+ . += "It is full."
+
+ if(!opened && isobserver(user))
+ . += "It contains: [counting_english_list(contents)]"
+
+/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
+ if(wall_mounted)
+ return TRUE
+ return ..()
+
+/obj/structure/closet/proc/can_open()
+ if(sealed)
+ return 0
+ return 1
+
+/obj/structure/closet/proc/can_close()
+ var/closet_count = 0
+ for(var/obj/structure/closet/closet in get_turf(src))
+ if(closet != src)
+ if(!closet.anchored)
+ closet_count ++
+ if(closet_count > max_closets)
+ return 0
+ return 1
+
+/obj/structure/closet/proc/dump_contents()
+ //Cham Projector Exception
+ for(var/obj/effect/dummy/chameleon/AD in src)
+ AD.forceMove(loc)
+
+ for(var/obj/I in src)
+ I.forceMove(loc)
+
+ for(var/mob/M in src)
+ M.forceMove(loc)
+ if(M.client)
+ M.client.eye = M.client.mob
+ M.client.perspective = MOB_PERSPECTIVE
+
+/obj/structure/closet/proc/open()
+ if(opened)
+ return 0
+
+ if(!can_open())
+ return 0
+
+ dump_contents()
+
+ opened = 1
+ playsound(src, open_sound, 15, 1, -3)
+ if(initial(density))
+ density = !density
+ update_icon()
+ return 1
+
+/obj/structure/closet/proc/close()
+ if(!opened)
+ return 0
+ if(!can_close())
+ return 0
+
+ var/stored_units = 0
+
+ if(store_misc)
+ stored_units += store_misc(stored_units)
+ if(store_items)
+ stored_units += store_items(stored_units)
+ if(store_mobs)
+ stored_units += store_mobs(stored_units)
+ if(max_closets)
+ stored_units += store_closets(stored_units)
+
+ opened = 0
+
+ playsound(src, close_sound, 15, 1, -3)
+ if(initial(density))
+ density = !density
+ update_icon()
+ return 1
+
+//Cham Projector Exception
+/obj/structure/closet/proc/store_misc(var/stored_units)
+ var/added_units = 0
+ for(var/obj/effect/dummy/chameleon/AD in loc)
+ if((stored_units + added_units) > storage_capacity)
+ break
+ AD.forceMove(src)
+ added_units++
+ return added_units
+
+/obj/structure/closet/proc/store_items(var/stored_units)
+ var/added_units = 0
+ for(var/obj/item/I in loc)
+ var/item_size = CEILING(I.w_class / 2, 1)
+ if(stored_units + added_units + item_size > storage_capacity)
+ continue
+ if(!I.anchored)
+ I.forceMove(src)
+ added_units += item_size
+ return added_units
+
+/obj/structure/closet/proc/store_mobs(var/stored_units)
+ var/added_units = 0
+ for(var/mob/living/M in loc)
+ if(M.buckled || M.pinned.len)
+ continue
+ if(stored_units + added_units + M.mob_size > storage_capacity)
+ break
+ if(M.client)
+ M.client.perspective = EYE_PERSPECTIVE
+ M.client.eye = src
+ M.forceMove(src)
+ added_units += M.mob_size
+ return added_units
+
+/obj/structure/closet/proc/store_closets(var/stored_units)
+ var/added_units = 0
+ for(var/obj/structure/closet/C in loc)
+ if(C == src) //Don't store ourself
+ continue
+ if(C.anchored) //Don't worry about anchored things on the same tile
+ continue
+ if(C.max_closets) //Prevents recursive storage
+ continue
+ if(stored_units + added_units + storage_cost > storage_capacity)
+ break
+ C.forceMove(src)
+ added_units += storage_cost
+ return added_units
+
+
+/obj/structure/closet/proc/toggle(mob/user as mob)
+ if(!(opened ? close() : open()))
+ to_chat(user, "It won't budge!")
+ return
+ update_icon()
+
+// this should probably use dump_contents()
+/obj/structure/closet/ex_act(severity)
+ switch(severity)
+ if(1)
+ for(var/atom/movable/A as mob|obj in src)//pulls everything out of the locker and hits it with an explosion
+ A.forceMove(loc)
+ A.ex_act(severity + 1)
+ qdel(src)
+ if(2)
+ if(prob(50))
+ for (var/atom/movable/A as mob|obj in src)
+ A.forceMove(loc)
+ A.ex_act(severity + 1)
+ qdel(src)
+ if(3)
+ if(prob(5))
+ for(var/atom/movable/A as mob|obj in src)
+ A.forceMove(loc)
+ qdel(src)
+
+/obj/structure/closet/blob_act()
+ damage(100)
+
+/obj/structure/closet/proc/damage(var/damage)
+ health -= damage
+ if(health <= 0)
+ for(var/atom/movable/A in src)
+ A.forceMove(loc)
+ qdel(src)
+
+/obj/structure/closet/bullet_act(var/obj/item/projectile/Proj)
+ var/proj_damage = Proj.get_structure_damage()
+ if(!proj_damage)
+ return
+
+ ..()
+ damage(proj_damage)
+
+ return
+
+/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(opened)
+ if(istype(W, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = W
+ MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
+ return 0
+ if(istype(W,/obj/item/tk_grab))
+ return 0
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.remove_fuel(0,user))
+ if(!WT.isOn())
+ return
+ else
+ to_chat(user, "You need more welding fuel to complete this task.")
+ return
+ playsound(src, WT.usesound, 50)
+ new /obj/item/stack/material/steel(loc)
+ for(var/mob/M in viewers(src))
+ M.show_message("\The [src] has been cut apart by [user] with \the [WT].", 3, "You hear welding.", 2)
+ qdel(src)
+ return
+ if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len)
+ var/obj/item/weapon/storage/laundry_basket/LB = W
+ var/turf/T = get_turf(src)
+ for(var/obj/item/I in LB.contents)
+ LB.remove_from_storage(I, T)
+ user.visible_message("[user] empties \the [LB] into \the [src].", \
+ "You empty \the [LB] into \the [src].", \
+ "You hear rustling of clothes.")
+ return
+ if(isrobot(user))
+ return
+ if(W.loc != user) // This should stop mounted modules ending up outside the module.
+ return
+ usr.drop_item()
+ if(W)
+ W.forceMove(loc)
+ else if(istype(W, /obj/item/weapon/packageWrap))
+ return
+ else if(seal_tool)
+ if(istype(W, seal_tool))
+ var/obj/item/weapon/S = W
+ if(istype(S, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = S
+ if(!WT.remove_fuel(0,user))
+ if(!WT.isOn())
+ return
+ else
+ to_chat(user, "You need more welding fuel to complete this task.")
+ return
+ if(do_after(user, 20 * S.toolspeed))
+ playsound(src, S.usesound, 50)
+ sealed = !sealed
+ update_icon()
+ for(var/mob/M in viewers(src))
+ M.show_message("[src] has been [sealed?"sealed":"unsealed"] by [user.name].", 3)
+ else if(W.is_wrench())
+ if(sealed)
+ if(anchored)
+ user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
+ else
+ user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
+ playsound(src, W.usesound, 50)
+ if(do_after(user, 20 * W.toolspeed))
+ if(!src) return
+ to_chat(user, "You [anchored? "un" : ""]secured \the [src]!")
+ anchored = !anchored
+ else
+ attack_hand(user)
+ return
+
+/obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
+ if(istype(O, /obj/screen)) //fix for HUD elements making their way into the world -Pete
+ return
+ if(O.loc == user)
+ return
+ if(user.restrained() || user.stat || user.weakened || user.stunned || user.paralysis)
+ return
+ if((!( istype(O, /atom/movable) ) || O.anchored || !Adjacent(user) || !Adjacent(O) || !user.Adjacent(O) || user.contents.Find(src)))
+ return
+ if(!isturf(user.loc)) // are you in a container/closet/pod/etc?
+ return
+ if(!opened)
+ return
+ if(istype(O, /obj/structure/closet))
+ return
+ step_towards(O, loc)
+ if(user != O)
+ user.show_viewers("[user] stuffs [O] into [src]!")
+ add_fingerprint(user)
+ return
+
+/obj/structure/closet/attack_robot(mob/user)
+ if(Adjacent(user))
+ attack_hand(user)
+
+/obj/structure/closet/relaymove(mob/user as mob)
+ if(user.stat || !isturf(loc))
+ return
+
+ if(!open())
+ to_chat(user, "It won't budge!")
+
+/obj/structure/closet/attack_hand(mob/user as mob)
+ add_fingerprint(user)
+ toggle(user)
+
+// tk grab then use on self
+/obj/structure/closet/attack_self_tk(mob/user as mob)
+ add_fingerprint(user)
+ if(!toggle())
+ to_chat(usr, "It won't budge!")
+
+/obj/structure/closet/verb/verb_toggleopen()
+ set src in oview(1)
+ set category = "Object"
+ set name = "Toggle Open"
+
+ if(!usr.canmove || usr.stat || usr.restrained())
+ return
+
+ if(ishuman(usr) || isrobot(usr))
+ add_fingerprint(usr)
+ toggle(usr)
+ else
+ to_chat(usr, "This mob type can't use this verb.")
+
+/obj/structure/closet/update_icon()
+ if(opened)
+ icon_state = "open"
+ else
+ icon_state = "closed_unlocked[sealed ? "_welded" : ""]"
+
+/obj/structure/closet/attack_generic(var/mob/user, var/damage, var/attack_message = "destroys")
+ if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
+ return
+ user.do_attack_animation(src)
+ visible_message("[user] [attack_message] the [src]!")
+ dump_contents()
+ spawn(1) qdel(src)
+ return 1
+
+/obj/structure/closet/proc/req_breakout()
+ if(opened)
+ return 0 //Door's open... wait, why are you in it's contents then?
+ if(!sealed)
+ return 0 //closed but not sealed...
+ return 1
+
+/obj/structure/closet/container_resist(var/mob/living/escapee)
+ if(breakout || !req_breakout())
+ return
+
+ escapee.setClickCooldown(100)
+
+ //okay, so the closet is either sealed or locked... resist!!!
+ to_chat(escapee, "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)")
+
+ visible_message("\The [src] begins to shake violently!")
+
+ breakout = 1 //can't think of a better way to do this right now.
+ for(var/i in 1 to (6*breakout_time * 2)) //minutes * 6 * 5seconds * 2
+ if(!do_after(escapee, 50)) //5 seconds
+ breakout = 0
+ return
+ if(!escapee || escapee.incapacitated() || escapee.loc != src)
+ breakout = 0
+ return //closet/user destroyed OR user dead/unconcious OR user no longer in closet OR closet opened
+ //Perform the same set of checks as above for weld and lock status to determine if there is even still a point in 'resisting'...
+ if(!req_breakout())
+ breakout = 0
+ return
+
+ playsound(src, breakout_sound, 100, 1)
+ animate_shake()
+ add_fingerprint(escapee)
+
+ //Well then break it!
+ breakout = 0
+ to_chat(escapee, "You successfully break out!")
+ visible_message("\The [escapee] successfully broke out of \the [src]!")
+ playsound(src, breakout_sound, 100, 1)
+ break_open()
+ animate_shake()
+
+/obj/structure/closet/proc/break_open()
+ sealed = 0
+ update_icon()
+ //Do this to prevent contents from being opened into nullspace (read: bluespace)
+ if(istype(loc, /obj/structure/bigDelivery))
+ var/obj/structure/bigDelivery/BD = loc
+ BD.unwrap()
+ open()
+
+/obj/structure/closet/proc/animate_shake()
+ var/init_px = pixel_x
+ var/shake_dir = pick(-1, 1)
+ animate(src, transform=turn(matrix(), 8*shake_dir), pixel_x=init_px + 2*shake_dir, time=1)
+ animate(transform=null, pixel_x=init_px, time=6, easing=ELASTIC_EASING)
+
+/obj/structure/closet/onDropInto(var/atom/movable/AM)
+ return
+
+/obj/structure/closet/AllowDrop()
+ return TRUE
+
+/obj/structure/closet/return_air_for_internal_lifeform(var/mob/living/L)
+ if(loc)
+ if(istype(loc, /obj/structure/closet))
+ return (loc.return_air_for_internal_lifeform(L))
+ return return_air()
+
+/obj/structure/closet/take_damage(var/damage)
+ if(damage < STRUCTURE_MIN_DAMAGE_THRESHOLD)
+ return
+ dump_contents()
+ spawn(1) qdel(src)
+ return 1
+
+// Just a generic cabinet for mappers to use
+/obj/structure/closet/cabinet
+ name = "cabinet"
+ icon = 'icons/obj/closets/bases/cabinet.dmi'
+ closet_appearance = /decl/closet_appearance/cabinet
diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
new file mode 100644
index 0000000000..2436e6a99f
--- /dev/null
+++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
@@ -0,0 +1,917 @@
+/obj/structure/closet/debug/Initialize(var/maploading, var/newappearance)
+ closet_appearance = newappearance
+ . = ..()
+
+/decl/closet_appearance
+ var/color = COLOR_GRAY40
+ var/decals = list(
+ "upper_vent",
+ "lower_vent"
+ )
+ var/list/extra_decals
+ var/icon/icon
+ var/base_icon = 'icons/obj/closets/bases/closet.dmi'
+ var/decal_icon = 'icons/obj/closets/decals/closet.dmi'
+ var/can_lock = FALSE
+
+/decl/closet_appearance/New()
+ // Build our colour and decal lists.
+ if(LAZYLEN(extra_decals))
+ if(!decals)
+ decals = list()
+ for(var/thing in extra_decals)
+ decals[thing] = extra_decals[thing]
+ for(var/thing in decals)
+ if(isnull(decals[thing]))
+ decals[thing] = color
+
+ // Declare storage vars for icons.
+ var/icon/open_icon
+ var/icon/closed_emagged_icon
+ var/icon/closed_emagged_welded_icon
+ var/icon/closed_locked_icon
+ var/icon/closed_locked_welded_icon
+ var/icon/closed_unlocked_icon
+ var/icon/closed_unlocked_welded_icon
+
+ // Create open icon.
+ var/icon/new_icon = new
+ open_icon = icon(base_icon, "base")
+ open_icon.Blend(icon(base_icon, "open"), ICON_OVERLAY)
+ open_icon.Blend(color, BLEND_ADD)
+ open_icon.Blend(icon(base_icon, "interior"), ICON_OVERLAY)
+ if(decal_icon)
+ for(var/thing in decals)
+ var/icon/this_decal_icon = icon(decal_icon, "[thing]_open")
+ this_decal_icon.Blend(decals[thing], BLEND_ADD)
+ open_icon.Blend(this_decal_icon, ICON_OVERLAY)
+
+ // Generate basic closed icons.
+ closed_emagged_icon = icon(base_icon, "base")
+ if(can_lock)
+ closed_emagged_icon.Blend(icon(base_icon, "lock"), ICON_OVERLAY)
+ closed_emagged_icon.Blend(color, BLEND_ADD)
+ if(decal_icon)
+ for(var/thing in decals)
+ var/icon/this_decal_icon = icon(decal_icon, thing)
+ this_decal_icon.Blend(decals[thing], BLEND_ADD)
+ closed_emagged_icon.Blend(this_decal_icon, ICON_OVERLAY)
+ closed_locked_icon = icon(closed_emagged_icon)
+ closed_unlocked_icon = icon(closed_emagged_icon)
+
+ // Add lock lights.
+ if(can_lock)
+ var/icon/light = icon(base_icon, "light")
+ light.Blend(COLOR_RED, BLEND_ADD)
+ closed_locked_icon.Blend(light, ICON_OVERLAY)
+ light = icon(base_icon, "light")
+ light.Blend(COLOR_LIME, BLEND_ADD)
+ closed_unlocked_icon.Blend(light, ICON_OVERLAY)
+
+ // Add welded states.
+ var/icon/welded = icon(base_icon, "welded")
+ closed_locked_welded_icon = icon(closed_locked_icon)
+ closed_unlocked_welded_icon = icon(closed_unlocked_icon)
+ closed_emagged_welded_icon = icon(closed_emagged_icon)
+ closed_locked_welded_icon.Blend(welded, ICON_OVERLAY)
+ closed_unlocked_welded_icon.Blend(welded, ICON_OVERLAY)
+ closed_emagged_welded_icon.Blend(welded, ICON_OVERLAY)
+
+ // Finish up emagged icons.
+ var/icon/sparks = icon(base_icon, "sparks")
+ closed_emagged_icon.Blend(sparks, ICON_OVERLAY)
+ closed_emagged_welded_icon.Blend(sparks, ICON_OVERLAY)
+
+ // Insert our bevy of icons into the final icon file.
+ new_icon.Insert(open_icon, "open")
+ new_icon.Insert(closed_emagged_icon, "closed_emagged")
+ new_icon.Insert(closed_emagged_welded_icon, "closed_emagged_welded")
+ new_icon.Insert(closed_locked_icon, "closed_locked")
+ new_icon.Insert(closed_locked_welded_icon, "closed_locked_welded")
+ new_icon.Insert(closed_unlocked_icon, "closed_unlocked")
+ new_icon.Insert(closed_unlocked_welded_icon, "closed_unlocked_welded")
+
+ // Set icon!
+ icon = new_icon
+
+/decl/closet_appearance/tactical
+ color = COLOR_RED_GRAY
+ extra_decals = list(
+ "inset" = COLOR_GRAY
+ )
+
+/decl/closet_appearance/tactical/alt
+ color = COLOR_PALE_BTL_GREEN
+
+/decl/closet_appearance/wardrobe
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_PALE_BLUE_GRAY,
+ "stripe_w" = COLOR_GRAY
+ )
+
+/decl/closet_appearance/wardrobe/mixed
+ extra_decals = list(
+ "stripe_horizontal_upper" = COLOR_PURPLE_GRAY,
+ "stripe_horizontal_lower" = COLOR_PALE_RED_GRAY,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/orange
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_PALE_ORANGE,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/green
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_GREEN_GRAY,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/grey
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_GRAY,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/pink
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_PALE_PINK,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/black
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_GRAY20,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/yellow
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_PALE_YELLOW,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/red
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_RED_GRAY,
+ "stripe_w" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/wardrobe/white
+ extra_decals = list(
+ "stripe_horizontal" = COLOR_GRAY,
+ "stripe_w" = COLOR_OFF_WHITE,
+ )
+
+/decl/closet_appearance/bio
+ color = COLOR_PALE_ORANGE
+ decals = list(
+ "l3" = COLOR_OFF_WHITE,
+ "stripe_horizontal_narrow" = COLOR_ORANGE
+ )
+ extra_decals = list(
+ "biohazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/bio/command
+ extra_decals = list(
+ "lower_half_solid" = COLOR_BLUE_GRAY,
+ "biohazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/bio/science
+ extra_decals = list(
+ "lower_half_solid" = COLOR_PALE_YELLOW,
+ "biohazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/bio/security
+ extra_decals = list(
+ "lower_half_solid" = COLOR_RED_GRAY,
+ "biohazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/bio/janitor
+ color = COLOR_PURPLE
+ decals = list(
+ "l3" = COLOR_OFF_WHITE,
+ )
+ extra_decals = list(
+ "stripe_horizontal_broad" = COLOR_ORANGE,
+ "biohazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/bio/virology
+ extra_decals = list(
+ "lower_half_solid" = COLOR_GREEN_GRAY,
+ "biohazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet
+ can_lock = TRUE
+
+/decl/closet_appearance/secure_closet/engineering
+ can_lock = TRUE
+ color = COLOR_YELLOW_GRAY
+ decals = list(
+ "upper_side_vent",
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_right_partial" = COLOR_BEASTY_BROWN,
+ "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN,
+ "eng" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/engineering/electrical
+ decals = list(
+ "lower_vent"
+ )
+ extra_decals = list(
+ "electric" = COLOR_BEASTY_BROWN,
+ "vertical_stripe_simple" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/engineering/atmos
+ extra_decals = list(
+ "stripe_vertical_right_partial" = COLOR_CYAN_BLUE,
+ "stripe_vertical_mid_partial" = COLOR_CYAN_BLUE,
+ "atmos" = COLOR_CYAN_BLUE
+ )
+
+/decl/closet_appearance/secure_closet/engineering/welding
+ decals = list(
+ "lower_vent"
+ )
+ extra_decals = list(
+ "fire" = COLOR_BEASTY_BROWN,
+ "vertical_stripe_simple" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/engineering/tools
+ can_lock = FALSE
+ decals = list(
+ "lower_vent"
+ )
+ extra_decals = list(
+ "tool" = COLOR_BEASTY_BROWN,
+ "vertical_stripe_simple" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/engineering/tools/radiation
+ extra_decals = list(
+ "l2" = COLOR_BEASTY_BROWN,
+ "rads" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/engineering/ce
+ color = COLOR_OFF_WHITE
+ extra_decals = list(
+ "stripe_vertical_right_partial" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_mid_partial" = COLOR_CLOSET_GOLD,
+ "eng_narrow" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/mining
+ color = COLOR_WARM_YELLOW
+ decals = list(
+ "upper_side_vent",
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_partial" = COLOR_BEASTY_BROWN,
+ "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN,
+ "mining" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/mining/sec
+ decals = list(
+ "stripe_vertical_mid_partial" = COLOR_NT_RED,
+ "stripe_vertical_left_partial" = COLOR_NT_RED,
+ "mining" = COLOR_NT_RED
+ )
+
+/decl/closet_appearance/secure_closet/command
+ color = COLOR_BLUE_GRAY
+ decals = list(
+ "lower_holes",
+ "upper_holes"
+ )
+ extra_decals = list(
+ "stripe_vertical_left_partial" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_partial" = COLOR_CLOSET_GOLD,
+ "captain" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/command/hop
+ color = COLOR_PALE_BLUE_GRAY
+ extra_decals = list(
+ "stripe_vertical_mid_partial" = COLOR_CLOSET_GOLD,
+ "hop" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/cmo
+ color = COLOR_BABY_BLUE
+ decals = list(
+ "upper_side_vent",
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "medcircle" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_partial" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_mid_partial" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/medical
+ color = COLOR_OFF_WHITE
+ decals = null
+ extra_decals = list(
+ "circle" = COLOR_BLUE_GRAY,
+ "stripes_horizontal" = COLOR_BLUE_GRAY
+ )
+
+/decl/closet_appearance/secure_closet/medical/virology
+ decals = list(
+ "upper_side_vent",
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_right_partial" = COLOR_BOTTLE_GREEN,
+ "stripe_vertical_mid_partial" = COLOR_BOTTLE_GREEN,
+ "viro" = COLOR_BOTTLE_GREEN
+ )
+
+/decl/closet_appearance/secure_closet/medical/alt
+ extra_decals = list(
+ "medcircle" =COLOR_BLUE_GRAY,
+ "stripe_vertical_right_partial" = COLOR_BLUE_GRAY,
+ "stripe_vertical_mid_partial" = COLOR_BLUE_GRAY
+ )
+
+/decl/closet_appearance/secure_closet/cargo
+ color = COLOR_WARM_YELLOW
+ decals = list(
+ "upper_side_vent",
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "cargo" = COLOR_GRAY40,
+ "stripe_vertical_left_partial" = COLOR_GRAY40,
+ "stripe_vertical_mid_partial" = COLOR_GRAY40
+ )
+
+/decl/closet_appearance/secure_closet/cargo/qm
+ extra_decals = list(
+ "cargo" = COLOR_BEASTY_BROWN,
+ "stripe_vertical_left_partial" = COLOR_BEASTY_BROWN,
+ "stripe_vertical_mid_partial" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/security
+ color = COLOR_NT_RED
+ decals = list(
+ "lower_holes"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_WARM_YELLOW,
+ "security" = COLOR_WARM_YELLOW
+ )
+
+/decl/closet_appearance/secure_closet/security/warden
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_WARM_YELLOW,
+ "stripe_vertical_right_full" = COLOR_WARM_YELLOW,
+ "security" = COLOR_WARM_YELLOW
+ )
+
+/decl/closet_appearance/secure_closet/security/hos
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_WARM_YELLOW,
+ "stripe_vertical_right_full" = COLOR_WARM_YELLOW,
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "security" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/bomb
+ color = COLOR_DARK_GREEN_GRAY
+ decals = list(
+ "l4" = COLOR_OFF_WHITE
+ )
+ extra_decals = list(
+ "lower_half_solid" = COLOR_GREEN_GRAY
+ )
+
+/decl/closet_appearance/bomb/security
+ extra_decals = list(
+ "lower_half_solid" = COLOR_WARM_YELLOW
+ )
+
+/decl/closet_appearance/oxygen
+ color = COLOR_LIGHT_CYAN
+ decals = list(
+ "lower_vent"
+ )
+ extra_decals = list(
+ "oxy" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/oxygen/fire
+ color = COLOR_RED_GRAY
+ extra_decals = list(
+ "extinguisher" = COLOR_OFF_WHITE,
+ "vertical_stripe_simple" = COLOR_OFF_WHITE,
+ )
+
+/decl/closet_appearance/alien
+ color = COLOR_PURPLE
+
+/decl/closet_appearance/secure_closet/expedition
+ color = COLOR_BLUE_GRAY
+ decals = list(
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_PURPLE,
+ "security" = COLOR_PURPLE
+ )
+
+/decl/closet_appearance/secure_closet/expedition/pathfinder
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_PURPLE,
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_PURPLE,
+ "security" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/expedition/science
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_PURPLE,
+ "research" = COLOR_PURPLE
+ )
+
+/decl/closet_appearance/secure_closet/rd
+ color = COLOR_BOTTLE_GREEN
+ decals = list(
+ "lower_holes"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_GOLD,
+ "stripe_vertical_left_full" = COLOR_PURPLE,
+ "stripe_vertical_right_full" = COLOR_PURPLE,
+ "research" = COLOR_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/corporate
+ color = COLOR_GREEN_GRAY
+ decals = list(
+ "lower_holes"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_GRAY80,
+ "research" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/hydroponics
+ color = COLOR_GREEN_GRAY
+ decals = list(
+ "lower_side_vent",
+ "upper_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_right_partial" = COLOR_DARK_GREEN_GRAY,
+ "stripe_vertical_mid_partial" = COLOR_DARK_GREEN_GRAY,
+ "hydro" = COLOR_DARK_GREEN_GRAY
+ )
+
+/decl/closet_appearance/secure_closet/chaplain
+ decals = list(
+ "lower_side_vent",
+ "upper_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_right_full" = COLOR_GRAY20,
+ "stripe_vertical_mid_full" = COLOR_GRAY20
+ )
+
+/decl/closet_appearance/secure_closet/sol
+ color = COLOR_BABY_BLUE
+ decals = list(
+ "lower_side_vent"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_BOTTLE_GREEN,
+ "security" = COLOR_BOTTLE_GREEN
+ )
+
+/decl/closet_appearance/secure_closet/sol/two
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_BOTTLE_GREEN,
+ "stripe_vertical_right_full" = COLOR_BOTTLE_GREEN,
+ "security" = COLOR_BOTTLE_GREEN
+ )
+
+/decl/closet_appearance/secure_closet/sol/two/dark
+ color = COLOR_DARK_BLUE_GRAY
+
+// Crates.
+/decl/closet_appearance/crate
+ decals = null
+ extra_decals = null
+ base_icon = 'icons/obj/closets/bases/crate.dmi'
+ decal_icon = 'icons/obj/closets/decals/crate.dmi'
+ color = COLOR_GRAY40
+
+/decl/closet_appearance/crate/plastic
+ color = COLOR_GRAY80
+
+/decl/closet_appearance/crate/oxygen
+ color = COLOR_CYAN_BLUE
+ decals = list(
+ "crate_stripes" = COLOR_OFF_WHITE,
+ "crate_oxy" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/medical
+ color = COLOR_GRAY80
+ decals = list(
+ "crate_stripe" = COLOR_WARM_YELLOW,
+ "crate_cross" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/medical/trauma
+ decals = list(
+ "crate_stripe" = COLOR_NT_RED,
+ "crate_cross" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/medical/oxygen
+ decals = list(
+ "crate_stripe" = COLOR_BABY_BLUE,
+ "crate_cross" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/medical/toxins
+ decals = list(
+ "crate_stripe" = COLOR_GREEN_GRAY,
+ "crate_cross" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/hydroponics
+ decals = list(
+ "crate_stripe_left" = COLOR_GREEN_GRAY,
+ "crate_stripe_right" = COLOR_GREEN_GRAY
+ )
+
+/decl/closet_appearance/crate/radiation
+ color = COLOR_BROWN_ORANGE
+ extra_decals = list(
+ "crate_radiation_left" = COLOR_WARM_YELLOW,
+ "crate_radiation_right" = COLOR_WARM_YELLOW,
+ "lid_stripes" = COLOR_NT_RED
+ )
+
+/decl/closet_appearance/crate/freezer
+ color = COLOR_BABY_BLUE
+
+/decl/closet_appearance/crate/secure
+ can_lock = TRUE
+
+/decl/closet_appearance/crate/secure/hazard
+ color = COLOR_NT_RED
+ decals = list(
+ "crate_bracing"
+ )
+ extra_decals = list(
+ "crate_stripe_left" = COLOR_OFF_WHITE,
+ "crate_stripe_right" = COLOR_OFF_WHITE,
+ "toxin" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/secure/weapon
+ color = COLOR_GREEN_GRAY
+ decals = list(
+ "crate_bracing"
+ )
+ extra_decals = list(
+ "crate_stripe_left" = COLOR_OFF_WHITE,
+ "crate_stripe_right" = COLOR_OFF_WHITE,
+ "hazard" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/crate/secure/hydroponics
+ extra_decals = list(
+ "crate_stripe_left" = COLOR_GREEN_GRAY,
+ "crate_stripe_right" = COLOR_GREEN_GRAY
+ )
+
+/decl/closet_appearance/crate/secure/shuttle
+ extra_decals = list(
+ "crate_stripe_left" = COLOR_YELLOW_GRAY,
+ "crate_stripe_right" = COLOR_YELLOW_GRAY
+ )
+
+// Large crates.
+/decl/closet_appearance/large_crate
+ base_icon = 'icons/obj/closets/bases/large_crate.dmi'
+ decal_icon = 'icons/obj/closets/decals/large_crate.dmi'
+ decals = null
+ extra_decals = null
+
+/decl/closet_appearance/large_crate/critter
+ decals = list(
+ "airholes"
+ )
+ extra_decals = list(
+ "oxy" = COLOR_WHITE
+ )
+
+/decl/closet_appearance/large_crate/hydroponics
+ extra_decals = list(
+ "stripes" = COLOR_GREEN_GRAY,
+ "text" = COLOR_GREEN_GRAY
+ )
+
+/decl/closet_appearance/large_crate/secure
+ can_lock = TRUE
+
+/decl/closet_appearance/large_crate/secure/hazard
+ color = COLOR_NT_RED
+ decals = list(
+ "crate_bracing"
+ )
+ extra_decals = list(
+ "marking" = COLOR_OFF_WHITE,
+ "text_upper" = COLOR_OFF_WHITE
+ )
+
+// Cabinets.
+/decl/closet_appearance/cabinet
+ base_icon = 'icons/obj/closets/bases/cabinet.dmi'
+ decal_icon = null
+ color = WOOD_COLOR_RICH
+ decals = null
+ extra_decals = null
+
+/decl/closet_appearance/cabinet/secure
+ can_lock = TRUE
+
+// Wall lockers.
+/decl/closet_appearance/wall
+ base_icon = 'icons/obj/closets/bases/wall.dmi'
+ decal_icon = 'icons/obj/closets/decals/wall.dmi'
+ decals = list(
+ "vent"
+ )
+ extra_decals = null
+
+/decl/closet_appearance/wall/emergency
+ decals = null
+ extra_decals = list(
+ "glass" = COLOR_WHITE
+ )
+
+/decl/closet_appearance/wall/medical
+ decals = null
+ color = COLOR_OFF_WHITE
+ extra_decals = list(
+ "stripe_outer" = COLOR_BLUE_GRAY,
+ "stripe_inner" = COLOR_OFF_WHITE,
+ "cross" = COLOR_BLUE_GRAY
+ )
+
+/decl/closet_appearance/wall/shipping
+ color = COLOR_WARM_YELLOW
+ decals = null
+ extra_decals = list(
+ "stripes" = COLOR_BEASTY_BROWN,
+ "glass" = COLOR_WHITE
+ )
+
+/decl/closet_appearance/wall/hydrant
+ color = COLOR_NT_RED
+ decals = null
+ extra_decals = list(
+ "stripes" = COLOR_OFF_WHITE,
+ "glass" = COLOR_WHITE
+ )
+
+// Carts
+/decl/closet_appearance/cart
+ color = COLOR_GRAY20
+ base_icon = 'icons/obj/closets/bases/cart.dmi'
+ decal_icon = 'icons/obj/closets/decals/cart.dmi'
+ decals = null
+ extra_decals = null
+
+/decl/closet_appearance/cart/trash
+ color = COLOR_BOTTLE_GREEN
+
+/decl/closet_appearance/cart/biohazard
+ can_lock = TRUE
+ decals = list(
+ "biohazard" = COLOR_GRAY80
+ )
+
+/decl/closet_appearance/cart/biohazard/alt
+ color = COLOR_SURGERY_BLUE
+ decals = list(
+ "biohazard" = COLOR_RED_GRAY
+ )
+
+// From the Torch
+/decl/closet_appearance/secure_closet/exploration // These three renamed since Polaris actually uses these
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_PURPLE,
+ "exped" = COLOR_PURPLE
+ )
+
+/decl/closet_appearance/secure_closet/exploration/pilot
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_PURPLE,
+ "stripe_vertical_right_full" = COLOR_PURPLE,
+ "exped" = COLOR_PURPLE
+ )
+
+/decl/closet_appearance/secure_closet/exploration/pathfinder
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_PURPLE,
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_PURPLE,
+ "exped" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/command
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/command/bo
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/command/xo
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_CLOSET_GOLD,
+ "command" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/command/co
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_mid_full" = COLOR_OFF_WHITE,
+ "stripe_vertical_right_full" = COLOR_CLOSET_GOLD,
+ "command" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/torch/engineering
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_WARM_YELLOW,
+ "exped" = COLOR_WARM_YELLOW
+ )
+
+/decl/closet_appearance/secure_closet/torch/engineering/atmos
+ extra_decals = list(
+ "stripe_vertical_right_full" = COLOR_WARM_YELLOW,
+ "stripe_vertical_mid_full" = COLOR_CYAN_BLUE,
+ "atmos_upper" = COLOR_WARM_YELLOW
+ )
+
+/decl/closet_appearance/secure_closet/torch/engineering/se
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_WARM_YELLOW,
+ "stripe_vertical_right_full" = COLOR_WARM_YELLOW,
+ "exped" = COLOR_WARM_YELLOW
+ )
+
+/decl/closet_appearance/secure_closet/torch/engineering/ce
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_WARM_YELLOW,
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_WARM_YELLOW,
+ "exped" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/medical
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_BABY_BLUE,
+ "medical" = COLOR_BABY_BLUE
+ )
+
+/decl/closet_appearance/secure_closet/torch/medical/physician
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_BABY_BLUE,
+ "stripe_vertical_right_full" = COLOR_BABY_BLUE,
+ "medical" = COLOR_BABY_BLUE
+ )
+
+/decl/closet_appearance/secure_closet/torch/medical/cmo
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_BABY_BLUE,
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_BABY_BLUE,
+ "medical" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/sol
+ color = COLOR_BABY_BLUE
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/torch/sol/rep
+ color = COLOR_BABY_BLUE
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_OFF_WHITE,
+ "stripe_vertical_right_full" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/torch/corporate
+ color = COLOR_BOTTLE_GREEN
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/torch/corporate/liaison
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_OFF_WHITE,
+ "stripe_vertical_right_full" = COLOR_OFF_WHITE,
+ "command" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/torch/science
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_PURPLE_GRAY,
+ "stripe_vertical_right_full" = COLOR_PURPLE_GRAY,
+ "research" = COLOR_PURPLE_GRAY
+ )
+
+/decl/closet_appearance/secure_closet/torch/science/cso
+ color = COLOR_BOTTLE_GREEN
+ decals = list(
+ "lower_holes"
+ )
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_GOLD,
+ "stripe_vertical_left_full" = COLOR_PURPLE,
+ "stripe_vertical_right_full" = COLOR_PURPLE,
+ "research" = COLOR_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/security
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_NT_RED,
+ "security" = COLOR_NT_RED
+ )
+
+/decl/closet_appearance/secure_closet/torch/security/forensics
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_NT_RED,
+ "forensics" = COLOR_NT_RED
+ )
+
+/decl/closet_appearance/secure_closet/torch/security/warden
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_NT_RED,
+ "stripe_vertical_right_full" = COLOR_NT_RED,
+ "security" = COLOR_NT_RED
+ )
+
+/decl/closet_appearance/secure_closet/torch/security/hos
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_NT_RED,
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_right_full" = COLOR_NT_RED,
+ "security" = COLOR_CLOSET_GOLD
+ )
+
+/decl/closet_appearance/secure_closet/torch/hydroponics
+ extra_decals = list(
+ "stripe_vertical_right_partial" = COLOR_GREEN_GRAY,
+ "stripe_vertical_mid_partial" = COLOR_GREEN_GRAY,
+ "hydro" = COLOR_GREEN_GRAY
+ )
+
+/decl/closet_appearance/secure_closet/torch/cargo
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_BEASTY_BROWN,
+ "cargo_upper" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/torch/cargo/worker
+ extra_decals = list(
+ "stripe_vertical_left_full" = COLOR_BEASTY_BROWN,
+ "stripe_vertical_right_full" = COLOR_BEASTY_BROWN,
+ "cargo_upper" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/torch/cargo/deck_officer
+ extra_decals = list(
+ "stripe_vertical_mid_full" = COLOR_CLOSET_GOLD,
+ "stripe_vertical_left_full" = COLOR_BEASTY_BROWN,
+ "stripe_vertical_right_full" = COLOR_BEASTY_BROWN,
+ "cargo_upper" = COLOR_CLOSET_GOLD
+ )
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions_vr.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions_vr.dm
new file mode 100644
index 0000000000..73b009a1da
--- /dev/null
+++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions_vr.dm
@@ -0,0 +1,38 @@
+/decl/closet_appearance/wall/autolok
+ color = COLOR_GRAY20
+ decals = null
+ extra_decals = list(
+ "stripe_outer" = COLOR_BLUE_GRAY,
+ "stripe_inner" = COLOR_OFF_WHITE
+ )
+
+/decl/closet_appearance/secure_closet/talon
+ color = COLOR_GRAY80
+ decals = list(
+ "lower_holes"
+ )
+
+/decl/closet_appearance/secure_closet/talon/engineer
+ extra_decals = list(
+ "stripes_horizontal" = COLOR_BEASTY_BROWN
+ )
+
+/decl/closet_appearance/secure_closet/talon/guard
+ extra_decals = list(
+ "stripes_horizontal" = COLOR_NT_RED
+ )
+
+/decl/closet_appearance/secure_closet/talon/pilot
+ extra_decals = list(
+ "stripes_horizontal" = COLOR_PURPLE
+ )
+
+/decl/closet_appearance/secure_closet/talon/doctor
+ extra_decals = list(
+ "stripes_horizontal" = COLOR_SKY_BLUE
+ )
+
+/decl/closet_appearance/secure_closet/talon/captain
+ extra_decals = list(
+ "stripes_horizontal" = COLOR_GOLD
+ )
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index 7ea80de7ff..14e1c276b2 100644
--- a/code/game/objects/structures/crates_lockers/closets/coffin.dm
+++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm
@@ -1,30 +1,25 @@
/obj/structure/closet/coffin
name = "coffin"
desc = "It's a burial receptacle for the dearly departed."
- icon_state = "coffin"
- icon_closed = "coffin"
- icon_opened = "coffin_open"
+ icon = 'icons/obj/closets/coffin.dmi'
+
+ icon_state = "closed_unlocked"
seal_tool = /obj/item/weapon/tool/screwdriver
breakout_sound = 'sound/weapons/tablehit1.ogg'
-
-/obj/structure/closet/coffin/update_icon()
- if(!opened)
- icon_state = icon_closed
- else
- icon_state = icon_opened
+ closet_appearance = null // Special icon for us
/* Graves */
/obj/structure/closet/grave
name = "grave"
desc = "Dirt."
- icon_state = "grave"
- icon_closed = "grave"
- icon_opened = "grave_open"
+ icon = 'icons/obj/closets/grave.dmi'
+ icon_state = "closed_unlocked"
seal_tool = null
breakout_sound = 'sound/weapons/thudswoosh.ogg'
anchored = 1
max_closets = 1
opened = 1
+ closet_appearance = null // Special icon for us
/obj/structure/closet/grave/attack_hand(mob/user as mob)
if(opened)
diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
index 3546cd52e7..72a9188d12 100644
--- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
@@ -1,6 +1,4 @@
/obj/structure/closet/crate/critter
name = "critter crate"
desc = "A crate which can sustain life for a while."
- icon_state = "critter"
- icon_opened = "critteropen"
- icon_closed = "critter"
+ closet_appearance = /decl/closet_appearance/large_crate/critter
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
index 1a1bd40e2f..3efa8ded8b 100644
--- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
+++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
@@ -4,15 +4,24 @@
icon = 'icons/obj/egg_vr.dmi'
icon_state = "egg"
density = 0 //Just in case there's a lot of eggs, so it doesn't block hallways/areas.
- icon_closed = "egg"
- icon_opened = "egg_open"
- icon_locked = "egg"
+ var/icon_closed = "egg"
+ var/icon_opened = "egg_open"
+ var/icon_locked = "egg"
open_sound = 'sound/vore/schlorp.ogg'
close_sound = 'sound/vore/schlorp.ogg'
opened = 0
sealed = 0 //Don't touch this.
health = 100
+/obj/structure/closet/secure_closet/egg/update_icon()
+ if(opened)
+ icon_state = icon_opened
+ else
+ if(sealed)
+ icon_state = icon_locked
+ else
+ icon_state = icon_closed
+
/obj/structure/closet/secure_closet/egg/attackby(obj/item/weapon/W, mob/user as mob) //This also prevents crew from welding the eggs and making them unable to be opened.
if(istype(W, /obj/item/weapon/weldingtool))
src.dump_contents()
diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm
index c261d8d2f6..a3515fd3fd 100644
--- a/code/game/objects/structures/crates_lockers/closets/fitness.dm
+++ b/code/game/objects/structures/crates_lockers/closets/fitness.dm
@@ -1,8 +1,7 @@
/obj/structure/closet/athletic_mixed
name = "athletic wardrobe"
desc = "It's a storage unit for athletic wear."
- icon_state = "mixed"
- icon_closed = "mixed"
+ closet_appearance = /decl/closet_appearance/wardrobe/mixed
starts_with = list(
/obj/item/clothing/under/shorts/grey,
@@ -44,8 +43,7 @@
/obj/structure/closet/lasertag/red
name = "red laser tag equipment"
desc = "It's a storage unit for laser tag equipment."
- icon_state = "red"
- icon_closed = "red"
+ closet_appearance = /decl/closet_appearance/wardrobe/red
starts_with = list(
/obj/item/weapon/gun/energy/lasertag/red = 5,
@@ -55,8 +53,7 @@
/obj/structure/closet/lasertag/blue
name = "blue laser tag equipment"
desc = "It's a storage unit for laser tag equipment."
- icon_state = "blue"
- icon_closed = "blue"
+ closet_appearance = /decl/closet_appearance/wardrobe
starts_with = list(
/obj/item/weapon/gun/energy/lasertag/blue = 5,
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index f567cdbd3a..2ca6dc3c6e 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -1,38 +1,23 @@
/obj/structure/closet/cabinet
name = "cabinet"
desc = "Old will forever be in fashion."
- icon_state = "cabinet_closed"
- icon_closed = "cabinet_closed"
- icon_opened = "cabinet_open"
-
-/obj/structure/closet/cabinet/update_icon()
- if(!opened)
- icon_state = icon_closed
- else
- icon_state = icon_opened
+ closet_appearance = /decl/closet_appearance/cabinet
/obj/structure/closet/acloset
name = "strange closet"
desc = "It looks alien!"
- icon_state = "acloset"
- icon_closed = "acloset"
- icon_opened = "aclosetopen"
-
+ closet_appearance = /decl/closet_appearance/alien
/obj/structure/closet/gimmick
name = "administrative supply closet"
desc = "It's a storage unit for things that have no right being here."
- icon_state = "syndicate1"
- icon_closed = "syndicate1"
- icon_opened = "syndicate1open"
+ closet_appearance = /decl/closet_appearance/tactical
anchored = 0
/obj/structure/closet/gimmick/russian
name = "russian surplus closet"
desc = "It's a storage unit for Russian standard-issue surplus."
- icon_state = "syndicate1"
- icon_closed = "syndicate1"
- icon_opened = "syndicate1open"
+ closet_appearance = /decl/closet_appearance/tactical
starts_with = list(
/obj/item/clothing/head/ushanka = 5,
@@ -42,9 +27,7 @@
/obj/structure/closet/gimmick/tacticool
name = "tacticool gear closet"
desc = "It's a storage unit for Tacticool gear."
- icon_state = "syndicate1"
- icon_closed = "syndicate1"
- icon_opened = "syndicate1open"
+ closet_appearance = /decl/closet_appearance/tactical
starts_with = list(
/obj/item/clothing/glasses/eyepatch,
@@ -60,9 +43,7 @@
/obj/structure/closet/thunderdome
name = "\improper Thunderdome closet"
desc = "Everything you need!"
- icon_state = "syndicate"
- icon_closed = "syndicate"
- icon_opened = "syndicateopen"
+ closet_appearance = /decl/closet_appearance/tactical/alt
anchored = 1
/obj/structure/closet/thunderdome/tdred
@@ -78,9 +59,7 @@
/obj/structure/closet/thunderdome/tdgreen
name = "green-team Thunderdome closet"
- icon_state = "syndicate1"
- icon_closed = "syndicate1"
- icon_opened = "syndicate1open"
+ closet_appearance = /decl/closet_appearance/tactical
starts_with = list(
/obj/item/clothing/suit/armor/tdome/green = 3,
@@ -93,8 +72,6 @@
/obj/structure/closet/alien
name = "alien container"
desc = "Contains secrets of the universe."
- icon = 'icons/obj/abductor.dmi'
- icon_state = "alien_locker"
- icon_closed = "alien_locker"
- icon_opened = "alien_locker_open"
+ icon = 'icons/obj/closets/abductor.dmi'
anchored = TRUE
+ closet_appearance = null // special icons
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 cfed9c545f..642935973d 100644
--- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm
@@ -11,8 +11,7 @@
/obj/structure/closet/gmcloset
name = "formal closet"
desc = "It's a storage unit for formal clothing."
- icon_state = "black"
- icon_closed = "black"
+ closet_appearance = /decl/closet_appearance/wardrobe/black
starts_with = list(
/obj/item/clothing/head/that = 2,
@@ -37,8 +36,7 @@
/obj/structure/closet/chefcloset
name = "chef's closet"
desc = "It's a storage unit for foodservice garments."
- icon_state = "black"
- icon_closed = "black"
+ closet_appearance = /decl/closet_appearance/wardrobe/black
starts_with = list(
/obj/item/clothing/under/sundress,
@@ -55,8 +53,7 @@
/obj/structure/closet/jcloset
name = "custodial closet"
desc = "It's a storage unit for janitorial clothes and gear."
- icon_state = "mixed"
- icon_closed = "mixed"
+ closet_appearance = /decl/closet_appearance/wardrobe/mixed
starts_with = list(
/obj/item/clothing/under/rank/janitor,
@@ -79,8 +76,7 @@
/obj/structure/closet/lawcloset
name = "legal closet"
desc = "It's a storage unit for courtroom apparel and items."
- icon_state = "blue"
- icon_closed = "blue"
+ closet_appearance = /decl/closet_appearance/wardrobe
starts_with = list(
/obj/item/clothing/under/lawyer/female = 2,
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
index 695b5575d2..66af8329f5 100644
--- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm
@@ -1,14 +1,10 @@
/obj/structure/closet/l3closet
name = "level-3 biohazard suit closet"
desc = "It's a storage unit for level-3 biohazard gear."
- icon_state = "bio"
- icon_closed = "bio"
- icon_opened = "bioopen"
+ closet_appearance = /decl/closet_appearance/bio
/obj/structure/closet/l3closet/general
- icon_state = "bio_general"
- icon_closed = "bio_general"
- icon_opened = "bio_generalopen"
+ closet_appearance = /decl/closet_appearance/bio
starts_with = list(
/obj/item/clothing/suit/bio_suit/general,
@@ -16,9 +12,7 @@
/obj/structure/closet/l3closet/virology
- icon_state = "bio_virology"
- icon_closed = "bio_virology"
- icon_opened = "bio_virologyopen"
+ closet_appearance = /decl/closet_appearance/bio/virology
starts_with = list(
/obj/item/clothing/suit/bio_suit/virology,
@@ -28,9 +22,7 @@
/obj/structure/closet/l3closet/security
- icon_state = "bio_security"
- icon_closed = "bio_security"
- icon_opened = "bio_securityopen"
+ closet_appearance = /decl/closet_appearance/bio/security
starts_with = list(
/obj/item/clothing/suit/bio_suit/security,
@@ -38,9 +30,7 @@
///obj/item/weapon/gun/energy/taser/xeno/sec) //VOREStation Removal
/obj/structure/closet/l3closet/janitor
- icon_state = "bio_janitor"
- icon_closed = "bio_janitor"
- icon_opened = "bio_janitoropen"
+ closet_appearance = /decl/closet_appearance/bio/janitor
starts_with = list(
/obj/item/clothing/suit/bio_suit/janitor = 2,
@@ -50,9 +40,7 @@
/obj/structure/closet/l3closet/scientist
- icon_state = "bio_scientist"
- icon_closed = "bio_scientist"
- icon_opened = "bio_scientistopen"
+ closet_appearance = /decl/closet_appearance/bio/science
starts_with = list(
/obj/item/clothing/suit/bio_suit/scientist,
@@ -65,9 +53,7 @@
/obj/structure/closet/l3closet/medical
- icon_state = "bio_scientist"
- icon_closed = "bio_scientist"
- icon_opened = "bio_scientistopen"
+ closet_appearance = /decl/closet_appearance/bio/science
starts_with = list(
/obj/item/clothing/suit/bio_suit/general = 3,
diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet_vr.dm b/code/game/objects/structures/crates_lockers/closets/l3closet_vr.dm
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
index 40b6ec68b9..feaa63e39f 100644
--- a/code/game/objects/structures/crates_lockers/closets/malfunction.dm
+++ b/code/game/objects/structures/crates_lockers/closets/malfunction.dm
@@ -1,8 +1,6 @@
/obj/structure/closet/malf/suits
desc = "It's a storage unit for operational gear."
- icon_state = "syndicate"
- icon_closed = "syndicate"
- icon_opened = "syndicateopen"
+ closet_appearance = /decl/closet_appearance/tactical
starts_with = list(
/obj/item/weapon/tank/jetpack/void,
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 851da13468..99f486cb7c 100644
--- a/code/game/objects/structures/crates_lockers/closets/misc_vr.dm
+++ b/code/game/objects/structures/crates_lockers/closets/misc_vr.dm
@@ -37,14 +37,8 @@
/obj/structure/closet/secure_closet/explorer
name = "explorer locker"
- icon = 'icons/obj/closet_vr.dmi'
- icon_state = "secureexp1"
- icon_closed = "secureexp"
- icon_locked = "secureexp1"
- icon_opened = "secureexpopen"
- icon_broken = "secureexpbroken"
- icon_off = "secureexpoff"
req_access = list(access_explorer)
+ closet_appearance = /decl/closet_appearance/secure_closet/exploration
starts_with = list(
/obj/item/clothing/under/explorer,
@@ -81,13 +75,8 @@
/obj/structure/closet/secure_closet/sar
name = "field medic locker"
desc = "Supplies for a wilderness first responder."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_medical_equip)
+ closet_appearance = /decl/closet_appearance/secure_closet/medical
starts_with = list(
/obj/item/weapon/storage/backpack/dufflebag/emt,
@@ -128,6 +117,7 @@
/obj/structure/closet/secure_closet/pilot
name = "pilot locker"
req_access = list(access_pilot)
+ closet_appearance = /decl/closet_appearance/secure_closet/exploration/pilot
starts_with = list(
/obj/item/weapon/storage/backpack/parachute,
@@ -162,14 +152,8 @@
/obj/structure/closet/secure_closet/pathfinder
name = "pathfinder locker"
- icon = 'icons/obj/closet_vr.dmi'
- icon_state = "secureexp1"
- icon_closed = "secureexp"
- icon_locked = "secureexp1"
- icon_opened = "secureexpopen"
- icon_broken = "secureexpbroken"
- icon_off = "secureexpoff"
req_access = list(access_gateway)
+ closet_appearance = /decl/closet_appearance/secure_closet/exploration/pathfinder
starts_with = list(
/obj/item/clothing/under/explorer,
@@ -217,3 +201,19 @@
/obj/item/seeds/kudzuseed,
/obj/item/seeds/libertymycelium,
/obj/item/seeds/reishimycelium)
+
+/obj/structure/closet/autolok_wall
+ name = "autolok suit storage"
+ desc = "It's wall-mounted storage unit for an AutoLok suit."
+ icon = 'icons/obj/closets/bases/wall.dmi'
+ closet_appearance = /decl/closet_appearance/wall/autolok
+ anchored = 1
+ density = 0
+ wall_mounted = 1
+ store_mobs = 0
+
+ starts_with = list(
+ /obj/item/clothing/suit/space/void/autolok,
+ /obj/item/weapon/tank/emergency/oxygen/double,
+ /obj/item/device/suit_cooling_unit/emergency
+ )
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
index 516d2a645e..52b949f809 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm
@@ -1,24 +1,7 @@
/obj/structure/closet/secure_closet/bar
name = "booze closet"
req_access = list(access_bar)
- icon_state = "cabinetdetective_locked"
- icon_closed = "cabinetdetective"
- icon_locked = "cabinetdetective_locked"
- icon_opened = "cabinetdetective_open"
- icon_broken = "cabinetdetective_broken"
- icon_off = "cabinetdetective_broken"
+ closet_appearance = /decl/closet_appearance/cabinet/secure
starts_with = list(
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 10)
-
-/obj/structure/closet/secure_closet/bar/update_icon()
- if(broken)
- icon_state = icon_broken
- else
- if(!opened)
- if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- else
- icon_state = icon_opened
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 d7b6ed4e80..0196736d8d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -1,12 +1,7 @@
/obj/structure/closet/secure_closet/cargotech
name = "cargo technician's locker"
req_access = list(access_cargo)
- icon_state = "securecargo1"
- icon_closed = "securecargo"
- icon_locked = "securecargo1"
- icon_opened = "securecargoopen"
- icon_broken = "securecargobroken"
- icon_off = "securecargooff"
+ closet_appearance = /decl/closet_appearance/secure_closet/cargo
starts_with = list(
/obj/item/clothing/under/rank/cargotech,
@@ -34,12 +29,7 @@
/obj/structure/closet/secure_closet/quartermaster
name = "quartermaster's locker"
req_access = list(access_qm)
- icon_state = "secureqm1"
- icon_closed = "secureqm"
- icon_locked = "secureqm1"
- icon_opened = "secureqmopen"
- icon_broken = "secureqmbroken"
- icon_off = "secureqmoff"
+ closet_appearance = /decl/closet_appearance/secure_closet/cargo/qm
starts_with = list(
/obj/item/clothing/under/rank/cargo,
@@ -70,13 +60,8 @@
/obj/structure/closet/secure_closet/miner
name = "miner's equipment"
- icon_state = "miningsec1"
- icon_closed = "miningsec"
- icon_locked = "miningsec1"
- icon_opened = "miningsecopen"
- icon_broken = "miningsecbroken"
- icon_off = "miningsecoff"
req_access = list(access_mining)
+ closet_appearance = /decl/closet_appearance/secure_closet/mining
starts_with = list(
/obj/item/device/radio/headset/headset_mine,
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 4710efdbd4..feef58e05a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -1,12 +1,7 @@
/obj/structure/closet/secure_closet/engineering_chief
name = "chief engineer's locker"
- icon_state = "securece1"
- icon_closed = "securece"
- icon_locked = "securece1"
- icon_opened = "secureceopen"
- icon_broken = "securecebroken"
- icon_off = "secureceoff"
req_access = list(access_ce)
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
@@ -47,13 +42,8 @@
/obj/structure/closet/secure_closet/engineering_electrical
name = "electrical supplies"
- icon_state = "secureengelec1"
- icon_closed = "secureengelec"
- icon_locked = "secureengelec1"
- icon_opened = "toolclosetopen"
- icon_broken = "secureengelecbroken"
- icon_off = "secureengelecoff"
req_access = list(access_engine_equip)
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/electrical
starts_with = list(
/obj/item/clothing/gloves/yellow = 2,
@@ -64,13 +54,8 @@
/obj/structure/closet/secure_closet/engineering_welding
name = "welding supplies"
- icon_state = "secureengweld1"
- icon_closed = "secureengweld"
- icon_locked = "secureengweld1"
- icon_opened = "toolclosetopen"
- icon_broken = "secureengweldbroken"
- icon_off = "secureengweldoff"
req_access = list(access_construction)
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/welding
starts_with = list(
/obj/item/clothing/head/welding = 3,
@@ -80,13 +65,8 @@
/obj/structure/closet/secure_closet/engineering_personal
name = "engineer's locker"
- icon_state = "secureeng1"
- icon_closed = "secureeng"
- icon_locked = "secureeng1"
- icon_opened = "secureengopen"
- icon_broken = "secureengbroken"
- icon_off = "secureengoff"
req_access = list(access_engine_equip)
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
@@ -116,13 +96,8 @@
/obj/structure/closet/secure_closet/atmos_personal
name = "technician's locker"
- icon_state = "secureatm1"
- icon_closed = "secureatm"
- icon_locked = "secureatm1"
- icon_opened = "secureatmopen"
- icon_broken = "secureatmbroken"
- icon_off = "secureatmoff"
req_access = list(access_atmospherics)
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/atmos
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
index f6ca40fe2b..afb8b1c3ba 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm
@@ -1,20 +1,6 @@
-/obj/structure/closet/secure_closet/freezer
-
-/obj/structure/closet/secure_closet/freezer/update_icon()
- if(broken)
- icon_state = icon_broken
- else
- if(!opened)
- if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- else
- icon_state = icon_opened
-
/obj/structure/closet/secure_closet/freezer/kitchen
name = "kitchen cabinet"
- req_access = list()
+ req_access = list(access_kitchen)
starts_with = list(
/obj/item/weapon/reagent_containers/food/condiment/flour = 7,
@@ -26,12 +12,8 @@
/obj/structure/closet/secure_closet/freezer/meat
name = "meat fridge"
- icon_state = "fridge1"
- icon_closed = "fridge"
- icon_locked = "fridge1"
- icon_opened = "fridgeopen"
- icon_broken = "fridgebroken"
- icon_off = "fridge1"
+ icon = 'icons/obj/closets/fridge.dmi'
+ closet_appearance = null
starts_with = list(
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey = 10)
@@ -39,12 +21,8 @@
/obj/structure/closet/secure_closet/freezer/fridge
name = "refrigerator"
- icon_state = "fridge1"
- icon_closed = "fridge"
- icon_locked = "fridge1"
- icon_opened = "fridgeopen"
- icon_broken = "fridgebroken"
- icon_off = "fridge1"
+ icon = 'icons/obj/closets/fridge.dmi'
+ closet_appearance = null
starts_with = list(
/obj/item/weapon/reagent_containers/food/drinks/milk = 6,
@@ -55,12 +33,8 @@
/obj/structure/closet/secure_closet/freezer/money
name = "freezer"
- icon_state = "fridge1"
- icon_closed = "fridge"
- icon_locked = "fridge1"
- icon_opened = "fridgeopen"
- icon_broken = "fridgebroken"
- icon_off = "fridge1"
+ icon = 'icons/obj/closets/fridge.dmi'
+ closet_appearance = null
req_access = list(access_heads_vault)
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index 2be8e52db1..b69a3ff368 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -2,12 +2,8 @@
name = "gun cabinet"
icon = 'icons/obj/guncabinet.dmi'
icon_state = "base"
- icon_off ="base"
- icon_broken ="base"
- icon_locked ="base"
- icon_closed ="base"
- icon_opened = "base"
req_one_access = list(access_armory)
+ closet_appearance = null
/obj/structure/closet/secure_closet/guncabinet/Initialize()
. = ..()
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 71c76bb7e3..b97f0bf2f7 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm
@@ -1,12 +1,7 @@
/obj/structure/closet/secure_closet/hydroponics
name = "botanist's locker"
req_access = list(access_hydroponics)
- icon_state = "hydrosecure1"
- icon_closed = "hydrosecure"
- icon_locked = "hydrosecure1"
- icon_opened = "hydrosecureopen"
- icon_broken = "hydrosecurebroken"
- icon_off = "hydrosecureoff"
+ closet_appearance = /decl/closet_appearance/secure_closet/hydroponics
starts_with = list(
/obj/item/weapon/storage/bag/plants,
@@ -32,12 +27,7 @@
/obj/structure/closet/secure_closet/hydroponics/sci
name = "xenoflorist's locker"
req_access = list(access_xenobiology)
- icon_state = "scihydrosecure1"
- icon_closed = "scihydrosecure"
- icon_locked = "scihydrosecure1"
- icon_opened = "scihydrosecureopen"
- icon_broken = "scihydrosecurebroken"
- icon_off = "scihydrosecureoff"
+ closet_appearance = /decl/closet_appearance/secure_closet/hydroponics
/obj/structure/closet/secure_closet/hydroponics/sci/Initialize()
starts_with += /obj/item/clothing/head/bio_hood/scientist
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 86cb24dc8c..62e061a374 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -1,13 +1,8 @@
/obj/structure/closet/secure_closet/medical1
name = "medicine closet"
desc = "Filled with medical junk."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_medical)
+ closet_appearance = /decl/closet_appearance/secure_closet/medical
starts_with = list(
/obj/item/weapon/storage/box/autoinjectors,
@@ -21,12 +16,6 @@
/obj/structure/closet/secure_closet/medical2
name = "anesthetics closet"
desc = "Used to knock people out."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_surgery)
starts_with = list(
@@ -37,12 +26,7 @@
/obj/structure/closet/secure_closet/medical3
name = "medical doctor's locker"
req_access = list(access_medical_equip)
- icon_state = "securemed1"
- icon_closed = "securemed"
- icon_locked = "securemed1"
- icon_opened = "securemedopen"
- icon_broken = "securemedbroken"
- icon_off = "securemedoff"
+ closet_appearance = /decl/closet_appearance/secure_closet/medical/alt
starts_with = list(
/obj/item/clothing/under/rank/medical,
@@ -105,13 +89,8 @@
/obj/structure/closet/secure_closet/paramedic
name = "paramedic locker"
desc = "Supplies for a first responder."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_medical_equip)
+ closet_appearance = /decl/closet_appearance/secure_closet/medical
starts_with = list(
/obj/item/weapon/storage/backpack/dufflebag/emt,
@@ -141,12 +120,7 @@
/obj/structure/closet/secure_closet/CMO
name = "chief medical officer's locker"
req_access = list(access_cmo)
- icon_state = "cmosecure1"
- icon_closed = "cmosecure"
- icon_locked = "cmosecure1"
- icon_opened = "cmosecureopen"
- icon_broken = "cmosecurebroken"
- icon_off = "cmosecureoff"
+ closet_appearance = /decl/closet_appearance/secure_closet/cmo
starts_with = list(
/obj/item/clothing/under/rank/chief_medical_officer,
@@ -155,7 +129,7 @@
/obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
/obj/item/weapon/cartridge/cmo,
/obj/item/clothing/gloves/sterile/latex,
- /obj/item/clothing/shoes/brown ,
+ /obj/item/clothing/shoes/brown,
/obj/item/device/radio/headset/heads/cmo,
/obj/item/device/radio/headset/heads/cmo/alt,
/obj/item/device/flash,
@@ -208,13 +182,8 @@
/obj/structure/closet/secure_closet/chemical
name = "chemical closet"
desc = "Store dangerous chemicals in here."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_chemistry)
+ closet_appearance = /decl/closet_appearance/secure_closet/medical
starts_with = list(
/obj/item/weapon/storage/box/pillbottles = 2,
@@ -230,13 +199,8 @@
/obj/structure/closet/secure_closet/psych
name = "psychiatric closet"
desc = "Store psychology tools and medicines in here."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_psychiatrist)
+ closet_appearance = /decl/closet_appearance/secure_closet/medical/alt
starts_with = list(
/obj/item/clothing/under/rank/psych,
@@ -257,30 +221,14 @@
/obj/structure/closet/secure_closet/medical_wall
name = "first aid closet"
desc = "It's a secure wall-mounted storage unit for first aid supplies."
- icon_state = "medical_wall_locked"
- icon_closed = "medical_wall_unlocked"
- icon_locked = "medical_wall_locked"
- icon_opened = "medical_wall_open"
- icon_broken = "medical_wall_spark"
- icon_off = "medical_wall_off"
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
anchored = 1
density = 0
wall_mounted = 1
+ store_mobs = 0
req_access = list(access_medical_equip)
-
-/obj/structure/closet/secure_closet/medical_wall/update_icon()
- if(broken)
- icon_state = icon_broken
- else
- if(!opened)
- if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- else
- icon_state = icon_opened
+ closet_appearance = /decl/closet_appearance/wall/medical
/obj/structure/closet/secure_closet/medical_wall/pills
name = "pill cabinet"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
index d75cf18e5a..8028f06532 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm
@@ -28,30 +28,13 @@
/obj/structure/closet/secure_closet/personal/cabinet
- icon_state = "cabinetdetective_locked"
- icon_closed = "cabinetdetective"
- icon_locked = "cabinetdetective_locked"
- icon_opened = "cabinetdetective_open"
- icon_broken = "cabinetdetective_broken"
- icon_off = "cabinetdetective_broken"
+ closet_appearance = /decl/closet_appearance/cabinet/secure
starts_with = list(
/obj/item/weapon/storage/backpack/satchel/withwallet,
/obj/item/device/radio/headset
)
-/obj/structure/closet/secure_closet/personal/cabinet/update_icon()
- if(broken)
- icon_state = icon_broken
- else
- if(!opened)
- if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- else
- icon_state = icon_opened
-
/obj/structure/closet/secure_closet/personal/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (src.opened)
if (istype(W, /obj/item/weapon/grab))
@@ -69,8 +52,6 @@
if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name)))
//they can open all lockers, or nobody owns this, or they own this locker
src.locked = !( src.locked )
- if(src.locked) src.icon_state = src.icon_locked
- else src.icon_state = src.icon_closed
if(!src.registered_name)
src.registered_name = I.registered_name
@@ -86,14 +67,14 @@
playsound(src, "sparks", 50, 1)
else
to_chat(user, "Access Denied")
- return
+ update_icon()
/obj/structure/closet/secure_closet/personal/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
if(!broken)
broken = 1
locked = 0
desc = "It appears to be broken."
- icon_state = src.icon_broken
+ update_icon()
if(visual_feedback)
visible_message("[visual_feedback]", "[audible_feedback]")
return 1
@@ -115,7 +96,6 @@
if(!src.close())
return
src.locked = 1
- src.icon_state = src.icon_locked
+ update_icon()
src.registered_name = null
src.desc = "It's a secure locker for personnel. The first card swiped gains control."
- return
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 4e78a613e4..af7f37bb6d 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -1,12 +1,7 @@
/obj/structure/closet/secure_closet/scientist
name = "scientist's locker"
- icon_state = "secureres1"
- icon_closed = "secureres"
- icon_locked = "secureres1"
- icon_opened = "secureresopen"
- icon_broken = "secureresbroken"
- icon_off = "secureresoff"
req_access = list(access_tox_storage)
+ closet_appearance = /decl/closet_appearance/secure_closet/expedition/science
starts_with = list(
/obj/item/clothing/under/rank/scientist,
@@ -28,13 +23,8 @@
/obj/structure/closet/secure_closet/RD
name = "research director's locker"
- icon_state = "rdsecure1"
- icon_closed = "rdsecure"
- icon_locked = "rdsecure1"
- icon_opened = "rdsecureopen"
- icon_broken = "rdsecurebroken"
- icon_off = "rdsecureoff"
req_access = list(access_rd)
+ closet_appearance = /decl/closet_appearance/secure_closet/rd
starts_with = list(
/obj/item/clothing/suit/bio_suit/scientist,
@@ -55,3 +45,38 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/science,
/obj/item/clothing/shoes/boots/winter/science,
/obj/item/weapon/bluespace_harpoon) //VOREStation Add
+
+/obj/structure/closet/secure_closet/xenoarchaeologist
+ name = "Xenoarchaeologist Locker"
+ req_access = list(access_tox_storage)
+ closet_appearance = /decl/closet_appearance/secure_closet/expedition/science
+
+ starts_with = list(
+ /obj/item/clothing/under/rank/scientist,
+ /obj/item/clothing/suit/storage/toggle/labcoat,
+ /obj/item/clothing/shoes/white,
+ /obj/item/weapon/melee/umbrella, // vorestation addition,
+ /obj/item/clothing/glasses/science,
+ /obj/item/device/radio/headset/headset_sci,
+ /obj/item/weapon/storage/belt/archaeology,
+ /obj/item/weapon/storage/excavation)
+
+/obj/structure/closet/excavation
+ name = "Excavation tools"
+
+ starts_with = list(
+ /obj/item/weapon/storage/belt/archaeology,
+ /obj/item/weapon/storage/excavation,
+ /obj/item/device/flashlight/lantern,
+ /obj/item/device/ano_scanner,
+ /obj/item/device/depth_scanner,
+ /obj/item/device/core_sampler,
+ /obj/item/device/gps,
+ /obj/item/device/beacon_locator,
+ /obj/item/device/radio/beacon,
+ /obj/item/clothing/glasses/meson,
+ /obj/item/weapon/pickaxe,
+ /obj/item/device/measuring_tape,
+ /obj/item/weapon/pickaxe/hand,
+ /obj/item/weapon/storage/bag/fossils,
+ /obj/item/weapon/hand_labeler)
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index c5732a337e..e5fc47c64a 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -8,54 +8,43 @@
var/locked = 1
var/broken = 0
var/large = 1
- icon_closed = "secure"
- var/icon_locked = "secure1"
- icon_opened = "secureopen"
- var/icon_broken = "securebroken"
- var/icon_off = "secureoff"
wall_mounted = 0 //never solid (You can always pass over it)
health = 200
+ closet_appearance = /decl/closet_appearance/secure_closet
+
/obj/structure/closet/secure_closet/can_open()
- if(src.locked)
+ if(locked)
return 0
return ..()
-/obj/structure/closet/secure_closet/close()
- if(..())
- if(broken)
- icon_state = src.icon_off
- return 1
- else
- return 0
-
/obj/structure/closet/secure_closet/emp_act(severity)
for(var/obj/O in src)
O.emp_act(severity)
if(!broken)
if(prob(50/severity))
- src.locked = !src.locked
- src.update_icon()
+ locked = !locked
+ update_icon()
if(prob(20/severity) && !opened)
if(!locked)
open()
else
- src.req_access = list()
- src.req_access += pick(get_all_station_access())
+ req_access = list()
+ req_access += pick(get_all_station_access())
..()
/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob)
- if(src.opened)
+ if(opened)
to_chat(user, "Close the locker first.")
return
- if(src.broken)
+ if(broken)
to_chat(user, "The locker appears to be broken.")
return
if(user.loc == src)
to_chat(user, "You can't reach the lock from inside.")
return
- if(src.allowed(user))
- src.locked = !src.locked
+ if(allowed(user))
+ locked = !locked
playsound(src, 'sound/machines/click.ogg', 15, 1, -3)
for(var/mob/O in viewers(user, 3))
if((O.client && !( O.blinded )))
@@ -65,13 +54,13 @@
to_chat(user, "Access Denied")
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(src.opened)
+ if(opened)
if(istype(W, /obj/item/weapon/storage/laundry_basket))
return ..(W,user)
if(istype(W, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = W
- if(src.large)
- src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
+ if(large)
+ MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
else
to_chat(user, "The locker is too small to stuff [G.affecting] into!")
if(isrobot(user))
@@ -80,11 +69,11 @@
return
user.drop_item()
if(W)
- W.forceMove(src.loc)
+ W.forceMove(loc)
else if(istype(W, /obj/item/weapon/melee/energy/blade))
if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
- spark_system.set_up(5, 0, src.loc)
+ spark_system.set_up(5, 0, loc)
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src, "sparks", 50, 1)
@@ -109,8 +98,6 @@
broken = 1
locked = 0
desc = "It appears to be broken."
- icon_state = icon_off
- flick(icon_broken, src)
if(visual_feedback)
visible_message(visual_feedback, audible_feedback)
@@ -118,14 +105,15 @@
visible_message("\The [src] has been broken by \the [user] with \an [emag_source]!", "You hear a faint electrical spark.")
else
visible_message("\The [src] sparks and breaks open!", "You hear a faint electrical spark.")
+ update_icon()
return 1
/obj/structure/closet/secure_closet/attack_hand(mob/user as mob)
- src.add_fingerprint(user)
- if(src.locked)
- src.togglelock(user)
+ add_fingerprint(user)
+ if(locked)
+ togglelock(user)
else
- src.toggle(user)
+ toggle(user)
/obj/structure/closet/secure_closet/AltClick()
..()
@@ -140,25 +128,22 @@
return
if(ishuman(usr) || isrobot(usr))
- src.add_fingerprint(usr)
- src.togglelock(usr)
+ add_fingerprint(usr)
+ togglelock(usr)
else
to_chat(usr, "This mob type can't use this verb.")
-/obj/structure/closet/secure_closet/update_icon()//Putting the sealed stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
- overlays.Cut()
-
- if(!opened)
- if(broken)
- icon_state = icon_off
- else if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- if(sealed)
- overlays += "sealed"
+/obj/structure/closet/secure_closet/update_icon()
+ if(opened)
+ icon_state = "open"
else
- icon_state = icon_opened
+ if(broken)
+ icon_state = "closed_emagged[sealed ? "_welded" : ""]"
+ else
+ if(locked)
+ icon_state = "closed_locked[sealed ? "_welded" : ""]"
+ else
+ icon_state = "closed_unlocked[sealed ? "_welded" : ""]"
/obj/structure/closet/secure_closet/req_breakout()
if(!opened && locked) return 1
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 9a304932c1..a3cb10f8d0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -1,12 +1,7 @@
/obj/structure/closet/secure_closet/captains
name = "colony director's locker"
- icon_state = "capsecure1"
- icon_closed = "capsecure"
- icon_locked = "capsecure1"
- icon_opened = "capsecureopen"
- icon_broken = "capsecurebroken"
- icon_off = "capsecureoff"
req_access = list(access_captain)
+ closet_appearance = /decl/closet_appearance/secure_closet/command
starts_with = list(
/obj/item/weapon/storage/backpack/dufflebag/captain,
@@ -24,13 +19,8 @@
/obj/structure/closet/secure_closet/hop
name = "head of personnel's locker"
- icon_state = "hopsecure1"
- icon_closed = "hopsecure"
- icon_locked = "hopsecure1"
- icon_opened = "hopsecureopen"
- icon_broken = "hopsecurebroken"
- icon_off = "hopsecureoff"
req_access = list(access_hop)
+ closet_appearance = /decl/closet_appearance/secure_closet/command/hop
starts_with = list(
/obj/item/clothing/suit/storage/vest,
@@ -48,13 +38,8 @@
/obj/structure/closet/secure_closet/hop2
name = "head of personnel's attire"
- icon_state = "hopsecure1"
- icon_closed = "hopsecure"
- icon_locked = "hopsecure1"
- icon_opened = "hopsecureopen"
- icon_broken = "hopsecurebroken"
- icon_off = "hopsecureoff"
req_access = list(access_hop)
+ closet_appearance = /decl/closet_appearance/secure_closet/command/hop
starts_with = list(
/obj/item/clothing/under/rank/head_of_personnel,
@@ -80,14 +65,9 @@
/obj/structure/closet/secure_closet/hos
name = "head of security's locker"
req_access = list(access_hos)
- icon_state = "hossecure1"
- icon_closed = "hossecure"
- icon_locked = "hossecure1"
- icon_opened = "hossecureopen"
- icon_broken = "hossecurebroken"
- icon_off = "hossecureoff"
req_access = list(access_hos)
storage_capacity = 2.5 * MOB_MEDIUM
+ closet_appearance = /decl/closet_appearance/secure_closet/security/hos
starts_with = list(
/obj/item/clothing/head/helmet/HoS,
@@ -136,13 +116,8 @@
/obj/structure/closet/secure_closet/warden
name = "warden's locker"
- icon_state = "wardensecure1"
- icon_closed = "wardensecure"
- icon_locked = "wardensecure1"
- icon_opened = "wardensecureopen"
- icon_broken = "wardensecurebroken"
- icon_off = "wardensecureoff"
req_access = list(access_armory)
+ closet_appearance = /decl/closet_appearance/secure_closet/security/warden
starts_with = list(
/obj/item/clothing/suit/storage/vest/warden,
@@ -188,13 +163,8 @@
/obj/structure/closet/secure_closet/security
name = "security officer's locker"
- icon_state = "sec1"
- icon_closed = "sec"
- icon_locked = "sec1"
- icon_opened = "secopen"
- icon_broken = "secbroken"
- icon_off = "secoff"
req_access = list(access_brig)
+ closet_appearance = /decl/closet_appearance/secure_closet/security
starts_with = list(
/obj/item/clothing/suit/storage/vest/officer,
@@ -255,13 +225,8 @@
/obj/structure/closet/secure_closet/detective
name = "detective's cabinet"
- icon_state = "cabinetdetective_locked"
- icon_closed = "cabinetdetective"
- icon_locked = "cabinetdetective_locked"
- icon_opened = "cabinetdetective_open"
- icon_broken = "cabinetdetective_broken"
- icon_off = "cabinetdetective_broken"
req_access = list(access_forensics_lockers)
+ closet_appearance = /decl/closet_appearance/cabinet/secure
starts_with = list(
/obj/item/clothing/accessory/badge/holo/detective,
@@ -281,19 +246,6 @@
/obj/item/weapon/storage/bag/detective,
/obj/item/device/tape/random = 3)
-/obj/structure/closet/secure_closet/detective/update_icon()
- if(broken)
- icon_state = icon_broken
- else
- if(!opened)
- if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- else
- icon_state = icon_opened
-
-
/obj/structure/closet/secure_closet/injection
name = "lethal injections locker"
req_access = list(access_captain)
@@ -340,26 +292,9 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
/obj/structure/closet/secure_closet/wall
name = "wall locker"
- icon_state = "wall-locker1"
- icon_closed = "wall-locker"
- icon_locked = "wall-locker1"
- icon_opened = "wall-lockeropen"
- icon_broken = "wall-lockerbroken"
- icon_off = "wall-lockeroff"
req_access = list(access_security)
+ closet_appearance = /decl/closet_appearance/wall
density = 1
//too small to put a man in
large = 0
-
-/obj/structure/closet/secure_closet/wall/update_icon()
- if(broken)
- icon_state = icon_broken
- else
- if(!opened)
- if(locked)
- icon_state = icon_locked
- else
- icon_state = icon_closed
- else
- icon_state = icon_opened
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 7631fa0d51..ced40da850 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
@@ -1,12 +1,7 @@
/obj/structure/closet/secure_closet/hos
name = "head of security's attire"
- icon_state = "hossecure1"
- icon_closed = "hossecure"
- icon_locked = "hossecure1"
- icon_opened = "hossecureopen"
- icon_broken = "hossecurebroken"
- icon_off = "hossecureoff"
req_access = list(access_hos)
+ closet_appearance = /decl/closet_appearance/secure_closet/security/hos
storage_capacity = 2.5 * MOB_MEDIUM
starts_with = list(
@@ -30,13 +25,8 @@
/obj/structure/closet/secure_closet/hos2
name = "head of security's gear"
- icon_state = "hossecure1"
- icon_closed = "hossecure"
- icon_locked = "hossecure1"
- icon_opened = "hossecureopen"
- icon_broken = "hossecurebroken"
- icon_off = "hossecureoff"
req_access = list(access_hos)
+ closet_appearance = /decl/closet_appearance/secure_closet/security/hos
storage_capacity = 2.5 * MOB_MEDIUM
starts_with = list(
@@ -63,12 +53,6 @@
/obj/structure/closet/secure_closet/nanotrasen_security
name = "NanoTrasen security officer's locker"
icon = 'icons/obj/closet_vr.dmi'
- icon_state = "secC1"
- icon_closed = "secC"
- icon_locked = "secC1"
- icon_opened = "secCopen"
- icon_broken = "secCbroken"
- icon_off = "seCcoff"
req_access = list(access_brig)
storage_capacity = 3.5 * MOB_MEDIUM
@@ -110,12 +94,6 @@
/obj/structure/closet/secure_closet/nanotrasen_commander
name = "NanoTrasen commander's locker"
icon = 'icons/obj/closet_vr.dmi'
- icon_state = "secC1"
- icon_closed = "secC"
- icon_locked = "secC1"
- icon_opened = "secCopen"
- icon_broken = "secCbroken"
- icon_off = "seCcoff"
req_access = list(access_brig)
storage_capacity = 3.5 * MOB_MEDIUM
@@ -165,12 +143,6 @@
/obj/structure/closet/secure_closet/nanotrasen_warden
name = "NanoTrasen warden's locker"
icon = 'icons/obj/closet_vr.dmi'
- icon_state = "secC1"
- icon_closed = "secC"
- icon_locked = "secC1"
- icon_opened = "secCopen"
- icon_broken = "secCbroken"
- icon_off = "seCcoff"
req_access = list(access_brig)
storage_capacity = 3.5 * MOB_MEDIUM
diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
index f608c05b26..dee5e284a3 100644
--- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm
@@ -1,9 +1,7 @@
/obj/structure/closet/syndicate
name = "armory closet"
desc = "Why is this here?"
- icon_state = "syndicate"
- icon_closed = "syndicate"
- icon_opened = "syndicateopen"
+ closet_appearance = /decl/closet_appearance/tactical/alt
/obj/structure/closet/syndicate/personal
desc = "It's a storage unit for operative gear."
diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
index 903a058f9c..8ccf80bf18 100644
--- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm
@@ -15,9 +15,7 @@
/obj/structure/closet/emcloset
name = "emergency closet"
desc = "It's a storage unit for emergency breathmasks and O2 tanks."
- icon_state = "emergency"
- icon_closed = "emergency"
- icon_opened = "emergencyopen"
+ closet_appearance = /decl/closet_appearance/oxygen
/obj/structure/closet/emcloset/Initialize()
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10)))
@@ -64,9 +62,7 @@
/obj/structure/closet/firecloset
name = "fire-safety closet"
desc = "It's a storage unit for fire-fighting supplies."
- icon_state = "firecloset"
- icon_closed = "firecloset"
- icon_opened = "fireclosetopen"
+ closet_appearance = /decl/closet_appearance/oxygen/fire
starts_with = list(
/obj/item/clothing/suit/fire/firefighter,
@@ -93,21 +89,13 @@
/obj/item/weapon/extinguisher = 2,
/obj/item/clothing/head/hardhat/red = 2)
-/obj/structure/closet/firecloset/update_icon()
- if(!opened)
- icon_state = icon_closed
- else
- icon_state = icon_opened
-
/*
* Tool Closet
*/
/obj/structure/closet/toolcloset
name = "tool closet"
desc = "It's a storage unit for tools."
- icon_state = "toolcloset"
- icon_closed = "toolcloset"
- icon_opened = "toolclosetopen"
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools
/obj/structure/closet/toolcloset/Initialize()
starts_with = list()
@@ -151,9 +139,7 @@
/obj/structure/closet/radiation
name = "radiation suit closet"
desc = "It's a storage unit for rad-protective suits."
- icon_state = "radsuitcloset"
- icon_opened = "toolclosetopen"
- icon_closed = "radsuitcloset"
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/tools/radiation
starts_with = list(
/obj/item/clothing/suit/radiation = 2,
@@ -166,9 +152,7 @@
/obj/structure/closet/bombcloset
name = "\improper EOD closet"
desc = "It's a storage unit for explosion-protective suits."
- icon_state = "bombsuit"
- icon_closed = "bombsuit"
- icon_opened = "bombsuitopen"
+ closet_appearance = /decl/closet_appearance/bomb
starts_with = list(
/obj/item/clothing/suit/bomb_suit,
@@ -186,9 +170,7 @@
/obj/structure/closet/bombclosetsecurity
name = "\improper EOD closet"
desc = "It's a storage unit for explosion-protective suits."
- icon_state = "bombsuitsec"
- icon_closed = "bombsuitsec"
- icon_opened = "bombsuitsecopen"
+ closet_appearance = /decl/closet_appearance/bomb/security
starts_with = list(
/obj/item/clothing/suit/bomb_suit/security,
@@ -202,14 +184,13 @@
/obj/structure/closet/hydrant //wall mounted fire closet
name = "fire-safety closet"
desc = "It's a storage unit for fire-fighting supplies."
- icon_state = "hydrant"
- icon_closed = "hydrant"
- icon_opened = "hydrant_open"
+ closet_appearance = /decl/closet_appearance/wall/hydrant
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
anchored = 1
density = 0
wall_mounted = 1
+ store_mobs = 0
starts_with = list(
/obj/item/clothing/suit/fire/firefighter,
@@ -225,15 +206,8 @@
/obj/structure/closet/medical_wall //wall mounted medical closet
name = "first-aid closet"
desc = "It's wall-mounted storage unit for first aid supplies."
- icon_state = "medical_wall"
- icon_closed = "medical_wall"
- icon_opened = "medical_wall_open"
+ closet_appearance = /decl/closet_appearance/wall/medical
anchored = 1
density = 0
wall_mounted = 1
-
-/obj/structure/closet/medical_wall/update_icon()
- if(!opened)
- icon_state = icon_closed
- else
- icon_state = icon_opened
+ store_mobs = 0
diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
index 3e351f1fb3..82afaa33ff 100644
--- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm
+++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
@@ -4,12 +4,11 @@
/obj/structure/closet/walllocker
desc = "A wall mounted storage locker."
name = "Wall Locker"
- icon = 'icons/obj/walllocker.dmi'
- icon_state = "wall-locker"
+ icon = 'icons/obj/closets/bases/wall.dmi'
+ closet_appearance = /decl/closet_appearance/wall
density = 0
anchored = 1
- icon_closed = "wall-locker"
- icon_opened = "wall-lockeropen"
+ store_mobs = 0
//spawns endless (3 sets) amounts of breathmask, emergency oxy tank and crowbar
@@ -18,9 +17,7 @@
desc = "A wall mounted locker with emergency supplies."
var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/tool/crowbar/red,/obj/item/device/flashlight/flare,)
var/amount = 2 // spawns each items X times.
- icon_state = "emerg"
- icon_closed = "emerg"
- icon_opened = "emerg_open"
+ closet_appearance = /decl/closet_appearance/wall/emergency
/obj/structure/closet/walllocker/emerglocker/toggle(mob/user as mob)
src.attack_hand(user)
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index d1501e3bd6..8b71600aff 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -1,13 +1,11 @@
/obj/structure/closet/wardrobe
name = "wardrobe"
desc = "It's a storage unit for standard-issue attire."
- icon_state = "blue"
- icon_closed = "blue"
+ closet_appearance = /decl/closet_appearance/wardrobe
/obj/structure/closet/wardrobe/red
name = "security wardrobe"
- icon_state = "red"
- icon_closed = "red"
+ closet_appearance = /decl/closet_appearance/wardrobe/red
starts_with = list(
/obj/item/clothing/under/rank/security = 3,
@@ -41,9 +39,7 @@
/obj/structure/closet/wardrobe/detective
name = "detective wardrobe"
- icon_state = "cabinet_closed"
- icon_closed = "cabinet_closed"
- icon_opened = "cabinet_open"
+ closet_appearance = /decl/closet_appearance/cabinet
starts_with = list(
/obj/item/clothing/head/det = 2,
@@ -64,17 +60,15 @@
/obj/structure/closet/wardrobe/pink
name = "pink wardrobe"
- icon_state = "pink"
- icon_closed = "pink"
-
+ closet_appearance = /decl/closet_appearance/wardrobe/pink
+
starts_with = list(
/obj/item/clothing/under/color/pink = 3,
/obj/item/clothing/shoes/brown = 3)
/obj/structure/closet/wardrobe/black
name = "black wardrobe"
- icon_state = "black"
- icon_closed = "black"
+ closet_appearance = /decl/closet_appearance/wardrobe/black
starts_with = list(
/obj/item/clothing/under/color/black = 3,
@@ -88,8 +82,7 @@
/obj/structure/closet/wardrobe/chaplain_black
name = "chapel wardrobe"
desc = "It's a storage unit for approved religious attire."
- icon_state = "black"
- icon_closed = "black"
+ closet_appearance = /decl/closet_appearance/wardrobe/black
starts_with = list(
/obj/item/clothing/under/rank/chaplain,
@@ -124,8 +117,7 @@
/obj/structure/closet/wardrobe/green
name = "green wardrobe"
- icon_state = "green"
- icon_closed = "green"
+ closet_appearance = /decl/closet_appearance/wardrobe/green
starts_with = list(
/obj/item/clothing/under/color/green = 3,
@@ -135,8 +127,7 @@
/obj/structure/closet/wardrobe/xenos
name = "xenos wardrobe"
- icon_state = "green"
- icon_closed = "green"
+ closet_appearance = /decl/closet_appearance/wardrobe/green
starts_with = list(
/obj/item/clothing/suit/unathi/mantle,
@@ -150,8 +141,7 @@
/obj/structure/closet/wardrobe/orange
name = "prison wardrobe"
desc = "It's a storage unit for regulation prisoner attire."
- icon_state = "orange"
- icon_closed = "orange"
+ closet_appearance = /decl/closet_appearance/wardrobe/orange
starts_with = list(
/obj/item/clothing/under/color/prison = 3,
@@ -160,8 +150,7 @@
/obj/structure/closet/wardrobe/yellow
name = "yellow wardrobe"
- icon_state = "yellow"
- icon_closed = "yellow"
+ closet_appearance = /decl/closet_appearance/wardrobe/yellow
starts_with = list(
/obj/item/clothing/under/color/yellow = 3,
@@ -172,8 +161,7 @@
/obj/structure/closet/wardrobe/atmospherics_yellow
name = "atmospherics wardrobe"
- icon_state = "yellow"
- icon_closed = "yellow"
+ closet_appearance = /decl/closet_appearance/wardrobe/yellow
starts_with = list(
/obj/item/clothing/under/rank/atmospheric_technician = 3,
@@ -187,8 +175,7 @@
/obj/structure/closet/wardrobe/engineering_yellow
name = "engineering wardrobe"
- icon_state = "yellow"
- icon_closed = "yellow"
+ closet_appearance = /decl/closet_appearance/wardrobe/yellow
starts_with = list(
/obj/item/clothing/under/rank/engineer = 3,
@@ -205,8 +192,7 @@
/obj/structure/closet/wardrobe/white
name = "white wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/color/white = 3,
@@ -216,8 +202,7 @@
/obj/structure/closet/wardrobe/pjs
name = "pajama wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/pj/red = 2,
@@ -228,8 +213,7 @@
/obj/structure/closet/wardrobe/science_white
name = "science wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/rank/scientist = 3,
@@ -258,8 +242,7 @@
/obj/structure/closet/wardrobe/robotics_black
name = "robotics wardrobe"
- icon_state = "black"
- icon_closed = "black"
+ closet_appearance = /decl/closet_appearance/wardrobe/black
starts_with = list(
/obj/item/clothing/under/rank/roboticist = 2,
@@ -280,8 +263,7 @@
/obj/structure/closet/wardrobe/chemistry_white
name = "chemistry wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/rank/chemist = 2,
@@ -295,8 +277,7 @@
/obj/structure/closet/wardrobe/genetics_white
name = "genetics wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/rank/geneticist = 2,
@@ -309,8 +290,7 @@
/obj/structure/closet/wardrobe/virology_white
name = "virology wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/rank/virologist = 2,
@@ -324,8 +304,7 @@
/obj/structure/closet/wardrobe/medic_white
name = "medical wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/rank/medical = 2,
@@ -350,8 +329,7 @@
/obj/structure/closet/wardrobe/medic_gown
name = "cloning wardrobe"
- icon_state = "white"
- icon_closed = "white"
+ closet_appearance = /decl/closet_appearance/wardrobe/white
starts_with = list(
/obj/item/clothing/under/medigown = 4)
@@ -359,8 +337,7 @@
/obj/structure/closet/wardrobe/grey
name = "grey wardrobe"
- icon_state = "grey"
- icon_closed = "grey"
+ closet_appearance = /decl/closet_appearance/wardrobe/grey
starts_with = list(
/obj/item/clothing/under/color/grey = 3,
@@ -370,8 +347,7 @@
/obj/structure/closet/wardrobe/mixed
name = "mixed wardrobe"
- icon_state = "mixed"
- icon_closed = "mixed"
+ closet_appearance = /decl/closet_appearance/wardrobe/mixed
starts_with = list(
/obj/item/clothing/under/color/blue,
@@ -407,9 +383,7 @@
/obj/structure/closet/wardrobe/tactical
name = "tactical equipment"
- icon_state = "syndicate1"
- icon_closed = "syndicate1"
- icon_opened = "syndicate1open"
+ closet_appearance = /decl/closet_appearance/tactical
starts_with = list(
/obj/item/clothing/under/tactical,
@@ -434,9 +408,7 @@
/obj/structure/closet/wardrobe/ert
name = "emergency response team equipment"
- icon_state = "syndicate1"
- icon_closed = "syndicate1"
- icon_opened = "syndicate1open"
+ closet_appearance = /decl/closet_appearance/tactical
starts_with = list(
/obj/item/clothing/under/rank/centcom,
@@ -453,8 +425,7 @@
/obj/structure/closet/wardrobe/suit
name = "suit locker"
- icon_state = "mixed"
- icon_closed = "mixed"
+ closet_appearance = /decl/closet_appearance/wardrobe/mixed
starts_with = list(
/obj/item/clothing/under/assistantformal,
@@ -482,9 +453,7 @@
/obj/structure/closet/wardrobe/captain
name = "colony director's wardrobe"
- icon_state = "cabinet_closed"
- icon_closed = "cabinet_closed"
- icon_opened = "cabinet_open"
+ closet_appearance = /decl/closet_appearance/cabinet
starts_with = list(
/obj/item/weapon/storage/backpack/captain,
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 015afb8a9c..c66e663083 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -3,13 +3,10 @@
/obj/structure/closet/crate
name = "crate"
desc = "A rectangular steel crate."
- icon = 'icons/obj/storage_vr.dmi' //VOREStation edit
- icon_state = "crate"
- icon_opened = "crateopen"
- icon_closed = "crate"
+ icon = 'icons/obj/closets/bases/crate.dmi'
+ closet_appearance = /decl/closet_appearance/crate
climbable = 1
var/points_per_crate = 5
-// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
var/rigged = 0
/obj/structure/closet/crate/can_open()
@@ -37,11 +34,11 @@
playsound(src, 'sound/machines/click.ogg', 15, 1, -3)
for(var/obj/O in src)
O.forceMove(get_turf(src))
- icon_state = icon_opened
src.opened = 1
if(climbable)
structure_shaken()
+ update_icon()
return 1
/obj/structure/closet/crate/close()
@@ -64,8 +61,8 @@
O.forceMove(src)
itemcount++
- icon_state = icon_closed
src.opened = 0
+ update_icon()
return 1
/obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -125,28 +122,25 @@
/obj/structure/closet/crate/secure
desc = "A secure crate."
name = "Secure crate"
- icon_state = "securecrate"
- icon_opened = "securecrateopen"
- icon_closed = "securecrate"
- var/redlight = "securecrater"
- var/greenlight = "securecrateg"
- var/sparks = "securecratesparks"
- var/emag = "securecrateemag"
+ closet_appearance = /decl/closet_appearance/crate/secure
var/broken = 0
var/locked = 1
-/obj/structure/closet/crate/secure/New()
- ..()
- if(locked)
- overlays.Cut()
- overlays += redlight
- else
- overlays.Cut()
- overlays += greenlight
-
/obj/structure/closet/crate/secure/can_open()
return !locked
+/obj/structure/closet/crate/secure/update_icon()
+ if(opened)
+ icon_state = "open"
+ else
+ if(broken)
+ icon_state = "closed_emagged[sealed ? "_welded" : ""]"
+ else
+ if(locked)
+ icon_state = "closed_locked[sealed ? "_welded" : ""]"
+ else
+ icon_state = "closed_unlocked[sealed ? "_welded" : ""]"
+
/obj/structure/closet/crate/secure/proc/togglelock(mob/user as mob)
if(src.opened)
to_chat(user, "Close the crate first.")
@@ -166,8 +160,7 @@
if(user)
for(var/mob/O in viewers(user, 3))
O.show_message( "The crate has been [locked ? null : "un"]locked by [user].", 1)
- overlays.Cut()
- overlays += locked ? redlight : greenlight
+ update_icon()
/obj/structure/closet/crate/secure/verb/verb_togglelock()
set src in oview(1) // One square distance
@@ -202,14 +195,11 @@
/obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user)
if(!broken)
- overlays.Cut()
- overlays += emag
- overlays += sparks
- spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
playsound(src, "sparks", 60, 1)
- src.locked = 0
- src.broken = 1
+ locked = 0
+ broken = 1
to_chat(user, "You unlock \the [src].")
+ update_icon()
return 1
/obj/structure/closet/crate/secure/emp_act(severity)
@@ -217,75 +207,52 @@
O.emp_act(severity)
if(!broken && !opened && prob(50/severity))
if(!locked)
- src.locked = 1
- overlays.Cut()
- overlays += redlight
+ locked = 1
else
- overlays.Cut()
- overlays += emag
- overlays += sparks
- spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface*
playsound(src, 'sound/effects/sparks4.ogg', 75, 1)
- src.locked = 0
+ locked = 0
if(!opened && prob(20/severity))
if(!locked)
open()
else
- src.req_access = list()
- src.req_access += pick(get_all_station_access())
+ req_access = list()
+ req_access += pick(get_all_station_access())
+ update_icon()
..()
/obj/structure/closet/crate/plastic
name = "plastic crate"
desc = "A rectangular plastic crate."
- icon_state = "plasticcrate"
- icon_opened = "plasticcrateopen"
- icon_closed = "plasticcrate"
+ closet_appearance = /decl/closet_appearance/crate/plastic
points_per_crate = 1 //5 crates per ordered crate, +5 for the crate it comes in.
/obj/structure/closet/crate/internals
name = "internals crate"
desc = "A internals crate."
- icon_state = "o2crate"
- icon_opened = "o2crateopen"
- icon_closed = "o2crate"
/obj/structure/closet/crate/trashcart
name = "trash cart"
desc = "A heavy, metal trashcart with wheels."
- icon_state = "trashcart"
- icon_opened = "trashcartopen"
- icon_closed = "trashcart"
+ closet_appearance = /decl/closet_appearance/cart/trash
/*these aren't needed anymore
/obj/structure/closet/crate/hat
desc = "A crate filled with Valuable Collector's Hats!."
name = "Hat Crate"
- icon_state = "crate"
- icon_opened = "crateopen"
- icon_closed = "crate"
/obj/structure/closet/crate/contraband
name = "Poster crate"
desc = "A random assortment of posters manufactured by providers NOT listed under NanoTrasen's whitelist."
- icon_state = "crate"
- icon_opened = "crateopen"
- icon_closed = "crate"
*/
/obj/structure/closet/crate/medical
name = "medical crate"
desc = "A medical crate."
- icon_state = "medicalcrate"
- icon_opened = "medicalcrateopen"
- icon_closed = "medicalcrate"
+ closet_appearance = /decl/closet_appearance/crate/medical
/obj/structure/closet/crate/rcd
name = "\improper RCD crate"
desc = "A crate with rapid construction device."
- icon_state = "engi_crate"
- icon_opened = "engi_crateopen"
- icon_closed = "engi_crate"
starts_with = list(
/obj/item/weapon/rcd_ammo = 3,
@@ -293,9 +260,6 @@
/obj/structure/closet/crate/solar
name = "solar pack crate"
- icon_state = "engi_crate" //VOREStation Edit
- icon_opened = "engi_crateopen" //VOREStation Edit
- icon_closed = "engi_crate" //VOREStation Edit
starts_with = list(
/obj/item/solar_assembly = 21,
@@ -312,9 +276,7 @@
/obj/structure/closet/crate/freezer
name = "freezer"
desc = "A freezer."
- icon_state = "freezer"
- icon_opened = "freezeropen"
- icon_closed = "freezer"
+ closet_appearance = /decl/closet_appearance/crate/freezer
var/target_temp = T0C - 40
var/cooling_power = 40
@@ -365,18 +327,12 @@
/obj/structure/closet/crate/bin
name = "large bin"
desc = "A large bin."
- icon = 'icons/obj/storage.dmi' //VOREStation edit
- icon_state = "largebin"
- icon_opened = "largebinopen"
- icon_closed = "largebin"
/obj/structure/closet/crate/radiation
name = "radioactive gear crate"
desc = "A crate with a radiation sign on it."
- icon_state = "radiation"
- icon_opened = "radiationopen"
- icon_closed = "radiation"
+ closet_appearance = /decl/closet_appearance/crate/radiation
starts_with = list(
/obj/item/clothing/suit/radiation = 4,
@@ -386,72 +342,47 @@
/obj/structure/closet/crate/secure/weapon
name = "weapons crate"
desc = "A secure weapons crate."
- icon_state = "weaponcrate"
- icon_opened = "weaponcrateopen"
- icon_closed = "weaponcrate"
+ closet_appearance = /decl/closet_appearance/crate/secure/weapon
/obj/structure/closet/crate/secure/phoron
name = "phoron crate"
desc = "A secure phoron crate."
- icon_state = "phoroncrate"
- icon_opened = "phoroncrateopen"
- icon_closed = "phoroncrate"
+ closet_appearance = /decl/closet_appearance/crate/secure/hazard
/obj/structure/closet/crate/secure/gear
name = "gear crate"
desc = "A secure gear crate."
- icon_state = "secgearcrate"
- icon_opened = "secgearcrateopen"
- icon_closed = "secgearcrate"
+ closet_appearance = /decl/closet_appearance/crate/secure/weapon
/obj/structure/closet/crate/secure/hydrosec
name = "secure hydroponics crate"
desc = "A crate with a lock on it, painted in the scheme of the station's botanists."
- icon_state = "hydrosecurecrate"
- icon_opened = "hydrosecurecrateopen"
- icon_closed = "hydrosecurecrate"
+ closet_appearance = /decl/closet_appearance/crate/secure/hydroponics
/obj/structure/closet/crate/secure/engineering
desc = "A crate with a lock on it, painted in the scheme of the station's engineers."
name = "secure engineering crate"
- icon_state = "engi_secure_crate"
- icon_opened = "engi_secure_crateopen"
- icon_closed = "engi_secure_crate"
/obj/structure/closet/crate/secure/science
name = "secure science crate"
desc = "A crate with a lock on it, painted in the scheme of the station's scientists."
- icon_state = "scisecurecrate"
- icon_opened = "scisecurecrateopen"
- icon_closed = "scisecurecrate"
/obj/structure/closet/crate/secure/bin
name = "secure bin"
desc = "A secure bin."
- icon = 'icons/obj/storage.dmi' //VOREStation edit
- icon_state = "largebins"
- icon_opened = "largebinsopen"
- icon_closed = "largebins"
- redlight = "largebinr"
- greenlight = "largebing"
- sparks = "largebinsparks"
- emag = "largebinemag"
/obj/structure/closet/crate/large
name = "large crate"
desc = "A hefty metal crate."
- icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
- icon_state = "largemetal"
- icon_opened = "largemetalopen"
- icon_closed = "largemetal"
-
+ icon = 'icons/obj/closets/bases/large_crate.dmi'
+ closet_appearance = /decl/closet_appearance/large_crate
/obj/structure/closet/crate/large/close()
. = ..()
@@ -475,12 +406,8 @@
/obj/structure/closet/crate/secure/large
name = "large crate"
desc = "A hefty metal crate with an electronic locking system."
- icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
- icon_state = "largemetalsecure" //VOREStation Edit
- icon_opened = "largemetalsecureopen" //VOREStation Edit
- icon_closed = "largemetalsecure" //VOREStation Edit
- redlight = "largemetalr"
- greenlight = "largemetalg"
+ icon = 'icons/obj/closets/bases/large_crate.dmi'
+ closet_appearance = /decl/closet_appearance/large_crate/secure
/obj/structure/closet/crate/secure/large/close()
@@ -505,33 +432,19 @@
//fluff variant
/obj/structure/closet/crate/secure/large/reinforced
desc = "A hefty, reinforced metal crate with an electronic locking system."
- icon_state = "largermetal"
- icon_opened = "largermetalopen"
- icon_closed = "largermetal"
/obj/structure/closet/crate/engineering
name = "engineering crate"
- icon_state = "engi_crate"
- icon_opened = "engi_crateopen"
- icon_closed = "engi_crate"
/obj/structure/closet/crate/engineering/electrical
- icon_state = "engi_e_crate"
- icon_opened = "engi_crateopen"
- icon_closed = "engi_e_crate"
/obj/structure/closet/crate/science
name = "science crate"
- icon_state = "scicrate"
- icon_opened = "scicrateopen"
- icon_closed = "scicrate"
/obj/structure/closet/crate/hydroponics
name = "hydroponics crate"
desc = "All you need to destroy those pesky weeds and pests."
- icon_state = "hydrocrate"
- icon_opened = "hydrocrateopen"
- icon_closed = "hydrocrate"
+ closet_appearance = /decl/closet_appearance/crate/hydroponics
/obj/structure/closet/crate/hydroponics/prespawned
diff --git a/code/game/objects/structures/crates_lockers/crates_vr.dm b/code/game/objects/structures/crates_lockers/crates_vr.dm
index 85eccb3d77..4e09b1af1d 100644
--- a/code/game/objects/structures/crates_lockers/crates_vr.dm
+++ b/code/game/objects/structures/crates_lockers/crates_vr.dm
@@ -34,6 +34,4 @@
return
/obj/structure/closet/crate/medical/blood
- icon_state = "blood"
- icon_opened = "bloodopen"
- icon_closed = "blood"
\ No newline at end of file
+ closet_appearance = /decl/closet_appearance/cart/biohazard/alt
\ No newline at end of file
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index f26e4a3a2b..e12a49c5b5 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -117,7 +117,7 @@ var/list/flooring_types
/decl/flooring/proc/get_plating_type(var/turf/T)
return plating_type
-/decl/flooring/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/layer = ABOVE_TURF_LAYER)
+/decl/flooring/proc/get_flooring_overlay(var/cache_key, var/icon_base, var/icon_dir = 0, var/layer = BUILTIN_DECAL_LAYER)
if(!flooring_cache[cache_key])
var/image/I = image(icon = icon, icon_state = icon_base, dir = icon_dir)
I.layer = layer
@@ -498,6 +498,8 @@ var/list/flooring_types
desc = "Lava. Y'know. Sets you on fire. AAAAAAAAAAA"
icon = 'icons/turf/outdoors.dmi'
icon_base = "lava"
+ is_plating = TRUE
+ flags = 0
footstep_sounds = list("human" = list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm
index 1cf193bb47..b9ee2bc93c 100644
--- a/code/game/turfs/flooring/flooring_decals.dm
+++ b/code/game/turfs/flooring/flooring_decals.dm
@@ -7,6 +7,7 @@ var/list/floor_decals = list()
name = "floor decal"
icon = 'icons/turf/flooring/decals_vr.dmi' // VOREStation Edit
plane = DECAL_PLANE
+ layer = MAPPER_DECAL_LAYER
var/supplied_dir
/obj/effect/floor_decal/New(var/newloc, var/newdir, var/newcolour)
@@ -29,7 +30,7 @@ var/list/floor_decals = list()
var/image/I = floor_decals[cache_key]
if(!I)
I = image(icon = icon, icon_state = icon_state, dir = dir)
- I.layer = TURF_DECAL_LAYER
+ I.layer = MAPPER_DECAL_LAYER
I.color = color
I.alpha = alpha
floor_decals[cache_key] = I
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index b5d9cf751b..ff2923005f 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -33,9 +33,7 @@
var/lava = 0
/turf/simulated/floor/is_plating()
- if(!flooring || flooring.is_plating)
- return TRUE
- return FALSE
+ return (!flooring || flooring.is_plating)
/turf/simulated/floor/Initialize(mapload, floortype)
. = ..()
diff --git a/code/game/turfs/simulated/floor_types_eris.dm b/code/game/turfs/simulated/floor_types_eris.dm
index 3a4fdfaf76..3893883070 100644
--- a/code/game/turfs/simulated/floor_types_eris.dm
+++ b/code/game/turfs/simulated/floor_types_eris.dm
@@ -957,6 +957,7 @@
name = "underplating"
icon_state = "under"
initial_flooring = /decl/flooring/reinforced/plating/under
+
/turf/simulated/floor/plating/eris/under/airless
oxygen = 0
nitrogen = 0
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index 237a28635c..22b79272b8 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -33,6 +33,17 @@
..()
name = "magma"
+/turf/simulated/floor/lava/make_plating(place_product, defer_icon_update)
+ return
+
+/turf/simulated/floor/lava/set_flooring(decl/flooring/newflooring, initializing)
+ if(newflooring?.type == initial_flooring)
+ return ..()
+ return
+
+/turf/simulated/floor/lava/ex_act(severity)
+ return
+
/turf/simulated/floor/lava/Entered(atom/movable/AM)
if(burn_stuff(AM))
START_PROCESSING(SSturfs, src)
diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm
index d873a77a9c..dcfcb1a33e 100644
--- a/code/modules/awaymissions/loot_vr.dm
+++ b/code/modules/awaymissions/loot_vr.dm
@@ -78,8 +78,6 @@
new /obj/effect/decal/remains/xeno(src.loc)
if("clothes")
var/obj/structure/closet/C = new(src.loc)
- C.icon_state = "blue"
- C.icon_closed = "blue"
if(prob(33))
new /obj/item/clothing/under/color/rainbow(C)
new /obj/item/clothing/shoes/rainbow(C)
diff --git a/code/modules/blob2/core_chunk.dm b/code/modules/blob2/core_chunk.dm
index 8a5795aae9..7d8f588568 100644
--- a/code/modules/blob2/core_chunk.dm
+++ b/code/modules/blob2/core_chunk.dm
@@ -61,12 +61,13 @@
/obj/item/weapon/blobcore_chunk/proc/get_carrier(var/atom/target)
var/atom/A = target ? target.loc : src
- if(!istype(A, /mob/living))
- A = get_carrier(A)
if(isturf(A) || isarea(A)) // Something has gone horribly wrong if the second is true.
return FALSE // No mob is carrying us.
+ if(!istype(A, /mob/living))
+ A = get_carrier(A)
+
return A
/obj/item/weapon/blobcore_chunk/blob_act(obj/structure/blob/B)
diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm
index 23fc7d4d67..40171f8c92 100644
--- a/code/modules/client/preference_setup/general/03_body.dm
+++ b/code/modules/client/preference_setup/general/03_body.dm
@@ -341,33 +341,33 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "Hair
"
if(has_flag(mob_species, HAS_HAIR_COLOR))
- . += "Change Color "
- . += " Style: [pref.h_style]
"
+ . += "Change Color [color_square(pref.r_hair, pref.g_hair, pref.b_hair)] "
+ . += " Style: < > [pref.h_style]
" //The < & > in this line is correct-- those extra characters are the arrows you click to switch between styles.
. += "
Facial
"
if(has_flag(mob_species, HAS_HAIR_COLOR))
- . += "Change Color "
- . += " Style: [pref.f_style]
"
+ . += "Change Color [color_square(pref.r_facial, pref.g_facial, pref.b_facial)] "
+ . += " Style: < > [pref.f_style]
" //Same as above with the extra > & < characters
if(has_flag(mob_species, HAS_EYE_COLOR))
. += "
Eyes
"
- . += "Change Color
"
+ . += "Change Color [color_square(pref.r_eyes, pref.g_eyes, pref.b_eyes)]
"
if(has_flag(mob_species, HAS_SKIN_COLOR))
. += "
Body Color
"
- . += "Change Color
"
+ . += "Change Color [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]
"
. += "
Body Markings +
"
+ . += "
"
for(var/M in pref.body_markings)
- . += "[M] [pref.body_markings.len > 1 ? "˄ ˅ " : ""]- Color"
- . += ""
- . += "
"
+ . += "| [M] | [pref.body_markings.len > 1 ? "˄ ˅ mv " : ""]- Color[color_square(hex = pref.body_markings[M])] |
"
+ . += "
"
. += "
"
. += "Allow Synth markings: [pref.synth_markings ? "Yes" : "No"]
"
. += "Allow Synth color: [pref.synth_color ? "Yes" : "No"]
"
if(pref.synth_color)
- . += "Change Color "
+ . += "Change Color [color_square(pref.r_synth, pref.g_synth, pref.b_synth)]"
. = jointext(.,null)
@@ -431,16 +431,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.set_biological_gender(mob_species.genders[1])
pref.custom_species = null //VOREStation Edit - This is cleared on species changes
//grab one of the valid hair styles for the newly chosen species
- var/list/valid_hairstyles = list()
- for(var/hairstyle in hair_styles_list)
- var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
- if(pref.biological_gender == MALE && S.gender == FEMALE)
- continue
- if(pref.biological_gender == FEMALE && S.gender == MALE)
- continue
- if(!(pref.species in S.species_allowed))
- continue
- valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
+ var/list/valid_hairstyles = pref.get_valid_hairstyles()
if(valid_hairstyles.len)
pref.h_style = pick(valid_hairstyles)
@@ -449,17 +440,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.h_style = hair_styles_list["Bald"]
//grab one of the valid facial hair styles for the newly chosen species
- var/list/valid_facialhairstyles = list()
- for(var/facialhairstyle in facial_hair_styles_list)
- var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
- if(pref.biological_gender == MALE && S.gender == FEMALE)
- continue
- if(pref.biological_gender == FEMALE && S.gender == MALE)
- continue
- if(!(pref.species in S.species_allowed))
- continue
-
- valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
+ var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles()
if(valid_facialhairstyles.len)
pref.f_style = pick(valid_facialhairstyles)
@@ -493,21 +474,35 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["hair_style"])
- var/list/valid_hairstyles = list()
- for(var/hairstyle in hair_styles_list)
- var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
- if(!(pref.species in S.species_allowed) && (!pref.custom_base || !(pref.custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance
- continue
- if((!S.ckeys_allowed) || (usr.ckey in S.ckeys_allowed)) //VOREStation Edit, allows ckey locked hairstyles.
- valid_hairstyles[S.name] = hairstyle //VOREStation Edit, allows ckey locked hairstyles.
-
- //valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] //VOREStation Edit. Replaced by above.
+ var/list/valid_hairstyles = pref.get_valid_hairstyles()
var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference", pref.h_style) as null|anything in valid_hairstyles
if(new_h_style && CanUseTopic(user))
pref.h_style = new_h_style
return TOPIC_REFRESH_UPDATE_PREVIEW
+ else if(href_list["hair_style_left"])
+ var/H = href_list["hair_style_left"]
+ var/list/valid_hairstyles = pref.get_valid_hairstyles()
+ var/start = valid_hairstyles.Find(H)
+
+ if(start != 1) //If we're not the beginning of the list, become the previous element.
+ pref.h_style = valid_hairstyles[start-1]
+ else //But if we ARE, become the final element.
+ pref.h_style = valid_hairstyles[valid_hairstyles.len]
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
+ else if(href_list["hair_style_right"])
+ var/H = href_list["hair_style_right"]
+ var/list/valid_hairstyles = pref.get_valid_hairstyles()
+ var/start = valid_hairstyles.Find(H)
+
+ if(start != valid_hairstyles.len) //If we're not the end of the list, become the next element.
+ pref.h_style = valid_hairstyles[start+1]
+ else //But if we ARE, become the first element.
+ pref.h_style = valid_hairstyles[1]
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
else if(href_list["facial_color"])
if(!has_flag(mob_species, HAS_HAIR_COLOR))
return TOPIC_NOACTION
@@ -547,23 +542,35 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["facial_style"])
- var/list/valid_facialhairstyles = list()
- for(var/facialhairstyle in facial_hair_styles_list)
- var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
- if(pref.biological_gender == MALE && S.gender == FEMALE)
- continue
- if(pref.biological_gender == FEMALE && S.gender == MALE)
- continue
- if(!(pref.species in S.species_allowed) && (!pref.custom_base || !(pref.custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance
- continue
-
- valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
+ var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles()
var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference", pref.f_style) as null|anything in valid_facialhairstyles
if(new_f_style && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
pref.f_style = new_f_style
return TOPIC_REFRESH_UPDATE_PREVIEW
+ else if(href_list["facial_style_left"])
+ var/F = href_list["facial_style_left"]
+ var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles()
+ var/start = valid_facialhairstyles.Find(F)
+
+ if(start != 1) //If we're not the beginning of the list, become the previous element.
+ pref.f_style = valid_facialhairstyles[start-1]
+ else //But if we ARE, become the final element.
+ pref.f_style = valid_facialhairstyles[valid_facialhairstyles.len]
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
+ else if(href_list["facial_style_right"])
+ var/F = href_list["facial_style_right"]
+ var/list/valid_facialhairstyles = pref.get_valid_facialhairstyles()
+ var/start = valid_facialhairstyles.Find(F)
+
+ if(start != valid_facialhairstyles.len) //If we're not the end of the list, become the next element.
+ pref.f_style = valid_facialhairstyles[start+1]
+ else //But if we ARE, become the first element.
+ pref.f_style = valid_facialhairstyles[1]
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
else if(href_list["marking_style"])
var/list/usable_markings = pref.body_markings.Copy() ^ body_marking_styles_list.Copy()
/* VOREStation Removal - No markings whitelist, let people mix/match
@@ -597,6 +604,19 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
moveElement(pref.body_markings, start, 1)
return TOPIC_REFRESH_UPDATE_PREVIEW
+ else if(href_list["marking_move"])
+ var/M = href_list["marking_move"]
+ var/start = pref.body_markings.Find(M)
+ var/list/move_locs = pref.body_markings - M
+ if(start != 1)
+ move_locs -= pref.body_markings[start-1]
+
+ var/inject_after = input(user, "Move [M] ahead of...", "Character Preference") as null|anything in move_locs //Move ahead of any marking that isn't the current or previous one.
+ var/newpos = pref.body_markings.Find(inject_after)
+ if(newpos)
+ moveElement(pref.body_markings, start, newpos+1)
+ return TOPIC_REFRESH_UPDATE_PREVIEW
+
else if(href_list["marking_remove"])
var/M = href_list["marking_remove"]
pref.body_markings -= M
diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm
index ed66138da5..a40155d2d5 100644
--- a/code/modules/client/preference_setup/global/01_ui.dm
+++ b/code/modules/client/preference_setup/global/01_ui.dm
@@ -29,7 +29,7 @@
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
. = "UI Style: [pref.UI_style]
"
. += "Custom UI (recommended for White UI):
"
- . += "-Color: [pref.UI_style_color] reset
"
+ . += "-Color: [pref.UI_style_color] [color_square(hex = pref.UI_style_color)] reset
"
. += "-Alpha(transparency): [pref.UI_style_alpha] reset
"
. += "Tooltip Style: [pref.tooltipstyle]
"
. += "Client FPS: [pref.client_fps]
"
@@ -38,7 +38,7 @@
if(pref.ooccolor == initial(pref.ooccolor))
. += "Using Default
"
else
- . += "[pref.ooccolor] reset
"
+ . += "[pref.ooccolor] [color_square(hex = pref.ooccolor)] reset
"
/datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user)
if(href_list["select_style"])
diff --git a/code/modules/client/preference_setup/preference_setup.dm b/code/modules/client/preference_setup/preference_setup.dm
index c99af02ea0..638768ae9e 100644
--- a/code/modules/client/preference_setup/preference_setup.dm
+++ b/code/modules/client/preference_setup/preference_setup.dm
@@ -298,4 +298,8 @@
return 220
if(PREF_FBP_SOFTWARE)
return 150
- return S.max_age // welp
\ No newline at end of file
+ return S.max_age // welp
+
+/datum/category_item/player_setup_item/proc/color_square(red, green, blue, hex)
+ var/color = hex ? hex : "#[num2hex(red, 2)][num2hex(green, 2)][num2hex(blue, 2)]"
+ return "___"
\ No newline at end of file
diff --git a/code/modules/client/preference_setup/vore/01_ears.dm b/code/modules/client/preference_setup/vore/01_ears.dm
index dbd4653fbc..8a26513a01 100644
--- a/code/modules/client/preference_setup/vore/01_ears.dm
+++ b/code/modules/client/preference_setup/vore/01_ears.dm
@@ -154,9 +154,9 @@
if(ear_styles_list[pref.ear_style])
var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style]
if (ear.do_colouration)
- . += "Change Color
"
+ . += "Change Color [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]
"
if (ear.extra_overlay)
- . += "Change Secondary Color
"
+ . += "Change Secondary Color [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]
"
var/tail_display = "Normal"
if(pref.tail_style && (pref.tail_style in tail_styles_list))
@@ -170,9 +170,9 @@
if(tail_styles_list[pref.tail_style])
var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style]
if (T.do_colouration)
- . += "Change Color
"
+ . += "Change Color [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]
"
if (T.extra_overlay)
- . += "Change Secondary Color
"
+ . += "Change Secondary Color [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]
"
var/wing_display = "Normal"
if(pref.wing_style && (pref.wing_style in wing_styles_list))
@@ -186,9 +186,9 @@
if(wing_styles_list[pref.wing_style])
var/datum/sprite_accessory/wing/W = wing_styles_list[pref.wing_style]
if (W.do_colouration)
- . += "Change Color
"
+ . += "Change Color [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]
"
if (W.extra_overlay)
- . += "Change Secondary Color
"
+ . += "Change Secondary Color [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]
"
/datum/category_item/player_setup_item/vore/ears/OnTopic(var/href,var/list/href_list, var/mob/user)
if(!CanUseTopic(user))
diff --git a/code/modules/clothing/spacesuits/void/void_vr.dm b/code/modules/clothing/spacesuits/void/void_vr.dm
index 04dc49e18e..4cd03f36e5 100644
--- a/code/modules/clothing/spacesuits/void/void_vr.dm
+++ b/code/modules/clothing/spacesuits/void/void_vr.dm
@@ -133,4 +133,124 @@
icon_state = "chronosuit"
item_state = "chronosuit"
icon = 'icons/obj/clothing/suits_vr.dmi'
- icon_override = 'icons/mob/suit_vr.dmi'
\ No newline at end of file
+ icon_override = 'icons/mob/suit_vr.dmi'
+
+/obj/item/clothing/suit/space/void/autolok
+ name = "AutoLok pressure suit"
+ desc = "A high-tech snug-fitting pressure suit. Fits any species. It offers very little physical protection, but is equipped with sensors that will automatically deploy the integral helmet to protect the wearer."
+ icon_state = "autoloksuit"
+ item_state = "autoloksuit"
+ armor = list(melee = 15, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 100, rad = 80)
+ slowdown = 0
+ siemens_coefficient = 1
+ species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX) //this thing can autoadapt
+ icon = 'icons/obj/clothing/suits_vr.dmi'
+ breach_threshold = 6 //this thing is basically tissue paper
+ w_class = ITEMSIZE_NORMAL //if it's snug, high-tech, and made of relatively soft materials, it should be much easier to store!
+
+/obj/item/clothing/suit/space/void/autolok
+ sprite_sheets = list(
+ SPECIES_HUMAN = 'icons/mob/spacesuit_vr.dmi',
+ SPECIES_TAJ = 'icons/mob/species/tajaran/suit_vr.dmi',
+ SPECIES_SKRELL = 'icons/mob/species/skrell/suit_vr.dmi',
+ SPECIES_UNATHI = 'icons/mob/species/unathi/suit_vr.dmi',
+ SPECIES_XENOHYBRID = 'icons/mob/species/unathi/suit_vr.dmi',
+ SPECIES_AKULA = 'icons/mob/species/unathi/suit_vr.dmi',
+ SPECIES_SERGAL = 'icons/mob/species/unathi/suit_vr.dmi',
+ SPECIES_VULPKANIN = 'icons/mob/species/vulpkanin/suit_vr.dmi',
+ SPECIES_ZORREN_HIGH = 'icons/mob/species/vulpkanin/suit_vr.dmi',
+ SPECIES_FENNEC = 'icons/mob/species/vulpkanin/suit_vr.dmi',
+ SPECIES_TESHARI = 'icons/mob/species/seromi/suit_vr.dmi'
+ )
+ sprite_sheets_obj = list(
+ SPECIES_TAJ = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_SKRELL = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_UNATHI = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_XENOHYBRID = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_AKULA = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_SERGAL = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_VULPKANIN = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_ZORREN_HIGH = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_FENNEC = 'icons/obj/clothing/suits_vr.dmi',
+ SPECIES_TESHARI = 'icons/obj/clothing/suits_vr.dmi'
+ )
+
+/obj/item/clothing/suit/space/void/autolok/Initialize()
+ ..()
+ helmet = new /obj/item/clothing/head/helmet/space/void/autolok //autoinstall the helmet
+
+//override the attackby screwdriver proc so that people can't remove the helmet
+/obj/item/clothing/suit/space/void/autolok/attackby(obj/item/W as obj, mob/user as mob)
+
+ if(!isliving(user))
+ return
+
+ if(istype(W, /obj/item/clothing/accessory) || istype(W, /obj/item/weapon/hand_labeler))
+ return ..()
+
+ if(user.get_inventory_slot(src) == slot_wear_suit)
+ to_chat(user, "You cannot modify \the [src] while it is being worn.")
+ return
+
+ if(W.is_screwdriver())
+ if(boots || tank || cooler)
+ var/choice = input("What component would you like to remove?") as null|anything in list(boots,tank,cooler)
+ if(!choice) return
+
+ if(choice == tank) //No, a switch doesn't work here. Sorry. ~Techhead
+ to_chat(user, "You pop \the [tank] out of \the [src]'s storage compartment.")
+ tank.forceMove(get_turf(src))
+ playsound(src, W.usesound, 50, 1)
+ src.tank = null
+ else if(choice == cooler)
+ to_chat(user, "You pop \the [cooler] out of \the [src]'s storage compartment.")
+ cooler.forceMove(get_turf(src))
+ playsound(src, W.usesound, 50, 1)
+ src.cooler = null
+ else if(choice == boots)
+ to_chat(user, "You detach \the [boots] from \the [src]'s boot mounts.")
+ boots.forceMove(get_turf(src))
+ playsound(src, W.usesound, 50, 1)
+ src.boots = null
+ else
+ to_chat(user, "\The [src] does not have anything installed.")
+ return
+
+ ..()
+
+/obj/item/clothing/head/helmet/space/void/autolok
+ name = "AutoLok pressure helmet"
+ desc = "A rather close-fitting helmet designed to protect the wearer from hazardous conditions. Automatically deploys when the suit's sensors detect an environment that is hazardous to the wearer."
+ icon_state = "autolokhelmet"
+ item_state = "autolokhelmet"
+ species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX) //this thing can autoadapt too
+ icon = 'icons/obj/clothing/hats_vr.dmi'
+ flags_inv = HIDEEARS|BLOCKHAIR //removed HIDEFACE/MASK/EYES flags so sunglasses or facemasks don't disappear. still gotta have BLOCKHAIR or it'll clip out tho.
+
+/obj/item/clothing/head/helmet/space/void/autolok
+ sprite_sheets = list(
+ SPECIES_HUMAN = 'icons/mob/head_vr.dmi',
+ SPECIES_TAJ = 'icons/mob/species/tajaran/helmet_vr.dmi',
+ SPECIES_SKRELL = 'icons/mob/species/skrell/helmet_vr.dmi',
+ SPECIES_UNATHI = 'icons/mob/species/unathi/helmet_vr.dmi',
+ SPECIES_XENOHYBRID = 'icons/mob/species/unathi/helmet_vr.dmi',
+ SPECIES_AKULA = 'icons/mob/species/unathi/helmet_vr.dmi',
+ SPECIES_SERGAL = 'icons/mob/species/unathi/helmet_vr.dmi',
+ SPECIES_VULPKANIN = 'icons/mob/species/vulpkanin/helmet_vr.dmi',
+ SPECIES_ZORREN_HIGH = 'icons/mob/species/vulpkanin/helmet_vr.dmi',
+ SPECIES_FENNEC = 'icons/mob/species/vulpkanin/helmet_vr.dmi',
+ SPECIES_TESHARI = 'icons/mob/species/seromi/helmet_vr.dmi'
+ )
+ sprite_sheets_obj = list(
+ SPECIES_TAJ = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_SKRELL = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_UNATHI = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_XENOHYBRID = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_AKULA = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_SERGAL = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_VULPKANIN = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_ZORREN_HIGH = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_FENNEC = 'icons/obj/clothing/hats_vr.dmi',
+ SPECIES_TESHARI = 'icons/obj/clothing/hats_vr.dmi'
+ )
+ sprite_sheets_refit = list() //have to nullify this as well just to be thorough
\ No newline at end of file
diff --git a/code/modules/food/drinkingglass/metaglass.dm b/code/modules/food/drinkingglass/metaglass.dm
index 31ad0b7330..c67f816419 100644
--- a/code/modules/food/drinkingglass/metaglass.dm
+++ b/code/modules/food/drinkingglass/metaglass.dm
@@ -19,6 +19,11 @@
if (reagents.reagent_list.len > 0)
var/datum/reagent/R = reagents.get_master_reagent()
+ if(R.glass_icon_file)
+ icon = R.glass_icon_file
+ else
+ icon = initial(icon)
+
if(R.glass_icon_state)
icon_state = R.glass_icon_state
else
@@ -62,6 +67,7 @@ Drinks Data
*/
/datum/reagent
+ var/glass_icon_file = null
var/glass_icon_state = null
var/glass_center_of_mass = null
diff --git a/code/modules/food/drinkingglass/metaglass_vr.dm b/code/modules/food/drinkingglass/metaglass_vr.dm
new file mode 100644
index 0000000000..305077f387
--- /dev/null
+++ b/code/modules/food/drinkingglass/metaglass_vr.dm
@@ -0,0 +1,206 @@
+/datum/reagent/ethanol/ginzamary
+ glass_icon_state = "ginzamaryglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/deathbell
+ glass_icon_state = "deathbellglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/brownstar
+ glass_icon_state = "brownstarglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/spacersbrew
+ glass_icon_state = "spacersbrewglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/galacticpanic
+ glass_icon_state = "galacticpanicglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/bulldog
+ glass_icon_state = "bulldogglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/sbagliato
+ glass_icon_state = "sbagliatoglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/italiancrisis
+ glass_icon_state = "italiancrisisglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/bigbeer
+ glass_icon_state = "bigbeerglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/sugarrush
+ glass_icon_state = "sugarrushglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/lotus
+ glass_icon_state = "lotusglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/shroomjuice
+ glass_icon_state = "shroomjuiceglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/russianroulette
+ glass_icon_state = "russianrouletteglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/lovepotion
+ glass_icon_state = "lovepotionglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/honeyshot
+ glass_icon_state = "honeyshotglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/appletini
+ glass_icon_state = "appletiniglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/glowingappletini
+ glass_icon_state = "glowingappletiniglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/scsatw
+ glass_icon_state = "slowcomfortablescrewagainstthewallglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/choccymilk
+ glass_icon_state = "choccymilkglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/sweettea
+ glass_icon_state = "sweetteaglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/redspaceflush
+ glass_icon_state = "redspaceflushglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/graveyard
+ glass_icon_state = "graveyardglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/unsweettea
+ glass_icon_state = "unsweetteaglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/hairoftherat
+ glass_icon_state = "hairoftheratglass"
+ glass_center_of_mass = list("x"=16, "y"=8)
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/soda/kiraspecial
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/soda/brownstar
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/drink/doctor_delight
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/acid_spit
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/antifreeze
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/coffee/b52
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/bananahonk
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/bloody_mary
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/booger
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/devilskiss
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/driestmartini
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/ginfizz
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/gargle_blaster
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/goldschlager
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/hippies_delight
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/irishcarbomb
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/irish_cream
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/longislandicedtea
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/manhattan_proj
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/neurotoxin
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/screwdrivercocktail
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/silencer
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/snowwhite
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/tequilla_sunrise
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/white_russian
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/whiskey_cola
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/holywine
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/holy_mary
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
+
+/datum/reagent/ethanol/angelskiss
+ glass_icon_file = 'icons/obj/drinks_vr.dmi'
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
index 11917f4c40..47e52f3b61 100644
--- a/code/modules/mining/abandonedcrates.dm
+++ b/code/modules/mining/abandonedcrates.dm
@@ -1,9 +1,7 @@
/obj/structure/closet/crate/secure/loot
name = "abandoned crate"
desc = "What could be inside?"
- icon_state = "securecrate"
- icon_opened = "securecrateopen"
- icon_closed = "securecrate"
+ closet_appearance = /decl/closet_appearance/crate/secure
var/list/code = list()
var/list/lastattempt = list()
var/attempts = 10
diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm
index 878af570e8..415a4b2041 100644
--- a/code/modules/mining/drilling/drill.dm
+++ b/code/modules/mining/drilling/drill.dm
@@ -61,6 +61,9 @@
/obj/machinery/mining/drill/loaded
cell = /obj/item/weapon/cell/high
+/obj/machinery/mining/drill/get_cell()
+ return cell
+
/obj/machinery/mining/drill/process()
if(need_player_check)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 12bcdb76be..da01ebbc35 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -138,11 +138,8 @@
/obj/structure/closet/crate/miningcar
desc = "A mining car. This one doesn't work on rails, but has to be dragged."
name = "Mining car (not for rails)"
- icon = 'icons/obj/storage.dmi'
- icon_state = "miningcar"
+ icon = 'icons/obj/closets/miningcar.dmi'
density = 1
- icon_opened = "miningcaropen"
- icon_closed = "miningcar"
// Flags.
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 61553b3ce4..89ea5a0c29 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -1,413 +1,413 @@
-/mob/living/carbon/Initialize()
- . = ..()
- //setup reagent holders
- bloodstr = new/datum/reagents/metabolism/bloodstream(500, src)
- ingested = new/datum/reagents/metabolism/ingested(500, src)
- touching = new/datum/reagents/metabolism/touch(500, src)
- reagents = bloodstr
- if (!default_language && species_language)
- default_language = GLOB.all_languages[species_language]
-
-/mob/living/carbon/Life()
- ..()
-
- handle_viruses()
-
- // Increase germ_level regularly
- if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
- germ_level++
-
-/mob/living/carbon/Destroy()
- qdel(ingested)
- qdel(touching)
- // We don't qdel(bloodstr) because it's the same as qdel(reagents)
- for(var/guts in internal_organs)
- qdel(guts)
- for(var/food in stomach_contents)
- qdel(food)
- return ..()
-
-/mob/living/carbon/rejuvenate()
- bloodstr.clear_reagents()
- ingested.clear_reagents()
- touching.clear_reagents()
- ..()
-/* VOREStation Edit - Duplicated in our code
-/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE)
- . = ..()
- if(src.nutrition && src.stat != 2)
- adjust_nutrition(-DEFAULT_HUNGER_FACTOR / 10)
- if(src.m_intent == "run")
- adjust_nutrition(-DEFAULT_HUNGER_FACTOR / 10)
-
- if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
- src.bodytemperature += 2
-
- // Moving around increases germ_level faster
- if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
- germ_level++
-
-/mob/living/carbon/relaymove(var/mob/living/user, direction)
- if((user in src.stomach_contents) && istype(user))
- if(user.last_special <= world.time)
- user.last_special = world.time + 50
- src.visible_message("You hear something rumbling inside [src]'s stomach...")
- var/obj/item/I = user.get_active_hand()
- if(I && I.force)
- var/d = rand(round(I.force / 4), I.force)
- if(istype(src, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = src
- var/obj/item/organ/external/organ = H.get_organ(BP_TORSO)
- if (istype(organ))
- if(organ.take_damage(d, 0))
- H.UpdateDamageIcon()
- H.updatehealth()
- else
- src.take_organ_damage(d)
- user.visible_message("[user] attacks [src]'s stomach wall with the [I.name]!")
- playsound(user, 'sound/effects/attackblob.ogg', 50, 1)
-
- if(prob(src.getBruteLoss() - 50))
- for(var/atom/movable/A in stomach_contents)
- A.loc = loc
- stomach_contents.Remove(A)
- src.gib()
-*/
-/mob/living/carbon/gib()
- for(var/mob/M in src)
- if(M in src.stomach_contents)
- src.stomach_contents.Remove(M)
- M.loc = src.loc
- for(var/mob/N in viewers(src, null))
- if(N.client)
- N.show_message(text("[M] bursts out of [src]!"), 2)
- ..()
-
-/mob/living/carbon/attack_hand(mob/M as mob)
- if(!istype(M, /mob/living/carbon)) return
- if (ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
- if (H.hand)
- temp = H.organs_by_name["l_hand"]
- if(temp && !temp.is_usable())
- to_chat(H, "You can't use your [temp.name]")
- return
-
- return
-
-/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
- if(status_flags & GODMODE) return 0 //godmode
- if(def_zone == "l_hand" || def_zone == "r_hand") //Diona (And any other potential plant people) hands don't get shocked.
- if(species.flags & IS_PLANT)
- return 0
- shock_damage *= siemens_coeff
- if (shock_damage<1)
- return 0
-
- src.apply_damage(0.2 * shock_damage, BURN, def_zone, used_weapon="Electrocution") //shock the target organ
- src.apply_damage(0.4 * shock_damage, BURN, BP_TORSO, used_weapon="Electrocution") //shock the torso more
- src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
- src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
-
- playsound(src, "sparks", 50, 1, -1)
- if (shock_damage > 15)
- src.visible_message(
- "[src] was electrocuted[source ? " by the [source]" : ""]!", \
- "You feel a powerful shock course through your body!", \
- "You hear a heavy electrical crack." \
- )
- else
- src.visible_message(
- "[src] was shocked[source ? " by the [source]" : ""].", \
- "You feel a shock course through your body.", \
- "You hear a zapping sound." \
- )
-
- if(stun)
- switch(shock_damage)
- if(16 to 20)
- Stun(2)
- if(21 to 25)
- Weaken(2)
- if(26 to 30)
- Weaken(5)
- if(31 to INFINITY)
- Weaken(10) //This should work for now, more is really silly and makes you lay there forever
-
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, loc)
- s.start()
-
- return shock_damage
-
-/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
- if (src.health >= config.health_threshold_crit)
- if(src == M && istype(src, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = src
- var/datum/gender/T = gender_datums[H.get_visible_gender()]
- src.visible_message( \
- "[src] examines [T.himself].", \
- "You check yourself for injuries." \
- )
-
- for(var/obj/item/organ/external/org in H.organs)
- var/list/status = list()
- var/brutedamage = org.brute_dam
- var/burndamage = org.burn_dam
- /*
- if(halloss > 0) //Makes halloss show up as actual wounds on self examine.
- if(prob(30))
- brutedamage += halloss
- if(prob(30))
- burndamage += halloss
- */
- switch(brutedamage)
- if(1 to 20)
- status += "bruised"
- if(20 to 40)
- status += "wounded"
- if(40 to INFINITY)
- status += "mangled"
-
- switch(burndamage)
- if(1 to 10)
- status += "numb"
- if(10 to 40)
- status += "blistered"
- if(40 to INFINITY)
- status += "peeling away"
-
- if(org.is_stump())
- status += "MISSING"
- if(org.status & ORGAN_MUTATED)
- status += "weirdly shapen"
- if(org.dislocated == 2)
- status += "dislocated"
- if(org.status & ORGAN_BROKEN)
- status += "hurts when touched"
- if(org.status & ORGAN_DEAD)
- status += "is bruised and necrotic"
- if(!org.is_usable() || org.is_dislocated())
- status += "dangling uselessly"
- if(status.len)
- src.show_message("My [org.name] is [english_list(status)].",1)
- else
- src.show_message("My [org.name] is OK.",1)
-
- if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit))
- H.play_xylophone()
- else if (on_fire)
- playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- if (M.on_fire)
- M.visible_message("[M] tries to pat out [src]'s flames, but to no avail!",
- "You try to pat out [src]'s flames, but to no avail! Put yourself out first!")
- else
- M.visible_message("[M] tries to pat out [src]'s flames!",
- "You try to pat out [src]'s flames! Hot!")
- if(do_mob(M, src, 15))
- src.adjust_fire_stacks(-0.5)
- if (prob(10) && (M.fire_stacks <= 0))
- M.adjust_fire_stacks(1)
- M.IgniteMob()
- if (M.on_fire)
- M.visible_message("The fire spreads from [src] to [M]!",
- "The fire spreads to you as well!")
- else
- src.adjust_fire_stacks(-0.5) //Less effective than stop, drop, and roll - also accounting for the fact that it takes half as long.
- if (src.fire_stacks <= 0)
- M.visible_message("[M] successfully pats out [src]'s flames.",
- "You successfully pat out [src]'s flames.")
- src.ExtinguishMob()
- src.fire_stacks = 0
- else
- if (istype(src,/mob/living/carbon/human) && src:w_uniform)
- var/mob/living/carbon/human/H = src
- H.w_uniform.add_fingerprint(M)
-
- var/show_ssd
- var/mob/living/carbon/human/H = src
- var/datum/gender/T = gender_datums[H.get_visible_gender()] // make sure to cast to human before using get_gender() or get_visible_gender()!
- if(istype(H)) show_ssd = H.species.show_ssd
- if(show_ssd && !client && !teleop)
- M.visible_message("[M] shakes [src] trying to wake [T.him] up!", \
- "You shake [src], but [T.he] [T.does] not respond... Maybe [T.he] [T.has] S.S.D?")
- else if(lying || src.sleeping)
- src.sleeping = max(0,src.sleeping-5)
- if(src.sleeping == 0)
- src.resting = 0
- if(H) H.in_stasis = 0 //VOREStation Add - Just In Case
- M.visible_message("[M] shakes [src] trying to wake [T.him] up!", \
- "You shake [src] trying to wake [T.him] up!")
- else
- var/mob/living/carbon/human/hugger = M
- var/datum/gender/TM = gender_datums[M.get_visible_gender()]
- if(M.resting == 1) //Are they resting on the ground?
- M.visible_message("[M] grabs onto [src] and pulls [TM.himself] up", \
- "You grip onto [src] and pull yourself up off the ground!")
- if(M.fire_stacks >= (src.fire_stacks + 3)) //Fire checks.
- src.adjust_fire_stacks(1)
- M.adjust_fire_stacks(-1)
- if(M.on_fire)
- src.IgniteMob()
- if(do_after(M, 0.5 SECONDS)) //.5 second delay. Makes it a bit stronger than just typing rest.
- M.resting = 0 //Hoist yourself up up off the ground. No para/stunned/weakened removal.
- else if(istype(hugger))
- hugger.species.hug(hugger,src)
- else
- M.visible_message("[M] hugs [src] to make [T.him] feel better!", \
- "You hug [src] to make [T.him] feel better!")
- if(M.fire_stacks >= (src.fire_stacks + 3))
- src.adjust_fire_stacks(1)
- M.adjust_fire_stacks(-1)
- if(M.on_fire)
- src.IgniteMob()
- AdjustParalysis(-3)
- AdjustStunned(-3)
- AdjustWeakened(-3)
-
- playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
-
-/mob/living/carbon/proc/eyecheck()
- return 0
-
-/mob/living/carbon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash)
- if(eyecheck() < intensity || override_blindness_check)
- return ..()
-
-// ++++ROCKDTBEN++++ MOB PROCS -- Ask me before touching.
-// Stop! ... Hammertime! ~Carn
-
-/mob/living/carbon/proc/getDNA()
- return dna
-
-/mob/living/carbon/proc/setDNA(var/datum/dna/newDNA)
- dna = newDNA
-
-// ++++ROCKDTBEN++++ MOB PROCS //END
-
-/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- ..()
- var/temp_inc = max(min(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), exposed_temperature - bodytemperature), 0)
- bodytemperature += temp_inc
-
-/mob/living/carbon/can_use_hands()
- if(handcuffed)
- return 0
- if(buckled && istype(buckled, /obj/structure/bed/nest)) // buckling does not restrict hands
- return 0
- return 1
-
-/mob/living/carbon/restrained()
- if (handcuffed)
- return 1
- return
-
-/mob/living/carbon/u_equip(obj/item/W as obj)
- if(!W) return 0
-
- else if (W == handcuffed)
- handcuffed = null
- update_handcuffed()
- if(buckled && buckled.buckle_require_restraints)
- buckled.unbuckle_mob()
-
- else if (W == legcuffed)
- legcuffed = null
- update_inv_legcuffed()
- else
- ..()
-
-
-//generates realistic-ish pulse output based on preset levels
-/mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate
- var/temp = 0 //see setup.dm:694
- switch(src.pulse)
- if(PULSE_NONE)
- return "0"
- if(PULSE_SLOW)
- temp = rand(40, 60)
- return num2text(method ? temp : temp + rand(-10, 10))
- if(PULSE_NORM)
- temp = rand(60, 90)
- return num2text(method ? temp : temp + rand(-10, 10))
- if(PULSE_FAST)
- temp = rand(90, 120)
- return num2text(method ? temp : temp + rand(-10, 10))
- if(PULSE_2FAST)
- temp = rand(120, 160)
- return num2text(method ? temp : temp + rand(-10, 10))
- if(PULSE_THREADY)
- return method ? ">250" : "extremely weak and fast, patient's artery feels like a thread"
-// output for machines^ ^^^^^^^output for people^^^^^^^^^
-
-/mob/living/carbon/verb/mob_sleep()
- set name = "Sleep"
- set category = "IC"
-
- if(usr.sleeping)
- to_chat(usr, "You are already sleeping")
- return
- if(alert(src,"You sure you want to sleep for a while?","Sleep","Yes","No") == "Yes")
- usr.sleeping = 20 //Short nap
-
-/mob/living/carbon/Bump(atom/A)
- if(now_pushing)
- return
- ..()
- if(istype(A, /mob/living/carbon) && prob(10))
- spread_disease_to(A, "Contact")
-
-/mob/living/carbon/cannot_use_vents()
- return
-
-/mob/living/carbon/slip(var/slipped_on,stun_duration=8)
- if(buckled)
- return 0
- stop_pulling()
- to_chat(src, "You slipped on [slipped_on]!")
- playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
- Weaken(FLOOR(stun_duration/2, 1))
- return 1
-
-/mob/living/carbon/proc/add_chemical_effect(var/effect, var/magnitude = 1)
- if(effect in chem_effects)
- chem_effects[effect] += magnitude
- else
- chem_effects[effect] = magnitude
-
-/mob/living/carbon/get_default_language()
- if(default_language)
- if(can_speak(default_language))
- return default_language
- else
- return GLOB.all_languages[LANGUAGE_GIBBERISH]
-
- if(!species)
- return GLOB.all_languages[LANGUAGE_GIBBERISH]
-
- return species.default_language ? GLOB.all_languages[species.default_language] : GLOB.all_languages[LANGUAGE_GIBBERISH]
-
-/mob/living/carbon/proc/should_have_organ(var/organ_check)
- return 0
-
-/mob/living/carbon/can_feel_pain(var/check_organ)
- if(isSynthetic())
- return 0
- return !(species.flags & NO_PAIN)
-
-/mob/living/carbon/needs_to_breathe()
- if(does_not_breathe)
- return FALSE
- return ..()
-
-/mob/living/carbon/proc/update_handcuffed()
- if(handcuffed)
- drop_l_hand()
- drop_r_hand()
- stop_pulling()
- throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = handcuffed)
- else
- clear_alert("handcuffed")
- update_action_buttons() //some of our action buttons might be unusable when we're handcuffed.
- update_inv_handcuffed()
+/mob/living/carbon/Initialize()
+ . = ..()
+ //setup reagent holders
+ bloodstr = new/datum/reagents/metabolism/bloodstream(500, src)
+ ingested = new/datum/reagents/metabolism/ingested(500, src)
+ touching = new/datum/reagents/metabolism/touch(500, src)
+ reagents = bloodstr
+ if (!default_language && species_language)
+ default_language = GLOB.all_languages[species_language]
+
+/mob/living/carbon/Life()
+ ..()
+
+ handle_viruses()
+
+ // Increase germ_level regularly
+ if(germ_level < GERM_LEVEL_AMBIENT && prob(30)) //if you're just standing there, you shouldn't get more germs beyond an ambient level
+ germ_level++
+
+/mob/living/carbon/Destroy()
+ qdel(ingested)
+ qdel(touching)
+ // We don't qdel(bloodstr) because it's the same as qdel(reagents)
+ for(var/guts in internal_organs)
+ qdel(guts)
+ for(var/food in stomach_contents)
+ qdel(food)
+ return ..()
+
+/mob/living/carbon/rejuvenate()
+ bloodstr.clear_reagents()
+ ingested.clear_reagents()
+ touching.clear_reagents()
+ ..()
+/* VOREStation Edit - Duplicated in our code
+/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE)
+ . = ..()
+ if(src.nutrition && src.stat != 2)
+ adjust_nutrition(-DEFAULT_HUNGER_FACTOR / 10)
+ if(src.m_intent == "run")
+ adjust_nutrition(-DEFAULT_HUNGER_FACTOR / 10)
+
+ if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
+ src.bodytemperature += 2
+
+ // Moving around increases germ_level faster
+ if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))
+ germ_level++
+
+/mob/living/carbon/relaymove(var/mob/living/user, direction)
+ if((user in src.stomach_contents) && istype(user))
+ if(user.last_special <= world.time)
+ user.last_special = world.time + 50
+ src.visible_message("You hear something rumbling inside [src]'s stomach...")
+ var/obj/item/I = user.get_active_hand()
+ if(I && I.force)
+ var/d = rand(round(I.force / 4), I.force)
+ if(istype(src, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = src
+ var/obj/item/organ/external/organ = H.get_organ(BP_TORSO)
+ if (istype(organ))
+ if(organ.take_damage(d, 0))
+ H.UpdateDamageIcon()
+ H.updatehealth()
+ else
+ src.take_organ_damage(d)
+ user.visible_message("[user] attacks [src]'s stomach wall with the [I.name]!")
+ playsound(user, 'sound/effects/attackblob.ogg', 50, 1)
+
+ if(prob(src.getBruteLoss() - 50))
+ for(var/atom/movable/A in stomach_contents)
+ A.loc = loc
+ stomach_contents.Remove(A)
+ src.gib()
+*/
+/mob/living/carbon/gib()
+ for(var/mob/M in src)
+ if(M in src.stomach_contents)
+ src.stomach_contents.Remove(M)
+ M.loc = src.loc
+ for(var/mob/N in viewers(src, null))
+ if(N.client)
+ N.show_message(text("[M] bursts out of [src]!"), 2)
+ ..()
+
+/mob/living/carbon/attack_hand(mob/M as mob)
+ if(!istype(M, /mob/living/carbon)) return
+ if (ishuman(M))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
+ if (H.hand)
+ temp = H.organs_by_name["l_hand"]
+ if(temp && !temp.is_usable())
+ to_chat(H, "You can't use your [temp.name]")
+ return
+
+ return
+
+/mob/living/carbon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0, var/def_zone = null, var/stun = 1)
+ if(status_flags & GODMODE) return 0 //godmode
+ if(def_zone == "l_hand" || def_zone == "r_hand") //Diona (And any other potential plant people) hands don't get shocked.
+ if(species.flags & IS_PLANT)
+ return 0
+ shock_damage *= siemens_coeff
+ if (shock_damage<1)
+ return 0
+
+ src.apply_damage(0.2 * shock_damage, BURN, def_zone, used_weapon="Electrocution") //shock the target organ
+ src.apply_damage(0.4 * shock_damage, BURN, BP_TORSO, used_weapon="Electrocution") //shock the torso more
+ src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
+ src.apply_damage(0.2 * shock_damage, BURN, null, used_weapon="Electrocution") //shock a random part!
+
+ playsound(src, "sparks", 50, 1, -1)
+ if (shock_damage > 15)
+ src.visible_message(
+ "[src] was electrocuted[source ? " by the [source]" : ""]!", \
+ "You feel a powerful shock course through your body!", \
+ "You hear a heavy electrical crack." \
+ )
+ else
+ src.visible_message(
+ "[src] was shocked[source ? " by the [source]" : ""].", \
+ "You feel a shock course through your body.", \
+ "You hear a zapping sound." \
+ )
+
+ if(stun)
+ switch(shock_damage)
+ if(16 to 20)
+ Stun(2)
+ if(21 to 25)
+ Weaken(2)
+ if(26 to 30)
+ Weaken(5)
+ if(31 to INFINITY)
+ Weaken(10) //This should work for now, more is really silly and makes you lay there forever
+
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, loc)
+ s.start()
+
+ return shock_damage
+
+/mob/living/carbon/proc/help_shake_act(mob/living/carbon/M)
+ if (src.health >= config.health_threshold_crit)
+ if(src == M && istype(src, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = src
+ var/datum/gender/T = gender_datums[H.get_visible_gender()]
+ src.visible_message( \
+ "[src] examines [T.himself].", \
+ "You check yourself for injuries." \
+ )
+
+ for(var/obj/item/organ/external/org in H.organs)
+ var/list/status = list()
+ var/brutedamage = org.brute_dam
+ var/burndamage = org.burn_dam
+ /*
+ if(halloss > 0) //Makes halloss show up as actual wounds on self examine.
+ if(prob(30))
+ brutedamage += halloss
+ if(prob(30))
+ burndamage += halloss
+ */
+ switch(brutedamage)
+ if(1 to 20)
+ status += "bruised"
+ if(20 to 40)
+ status += "wounded"
+ if(40 to INFINITY)
+ status += "mangled"
+
+ switch(burndamage)
+ if(1 to 10)
+ status += "numb"
+ if(10 to 40)
+ status += "blistered"
+ if(40 to INFINITY)
+ status += "peeling away"
+
+ if(org.is_stump())
+ status += "MISSING"
+ if(org.status & ORGAN_MUTATED)
+ status += "weirdly shapen"
+ if(org.dislocated == 2)
+ status += "dislocated"
+ if(org.status & ORGAN_BROKEN)
+ status += "hurts when touched"
+ if(org.status & ORGAN_DEAD)
+ status += "is bruised and necrotic"
+ if(!org.is_usable() || org.is_dislocated())
+ status += "dangling uselessly"
+ if(status.len)
+ src.show_message("My [org.name] is [english_list(status)].",1)
+ else
+ src.show_message("My [org.name] is OK.",1)
+
+ if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit))
+ H.play_xylophone()
+ else if (on_fire)
+ playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ if (M.on_fire)
+ M.visible_message("[M] tries to pat out [src]'s flames, but to no avail!",
+ "You try to pat out [src]'s flames, but to no avail! Put yourself out first!")
+ else
+ M.visible_message("[M] tries to pat out [src]'s flames!",
+ "You try to pat out [src]'s flames! Hot!")
+ if(do_mob(M, src, 15))
+ src.adjust_fire_stacks(-0.5)
+ if (prob(10) && (M.fire_stacks <= 0))
+ M.adjust_fire_stacks(1)
+ M.IgniteMob()
+ if (M.on_fire)
+ M.visible_message("The fire spreads from [src] to [M]!",
+ "The fire spreads to you as well!")
+ else
+ src.adjust_fire_stacks(-0.5) //Less effective than stop, drop, and roll - also accounting for the fact that it takes half as long.
+ if (src.fire_stacks <= 0)
+ M.visible_message("[M] successfully pats out [src]'s flames.",
+ "You successfully pat out [src]'s flames.")
+ src.ExtinguishMob()
+ src.fire_stacks = 0
+ else
+ if (istype(src,/mob/living/carbon/human) && src:w_uniform)
+ var/mob/living/carbon/human/H = src
+ H.w_uniform.add_fingerprint(M)
+
+ var/show_ssd
+ var/mob/living/carbon/human/H = src
+ var/datum/gender/T = gender_datums[H.get_visible_gender()] // make sure to cast to human before using get_gender() or get_visible_gender()!
+ if(istype(H)) show_ssd = H.species.show_ssd
+ if(show_ssd && !client && !teleop)
+ M.visible_message("[M] shakes [src] trying to wake [T.him] up!", \
+ "You shake [src], but [T.he] [T.does] not respond... Maybe [T.he] [T.has] S.S.D?")
+ else if(lying || src.sleeping)
+ src.sleeping = max(0,src.sleeping-5)
+ if(src.sleeping == 0)
+ src.resting = 0
+ if(H) H.in_stasis = 0 //VOREStation Add - Just In Case
+ M.visible_message("[M] shakes [src] trying to wake [T.him] up!", \
+ "You shake [src] trying to wake [T.him] up!")
+ else
+ var/mob/living/carbon/human/hugger = M
+ var/datum/gender/TM = gender_datums[M.get_visible_gender()]
+ if(M.resting == 1) //Are they resting on the ground?
+ M.visible_message("[M] grabs onto [src] and pulls [TM.himself] up", \
+ "You grip onto [src] and pull yourself up off the ground!")
+ if(M.fire_stacks >= (src.fire_stacks + 3)) //Fire checks.
+ src.adjust_fire_stacks(1)
+ M.adjust_fire_stacks(-1)
+ if(M.on_fire)
+ src.IgniteMob()
+ if(do_after(M, 0.5 SECONDS)) //.5 second delay. Makes it a bit stronger than just typing rest.
+ M.resting = 0 //Hoist yourself up up off the ground. No para/stunned/weakened removal.
+ else if(istype(hugger))
+ hugger.species.hug(hugger,src)
+ else
+ M.visible_message("[M] hugs [src] to make [T.him] feel better!", \
+ "You hug [src] to make [T.him] feel better!")
+ if(M.fire_stacks >= (src.fire_stacks + 3))
+ src.adjust_fire_stacks(1)
+ M.adjust_fire_stacks(-1)
+ if(M.on_fire)
+ src.IgniteMob()
+ AdjustParalysis(-3)
+ AdjustStunned(-3)
+ AdjustWeakened(-3)
+
+ playsound(src, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+
+/mob/living/carbon/proc/eyecheck()
+ return 0
+
+/mob/living/carbon/flash_eyes(intensity = FLASH_PROTECTION_MODERATE, override_blindness_check = FALSE, affect_silicon = FALSE, visual = FALSE, type = /obj/screen/fullscreen/flash)
+ if(eyecheck() < intensity || override_blindness_check)
+ return ..()
+
+// ++++ROCKDTBEN++++ MOB PROCS -- Ask me before touching.
+// Stop! ... Hammertime! ~Carn
+
+/mob/living/carbon/proc/getDNA()
+ return dna
+
+/mob/living/carbon/proc/setDNA(var/datum/dna/newDNA)
+ dna = newDNA
+
+// ++++ROCKDTBEN++++ MOB PROCS //END
+
+/mob/living/carbon/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
+ ..()
+ var/temp_inc = max(min(BODYTEMP_HEATING_MAX*(1-get_heat_protection()), exposed_temperature - bodytemperature), 0)
+ bodytemperature += temp_inc
+
+/mob/living/carbon/can_use_hands()
+ if(handcuffed)
+ return 0
+ if(buckled && istype(buckled, /obj/structure/bed/nest)) // buckling does not restrict hands
+ return 0
+ return 1
+
+/mob/living/carbon/restrained()
+ if (handcuffed)
+ return 1
+ return
+
+/mob/living/carbon/u_equip(obj/item/W as obj)
+ if(!W) return 0
+
+ else if (W == handcuffed)
+ handcuffed = null
+ update_handcuffed()
+ if(buckled && buckled.buckle_require_restraints)
+ buckled.unbuckle_mob()
+
+ else if (W == legcuffed)
+ legcuffed = null
+ update_inv_legcuffed()
+ else
+ ..()
+
+
+//generates realistic-ish pulse output based on preset levels
+/mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate
+ var/temp = 0 //see setup.dm:694
+ switch(src.pulse)
+ if(PULSE_NONE)
+ return "0"
+ if(PULSE_SLOW)
+ temp = rand(40, 60)
+ return num2text(method ? temp : temp + rand(-10, 10))
+ if(PULSE_NORM)
+ temp = rand(60, 90)
+ return num2text(method ? temp : temp + rand(-10, 10))
+ if(PULSE_FAST)
+ temp = rand(90, 120)
+ return num2text(method ? temp : temp + rand(-10, 10))
+ if(PULSE_2FAST)
+ temp = rand(120, 160)
+ return num2text(method ? temp : temp + rand(-10, 10))
+ if(PULSE_THREADY)
+ return method ? ">250" : "extremely weak and fast, patient's artery feels like a thread"
+// output for machines^ ^^^^^^^output for people^^^^^^^^^
+
+/mob/living/carbon/verb/mob_sleep()
+ set name = "Sleep"
+ set category = "IC"
+
+ if(usr.sleeping)
+ to_chat(usr, "You are already sleeping")
+ return
+ if(alert(src,"You sure you want to sleep for a while?","Sleep","Yes","No") == "Yes")
+ usr.sleeping = 20 //Short nap
+
+/mob/living/carbon/Bump(atom/A)
+ if(now_pushing)
+ return
+ ..()
+ if(istype(A, /mob/living/carbon) && prob(10))
+ spread_disease_to(A, "Contact")
+
+/mob/living/carbon/cannot_use_vents()
+ return
+
+/mob/living/carbon/slip(var/slipped_on,stun_duration=8)
+ if(buckled)
+ return 0
+ stop_pulling()
+ to_chat(src, "You slipped on [slipped_on]!")
+ playsound(src, 'sound/misc/slip.ogg', 50, 1, -3)
+ Weaken(FLOOR(stun_duration/2, 1))
+ return 1
+
+/mob/living/carbon/proc/add_chemical_effect(var/effect, var/magnitude = 1)
+ if(effect in chem_effects)
+ chem_effects[effect] += magnitude
+ else
+ chem_effects[effect] = magnitude
+
+/mob/living/carbon/get_default_language()
+ if(default_language)
+ if(can_speak(default_language))
+ return default_language
+ else
+ return GLOB.all_languages[LANGUAGE_GIBBERISH]
+
+ if(!species)
+ return GLOB.all_languages[LANGUAGE_GIBBERISH]
+
+ return species.default_language ? GLOB.all_languages[species.default_language] : GLOB.all_languages[LANGUAGE_GIBBERISH]
+
+/mob/living/carbon/proc/should_have_organ(var/organ_check)
+ return 0
+
+/mob/living/carbon/can_feel_pain(var/check_organ)
+ if(isSynthetic())
+ return 0
+ return !(species.flags & NO_PAIN)
+
+/mob/living/carbon/needs_to_breathe()
+ if(does_not_breathe)
+ return FALSE
+ return ..()
+
+/mob/living/carbon/proc/update_handcuffed()
+ if(handcuffed)
+ drop_l_hand()
+ drop_r_hand()
+ stop_pulling()
+ throw_alert("handcuffed", /obj/screen/alert/restrained/handcuffed, new_master = handcuffed)
+ else
+ clear_alert("handcuffed")
+ update_action_buttons() //some of our action buttons might be unusable when we're handcuffed.
+ update_inv_handcuffed()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 2f091e3806..eb95bdebbc 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1652,6 +1652,11 @@
msg += get_display_species()
return msg
+/mob/living/carbon/human/reduce_cuff_time()
+ if(istype(gloves, /obj/item/clothing/gloves/gauntlets/rig))
+ return 2
+ return ..()
+
/mob/living/carbon/human/pull_damage()
if(((health - halloss) <= config.health_threshold_softcrit))
for(var/name in organs_by_name)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 444607b470..b8ab794303 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1229,12 +1229,14 @@
fat_alert = /obj/screen/alert/fat/synth
hungry_alert = /obj/screen/alert/hungry/synth
starving_alert = /obj/screen/alert/starving/synth
+ //VOREStation Add - Vampire hunger alert
else if(get_species() == SPECIES_CUSTOM)
var/datum/species/custom/C = species
if(/datum/trait/bloodsucker in C.traits)
fat_alert = /obj/screen/alert/fat/vampire
hungry_alert = /obj/screen/alert/hungry/vampire
starving_alert = /obj/screen/alert/starving/vampire
+ //VOREStation Add End
switch(nutrition)
if(450 to INFINITY)
diff --git a/code/modules/mob/living/simple_mob/simple_hud.dm b/code/modules/mob/living/simple_mob/simple_hud.dm
index d9641b4068..5f0c2b3746 100644
--- a/code/modules/mob/living/simple_mob/simple_hud.dm
+++ b/code/modules/mob/living/simple_mob/simple_hud.dm
@@ -158,6 +158,8 @@
healths.screen_loc = ui_health
hud_elements |= healths
+
+
pain = new /obj/screen( null )
zone_sel = new /obj/screen/zone_sel( null )
diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm
index 55a9172c07..6215cf9b2a 100644
--- a/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/mercs/mercs_vr.dm
@@ -22,4 +22,7 @@
max_co2 = 0
min_n2 = 0
max_n2 = 0
- minbodytemp = 0
\ No newline at end of file
+ minbodytemp = 0
+
+/datum/ai_holder/simple_mob/merc
+ intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death.
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm
index 4d418b0001..f45c1b185d 100644
--- a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax.dm
@@ -81,7 +81,7 @@
icon_scale_y = 1.5
movement_shake_radius = 14
- maxHealth = 350 //VOREStation Edit
+ maxHealth = 450
deflect_chance = 25
has_repair_droid = TRUE
armor = list(
diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax_vr.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax_vr.dm
new file mode 100644
index 0000000000..5d0aad8ef4
--- /dev/null
+++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/adv_dark_gygax_vr.dm
@@ -0,0 +1,2 @@
+/datum/ai_holder/simple_mob/intentional/adv_dark_gygax
+ intelligence_level = AI_SMART // Also knows not to walk while confused if it risks death.
diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm
index 1a776b4e15..5307a05cd0 100644
--- a/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm
+++ b/code/modules/mob/living/simple_mob/subtypes/vore/mimic.dm
@@ -27,8 +27,8 @@
new_mimic.name = name
new_mimic.desc = desc
new_mimic.icon = icon
- new_mimic.icon_state = icon_opened
- new_mimic.icon_living = icon_opened
+ new_mimic.icon_state = "open"
+ new_mimic.icon_living = "open"
else
return ..()
else
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 6464642a3b..ff68a02eac 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -277,3 +277,31 @@
break
return highJob
+
+/datum/preferences/proc/get_valid_hairstyles()
+ var/list/valid_hairstyles = list()
+ for(var/hairstyle in hair_styles_list)
+ var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
+ if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance
+ continue
+ if((!S.ckeys_allowed) || (usr.ckey in S.ckeys_allowed)) //VOREStation Edit, allows ckey locked hairstyles.
+ valid_hairstyles[S.name] = hairstyle //VOREStation Edit, allows ckey locked hairstyles.
+
+ //valid_hairstyles[hairstyle] = hair_styles_list[hairstyle] //VOREStation Edit. Replaced by above.
+
+ return valid_hairstyles
+
+/datum/preferences/proc/get_valid_facialhairstyles()
+ var/list/valid_facialhairstyles = list()
+ for(var/facialhairstyle in facial_hair_styles_list)
+ var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
+ if(biological_gender == MALE && S.gender == FEMALE)
+ continue
+ if(biological_gender == FEMALE && S.gender == MALE)
+ continue
+ if(!(species in S.species_allowed) && (!custom_base || !(custom_base in S.species_allowed))) //VOREStation Edit - Custom species base species allowance
+ continue
+
+ valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
+
+ return valid_facialhairstyles
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index cf951eb3ae..080b19b32d 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -1383,5 +1383,5 @@ Note that amputating the affected organ does in fact remove the infection from t
. = 0
for(var/obj/item/organ/external/L in organs)
for(var/obj/item/I in L.implants)
- if(!istype(I,/obj/item/weapon/implant) && !istype(I,/obj/item/device/nif))
+ if(!istype(I,/obj/item/weapon/implant) && !istype(I,/obj/item/device/nif)) //VOREStation Add - NIFs
return 1
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm
index fcabd92e39..45e05ef86c 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks_vr.dm
@@ -106,3 +106,300 @@
playsound(M, 'sound/items/hooh.ogg', 50, 1, -1)
if(prob(5))
to_chat(M, "You feel like you've been gnomed...")
+
+
+
+/datum/reagent/ethanol/galacticpanic
+ name = "Galactic Panic Attack"
+ id = "galacticpanic"
+ description = "The absolute worst thing you could ever put in your body."
+ taste_description = "an entire galaxy collasping in on itself."
+ strength = 10
+ druggy = 50
+ halluci = 30
+ var/adj_dizzy = 10
+ color = "#d3785d"
+
+ glass_name = "Galactic Panic Attack"
+ glass_desc = "Looking into this is like staring at the stars."
+
+/datum/reagent/ethanol/galacticpanic/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.Stun(2)
+
+/datum/reagent/ethanol/galacticpanic/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ if(dose * strength >= strength) // Early warning
+ M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects.
+ if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional.
+ M.slurring = max(M.slurring, 30)
+
+/datum/reagent/ethanol/bulldog
+ name = "Space Bulldog"
+ id = "bulldog"
+ description = "An inventive kahlua recipe."
+ taste_description = "fizzy, creamy, soda and coffee hell."
+ strength = 30
+ color = "#d3785d"
+
+ glass_name = "Space Bulldog"
+ glass_desc = "It looks like someone poured cola in a cup of coffee."
+
+
+/datum/reagent/ethanol/sbagliato
+ name = "Negroni Sbagliato"
+ id = "sbagliato"
+ description = "A drink invented because a bartender was too drunk."
+ taste_description = "sweet bubbly wine and vermouth."
+ strength = 30
+ color = "#d3785d"
+
+ glass_name = "Negroni Sbagliato"
+ glass_desc = "Bubbles constantly pop up to the surface with a quiet fizz."
+
+
+/datum/reagent/ethanol/italiancrisis
+ name = "Italian Crisis"
+ id = "italiancrisis"
+ description = "This drink was concocted by a madwoman, causing the Italian Crisis of 2123."
+ taste_description = "cola, fruit, fizz, coffee, and cream swirled together in an old boot."
+ strength = 20
+ druggy = 0
+ halluci = 0
+ var/adj_dizzy = 0
+ color = "#d3785d"
+
+ glass_name = "Italian Crisis"
+ glass_desc = "This drink looks like it was a mistake."
+
+/datum/reagent/ethanol/sugarrush
+ name = "Sweet Rush"
+ id = "sugarrush"
+ description = "A favorite drink amongst poor bartenders living in Neo Detroit."
+ taste_description = "sweet bubblegum vodka."
+ strength = 30
+ color = "#d3785d"
+
+ glass_name = "Sweet Rush"
+ glass_desc = "This looks like it might rot your teeth out."
+
+/datum/reagent/ethanol/lotus
+ name = "Lotus"
+ id = "lotus"
+ description = "The result of making one mistake after another and trying to cover it up with sugar."
+ taste_description = "rich, sweet fruit and even more sugar."
+ strength = 25
+ color = "#d3785d"
+
+ glass_name = "Lotus"
+ glass_desc = "A promotional drink for a movie that only ever played in Neo Detroit theatres."
+
+/datum/reagent/ethanol/shroomjuice
+ name = "Dumb Shroom Juice"
+ id = "shroomjuice"
+ description = "The mushroom farmer didn't sort through their stock very well."
+ taste_description = "sweet and sour citrus with a savory kick."
+ strength = 100
+ druggy = 30
+ halluci = 30
+ var/adj_dizzy = 30
+ color = "#d3785d"
+
+ glass_name = "Dumb Shroom Juice"
+ glass_desc = "Touch fuzzy, get dizzy."
+
+/datum/reagent/ethanol/russianroulette
+ name = "Russian Roulette"
+ id = "russianroulette"
+ description = "The perfect drink for wagering your liver on a game of cards."
+ taste_description = "coffee, vodka, cream, and a hot metal slug."
+ strength = 30
+ var/adj_dizzy = 30
+ color = "#d3785d"
+
+ glass_name = "Russian Roulette"
+ glass_desc = "A favorite drink amongst the Pan-Slavic speaking community."
+
+/datum/reagent/ethanol/russianroulette/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.Stun(2)
+
+/datum/reagent/ethanol/lovepotion
+ name = "Love Potion"
+ id = "lovepotion"
+ description = "A drink said to help one find true love."
+ taste_description = "sweet fruit and honey."
+ strength = 30
+ druggy = 0
+ halluci = 0
+ var/adj_dizzy = 30
+ adj_temp = 10
+ targ_temp = 360
+ color = "#d3785d"
+
+ glass_name = "Love Potion"
+ glass_desc = "A drink said to help one find the perfect fuck."
+
+/datum/reagent/ethanol/honeyshot
+ name = "Honey Shot"
+ id = "honeyshot"
+ description = "The perfect drink for bees."
+ taste_description = "sweet tart grenadine flavored with honey."
+ strength = 40
+ var/adj_dizzy = 10
+ color = "#d3785d"
+
+ glass_name = "Honey shot"
+ glass_desc = "A glass of golden liquid."
+
+/datum/reagent/ethanol/appletini
+ name = "Appletini"
+ id = "appletini"
+ description = "A classic cocktail using every grandma's favorite fruit."
+ taste_description = "green sour apple with a hint of alcohol."
+ strength = 45
+ color = "#d3785d"
+
+ glass_name = "Appletini"
+ glass_desc = "The perfect fruit cocktail for a fancy night at the bar."
+
+/datum/reagent/ethanol/glowingappletini
+ name = "Glowing Appletini"
+ id = "glowingappletini"
+ description = "A new nuclear take on a pre-modern classic!"
+ taste_description = "overwhelmingly sour apples powered by a nuclear fission reactor."
+ strength = 30
+ druggy = 20
+ var/adj_dizzy = 20
+ color = "#d3785d"
+
+ glass_name = "Glowing Appletini"
+ glass_desc = "The atomic option to fruity cocktails."
+
+/datum/reagent/ethanol/scsatw
+ name = "Slow Comfortable Screw Against the Wall"
+ id = "scsatw"
+ description = "The screwdriver's bigger cousin."
+ taste_description = "smooth, savory booze and tangy orange juice."
+ strength = 0
+ druggy = 0
+ halluci = 0
+ var/adj_dizzy = 0
+ color = "#d3785d"
+
+ glass_name = "Slow Comfortable Screw Against the Wall"
+ glass_desc = "The best accessory to daydrinking."
+
+/datum/reagent/drink/choccymilk
+ name = "Choccy Milk"
+ id = "choccymilk"
+ description = "Coco and milk, a timeless classic."
+ taste_description = "sophisticated bittersweet chocolate mixed with silky, creamy, whole milk."
+ color = "#d3785d"
+
+ glass_name = "Choccy Milk"
+ glass_desc = "The most iconic duo in the galaxy, chocolate, and milk."
+
+/datum/reagent/ethanol/redspaceflush
+ name = "Red Space Flush"
+ id = "redspaceflush"
+ description = "A drink made by imbueing the essence of redspace into the spirits."
+ taste_description = "whiskey and rum strung out through a hellish dimensional rift."
+ strength = 30
+ druggy = 10
+ var/adj_dizzy = 10
+ color = "#d3785d"
+
+ glass_name = "Redspace Flush"
+ glass_desc = "A drink imbued with the very essence of Redspace."
+
+/datum/reagent/drink/graveyard
+ name = "Graveyard"
+ id = "graveyard"
+ description = "The result of taking a cup and filling it with all the drinks at the fountain."
+ taste_description = "sugar and fizz."
+ color = "#d3785d"
+
+ glass_name = "Graveyard"
+ glass_desc = "Hahaha softdrink machine go pshshhhhh..."
+
+/datum/reagent/ethanol/bigbeer
+ name = "Giant Beer"
+ id = "bigbeer"
+ description = "Bars in Neo Detroit started to sell this drink when the city put mandatory drink limits in 2289."
+ taste_description = "beer, but bigger."
+ strength = 40
+ color = "#d3785d"
+
+ glass_name = "Giant Beer"
+ glass_desc = "The Neo Detroit beer and ale cocktail, perfect for your average drunk."
+
+/datum/reagent/drink/sweettea
+ name = "Sweet Tea"
+ id = "sweettea"
+ description = "Tea that is sweetened with some form of sweetener."
+ taste_description = "tea that is sweet."
+ color = "#d3785d"
+
+ glass_name = "Sweet Tea"
+ glass_desc = "A southern classic. Southern what? You know, southern."
+
+/datum/reagent/ethanol/unsweettea
+ name = "Unsweetened Tea"
+ id = "unsweettea"
+ description = "A sick experiment to take the sweetness out of tea after sugar has been added resulted in this."
+ taste_description = "bland, slightly bitter, discount black tea."
+ strength = 80
+ druggy = 10
+ color = "#d3785d"
+
+ glass_name = "Unsweetened Tea"
+ glass_desc = "A drink with all the calories of sweet tea, but with none of the satisfaction. Slightly psychoactive."
+
+/datum/reagent/ethanol/hairoftherat
+ name = "Hair of the Rat"
+ id = "hairoftherat"
+ description = "A meatier version of the monster tamer, complete with extra meat."
+ taste_description = "meat, whiskey, ground meat, and more meat."
+ strength = 45
+ color = "#d3785d"
+ metabolism = REM * 3.5 // about right for mixing nutriment and ethanol.
+ var/alt_nutriment_factor = 5 //half as much as protein since it's half protein.
+ //using a new variable instead of nutriment_factor so we can call ..() without that adding nutrition for us without taking factors for protein into account
+
+ glass_name = "Hair of the Rat"
+ glass_desc = "The alcohol equivelant of saying your burger isn't cooked rare enough."
+
+/datum/reagent/ethanol/hairoftherat/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+
+ if(M.species.gets_food_nutrition) //it's still food!
+ switch(alien)
+ if(IS_DIONA) //Diona don't get any nutrition from nutriment or protein.
+ if(IS_SKRELL)
+ M.adjustToxLoss(0.25 * removed) //Equivalent to half as much protein, since it's half protein.
+ if(IS_TESHARI)
+ M.nutrition += (alt_nutriment_factor * 1.2 * removed) //Give them the same nutrition they would get from protein.
+ if(IS_UNATHI)
+ M.nutrition += (alt_nutriment_factor * 1.125 * removed) //Give them the same nutrition they would get from protein.
+ //Takes into account the 0.5 factor for all nutriment which is applied on top of the 2.25 factor for protein.
+ //Chimera don't need their own case here since their factors for nutriment and protein cancel out.
+ else
+ M.nutrition += (alt_nutriment_factor * removed)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) // same check as feral triggers to stop them immediately re-feralling
+ H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm.
+ if (H.feral <=0) //check if they're unferalled
+ H.feral = 0
+ to_chat(H, "Your mind starts to clear, soothed into a state of clarity as your senses return.")
+ log_and_message_admins("is no longer feral.", H)
+
+/datum/reagent/ethanol/hairoftherat/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SKRELL)
+ M.adjustToxLoss(removed) //Equivalent to half as much protein, since it's half protein.
+ if(M.species.gets_food_nutrition)
+ if(alien == IS_SLIME || alien == IS_CHIMERA) //slimes and chimera can get nutrition from injected nutriment and protein
+ M.nutrition += (alt_nutriment_factor * removed)
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index d76b731ee7..b2591d992f 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1861,7 +1861,7 @@
name = "Snow White"
id = "snowwhite"
result = "snowwhite"
- required_reagents = list("beer" = 1, "lemon_lime" = 1)
+ required_reagents = list("pineapplejuice" = 1, "rum" = 1, "lemon_lime" = 1, "egg" = 1, "kahlua" = 1, "sugar" = 1) //VoreStation Edit
result_amount = 2
/datum/chemical_reaction/drinks/irishcarbomb
diff --git a/code/modules/reagents/Chemistry-Recipes_vr.dm b/code/modules/reagents/Chemistry-Recipes_vr.dm
index 4450b59342..195f926c25 100644
--- a/code/modules/reagents/Chemistry-Recipes_vr.dm
+++ b/code/modules/reagents/Chemistry-Recipes_vr.dm
@@ -129,6 +129,146 @@
required_reagents = list("whiskey" = 1, "protein" = 1)
result_amount = 2
+/datum/chemical_reaction/drinks/bigbeer
+ name = "Giant Beer"
+ id = "bigbeer"
+ result = "bigbeer"
+ required_reagents = list("syndicatebomb" = 1, "manlydorf" = 1, "grog" =1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/sweettea
+ name = "Sweetened Tea"
+ id = "sweettea"
+ result = "sweettea"
+ required_reagents = list("icetea" = 2, "sugar" = 1,)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/unsweettea
+ name = "Unsweetened Tea"
+ id = "unsweettea"
+ result = "unsweettea"
+ required_reagents = list("sweettea" = 3, "phoron" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/drinks/galacticpanic
+ name = "Galactic Panic Attack"
+ id = "galacticpanic"
+ result = "galacticpanic"
+ required_reagents = list("gargleblaster" = 1, "singulo" = 1, "phoronspecial" =1, "neurotoxin" = 1, "atomicbomb" = 1, "hippiesdelight" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/bulldog
+ name = "Space Bulldog"
+ id = "bulldog"
+ result = "bulldog"
+ required_reagents = list("blackrussian" = 3, "cola" =1, "cream" =1)
+ result_amount = 5
+
+/datum/chemical_reaction/drinks/sbagliato
+ name = "Negroni Sbagliato"
+ id = "sbagliato"
+ result = "sbagliato"
+ required_reagents = list("wine" = 1, "vermouth" = 1, "sodawater" =1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/italiancrisis
+ name = "Italian Crisis"
+ id = "italiancrisis"
+ result = "italiancrisis"
+ required_reagents = list("bulldog" = 1, "sbagliato" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/drinks/sugarrush
+ name = "Sweet Rush"
+ id = "sugarrush"
+ result = "sugarrush"
+ required_reagents = list("sugar" = 1, "sodawater" = 1, "vodka" =1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/lotus
+ name = "Lotus"
+ id = "lotus"
+ result = "lotus"
+ required_reagents = list("sbagliato" = 1, "sugarrush" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/drinks/shroomjuice
+ name = "Dumb Shroom Juice"
+ id = "shroomjuice"
+ result = "shroomjuice"
+ required_reagents = list("psilocybin" = 1, "applejuice" = 1, "limejuice" =1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/russianroulette
+ name = "Russian Roulette"
+ id = "russianroulette"
+ result = "russianroulette"
+ required_reagents = list("whiterussian" = 5, "iron" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/lovepotion
+ name = "Love Potion"
+ id = "lovepotion"
+ result = "lovepotion"
+ required_reagents = list("honey" = 1, "sexonthebeach" = 5)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/honeyshot
+ name = "Honey Shot"
+ id = "honeyshot"
+ result = "honeyshot"
+ required_reagents = list("honey" = 1, "vodka" = 1, "grenadine" =1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/appletini
+ name = "Appletini"
+ id = "appletini"
+ result = "appletini"
+ required_reagents = list("applejuice" = 2, "vodka" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/glowingappletini
+ name = "Glowing Appletini"
+ id = "glowingappletini"
+ result = "glowingappletini"
+ required_reagents = list("appletini" = 5, "uranium" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/scsatw
+ name = "Slow Comfortable Screw Against the Wall"
+ id = "scsatw"
+ result = "scsatw"
+ required_reagents = list("screwdrivercocktail" = 3, "rum" =1, "whiskey" =1, "gin" =1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/choccymilk
+ name = "Choccy Milk"
+ id = "choccymilk"
+ result = "choccymilk"
+ required_reagents = list("milk" = 3, "coco" = 1)
+ result_amount = 4
+
+/datum/chemical_reaction/drinks/redspaceflush
+ name = "Redspace Flush"
+ id = "redspaceflush"
+ result = "redspaceflush"
+ required_reagents = list("rum" = 2, "whiskey" = 2, "blood" =1, "phoron" =1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/graveyard
+ name = "Graveyard"
+ id = "graveyard"
+ result = "graveyard"
+ required_reagents = list("cola" = 1, "spacemountainwind" = 1, "dr_gibb" =1, "space_up" = 1)
+ result_amount = 4
+
+/datum/chemical_reaction/drinks/hairoftherat
+ name = "Hair of the Rat"
+ id = "hairoftherat"
+ result = "hairoftherat"
+ required_reagents = list("monstertamer" = 2, "nutriment" = 1)
+ result_amount = 3
+
///////////////////////////////////////////////////////////////////////////////////
/// Reagent colonies.
/datum/chemical_reaction/meatcolony
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 159ce9ed4a..315b492e6b 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -209,6 +209,7 @@
overlays += I
examine(mob/user)
+ . = ..()
if(get_dist(user, src) <= 4)
if(sortTag)
. += "It is labeled \"[sortTag]\""
diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
index 4e39dfcfcf..8809e678a1 100644
--- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
+++ b/code/modules/vore/appearance/sprite_accessories_taur_vr.dm
@@ -421,6 +421,10 @@
name = "Frog (Taur)"
icon_state = "frog_s"
+/datum/sprite_accessory/tail/taur/thicktentacles
+ name = "Tentacles(Thick)"
+ icon_state = "tentacles_s"
+
/datum/sprite_accessory/tail/taur/drake //Enabling on request, no suit compatibility but then again see 2 above.
name = "Drake (Taur)"
icon_state = "drake_s"
@@ -558,4 +562,4 @@
msg_prey_grab_success = "%owner slides over you with their vines, smushing you against the ground before wrapping one up around you, trapping you within the tight confines of their vines!"
msg_owner_grab_fail = "You step down onto %prey with one of your vines, forcing them onto the ground!"
- msg_prey_grab_fail = "%owner steps down onto you with one of their vines, squishing you and forcing you onto the ground!"
\ No newline at end of file
+ msg_prey_grab_fail = "%owner steps down onto you with one of their vines, squishing you and forcing you onto the ground!"
diff --git a/code/modules/xenoarcheaology/misc.dm b/code/modules/xenoarcheaology/misc.dm
index 7567d63abd..38de366259 100644
--- a/code/modules/xenoarcheaology/misc.dm
+++ b/code/modules/xenoarcheaology/misc.dm
@@ -128,49 +128,6 @@
new /obj/item/weapon/book/manual/stasis(src)
update_icon()
-/obj/structure/closet/secure_closet/xenoarchaeologist
- name = "Xenoarchaeologist Locker"
- icon_state = "secureres1"
- icon_closed = "secureres"
- icon_locked = "secureres1"
- icon_opened = "secureresopen"
- icon_broken = "secureresbroken"
- icon_off = "secureresoff"
- req_access = list(access_tox_storage)
-
- starts_with = list(
- /obj/item/clothing/under/rank/scientist,
- /obj/item/clothing/suit/storage/toggle/labcoat,
- /obj/item/clothing/shoes/white,
- /obj/item/weapon/melee/umbrella, // vorestation addition,
- /obj/item/clothing/glasses/science,
- /obj/item/device/radio/headset/headset_sci,
- /obj/item/weapon/storage/belt/archaeology,
- /obj/item/weapon/storage/excavation)
-
-/obj/structure/closet/excavation
- name = "Excavation tools"
- icon_state = "toolcloset"
- icon_closed = "toolcloset"
- icon_opened = "toolclosetopen"
-
- starts_with = list(
- /obj/item/weapon/storage/belt/archaeology,
- /obj/item/weapon/storage/excavation,
- /obj/item/device/flashlight/lantern,
- /obj/item/device/ano_scanner,
- /obj/item/device/depth_scanner,
- /obj/item/device/core_sampler,
- /obj/item/device/gps,
- /obj/item/device/beacon_locator,
- /obj/item/device/radio/beacon,
- /obj/item/clothing/glasses/meson,
- /obj/item/weapon/pickaxe,
- /obj/item/device/measuring_tape,
- /obj/item/weapon/pickaxe/hand,
- /obj/item/weapon/storage/bag/fossils,
- /obj/item/weapon/hand_labeler)
-
/obj/machinery/alarm/isolation
req_one_access = list(access_research, access_atmospherics, access_engine_equip)
diff --git a/html/changelogs/KasparoVv - PR - 7215.yml b/html/changelogs/KasparoVv - PR - 7215.yml
new file mode 100644
index 0000000000..efd745d1a9
--- /dev/null
+++ b/html/changelogs/KasparoVv - PR - 7215.yml
@@ -0,0 +1,7 @@
+author: KasparoVv
+delete-after: True
+changes:
+ - rscadd: "You can now quickly cycle hrough previous or next hair/facial styles at character creation."
+ - rscadd: "Use the -mv- button to pick a marking and place it above of another on your character. Saves you from pressing up or down a bunch."
+ - tweak: "Ports color_square() from Paradise for colour previews, cleaning up pref. code & correct alignment issue w/ nested tables."
+ - tweak: "Markings are now properly aligned within a table."
\ No newline at end of file
diff --git a/icons/mob/head_vr.dmi b/icons/mob/head_vr.dmi
index 57bd8f01cb..78db695e45 100644
Binary files a/icons/mob/head_vr.dmi and b/icons/mob/head_vr.dmi differ
diff --git a/icons/mob/spacesuit_vr.dmi b/icons/mob/spacesuit_vr.dmi
index 2f2ead49f5..e92e4b25f9 100644
Binary files a/icons/mob/spacesuit_vr.dmi and b/icons/mob/spacesuit_vr.dmi differ
diff --git a/icons/mob/species/akula/helmet_vr.dmi b/icons/mob/species/akula/helmet_vr.dmi
index 69aef545f6..10006401a9 100644
Binary files a/icons/mob/species/akula/helmet_vr.dmi and b/icons/mob/species/akula/helmet_vr.dmi differ
diff --git a/icons/mob/species/akula/suit_vr.dmi b/icons/mob/species/akula/suit_vr.dmi
index 859d79a1fe..a115004c1b 100644
Binary files a/icons/mob/species/akula/suit_vr.dmi and b/icons/mob/species/akula/suit_vr.dmi differ
diff --git a/icons/mob/species/sergal/helmet_vr.dmi b/icons/mob/species/sergal/helmet_vr.dmi
index c77450aaeb..36f2d74074 100644
Binary files a/icons/mob/species/sergal/helmet_vr.dmi and b/icons/mob/species/sergal/helmet_vr.dmi differ
diff --git a/icons/mob/species/sergal/suit_vr.dmi b/icons/mob/species/sergal/suit_vr.dmi
index 1f62670b49..005914f9f6 100644
Binary files a/icons/mob/species/sergal/suit_vr.dmi and b/icons/mob/species/sergal/suit_vr.dmi differ
diff --git a/icons/mob/species/seromi/helmet_vr.dmi b/icons/mob/species/seromi/helmet_vr.dmi
new file mode 100644
index 0000000000..bbc12adc65
Binary files /dev/null and b/icons/mob/species/seromi/helmet_vr.dmi differ
diff --git a/icons/mob/species/seromi/suit_vr.dmi b/icons/mob/species/seromi/suit_vr.dmi
new file mode 100644
index 0000000000..21b6ff521e
Binary files /dev/null and b/icons/mob/species/seromi/suit_vr.dmi differ
diff --git a/icons/mob/species/skrell/helmet_vr.dmi b/icons/mob/species/skrell/helmet_vr.dmi
new file mode 100644
index 0000000000..b9a619f31a
Binary files /dev/null and b/icons/mob/species/skrell/helmet_vr.dmi differ
diff --git a/icons/mob/species/skrell/suit_vr.dmi b/icons/mob/species/skrell/suit_vr.dmi
new file mode 100644
index 0000000000..7ab10e717d
Binary files /dev/null and b/icons/mob/species/skrell/suit_vr.dmi differ
diff --git a/icons/mob/species/tajaran/helmet_vr.dmi b/icons/mob/species/tajaran/helmet_vr.dmi
new file mode 100644
index 0000000000..fc18570e04
Binary files /dev/null and b/icons/mob/species/tajaran/helmet_vr.dmi differ
diff --git a/icons/mob/species/tajaran/suit_vr.dmi b/icons/mob/species/tajaran/suit_vr.dmi
new file mode 100644
index 0000000000..41a8e5cd26
Binary files /dev/null and b/icons/mob/species/tajaran/suit_vr.dmi differ
diff --git a/icons/mob/species/unathi/helmet_vr.dmi b/icons/mob/species/unathi/helmet_vr.dmi
new file mode 100644
index 0000000000..9891ee7432
Binary files /dev/null and b/icons/mob/species/unathi/helmet_vr.dmi differ
diff --git a/icons/mob/species/unathi/suit_vr.dmi b/icons/mob/species/unathi/suit_vr.dmi
new file mode 100644
index 0000000000..b1ebcbbc08
Binary files /dev/null and b/icons/mob/species/unathi/suit_vr.dmi differ
diff --git a/icons/mob/species/vulpkanin/helmet_vr.dmi b/icons/mob/species/vulpkanin/helmet_vr.dmi
index 5b422f8ccf..2a7ce4375d 100644
Binary files a/icons/mob/species/vulpkanin/helmet_vr.dmi and b/icons/mob/species/vulpkanin/helmet_vr.dmi differ
diff --git a/icons/mob/species/vulpkanin/suit_vr.dmi b/icons/mob/species/vulpkanin/suit_vr.dmi
index a8836a5a6e..670ce464d3 100644
Binary files a/icons/mob/species/vulpkanin/suit_vr.dmi and b/icons/mob/species/vulpkanin/suit_vr.dmi differ
diff --git a/icons/mob/taursuits_naga_vr.dmi b/icons/mob/taursuits_naga_vr.dmi
index 375081158f..7df326318c 100644
Binary files a/icons/mob/taursuits_naga_vr.dmi and b/icons/mob/taursuits_naga_vr.dmi differ
diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi
index 32f3bfa603..70051a7d20 100644
Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ
diff --git a/icons/obj/bodybag.dmi b/icons/obj/bodybag.dmi
deleted file mode 100644
index db2ab61815..0000000000
Binary files a/icons/obj/bodybag.dmi and /dev/null differ
diff --git a/icons/obj/closets/abductor.dmi b/icons/obj/closets/abductor.dmi
new file mode 100644
index 0000000000..8f3b2d2706
Binary files /dev/null and b/icons/obj/closets/abductor.dmi differ
diff --git a/icons/obj/closets/bases/cabinet.dmi b/icons/obj/closets/bases/cabinet.dmi
new file mode 100644
index 0000000000..236b164ca6
Binary files /dev/null and b/icons/obj/closets/bases/cabinet.dmi differ
diff --git a/icons/obj/closets/bases/cart.dmi b/icons/obj/closets/bases/cart.dmi
new file mode 100644
index 0000000000..852e539b4d
Binary files /dev/null and b/icons/obj/closets/bases/cart.dmi differ
diff --git a/icons/obj/closets/bases/closet.dmi b/icons/obj/closets/bases/closet.dmi
new file mode 100644
index 0000000000..551435629e
Binary files /dev/null and b/icons/obj/closets/bases/closet.dmi differ
diff --git a/icons/obj/closets/bases/crate.dmi b/icons/obj/closets/bases/crate.dmi
new file mode 100644
index 0000000000..e8e26686fc
Binary files /dev/null and b/icons/obj/closets/bases/crate.dmi differ
diff --git a/icons/obj/closets/bases/large_crate.dmi b/icons/obj/closets/bases/large_crate.dmi
new file mode 100644
index 0000000000..1cdac27783
Binary files /dev/null and b/icons/obj/closets/bases/large_crate.dmi differ
diff --git a/icons/obj/closets/bases/wall.dmi b/icons/obj/closets/bases/wall.dmi
new file mode 100644
index 0000000000..6689e59cfc
Binary files /dev/null and b/icons/obj/closets/bases/wall.dmi differ
diff --git a/icons/obj/closets/bodybag.dmi b/icons/obj/closets/bodybag.dmi
new file mode 100644
index 0000000000..d6922f8bbe
Binary files /dev/null and b/icons/obj/closets/bodybag.dmi differ
diff --git a/icons/obj/closets/coffin.dmi b/icons/obj/closets/coffin.dmi
new file mode 100644
index 0000000000..f639469aa2
Binary files /dev/null and b/icons/obj/closets/coffin.dmi differ
diff --git a/icons/obj/closets/coffin_wood.dmi b/icons/obj/closets/coffin_wood.dmi
new file mode 100644
index 0000000000..dfddc743f9
Binary files /dev/null and b/icons/obj/closets/coffin_wood.dmi differ
diff --git a/icons/obj/closets/cryobag.dmi b/icons/obj/closets/cryobag.dmi
new file mode 100644
index 0000000000..1681a884d8
Binary files /dev/null and b/icons/obj/closets/cryobag.dmi differ
diff --git a/icons/obj/closets/decals/cart.dmi b/icons/obj/closets/decals/cart.dmi
new file mode 100644
index 0000000000..c4d71bcde8
Binary files /dev/null and b/icons/obj/closets/decals/cart.dmi differ
diff --git a/icons/obj/closets/decals/closet.dmi b/icons/obj/closets/decals/closet.dmi
new file mode 100644
index 0000000000..ea42c1f535
Binary files /dev/null and b/icons/obj/closets/decals/closet.dmi differ
diff --git a/icons/obj/closets/decals/crate.dmi b/icons/obj/closets/decals/crate.dmi
new file mode 100644
index 0000000000..b0e600aeff
Binary files /dev/null and b/icons/obj/closets/decals/crate.dmi differ
diff --git a/icons/obj/closets/decals/large_crate.dmi b/icons/obj/closets/decals/large_crate.dmi
new file mode 100644
index 0000000000..4876570265
Binary files /dev/null and b/icons/obj/closets/decals/large_crate.dmi differ
diff --git a/icons/obj/closets/decals/wall.dmi b/icons/obj/closets/decals/wall.dmi
new file mode 100644
index 0000000000..b9b207407e
Binary files /dev/null and b/icons/obj/closets/decals/wall.dmi differ
diff --git a/icons/obj/closets/fridge.dmi b/icons/obj/closets/fridge.dmi
new file mode 100644
index 0000000000..1d6955ceea
Binary files /dev/null and b/icons/obj/closets/fridge.dmi differ
diff --git a/icons/obj/closets/grave.dmi b/icons/obj/closets/grave.dmi
new file mode 100644
index 0000000000..58c5f7dcef
Binary files /dev/null and b/icons/obj/closets/grave.dmi differ
diff --git a/icons/obj/closets/miningcar.dmi b/icons/obj/closets/miningcar.dmi
new file mode 100644
index 0000000000..02452b7c63
Binary files /dev/null and b/icons/obj/closets/miningcar.dmi differ
diff --git a/icons/obj/closets/poireactor.dmi b/icons/obj/closets/poireactor.dmi
new file mode 100644
index 0000000000..dfd48bf27b
Binary files /dev/null and b/icons/obj/closets/poireactor.dmi differ
diff --git a/icons/obj/closets/rescuebag.dmi b/icons/obj/closets/rescuebag.dmi
new file mode 100644
index 0000000000..7ed654f5f7
Binary files /dev/null and b/icons/obj/closets/rescuebag.dmi differ
diff --git a/icons/obj/clothing/hats_vr.dmi b/icons/obj/clothing/hats_vr.dmi
index a2cec1a3ba..0c235adc55 100644
Binary files a/icons/obj/clothing/hats_vr.dmi and b/icons/obj/clothing/hats_vr.dmi differ
diff --git a/icons/obj/clothing/spacesuits_vr.dmi b/icons/obj/clothing/spacesuits_vr.dmi
new file mode 100644
index 0000000000..cf74d73796
Binary files /dev/null and b/icons/obj/clothing/spacesuits_vr.dmi differ
diff --git a/icons/obj/clothing/species/vulpkanin/helmets_vr.dmi b/icons/obj/clothing/species/vulpkanin/helmets_vr.dmi
index cf561b831c..9105570c1e 100644
Binary files a/icons/obj/clothing/species/vulpkanin/helmets_vr.dmi and b/icons/obj/clothing/species/vulpkanin/helmets_vr.dmi differ
diff --git a/icons/obj/clothing/species/vulpkanin/spacesuits_vr.dmi b/icons/obj/clothing/species/vulpkanin/spacesuits_vr.dmi
index e2b68e0961..5f83544da6 100644
Binary files a/icons/obj/clothing/species/vulpkanin/spacesuits_vr.dmi and b/icons/obj/clothing/species/vulpkanin/spacesuits_vr.dmi differ
diff --git a/icons/obj/clothing/suits_vr.dmi b/icons/obj/clothing/suits_vr.dmi
index af6e271aea..2d90e3db04 100644
Binary files a/icons/obj/clothing/suits_vr.dmi and b/icons/obj/clothing/suits_vr.dmi differ
diff --git a/icons/obj/cryobag.dmi b/icons/obj/cryobag.dmi
deleted file mode 100644
index 68255b8b2c..0000000000
Binary files a/icons/obj/cryobag.dmi and /dev/null differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 606e8dbfe8..3b41c35fcd 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/drinks_vr.dmi b/icons/obj/drinks_vr.dmi
index a8d69aa327..cc5526147f 100644
Binary files a/icons/obj/drinks_vr.dmi and b/icons/obj/drinks_vr.dmi differ
diff --git a/maps/RandomZLevels/beach.dmm b/maps/RandomZLevels/beach.dmm
index cd824491ce..2f6543ece8 100644
--- a/maps/RandomZLevels/beach.dmm
+++ b/maps/RandomZLevels/beach.dmm
@@ -100,8 +100,6 @@
/area/awaymission/beach)
"t" = (
/obj/structure/closet/gmcloset{
- icon_closed = "black";
- icon_state = "black";
name = "formal wardrobe"
},
/turf/unsimulated/floor{
diff --git a/maps/RandomZLevels/wildwest.dmm b/maps/RandomZLevels/wildwest.dmm
index 716f54672e..2322a4d410 100644
--- a/maps/RandomZLevels/wildwest.dmm
+++ b/maps/RandomZLevels/wildwest.dmm
@@ -426,11 +426,7 @@
},
/area/awaymission/wwmines)
"bA" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/turf/simulated/floor/wood,
/area/awaymission/wwmines)
"bB" = (
diff --git a/maps/RandomZLevels/zoo.dmm b/maps/RandomZLevels/zoo.dmm
index ffda103d1a..057c502f5d 100644
--- a/maps/RandomZLevels/zoo.dmm
+++ b/maps/RandomZLevels/zoo.dmm
@@ -101,7 +101,7 @@
"bW" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship)
"bX" = (/obj/machinery/gibber,/turf/simulated/floor/tiled/white,/area/awaymission/zoo/pirateship)
"bY" = (/obj/machinery/button/remote/airlock{id = "packerCargo"; pixel_y = 24},/turf/simulated/floor/tiled,/area/awaymission/zoo/pirateship)
-"bZ" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship)
+"bZ" = (/obj/structure/closet/cabinet,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship)
"ca" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship)
"cb" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship)
"cc" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/black,/area/awaymission/zoo/tradeship)
diff --git a/maps/RandomZLevels/zresearchlabs.dmm b/maps/RandomZLevels/zresearchlabs.dmm
index 5139dcda39..8c3606b6b4 100644
--- a/maps/RandomZLevels/zresearchlabs.dmm
+++ b/maps/RandomZLevels/zresearchlabs.dmm
@@ -475,7 +475,7 @@
"jg" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"jh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"ji" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
-"jj" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/rank/navysecurity,/obj/item/clothing/suit/armor/navysecvest,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
+"jj" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/rank/navysecurity,/obj/item/clothing/suit/armor/navysecvest,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
"jk" = (/obj/machinery/camera{dir = 1; pixel_x = 10; c_tag = "Fore Port Solar Control Entrance"},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
"jl" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
"jm" = (/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm
index a4308e1b2d..63b9b7e3ef 100644
--- a/maps/northern_star/polaris-1.dmm
+++ b/maps/northern_star/polaris-1.dmm
@@ -1955,7 +1955,7 @@
"aLE" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
"aLF" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
"aLG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
-"aLH" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
+"aLH" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
"aLI" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aLJ" = (/obj/structure/closet/crate,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/obj/item/target,/turf/simulated/floor/tiled,/area/security/range)
"aLK" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/range)
@@ -4913,7 +4913,7 @@
"bQy" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/southleft,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/bar)
"bQz" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/obj/item/weapon/storage/secure/safe{pixel_z = 30},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bQA" = (/obj/structure/reagent_dispensers/beerkeg,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Storage"; dir = 2},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"bQB" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bQB" = (/obj/structure/closet/gmcloset{name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bQC" = (/turf/simulated/wall,/area/crew_quarters/bar)
"bQD" = (/obj/machinery/computer/arcade,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bQE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
@@ -9872,7 +9872,7 @@
"dHR" = (/obj/item/weapon/rig/breacher,/obj/item/clothing/mask/breath,/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
"dHS" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/light,/turf/simulated/floor/tiled,/area/crew_quarters/visitor_lodging)
"dHT" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/item/clothing/mask/breath,/obj/item/weapon/rig/breacher,/turf/simulated/floor/tiled/dark,/area/ai_monitored/storage/eva)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm
index 9de9c2ce52..3188454641 100644
--- a/maps/northern_star/polaris-2.dmm
+++ b/maps/northern_star/polaris-2.dmm
@@ -338,7 +338,7 @@
"gz" = (/obj/structure/table/standard,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/shuttle/arrival/pre_game)
"gA" = (/obj/machinery/computer/pod{id = "syndicate_elite"; name = "Hull Door Control"},/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"gB" = (/obj/machinery/computer/syndicate_elite_shuttle,/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
-"gC" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
+"gC" = (/obj/structure/closet/cabinet,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"gD" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"gE" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"gF" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
@@ -1073,9 +1073,9 @@
"uG" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uH" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/obj/item/weapon/tank/emergency/oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"uI" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/administration/centcom)
-"uJ" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"uJ" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"uK" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
-"uL" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"uL" = (/obj/structure/closet/cabinet,/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"uM" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uN" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/button/flasher{id = "syndieflash"; name = "Flasher"; pixel_x = 27; pixel_y = 0},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"uO" = (/obj/machinery/button/remote/blast_door{id = "smindicate"; name = "ship lockdown control"; pixel_x = -25},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
@@ -2236,7 +2236,7 @@
"QZ" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Ra" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
"Rb" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
-"Rc" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Rc" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Rd" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Re" = (/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Rf" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "vox_west_control"; pixel_x = -22; req_one_access = list(150)},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2253,7 +2253,7 @@
"Rq" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 6},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Rr" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Rs" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
-"Rt" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Rt" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Ru" = (/mob/living/simple_mob/animal/passive/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Rv" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Rw" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
@@ -2265,10 +2265,10 @@
"RC" = (/obj/machinery/photocopier,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"RD" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"RE" = (/obj/structure/flora/pottedplant{icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"RF" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"RG" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"RH" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"RI" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"RF" = (/obj/structure/closet/cabinet,/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"RG" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"RH" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"RI" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"RJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{id = "skipjackshutters"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"RK" = (/obj/item/robot_parts/l_leg,/turf/simulated/shuttle/plating,/area/skipjack_station/start)
"RL" = (/obj/machinery/the_singularitygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
@@ -2398,7 +2398,7 @@
"Ug" = (/obj/machinery/computer/teleporter,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Uh" = (/obj/machinery/teleport/station,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"Ui" = (/obj/machinery/teleport/hub,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacadadaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagagagagagagagagagagagagagafafafafafafafafafafafafafafafafafafafafahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiahaiaiaiaiaiaiaiaiaiaiah
aaajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaaacacacacacacacadacacacacacacacacacacacacacacacacacacacacacacacadacaeacacacacacacacacacacacacacacacacacacacacacacacaeacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagakalagakalagakalagakalagafafafafafafafafafafafafafafafafafafafafamanananaoananananananapaqaraqaraqaqaraqaraqapasatatatatatatatatatapauavawawawawawawawawapaxaxaxaxaxaxaxaxaxaxapayayayayayayayayayayapazaAaBaCaDaDaDaDaDaEaF
diff --git a/maps/northern_star/polaris-5.dmm b/maps/northern_star/polaris-5.dmm
index 40c415c0a5..e82132b825 100644
--- a/maps/northern_star/polaris-5.dmm
+++ b/maps/northern_star/polaris-5.dmm
@@ -1479,7 +1479,7 @@
"Cw" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
"Cx" = (/obj/machinery/button/remote/airlock{id = "miningdorm3"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
"Cy" = (/obj/machinery/button/remote/airlock{id = "miningdorm1"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
-"Cz" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/under/overalls,/obj/item/clothing/under/rank/miner,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
+"Cz" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/obj/item/clothing/under/overalls,/obj/item/clothing/under/rank/miner,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
"CA" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
"CB" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
"CC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
@@ -1912,7 +1912,7 @@
"KN" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"KO" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"KP" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "asteroidplating2"},/area/outpost/engineering/solarsoutside/aft)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index 0077da2ef7..4687278007 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -7643,7 +7643,7 @@
"cQY" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/bar)
"cQZ" = (/obj/structure/catwalk,/obj/random/plushielarge,/turf/simulated/floor/plating,/area/maintenance/bar)
"cRa" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"cRb" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Storage"; dir = 2},/obj/machinery/firealarm{pixel_y = 24},/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"cRb" = (/obj/structure/closet/gmcloset{name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Storage"; dir = 2},/obj/machinery/firealarm{pixel_y = 24},/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"cRc" = (/obj/machinery/smartfridge/drinks,/obj/machinery/light{dir = 1},/turf/simulated/floor/lino,/area/crew_quarters/bar)
"cRd" = (/obj/machinery/light/small,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar)
"cRe" = (/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/clean,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar)
diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm
index 1c36191fbf..07cc8f53de 100644
--- a/maps/southern_cross/southern_cross-3.dmm
+++ b/maps/southern_cross/southern_cross-3.dmm
@@ -863,7 +863,7 @@
"qE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"qF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"qG" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/surface/outpost/main)
-"qH" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
+"qH" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"qI" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"qJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"qK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm
index 093a311a88..b2dcb8663d 100644
--- a/maps/southern_cross/southern_cross-6.dmm
+++ b/maps/southern_cross/southern_cross-6.dmm
@@ -1120,7 +1120,7 @@
"vB" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/security)
"vC" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical)
"vD" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/centcom/evac)
-"vE" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
+"vE" = (/obj/structure/closet/cabinet,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"vF" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"vG" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
"vH" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/shuttle/floor/black,/area/shuttle/merchant/home)
@@ -1495,13 +1495,13 @@
"CM" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"CN" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
"CO" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
-"CP" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"CP" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"CQ" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"CR" = (/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"CS" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 6},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"CT" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"CU" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
-"CV" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"CV" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"CW" = (/mob/living/simple_mob/animal/passive/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"CX" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"CY" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal)
@@ -1511,10 +1511,10 @@
"Dc" = (/obj/machinery/photocopier,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Dd" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"De" = (/obj/structure/flora/pottedplant{icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"Df" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"Dg" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"Dh" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"Di" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Df" = (/obj/structure/closet/cabinet,/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dg" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Dh" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"Di" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"Dj" = (/obj/structure/bed/chair/shuttle{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
"Dk" = (/obj/structure/bed/chair/shuttle{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/escape/centcom)
"Dl" = (/obj/machinery/the_singularitygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
diff --git a/maps/southern_cross/structures/closets/engineering.dm b/maps/southern_cross/structures/closets/engineering.dm
index 0c757ad011..278ace3e93 100644
--- a/maps/southern_cross/structures/closets/engineering.dm
+++ b/maps/southern_cross/structures/closets/engineering.dm
@@ -5,13 +5,8 @@
/obj/structure/closet/secure_closet/engineering_chief_wardrobe
name = "chief engineer's wardrobe"
- icon_state = "securece1"
- icon_closed = "securece"
- icon_locked = "securece1"
- icon_opened = "secureceopen"
- icon_broken = "securecebroken"
- icon_off = "secureceoff"
req_access = list(access_ce)
+ closet_appearance = /decl/closet_appearance/secure_closet/engineering/ce
starts_with = list(
/obj/item/clothing/under/rank/chief_engineer,
diff --git a/maps/southern_cross/structures/closets/medical.dm b/maps/southern_cross/structures/closets/medical.dm
index 0ea515d974..f528c2a0f1 100644
--- a/maps/southern_cross/structures/closets/medical.dm
+++ b/maps/southern_cross/structures/closets/medical.dm
@@ -5,13 +5,8 @@
/obj/structure/closet/secure_closet/CMO_wardrobe
name = "chief medical officer's locker"
- icon_state = "cmosecure1"
- icon_closed = "cmosecure"
- icon_locked = "cmosecure1"
- icon_opened = "cmosecureopen"
- icon_broken = "cmosecurebroken"
- icon_off = "cmosecureoff"
req_access = list(access_cmo)
+ closet_appearance = /decl/closet_appearance/secure_closet/cmo
starts_with = list(
/obj/item/clothing/under/rank/chief_medical_officer,
diff --git a/maps/southern_cross/structures/closets/misc.dm b/maps/southern_cross/structures/closets/misc.dm
index 18e02806d5..fa8f23873a 100644
--- a/maps/southern_cross/structures/closets/misc.dm
+++ b/maps/southern_cross/structures/closets/misc.dm
@@ -74,13 +74,8 @@
/obj/structure/closet/secure_closet/sar
name = "search and rescue locker"
desc = "Supplies for a wilderness first responder."
- icon_state = "medical1"
- icon_closed = "medical"
- icon_locked = "medical1"
- icon_opened = "medicalopen"
- icon_broken = "medicalbroken"
- icon_off = "medicaloff"
req_access = list(access_medical_equip)
+ closet_appearance = /decl/closet_appearance/secure_closet/medical
starts_with = list(
/obj/item/weapon/storage/backpack/dufflebag/emt,
diff --git a/maps/southern_cross/structures/closets/research.dm b/maps/southern_cross/structures/closets/research.dm
index 6630706df9..00331364ef 100644
--- a/maps/southern_cross/structures/closets/research.dm
+++ b/maps/southern_cross/structures/closets/research.dm
@@ -5,13 +5,8 @@
/obj/structure/closet/secure_closet/RD_wardrobe
name = "research director's locker"
- icon_state = "rdsecure1"
- icon_closed = "rdsecure"
- icon_locked = "rdsecure1"
- icon_opened = "rdsecureopen"
- icon_broken = "rdsecurebroken"
- icon_off = "rdsecureoff"
req_access = list(access_rd)
+ closet_appearance = /decl/closet_appearance/secure_closet/rd
starts_with = list(
/obj/item/clothing/under/rank/research_director,
diff --git a/maps/southern_cross/structures/closets/security.dm b/maps/southern_cross/structures/closets/security.dm
index 1bde2d7a34..2ab3f7198e 100644
--- a/maps/southern_cross/structures/closets/security.dm
+++ b/maps/southern_cross/structures/closets/security.dm
@@ -5,13 +5,8 @@
/obj/structure/closet/secure_closet/hos_wardrobe
name = "head of security's locker"
- icon_state = "hossecure1"
- icon_closed = "hossecure"
- icon_locked = "hossecure1"
- icon_opened = "hossecureopen"
- icon_broken = "hossecurebroken"
- icon_off = "hossecureoff"
req_access = list(access_hos)
+ closet_appearance = /decl/closet_appearance/secure_closet/security/hos
starts_with = list(
/obj/item/clothing/under/rank/head_of_security/jensen,
diff --git a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
index 95c00a1356..4ff3001c29 100644
--- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
+++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
@@ -26,7 +26,7 @@
"z" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
"A" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
"B" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
-"C" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"C" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
"D" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
"E" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
"F" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
diff --git a/maps/submaps/surface_submaps/mountains/Rockb1.dmm b/maps/submaps/surface_submaps/mountains/Rockb1.dmm
index b723a3047e..3029679547 100644
--- a/maps/submaps/surface_submaps/mountains/Rockb1.dmm
+++ b/maps/submaps/surface_submaps/mountains/Rockb1.dmm
@@ -20,11 +20,7 @@
/turf/simulated/floor/lino,
/area/submap/Rockb1)
"g" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/weapon/gun/projectile/pistol,
/obj/item/ammo_magazine/m9mm/compact,
/turf/simulated/floor/lino,
diff --git a/maps/submaps/surface_submaps/plains/Boathouse.dmm b/maps/submaps/surface_submaps/plains/Boathouse.dmm
index 678a2bb8d2..0f20993d39 100644
--- a/maps/submaps/surface_submaps/plains/Boathouse.dmm
+++ b/maps/submaps/surface_submaps/plains/Boathouse.dmm
@@ -7,9 +7,9 @@
"ag" = (/obj/structure/table/bench/wooden,/turf/template_noop,/area/submap/Boathouse)
"ah" = (/obj/structure/table/woodentable,/turf/template_noop,/area/submap/Boathouse)
"ai" = (/turf/simulated/wall/wood,/area/submap/Boathouse)
-"aj" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/accessory/jacket,/obj/item/clothing/accessory/jacket,/obj/item/clothing/head/beanie,/turf/simulated/floor/wood,/area/submap/Boathouse)
+"aj" = (/obj/structure/closet/cabinet,/obj/item/clothing/accessory/jacket,/obj/item/clothing/accessory/jacket,/obj/item/clothing/head/beanie,/turf/simulated/floor/wood,/area/submap/Boathouse)
"ak" = (/turf/simulated/floor/wood,/area/submap/Boathouse)
-"al" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/storage/box/beanbags,/turf/simulated/floor/wood,/area/submap/Boathouse)
+"al" = (/obj/structure/closet/cabinet,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/storage/box/beanbags,/turf/simulated/floor/wood,/area/submap/Boathouse)
"am" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/Boathouse)
"an" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/wood,/area/submap/Boathouse)
"ao" = (/obj/structure/railing{dir = 8},/obj/structure/railing,/turf/simulated/floor/water,/area/submap/Boathouse)
diff --git a/maps/submaps/surface_submaps/plains/Boathouse_vr.dmm b/maps/submaps/surface_submaps/plains/Boathouse_vr.dmm
index 45cbfef083..18b91f368a 100644
--- a/maps/submaps/surface_submaps/plains/Boathouse_vr.dmm
+++ b/maps/submaps/surface_submaps/plains/Boathouse_vr.dmm
@@ -30,11 +30,7 @@
/turf/simulated/wall/wood,
/area/submap/Boathouse)
"aj" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/accessory/jacket,
/obj/item/clothing/accessory/jacket,
/obj/item/clothing/head/beanie,
@@ -44,11 +40,7 @@
/turf/simulated/floor/wood,
/area/submap/Boathouse)
"al" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
/obj/item/weapon/storage/box/beanbags,
/turf/simulated/floor/wood,
diff --git a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
index 96abdb75b2..974807d38c 100644
--- a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
@@ -27,7 +27,7 @@
"aA" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
"aB" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
"aC" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"aD" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/pickaxe/plasmacutter,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aD" = (/obj/structure/closet/cabinet,/obj/item/weapon/pickaxe/plasmacutter,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
"aE" = (/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
"aF" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
"aG" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
diff --git a/maps/tether/submaps/admin_use/dhael_centcom.dmm b/maps/tether/submaps/admin_use/dhael_centcom.dmm
index 0749c2645d..195605f7c4 100644
--- a/maps/tether/submaps/admin_use/dhael_centcom.dmm
+++ b/maps/tether/submaps/admin_use/dhael_centcom.dmm
@@ -4499,9 +4499,6 @@
/obj/item/weapon/storage/belt/security/tactical,
/obj/structure/closet{
desc = "It's a storage unit for standard-issue attire.";
- icon_closed = "syndicate1";
- icon_opened = "syndicate1open";
- icon_state = "syndicate1";
name = "tactical equipment"
},
/obj/effect/floor_decal/industrial/outline/grey,
@@ -4523,9 +4520,6 @@
/obj/item/weapon/storage/belt/security/tactical,
/obj/structure/closet{
desc = "It's a storage unit for standard-issue attire.";
- icon_closed = "syndicate1";
- icon_opened = "syndicate1open";
- icon_state = "syndicate1";
name = "tactical equipment"
},
/obj/effect/floor_decal/industrial/outline/grey,
diff --git a/maps/tether/submaps/admin_use/ert.dmm b/maps/tether/submaps/admin_use/ert.dmm
index 1d59c6754c..5caad90a8b 100644
--- a/maps/tether/submaps/admin_use/ert.dmm
+++ b/maps/tether/submaps/admin_use/ert.dmm
@@ -215,11 +215,7 @@
/turf/simulated/shuttle/plating/airless/carry,
/area/shuttle/specops/centcom)
"ax" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/turf/simulated/shuttle/floor/black,
/area/shuttle/specops/centcom)
"ay" = (
diff --git a/maps/tether/submaps/admin_use/mercbase.dmm b/maps/tether/submaps/admin_use/mercbase.dmm
index a03f014478..5c590364fd 100644
--- a/maps/tether/submaps/admin_use/mercbase.dmm
+++ b/maps/tether/submaps/admin_use/mercbase.dmm
@@ -391,10 +391,7 @@
},
/area/antag/antag_base)
"aF" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed";
+/obj/structure/closet/cabinet{
name = "Clothing Storage"
},
/obj/item/clothing/shoes/boots/combat,
@@ -680,10 +677,7 @@
},
/area/antag/antag_base)
"bc" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed";
+/obj/structure/closet/cabinet{
name = "Clothing Storage"
},
/obj/item/clothing/suit/storage/hooded/wintercoat,
diff --git a/maps/tether/submaps/admin_use/tradeship.dmm b/maps/tether/submaps/admin_use/tradeship.dmm
index 96167f720f..1b3e5f2971 100644
--- a/maps/tether/submaps/admin_use/tradeship.dmm
+++ b/maps/tether/submaps/admin_use/tradeship.dmm
@@ -359,11 +359,7 @@
/turf/simulated/shuttle/plating/airless/carry,
/area/shuttle/trade)
"aP" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/turf/simulated/shuttle/floor/black,
/area/shuttle/trade)
"aQ" = (
diff --git a/maps/tether/submaps/admin_use/wizard.dmm b/maps/tether/submaps/admin_use/wizard.dmm
index ca115c7861..b85af43205 100644
--- a/maps/tether/submaps/admin_use/wizard.dmm
+++ b/maps/tether/submaps/admin_use/wizard.dmm
@@ -312,11 +312,7 @@
},
/area/wizard_station)
"aL" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/suit/wizrobe/magusblue,
/obj/item/clothing/head/wizard/magus,
/obj/item/weapon/staff,
@@ -366,11 +362,7 @@
},
/area/wizard_station)
"aS" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/under/psysuit,
/obj/item/clothing/suit/wizrobe/psypurple,
/obj/item/clothing/head/wizard/amp,
@@ -420,11 +412,7 @@
},
/area/wizard_station)
"aY" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/shoes/sandal/marisa{
desc = "A set of fancy shoes that are as functional as they are comfortable.";
name = "Gentlemans Shoes"
@@ -439,11 +427,7 @@
},
/area/wizard_station)
"aZ" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/suit/wizrobe/magusred,
/obj/item/clothing/head/wizard/magus,
/obj/item/weapon/staff,
@@ -453,11 +437,7 @@
},
/area/wizard_station)
"ba" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/suit/wizrobe/marisa,
/obj/item/clothing/shoes/sandal/marisa,
/obj/item/clothing/head/wizard/marisa,
@@ -468,11 +448,7 @@
},
/area/wizard_station)
"bb" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/suit/wizrobe/red,
/obj/item/clothing/shoes/sandal,
/obj/item/clothing/head/wizard/red,
diff --git a/maps/tether/submaps/aerostat/submaps/Rockybase.dmm b/maps/tether/submaps/aerostat/submaps/Rockybase.dmm
index f8194b673e..7517503070 100644
--- a/maps/tether/submaps/aerostat/submaps/Rockybase.dmm
+++ b/maps/tether/submaps/aerostat/submaps/Rockybase.dmm
@@ -91,11 +91,7 @@
/turf/simulated/floor/tiled/techfloor/virgo2,
/area/submap/virgo2/Rockybase)
"as" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/turf/simulated/floor/tiled/techfloor/virgo2,
/area/submap/virgo2/Rockybase)
"at" = (
diff --git a/maps/tether/submaps/beach/beach.dmm b/maps/tether/submaps/beach/beach.dmm
index 2416bafdc8..860e584e62 100644
--- a/maps/tether/submaps/beach/beach.dmm
+++ b/maps/tether/submaps/beach/beach.dmm
@@ -76,11 +76,8 @@
/turf/simulated/floor/wood,
/area/tether_away/beach)
"at" = (
-/obj/structure/closet{
+/obj/structure/closet/cabinet{
density = 0;
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed";
pixel_y = 20;
wall_mounted = 1
},
@@ -193,8 +190,6 @@
/area/tether_away/beach)
"aK" = (
/obj/structure/closet/gmcloset{
- icon_closed = "black";
- icon_state = "black";
name = "formal wardrobe"
},
/turf/simulated/floor/wood,
diff --git a/maps/tether/submaps/gateway/zoo.dmm b/maps/tether/submaps/gateway/zoo.dmm
index 33ce2d311b..76fff34ad9 100644
--- a/maps/tether/submaps/gateway/zoo.dmm
+++ b/maps/tether/submaps/gateway/zoo.dmm
@@ -647,11 +647,7 @@
/turf/simulated/floor/tiled,
/area/awaymission/zoo/pirateship)
"bZ" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/turf/simulated/shuttle/floor/black,
/area/awaymission/zoo/tradeship)
"ca" = (
diff --git a/maps/tether/submaps/offmap/talon.dm b/maps/tether/submaps/offmap/talon.dm
index 439dae1035..4a9f97ea78 100644
--- a/maps/tether/submaps/offmap/talon.dm
+++ b/maps/tether/submaps/offmap/talon.dm
@@ -249,13 +249,8 @@ Once in open space, consider disabling nonessential power-consuming electronics
/obj/structure/closet/secure_closet/talon_captain
name = "talon captain's locker"
- icon_state = "capsecure1"
- icon_closed = "capsecure"
- icon_locked = "capsecure1"
- icon_opened = "capsecureopen"
- icon_broken = "capsecurebroken"
- icon_off = "capsecureoff"
req_access = list(access_talon)
+ closet_appearance = /decl/closet_appearance/secure_closet/talon/captain
starts_with = list(
/obj/item/weapon/storage/backpack/dufflebag/captain,
@@ -272,14 +267,8 @@ Once in open space, consider disabling nonessential power-consuming electronics
/obj/structure/closet/secure_closet/talon_guard
name = "talon guard's locker"
- req_access = list(access_hos)
- icon_state = "hossecure1"
- icon_closed = "hossecure"
- icon_locked = "hossecure1"
- icon_opened = "hossecureopen"
- icon_broken = "hossecurebroken"
- icon_off = "hossecureoff"
req_access = list(access_talon)
+ closet_appearance = /decl/closet_appearance/secure_closet/talon/guard
starts_with = list(
/obj/item/clothing/suit/armor/pcarrier/light,
@@ -304,13 +293,8 @@ Once in open space, consider disabling nonessential power-consuming electronics
/obj/structure/closet/secure_closet/talon_doctor
name = "talon doctor's locker"
- icon_state = "cmosecure1"
- icon_closed = "cmosecure"
- icon_locked = "cmosecure1"
- icon_opened = "cmosecureopen"
- icon_broken = "cmosecurebroken"
- icon_off = "cmosecureoff"
req_access = list(access_talon)
+ closet_appearance = /decl/closet_appearance/secure_closet/talon/doctor
starts_with = list(
/obj/item/clothing/under/rank/medical,
@@ -329,13 +313,8 @@ Once in open space, consider disabling nonessential power-consuming electronics
/obj/structure/closet/secure_closet/talon_engineer
name = "talon engineer's locker"
- icon_state = "securece1"
- icon_closed = "securece"
- icon_locked = "securece1"
- icon_opened = "secureceopen"
- icon_broken = "securecebroken"
- icon_off = "secureceoff"
req_access = list(access_talon)
+ closet_appearance = /decl/closet_appearance/secure_closet/talon/engineer
starts_with = list(
/obj/item/clothing/accessory/storage/brown_vest,
@@ -357,6 +336,7 @@ Once in open space, consider disabling nonessential power-consuming electronics
/obj/structure/closet/secure_closet/talon_pilot
name = "talon pilot's locker"
req_access = list(access_talon)
+ closet_appearance = /decl/closet_appearance/secure_closet/talon/pilot
starts_with = list(
/obj/item/weapon/material/knife/tacknife/survival,
diff --git a/maps/tether/submaps/offmap/talon1.dmm b/maps/tether/submaps/offmap/talon1.dmm
index 6d3d9c431c..6b9ede55d1 100644
--- a/maps/tether/submaps/offmap/talon1.dmm
+++ b/maps/tether/submaps/offmap/talon1.dmm
@@ -8,6 +8,15 @@
"ac" = (
/turf/simulated/wall,
/area/talon/deckone/bridge)
+"ah" = (
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/machinery/atmospherics/portables_connector/aux{
+ dir = 4;
+ icon_state = "map_connector-aux"
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/port_eng)
"aj" = (
/obj/machinery/light{
dir = 8;
@@ -1085,7 +1094,9 @@
/obj/structure/window/reinforced{
dir = 1
},
-/obj/structure/closet/emcloset,
+/obj/structure/closet/autolok_wall{
+ pixel_x = -27
+ },
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
"iX" = (
@@ -1402,19 +1413,6 @@
},
/turf/simulated/floor/tiled/eris/white/danger,
/area/talon/deckone/armory)
-"lk" = (
-/obj/machinery/atmospherics/portables_connector/fuel{
- dir = 1;
- icon_state = "map_connector-fuel"
- },
-/obj/effect/floor_decal/industrial/outline/red,
-/obj/machinery/portable_atmospherics/canister/phoron,
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -24
- },
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/starboard_eng)
"lo" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -1880,7 +1878,9 @@
/obj/machinery/atmospherics/unary/vent_scrubber/on{
dir = 8
},
-/obj/structure/closet/emcloset,
+/obj/structure/closet/autolok_wall{
+ pixel_y = -24
+ },
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/bridge)
"pJ" = (
@@ -2002,6 +2002,15 @@
},
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/port_solar)
+"qR" = (
+/obj/machinery/atmospherics/portables_connector/fuel{
+ dir = 1;
+ icon_state = "map_connector-fuel"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/machinery/portable_atmospherics/canister/phoron,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/starboard_eng)
"rm" = (
/obj/effect/floor_decal/industrial/warning/dust/corner{
dir = 1;
@@ -2302,7 +2311,9 @@
icon_state = "extinguisher_closed";
pixel_x = -30
},
-/obj/structure/closet/emcloset,
+/obj/structure/closet/autolok_wall{
+ pixel_y = -24
+ },
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/deckone/bridge)
"uj" = (
@@ -2328,6 +2339,15 @@
},
/turf/simulated/floor/hull/airless,
/area/talon/maintenance/deckone_starboard_aft_wing)
+"up" = (
+/obj/effect/floor_decal/industrial/outline/grey,
+/obj/machinery/atmospherics/portables_connector/aux{
+ dir = 8;
+ icon_state = "map_connector-aux"
+ },
+/obj/machinery/portable_atmospherics/canister/air/airlock,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/starboard_eng)
"ur" = (
/obj/structure/cable/green{
d1 = 4;
@@ -2682,14 +2702,6 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_starboard)
-"xU" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/outline/yellow,
-/obj/machinery/portable_atmospherics/canister/empty,
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/starboard_eng)
"xV" = (
/turf/simulated/floor/tiled/eris/dark/orangecorner,
/area/talon/deckone/secure_storage)
@@ -3013,6 +3025,15 @@
},
/turf/simulated/floor/tiled/eris/steel/gray_perforated,
/area/talon/deckone/workroom)
+"AU" = (
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/closet/autolok_wall{
+ pixel_x = 27
+ },
+/turf/simulated/floor/tiled/eris/steel,
+/area/talon/deckone/central_hallway)
"AV" = (
/obj/machinery/atmospherics/unary/vent_scrubber/on,
/turf/simulated/floor/tiled/eris/steel,
@@ -3147,15 +3168,6 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
-"CN" = (
-/obj/machinery/atmospherics/portables_connector/fuel{
- dir = 1;
- icon_state = "map_connector-fuel"
- },
-/obj/effect/floor_decal/industrial/outline/red,
-/obj/machinery/portable_atmospherics/canister/phoron,
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/port_eng)
"CP" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 4;
@@ -3441,6 +3453,14 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/deckone/brig)
+"Fd" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/outline/yellow,
+/obj/machinery/portable_atmospherics/canister/empty,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/starboard_eng)
"Fg" = (
/obj/structure/grille,
/obj/structure/window/reinforced/full,
@@ -3486,6 +3506,15 @@
},
/turf/simulated/floor/tiled/eris/techmaint_panels,
/area/talon/deckone/medical)
+"Fw" = (
+/obj/machinery/atmospherics/portables_connector/fuel{
+ dir = 1;
+ icon_state = "map_connector-fuel"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/machinery/portable_atmospherics/canister/phoron,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/port_eng)
"FA" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -3568,19 +3597,6 @@
},
/turf/simulated/floor/tiled/eris/steel/gray_perforated,
/area/talon/deckone/workroom)
-"Gv" = (
-/obj/machinery/atmospherics/portables_connector/fuel{
- dir = 1;
- icon_state = "map_connector-fuel"
- },
-/obj/effect/floor_decal/industrial/outline/red,
-/obj/machinery/portable_atmospherics/canister/phoron,
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 26
- },
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/port_eng)
"Gw" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4;
@@ -3597,6 +3613,19 @@
},
/turf/simulated/floor/tiled/eris/steel/cargo,
/area/talon/deckone/workroom)
+"GC" = (
+/obj/machinery/atmospherics/portables_connector/fuel{
+ dir = 1;
+ icon_state = "map_connector-fuel"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/machinery/portable_atmospherics/canister/phoron,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = -24
+ },
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/starboard_eng)
"GG" = (
/obj/effect/floor_decal/industrial/warning/dust{
dir = 4
@@ -3612,15 +3641,6 @@
},
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_port)
-"GI" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/machinery/atmospherics/portables_connector/aux{
- dir = 8;
- icon_state = "map_connector-aux"
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/starboard_eng)
"GJ" = (
/obj/machinery/door/firedoor/glass/talon,
/turf/simulated/floor/tiled/eris/techmaint_panels,
@@ -4243,15 +4263,6 @@
"LH" = (
/turf/simulated/floor/tiled/eris/white/golden,
/area/talon/deckone/bridge)
-"LI" = (
-/obj/effect/floor_decal/industrial/outline/grey,
-/obj/machinery/atmospherics/portables_connector/aux{
- dir = 4;
- icon_state = "map_connector-aux"
- },
-/obj/machinery/portable_atmospherics/canister/air/airlock,
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/port_eng)
"LK" = (
/obj/structure/cable/green,
/obj/machinery/power/apc/talon{
@@ -4609,14 +4620,6 @@
},
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
-"OP" = (
-/obj/machinery/atmospherics/portables_connector{
- dir = 8
- },
-/obj/effect/floor_decal/industrial/outline/blue,
-/obj/machinery/portable_atmospherics/canister/air,
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/port_eng)
"OQ" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/supply{
dir = 4
@@ -4674,6 +4677,19 @@
/obj/machinery/suit_storage_unit,
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/deckone_starboard)
+"Py" = (
+/obj/machinery/atmospherics/portables_connector/fuel{
+ dir = 1;
+ icon_state = "map_connector-fuel"
+ },
+/obj/effect/floor_decal/industrial/outline/red,
+/obj/machinery/portable_atmospherics/canister/phoron,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = 26
+ },
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/port_eng)
"PD" = (
/obj/machinery/door/firedoor/glass{
dir = 2
@@ -4733,15 +4749,6 @@
},
/turf/space,
/area/talon/deckone/bridge)
-"Ql" = (
-/obj/machinery/atmospherics/portables_connector/fuel{
- dir = 1;
- icon_state = "map_connector-fuel"
- },
-/obj/effect/floor_decal/industrial/outline/red,
-/obj/machinery/portable_atmospherics/canister/phoron,
-/turf/simulated/floor/tiled/eris/dark/brown_perforated,
-/area/talon/deckone/starboard_eng)
"Qx" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4;
@@ -5611,6 +5618,14 @@
/obj/structure/disposalpipe/junction,
/turf/simulated/floor/tiled/eris/steel,
/area/talon/deckone/central_hallway)
+"Yc" = (
+/obj/machinery/atmospherics/portables_connector{
+ dir = 8
+ },
+/obj/effect/floor_decal/industrial/outline/blue,
+/obj/machinery/portable_atmospherics/canister/air,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/talon/deckone/port_eng)
"Yd" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -14171,7 +14186,7 @@ gU
NP
ho
iA
-LI
+ah
IT
Ik
aj
@@ -14319,7 +14334,7 @@ hs
Uy
CW
YI
-CN
+Fw
kb
JI
SX
@@ -14461,7 +14476,7 @@ vV
lM
ir
YI
-CN
+Fw
kb
ji
aa
@@ -14603,7 +14618,7 @@ lM
OZ
bw
YI
-CN
+Fw
kc
kh
OS
@@ -14739,13 +14754,13 @@ gU
CH
Bj
iA
-OP
-OP
-OP
-OP
+Yc
+Yc
+Yc
+Yc
Xk
iR
-Gv
+Py
ji
JI
SX
@@ -16438,7 +16453,7 @@ fJ
Bj
Jw
oe
-iT
+AU
IW
Zq
Lf
@@ -16727,13 +16742,13 @@ gY
MG
Bj
iF
-xU
-xU
-xU
-xU
+Fd
+Fd
+Fd
+Fd
IO
Ie
-lk
+GC
kd
kj
QJ
@@ -16875,7 +16890,7 @@ yf
bP
fi
WA
-Ql
+qR
kf
GP
yg
@@ -17017,7 +17032,7 @@ jE
yf
jb
WA
-Ql
+qR
kf
jY
aa
@@ -17159,7 +17174,7 @@ EL
YG
dm
WA
-Ql
+qR
ke
kj
QJ
@@ -17295,7 +17310,7 @@ gY
NP
ho
iF
-GI
+up
yB
Mi
Bm
diff --git a/maps/tether/submaps/offmap/talon2.dmm b/maps/tether/submaps/offmap/talon2.dmm
index 76bddbccbb..3341188969 100644
--- a/maps/tether/submaps/offmap/talon2.dmm
+++ b/maps/tether/submaps/offmap/talon2.dmm
@@ -2485,15 +2485,12 @@
icon_state = "0-4"
},
/obj/structure/closet/crate/plastic,
-/obj/item/clothing/suit/space/emergency,
/obj/item/device/flashlight,
/obj/item/weapon/storage/briefcase/inflatable,
-/obj/item/clothing/head/helmet/space/emergency,
/obj/item/device/flashlight/glowstick,
/obj/item/device/flashlight/glowstick,
/obj/item/device/flashlight/glowstick,
/obj/item/weapon/storage/box/metalfoam,
-/obj/item/weapon/tank/oxygen,
/obj/item/device/survivalcapsule/luxury,
/turf/simulated/floor/tiled/techfloor/grid,
/area/talon/decktwo/lifeboat)
@@ -2986,6 +2983,9 @@
/turf/simulated/floor/plating/eris/under,
/area/talon/maintenance/decktwo_aft)
"Bd" = (
+/obj/structure/closet/autolok_wall{
+ pixel_y = -24
+ },
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/talon/decktwo/bridge_upper)
"Bv" = (
@@ -3100,6 +3100,9 @@
"CN" = (
/obj/structure/bed/padded,
/obj/item/weapon/bedsheet,
+/obj/structure/closet/autolok_wall{
+ pixel_x = 27
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/talon/decktwo/lifeboat)
"CW" = (
@@ -3638,6 +3641,9 @@
},
/obj/item/weapon/bedsheet,
/obj/structure/bed/padded,
+/obj/structure/closet/autolok_wall{
+ pixel_x = 27
+ },
/turf/simulated/floor/tiled/techfloor/grid,
/area/talon/decktwo/lifeboat)
"Lj" = (
diff --git a/maps/tether/submaps/om_ships/aro2.dm b/maps/tether/submaps/om_ships/aro2.dm
index f484e9811b..5d7f834663 100644
--- a/maps/tether/submaps/om_ships/aro2.dm
+++ b/maps/tether/submaps/om_ships/aro2.dm
@@ -66,7 +66,7 @@
vessel_size = SHIP_SIZE_SMALL
initial_generic_waypoints = list("aronai2_fore", "aronai2_aft", "aronai2_port", "aronai2_starboard")
initial_restricted_waypoints = list("Aro's Boat" = list("omship_spawn_aroboat2"))
- fore_dir = EAST
+ fore_dir = NORTH
skybox_icon = 'aro2.dmi' //Art by Nia Tahl, see ATTRIBUTIONS.md
skybox_icon_state = "skybox"
diff --git a/maps/tether/submaps/om_ships/aro2.dmm b/maps/tether/submaps/om_ships/aro2.dmm
index 4c79d606c8..b6a955a65c 100644
--- a/maps/tether/submaps/om_ships/aro2.dmm
+++ b/maps/tether/submaps/om_ships/aro2.dmm
@@ -107,6 +107,9 @@
name = "west bump";
pixel_x = -24
},
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
/turf/simulated/floor/carpet/blue,
/area/aro2/room1)
"aD" = (
@@ -418,6 +421,9 @@
name = "west bump";
pixel_x = -24
},
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
/turf/simulated/floor/carpet/gaycarpet,
/area/aro2/room2)
"cE" = (
@@ -561,9 +567,6 @@
/obj/structure/flora/tree/jungle_small,
/turf/simulated/floor/grass,
/area/aro2/boatdeck)
-"dF" = (
-/turf/simulated/floor/tiled/eris/techmaint_perforated,
-/area/aro2/dining)
"dG" = (
/obj/structure/cable/cyan{
d1 = 4;
@@ -605,10 +608,6 @@
},
/turf/simulated/floor/wood,
/area/aro2/dining)
-"dQ" = (
-/obj/structure/table/steel,
-/turf/simulated/floor/tiled/eris/techmaint_perforated,
-/area/aro2/surfluid)
"dU" = (
/obj/structure/cable/cyan{
d1 = 1;
@@ -813,6 +812,9 @@
d2 = 4;
icon_state = "2-4"
},
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
/turf/simulated/floor/tiled/eris/dark,
/area/aro2/starboardbay)
"fn" = (
@@ -925,6 +927,9 @@
d2 = 8;
icon_state = "2-8"
},
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
/turf/simulated/floor/tiled/eris/dark,
/area/aro2/portbay)
"fQ" = (
@@ -1467,6 +1472,9 @@
name = "west bump";
pixel_x = -24
},
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
/turf/simulated/floor/carpet/purcarpet,
/area/aro2/room3)
"lR" = (
@@ -1512,10 +1520,6 @@
},
/turf/simulated/floor/water/indoors/surfluid,
/area/aro2/boatdeck)
-"mp" = (
-/obj/structure/table/bench/wooden,
-/turf/simulated/floor/tiled/techfloor,
-/area/aro2/dining)
"ms" = (
/obj/structure/railing/grey,
/turf/simulated/floor/water/indoors/surfluid,
@@ -1949,6 +1953,12 @@
/obj/machinery/portable_atmospherics/canister/air,
/turf/simulated/floor/plating/eris/under,
/area/aro2/airarea)
+"rd" = (
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/eris/dark/gray_perforated,
+/area/aro2/powerarea)
"rl" = (
/obj/structure/cable/cyan{
d1 = 1;
@@ -2088,6 +2098,18 @@
},
/turf/simulated/floor/tiled/eris/techmaint_panels,
/area/aro2/airarea)
+"sB" = (
+/obj/structure/table/steel,
+/obj/item/weapon/magnetic_ammo/pistol/khi{
+ pixel_x = 5;
+ pixel_y = 2
+ },
+/obj/item/weapon/magnetic_ammo/pistol/khi{
+ pixel_x = -3;
+ pixel_y = 5
+ },
+/turf/simulated/floor/tiled/eris/techmaint_perforated,
+/area/aro2/surfluid)
"sF" = (
/turf/simulated/floor/tiled/eris/dark,
/area/aro2/portbay)
@@ -2328,7 +2350,6 @@
name = "exterior shutters";
pixel_x = 28
},
-/obj/structure/closet/crate/bin,
/turf/simulated/floor/wood,
/area/aro2/dining)
"va" = (
@@ -2395,12 +2416,6 @@
},
/turf/simulated/floor/tiled/eris/dark/cyancorner,
/area/aro2/dining)
-"vJ" = (
-/obj/machinery/vending/cola{
- dir = 8
- },
-/turf/simulated/floor/tiled/eris/techmaint_perforated,
-/area/aro2/dining)
"vN" = (
/obj/structure/cable/cyan{
d1 = 1;
@@ -2505,6 +2520,8 @@
/obj/machinery/light{
dir = 1
},
+/obj/structure/table/steel,
+/obj/machinery/chemical_dispenser/bar_soft/full,
/turf/simulated/floor/tiled/eris/techmaint_perforated,
/area/aro2/dining)
"xk" = (
@@ -2637,9 +2654,16 @@
/turf/simulated/floor/tiled/eris/dark,
/area/aro2/boatdeck)
"yK" = (
-/obj/machinery/vending/food/arojoan{
- dir = 8
+/obj/structure/closet/secure_closet/freezer/fridge{
+ starts_with = null
},
+/obj/item/weapon/reagent_containers/food/snacks/generalschicken,
+/obj/item/weapon/storage/box/wings,
+/obj/item/weapon/reagent_containers/food/snacks/kitsuneudon,
+/obj/item/weapon/reagent_containers/food/snacks/fries,
+/obj/item/weapon/reagent_containers/food/snacks/grilledcheese,
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich,
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas,
/turf/simulated/floor/tiled/eris/techmaint_perforated,
/area/aro2/dining)
"yY" = (
@@ -3489,6 +3513,10 @@
/obj/machinery/door/airlock/multi_tile/glass,
/turf/simulated/floor/tiled/eris/techmaint_panels,
/area/aro2/surfluid)
+"II" = (
+/obj/structure/table/bench/steel,
+/turf/simulated/floor/tiled/techfloor,
+/area/aro2/dining)
"IK" = (
/obj/structure/cable/cyan{
d1 = 4;
@@ -3548,6 +3576,10 @@
},
/turf/simulated/floor/tiled/eris/techmaint_panels,
/area/aro2/portbay)
+"Jn" = (
+/obj/structure/table/bench/steel,
+/turf/simulated/floor/tiled/eris/steel/bar_flat,
+/area/aro2/frontroom)
"Js" = (
/obj/machinery/atmospherics/unary/vent_pump/on{
dir = 1
@@ -4184,6 +4216,12 @@
},
/turf/simulated/floor/tiled/eris/dark,
/area/aro2/portbay)
+"PR" = (
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
+/turf/simulated/floor/carpet/oracarpet,
+/area/aro2/cockpit)
"PV" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
@@ -4370,10 +4408,10 @@
/turf/simulated/floor/plating/eris/under,
/area/aro2/airarea)
"Sp" = (
-/obj/machinery/vending/snack{
+/obj/machinery/vending/dinnerware{
dir = 8
},
-/turf/simulated/floor/tiled/eris/techmaint_perforated,
+/turf/simulated/floor/wood,
/area/aro2/dining)
"Sq" = (
/obj/structure/railing/grey{
@@ -4382,11 +4420,8 @@
/turf/simulated/floor/water/indoors/surfluid,
/area/aro2/surfluid)
"Sr" = (
-/obj/machinery/chemical_dispenser/bar_soft/full{
- dir = 8
- },
-/obj/structure/table/steel,
-/turf/simulated/floor/tiled/eris/techmaint_perforated,
+/obj/structure/closet/crate/bin,
+/turf/simulated/floor/wood,
/area/aro2/dining)
"St" = (
/obj/machinery/computer/ship/navigation/telescreen{
@@ -4738,6 +4773,12 @@
/obj/structure/table/fancyblack,
/turf/simulated/floor/carpet/bcarpet,
/area/shuttle/aroboat2)
+"VW" = (
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/eris/dark/gray_perforated,
+/area/aro2/airarea)
"VZ" = (
/obj/structure/cable/cyan{
d1 = 1;
@@ -4752,10 +4793,6 @@
},
/turf/simulated/floor/tiled/eris/dark,
/area/aro2/boatdeck)
-"We" = (
-/obj/structure/table/bench/wooden,
-/turf/simulated/floor/tiled/eris/steel/bar_flat,
-/area/aro2/frontroom)
"Wg" = (
/obj/effect/floor_decal/industrial/warning/full,
/obj/machinery/power/pointdefense{
@@ -13276,16 +13313,16 @@ Qz
af
ao
ao
-We
-We
-We
+Jn
+Jn
+Jn
ao
ao
bT
bT
-mp
-mp
-mp
+II
+II
+II
bT
bT
dv
@@ -13558,7 +13595,7 @@ Qz
Qz
Qz
bV
-We
+Jn
zV
zV
Kx
@@ -13606,7 +13643,7 @@ Jm
lE
gc
jm
-sP
+rd
oj
oj
oj
@@ -13700,7 +13737,7 @@ Qz
Qz
Qz
bV
-We
+Jn
zV
us
ED
@@ -13842,7 +13879,7 @@ Qz
Qz
Qz
bV
-We
+Jn
zV
us
AT
@@ -14277,9 +14314,9 @@ zV
oU
bU
xb
-dF
-dF
-dF
+dk
+dk
+dk
QW
QW
dk
@@ -14419,7 +14456,7 @@ pe
pe
bU
yK
-vJ
+dk
Sr
Sp
QW
@@ -15012,7 +15049,7 @@ RY
FZ
ds
gd
-dQ
+sB
kK
nO
TL
@@ -15267,7 +15304,7 @@ az
az
aL
aL
-XN
+PR
XN
Me
yx
@@ -16304,7 +16341,7 @@ Ln
lK
gi
jt
-nq
+VW
qT
Pd
ih
diff --git a/maps/tether/submaps/wild/tether_wild-crash.dmm b/maps/tether/submaps/wild/tether_wild-crash.dmm
index 46cb6a83d7..6648996a7c 100644
--- a/maps/tether/submaps/wild/tether_wild-crash.dmm
+++ b/maps/tether/submaps/wild/tether_wild-crash.dmm
@@ -9,7 +9,7 @@
"ai" = (/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/floor/black/virgo3b,/area/tether/surfacebase/outside/wilderness)
"aj" = (/turf/simulated/floor/virgo3b_indoors{desc = "Quite dirty!"; icon = 'icons/turf/outdoors.dmi'; icon_state = "dirt-dark"; name = "dirt"},/area/tether/surfacebase/outside/wilderness)
"ak" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/grass/sif/virgo3b{icon_state = "grass_sif_dark"; name = "dense growth"; tree_chance = 0},/area/tether/surfacebase/outside/wilderness)
-"al" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black/virgo3b,/area/tether/surfacebase/outside/wilderness)
+"al" = (/obj/structure/closet/cabinet,/turf/simulated/shuttle/floor/black/virgo3b,/area/tether/surfacebase/outside/wilderness)
"am" = (/obj/structure/bed/padded,/turf/simulated/shuttle/floor/black/virgo3b,/area/tether/surfacebase/outside/wilderness)
"an" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_alc/full,/turf/simulated/shuttle/floor/black/virgo3b,/area/tether/surfacebase/outside/wilderness)
"ao" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor/black/virgo3b,/area/tether/surfacebase/outside/wilderness)
diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm
index 8bfc856d9b..eca20154d8 100644
--- a/maps/tether/tether-02-surface2.dmm
+++ b/maps/tether/tether-02-surface2.dmm
@@ -23491,19 +23491,6 @@
},
/turf/simulated/floor/tiled/white,
/area/tether/surfacebase/medical/breakroom)
-"aSH" = (
-/obj/structure/table/bench/standard,
-/obj/effect/landmark/start{
- name = "Medical Doctor"
- },
-/obj/effect/floor_decal/borderfloorwhite{
- dir = 1
- },
-/obj/effect/floor_decal/corner/paleblue/border{
- dir = 1
- },
-/turf/simulated/floor/tiled/white,
-/area/tether/surfacebase/medical/breakroom)
"aSI" = (
/obj/effect/floor_decal/borderfloorwhite{
dir = 1
@@ -29149,6 +29136,25 @@
},
/turf/simulated/floor/tiled/techmaint,
/area/tether/surfacebase/surface_two_hall)
+"qaW" = (
+/obj/structure/table/bench/standard,
+/obj/effect/landmark/start{
+ name = "Medical Doctor"
+ },
+/obj/effect/floor_decal/borderfloorwhite{
+ dir = 1
+ },
+/obj/effect/floor_decal/corner/paleblue/border{
+ dir = 1
+ },
+/obj/machinery/computer/security/telescreen/entertainment{
+ desc = "Looks like it's set to ree-Anur-ntertanment, I wonder what else is on?";
+ icon_state = "frame";
+ pixel_x = 0;
+ pixel_y = 32
+ },
+/turf/simulated/floor/tiled/white,
+/area/tether/surfacebase/medical/breakroom)
"qfL" = (
/obj/structure/catwalk,
/obj/structure/cable{
@@ -42215,7 +42221,7 @@ aRO
aap
acD
aSr
-aSH
+qaW
aSO
aSW
aSr
diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm
index bc11aa0fbe..05d3f4927a 100644
--- a/maps/tether/tether-03-surface3.dmm
+++ b/maps/tether/tether-03-surface3.dmm
@@ -6436,9 +6436,6 @@
dir = 1
},
/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed";
name = "Clothing Storage"
},
/obj/machinery/camera/network/civilian,
@@ -20424,8 +20421,6 @@
/area/tether/surfacebase/bar_backroom)
"aLH" = (
/obj/structure/closet/gmcloset{
- icon_closed = "black";
- icon_state = "black";
name = "formal wardrobe"
},
/obj/item/glass_jar,
diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm
index 93ba1a3ff2..adc501ee90 100644
--- a/maps/tether/tether-05-station1.dmm
+++ b/maps/tether/tether-05-station1.dmm
@@ -9565,7 +9565,6 @@
pixel_x = 5
},
/obj/item/weapon/reagent_containers/spray/cleaner,
-/obj/item/device/closet_painter,
/obj/machinery/camera/network/engineering{
dir = 4
},
diff --git a/maps/tether/tether-07-station3.dmm b/maps/tether/tether-07-station3.dmm
index 899a81bdf7..d0cd323292 100644
--- a/maps/tether/tether-07-station3.dmm
+++ b/maps/tether/tether-07-station3.dmm
@@ -28988,6 +28988,20 @@
/obj/machinery/atmospherics/pipe/simple/hidden,
/turf/simulated/floor/tiled/eris/steel/cyancorner,
/area/shuttle/medivac/cockpit)
+"dhq" = (
+/obj/machinery/airlock_sensor{
+ pixel_y = 28
+ },
+/obj/structure/handrail,
+/obj/machinery/light/small{
+ dir = 4;
+ pixel_y = 0
+ },
+/obj/effect/map_helper/airlock/sensor/chamber_sensor,
+/obj/effect/map_helper/airlock/atmos/pump_out_internal,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/shuttle/excursion/cargo)
"dhW" = (
/obj/effect/floor_decal/industrial/outline/blue,
/obj/machinery/atmospherics/portables_connector,
@@ -29035,21 +29049,6 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
-"dzV" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 1;
- frequency = 1380;
- id_tag = "expshuttle_vent"
- },
-/obj/machinery/oxygen_pump{
- pixel_y = -32
- },
-/obj/structure/handrail{
- dir = 1
- },
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/shuttle/excursion/cargo)
"dAo" = (
/obj/machinery/power/terminal{
dir = 1;
@@ -29153,30 +29152,6 @@
},
/turf/simulated/floor/tiled/eris/steel/cyancorner,
/area/shuttle/medivac/cockpit)
-"eaH" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume,
-/obj/machinery/embedded_controller/radio/airlock/docking_port{
- dir = 4;
- frequency = 1380;
- id_tag = "medivac_docker";
- pixel_x = -28
- },
-/obj/structure/cable/green{
- d1 = 1;
- d2 = 2;
- icon_state = "1-2"
- },
-/obj/effect/shuttle_landmark{
- base_area = /area/mine/explored/upper_level;
- base_turf = /turf/simulated/floor/airless;
- docking_controller = "medivac_bay";
- landmark_tag = "tether_medivac_dock";
- name = "Medivac Bay"
- },
-/obj/effect/overmap/visitable/ship/landable/medivac,
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/turf/simulated/floor/tiled/eris/steel/gray_perforated,
-/area/shuttle/medivac/general)
"ebj" = (
/obj/machinery/door/airlock/glass_external,
/obj/structure/cable/green{
@@ -29187,6 +29162,17 @@
/obj/effect/map_helper/airlock/door/simple,
/turf/simulated/floor/tiled,
/area/security/hallway)
+"efQ" = (
+/obj/structure/cable/cyan,
+/obj/structure/handrail{
+ dir = 1
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/shuttle/excursion/cargo)
"egf" = (
/obj/machinery/atmospherics/binary/pump,
/obj/machinery/firealarm{
@@ -29662,6 +29648,18 @@
/obj/structure/table/steel,
/turf/simulated/floor/tiled,
/area/security/security_processing)
+"gsT" = (
+/obj/machinery/embedded_controller/radio/airlock/docking_port{
+ cycle_to_external_air = 1;
+ frequency = 1380;
+ id_tag = "expshuttle_docker";
+ pixel_y = 28
+ },
+/obj/structure/handrail,
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/shuttle/excursion/cargo)
"gvu" = (
/obj/structure/bed/chair/shuttle{
dir = 4
@@ -29746,6 +29744,31 @@
},
/turf/simulated/floor/tiled/eris/white,
/area/shuttle/medivac/general)
+"gGP" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume,
+/obj/machinery/embedded_controller/radio/airlock/docking_port{
+ cycle_to_external_air = 1;
+ dir = 4;
+ frequency = 1380;
+ id_tag = "medivac_docker";
+ pixel_x = -28
+ },
+/obj/structure/cable/green{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/effect/shuttle_landmark{
+ base_area = /area/mine/explored/upper_level;
+ base_turf = /turf/simulated/floor/airless;
+ docking_controller = "medivac_bay";
+ landmark_tag = "tether_medivac_dock";
+ name = "Medivac Bay"
+ },
+/obj/effect/overmap/visitable/ship/landable/medivac,
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/turf/simulated/floor/tiled/eris/steel/gray_perforated,
+/area/shuttle/medivac/general)
"gNy" = (
/obj/machinery/door/airlock/glass_external,
/obj/machinery/airlock_sensor/airlock_exterior/shuttle{
@@ -29814,6 +29837,9 @@
/obj/structure/bed/chair/shuttle{
dir = 4
},
+/obj/structure/closet/autolok_wall{
+ pixel_y = 32
+ },
/turf/simulated/floor/tiled/eris/white,
/area/shuttle/medivac/general)
"gYC" = (
@@ -30202,13 +30228,6 @@
/obj/machinery/door/firedoor/glass,
/turf/simulated/floor/plating/eris/under,
/area/shuttle/excursion/general)
-"iWZ" = (
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/yellow,
-/turf/simulated/floor/tiled/eris/dark/gray_perforated,
-/area/shuttle/excursion/cargo)
"iXe" = (
/obj/machinery/light{
dir = 8
@@ -30408,6 +30427,9 @@
health = 1e+006
},
/obj/machinery/atmospherics/pipe/simple/hidden/aux,
+/obj/structure/closet/autolok_wall{
+ pixel_x = 27
+ },
/turf/simulated/floor/tiled/eris/steel/gray_perforated,
/area/shuttle/securiship/general)
"knm" = (
@@ -31709,25 +31731,6 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
-"rbb" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 1;
- frequency = 1380;
- id_tag = "expshuttle_docker_pump_out_internal"
- },
-/obj/machinery/oxygen_pump{
- pixel_y = -32
- },
-/obj/structure/handrail{
- dir = 1
- },
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = 0
- },
-/obj/effect/map_helper/airlock/atmos/pump_out_internal,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/shuttle/excursion/cargo)
"reu" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
@@ -31904,6 +31907,17 @@
},
/turf/simulated/floor/tiled/steel_grid,
/area/quartermaster/delivery)
+"rLd" = (
+/obj/machinery/door/airlock/glass_external,
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/effect/floor_decal/industrial/warning{
+ dir = 4
+ },
+/obj/effect/map_helper/airlock/door/int_door,
+/turf/simulated/floor/tiled/eris/techmaint_panels,
+/area/shuttle/excursion/cargo)
"rUl" = (
/obj/structure/shuttle/engine/heater,
/obj/structure/window/reinforced{
@@ -32002,21 +32016,6 @@
},
/turf/simulated/floor/tiled/eris/dark/techfloor_grid,
/area/shuttle/securiship/engines)
-"ssc" = (
-/obj/machinery/embedded_controller/radio/airlock/docking_port{
- frequency = 1380;
- id_tag = "expshuttle_docker";
- pixel_y = 28
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 2;
- frequency = 1380;
- id_tag = "expshuttle_vent"
- },
-/obj/structure/handrail,
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/shuttle/excursion/cargo)
"sso" = (
/obj/effect/floor_decal/borderfloor{
dir = 10
@@ -32148,24 +32147,6 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
-"tnX" = (
-/obj/machinery/airlock_sensor{
- pixel_y = 28
- },
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 2;
- frequency = 1380;
- id_tag = "expshuttle_docker_pump_out_internal"
- },
-/obj/structure/handrail,
-/obj/machinery/light/small{
- dir = 4;
- pixel_y = 0
- },
-/obj/effect/map_helper/airlock/sensor/chamber_sensor,
-/obj/effect/map_helper/airlock/atmos/pump_out_internal,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/shuttle/excursion/cargo)
"tqy" = (
/obj/structure/grille,
/obj/structure/cable/green{
@@ -32217,6 +32198,23 @@
},
/turf/simulated/floor/tiled,
/area/hallway/station/upper)
+"tEV" = (
+/obj/machinery/oxygen_pump{
+ pixel_y = -32
+ },
+/obj/structure/handrail{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ pixel_y = 0
+ },
+/obj/effect/map_helper/airlock/atmos/pump_out_internal,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/shuttle/excursion/cargo)
"tTA" = (
/obj/effect/floor_decal/corner/blue{
dir = 10;
@@ -32351,6 +32349,17 @@
/obj/effect/catwalk_plated/dark,
/turf/simulated/floor,
/area/security/armory/blue)
+"uGF" = (
+/obj/item/device/radio/intercom{
+ dir = 1;
+ pixel_y = 24;
+ req_access = list()
+ },
+/obj/structure/handrail,
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume,
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/shuttle/excursion/cargo)
"uIH" = (
/obj/structure/cable/green{
dir = 1;
@@ -32364,21 +32373,6 @@
},
/turf/simulated/floor/tiled/eris/steel/gray_perforated,
/area/shuttle/securiship/general)
-"uLO" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 2;
- frequency = 1380;
- id_tag = "expshuttle_vent"
- },
-/obj/item/device/radio/intercom{
- dir = 1;
- pixel_y = 24;
- req_access = list()
- },
-/obj/structure/handrail,
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/shuttle/excursion/cargo)
"uRY" = (
/obj/machinery/atmospherics/portables_connector{
dir = 1
@@ -32427,19 +32421,6 @@
},
/turf/simulated/floor/tiled/eris/steel/gray_perforated,
/area/shuttle/securiship/general)
-"vbD" = (
-/obj/machinery/atmospherics/unary/vent_pump/high_volume{
- dir = 1;
- frequency = 1380;
- id_tag = "expshuttle_vent"
- },
-/obj/structure/cable/cyan,
-/obj/structure/handrail{
- dir = 1
- },
-/obj/effect/map_helper/airlock/atmos/chamber_pump,
-/turf/simulated/floor/tiled/eris/dark/danger,
-/area/shuttle/excursion/cargo)
"vbE" = (
/obj/structure/cable/green{
d1 = 1;
@@ -32856,23 +32837,6 @@
/obj/machinery/power/smes/buildable/point_of_interest,
/turf/simulated/floor/tiled/eris/dark/techfloor_grid,
/area/shuttle/excursion/general)
-"xla" = (
-/obj/machinery/door/airlock/glass_external,
-/obj/machinery/access_button{
- command = "cycle_interior";
- frequency = 1380;
- master_tag = "expshuttle_docker";
- pixel_y = -24
- },
-/obj/machinery/atmospherics/pipe/simple/hidden{
- dir = 4
- },
-/obj/effect/floor_decal/industrial/warning{
- dir = 4
- },
-/obj/effect/map_helper/airlock/door/int_door,
-/turf/simulated/floor/tiled/eris/techmaint_panels,
-/area/shuttle/excursion/cargo)
"xlU" = (
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/obj/structure/cable/green{
@@ -32921,6 +32885,19 @@
"xqB" = (
/turf/simulated/wall/rshull,
/area/shuttle/securiship/engines)
+"xvO" = (
+/obj/machinery/oxygen_pump{
+ pixel_y = -32
+ },
+/obj/structure/handrail{
+ dir = 1
+ },
+/obj/effect/map_helper/airlock/atmos/chamber_pump,
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/eris/dark/danger,
+/area/shuttle/excursion/cargo)
"xwM" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -33024,6 +33001,19 @@
/obj/effect/floor_decal/industrial/warning/full,
/turf/simulated/floor/plating/eris/under,
/area/shuttle/excursion/cargo)
+"ydG" = (
+/obj/machinery/atmospherics/pipe/simple/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/yellow,
+/obj/machinery/airlock_sensor{
+ dir = 8;
+ pixel_x = 26;
+ pixel_y = -27
+ },
+/obj/effect/map_helper/airlock/sensor/int_sensor,
+/turf/simulated/floor/tiled/eris/dark/gray_perforated,
+/area/shuttle/excursion/cargo)
"yeP" = (
/obj/effect/floor_decal/borderfloorblack{
dir = 9
@@ -43424,7 +43414,7 @@ aNj
aNu
aNF
fkB
-eaH
+gGP
ykh
pfr
crE
@@ -44931,7 +44921,7 @@ adj
aWp
aiX
kUK
-iWZ
+ydG
xCq
aXr
aWp
@@ -45073,7 +45063,7 @@ nlw
wOI
aiY
aXS
-xla
+rLd
aWp
aiY
aWp
@@ -45214,9 +45204,9 @@ elB
ejd
egf
aZD
-uLO
+uGF
wPw
-dzV
+xvO
aRv
aXC
acK
@@ -45356,9 +45346,9 @@ xeA
sFS
gAZ
aWp
-ssc
+gsT
pPy
-vbD
+efQ
aWp
cQa
afs
@@ -45498,9 +45488,9 @@ jcr
nzo
gAZ
aWp
-tnX
+dhq
iEV
-rbb
+tEV
aWp
rUl
afs
diff --git a/maps/virgo/virgo-1.dmm b/maps/virgo/virgo-1.dmm
index e3b4c945a8..4450499fde 100644
--- a/maps/virgo/virgo-1.dmm
+++ b/maps/virgo/virgo-1.dmm
@@ -1957,7 +1957,7 @@
"aLG" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/recreation_area_restroom)
"aLH" = (/obj/structure/undies_wardrobe,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
"aLI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
-"aLJ" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
+"aLJ" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/turf/simulated/floor/tiled,/area/crew_quarters/recreation_area)
"aLK" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/pool)
"aLL" = (/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser,/obj/machinery/door/window/brigdoor/westleft{name = "Energy"; req_access = list(3)},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/gun/energy/laser,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/tactical)
"aLM" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/security/range)
@@ -2040,7 +2040,7 @@
"aNl" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/navbeacon/patrol{next_patrol = "CH2"; location = "CH1"},/turf/simulated/floor/tiled,/area/hallway/primary/central_one)
"aNm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/maintenance/security_port)
"aNn" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor,/area/maintenance/security_port)
-"aNo" = (/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/gloves/tactical,/obj/item/clothing/head/helmet/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/shoes/boots/tactical,/obj/item/clothing/suit/armor/tactical,/obj/item/clothing/suit/storage/vest/tactical,/obj/effect/floor_decal/corner/green{dir = 10},/obj/item/clothing/under/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/structure/closet{desc = "It's a storage unit for standard-issue attire."; icon_closed = "syndicate1"; icon_opened = "syndicate1open"; icon_state = "syndicate1"; name = "tactical equipment"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/tactical)
+"aNo" = (/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/gloves/tactical,/obj/item/clothing/head/helmet/tactical,/obj/item/clothing/mask/balaclava/tactical,/obj/item/clothing/shoes/boots/tactical,/obj/item/clothing/suit/armor/tactical,/obj/item/clothing/suit/storage/vest/tactical,/obj/effect/floor_decal/corner/green{dir = 10},/obj/item/clothing/under/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/structure/closet{desc = "It's a storage unit for standard-issue attire."; name = "tactical equipment"},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/dark,/area/security/tactical)
"aNp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"aNq" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "security_lockdown"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/tiled/dark,/area/hallway/primary/central_one)
"aNr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Communal Brig Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
@@ -4958,7 +4958,7 @@
"bRr" = (/obj/structure/displaycase,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bRs" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain)
"bRt" = (/obj/structure/table/standard,/obj/machinery/light,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain)
-"bRu" = (/obj/structure/closet/gmcloset{icon_closed = "black"; icon_state = "black"; name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bRu" = (/obj/structure/closet/gmcloset{name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bRv" = (/obj/machinery/door/blast/shutters{dir = 2; id = "kitchen"; layer = 3.3; name = "Kitchen Shutters"},/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bRw" = (/obj/machinery/door/blast/shutters{dir = 2; id = "kitchen"; layer = 3.3; name = "Kitchen Shutters"},/obj/structure/table/reinforced,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen)
"bRx" = (/obj/machinery/computer/guestpass{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar)
diff --git a/maps/virgo/virgo-2.dmm b/maps/virgo/virgo-2.dmm
index 3d2ce85a8c..e08cb54ce3 100644
--- a/maps/virgo/virgo-2.dmm
+++ b/maps/virgo/virgo-2.dmm
@@ -536,7 +536,7 @@
"akp" = (/obj/machinery/computer/pod{id = "syndicate_elite"; name = "Hull Door Control"},/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"akq" = (/obj/machinery/computer/syndicate_elite_shuttle,/turf/simulated/shuttle/floor/red,/area/shuttle/syndicate_elite/mothership)
"akr" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
-"aks" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
+"aks" = (/obj/structure/closet/cabinet,/turf/simulated/shuttle/floor/black,/area/shuttle/trade/centcom)
"akt" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod2/transit)
"aku" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape_pod2/transit)
"akv" = (/turf/space/transit/north/shuttlespace_ns9,/area/shuttle/escape_pod2/transit)
@@ -1393,9 +1393,9 @@
"aAO" = (/obj/machinery/cryopod{dir = 4},/turf/simulated/floor/wood,/area/shuttle/administration/centcom)
"aAP" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
"aAQ" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor/darkred,/area/syndicate_station/start)
-"aAR" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"aAR" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/obj/item/weapon/storage/box/syndie_kit/chameleon,/obj/item/weapon/stamp/chameleon,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"aAS" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
-"aAT" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
+"aAT" = (/obj/structure/closet/cabinet,/obj/item/weapon/card/id/centcom,/obj/item/weapon/card/id/syndicate,/obj/item/weapon/card/id,/obj/item/weapon/card/id/gold,/obj/item/weapon/card/id/silver,/obj/item/device/pda/captain,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/command)
"aAU" = (/obj/machinery/optable,/turf/simulated/shuttle/floor/white,/area/shuttle/administration/centcom)
"aAV" = (/obj/structure/table/reinforced,/turf/simulated/shuttle/floor/white,/area/shuttle/administration/centcom)
"aAW" = (/obj/item/weapon/storage/firstaid/surgery,/obj/structure/table/reinforced,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath/medical,/turf/simulated/shuttle/floor/white,/area/shuttle/administration/centcom)
@@ -2614,22 +2614,22 @@
"aZt" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"aZv" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
"aZw" = (/obj/machinery/vending/hydroseeds,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
-"aZx" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"aZx" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"aZy" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"aZz" = (/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"aZL" = (/obj/structure/table/woodentable,/obj/machinery/librarycomp{pixel_y = 6},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"aZM" = (/obj/machinery/media/jukebox,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"aZN" = (/obj/machinery/vending/hydronutrients,/turf/unsimulated/floor{icon_state = "grass0"; name = "grass"},/area/wizard_station)
-"aZO" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"aZO" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"aZP" = (/mob/living/simple_mob/animal/passive/mouse/gray{desc = "He looks kingly."; name = "Arthur"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"aZQ" = (/obj/structure/flora/pottedplant{icon_state = "plant-24"},/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"aZY" = (/obj/machinery/photocopier,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"aZZ" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"baa" = (/obj/structure/flora/pottedplant{icon_state = "plant-08"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"bad" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"bae" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"baf" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
-"bag" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"bad" = (/obj/structure/closet/cabinet,/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"bae" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"baf" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
+"bag" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"bak" = (/obj/machinery/the_singularitygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
"bal" = (/obj/machinery/crystal,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station)
"bam" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station)
diff --git a/maps/virgo/virgo-5.dmm b/maps/virgo/virgo-5.dmm
index e664b637e8..5c31c1c921 100644
--- a/maps/virgo/virgo-5.dmm
+++ b/maps/virgo/virgo-5.dmm
@@ -1413,7 +1413,7 @@
"Bi" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
"Bj" = (/obj/machinery/button/remote/airlock{id = "miningdorm3"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
"Bk" = (/obj/machinery/button/remote/airlock{id = "miningdorm1"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
-"Bl" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/under/overalls,/obj/item/clothing/under/rank/miner,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
+"Bl" = (/obj/structure/closet/cabinet{name = "Clothing Storage"},/obj/item/clothing/under/overalls,/obj/item/clothing/under/rank/miner,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
"Bm" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/tiled,/area/outpost/mining_main/dorms)
"Bn" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/refinery)
"Bo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
diff --git a/maps/virgo_minitest/virgo_minitest-sector-3.dmm b/maps/virgo_minitest/virgo_minitest-sector-3.dmm
index a3a94f7ef8..d1d6b15a0d 100644
--- a/maps/virgo_minitest/virgo_minitest-sector-3.dmm
+++ b/maps/virgo_minitest/virgo_minitest-sector-3.dmm
@@ -29,11 +29,7 @@
/turf/simulated/wall/wood,
/area/awaymission/wwmines)
"aj" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/clothing/accessory/jacket,
/obj/item/clothing/accessory/jacket,
/obj/item/clothing/head/beanie,
@@ -43,11 +39,7 @@
/turf/simulated/floor/wood,
/area/awaymission/wwmines)
"al" = (
-/obj/structure/closet{
- icon_closed = "cabinet_closed";
- icon_opened = "cabinet_open";
- icon_state = "cabinet_closed"
- },
+/obj/structure/closet/cabinet,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
/obj/item/weapon/storage/box/beanbags,
/turf/simulated/floor/wood,
diff --git a/vorestation.dme b/vorestation.dme
index 5b3984f3e9..75334581ff 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1135,7 +1135,6 @@
#include "code\game\objects\items\devices\instruments.dm"
#include "code\game\objects\items\devices\laserpointer.dm"
#include "code\game\objects\items\devices\lightreplacer.dm"
-#include "code\game\objects\items\devices\locker_painter.dm"
#include "code\game\objects\items\devices\megaphone.dm"
#include "code\game\objects\items\devices\modkit.dm"
#include "code\game\objects\items\devices\multitool.dm"
@@ -1431,7 +1430,9 @@
#include "code\game\objects\structures\window.dm"
#include "code\game\objects\structures\window_spawner.dm"
#include "code\game\objects\structures\window_vr.dm"
-#include "code\game\objects\structures\crates_lockers\closets.dm"
+#include "code\game\objects\structures\crates_lockers\__closets.dm"
+#include "code\game\objects\structures\crates_lockers\_closets_appearance_definitions.dm"
+#include "code\game\objects\structures\crates_lockers\_closets_appearance_definitions_vr.dm"
#include "code\game\objects\structures\crates_lockers\crates.dm"
#include "code\game\objects\structures\crates_lockers\crates_vr.dm"
#include "code\game\objects\structures\crates_lockers\largecrate.dm"
@@ -1445,7 +1446,6 @@
#include "code\game\objects\structures\crates_lockers\closets\gimmick.dm"
#include "code\game\objects\structures\crates_lockers\closets\job_closets.dm"
#include "code\game\objects\structures\crates_lockers\closets\l3closet.dm"
-#include "code\game\objects\structures\crates_lockers\closets\l3closet_vr.dm"
#include "code\game\objects\structures\crates_lockers\closets\malfunction.dm"
#include "code\game\objects\structures\crates_lockers\closets\misc_vr.dm"
#include "code\game\objects\structures\crates_lockers\closets\statue.dm"
@@ -1688,9 +1688,9 @@
#include "code\modules\ai\ai_holder_targeting_vr.dm"
#include "code\modules\ai\interfaces.dm"
#include "code\modules\ai\say_list.dm"
-#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai.dm"
-#include "code\modules\ai\ai_holder_subtypes\simple_mob_ai_vr.dm"
-#include "code\modules\ai\ai_holder_subtypes\slime_xenobio_ai.dm"
+#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai.dm"
+#include "code\modules\ai\aI_holder_subtypes\simple_mob_ai_vr.dm"
+#include "code\modules\ai\aI_holder_subtypes\slime_xenobio_ai.dm"
#include "code\modules\alarm\alarm.dm"
#include "code\modules\alarm\alarm_handler.dm"
#include "code\modules\alarm\atmosphere_alarm.dm"
@@ -2128,6 +2128,7 @@
#include "code\modules\food\drinkingglass\glass_boxes.dm"
#include "code\modules\food\drinkingglass\glass_types.dm"
#include "code\modules\food\drinkingglass\metaglass.dm"
+#include "code\modules\food\drinkingglass\metaglass_vr.dm"
#include "code\modules\food\drinkingglass\serving_glasses.dm"
#include "code\modules\food\drinkingglass\shaker.dm"
#include "code\modules\food\drinkingglass\shaker_vr.dm"
@@ -2795,6 +2796,7 @@
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\support_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\hivebot\tank.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\adv_dark_gygax.dm"
+#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\adv_dark_gygax_vr.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\combat_mecha.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\durand.dm"
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm"
@@ -3228,6 +3230,7 @@
#include "code\modules\projectiles\guns\magnetic\magnetic.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_construction.dm"
#include "code\modules\projectiles\guns\magnetic\magnetic_railgun.dm"
+#include "code\modules\projectiles\guns\magnetic\magnetic_railgun_vr.dm"
#include "code\modules\projectiles\guns\projectile\automatic.dm"
#include "code\modules\projectiles\guns\projectile\automatic_vr.dm"
#include "code\modules\projectiles\guns\projectile\automatic_yw.dm"