From 1f88c0c66014e4bd88183a3883ca1541596983ee Mon Sep 17 00:00:00 2001 From: oranges Date: Wed, 10 Jan 2018 12:06:39 +1300 Subject: [PATCH] [READY]Cargo Update: Nanotrasen Supply Drop Pods! --- _maps/map_files/BoxStation/BoxStation.dmm | 119 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 173 +- .../circuitboards/computer_circuitboards.dm | 38 +- code/game/objects/items/devices/multitool.dm | 1 + .../structures/crates_lockers/closets.dm | 26 +- .../closets/secure/bsdroppod.dm | 92 + code/modules/cargo/console.dm | 4 +- code/modules/cargo/expressconsole.dm | 125 + code/modules/cargo/packs.dm | 3561 +++++++++-------- .../research/designs/comp_board_designs.dm | 2 +- .../research/designs/mining_designs.dm | 10 + code/modules/research/techweb/all_nodes.dm | 2 +- icons/obj/2x2.dmi | Bin 6785 -> 13744 bytes icons/obj/computer.dmi | Bin 108650 -> 109211 bytes tgstation.dme | 2 + tgui/src/interfaces/cargo_express.ract | 43 + 16 files changed, 2308 insertions(+), 1890 deletions(-) create mode 100644 code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm create mode 100644 code/modules/cargo/expressconsole.dm create mode 100644 tgui/src/interfaces/cargo_express.ract diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 5bcd4ec085..ec8fb63b7b 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -19258,7 +19258,7 @@ dir = 4 }, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aWD" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel, @@ -19751,7 +19751,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aXF" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/vault{ @@ -19785,7 +19785,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aXK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -19938,7 +19938,7 @@ dir = 4 }, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aYd" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -20526,7 +20526,7 @@ "aZF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "aZG" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -20552,7 +20552,7 @@ /obj/item/stack/sheet/cardboard, /obj/item/stack/rods/fifty, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aZJ" = ( /obj/structure/table/wood, /obj/item/device/camera/detective, @@ -20972,7 +20972,7 @@ /area/hallway/primary/starboard) "baS" = ( /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "baT" = ( /obj/structure/cable{ icon_state = "1-2" @@ -21011,7 +21011,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "baZ" = ( /obj/machinery/status_display{ layer = 4; @@ -21164,7 +21164,7 @@ /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bbu" = ( /obj/machinery/power/apc{ dir = 1; @@ -21315,7 +21315,7 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bbQ" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ @@ -21333,7 +21333,7 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bbT" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp/green, @@ -21597,13 +21597,13 @@ dir = 8 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcF" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcG" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, @@ -21625,7 +21625,7 @@ }, /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcK" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -21676,7 +21676,7 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -21686,13 +21686,13 @@ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/closed/wall, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bcU" = ( /turf/open/floor/wood, /area/maintenance/bar) @@ -22063,7 +22063,7 @@ "bdS" = ( /obj/structure/closet/crate/internals, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bdT" = ( /obj/machinery/power/apc{ dir = 8; @@ -22082,7 +22082,7 @@ "bdU" = ( /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bdV" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating/airless, @@ -22339,7 +22339,7 @@ }, /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bey" = ( /turf/open/floor/plasteel/white/corner{ dir = 8 @@ -22381,7 +22381,7 @@ }, /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "beE" = ( /obj/machinery/light, /turf/open/floor/plasteel, @@ -22625,7 +22625,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/item/stack/sheet/cardboard, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bfh" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22636,7 +22636,7 @@ "bfi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bfj" = ( /obj/structure/disposalpipe/trunk, /obj/structure/disposaloutlet{ @@ -23087,7 +23087,7 @@ dir = 9 }, /turf/closed/wall, -/area/maintenance/port) +/area/quartermaster/warehouse) "bgz" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, @@ -23096,7 +23096,7 @@ "bgA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bgB" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -23694,7 +23694,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "bhX" = ( /obj/structure/disposalpipe/sorting/wrap{ dir = 1 @@ -46740,7 +46740,7 @@ "ckQ" = ( /obj/structure/closet/cardboard, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "ckS" = ( /obj/structure/closet/cardboard, /turf/open/floor/plating, @@ -52668,7 +52668,7 @@ /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "cBj" = ( /obj/structure/table, /obj/item/folder/blue, @@ -56963,6 +56963,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "QoZ" = ( +<<<<<<< HEAD /turf/open/space/basic, /area/maintenance/port/fore) "Qpa" = ( @@ -60469,6 +60470,48 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +======= +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpa" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo Warehouse APC"; + areastring = "/area/quartermaster/warehouse"; + pixel_x = 26 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/maintenance/port) +"Qpc" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpd" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpe" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpf" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qpg" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"Qph" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +>>>>>>> fcc3dae... Merge pull request #33436 from MrDoomBringer/DropItLikeItsHottest (1,1,1) = {" aaa @@ -80642,7 +80685,7 @@ aWu aYa aZD aZD -aZD +Qpb aZD aZD bff @@ -81161,7 +81204,7 @@ baS bdS bdU ckQ -aZE +Qpg bjq bjr bjr @@ -81675,7 +81718,7 @@ bcR bcE baS bex -bhY +aZF bgu bic bku @@ -81932,7 +81975,7 @@ bcS bbt bfi beD -aZE +Qph aZE biA bmg @@ -82182,13 +82225,13 @@ aTH aPK aWz aWC -aZE -aZE -aZE +QoZ +Qpa +Qpc bcT -aZE -aZE -aZE +Qpd +Qpe +Qpf aZE bju biv diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index c4158d21b1..e047557603 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -14591,6 +14591,9 @@ dir = 6 }, /obj/effect/decal/cleanable/oil, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/maintenance/department/cargo) "aKl" = ( @@ -14868,6 +14871,9 @@ req_access_txt = "31" }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/maintenance/department/cargo) "aLi" = ( @@ -15320,27 +15326,27 @@ dir = 4 }, /turf/closed/wall, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMp" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMq" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMr" = ( /obj/structure/closet/crate, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMs" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -15349,7 +15355,7 @@ pixel_y = 32 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMt" = ( /obj/structure/closet/cardboard, /obj/structure/disposalpipe/segment{ @@ -15363,20 +15369,27 @@ dir = 2 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMu" = ( /obj/item/cigbutt/cigarbutt, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMv" = ( /obj/structure/disposalpipe/segment{ dir = 9 }, +/obj/machinery/power/apc{ + dir = 4; + name = "Cargo Warehouse APC"; + areastring = "/area/quartermaster/warehouse"; + pixel_x = 26 + }, +/obj/structure/cable, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aMw" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -15953,20 +15966,20 @@ pixel_x = -32 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNO" = ( /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNP" = ( /obj/structure/closet/crate, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNQ" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aNR" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16499,33 +16512,33 @@ /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aOZ" = ( /obj/item/stack/sheet/cardboard, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPa" = ( /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPc" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aPd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -16905,16 +16918,16 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQd" = ( /obj/item/device/flashlight, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQe" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQf" = ( /obj/structure/closet/crate{ icon_state = "crateopen"; @@ -16922,11 +16935,11 @@ }, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQg" = ( /obj/structure/closet/crate/medical, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aQh" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/supply) @@ -17447,7 +17460,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRo" = ( /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; @@ -17456,7 +17469,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRp" = ( /obj/machinery/door/poddoor/shutters{ id = "qm_warehouse"; @@ -17464,11 +17477,11 @@ }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRq" = ( /obj/structure/closet/crate/internals, /turf/open/floor/plasteel/floorgrime, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aRr" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) @@ -48293,7 +48306,7 @@ "coL" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "coN" = ( /turf/open/floor/plasteel/neutral/corner, /area/hallway/secondary/exit/departure_lounge) @@ -51373,6 +51386,7 @@ /turf/open/floor/plasteel/dark, /area/library) "cCX" = ( +<<<<<<< HEAD /obj/machinery/vending/kink, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/dorms) @@ -51386,6 +51400,77 @@ /obj/machinery/vending/kink, /turf/open/floor/plating, /area/maintenance/department/engine) +======= +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) +"cCY" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) +"cCZ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/cargo) +"cDa" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDb" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDc" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDd" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDe" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDf" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDg" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDh" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDi" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDj" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDk" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDl" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDm" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +"cDn" = ( +/turf/closed/wall, +/area/quartermaster/warehouse) +>>>>>>> fcc3dae... Merge pull request #33436 from MrDoomBringer/DropItLikeItsHottest (1,1,1) = {" aaa @@ -90809,12 +90894,12 @@ aEd aIj aJm aKg -aLg +cDa aMo -aLg -aLg -aLg -aLg +cDd +cDf +cDg +cDh aLg aTj aUu @@ -91842,8 +91927,8 @@ aMs aNO aPb aQe -aLg -aLg +cDi +cDj aTn aUx aVA @@ -92100,7 +92185,7 @@ aNP aPb aNO aNP -aLg +cDk aTo aSk aTm @@ -92357,7 +92442,7 @@ aNO aPc aQf aRq -aLg +cDl aTp aSk aTm @@ -92614,7 +92699,7 @@ aNQ aNO aQg aNP -aLg +cDm aTq aSk aVB @@ -92864,14 +92949,14 @@ aEd aEd aEd aEd -aKl -aLg -aLg -aLg +cCX +cDb +cDc +cDe coL coL coL -aLg +cDn aTr aUy aPd @@ -93121,7 +93206,7 @@ aGI aHr aEd aJp -aKm +cCY aLi aMw aEj @@ -93378,7 +93463,7 @@ aGJ aGJ aDl aEk -aEk +cCZ aLj aMx aEj diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 9558fecc80..afd0eeef95 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -188,21 +188,33 @@ build_path = /obj/machinery/computer/cargo var/contraband = FALSE -/obj/item/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/device/multitool)) - if(!emagged) - contraband = !contraband - to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") - else - to_chat(user, "The spectrum chip is unresponsive.") - else if(istype(I, /obj/item/card/emag)) - if(!emagged) - contraband = TRUE - emagged = TRUE - to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") +/obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user) + if(!emagged) + contraband = !contraband + to_chat(user, "Receiver spectrum set to [contraband ? "Broad" : "Standard"].") else - return ..() + to_chat(user, "The spectrum chip is unresponsive.") +/obj/item/circuitboard/computer/cargo/emag_act(mob/living/user) + if(!emagged) + contraband = TRUE + emagged = TRUE + to_chat(user, "You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband.") + +/obj/item/circuitboard/computer/cargo/express + name = "Express Supply Console (Computer Board)" + build_path = /obj/machinery/computer/cargo/express + +/obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user) + if (!emagged) + to_chat(user, "Routing protocols are already set to: \"factory defaults\".") + else + to_chat(user, "You reset the routing protocols to: \"factory defaults\".") + emagged = FALSE + +/obj/item/circuitboard/computer/cargo/express/emag_act(mob/living/user) + to_chat(user, "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") + emagged = TRUE /obj/item/circuitboard/computer/cargo/request name = "Supply Request Console (Computer Board)" diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index a2b1ce2056..9445cd73a6 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -18,6 +18,7 @@ righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' force = 5 w_class = WEIGHT_CLASS_SMALL + tool_behaviour = TOOL_MULTITOOL throwforce = 0 throw_range = 7 throw_speed = 3 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index d46978f4b0..6e6a9f8233 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -132,7 +132,7 @@ if(opened || !can_open(user)) return playsound(loc, open_sound, 15, 1, -3) - opened = 1 + opened = TRUE if(!dense_when_open) density = FALSE climb_time *= 0.5 //it's faster to climb onto an open thing @@ -185,7 +185,7 @@ take_contents() playsound(loc, close_sound, 15, 1, -3) climb_time = initial(climb_time) - opened = 0 + opened = FALSE density = TRUE update_icon() return 1 @@ -208,6 +208,10 @@ /obj/structure/closet/attackby(obj/item/W, mob/user, params) if(user in src) return + if(!src.tool_interact(W,user)) + return ..() + +/obj/structure/closet/proc/tool_interact(obj/item/W, mob/user)//returns TRUE if attackBy call shouldnt be continued (because tool was used/closet was of wrong type), FALSE if otherwise if(opened) if(istype(W, cutting_tool)) if(istype(W, /obj/item/weldingtool)) @@ -217,29 +221,29 @@ playsound(loc, cutting_sound, 40, 1) if(do_after(user, 40*WT.toolspeed, 1, target = src)) if(!opened || !WT.isOn()) - return + return TRUE playsound(loc, cutting_sound, 50, 1) user.visible_message("[user] slices apart \the [src].", "You cut \the [src] apart with \the [WT].", "You hear welding.") deconstruct(TRUE) - return 0 + return TRUE else // for example cardboard box is cut with wirecutters user.visible_message("[user] cut apart \the [src].", \ "You cut \the [src] apart with \the [W].") deconstruct(TRUE) - return 0 + return TRUE if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too - return 1 + return TRUE else if(istype(W, /obj/item/weldingtool) && can_weld_shut) var/obj/item/weldingtool/WT = W if(!WT.remove_fuel(0, user)) - return + return TRUE to_chat(user, "You begin [welded ? "unwelding":"welding"] \the [src]...") playsound(loc, 'sound/items/welder2.ogg', 40, 1) if(do_after(user, 40*WT.toolspeed, 1, target = src)) if(opened || !WT.isOn()) - return + return TRUE playsound(loc, WT.usesound, 50, 1) welded = !welded user.visible_message("[user] [welded ? "welds shut" : "unweldeds"] \the [src].", @@ -248,7 +252,7 @@ update_icon() else if(istype(W, /obj/item/wrench) && anchorable) if(isinspace() && !anchored) - return + return TRUE anchored = !anchored playsound(src.loc, W.usesound, 75, 1) user.visible_message("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ @@ -257,9 +261,9 @@ else if(user.a_intent != INTENT_HARM && !(W.flags_1 & NOBLUDGEON_1)) if(W.GetID() || !toggle(user)) togglelock(user) - return 1 + return TRUE else - return ..() + return FALSE /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/living/user) if(!istype(O) || O.anchored || istype(O, /obj/screen)) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm new file mode 100644 index 0000000000..aa8dca50a5 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/secure/bsdroppod.dm @@ -0,0 +1,92 @@ +//The "BDPtarget" temp visual is created by the expressconsole, which in turn makes two things: a falling droppod animation, and the droppod itself. + + +//------------------------------------BLUESPACE DROP POD-------------------------------------// +/obj/structure/closet/bsdroppod + name = "Bluespace Drop Pod" + desc = "A Nanotrasen supply drop pod." + icon = 'icons/obj/2x2.dmi' + icon_state = "BDP" + pixel_x = -16//2x2 sprite + pixel_y = -5 + layer = TABLE_LAYER//so that the crate inside doesn't appear underneath + allow_objects = TRUE + allow_dense = TRUE + delivery_icon = null + can_weld_shut = FALSE + armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 90, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + anchored = TRUE + anchorable = FALSE + var/datum/supply_order/SupplyOrder + +/obj/structure/closet/bsdroppod/Initialize(mapload, datum/supply_order/so) + . = ..() + SupplyOrder = so//uses Supply Order passed from expressconsole into BDPtarget + addtimer(CALLBACK(src, .proc/open), 30)//open 3seconds after appearing + +/obj/structure/closet/bsdroppod/update_icon() + cut_overlays() + if (opened) + add_overlay("BDP_open") + else + add_overlay("BDP_door") + +/obj/structure/closet/bsdroppod/tool_interact(obj/item/W, mob/user) + return TRUE + +/obj/structure/closet/bsdroppod/toggle(mob/living/user) + return + +/obj/structure/closet/bsdroppod/open() + var/turf/T = get_turf(src) + opened = TRUE + SupplyOrder.generate(T)//not called during populateContents as supplyorder generation requires a turf + update_icon() + playsound(src, open_sound, 15, 1, -3) + addtimer(CALLBACK(src, .proc/sparks), 30)//3 seconds after opening, make some sparks and delete + +/obj/structure/closet/bsdroppod/proc/sparks()//sparks cant be called from addtimer + do_sparks(5, TRUE, src) + qdel(src)//no need for QDEL_IN if we already have a timer + +/obj/structure/closet/bsdroppod/Destroy()//make some sparks b4 deletion + QDEL_NULL(SupplyOrder) + return ..() + +//------------------------------------FALLING BLUESPACE DROP POD-------------------------------------// +/obj/effect/temp_visual/BDPfall + icon = 'icons/obj/2x2.dmi' + icon_state = "BDP_falling" + pixel_x = -16 + pixel_y = -5 + pixel_z = 200 + name = "Bluespace Drop Pod" + desc = "Get out of the way!" + layer = FLY_LAYER//that wasnt flying, that was falling with style! + randomdir = FALSE + +//------------------------------------TEMPORARY_VISUAL-------------------------------------// +/obj/effect/BDPtarget + icon = 'icons/mob/actions/actions_items.dmi' + icon_state = "sniper_zoom" + layer = PROJECTILE_HIT_THRESHHOLD_LAYER + light_range = 2 + var/obj/effect/temp_visual/fallingPod + +/obj/effect/BDPtarget/Initialize(mapload, datum/supply_order/SO) + . = ..() + addtimer(CALLBACK(src, .proc/beginLaunch, SO), 30)//wait 3 seconds + +/obj/effect/BDPtarget/proc/beginLaunch(datum/supply_order/SO) + fallingPod = new /obj/effect/temp_visual/BDPfall(drop_location()) + animate(fallingPod, pixel_z = 0, time = 3, easing = LINEAR_EASING)//make and animate a falling pod + addtimer(CALLBACK(src, .proc/endLaunch, SO), 3, TIMER_CLIENT_TIME)//fall 0.3seconds + +/obj/effect/BDPtarget/proc/endLaunch(datum/supply_order/SO) + new /obj/structure/closet/bsdroppod(drop_location(), SO)//pod is created + explosion(src,0,0,2, flame_range = 2) //explosion and camshake (shoutout to @cyberboss) + qdel(src) + +/obj/effect/BDPtarget/Destroy() + QDEL_NULL(fallingPod)//delete falling pod after animation's over + return ..() \ No newline at end of file diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 296c876688..a41106a49d 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -69,7 +69,7 @@ "name" = P.group, "packs" = list() ) - if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled)) + if((P.hidden && !emagged) || (P.contraband && !contraband) || (P.special && !P.special_enabled) || P.DropPodOnly) continue data["supplies"][P.group]["packs"] += list(list( "name" = P.name, @@ -140,7 +140,7 @@ var/datum/supply_pack/pack = SSshuttle.supply_packs[id] if(!istype(pack)) return - if((pack.hidden && !emagged) || (pack.contraband && !contraband)) + if((pack.hidden && !emagged) || (pack.contraband && !contraband) || pack.DropPodOnly) return var/name = "*None Provided*" diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm new file mode 100644 index 0000000000..60be1e8349 --- /dev/null +++ b/code/modules/cargo/expressconsole.dm @@ -0,0 +1,125 @@ +/obj/machinery/computer/cargo/express + name = "express supply console" + desc = "This console allows the user to purchase a package for double the price,\ + with 1/40th of the delivery time: made possible by NanoTrasen's new \"Drop Pod Railgun\".\ + All sales are near instantaneous - please choose carefully" + icon_screen = "supply_express" + circuit = /obj/item/circuitboard/computer/cargo/express + blockade_warning = "Bluespace instability detected. Delivery impossible." + req_access = list(ACCESS_QM) + var/message + var/locked = TRUE + + +/obj/machinery/computer/cargo/express/attackby(obj/item/W, mob/living/user, params) + ..() + if((istype(W, /obj/item/card/id) || istype(W, /obj/item/device/pda)) && allowed(user)) + locked = !locked + to_chat(user, "You [locked ? "lock" : "unlock"] the interface.") + +/obj/machinery/computer/cargo/express/emag_act(mob/living/user) + if(emagged) + return + user.visible_message("[user] swipes a suspicious card through [src]!", + "You change the routing protocols, allowing the Drop Pod to land anywhere on the station.") + emagged = TRUE + // This also sets this on the circuit board + var/obj/item/circuitboard/computer/cargo/board = circuit + board.emagged = TRUE + +/obj/machinery/computer/cargo/express/ui_interact(mob/living/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "cargo_express", name, 1000, 800, master_ui, state) + ui.open() + + +/obj/machinery/computer/cargo/express/ui_data(mob/user) + var/list/data = list() + data["locked"] = locked + data["siliconUser"] = user.has_unlimited_silicon_privilege + data["points"] = SSshuttle.points + data["supplies"] = list() + message = "For normally priced items, please use the standard Supply or Request Console. \ + Sales are near-instantaneous - please choose carefully." + if(SSshuttle.supplyBlocked) + message = blockade_warning + if(emagged) + message = "(&!#@ERROR: ROUTING_#PROTOCOL MALF(*CT#ON. $UG%ESTE@ ACT#0N: !^/PULS3-%E)ET CIR*)ITB%ARD." + + data["message"] = message + + if (emagged) + for(var/pack in SSshuttle.supply_packs) + var/datum/supply_pack/P = SSshuttle.supply_packs[pack] + if (P.name == "Toy Crate")//Can only order toys if emagged. You gotta spend 10K points to crash a droppod somewhere on the station + data["supplies"][P.group] = list( + "name" = P.group, + "packs" = list() + ) + data["supplies"][P.group]["packs"] += list(list( + "name" = P.name, + "cost" = P.cost * 2, //displays twice the normal cost + "id" = pack + )) + else + for(var/pack in SSshuttle.supply_packs) + var/datum/supply_pack/P = SSshuttle.supply_packs[pack] + if(!data["supplies"][P.group]) + data["supplies"][P.group] = list( + "name" = P.group, + "packs" = list() + ) + if((P.hidden) || (P.contraband) || (P.special))//no fun allowed + continue + data["supplies"][P.group]["packs"] += list(list( + "name" = P.name, + "cost" = P.cost * 2, //displays twice the normal cost + "id" = pack + )) + + return data + +/obj/machinery/computer/cargo/express/ui_act(action, params, datum/tgui/ui) + switch(action) + if("add")//Generate Supply Order first + var/id = text2path(params["id"]) + var/datum/supply_pack/pack = SSshuttle.supply_packs[id] + if(!istype(pack)) + return + var/name = "*None Provided*" + var/rank = "*None Provided*" + var/ckey = usr.ckey + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + name = H.get_authentification_name() + rank = H.get_assignment() + else if(issilicon(usr)) + name = usr.real_name + rank = "Silicon" + var/reason = "" + + + var/datum/supply_order/SO = new(pack, name, rank, ckey, reason) + if(SO.pack.cost* 2 <= SSshuttle.points) //If you can afford it, then begin the delivery + SO.generateRequisition(get_turf(src)) + SSshuttle.points -= SO.pack.cost * 2//twice the normal cost + + var/list/empty_turfs = list() + var/area/landingzone + + if (!emagged) + landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas + else + landingzone = locate(pick(GLOB.the_station_areas)) in GLOB.sortedAreas + + for(var/turf/open/floor/T in landingzone.contents) //get all the turfs in cargo bay + if(is_blocked_turf(T))//wont land on a blocked turf + continue + empty_turfs.Add(T) + + if (empty_turfs.len != 0 ) + var/LZ = empty_turfs[rand(empty_turfs.len-1)]//pick a random turf + new /obj/effect/BDPtarget(LZ, SO)//where the magic happens. this temp visual makes the actual droppod after a pause + . = TRUE + update_icon() \ No newline at end of file diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index de62ba465e..e575773233 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1,1780 +1,1781 @@ -/datum/supply_pack - var/name = "Crate" - var/group = "" - var/hidden = FALSE - var/contraband = FALSE - var/cost = 700 // Minimum cost, or infinite points are possible. - var/access = FALSE - var/access_any = FALSE - var/list/contains = null - var/crate_name = "crate" - var/crate_type = /obj/structure/closet/crate - var/dangerous = FALSE // Should we message admins? - var/special = FALSE //Event/Station Goals/Admin enabled packs - var/special_enabled = FALSE - -/datum/supply_pack/proc/generate(turf/T) - var/obj/structure/closet/crate/C = new crate_type(T) - C.name = crate_name - if(access) - C.req_access = list(access) - if(access_any) - C.req_one_access = access_any - - fill(C) - - return C - -/datum/supply_pack/proc/fill(obj/structure/closet/crate/C) - for(var/item in contains) - new item(C) - - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Emergency /////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/emergency - group = "Emergency" - -/datum/supply_pack/emergency/spacesuit - name = "Space Suit Crate" - cost = 3000 - access = ACCESS_EVA - contains = list(/obj/item/clothing/suit/space, - /obj/item/clothing/suit/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath) - crate_name = "space suit crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/vehicle - name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN - cost = 2000 - contraband = TRUE - contains = list(/obj/vehicle/ridden/atv, - /obj/item/key, - /obj/item/clothing/suit/jacket/leather/overcoat, - /obj/item/clothing/gloves/color/black, - /obj/item/clothing/head/soft, - /obj/item/clothing/mask/bandana/skull)//so you can properly #cargoniabikergang - crate_name = "Biker Kit" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/emergency/equipment - name = "Emergency Equipment" - cost = 3500 - contains = list(/mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/floorbot, - /mob/living/simple_animal/bot/medbot, - /mob/living/simple_animal/bot/medbot, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas) - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/internals - name = "Internals Crate" - cost = 1000 - contains = list(/obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/clothing/mask/breath, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/emergency_oxygen, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air, - /obj/item/tank/internals/air) - crate_name = "internals crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/firefighting - name = "Firefighting Crate" - cost = 1000 - contains = list(/obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/suit/fire/firefighter, - /obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, - /obj/item/device/flashlight, - /obj/item/device/flashlight, - /obj/item/tank/internals/oxygen/red, - /obj/item/tank/internals/oxygen/red, - /obj/item/extinguisher, - /obj/item/extinguisher, - /obj/item/clothing/head/hardhat/red, - /obj/item/clothing/head/hardhat/red) - crate_name = "firefighting crate" - -/datum/supply_pack/emergency/atmostank - name = "Firefighting Watertank" - cost = 1000 - access = ACCESS_ATMOSPHERICS - contains = list(/obj/item/watertank/atmos) - crate_name = "firefighting watertank crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/emergency/radiation - name = "Radiation Protection Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/radiation, - /obj/item/clothing/head/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/clothing/suit/radiation, - /obj/item/device/geiger_counter, - /obj/item/device/geiger_counter, - /obj/item/reagent_containers/food/drinks/bottle/vodka, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, - /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass) - crate_name = "radiation protection crate" - crate_type = /obj/structure/closet/crate/radiation - -/datum/supply_pack/emergency/weedcontrol - name = "Weed Control Crate" - cost = 1500 - access = ACCESS_HYDROPONICS - contains = list(/obj/item/scythe, - /obj/item/clothing/mask/gas, - /obj/item/grenade/chem_grenade/antiweed, - /obj/item/grenade/chem_grenade/antiweed) - crate_name = "weed control crate" - crate_type = /obj/structure/closet/crate/secure/hydroponics - -/datum/supply_pack/emergency/metalfoam - name = "Metal Foam Grenade Crate" - cost = 1000 - contains = list(/obj/item/storage/box/metalfoam) - crate_name = "metal foam grenade crate" - -/datum/supply_pack/emergency/droneshells - name = "Drone Shell Crate" - cost = 1000 - contains = list(/obj/item/drone_shell, - /obj/item/drone_shell, - /obj/item/drone_shell) - crate_name = "drone shell crate" - -/datum/supply_pack/emergency/specialops - name = "Special Ops Supplies" - hidden = TRUE - cost = 2000 - contains = list(/obj/item/storage/box/emps, - /obj/item/grenade/smokebomb, - /obj/item/grenade/smokebomb, - /obj/item/grenade/smokebomb, - /obj/item/pen/sleepy, - /obj/item/grenade/chem_grenade/incendiary) - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - -/datum/supply_pack/emergency/syndicate - name = "NULL_ENTRY" - hidden = TRUE - cost = 20000 - contains = list() - crate_name = "emergency crate" - crate_type = /obj/structure/closet/crate/internals - dangerous = TRUE - -/datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) - var/crate_value = 30 - var/list/uplink_items = get_uplink_items(SSticker.mode) - while(crate_value) - var/category = pick(uplink_items) - var/item = pick(uplink_items[category]) - var/datum/uplink_item/I = uplink_items[category][item] - - if(!I.surplus || prob(100 - I.surplus)) - continue - if(crate_value < I.cost) - continue - crate_value -= I.cost - new I.item(C) - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Security //////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/security - group = "Security" - access = ACCESS_SECURITY - crate_type = /obj/structure/closet/crate/secure/gear - -/datum/supply_pack/security/supplies - name = "Security Supplies Crate" - cost = 1000 - contains = list(/obj/item/storage/box/flashbangs, - /obj/item/storage/box/teargas, - /obj/item/storage/box/flashes, - /obj/item/storage/box/handcuffs) - crate_name = "security supply crate" - -/datum/supply_pack/security/helmets - name = "Helmets Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/helmet/sec, - /obj/item/clothing/head/helmet/sec, - /obj/item/clothing/head/helmet/sec) - crate_name = "helmet crate" - -/datum/supply_pack/security/armor - name = "Armor Crate" - cost = 1000 - contains = list(/obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest) - crate_name = "armor crate" - -/datum/supply_pack/security/baton - name = "Stun Batons Crate" - cost = 1000 - contains = list(/obj/item/melee/baton/loaded, - /obj/item/melee/baton/loaded, - /obj/item/melee/baton/loaded) - crate_name = "stun baton crate" - -/datum/supply_pack/security/wall_flash - name = "Wall-Mounted Flash Crate" - cost = 1000 - contains = list(/obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash, - /obj/item/storage/box/wall_flash) - crate_name = "wall-mounted flash crate" - -/datum/supply_pack/security/laser - name = "Lasers Crate" - cost = 2000 - contains = list(/obj/item/gun/energy/laser, - /obj/item/gun/energy/laser, - /obj/item/gun/energy/laser) - crate_name = "laser crate" - -/datum/supply_pack/security/taser - name = "Taser Crate" - cost = 3000 - contains = list(/obj/item/gun/energy/e_gun/advtaser, - /obj/item/gun/energy/e_gun/advtaser, - /obj/item/gun/energy/e_gun/advtaser) - crate_name = "taser crate" - -/datum/supply_pack/security/disabler - name = "Disabler Crate" - cost = 1500 - contains = list(/obj/item/gun/energy/disabler, - /obj/item/gun/energy/disabler, - /obj/item/gun/energy/disabler) - crate_name = "disabler crate" - -/datum/supply_pack/security/forensics - name = "Forensics Crate" - cost = 2000 - contains = list(/obj/item/device/detective_scanner, - /obj/item/storage/box/evidence, - /obj/item/device/camera, - /obj/item/device/taperecorder, - /obj/item/toy/crayon/white, - /obj/item/clothing/head/fedora/det_hat) - crate_name = "forensics crate" - -/datum/supply_pack/security/armory - access = ACCESS_ARMORY - crate_type = /obj/structure/closet/crate/secure/weapon - -/datum/supply_pack/security/armory/riothelmets - name = "Riot Helmets Crate" - cost = 1500 - contains = list(/obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot, - /obj/item/clothing/head/helmet/riot) - crate_name = "riot helmets crate" - -/datum/supply_pack/security/armory/riotarmor - name = "Riot Armor Crate" - cost = 1500 - contains = list(/obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot) - crate_name = "riot armor crate" - -/datum/supply_pack/security/armory/riotshields - name = "Riot Shields Crate" - cost = 2000 - contains = list(/obj/item/shield/riot, - /obj/item/shield/riot, - /obj/item/shield/riot) - crate_name = "riot shields crate" - -/datum/supply_pack/security/armory/bulletarmor - name = "Bulletproof Armor Crate" - cost = 1500 - contains = list(/obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof, - /obj/item/clothing/suit/armor/bulletproof) - crate_name = "bulletproof armor crate" - -/datum/supply_pack/security/armory/swat - name = "SWAT Crate" - cost = 6000 - contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/suit/space/swat, - /obj/item/clothing/suit/space/swat, - /obj/item/clothing/mask/gas/sechailer/swat, - /obj/item/clothing/mask/gas/sechailer/swat, - /obj/item/storage/belt/military/assault, - /obj/item/storage/belt/military/assault, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat) - crate_name = "swat crate" - -/datum/supply_pack/security/armory/combatknives - name = "Combat Knives Crate" - cost = 3000 - contains = list(/obj/item/kitchen/knife/combat, - /obj/item/kitchen/knife/combat, - /obj/item/kitchen/knife/combat) - crate_name = "combat knife crate" - -/datum/supply_pack/security/armory/laserarmor - name = "Reflector Vest Crate" - cost = 2000 - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof) - crate_name = "reflector vest crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/security/armory/ballistic - name = "Combat Shotguns Crate" - cost = 8000 - contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/gun/ballistic/shotgun/automatic/combat, - /obj/item/storage/belt/bandolier, - /obj/item/storage/belt/bandolier, - /obj/item/storage/belt/bandolier) - crate_name = "combat shotguns crate" - -/datum/supply_pack/security/armory/energy - name = "Energy Guns Crate" - cost = 2500 - contains = list(/obj/item/gun/energy/e_gun, - /obj/item/gun/energy/e_gun) - crate_name = "energy gun crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/security/armory/fire - name = "Incendiary Weapons Crate" - cost = 1500 - access = ACCESS_HEADS - contains = list(/obj/item/flamethrower/full, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/grenade/chem_grenade/incendiary, - /obj/item/grenade/chem_grenade/incendiary, - /obj/item/grenade/chem_grenade/incendiary) - crate_name = "incendiary weapons crate" - crate_type = /obj/structure/closet/crate/secure/plasma - dangerous = TRUE - -/datum/supply_pack/security/armory/wt550 - name = "WT-550 Auto Rifle Crate" - cost = 3500 - contains = list(/obj/item/gun/ballistic/automatic/wt550, - /obj/item/gun/ballistic/automatic/wt550) - crate_name = "auto rifle crate" - -/datum/supply_pack/security/armory/wt550ammo - name = "WT-550 Auto Rifle Ammo Crate" - cost = 3000 - contains = list(/obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9, - /obj/item/ammo_box/magazine/wt550m9) - crate_name = "auto rifle ammo crate" - -/datum/supply_pack/security/armory/mindshield - name = "mindshield implants Crate" - cost = 4000 - contains = list(/obj/item/storage/lockbox/loyalty) - crate_name = "mindshield implant crate" - -/datum/supply_pack/security/armory/trackingimp - name = "Tracking Implants Crate" - cost = 2000 - contains = list(/obj/item/storage/box/trackimp) - crate_name = "tracking implant crate" - -/datum/supply_pack/security/armory/chemimp - name = "Chemical Implants Crate" - cost = 2000 - contains = list(/obj/item/storage/box/chemimp) - crate_name = "chemical implant crate" - -/datum/supply_pack/security/armory/exileimp - name = "Exile Implants Crate" - cost = 3000 - contains = list(/obj/item/storage/box/exileimp) - crate_name = "exile implant crate" - -/datum/supply_pack/security/securitybarriers - name = "Security Barriers Crate" - contains = list(/obj/item/grenade/barrier, - /obj/item/grenade/barrier, - /obj/item/grenade/barrier, - /obj/item/grenade/barrier) - cost = 2000 - crate_name = "security barriers crate" - -/datum/supply_pack/security/firingpins - name = "Standard Firing Pins Crate" - cost = 2000 - contains = list(/obj/item/storage/box/firingpins, - /obj/item/storage/box/firingpins) - crate_name = "firing pins crate" - -/datum/supply_pack/security/securityclothes - name = "Security Clothing Crate" - cost = 3000 - contains = list(/obj/item/clothing/under/rank/security/navyblue, - /obj/item/clothing/under/rank/security/navyblue, - /obj/item/clothing/suit/security/officer, - /obj/item/clothing/suit/security/officer, - /obj/item/clothing/head/beret/sec/navyofficer, - /obj/item/clothing/head/beret/sec/navyofficer, - /obj/item/clothing/under/rank/warden/navyblue, - /obj/item/clothing/suit/security/warden, - /obj/item/clothing/head/beret/sec/navywarden, - /obj/item/clothing/under/rank/head_of_security/navyblue, - /obj/item/clothing/suit/security/hos, - /obj/item/clothing/head/beret/sec/navyhos) - crate_name = "security clothing crate" - -/datum/supply_pack/security/justiceinbound - name = "Standard Justice Enforcer Crate" - cost = 6000 //justice comes at a price. An expensive, noisy price. - contraband = TRUE - contains = list(/obj/item/clothing/head/helmet/justice, - /obj/item/clothing/mask/gas/sechailer) - crate_name = "security clothing crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Engineering ///////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/engineering - group = "Engineering" - crate_type = /obj/structure/closet/crate/engineering - -/datum/supply_pack/engineering/fueltank - name = "Fuel Tank Crate" - cost = 800 - contains = list(/obj/structure/reagent_dispensers/fueltank) - crate_name = "fuel tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/oxygen - name = "Oxygen Canister" - cost = 1500 - contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) - crate_name = "oxygen canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/nitrogen - name = "Nitrogen Canister" - cost = 2000 - contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) - crate_name = "nitrogen canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/engineering/carbon_dio - name = "Carbon Dioxide Canister" - cost = 3000 - contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) - crate_name = "carbon dioxide canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/science/nitrous_oxide_canister - name = "Nitrous Oxide Canister" - cost = 3000 - access = ACCESS_ATMOSPHERICS - contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide) - crate_name = "nitrous oxide canister crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/engineering/tools - name = "Toolbox Crate" - contains = list(/obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/mechanical) - cost = 1000 - crate_name = "toolbox crate" - -/datum/supply_pack/engineering/powergamermitts - name = "Insulated Gloves Crate" - cost = 2000 //Made of pure-grade bullshittinium - contains = list(/obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow, - /obj/item/clothing/gloves/color/yellow) - crate_name = "insulated gloves crate" - -/datum/supply_pack/engineering/power - name = "Powercell Crate" - cost = 1000 - contains = list(/obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high) - crate_name = "electrical maintenance crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/obj/item/stock_parts/cell/inducer_supply - maxcharge = 5000 - charge = 5000 - -/datum/supply_pack/engineering/inducers - name = "NT-75 Electromagnetic Power Inducers Crate" - cost = 2000 - contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}, /obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}) //FALSE doesn't work in modified type paths apparently. - crate_name = "inducer crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/engiequipment - name = "Engineering Gear Crate" - cost = 1300 - contains = list(/obj/item/storage/belt/utility, - /obj/item/storage/belt/utility, - /obj/item/storage/belt/utility, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/suit/hazardvest, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/welding, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/glasses/meson/engine, - /obj/item/clothing/glasses/meson/engine) - crate_name = "engineering gear crate" - - -/datum/supply_pack/engineering/shieldgen - name = "Anti-breach Shield Projector Crate" - cost = 2500 - contains = list(/obj/machinery/shieldgen, - /obj/machinery/shieldgen) - crate_name = "anti-breach shield projector crate" - -/datum/supply_pack/engineering/grounding_rods - name = "Grounding Rod Crate" - cost = 1700 - contains = list(/obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod, - /obj/machinery/power/grounding_rod) - crate_name = "grounding rod crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/pacman - name = "P.A.C.M.A.N Generator Crate" - cost = 2500 - contains = list(/obj/machinery/power/port_gen/pacman) - crate_name = "PACMAN generator crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/solar - name = "Solar Panel Crate" - cost = 2000 - contains = list(/obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/solar_assembly, - /obj/item/circuitboard/computer/solar_control, - /obj/item/electronics/tracker, - /obj/item/paper/guides/jobs/engi/solars) - crate_name = "solar panel crate" - crate_type = /obj/structure/closet/crate/engineering/electrical - -/datum/supply_pack/engineering/engine - name = "Emitter Crate" - cost = 1500 - access = ACCESS_CE - contains = list(/obj/machinery/power/emitter, - /obj/machinery/power/emitter) - crate_name = "emitter crate" - crate_type = /obj/structure/closet/crate/secure/engineering - dangerous = TRUE - -/datum/supply_pack/engineering/engine/field_gen - name = "Field Generator Crate" - cost = 1500 - contains = list(/obj/machinery/field/generator, - /obj/machinery/field/generator) - crate_name = "field generator crate" - -/datum/supply_pack/engineering/engine/sing_gen - name = "Singularity Generator Crate" - cost = 5000 - contains = list(/obj/machinery/the_singularitygen) - crate_name = "singularity generator crate" - -/datum/supply_pack/engineering/engine/tesla_gen - name = "Tesla Generator Crate" - cost = 5000 - contains = list(/obj/machinery/the_singularitygen/tesla) - crate_name = "tesla generator crate" - -/datum/supply_pack/engineering/engine/collector - name = "Collector Crate" - cost = 2500 - contains = list(/obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector, - /obj/machinery/power/rad_collector) - crate_name = "collector crate" - -/datum/supply_pack/engineering/engine/PA - name = "Particle Accelerator Crate" - cost = 3000 - contains = list(/obj/structure/particle_accelerator/fuel_chamber, - /obj/machinery/particle_accelerator/control_box, - /obj/structure/particle_accelerator/particle_emitter/center, - /obj/structure/particle_accelerator/particle_emitter/left, - /obj/structure/particle_accelerator/particle_emitter/right, - /obj/structure/particle_accelerator/power_box, - /obj/structure/particle_accelerator/end_cap) - crate_name = "particle accelerator crate" - -/datum/supply_pack/engineering/engine/supermatter_shard - name = "Supermatter Shard Crate" - cost = 10000 - access = ACCESS_CE - contains = list(/obj/machinery/power/supermatter_shard) - crate_name = "supermatter shard crate" - crate_type = /obj/structure/closet/crate/secure/engineering - dangerous = TRUE - -/datum/supply_pack/engineering/engine/am_shielding - name = "Antimatter Shielding Crate" - cost = 2000 - contains = list(/obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container, - /obj/item/device/am_shielding_container)//10 shields: 3x3 containment and a core - crate_name = "antimatter shielding crate" - -/datum/supply_pack/engineering/engine/am_core - name = "Antimatter Control Crate" - cost = 5000 - contains = list(/obj/machinery/power/am_control_unit) - crate_name = "antimatter control crate" - -/datum/supply_pack/engineering/engine/am_jar - name = "Antimatter Containment Jar Crate" - cost = 2000 - contains = list(/obj/item/am_containment, - /obj/item/am_containment) - crate_name = "antimatter jar crate" - -/datum/supply_pack/engineering/shuttle_engine - name = "Shuttle Engine Crate" - cost = 5000 - access = ACCESS_CE - contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) - crate_name = "shuttle engine crate" - crate_type = /obj/structure/closet/crate/secure/engineering - special = TRUE - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Medical ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/medical - group = "Medical" - crate_type = /obj/structure/closet/crate/medical - -/datum/supply_pack/medical/supplies - name = "Medical Supplies Crate" - cost = 2000 - contains = list(/obj/item/reagent_containers/glass/bottle/charcoal, - /obj/item/reagent_containers/glass/bottle/charcoal, - /obj/item/reagent_containers/glass/bottle/epinephrine, - /obj/item/reagent_containers/glass/bottle/epinephrine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/morphine, - /obj/item/reagent_containers/glass/bottle/toxin, - /obj/item/reagent_containers/glass/bottle/toxin, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/reagent_containers/glass/beaker/large, - /obj/item/reagent_containers/pill/insulin, - /obj/item/reagent_containers/pill/insulin, - /obj/item/reagent_containers/pill/insulin, - /obj/item/reagent_containers/pill/insulin, - /obj/item/stack/medical/gauze, - /obj/item/storage/box/beakers, - /obj/item/storage/box/syringes, - /obj/item/storage/box/bodybags) - crate_name = "medical supplies crate" - -/datum/supply_pack/medical/firstaid - name = "First Aid Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/regular, - /obj/item/storage/firstaid/regular) - crate_name = "first aid kit crate" - -/datum/supply_pack/medical/firstaidbruises - name = "Bruise Treatment Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/brute, - /obj/item/storage/firstaid/brute, - /obj/item/storage/firstaid/brute) - crate_name = "brute treatment kit crate" - -/datum/supply_pack/medical/firstaidburns - name = "Burn Treatment Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/fire, - /obj/item/storage/firstaid/fire, - /obj/item/storage/firstaid/fire) - crate_name = "burn treatment kit crate" - -/datum/supply_pack/medical/firstaidtoxins - name = "Toxin Treatment Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/toxin, - /obj/item/storage/firstaid/toxin) - crate_name = "toxin treatment kit crate" - -/datum/supply_pack/medical/firstaidoxygen - name = "Oxygen Deprivation Kit Crate" - cost = 1000 - contains = list(/obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/o2, - /obj/item/storage/firstaid/o2) - crate_name = "oxygen deprivation kit crate" - -/datum/supply_pack/medical/virus - name = "Virus Crate" - cost = 2500 - access = ACCESS_CMO - contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, - /obj/item/reagent_containers/glass/bottle/cold, - /obj/item/reagent_containers/glass/bottle/epiglottis_virion, - /obj/item/reagent_containers/glass/bottle/liver_enhance_virion, - /obj/item/reagent_containers/glass/bottle/fake_gbs, - /obj/item/reagent_containers/glass/bottle/magnitis, - /obj/item/reagent_containers/glass/bottle/pierrot_throat, - /obj/item/reagent_containers/glass/bottle/brainrot, - /obj/item/reagent_containers/glass/bottle/hallucigen_virion, - /obj/item/reagent_containers/glass/bottle/anxiety, - /obj/item/reagent_containers/glass/bottle/beesease, - /obj/item/storage/box/syringes, - /obj/item/storage/box/beakers, - /obj/item/reagent_containers/glass/bottle/mutagen) - crate_name = "virus crate" - crate_type = /obj/structure/closet/crate/secure/plasma - dangerous = TRUE - -/datum/supply_pack/medical/bloodpacks - name = "Blood Pack Variety Crate" - cost = 3500 - contains = list(/obj/item/reagent_containers/blood/empty, - /obj/item/reagent_containers/blood/empty, - /obj/item/reagent_containers/blood/APlus, - /obj/item/reagent_containers/blood/AMinus, - /obj/item/reagent_containers/blood/BPlus, - /obj/item/reagent_containers/blood/BMinus, - /obj/item/reagent_containers/blood/OPlus, - /obj/item/reagent_containers/blood/OMinus) - crate_name = "blood freezer" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/medical/iv_drip - name = "IV Drip Crate" - cost = 1000 - contains = list(/obj/machinery/iv_drip) - crate_name = "iv drip crate" - -/datum/supply_pack/medical/defibs - name = "Defibrillator Crate" - cost = 2500 - contains = list(/obj/item/defibrillator/loaded, - /obj/item/defibrillator/loaded) - crate_name = "defibrillator crate" - -/datum/supply_pack/medical/vending - name = "Medical Vending Crate" - cost = 2000 - contains = list(/obj/item/vending_refill/medical, - /obj/item/vending_refill/medical, - /obj/item/vending_refill/medical) - crate_name = "medical vending crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Science ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/science - group = "Science" - crate_type = /obj/structure/closet/crate/science - -/datum/supply_pack/science/robotics - name = "Robotics Assembly Crate" - cost = 1000 - access = ACCESS_ROBOTICS - contains = list(/obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/storage/toolbox/electrical, - /obj/item/storage/box/flashes, - /obj/item/stock_parts/cell/high, - /obj/item/stock_parts/cell/high) - crate_name = "robotics assembly crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/robotics/mecha_ripley - name = "Circuit Crate (Ripley APLU)" - cost = 3000 - access = ACCESS_ROBOTICS - contains = list(/obj/item/book/manual/ripley_build_and_repair, - /obj/item/circuitboard/mecha/ripley/main, - /obj/item/circuitboard/mecha/ripley/peripherals) - crate_name = "\improper APLU Ripley circuit crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/robotics/mecha_odysseus - name = "Circuit Crate (Odysseus)" - cost = 2500 - access = ACCESS_ROBOTICS - contains = list(/obj/item/circuitboard/mecha/odysseus/peripherals, - /obj/item/circuitboard/mecha/odysseus/main) - crate_name = "\improper Odysseus circuit crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/plasma - name = "Plasma Assembly Crate" - cost = 1000 - access = ACCESS_TOX_STORAGE - contains = list(/obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/tank/internals/plasma, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/igniter, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/prox_sensor, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/timer, - /obj/item/device/assembly/timer) - crate_name = "plasma assembly crate" - crate_type = /obj/structure/closet/crate/secure/plasma - -/datum/supply_pack/science/shieldwalls - name = "Shield Generators" - cost = 2000 - access = ACCESS_TELEPORTER - contains = list(/obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen, - /obj/machinery/shieldwallgen) - crate_name = "shield generators crate" - crate_type = /obj/structure/closet/crate/secure/science - -/datum/supply_pack/science/transfer_valves - name = "Tank Transfer Valves Crate" - cost = 6000 - access = ACCESS_RD - contains = list(/obj/item/device/transfer_valve, - /obj/item/device/transfer_valve) - crate_name = "tank transfer valves crate" - crate_type = /obj/structure/closet/crate/secure/science - dangerous = TRUE - -/datum/supply_pack/science/tablets - name = "Tablet Crate" - cost = 5000 - contains = list(/obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo, - /obj/item/device/modular_computer/tablet/preset/cargo) - crate_name = "tablet crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Organic ///////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/organic - group = "Food & Livestock" - crate_type = /obj/structure/closet/crate/freezer - -/datum/supply_pack/organic/food - name = "Food Crate" - cost = 1000 - contains = list(/obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/rice, - /obj/item/reagent_containers/food/condiment/milk, - /obj/item/reagent_containers/food/condiment/soymilk, - /obj/item/reagent_containers/food/condiment/saltshaker, - /obj/item/reagent_containers/food/condiment/peppermill, - /obj/item/storage/fancy/egg_box, - /obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/reagent_containers/food/condiment/sugar, - /obj/item/reagent_containers/food/snacks/meat/slab/monkey, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana, - /obj/item/reagent_containers/food/snacks/grown/banana) - crate_name = "food crate" - -/datum/supply_pack/organic/pizza - name = "Pizza Crate" - cost = 6000 // Best prices this side of the galaxy. - contains = list(/obj/item/pizzabox/margherita, - /obj/item/pizzabox/mushroom, - /obj/item/pizzabox/meat, - /obj/item/pizzabox/vegetable) - crate_name = "pizza crate" - -/datum/supply_pack/organic/cream_piee - name = "High-yield Clown-grade Cream Pie Crate" - cost = 6000 - contains = list(/obj/item/storage/backpack/duffelbag/clown/cream_pie) - crate_name = "party equipment crate" - contraband = TRUE - access = ACCESS_THEATRE - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/organic/monkey - name = "Monkey Crate" - cost = 2000 - contains = list (/obj/item/storage/box/monkeycubes) - crate_name = "monkey crate" - -/datum/supply_pack/organic/party - name = "Party Equipment" - cost = 2000 - contains = list(/obj/item/storage/box/drinkingglasses, - /obj/item/reagent_containers/food/drinks/shaker, - /obj/item/reagent_containers/food/drinks/bottle/patron, - /obj/item/reagent_containers/food/drinks/bottle/goldschlager, - /obj/item/reagent_containers/food/drinks/ale, - /obj/item/reagent_containers/food/drinks/ale, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/device/flashlight/glowstick, - /obj/item/device/flashlight/glowstick/red, - /obj/item/device/flashlight/glowstick/blue, - /obj/item/device/flashlight/glowstick/cyan, - /obj/item/device/flashlight/glowstick/orange, - /obj/item/device/flashlight/glowstick/yellow, - /obj/item/device/flashlight/glowstick/pink) - crate_name = "party equipment crate" - -/datum/supply_pack/organic/critter - crate_type = /obj/structure/closet/crate/critter - -/datum/supply_pack/organic/critter/cow - name = "Cow Crate" - cost = 3000 - contains = list(/mob/living/simple_animal/cow) - crate_name = "cow crate" - -/datum/supply_pack/organic/critter/goat - name = "Goat Crate" - cost = 2500 - contains = list(/mob/living/simple_animal/hostile/retaliate/goat) - crate_name = "goat crate" - -/datum/supply_pack/organic/critter/chick - name = "Chicken Crate" - cost = 2000 - contains = list( /mob/living/simple_animal/chick) - crate_name = "chicken crate" - -/datum/supply_pack/organic/critter/corgi - name = "Corgi Crate" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/dog/corgi, - /obj/item/clothing/neck/petcollar) - crate_name = "corgi crate" - -/datum/supply_pack/organic/critter/corgi/generate() - . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/dog/corgi/D = locate() in . - qdel(D) - new /mob/living/simple_animal/pet/dog/corgi/Lisa(.) - -/datum/supply_pack/organic/critter/cat - name = "Cat Crate" - cost = 5000 //Cats are worth as much as corgis. - contains = list(/mob/living/simple_animal/pet/cat, - /obj/item/clothing/neck/petcollar, - /obj/item/toy/cattoy) - crate_name = "cat crate" - -/datum/supply_pack/organic/critter/cat/generate() - . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/cat/C = locate() in . - qdel(C) - new /mob/living/simple_animal/pet/cat/Proc(.) - -/datum/supply_pack/organic/critter/pug - name = "Pug Crate" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/dog/pug, - /obj/item/clothing/neck/petcollar) - crate_name = "pug crate" - -/datum/supply_pack/organic/critter/fox - name = "Fox Crate" - cost = 5000 - contains = list(/mob/living/simple_animal/pet/fox, - /obj/item/clothing/neck/petcollar) - crate_name = "fox crate" - -/datum/supply_pack/organic/critter/butterfly - name = "Butterflies Crate" - contraband = TRUE - cost = 5000 - contains = list(/mob/living/simple_animal/butterfly) - crate_name = "entomology samples crate" - -/datum/supply_pack/organic/critter/butterfly/generate() - . = ..() - for(var/i in 1 to 49) - new /mob/living/simple_animal/butterfly(.) - -/datum/supply_pack/organic/hydroponics - name = "Hydroponics Crate" - cost = 1500 - contains = list(/obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/spray/plantbgone, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/reagent_containers/glass/bottle/ammonia, - /obj/item/hatchet, - /obj/item/cultivator, - /obj/item/device/plant_analyzer, - /obj/item/clothing/gloves/botanic_leather, - /obj/item/clothing/suit/apron) - crate_name = "hydroponics crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/hydroponics/hydrotank - name = "Hydroponics Backpack Crate" - cost = 1000 - access = ACCESS_HYDROPONICS - contains = list(/obj/item/watertank) - crate_name = "hydroponics backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/organic/potted_plants - name = "Potted Plants Crate" - cost = 700 - contains = list(/obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random, - /obj/item/twohanded/required/kirbyplants/random) - crate_name = "potted plants crate" - crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/organic/hydroponics/seeds - name = "Seeds Crate" - cost = 1000 - contains = list(/obj/item/seeds/chili, - /obj/item/seeds/berry, - /obj/item/seeds/corn, - /obj/item/seeds/eggplant, - /obj/item/seeds/tomato, - /obj/item/seeds/soya, - /obj/item/seeds/wheat, - /obj/item/seeds/wheat/rice, - /obj/item/seeds/carrot, - /obj/item/seeds/sunflower, - /obj/item/seeds/chanter, - /obj/item/seeds/potato, - /obj/item/seeds/sugarcane) - crate_name = "seeds crate" - -/datum/supply_pack/organic/hydroponics/exoticseeds - name = "Exotic Seeds Crate" - cost = 1500 - contains = list(/obj/item/seeds/nettle, - /obj/item/seeds/replicapod, - /obj/item/seeds/replicapod, - /obj/item/seeds/replicapod, - /obj/item/seeds/plump, - /obj/item/seeds/liberty, - /obj/item/seeds/amanita, - /obj/item/seeds/reishi, - /obj/item/seeds/banana, - /obj/item/seeds/eggplant/eggy, - /obj/item/seeds/random, - /obj/item/seeds/random) - crate_name = "exotic seeds crate" - -/datum/supply_pack/organic/hydroponics/beekeeping_fullkit - name = "Beekeeping Starter Crate" - cost = 1500 - contains = list(/obj/structure/beebox, - /obj/item/honey_frame, - /obj/item/honey_frame, - /obj/item/honey_frame, - /obj/item/queen_bee/bought, - /obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit, - /obj/item/melee/flyswatter) - crate_name = "beekeeping starter crate" - -/datum/supply_pack/organic/hydroponics/beekeeping_suits - name = "Beekeeper Suit Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit, - /obj/item/clothing/head/beekeeper_head, - /obj/item/clothing/suit/beekeeper_suit) - crate_name = "beekeeper suits" - -/datum/supply_pack/organic/vending - name = "Bartending Supply Crate" - cost = 2000 - contains = list(/obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/boozeomat, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee, - /obj/item/vending_refill/coffee) - crate_name = "bartending supply crate" - -/datum/supply_pack/organic/vending/snack - name = "Snack Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/snack, - /obj/item/vending_refill/snack, - /obj/item/vending_refill/snack) - crate_name = "snacks supply crate" - -/datum/supply_pack/organic/vending/cola - name = "Softdrinks Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/cola, - /obj/item/vending_refill/cola, - /obj/item/vending_refill/cola) - crate_name = "soft drinks supply crate" - -/datum/supply_pack/organic/vending/cigarette - name = "Cigarette Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette, - /obj/item/vending_refill/cigarette) - crate_name = "cigarette supply crate" - -/datum/supply_pack/organic/vending/games - name = "Games Supply Crate" - cost = 1000 - contains = list(/obj/item/vending_refill/games, - /obj/item/vending_refill/games, - /obj/item/vending_refill/games) - crate_name = "games supply crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Materials /////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/materials - group = "Raw Materials" - -/datum/supply_pack/materials/metal50 - name = "50 Metal Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/metal/fifty) - crate_name = "metal sheets crate" - -/datum/supply_pack/materials/plasteel20 - name = "20 Plasteel Sheets" - cost = 7500 - contains = list(/obj/item/stack/sheet/plasteel/twenty) - crate_name = "plasteel sheets crate" - -/datum/supply_pack/materials/plasteel50 - name = "50 Plasteel Sheets" - cost = 16500 - contains = list(/obj/item/stack/sheet/plasteel/fifty) - crate_name = "plasteel sheets crate" - -/datum/supply_pack/materials/glass50 - name = "50 Glass Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/glass/fifty) - crate_name = "glass sheets crate" - -/datum/supply_pack/materials/wood50 - name = "50 Wood Planks" - cost = 2000 - contains = list(/obj/item/stack/sheet/mineral/wood/fifty) - crate_name = "wood planks crate" - -/datum/supply_pack/materials/cardboard50 - name = "50 Cardboard Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/cardboard/fifty) - crate_name = "cardboard sheets crate" - -/datum/supply_pack/materials/plastic50 - name = "50 Plastic Sheets" - cost = 1000 - contains = list(/obj/item/stack/sheet/plastic/fifty) - crate_name = "plastic sheets crate" - -/datum/supply_pack/materials/sandstone30 - name = "30 Sandstone Blocks" - cost = 1000 - contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) - crate_name = "sandstone blocks crate" - -////////////////////////////////////////////////////////////////////////////// -//////////////////////////// Miscellaneous /////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// - -/datum/supply_pack/misc - group = "Miscellaneous Supplies" - -/datum/supply_pack/misc/minerkit - name = "Shaft Miner Starter Kit" - cost = 2500 - access = ACCESS_QM - contains = list(/obj/item/pickaxe/mini, - /obj/item/clothing/glasses/meson, - /obj/item/device/t_scanner/adv_mining_scanner/lesser, - /obj/item/device/radio/headset/headset_cargo/mining, - /obj/item/storage/bag/ore, - /obj/item/clothing/suit/hooded/explorer, - /obj/item/clothing/mask/gas/explorer) - crate_name = "shaft miner starter kit" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/misc/mule - name = "MULEbot Crate" - cost = 2000 - contains = list(/mob/living/simple_animal/bot/mulebot) - crate_name = "\improper MULEbot Crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/conveyor - name = "Conveyor Assembly Crate" - cost = 1500 - contains = list(/obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_construct, - /obj/item/conveyor_switch_construct, - /obj/item/paper/guides/conveyor) - crate_name = "conveyor assembly crate" - -/datum/supply_pack/misc/watertank - name = "Water Tank Crate" - cost = 600 - contains = list(/obj/structure/reagent_dispensers/watertank) - crate_name = "water tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/hightank - name = "High-Capacity Water Tank Crate" - cost = 1200 - contains = list(/obj/structure/reagent_dispensers/watertank/high) - crate_name = "high-capacity water tank crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/water_vapor - name = "Water Vapor Canister" - cost = 2500 - contains = list(/obj/machinery/portable_atmospherics/canister/water_vapor) - crate_name = "water vapor canister crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/lasertag - name = "Laser Tag Crate" - cost = 1500 - contains = list(/obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/redtag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/gun/energy/laser/bluetag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/redtag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/suit/bluetag, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/redtaghelm, - /obj/item/clothing/head/helmet/bluetaghelm, - /obj/item/clothing/head/helmet/bluetaghelm, - /obj/item/clothing/head/helmet/bluetaghelm) - crate_name = "laser tag crate" - -/datum/supply_pack/misc/lasertag/pins - name = "Laser Tag Firing Pins Crate" - cost = 3000 - contraband = TRUE - contains = list(/obj/item/storage/box/lasertagpins) - crate_name = "laser tag crate" - -/datum/supply_pack/misc/clownpin - name = "Hilarious Firing Pin Crate" - cost = 5000 - contraband = TRUE - contains = list(/obj/item/device/firing_pin/clown) - // It's /technically/ a toy. For the clown, at least. - crate_name = "toy crate" - -/datum/supply_pack/misc/religious_supplies - name = "Religious Supplies Crate" - cost = 4000 // it costs so much because the Space Church is ran by Space Jews - contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/storage/book/bible/booze, - /obj/item/storage/book/bible/booze, - /obj/item/clothing/suit/hooded/chaplain_hoodie, - /obj/item/clothing/suit/hooded/chaplain_hoodie, - /obj/item/clothing/under/burial, - /obj/item/clothing/under/burial) - crate_name = "religious supplies crate" - -/datum/supply_pack/misc/book_crate - name = "Book Crate" - cost = 1500 - contains = list(/obj/item/book/codex_gigas, - /obj/item/book/manual/random/, - /obj/item/book/manual/random/, - /obj/item/book/manual/random/, - /obj/item/book/random/triple) - -/datum/supply_pack/misc/paper - name = "Bureaucracy Crate" - cost = 1500 - contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, - /obj/item/device/camera_film, - /obj/item/hand_labeler, - /obj/item/hand_labeler_refill, - /obj/item/hand_labeler_refill, - /obj/item/paper_bin, - /obj/item/pen/fourcolor, - /obj/item/pen/fourcolor, - /obj/item/pen, - /obj/item/pen/fountain, - /obj/item/pen/blue, - /obj/item/pen/red, - /obj/item/folder/blue, - /obj/item/folder/red, - /obj/item/folder/yellow, - /obj/item/clipboard, - /obj/item/clipboard, - /obj/item/stamp, - /obj/item/stamp/denied) - crate_name = "bureaucracy crate" - -/datum/supply_pack/misc/fountainpens - name = "Calligraphy Crate" - cost = 700 - contains = list(/obj/item/storage/box/fountainpens) - crate_type = /obj/structure/closet/crate/wooden - -/datum/supply_pack/misc/toner - name = "Toner Crate" - cost = 1000 - contains = list(/obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner, - /obj/item/device/toner) - crate_name = "toner crate" - -/datum/supply_pack/misc/janitor - name = "Janitorial Supplies Crate" - cost = 1000 - contains = list(/obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/bucket, - /obj/item/reagent_containers/glass/bucket, - /obj/item/mop, - /obj/item/caution, - /obj/item/caution, - /obj/item/caution, - /obj/item/storage/bag/trash, - /obj/item/reagent_containers/spray/cleaner, - /obj/item/reagent_containers/glass/rag, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner, - /obj/item/grenade/chem_grenade/cleaner) - crate_name = "janitorial supplies crate" - -/datum/supply_pack/misc/janitor/janicart - name = "Janitorial Cart and Galoshes Crate" - cost = 2000 - contains = list(/obj/structure/janitorialcart, - /obj/item/clothing/shoes/galoshes) - crate_name = "janitorial cart crate" - crate_type = /obj/structure/closet/crate/large - -/datum/supply_pack/misc/janitor/janitank - name = "Janitor Backpack Crate" - cost = 1000 - access = ACCESS_JANITOR - contains = list(/obj/item/watertank/janitor) - crate_name = "janitor backpack crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/misc/janitor/lightbulbs - name = "Replacement Lights" - cost = 1000 - contains = list(/obj/item/storage/box/lights/mixed, - /obj/item/storage/box/lights/mixed, - /obj/item/storage/box/lights/mixed) - crate_name = "replacement lights" - -/datum/supply_pack/misc/noslipfloor - name = "High-traction Floor Tiles" - cost = 2000 - contains = list(/obj/item/stack/tile/noslip/thirty) - crate_name = "high-traction floor tiles crate" - -/datum/supply_pack/misc/plasmaman - name = "Plasmaman Supply Kit" - cost = 2000 - contains = list(/obj/item/clothing/under/plasmaman, - /obj/item/clothing/under/plasmaman, - /obj/item/tank/internals/plasmaman/belt/full, - /obj/item/tank/internals/plasmaman/belt/full, - /obj/item/clothing/head/helmet/space/plasmaman, - /obj/item/clothing/head/helmet/space/plasmaman) - crate_name = "plasmaman supply kit" - -/datum/supply_pack/misc/costume - name = "Standard Costume Crate" - cost = 1000 - access = ACCESS_THEATRE - contains = list(/obj/item/storage/backpack/clown, - /obj/item/clothing/shoes/clown_shoes, - /obj/item/clothing/mask/gas/clown_hat, - /obj/item/clothing/under/rank/clown, - /obj/item/bikehorn, - /obj/item/clothing/under/rank/mime, - /obj/item/clothing/shoes/sneakers/black, - /obj/item/clothing/gloves/color/white, - /obj/item/clothing/mask/gas/mime, - /obj/item/clothing/head/beret, - /obj/item/clothing/suit/suspenders, - /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, - /obj/item/storage/backpack/mime) - crate_name = "standard costume crate" - crate_type = /obj/structure/closet/crate/secure - -/datum/supply_pack/misc/costume_original - name = "Original Costume Crate" - cost = 1000 - contains = list(/obj/item/clothing/head/snowman, - /obj/item/clothing/suit/snowman, - /obj/item/clothing/head/chicken, - /obj/item/clothing/suit/chickensuit, - /obj/item/clothing/mask/gas/monkeymask, - /obj/item/clothing/suit/monkeysuit, - /obj/item/clothing/head/cardborg, - /obj/item/clothing/suit/cardborg, - /obj/item/clothing/head/xenos, - /obj/item/clothing/suit/xenos, - /obj/item/clothing/suit/hooded/ian_costume, - /obj/item/clothing/suit/hooded/carp_costume, - /obj/item/clothing/suit/hooded/bee_costume) - crate_name = "original costume crate" - -/datum/supply_pack/misc/wizard - name = "Wizard Costume Crate" - cost = 2000 - contains = list(/obj/item/staff, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/head/wizard/fake) - crate_name = "wizard costume crate" - -/datum/supply_pack/misc/randomised - name = "Collectable Hats Crate!" - cost = 20000 - var/num_contained = 3 //number of items picked to be contained in a randomised crate - contains = list(/obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, - /obj/item/clothing/head/collectable/tophat, - /obj/item/clothing/head/collectable/captain, - /obj/item/clothing/head/collectable/beret, - /obj/item/clothing/head/collectable/welding, - /obj/item/clothing/head/collectable/flatcap, - /obj/item/clothing/head/collectable/pirate, - /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, - /obj/item/clothing/head/collectable/wizard, - /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/HoP, - /obj/item/clothing/head/collectable/thunderdome, - /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat) - crate_name = "collectable hats crate" - -/datum/supply_pack/misc/randomised/fill(obj/structure/closet/crate/C) - var/list/L = contains.Copy() - for(var/i in 1 to num_contained) - var/item = pick_n_take(L) - new item(C) - -/datum/supply_pack/misc/bigband - contains = list(/obj/item/device/instrument/violin, - /obj/item/device/instrument/guitar, - /obj/item/device/instrument/glockenspiel, - /obj/item/device/instrument/accordion, - /obj/item/device/instrument/saxophone, - /obj/item/device/instrument/trombone, - /obj/item/device/instrument/recorder, - /obj/item/device/instrument/harmonica, - /obj/structure/piano/unanchored) - name = "Big band instrument collection" - cost = 5000 - crate_name = "Big band musical instruments collection" - -/datum/supply_pack/misc/randomised/contraband - name = "Contraband Crate" - contraband = TRUE - cost = 3000 - num_contained = 5 - contains = list(/obj/item/poster/random_contraband, - /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, - /obj/item/storage/fancy/cigarettes/cigpack_midori, - /obj/item/seeds/ambrosia/deus, - /obj/item/clothing/neck/necklace/dope) - crate_name = "crate" - -/datum/supply_pack/misc/randomised/toys - name = "Toy Crate" - cost = 5000 // or play the arcade machines ya lazy bum - // TODO make this actually just use the arcade machine loot list - num_contained = 5 - contains = list(/obj/item/toy/spinningtoy, - /obj/item/toy/sword, - /obj/item/toy/foamblade, - /obj/item/toy/talking/AI, - /obj/item/toy/talking/owl, - /obj/item/toy/talking/griffin, - /obj/item/toy/nuke, - /obj/item/toy/minimeteor, - /obj/item/toy/plush/carpplushie, - /obj/item/toy/plush/lizardplushie, - /obj/item/toy/plush/snakeplushie, - /obj/item/toy/plush/nukeplushie, - /obj/item/toy/plush/slimeplushie, - /obj/item/coin/antagtoken, - /obj/item/stack/tile/fakespace/loaded, - /obj/item/gun/ballistic/shotgun/toy/crossbow, - /obj/item/toy/redbutton, - /obj/item/toy/eightball, - /obj/item/vending_refill/donksoft) - crate_name = "toy crate" - -/datum/supply_pack/misc/autodrobe - name = "Autodrobe Supply Crate" - cost = 1500 - contains = list(/obj/item/vending_refill/autodrobe, - /obj/item/vending_refill/autodrobe) - crate_name = "autodrobe supply crate" - -/datum/supply_pack/misc/formalwear - name = "Formalwear Crate" - cost = 3000 //Lots of very expensive items. You gotta pay up to look good! - contains = list(/obj/item/clothing/under/blacktango, - /obj/item/clothing/under/assistantformal, - /obj/item/clothing/under/assistantformal, - /obj/item/clothing/under/lawyer/bluesuit, - /obj/item/clothing/suit/toggle/lawyer, - /obj/item/clothing/under/lawyer/purpsuit, - /obj/item/clothing/suit/toggle/lawyer/purple, - /obj/item/clothing/under/lawyer/blacksuit, - /obj/item/clothing/suit/toggle/lawyer/black, - /obj/item/clothing/accessory/waistcoat, - /obj/item/clothing/neck/tie/blue, - /obj/item/clothing/neck/tie/red, - /obj/item/clothing/neck/tie/black, - /obj/item/clothing/head/bowler, - /obj/item/clothing/head/fedora, - /obj/item/clothing/head/flatcap, - /obj/item/clothing/head/beret, - /obj/item/clothing/head/that, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/shoes/laceup, - /obj/item/clothing/under/suit_jacket/charcoal, - /obj/item/clothing/under/suit_jacket/navy, - /obj/item/clothing/under/suit_jacket/burgundy, - /obj/item/clothing/under/suit_jacket/checkered, - /obj/item/clothing/under/suit_jacket/tan, - /obj/item/lipstick/random) - crate_name = "formalwear crate" - -/datum/supply_pack/misc/foamforce - name = "Foam Force Crate" - cost = 1000 - contains = list(/obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy, - /obj/item/gun/ballistic/shotgun/toy) - crate_name = "foam force crate" - -/datum/supply_pack/misc/foamforce/bonus - name = "Foam Force Pistols Crate" - contraband = TRUE - cost = 4000 - contains = list(/obj/item/gun/ballistic/automatic/toy/pistol, - /obj/item/gun/ballistic/automatic/toy/pistol, - /obj/item/ammo_box/magazine/toy/pistol, - /obj/item/ammo_box/magazine/toy/pistol) - crate_name = "foam force crate" - -/datum/supply_pack/misc/artsupply - name = "Art Supplies" - cost = 800 - contains = list(/obj/structure/easel, - /obj/structure/easel, - /obj/item/canvas/nineteenXnineteen, - /obj/item/canvas/nineteenXnineteen, - /obj/item/canvas/twentythreeXnineteen, - /obj/item/canvas/twentythreeXnineteen, - /obj/item/canvas/twentythreeXtwentythree, - /obj/item/canvas/twentythreeXtwentythree, - /obj/item/toy/crayon/rainbow, - /obj/item/toy/crayon/rainbow) - crate_name = "art supply crate" - -/datum/supply_pack/misc/bsa - name = "Bluespace Artillery Parts" - cost = 15000 - special = TRUE - contains = list(/obj/item/circuitboard/machine/bsa/front, - /obj/item/circuitboard/machine/bsa/middle, - /obj/item/circuitboard/machine/bsa/back, - /obj/item/circuitboard/computer/bsa_control - ) - crate_name= "bluespace artillery parts crate" - -/datum/supply_pack/misc/dna_vault - name = "DNA Vault Parts" - cost = 12000 - special = TRUE - contains = list( - /obj/item/circuitboard/machine/dna_vault, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe - ) - crate_name= "dna vault parts crate" - -/datum/supply_pack/misc/dna_probes - name = "DNA Vault Samplers" - cost = 3000 - special = TRUE - contains = list(/obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe, - /obj/item/device/dna_probe - ) - crate_name= "dna samplers crate" - - -/datum/supply_pack/misc/shield_sat - name = "Shield Generator Satellite" - cost = 3000 - special = TRUE - contains = list( - /obj/machinery/satellite/meteor_shield, - /obj/machinery/satellite/meteor_shield, - /obj/machinery/satellite/meteor_shield - ) - crate_name= "shield sat crate" - - -/datum/supply_pack/misc/shield_sat_control - name = "Shield System Control Board" - cost = 5000 - special = TRUE - contains = list(/obj/item/circuitboard/computer/sat_control) - crate_name= "shield control board crate" - -/datum/supply_pack/misc/bicycle - name = "Bicycle" - cost = 1000000 - contains = list(/obj/vehicle/bicycle) - crate_name = "Bicycle Crate" - crate_type = /obj/structure/closet/crate/large +/datum/supply_pack + var/name = "Crate" + var/group = "" + var/hidden = FALSE + var/contraband = FALSE + var/cost = 700 // Minimum cost, or infinite points are possible. + var/access = FALSE + var/access_any = FALSE + var/list/contains = null + var/crate_name = "crate" + var/crate_type = /obj/structure/closet/crate + var/dangerous = FALSE // Should we message admins? + var/special = FALSE //Event/Station Goals/Admin enabled packs + var/special_enabled = FALSE + var/DropPodOnly = FALSE//only usable by the Bluespace Drop Pod via the express cargo console + +/datum/supply_pack/proc/generate(turf/T) + var/obj/structure/closet/crate/C = new crate_type(T) + C.name = crate_name + if(access) + C.req_access = list(access) + if(access_any) + C.req_one_access = access_any + + fill(C) + + return C + +/datum/supply_pack/proc/fill(obj/structure/closet/crate/C) + for(var/item in contains) + new item(C) + + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Emergency /////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/emergency + group = "Emergency" + +/datum/supply_pack/emergency/spacesuit + name = "Space Suit Crate" + cost = 3000 + access = ACCESS_EVA + contains = list(/obj/item/clothing/suit/space, + /obj/item/clothing/suit/space, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/head/helmet/space, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath) + crate_name = "space suit crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/emergency/vehicle + name = "Biker Gang Kit" //TUNNEL SNAKES OWN THIS TOWN + cost = 2000 + contraband = TRUE + contains = list(/obj/vehicle/ridden/atv, + /obj/item/key, + /obj/item/clothing/suit/jacket/leather/overcoat, + /obj/item/clothing/gloves/color/black, + /obj/item/clothing/head/soft, + /obj/item/clothing/mask/bandana/skull)//so you can properly #cargoniabikergang + crate_name = "Biker Kit" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/emergency/equipment + name = "Emergency Equipment" + cost = 3500 + contains = list(/mob/living/simple_animal/bot/floorbot, + /mob/living/simple_animal/bot/floorbot, + /mob/living/simple_animal/bot/medbot, + /mob/living/simple_animal/bot/medbot, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas) + crate_name = "emergency crate" + crate_type = /obj/structure/closet/crate/internals + +/datum/supply_pack/emergency/internals + name = "Internals Crate" + cost = 1000 + contains = list(/obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air, + /obj/item/tank/internals/air) + crate_name = "internals crate" + crate_type = /obj/structure/closet/crate/internals + +/datum/supply_pack/emergency/firefighting + name = "Firefighting Crate" + cost = 1000 + contains = list(/obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/suit/fire/firefighter, + /obj/item/clothing/mask/gas, + /obj/item/clothing/mask/gas, + /obj/item/device/flashlight, + /obj/item/device/flashlight, + /obj/item/tank/internals/oxygen/red, + /obj/item/tank/internals/oxygen/red, + /obj/item/extinguisher, + /obj/item/extinguisher, + /obj/item/clothing/head/hardhat/red, + /obj/item/clothing/head/hardhat/red) + crate_name = "firefighting crate" + +/datum/supply_pack/emergency/atmostank + name = "Firefighting Watertank" + cost = 1000 + access = ACCESS_ATMOSPHERICS + contains = list(/obj/item/watertank/atmos) + crate_name = "firefighting watertank crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/emergency/radiation + name = "Radiation Protection Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/radiation, + /obj/item/clothing/head/radiation, + /obj/item/clothing/suit/radiation, + /obj/item/clothing/suit/radiation, + /obj/item/device/geiger_counter, + /obj/item/device/geiger_counter, + /obj/item/reagent_containers/food/drinks/bottle/vodka, + /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, + /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass) + crate_name = "radiation protection crate" + crate_type = /obj/structure/closet/crate/radiation + +/datum/supply_pack/emergency/weedcontrol + name = "Weed Control Crate" + cost = 1500 + access = ACCESS_HYDROPONICS + contains = list(/obj/item/scythe, + /obj/item/clothing/mask/gas, + /obj/item/grenade/chem_grenade/antiweed, + /obj/item/grenade/chem_grenade/antiweed) + crate_name = "weed control crate" + crate_type = /obj/structure/closet/crate/secure/hydroponics + +/datum/supply_pack/emergency/metalfoam + name = "Metal Foam Grenade Crate" + cost = 1000 + contains = list(/obj/item/storage/box/metalfoam) + crate_name = "metal foam grenade crate" + +/datum/supply_pack/emergency/droneshells + name = "Drone Shell Crate" + cost = 1000 + contains = list(/obj/item/drone_shell, + /obj/item/drone_shell, + /obj/item/drone_shell) + crate_name = "drone shell crate" + +/datum/supply_pack/emergency/specialops + name = "Special Ops Supplies" + hidden = TRUE + cost = 2000 + contains = list(/obj/item/storage/box/emps, + /obj/item/grenade/smokebomb, + /obj/item/grenade/smokebomb, + /obj/item/grenade/smokebomb, + /obj/item/pen/sleepy, + /obj/item/grenade/chem_grenade/incendiary) + crate_name = "emergency crate" + crate_type = /obj/structure/closet/crate/internals + +/datum/supply_pack/emergency/syndicate + name = "NULL_ENTRY" + hidden = TRUE + cost = 20000 + contains = list() + crate_name = "emergency crate" + crate_type = /obj/structure/closet/crate/internals + dangerous = TRUE + +/datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) + var/crate_value = 30 + var/list/uplink_items = get_uplink_items(SSticker.mode) + while(crate_value) + var/category = pick(uplink_items) + var/item = pick(uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + + if(!I.surplus || prob(100 - I.surplus)) + continue + if(crate_value < I.cost) + continue + crate_value -= I.cost + new I.item(C) + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Security //////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/security + group = "Security" + access = ACCESS_SECURITY + crate_type = /obj/structure/closet/crate/secure/gear + +/datum/supply_pack/security/supplies + name = "Security Supplies Crate" + cost = 1000 + contains = list(/obj/item/storage/box/flashbangs, + /obj/item/storage/box/teargas, + /obj/item/storage/box/flashes, + /obj/item/storage/box/handcuffs) + crate_name = "security supply crate" + +/datum/supply_pack/security/helmets + name = "Helmets Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/helmet/sec, + /obj/item/clothing/head/helmet/sec, + /obj/item/clothing/head/helmet/sec) + crate_name = "helmet crate" + +/datum/supply_pack/security/armor + name = "Armor Crate" + cost = 1000 + contains = list(/obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest, + /obj/item/clothing/suit/armor/vest) + crate_name = "armor crate" + +/datum/supply_pack/security/baton + name = "Stun Batons Crate" + cost = 1000 + contains = list(/obj/item/melee/baton/loaded, + /obj/item/melee/baton/loaded, + /obj/item/melee/baton/loaded) + crate_name = "stun baton crate" + +/datum/supply_pack/security/wall_flash + name = "Wall-Mounted Flash Crate" + cost = 1000 + contains = list(/obj/item/storage/box/wall_flash, + /obj/item/storage/box/wall_flash, + /obj/item/storage/box/wall_flash, + /obj/item/storage/box/wall_flash) + crate_name = "wall-mounted flash crate" + +/datum/supply_pack/security/laser + name = "Lasers Crate" + cost = 2000 + contains = list(/obj/item/gun/energy/laser, + /obj/item/gun/energy/laser, + /obj/item/gun/energy/laser) + crate_name = "laser crate" + +/datum/supply_pack/security/taser + name = "Taser Crate" + cost = 3000 + contains = list(/obj/item/gun/energy/e_gun/advtaser, + /obj/item/gun/energy/e_gun/advtaser, + /obj/item/gun/energy/e_gun/advtaser) + crate_name = "taser crate" + +/datum/supply_pack/security/disabler + name = "Disabler Crate" + cost = 1500 + contains = list(/obj/item/gun/energy/disabler, + /obj/item/gun/energy/disabler, + /obj/item/gun/energy/disabler) + crate_name = "disabler crate" + +/datum/supply_pack/security/forensics + name = "Forensics Crate" + cost = 2000 + contains = list(/obj/item/device/detective_scanner, + /obj/item/storage/box/evidence, + /obj/item/device/camera, + /obj/item/device/taperecorder, + /obj/item/toy/crayon/white, + /obj/item/clothing/head/fedora/det_hat) + crate_name = "forensics crate" + +/datum/supply_pack/security/armory + access = ACCESS_ARMORY + crate_type = /obj/structure/closet/crate/secure/weapon + +/datum/supply_pack/security/armory/riothelmets + name = "Riot Helmets Crate" + cost = 1500 + contains = list(/obj/item/clothing/head/helmet/riot, + /obj/item/clothing/head/helmet/riot, + /obj/item/clothing/head/helmet/riot) + crate_name = "riot helmets crate" + +/datum/supply_pack/security/armory/riotarmor + name = "Riot Armor Crate" + cost = 1500 + contains = list(/obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/riot, + /obj/item/clothing/suit/armor/riot) + crate_name = "riot armor crate" + +/datum/supply_pack/security/armory/riotshields + name = "Riot Shields Crate" + cost = 2000 + contains = list(/obj/item/shield/riot, + /obj/item/shield/riot, + /obj/item/shield/riot) + crate_name = "riot shields crate" + +/datum/supply_pack/security/armory/bulletarmor + name = "Bulletproof Armor Crate" + cost = 1500 + contains = list(/obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/armor/bulletproof, + /obj/item/clothing/suit/armor/bulletproof) + crate_name = "bulletproof armor crate" + +/datum/supply_pack/security/armory/swat + name = "SWAT Crate" + cost = 6000 + contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen, + /obj/item/clothing/head/helmet/swat/nanotrasen, + /obj/item/clothing/suit/space/swat, + /obj/item/clothing/suit/space/swat, + /obj/item/clothing/mask/gas/sechailer/swat, + /obj/item/clothing/mask/gas/sechailer/swat, + /obj/item/storage/belt/military/assault, + /obj/item/storage/belt/military/assault, + /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/combat) + crate_name = "swat crate" + +/datum/supply_pack/security/armory/combatknives + name = "Combat Knives Crate" + cost = 3000 + contains = list(/obj/item/kitchen/knife/combat, + /obj/item/kitchen/knife/combat, + /obj/item/kitchen/knife/combat) + crate_name = "combat knife crate" + +/datum/supply_pack/security/armory/laserarmor + name = "Reflector Vest Crate" + cost = 2000 + contains = list(/obj/item/clothing/suit/armor/laserproof, + /obj/item/clothing/suit/armor/laserproof) + crate_name = "reflector vest crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/security/armory/ballistic + name = "Combat Shotguns Crate" + cost = 8000 + contains = list(/obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/gun/ballistic/shotgun/automatic/combat, + /obj/item/storage/belt/bandolier, + /obj/item/storage/belt/bandolier, + /obj/item/storage/belt/bandolier) + crate_name = "combat shotguns crate" + +/datum/supply_pack/security/armory/energy + name = "Energy Guns Crate" + cost = 2500 + contains = list(/obj/item/gun/energy/e_gun, + /obj/item/gun/energy/e_gun) + crate_name = "energy gun crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/security/armory/fire + name = "Incendiary Weapons Crate" + cost = 1500 + access = ACCESS_HEADS + contains = list(/obj/item/flamethrower/full, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/grenade/chem_grenade/incendiary, + /obj/item/grenade/chem_grenade/incendiary, + /obj/item/grenade/chem_grenade/incendiary) + crate_name = "incendiary weapons crate" + crate_type = /obj/structure/closet/crate/secure/plasma + dangerous = TRUE + +/datum/supply_pack/security/armory/wt550 + name = "WT-550 Auto Rifle Crate" + cost = 3500 + contains = list(/obj/item/gun/ballistic/automatic/wt550, + /obj/item/gun/ballistic/automatic/wt550) + crate_name = "auto rifle crate" + +/datum/supply_pack/security/armory/wt550ammo + name = "WT-550 Auto Rifle Ammo Crate" + cost = 3000 + contains = list(/obj/item/ammo_box/magazine/wt550m9, + /obj/item/ammo_box/magazine/wt550m9, + /obj/item/ammo_box/magazine/wt550m9, + /obj/item/ammo_box/magazine/wt550m9) + crate_name = "auto rifle ammo crate" + +/datum/supply_pack/security/armory/mindshield + name = "mindshield implants Crate" + cost = 4000 + contains = list(/obj/item/storage/lockbox/loyalty) + crate_name = "mindshield implant crate" + +/datum/supply_pack/security/armory/trackingimp + name = "Tracking Implants Crate" + cost = 2000 + contains = list(/obj/item/storage/box/trackimp) + crate_name = "tracking implant crate" + +/datum/supply_pack/security/armory/chemimp + name = "Chemical Implants Crate" + cost = 2000 + contains = list(/obj/item/storage/box/chemimp) + crate_name = "chemical implant crate" + +/datum/supply_pack/security/armory/exileimp + name = "Exile Implants Crate" + cost = 3000 + contains = list(/obj/item/storage/box/exileimp) + crate_name = "exile implant crate" + +/datum/supply_pack/security/securitybarriers + name = "Security Barriers Crate" + contains = list(/obj/item/grenade/barrier, + /obj/item/grenade/barrier, + /obj/item/grenade/barrier, + /obj/item/grenade/barrier) + cost = 2000 + crate_name = "security barriers crate" + +/datum/supply_pack/security/firingpins + name = "Standard Firing Pins Crate" + cost = 2000 + contains = list(/obj/item/storage/box/firingpins, + /obj/item/storage/box/firingpins) + crate_name = "firing pins crate" + +/datum/supply_pack/security/securityclothes + name = "Security Clothing Crate" + cost = 3000 + contains = list(/obj/item/clothing/under/rank/security/navyblue, + /obj/item/clothing/under/rank/security/navyblue, + /obj/item/clothing/suit/security/officer, + /obj/item/clothing/suit/security/officer, + /obj/item/clothing/head/beret/sec/navyofficer, + /obj/item/clothing/head/beret/sec/navyofficer, + /obj/item/clothing/under/rank/warden/navyblue, + /obj/item/clothing/suit/security/warden, + /obj/item/clothing/head/beret/sec/navywarden, + /obj/item/clothing/under/rank/head_of_security/navyblue, + /obj/item/clothing/suit/security/hos, + /obj/item/clothing/head/beret/sec/navyhos) + crate_name = "security clothing crate" + +/datum/supply_pack/security/justiceinbound + name = "Standard Justice Enforcer Crate" + cost = 6000 //justice comes at a price. An expensive, noisy price. + contraband = TRUE + contains = list(/obj/item/clothing/head/helmet/justice, + /obj/item/clothing/mask/gas/sechailer) + crate_name = "security clothing crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Engineering ///////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/engineering + group = "Engineering" + crate_type = /obj/structure/closet/crate/engineering + +/datum/supply_pack/engineering/fueltank + name = "Fuel Tank Crate" + cost = 800 + contains = list(/obj/structure/reagent_dispensers/fueltank) + crate_name = "fuel tank crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/engineering/oxygen + name = "Oxygen Canister" + cost = 1500 + contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) + crate_name = "oxygen canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/engineering/nitrogen + name = "Nitrogen Canister" + cost = 2000 + contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) + crate_name = "nitrogen canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/engineering/carbon_dio + name = "Carbon Dioxide Canister" + cost = 3000 + contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) + crate_name = "carbon dioxide canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/science/nitrous_oxide_canister + name = "Nitrous Oxide Canister" + cost = 3000 + access = ACCESS_ATMOSPHERICS + contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide) + crate_name = "nitrous oxide canister crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/engineering/tools + name = "Toolbox Crate" + contains = list(/obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/mechanical, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/toolbox/mechanical, + /obj/item/storage/toolbox/mechanical) + cost = 1000 + crate_name = "toolbox crate" + +/datum/supply_pack/engineering/powergamermitts + name = "Insulated Gloves Crate" + cost = 2000 //Made of pure-grade bullshittinium + contains = list(/obj/item/clothing/gloves/color/yellow, + /obj/item/clothing/gloves/color/yellow, + /obj/item/clothing/gloves/color/yellow) + crate_name = "insulated gloves crate" + +/datum/supply_pack/engineering/power + name = "Powercell Crate" + cost = 1000 + contains = list(/obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high) + crate_name = "electrical maintenance crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/obj/item/stock_parts/cell/inducer_supply + maxcharge = 5000 + charge = 5000 + +/datum/supply_pack/engineering/inducers + name = "NT-75 Electromagnetic Power Inducers Crate" + cost = 2000 + contains = list(/obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}, /obj/item/inducer/sci {cell_type = /obj/item/stock_parts/cell/inducer_supply; opened = 0}) //FALSE doesn't work in modified type paths apparently. + crate_name = "inducer crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/engiequipment + name = "Engineering Gear Crate" + cost = 1300 + contains = list(/obj/item/storage/belt/utility, + /obj/item/storage/belt/utility, + /obj/item/storage/belt/utility, + /obj/item/clothing/suit/hazardvest, + /obj/item/clothing/suit/hazardvest, + /obj/item/clothing/suit/hazardvest, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/welding, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/head/hardhat, + /obj/item/clothing/glasses/meson/engine, + /obj/item/clothing/glasses/meson/engine) + crate_name = "engineering gear crate" + + +/datum/supply_pack/engineering/shieldgen + name = "Anti-breach Shield Projector Crate" + cost = 2500 + contains = list(/obj/machinery/shieldgen, + /obj/machinery/shieldgen) + crate_name = "anti-breach shield projector crate" + +/datum/supply_pack/engineering/grounding_rods + name = "Grounding Rod Crate" + cost = 1700 + contains = list(/obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod, + /obj/machinery/power/grounding_rod) + crate_name = "grounding rod crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/pacman + name = "P.A.C.M.A.N Generator Crate" + cost = 2500 + contains = list(/obj/machinery/power/port_gen/pacman) + crate_name = "PACMAN generator crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/solar + name = "Solar Panel Crate" + cost = 2000 + contains = list(/obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/solar_assembly, + /obj/item/circuitboard/computer/solar_control, + /obj/item/electronics/tracker, + /obj/item/paper/guides/jobs/engi/solars) + crate_name = "solar panel crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + +/datum/supply_pack/engineering/engine + name = "Emitter Crate" + cost = 1500 + access = ACCESS_CE + contains = list(/obj/machinery/power/emitter, + /obj/machinery/power/emitter) + crate_name = "emitter crate" + crate_type = /obj/structure/closet/crate/secure/engineering + dangerous = TRUE + +/datum/supply_pack/engineering/engine/field_gen + name = "Field Generator Crate" + cost = 1500 + contains = list(/obj/machinery/field/generator, + /obj/machinery/field/generator) + crate_name = "field generator crate" + +/datum/supply_pack/engineering/engine/sing_gen + name = "Singularity Generator Crate" + cost = 5000 + contains = list(/obj/machinery/the_singularitygen) + crate_name = "singularity generator crate" + +/datum/supply_pack/engineering/engine/tesla_gen + name = "Tesla Generator Crate" + cost = 5000 + contains = list(/obj/machinery/the_singularitygen/tesla) + crate_name = "tesla generator crate" + +/datum/supply_pack/engineering/engine/collector + name = "Collector Crate" + cost = 2500 + contains = list(/obj/machinery/power/rad_collector, + /obj/machinery/power/rad_collector, + /obj/machinery/power/rad_collector) + crate_name = "collector crate" + +/datum/supply_pack/engineering/engine/PA + name = "Particle Accelerator Crate" + cost = 3000 + contains = list(/obj/structure/particle_accelerator/fuel_chamber, + /obj/machinery/particle_accelerator/control_box, + /obj/structure/particle_accelerator/particle_emitter/center, + /obj/structure/particle_accelerator/particle_emitter/left, + /obj/structure/particle_accelerator/particle_emitter/right, + /obj/structure/particle_accelerator/power_box, + /obj/structure/particle_accelerator/end_cap) + crate_name = "particle accelerator crate" + +/datum/supply_pack/engineering/engine/supermatter_shard + name = "Supermatter Shard Crate" + cost = 10000 + access = ACCESS_CE + contains = list(/obj/machinery/power/supermatter_shard) + crate_name = "supermatter shard crate" + crate_type = /obj/structure/closet/crate/secure/engineering + dangerous = TRUE + +/datum/supply_pack/engineering/engine/am_shielding + name = "Antimatter Shielding Crate" + cost = 2000 + contains = list(/obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container, + /obj/item/device/am_shielding_container)//10 shields: 3x3 containment and a core + crate_name = "antimatter shielding crate" + +/datum/supply_pack/engineering/engine/am_core + name = "Antimatter Control Crate" + cost = 5000 + contains = list(/obj/machinery/power/am_control_unit) + crate_name = "antimatter control crate" + +/datum/supply_pack/engineering/engine/am_jar + name = "Antimatter Containment Jar Crate" + cost = 2000 + contains = list(/obj/item/am_containment, + /obj/item/am_containment) + crate_name = "antimatter jar crate" + +/datum/supply_pack/engineering/shuttle_engine + name = "Shuttle Engine Crate" + cost = 5000 + access = ACCESS_CE + contains = list(/obj/structure/shuttle/engine/propulsion/burst/cargo) + crate_name = "shuttle engine crate" + crate_type = /obj/structure/closet/crate/secure/engineering + special = TRUE + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Medical ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/medical + group = "Medical" + crate_type = /obj/structure/closet/crate/medical + +/datum/supply_pack/medical/supplies + name = "Medical Supplies Crate" + cost = 2000 + contains = list(/obj/item/reagent_containers/glass/bottle/charcoal, + /obj/item/reagent_containers/glass/bottle/charcoal, + /obj/item/reagent_containers/glass/bottle/epinephrine, + /obj/item/reagent_containers/glass/bottle/epinephrine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/morphine, + /obj/item/reagent_containers/glass/bottle/toxin, + /obj/item/reagent_containers/glass/bottle/toxin, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/reagent_containers/glass/beaker/large, + /obj/item/reagent_containers/pill/insulin, + /obj/item/reagent_containers/pill/insulin, + /obj/item/reagent_containers/pill/insulin, + /obj/item/reagent_containers/pill/insulin, + /obj/item/stack/medical/gauze, + /obj/item/storage/box/beakers, + /obj/item/storage/box/syringes, + /obj/item/storage/box/bodybags) + crate_name = "medical supplies crate" + +/datum/supply_pack/medical/firstaid + name = "First Aid Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/regular, + /obj/item/storage/firstaid/regular) + crate_name = "first aid kit crate" + +/datum/supply_pack/medical/firstaidbruises + name = "Bruise Treatment Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/brute, + /obj/item/storage/firstaid/brute, + /obj/item/storage/firstaid/brute) + crate_name = "brute treatment kit crate" + +/datum/supply_pack/medical/firstaidburns + name = "Burn Treatment Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/fire, + /obj/item/storage/firstaid/fire, + /obj/item/storage/firstaid/fire) + crate_name = "burn treatment kit crate" + +/datum/supply_pack/medical/firstaidtoxins + name = "Toxin Treatment Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/toxin, + /obj/item/storage/firstaid/toxin, + /obj/item/storage/firstaid/toxin) + crate_name = "toxin treatment kit crate" + +/datum/supply_pack/medical/firstaidoxygen + name = "Oxygen Deprivation Kit Crate" + cost = 1000 + contains = list(/obj/item/storage/firstaid/o2, + /obj/item/storage/firstaid/o2, + /obj/item/storage/firstaid/o2) + crate_name = "oxygen deprivation kit crate" + +/datum/supply_pack/medical/virus + name = "Virus Crate" + cost = 2500 + access = ACCESS_CMO + contains = list(/obj/item/reagent_containers/glass/bottle/flu_virion, + /obj/item/reagent_containers/glass/bottle/cold, + /obj/item/reagent_containers/glass/bottle/epiglottis_virion, + /obj/item/reagent_containers/glass/bottle/liver_enhance_virion, + /obj/item/reagent_containers/glass/bottle/fake_gbs, + /obj/item/reagent_containers/glass/bottle/magnitis, + /obj/item/reagent_containers/glass/bottle/pierrot_throat, + /obj/item/reagent_containers/glass/bottle/brainrot, + /obj/item/reagent_containers/glass/bottle/hallucigen_virion, + /obj/item/reagent_containers/glass/bottle/anxiety, + /obj/item/reagent_containers/glass/bottle/beesease, + /obj/item/storage/box/syringes, + /obj/item/storage/box/beakers, + /obj/item/reagent_containers/glass/bottle/mutagen) + crate_name = "virus crate" + crate_type = /obj/structure/closet/crate/secure/plasma + dangerous = TRUE + +/datum/supply_pack/medical/bloodpacks + name = "Blood Pack Variety Crate" + cost = 3500 + contains = list(/obj/item/reagent_containers/blood/empty, + /obj/item/reagent_containers/blood/empty, + /obj/item/reagent_containers/blood/APlus, + /obj/item/reagent_containers/blood/AMinus, + /obj/item/reagent_containers/blood/BPlus, + /obj/item/reagent_containers/blood/BMinus, + /obj/item/reagent_containers/blood/OPlus, + /obj/item/reagent_containers/blood/OMinus) + crate_name = "blood freezer" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/medical/iv_drip + name = "IV Drip Crate" + cost = 1000 + contains = list(/obj/machinery/iv_drip) + crate_name = "iv drip crate" + +/datum/supply_pack/medical/defibs + name = "Defibrillator Crate" + cost = 2500 + contains = list(/obj/item/defibrillator/loaded, + /obj/item/defibrillator/loaded) + crate_name = "defibrillator crate" + +/datum/supply_pack/medical/vending + name = "Medical Vending Crate" + cost = 2000 + contains = list(/obj/item/vending_refill/medical, + /obj/item/vending_refill/medical, + /obj/item/vending_refill/medical) + crate_name = "medical vending crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Science ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/science + group = "Science" + crate_type = /obj/structure/closet/crate/science + +/datum/supply_pack/science/robotics + name = "Robotics Assembly Crate" + cost = 1000 + access = ACCESS_ROBOTICS + contains = list(/obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/storage/toolbox/electrical, + /obj/item/storage/box/flashes, + /obj/item/stock_parts/cell/high, + /obj/item/stock_parts/cell/high) + crate_name = "robotics assembly crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/robotics/mecha_ripley + name = "Circuit Crate (Ripley APLU)" + cost = 3000 + access = ACCESS_ROBOTICS + contains = list(/obj/item/book/manual/ripley_build_and_repair, + /obj/item/circuitboard/mecha/ripley/main, + /obj/item/circuitboard/mecha/ripley/peripherals) + crate_name = "\improper APLU Ripley circuit crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/robotics/mecha_odysseus + name = "Circuit Crate (Odysseus)" + cost = 2500 + access = ACCESS_ROBOTICS + contains = list(/obj/item/circuitboard/mecha/odysseus/peripherals, + /obj/item/circuitboard/mecha/odysseus/main) + crate_name = "\improper Odysseus circuit crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/plasma + name = "Plasma Assembly Crate" + cost = 1000 + access = ACCESS_TOX_STORAGE + contains = list(/obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/tank/internals/plasma, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/igniter, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/prox_sensor, + /obj/item/device/assembly/timer, + /obj/item/device/assembly/timer, + /obj/item/device/assembly/timer) + crate_name = "plasma assembly crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/science/shieldwalls + name = "Shield Generators" + cost = 2000 + access = ACCESS_TELEPORTER + contains = list(/obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen, + /obj/machinery/shieldwallgen) + crate_name = "shield generators crate" + crate_type = /obj/structure/closet/crate/secure/science + +/datum/supply_pack/science/transfer_valves + name = "Tank Transfer Valves Crate" + cost = 6000 + access = ACCESS_RD + contains = list(/obj/item/device/transfer_valve, + /obj/item/device/transfer_valve) + crate_name = "tank transfer valves crate" + crate_type = /obj/structure/closet/crate/secure/science + dangerous = TRUE + +/datum/supply_pack/science/tablets + name = "Tablet Crate" + cost = 5000 + contains = list(/obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo, + /obj/item/device/modular_computer/tablet/preset/cargo) + crate_name = "tablet crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Organic ///////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/organic + group = "Food & Livestock" + crate_type = /obj/structure/closet/crate/freezer + +/datum/supply_pack/organic/food + name = "Food Crate" + cost = 1000 + contains = list(/obj/item/reagent_containers/food/condiment/flour, + /obj/item/reagent_containers/food/condiment/rice, + /obj/item/reagent_containers/food/condiment/milk, + /obj/item/reagent_containers/food/condiment/soymilk, + /obj/item/reagent_containers/food/condiment/saltshaker, + /obj/item/reagent_containers/food/condiment/peppermill, + /obj/item/storage/fancy/egg_box, + /obj/item/reagent_containers/food/condiment/enzyme, + /obj/item/reagent_containers/food/condiment/sugar, + /obj/item/reagent_containers/food/snacks/meat/slab/monkey, + /obj/item/reagent_containers/food/snacks/grown/banana, + /obj/item/reagent_containers/food/snacks/grown/banana, + /obj/item/reagent_containers/food/snacks/grown/banana) + crate_name = "food crate" + +/datum/supply_pack/organic/pizza + name = "Pizza Crate" + cost = 6000 // Best prices this side of the galaxy. + contains = list(/obj/item/pizzabox/margherita, + /obj/item/pizzabox/mushroom, + /obj/item/pizzabox/meat, + /obj/item/pizzabox/vegetable) + crate_name = "pizza crate" + +/datum/supply_pack/organic/cream_piee + name = "High-yield Clown-grade Cream Pie Crate" + cost = 6000 + contains = list(/obj/item/storage/backpack/duffelbag/clown/cream_pie) + crate_name = "party equipment crate" + contraband = TRUE + access = ACCESS_THEATRE + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/organic/monkey + name = "Monkey Crate" + cost = 2000 + contains = list (/obj/item/storage/box/monkeycubes) + crate_name = "monkey crate" + +/datum/supply_pack/organic/party + name = "Party Equipment" + cost = 2000 + contains = list(/obj/item/storage/box/drinkingglasses, + /obj/item/reagent_containers/food/drinks/shaker, + /obj/item/reagent_containers/food/drinks/bottle/patron, + /obj/item/reagent_containers/food/drinks/bottle/goldschlager, + /obj/item/reagent_containers/food/drinks/ale, + /obj/item/reagent_containers/food/drinks/ale, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/beer, + /obj/item/device/flashlight/glowstick, + /obj/item/device/flashlight/glowstick/red, + /obj/item/device/flashlight/glowstick/blue, + /obj/item/device/flashlight/glowstick/cyan, + /obj/item/device/flashlight/glowstick/orange, + /obj/item/device/flashlight/glowstick/yellow, + /obj/item/device/flashlight/glowstick/pink) + crate_name = "party equipment crate" + +/datum/supply_pack/organic/critter + crate_type = /obj/structure/closet/crate/critter + +/datum/supply_pack/organic/critter/cow + name = "Cow Crate" + cost = 3000 + contains = list(/mob/living/simple_animal/cow) + crate_name = "cow crate" + +/datum/supply_pack/organic/critter/goat + name = "Goat Crate" + cost = 2500 + contains = list(/mob/living/simple_animal/hostile/retaliate/goat) + crate_name = "goat crate" + +/datum/supply_pack/organic/critter/chick + name = "Chicken Crate" + cost = 2000 + contains = list( /mob/living/simple_animal/chick) + crate_name = "chicken crate" + +/datum/supply_pack/organic/critter/corgi + name = "Corgi Crate" + cost = 5000 + contains = list(/mob/living/simple_animal/pet/dog/corgi, + /obj/item/clothing/neck/petcollar) + crate_name = "corgi crate" + +/datum/supply_pack/organic/critter/corgi/generate() + . = ..() + if(prob(50)) + var/mob/living/simple_animal/pet/dog/corgi/D = locate() in . + qdel(D) + new /mob/living/simple_animal/pet/dog/corgi/Lisa(.) + +/datum/supply_pack/organic/critter/cat + name = "Cat Crate" + cost = 5000 //Cats are worth as much as corgis. + contains = list(/mob/living/simple_animal/pet/cat, + /obj/item/clothing/neck/petcollar, + /obj/item/toy/cattoy) + crate_name = "cat crate" + +/datum/supply_pack/organic/critter/cat/generate() + . = ..() + if(prob(50)) + var/mob/living/simple_animal/pet/cat/C = locate() in . + qdel(C) + new /mob/living/simple_animal/pet/cat/Proc(.) + +/datum/supply_pack/organic/critter/pug + name = "Pug Crate" + cost = 5000 + contains = list(/mob/living/simple_animal/pet/dog/pug, + /obj/item/clothing/neck/petcollar) + crate_name = "pug crate" + +/datum/supply_pack/organic/critter/fox + name = "Fox Crate" + cost = 5000 + contains = list(/mob/living/simple_animal/pet/fox, + /obj/item/clothing/neck/petcollar) + crate_name = "fox crate" + +/datum/supply_pack/organic/critter/butterfly + name = "Butterflies Crate" + contraband = TRUE + cost = 5000 + contains = list(/mob/living/simple_animal/butterfly) + crate_name = "entomology samples crate" + +/datum/supply_pack/organic/critter/butterfly/generate() + . = ..() + for(var/i in 1 to 49) + new /mob/living/simple_animal/butterfly(.) + +/datum/supply_pack/organic/hydroponics + name = "Hydroponics Crate" + cost = 1500 + contains = list(/obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/reagent_containers/glass/bottle/ammonia, + /obj/item/hatchet, + /obj/item/cultivator, + /obj/item/device/plant_analyzer, + /obj/item/clothing/gloves/botanic_leather, + /obj/item/clothing/suit/apron) + crate_name = "hydroponics crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/organic/hydroponics/hydrotank + name = "Hydroponics Backpack Crate" + cost = 1000 + access = ACCESS_HYDROPONICS + contains = list(/obj/item/watertank) + crate_name = "hydroponics backpack crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/organic/potted_plants + name = "Potted Plants Crate" + cost = 700 + contains = list(/obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random, + /obj/item/twohanded/required/kirbyplants/random) + crate_name = "potted plants crate" + crate_type = /obj/structure/closet/crate/hydroponics + +/datum/supply_pack/organic/hydroponics/seeds + name = "Seeds Crate" + cost = 1000 + contains = list(/obj/item/seeds/chili, + /obj/item/seeds/berry, + /obj/item/seeds/corn, + /obj/item/seeds/eggplant, + /obj/item/seeds/tomato, + /obj/item/seeds/soya, + /obj/item/seeds/wheat, + /obj/item/seeds/wheat/rice, + /obj/item/seeds/carrot, + /obj/item/seeds/sunflower, + /obj/item/seeds/chanter, + /obj/item/seeds/potato, + /obj/item/seeds/sugarcane) + crate_name = "seeds crate" + +/datum/supply_pack/organic/hydroponics/exoticseeds + name = "Exotic Seeds Crate" + cost = 1500 + contains = list(/obj/item/seeds/nettle, + /obj/item/seeds/replicapod, + /obj/item/seeds/replicapod, + /obj/item/seeds/replicapod, + /obj/item/seeds/plump, + /obj/item/seeds/liberty, + /obj/item/seeds/amanita, + /obj/item/seeds/reishi, + /obj/item/seeds/banana, + /obj/item/seeds/eggplant/eggy, + /obj/item/seeds/random, + /obj/item/seeds/random) + crate_name = "exotic seeds crate" + +/datum/supply_pack/organic/hydroponics/beekeeping_fullkit + name = "Beekeeping Starter Crate" + cost = 1500 + contains = list(/obj/structure/beebox, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/honey_frame, + /obj/item/queen_bee/bought, + /obj/item/clothing/head/beekeeper_head, + /obj/item/clothing/suit/beekeeper_suit, + /obj/item/melee/flyswatter) + crate_name = "beekeeping starter crate" + +/datum/supply_pack/organic/hydroponics/beekeeping_suits + name = "Beekeeper Suit Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/beekeeper_head, + /obj/item/clothing/suit/beekeeper_suit, + /obj/item/clothing/head/beekeeper_head, + /obj/item/clothing/suit/beekeeper_suit) + crate_name = "beekeeper suits" + +/datum/supply_pack/organic/vending + name = "Bartending Supply Crate" + cost = 2000 + contains = list(/obj/item/vending_refill/boozeomat, + /obj/item/vending_refill/boozeomat, + /obj/item/vending_refill/boozeomat, + /obj/item/vending_refill/coffee, + /obj/item/vending_refill/coffee, + /obj/item/vending_refill/coffee) + crate_name = "bartending supply crate" + +/datum/supply_pack/organic/vending/snack + name = "Snack Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/snack, + /obj/item/vending_refill/snack, + /obj/item/vending_refill/snack) + crate_name = "snacks supply crate" + +/datum/supply_pack/organic/vending/cola + name = "Softdrinks Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/cola, + /obj/item/vending_refill/cola, + /obj/item/vending_refill/cola) + crate_name = "soft drinks supply crate" + +/datum/supply_pack/organic/vending/cigarette + name = "Cigarette Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/cigarette, + /obj/item/vending_refill/cigarette, + /obj/item/vending_refill/cigarette) + crate_name = "cigarette supply crate" + +/datum/supply_pack/organic/vending/games + name = "Games Supply Crate" + cost = 1000 + contains = list(/obj/item/vending_refill/games, + /obj/item/vending_refill/games, + /obj/item/vending_refill/games) + crate_name = "games supply crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Materials /////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/materials + group = "Raw Materials" + +/datum/supply_pack/materials/metal50 + name = "50 Metal Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/metal/fifty) + crate_name = "metal sheets crate" + +/datum/supply_pack/materials/plasteel20 + name = "20 Plasteel Sheets" + cost = 7500 + contains = list(/obj/item/stack/sheet/plasteel/twenty) + crate_name = "plasteel sheets crate" + +/datum/supply_pack/materials/plasteel50 + name = "50 Plasteel Sheets" + cost = 16500 + contains = list(/obj/item/stack/sheet/plasteel/fifty) + crate_name = "plasteel sheets crate" + +/datum/supply_pack/materials/glass50 + name = "50 Glass Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/glass/fifty) + crate_name = "glass sheets crate" + +/datum/supply_pack/materials/wood50 + name = "50 Wood Planks" + cost = 2000 + contains = list(/obj/item/stack/sheet/mineral/wood/fifty) + crate_name = "wood planks crate" + +/datum/supply_pack/materials/cardboard50 + name = "50 Cardboard Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/cardboard/fifty) + crate_name = "cardboard sheets crate" + +/datum/supply_pack/materials/plastic50 + name = "50 Plastic Sheets" + cost = 1000 + contains = list(/obj/item/stack/sheet/plastic/fifty) + crate_name = "plastic sheets crate" + +/datum/supply_pack/materials/sandstone30 + name = "30 Sandstone Blocks" + cost = 1000 + contains = list(/obj/item/stack/sheet/mineral/sandstone/thirty) + crate_name = "sandstone blocks crate" + +////////////////////////////////////////////////////////////////////////////// +//////////////////////////// Miscellaneous /////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +/datum/supply_pack/misc + group = "Miscellaneous Supplies" + +/datum/supply_pack/misc/minerkit + name = "Shaft Miner Starter Kit" + cost = 2500 + access = ACCESS_QM + contains = list(/obj/item/pickaxe/mini, + /obj/item/clothing/glasses/meson, + /obj/item/device/t_scanner/adv_mining_scanner/lesser, + /obj/item/device/radio/headset/headset_cargo/mining, + /obj/item/storage/bag/ore, + /obj/item/clothing/suit/hooded/explorer, + /obj/item/clothing/mask/gas/explorer) + crate_name = "shaft miner starter kit" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/misc/mule + name = "MULEbot Crate" + cost = 2000 + contains = list(/mob/living/simple_animal/bot/mulebot) + crate_name = "\improper MULEbot Crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/conveyor + name = "Conveyor Assembly Crate" + cost = 1500 + contains = list(/obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_construct, + /obj/item/conveyor_switch_construct, + /obj/item/paper/guides/conveyor) + crate_name = "conveyor assembly crate" + +/datum/supply_pack/misc/watertank + name = "Water Tank Crate" + cost = 600 + contains = list(/obj/structure/reagent_dispensers/watertank) + crate_name = "water tank crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/hightank + name = "High-Capacity Water Tank Crate" + cost = 1200 + contains = list(/obj/structure/reagent_dispensers/watertank/high) + crate_name = "high-capacity water tank crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/water_vapor + name = "Water Vapor Canister" + cost = 2500 + contains = list(/obj/machinery/portable_atmospherics/canister/water_vapor) + crate_name = "water vapor canister crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/lasertag + name = "Laser Tag Crate" + cost = 1500 + contains = list(/obj/item/gun/energy/laser/redtag, + /obj/item/gun/energy/laser/redtag, + /obj/item/gun/energy/laser/redtag, + /obj/item/gun/energy/laser/bluetag, + /obj/item/gun/energy/laser/bluetag, + /obj/item/gun/energy/laser/bluetag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/redtag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/suit/bluetag, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/redtaghelm, + /obj/item/clothing/head/helmet/bluetaghelm, + /obj/item/clothing/head/helmet/bluetaghelm, + /obj/item/clothing/head/helmet/bluetaghelm) + crate_name = "laser tag crate" + +/datum/supply_pack/misc/lasertag/pins + name = "Laser Tag Firing Pins Crate" + cost = 3000 + contraband = TRUE + contains = list(/obj/item/storage/box/lasertagpins) + crate_name = "laser tag crate" + +/datum/supply_pack/misc/clownpin + name = "Hilarious Firing Pin Crate" + cost = 5000 + contraband = TRUE + contains = list(/obj/item/device/firing_pin/clown) + // It's /technically/ a toy. For the clown, at least. + crate_name = "toy crate" + +/datum/supply_pack/misc/religious_supplies + name = "Religious Supplies Crate" + cost = 4000 // it costs so much because the Space Church is ran by Space Jews + contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/storage/book/bible/booze, + /obj/item/storage/book/bible/booze, + /obj/item/clothing/suit/hooded/chaplain_hoodie, + /obj/item/clothing/suit/hooded/chaplain_hoodie, + /obj/item/clothing/under/burial, + /obj/item/clothing/under/burial) + crate_name = "religious supplies crate" + +/datum/supply_pack/misc/book_crate + name = "Book Crate" + cost = 1500 + contains = list(/obj/item/book/codex_gigas, + /obj/item/book/manual/random/, + /obj/item/book/manual/random/, + /obj/item/book/manual/random/, + /obj/item/book/random/triple) + +/datum/supply_pack/misc/paper + name = "Bureaucracy Crate" + cost = 1500 + contains = list(/obj/structure/filingcabinet/chestdrawer/wheeled, + /obj/item/device/camera_film, + /obj/item/hand_labeler, + /obj/item/hand_labeler_refill, + /obj/item/hand_labeler_refill, + /obj/item/paper_bin, + /obj/item/pen/fourcolor, + /obj/item/pen/fourcolor, + /obj/item/pen, + /obj/item/pen/fountain, + /obj/item/pen/blue, + /obj/item/pen/red, + /obj/item/folder/blue, + /obj/item/folder/red, + /obj/item/folder/yellow, + /obj/item/clipboard, + /obj/item/clipboard, + /obj/item/stamp, + /obj/item/stamp/denied) + crate_name = "bureaucracy crate" + +/datum/supply_pack/misc/fountainpens + name = "Calligraphy Crate" + cost = 700 + contains = list(/obj/item/storage/box/fountainpens) + crate_type = /obj/structure/closet/crate/wooden + +/datum/supply_pack/misc/toner + name = "Toner Crate" + cost = 1000 + contains = list(/obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner, + /obj/item/device/toner) + crate_name = "toner crate" + +/datum/supply_pack/misc/janitor + name = "Janitorial Supplies Crate" + cost = 1000 + contains = list(/obj/item/reagent_containers/glass/bucket, + /obj/item/reagent_containers/glass/bucket, + /obj/item/reagent_containers/glass/bucket, + /obj/item/mop, + /obj/item/caution, + /obj/item/caution, + /obj/item/caution, + /obj/item/storage/bag/trash, + /obj/item/reagent_containers/spray/cleaner, + /obj/item/reagent_containers/glass/rag, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner, + /obj/item/grenade/chem_grenade/cleaner) + crate_name = "janitorial supplies crate" + +/datum/supply_pack/misc/janitor/janicart + name = "Janitorial Cart and Galoshes Crate" + cost = 2000 + contains = list(/obj/structure/janitorialcart, + /obj/item/clothing/shoes/galoshes) + crate_name = "janitorial cart crate" + crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/misc/janitor/janitank + name = "Janitor Backpack Crate" + cost = 1000 + access = ACCESS_JANITOR + contains = list(/obj/item/watertank/janitor) + crate_name = "janitor backpack crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/misc/janitor/lightbulbs + name = "Replacement Lights" + cost = 1000 + contains = list(/obj/item/storage/box/lights/mixed, + /obj/item/storage/box/lights/mixed, + /obj/item/storage/box/lights/mixed) + crate_name = "replacement lights" + +/datum/supply_pack/misc/noslipfloor + name = "High-traction Floor Tiles" + cost = 2000 + contains = list(/obj/item/stack/tile/noslip/thirty) + crate_name = "high-traction floor tiles crate" + +/datum/supply_pack/misc/plasmaman + name = "Plasmaman Supply Kit" + cost = 2000 + contains = list(/obj/item/clothing/under/plasmaman, + /obj/item/clothing/under/plasmaman, + /obj/item/tank/internals/plasmaman/belt/full, + /obj/item/tank/internals/plasmaman/belt/full, + /obj/item/clothing/head/helmet/space/plasmaman, + /obj/item/clothing/head/helmet/space/plasmaman) + crate_name = "plasmaman supply kit" + +/datum/supply_pack/misc/costume + name = "Standard Costume Crate" + cost = 1000 + access = ACCESS_THEATRE + contains = list(/obj/item/storage/backpack/clown, + /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/mask/gas/clown_hat, + /obj/item/clothing/under/rank/clown, + /obj/item/bikehorn, + /obj/item/clothing/under/rank/mime, + /obj/item/clothing/shoes/sneakers/black, + /obj/item/clothing/gloves/color/white, + /obj/item/clothing/mask/gas/mime, + /obj/item/clothing/head/beret, + /obj/item/clothing/suit/suspenders, + /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing, + /obj/item/storage/backpack/mime) + crate_name = "standard costume crate" + crate_type = /obj/structure/closet/crate/secure + +/datum/supply_pack/misc/costume_original + name = "Original Costume Crate" + cost = 1000 + contains = list(/obj/item/clothing/head/snowman, + /obj/item/clothing/suit/snowman, + /obj/item/clothing/head/chicken, + /obj/item/clothing/suit/chickensuit, + /obj/item/clothing/mask/gas/monkeymask, + /obj/item/clothing/suit/monkeysuit, + /obj/item/clothing/head/cardborg, + /obj/item/clothing/suit/cardborg, + /obj/item/clothing/head/xenos, + /obj/item/clothing/suit/xenos, + /obj/item/clothing/suit/hooded/ian_costume, + /obj/item/clothing/suit/hooded/carp_costume, + /obj/item/clothing/suit/hooded/bee_costume) + crate_name = "original costume crate" + +/datum/supply_pack/misc/wizard + name = "Wizard Costume Crate" + cost = 2000 + contains = list(/obj/item/staff, + /obj/item/clothing/suit/wizrobe/fake, + /obj/item/clothing/shoes/sandal, + /obj/item/clothing/head/wizard/fake) + crate_name = "wizard costume crate" + +/datum/supply_pack/misc/randomised + name = "Collectable Hats Crate!" + cost = 20000 + var/num_contained = 3 //number of items picked to be contained in a randomised crate + contains = list(/obj/item/clothing/head/collectable/chef, + /obj/item/clothing/head/collectable/paper, + /obj/item/clothing/head/collectable/tophat, + /obj/item/clothing/head/collectable/captain, + /obj/item/clothing/head/collectable/beret, + /obj/item/clothing/head/collectable/welding, + /obj/item/clothing/head/collectable/flatcap, + /obj/item/clothing/head/collectable/pirate, + /obj/item/clothing/head/collectable/kitty, + /obj/item/clothing/head/collectable/rabbitears, + /obj/item/clothing/head/collectable/wizard, + /obj/item/clothing/head/collectable/hardhat, + /obj/item/clothing/head/collectable/HoS, + /obj/item/clothing/head/collectable/HoP, + /obj/item/clothing/head/collectable/thunderdome, + /obj/item/clothing/head/collectable/swat, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/police, + /obj/item/clothing/head/collectable/slime, + /obj/item/clothing/head/collectable/xenom, + /obj/item/clothing/head/collectable/petehat) + crate_name = "collectable hats crate" + +/datum/supply_pack/misc/randomised/fill(obj/structure/closet/crate/C) + var/list/L = contains.Copy() + for(var/i in 1 to num_contained) + var/item = pick_n_take(L) + new item(C) + +/datum/supply_pack/misc/bigband + contains = list(/obj/item/device/instrument/violin, + /obj/item/device/instrument/guitar, + /obj/item/device/instrument/glockenspiel, + /obj/item/device/instrument/accordion, + /obj/item/device/instrument/saxophone, + /obj/item/device/instrument/trombone, + /obj/item/device/instrument/recorder, + /obj/item/device/instrument/harmonica, + /obj/structure/piano/unanchored) + name = "Big band instrument collection" + cost = 5000 + crate_name = "Big band musical instruments collection" + +/datum/supply_pack/misc/randomised/contraband + name = "Contraband Crate" + contraband = TRUE + cost = 3000 + num_contained = 5 + contains = list(/obj/item/poster/random_contraband, + /obj/item/storage/fancy/cigarettes/cigpack_shadyjims, + /obj/item/storage/fancy/cigarettes/cigpack_midori, + /obj/item/seeds/ambrosia/deus, + /obj/item/clothing/neck/necklace/dope) + crate_name = "crate" + +/datum/supply_pack/misc/randomised/toys + name = "Toy Crate" + cost = 5000 // or play the arcade machines ya lazy bum + // TODO make this actually just use the arcade machine loot list + num_contained = 5 + contains = list(/obj/item/toy/spinningtoy, + /obj/item/toy/sword, + /obj/item/toy/foamblade, + /obj/item/toy/talking/AI, + /obj/item/toy/talking/owl, + /obj/item/toy/talking/griffin, + /obj/item/toy/nuke, + /obj/item/toy/minimeteor, + /obj/item/toy/plush/carpplushie, + /obj/item/toy/plush/lizardplushie, + /obj/item/toy/plush/snakeplushie, + /obj/item/toy/plush/nukeplushie, + /obj/item/toy/plush/slimeplushie, + /obj/item/coin/antagtoken, + /obj/item/stack/tile/fakespace/loaded, + /obj/item/gun/ballistic/shotgun/toy/crossbow, + /obj/item/toy/redbutton, + /obj/item/toy/eightball, + /obj/item/vending_refill/donksoft) + crate_name = "toy crate" + +/datum/supply_pack/misc/autodrobe + name = "Autodrobe Supply Crate" + cost = 1500 + contains = list(/obj/item/vending_refill/autodrobe, + /obj/item/vending_refill/autodrobe) + crate_name = "autodrobe supply crate" + +/datum/supply_pack/misc/formalwear + name = "Formalwear Crate" + cost = 3000 //Lots of very expensive items. You gotta pay up to look good! + contains = list(/obj/item/clothing/under/blacktango, + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/assistantformal, + /obj/item/clothing/under/lawyer/bluesuit, + /obj/item/clothing/suit/toggle/lawyer, + /obj/item/clothing/under/lawyer/purpsuit, + /obj/item/clothing/suit/toggle/lawyer/purple, + /obj/item/clothing/under/lawyer/blacksuit, + /obj/item/clothing/suit/toggle/lawyer/black, + /obj/item/clothing/accessory/waistcoat, + /obj/item/clothing/neck/tie/blue, + /obj/item/clothing/neck/tie/red, + /obj/item/clothing/neck/tie/black, + /obj/item/clothing/head/bowler, + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/flatcap, + /obj/item/clothing/head/beret, + /obj/item/clothing/head/that, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/under/suit_jacket/charcoal, + /obj/item/clothing/under/suit_jacket/navy, + /obj/item/clothing/under/suit_jacket/burgundy, + /obj/item/clothing/under/suit_jacket/checkered, + /obj/item/clothing/under/suit_jacket/tan, + /obj/item/lipstick/random) + crate_name = "formalwear crate" + +/datum/supply_pack/misc/foamforce + name = "Foam Force Crate" + cost = 1000 + contains = list(/obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy, + /obj/item/gun/ballistic/shotgun/toy) + crate_name = "foam force crate" + +/datum/supply_pack/misc/foamforce/bonus + name = "Foam Force Pistols Crate" + contraband = TRUE + cost = 4000 + contains = list(/obj/item/gun/ballistic/automatic/toy/pistol, + /obj/item/gun/ballistic/automatic/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol, + /obj/item/ammo_box/magazine/toy/pistol) + crate_name = "foam force crate" + +/datum/supply_pack/misc/artsupply + name = "Art Supplies" + cost = 800 + contains = list(/obj/structure/easel, + /obj/structure/easel, + /obj/item/canvas/nineteenXnineteen, + /obj/item/canvas/nineteenXnineteen, + /obj/item/canvas/twentythreeXnineteen, + /obj/item/canvas/twentythreeXnineteen, + /obj/item/canvas/twentythreeXtwentythree, + /obj/item/canvas/twentythreeXtwentythree, + /obj/item/toy/crayon/rainbow, + /obj/item/toy/crayon/rainbow) + crate_name = "art supply crate" + +/datum/supply_pack/misc/bsa + name = "Bluespace Artillery Parts" + cost = 15000 + special = TRUE + contains = list(/obj/item/circuitboard/machine/bsa/front, + /obj/item/circuitboard/machine/bsa/middle, + /obj/item/circuitboard/machine/bsa/back, + /obj/item/circuitboard/computer/bsa_control + ) + crate_name= "bluespace artillery parts crate" + +/datum/supply_pack/misc/dna_vault + name = "DNA Vault Parts" + cost = 12000 + special = TRUE + contains = list( + /obj/item/circuitboard/machine/dna_vault, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe + ) + crate_name= "dna vault parts crate" + +/datum/supply_pack/misc/dna_probes + name = "DNA Vault Samplers" + cost = 3000 + special = TRUE + contains = list(/obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe, + /obj/item/device/dna_probe + ) + crate_name= "dna samplers crate" + + +/datum/supply_pack/misc/shield_sat + name = "Shield Generator Satellite" + cost = 3000 + special = TRUE + contains = list( + /obj/machinery/satellite/meteor_shield, + /obj/machinery/satellite/meteor_shield, + /obj/machinery/satellite/meteor_shield + ) + crate_name= "shield sat crate" + + +/datum/supply_pack/misc/shield_sat_control + name = "Shield System Control Board" + cost = 5000 + special = TRUE + contains = list(/obj/item/circuitboard/computer/sat_control) + crate_name= "shield control board crate" + +/datum/supply_pack/misc/bicycle + name = "Bicycle" + cost = 1000000 + contains = list(/obj/vehicle/bicycle) + crate_name = "Bicycle Crate" + crate_type = /obj/structure/closet/crate/large diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 7e743a396b..e5593ff7a6 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -194,7 +194,7 @@ id = "cargorequest" build_path = /obj/item/circuitboard/computer/cargo/request category = list("Computer Boards") - + /datum/design/board/stockexchange name = "Computer Design (Stock Exchange Console)" desc = "Allows for the construction of circuit boards used to build a Stock Exchange Console." diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index 8b193577e0..d4c716f125 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -2,6 +2,16 @@ ///////////////////////////////////////// /////////////////Mining////////////////// ///////////////////////////////////////// +/datum/design/cargo_express + name = "Computer Design (Express Supply Console)"//shes beautiful + desc = "Allows for the construction of circuit boards used to build an Express Supply Console."//who? + id = "cargoexpress"//the coder reading this + build_type = PROTOLATHE + materials = list(MAT_GLASS = 1000) + reagents_list = list("sacid" = 20) + build_path = /obj/item/circuitboard/computer/cargo/express + category = list("Mining Designs") + departmental_flags = DEPARTMENTAL_FLAG_CARGO /datum/design/drill name = "Mining Drill" diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index ba43a1c24b..ca7616db89 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -424,7 +424,7 @@ display_name = "Mining Technology" description = "Better than Efficiency V." prereq_ids = list("engineering") - design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor") + design_ids = list("drill", "superresonator", "triggermod", "damagemod", "cooldownmod", "rangemod", "ore_redemption", "mining_equipment_vendor", "cargoexpress")//e a r l y g a m e) research_cost = 2500 export_price = 10000 diff --git a/icons/obj/2x2.dmi b/icons/obj/2x2.dmi index 3a4fa139af3654374f2e79391b80f70e8addc1d4..21adc379e9343d8fdd1fdbb8d1748ff2d847057e 100644 GIT binary patch literal 13744 zcmc(`Wmr_*8$P;+8G4YRJETimKtvc?krt5dmQ-3|=4kP=W3=>}=!MY@&lZvNZf zbfm$xzdIHN_^3W_hY3C< zcxh<6$XI+ZdvD|9V&mul03KP<1AI7L^yC<0Ix0u;yG4+#bwYU0<9uPP06&dtN{!ha z_sux=xTB68K4p~_3?xVOx=4UGs4sBkB<;po;V}lC2R$v>BnW?P**1Dzx>bH zQu=coBFny~`LmR%$Z@G*ABFO0V>-F?`_!u8ANmoVB`%~N6(a*Oo<2aVKPj+fEkK_F z06p+ZMpDBgYtP5tj&aI!|AS@7rJDBJPim!u7Q_Vp5^y~TKAEmc~s`j{OIwJmegT8xu1 zX+?H3-#-71W7t@`CvWW%2;CUMlsGjRfg+f!MuxJ|J(oT#emQBib9E&#X>i#}zy+?n z4IA5L?9hNJgQnh9Y9o$h00@?X6x*ENRZZiwa{L^c>X*xJDUb*9~e+rh8X;KA3T19jJuRY5G5%v z|F`4%=fpENOmibUJ9}>j{|>`TkypW~+mG*4I?f>9TxIa?8w2+eDUiSAxCnA zpLd-uUe*^4j;n6R3>HgEO8{tUYVzL`#6?_&iV6#dW(qr+Iy)192TP}R2A2N2PaZa0x%wYJK4(2Cn=BiJacGoJ#`F3oLA12A^wZPOfDnS$w#R$| z0)baoo&Zu!#42AK2BbyH8GkJNxHdO8H@&c+t6g zd}HYfsBcNK^hS8mEwOwa8S4YUwcvKm5$%lRo|u^MwZaV!cxanuUftu9%llD#dq;W>^1L9p>hWkhrn=JmU;BdYi zUOeQI>?Kbmt2R>U68T_E&kv!ug55XQiX%dPjIuq;X)CU%w0mw}==;mp%MoUZmR{Aq zgTZhq^eQdSQDg&~4w*|XO+ze?#h`171$b;MxI<2{a?_+?E#C3{TOOuWTU$0;t~kK~ z-;9dX*`4Ur3Nvujx_JoMmI*#b9VVh;jP&$y^#grR7}-_y|J(Sah-CE3S3SfOr?588 zcU!IVJe1+ACkfB3KN5h9Q5|WLN;oeSy-uBPP(&C5zT0mWnj^x@gOq|^r{(5eU^i%U zVaUCRzqIHpuOj-*b0nTXC`W!o_Y~d*`*iYIroZ%ES$D0sI34-ftEw+rYRrk)$B3@Z zON-~qw-{bL@pP_m@6x?oUtj-3N1`DLZBu%R41N)a!gAT4{}Fo&M@(h8Z~bBxR$QmX zz?+CFg2m#P@bfuV6;sexRmrTv3FsX^uRgvG?Zomy)UZAZ!%k_ty58_0s&NKCGc%JH4h7+vugo?fcoRiXq>lak`Exd69G|6ba;uT7j@?}@ zAt51#HrYX4>X5iPf*ywV<_TsKWd7Y0s7?Zzs&(kJN8DYuA1~9~pf?OTM$rA8!2V7w zu>YSqXMD!sd7Zz1YqeLfh)+A;(@p*8S}pJ(VEeol@3cNd0W5w@%g)C0&VBZw_v`gj zO5Y}tJTsKXKucM)`HifLS&26W{b~tHaFu$Tq5b2YhiT%>^}!2Q9OO4f#b%pyMmXv} z0y!U28WZ4}+N7IlVn zoB1ph1 zY#qccgA$k|k7Ly5qq`6s{gz>^6evfw0Tl*5rpEyxHrFw{rf9x&2&Q|}d=%zrPEVlK zC<`s5XZ%%jYAJ9-}C3Vd8}xkv!WSfOe0>0IY&VY$Xch zhg_Hg?O?=5JWCJa_kVAe=zjk2IP^*8s~uQ6Qmej^mvoB-%?j1?$3Xv55lN?cBeDS# z`&xdf#uxVshlw!@ba?0Cl>8Nyl`EJ$Eq~B!T;+8cOf%4b|NebTWvHjOLv;ta?0Z-) zN;Qq9q@tqoS(lpm#`+bF85`~S2wUnPgr&i4kFp88Gjbx9qyIE>GZ$!;M|ZzZ?IsZ7 zwnjE@1@AV4GY}{0Hy3Bv1p{5hmoFdpm=pnerwRU5Ow`$#>+bIEWfVie^*>~T7l2`} zXgDi$J4g0i_y9Xmk;l(&q4WT%lHt-M<78%QFoY$epZX-x523YsTL6ot^m^U&U7ej$ zTvu0}!MHwO(OX`c5~2}Y93R(eNVYnyNO2t)&$o`7!jmv6DM<4;i(P(dR1uZ=|vCU#tcJ_!W$bJO7#nR&ECBme4EjExEjgRYfFa7(|T$8 z$4i60+3~h3T-Uza=ru9A{FPBuG~GrW%1MANRz%_O^wgzYiuIALn1`vMkr96KhGssZ z>k`t5FgA(jHTP=g6==^Rx5PjkJdO!>{6%d7YuxyB>{GL|w=g@K5b`u_LFewDB_tk1 zj#~#V2}tCbiTqztkY2nZ>kcBgbk2qVPmdyTc>OBXt|6!nYLj;BQy>HKlAxG(h4XC{ zuP#2)#}D-F$rsbsg5IpG3maD_8#S%1+<5Oq{O-M%FHMpRG})fvr}r~+b1+FBU z6cZ4nHUc;o-iJ&=tThunVv#)Op|ghw}U0&>Os|2|<1`uo=c1W|{e(u04goU|Ioy5yn?r4G2IyzQTmnbm@(^=erp z^L^dTy~r3F930&GH?J16@!Pi`xx#$&fQE=X5u&i2f<%ranOil|YN`A&;ml)22?>c< z;YDwOYJL@&8tvV8MC+Bxt9@#CE?wJzOezB!gK8R~{%4I_b|zbxzM)}E^OkL0#2448 zTVK8LkdY&*STRBh9N?7v%{un_W8J3u`uf`;bQ6U?^Yhf8Z~NznaZs;g+k*D5TI3_|qe?0Q_pXpcGh$6Aqp z9Nvyc|I#ESB~|^b@o5P#eZe@nOMz}es*O=?3AD(_psW@dO!J;*!Mu#s6sucX7fYNH z=6|%d?hE)2ZE3O*f7;^N6rqr@BKPA$?@&7r(XAx4IVQo5y${`bs#c!WeG}IsHGVf3 zW+WD?pwZy860oGz0~0gT&*pUH$oCwt<#vyq;tBa{yI)Q&ZUIp~9 z5a(yyJ^Hh+B;kOV`TJzMJIjP3hf_jq;vCMV6cNo|H7-xYf5oeFsMCe#dj?BH#f8?` z1^@jPUq|zwx|9G4e*1jc2W{1ugn2-9gcZjL=Ji!dyMN&L__#gdy*dpt*+ns^_aQ&t z2(D0&dIau74jwLA)>hfS z2#{i0N&cEK`3gk^&8a4qsD@U!?Q=GwAR5k(mNJ*bIKxCaUzQ^j=@FZ4-VZmR7yPxM z^;yF^unI>@kib1#>6$q+IN^Td2H0~1gKCun1)X1OD=UhU{#tY zbrEAgLM4k4!wcR*`)r4ns`MHCYZ;QVOp}n+5y4;P4-76_3AnkpSM9S#0 zB5e3eXr6-T>RGo;k68Wp?{~X2&RvgzAAT=?%el3kDi6s?Z(&i1Q0tQ7&@<+VFaSyq z3<+V%|7p49lu|`8_)_lmxOVU#$&=zhx^Y8pqUC9~=2&{KF7xS2l&|S5>CHu*4Zj<-x^BZ1FaPtzJM{2sGfqc^3Id!XUz5(Tqy9&!a`mrB}tdR+(J_b1Q`PHu04 zuv9h85iY4|EH=VMtYlM02Qo+TeJr-ftM%lUt(TOsrA|%^_fq)?N+Q{jydOV)Ag2Q( zur-#$bLCu})9DdRz6?$^Fg0xv5rlaFSeS@;oZJ2J`d=bK<=8rt+N|ix{f>AW-YEI!q>h6A+ zPYF6kRK9?DT_j;7j!tqw4{-Cwv!lrPuY7%cUgQx4>rfUVSnHY_--gJ$dpZ-|&mPXje*Vs#>MiO_ndxkLHg;(W(HuJ<-?AYzaSF5cKK= z%Qwg#)_yo8`hCt9{U4pH<`d6H5L{;W8h=NDPgry=eUB(P(6zY`ogV|SohL8{e#=Bs zR9`hvFxc_=c+Wo_hw1qG>Yy^xNT8cKA#U#OHmS#@`~*cBX(_ zNSWprBvvpMVEFh^x;iIm3h9Z(08S8atj$*A+j)NOmRtE^+pE^iTMV(lISgnpkf7+u zh*`0e-S$M#`B5D%!Azn^LO6H`eSp(Jg&G`-6rPp7zlb_@j%#2@0LV3 z#y92k`@!wJ@w;*bnWN>Y>0{=CQY4nFRRnW^ZC%DUnWUMgN`!o>#j!m-J*^aZAZ=0j zu)kmR%cwmtCYBKgU8I#%JhM1|_9BpD8! z3>P^GSZI;?mrZim*6Erjzf@D9C#tDXcx`<+Gk-u?LktsN)6$4uX_Wej*o*=Hm#puuFdgC*r|LE}ECwi5iRQ%5%Qehl*7thx#>L3{H1? z%vALDnU}ejH?6tN>YI^%dcC|){OqxV!eat{ZKTtS8`vpyF5Uziv{fL6LG}k<14e1F zH_wzep6ka=43l4>Z@zjPEMnh@G;}&DL~FA&aN}-`4&$YK`3Li*t(oRy<(E5ol3Pc$9&D>st8Km2+U$pq@pIzRdQ zE!g1#*C|v3)F%H~jT2zxjS`SD&rN(Rw#q}Zh|e3ELtPsj{$_CwO4&l=FJOJaJe1mX z5Ltc#0rU(Eq9;|05ur*S#l{IcBBJsX44D|c7dsJFjWlw8*hIk^`IsDF(ONLwN7ldG zfjPpgQ-F0Es(?_Oh`Li;4GR!Eid=5l`s6a<6}h#wCB8!=QF^!m{E^|2JA0&Xi$ue? z{QbLx8?Ajd*XMXCL4P^#@vJ8%I!Sb9dO9{SKK2dXsiB;BF5UEJrUJt+m?OCKT7INt zWT3l<^lA|wLsi$-uBzjtGhv|V4BI&CO&3t(%wT2Kbf(m?NZMflUW&kSLBY?C|LRs& zf1p>ObrDJUr=i3?b;HY+YL8{aE}dW#g3u%3TQ@aQGWpkKACTRZ*GfKgZbD3*f4?g9 zxBB}^;m?(DsCRB~lf0WGkh92F>;{lrELhU|7~#rHOR<{9F5N2sDB8i;b?*k?ZgFNN z{#xlD1UEhCwWHBD(UZa-!XX*MmYbe7kf<_8m)q)5R27{CB+88W&)ngbjYgaN(_iIr zX%G}Z)Q_llB-Ym4BY%1XZ9!)&n>1H5AzeMHO^~^D%(+a=0$E-Re=bqud2)*f3-T~X z!gAr|m^wVR{B7<7Ixs!+dG+`&tGGyoZ&Wg*TVL9_xJgavYrA|`;+DA!y2|1VDvO-KH*;G^p`JC!3>L4QBqpK1sbcM$en6YLJGLNYV<9Gb#8@{ z#@PoxEgAjJeoVb_zcNP>(tcUz{a`7{vT|y{Dnp;e7Uwk#hxrEoDI-7VsMyK((8UsH zuMaQ)3`FJ6-}$kHJ%v_)ZY_{hEidV#*h(4li21*iw<#7!5`W)6bJo9BOUI`5yN$hD z;%U1*2%Sz0?BV=!YaYR;^;>YA$G6^|Dpum2_08yui)?5vwiE?YNVlw;BG1nxK%}ux zQag?WpYNKN!z=z;W(8BQut+@c(qsFxqvH5MN$&mNbhp>>pRLb}ZMj1fa+W!KdxFbb zz@8f>t1|HhIH-!ZrwF!yezV88#KZQsEdz@>KT1I(k3g4swLr`nhpbbithqFd3KUjaC zo1SaJHN_xdJd_!|z-?DaoL5CbTIx{%ue&IXUsFGPK1||mc}r||_O?y?mc#pXSA)z6!6*0)AUz0E+S9U^?ZcQ}RBS%9{;F>8^p5IdgiYk7$rz0byHEl~d2g87a z&cwIo?^T`XW|S@q{TnB8GtTnD-ztQ=w=HwlD?|^MRcp z0=f;f^SDNYz?%B#biyzC;WC!)$3GA-R>qotO+P+8?Ncjn3AH;XyWOMn9>e{6BzK#e zi-FqOiXA;TI56{TGuR&nxUG&%jNxN~7|14`%%^!alo34)E(-#x++4T(zV{~_%Gsj9 z7fXIitk<7Eiy8IRRSYnYp-Yo2R;bG)vak_Giu6g=Xm_UzSa}yC5}z%_ zyAEYb7XSUdZNZ_7>gZy_eon4wf%|z3bjsDcz@54T4x~(O-G9&D!4Op9Y^uWTC3i8v zG(&Qy?)cVT78y0-fBg9Iq;VhnNss9`>zL(NPa~mBs+T2<1e*+Pd{sRx9IrmNT|S4n zA8$mx-ZUwcKn!JLN6En=y5KUGQ(qo9Q85+Rz%rTNIMopC$D#7Z{cTwHe7Hc`d^e6Ha_{Nvu^@-`Yoh zRhblbXxtM~;O&{mXGHTkPQ<@%GxEE`d-&cDzYX)dyOwx8diGmSBGCb?jXf?`jL^Ye zj4Huh%SB8vxe>9TQYMHjaHG9>^Ty|9=M2B*``gepkqe!a;Fgw__vMpPEQ#3{(H1)K=nGgNIw1tsR#vRPoyBN0Jn$jmHcA1FaH+jU`Ci~g3bSnSwV z^=^7@4r*3mH}@!Gc-^~X0%Eo+xa=nXamclcuCaftR3dfQGT#RN=FKwzp04yBiVlo8TjM;af1@x!T z3GCd3e(I&XD6ydwRFY>gYv*+liGlW#7Z(@b#?xZy`jeY|h=N2h$Fhqa;_&eswO3!! zv!^O+XiDdOM|@18H8#Z%|Fly1-8W=s>Ve|l>OhLIsO~&F{jUDfT@^~;=N#fwW)!!S z>|AG6?RXkY-54^N!K-!(CT+7V6$5RA*0~0ynifW&+@jf!?B<9*yo9}{?z3X);yuoe z3DF-3Sew3AjQ>e)P?Rp`g`AkCc3%)P(@o^tYx#81Ezr)NM|&rspslM*`A!T$@N5(Y z9CqUJoYs+q=g>3Wcge9N{t$SY9BM-TVaASIh2On=G6O1x(f{{7uhNGYK4V8mo+XFx z%i&MD0XG!nB{oL0PDiEzyrC*b7!HkD8+sNKd3PrSE`f_uSN~;)O=Fd?K)RyrRNeDe z2S1UWvb%wsfJtzC7oy~_)`UDC+=&$xzwCtibh8gXF5S@5dTmbJ`^z? z-#~!n9ixYgFPD+s5)oMyT~ZU@_Vl?il_uf_|E>!vjlRpk06g1q?d$D7J~H;4a&^Ag zrzMB#Pf=~Pj4#QROl(CU4=K=4qgWZmAk4`_AXBa!0i%d|&YlPhT>eif*pj zq34XN+Hs;5bj{WT=Enu?sgSFolYIcweK&g+b@IxyGDSB3FR$uaTVs|y{t$qz2#d?^ z-Ceu993&ypPM*mE;B<9N#O1JiU#a&64T&N^S>qz`HQ5^AnVD3V`|c0U^ErRMv(L8^ z$&%a6r4L#Pc=nPDDoK}5cD}es8ner=7TkA}cXqKtn>0@VnnMPeNoJI?h#yC z9&{|_lOWLzGlPfZce#QKoDo%nW48MUWk2Uu1}rLjN&iCU(^!zbJya$6K~B873z8L{ z77an#{w>;UL87yi(IHDIQiYhw4~1HeFYZp4VE0RnXSNk}2-xIoc-wXP1Bur>1R()v z7)<$4Exv5p6WOO}ubi$2p|Dt*^V2-;r@66?(D}v1O5-C@8r*DU%$PMNx;eU)@MqM0 z!4|IVX=G;RI;6UlDLgFCVsOC;0vuI4i;yvzt2Vd7^*bk9h}Y= zB3I}i>obHK^{wI&yz4N0$$6dw_1%81s?#h)X44E+I&0Xq3A`$+3{6&CwaNhH0nJD2 znf}`mK6{a}ZFqd`)jJT{kGmJs0;9K;oF|xKH@gA=ipP6}&zf>sq#fVyQhoQs$?rT& z+6Fp&F{id~3y|;^V*B6bXrUhOThI-JmqoZ0iayc;VlP0a*IsXLgip_`Jt4R$8n`2B zz!&Cf=3CrOF5RRg5QIDD=B;Mq*B0#7G+{pxQnk}MUAQwl2b85u&S3Dyky!6)8yfar zUpF3jf?XjTyik^)aE-!JHi0N{;M4^z9=r8=a?s;^#_I65Ue0K~ZsqEf-yK0N1=gw2 z#Ijxhu)GrLN7B@EaQX1Xs4YgG&PUKGTAJP$C~dyTdE1nRm6evK&4rwD-E55UZUv^! zWXKbCUf{-evDb;#&P35&gBY-)IIf?m-(Ung=k@lF!I(Q?!2L#YdY2O4>Qd56Son&`fnR#4X+)|JqcAOBD4%f?~_{Yv(Hu$>rB@N6R}2sfjM1~bjEJPJ>rO8qNBcLt+@ET!9pI5_8Vk;LA|~Elh-sZqBP_o z{&#mih@-iBgGs@9yk+I`$ujSYrUwyU72Xyx9ao}RmUq&}x7XKRn^%Q@d|N$WW95wu zDP*gUGhVUtI%r(oSp3dkdboS-as2ZE(sxurDRH~~PAfie9mrYSE26!Nl!kQym*ejanJ91<2AP@B$_QmK4GjwW6nQ= ztdIcAzfv?fsN@36enibWoju`jD5vF7q8pXWZKYQEvAf?zTc|?OuZ!tIEFV>YQblw1 zm3IfNk&azvXydjr%AmsO>Fvmd#8RLBFHpH6mA9a#O_T*|yB!QA1IRE8SsONJ9WemL zxmLWUiE}xpKB@M#?|5Va@85(+**H=Eewt|8z&aSmZa(JlU9wwZ zs9z;4n}S;whvFX)>%PDJk|pAd|DH0=O3PhSn}|ZYzmZ0fk1A%;|DB$bsC|3=vPcZw zKD!%rv38&$iK)1rrP^Id9%_6+G|D0Nsgci6iBV^jJ`ZkKqqW9ji=3L zJE>NSE8E@E^O+O(^%Elh?svyef5?UN{1G~AxjTyf?dMdF+L`KeyY_bmgHI(W(;**1 z4~%we`gdb5!Na2z6hWod1Jv}MFkgUMM$eeaiz9e5WZ++2bi~W}^*|?MJJ=LX3 zR1WsNH#@$^E7<--d{&@pydDoa2 zr|P)ViN5JB;q8ICxl-5JR z!vvr6`K+t+x8T(V4RBt;%df!W5(p_2jxk*o88xyj;*urI>9Ij4o!hk3y7FRV)iq$o z8YZr`EdBVO3}^`@|ECOpk5$Ig|4Ili=CDulcC^*i^v?#xAkh0EuZZ|8;Tt(Sg*ZR zPUD#HtY5=HUcA_aJ<}%!#4y@wXsBHfZLbE$?9J5Flrz|g2UQ@aK161h^?t#aX{ubL z&||+J`r?E|3F5ZajTp04F?PQN-p*DDzjvoT_`WkBOOZLZ-_UYSqnu-_jVTCK-FDVA z<)T%C(WO2PyHuL!24xT9yh@;e(xTr5R5yxt5SpVaN18?vD9TTqCCs8BeU>0aZP(h$ z(sM^xBLu|&gGb5p>m~aSNlQgza(%&1F_^(JQL`hP-bl1^pLZ!XRaiCCa$`DT8wVaFDjZ6*i7)r zSiG+4Nd;s%c1NXCT=yjfy&WmJ9Ht0|&Io94P>A$g)$0`O`1SD1V>ecP#MNmR`%4N} z;(Yl>%tRRdgvF0~>~*@xBR0CqGV$p=Uldd19=0=%IeAF@%Z|Ue=I~4s25d{qRkE7t z1w8)Zrx-UEP@VhQ{(Xho_>7}# za#WZYPP80jt&IA-kJv5wJ#3?ZImRRp5Fzvjr`JadPYv4C>Zo9$1}tZcQTAQDY)xHRsdR#wQ-XL^uLV$(Gz%|StiNACcn_Hq*<$)%mw-7? z1q;x?%@MPv$~_h@2}QAz8S0^<{wI(1wfe;`UnV5%xTq2GG;FDx?aZs?ix`JbWWno7 zt;h;O9Z*uLL;8=d2St;$SxEkW+3n>jS({+O2hH;51OJ7|!!A)A_Dk#f?U04T}^PHy9EAL;W+G z6;*4cg-&>i@G-+!=~{rfBJvU(l~L8-ZU7SpMr2CRJ)eh4eX@^51QtjX6U%&(L?J5{ zz9;VkytJ|nO}SJ?F38(ohrBi(k`>hL%BK-mMr! zA@nY)i$Lqk6r(I9VP>h~c7rz{>@aU^bhmAB5lm*-{##4sAb)A~>&l0Kizzs=d3e|;u#^yKFy(>`FnS0kBhjI~fPK9@3?zx!*_A*1K}#l;2Y zzhA3LHc0Z*u6^!Ovs=;LgC(3%Az6VLq+7KcF~5A8IMYx>J|3I2ofP(qnSkCdesrI< z5o1j|tI+=KO#(e_M8vwp7m+(oVIbF4;8 zazNuV(yhGip*~f1wrc<206z)s1-!;P>TQ+239)D#aW_*fm!o&4Z5<{3{rexgdcG)M z3+I(sOF;g_R`Z@k?AMh>#NShh_VqH^|1LR z;BU*jbhn?}x^{lPf4%;7Bj-l>RwM($%a0M~pG)BptabKW8LmDr1gNh{NL?PqIwlLg z!odh8SZ-H8k4}c57CRFIWg7dLW%Z-7A?nojV2k9ay2+{ZC9e6WH0w|BIMaf7eq=PpIF>nAyQqxl^5YewPEtr;Y|WYy*G!!3^(iJG^Y|A2qkOy{bxI zz!X)!!$PBO@nxBVa$IxN&kDI!iuI&qFA47RO%raRZ{r(X0q(I=^|f6leUhrH&12jB}b)$ZF{- z(h8t8QQ!s7_;z4U9yI)K3ds-;rgTUQ?xVt`|IO)BOf@l4bP_~eQBWP@CEqxhuJp(- zTA=>#gS{g_U{&;svUmQ4yj8w*Qyb3z@d;soIz1r7i15|MGj4L%wosoK_D((_d2Qi0 z{<$NJKXJV`^HtVFiXjy8ZK0kq>;-&UD%D7s&z9JwqwkF~{dM53d)7vpDR1@Ur ubcA$wPb3+B6K-h4|JwrpA7DLtfOxkY=f`4)XfLF50GF4K>0sjYK7XZTm literal 6785 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 delta 20829 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 diff --git a/tgstation.dme b/tgstation.dme index bda13a4325..27146c1614 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -1108,6 +1108,7 @@ #include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm" #include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\bsdroppod.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" @@ -1300,6 +1301,7 @@ #include "code\modules\cargo\console.dm" #include "code\modules\cargo\export_scanner.dm" #include "code\modules\cargo\exports.dm" +#include "code\modules\cargo\expressconsole.dm" #include "code\modules\cargo\order.dm" #include "code\modules\cargo\packs.dm" #include "code\modules\cargo\vg_clothing_packs.dm" diff --git a/tgui/src/interfaces/cargo_express.ract b/tgui/src/interfaces/cargo_express.ract new file mode 100644 index 0000000000..4df4517310 --- /dev/null +++ b/tgui/src/interfaces/cargo_express.ract @@ -0,0 +1,43 @@ + + + + + {{#if data.siliconUser }} + + {{data.locked ? "Engaged" : "Disengaged"}} + + {{else}} + Swipe a QM-Level ID card to {{data.locked ? "unlock" : "lock"}} this interface. + {{/if}} + + +{{#if !data.locked }} + + + {{Math.floor(adata.points)}} + + + + {{data.message}} + + + + {{#each data.supplies}} + + {{#each packs}} + + {{cost}} Credits (Premium Pricing) + + {{/each}} + + {{/each}} + +{{/if}} \ No newline at end of file