diff --git a/baystation12.dme b/baystation12.dme
index 35a7237aa16..2aadb62ced4 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -819,6 +819,7 @@
#include "code\modules\maps\reader.dm"
#include "code\modules\maps\swapmaps.dm"
#include "code\modules\maps\writer.dm"
+#include "code\modules\mining\abandonedcrates.dm"
#include "code\modules\mining\machine_input_output_plates.dm"
#include "code\modules\mining\machine_processing.dm"
#include "code\modules\mining\machine_stacking.dm"
diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm
new file mode 100644
index 00000000000..72ddbffe4a9
--- /dev/null
+++ b/code/modules/mining/abandonedcrates.dm
@@ -0,0 +1,147 @@
+/obj/structure/closet/crate/secure/loot
+ name = "abandoned crate"
+ desc = "What could be inside?"
+ icon_state = "securecrate"
+ icon_opened = "securecrateopen"
+ icon_closed = "securecrate"
+ var/code = null
+ var/lastattempt = null
+ var/attempts = 3
+ locked = 1
+ var/min = 1
+ var/max = 10
+
+/obj/structure/closet/crate/secure/loot/New()
+ ..()
+ code = rand(min,max)
+ var/loot = rand(1,30)
+ switch(loot)
+ if(1)
+ new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src)
+ new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src)
+ new/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src)
+ new/obj/item/weapon/lighter/zippo(src)
+ if(2)
+ new/obj/item/weapon/pickaxe/drill(src)
+ new/obj/item/device/taperecorder(src)
+ new/obj/item/clothing/suit/space/rig(src)
+ new/obj/item/clothing/head/helmet/space/rig(src)
+ if(3)
+ for(var/i = 0, i < 12, i++)
+ new/obj/item/weapon/coin/diamond(src)
+ if(4)
+ new/obj/item/clothing/shoes/clown_shoes(src)
+ new/obj/item/clothing/under/rank/clown(src)
+ new/obj/item/clothing/mask/gas/clown_hat(src)
+ new/obj/item/weapon/bananapeel(src)
+ if(5)
+ for(var/i = 0, i < 6, i++)
+ new/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake(src)
+ new/obj/item/weapon/lighter/zippo(src)
+ if(7)
+ new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src)
+ if(9)
+ for(var/i = 0, i < 5, i++)
+ new/obj/item/weapon/ore/diamond(src)
+ if(10)
+ for(var/i = 0, i < 5, i++)
+ new/obj/item/weapon/ore/clown(src)
+ if(11)
+ return
+ if(12)
+ new/obj/item/seeds/deathberryseed(src)
+ new/obj/item/seeds/deathnettleseed(src)
+ if(13)
+ new/obj/machinery/hydroponics(src)
+ if(14)
+ new/obj/item/seeds/cashseed(src)
+ if(15)
+ for(var/i = 0, i < 3, i++)
+ new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src)
+ new/obj/item/weapon/reagent_containers/hypospray(src)
+ if(16)
+ for(var/i = 0, i < 9, i++)
+ new/obj/item/bluespace_crystal(src)
+ if(17)
+ new/obj/item/mecha_parts/mecha_equipment/weapon/honker(src)
+ new/obj/item/mecha_parts/chassis/honker(src)
+ new/obj/item/mecha_parts/part/honker_torso(src)
+ new/obj/item/mecha_parts/part/honker_head(src)
+ new/obj/item/mecha_parts/part/honker_left_arm(src)
+ if(18)
+ return
+ if(19)
+ for(var/i = 0, i < 4, i++)
+ new/obj/item/weapon/melee/classic_baton(src)
+ if(20)
+ new/obj/item/weapon/storage/lockbox/clusterbang(src)
+ if(21)
+ new/obj/item/weapon/aiModule/robocop(src)
+ if(22)
+ new/obj/item/clothing/under/chameleon(src)
+ for(var/i = 0, i < 7, i++)
+ new/obj/item/clothing/tie/horrible(src)
+ if(23)
+ new/obj/item/clothing/under/shorts(src)
+ new/obj/item/clothing/under/shorts/red(src)
+ new/obj/item/clothing/under/shorts/blue(src)
+ //Dummy crates start here.
+ if(24 to 29)
+ return
+ if(8)
+ return
+ if(6)
+ return
+ //Dummy crates end here.
+ if(30)
+ for(var/i = 0, i < 4, i++)
+ new/obj/item/weapon/melee/baton(src)
+
+/obj/structure/closet/crate/secure/loot/attack_hand(mob/user as mob)
+ if(locked)
+ user << "The crate is locked with a Deca-code lock."
+ var/input = input(usr, "Enter digit from [min] to [max].", "Deca-Code Lock", "") as num
+ if(in_range(src, user))
+ input = Clamp(input, 0, 10)
+ if (input == code)
+ user << "The crate unlocks!"
+ locked = 0
+ else if (input == null || input > max || input < min)
+ user << "You leave the crate alone."
+ else
+ user << "A red light flashes."
+ lastattempt = input
+ attempts--
+ if (attempts == 0)
+ user << "The crate's anti-tamper system activates!"
+ var/turf/T = get_turf(src.loc)
+ explosion(T, 0, 1, 2, 1)
+ del(src)
+ return
+ else
+ user << "You attempt to interact with the device using a hand gesture, but it appears this crate is from before the DECANECT came out."
+ return
+ else
+ return ..()
+
+/obj/structure/closet/crate/secure/loot/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(locked)
+ if (istype(W, /obj/item/weapon/card/emag))
+ user << "The crate unlocks!"
+ locked = 0
+ if (istype(W, /obj/item/device/multitool))
+ user << "DECA-CODE LOCK REPORT:"
+ if (attempts == 1)
+ user << "* Anti-Tamper Bomb will activate on next failed access attempt."
+ else
+ user << "* Anti-Tamper Bomb will activate after [src.attempts] failed access attempts."
+ if (lastattempt == null)
+ user << " has been made to open the crate thus far."
+ return
+ // hot and cold
+ if (code > lastattempt)
+ user << "* Last access attempt lower than expected code."
+ else
+ user << "* Last access attempt higher than expected code."
+ else ..()
+ else ..()
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 83077154a84..c410a51c00b 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -486,7 +486,11 @@ commented out in r5061, I left it because of the shroom thingies
var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
N.fullUpdateMineralOverlays()
-
+ var/crate = rand(1,30)
+ switch(crate)
+ if(1)
+ visible_message("After digging, you find an old dusty crate buried within!")
+ new/obj/structure/closet/crate/secure/loot(src)
return
/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index ab8b95e1116..7b1c2bd22b7 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -1746,6 +1746,7 @@ datum/design/cart_security
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/security"
+ locked = 1
datum/design/cart_janitor
name = "CustodiPRO Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1786,6 +1787,7 @@ datum/design/cart_quartermaster
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/quartermaster"
+ locked = 1
datum/design/cart_hop
name = "Human Resources 9001 Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1794,6 +1796,7 @@ datum/design/cart_hop
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/hop"
+ locked = 1
datum/design/cart_hos
name = "R.O.B.U.S.T. DELUXE Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1802,6 +1805,7 @@ datum/design/cart_hos
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/hos"
+ locked = 1
datum/design/cart_ce
name = "Power-On DELUXE Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1810,6 +1814,7 @@ datum/design/cart_ce
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/ce"
+ locked = 1
datum/design/cart_cmo
name = "Med-U DELUXE Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1818,6 +1823,7 @@ datum/design/cart_cmo
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/cmo"
+ locked = 1
datum/design/cart_rd
name = "Signal Ace DELUXE Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1826,6 +1832,7 @@ datum/design/cart_rd
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/rd"
+ locked = 1
datum/design/cart_captain
name = "Value-PAK Cartridge"
desc = "A data cartridge for portable microcomputers."
@@ -1834,6 +1841,7 @@ datum/design/cart_captain
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
build_path = "/obj/item/weapon/cartridge/captain"
+ locked = 1
datum/design/cart_traitor
name = "Detomatix Cart"
desc = "A data cartridge for portable microcomputers."
@@ -1841,4 +1849,4 @@ datum/design/cart_traitor
req_tech = list("syndicate" = 2, "powerstorage" = 3)
build_type = PROTOLATHE
materials = list("$metal" = 50, "$glass" = 50)
- build_path = "/obj/item/weapon/cartridge/syndicate"
\ No newline at end of file
+ build_path = "/obj/item/weapon/cartridge/syndicate"