diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
index 8906385eba1..d43d55fb9b9 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
@@ -594,17 +594,7 @@
/area/ruin/ancientstation/thetacorridor)
"bT" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/crate,
-/obj/item/circular_saw,
-/obj/item/retractor,
-/obj/item/hemostat,
-/obj/item/scalpel,
-/obj/item/cautery,
-/obj/item/FixOVein,
-/obj/item/surgicaldrill,
-/obj/item/bonegel,
-/obj/item/bonesetter,
-/obj/item/stack/medical/bruise_pack/advanced,
+/obj/structure/closet/crate/secure/oldstation/surgery,
/turf/simulated/floor/plating,
/area/ruin/ancientstation/thetacorridor)
"bU" = (
@@ -1266,7 +1256,6 @@
"dL" = (
/obj/structure/table,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/recharger,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "blue"
@@ -1372,6 +1361,7 @@
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/power/apc/off_station/empty_charge/directional/east,
+/obj/structure/closet/crate/secure/oldstation/rechargers,
/turf/simulated/floor/plating,
/area/ruin/ancientstation/comm)
"dY" = (
@@ -1408,16 +1398,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel/white,
/area/ruin/ancientstation/rnd)
-"ec" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/computer/rdconsole/public,
-/turf/simulated/floor/plasteel/white,
-/area/ruin/ancientstation/rnd)
-"ed" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/r_n_d/destructive_analyzer,
-/turf/simulated/floor/plasteel/white,
-/area/ruin/ancientstation/rnd)
"ee" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/mecha_part_fabricator,
@@ -1470,7 +1450,6 @@
/area/ruin/ancientstation/betanorth)
"el" = (
/obj/structure/table,
-/obj/machinery/recharger,
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel{
dir = 5;
@@ -1755,17 +1734,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel,
/area/ruin/ancientstation/thetacorridor)
-"eT" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/r_n_d/protolathe,
-/turf/simulated/floor/plasteel/white,
-/area/ruin/ancientstation/rnd)
-"eU" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/r_n_d/circuit_imprinter,
-/obj/item/reagent_containers/dropper,
-/turf/simulated/floor/plasteel/white,
-/area/ruin/ancientstation/rnd)
"eV" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/table,
@@ -2022,7 +1990,7 @@
},
/obj/machinery/door/airlock/external{
name = "Engineering External Access";
- req_one_access_txt = "271"
+ req_one_access_txt = "301"
},
/turf/simulated/floor/plating,
/area/ruin/ancientstation/engi)
@@ -2431,6 +2399,7 @@
pixel_x = 2;
pixel_y = -2
},
+/obj/item/reagent_containers/dropper,
/turf/simulated/floor/plasteel,
/area/ruin/ancientstation/rnd)
"gh" = (
@@ -3077,7 +3046,7 @@
icon_state = "4-8"
},
/obj/machinery/door/airlock/maintenance_hatch{
- req_one_access_txt = "271"
+ req_one_access_txt = "301"
},
/turf/simulated/floor/plating,
/area/ruin/ancientstation/thetacorridor)
@@ -3155,7 +3124,7 @@
},
/obj/machinery/door/airlock/external{
name = "Engineering External Access";
- req_one_access_txt = "271"
+ req_one_access_txt = "301"
},
/turf/simulated/floor/plating/airless,
/area/ruin/ancientstation/engi)
@@ -3873,7 +3842,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/highsecurity{
name = "Prototype Laboratory";
- req_access_txt = "271"
+ req_access_txt = "301"
},
/turf/simulated/floor/plasteel{
icon_state = "whitehall"
@@ -3884,7 +3853,7 @@
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/highsecurity{
name = "Prototype Laboratory";
- req_access_txt = "271"
+ req_access_txt = "301"
},
/turf/simulated/floor/plasteel{
icon_state = "whitehall"
@@ -4343,7 +4312,9 @@
/turf/simulated/floor/plasteel/white,
/area/ruin/ancientstation/proto)
"kA" = (
-/obj/machinery/computer/nonfunctional,
+/obj/machinery/computer/nonfunctional{
+ dir = 1
+ },
/obj/effect/decal/cleanable/dirt,
/turf/simulated/floor/plasteel/white,
/area/ruin/ancientstation/proto)
@@ -4796,13 +4767,8 @@
/obj/machinery/alarm/all_access/directional/west{
report_danger_level = 0
},
-/obj/structure/rack,
-/obj/item/gun/energy/laser/retro/old{
- pixel_x = -3;
- pixel_y = -3
- },
-/obj/item/gun/energy/laser/retro/old,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/crate/secure/oldstation/security,
/turf/simulated/floor/plasteel{
dir = 10;
icon_state = "red"
@@ -4893,17 +4859,20 @@
/turf/simulated/floor/plasteel,
/area/ruin/ancientstation/thetacorridor)
"lL" = (
-/obj/structure/rack,
-/obj/item/clothing/suit/armor/vest/old,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/table,
+/obj/item/deck/cards{
+ pixel_y = 5
+ },
/turf/simulated/floor/plasteel{
icon_state = "red"
},
/area/ruin/ancientstation/sec)
"lM" = (
-/obj/structure/rack,
-/obj/item/clothing/head/helmet/old,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/chair{
+ dir = 8
+ },
/turf/simulated/floor/plasteel{
dir = 6;
icon_state = "red"
@@ -4959,6 +4928,11 @@
icon_state = "red"
},
/area/ruin/ancientstation/sec)
+"JF" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/crate/secure/oldstation/research,
+/turf/simulated/floor/plasteel,
+/area/ruin/ancientstation/rnd)
"Lu" = (
/obj/structure/transit_tube/horizontal{
dir = 4
@@ -7989,7 +7963,7 @@ eb
ex
dE
fm
-gf
+JF
gy
dG
hg
@@ -8033,9 +8007,9 @@ cp
cN
dj
dE
-ec
dE
-eT
+dE
+dE
dE
gg
gy
@@ -8081,9 +8055,9 @@ ev
fz
dj
dE
-ed
dE
-eU
+dE
+dE
dE
gh
gy
diff --git a/code/__DEFINES/access_defines.dm b/code/__DEFINES/access_defines.dm
index 4043b927049..10443a7316c 100644
--- a/code/__DEFINES/access_defines.dm
+++ b/code/__DEFINES/access_defines.dm
@@ -110,3 +110,4 @@
//Ghost roles
#define ACCESS_FREE_GOLEMS 300
+#define ACCESS_THETA_STATION 301
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index d3876da9b1a..5c066edcbb1 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -159,6 +159,9 @@ GLOBAL_LIST_INIT(metal_recipes, list(
/obj/item/stack/sheet/metal/cyborg/drone
energy_type = /datum/robot_storage/energy/metal
+/obj/item/stack/sheet/metal/ten
+ amount = 10
+
/obj/item/stack/sheet/metal/fifty
amount = 50
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 56e0c837004..d2d6a69bca2 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -216,16 +216,18 @@
/obj/structure/closet/crate/secure/proc/togglelock(mob/user)
if(opened)
to_chat(user, "Close the crate first.")
- return
+ return FALSE
if(broken)
to_chat(user, "The crate appears to be broken.")
- return
+ return FALSE
if(allowed(user))
locked = !locked
visible_message("The crate has been [locked ? null : "un"]locked by [user].")
update_icon()
+ return TRUE
else
to_chat(user, "Access Denied.")
+ return FALSE
/obj/structure/closet/crate/secure/AltClick(mob/user)
if(Adjacent(user) && !opened)
diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
index 2384a3668a9..48dfa356f44 100644
--- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm
+++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm
@@ -15,7 +15,7 @@
desc = "A perfectly retrograde identification card. Looks like it could use some flavor."
icon = 'icons/obj/card.dmi'
icon_state = "retro"
- access = list(ACCESS_AWAY01)
+ access = list(ACCESS_THETA_STATION)
/obj/item/card/id/away/old/sec
name = "Security Officer ID"
@@ -329,6 +329,103 @@
name = "bromine bottle"
list_reagents = list("bromine" = 30)
+/// Secure Crates: Access locked to Theta crew. Cannot be moved, destroyed,
+/// emagged or EMPed because gamers can't be trusted not to game.
+/obj/structure/closet/crate/secure/oldstation
+ anchored = TRUE
+ resistance_flags = INDESTRUCTIBLE
+ req_access = list(ACCESS_THETA_STATION)
+
+/// Allow Theta crew to move the crates once unlocked so they don't get in the way
+/obj/structure/closet/crate/secure/oldstation/togglelock(mob/user)
+ if(!..())
+ return
+
+ anchored = locked
+
+ if(anchored)
+ to_chat(user, "The crate reanchors itself to the ground.")
+ else
+ to_chat(user, "The crate unanchors itself from the ground.")
+
+/obj/structure/closet/crate/secure/oldstation/emag_act(mob/user)
+ // var/can_be_emaged works in mysterious ways so screw it
+ return
+
+/obj/structure/closet/crate/secure/oldstation/emp_act(severity)
+ return
+
+/obj/structure/closet/crate/secure/oldstation/security
+ name = "security equipment crate"
+ desc = "A crate containing various security equipment."
+ icon_state = "secgearcrate"
+ icon_opened = "secgearcrate_open"
+ icon_closed = "secgearcrate"
+
+/obj/structure/closet/crate/secure/oldstation/security/populate_contents()
+ new /obj/item/gun/energy/laser/retro/old(src)
+ new /obj/item/gun/energy/laser/retro/old(src)
+ new /obj/item/clothing/suit/armor/vest/old(src)
+ new /obj/item/clothing/head/helmet/old(src)
+
+/obj/structure/closet/crate/secure/oldstation/rechargers
+ name = "recharger crate"
+ desc = "A crate containing the components to build weapon rechargers."
+
+/obj/structure/closet/crate/secure/oldstation/rechargers/populate_contents()
+ new /obj/item/circuitboard/recharger(src)
+ new /obj/item/circuitboard/recharger(src)
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stock_parts/capacitor(src)
+ new /obj/item/stack/cable_coil/ten(src)
+ new /obj/item/stack/sheet/metal/ten(src)
+ new /obj/item/screwdriver(src)
+
+/obj/structure/closet/crate/secure/oldstation/research
+ name = "research crate"
+ desc = "A crate containing the components necessary to perform research."
+ icon_state = "scisecurecrate"
+ icon_opened = "scisecurecrate_open"
+ icon_closed = "scisecurecrate"
+
+/obj/structure/closet/crate/secure/oldstation/research/populate_contents()
+ new /obj/item/circuitboard/circuit_imprinter(src)
+ new /obj/item/circuitboard/destructive_analyzer(src)
+ new /obj/item/circuitboard/protolathe(src)
+ new /obj/item/circuitboard/rdconsole/public(src)
+ new /obj/item/reagent_containers/glass/beaker(src)
+ new /obj/item/reagent_containers/glass/beaker(src)
+ new /obj/item/reagent_containers/glass/beaker(src)
+ new /obj/item/reagent_containers/glass/beaker(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/manipulator(src)
+ new /obj/item/stock_parts/matter_bin(src)
+ new /obj/item/stock_parts/matter_bin(src)
+ new /obj/item/stock_parts/matter_bin(src)
+ new /obj/item/stock_parts/micro_laser(src)
+ new /obj/item/stock_parts/scanning_module(src)
+
+/obj/structure/closet/crate/secure/oldstation/surgery
+ name = "surgery crate"
+ desc = "A crate containing surgical tools and equipment."
+ icon_state = "medicalsecurecrate"
+ icon_opened = "medicalsecurecrate_open"
+ icon_closed = "medicalsecurecrate"
+
+/obj/structure/closet/crate/secure/oldstation/surgery/populate_contents()
+ new /obj/item/circular_saw(src)
+ new /obj/item/retractor(src)
+ new /obj/item/hemostat(src)
+ new /obj/item/scalpel(src)
+ new /obj/item/cautery(src)
+ new /obj/item/FixOVein(src)
+ new /obj/item/surgicaldrill(src)
+ new /obj/item/bonegel(src)
+ new /obj/item/bonesetter(src)
+ new /obj/item/stack/medical/bruise_pack/advanced(src)
+
//////////////////////////////
// MARK: ENGINES
//////////////////////////////
diff --git a/code/modules/power/cables/cable_coil.dm b/code/modules/power/cables/cable_coil.dm
index 0396b5075c4..00d9767cea9 100644
--- a/code/modules/power/cables/cable_coil.dm
+++ b/code/modules/power/cables/cable_coil.dm
@@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain
usesound = 'sound/items/deconstruct.ogg'
toolspeed = 1
-/obj/item/stack/cable_coil/New(location, length = MAXCOIL, paramcolor = null)
+/obj/item/stack/cable_coil/New(location, length, paramcolor)
. = ..()
if(paramcolor)
color = paramcolor
@@ -351,8 +351,11 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain
color = pick(COLOR_RED, COLOR_BLUE, COLOR_GREEN, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN)
return color
-/obj/item/stack/cable_coil/five/New(loc, new_amount = 5, merge = TRUE, paramcolor = null)
- ..()
+/obj/item/stack/cable_coil/five
+ amount = 5
+
+/obj/item/stack/cable_coil/ten
+ amount = 10
/obj/item/stack/cable_coil/yellow
color = COLOR_YELLOW
diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi
index 73b3af8ee83..55f02e33917 100644
Binary files a/icons/obj/crates.dmi and b/icons/obj/crates.dmi differ