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