Container cleanup, standalone security panel (#20909)

Updated crate and locker sprites and icon overlay code to use a new
standalone 'securitypanel' overlay to lay the groundwork for, in the
future, being able to install/uninstall access-code locks on containers
just like you can in airlocks. For lockers, little visual change at all.
For crates, the security panel is now an overlay within the 'handle'
section of the crate rather than being a chunky box off to the side on
front. Locked/unlocked/emag sprites also updated for the new panel
location.
![Screenshot 2025-06-28
130646](https://github.com/user-attachments/assets/4b4469e7-5d62-42e0-9d9b-27c2f70a4239)
![Screenshot 2025-06-28
130944](https://github.com/user-attachments/assets/5741094f-9214-435a-8ef1-97e5c06b1c61)
![Screenshot 2025-06-28
130951](https://github.com/user-attachments/assets/3d9563b5-a89c-407d-9f8b-190d6382fb8b)

Moved closet.dmi, crate.dmi, guncabinet.dmi, safe.dmi, and
walllocker.dmi to a new subfolder /icons/obj/containers, and updated all
references to them in code, for sake of organization. Ideally (IMHO),
we'd differentiate structure-based storage containers from item-based
storage containers, but that's a larger organizational task and outside
of scope- this just moves storage structures into one common location.

Deleted sciguncabinet.dmi, as its contents had already been migrated to
guncabinet.dmi and it was no longer referenced anywhere in the codebase.
This commit is contained in:
Batrachophreno
2026-01-14 12:38:00 -05:00
committed by GitHub
parent 3c433a18a2
commit 142862c8bc
21 changed files with 1724 additions and 1665 deletions
@@ -1,7 +1,7 @@
/obj/structure/closet
name = "closet"
desc = "It's a basic storage unit."
icon = 'icons/obj/closet.dmi'
icon = 'icons/obj/containers/closet.dmi'
icon_state = "generic"
density = TRUE
build_amt = 2
@@ -626,6 +626,7 @@
update_secure_overlays()
/obj/structure/closet/proc/update_secure_overlays()
AddOverlays("[icon_door_overlay]securitypanel")
if(broken)
AddOverlays("[icon_door_overlay]emag")
else
@@ -1,7 +1,7 @@
/obj/structure/closet/secure_closet/guncabinet
name = "gun cabinet"
req_access = list(ACCESS_ARMORY)
icon = 'icons/obj/guncabinet.dmi'
icon = 'icons/obj/containers/guncabinet.dmi'
icon_state = "base"
anchored = TRUE
canbemoved = TRUE
@@ -1,7 +1,7 @@
/obj/structure/closet/secure_closet
name = "locker"
desc = "It's a steel ID-locked locker."
icon = 'icons/obj/closet.dmi'
icon = 'icons/obj/containers/closet.dmi'
icon_state = "secure"
anchored = FALSE
secure = TRUE
@@ -4,7 +4,7 @@
/obj/structure/closet/walllocker
name = "wall locker"
desc = "A wall mounted storage locker."
icon = 'icons/obj/walllocker.dmi'
icon = 'icons/obj/containers/walllocker.dmi'
icon_state = "walllocker" //...man, how OLD is this $#!?
door_anim_angle = 132
door_anim_squish = 0.38
@@ -5,7 +5,7 @@
/obj/structure/closet/crate
name = "crate"
desc = "A rectangular steel crate."
icon = 'icons/obj/crate.dmi'
icon = 'icons/obj/containers/crate.dmi'
icon_state = "crate"
climbable = TRUE
build_amt = 10
@@ -240,7 +240,6 @@
/obj/structure/closet/crate/secure
name = "secure crate"
desc = "A secure crate."
icon_state = "secure_crate"
locked = TRUE
secure = TRUE
secure_lights = TRUE
@@ -488,12 +487,12 @@
/obj/structure/closet/crate/secure/weapon
name = "weapons crate"
desc = "A secure weapons crate."
icon_state = "syndi_secure_crate"
icon_state = "syndi_crate"
icon_door_override = TRUE
icon_door = "syndi_crate"
/obj/structure/closet/crate/secure/weapon/alt
icon_state = "syndi_secure_crate1"
icon_state = "syndi_crate1"
icon_door = "syndi_crate1"
/obj/structure/closet/crate/secure/legion
@@ -516,8 +515,8 @@
/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 = "hydro_secure_crate"
desc = "A crate painted in the scheme of the station's botanists."
icon_state = "hydro_crate"
req_one_access = list(ACCESS_HYDROPONICS, ACCESS_XENOBOTANY)
/obj/structure/closet/crate/secure/bin
+1 -1
View File
@@ -8,7 +8,7 @@ FLOOR SAFES
/obj/structure/safe
name = "safe"
desc = "A huge chunk of metal with a dial embedded in it. Fine print on the dial reads \"Scarborough Arms - 2 tumbler safe, guaranteed thermite resistant, explosion resistant, and assistant resistant.\""
icon = 'icons/obj/safe.dmi'
icon = 'icons/obj/containers/safe.dmi'
icon_state = "safe"
anchored = 1
density = 1
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/structure/tranqcabinet
name = "tranquilizer rifle cabinet"
desc = "A wall mounted cabinet designed to hold a tranquilizer rifle."
icon = 'icons/obj/closet.dmi'
icon = 'icons/obj/containers/closet.dmi'
icon_state = "tranq_closed"
anchored = 1
density = 0
@@ -1,7 +1,7 @@
/obj/structure/undies_wardrobe
name = "underwear wardrobe"
desc = "Holds item of clothing you shouldn't be showing off in the hallways."
icon = 'icons/obj/closet.dmi'
icon = 'icons/obj/containers/closet.dmi'
icon_state = "cabinet"
density = 1
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/item/material/lock_construct
name = "lock"
desc = "A crude but useful lock and bolt."
icon = 'icons/obj/crate.dmi'
icon = 'icons/obj/containers/crate.dmi'
icon_state = "largebinemag"
w_class = WEIGHT_CLASS_TINY
var/lock_data
@@ -5,7 +5,7 @@
/mob/living/simple_animal/hostile/mimic
name = "crate"
desc = "A rectangular steel crate."
icon = 'icons/obj/crate.dmi'
icon = 'icons/obj/containers/crate.dmi'
icon_state = "crate_preview"
icon_living = "crate_preview"
@@ -0,0 +1,59 @@
################################
# 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
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################
# Your name.
author: Batrachophreno
# 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, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- code_imp: "Updated crates and lockers to use standalone security panel sprite overlays."
- refactor: "Moved several container spritesheets to a dedicated folder."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

+72 -72
View File
@@ -993,6 +993,13 @@
/obj/structure/table/stone/marble,
/turf/simulated/floor/tiled/dark,
/area/city/mendell/interior)
"fi" = (
/obj/item/storage/box/tactical/frags,
/obj/item/storage/box/tactical/frags,
/obj/item/storage/box/tactical/frags,
/obj/item/storage/box/tactical/frags,
/turf/simulated/floor/reinforced,
/area/city/mendell)
"fk" = (
/obj/item/clothing/under/suit_jacket/nt_skirtsuit,
/obj/item/clothing/under/suit_jacket/nt_skirtsuit,
@@ -2445,24 +2452,6 @@
name = "small tiles"
},
/area/city/mendell/interior)
"nU" = (
/obj/structure/table/rack,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/storage/box/shells/incendiaryshells,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/turf/simulated/floor/reinforced,
/area/city/mendell)
"nY" = (
/obj/structure/bedsheetbin,
/obj/structure/table/wood,
@@ -2780,33 +2769,6 @@
},
/turf/simulated/floor/wood,
/area/city/mendell/interior)
"qj" = (
/obj/effect/decal/fake_object{
desc = "What jerk stacked these here?";
icon = 'icons/obj/crate.dmi';
icon_state = "tcfl_crate_preview";
name = "inconveniently placed crate";
pixel_x = 1
},
/obj/effect/decal/fake_object{
density = 1;
desc = "What jerk stacked these here?";
icon = 'icons/obj/crate.dmi';
icon_state = "tcfl_crate_preview";
name = "inconveniently placed crate";
pixel_x = 3;
pixel_y = 8
},
/obj/effect/decal/fake_object{
desc = "What jerk stacked these here?";
icon = 'icons/obj/crate.dmi';
icon_state = "tcfl_crate_preview";
name = "inconveniently placed crate";
pixel_x = 2;
pixel_y = 19
},
/turf/simulated/floor/tiled/dark,
/area/city/mendell)
"qn" = (
/obj/machinery/door/blast/odin{
id = "front_doors"
@@ -4165,13 +4127,6 @@
/obj/item/storage/box/fancy/cigarettes/cigar,
/turf/simulated/floor/tiled/dark,
/area/city/mendell/interior)
"xZ" = (
/obj/item/storage/box/tactical/frags,
/obj/item/storage/box/tactical/frags,
/obj/item/storage/box/tactical/frags,
/obj/item/storage/box/tactical/frags,
/turf/simulated/floor/reinforced,
/area/city/mendell)
"ya" = (
/obj/structure/railing/mapped,
/obj/effect/floor_decal/industrial/warning,
@@ -4638,6 +4593,33 @@
name = "hex flooring"
},
/area/city/mendell/interior)
"Bh" = (
/obj/effect/decal/fake_object{
desc = "What jerk stacked these here?";
icon = 'icons/obj/containers/crate.dmi';
icon_state = "tcfl_crate_preview";
name = "inconveniently placed crate";
pixel_x = 1
},
/obj/effect/decal/fake_object{
density = 1;
desc = "What jerk stacked these here?";
icon = 'icons/obj/containers/crate.dmi';
icon_state = "tcfl_crate_preview";
name = "inconveniently placed crate";
pixel_x = 3;
pixel_y = 8
},
/obj/effect/decal/fake_object{
desc = "What jerk stacked these here?";
icon = 'icons/obj/containers/crate.dmi';
icon_state = "tcfl_crate_preview";
name = "inconveniently placed crate";
pixel_x = 2;
pixel_y = 19
},
/turf/simulated/floor/tiled/dark,
/area/city/mendell)
"Bl" = (
/obj/machinery/light/small{
dir = 1
@@ -5111,6 +5093,24 @@
/obj/item/reagent_containers/food/snacks/burger/superbite,
/turf/simulated/floor/tiled/white,
/area/city/mendell/interior)
"Do" = (
/obj/structure/table/rack,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/melee/energy/sword/knife/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/gun/projectile/shotgun/pump/combat/sol,
/obj/item/storage/box/shells/incendiaryshells,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/obj/item/storage/box/shells/buckshot,
/turf/simulated/floor/reinforced,
/area/city/mendell)
"Dt" = (
/turf/simulated/floor/lino,
/area/city/mendell/interior)
@@ -7764,18 +7764,6 @@
},
/turf/simulated/floor/marble/dark,
/area/city/mendell/interior)
"Tb" = (
/obj/effect/decal/fake_object{
desc = "A crate of military supplies.";
icon = 'icons/obj/crate.dmi';
icon_state = "dropcrate";
name = "metal crate";
pixel_x = 1;
pixel_y = 4
},
/obj/effect/floor_decal/industrial/hatch/red,
/turf/simulated/floor/tiled/dark,
/area/city/mendell)
"Tc" = (
/obj/machinery/door/airlock/centcom{
id_tag = "qs1";
@@ -8522,6 +8510,18 @@
},
/turf/simulated/floor/wood,
/area/city/mendell)
"Xw" = (
/obj/effect/decal/fake_object{
desc = "A crate of military supplies.";
icon = 'icons/obj/containers/crate.dmi';
icon_state = "dropcrate";
name = "metal crate";
pixel_x = 1;
pixel_y = 4
},
/obj/effect/floor_decal/industrial/hatch/red,
/turf/simulated/floor/tiled/dark,
/area/city/mendell)
"XA" = (
/obj/structure/table/rack,
/obj/item/reagent_containers/food/snacks/batwings,
@@ -14044,7 +14044,7 @@ VN
Pk
Or
Or
Tb
Xw
xq
xq
vx
@@ -14394,7 +14394,7 @@ Nc
Or
kH
Pk
qj
Bh
vF
Pk
KL
@@ -28475,7 +28475,7 @@ xD
xD
Or
eI
xZ
fi
ro
Or
Jy
@@ -28561,7 +28561,7 @@ xD
xD
xD
fK
nU
Do
xD
ro
Or
@@ -28648,7 +28648,7 @@ xD
xD
xD
fK
nU
Do
xD
ro
Or
@@ -28735,7 +28735,7 @@ xD
xD
xD
fK
nU
Do
xD
ro
fK
@@ -28822,7 +28822,7 @@ xD
xD
xD
Or
nU
Do
xD
ro
Or
@@ -30911,7 +30911,7 @@ xD
xD
Or
eI
xZ
fi
Ni
Or
Jy
File diff suppressed because it is too large Load Diff