diff --git a/aurorastation.dme b/aurorastation.dme index 0b64892d7c9..dd56e77a281 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1158,7 +1158,6 @@ #include "code\game\objects\structures\crates_lockers\closets.dm" #include "code\game\objects\structures\crates_lockers\crates.dm" #include "code\game\objects\structures\crates_lockers\largecrate.dm" -#include "code\game\objects\structures\crates_lockers\closets\coffin.dm" #include "code\game\objects\structures\crates_lockers\closets\crittercrate.dm" #include "code\game\objects\structures\crates_lockers\closets\fitness.dm" #include "code\game\objects\structures\crates_lockers\closets\gimmick.dm" @@ -1180,7 +1179,6 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\scientist.dm" -#include "code\game\objects\structures\crates_lockers\closets\secure\sciguncabinet.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\secure_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" #include "code\game\objects\structures\crates_lockers\crates\gear_loadout.dm" @@ -3053,7 +3051,7 @@ #include "code\unit_tests\equipment_tests.dm" #include "code\unit_tests\foundation_tests.dm" #include "code\unit_tests\gamemode_tests.dm" -#include "code\unit_tests\hardsuit_sprite_test.dm" +#include "code\unit_tests\icon_tests.dm" #include "code\unit_tests\language_test.dm" #include "code\unit_tests\map_tests.dm" #include "code\unit_tests\mob_tests.dm" diff --git a/code/__defines/_layers.dm b/code/__defines/_layers.dm index 1a966fa0160..ecfe6dd7088 100644 --- a/code/__defines/_layers.dm +++ b/code/__defines/_layers.dm @@ -12,6 +12,7 @@ #define CABLE_LAYER 2.44 #define ABOVE_CABLE_LAYER (CABLE_LAYER + 0.1) #define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6 +#define BELOW_OBJ_LAYER 2.9 #define ABOVE_OBJ_LAYER 3.01 #define UNDERDOOR 3.09 //Just barely under a closed door. #define DOOR_CLOSED_LAYER 3.1 //Above most items if closed @@ -46,4 +47,4 @@ #define BLOB_NODE_LAYER 4.12 #define BLOB_CORE_LAYER 4.13 -#define CLICKCATCHER_PLANE -100 \ No newline at end of file +#define CLICKCATCHER_PLANE -100 diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index fb3ca7e3a0d..63dc48f9519 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -48,7 +48,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.update_icon() 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 6216168c23c..ada6f4a588a 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -109,7 +109,7 @@ if(C.broken) continue if(C.opened && !C.close()) continue C.locked = 1 - C.icon_state = C.icon_locked + C.update_icon() timing = 1 @@ -139,7 +139,7 @@ if(C.opened) continue C.locked = 0 - C.icon_state = C.icon_closed + C.update_icon() if(broadcast) broadcast_security_hud_message("The timer for [id] has expired.", src) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 344ff0c9dd4..f136fa0d0f0 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -548,7 +548,7 @@ secondarytargets += L /obj/machinery/porta_turret/proc/assess_and_assign_closet(var/obj/structure/closet/C, var/list/targets, var/list/secondarytargets) - if(is_type_in_list(C,list(/obj/structure/closet/statue,/obj/structure/closet/hydrant,/obj/structure/closet/walllocker))) + if(is_type_in_list(C,list(/obj/structure/closet/statue,/obj/structure/closet/walllocker/firecloset,/obj/structure/closet/walllocker))) return if(!lethal) return diff --git a/code/game/machinery/walllockers.dm b/code/game/machinery/walllockers.dm deleted file mode 100644 index 126039fb7b7..00000000000 --- a/code/game/machinery/walllockers.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/structure/walllocker - name = "Wall Locker" - icon = 'icons/obj/lockwall.dmi' - icon_state = "emerg" - var/list/spawnitems = list() - anchored = 1 - var/amount = 3 // spawns each items X times. -/obj/structure/walllocker/attack_hand(mob/user as mob) - if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to - return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc) - if(!amount) - to_chat(usr, "It's empty..") - return - if(amount) - for(var/path in spawnitems) - new path(src.loc) - amount-- - return -/obj/structure/walllocker/emerglocker - name = "Emergency Locker" - spawnitems = list(/obj/item/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/crowbar) -/obj/structure/walllocker/emerglocker/north - pixel_y = 32 - dir = SOUTH -/obj/structure/walllocker/emerglocker/south - pixel_y = -32 - dir = NORTH -/obj/structure/walllocker/emerglocker/west - pixel_x = -32 - dir = WEST -/obj/structure/walllocker/emerglocker/east - pixel_x = 32 - dir = EAST \ No newline at end of file diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 420fc41b3f5..079bc538728 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -102,3 +102,10 @@ /obj/effect/overlay/temp/explosion/fast icon_state = "explosionfast" duration = 4 + +/obj/effect/overlay/closet_door + anchored = TRUE + plane = FLOAT_PLANE + layer = FLOAT_LAYER + vis_flags = VIS_INHERIT_ID + appearance_flags = KEEP_TOGETHER | LONG_GLIDE | PIXEL_SCALE diff --git a/code/game/objects/items/airbubble.dm b/code/game/objects/items/airbubble.dm index 53ccf795662..e3df8f0f278 100644 --- a/code/game/objects/items/airbubble.dm +++ b/code/game/objects/items/airbubble.dm @@ -57,8 +57,6 @@ desc = "Special air bubble designed to protect people inside of it from decompressed environments. Has an integrated cooling unit to preserve a stable temperature inside. Requires a power cell to operate." icon = 'icons/obj/airbubble.dmi' icon_state = "airbubble" - icon_closed = "airbubble" - icon_opened = "airbubble_open" open_sound = 'sound/items/zip.ogg' close_sound = 'sound/items/zip.ogg' var/item_path = /obj/item/airbubble @@ -157,7 +155,7 @@ dump_contents() - icon_state = icon_opened + update_icon() opened = 1 playsound(loc, open_sound, 15, 1, -3) density = 0 @@ -178,7 +176,7 @@ if(store_mobs) stored_units += store_mobs(stored_units) - icon_state = icon_closed + update_icon() opened = 0 playsound(loc, close_sound, 25, 0, -3) @@ -225,10 +223,10 @@ bag.desc += " It appears to be poorly hand folded." if(ripped) - bag.icon_state = "[icon_closed]_man_folded_ripped" + bag.icon_state = "[icon_state]_man_folded_ripped" bag.desc += " It has hole in it! Maybe you shouldn't use it!" else - bag.icon_state = "[icon_closed]_man_folded" + bag.icon_state = "[icon_state]_man_folded" qdel(src) return @@ -492,15 +490,13 @@ /obj/structure/closet/airbubble/update_icon() cut_overlays() - if(opened) - icon_state = icon_opened - else if(ripped) + if(ripped) name = "ripped air bubble" - icon_state = "[icon_closed]_ripped" + icon_state = "[icon_state]_ripped" else - icon_state = icon_closed + icon_state = "[initial(icon_state)][opened ? "_open" : ""]" if(zipped) - add_overlay("[icon_closed]_restrained") + add_overlay("[icon_state]_restrained") add_overlay("pressure_[(use_internal_tank) ?("on") : ("off") ]") // Process transfer of air from the tank. Handle if it is ripped open. @@ -629,8 +625,5 @@ name = "air bubble" desc = "Special air bubble designed to protect people inside of it from decompressed environments. Has an integrated cooling unit to preserve a stable temperature inside. Requires a power cell to operate. This does not seem like a regular color scheme." icon_state = "airbubble_syndie" - icon_closed = "airbubble_syndie" - icon_closed = "airbubble_syndie" - icon_opened = "airbubble_syndie_open" item_path = /obj/item/airbubble/syndie syndie = TRUE diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index d02d8f4fd52..6c5601568c4 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -50,16 +50,13 @@ 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_state = "bodybag" open_sound = 'sound/items/zip.ogg' close_sound = 'sound/items/zip.ogg' density = 0 storage_capacity = 30 var/item_path = /obj/item/bodybag - var/contains_body = 0 - var/shapely = TRUE + var/contains_body = FALSE can_be_buckled = TRUE /obj/structure/closet/body_bag/content_info(mob/user, content_size) @@ -147,20 +144,16 @@ qdel(src) /obj/structure/closet/body_bag/update_icon() - if(opened) - icon_state = icon_opened - else - if(contains_body > 0 && shapely) - icon_state = "bodybag_closed1" - else - icon_state = icon_closed + icon_state = "[initial(icon_state)][opened ? "_open" : "[contains_body ? "_occupied" : ""]"]" + +/obj/structure/closet/body_bag/animate_door() + flick("[initial(icon_state)]_anim_[opened ? "open" : "close"]", src) /obj/item/bodybag/cryobag name = "stasis bag" desc = "A folded, reusable bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ a hostile enviroment." - icon = 'icons/obj/cryobag.dmi' - icon_state = "bodybag_folded" + icon_state = "stasis_folded" origin_tech = list(TECH_BIO = 4) deploy_type = /obj/structure/closet/body_bag/cryobag var/stasis_power @@ -173,11 +166,8 @@ name = "stasis bag" desc = "A reusable plastic bag designed to prevent additional damage to an occupant, especially useful if short on time or in \ a hostile enviroment." - icon = 'icons/obj/cryobag.dmi' - icon_opened = "stasis_open" - icon_closed = "stasis_closed" + icon_state = "stasis" item_path = /obj/item/bodybag/cryobag - shapely = FALSE var/datum/gas_mixture/airtank var/stasis_power = 20 @@ -209,7 +199,7 @@ /obj/structure/closet/body_bag/cryobag/update_icon() ..() overlays.Cut() - var/image/I = image(icon, "indicator[opened]") + var/image/I = image(icon, "indicator") I.appearance_flags = RESET_COLOR var/maxstasis = initial(stasis_power) if(stasis_power > 0.5 * maxstasis) @@ -261,6 +251,6 @@ /obj/item/usedcryobag name = "used stasis bag" - desc = "Pretty useless now.." - icon_state = "bodybag_used" - icon = 'icons/obj/cryobag.dmi' + desc = "Pretty useless now." + icon_state = "cryobag_used" + icon = 'icons/obj/bodybag.dmi' diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 941fd863d36..fc694b3bc2b 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -2,37 +2,62 @@ name = "closet" desc = "It's a basic storage unit." icon = 'icons/obj/closet.dmi' - icon_state = "closed" - density = 1 - w_class = ITEMSIZE_HUGE - layer = OBJ_LAYER - 0.01 + icon_state = "generic" + density = TRUE build_amt = 2 - var/icon_closed = "closed" - var/icon_opened = "open" - var/welded_overlay_state = "welded" - var/opened = 0 - var/welded = 0 - var/wall_mounted = 0 //never solid (You can always pass over it) + slowdown = 5 + + var/icon_door = null + var/icon_door_override = FALSE //override to have open overlay use icon different to its base's + var/icon_door_overlay = "" //handles secure locker overlays like the locking lights + + var/secure = FALSE //secure locker or not. typically it shouldn't need lights if it's insecure + var/secure_lights = FALSE // whether to display secure lights when open. + var/opened = FALSE + var/welded = FALSE + var/locked = FALSE + var/broken = FALSE + + var/large = TRUE // if you can shove people in it + var/canbemoved = FALSE // if it can be moved by people using the right tools. basically means if you can change the anchored var. + var/screwed = TRUE // if its screwed in place + var/wrenched = TRUE // if its wrenched down + + var/wall_mounted = FALSE //never solid (You can always pass over it) var/health = 100 var/breakout = 0 //if someone is currently breaking out. mutex var/storage_capacity = 40 //Tying this to mob sizes was dumb - //This is so that someone can't pack hundreds of items in a locker/crate - //then open it in a populated area to crash clients. + //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients. var/open_sound = 'sound/effects/closet_open.ogg' var/close_sound = 'sound/effects/closet_close.ogg' + var/open_sound_volume = 35 + var/close_sound_volume = 50 - var/store_misc = 1 - var/store_items = 1 - var/store_mobs = 1 + var/store_misc = TRUE + var/store_items = TRUE + var/store_mobs = TRUE + var/store_structure = FALSE + var/dense_when_open = FALSE var/maximum_mob_size = 15 var/const/default_mob_size = 15 var/obj/item/closet_teleporter/linked_teleporter - slowdown = 5 + var/double_doors = FALSE + + var/obj/effect/overlay/closet_door/door_obj + var/obj/effect/overlay/closet_door/door_obj_alt + var/is_animating_door = FALSE + var/door_underlay = FALSE //used if you want to have an overlay below the door. used for guncabinets. + var/door_anim_squish = 0.12 // Multiplier on proc/get_door_transform. basically, how far you want this to swing out. value of 1 means the length of the door is unchanged (and will swing out of the tile), 0 means it will just slide back and forth. + var/door_anim_angle = 147 + var/door_hinge = -6.5 // for closets, x away from the centre of the closet. typically good to add a 0.5 so it's centered on the edge of the closet. + var/door_hinge_alt = 6.5 // for closets with two doors. why a seperate var? because some closets may be weirdly shaped or something. + var/door_anim_time = 2.5 // set to 0 to make the door not animate at all + /obj/structure/closet/LateInitialize() - if (opened) // if closed, any item at the crate's loc is put in the contents + if(opened) // if closed, any item at the crate's loc is put in the contents return var/obj/I for(I in loc) @@ -49,8 +74,11 @@ storage_capacity = content_size + 5 /obj/structure/closet/Initialize(mapload) - ..() + . = ..() + update_icon() fill() + if(secure) + verbs += /obj/structure/closet/proc/verb_togglelock return mapload ? INITIALIZE_HINT_LATELOAD : INITIALIZE_HINT_NORMAL // Fill lockers with this. @@ -96,14 +124,14 @@ return (!density) /obj/structure/closet/proc/can_open() - if(welded) + if(welded || locked) return 0 return 1 /obj/structure/closet/proc/can_close() for(var/obj/structure/closet/closet in get_turf(src)) if(closet != src) - return 0 + return 1 return 1 /obj/structure/closet/dump_contents() @@ -123,16 +151,20 @@ /obj/structure/closet/proc/open() if(opened) return 0 - if(!can_open()) return 0 - dump_contents() - - icon_state = icon_opened + if(climbable) + structure_shaken() opened = TRUE - playsound(loc, open_sound, 25, 0, -3) - density = FALSE + dump_contents() + animate_door(FALSE) + if(double_doors) + animate_door_alt(FALSE) + update_icon() + playsound(loc, open_sound, open_sound_volume, 0, -3) + if(!dense_when_open) + density = FALSE return 1 /obj/structure/closet/proc/close() @@ -149,9 +181,14 @@ stored_units += store_items(stored_units) if(store_mobs) stored_units += store_mobs(stored_units) - - icon_state = icon_closed + if(store_structure) + stored_units += store_structure(stored_units) opened = FALSE + animate_door(TRUE) + if(double_doors) + animate_door_alt(TRUE) + update_icon() + if(linked_teleporter) if(linked_teleporter.last_use + 600 > world.time) return @@ -162,11 +199,11 @@ if(did_teleport) linked_teleporter.last_use = world.time - playsound(get_turf(src), close_sound, 25, 0, -3) + playsound(get_turf(src), close_sound, close_sound_volume, 0, -3) density = initial(density) return TRUE -//Cham Projector Exception +//Chem Projector Exception /obj/structure/closet/proc/store_misc(var/stored_units) var/added_units = 0 for(var/obj/effect/dummy/chameleon/AD in loc) @@ -203,11 +240,25 @@ added_units += M.mob_size return added_units +/obj/structure/closet/proc/store_structure(var/stored_units) + var/added_units = 0 + for(var/obj/O in loc) + if((stored_units + added_units) > storage_capacity) + break + if(O.density || O.anchored || istype(O,/obj/structure/closet)) + continue + if(istype(O, /obj/structure/bed)) + var/obj/structure/bed/B = O + if(B.buckled) + continue + O.forceMove(src) + added_units++ + return added_units + /obj/structure/closet/proc/toggle(mob/user as mob) - if(!(opened ? close() : open())) - to_chat(user, "It won't budge!") + if(!(opened ? close(user) : open(user))) + to_chat(user, SPAN_WARNING("It won't budge!")) return - update_icon() return 1 /obj/structure/closet/ex_act(severity) @@ -219,7 +270,7 @@ if(3) health -= rand(30, 60) - if (health <= 0) + if(health <= 0) for (var/atom/movable/A as mob|obj in src) A.ex_act(severity + 1) dump_contents() @@ -259,40 +310,38 @@ CT.attached_closet = src user.drop_from_inventory(CT, src) return - if(W.isscrewdriver()) - if(!linked_teleporter) - to_chat(user, SPAN_WARNING("There is nothing to remove with a screwdriver here.")) - return - user.visible_message(SPAN_NOTICE("\The [user] starts detaching \the [linked_teleporter] from \the [src]..."), SPAN_NOTICE("You begin detaching \the [linked_teleporter] from \the [src]..."), range = 3) - if(do_after(user, 30, TRUE, src)) - user.visible_message(SPAN_NOTICE("\The [user] detaches \the [linked_teleporter] from \the [src]."), SPAN_NOTICE("You detach \the [linked_teleporter] from \the [src]."), range = 3) - linked_teleporter.attached_closet = null - user.put_in_hands(linked_teleporter) - linked_teleporter = null - return if(opened) if(istype(W, /obj/item/grab)) var/obj/item/grab/G = W - 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(W.isscrewdriver()) // Moved here so you can only detach linked teleporters when the door is open. So you can like unscrew and bolt the locker normally in most circumstances. + if(linked_teleporter) + user.visible_message(SPAN_NOTICE("\The [user] starts detaching \the [linked_teleporter] from \the [src]..."), SPAN_NOTICE("You begin detaching \the [linked_teleporter] from \the [src]..."), range = 3) + if(do_after(user, 30, TRUE, src)) + user.visible_message(SPAN_NOTICE("\The [user] detaches \the [linked_teleporter] from \the [src]."), SPAN_NOTICE("You detach \the [linked_teleporter] from \the [src]."), range = 3) + linked_teleporter.attached_closet = null + user.put_in_hands(linked_teleporter) + linked_teleporter = null + return if(W.iswelder()) var/obj/item/weldingtool/WT = W if(WT.isOn()) user.visible_message( - "[user] begins cutting [src] apart.", - "You begin cutting [src] apart.", + SPAN_WARNING("[user] begins cutting [src] apart."), + SPAN_NOTICE("You begin cutting [src] apart."), "You hear a welding torch on metal." ) playsound(loc, 'sound/items/welder_pry.ogg', 50, 1) if (!do_after(user, 2 SECONDS, act_target = src, extra_checks = CALLBACK(src, .proc/is_open))) return if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") + to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) return else user.visible_message( - "[src] has been cut apart by [user] with [WT].", - "You cut apart [src] with [WT]." + SPAN_NOTICE("[src] has been cut apart by [user] with [WT]."), + SPAN_NOTICE("You cut apart [src] with [WT].") ) if(linked_teleporter) linked_teleporter.forceMove(get_turf(src)) @@ -305,9 +354,9 @@ for(var/obj/item/I in LB.contents) LB.remove_from_storage(I, T) user.visible_message( - "[user] empties \the [LB] into \the [src].", - "You empty \the [LB] into \the [src].", - "You hear rustling of clothes." + SPAN_NOTICE("[user] empties \the [LB] into \the [src]."), + SPAN_NOTICE("You empty \the [LB] into \the [src]."), + SPAN_NOTICE("You hear rustling of clothes.") ) return if(!W.dropsafety()) @@ -324,35 +373,92 @@ var/obj/item/weldingtool/WT = W if(WT.isOn()) user.visible_message( - "[user] begins welding [src] [welded ? "open" : "shut"].", - "You begin welding [src] [welded ? "open" : "shut"].", + SPAN_WARNING("[user] begins welding [src] [welded ? "open" : "shut"]."), + SPAN_NOTICE("You begin welding [src] [welded ? "open" : "shut"]."), "You hear a welding torch on metal." ) playsound(loc, 'sound/items/welder_pry.ogg', 50, 1) if (!do_after(user, 2/W.toolspeed SECONDS, act_target = src, extra_checks = CALLBACK(src, .proc/is_closed))) return if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") + to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) return welded = !welded update_icon() user.visible_message( - "[src] has been [welded ? "welded shut" : "unwelded"] by [user].", - "You weld [src] [!welded ? "open" : "shut"]." + SPAN_WARNING("[src] has been [welded ? "welded shut" : "unwelded"] by [user]."), + SPAN_NOTICE("You weld [src] [!welded ? "open" : "shut"].") ) else attack_hand(user) + else if(W.isscrewdriver() && canbemoved) + if(screwed) + to_chat(user, SPAN_NOTICE("You start to unscrew \the [src] from the floor...")) + playsound(loc, W.usesound, 50, 1) + if (do_after(user, 10/W.toolspeed SECONDS, act_target = src)) + to_chat(user, SPAN_NOTICE("You unscrew the locker!")) + playsound(loc, W.usesound, 50, 1) + screwed = FALSE + else if(!screwed && wrenched) + to_chat(user, SPAN_NOTICE("You start to screw the \the [src] to the floor...")) + playsound(src, 'sound/items/welder.ogg', 80, 1) + if (do_after(user, 15/W.toolspeed SECONDS, act_target = src)) + to_chat(user, SPAN_NOTICE("You screw \the [src]!")) + playsound(loc, W.usesound, 50, 1) + screwed = TRUE + else if(W.iswrench() && canbemoved) + if(wrenched && !screwed) + to_chat(user, SPAN_NOTICE("You start to unfasten the bolts holding \the [src] in place...")) + playsound(loc, W.usesound, 50, 1) + if (do_after(user, 15/W.toolspeed SECONDS, act_target = src)) + to_chat(user, SPAN_NOTICE("You unfasten \the [src]'s bolts!")) + playsound(loc, W.usesound, 50, 1) + wrenched = FALSE + anchored = FALSE + else if(!wrenched) + to_chat(user, SPAN_NOTICE("You start to fasten the bolts holding the locker in place...")) + playsound(loc, W.usesound, 50, 1) + if (do_after(user, 15/W.toolspeed SECONDS, act_target = src)) + to_chat(user, SPAN_NOTICE("You fasten the \the [src]'s bolts!")) + playsound(loc, W.usesound, 50, 1) + wrenched = TRUE + anchored = TRUE else if(istype(W, /obj/item/device/hand_labeler)) var/obj/item/device/hand_labeler/HL = W - if (HL.mode == 1) + if(HL.mode == 1) return else attack_hand(user) + else if(istype(W,/obj/item/card/id) && secure) + togglelock(user) + +// Secure locker cutting open stuff. + else if(!opened && secure) + if(!broken && istype(W,/obj/item/material/twohanded/chainsaw)) + var/obj/item/material/twohanded/chainsaw/ChainSawVar = W + ChainSawVar.cutting = 1 + user.visible_message(\ + SPAN_DANGER("[user.name] starts cutting \the [src] with the [W]!"),\ + SPAN_WARNING("You start cutting the [src]..."),\ + SPAN_NOTICE("You hear a loud buzzing sound and metal grinding on metal...")\ + ) + if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, .proc/CanChainsaw, W))) + user.visible_message(\ + SPAN_WARNING("[user.name] finishes cutting open \the [src] with the [W]."),\ + SPAN_WARNING("You finish cutting open the [src]."),\ + SPAN_NOTICE("You hear a metal clank and some sparks.")\ + ) + emag_act(INFINITY, user, SPAN_DANGER("\The [src] has been sliced open by [user] with \an [W]!"), SPAN_DANGER("You hear metal being sliced and sparks flying.")) + ChainSawVar.cutting = 0 + else if(istype(W, /obj/item/melee/energy/blade))//Attempt to cut open locker if locked + if(emag_act(INFINITY, user, SPAN_DANGER("\The [src] has been sliced open by [user] with \an [W]!"), SPAN_DANGER("You hear metal being sliced and sparks flying."))) + playsound(loc, 'sound/weapons/blade.ogg', 50, 1) + else + attack_hand(user) else attack_hand(user) return - // helper procs for callbacks /obj/structure/closet/proc/is_closed() . = !opened @@ -375,9 +481,17 @@ return if(istype(O, /obj/structure/closet)) return - step_towards(O, loc) if(user != O) - user.visible_message(SPAN_DANGER("[user] stuffs \the [O] into \the [src]!"), SPAN_NOTICE("You stuff \the [O] into \the [src]."), range = 3) + var/turf/T = get_turf(src) + if(ismob(O)) + if(large) + user.visible_message(SPAN_DANGER("[user] stuffs \the [O] into \the [src]!"), SPAN_NOTICE("You stuff \the [O] into \the [src]."), range = 3) + O.forceMove(T) + close() + else + to_chat(user, SPAN_NOTICE("\The [src] is too small to stuff [O] into!")) + else + O.forceMove(T) add_fingerprint(user) return @@ -390,11 +504,14 @@ return if(!open()) - to_chat(user, "It won't budge!") + to_chat(user, SPAN_NOTICE("It won't budge!")) /obj/structure/closet/attack_hand(mob/user as mob) add_fingerprint(user) - return toggle(user) + if(locked) + togglelock(user) + else + toggle(user) /obj/structure/closet/verb/verb_toggleopen() set src in oview(1) @@ -408,16 +525,114 @@ add_fingerprint(usr) toggle(usr) else - to_chat(usr, "This mob type can't use this verb.") + to_chat(usr, SPAN_WARNING("This mob type can't use this verb.")) + +/obj/structure/closet/update_icon() + if(!door_underlay) + cut_overlays() -/obj/structure/closet/update_icon()//Putting the welded stuff in update_icon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - cut_overlays() if(!opened) - icon_state = icon_closed + layer = OBJ_LAYER if(welded) - add_overlay(welded_overlay_state) + add_overlay("[icon_door_overlay]welded") + if(!is_animating_door) + if(icon_door) + add_overlay("[icon_door]_door") + if(double_doors) + add_overlay("[icon_door]_door_alt") + if(!icon_door) + add_overlay("[icon_state]_door") + if(double_doors) + add_overlay("[icon_state]_door_alt") + if(secure) + update_secure_overlays() + if(secure && secure_lights) + update_secure_overlays() + else if(opened) + layer = BELOW_OBJ_LAYER + if(!is_animating_door) + add_overlay("[icon_door_override ? icon_door : icon_state]_open") + if(secure && secure_lights) + update_secure_overlays() + +/obj/structure/closet/proc/update_secure_overlays() + if(broken) + add_overlay("[icon_door_overlay]emag") else - icon_state = icon_opened + if(locked) + add_overlay("[icon_door_overlay]locked") + else + add_overlay("[icon_door_overlay]unlocked") + +/obj/structure/closet/proc/animate_door(var/closing = FALSE) + if(!door_anim_time) + return + if(!door_obj) door_obj = new + vis_contents |= door_obj + door_obj.icon = icon + door_obj.icon_state = "[icon_door || icon_state]_door" + is_animating_door = TRUE + var/num_steps = door_anim_time / world.tick_lag + for(var/I in 0 to num_steps) + var/angle = door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps)) + var/matrix/M = get_door_transform(angle) + var/door_state = angle >= 90 ? "[icon_door_override ? icon_door : icon_state]_back" : "[icon_door || icon_state]_door" + var/door_layer = angle >= 90 ? FLOAT_LAYER : ABOVE_MOB_LAYER + + if(I == 0) + door_obj.transform = M + door_obj.icon_state = door_state + door_obj.layer = door_layer + else if(I == 1) + animate(door_obj, transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag, flags = ANIMATION_END_NOW) + else + animate(transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag) + addtimer(CALLBACK(src,.proc/end_door_animation),door_anim_time,TIMER_UNIQUE|TIMER_OVERRIDE) + +/obj/structure/closet/proc/end_door_animation() + is_animating_door = FALSE // comment this out and the line below to manually tweak the animation end state by fiddling with the door_anim vars to match the open door icon + vis_contents -= door_obj + update_icon() + compile_overlays(src) + +/obj/structure/closet/proc/animate_door_alt(var/closing = FALSE) + if(!door_anim_time) + return + if(!door_obj_alt) door_obj_alt = new + vis_contents |= door_obj_alt + door_obj_alt.icon = icon + door_obj_alt.icon_state = "[icon_door || icon_state]_door_alt" + is_animating_door = TRUE + var/num_steps = door_anim_time / world.tick_lag + for(var/I in 0 to num_steps) + var/angle = door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps)) + var/matrix/M = get_door_transform(angle, TRUE) + var/door_state = angle >= 90 ? "[icon_door_override ? icon_door : icon_state]_back_alt" : "[icon_door || icon_state]_door_alt" + var/door_layer = angle >= 90 ? FLOAT_LAYER : ABOVE_MOB_LAYER + + if(I == 0) + door_obj_alt.transform = M + door_obj_alt.icon_state = door_state + door_obj_alt.layer = door_layer + else if(I == 1) + animate(door_obj_alt, transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag, flags = ANIMATION_END_NOW) + else + animate(transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag) + addtimer(CALLBACK(src,.proc/end_door_animation_alt),door_anim_time,TIMER_UNIQUE|TIMER_OVERRIDE) + +/obj/structure/closet/proc/end_door_animation_alt() + is_animating_door = FALSE // comment this out and the line below to manually tweak the animation end state by fiddling with the door_anim vars to match the open door icon + vis_contents -= door_obj_alt + update_icon() + compile_overlays(src) + +/obj/structure/closet/proc/get_door_transform(angle, var/inverse_hinge = FALSE) + var/matrix/M = matrix() + var/matrix_door_hinge = inverse_hinge ? door_hinge_alt : door_hinge + M.Translate(-matrix_door_hinge, 0) + M.Multiply(matrix(cos(angle), 0, 0, ((matrix_door_hinge >= 0) ? sin(angle) : -sin(angle)) * door_anim_squish, 1, 0)) // this matrix door hinge >= 0 check is for door hinges on the right, so they swing out instead of upwards + M.Translate(matrix_door_hinge, 0) + return M /obj/structure/closet/hear_talk(mob/M as mob, text, verb, datum/language/speaking) for (var/atom/A in src) @@ -429,20 +644,22 @@ if(!damage || !wallbreaker) return user.do_attack_animation(src) - visible_message("[user] [attack_message] the [src]!") + visible_message(SPAN_DANGER("[user] [attack_message] the [src]!")) dump_contents() QDEL_IN(src, 1) return 1 /obj/structure/closet/proc/req_breakout() - - if(opened) - return 0 //Door's open... wait, why are you in it's contents then? - if(welded) - return 1 //closed but not welded... - if(breakout) - return -1 //Already breaking out. - return 0 + if(!opened) //Door's open... wait, why are you in it's contents then? + if(locked) + if(welded) + return 2 + else + return 1 + if(breakout) + return -1 //Already breaking out. + else + return 0 /obj/structure/closet/proc/mob_breakout(var/mob/living/escapee) @@ -458,8 +675,8 @@ //okay, so the closet is either welded or locked... resist!!! escapee.next_move = world.time + 100 escapee.last_special = world.time + 100 - to_chat(escapee, "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)") - visible_message(SPAN_DANGER("\The [src] begins to shake violently!"), SPAN_DANGER("You hear the sound of metal trashing around nearby."), intent_message = THUNK_SOUND) + to_chat(escapee, SPAN_WARNING("You lean on the back of \the [src] and start pushing the door open. (This will take about [breakout_time] minutes.)")) + visible_message(SPAN_DANGER("\The [src] begins to shake violently!"), SPAN_DANGER("You hear the sound of metal thrashing around nearby."), intent_message = THUNK_SOUND) var/time = 6 * breakout_time * 2 @@ -494,16 +711,16 @@ //Well then break it! breakout = 0 - to_chat(escapee, "You successfully break out!") - visible_message("\the [escapee] successfully broke out of \the [src]!") playsound(loc, 'sound/effects/grillehit.ogg', 100, 1) - break_open() + break_open(escapee) shake_animation() qdel(bar) -/obj/structure/closet/proc/break_open() - welded = 0 - update_icon() +/obj/structure/closet/proc/break_open(mob/user) + if(secure && !broken) + to_chat(user, SPAN_WARNING("You successfully break out!")) + welded = FALSE + emag_act(INFINITY, user, SPAN_DANGER("\The [user] successfully breaks out of \the [src]!"), SPAN_DANGER("You hear the sound of metal being forced apart!")) //Do this to prevent contents from being opened into nullspace (read: bluespace) if(istype(loc, /obj/structure/bigDelivery)) var/obj/structure/bigDelivery/BD = loc diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm deleted file mode 100644 index 5d18c39bafa..00000000000 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ /dev/null @@ -1,31 +0,0 @@ -/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" - build_amt = 5 - -/obj/structure/closet/coffin/attackby(obj/item/W as obj, mob/user as mob) - if(opened) - if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet - return 0 - if(!W.dropsafety()) - return - if(W) - user.drop_from_inventory(W,loc) - else - user.drop_item() - else if(istype(W, /obj/item/stack/packageWrap)) - return - else - attack_hand(user) - return - -/obj/structure/closet/coffin/update_icon() - if(!opened) - icon_state = icon_closed - else - icon_state = icon_opened diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm index b2baec0f575..0237f518532 100644 --- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm @@ -2,5 +2,6 @@ name = "critter crate" desc = "A crate which can sustain life for a while." icon_state = "critter" - icon_opened = "critteropen" - icon_closed = "critter" + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + door_anim_time = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/fitness.dm b/code/game/objects/structures/crates_lockers/closets/fitness.dm index e96f1fdd64b..9867936f4c9 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" + icon_door = "mixed" /obj/structure/closet/athletic_mixed/fill() new /obj/item/towel/random(src) @@ -22,8 +21,6 @@ new /obj/item/clothing/shoes/swimmingfins(src) new /obj/item/clothing/shoes/swimmingfins(src) - - /obj/structure/closet/boxinggloves name = "boxing gloves" desc = "It's a storage unit for gloves for use in the boxing ring." @@ -34,7 +31,6 @@ new /obj/item/clothing/gloves/boxing/yellow(src) new /obj/item/clothing/gloves/boxing(src) - /obj/structure/closet/masks name = "mask closet" desc = "IT'S A STORAGE UNIT FOR FIGHTER MASKS OLE!" diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 62ac8b2a956..53be05aa14b 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -1,16 +1,14 @@ /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" + icon_state = "cabinet" + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' storage_capacity = 45 //such a big closet deserves a little more capacity - -/obj/structure/closet/cabinet/update_icon() - if(!opened) - icon_state = icon_closed - else - icon_state = icon_opened + door_anim_angle = 160 + door_anim_squish = 0.22 + door_hinge_alt = 7.5 + double_doors = TRUE /obj/structure/closet/cabinet/attackby(obj/item/W as obj, mob/user as mob) if(opened) @@ -33,25 +31,15 @@ /obj/structure/closet/acloset name = "strange closet" desc = "It looks alien!" - icon_state = "acloset" - icon_closed = "acloset" - icon_opened = "aclosetopen" - + icon_state = "decursed" /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" - 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" /obj/structure/closet/gimmick/russian/fill() new /obj/item/clothing/head/ushanka/grey(src) @@ -63,9 +51,6 @@ /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" /obj/structure/closet/gimmick/tacticool/fill() new /obj/item/clothing/glasses/eyepatch(src) @@ -88,8 +73,6 @@ name = "\improper Thunderdome closet" desc = "Everything you need!" icon_state = "syndicate" - icon_closed = "syndicate" - icon_opened = "syndicateopen" anchored = 1 /obj/structure/closet/thunderdome/tdred @@ -118,8 +101,6 @@ /obj/structure/closet/thunderdome/tdgreen name = "green-team Thunderdome closet" icon_state = "syndicate1" - icon_closed = "syndicate1" - icon_opened = "syndicate1open" /obj/structure/closet/thunderdome/tdgreen/fill() new /obj/item/clothing/suit/armor/tdome/green(src) @@ -142,7 +123,5 @@ new /obj/item/clothing/head/helmet/thunderdome(src) /obj/structure/closet/skrell - icon_state = "skrell" - icon_closed = "skrell" - icon_opened = "skrellopen" - layer = OBJ_LAYER - 0.01 + icon_state = "alien" + layer = BELOW_OBJ_LAYER 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 a7fbb5764ee..4df65220922 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" + icon_door = "black" /obj/structure/closet/gmcloset/fill() new /obj/item/clothing/head/that(src) @@ -39,8 +38,7 @@ /obj/structure/closet/chefcloset name = "chef's closet" desc = "It's a storage unit for foodservice garments." - icon_state = "black" - icon_closed = "black" + icon_door = "black" /obj/structure/closet/chefcloset/fill() new /obj/item/clothing/under/waiter(src) @@ -64,9 +62,7 @@ /obj/structure/closet/jcloset name = "custodial closet" desc = "It's a storage unit for janitorial clothes and gear." - icon_state = "janitorial" - icon_closed = "janitorial" - icon_opened = "janitorialopen" + icon_door = "mixed" /obj/structure/closet/jcloset/fill() new /obj/item/clothing/under/rank/janitor/nt(src) @@ -102,8 +98,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" + icon_door = "blue" /obj/structure/closet/lawcloset/fill() new /obj/item/clothing/under/lawyer/black(src) diff --git a/code/game/objects/structures/crates_lockers/closets/l3closet.dm b/code/game/objects/structures/crates_lockers/closets/l3closet.dm index fc684bfda48..9404a7e739d 100644 --- a/code/game/objects/structures/crates_lockers/closets/l3closet.dm +++ b/code/game/objects/structures/crates_lockers/closets/l3closet.dm @@ -2,24 +2,14 @@ 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" - -/obj/structure/closet/l3closet/general - icon_state = "bio_general" - icon_closed = "bio_general" - icon_opened = "bio_generalopen" /obj/structure/closet/l3closet/general/fill() new /obj/item/clothing/suit/bio_suit/general(src) new /obj/item/clothing/head/bio_hood/general(src) new /obj/item/clothing/mask/gas/half(src) - /obj/structure/closet/l3closet/virology - icon_state = "bio_virology" - icon_closed = "bio_virology" - icon_opened = "bio_virologyopen" + icon_state = "bio_viro" /obj/structure/closet/l3closet/virology/fill() new /obj/item/clothing/suit/bio_suit/virology(src) @@ -29,9 +19,8 @@ /obj/structure/closet/l3closet/security - icon_state = "bio_security" - icon_closed = "bio_security" - icon_opened = "bio_securityopen" + icon_state = "bio_sec" + /obj/structure/closet/l3closet/security/fill() new /obj/item/clothing/suit/bio_suit/security(src) @@ -40,19 +29,14 @@ /obj/structure/closet/l3closet/janitor - icon_state = "bio_janitor" - icon_closed = "bio_janitor" - icon_opened = "bio_janitoropen" + icon_state = "bio_jan" /obj/structure/closet/l3closet/janitor/fill() new /obj/item/clothing/suit/bio_suit/janitor(src) new /obj/item/clothing/head/bio_hood/janitor(src) - /obj/structure/closet/l3closet/scientist icon_state = "bio_scientist" - icon_closed = "bio_scientist" - icon_opened = "bio_scientistopen" /obj/structure/closet/l3closet/scientist/fill() new /obj/item/clothing/suit/bio_suit/scientist(src) diff --git a/code/game/objects/structures/crates_lockers/closets/malfunction.dm b/code/game/objects/structures/crates_lockers/closets/malfunction.dm index 851d7df61f8..b74100ec5e1 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" /obj/structure/closet/malf/suits/fill() new /obj/item/tank/jetpack/void(src) 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 375612e5c51..8968b7bfd96 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -1,16 +1,18 @@ -/obj/structure/closet/secure_closet/bar +/obj/structure/closet/secure_closet/cabinet + icon_state = "cabinet" + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + door_anim_angle = 160 + door_anim_squish = 0.22 + door_hinge_alt = 7.5 + double_doors = TRUE + +/obj/structure/closet/secure_closet/cabinet/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" storage_capacity = 45 //such a big closet deserves a little more capacity - -/obj/structure/closet/secure_closet/bar/fill() +/obj/structure/closet/secure_closet/cabinet/bar/fill() new /obj/item/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/reagent_containers/food/drinks/bottle/small/beer( src ) @@ -21,15 +23,3 @@ new /obj/item/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/reagent_containers/food/drinks/bottle/small/beer( src ) new /obj/item/reagent_containers/food/drinks/bottle/small/beer( src ) - -/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 9e2e554850c..f5a0e87700b 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/hangartech name = "hangar 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" + icon_state = "cargo" /obj/structure/closet/secure_closet/hangartech/fill() ..() @@ -24,12 +19,7 @@ /obj/structure/closet/secure_closet/operation_manager name = "operation manager'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" + icon_state = "qm" /obj/structure/closet/secure_closet/operation_manager/fill() new /obj/item/clothing/under/rank/operations_manager(src) 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 04e7c96a1d0..cab3aadd4ec 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" req_access = list(access_ce) - icon_state = "securece1" - icon_closed = "securece" - icon_locked = "securece1" - icon_opened = "secureceopen" - icon_broken = "securecebroken" - icon_off = "secureceoff" + icon_state = "ce" /obj/structure/closet/secure_closet/engineering_chief/fill() if(prob(50)) @@ -39,12 +34,7 @@ /obj/structure/closet/secure_closet/engineering_chief2 name = "chief engineer's attire" req_access = list(access_ce) - icon_state = "securece1" - icon_closed = "securece" - icon_locked = "securece1" - icon_opened = "secureceopen" - icon_broken = "securecebroken" - icon_off = "secureceoff" + icon_state = "ce" /obj/structure/closet/secure_closet/engineering_chief2/fill() new /obj/item/storage/backpack/industrial(src) @@ -60,12 +50,8 @@ /obj/structure/closet/secure_closet/engineering_electrical name = "electrical supplies" req_access = list(access_engine_equip) - icon_state = "secureengelec1" - icon_closed = "secureengelec" - icon_locked = "secureengelec1" - icon_opened = "toolclosetopen" - icon_broken = "secureengelecbroken" - icon_off = "secureengelecoff" + icon_state = "eng" + icon_door = "eng_elec" /obj/structure/closet/secure_closet/engineering_electrical/fill() new /obj/item/clothing/gloves/yellow(src) @@ -85,12 +71,8 @@ /obj/structure/closet/secure_closet/engineering_welding name = "welding supplies" req_access = list(access_construction) - icon_state = "secureengweld1" - icon_closed = "secureengweld" - icon_locked = "secureengweld1" - icon_opened = "toolclosetopen" - icon_broken = "secureengweldbroken" - icon_off = "secureengweldoff" + icon_state = "eng" + icon_door = "eng_weld" /obj/structure/closet/secure_closet/engineering_welding/fill() new /obj/item/clothing/head/welding(src) @@ -106,12 +88,7 @@ /obj/structure/closet/secure_closet/engineering_personal name = "engineer's locker" req_access = list(access_engine_equip) - icon_state = "secureeng1" - icon_closed = "secureeng" - icon_locked = "secureeng1" - icon_opened = "secureengopen" - icon_broken = "secureengbroken" - icon_off = "secureengoff" + icon_state = "eng_secure" /obj/structure/closet/secure_closet/engineering_personal/fill() if(prob(50)) @@ -131,12 +108,7 @@ /obj/structure/closet/secure_closet/atmos_personal name = "atmospheric technician's locker" req_access = list(access_atmospherics) - icon_state = "secureatm1" - icon_closed = "secureatm" - icon_locked = "secureatm1" - icon_opened = "secureatmopen" - icon_broken = "secureatmbroken" - icon_off = "secureatmoff" + icon_state = "atmos" /obj/structure/closet/secure_closet/atmos_personal/fill() if(prob(50)) 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 badd4a8c58d..0883f8af9cc 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -1,16 +1,7 @@ /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 + icon_state = "freezer" + door_anim_squish = 0.22 + door_anim_angle = 123 /obj/structure/closet/secure_closet/freezer/kitchen name = "kitchen cabinet" @@ -27,12 +18,6 @@ /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" /obj/structure/closet/secure_closet/freezer/meat/fill() ..() @@ -55,12 +40,6 @@ /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" /obj/structure/closet/secure_closet/freezer/fridge/fill() ..() @@ -74,12 +53,7 @@ /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" + desc = "This contains cold hard cash." req_access = list(access_heads_vault) /obj/structure/closet/secure_closet/freezer/money/fill() 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 a29585136b4..9973ad8ebbe 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -3,14 +3,13 @@ req_access = list(access_armory) icon = 'icons/obj/guncabinet.dmi' icon_state = "base" - icon_off ="base" - icon_broken ="base" - icon_locked ="base" - icon_closed ="base" - icon_opened = "base" - anchored = 1 - canbemoved = 1 + anchored = TRUE + canbemoved = TRUE + door_underlay = TRUE + door_anim_squish = 0.12 + door_anim_angle = 119 + door_hinge = -9.5 /obj/structure/closet/secure_closet/guncabinet/Initialize() ..() @@ -26,32 +25,24 @@ /obj/structure/closet/secure_closet/guncabinet/update_icon() cut_overlays() - if(opened) - add_overlay("door_open") - else - var/lazors = 0 - var/shottas = 0 - for (var/obj/item/gun/G in contents) - if (istype(G, /obj/item/gun/energy)) - lazors++ - if (istype(G, /obj/item/gun/projectile/)) - shottas++ - if (lazors || shottas) - for (var/i = 0 to 2) - if (lazors > 0 && (shottas <= 0 || prob(50))) - lazors-- - add_overlay("laser[i]") - else if (shottas > 0) - shottas-- - add_overlay("projectile[i]") + var/lazors = 0 + var/shottas = 0 + for (var/obj/item/gun/G in contents) + if (istype(G, /obj/item/gun/energy)) + lazors++ + if (istype(G, /obj/item/gun/projectile/)) + shottas++ + if (lazors || shottas) + for (var/i = 0 to 2) + if (lazors > 0 && (shottas <= 0 || prob(50))) + lazors-- + add_overlay("laser[i]") + else if (shottas > 0) + shottas-- + add_overlay("projectile[i]") + . = ..() - add_overlay("door") - if(welded) - add_overlay(welded_overlay_state) - - if(broken) - add_overlay("broken") - else if (locked) - add_overlay("locked") - else - add_overlay("open") +/obj/structure/closet/secure_closet/guncabinet/sci + name = "science gun cabinet" + req_access = list(access_tox_storage) + icon_state = "sci" 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 7a120cbd810..56d7e85fa19 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" + icon_state = "hydro" /obj/structure/closet/secure_closet/hydroponics/fill() ..() @@ -29,12 +24,7 @@ /obj/structure/closet/secure_closet/xenobotany name = "xenobotanist's locker" req_access = list(access_xenobiology) - icon_state = "xenobotsecure1" - icon_closed = "xenobotsecure" - icon_locked = "xenobotsecure1" - icon_opened = "xenobotsecureopen" - icon_broken = "xenobotsecurebroken" - icon_off = "xenobotsecureoff" + icon_state = "xenobot" /obj/structure/closet/secure_closet/xenobotany/fill() ..() 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 f5843af46b8..15f02dffe9e 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,7 @@ /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" - welded_overlay_state = "welded_wallcloset" + icon_state = "med" req_access = list(access_medical_equip) /obj/structure/closet/secure_closet/medical1/fill() @@ -25,12 +19,7 @@ /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" + icon_state = "med" req_access = list(access_surgery) /obj/structure/closet/secure_closet/medical2/fill() @@ -44,12 +33,7 @@ /obj/structure/closet/secure_closet/medical3 name = "medical equipment 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" + icon_state = "med" /obj/structure/closet/secure_closet/medical3/fill() if(prob(50)) @@ -92,12 +76,7 @@ name = "first responder's locker" desc = "An immobile, card-locked storage unit containing all the necessary equipment for a first responder." req_access = list(access_first_responder) - icon_state = "securemed1" - icon_closed = "securemed" - icon_locked = "securemed1" - icon_opened = "securemedopen" - icon_broken = "securemedbroken" - icon_off = "securemedoff" + icon_state = "med" /obj/structure/closet/secure_closet/medical_fr/fill() ..() @@ -130,12 +109,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" + icon_state = "cmo" /obj/structure/closet/secure_closet/CMO/fill() if(prob(50)) @@ -162,12 +136,7 @@ /obj/structure/closet/secure_closet/CMO2 name = "chief medical officer's attire" req_access = list(access_cmo) - icon_state = "cmosecure1" - icon_closed = "cmosecure" - icon_locked = "cmosecure1" - icon_opened = "cmosecureopen" - icon_broken = "cmosecurebroken" - icon_off = "cmosecureoff" + icon_state = "cmo" /obj/structure/closet/secure_closet/CMO2/fill() new /obj/item/storage/backpack/medic(src) @@ -201,12 +170,8 @@ /obj/structure/closet/secure_closet/chemical name = "chemistry equipment closet" desc = "Contains equipment useful to chemists." - icon_state = "medical1" - icon_closed = "medical" - icon_locked = "medical1" - icon_opened = "medicalopen" - icon_broken = "medicalbroken" - icon_off = "medicaloff" + icon_state = "med" + icon_door = "chemical" req_access = list(access_pharmacy) /obj/structure/closet/secure_closet/chemical/fill() @@ -223,18 +188,3 @@ new /obj/item/storage/box/beakers(src) new /obj/item/storage/bag/chemistry(src) new /obj/item/storage/bag/chemistry(src) - -/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" - store_mobs = FALSE - anchored = 1 - density = 0 - wall_mounted = 1 - req_access = list(access_medical_equip) 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 dd0d34d2f2a..15e25858bb9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -24,24 +24,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" - -/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 + icon_state = "cabinet" + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + door_anim_angle = 160 + door_anim_squish = 0.22 + door_hinge_alt = 7.5 + double_doors = TRUE /obj/structure/closet/secure_closet/personal/cabinet/fill() new /obj/item/storage/backpack/satchel/withwallet(src) @@ -69,8 +58,7 @@ if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) //they can open all lockers, or nobody owns this, or they own this locker locked = !( locked ) - if(locked) icon_state = icon_locked - else icon_state = icon_closed + update_icon() if(!registered_name) registered_name = I.registered_name @@ -92,7 +80,7 @@ broken = 1 locked = 0 desc = "It appears to be broken." - icon_state = icon_broken + update_icon() if(visual_feedback) visible_message("[visual_feedback]", "[audible_feedback]") return 1 @@ -114,7 +102,7 @@ if(!close()) return locked = 1 - icon_state = icon_locked + update_icon() registered_name = null 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 be59aa853da..6763a8a1a9b 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" req_access = list(access_tox_storage) - icon_state = "secureres1" - icon_closed = "secureres" - icon_locked = "secureres1" - icon_opened = "secureresopen" - icon_broken = "secureresbroken" - icon_off = "secureresoff" + icon_state = "science" /obj/structure/closet/secure_closet/scientist/fill() new /obj/item/clothing/under/rank/scientist(src) @@ -21,12 +16,7 @@ /obj/structure/closet/secure_closet/RD name = "research director's locker" req_access = list(access_rd) - icon_state = "rdsecure1" - icon_closed = "rdsecure" - icon_locked = "rdsecure1" - icon_opened = "rdsecureopen" - icon_broken = "rdsecurebroken" - icon_off = "rdsecureoff" + icon_state = "rd" /obj/structure/closet/secure_closet/RD/fill() new /obj/item/clothing/suit/bio_suit/scientist(src) @@ -50,12 +40,7 @@ /obj/structure/closet/secure_closet/RD2 name = "research director's attire" req_access = list(access_rd) - icon_state = "rdsecure1" - icon_closed = "rdsecure" - icon_locked = "rdsecure1" - icon_opened = "rdsecureopen" - icon_broken = "rdsecurebroken" - icon_off = "rdsecureoff" + icon_state = "rd" /obj/structure/closet/secure_closet/RD2/fill() new /obj/item/clothing/under/rank/research_director(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/sciguncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/sciguncabinet.dm deleted file mode 100644 index aa776dd75f7..00000000000 --- a/code/game/objects/structures/crates_lockers/closets/secure/sciguncabinet.dm +++ /dev/null @@ -1,57 +0,0 @@ -/obj/structure/closet/secure_closet/sciguncabinet - name = "science gun cabinet" - req_access = list(access_tox_storage) - icon = 'icons/obj/sciguncabinet.dmi' - icon_state = "base" - icon_off ="base" - icon_broken ="base" - icon_locked ="base" - icon_closed ="base" - icon_opened = "base" - anchored = 1 - canbemoved = 1 - - -/obj/structure/closet/secure_closet/sciguncabinet/Initialize() - ..() - return INITIALIZE_HINT_LATELOAD - -/obj/structure/closet/secure_closet/sciguncabinet/LateInitialize() - ..() - update_icon() - -/obj/structure/closet/secure_closet/sciguncabinet/toggle() - ..() - update_icon() - -/obj/structure/closet/secure_closet/sciguncabinet/update_icon() - cut_overlays() - if(opened) - add_overlay("door_open") - else - var/lazors = 0 - var/shottas = 0 - for (var/obj/item/gun/G in contents) - if (istype(G, /obj/item/gun/energy)) - lazors++ - if (istype(G, /obj/item/gun/projectile/)) - shottas++ - if (lazors || shottas) - for (var/i = 0 to 2) - if (lazors > 0 && (shottas <= 0 || prob(50))) - lazors-- - add_overlay("laser[i]") - else if (shottas > 0) - shottas-- - add_overlay("projectile[i]") - - add_overlay("door") - if(welded) - add_overlay(welded_overlay_state) - - if(broken) - add_overlay("broken") - else if (locked) - add_overlay("locked") - else - add_overlay("open") 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 653e2ffdeca..d9723e20832 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 @@ -2,38 +2,16 @@ name = "secure locker" desc = "It's an immobile card-locked storage unit." icon = 'icons/obj/closet.dmi' - icon_state = "secure1" - density = 1 - opened = 0 - anchored = 0 - 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" - var/canbemoved = 0 // if it can be moved by people using the right tools - var/screwed = 1 // if its screwed in place - var/wrenched = 1 // if its wrenched down - wall_mounted = 0 //never solid (You can always pass over it) + icon_state = "secure" + secure = TRUE + opened = FALSE + anchored = FALSE + locked = TRUE health = 200 -/obj/structure/closet/secure_closet/can_open() - if(locked) - return 0 - return ..() - -/obj/structure/closet/secure_closet/close() - if(..()) - if(broken) - icon_state = icon_off - return 1 - else - return 0 - -/obj/structure/closet/secure_closet/emp_act(severity) +/obj/structure/closet/emp_act(severity) + if(!secure) + return for(var/obj/O in src) O.emp_act(severity) if(!broken) @@ -48,237 +26,64 @@ req_access += pick(get_all_station_access()) ..() -/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob) - if(opened) - to_chat(user, "Close the locker first.") - return - 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(allowed(user)) - locked = !locked - for(var/mob/O in viewers(user, 3)) - if((O.client && !( O.blinded ))) - to_chat(O, "The locker has been [locked ? null : "un"]locked by [user].") - update_icon() - else - to_chat(user, "Access Denied") - -/obj/structure/closet/secure_closet/AltClick(mob/user) - . = ..() - +/obj/structure/closet/proc/togglelock(mob/user as mob, silent) if(use_check_and_message(user)) return + if(secure) + if(opened) + to_chat(user, SPAN_NOTICE("Close \the [src] first.")) + return + if(broken) + to_chat(user, SPAN_WARNING("\The [src] is broken!")) + return + if(user.loc == src) + to_chat(user, SPAN_NOTICE("You can't reach the lock from inside.")) + return + if(allowed(user)) + if(iscarbon(user)) + add_fingerprint(user) + locked = !locked + user.visible_message(SPAN_NOTICE("[user] [locked ? null : "un"]locks \the [src]."), + SPAN_NOTICE("You [locked ? null : "un"]lock \the [src].")) + update_icon() + else if(!silent) + to_chat(user, SPAN_NOTICE("Access Denied.")) +/obj/structure/closet/AltClick(mob/user) + . = ..() togglelock(user) -/obj/structure/closet/secure_closet/proc/CanChainsaw(var/obj/item/material/twohanded/chainsaw/ChainSawVar) +/obj/structure/closet/proc/CanChainsaw(var/obj/item/material/twohanded/chainsaw/ChainSawVar) // Wow, this is like, a real-life fossil. return (ChainSawVar.powered && !opened && !broken) -/obj/structure/closet/secure_closet/attackby(obj/item/W as obj, mob/user as mob) - if(opened) - if(istype(W, /obj/item/grab)) - var/obj/item/grab/G = W - 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(W.iswelder()) - var/obj/item/weldingtool/WT = W - if(WT.isOn()) - user.visible_message( - "[user] begins cutting [src] apart.", - "You begin cutting [src] apart.", - "You hear a welding torch on metal." - ) - playsound(loc, 'sound/items/welder_pry.ogg', 50, 1) - if (!do_after(user, 2/W.toolspeed SECONDS, act_target = src, extra_checks = CALLBACK(src, .proc/is_open))) - return - if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") - return - else - new /obj/item/stack/material/steel(loc) - user.visible_message( - "[src] has been cut apart by [user] with [WT].", - "You cut apart [src] with [WT]." - ) - qdel(src) - return - else if(isrobot(user)) - return - else if(W.loc != user) // This should stop mounted modules ending up outside the module. - return - if(W) - user.drop_from_inventory(W,loc) - else - user.drop_item() - else if(W.isscrewdriver() && canbemoved) - if(screwed) - to_chat(user, "You start to unscrew the locker from the floor...") - playsound(loc, W.usesound, 50, 1) - if (do_after(user, 10/W.toolspeed SECONDS, act_target = src)) - to_chat(user, "You unscrew the locker!") - playsound(loc, W.usesound, 50, 1) - screwed = 0 - else if(!screwed && wrenched) - to_chat(user, "You start to screw the locker to the floor...") - playsound(src, 'sound/items/welder.ogg', 80, 1) - if (do_after(user, 15/W.toolspeed SECONDS, act_target = src)) - to_chat(user, "You screw the locker!") - playsound(loc, W.usesound, 50, 1) - screwed = 1 - else if(W.iswrench() && canbemoved) - if(wrenched && !screwed) - to_chat(user, "You start to unfasten the bolts holding the locker in place...") - playsound(loc, W.usesound, 50, 1) - if (do_after(user, 15/W.toolspeed SECONDS, act_target = src)) - to_chat(user, "You unfasten the locker's bolts!") - playsound(loc, W.usesound, 50, 1) - wrenched = 0 - anchored = 0 - else if(!wrenched) - to_chat(user, "You start to fasten the bolts holding the locker in place...") - playsound(loc, W.usesound, 50, 1) - if (do_after(user, 15/W.toolspeed SECONDS, act_target = src)) - to_chat(user, "You fasten the locker's bolts!") - playsound(loc, W.usesound, 50, 1) - wrenched = 1 - anchored = 1 - else if(istype(W, /obj/item/device/hand_labeler)) - var/obj/item/device/hand_labeler/HL = W - if (HL.mode == 1) - return - else - togglelock(user) - else if(!opened) - if(!broken && istype(W,/obj/item/material/twohanded/chainsaw)) - var/obj/item/material/twohanded/chainsaw/ChainSawVar = W - ChainSawVar.cutting = 1 - user.visible_message(\ - "[user.name] starts cutting the [src] with the [W]!",\ - "You start cutting the [src]...",\ - "You hear a loud buzzing sound and metal grinding on metal..."\ - ) - if(do_after(user, ChainSawVar.opendelay SECONDS, act_target = user, extra_checks = CALLBACK(src, .proc/CanChainsaw, W))) - user.visible_message(\ - "[user.name] finishes cutting open the [src] with the [W].",\ - "You finish cutting open the [src].",\ - "You hear a metal clank and some sparks."\ - ) - emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.") - spark(src, 5) - ChainSawVar.cutting = 0 - else if(istype(W, /obj/item/melee/energy/blade))//Attempt to cut open locker if locked - if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying.")) - spark(src, 5) - playsound(loc, 'sound/weapons/blade.ogg', 50, 1) - playsound(loc, /decl/sound_category/spark_sound, 50, 1) - else if(W.iswelder()) - var/obj/item/weldingtool/WT = W - if(WT.isOn()) - user.visible_message( - "[user] begins welding [src] [welded ? "open" : "shut"].", - "You begin welding [src] [welded ? "open" : "shut"].", - "You hear a welding torch on metal." - ) - playsound(loc, 'sound/items/welder_pry.ogg', 50, 1) - if (!do_after(user, 2 SECONDS, act_target = src, extra_checks = CALLBACK(src, .proc/is_closed))) - return - if(!WT.remove_fuel(0,user)) - to_chat(user, "You need more welding fuel to complete this task.") - return - welded = !welded - update_icon() - user.visible_message( - "[src] has been [welded ? "welded shut" : "unwelded"] by [user].", - "You weld [src] [!welded ? "open" : "shut"]." - ) - else - togglelock(user) - else if(istype(W, /obj/item/ducttape)) - return - else - togglelock(user)//Attempt to lock locker if closed - -/obj/structure/closet/secure_closet/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") +/obj/structure/closet/emag_act(var/remaining_charges, var/mob/user, var/emag_source, var/visual_feedback = "", var/audible_feedback = "") if(!broken) - broken = 1 - locked = 0 - desc = "It appears to be broken." - icon_state = icon_off - flick(icon_broken, src) + spark(src, 5) + desc += " It appears to be broken." + add_overlay("[icon_door_overlay]sparking") + CUT_OVERLAY_IN("[icon_door_overlay]sparking", 6) + playsound(loc, /decl/sound_category/spark_sound, 60, 1) + broken = TRUE + locked = FALSE + update_icon() if(visual_feedback) visible_message(visual_feedback, audible_feedback) else if(user && emag_source) - visible_message("\The [src] has been broken by \the [user] with \an [emag_source]!", "You hear a faint electrical spark.") + visible_message(SPAN_WARNING("\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.") + visible_message(SPAN_WARNING("\The [src] sparks and breaks open!"), "You hear a faint electrical spark.") return 1 -/obj/structure/closet/secure_closet/attack_hand(mob/user as mob) - add_fingerprint(user) - if(locked) - togglelock(user) - else - toggle(user) - -/obj/structure/closet/secure_closet/verb/verb_togglelock() +/obj/structure/closet/proc/verb_togglelock() set src in oview(1) // One square distance set category = "Object" set name = "Toggle Lock" - if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain - return - if(ishuman(usr)) add_fingerprint(usr) togglelock(usr) else if(istype(usr, /mob/living/silicon/robot) && Adjacent(usr)) togglelock(usr) else - to_chat(usr, "This mob type can't use this verb.") - -/obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in update_icon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot) - cut_overlays() - if(!opened) - if(locked) - icon_state = icon_locked - else - icon_state = icon_closed - if(welded) - add_overlay(welded_overlay_state) - else - icon_state = icon_opened - - -/obj/structure/closet/secure_closet/req_breakout() - if(!opened && locked) - if (welded) - return 2 - else - return 1 - else - return ..() //It's a secure closet, but isn't locked. - -/obj/structure/closet/secure_closet/break_open() - desc += " It appears to be broken." - icon_state = icon_off - spawn() - flick(icon_broken, src) - sleep(10) - flick(icon_broken, src) - sleep(10) - broken = 1 - welded = 0 - locked = 0 - update_icon() - //Do this to prevent contents from being opened into nullspace (read: bluespace) - if(istype(loc, /obj/structure/bigDelivery)) - var/obj/structure/bigDelivery/BD = loc - BD.unwrap() - open() + to_chat(usr, SPAN_WARNING("This mob type can't use this verb.")) 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 01b7ee52ec8..df61c833756 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 = "captain's locker" req_access = list(access_captain) - icon_state = "capsecure1" - icon_closed = "capsecure" - icon_locked = "capsecure1" - icon_opened = "capsecureopen" - icon_broken = "capsecurebroken" - icon_off = "capsecureoff" + icon_state = "cap" /obj/structure/closet/secure_closet/captains/fill() // Backpack @@ -33,12 +28,7 @@ /obj/structure/closet/secure_closet/captains2 name = "captain's attire" req_access = list(access_captain) - icon_state = "capsecure1" - icon_closed = "capsecure" - icon_locked = "capsecure1" - icon_opened = "capsecureopen" - icon_broken = "capsecurebroken" - icon_off = "capsecureoff" + icon_state = "cap" /obj/structure/closet/secure_closet/captains2/fill() new /obj/item/storage/backpack/captain(src) @@ -58,12 +48,8 @@ /obj/structure/closet/secure_closet/xo name = "executive officer's locker" req_access = list(access_hop) - icon_state = "hopsecure1" - icon_closed = "hopsecure" - icon_locked = "hopsecure1" - icon_opened = "hopsecureopen" - icon_broken = "hopsecurebroken" - icon_off = "hopsecureoff" + icon_state = "sec" + icon_door = "hop" /obj/structure/closet/secure_closet/xo/fill() ..() @@ -89,12 +75,8 @@ /obj/structure/closet/secure_closet/xo2 name = "executive officer's attire" req_access = list(access_hop) - icon_state = "hopsecure1" - icon_closed = "hopsecure" - icon_locked = "hopsecure1" - icon_opened = "hopsecureopen" - icon_broken = "hopsecurebroken" - icon_off = "hopsecureoff" + icon_state = "sec" + icon_door = "hop" /obj/structure/closet/secure_closet/xo2/fill() ..() @@ -109,12 +91,7 @@ /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" + icon_state = "hos" /obj/structure/closet/secure_closet/hos/fill() ..() @@ -158,12 +135,7 @@ /obj/structure/closet/secure_closet/hos2 name = "head of security's attire" req_access = list(access_hos) - icon_state = "hossecure1" - icon_closed = "hossecure" - icon_locked = "hossecure1" - icon_opened = "hossecureopen" - icon_broken = "hossecurebroken" - icon_off = "hossecureoff" + icon_state = "hos" /obj/structure/closet/secure_closet/hos2/fill() //Appearance @@ -189,12 +161,7 @@ /obj/structure/closet/secure_closet/warden name = "warden's locker" req_access = list(access_armory) - icon_state = "wardensecure1" - icon_closed = "wardensecure" - icon_locked = "wardensecure1" - icon_opened = "wardensecureopen" - icon_broken = "wardensecurebroken" - icon_off = "wardensecureoff" + icon_state = "warden" /obj/structure/closet/secure_closet/warden/fill() //Supply @@ -234,12 +201,8 @@ /obj/structure/closet/secure_closet/security_cadet name = "security cadet's locker" req_access = list(access_security) - icon_state = "seccadet1" - icon_closed = "seccadet" - icon_locked = "seccadet1" - icon_opened = "seccadetopen" - icon_broken = "seccadetbroken" - icon_off = "seccadetoff" + icon_state = "sec" + icon_door = "seccadet" /obj/structure/closet/secure_closet/security_cadet/fill() //Appearance @@ -267,12 +230,7 @@ /obj/structure/closet/secure_closet/security name = "security officer's locker" req_access = list(access_brig) - icon_state = "sec1" - icon_closed = "sec" - icon_locked = "sec1" - icon_opened = "secopen" - icon_broken = "secbroken" - icon_off = "secoff" + icon_state = "sec" /obj/structure/closet/secure_closet/security/fill() //Appearance @@ -307,12 +265,7 @@ /obj/structure/closet/secure_closet/investigator name = "investigator's locker" req_access = list(access_forensics_lockers) - icon_state = "sec1" - icon_closed = "sec" - icon_locked = "sec1" - icon_opened = "secopen" - icon_broken = "secbroken" - icon_off = "secoff" + icon_state = "sec" /obj/structure/closet/secure_closet/investigator/fill() //Appearance @@ -387,42 +340,11 @@ new /obj/item/pen (src) new /obj/item/storage/briefcase(src) -/obj/structure/closet/secure_closet/wall - name = "wall locker" - req_access = list(access_security) - icon = 'icons/obj/walllocker.dmi' - icon_state = "wall-locker1" - density = 1 - icon_closed = "wall-locker" - icon_locked = "wall-locker1" - icon_opened = "wall-lockeropen" - icon_broken = "wall-lockerbroken" - icon_off = "wall-lockeroff" - - //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 - /obj/structure/closet/secure_closet/bridge_crew name = "bridge crew's locker" req_access = list(access_bridge_crew) - icon_state = "hopsecure1" - icon_closed = "hopsecure" - icon_locked = "hopsecure1" - icon_opened = "hopsecureopen" - icon_broken = "hopsecurebroken" - icon_off = "hopsecureoff" + icon_state = "sec" + icon_door = "hop" /obj/structure/closet/secure_closet/bridge_crew/fill() ..() @@ -436,12 +358,8 @@ /obj/structure/closet/secure_closet/pilot name = "pilot's locker" req_access = list(access_bridge_crew) - icon_state = "hopsecure1" - icon_closed = "hopsecure" - icon_locked = "hopsecure1" - icon_opened = "hopsecureopen" - icon_broken = "hopsecurebroken" - icon_off = "hopsecureoff" + icon_state = "sec" + icon_door = "hop" /obj/structure/closet/secure_closet/pilot/fill() ..() @@ -451,4 +369,4 @@ new /obj/item/device/radio/headset/headset_com/alt(src) new /obj/item/clothing/head/helmet/pilot(src) new /obj/item/device/radio/off(src) - new /obj/item/device/gps(src) \ No newline at end of file + new /obj/item/device/gps(src) diff --git a/code/game/objects/structures/crates_lockers/closets/sol_gear.dm b/code/game/objects/structures/crates_lockers/closets/sol_gear.dm index 6924e411b00..c8019d3e1a1 100644 --- a/code/game/objects/structures/crates_lockers/closets/sol_gear.dm +++ b/code/game/objects/structures/crates_lockers/closets/sol_gear.dm @@ -3,8 +3,6 @@ name = "sol navy uniform closet" desc = "It's a storage unit for Sol Alliance navy uniforms." icon_state = "syndicate1" - icon_closed = "syndicate1" - icon_opened = "syndicate1open" /obj/structure/closet/sol/navy/fill() ..() @@ -81,12 +79,7 @@ /obj/structure/closet/secure_closet/soll_officer name = "sol alliance officer locker" req_access = list(access_captain) - icon_state = "capsecure1" - icon_closed = "capsecure" - icon_locked = "capsecure1" - icon_opened = "capsecureopen" - icon_broken = "capsecurebroken" - icon_off = "capsecureoff" + icon_state = "cap" /obj/structure/closet/secure_closet/soll_officer/fill() ..() diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 1304d04e5d4..4b67bd10b62 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -2,9 +2,6 @@ name = "armory closet" desc = "Why is this here?" icon_state = "syndicate" - icon_closed = "syndicate" - icon_opened = "syndicateopen" - /obj/structure/closet/syndicate/personal desc = "It's a storage unit for operative gear." @@ -22,7 +19,6 @@ new /obj/item/shield/energy(src) new /obj/item/clothing/shoes/magboots(src) - /obj/structure/closet/syndicate/suit desc = "It's a storage unit for voidsuits." @@ -35,7 +31,6 @@ new /obj/item/airbubble/syndie(src) new /obj/item/airbubble/syndie(src) - /obj/structure/closet/syndicate/nuclear desc = "It's a storage unit for nuclear-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 4bb2301cc6f..56cb0405575 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -16,8 +16,6 @@ name = "emergency closet" desc = "It's a storage unit for emergency breathmasks and o2 tanks." icon_state = "emergency" - icon_closed = "emergency" - icon_opened = "emergencyopen" /obj/structure/closet/emcloset/fill() switch (pickweight(list("small" = 50, "aid" = 20, "tank" = 10, "seal" = 10, "all" = 10))) @@ -79,15 +77,29 @@ new /obj/item/tank/oxygen(src) new /obj/item/clothing/mask/gas(src) +/obj/structure/closet/emcloset/offworlder + name = "offworlder supplies" + desc = "It's a storage unit for offworlder breathing apparatus." + +/obj/structure/closet/emcloset/offworlder/fill() + new /obj/item/rig/light/offworlder + new /obj/item/rig/light/offworlder + new /obj/item/rig/light/offworlder + new /obj/item/clothing/accessory/offworlder/bracer + new /obj/item/clothing/accessory/offworlder/bracer + new /obj/item/clothing/accessory/offworlder/bracer + new /obj/item/storage/pill_bottle/rmt + new /obj/item/storage/pill_bottle/rmt + new /obj/item/storage/pill_bottle/rmt + new /obj/item/clothing/mask/offworlder + /* * Fire Closet */ /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" + icon_state = "fire" /obj/structure/closet/firecloset/fill() new /obj/item/clothing/head/hardhat/firefighter(src) @@ -113,9 +125,8 @@ /obj/structure/closet/toolcloset name = "tool closet" desc = "It's a storage unit for tools." - icon_state = "toolcloset" - icon_closed = "toolcloset" - icon_opened = "toolclosetopen" + icon_state = "eng" + icon_door = "eng_tool" /obj/structure/closet/toolcloset/fill() if(prob(40)) @@ -151,6 +162,8 @@ if(prob(40)) new /obj/item/clothing/head/hardhat(src) +/obj/structure/closet/toolcloset/empty/fill() + /* * Radiation Closet @@ -158,9 +171,8 @@ /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" + icon_state = "eng" + icon_door = "eng_rad" /obj/structure/closet/radiation/fill() for(var/i = 1 to 2) @@ -176,9 +188,7 @@ /obj/structure/closet/bombcloset name = "\improper EOD closet" desc = "It's a storage unit for explosive-defusal equipment." - icon_state = "bombsuit" - icon_closed = "bombsuit" - icon_opened = "bombsuitopen" + icon_state = "bomb" /obj/structure/closet/bombcloset/fill() new /obj/item/clothing/suit/bomb_suit(src) @@ -187,12 +197,10 @@ new /obj/item/clothing/head/bomb_hood(src) new /obj/item/wirecutters/bomb(src) -/obj/structure/closet/bombclosetsecurity +/obj/structure/closet/bombclosetsecurity // Why the hell is this different? And this is like, only used ONCE! Madness, I tell you. name = "\improper EOD closet" desc = "It's a storage unit for the security department's explosive-defusal equipment." - icon_state = "bombsuitsec" - icon_closed = "bombsuitsec" - icon_opened = "bombsuitsecopen" + icon_state = "bombsec" /obj/structure/closet/bombclosetsecurity/fill() new /obj/item/clothing/suit/bomb_suit/security(src) @@ -200,42 +208,3 @@ new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/head/bomb_hood/security(src) new /obj/item/wirecutters/bomb(src) - -/* - * Hydrant - */ -/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" - welded_overlay_state = "welded_wallcloset" - anchored = 1 - density = 0 - wall_mounted = 1 - -/obj/structure/closet/hydrant/fill() - new /obj/item/clothing/head/hardhat/firefighter(src) - new /obj/item/clothing/suit/fire(src) - new /obj/item/clothing/mask/gas(src) - new /obj/item/device/flashlight(src) - new /obj/item/tank/oxygen/red(src) - new /obj/item/extinguisher(src) - - if (prob(25)) - new /obj/item/ladder_mobile(src) - -/* - * First Aid - */ -/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" - welded_overlay_state = "welded_wallcloset" - anchored = 1 - density = 0 - wall_mounted = 1 diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm index a90f758663d..7dcd2ced3bb 100644 --- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm +++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm @@ -2,22 +2,25 @@ //not sure if there's an immediate place for secure wall lockers, but i'm sure the players will think of something /obj/structure/closet/walllocker + name = "wall locker" desc = "A wall mounted storage locker." - name = "Wall Locker" icon = 'icons/obj/walllocker.dmi' - icon_state = "wall-locker" + icon_state = "walllocker" //...man, how OLD is this $#!? + door_anim_angle = 108 + door_anim_squish = 0.26 + door_hinge = 9.5 + door_anim_time = 2.7 + store_mobs = FALSE density = FALSE anchored = TRUE - store_mobs = FALSE - icon_closed = "wall-locker" - icon_opened = "wall-lockeropen" + wall_mounted = TRUE /obj/structure/closet/walllocker/emerglocker name = "emergency locker" desc = "A wall mounted locker with emergency supplies." icon_state = "emerg" - icon_closed = "emerg" - icon_opened = "emerg-open" + store_mobs = FALSE + door_anim_time = 0 /obj/structure/closet/walllocker/emerglocker/fill() for(var/i = 1 to 3) @@ -41,3 +44,31 @@ /obj/structure/closet/walllocker/emerglocker/east pixel_x = 32 dir = EAST + +/obj/structure/closet/walllocker/firecloset //wall mounted fire closet + name = "fire-safety closet" + desc = "It's a storage unit for fire-fighting supplies." + icon_state = "hydrant" + +/obj/structure/closet/walllocker/firecloset/fill() + new /obj/item/clothing/head/hardhat/firefighter(src) + new /obj/item/clothing/suit/fire(src) + new /obj/item/clothing/mask/gas(src) + new /obj/item/device/flashlight(src) + new /obj/item/tank/oxygen/red(src) + new /obj/item/extinguisher(src) + + if (prob(25)) + new /obj/item/ladder_mobile(src) + +/obj/structure/closet/walllocker/medical //wall mounted medical closet + name = "first-aid closet" + desc = "It's wall-mounted storage unit for first aid supplies." + icon_state = "medical_wall" + +/obj/structure/closet/walllocker/medical/secure + desc = "It's a secure wall-mounted storage unit for first aid supplies." + icon_door = "medical_wall_secure" + icon_door_override = TRUE + secure = TRUE + req_access = list(access_medical_equip) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index f2c0e1f7149..d1970d487d0 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" + icon_door = "blue" /obj/structure/closet/wardrobe/red name = "security wardrobe" - icon_state = "blue" - icon_closed = "blue" + icon_door = "blue" /obj/structure/closet/wardrobe/red/fill() ..() @@ -43,8 +41,7 @@ /obj/structure/closet/wardrobe/pink name = "pink wardrobe" - icon_state = "pink" - icon_closed = "pink" + icon_door = "pink" /obj/structure/closet/wardrobe/pink/fill() ..() @@ -58,8 +55,7 @@ /obj/structure/closet/wardrobe/black name = "black wardrobe" - icon_state = "black" - icon_closed = "black" + icon_door = "black" /obj/structure/closet/wardrobe/black/fill() ..() @@ -78,8 +74,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" + icon_door = "black" /obj/structure/closet/wardrobe/chaplain_black/fill() ..() @@ -100,8 +95,7 @@ /obj/structure/closet/wardrobe/green name = "green wardrobe" - icon_state = "green" - icon_closed = "green" + icon_door = "green" /obj/structure/closet/wardrobe/green/fill() ..() @@ -115,8 +109,7 @@ /obj/structure/closet/wardrobe/xenos name = "xenos wardrobe" - icon_state = "green" - icon_closed = "green" + icon_door = "green" /obj/structure/closet/wardrobe/xenos/fill() ..() @@ -133,8 +126,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" + icon_door = "orange" /obj/structure/closet/wardrobe/orange/fill() ..() @@ -149,8 +141,7 @@ /obj/structure/closet/wardrobe/yellow name = "yellow wardrobe" - icon_state = "yellow" - icon_closed = "yellow" + icon_door = "yellow" /obj/structure/closet/wardrobe/yellow/fill() ..() @@ -165,8 +156,7 @@ /obj/structure/closet/wardrobe/atmospherics_yellow name = "atmospherics wardrobe" - icon_state = "yellow" - icon_closed = "yellow" + icon_door = "yellow" /obj/structure/closet/wardrobe/atmospherics_yellow/fill() ..() @@ -193,8 +183,7 @@ /obj/structure/closet/wardrobe/engineering_yellow name = "engineering wardrobe" - icon_state = "yellow" - icon_closed = "yellow" + icon_door = "yellow" /obj/structure/closet/wardrobe/engineering_yellow/fill() ..() @@ -220,8 +209,7 @@ /obj/structure/closet/wardrobe/white name = "white wardrobe" - icon_state = "white" - icon_closed = "white" + icon_door = "white" /obj/structure/closet/wardrobe/white/fill() ..() @@ -236,8 +224,7 @@ /obj/structure/closet/wardrobe/pjs name = "pajama wardrobe" - icon_state = "white" - icon_closed = "white" + icon_door = "white" /obj/structure/closet/wardrobe/pjs/fill() ..() @@ -254,8 +241,7 @@ /obj/structure/closet/wardrobe/science_white name = "science wardrobe" - icon_state = "white" - icon_closed = "white" + icon_door = "white" /obj/structure/closet/wardrobe/toxins_white/fill() ..() @@ -276,11 +262,9 @@ new /obj/item/clothing/head/bandana/science(src) return - /obj/structure/closet/wardrobe/machinist - name = "Machinist wardrobe" - icon_state = "black" - icon_closed = "black" + name = "machinist wardrobe" + icon_door = "black" /obj/structure/closet/wardrobe/robotics_black/fill() ..() @@ -297,8 +281,7 @@ /obj/structure/closet/wardrobe/pharmacy_white name = "pharmacy wardrobe" - icon_state = "white" - icon_closed = "white" + icon_door = "white" /obj/structure/closet/wardrobe/pharmacy_white/fill() ..() @@ -311,11 +294,9 @@ new /obj/item/clothing/suit/storage/toggle/labcoat/pharmacist(src) return - /obj/structure/closet/wardrobe/virology_white name = "virology wardrobe" - icon_state = "white" - icon_closed = "white" + icon_door = "white" /obj/structure/closet/wardrobe/virology_white/fill() ..() @@ -328,8 +309,7 @@ /obj/structure/closet/wardrobe/medic_white name = "medical wardrobe" - icon_state = "white" - icon_closed = "white" + icon_door = "white" /obj/structure/closet/wardrobe/medic_white/fill() ..() @@ -351,8 +331,7 @@ /obj/structure/closet/wardrobe/grey name = "grey wardrobe" - icon_state = "grey" - icon_closed = "grey" + icon_door = "grey" /obj/structure/closet/wardrobe/grey/fill() ..() @@ -373,8 +352,7 @@ /obj/structure/closet/wardrobe/mixed name = "mixed wardrobe" - icon_state = "mixed" - icon_closed = "mixed" + icon_door = "mixed" /obj/structure/closet/wardrobe/mixed/fill() ..() @@ -396,8 +374,6 @@ /obj/structure/closet/wardrobe/tactical name = "tactical equipment" icon_state = "syndicate1" - icon_closed = "syndicate1" - icon_opened = "syndicate1open" /obj/structure/closet/wardrobe/tactical/fill() ..() @@ -413,8 +389,7 @@ /obj/structure/closet/wardrobe/suit name = "suit locker" - icon_state = "mixed" - icon_closed = "mixed" + icon_door = "mixed" /obj/structure/closet/wardrobe/suit/fill() ..() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 3331bc4bbe8..ae919330c2a 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -5,139 +5,81 @@ /obj/structure/closet/crate name = "crate" desc = "A rectangular steel crate." - icon = 'icons/obj/storage.dmi' + icon = 'icons/obj/crate.dmi' icon_state = "crate" - icon_opened = "crateopen" - icon_closed = "crate" - climbable = 1 + climbable = TRUE build_amt = 10 - var/rigged = 0 - var/tablestatus = 0 slowdown = 0 + open_sound = 'sound/machines/crate_open.ogg' + close_sound = 'sound/machines/crate_close.ogg' + open_sound_volume = 35 + close_sound_volume = 50 + store_structure = TRUE + dense_when_open = TRUE + door_anim_squish = 0.30 + door_anim_time = 3 + door_anim_angle = 140 + door_hinge = 3.5 + var/tablestatus = 0 + + var/azimuth_angle_2 = 180 //in this context the azimuth angle for over 90 degree + var/radius_2 = 1.35 + var/static/list/animation_math //assoc list with pre calculated values /obj/structure/closet/crate/can_open() - if (tablestatus != UNDER_TABLE)//Can't be opened while under a table - return 1 - return 0 + if(tablestatus == UNDER_TABLE)//Can't be opened while under a table + return 0 + . = ..() /obj/structure/closet/crate/can_close() return 1 -/obj/structure/closet/crate/open() - if(opened) - return 0 - if(!can_open()) - return 0 - - if(rigged && locate(/obj/item/device/radio/electropack) in src) - if(isliving(usr)) - var/mob/living/L = usr - var/touchy_hand - if(L.hand) - touchy_hand = BP_R_HAND - else - touchy_hand = BP_L_HAND - if(L.electrocute_act(17, src, ground_zero = touchy_hand)) - spark(src, 5, alldirs) - if(L.stunned) - return 2 - - playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) - for(var/obj/O in src) - O.forceMove(get_turf(src)) - - if(climbable) - structure_shaken() - - for (var/mob/M in src) - M.forceMove(get_turf(src)) - if (M.stat == CONSCIOUS) - M.visible_message(SPAN_DANGER("\The [M.name] bursts out of the [src]!"), SPAN_DANGER("You burst out of the [src]!")) - else - M.visible_message(SPAN_DANGER("\The [M.name] tumbles out of the [src]!")) - - icon_state = icon_opened - opened = 1 - pass_flags = 0 - return 1 - -/obj/structure/closet/crate/close() - if(!opened) - return 0 - if(!can_close()) - return 0 - - playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) - var/itemcount = 0 - for(var/obj/O in get_turf(src)) - if(itemcount >= storage_capacity) - break - if(O.density || O.anchored || istype(O,/obj/structure/closet)) - continue - if(istype(O, /obj/structure/bed)) //This is only necessary because of rollerbeds and swivel chairs. - var/obj/structure/bed/B = O - if(B.buckled) - continue - O.forceMove(src) - itemcount++ - - icon_state = icon_closed - opened = 0 - return 1 - - - - -/obj/structure/closet/crate/attackby(obj/item/W as obj, mob/user as mob) - if(opened) - return ..() - else if(istype(W, /obj/item/stack/packageWrap)) +/obj/structure/closet/crate/animate_door(var/closing = FALSE) + if(!door_anim_time) return - else if(W.iscoil()) - var/obj/item/stack/cable_coil/C = W - if(rigged) - to_chat(user, "[src] is already rigged!") - return - if (C.use(1)) - to_chat(user, "You rig [src].") - rigged = 1 - return - else if(istype(W, /obj/item/device/radio/electropack)) - if(rigged) - to_chat(user, "You attach [W] to [src].") - user.drop_from_inventory(W,src) - return - else if(W.iswirecutter()) - if(rigged) - to_chat(user, "You cut away the wiring.") - playsound(loc, 'sound/items/wirecutter.ogg', 100, 1) - rigged = 0 - return - else if(istype(W, /obj/item/device/hand_labeler)) - var/obj/item/device/hand_labeler/HL = W - if (HL.mode == 1) - return + if(!door_obj) door_obj = new + if(animation_math == null) //checks if there is already a list for animation_math if not creates one to avoid runtimes + animation_math = new/list() + if(!door_anim_time == 0 && !animation_math["[door_anim_time]-[door_anim_angle]-[azimuth_angle_2]-[radius_2]-[door_hinge]"]) + animation_list() + vis_contents |= door_obj + door_obj.icon = icon + door_obj.icon_state = "[icon_door || icon_state]_door" + is_animating_door = TRUE + var/num_steps = door_anim_time / world.tick_lag + var/list/animation_math_list = animation_math["[door_anim_time]-[door_anim_angle]-[azimuth_angle_2]-[radius_2]-[door_hinge]"] + for(var/I in 0 to num_steps) + var/door_state = I == (closing ? num_steps : 0) ? "[icon_door || icon_state]_door" : animation_math_list[closing ? 2 * num_steps - I : num_steps + I] <= 0 ? "[icon_door_override ? icon_door : icon_state]_back" : "[icon_door || icon_state]_door" + var/door_layer = I == (closing ? num_steps : 0) ? ABOVE_MOB_LAYER : animation_math_list[closing ? 2 * num_steps - I : num_steps + I] <= 0 ? FLOAT_LAYER : ABOVE_MOB_LAYER + var/matrix/M = get_door_transform(I == (closing ? num_steps : 0) ? 0 : animation_math_list[closing ? num_steps - I : I], I == (closing ? num_steps : 0) ? 1 : animation_math_list[closing ? 2 * num_steps - I : num_steps + I]) + if(I == 0) + door_obj.transform = M + door_obj.icon_state = door_state + door_obj.layer = door_layer + else if(I == 1) + animate(door_obj, transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag, flags = ANIMATION_END_NOW) else - attack_hand(user) - else return attack_hand(user) + animate(transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag) + addtimer(CALLBACK(src,.proc/end_door_animation),door_anim_time,TIMER_UNIQUE|TIMER_OVERRIDE) -/obj/structure/closet/crate/ex_act(severity) - switch(severity) - if(1) - health -= rand(120, 240) - if(2) - health -= rand(60, 120) - if(3) - health -= rand(30, 60) +/obj/structure/closet/crate/get_door_transform(crateanim_1, crateanim_2) + var/matrix/M = matrix() + M.Translate(0, -door_hinge) + M.Multiply(matrix(1, crateanim_1, 0, 0, crateanim_2, 0)) + M.Translate(0, door_hinge) + return M - if (health <= 0) - for (var/atom/movable/A as mob|obj in src) - A.forceMove(loc) - if (prob(50) && severity > 1)//Higher chance of breaking contents - A.ex_act(severity-1) - else - A.ex_act(severity) - qdel(src) +/obj/structure/closet/crate/proc/animation_list() //pre calculates a list of values for the crate animation cause byond not like math + var/num_steps_1 = door_anim_time / world.tick_lag + var/list/new_animation_math_sublist[num_steps_1 * 2] + for(var/I in 1 to num_steps_1) //loop to save the animation values into the lists + var/angle_1 = door_anim_angle * (I / num_steps_1) + var/polar_angle = abs(arcsin(cos(angle_1))) + var/azimuth_angle = angle_1 >= 90 ? azimuth_angle_2 : 0 + var/radius_cr = angle_1 >= 90 ? radius_2 : 1 + new_animation_math_sublist[I] = -sin(polar_angle) * sin(azimuth_angle) * radius_cr + new_animation_math_sublist[num_steps_1 + I] = cos(azimuth_angle) * sin(polar_angle) * radius_cr + animation_math["[door_anim_time]-[door_anim_angle]-[azimuth_angle_2]-[radius_2]-[door_hinge]"] = new_animation_math_sublist /* ========================== @@ -169,8 +111,8 @@ set_tablestatus(FALSE) /obj/structure/closet/crate/toggle(var/mob/user) - if (!opened && tablestatus == UNDER_TABLE) - to_chat(user, SPAN_WARNING("You can't open that while the lid is obstructed!")) + if(!opened && tablestatus == UNDER_TABLE) + to_chat(user, SPAN_WARNING("You can't open \the [src] while the lid is obstructed!")) return FALSE else return ..() @@ -250,150 +192,49 @@ ===================== */ - /obj/structure/closet/crate/secure + name = "secure crate" 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" - var/broken = 0 - var/locked = 1 + icon_state = "secure_crate" + secure = TRUE + secure_lights = TRUE health = 200 -/obj/structure/closet/crate/secure/Initialize() - . = ..() - if(locked) - cut_overlays() - add_overlay(redlight) - else - cut_overlays() - add_overlay(greenlight) - -/obj/structure/closet/crate/secure/can_open() - if (..()) - return !locked - -/obj/structure/closet/crate/secure/proc/togglelock(mob/user as mob) - if(opened) - to_chat(user, "Close the crate first.") - return - if(broken) - to_chat(user, "The crate appears to be broken.") - return - if(allowed(user)) - set_locked(!locked, user) - return 1 - else - to_chat(user, "Access Denied") - -/obj/structure/closet/crate/secure/proc/set_locked(var/newlocked, mob/user = null) - if(locked == newlocked) return - - locked = newlocked - if(user) - for(var/mob/O in viewers(user, 3)) - O.show_message( "The crate has been [locked ? null : "un"]locked by [user].", 1) - cut_overlays() - add_overlay(locked ? redlight : greenlight) - -/obj/structure/closet/crate/secure/verb/verb_togglelock() - set src in oview(1) // One square distance - set category = "Object" - set name = "Toggle Lock" - - if(!usr.canmove || usr.stat || usr.restrained()) // Don't use it if you're not able to! Checks for stuns, ghost and restrain - return - - if(ishuman(usr) || isrobot(usr)) - add_fingerprint(usr) - togglelock(usr) - else - to_chat(usr, "This mob type can't use this verb.") - -/obj/structure/closet/crate/secure/attack_hand(mob/user as mob) - add_fingerprint(user) - if(locked) - return togglelock(user) - else - return toggle(user) - -/obj/structure/closet/crate/secure/attackby(obj/item/W as obj, mob/user as mob) - if(is_type_in_list(W, list(/obj/item/stack/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/wirecutters))) - return ..() - if(istype(W, /obj/item/melee/energy/blade)) - emag_act(INFINITY, user) - if(istype(W, /obj/item/device/hand_labeler)) - var/obj/item/device/hand_labeler/HL = W - if (HL.mode == 1) - return - else if(!opened) - togglelock(user) - return - else if(!opened) - togglelock(user) - return - return ..() - -/obj/structure/closet/crate/secure/emag_act(var/remaining_charges, var/mob/user) - if(!broken) - cut_overlays() - add_overlay(emag) - add_overlay(sparks) - CUT_OVERLAY_IN(sparks, 6) - playsound(loc, /decl/sound_category/spark_sound, 60, 1) - locked = 0 - broken = 1 - to_chat(user, "You unlock \the [src].") - return 1 - -/obj/structure/closet/crate/secure/emp_act(severity) - for(var/obj/O in src) - O.emp_act(severity) - if(!broken && !opened && prob(50/severity)) - if(!locked) - locked = 1 - cut_overlays() - add_overlay(redlight) - else - cut_overlays() - add_overlay(emag) - add_overlay(sparks) - CUT_OVERLAY_IN(sparks, 6) - playsound(loc, 'sound/effects/sparks4.ogg', 75, 1) - locked = 0 - if(!opened && prob(20/severity)) - if(!locked) - open() - else - req_access = list() - req_access += pick(get_all_station_access()) - ..() - /obj/structure/closet/crate/plastic name = "plastic crate" desc = "A rectangular plastic crate." - icon_state = "plasticcrate" - icon_opened = "plasticcrateopen" - icon_closed = "plasticcrate" + icon_state = "plastic_crate" + +/obj/structure/closet/crate/coffin + name = "coffin" + desc = "It's a burial receptacle for the dearly departed." + icon_state = "coffin" + build_amt = 5 + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 + door_anim_angle = 140 + azimuth_angle_2 = 180 + door_anim_time = 5 + door_hinge = 5 /obj/structure/closet/crate/internals name = "internals crate" desc = "A internals crate." - icon_state = "o2crate" - icon_opened = "o2crateopen" - icon_closed = "o2crate" + icon_state = "o2_crate" /obj/structure/closet/crate/trashcart name = "trash cart" desc = "A heavy, metal trashcart with wheels." icon_state = "trashcart" - icon_opened = "trashcartopen" - icon_closed = "trashcart" + door_hinge = 2.5 + +/obj/structure/closet/crate/miningcart + desc = "A mining cart. This one doesn't work on rails, but has to be dragged." + name = "mining cart" + icon_state = "miningcart" + door_hinge = 2.5 /*these aren't needed anymore /obj/structure/closet/crate/hat @@ -414,16 +255,14 @@ /obj/structure/closet/crate/medical name = "medical crate" desc = "A medical crate." - icon_state = "medicalcrate" - icon_opened = "medicalcrateopen" - icon_closed = "medicalcrate" + icon_state = "medical_crate" /obj/structure/closet/crate/rfd name = "\improper RFD C-Class crate" desc = "A crate with a Rapid-Fabrication-Device C-Class." - icon_state = "crate" - icon_opened = "crateopen" - icon_closed = "crate" + icon_state = "eng_tool" + icon_door_override = TRUE + icon_door = "eng" /obj/structure/closet/crate/rfd/fill() new /obj/item/rfd_ammo(src) @@ -433,6 +272,9 @@ /obj/structure/closet/crate/solar name = "solar pack crate" + icon_state = "eng_elec" + icon_door_override = TRUE + icon_door = "eng" /obj/structure/closet/crate/solar/fill() new /obj/item/solar_assembly(src) @@ -464,8 +306,7 @@ name = "freezer" desc = "A freezer." icon_state = "freezer" - icon_opened = "freezeropen" - icon_closed = "freezer" + door_hinge = 4.5 var/target_temp = T0C - 40 var/cooling_power = 40 @@ -495,31 +336,34 @@ name = "large bin" desc = "A large bin." icon_state = "largebin" - icon_opened = "largebinopen" - icon_closed = "largebin" /obj/structure/closet/crate/drop name = "drop crate" desc = "A large, sturdy crate meant for airdrops." - icon_state = "dropcrate" - icon_opened = "dropcrate-open" - icon_closed = "dropcrate" + icon_state = "drop_crate" + door_hinge = 0.5 /obj/structure/closet/crate/drop/grey name = "drop crate" desc = "A large, sturdy crate meant for airdrops." - icon_state = "dropcrate-grey" - icon_opened = "dropcrate-grey-open" - icon_closed = "dropcrate-grey" + icon_state = "drop_crate-grey" + door_hinge = 0.5 -/obj/structure/closet/crate/radiation +/obj/structure/closet/crate/tool + name = "tool crate" + desc = "It's a crate for storing tools." + icon_state = "eng_tool" + icon_door_override = TRUE + icon_door = "eng" + +/obj/structure/closet/crate/rad name = "radioactive gear crate" desc = "A crate with a radiation sign on it." - icon_state = "radiation" - icon_opened = "radiationopen" - icon_closed = "radiation" + icon_state = "eng_rad" + icon_door_override = TRUE + icon_door = "eng" -/obj/structure/closet/crate/radiation/fill() +/obj/structure/closet/crate/rad/gear/fill() new /obj/item/clothing/suit/radiation(src) new /obj/item/clothing/head/radiation(src) new /obj/item/clothing/suit/radiation(src) @@ -529,70 +373,86 @@ new /obj/item/clothing/suit/radiation(src) new /obj/item/clothing/head/radiation(src) +/obj/structure/closet/crate/elec + name = "electrical supplies crate" + desc = "It's a crate for storing electrical equipment." + icon_state = "eng_elec" + icon_door_override = TRUE + icon_door = "eng" + +/obj/structure/closet/crate/weld + name = "welding supplies crate" + desc = "It's a crate for storing welding tools." + icon_state = "eng_weld" + icon_door_override = TRUE + icon_door = "eng" + /obj/structure/closet/crate/secure/aimodules name = "AI modules crate" desc = "A secure crate full of AI modules." + icon_state = "science_crate" req_access = list(access_cent_specops) /obj/structure/closet/crate/secure/aimodules/fill() for(var/moduletype in subtypesof(/obj/item/aiModule)) new moduletype(src) +/obj/structure/closet/crate/weapon + name = "weapons crate" + desc = "A weapons crate." + icon_state = "syndi_crate" //haha this pun was totally worth it. + +/obj/structure/closet/crate/weapon/alt + icon_state = "syndi_crate1" + /obj/structure/closet/crate/secure/weapon name = "weapons crate" desc = "A secure weapons crate." - icon_state = "weaponcrate" - icon_opened = "weaponcrateopen" - icon_closed = "weaponcrate" + icon_state = "syndi_secure_crate" + icon_door_override = TRUE + icon_door = "syndi_crate" + +/obj/structure/closet/crate/secure/weapon/alt + icon_state = "syndi_secure_crate1" + icon_door = "syndi_crate1" /obj/structure/closet/crate/secure/legion name = "foreign legion supply crate" desc = "A secure supply crate, It carries the insignia of the Tau Ceti Foreign Legion. It appears quite scuffed." - icon_state = "tcflcrate" - icon_opened = "tcflcrateopen" - icon_closed = "tcflcrate" + icon_state = "tcfl_crate" req_access = list(access_legion) /obj/structure/closet/crate/secure/phoron name = "phoron crate" desc = "A secure phoron crate." - icon_state = "phoroncrate" - icon_opened = "phoroncrateopen" - icon_closed = "phoroncrate" + icon_state = "phoron_crate" + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' /obj/structure/closet/crate/secure/gear name = "gear crate" desc = "A secure gear crate." - icon_state = "secgearcrate" - icon_opened = "secgearcrateopen" - icon_closed = "secgearcrate" + icon_state = "secgear_crate" /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" + icon_state = "hydro_secure_crate" /obj/structure/closet/crate/secure/bin name = "secure bin" desc = "A secure bin." icon_state = "largebins" - icon_opened = "largebinsopen" - icon_closed = "largebins" - redlight = "largebinr" - greenlight = "largebing" - sparks = "largebinsparks" - emag = "largebinemag" + icon_door_overlay = "largebin" + icon_door_override = TRUE + icon_door = "largebin" /obj/structure/closet/crate/large name = "large crate" desc = "A hefty metal crate." - icon = 'icons/obj/storage.dmi' icon_state = "largemetal" - icon_opened = "largemetalopen" - icon_closed = "largemetal" health = 200 + door_anim_time = 0 /obj/structure/closet/crate/large/close() . = ..() @@ -615,13 +475,11 @@ /obj/structure/closet/crate/secure/large name = "large crate" desc = "A hefty metal crate with an electronic locking system." - icon = 'icons/obj/storage.dmi' icon_state = "largemetal" - icon_opened = "largemetalopen" - icon_closed = "largemetal" - redlight = "largemetalr" - greenlight = "largemetalg" + icon_door_overlay = "largemetal" health = 400 + secure_lights = FALSE + door_anim_time = 0 /obj/structure/closet/crate/secure/large/close() . = ..() @@ -641,19 +499,10 @@ break return -//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/hydroponics name = "hydroponics crate" desc = "All you need to destroy those pesky weeds and pests." - icon_state = "hydrocrate" - icon_opened = "hydrocrateopen" - icon_closed = "hydrocrate" + icon_state = "hydro_crate" /obj/structure/closet/crate/hydroponics/prespawned //This exists so the prespawned hydro crates spawn with their contents. @@ -675,33 +524,10 @@ //Quantity of spawns is number of discrete selections from the loot lists, default 10 /obj/structure/closet/crate/loot - name = "unusual container" - desc = "A mysterious container of unknown origins. What mysteries lie within?" var/rarity = 1 var/quantity = 10 var/list/spawntypes -//The crate chooses its icon randomly from a number of noticeable options. -//None of these are the standard grey crate sprite, and a few are currently unused ingame -//This ensures that people stumbling across a lootbox will notice it's different and investigate - var/list/iconchoices = list( - "radiation" = "radiationopen", - "o2crate" = "o2crateopen", - "freezer" = "freezeropen", - "weaponcrate" = "weaponcrateopen", - "largebins" = "largebinsopen", - "phoroncrate" = "phoroncrateopen", - "trashcart" = "trashcartopen", - "critter" = "critteropen", - "largemetal" = "largemetalopen", - "medicalcrate" = "medicalcrateopen", - "tcflcrate" = "tcflcrateopen", - "necrocrate" = "necrocrateopen", - "zenghucrate" = "zenghucrateopen", - "hephcrate" = "hephcrateopen" - ) - - /obj/structure/closet/crate/loot/Initialize(mapload) . = ..() @@ -711,12 +537,19 @@ "3" = (100 - ((STOCK_RARE_PROB * rarity) + (STOCK_UNCOMMON_PROB * rarity))) ) - icon_closed = pick(iconchoices) - icon_opened = iconchoices[icon_closed] - update_icon() - for (var/i in 1 to quantity) + var/icontype = pick(typesof(/obj/structure/closet/crate) - typesof(/obj/structure/closet/crate/secure/gear_loadout)) + var/obj/structure/closet/crate/C = new icontype(src.loc) + + C.name = "unusual container" + C.desc = "A mysterious container of unknown origins. What mysteries lie within?" + if(C.secure) + C.secure = FALSE + C.update_icon() + for(var/i in 1 to quantity) var/newtype = get_spawntype() - call(newtype)(src) + call(newtype)(C) + + qdel(src) /obj/structure/closet/crate/loot/proc/get_spawntype() var/stocktype = pickweight(spawntypes) @@ -731,6 +564,7 @@ /obj/structure/closet/crate/extinguisher_cartridges name = "crate of extinguisher cartridges" desc = "Contains a dozen empty extinguisher cartridges." + icon_state = "fire" /obj/structure/closet/crate/extinguisher_cartridges/fill() for(var/a = 1 to 12) @@ -739,10 +573,7 @@ /obj/structure/closet/crate/autakh name = "aut'akh crate" desc = "Contains a number of limbs and augmentations created by the Aut'akh Commune." - icon = 'icons/obj/storage.dmi' icon_state = "autakh_crate" - icon_opened = "autakh_crateopen" - icon_closed = "autakh_crate" /obj/structure/closet/crate/autakh/fill() new /obj/item/organ/external/arm/right/autakh(src) @@ -765,3 +596,9 @@ new /obj/item/organ/external/hand/right/autakh/tool/mining(src) new /obj/item/organ/external/hand/right/autakh/medical(src) new /obj/item/organ/external/hand/right/autakh/security(src) + +/obj/structure/closet/crate/security + name = "security crate" + desc = "A secure security crate. Secure." + icon_state = "security_crate" + secure = TRUE diff --git a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm index 804959a51b3..dfffad83374 100644 --- a/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm +++ b/code/game/objects/structures/crates_lockers/crates/gear_loadout.dm @@ -6,30 +6,26 @@ /obj/structure/closet/crate/gear_loadout/hephaestus desc = "A sturdy crate with Hephaestus Industries branding." name = "hephaestus drop crate" - icon_state = "hephcrate" - icon_opened = "hephcrateopen" - icon_closed = "hephcrate" + icon_state = "heph_crate" + door_hinge = 0.5 /obj/structure/closet/crate/gear_loadout/zenghu desc = "A sturdy crate with Zeng-Hu Pharmaceuticals branding." name = "zeng-hu drop crate" - icon_state = "zenghucrate" - icon_opened = "zenghucrateopen" - icon_closed = "zenghucrate" + icon_state = "zenghu_crate" + door_hinge = 0.5 /obj/structure/closet/crate/gear_loadout/einstein desc = "A sturdy crate with Einstein Engines branding." name = "einstein drop crate" - icon_state = "einsteincrate" - icon_opened = "einsteincrateopen" - icon_closed = "einsteincrate" + icon_state = "einstein_crate" + door_hinge = 0.5 /obj/structure/closet/crate/gear_loadout/zavodskoi desc = "A sturdy crate with Zavodskoi Interstellar branding." name = "zavodskoi interstellar drop crate" - icon_state = "necrocrate" - icon_opened = "necrocrateopen" - icon_closed = "necrocrate" + icon_state = "necro_crate" + door_hinge = 0.5 /obj/structure/closet/crate/secure/gear_loadout/coalition/fill() new /obj/item/rig/gunslinger/equipped(src) @@ -469,4 +465,4 @@ new /obj/item/clothing/accessory/holster/armpit/brown(src) new /obj/item/gun/projectile/pistol(src) new /obj/item/ammo_magazine/mc9mm(src) - new /obj/item/ammo_magazine/mc9mm(src) \ No newline at end of file + new /obj/item/ammo_magazine/mc9mm(src) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 72fe7d08b2d..8ffb4e91938 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -3,10 +3,10 @@ desc = "A hefty wooden crate." icon = 'icons/obj/storage.dmi' icon_state = "densecrate" - density = 1 + density = TRUE /obj/structure/largecrate/attack_hand(mob/user as mob) - to_chat(user, "You need a crowbar to pry this open!") + to_chat(user, SPAN_NOTICE("You need a crowbar to pry this open!")) return /obj/structure/largecrate/attackby(obj/item/W as obj, mob/user as mob) @@ -15,9 +15,9 @@ var/turf/T = get_turf(src) for(var/atom/movable/AM in contents) if(AM.simulated) AM.forceMove(T) - user.visible_message("[user] pries \the [src] open.", \ - "You pry open \the [src].", \ - "You hear splitting wood.") + user.visible_message(SPAN_NOTICE("[user] pries \the [src] open."), \ + SPAN_NOTICE("You pry open \the [src]."), \ + SPAN_NOTICE("You hear splitting wood.")) for(var/obj/vehicle/V in T.contents) if(V) V.unload(user) @@ -96,4 +96,4 @@ /obj/structure/largecrate/animal/hakhma name = "hakhma crate" - held_type = /mob/living/simple_animal/hakhma \ No newline at end of file + held_type = /mob/living/simple_animal/hakhma diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 1448f944950..cd73f461255 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -215,7 +215,7 @@ return playsound(src.loc, W.usesound, 100, 1) - + if(anchored) user.visible_message("[user] begins unsecuring the airlock assembly from the floor.", \ SPAN_NOTICE("You start unsecuring the airlock assembly from the floor.")) @@ -411,4 +411,4 @@ #undef STATE_UNWIRED #undef STATE_WIRED -#undef STATE_ELECTRONICS_INSTALLED \ No newline at end of file +#undef STATE_ELECTRONICS_INSTALLED diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 185ea3af7d7..422674e9bfa 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -9,7 +9,7 @@ icon_state = "cart" anchored = 0 density = 1 - climbable = 1 + climbable = TRUE flags = OPENCONTAINER build_amt = 15 //copypaste sorry diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm index c27180d3270..2932fa390a2 100644 --- a/code/game/objects/structures/pit.dm +++ b/code/game/objects/structures/pit.dm @@ -118,7 +118,7 @@ icon_state = "pit0" /obj/structure/pit/closed/grave/Initialize() - var/obj/structure/closet/coffin/C = new(src.loc) + var/obj/structure/closet/crate/coffin/C = new(src.loc) var/obj/effect/decal/remains/human/bones = new(C) bones.layer = BELOW_MOB_LAYER var/obj/structure/gravemarker/random/R = new(src.loc) @@ -149,7 +149,7 @@ /obj/structure/gravemarker/random/proc/generate() icon_state = pick("wood","cross") - + var/nam = random_name(MALE, SPECIES_HUMAN) message = "Here lies [nam]." @@ -163,4 +163,4 @@ if(istype(W,/obj/item/pen)) var/msg = sanitize(input(user, "What should it say?", "Grave marker", message) as text|null) if(msg) - message = msg \ No newline at end of file + message = msg diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index ede8b9a7cf7..3df3b1accf0 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -8,9 +8,14 @@ name = "underwear wardrobe" desc = "Holds item of clothing you shouldn't be showing off in the hallways." icon = 'icons/obj/closet.dmi' - icon_state = "cabinet_closed" + icon_state = "cabinet" density = 1 +/obj/structure/undies_wardrobe/Initialize(mapload) + . = ..() + add_overlay("cabinet_door") + add_overlay("cabinet_door_alt") + /obj/structure/undies_wardrobe/attack_hand(var/mob/user) if(!human_who_can_use_underwear(user)) to_chat(user, "Sadly there's nothing in here for you to wear.") diff --git a/code/modules/battlemonsters/items/furniture/dueling_area.dm b/code/modules/battlemonsters/items/furniture/dueling_area.dm index 4a1b9a5e031..5c6f1da19ff 100644 --- a/code/modules/battlemonsters/items/furniture/dueling_area.dm +++ b/code/modules/battlemonsters/items/furniture/dueling_area.dm @@ -3,7 +3,7 @@ icon = 'icons/obj/battle_monsters/furniture.dmi' anchored = 1 density = 1 - climbable = 1 + climbable = TRUE throwpass = 1 /obj/structure/dueling_table/no_collide diff --git a/code/modules/cargo/bounties/engineer.dm b/code/modules/cargo/bounties/engineer.dm index fbd74c7d9ac..5e300fcbbea 100644 --- a/code/modules/cargo/bounties/engineer.dm +++ b/code/modules/cargo/bounties/engineer.dm @@ -92,7 +92,7 @@ reward_high = 3000 required_count = 3 random_count = 1 - wanted_types = list(/obj/structure/closet/coffin, /obj/item/material/urn) + wanted_types = list(/obj/structure/closet/crate/coffin, /obj/item/material/urn) /datum/bounty/item/engineer/pap name = "Portable Air Pumps" diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 2192344c860..26f345e6742 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -29,7 +29,7 @@ /datum/export/large/crate/coffin cost = 250//50 wooden crates cost 2000 points, and you can make 10 coffins in seconds with those planks. Each coffin selling for 250 means you can make a net gain of 500 points for wasting your time making coffins. unit_name = "coffin" - export_types = list(/obj/structure/closet/coffin) + export_types = list(/obj/structure/closet/crate/coffin) /datum/export/large/reagent_dispenser cost = 100 // +0-400 depending on amount of reagents left diff --git a/code/modules/cargo/random_stock/t2_uncommon.dm b/code/modules/cargo/random_stock/t2_uncommon.dm index acd58d8ed6a..82ec35fbe13 100644 --- a/code/modules/cargo/random_stock/t2_uncommon.dm +++ b/code/modules/cargo/random_stock/t2_uncommon.dm @@ -308,12 +308,6 @@ STOCK_ITEM_UNCOMMON(laserscalpel, 1.3) STOCK_ITEM_UNCOMMON(electropack, 1) new /obj/item/device/radio/electropack(L) - if(istype(L, /obj/structure/closet/crate) && prob(40)) - var/obj/structure/closet/crate/cr = L - cr.rigged = TRUE - //Boobytrapped crate, will electrocute when you attempt to open it - //Can be disarmed with wirecutters or ignored with insulated gloves - STOCK_ITEM_UNCOMMON(randomhide, 0.5) var/obj/item/stack/material/animalhide/spawn_hide = pick(typesof(/obj/item/stack/material/animalhide)) new spawn_hide(L, rand(5, 50)) diff --git a/code/modules/clothing/sets/laser_tag.dm b/code/modules/clothing/sets/laser_tag.dm index e5de5d5469c..235ad1dbf4f 100644 --- a/code/modules/clothing/sets/laser_tag.dm +++ b/code/modules/clothing/sets/laser_tag.dm @@ -121,8 +121,7 @@ /obj/structure/closet/lasertag name = "red laser tag equipment" desc = "It's a storage unit for laser tag equipment." - icon_state = "red" - icon_closed = "red" + icon_door = "red" var/helmet_path = /obj/item/clothing/head/helmet/riot/laser_tag var/armor_path = /obj/item/clothing/suit/armor/riot/laser_tag var/gun_path = /obj/item/gun/energy/lasertag/red @@ -137,8 +136,7 @@ /obj/structure/closet/lasertag/blue name = "blue laser tag equipment" - icon_state = "blue" - icon_closed = "blue" + icon_door = "blue" helmet_path = /obj/item/clothing/head/helmet/riot/laser_tag/blue armor_path = /obj/item/clothing/suit/armor/riot/laser_tag/blue - gun_path = /obj/item/gun/energy/lasertag/blue \ No newline at end of file + gun_path = /obj/item/gun/energy/lasertag/blue diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index a4e61765be6..6cca2d9f686 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -158,7 +158,7 @@ new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20), new /datum/stack_recipe("wooden chair", /obj/structure/bed/stool/chair/wood, BUILD_AMT, time = 10, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("crossbow frame", /obj/item/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0), - new /datum/stack_recipe("coffin", /obj/structure/closet/coffin, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1), + new /datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, BUILD_AMT, time = 15, one_per_turf = 1, on_floor = 1), new /datum/stack_recipe("rifle stock", /obj/item/stock, 10, time = 25, one_per_turf = 0, on_floor = 0), new /datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4), new /datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1), diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 505ab86c876..ec5c219d9be 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -1,9 +1,6 @@ /obj/structure/closet/crate/secure/loot name = "abandoned crate" desc = "What could be inside?" - icon_state = "securecrate" - icon_opened = "securecrateopen" - icon_closed = "securecrate" var/list/code = list() var/list/lastattempt = list() var/attempts = 15 @@ -162,7 +159,8 @@ else if(check_input(input)) to_chat(user, SPAN_NOTICE("The crate unlocks!")) playsound(user, 'sound/machines/lockreset.ogg', 50, 1) - set_locked(FALSE) + locked = FALSE + update_icon() else visible_message(SPAN_WARNING("A red light on \the [src]'s control panel flashes briefly.")) attempts-- diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 03c6cd337d4..ea8991fd149 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -2,12 +2,7 @@ /obj/structure/closet/secure_closet/miner name = "shaft miner locker" - icon_state = "miningsec1" - icon_closed = "miningsec" - icon_locked = "miningsec1" - icon_opened = "miningsecopen" - icon_broken = "miningsecbroken" - icon_off = "miningsecoff" + icon_state = "mining" req_access = list(access_mining) /obj/structure/closet/secure_closet/miner/fill() diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm index 8f713a4797f..9d5bfbfc6c0 100644 --- a/code/modules/research/xenoarchaeology/misc.dm +++ b/code/modules/research/xenoarchaeology/misc.dm @@ -62,12 +62,7 @@ /obj/structure/closet/secure_closet/xenoarchaeologist name = "xenoarchaeologist locker" req_access = list(access_tox_storage) - icon_state = "secureres1" - icon_closed = "secureres" - icon_locked = "secureres1" - icon_opened = "secureresopen" - icon_broken = "secureresbroken" - icon_off = "secureresoff" + icon_state = "science" /obj/structure/closet/secure_closet/xenoarchaeologist/fill() new /obj/item/clothing/under/rank/scientist(src) @@ -81,9 +76,8 @@ /obj/structure/closet/excavation name = "excavation tools" - icon_state = "toolcloset" - icon_closed = "toolcloset" - icon_opened = "toolclosetopen" + icon_state = "eng" + icon_door = "eng_tool" /obj/structure/closet/excavation/fill() new /obj/item/storage/belt/archaeology(src) diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm index 725d399dc88..73a076e63e9 100644 --- a/code/modules/tables/flipping.dm +++ b/code/modules/tables/flipping.dm @@ -85,7 +85,7 @@ set_dir(direction) if(dir != NORTH) layer = 5 - climbable = 0 //flipping tables allows them to be used as makeshift barriers + climbable = FALSE //flipping tables allows them to be used as makeshift barriers flipped = 1 flags |= ON_BORDER for(var/D in list(turn(direction, 90), turn(direction, -90))) @@ -114,4 +114,4 @@ update_connections(1) update_icon() - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index ee0096168df..c707bbe516a 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -5,7 +5,7 @@ desc = "It's a table, for putting things on. Or standing on, if you really want to." density = 1 anchored = 1 - climbable = 1 + climbable = TRUE layer = LAYER_TABLE throwpass = 1 var/flipped = 0 diff --git a/code/unit_tests/hardsuit_sprite_test.dm b/code/unit_tests/hardsuit_sprite_test.dm deleted file mode 100644 index 8d4c38e7e34..00000000000 --- a/code/unit_tests/hardsuit_sprite_test.dm +++ /dev/null @@ -1,69 +0,0 @@ -#define UNDERSCORE_OR_NULL(target) "[target ? "[target]_" : ""]" - -/datum/unit_test/hardsuit_sprite_test - name = "Hardsuit Sprite Test" - -/datum/unit_test/hardsuit_sprite_test/start_test() - for(var/rig_path in subtypesof(/obj/item/rig)) - var/obj/item/rig/R = new rig_path - var/list/rig_states = icon_states(R.icon) - - if(!(R.icon_state in rig_states)) - fail("[R.name]'s module icon_state isn't in its icon file.") - if(!("[R.icon_state]_ba" in rig_states)) - fail("[R.name]'s on-back module icon_state isn't in its icon file.") - - var/list/species_to_check = list("") // blank means default, human - if(length(R.icon_supported_species_tags)) - species_to_check += R.icon_supported_species_tags - - if(R.helm_type) - if(!("[R.icon_state]_helmet" in rig_states)) - fail("[R.name]'s helmet icon_state isn't in its icon file.") - if(!("[R.icon_state]_sealed_helmet" in rig_states)) - fail("[R.name]'s sealed helmet icon_state isn't in its icon file.") - if(R.suit_type) - if(!("[R.icon_state]_suit" in rig_states)) - fail("[R.name]'s suit icon_state isn't in its icon file.") - if(!("[R.icon_state]_sealed_suit" in rig_states)) - fail("[R.name]'s sealed suit icon_state isn't in its icon file.") - if(R.glove_type) - if(!("[R.icon_state]_gloves" in rig_states)) - fail("[R.name]'s gloves icon_state isn't in its icon file.") - if(!("[R.icon_state]_sealed_gloves" in rig_states)) - fail("[R.name]'s sealed gloves icon_state isn't in its icon file.") - if(R.boot_type) - if(!("[R.icon_state]_shoes" in rig_states)) - fail("[R.name]'s shoes icon_state isn't in its icon file.") - if(!("[R.icon_state]_sealed_shoes" in rig_states)) - fail("[R.name]'s sealed shoes icon_state isn't in its icon file.") - - for(var/short in species_to_check) - short = UNDERSCORE_OR_NULL(short) - if(R.helm_type) - if(!("[short][R.icon_state]_he" in rig_states)) - fail("[short] [R.name]'s helmet item_state isn't in its icon file.") - if(!("[short][R.icon_state]_sealed_he" in rig_states)) - fail("[short] [R.name]'s sealed helmet item_state isn't in its icon file.") - if(R.suit_type) - if(!("[short][R.icon_state]_su" in rig_states)) - fail("[short] [R.name]'s suit item_state isn't in its icon file.") - if(!("[short][R.icon_state]_sealed_su" in rig_states)) - fail("[short] [R.name]'s sealed suit item_state isn't in its icon file.") - if(R.glove_type) - if(!("[short][R.icon_state]_gl" in rig_states)) - fail("[short] [R.name]'s gloves item_state isn't in its icon file.") - if(!("[short][R.icon_state]_sealed_gl" in rig_states)) - fail("[short] [R.name]'s sealed gloves item_state isn't in its icon file.") - if(R.boot_type) - if(!("[short][R.icon_state]_sh" in rig_states)) - fail("[short] [R.name]'s shoes item_state isn't in its icon file.") - if(!("[short][R.icon_state]_sealed_sh" in rig_states)) - fail("[short] [R.name]'s sealed shoes item_state isn't in its icon file.") - - if(!reported) - pass("All hardsuits have their correct sprites.") - - return TRUE - -#undef UNDERSCORE_OR_NULL \ No newline at end of file diff --git a/code/unit_tests/icon_tests.dm b/code/unit_tests/icon_tests.dm new file mode 100644 index 00000000000..1a85524d5d8 --- /dev/null +++ b/code/unit_tests/icon_tests.dm @@ -0,0 +1,203 @@ +/datum/unit_test/icon_test + name = "ICON STATE template" + +/datum/unit_test/icon_test/closets + name = "CLOSET template" + // Matches logic in /obj/structure/closet/update_icons() + var/list/closet_state_suffixes = list( + "nothing" = "", + "opened" = "_open", + "broken" = "_broken", + "door" = "_door", + "back" = "_back", + "locked" = "locked", + "unlocked" = "unlocked", + "off" = "off", + "emag" = "emag" + ) +/datum/unit_test/icon_test/closets/closets_shall_have_valid_icons_for_each_state + name = "ICON STATES: Closets shall have valid icons for each state" + +/datum/unit_test/icon_test/closets/closets_shall_have_valid_icons_for_each_state/start_test() + var/missing_states = 0 + var/list/closet_paths = typesof(/obj/structure/closet) + + // If any closet types and their subtypes should be excluded from this test, include them here. Make sure they are covered by their own test. + var/list/exclude_closets = list( + /obj/structure/closet/airbubble, + /obj/structure/closet/body_bag, + /obj/structure/closet/secure_closet/guncabinet, + /obj/structure/closet/statue + ) + + for(var/exclude in exclude_closets) + for(var/exclude_type in typesof(exclude)) + closet_paths -= exclude_type + + var/list/closet_dmis = list() + for(var/path in closet_paths) + var/obj/structure/closet/closet_path = path + closet_dmis |= initial(closet_path.icon) + + var/list/closet_states = list() + for(var/dmi in closet_dmis) + closet_states += icon_states(dmi) + + var/state + for(var/path in closet_paths) + var/obj/structure/closet/closet_path = path + state = initial(closet_path.icon_state) + // Base icon state + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("icon_state [state] missing for [initial(closet_path.name)] -- ([closet_path])") + // Non-animated door states + if(!initial(closet_path.is_animating_door)) + // Door icon + if(initial(closet_path.icon_door)) + state = "[initial(closet_path.icon_door)][closet_state_suffixes["door"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Door icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + else + state = "[initial(closet_path.icon_state)][closet_state_suffixes["door"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Door icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + // Secure closet icon overlays + if(initial(closet_path.secure)) + // Emagged + state = "[initial(closet_path.icon_door_overlay)][closet_state_suffixes["emag"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Emag'd icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + // Locked + state = "[initial(closet_path.icon_door_overlay)][closet_state_suffixes["locked"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Locked icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + // Unlocked + state = "[initial(closet_path.icon_door_overlay)][closet_state_suffixes["unlocked"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Unlocked icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + // Opened + if(initial(closet_path.icon_door_override)) + state = "[initial(closet_path.icon_door)][closet_state_suffixes["opened"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Opened icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + else + state = "[initial(closet_path.icon_state)][closet_state_suffixes["opened"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Opened icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + // Animated Door + else + state = "[initial(closet_path.icon_door) || initial(closet_path.icon_state)][closet_state_suffixes["door"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Animated door icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + state = "[initial(closet_path.icon_door) || initial(closet_path.icon_state)][closet_state_suffixes["back"]]" + if(!(state in closet_states)) + missing_states += 1 + log_unit_test("Animated door icon [state] missing for [initial(closet_path.name)] -- ([closet_path])") + + if(missing_states) + fail("[missing_states] closet icon state\s [missing_states == 1 ? "is" : "are"] missing.") + else + pass("All related closet icon states exist.") + return TRUE + +/datum/unit_test/icon_test/closets/mapped_closets_shall_have_invalid_icon_states + name = "ICON STATES: Mapped closets shall not have altered icon states" + +/datum/unit_test/icon_test/closets/mapped_closets_shall_have_invalid_icon_states/start_test() + var/invalid_states = 0 + var/checked_closets = 0 + for(var/obj/structure/closet/C in world) + checked_closets++ + var/list/valid_icon_states = list() + for(var/closet_suffix in closet_state_suffixes) + valid_icon_states |= "[initial(C.icon_state)][closet_state_suffixes[closet_suffix]]" + if(C.icon_state in valid_icon_states) + continue + + invalid_states++ + log_unit_test("Mapped closet [C] at [C.x], [C.y], [C.z] had an invalid icon_state defined: [C.icon_state]!") + + if(invalid_states) + fail("Found [invalid_states] / [checked_closets] mapped closets with invalid mapped icon states!") + else + pass("All mapped closets had valid icon states.") + + return TRUE + +#define UNDERSCORE_OR_NULL(target) "[target ? "[target]_" : ""]" +/datum/unit_test/icon_test/hardsuit_sprite_test + name = "ICON STATES: Hardsuit Sprite Test" + +/datum/unit_test/icon_test/hardsuit_sprite_test/start_test() + for(var/rig_path in subtypesof(/obj/item/rig)) + var/obj/item/rig/R = new rig_path + var/list/rig_states = icon_states(R.icon) + + if(!(R.icon_state in rig_states)) + fail("[R.name]'s module icon_state isn't in its icon file.") + if(!("[R.icon_state]_ba" in rig_states)) + fail("[R.name]'s on-back module icon_state isn't in its icon file.") + + var/list/species_to_check = list("") // blank means default, human + if(length(R.icon_supported_species_tags)) + species_to_check += R.icon_supported_species_tags + + if(R.helm_type) + if(!("[R.icon_state]_helmet" in rig_states)) + fail("[R.name]'s helmet icon_state isn't in its icon file.") + if(!("[R.icon_state]_sealed_helmet" in rig_states)) + fail("[R.name]'s sealed helmet icon_state isn't in its icon file.") + if(R.suit_type) + if(!("[R.icon_state]_suit" in rig_states)) + fail("[R.name]'s suit icon_state isn't in its icon file.") + if(!("[R.icon_state]_sealed_suit" in rig_states)) + fail("[R.name]'s sealed suit icon_state isn't in its icon file.") + if(R.glove_type) + if(!("[R.icon_state]_gloves" in rig_states)) + fail("[R.name]'s gloves icon_state isn't in its icon file.") + if(!("[R.icon_state]_sealed_gloves" in rig_states)) + fail("[R.name]'s sealed gloves icon_state isn't in its icon file.") + if(R.boot_type) + if(!("[R.icon_state]_shoes" in rig_states)) + fail("[R.name]'s shoes icon_state isn't in its icon file.") + if(!("[R.icon_state]_sealed_shoes" in rig_states)) + fail("[R.name]'s sealed shoes icon_state isn't in its icon file.") + + for(var/short in species_to_check) + short = UNDERSCORE_OR_NULL(short) + if(R.helm_type) + if(!("[short][R.icon_state]_he" in rig_states)) + fail("[short] [R.name]'s helmet item_state isn't in its icon file.") + if(!("[short][R.icon_state]_sealed_he" in rig_states)) + fail("[short] [R.name]'s sealed helmet item_state isn't in its icon file.") + if(R.suit_type) + if(!("[short][R.icon_state]_su" in rig_states)) + fail("[short] [R.name]'s suit item_state isn't in its icon file.") + if(!("[short][R.icon_state]_sealed_su" in rig_states)) + fail("[short] [R.name]'s sealed suit item_state isn't in its icon file.") + if(R.glove_type) + if(!("[short][R.icon_state]_gl" in rig_states)) + fail("[short] [R.name]'s gloves item_state isn't in its icon file.") + if(!("[short][R.icon_state]_sealed_gl" in rig_states)) + fail("[short] [R.name]'s sealed gloves item_state isn't in its icon file.") + if(R.boot_type) + if(!("[short][R.icon_state]_sh" in rig_states)) + fail("[short] [R.name]'s shoes item_state isn't in its icon file.") + if(!("[short][R.icon_state]_sealed_sh" in rig_states)) + fail("[short] [R.name]'s sealed shoes item_state isn't in its icon file.") + + if(!reported) + pass("All hardsuits have their correct sprites.") + + return TRUE + +#undef UNDERSCORE_OR_NULL diff --git a/html/changelogs/wezzy_crate_animations.yml b/html/changelogs/wezzy_crate_animations.yml new file mode 100644 index 00000000000..f80b4311c70 --- /dev/null +++ b/html/changelogs/wezzy_crate_animations.yml @@ -0,0 +1,47 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +# admin +# backend +# security +# refactor +################################# + +# Your name. +author: Wowzewow (Wezzy), monster860 + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds cool animations to opening and closing crates." + - soundadd: "Adds new sounds for opening and closing some cabinets and crates." + - imageadd: "Resprites crates to look more swanky." + - refactor: "Loot crates (A.K.A. Unusual Containers) should now spawn with more unique sprites." + - rscadd: "Adds animation to opening and closing lockers and body bags." + - refactor: "Refactors Crate and Locker code to be more internally consistent." + - rscdel: "Removed Electropack Crate rigging mechanic for being unused and eating cable coils." \ No newline at end of file diff --git a/icons/obj/bodybag.dmi b/icons/obj/bodybag.dmi index f693b9ffb3d..7a47440b9be 100644 Binary files a/icons/obj/bodybag.dmi and b/icons/obj/bodybag.dmi differ diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi index ef6c3b3c111..439f7011ed2 100644 Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ diff --git a/icons/obj/crate.dmi b/icons/obj/crate.dmi new file mode 100644 index 00000000000..99011c947fb Binary files /dev/null and b/icons/obj/crate.dmi differ diff --git a/icons/obj/cryobag.dmi b/icons/obj/cryobag.dmi deleted file mode 100644 index a3561e106ee..00000000000 Binary files a/icons/obj/cryobag.dmi and /dev/null differ diff --git a/icons/obj/guncabinet.dmi b/icons/obj/guncabinet.dmi index 354a7c75f07..66c758917a5 100644 Binary files a/icons/obj/guncabinet.dmi and b/icons/obj/guncabinet.dmi differ diff --git a/icons/obj/lockwall.dmi b/icons/obj/lockwall.dmi deleted file mode 100644 index 25d96436d19..00000000000 Binary files a/icons/obj/lockwall.dmi and /dev/null differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index aa3b668b698..32615685f79 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/walllocker.dmi b/icons/obj/walllocker.dmi index 51b2dddcd5c..09e6194393a 100644 Binary files a/icons/obj/walllocker.dmi and b/icons/obj/walllocker.dmi differ diff --git a/maps/_common/areas/station/security.dm b/maps/_common/areas/station/security.dm index 7d5a57c1cf7..db8289602ad 100644 --- a/maps/_common/areas/station/security.dm +++ b/maps/_common/areas/station/security.dm @@ -26,7 +26,7 @@ /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.update_icon() for(var/obj/machinery/door_timer/temp_timer in src) temp_timer.releasetime = 1 ..() @@ -56,7 +56,7 @@ /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.update_icon() for(var/obj/machinery/door_timer/temp_timer in src) temp_timer.releasetime = 1 ..() diff --git a/maps/aurora/aurora-1_centcomm.dmm b/maps/aurora/aurora-1_centcomm.dmm index 4d75d1583b7..f695b230f1e 100644 --- a/maps/aurora/aurora-1_centcomm.dmm +++ b/maps/aurora/aurora-1_centcomm.dmm @@ -629,7 +629,7 @@ /obj/item/stack/medical/splint, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/bruise_pack, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -28 }, /turf/unsimulated/floor{ @@ -2797,14 +2797,8 @@ /turf/template_noop, /area/template_noop) "ala" = ( -/obj/structure/closet/secure_closet{ +/obj/structure/closet/secure_closet/cabinet{ anchored = 1; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective_locked"; name = "legate's closet"; req_access = list(108,111) }, @@ -3985,12 +3979,6 @@ /area/centcom/holding) "awE" = ( /obj/structure/closet/secure_closet{ - icon_broken = "secbroken"; - icon_closed = "sec"; - icon_locked = "sec1"; - icon_off = "secoff"; - icon_opened = "secopen"; - icon_state = "sec1"; name = "equipment locker" }, /turf/unsimulated/floor{ @@ -5987,7 +5975,7 @@ pixel_x = -12; pixel_y = 2 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -33; pixel_y = 3; @@ -7861,7 +7849,7 @@ }, /area/centcom/holding) "bjP" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 30 }, /obj/effect/floor_decal/corner/red/diagonal, @@ -7967,7 +7955,7 @@ /obj/structure/undies_wardrobe{ anchored = 1; icon = 'icons/obj/storage.dmi'; - icon_state = "dropcrate-grey"; + icon_state = "drop_crate-grey"; name = "underwear crate" }, /turf/unsimulated/floor{ @@ -8216,10 +8204,7 @@ /turf/simulated/floor/carpet/blue, /area/centcom/ferry) "bvr" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -9316,11 +9301,7 @@ /obj/item/ladder_mobile{ pixel_y = 6 }, -/obj/structure/closet{ - icon_closed = "toolcloset"; - icon_opened = "toolclosetopen"; - icon_state = "toolcloset" - }, +/obj/structure/closet/toolcloset/empty, /obj/structure/lattice/catwalk/indoor/grate, /obj/item/pickaxe/jackhammer, /obj/item/pickaxe/jackhammer, @@ -9441,8 +9422,7 @@ /area/centcom/legion/hangar5) "clq" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -11628,8 +11608,7 @@ /area/centcom/ferry) "dIG" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "megacorp clothing" }, /obj/item/clothing/under/rank/einstein_engines, @@ -13142,7 +13121,7 @@ /obj/machinery/sleeper{ dir = 8 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = 30; pixel_y = -1; @@ -13973,7 +13952,6 @@ /area/centcom/control) "feA" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -14453,22 +14431,7 @@ icon_state = "grate_light_dam2" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/clothing/mask/offworlder, +/obj/structure/closet/emcloset/offworlder, /turf/unsimulated/floor/plating, /area/antag/raider) "fvg" = ( @@ -16202,8 +16165,7 @@ /area/shuttle/administration) "gtA" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "misc clothing" }, /obj/item/clothing/mask/pig, @@ -20998,17 +20960,7 @@ /obj/structure/window/reinforced/crescent{ dir = 8 }, -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/storage/pill_bottle/rmt, +/obj/structure/closet/emcloset/offworlder, /turf/unsimulated/floor, /area/antag/burglar) "jvU" = ( @@ -21050,7 +21002,7 @@ /turf/space/dynamic, /area/shuttle/mercenary) "jyc" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = 30 }, /obj/structure/bed/stool/chair/shuttle, @@ -21293,34 +21245,14 @@ }, /area/antag/mercenary) "jFk" = ( -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, +/obj/structure/closet/emcloset/offworlder, /obj/effect/floor_decal/industrial/outline/yellow, /turf/unsimulated/floor{ icon_state = "new_reinforced" }, /area/antag/mercenary) "jFq" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -23836,7 +23768,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -33; pixel_y = 34; @@ -26722,8 +26654,7 @@ dir = 1 }, /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "\improper FIB tactical gear" }, /obj/item/clothing/gloves/swat/tactical, @@ -28049,10 +27980,7 @@ }, /area/shuttle/mercenary) "nRM" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "sol clothing" }, /obj/item/clothing/under/rank/fatigues, @@ -29010,8 +28938,7 @@ /area/centcom/legion) "ozg" = ( /obj/structure/closet{ - icon_closed = "white"; - icon_state = "white"; + icon_door = "white"; name = "Fresh Scrubs" }, /obj/item/clothing/under/rank/medical/blue, @@ -29727,10 +29654,7 @@ /turf/simulated/floor/tiled/ramp, /area/shuttle/administration) "oZm" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -30147,10 +30071,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/administration) "prI" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -30562,7 +30483,7 @@ /turf/unsimulated/floor, /area/centcom/legion/hangar5) "pEo" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -29; pixel_y = 30; @@ -30704,8 +30625,7 @@ icon_state = "tube1" }, /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "spare modules" }, /turf/unsimulated/floor{ @@ -30793,10 +30713,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/merchant) "pIu" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -30890,10 +30807,7 @@ /turf/space/transit/west, /area/template_noop) "pKR" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -31090,7 +31004,6 @@ /area/shuttle/merchant) "pSH" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -33589,7 +33502,6 @@ /area/centcom/ferry) "rLu" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -33861,7 +33773,6 @@ dir = 1 }, /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -37407,7 +37318,7 @@ /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/bruise_pack, /obj/item/reagent_containers/hypospray/autoinjector/survival, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -28 }, /turf/simulated/floor/shuttle/black, @@ -37912,7 +37823,7 @@ dir = 4; pixel_x = 11 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "medical supplies"; pixel_x = 28; req_access = null @@ -38825,7 +38736,6 @@ "vrw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/trashcart{ - icon_state = "trashcartopen"; opened = 1 }, /obj/item/trash/koisbar{ @@ -39256,8 +39166,7 @@ /area/centcom/legion/hangar5) "vKR" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -40511,7 +40420,6 @@ /area/antag/mercenary) "wrQ" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -41289,7 +41197,7 @@ /obj/item/reagent_containers/blood/OMinus, /obj/item/reagent_containers/blood/OMinus, /obj/item/storage/firstaid/regular, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = 31; pixel_y = 32 }, diff --git a/maps/aurora/aurora-2_under-station.dmm b/maps/aurora/aurora-2_under-station.dmm index dd1db7132b3..d783430ffb4 100644 --- a/maps/aurora/aurora-2_under-station.dmm +++ b/maps/aurora/aurora-2_under-station.dmm @@ -89,7 +89,7 @@ /area/engineering/cooling) "jT" = ( /obj/structure/table/standard, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = 32 }, /obj/item/stack/medical/ointment, diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm index c941c8b313e..e200983e5d9 100644 --- a/maps/aurora/aurora-3_sublevel.dmm +++ b/maps/aurora/aurora-3_sublevel.dmm @@ -10425,7 +10425,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt, @@ -10722,7 +10722,7 @@ /turf/simulated/floor/tiled/white, /area/rnd/xenoarch_atrium) "atC" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -30 }, /obj/effect/floor_decal/industrial/warning{ @@ -30101,10 +30101,7 @@ /turf/simulated/floor/airless, /area/mine/unexplored) "jVc" = ( -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed"; +/obj/structure/closet/cabinet{ name = "Clothing Storage" }, /turf/simulated/floor/wood, @@ -32060,7 +32057,7 @@ /area/maintenance/medsublevel) "nKe" = ( /obj/effect/floor_decal/corner/white/diagonal, -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 30 }, /obj/item/storage/toolbox/emergency, diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index 2a74ea7846d..2ac044c0c83 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -1757,7 +1757,7 @@ /turf/simulated/floor/plating, /area/maintenance/vault) "adG" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = 30 }, /obj/item/stack/medical/ointment, @@ -6055,7 +6055,7 @@ /obj/effect/floor_decal/corner_wide/mauve/full{ dir = 8 }, -/obj/structure/closet/secure_closet/sciguncabinet, +/obj/structure/closet/secure_closet/guncabinet/sci, /turf/simulated/floor/tiled/dark, /area/rnd/strongroom) "amb" = ( @@ -7627,7 +7627,7 @@ /turf/simulated/floor/tiled, /area/engineering/atmos/storage) "aoW" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -32 }, /turf/simulated/floor/plating, @@ -8329,7 +8329,7 @@ c_tag = "Engineering - Atmospherics Locker Room"; dir = 8 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = 32 }, /obj/item/stack/medical/bruise_pack, @@ -11871,7 +11871,7 @@ /turf/simulated/floor/tiled, /area/engineering/locker_room) "awa" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = 32 }, /obj/item/stack/medical/bruise_pack, @@ -22327,7 +22327,7 @@ /turf/simulated/floor/plating, /area/engineering/engine_room) "aMB" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = -32 }, /turf/simulated/floor/plating, @@ -23195,7 +23195,7 @@ /turf/simulated/floor/tiled, /area/bridge) "aOd" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = -32 }, /obj/item/stack/medical/bruise_pack, @@ -26949,7 +26949,7 @@ /area/maintenance/maintcentral) "aUt" = ( /obj/random/junk, -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 32 }, /turf/simulated/floor/plating, @@ -31248,7 +31248,7 @@ /turf/simulated/floor/tiled/dark, /area/medical/icu) "bca" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "O- Blood Locker"; pixel_y = 32 }, @@ -32048,7 +32048,7 @@ /turf/simulated/floor/plating, /area/medical/icu) "bdC" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Stabilization Kit"; pixel_x = -32 }, @@ -35912,7 +35912,7 @@ /turf/simulated/floor/tiled/white, /area/medical/pharmacy) "bke" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Medication Closet"; pixel_x = -32 }, @@ -42628,7 +42628,7 @@ /area/medical/first_responder) "bxx" = ( /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Stabilization Kit"; pixel_y = 32 }, @@ -42659,7 +42659,7 @@ /area/medical/first_responder) "bxz" = ( /obj/effect/floor_decal/industrial/hatch/yellow, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Medication Closet"; pixel_y = 32 }, @@ -49300,7 +49300,7 @@ /turf/simulated/floor/plating, /area/maintenance/bar) "bMW" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -32 }, /turf/simulated/floor/plating, @@ -51577,7 +51577,7 @@ /area/hallway/primary/aft) "bTn" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/closet/secure_closet/bar, +/obj/structure/closet/secure_closet/cabinet/bar, /turf/simulated/floor/wood, /area/crew_quarters/bar) "bTo" = ( @@ -59119,11 +59119,7 @@ "cJo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/costume/imperium_monk, -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/cabinet, /turf/simulated/floor/wood, /area/maintenance/bar) "cJN" = ( @@ -61360,7 +61356,7 @@ /area/maintenance/cargo) "gHJ" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ desc = "It's wall-mounted storage unit for medical supplies. It has almost come off its mounts."; name = "Dilapitated medical closet"; pixel_y = -32 @@ -61801,11 +61797,7 @@ /obj/item/clothing/shoes/mime, /obj/item/clothing/under/mime, /obj/item/toy/figure/mime, -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/cabinet, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, /area/maintenance/bar) @@ -63385,11 +63377,7 @@ "kQn" = ( /obj/effect/landmark/costume/commie, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/cabinet, /turf/simulated/floor/wood, /area/maintenance/bar) "kRp" = ( @@ -63596,11 +63584,7 @@ /area/rnd/lab) "liM" = ( /obj/item/toy/figure/clown, -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/cabinet, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood, /area/maintenance/bar) @@ -64025,11 +64009,17 @@ /obj/item/clipboard, /obj/item/pen/multi, /obj/item/device/camera, -/obj/structure/closet/lawcloset{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" +/obj/structure/closet/cabinet{ + name = "legal closet"; + desc = "It's a storage unit for courtroom apparel and items."; }, +/obj/item/clothing/under/lawyer/black, +/obj/item/clothing/under/lawyer/red, +/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket, +/obj/item/clothing/under/lawyer/purple, +/obj/item/clothing/suit/storage/lawyer/purpjacket, +/obj/item/clothing/shoes/brown, +/obj/item/clothing/shoes/black, /obj/structure/cable/green{ icon_state = "2-4" }, @@ -64244,7 +64234,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ desc = "It's a secure wall-mounted storage unit for first aid supplies. It looks neglected."; name = "Dusty Medication Closet"; pixel_x = -32 @@ -65071,11 +65061,7 @@ "nXe" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/costume/gladiator, -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/cabinet, /turf/simulated/floor/wood, /area/maintenance/bar) "nXX" = ( @@ -67016,7 +67002,6 @@ /area/maintenance/security_starboard) "rlA" = ( /obj/structure/closet/crate/trashcart{ - icon_state = "trashcartopen"; opened = 1 }, /obj/item/shreddedp, @@ -67732,11 +67717,7 @@ "szC" = ( /obj/effect/landmark/costume/elpresidente, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/cabinet, /turf/simulated/floor/wood, /area/maintenance/bar) "sAC" = ( @@ -70397,7 +70378,7 @@ /turf/simulated/wall, /area/lawoffice/representative) "wzO" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -30 }, /turf/simulated/floor/plating, diff --git a/maps/aurora/aurora-5_interstitial.dmm b/maps/aurora/aurora-5_interstitial.dmm index 84d5c198e14..4d7078a63a2 100644 --- a/maps/aurora/aurora-5_interstitial.dmm +++ b/maps/aurora/aurora-5_interstitial.dmm @@ -11681,12 +11681,6 @@ /area/maintenance/medbay_interstitial) "YU" = ( /obj/structure/closet/secure_closet/freezer{ - icon_broken = "fridgebroken"; - icon_closed = "fridge"; - icon_locked = "fridge1"; - icon_off = "fridgeoff"; - icon_opened = "fridgeopen"; - icon_state = "fridge1"; name = "refrigerator" }, /obj/effect/floor_decal/corner/grey/diagonal, diff --git a/maps/aurora/aurora-6_surface.dmm b/maps/aurora/aurora-6_surface.dmm index 607abc67c67..8b0e59c58da 100644 --- a/maps/aurora/aurora-6_surface.dmm +++ b/maps/aurora/aurora-6_surface.dmm @@ -2376,7 +2376,7 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/aft) "bPl" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = -32 }, /obj/item/stack/medical/ointment, @@ -8590,7 +8590,7 @@ /obj/effect/floor_decal/corner/lime/full{ dir = 8 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = 31 }, /obj/item/bodybag/cryobag, @@ -9337,7 +9337,7 @@ /turf/simulated/floor/plating, /area/quartermaster/loading) "ibJ" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 28; pixel_y = -4 }, @@ -15080,7 +15080,7 @@ /area/hallway/secondary/entry/departure_lounge) "neq" = ( /obj/structure/bed/roller, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = 30; pixel_y = -30; @@ -19236,7 +19236,7 @@ /turf/simulated/open, /area/maintenance/substation/civilian_east) "qCa" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -32 }, /turf/simulated/floor/plating, @@ -26221,12 +26221,7 @@ }, /obj/effect/floor_decal/corner/blue/diagonal, /obj/structure/closet/secure_closet/freezer{ - icon_broken = "fridgebroken"; - icon_closed = "fridge"; - icon_locked = "fridge1"; - icon_off = "fridge1"; - icon_opened = "fridgeopen"; - icon_state = "fridge1"; + icon_state = "freezer" name = "cafe fridge" }, /obj/machinery/button/remote/blast_door{ @@ -26462,7 +26457,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -32 }, /obj/item/stack/medical/bruise_pack, diff --git a/maps/away/romanovich/first_aurora.dmm b/maps/away/romanovich/first_aurora.dmm index d1a749446dc..8850d28abf8 100644 --- a/maps/away/romanovich/first_aurora.dmm +++ b/maps/away/romanovich/first_aurora.dmm @@ -1495,7 +1495,7 @@ /turf/template_noop, /area/derelict/hallway/northeast) "fi" = ( -/obj/structure/closet/coffin, +/obj/structure/closet/crate/coffin, /turf/simulated/floor/tiled/airless, /area/template_noop) "fk" = ( @@ -1587,7 +1587,7 @@ /turf/template_noop, /area/derelict/hallway/northeast) "fv" = ( -/obj/structure/closet/coffin, +/obj/structure/closet/crate/coffin, /obj/structure/window/reinforced, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/airless, diff --git a/maps/away/romanovich/grand_romanovich.dmm b/maps/away/romanovich/grand_romanovich.dmm index 901919c51e4..8c8eb4ff872 100644 --- a/maps/away/romanovich/grand_romanovich.dmm +++ b/maps/away/romanovich/grand_romanovich.dmm @@ -7965,7 +7965,7 @@ /turf/simulated/floor/tiled/freezer, /area/grand_romanovich) "XX" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -29; pixel_y = 30; diff --git a/maps/dungeon_spawns/coc_ship_unique.dmm b/maps/dungeon_spawns/coc_ship_unique.dmm index bb31a9edfe3..52acdd591c8 100644 --- a/maps/dungeon_spawns/coc_ship_unique.dmm +++ b/maps/dungeon_spawns/coc_ship_unique.dmm @@ -1059,7 +1059,7 @@ unlocked = 1 }, /obj/effect/decal/cleanable/liquid_fuel, -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = 30 }, /turf/simulated/floor/plating, @@ -1846,7 +1846,7 @@ /turf/unsimulated/floor/asteroid/ash/rocky, /area/dungeon/crashed_ship) "TE" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_y = 32; req_access = null; diff --git a/maps/dungeon_spawns/shuttle_unique.dmm b/maps/dungeon_spawns/shuttle_unique.dmm index db78e0cd2ae..8972ebcf7ab 100644 --- a/maps/dungeon_spawns/shuttle_unique.dmm +++ b/maps/dungeon_spawns/shuttle_unique.dmm @@ -143,7 +143,7 @@ /turf/simulated/floor/tiled/dark, /area/dungeon/crashed_ship) "av" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ pixel_x = -32; req_access = list(150) }, @@ -387,7 +387,7 @@ /area/dungeon/crashed_ship) "bg" = ( /obj/effect/floor_decal/industrial/hatch/red, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood locker"; pixel_x = 32 }, diff --git a/maps/dungeon_spawns/skrell_crash_unique.dmm b/maps/dungeon_spawns/skrell_crash_unique.dmm index bd5c29ff9f3..1057669ec7a 100644 --- a/maps/dungeon_spawns/skrell_crash_unique.dmm +++ b/maps/dungeon_spawns/skrell_crash_unique.dmm @@ -286,7 +286,7 @@ /turf/simulated/floor/shuttle/skrell/blue, /area/dungeon/skrell_ship) "aZ" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ desc = "It's wall-mounted storage unit for medical supplies. It has almost come off its mounts."; name = "Dilapitated medical closet"; pixel_y = -32 diff --git a/maps/dungeon_spawns/sol_ship_unique.dmm b/maps/dungeon_spawns/sol_ship_unique.dmm index d4470039645..d25d23387d0 100644 --- a/maps/dungeon_spawns/sol_ship_unique.dmm +++ b/maps/dungeon_spawns/sol_ship_unique.dmm @@ -517,7 +517,7 @@ req_access = list(150) }, /obj/random/weapon_and_ammo, -/obj/structure/closet/crate/secure/weapon{ +/obj/structure/closet/crate/secure/weapon/alt{ req_access = list(150) }, /obj/item/clothing/accessory/storage/bayonet, diff --git a/maps/event/odin_departure/odin_depature-1.dmm b/maps/event/odin_departure/odin_depature-1.dmm index 29b1e2da000..23b610ed928 100644 --- a/maps/event/odin_departure/odin_depature-1.dmm +++ b/maps/event/odin_departure/odin_depature-1.dmm @@ -629,7 +629,7 @@ /obj/item/stack/medical/splint, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/bruise_pack, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -28 }, /turf/unsimulated/floor{ @@ -2799,12 +2799,6 @@ "ala" = ( /obj/structure/closet/secure_closet{ anchored = 1; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective_locked"; name = "legate's closet"; req_access = list(108,111) }, @@ -3993,12 +3987,6 @@ /area/centcom/holding) "awE" = ( /obj/structure/closet/secure_closet{ - icon_broken = "secbroken"; - icon_closed = "sec"; - icon_locked = "sec1"; - icon_off = "secoff"; - icon_opened = "secopen"; - icon_state = "sec1"; name = "equipment locker" }, /turf/unsimulated/floor{ @@ -6022,7 +6010,7 @@ pixel_x = -12; pixel_y = 2 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -33; pixel_y = 3; @@ -7921,7 +7909,7 @@ }, /area/centcom/holding) "bjP" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 30 }, /obj/effect/floor_decal/corner/red/diagonal, @@ -8027,7 +8015,7 @@ /obj/structure/undies_wardrobe{ anchored = 1; icon = 'icons/obj/storage.dmi'; - icon_state = "dropcrate-grey"; + icon_state = "drop_crate-grey"; name = "underwear crate" }, /turf/unsimulated/floor{ @@ -8276,10 +8264,7 @@ /turf/simulated/floor/carpet/blue, /area/centcom/ferry) "bvr" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -9392,11 +9377,7 @@ /obj/item/ladder_mobile{ pixel_y = 6 }, -/obj/structure/closet{ - icon_closed = "toolcloset"; - icon_opened = "toolclosetopen"; - icon_state = "toolcloset" - }, +/obj/structure/closet/toolcloset/empty, /obj/structure/lattice/catwalk/indoor/grate, /obj/item/pickaxe/jackhammer, /obj/item/pickaxe/jackhammer, @@ -9517,8 +9498,7 @@ /area/centcom/legion/hangar5) "clq" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -11704,8 +11684,7 @@ /area/centcom/ferry) "dIG" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "megacorp clothing" }, /obj/item/clothing/under/rank/einstein_engines, @@ -13245,7 +13224,7 @@ /obj/machinery/sleeper{ dir = 8 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = 30; pixel_y = -1; @@ -14083,7 +14062,6 @@ /area/centcom/control) "feA" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -14595,22 +14573,7 @@ icon_state = "grate_light_dam2" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/clothing/mask/offworlder, +/obj/structure/closet/emcloset/offworlder, /turf/unsimulated/floor/plating, /area/antag/raider) "fvg" = ( @@ -16368,8 +16331,7 @@ /area/shuttle/administration) "gtA" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "misc clothing" }, /obj/item/clothing/mask/pig, @@ -21275,17 +21237,7 @@ /obj/structure/window/reinforced/crescent{ dir = 8 }, -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/storage/pill_bottle/rmt, +/obj/structure/closet/emcloset/offworlder, /turf/unsimulated/floor, /area/antag/burglar) "jvU" = ( @@ -21327,7 +21279,7 @@ /turf/space/dynamic, /area/shuttle/mercenary) "jyc" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = 30 }, /obj/structure/bed/chair/shuttle, @@ -21570,34 +21522,14 @@ }, /area/antag/mercenary) "jFk" = ( -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, +/obj/structure/closet/emcloset/offworlder, /obj/effect/floor_decal/industrial/outline/yellow, /turf/unsimulated/floor{ icon_state = "new_reinforced" }, /area/antag/mercenary) "jFq" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -24158,7 +24090,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -33; pixel_y = 34; @@ -27127,8 +27059,7 @@ dir = 1 }, /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "\improper FIB tactical gear" }, /obj/item/clothing/gloves/swat/tactical, @@ -28454,10 +28385,7 @@ }, /area/shuttle/mercenary) "nRM" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "sol clothing" }, /obj/item/clothing/under/rank/fatigues, @@ -29412,8 +29340,7 @@ /area/centcom/legion) "ozg" = ( /obj/structure/closet{ - icon_closed = "white"; - icon_state = "white"; + icon_door = "white"; name = "Fresh Scrubs" }, /obj/item/clothing/under/rank/medical/blue, @@ -30129,10 +30056,7 @@ /turf/simulated/floor/tiled/ramp, /area/shuttle/administration) "oZm" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -30549,10 +30473,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/administration) "prI" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -30967,7 +30888,7 @@ /turf/unsimulated/floor, /area/centcom/legion/hangar5) "pEo" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -29; pixel_y = 30; @@ -31109,8 +31030,7 @@ icon_state = "tube1" }, /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "spare modules" }, /turf/unsimulated/floor{ @@ -31198,10 +31118,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/merchant) "pIu" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -31295,10 +31212,7 @@ /turf/space/transit/west, /area/template_noop) "pKR" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -31495,7 +31409,6 @@ /area/shuttle/merchant) "pSH" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -34025,7 +33938,6 @@ /area/centcom/ferry) "rLu" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -34297,7 +34209,6 @@ dir = 1 }, /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -37907,7 +37818,7 @@ /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/bruise_pack, /obj/item/reagent_containers/hypospray/autoinjector/survival, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -28 }, /turf/simulated/floor/shuttle/black, @@ -38418,7 +38329,7 @@ dir = 4; pixel_x = 11 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "medical supplies"; pixel_x = 28; req_access = null @@ -39342,7 +39253,6 @@ "vrw" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/trashcart{ - icon_state = "trashcartopen"; opened = 1 }, /obj/item/trash/koisbar{ @@ -39773,8 +39683,7 @@ /area/centcom/legion/hangar5) "vKR" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -41028,7 +40937,6 @@ /area/antag/mercenary) "wrQ" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -41822,7 +41730,7 @@ /obj/item/reagent_containers/blood/OMinus, /obj/item/reagent_containers/blood/OMinus, /obj/item/storage/firstaid/regular, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = 31; pixel_y = 32 }, diff --git a/maps/event/rooftop/rooftop-1.dmm b/maps/event/rooftop/rooftop-1.dmm index 5adcb6a6372..a9824a7418d 100644 --- a/maps/event/rooftop/rooftop-1.dmm +++ b/maps/event/rooftop/rooftop-1.dmm @@ -36,7 +36,7 @@ "bZ" = (/obj/machinery/light/small{dir = 1},/obj/structure/railing/mapped{dir = 1},/turf/unsimulated/floor{icon_state = "tiles_small"; name = "small tiles"},/area/city/mendell/interior) "cd" = (/obj/machinery/button/remote/airlock{dir = 8; id = "q5"; name = "Door Bolt Control"; pixel_x = -22; pixel_y = -23; specialfunctions = 4},/turf/unsimulated/floor{icon_state = "wood_light"},/area/city/mendell/interior) "ci" = (/obj/structure/signpost{desc = "An informative signpost indicating that northwards leads to scenario selection."; name = "directions"},/turf/simulated/floor/bluegrid,/area/city/mendell) -"cj" = (/obj/machinery/light/small,/obj/structure/closet/secure_closet/bar,/turf/simulated/floor/tiled/white,/area/city/mendell/interior) +"cj" = (/obj/machinery/light/small,/obj/structure/closet/secure_closet/cabinet/bar,/turf/simulated/floor/tiled/white,/area/city/mendell/interior) "cm" = (/obj/structure/railing/mapped{dir = 8},/turf/simulated/floor/tiled/dark,/area/city/mendell/interior) "cr" = (/obj/structure/railing/mapped{dir = 1},/obj/structure/railing/mapped{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/wood,/area/city/mendell/interior) "cw" = (/obj/structure/railing/mapped{dir = 1},/obj/structure/railing/mapped{dir = 8},/turf/simulated/floor/beach/water/pool,/area/city/mendell/interior) @@ -233,7 +233,7 @@ "lL" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/marble/dark,/area/city/mendell/interior) "lP" = (/obj/machinery/light/small{dir = 8},/obj/effect/decal/fake_object{desc = "A nondescript vent."; icon = 'icons/effects/city.dmi'; icon_state = "vent"; layer = 2.7; name = "wall vent"; pixel_x = 6; pixel_y = 25},/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "wood_birch"},/area/city/mendell/interior) "lR" = (/obj/structure/bed/stool/chair/wood{dir = 8},/obj/effect/decal/fake_object{desc = "A beautiful sign denoting you as being in the Hotel Montparnasse!"; icon = 'icons/effects/city.dmi'; icon_state = "sign2"; name = "glamorous sign"; pixel_y = 33},/turf/simulated/floor/lino/grey,/area/city/mendell/interior) -"lV" = (/obj/structure/closet/secure_closet/bar,/turf/simulated/floor/tiled/white,/area/city/mendell/interior) +"lV" = (/obj/structure/closet/secure_closet/cabinet/bar,/turf/simulated/floor/tiled/white,/area/city/mendell/interior) "ma" = (/obj/structure/table/standard,/obj/machinery/vending/wallmed1{pixel_x = 27; req_access = null},/obj/effect/floor_decal/corner/paleblue/diagonal,/obj/item/reagent_containers/glass/bottle/bicaridine{pixel_x = -8},/obj/item/reagent_containers/glass/bottle/dermaline{pixel_x = 9},/obj/item/reagent_containers/glass/bottle/inaprovaline,/obj/item/reagent_containers/glass/bottle/thetamycin{layer = 2.99; pixel_x = 9; pixel_y = 7},/obj/item/reagent_containers/glass/bottle/antitoxin{layer = 2.99; pixel_y = 7},/obj/item/reagent_containers/glass/bottle/dexalin_plus{pixel_x = 9; pixel_y = -11},/turf/unsimulated/floor{icon_state = "new_white"},/area/city/mendell) "mf" = (/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/item/card/id/syndicate,/obj/structure/table/rack,/obj/effect/floor_decal/industrial/hatch,/turf/simulated/floor/tiled/dark,/area/city/mendell) "mo" = (/obj/effect/decal/fake_object{desc = "A nondescript decorative shelf."; icon = 'icons/effects/city.dmi'; icon_state = "shelf"; layer = 2.7; name = "shelf"; pixel_y = 35},/obj/structure/table/wood,/obj/effect/decal/fake_object{desc = "An expensive flatscreen holo-television. This one's connection to the extranet seems to be severed."; dir = 4; icon = 'icons/effects/city.dmi'; icon_state = "flatscreen"; name = "expensive flatscreen holovision"; pixel_y = 15},/obj/effect/decal/fake_object{desc = "A nondescript vent."; icon = 'icons/effects/city.dmi'; icon_state = "vent"; layer = 2.7; name = "wall vent"; pixel_x = 6; pixel_y = 25},/turf/simulated/floor/carpet,/area/city/mendell/interior) @@ -455,7 +455,7 @@ "xM" = (/obj/structure/closet/cabinet,/obj/item/towel,/obj/item/towel,/obj/item/towel,/obj/item/towel,/obj/item/towel,/obj/item/storage/box/fancy/candle_box,/obj/item/reagent_containers/food/drinks/waterbottle,/obj/item/reagent_containers/food/drinks/waterbottle,/turf/unsimulated/floor{icon_state = "wood_cherry"},/area/city/mendell/interior) "xP" = (/obj/effect/floor_decal/corner/blue/full{dir = 1},/obj/structure/closet{icon_closed = "blue"; icon_state = "blue"; name = "\improper FIB tactical gear"},/obj/item/clothing/gloves/swat/tactical,/obj/item/clothing/gloves/swat/tactical,/obj/item/clothing/gloves/swat/tactical,/obj/item/clothing/suit/armor/tactical{name = "\improper FIB tactical armor"},/obj/item/clothing/suit/armor/tactical{name = "\improper FIB tactical armor"},/obj/item/clothing/suit/armor/tactical{name = "\improper FIB tactical armor"},/obj/item/clothing/head/helmet/tactical{name = "\improper FIB tactical helmet"},/obj/item/clothing/head/helmet/tactical{name = "\improper FIB tactical helmet"},/obj/item/clothing/head/helmet/tactical{name = "\improper FIB tactical helmet"},/obj/item/clothing/mask/gas/alt,/obj/item/clothing/mask/gas/alt,/obj/item/clothing/mask/gas/alt,/obj/item/clothing/gloves/swat/tactical,/obj/item/clothing/gloves/swat/tactical,/obj/item/clothing/mask/gas/alt,/obj/item/clothing/mask/gas/alt,/obj/item/clothing/suit/armor/tactical{name = "\improper FIB tactical armor"},/obj/item/clothing/suit/armor/tactical{name = "\improper FIB tactical armor"},/obj/item/clothing/head/helmet/tactical{name = "\improper FIB tactical helmet"},/obj/item/clothing/head/helmet/tactical{name = "\improper FIB tactical helmet"},/turf/unsimulated/floor{icon_state = "dark2"},/area/city/mendell) "xQ" = (/obj/effect/rune,/turf/simulated/floor/tiled/dark,/area/city/mendell) -"xR" = (/obj/structure/closet/secure_closet/medical_wall{name = "blood closet"; pixel_x = -29; pixel_y = 30; req_access = null},/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/lime/diagonal,/turf/unsimulated/floor{icon_state = "dark2"},/area/city/mendell) +"xR" = (/obj/structure/closet/walllocker/medical/secure{name = "blood closet"; pixel_x = -29; pixel_y = 30; req_access = null},/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/item/reagent_containers/blood/OMinus,/obj/effect/floor_decal/corner/lime/diagonal,/turf/unsimulated/floor{icon_state = "dark2"},/area/city/mendell) "xW" = (/obj/structure/undies_wardrobe,/obj/structure/sign/securearea{desc = "A warning sign which declares the door to be one way! Don't get trapped."; name = "\improper ONE WAY DOOR"; pixel_x = 28},/turf/unsimulated/floor{icon_state = "wood_light"},/area/city/mendell) "xY" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/wood,/obj/item/storage/box/fancy/cigarettes/cigar,/turf/simulated/floor/tiled/dark,/area/city/mendell/interior) "xZ" = (/obj/item/storage/box/frags,/obj/item/storage/box/frags,/obj/item/storage/box/frags,/obj/item/storage/box/frags,/turf/simulated/floor/reinforced,/area/city/mendell) @@ -573,7 +573,7 @@ "DK" = (/obj/structure/table/rack,/obj/item/reagent_containers/food/snacks/applepie,/obj/item/reagent_containers/food/snacks/applepie,/obj/item/reagent_containers/food/snacks/applepie,/obj/item/reagent_containers/food/snacks/applepie,/obj/item/reagent_containers/food/snacks/appletart,/obj/item/reagent_containers/food/snacks/appletart,/obj/item/reagent_containers/food/snacks/appletart,/obj/item/reagent_containers/food/snacks/appletart,/obj/item/reagent_containers/food/snacks/appletart,/obj/item/reagent_containers/food/snacks/avah,/obj/item/reagent_containers/food/snacks/avah,/obj/item/reagent_containers/food/snacks/avah,/obj/item/reagent_containers/food/snacks/avah,/obj/item/reagent_containers/food/snacks/avah,/obj/item/reagent_containers/food/snacks/avah,/turf/simulated/floor/tiled/white,/area/city/mendell/interior) "DN" = (/obj/effect/floor_decal/corner/blue/full,/obj/structure/table/rack,/obj/item/storage/box/cdeathalarm_kit{pixel_x = 1; pixel_y = 2},/obj/item/device/camera,/obj/item/device/megaphone/sec,/obj/item/device/megaphone/sec,/turf/unsimulated/floor{icon_state = "dark2"},/area/city/mendell) "DP" = (/obj/structure/curtain/black{icon_state = "open"; layer = 4.1; opacity = 0},/turf/unsimulated/floor{icon_state = "wood_willow"},/area/city/mendell/interior) -"Eb" = (/obj/structure/closet/secure_closet/medical_wall{name = "blood closet"; pixel_x = -29; pixel_y = 30; req_access = null},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/city/mendell) +"Eb" = (/obj/structure/closet/walllocker/medical/secure{name = "blood closet"; pixel_x = -29; pixel_y = 30; req_access = null},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/city/mendell) "Ed" = (/obj/machinery/door/airlock/centcom{name = "Executive Suite 7"},/turf/unsimulated/floor{icon_state = "wood_birch"},/area/city/mendell/interior) "Ee" = (/obj/machinery/light/small{dir = 1},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/city/mendell/interior) "Eh" = (/obj/effect/decal/fake_object{desc = "A window overlooking the pristine Mendell City."; icon = 'icons/effects/city.dmi'; icon_state = "win1"; name = "window"; pixel_y = 33},/turf/simulated/floor/tiled/ramp{dir = 8},/area/city/mendell/interior) diff --git a/maps/random_ruins/exoplanets/asteroid/hideout.dmm b/maps/random_ruins/exoplanets/asteroid/hideout.dmm index 59e85051193..36d610f1594 100644 --- a/maps/random_ruins/exoplanets/asteroid/hideout.dmm +++ b/maps/random_ruins/exoplanets/asteroid/hideout.dmm @@ -84,7 +84,7 @@ "MX" = (/obj/random/firstaid,/turf/simulated/floor/tiled/asteroid/airless,/area/exoplanet/barren/asteroid) "Oe" = (/obj/machinery/chemical_dispenser/bar_alc/full{dir = 4; pixel_x = -4},/turf/simulated/floor/tiled/asteroid/airless,/area/exoplanet/barren/asteroid) "Oz" = (/obj/effect/decal/cleanable/blood/drip,/obj/item/ammo_casing/c10mm{projectile_type = null},/turf/simulated/floor/airless,/area/exoplanet/barren/asteroid) -"OE" = (/obj/structure/table/rack,/obj/structure/closet/crate/drop/grey{icon_state = "dropcrate-grey-open"; opened = 1},/turf/simulated/floor/airless,/area/exoplanet/barren/asteroid) +"OE" = (/obj/structure/table/rack,/obj/structure/closet/crate/drop/grey{opened = 1},/turf/simulated/floor/airless,/area/exoplanet/barren/asteroid) "OK" = (/obj/structure/table/wood,/obj/item/reagent_containers/food/drinks/bottle/small/beer,/obj/item/reagent_containers/food/drinks/bottle/small/beer,/obj/item/reagent_containers/food/drinks/bottle/small/beer,/obj/item/reagent_containers/food/drinks/bottle/small/beer,/turf/simulated/floor/tiled/asteroid/airless,/area/exoplanet/barren/asteroid) "PR" = (/turf/simulated/wall,/area/exoplanet/barren/asteroid) "QK" = (/obj/structure/cable{dir = 8},/obj/item/trash/broken_electronics,/turf/simulated/floor/tiled/airless,/area/exoplanet/barren/asteroid) diff --git a/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm b/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm index 180407b8553..8417d5125ae 100644 --- a/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm +++ b/maps/sccv_horizon/backup/placeholder-4_centcomm.dmm @@ -4831,7 +4831,7 @@ }, /area/syndicate_mothership) "amC" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ pixel_x = -32; pixel_y = 0; req_access = list(150) @@ -4862,7 +4862,7 @@ /turf/simulated/floor/shuttle/dark_red, /area/syndicate_station/start) "amF" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = 32 }, /turf/simulated/floor/shuttle/dark_red, @@ -5644,7 +5644,7 @@ /area/syndicate_station/start) "aoj" = ( /obj/structure/table/standard, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ pixel_y = 32; req_access = list(150) }, @@ -6115,7 +6115,7 @@ /obj/item/clothing/mask/surgical, /obj/item/clothing/gloves/latex, /obj/item/surgicaldrill, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ pixel_x = 32; pixel_y = 0; req_access = list(150) @@ -7556,7 +7556,7 @@ /turf/simulated/floor/shuttle/yellow, /area/shuttle/administration/centcom) "auc" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 30; pixel_y = 0 }, @@ -7585,7 +7585,7 @@ /turf/simulated/floor/shuttle/white, /area/shuttle/administration/centcom) "aui" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -30; pixel_y = 0 }, @@ -7647,7 +7647,7 @@ /obj/item/bonesetter, /obj/item/circular_saw, /obj/item/surgicaldrill, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ name = "Surgery Tools"; pixel_x = 32 }, @@ -10856,10 +10856,7 @@ }, /area/centcom/specops) "aAS" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/ert, @@ -11095,10 +11092,7 @@ }, /area/centcom/specops) "aBm" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/ert, @@ -18070,7 +18064,7 @@ }, /area/wizard_station) "aRg" = ( -/obj/structure/closet/coffin, +/obj/structure/closet/crate/coffin, /turf/unsimulated/floor{ dir = 4; icon_state = "carpetside" @@ -19969,7 +19963,7 @@ /turf/simulated/floor/shuttle, /area/shuttle/escape/centcom) "aVJ" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -32 }, /turf/simulated/floor/shuttle/yellow, @@ -20446,7 +20440,7 @@ /turf/simulated/floor/shuttle/black, /area/shuttle/escape/centcom) "aXb" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -32 }, /obj/item/storage/firstaid/brute, @@ -20587,7 +20581,7 @@ /obj/machinery/light{ dir = 8 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -32 }, /turf/simulated/floor/tiled/ramp, @@ -21250,7 +21244,6 @@ /area/centcom/legion) "bCj" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -21561,7 +21554,6 @@ "crr" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/trashcart{ - icon_state = "trashcartopen"; opened = 1 }, /obj/item/trash/koisbar{ @@ -22332,8 +22324,7 @@ /area/shuttle/merchant/start) "dZx" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -23152,7 +23143,6 @@ /area/centcom/legion) "fSo" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -24765,8 +24755,7 @@ /area/merchant_station) "iQk" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -25755,7 +25744,6 @@ /area/shuttle/merchant/start) "kVO" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, diff --git a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm index a38aaa55461..9998156c497 100644 --- a/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm +++ b/maps/sccv_horizon/sccv_horizon-1_deck_1.dmm @@ -4739,7 +4739,7 @@ pixel_y = 29; req_access = null }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = 30; pixel_y = -30; @@ -17766,7 +17766,7 @@ /turf/simulated/floor/plating, /area/maintenance/research_port) "pCD" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = 31 }, /obj/item/bodybag/cryobag, @@ -22621,7 +22621,7 @@ /turf/simulated/floor/tiled, /area/operations/lower/machinist) "tNo" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 28; pixel_y = -4 }, @@ -23673,7 +23673,7 @@ /obj/effect/floor_decal/corner_wide/purple{ dir = 4 }, -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -30 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, diff --git a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm index 414c5d94d08..a3de6c848ea 100644 --- a/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm +++ b/maps/sccv_horizon/sccv_horizon-2_deck_2.dmm @@ -249,7 +249,7 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/structure/closet/secure_closet/bar, +/obj/structure/closet/secure_closet/cabinet, /turf/simulated/floor/wood, /area/crew_quarters/bar) "agY" = ( @@ -771,7 +771,7 @@ /turf/simulated/floor/plating, /area/rnd/xenobiology) "auU" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -30; pixel_y = 31 }, @@ -1218,7 +1218,7 @@ /turf/simulated/floor/plating, /area/maintenance/wing/port/far) "aIy" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Stabilization Kit"; pixel_x = -31 }, @@ -8314,7 +8314,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "fdE" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Medication Closet"; pixel_x = 31 }, @@ -11682,7 +11682,7 @@ /turf/simulated/floor/tiled, /area/security/brig) "haK" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = 32 }, /obj/item/stack/medical/bruise_pack, @@ -15343,7 +15343,7 @@ dir = 6 }, /obj/effect/floor_decal/industrial/warning, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Medication Closet"; pixel_x = 31 }, @@ -21347,7 +21347,7 @@ }, /area/turret_protected/ai_upload_foyer) "nbd" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "Stabilization Kit"; pixel_x = -32 }, @@ -23499,7 +23499,7 @@ dir = 8 }, /obj/machinery/firealarm/south, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "O- Blood Locker"; pixel_x = -32 }, @@ -26990,7 +26990,7 @@ /obj/item/reagent_containers/blood/OMinus, /obj/item/reagent_containers/blood/OMinus, /obj/item/reagent_containers/blood/OMinus, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "O- Blood Locker"; pixel_y = 32 }, @@ -28524,7 +28524,7 @@ /turf/simulated/floor/tiled, /area/storage/primary) "rom" = ( -/obj/structure/closet/secure_closet/sciguncabinet, +/obj/structure/closet/secure_closet/guncabinet/sci, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -32887,7 +32887,7 @@ /obj/item/reagent_containers/blood/OMinus, /obj/item/reagent_containers/blood/OMinus, /obj/item/reagent_containers/blood/OMinus, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "O- Blood Locker"; pixel_y = 32 }, @@ -34059,7 +34059,7 @@ /turf/simulated/floor/tiled, /area/hallway/engineering) "uyP" = ( -/obj/structure/closet/medical_wall, +/obj/structure/closet/walllocker/medical, /turf/simulated/wall/r_wall, /area/engineering/storage_hard) "uzd" = ( @@ -34315,7 +34315,7 @@ /turf/simulated/floor/tiled, /area/operations/lobby) "uGP" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = -32 }, /turf/simulated/floor/plating, @@ -39443,7 +39443,7 @@ /turf/simulated/wall, /area/rnd/hallway) "xzd" = ( -/obj/structure/closet/secure_closet/sciguncabinet, +/obj/structure/closet/secure_closet/guncabinet/sci, /obj/machinery/camera/network/research{ c_tag = "Research - Research Storage"; dir = 4 @@ -39744,11 +39744,11 @@ /area/engineering/engine_room) "xIW" = ( /obj/structure/curtain/black, -/obj/structure/closet/coffin, -/obj/structure/closet/coffin, -/obj/structure/closet/coffin, -/obj/structure/closet/coffin, -/obj/structure/closet/coffin, +/obj/structure/closet/crate/coffin, +/obj/structure/closet/crate/coffin, +/obj/structure/closet/crate/coffin, +/obj/structure/closet/crate/coffin, +/obj/structure/closet/crate/coffin, /obj/machinery/button/remote/blast_door{ id = "massdriver"; layer = 3.2; diff --git a/maps/sccv_horizon/sccv_horizon-3_deck_3.dmm b/maps/sccv_horizon/sccv_horizon-3_deck_3.dmm index b01b918f93f..8d553af11aa 100644 --- a/maps/sccv_horizon/sccv_horizon-3_deck_3.dmm +++ b/maps/sccv_horizon/sccv_horizon-3_deck_3.dmm @@ -5817,11 +5817,7 @@ /obj/item/clipboard, /obj/item/pen/multi, /obj/item/device/camera, -/obj/structure/closet/lawcloset{ - icon_closed = "cabinet_closed"; - icon_opened = "cabinet_open"; - icon_state = "cabinet_closed" - }, +/obj/structure/closet/lawcloset, /turf/simulated/floor/wood, /area/lawoffice/consular) "mZ" = ( @@ -9809,7 +9805,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = 32 }, /obj/item/stack/medical/bruise_pack, @@ -13367,7 +13363,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = -32 }, /obj/item/stack/medical/ointment, @@ -16521,7 +16517,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_y = -32 }, /obj/item/stack/medical/bruise_pack, diff --git a/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm b/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm index d93b741d722..c75e444cf67 100644 --- a/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm +++ b/maps/sccv_horizon/sccv_horizon-4_centcomm.dmm @@ -1553,8 +1553,7 @@ dir = 1 }, /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "\improper FIB tactical gear" }, /obj/item/clothing/gloves/swat/tactical, @@ -2266,7 +2265,7 @@ /obj/machinery/sleeper{ dir = 8 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = 30; pixel_y = -1; @@ -3277,7 +3276,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/administration) "ahd" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_x = 30 }, /obj/effect/floor_decal/corner/red/diagonal, @@ -9086,7 +9085,7 @@ }, /area/centcom/holding) "avm" = ( -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -29; pixel_y = 30; @@ -9439,7 +9438,7 @@ /turf/simulated/floor/plating, /area/shuttle/merchant) "awa" = ( -/obj/structure/closet/hydrant{ +/obj/structure/closet/walllocker/firecloset{ pixel_y = 30 }, /obj/structure/bed/stool/chair/shuttle, @@ -12426,10 +12425,7 @@ }, /area/centcom/specops) "aCz" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -12778,10 +12774,7 @@ }, /area/centcom/specops) "aDm" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -12985,10 +12978,7 @@ }, /area/centcom/specops) "aDO" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -13131,8 +13121,7 @@ icon_state = "tube1" }, /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "spare modules" }, /turf/unsimulated/floor{ @@ -13355,10 +13344,7 @@ }, /area/centcom/specops) "aEy" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -13533,10 +13519,7 @@ }, /area/centcom/specops) "aFe" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -13763,10 +13746,7 @@ }, /area/centcom/specops) "aFT" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "emergency response team wardrobe" }, /obj/item/clothing/under/syndicate/combat, @@ -14171,12 +14151,6 @@ /area/centcom/holding) "aHb" = ( /obj/structure/closet/secure_closet{ - icon_broken = "secbroken"; - icon_closed = "sec"; - icon_locked = "sec1"; - icon_off = "secoff"; - icon_opened = "secopen"; - icon_state = "sec1"; name = "equipment locker" }, /turf/unsimulated/floor{ @@ -18237,14 +18211,8 @@ }, /area/tdome/tdomeadmin) "aSQ" = ( -/obj/structure/closet/secure_closet{ +/obj/structure/closet/secure_closet/cabinet{ anchored = 1; - icon_broken = "cabinetdetective_broken"; - icon_closed = "cabinetdetective"; - icon_locked = "cabinetdetective_locked"; - icon_off = "cabinetdetective_broken"; - icon_opened = "cabinetdetective_open"; - icon_state = "cabinetdetective_locked"; name = "legate's closet"; req_access = list(108,111) }, @@ -18780,8 +18748,7 @@ /area/centcom/legion/hangar5) "aTG" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -20087,7 +20054,6 @@ /area/centcom/legion/hangar5) "aWt" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -20105,7 +20071,6 @@ /area/centcom/legion/hangar5) "aWu" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -21939,8 +21904,7 @@ /area/centcom/legion) "ban" = ( /obj/structure/closet{ - icon_closed = "white"; - icon_state = "white"; + icon_door = "white"; name = "Fresh Scrubs" }, /obj/item/clothing/under/rank/medical/blue, @@ -22137,7 +22101,7 @@ /obj/item/stack/medical/splint, /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/bruise_pack, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -28 }, /turf/unsimulated/floor{ @@ -22224,7 +22188,6 @@ /area/centcom/legion/hangar5) "baU" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -22326,7 +22289,6 @@ dir = 1 }, /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -23649,8 +23611,7 @@ /area/centcom/legion/hangar5) "bds" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "Spare Uniforms" }, /obj/item/clothing/under/legion, @@ -25804,7 +25765,6 @@ /area/centcom/legion/hangar5) "bhX" = ( /obj/structure/closet/crate/secure/legion{ - icon_state = "tcflcrateopen"; locked = 0; opened = 1 }, @@ -26134,7 +26094,6 @@ "bio" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/trashcart{ - icon_state = "trashcartopen"; opened = 1 }, /obj/item/trash/koisbar{ @@ -26453,17 +26412,7 @@ /obj/structure/window/reinforced/crescent{ dir = 8 }, -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/storage/pill_bottle/rmt, +/obj/structure/closet/emcloset/offworlder, /turf/unsimulated/floor, /area/antag/burglar) "bjx" = ( @@ -27965,7 +27914,7 @@ /obj/item/stack/medical/bruise_pack, /obj/item/stack/medical/bruise_pack, /obj/item/reagent_containers/hypospray/autoinjector/survival, -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ pixel_x = -28 }, /turf/simulated/floor/shuttle/black, @@ -30260,22 +30209,7 @@ icon_state = "grate_light_dam2" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/clothing/mask/offworlder, +/obj/structure/closet/emcloset/offworlder, /turf/unsimulated/floor/plating, /area/antag/raider) "brE" = ( @@ -30981,7 +30915,7 @@ dir = 4; pixel_x = 11 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "medical supplies"; pixel_x = 28; req_access = null @@ -30991,8 +30925,7 @@ /area/shuttle/mercenary) "bsS" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "megacorp clothing" }, /obj/item/clothing/under/rank/einstein_engines, @@ -31564,7 +31497,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -33; pixel_y = 34; @@ -31675,8 +31608,7 @@ /area/shuttle/mercenary) "bui" = ( /obj/structure/closet{ - icon_closed = "blue"; - icon_state = "blue"; + icon_door = "blue"; name = "misc clothing" }, /obj/item/clothing/mask/pig, @@ -31850,10 +31782,7 @@ /turf/simulated/floor/tiled/dark, /area/shuttle/mercenary) "buO" = ( -/obj/structure/closet{ - icon_closed = "syndicate1"; - icon_opened = "syndicate1open"; - icon_state = "syndicate1"; +/obj/structure/closet/gimmick{ name = "sol clothing" }, /obj/item/clothing/under/rank/fatigues, @@ -32337,24 +32266,7 @@ }, /area/antag/mercenary) "bwD" = ( -/obj/structure/closet{ - icon_closed = "emergency"; - icon_opened = "emergencyopen"; - icon_state = "emergency"; - name = "offworlder supplies" - }, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/rig/light/offworlder, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/storage/pill_bottle/rmt, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, -/obj/item/clothing/accessory/offworlder/bracer, +/obj/structure/closet/emcloset/offworlder, /obj/effect/floor_decal/industrial/outline/yellow, /turf/unsimulated/floor{ icon_state = "new_reinforced" @@ -33705,7 +33617,7 @@ /obj/structure/undies_wardrobe{ anchored = 1; icon = 'icons/obj/storage.dmi'; - icon_state = "dropcrate-grey"; + icon_state = "drop_crate-grey"; name = "underwear crate" }, /turf/unsimulated/floor{ @@ -33859,7 +33771,7 @@ pixel_x = -12; pixel_y = 2 }, -/obj/structure/closet/secure_closet/medical_wall{ +/obj/structure/closet/walllocker/medical/secure{ name = "blood closet"; pixel_x = -33; pixel_y = 3; @@ -34318,11 +34230,7 @@ /obj/item/ladder_mobile{ pixel_y = 6 }, -/obj/structure/closet{ - icon_closed = "toolcloset"; - icon_opened = "toolclosetopen"; - icon_state = "toolcloset" - }, +/obj/structure/closet/crate/tool, /obj/structure/lattice/catwalk/indoor/grate, /obj/item/pickaxe/jackhammer, /obj/item/pickaxe/jackhammer, diff --git a/maps/templates/asteroid_outpost.dmm b/maps/templates/asteroid_outpost.dmm index 0b5e1910000..9706f248945 100644 --- a/maps/templates/asteroid_outpost.dmm +++ b/maps/templates/asteroid_outpost.dmm @@ -346,7 +346,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/closet/secure_closet/bar, +/obj/structure/closet/secure_closet/cabinet/bar, /turf/simulated/floor/lino, /area/derelict/ship) "bo" = ( diff --git a/maps/templates/backup/asteroid_outpost.dmm b/maps/templates/backup/asteroid_outpost.dmm index 335ce149909..fdbbef1014b 100644 --- a/maps/templates/backup/asteroid_outpost.dmm +++ b/maps/templates/backup/asteroid_outpost.dmm @@ -346,7 +346,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/closet/secure_closet/bar, +/obj/structure/closet/secure_closet/cabinet/bar, /turf/simulated/floor/lino, /area/derelict/ship) "bo" = ( diff --git a/maps/templates/sol.dmm b/maps/templates/sol.dmm index 3583000d6f1..f9e799dcfb4 100644 --- a/maps/templates/sol.dmm +++ b/maps/templates/sol.dmm @@ -676,7 +676,7 @@ /turf/simulated/floor/tiled/white, /area/derelict/ship) "cf" = ( -/obj/structure/closet/medical_wall{ +/obj/structure/closet/walllocker/medical{ desc = "It's wall-mounted storage unit for medical supplies. It has almost come off its mounts."; name = "Dilapitated medical closet"; pixel_y = -32 diff --git a/sound/machines/crate_close.ogg b/sound/machines/crate_close.ogg new file mode 100644 index 00000000000..5371e97ea66 Binary files /dev/null and b/sound/machines/crate_close.ogg differ diff --git a/sound/machines/crate_open.ogg b/sound/machines/crate_open.ogg new file mode 100644 index 00000000000..cd4c88161db Binary files /dev/null and b/sound/machines/crate_open.ogg differ diff --git a/sound/machines/wooden_closet_close.ogg b/sound/machines/wooden_closet_close.ogg new file mode 100644 index 00000000000..b315c0d97c4 Binary files /dev/null and b/sound/machines/wooden_closet_close.ogg differ diff --git a/sound/machines/wooden_closet_open.ogg b/sound/machines/wooden_closet_open.ogg new file mode 100644 index 00000000000..1a7bda40bb9 Binary files /dev/null and b/sound/machines/wooden_closet_open.ogg differ