From 719151a74ae899e7f14ec7cb9722af9801ad2bbf Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Sun, 31 May 2020 00:32:22 -0400 Subject: [PATCH] Port Bay's lockers, crates, largecrates, wall lockers --- code/ATMOSPHERICS/_atmos_setup.dm | 9 - code/__defines/color.dm | 138 +++ code/__defines/misc.dm | 34 - code/_helpers/global_lists.dm | 9 + code/datums/supplypacks/recreation.dm | 2 +- code/game/area/Space Station 13 areas.dm | 4 +- code/game/gamemodes/events.dm | 2 +- code/game/machinery/doors/brigdoors.dm | 4 +- code/game/objects/items/bodybag.dm | 45 +- code/game/objects/items/poi_items.dm | 6 +- .../{closets.dm => __closets.dm} | 120 +-- .../_closets_appearance_definitions.dm | 917 ++++++++++++++++++ .../crates_lockers/closets/coffin.dm | 19 +- .../crates_lockers/closets/crittercrate.dm | 4 +- .../crates_lockers/closets/fitness.dm | 9 +- .../crates_lockers/closets/gimmick.dm | 41 +- .../crates_lockers/closets/job_closets.dm | 12 +- .../crates_lockers/closets/l3closet.dm | 28 +- .../crates_lockers/closets/malfunction.dm | 4 +- .../crates_lockers/closets/secure/bar.dm | 19 +- .../crates_lockers/closets/secure/cargo.dm | 21 +- .../closets/secure/engineering.dm | 35 +- .../crates_lockers/closets/secure/freezer.dm | 40 +- .../closets/secure/guncabinet.dm | 6 +- .../closets/secure/hydroponics.dm | 14 +- .../crates_lockers/closets/secure/medical.dm | 69 +- .../crates_lockers/closets/secure/personal.dm | 28 +- .../closets/secure/scientist.dm | 49 +- .../closets/secure/secure_closets.dm | 81 +- .../crates_lockers/closets/secure/security.dm | 81 +- .../crates_lockers/closets/syndicate.dm | 4 +- .../crates_lockers/closets/utility_closets.dm | 44 +- .../crates_lockers/closets/walllocker.dm | 9 +- .../crates_lockers/closets/wardrobe.dm | 87 +- .../structures/crates_lockers/crates.dm | 158 +-- code/modules/mining/abandonedcrates.dm | 4 +- code/modules/mining/mine_items.dm | 5 +- code/modules/xenoarcheaology/misc.dm | 43 - icons/obj/bodybag.dmi | Bin 4007 -> 0 bytes icons/obj/closets/abductor.dmi | Bin 0 -> 576 bytes icons/obj/closets/bases/cabinet.dmi | Bin 0 -> 1904 bytes icons/obj/closets/bases/cart.dmi | Bin 0 -> 1202 bytes icons/obj/closets/bases/closet.dmi | Bin 0 -> 1803 bytes icons/obj/closets/bases/crate.dmi | Bin 0 -> 1454 bytes icons/obj/closets/bases/large_crate.dmi | Bin 0 -> 1570 bytes icons/obj/closets/bases/wall.dmi | Bin 0 -> 1536 bytes icons/obj/closets/bodybag.dmi | Bin 0 -> 643 bytes icons/obj/closets/coffin.dmi | Bin 0 -> 563 bytes icons/obj/closets/coffin_wood.dmi | Bin 0 -> 1157 bytes icons/obj/closets/cryobag.dmi | Bin 0 -> 1218 bytes icons/obj/closets/decals/cart.dmi | Bin 0 -> 250 bytes icons/obj/closets/decals/closet.dmi | Bin 0 -> 3264 bytes icons/obj/closets/decals/crate.dmi | Bin 0 -> 1943 bytes icons/obj/closets/decals/large_crate.dmi | Bin 0 -> 593 bytes icons/obj/closets/decals/wall.dmi | Bin 0 -> 916 bytes icons/obj/closets/fridge.dmi | Bin 0 -> 1019 bytes icons/obj/closets/grave.dmi | Bin 0 -> 812 bytes icons/obj/closets/miningcar.dmi | Bin 0 -> 493 bytes icons/obj/closets/poireactor.dmi | Bin 0 -> 659 bytes icons/obj/closets/rescuebag.dmi | Bin 0 -> 897 bytes icons/obj/cryobag.dmi | Bin 1339 -> 0 bytes vorestation.dme | 5 +- 62 files changed, 1384 insertions(+), 825 deletions(-) rename code/game/objects/structures/crates_lockers/{closets.dm => __closets.dm} (88%) create mode 100644 code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm delete mode 100644 icons/obj/bodybag.dmi create mode 100644 icons/obj/closets/abductor.dmi create mode 100644 icons/obj/closets/bases/cabinet.dmi create mode 100644 icons/obj/closets/bases/cart.dmi create mode 100644 icons/obj/closets/bases/closet.dmi create mode 100644 icons/obj/closets/bases/crate.dmi create mode 100644 icons/obj/closets/bases/large_crate.dmi create mode 100644 icons/obj/closets/bases/wall.dmi create mode 100644 icons/obj/closets/bodybag.dmi create mode 100644 icons/obj/closets/coffin.dmi create mode 100644 icons/obj/closets/coffin_wood.dmi create mode 100644 icons/obj/closets/cryobag.dmi create mode 100644 icons/obj/closets/decals/cart.dmi create mode 100644 icons/obj/closets/decals/closet.dmi create mode 100644 icons/obj/closets/decals/crate.dmi create mode 100644 icons/obj/closets/decals/large_crate.dmi create mode 100644 icons/obj/closets/decals/wall.dmi create mode 100644 icons/obj/closets/fridge.dmi create mode 100644 icons/obj/closets/grave.dmi create mode 100644 icons/obj/closets/miningcar.dmi create mode 100644 icons/obj/closets/poireactor.dmi create mode 100644 icons/obj/closets/rescuebag.dmi delete mode 100644 icons/obj/cryobag.dmi diff --git a/code/ATMOSPHERICS/_atmos_setup.dm b/code/ATMOSPHERICS/_atmos_setup.dm index 6af102cf384..a2735133e25 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/color.dm b/code/__defines/color.dm index c1416a5e923..56c3f5fa7e1 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 8534378b554..c81bcd4c0cf 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 8a34fb50b7b..7b829455646 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/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index 357f0eaeadc..134ae76e303 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 6caf76a982e..be70e217c3e 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -1712,7 +1712,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 ..() @@ -1724,7 +1724,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 ba737a416a5..083a90fc094 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/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index a15887cc589..3722e66cf6c 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/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index e714263ebe8..b49ee7a70f1 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 @@ -105,19 +103,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) @@ -135,7 +136,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 @@ -166,13 +167,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) @@ -260,3 +265,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/poi_items.dm b/code/game/objects/items/poi_items.dm index b86d93aec87..4300eeed71f 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 88% rename from code/game/objects/structures/crates_lockers/closets.dm rename to code/game/objects/structures/crates_lockers/__closets.dm index 2cea4f4cccf..24b68bdf2af 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/__closets.dm @@ -1,15 +1,16 @@ +// 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/closet.dmi' - icon_state = "closed" + icon_state = "closed_unlocked" 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 @@ -30,7 +31,9 @@ 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 + 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() ..() @@ -46,22 +49,28 @@ 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) + 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 src.contents) + 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 src.contents) + for(var/obj/item/I in contents) if(!I.anchored) content_size += CEILING(I.w_class/2, 1) if(!content_size) @@ -75,7 +84,7 @@ else . += "It is full." - if(!src.opened && isobserver(user)) + if(!opened && isobserver(user)) . += "It contains: [counting_english_list(contents)]" /obj/structure/closet/CanPass(atom/movable/mover, turf/target) @@ -84,7 +93,7 @@ return ..() /obj/structure/closet/proc/can_open() - if(src.sealed) + if(sealed) return 0 return 1 @@ -101,37 +110,37 @@ /obj/structure/closet/proc/dump_contents() //Cham Projector Exception for(var/obj/effect/dummy/chameleon/AD in src) - AD.forceMove(src.loc) + AD.forceMove(loc) for(var/obj/I in src) - I.forceMove(src.loc) + I.forceMove(loc) for(var/mob/M in src) - M.forceMove(src.loc) + M.forceMove(loc) if(M.client) M.client.eye = M.client.mob M.client.perspective = MOB_PERSPECTIVE /obj/structure/closet/proc/open() - if(src.opened) + if(opened) return 0 - if(!src.can_open()) + if(!can_open()) return 0 - src.dump_contents() + dump_contents() - src.icon_state = src.icon_opened - src.opened = 1 + opened = 1 playsound(src, open_sound, 15, 1, -3) if(initial(density)) density = !density + update_icon() return 1 /obj/structure/closet/proc/close() - if(!src.opened) + if(!opened) return 0 - if(!src.can_close()) + if(!can_close()) return 0 var/stored_units = 0 @@ -145,18 +154,18 @@ if(max_closets) stored_units += store_closets(stored_units) - src.icon_state = src.icon_closed - src.opened = 0 + 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 src.loc) + for(var/obj/effect/dummy/chameleon/AD in loc) if((stored_units + added_units) > storage_capacity) break AD.forceMove(src) @@ -165,7 +174,7 @@ /obj/structure/closet/proc/store_items(var/stored_units) var/added_units = 0 - for(var/obj/item/I in src.loc) + 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 @@ -176,7 +185,7 @@ /obj/structure/closet/proc/store_mobs(var/stored_units) var/added_units = 0 - for(var/mob/living/M in src.loc) + for(var/mob/living/M in loc) if(M.buckled || M.pinned.len) continue if(stored_units + added_units + M.mob_size > storage_capacity) @@ -190,7 +199,7 @@ /obj/structure/closet/proc/store_closets(var/stored_units) var/added_units = 0 - for(var/obj/structure/closet/C in src.loc) + 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 @@ -205,7 +214,7 @@ /obj/structure/closet/proc/toggle(mob/user as mob) - if(!(src.opened ? src.close() : src.open())) + if(!(opened ? close() : open())) to_chat(user, "It won't budge!") return update_icon() @@ -215,19 +224,19 @@ 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.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(src.loc) + 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(src.loc) + A.forceMove(loc) qdel(src) /obj/structure/closet/blob_act() @@ -237,7 +246,7 @@ health -= damage if(health <= 0) for(var/atom/movable/A in src) - A.forceMove(src.loc) + A.forceMove(loc) qdel(src) /obj/structure/closet/bullet_act(var/obj/item/projectile/Proj) @@ -251,10 +260,10 @@ return /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob) - if(src.opened) + if(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 + MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet return 0 if(istype(W,/obj/item/tk_grab)) return 0 @@ -267,7 +276,7 @@ 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) + 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) @@ -287,7 +296,7 @@ return usr.drop_item() if(W) - W.forceMove(src.loc) + W.forceMove(loc) else if(istype(W, /obj/item/weapon/packageWrap)) return else if(seal_tool) @@ -303,8 +312,8 @@ return if(do_after(user, 20 * S.toolspeed)) playsound(src, S.usesound, 50) - src.sealed = !src.sealed - src.update_icon() + 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()) @@ -319,7 +328,7 @@ to_chat(user, "You [anchored? "un" : ""]secured \the [src]!") anchored = !anchored else - src.attack_hand(user) + attack_hand(user) return /obj/structure/closet/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob) @@ -333,14 +342,14 @@ return if(!isturf(user.loc)) // are you in a container/closet/pod/etc? return - if(!src.opened) + if(!opened) return if(istype(O, /obj/structure/closet)) return - step_towards(O, src.loc) + step_towards(O, loc) if(user != O) user.show_viewers("[user] stuffs [O] into [src]!") - src.add_fingerprint(user) + add_fingerprint(user) return /obj/structure/closet/attack_robot(mob/user) @@ -348,20 +357,20 @@ attack_hand(user) /obj/structure/closet/relaymove(mob/user as mob) - if(user.stat || !isturf(src.loc)) + if(user.stat || !isturf(loc)) return - if(!src.open()) + if(!open()) to_chat(user, "It won't budge!") /obj/structure/closet/attack_hand(mob/user as mob) - src.add_fingerprint(user) - src.toggle(user) + add_fingerprint(user) + 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()) + add_fingerprint(user) + if(!toggle()) to_chat(usr, "It won't budge!") /obj/structure/closet/verb/verb_toggleopen() @@ -373,19 +382,16 @@ return if(ishuman(usr) || isrobot(usr)) - src.add_fingerprint(usr) - src.toggle(usr) + add_fingerprint(usr) + 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" +/obj/structure/closet/update_icon() + if(opened) + icon_state = "open" else - icon_state = icon_opened + 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) @@ -461,8 +467,8 @@ return TRUE /obj/structure/closet/return_air_for_internal_lifeform(var/mob/living/L) - if(src.loc) - if(istype(src.loc, /obj/structure/closet)) + if(loc) + if(istype(loc, /obj/structure/closet)) return (loc.return_air_for_internal_lifeform(L)) return return_air() 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 00000000000..2436e6a99ff --- /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/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index 7ea80de7ff8..14e1c276b23 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 3546cd52e7b..72a9188d127 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/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index c261d8d2f63..a3515fd3fd2 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 f567cdbd3a1..2ca6dc3c6e4 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 cfed9c545f5..642935973d2 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 695b5575d2b..66af8329f5b 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/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index 40b6ec68b9f..feaa63e39f2 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/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 516d2a645e6..52b949f809d 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 9ab55aa86cf..6b5fef54f3d 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 43f50a83873..7b1dd6a41f7 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, @@ -46,13 +41,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, @@ -63,13 +53,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, @@ -79,13 +64,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, @@ -115,13 +95,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 f6ca40fe2b0..afb8b1c3baa 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 2be8e52db13..b69a3ff368d 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 71c76bb7e37..b97f0bf2f7f 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 86cb24dc8c4..b8c849320d3 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,13 @@ /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 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 d75cf18e5ad..8028f065324 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 4e78a613e4b..af7f37bb6dc 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 c5732a337ec..e5fc47c64a5 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 761ffd2047c..f2d3acad273 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, @@ -185,13 +160,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, @@ -252,13 +222,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, @@ -278,19 +243,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) @@ -337,26 +289,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/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index f608c05b26e..dee5e284a33 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 903a058f9c1..82623434a94 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,9 +184,7 @@ /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 @@ -225,15 +205,7 @@ /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 diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index b2b874f5c8e..b28915157cf 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -4,12 +4,9 @@ /obj/structure/closet/walllocker desc = "A wall mounted storage locker." name = "Wall Locker" - icon = 'icons/obj/walllocker.dmi' - icon_state = "wall-locker" + closet_appearance = /decl/closet_appearance/wall density = 0 anchored = 1 - icon_closed = "wall-locker" - icon_opened = "wall-lockeropen" //spawns endless (3 sets) amounts of breathmask, emergency oxy tank and crowbar @@ -18,9 +15,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) 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 916c12f6439..48a5d53c741 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, @@ -110,8 +103,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, @@ -121,8 +113,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, @@ -136,8 +127,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, @@ -146,8 +136,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, @@ -158,8 +147,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, @@ -173,8 +161,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, @@ -191,8 +178,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, @@ -202,8 +188,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, @@ -214,8 +199,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, @@ -244,8 +228,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, @@ -266,8 +249,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, @@ -281,8 +263,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, @@ -295,8 +276,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, @@ -310,8 +290,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, @@ -336,8 +315,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) @@ -345,8 +323,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, @@ -356,8 +333,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, @@ -393,9 +369,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, @@ -420,9 +394,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, @@ -439,8 +411,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, @@ -468,9 +439,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 7a9abe17e94..c3b5f7216c9 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -3,13 +3,9 @@ /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" + 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 +33,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 +60,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 +121,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 +159,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 +194,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,45 +206,33 @@ 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 @@ -276,16 +253,11 @@ /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 +265,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, @@ -306,9 +275,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 @@ -352,18 +319,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, @@ -373,72 +334,46 @@ /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" - + closet_appearance = /decl/closet_appearance/large_crate /obj/structure/closet/crate/large/close() . = ..() @@ -462,12 +397,7 @@ /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" + closet_appearance = /decl/closet_appearance/large_crate/secure /obj/structure/closet/crate/secure/large/close() @@ -492,33 +422,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/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 11917f4c40f..47e52f3b61d 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/mine_items.dm b/code/modules/mining/mine_items.dm index 3a2f7044e26..dcd169bfed1 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/xenoarcheaology/misc.dm b/code/modules/xenoarcheaology/misc.dm index 2c031fa3444..f6005c3f172 100644 --- a/code/modules/xenoarcheaology/misc.dm +++ b/code/modules/xenoarcheaology/misc.dm @@ -51,49 +51,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/icons/obj/bodybag.dmi b/icons/obj/bodybag.dmi deleted file mode 100644 index a1f990312809ec446985c852e3ff8267b223bef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4007 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 diff --git a/icons/obj/closets/abductor.dmi b/icons/obj/closets/abductor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..8f3b2d27062bf94b4dc7ccc3a5689ccf9e73efdd GIT binary patch literal 576 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 QFaQ7m07*qoM6N<$f+dS9SpWb4 literal 0 HcmV?d00001 diff --git a/icons/obj/closets/bases/closet.dmi b/icons/obj/closets/bases/closet.dmi new file mode 100644 index 0000000000000000000000000000000000000000..551435629e4353606dcf8193bcf34128c6d6a405 GIT binary patch literal 1803 zcma)7XH=617k(2Wi6QKSB_s?13DL5Lkbn|s5XA&S(aI_Wks(MKrHl|P6%gbLLIlJx zJ`7<7$`EP@Q%^)zKn0a)L6%Hq2uHDKe|-JT)~>YJj^VvzqN#o+YMNZ^mn9=)EjdUb~^ zvxRwrtGQ6FNixuPEm`n&nxLIk{9*BQ?5q1dA@o-Hsb41Ze{I7s+0|>UYo%)eg*)t> zexg>n$Qr8->I(x67il%uYYPC3agqZ#Q@Cr!@1o|te`b+b@X-)rgKp?|KS ze|p?EKk4xN2F=JZARwU2UxT5vrBVFHv$RwlbjEN|Vy?AxxmsBuyjCo)tis~%I)e|) z*?z;OEJfJET6iP@k*5K3kjvTzu-Om0d*Iidogn{)i&JY3H(VG^O{O;=`xZ9y8yl%M zUS3|?t)FQ|yLz&C&HrjWGf7mm)HSfP<+#XVb9-pVvPh!E#fraD33JQK8HjF?Wmqhc zXp`{KJ(UOk7-$HKY`YqzuZmDB%X&&sH*4oQgpJ1 zjGz|Q*3}q{swx@Fdf)h2dZtbE(z~<@X#e!7ex4C&Xk%0BZ==pSqbw;bY@U)hp2EPi zd2gJQDo!gykl)3OwT;Lj)(guJK4YV_u~B3i!W=am?i4k;9VJvn-ZiqVnaKiu6dgTa zwla{M%Tw++F*fM{vF7-T$80YP_rBOWXdbi`bV~wP!a33L=(nL*VQp>gK@~w2i*)o# zM8vZ#%VH}BLeb7d1khoHh$jGHb;^%aVIBVi2ds+0@b`Rlr}0mKK8hwIf6%@C(#6gf z7$65m#^wgb(1`XgY>m#OFcPN(t{3r4h8$>BQgSHQ*mzU;ZWLPymCHKOkv>0IMI>@u z(hfpBJT%F{QM?74o0hsz#FPd#G}sU7KCB<3YIeMQ0=t!&Sy}$teR)lIDYT#pX%}7a zR43`Xoo%Yyij#^}v8QfDhP4>e$%=~<8BaH-YF7D|F&uDTfB&0)4*E?2g4z4FGSSmh zR(5D)M8PcCWLoD4NzunQ{+?zQ?A3!?EZd&c=<0$Hbx%fEp|v3)U8pCQmQ2?c1ylP> zb5;%kYcf5Em8Zwp5MS83cvhc?mvLKTy3(VpnFUYS`e?Wcj?cV}kl99c7?cnhV>@eZ zR0(8ph}8PZGcM^12sjTlhQ@*Vl7Rmgi;h4RmpsOT?sqi-?84JmxAN*6GD6k;jPdPS zqwjpvdc-O z?`L=qsd0-SCZVBb_nqfXCj6+Nleu47>zcCZyYy9wgr+^OX0vggVR^@S_wu0o$51U1MDy{w$M2;KIpO^|EqL2mAYEI(osW%q_W0@SxF{aYJ3{}zF=cJSQ* NM|)=?@3hbLzX2V^HTnPm literal 0 HcmV?d00001 diff --git a/icons/obj/closets/bases/crate.dmi b/icons/obj/closets/bases/crate.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e8e26686fc610647981fbbf7280ee2cc0625132d GIT binary patch literal 1454 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 literal 0 HcmV?d00001 diff --git a/icons/obj/closets/bases/wall.dmi b/icons/obj/closets/bases/wall.dmi new file mode 100644 index 0000000000000000000000000000000000000000..6689e59cfce99ce20474d007153ff602431369f6 GIT binary patch literal 1536 zcmZ`(c{JMx9RGY&;mQFDgHpfn~4_UL}gkJ@78-Ps3HJ`|!n@MsW}m zMwCerhB!}jSexX*JDEJb{QS*bEW&rhc!wyr=C_mL)c^G6I<-1Fd~)ww1ya4x3J zECr(A5}`4(+t5{;S%3b<2vd(8J|%iYmdV!iDA-@f8$~-*R8-uZ{@4~QoJddswBY~> z0vr_q5B7zj@Hz zZIKEqu~ikqVi$NjjIK@%8c3VUg!_*#SNF5IySvUL4{-ae1GvPo)HlJR6#*O zEfbAGg+5U(8S;MRU1i*z&^n`KYp!nr5~SPF+wV&)Y~1H_6IOXX4&a|0Ep9Lg*K6mr zb*f7yz(<7+s8bP}_=DX)3MY{8jsWcp?|~pCSt`5lt;cvZYuqo#>Z#e-v^F&)D$2juUy5eN=&upj z&9g{}p`eR0LU`Tb>SdHOtS4AEGd~}FZ6mc~ZtXx|q5AUW1@?8B%_^8~m{btVDa$iB zh4cRXduC#URUkDGyuI;aDuv=GQ#RzySx*Domno7L1qw4T&6BgIyNOT}?1`AXzJi4z zD)s~InITA|W_5dDz+P%6de>98y9!hOxbioTx_r;am32CUeC^lk47YRxN$_!}0NMWz z>oYSH&^clsIuaz!s?BnWN9mk{{5yl4VvmygOXRmV@mU^=CH8D!^-beOBSyAP?K{;y zG;|n87%q4Io~g6OI{dt*H7c@xlpY#JtSjsoCM)`_`w8-C-QnR3-s3=~%W(=%(vSm6z8T$Xl{=8Oy zok1@{#AcL&B`TUk~<-7EuWBuI{vN#|0b+mkp|pGAJYOa zj_Fy)tkcYaOlmTc7uRb&kc0AHmr^lGw@TXG|00uT8FC{0Ea4*P&dDI#rmXh1pAi^S za>-GgT-ho=wriGaUiWL7$dbGw%UalSa`e8+yO+8WF8k3k(oMPVp1lz0Phb`G*v7Ks zT4q`w(N8(E5@n1o$0cvJTiUYp=abBX-xd@0aHRaRBSSc+NZn!6dtGB3z?MmVuF;Dc zHYY3DU+-t}@xFG%kPu5PMM=o$juKs@`QKarydbx|Ne2hi>jYQ~|24#izi=7s@J?v TZA~Y^O9ybKR@e$-_t-xHh;+a~ literal 0 HcmV?d00001 diff --git a/icons/obj/closets/bodybag.dmi b/icons/obj/closets/bodybag.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d6922f8bbec508120ac0f4976157a81db43c4798 GIT binary patch literal 643 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 Lah4V4UYGv`iK(V^ literal 0 HcmV?d00001 diff --git a/icons/obj/closets/decals/crate.dmi b/icons/obj/closets/decals/crate.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b0e600aefff7f29da5fd7af48250d2179dfc6608 GIT binary patch literal 1943 zcmV;I2Wa?-P) zUS7DkxaF`fDk>_8iHVw;n&#%_|NsBIyu1ty40UyNa&mIOz`%rrgaIzrU;qFB0d!JM zQvg8b*k%9#0OfjASad{Xb7OL8aCB*JZU6vyoSl@*4uUWcMc4Ez8r&OSTQ>${SjaDs zN()SaluReSzTPTESz(9Wo#foPlj)>0x!WJoOeV)vTnsv}t=!7Zd?BJMXsUg&UWuqS zP}S5IjuaU$<5)x*(0REOQHknodi@1z^-!pP*k%mNZD-oQY=K_ns5B_@v*wK{X_9GL z9KO~t&BY2d1Vv+bbXWk{8w66EiBG5sXe%Dg2`JDy7s%S%J&<&S(1q@~hdD!k9E>9! zI3@&f&U0wtM}4*&oF00000 z0DvhW_3xT2QoYVlCCaCW{kxW!h2Ez`p&?&G?%y>#xYMc@xkR9r-?JZRnxf3vq8)4b zQu9ucLqMKSCy|*{sd=Y}CV4)c#2s_gbui;N%h!#2iU9xs00000008j0G4)G(k$;!x zesz83i~Ku-)w5U*ogd`iY58tK^Oe}Yqv-RsT!!USr2ZX2Z*FjfMfsFK|4wf%+rin} zh3k^g2kD0-%aUz&?z42Z{OI2N+c+v5OkUu1(B=`Croi?3`t`%Q*vk~J*X@-yTCWfP zI@4Gee{i>a>$Sf{QF7Oe)v^)qJ1jYdD-t{R?bRw!;IqT_;#XVjV)j^kUl)GTnH{k$G&{5^Z(TKy>lvL1YTBxR_gvCR#7GJUMBFXP4znaL)-MOC?+6qwrRgM z;74%%oE2Ey)&jRhCxP#4f#PFuepnW6oAI7wd|Ca{X4_ie?L&o7;Ky2^ehf0~1*wHg zVDr+y%x7Vyc<_9l zr{y8Dvd2T`gCUUlcPBvR-<^Q7cjN#70DyDia({*Lq7|#?g|)R2dKEiQWceArTiS}} zyP~*l#cJ7%50?n-9*H38F3pn(pdR$N&vSyKTOME$vWQG95| zX{yLA_|$p2wk!&Xz+GvUz==(LN5bHCJ)MXzB}ew(60O8ch|<}W2pcGf+-#W z%Q|LX-l}&l4W!0EE~-{)$!u41gCFNXe9ZS#Vi&++@Z)?qwjW$zY2Q&dDFllWOSKPE z7ijY1JUF%={um@3>J1W+i*8Y3sqO>n=P~45b?@t*@chu?ryr}?bx#a692sJBb&vn8 zB=zrR*X5Tt7A0|DeuF^w$)dzk-K8M}cFJ!M=--J?x4Je2002PQ_PI0jdK_r`_4!WM z+*H}ib9VrMN#pg5>w%S4s2Rxb%gb-3b;z2)2}a1+DySM*fp<^Lic2wFPb0{_wi~*i|pZew=o+Qw_Vo z0iV6BhAmX!;6Pv~eG6oc$y9u_`UyNf#-0Y=5Rm7W@Aus{lFau(;`#@V)u#@!3_J2B z+5a+Mu}Q1iAN#}#bgzq>ffoA42*&P~=3~%5zaw!yf;Zhd2+jBCASQ)z^9S!>aDkiJ zn%#)a;a>6q004Z!&=bnf3g_kWZY&iJoNw{`Wh@l{oEv_A+zBC81AW%BC@n+U;mXO@Nf70!ACHZ^3#2yDKGQ@ d0002!%KyE!99)<(yO{t0002ovPDHLkV1hT#zBB*; literal 0 HcmV?d00001 diff --git a/icons/obj/closets/decals/large_crate.dmi b/icons/obj/closets/decals/large_crate.dmi new file mode 100644 index 0000000000000000000000000000000000000000..4876570265994e930227cbfa121e0aa52085cc1b GIT binary patch literal 593 zcmV-X0gIHP07j0oSdA%z`!d_ z*Np%G00DGTPE!Ct=GbNc005qPR9JLGWpiV4X>fFDZ*Bkpc$|&U%?iRW48ZYo`xIfj zi(gkSvLQRTR~U7RYtXGFjXK}n;=rTb?H~9NLUK5kr>chHT0tQw=e``uy7)f(11AA$U@uVf`v3p|A4x<(RA_-P(~^_{X|ljw3dC=0w-u0IT_20tEO z8^U^t2*#I!(|YkaC&5{u5QXo%uD30E2f0OJ0&0uI1jDF((!BP!!Z3cB7@vc1{Qxl! z9~PX5EG7s<784+m|4D#%0V)aLE&v_D6yuZ!VL_bdn1>u7ay8RJ9&#>37K44zO0auS zqM`@O^c!6B`pN>tbcfKmKK5HwVkYtf>G|8+Qz76{7Niy+IA~nN4py*%t*4}7ivUvb z)>lk@i`Y{|iHXRDVHk#Cd>_2|z6^7|{~xFh+#1A(>;MY=T~bAmF_~8ZX)c%e`y)s5 fc|oAQVeF7ACHo5PN!VNE00000NkvXXu0mjfptcEQ literal 0 HcmV?d00001 diff --git a/icons/obj/closets/decals/wall.dmi b/icons/obj/closets/decals/wall.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b9b207407e8765f829205d5023da13adf5d9b1ca GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGold3`@N?cNllZ!G7N;32F7#J$% z^q$?zb=ZK1<-yH5u8D7!)~}xaD8NQ#eSpv6V@=oiCe7Mc*Y2=gD8Kwe;q^mHcegRt z$iHdQ2{E#;c>nEMO~w@#K0o(tp-WRrbQc8*%9!+;DsOCPZZ_rb(~tSg-(hrCW9mCM zOXcg2K3(Igd9HN(KX=+)m&?Zg=4UOGw)tUqL;w4_c*gmMV_F#)nD%i*Id5{2Vp2PL!STw4@Dob;bA2Y4y;T-zx>%fH!19MF)|<`$<{H%t;u!~y zIzO27VA8>tlXP5TR|QvaYc+Iq7^)c@TQGfNz`W;r9~JvWHPq zcX{QciEUTD;PZd6LS``zzOc-L(AI{so^FWZV8wn#LIRF}Q0M|Gti= zJRX-#R(y(|(6Pc!Bdyz^gY@jPdEE z=OPcDpFMl>`{v8PZ`bb^eVFLm%k;lPXuFz_2sC2;vN7(v-SsS(y%?Cy7(8A5T-G@y GGywq1&5k|* literal 0 HcmV?d00001 diff --git a/icons/obj/closets/fridge.dmi b/icons/obj/closets/fridge.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1d6955ceea6a6a439b1b0af8e38f12ce1fe0331c GIT binary patch literal 1019 zcmV-le1G(h*e#hN2L1vg48@>4b4wWBg#B{3Y8UH{anBS z1ppiESFE>ef3pAp0^CVNK~z|U?N`xqtso2(G;P6JYybaa?*1f5v$hvzb%2|AN9zvy?Mct#ouQ36 zK1s{)CZ6tzq2rr!7f%bwv;$nlw*`Ztp%vgVzAeDn_13^D0WRZd0g7euyBgpsE_d+q z(%#|gYa4%iJISE$+dI5~%N-0udxsZru>(}8rjpCJ*n#B>+1TL~yxVTz_AFb$J-nl! zUSlXejMdHTCXN(ilS)miID&h4y6R-wt>7vyRZtIb8J8+(1h|TSe+DkeYkj(B@y@LR zULRz1fSWj0D0>?Jvvd3VJ~+XD1Hm_cAK-?o`Ck3!oy`Aje{LP=zs{t;KH3Lq&HpF< z5G||9kMBDhJ?qY9iu(M&`A;7^o3ej6yuSA!m_JvWLEyt)(@|FE|KvY?EMKcFAV~hi z4-Xqtd@zjshF6dxDCYmL)7Q?X?9Wu#dr5#i z7?T9${LgE!_mTj41pjz8GYICLfnbg&r3i}oKc3A3f@NnQSmH@R9wSErfiQ2FcT8fb zem@wRI1&hidBeOD{6R3!p$4+ZI71{-5ES!22$m((Ko%MPNF)-B<8ciD9A~hf|3NTK z$29=J1SmwTfg(Uctd4^W#Qe|xu?C6&2?hUL16AaD4aEGPYoLlOYCvTCc17cT@`gy% zpf>-98XWuQ8sH6*5#~K!?rKn-|G5S=|5yVe@}X78X2%97A5mrgPyVXeC4V32S*Eht zaq$>Zt)iI!lfP zia^QKIe8D9lQON&|Eo-$llOrAqf8xS8s=@O)002ovPDHLkV1gb6-%S7j literal 0 HcmV?d00001 diff --git a/icons/obj/closets/grave.dmi b/icons/obj/closets/grave.dmi new file mode 100644 index 0000000000000000000000000000000000000000..58c5f7dcef31cb19c64663dcb4b464cc6cb01c33 GIT binary patch literal 812 zcmV+{1JnG8P)`4<8K(J8rgA00001bW%=J06^y0W&i*H zY5lg*0TFc8O;-F{p>Qc`k^WH0y_MYZoXg7qUfn8EV@Hy;|wg#5P+LOFRAP*UY2 zxUSzW?$~FTT?gK-*e8{+A(2;rcMp&9!|Fi=U;Zld{`*GXKQGMFYWh#m8?Em*h23th zB-OUI_>2+xc8TCOAA@jm(KCwr))ukN3XAIrrAzggs&onAji&{w8X24KXdIA1qVCdE z8MHKAVxuC8>mNn2sf)sLDoD0W)XH2eO$do9?4j0HZ?`&!JXoe_>b1tZ)hZw&j!-SE zce#McpYXMJQzEKb>%6e&Yn@ZthabzeX$~c(nG+CnNNsKl?FkTl`gM6MOLxRFb3%dB zxQ?rx)=`W#Olb~Z-P!sQoEJkJ!Y$-CW{7fkbfe!e>I8=M0J-HGyj1~eIV0YZ3BWe5|J1o+5t~ChEurQaB zkEo=;7%NM&?-6uOg8*A_3P?dX<4no`=lrv5{T%k@=rc&hQ00;VFnkXZKWglBUmlu% zlHmxoM9GoguVnL3`Q!TKF6TWVw~B#81uc;@kv(q0KoEroYw0rqK^*}HhP)CM!^1N(Gq$$2Ha0dVCnpfM$;wcZ(f|Me0d!JM zQvg8b*k%9#0Bm|xSad{Xb7OL8aCB*JZU6vyoKseCa&`CgQ*iP1YDR3jhGCB3t_HZ+!p&0h~!hK~y-6y^_67!!Q&^tx9=-1X>BPkXxLg zVxi>;z%2`vQmZCVCZg6YKO<=*cB-rlAbCY9of*oKtwL;U9eDRg7%4KrCw&Q>VO6$Zplg`D|2++qrNHoKY7>4f2UoC%+uSZ4g8g-Sb$>Q9-_t*C~Se~w@(T5wcDZ$V%;{o&z)z*GZU zZ14u7KnvGcHL!OrIJ`gPz83g}5RW_)*PiOd7 z;E)^vJQ4T~zl!5mKI5t2;BYVsshREP(v1si+)VL&Y{s9R{EBp+4=aLLVMWSG>E tznu7n>EHa`7Ogd=Pxj0eEF;p^QZo!5{I+m8bJ0^rfDjv=Z#t@C6gqPS(fop8i5x`bFMYr8@V?SBqBzwREAe@&cTBF zWP#7!1xRbnC|;i)4h6FZAVAcYTABm81Pc=~rV@B=Xi7nTKoo^D06^GfS!$261P7(i z!SeS1`@Jch)fPonRmQ;_fQTPUqYL0@5tA{W8#QX5o{T|V8waQm&vb4P0q6+w+3`)& zeMg+=404&x%MBr0^{y>h9WGJG( ztbyl8HNZIP${FB^j0XoNAG&}JFhRBpsqNxn)CFPZ02{4c3&I?D-p+wp0-T~S2iy*- z2$RS&PQoNQUinF+Y?#CtXI*$)*@a8m>_SA{F2tiXAGVQma(f$NyN&VedocT=Oy2{u z5|Vv8v*tx&EWUDZ!-k)s9dMtXyn2xP9LNdLbw4ra5ceBceb=_vHgd7S>~Dmd23TO&>uo<)6R!QSG=dXGkWV9c|M*;C@Vy40PtFSsX1lP; zz>U(y9P}Tb=YFxl%r3n5eZMe*?liYdkivPHLF+#p-Nh;_H`vWT2P+J&VDTJm_;2_E XhS)yG)pMLg00000NkvXXu0mjfBx9Z| literal 0 HcmV?d00001 diff --git a/icons/obj/cryobag.dmi b/icons/obj/cryobag.dmi deleted file mode 100644 index 68255b8b2c3207d43840b79772a390855989d93d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1339 zcmV-B1;qM^P)Vz!>iu(bbA5e%gM)*RkdOfX05i;H{{S=0Gc&-zz*)ih zamo3+ySu2Us7Jc^EwJ|sndT6s^(CzJ2bJIV=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DJegtGAS`VJ~=19I5ovkiHkEOv#1y-W5~ssR+N~V3SncYPs`6q zNlhVIImCFPmFE|v<`J#96pzWu3a)-G;D7-DM&VVAiJqHc000A;NklJJ z5QYV0H>h;6MM{*k$pP86|7 z$kMuwzwId5*CE(lF4w&#z~%ZNz*edU2!GeIs-CGEuRgE|pN(t;zuhz_LV96e~p$5GWM{1Rw!ll>rjq7sp6tr*0P^ z09NEaLf>43BXB$}5vFc10*%L$Ns{Qo*Fm}DdjNluXVY8QE)ssqjOXhj`V%cuhqiP@Lyz|)ls zv*wlT$x?3M4*=EVs48R($2KZixS_wtSIhI7&0PX?FS@JgMMOrDchffh`WVn1iI7t0 z73V=4{~V*1s{X{faH2I}{L}cGZo28FhPv)o9PmvYCr#5VOFx7tbwjum6z$PiD$5+F zB?5e@I+zeKnZUKCXFT9I;2(zJbUK^Ok+5htacbP}DYeIpEtgA{epjl_ z;w(mYxbQKy<=X9XfRj3q;c%r1pf-S^xRJq)l5zVTYQNuW0#9-JjO!!qv#bR`-tR}~ z&b?n=4u`}3c+><0{CpNE-fUj2)hcV61mk|sgf|yV|9JdW1Ze+x8-Q`YU&FMw2b}w! z`