diff --git a/citadel.dme b/citadel.dme
index 5e6bab492d87..bfd5e95fda18 100644
--- a/citadel.dme
+++ b/citadel.dme
@@ -88,6 +88,7 @@
#include "code\__DEFINES\spells.dm"
#include "code\__DEFINES\stat_tracking.dm"
#include "code\__DEFINES\statpanel.dm"
+#include "code\__DEFINES\supply.dm"
#include "code\__DEFINES\targeting.dm"
#include "code\__DEFINES\text.dm"
#include "code\__DEFINES\tgs.config.dm"
@@ -201,7 +202,8 @@
#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_organs.dm"
#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_perspectiive.dm"
#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_simple.dm"
-#include "code\__DEFINES\economy\economy.dm"
+#include "code\__DEFINES\economy\category.dm"
+#include "code\__DEFINES\economy\currency.dm"
#include "code\__DEFINES\economy\payment.dm"
#include "code\__DEFINES\economy\payscale.dm"
#include "code\__DEFINES\economy\worth.dm"
@@ -1034,11 +1036,31 @@
#include "code\game\click\reachability.dm"
#include "code\game\click\rig.dm"
#include "code\game\click\telekinesis.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-faction.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\animals.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\atmospherics.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\contraband.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\costumes.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\engineering.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\hospitality.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\hydroponics.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\materials.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\medical.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\miscellaneous.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\munitions.dm"
#include "code\game\content\enigmas\unsorted\cursedform.dm"
#include "code\game\content\enigmas\unsorted\deadringer.dm"
#include "code\game\content\enigmas\unsorted\telecube.dm"
#include "code\game\content\factions\corporations\corporation.dm"
-#include "code\game\content\factions\corporations\nanotrasen\faction.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\reagents.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\recreation.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\robotics.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\science.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\security.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\supplies.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\vehicles.dm"
+#include "code\game\content\factions\corporations\nanotrasen\nanotrasen-supply\voidsuits.dm"
#include "code\game\content\locations\frontier.dm"
#include "code\game\dna\dna2.dm"
#include "code\game\dna\dna2_domutcheck.dm"
@@ -1747,8 +1769,9 @@
#include "code\game\objects\items\weapons\melee\melee.dm"
#include "code\game\objects\items\weapons\melee\misc.dm"
#include "code\game\objects\items\weapons\tanks\jetpack.dm"
+#include "code\game\objects\items\weapons\tanks\tank.dm"
#include "code\game\objects\items\weapons\tanks\tank_types.dm"
-#include "code\game\objects\items\weapons\tanks\tanks.dm"
+#include "code\game\objects\items\weapons\tanks\tank_types\shipment.dm"
#include "code\game\objects\random\_random.dm"
#include "code\game\objects\random\books.dm"
#include "code\game\objects\random\guns_and_ammo.dm"
@@ -2354,24 +2377,6 @@
#include "code\modules\bodysets\synthetic\oss_tajaran.dm"
#include "code\modules\bodysets\synthetic\oss_vulpkanin.dm"
#include "code\modules\busy_space\organizations.dm"
-#include "code\modules\cargo\supplypacks\_supplypacks.dm"
-#include "code\modules\cargo\supplypacks\atmospherics.dm"
-#include "code\modules\cargo\supplypacks\contraband.dm"
-#include "code\modules\cargo\supplypacks\costumes.dm"
-#include "code\modules\cargo\supplypacks\engineering.dm"
-#include "code\modules\cargo\supplypacks\hospitality.dm"
-#include "code\modules\cargo\supplypacks\hydroponics.dm"
-#include "code\modules\cargo\supplypacks\materials.dm"
-#include "code\modules\cargo\supplypacks\medical.dm"
-#include "code\modules\cargo\supplypacks\misc.dm"
-#include "code\modules\cargo\supplypacks\munitions.dm"
-#include "code\modules\cargo\supplypacks\recreation.dm"
-#include "code\modules\cargo\supplypacks\robotics.dm"
-#include "code\modules\cargo\supplypacks\science.dm"
-#include "code\modules\cargo\supplypacks\security.dm"
-#include "code\modules\cargo\supplypacks\supply.dm"
-#include "code\modules\cargo\supplypacks\vehicles.dm"
-#include "code\modules\cargo\supplypacks\voidsuits.dm"
#include "code\modules\catalogue\atoms.dm"
#include "code\modules\catalogue\catalogue_data.dm"
#include "code\modules\catalogue\cataloguer.dm"
@@ -2476,6 +2481,13 @@
#include "code\modules\clothing\spacesuits\void\void_vr.dm"
#include "code\modules\clothing\spacesuits\void\wizard.dm"
#include "code\modules\clothing\spacesuits\void\zaddat.dm"
+#include "code\modules\clothing\spacesuits\void\station\command.dm"
+#include "code\modules\clothing\spacesuits\void\station\engineering.dm"
+#include "code\modules\clothing\spacesuits\void\station\exploration.dm"
+#include "code\modules\clothing\spacesuits\void\station\medical.dm"
+#include "code\modules\clothing\spacesuits\void\station\operations.dm"
+#include "code\modules\clothing\spacesuits\void\station\security.dm"
+#include "code\modules\clothing\spacesuits\void\station\supply.dm"
#include "code\modules\clothing\suits\_suit.dm"
#include "code\modules\clothing\suits\armor.dm"
#include "code\modules\clothing\suits\bio.dm"
@@ -4419,7 +4431,6 @@
#include "code\modules\reagents\machinery\dispenser\cartridge.dm"
#include "code\modules\reagents\machinery\dispenser\dispenser.dm"
#include "code\modules\reagents\machinery\dispenser\dispenser_presets.dm"
-#include "code\modules\reagents\machinery\dispenser\supply.dm"
#include "code\modules\reagents\machinery\dispenser\synthesizer.dm"
#include "code\modules\reagents\machinery\reagent_dispenser\acid.dm"
#include "code\modules\reagents\machinery\reagent_dispenser\beer.dm"
@@ -4766,6 +4777,7 @@
#include "code\modules\stockmarket\logs.dm"
#include "code\modules\stockmarket\stockmarket.dm"
#include "code\modules\stockmarket\stocks.dm"
+#include "code\modules\supply\supply_pack.dm"
#include "code\modules\surgery\_defines.dm"
#include "code\modules\surgery\bones.dm"
#include "code\modules\surgery\encased.dm"
diff --git a/code/__DEFINES/_bitfields.dm b/code/__DEFINES/_bitfields.dm
index 853add07cc91..598b3209cc15 100644
--- a/code/__DEFINES/_bitfields.dm
+++ b/code/__DEFINES/_bitfields.dm
@@ -14,10 +14,12 @@
#define BITFIELD(thing) #thing = thing
#define BITFIELD_NAMED(name, thing) name = thing
+// todo: impl
/// KEY: must be unique, may be arbitrary; not a string, as it's used in typepath generation
/// CONSTRAINTS: list(/type = list(varname, ...), ...)
/// BITFIELDS: list of BITFIELD_NEW().
#define DEFINE_BITFIELD_NEW(KEY, CONSTRAINTS, BITFIELDS)
+// todo: impl
/// NAME: must be a string
/// VALUE: the actual enum value, whatever it is
#define BITFIELD_NEW(NAME, VALUE) ##NAME = ##VALUE
diff --git a/code/__DEFINES/dcs/signals/signals_item/signals_item_economy.dm b/code/__DEFINES/dcs/signals/signals_item/signals_item_economy.dm
index d372469e4175..da5d08b913b6 100644
--- a/code/__DEFINES/dcs/signals/signals_item/signals_item_economy.dm
+++ b/code/__DEFINES/dcs/signals/signals_item/signals_item_economy.dm
@@ -1,3 +1,5 @@
+// todo: this is all bad.
+
/// sent on attempt_dynamic_currency: (list/query) - register on the list to be dynamic_currency_call signal'd
#define COMSIG_ITEM_DYNAMIC_CURRENCY_QUERY "dynamic_currency_query"
/// sent on attempt_dynamic_currency: (mob/user, atom/movable/predicate, amount, force, prevent_types, list/data, silent, visual_range = 7)
diff --git a/code/__DEFINES/economy/category.dm b/code/__DEFINES/economy/category.dm
new file mode 100644
index 000000000000..2e57c65231f1
--- /dev/null
+++ b/code/__DEFINES/economy/category.dm
@@ -0,0 +1,226 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+//* economic_category_obj *//
+
+#define ECONOMIC_CATEGORY_OBJ_DEFAULT (NONE)
+
+/// hazardous materials
+#define ECONOMIC_CATEGORY_OBJ_HAZARD (1<<0)
+/// alien tech / anomalous tech
+#define ECONOMIC_CATEGORY_OBJ_ALIEN (1<<1)
+/// occultist
+#define ECONOMIC_CATEGORY_OBJ_OCCULT (1<<2)
+/// exotic tech / goods
+#define ECONOMIC_CATEGORY_OBJ_EXOTIC (1<<3)
+/// engineering / industrial equipment
+#define ECONOMIC_CATEGORY_OBJ_INDUSTRIAL (1<<4)
+/// makeshift items; still useful
+#define ECONOMIC_CATEGORY_OBJ_MAKESHIFT (1<<5)
+/// literally scrap
+#define ECONOMIC_CATEGORY_OBJ_SCRAP (1<<6)
+
+/// ordered list; keep it ordered to bit index!
+GLOBAL_REAL_LIST(economic_category_obj_names) = list(
+ "Hazardous Materials",
+ "Alien Technology",
+ "Occult Debris",
+ "Exotic Goods",
+ "Industrial Equipment",
+ "Makeshift Equipment",
+ "Junk",
+)
+
+#define ECONOMIC_CATEGORY_OBJ_BIT_TO_NAME(CAT) economic_category_obj_to_name(CAT)
+/proc/economic_category_obj_bit_to_name(bit)
+ var/index = log(2, bit)
+ if(index > length(global.economic_category_obj_names))
+ return "Miscellaneous"
+ return global.economic_category_obj_names[index]
+
+DEFINE_BITFIELD(economic_category_obj, list(
+ BITFIELD(ECONOMIC_CATEGORY_OBJ_HAZARD),
+ BITFIELD(ECONOMIC_CATEGORY_OBJ_ALIEN),
+ BITFIELD(ECONOMIC_CATEGORY_OBJ_OCCULT),
+ BITFIELD(ECONOMIC_CATEGORY_OBJ_EXOTIC),
+ BITFIELD_NEW("Industrial Equipment", ECONOMIC_CATEGORY_OBJ_INDUSTRIAL),
+ BITFIELD_NEW("Makeshift Equipment", ECONOMIC_CATEGORY_OBJ_MAKESHIFT),
+ BITFIELD_NEW("Junk", ECONOMIC_CATEGORY_OBJ_SCRAP),
+))
+
+// todo: everything below shoudl follow the above example of structure (replace switch with global list and log, etc)
+
+//? categories for items
+
+#define ECONOMIC_CATEGORY_ITEM_DEFAULT (NONE)
+
+/// basic fashion
+#define ECONOMIC_CATEGORY_ITEM_CLOTHING (1<<0)
+/// non-basic fashion
+#define ECONOMIC_CATEGORY_ITEM_FASHION (1<<1)
+/// ranged weapons
+#define ECONOMIC_CATEGORY_ITEM_GUN (1<<2)
+/// melee weapons
+#define ECONOMIC_CATEGORY_ITEM_MELEE (1<<3)
+/// armor, shields ,etc
+#define ECONOMIC_CATEGORY_ITEM_ARMOR (1<<4)
+/// basic tools / engineering equipment
+#define ECONOMIC_CATEGORY_ITEM_TOOL (1<<5)
+/// engineering equipment / advanced tools
+#define ECONOMIC_CATEGORY_ITEM_ENGINEERING (1<<6)
+/// medical equipment / tools
+#define ECONOMIC_CATEGORY_ITEM_MEDICAL (1<<7)
+/// advanced medical equpiment / tools
+#define ECONOMIC_CATEGORY_ITEM_SURGICAL (1<<8)
+/// recreational / toys
+#define ECONOMIC_CATEGORY_ITEM_TOY (1<<9)
+/// collectable items, trading cards, etc
+#define ECONOMIC_CATEGORY_ITEM_COLLECTABLE (1<<10)
+/// paperwork, camera, etc
+#define ECONOMIC_CATEGORY_ITEM_PAPERWORK (1<<11)
+/// advanced electronics like pda, tablets, computers, etc
+#define ECONOMIC_CATEGORY_ITEM_ELECTRONICS (1<<12)
+
+/proc/economic_category_item_name(cat)
+ switch(cat)
+ if(ECONOMIC_CATEGORY_ITEM_CLOTHING)
+ return "Clothing"
+ if(ECONOMIC_CATEGORY_ITEM_FASHION)
+ return "Fashion"
+ if(ECONOMIC_CATEGORY_ITEM_GUN)
+ return "Ranged Weaponry"
+ if(ECONOMIC_CATEGORY_ITEM_MELEE)
+ return "Melee Weaponry"
+ if(ECONOMIC_CATEGORY_ITEM_ARMOR)
+ return "Defense Equipment"
+ if(ECONOMIC_CATEGORY_ITEM_TOOL)
+ return "Tools"
+ if(ECONOMIC_CATEGORY_ITEM_ENGINEERING)
+ return "Engineering Equipment"
+ if(ECONOMIC_CATEGORY_ITEM_MEDICAL)
+ return "Medicine"
+ if(ECONOMIC_CATEGORY_ITEM_SURGICAL)
+ return "Medical Equipment"
+ if(ECONOMIC_CATEGORY_ITEM_TOY)
+ return "Toys"
+ if(ECONOMIC_CATEGORY_ITEM_COLLECTABLE)
+ return "Collectables"
+ if(ECONOMIC_CATEGORY_ITEM_PAPERWORK)
+ return "Recordkeeping"
+ if(ECONOMIC_CATEGORY_ITEM_ELECTRONICS)
+ return "Information Technology"
+ else
+ return "Miscellaneous"
+
+DEFINE_BITFIELD(economic_category_item, list(
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_CLOTHING),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_FASHION),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_GUN),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_MELEE),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_ARMOR),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_TOOL),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_ENGINEERING),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_MEDICAL),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_SURGICAL),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_TOY),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_COLLECTABLE),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_PAPERWORK),
+ BITFIELD(ECONOMIC_CATEGORY_ITEM_ELECTRONICS),
+))
+
+//? categories for materials
+
+#define ECONOMIC_CATEGORY_MATERIAL_DEFAULT (NONE)
+
+/// staple bulk construction materials
+#define ECONOMIC_CATEGORY_MATERIAL_CONSTRUCTION (1<<0)
+/// luxury goods like exotic animal furs or whatever
+#define ECONOMIC_CATEGORY_MATERIAL_LUXURY (1<<1)
+/// industrial stuff
+#define ECONOMIC_CATEGORY_MATERIAL_INDUSTRIAL (1<<2)
+/// rare earth stuff like diamonds
+#define ECONOMIC_CATEGORY_MATERIAL_RARE (1<<3)
+/// extremely rare stuff like morphium
+#define ECONOMIC_CATEGORY_MATERIAL_EXOTIC (1<<4)
+/// biological like wood or whatever
+#define ECONOMIC_CATEGORY_MATERIAL_ORGANIC (1<<5)
+
+/proc/economic_category_material_name(cat)
+ switch(cat)
+ if(ECONOMIC_CATEGORY_MATERIAL_CONSTRUCTION)
+ return "Bulk Construction"
+ if(ECONOMIC_CATEGORY_MATERIAL_LUXURY)
+ return "Luxury Materials"
+ if(ECONOMIC_CATEGORY_MATERIAL_INDUSTRIAL)
+ return "Industrial Resources"
+ if(ECONOMIC_CATEGORY_MATERIAL_RARE)
+ return "Rare Elements"
+ if(ECONOMIC_CATEGORY_MATERIAL_EXOTIC)
+ return "Exotic Matter"
+ if(ECONOMIC_CATEGORY_MATERIAL_ORGANIC)
+ return "Organic Products"
+
+DEFINE_BITFIELD(economic_category_material, list(
+ BITFIELD(ECONOMIC_CATEGORY_MATERIAL_CONSTRUCTION),
+ BITFIELD(ECONOMIC_CATEGORY_MATERIAL_LUXURY),
+ BITFIELD(ECONOMIC_CATEGORY_MATERIAL_INDUSTRIAL),
+ BITFIELD(ECONOMIC_CATEGORY_MATERIAL_RARE),
+ BITFIELD(ECONOMIC_CATEGORY_MATERIAL_EXOTIC),
+ BITFIELD(ECONOMIC_CATEGORY_MATERIAL_ORGANIC),
+))
+
+//? categories for reagents
+
+#define ECONOMIC_CATEGORY_REAGENT_DEFAULT (NONE)
+
+/// medicine
+#define ECONOMIC_CATEGORY_REAGENT_MEDICINE (1<<0)
+/// raw materials like iron / gold / phoron /etc
+#define ECONOMIC_CATEGORY_REAGENT_RAW (1<<1)
+/// drugs :devil:
+#define ECONOMIC_CATEGORY_REAGENT_NARCOTICS (1<<2)
+/// poisons, lethal or otherwise
+#define ECONOMIC_CATEGORY_REAGENT_POISON (1<<3)
+/// explosives, chlorine triflouride-like fire, etc
+#define ECONOMIC_CATEGORY_REAGENT_PYROTECHNICS (1<<4)
+/// exotic / rare reagents
+#define ECONOMIC_CATEGORY_REAGENT_EXOTIC (1<<5)
+/// agricultural
+#define ECONOMIC_CATEGORY_REAGENT_AGRICULTURAL (1<<6)
+/// food / whatever
+#define ECONOMIC_CATEGORY_REAGENT_FOOD (1<<7)
+/// crayon powder, recreational coloring, etc
+#define ECONOMIC_CATEGORY_REAGENT_TOYS (1<<8)
+
+DEFINE_BITFIELD(economic_category_reagent, list(
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_MEDICINE),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_RAW),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_NARCOTICS),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_POISON),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_PYROTECHNICS),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_EXOTIC),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_AGRICULTURAL),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_FOOD),
+ BITFIELD(ECONOMIC_CATEGORY_REAGENT_TOYS),
+))
+
+/proc/economic_category_reagent_name(cat)
+ switch(cat)
+ if(ECONOMIC_CATEGORY_REAGENT_MEDICINE)
+ return "Medicine"
+ if(ECONOMIC_CATEGORY_REAGENT_RAW)
+ return "Raw Reagents"
+ if(ECONOMIC_CATEGORY_REAGENT_NARCOTICS)
+ return "Drugs"
+ if(ECONOMIC_CATEGORY_REAGENT_POISON)
+ return "Toxins"
+ if(ECONOMIC_CATEGORY_REAGENT_PYROTECHNICS)
+ return "Explosives"
+ if(ECONOMIC_CATEGORY_REAGENT_EXOTIC)
+ return "Exotic"
+ if(ECONOMIC_CATEGORY_REAGENT_AGRICULTURAL)
+ return "Hydroponics"
+ if(ECONOMIC_CATEGORY_REAGENT_FOOD)
+ return "Catering"
+ if(ECONOMIC_CATEGORY_REAGENT_TOYS)
+ return "Toy Products"
diff --git a/code/__DEFINES/economy/economy.dm b/code/__DEFINES/economy/currency.dm
similarity index 59%
rename from code/__DEFINES/economy/economy.dm
rename to code/__DEFINES/economy/currency.dm
index bb07abe0d094..16d619e03e5e 100644
--- a/code/__DEFINES/economy/economy.dm
+++ b/code/__DEFINES/economy/currency.dm
@@ -1,3 +1,6 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
/// currency name singular
#define CURRENCY_NAME_SINGULAR "thaler"
/// currency name singular capitalized
@@ -5,4 +8,4 @@
/// currency name plural
#define CURRENCY_NAME_PLURAL "thalers"
/// currency name plural capitalized
-#define CURRENCY_NAME_PLURAL_PROPERR "Thalers"
+#define CURRENCY_NAME_PLURAL_PROPER "Thalers"
diff --git a/code/__DEFINES/economy/worth.dm b/code/__DEFINES/economy/worth.dm
index 430266c2dca9..ea5806f0de3e 100644
--- a/code/__DEFINES/economy/worth.dm
+++ b/code/__DEFINES/economy/worth.dm
@@ -1,246 +1,23 @@
-//? op flags for /atom/proc/worth
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+//* op flags for /atom/proc/worth *//
+
/// consider intrinsic value
#define GET_WORTH_INTRINSIC (1<<0)
/// consider raw materials value of the item itself
#define GET_WORTH_MATERIALS (1<<1)
/// consider value of what's inside the item
#define GET_WORTH_CONTAINING (1<<2)
+/// currently using get worth to detect entity buy price for something like supply
+#define GET_WORTH_DETECTING_PRICE (1<<3)
/// default flags for /atom/proc/get_worth
-#define GET_WORTH_DEFAULT (GET_WORTH_INTRINSIC | GET_WORTH_MATERIALS | GET_WORTH_CONTAINING)
-
-//? factors for worth_buy_factor - multiplier for core worth system
-
-/// 1.05x intrinsic markup default
-#define WORTH_BUY_FACTOR_DEFAULT 1.05
+#define GET_WORTH_FLAGS_DEFAULT (GET_WORTH_INTRINSIC | GET_WORTH_CONTAINING)
+/// flags for get worth for supply detection
+#define GET_WORTH_FLAGS_SUPPLY_DETECTION (GET_WORTH_INTRINSIC | GET_WORTH_CONTAINING | GET_WORTH_DETECTING_PRICE)
-//? elasticities for worth_elasticity - arbitrary multipliers
+//* elasticities for worth_elasticity - arbitrary multipliers *//
/// default 1x elasticitiy
#define WORTH_ELASTICITY_DEFAULT 1
-
-//? categories for objs
-
-#define ECONOMIC_CATEGORY_OBJ_DEFAULT (NONE)
-
-/// hazardous materials
-#define ECONOMIC_CATEGORY_OBJ_HAZARD (1<<0)
-/// alien tech / anomalous tech
-#define ECONOMIC_CATEGORY_OBJ_ALIEN (1<<1)
-/// occultist
-#define ECONOMIC_CATEGORY_OBJ_OCCULT (1<<2)
-/// exotic tech / goods
-#define ECONOMIC_CATEGORY_OBJ_EXOTIC (1<<3)
-
-/proc/economic_category_obj_name(cat)
- switch(cat)
- if(ECONOMIC_CATEGORY_OBJ_HAZARD)
- return "Hazardous Materials"
- if(ECONOMIC_CATEGORY_OBJ_ALIEN)
- return "Alien Technology"
- if(ECONOMIC_CATEGORY_OBJ_OCCULT)
- return "Occult Debris"
- if(ECONOMIC_CATEGORY_OBJ_EXOTIC)
- return "Exotic Goods"
- else
- return "Miscellaneous"
-
-DEFINE_BITFIELD(economic_category_obj, list(
- BITFIELD(ECONOMIC_CATEGORY_OBJ_HAZARD),
- BITFIELD(ECONOMIC_CATEGORY_OBJ_ALIEN),
- BITFIELD(ECONOMIC_CATEGORY_OBJ_OCCULT),
- BITFIELD(ECONOMIC_CATEGORY_OBJ_EXOTIC),
-))
-
-//? categories for items
-
-#define ECONOMIC_CATEGORY_ITEM_DEFAULT (NONE)
-
-/// basic fashion
-#define ECONOMIC_CATEGORY_ITEM_CLOTHING (1<<0)
-/// non-basic fashion
-#define ECONOMIC_CATEGORY_ITEM_FASHION (1<<1)
-/// ranged weapons
-#define ECONOMIC_CATEGORY_ITEM_GUN (1<<2)
-/// melee weapons
-#define ECONOMIC_CATEGORY_ITEM_MELEE (1<<3)
-/// armor, shields ,etc
-#define ECONOMIC_CATEGORY_ITEM_ARMOR (1<<4)
-/// basic tools / engineering equipment
-#define ECONOMIC_CATEGORY_ITEM_TOOL (1<<5)
-/// engineering equipment / advanced tools
-#define ECONOMIC_CATEGORY_ITEM_ENGINEERING (1<<6)
-/// medical equipment / tools
-#define ECONOMIC_CATEGORY_ITEM_MEDICAL (1<<7)
-/// advanced medical equpiment / tools
-#define ECONOMIC_CATEGORY_ITEM_SURGICAL (1<<8)
-/// recreational / toys
-#define ECONOMIC_CATEGORY_ITEM_TOY (1<<9)
-/// collectable items, trading cards, etc
-#define ECONOMIC_CATEGORY_ITEM_COLLECTABLE (1<<10)
-/// paperwork, camera, etc
-#define ECONOMIC_CATEGORY_ITEM_PAPERWORK (1<<11)
-/// advanced electronics like pda, tablets, computers, etc
-#define ECONOMIC_CATEGORY_ITEM_ELECTRONICS (1<<12)
-
-/proc/economic_category_item_name(cat)
- switch(cat)
- if(ECONOMIC_CATEGORY_ITEM_CLOTHING)
- return "Clothing"
- if(ECONOMIC_CATEGORY_ITEM_FASHION)
- return "Fashion"
- if(ECONOMIC_CATEGORY_ITEM_GUN)
- return "Ranged Weaponry"
- if(ECONOMIC_CATEGORY_ITEM_MELEE)
- return "Melee Weaponry"
- if(ECONOMIC_CATEGORY_ITEM_ARMOR)
- return "Defense Equipment"
- if(ECONOMIC_CATEGORY_ITEM_TOOL)
- return "Tools"
- if(ECONOMIC_CATEGORY_ITEM_ENGINEERING)
- return "Engineering Equipment"
- if(ECONOMIC_CATEGORY_ITEM_MEDICAL)
- return "Medicine"
- if(ECONOMIC_CATEGORY_ITEM_SURGICAL)
- return "Medical Equipment"
- if(ECONOMIC_CATEGORY_ITEM_TOY)
- return "Toys"
- if(ECONOMIC_CATEGORY_ITEM_COLLECTABLE)
- return "Collectables"
- if(ECONOMIC_CATEGORY_ITEM_PAPERWORK)
- return "Recordkeeping"
- if(ECONOMIC_CATEGORY_ITEM_ELECTRONICS)
- return "Information Technology"
- else
- return "Miscellaneous"
-
-DEFINE_BITFIELD(economic_category_item, list(
- BITFIELD(ECONOMIC_CATEGORY_ITEM_CLOTHING),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_FASHION),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_GUN),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_MELEE),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_ARMOR),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_TOOL),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_ENGINEERING),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_MEDICAL),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_SURGICAL),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_TOY),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_COLLECTABLE),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_PAPERWORK),
- BITFIELD(ECONOMIC_CATEGORY_ITEM_ELECTRONICS),
-))
-
-//? categories for mobs
-
-#define ECONOMIC_CATEGORY_MOB_DEFAULT (NONE)
-
-/// "normal" livestock
-#define ECONOMIC_CATEGORY_MOB_LIVESTOCK (1<<0)
-
-/proc/economic_category_mob_name(cat)
- switch(cat)
- if(ECONOMIC_CATEGORY_MOB_LIVESTOCK)
- return "Livestock"
- else
- return "Miscellaneous"
-
-DEFINE_BITFIELD(economic_category_mob, list(
- BITFIELD(ECONOMIC_CATEGORY_MOB_LIVESTOCK),
-))
-
-//? categories for materials
-
-#define ECONOMIC_CATEGORY_MATERIAL_DEFAULT (NONE)
-
-/// staple bulk construction materials
-#define ECONOMIC_CATEGORY_MATERIAL_CONSTRUCTION (1<<0)
-/// luxury goods like exotic animal furs or whatever
-#define ECONOMIC_CATEGORY_MATERIAL_LUXURY (1<<1)
-/// industrial stuff
-#define ECONOMIC_CATEGORY_MATERIAL_INDUSTRIAL (1<<2)
-/// rare earth stuff like diamonds
-#define ECONOMIC_CATEGORY_MATERIAL_RARE (1<<3)
-/// extremely rare stuff like morphium
-#define ECONOMIC_CATEGORY_MATERIAL_EXOTIC (1<<4)
-/// biological like wood or whatever
-#define ECONOMIC_CATEGORY_MATERIAL_ORGANIC (1<<5)
-
-/proc/economic_category_material_name(cat)
- switch(cat)
- if(ECONOMIC_CATEGORY_MATERIAL_CONSTRUCTION)
- return "Bulk Construction"
- if(ECONOMIC_CATEGORY_MATERIAL_LUXURY)
- return "Luxury Materials"
- if(ECONOMIC_CATEGORY_MATERIAL_INDUSTRIAL)
- return "Industrial Resources"
- if(ECONOMIC_CATEGORY_MATERIAL_RARE)
- return "Rare Elements"
- if(ECONOMIC_CATEGORY_MATERIAL_EXOTIC)
- return "Exotic Matter"
- if(ECONOMIC_CATEGORY_MATERIAL_ORGANIC)
- return "Organic Products"
-
-DEFINE_BITFIELD(economic_category_material, list(
- BITFIELD(ECONOMIC_CATEGORY_MATERIAL_CONSTRUCTION),
- BITFIELD(ECONOMIC_CATEGORY_MATERIAL_LUXURY),
- BITFIELD(ECONOMIC_CATEGORY_MATERIAL_INDUSTRIAL),
- BITFIELD(ECONOMIC_CATEGORY_MATERIAL_RARE),
- BITFIELD(ECONOMIC_CATEGORY_MATERIAL_EXOTIC),
- BITFIELD(ECONOMIC_CATEGORY_MATERIAL_ORGANIC),
-))
-
-//? categories for reagents
-
-#define ECONOMIC_CATEGORY_REAGENT_DEFAULT (NONE)
-
-/// medicine
-#define ECONOMIC_CATEGORY_REAGENT_MEDICINE (1<<0)
-/// raw materials like iron / gold / phoron /etc
-#define ECONOMIC_CATEGORY_REAGENT_RAW (1<<1)
-/// drugs :devil:
-#define ECONOMIC_CATEGORY_REAGENT_NARCOTICS (1<<2)
-/// poisons, lethal or otherwise
-#define ECONOMIC_CATEGORY_REAGENT_POISON (1<<3)
-/// explosives, chlorine triflouride-like fire, etc
-#define ECONOMIC_CATEGORY_REAGENT_PYROTECHNICS (1<<4)
-/// exotic / rare reagents
-#define ECONOMIC_CATEGORY_REAGENT_EXOTIC (1<<5)
-/// agricultural
-#define ECONOMIC_CATEGORY_REAGENT_AGRICULTURAL (1<<6)
-/// food / whatever
-#define ECONOMIC_CATEGORY_REAGENT_FOOD (1<<7)
-/// crayon powder, recreational coloring, etc
-#define ECONOMIC_CATEGORY_REAGENT_TOYS (1<<8)
-
-DEFINE_BITFIELD(economic_category_reagent, list(
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_MEDICINE),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_RAW),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_NARCOTICS),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_POISON),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_PYROTECHNICS),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_EXOTIC),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_AGRICULTURAL),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_FOOD),
- BITFIELD(ECONOMIC_CATEGORY_REAGENT_TOYS),
-))
-
-/proc/economic_category_reagent_name(cat)
- switch(cat)
- if(ECONOMIC_CATEGORY_REAGENT_MEDICINE)
- return "Medicine"
- if(ECONOMIC_CATEGORY_REAGENT_RAW)
- return "Raw Reagents"
- if(ECONOMIC_CATEGORY_REAGENT_NARCOTICS)
- return "Drugs"
- if(ECONOMIC_CATEGORY_REAGENT_POISON)
- return "Toxins"
- if(ECONOMIC_CATEGORY_REAGENT_PYROTECHNICS)
- return "Explosives"
- if(ECONOMIC_CATEGORY_REAGENT_EXOTIC)
- return "Exotic"
- if(ECONOMIC_CATEGORY_REAGENT_AGRICULTURAL)
- return "Hydroponics"
- if(ECONOMIC_CATEGORY_REAGENT_FOOD)
- return "Catering"
- if(ECONOMIC_CATEGORY_REAGENT_TOYS)
- return "Toy Products"
diff --git a/code/__DEFINES/materials/parts.dm b/code/__DEFINES/materials/parts.dm
index ba97d7aea545..52231c093861 100644
--- a/code/__DEFINES/materials/parts.dm
+++ b/code/__DEFINES/materials/parts.dm
@@ -1,13 +1,21 @@
//* This file is explicitly licensed under the MIT license. *//
//* Copyright (c) 2023 Citadel Station developers. *//
+//* material part enums *//
+
/// material part key that a single-material-part object is treated as having
#define MATERIAL_PART_DEFAULT "structure"
+
+//* material id enums for lookups during materials init of an entity *//
+
+/// material ID to pass to Initialize() procs for "erase the default material of this slot"
+#define MATERIAL_ID_ERASE "___ERASE___"
+
+//* material_parts var - defaults *//
+
/// material_parts value for object does not use material parts system
#define MATERIAL_DEFAULT_DISABLED "DISABLED"
/// material_parts value for object uses hardcoded vars / overrides the abstraction API
#define MATERIAL_DEFAULT_ABSTRACTED "ABSTRACTED"
/// material_parts value for object has a single material but it's absent
#define MATERIAL_DEFAULT_NONE null
-/// material ID to pass to Initialize() procs for "erase the default material of this slot"
-#define MATERIAL_ID_ERASE "___ERASE___"
diff --git a/code/__DEFINES/supply.dm b/code/__DEFINES/supply.dm
new file mode 100644
index 000000000000..b0a694f14957
--- /dev/null
+++ b/code/__DEFINES/supply.dm
@@ -0,0 +1,31 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+//* Supply Packs - Flags *//
+
+/// prevent private orders from overriding access locks
+///
+/// * for things that are somewhat dangerous and should require access
+#define SUPPLY_PACK_LOCK_PRIVATE_ORDERS (1<<0)
+/// private orders are subject to approval queues rather than being automatically approved once paid
+///
+/// * for things that are too dangerous to allow random ordering
+#define SUPPLY_PACK_RESTRICT_PRIVATE_ORDERS (1<<1)
+
+DEFINE_BITFIELD_NEW(supply_pack_flags, list(
+ /datum/supply_pack = list(
+ "supply_pack_flags",
+ ),
+), list(
+ BITFIELD_NEW("Always Access Restricted", SUPPLY_PACK_LOCK_PRIVATE_ORDERS),
+ BITFIELD_NEW("Restricted Private Orders", SUPPLY_PACK_RESTRICT_PRIVATE_ORDERS),
+))
+
+//* Supply Entity Descriptors *//
+
+/// decode as material
+#define SUPPLY_DESCRIPTOR_HINT_MATERIAL "material"
+/// decode as gas
+#define SUPPLY_DESCRIPTOR_HINT_GAS "gas"
+/// decode as prototype (SSpersistence prototype descriptors)
+#define SUPPLY_DESCRIPTOR_HINT_PROTOTYPE "prototype"
diff --git a/code/controllers/subsystem/supply.dm b/code/controllers/subsystem/supply.dm
index 9c66ec44443e..241e804d829c 100644
--- a/code/controllers/subsystem/supply.dm
+++ b/code/controllers/subsystem/supply.dm
@@ -1,16 +1,19 @@
SUBSYSTEM_DEF(supply)
name = "Supply"
wait = 300
+
+
// Supply Points
var/points = 50
var/points_per_second = 1.5 / 30
var/points_per_slip = 2
- var/points_per_money = 0.02 // 1 point for $50
+ var/points_per_money = 0.06 // 1 point for $50
var/points_per_trash = 0.1 // Weighted value, tentative.
// Control
var/ordernum
var/list/shoppinglist = list() // Approved orders
- var/list/supply_pack = list() // All supply packs
+ var/list/legacy_supply_packs = list() // All supply packs
+ var/static/list/legacy_supply_categories = list()
var/list/exported_crates = list() // Crates sent from the station
var/list/order_history = list() // History of orders, showing edits made by users
var/list/adm_order_history = list() // Complete history of all orders, for admin use
@@ -18,13 +21,6 @@ SUBSYSTEM_DEF(supply)
// Shuttle Movement
var/movetime = 1200
var/datum/shuttle/autodock/ferry/supply/shuttle
- var/list/material_points_conversion = list( // Any materials not named in this list are worth 0 points
- MAT_PHORON = 5,
- MAT_PLATINUM = 5,
- MAT_GOLD = 2, // CIT CHANGE: Gold is now worth 2 cargo points per sheet
- MAT_SILVER = 2, // CIT CHANGE: Silver is now worth 2 cargo points per sheet
- MAT_URANIUM = 1 // CIT CHANGE: Uranium is now worth 1 cargo point per sheet
- )
// TODO - Refactor to use the Supply Subsystem (SSsupply)
@@ -54,7 +50,15 @@ SUBSYSTEM_DEF(supply)
for(var/typepath in subtypesof(/datum/supply_pack))
var/datum/supply_pack/P = new typepath()
- supply_pack[P.name] = P
+ if(!P.legacy)
+ continue
+ legacy_supply_packs[P.name] = P
+ legacy_supply_categories[P.category] = TRUE
+ P.initialize()
+ var/list/flattened = list()
+ for(var/key in legacy_supply_categories)
+ flattened += key
+ legacy_supply_categories = flattened
return ..()
// Supply shuttle SSticker - handles supply point regeneration
@@ -99,9 +103,7 @@ SUBSYSTEM_DEF(supply)
var/obj/structure/closet/crate/CR = MA
callHook("sell_crate", list(CR, subarea))
- points += CR.points_per_crate
- if(CR.points_per_crate)
- base_value = CR.points_per_crate
+ points += points_per_money * CR.get_worth(GET_WORTH_FLAGS_SUPPLY_DETECTION)
var/find_slip = 1
for(var/atom/A in CR)
@@ -123,10 +125,13 @@ SUBSYSTEM_DEF(supply)
// Sell phoron and platinum
if(istype(A, /obj/item/stack/material))
var/obj/item/stack/material/P = A
- if(material_points_conversion[P.material.name])
- EC.contents[EC.contents.len]["value"] = P.get_amount() * material_points_conversion[P.material.name]
- EC.contents[EC.contents.len]["quantity"] = P.get_amount()
- EC.value += EC.contents[EC.contents.len]["value"]
+ if(istype(P.material))
+ var/thaler_per_sheet = P.material.worth
+ var/total_thaler = thaler_per_sheet * P.amount
+ var/total_points = total_thaler * points_per_money
+ EC.contents[EC.contents.len]["value"] = total_points
+ EC.contents[EC.contents.len]["quantity"] = P.amount
+ EC.value += EC.contents[EC.contents.len]["value"]
// Sell spacebucks
if(istype(A, /obj/item/spacecash))
@@ -197,13 +202,16 @@ SUBSYSTEM_DEF(supply)
SO.status = SUP_ORDER_SHIPPED
var/datum/supply_pack/SP = SO.object
- var/atom/movable/container = SP.Instantiate(T)
+ var/atom/movable/container = SP.instantiate_pack_at(T)
+ // todo: containerless support
+ if(!container)
+ continue
if(SO.comment)
- container.name += " [SO.comment]"
+ container.name += " ([SO.comment])"
// Supply manifest generation begin
var/obj/item/paper/manifest/slip
- if(!SP.contraband)
+ if(!SP.legacy_contraband)
slip = new /obj/item/paper/manifest(container)
slip.is_copy = 0
// save the trip to the string tree
@@ -225,7 +233,7 @@ SUBSYSTEM_DEF(supply)
if(O.status != SUP_ORDER_REQUESTED)
return FALSE
// Not enough points to purchase the crate
- if(SSsupply.points <= O.object.cost)
+ if(SSsupply.points <= O.object.legacy_cost)
return FALSE
// Based on the current model, there shouldn't be any entries in order_history, requestlist, or shoppinglist, that aren't matched in adm_order_history
@@ -252,7 +260,7 @@ SUBSYSTEM_DEF(supply)
adm_order.approved_at = stationdate2text() + " - " + stationtime2text()
// Deduct cost
- SSsupply.points -= O.object.cost
+ SSsupply.points -= O.object.legacy_cost
return TRUE
// Will deny the specified order. Only useful if the order is currently requested, but available at any status
@@ -312,7 +320,7 @@ SUBSYSTEM_DEF(supply)
new_order.index = new_order.ordernum // Index can be fabricated, or falsified. Ordernum is a permanent marker used to track the order
new_order.object = S
new_order.name = S.name
- new_order.cost = S.cost
+ new_order.cost = S.legacy_cost
new_order.ordered_by = idname
new_order.comment = reason
new_order.ordered_at = stationdate2text() + " - " + stationtime2text()
@@ -359,3 +367,211 @@ SUBSYSTEM_DEF(supply)
"quantity" = new_quantity,
"value" = new_value
)
+
+//* Estimation *//
+
+//* Entity Descriptors *//
+
+/**
+ * Resolves an entity descriptor, and instantiates it
+ *
+ * directly instantiated:
+ * * typepath
+ * * ~~anonymous typepath~~ Waiting on BYOND fix.
+ *
+ * clone(include_contents = TRUE)'d
+ * * an /atom/movable
+ *
+ * instantiated with special handling
+ * * /datum/material typepath or instance
+ * * /obj/item/stack typepath or instance
+ * * /datum/gas typepath or instance - container_hint can be:
+ * ** /obj/machinery/portable_atmospherics/canister
+ * ** /obj/item/tank
+ *
+ * translated, when `descriptor_hint` is specified.
+ * * material id
+ * * gas id - container_hint can be:
+ * ** /obj/machinery/portable_atmospherics/canister
+ * ** /obj/item/tank
+ * * entity id as string (SSpersistence entity IDs)
+ *
+ * @params
+ * * location - where to spawn it. null is valid!
+ * * descriptor - the descriptor
+ * * amount - amount to spawn
+ * * descriptor_hint - SUPPLY_DESCRIPTOR_HINT_* to tell us what to translate the descriptor as; this forces the descriptor to be processed as text id lookup!
+ * * container_hint - container hint, if allowed; using an invalid one will runtime.
+ */
+/datum/controller/subsystem/supply/proc/instantiate_entity_via_descriptor(descriptor, amount = 1, descriptor_hint, container_hint, atom/location)
+ RETURN_TYPE(/atom/movable)
+ if(!location || isarea(location))
+ CRASH("invalid location")
+ // todo: byond cannot introspect anonymous typepaths so just ignore it
+ if(IS_ANONYMOUS_TYPEPATH(descriptor))
+ return
+ // handle instance
+ if(istype(descriptor, /atom/movable))
+ var/atom/movable/cloning_instance = descriptor
+ if(istype(cloning_instance, /obj/item/stack))
+ // lol no
+ descriptor = cloning_instance.type
+ else
+ // actually clone
+ for(var/i in 1 to min(amount, 50))
+ cloning_instance.clone(location, TRUE)
+ return
+ // handle material stack
+ if(ispath(descriptor, /obj/item/stack/material))
+ var/obj/item/stack/material/casted_material_stack = descriptor
+ descriptor = initial(casted_material_stack.material)
+ // handle material
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_MATERIAL || ispath(descriptor, /datum/material))
+ var/datum/material/resolved_material = SSmaterials.resolve_material(descriptor)
+ resolved_material.place_sheet(location, amount)
+ return
+ // handle gas
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_GAS || ispath(descriptor, /datum/gas))
+ var/datum/gas/resolved_gas
+ if(ispath(descriptor))
+ var/datum/gas/casted_gas = descriptor
+ resolved_gas = global.gas_data.gases[initial(casted_gas.id)]
+ else
+ resolved_gas = global.gas_data.gases[resolved_gas]
+ // todo: temperature support, for now everything ships at 273.15K
+ switch(container_hint)
+ if(/obj/item/tank)
+ // tank, if possible
+ var/obj/item/tank/tank_type = /obj/item/tank/shipment
+ var/tank_pressure = initial(tank_type.volume)
+ var/estimated_pressure = (R_IDEAL_GAS_EQUATION * 273.15 * amount) / tank_pressure
+ if(estimated_pressure > TANK_LEAK_PRESSURE)
+ stack_trace("tried to shove [amount] mols of [resolved_gas] into a shipment tank, which would result in a detonation")
+ else
+ var/obj/item/tank/created_tank = new /obj/item/tank/shipment(location)
+ created_tank.air_contents.adjust_gas_temp(resolved_gas.id, amount, 273.15)
+ return
+ var/obj/machinery/portable_atmospherics/canister/created_canister = new(location)
+ created_canister.air_contents.adjust_gas_temp(resolved_gas.id, amount, 273.15)
+ return
+ // translate to path
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_PROTOTYPE)
+ var/entity_type = SSpersistence.prototype_id_to_path[descriptor]
+ descriptor = entity_type
+ // this point onwards: handle path
+ if(ispath(descriptor, /obj/item/stack))
+ var/obj/item/stack/casted_stack_path = descriptor
+ var/stack_safety = 50
+ var/amount_per_stack = initial(casted_stack_path.max_amount)
+ while(amount > 0)
+ var/amount_to_make = min(amount_per_stack, amount)
+ new casted_stack_path(location, amount_to_make)
+ amount -= amount_to_make
+ if(--stack_safety < 0)
+ break
+ return
+ for(var/i in 1 to min(amount, 50))
+ new descriptor(location)
+
+/**
+ * Resolves an entity descriptor, and describes it with a string
+ *
+ * @return string
+ */
+/datum/controller/subsystem/supply/proc/describe_entity_via_descriptor(descriptor, amount = 1, descriptor_hint, container_hint)
+ RETURN_TYPE(/atom/movable)
+ // todo: byond cannot introspect anonymous typepaths so just ignore it
+ if(IS_ANONYMOUS_TYPEPATH(descriptor))
+ return
+ // handle instance
+ if(istype(descriptor, /atom/movable))
+ var/atom/movable/cloning_instance = descriptor
+ if(istype(cloning_instance, /obj/item/stack))
+ // lol no
+ descriptor = cloning_instance.type
+ else
+ return "[amount] [cloning_instance](s)"
+ // handle material stack
+ if(ispath(descriptor, /obj/item/stack/material))
+ var/obj/item/stack/material/casted_material_stack = descriptor
+ descriptor = initial(casted_material_stack.material)
+ // handle material
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_MATERIAL || ispath(descriptor, /datum/material))
+ var/datum/material/resolved_material = SSmaterials.resolve_material(descriptor)
+ return "[amount] [resolved_material.sheet_plural_name] of [resolved_material.display_name]"
+ // handle gas
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_GAS || ispath(descriptor, /datum/gas))
+ var/datum/gas/resolved_gas
+ if(ispath(descriptor))
+ var/datum/gas/casted_gas = descriptor
+ resolved_gas = global.gas_data.gases[initial(casted_gas.id)]
+ else
+ resolved_gas = global.gas_data.gases[resolved_gas]
+ // todo: display_name for gas
+ return "[amount] mol(s) of [resolved_gas]"
+ // translate to path
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_PROTOTYPE)
+ var/entity_type = SSpersistence.prototype_id_to_path[descriptor]
+ descriptor = entity_type
+ // this point onwards: handle path
+ if(ispath(descriptor, /obj/item/stack))
+ var/obj/item/stack/casted_stack_path = descriptor
+ return "[amount] [initial(casted_stack_path.name)]"
+ var/atom/movable/casted_movable_path = descriptor
+ return "[amount] [initial(casted_movable_path.name)](s)"
+
+/**
+ * Resolves an entity descriptor, and estimates its worth
+ *
+ * @return number (thalers)
+ */
+/datum/controller/subsystem/supply/proc/value_entity_via_descriptor(descriptor, amount = 1, descriptor_hint, container_hint)
+ RETURN_TYPE(/atom/movable)
+ // todo: byond cannot introspect anonymous typepaths so just ignore it
+ if(IS_ANONYMOUS_TYPEPATH(descriptor))
+ return
+ // handle instance
+ if(istype(descriptor, /atom/movable))
+ var/atom/movable/cloning_instance = descriptor
+ if(istype(cloning_instance, /obj/item/stack))
+ // lol no
+ descriptor = cloning_instance.type
+ else
+ return amount * cloning_instance.worth(GET_WORTH_FLAGS_SUPPLY_DETECTION)
+ // handle material stack
+ if(ispath(descriptor, /obj/item/stack/material))
+ var/obj/item/stack/material/casted_material_stack = descriptor
+ descriptor = initial(casted_material_stack.material)
+ // handle material
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_MATERIAL || ispath(descriptor, /datum/material))
+ var/datum/material/resolved_material = SSmaterials.resolve_material(descriptor)
+ return amount * resolved_material.worth
+ // handle gas
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_GAS || ispath(descriptor, /datum/gas))
+ var/datum/gas/resolved_gas
+ if(ispath(descriptor))
+ var/datum/gas/casted_gas = descriptor
+ resolved_gas = global.gas_data.gases[initial(casted_gas.id)]
+ else
+ resolved_gas = global.gas_data.gases[resolved_gas]
+ // todo: temperature support, for now everything ships at 273.15K
+ switch(container_hint)
+ if(/obj/item/tank)
+ // tank, if possible
+ var/obj/item/tank/tank_type = /obj/item/tank/shipment
+ var/tank_pressure = initial(tank_type.volume)
+ var/estimated_pressure = (R_IDEAL_GAS_EQUATION * 273.15 * amount) / tank_pressure
+ if(estimated_pressure > TANK_LEAK_PRESSURE)
+ stack_trace("tried to shove [amount] mols of [resolved_gas] into a shipment tank, which would result in a detonation")
+ return amount * resolved_gas.worth
+ // translate to path
+ if(descriptor_hint == SUPPLY_DESCRIPTOR_HINT_PROTOTYPE)
+ var/entity_type = SSpersistence.prototype_id_to_path[descriptor]
+ descriptor = entity_type
+ // this point onwards: handle path
+ if(ispath(descriptor, /obj/item/stack))
+ var/obj/item/stack/casted_stack_path = descriptor
+ return amount * initial(casted_stack_path.worth_intrinsic)
+ var/atom/movable/creating = new descriptor(null)
+ . = creating.worth(GET_WORTH_FLAGS_SUPPLY_DETECTION) * amount
+ qdel(creating)
diff --git a/code/datums/armor/station/armor.dm b/code/datums/armor/station/armor.dm
index 6fb9ef70bb12..5c6080a7e2a1 100644
--- a/code/datums/armor/station/armor.dm
+++ b/code/datums/armor/station/armor.dm
@@ -82,7 +82,7 @@
rad = 0.1
/datum/armor/station/combat
- melee = 0.15
+ melee = 0.35
bullet = 0.5
bullet_soak = 2
laser = 0.5
diff --git a/code/game/atoms/atom.dm b/code/game/atoms/atom.dm
index 498c75b1ecd5..b9bcee5fe40d 100644
--- a/code/game/atoms/atom.dm
+++ b/code/game/atoms/atom.dm
@@ -51,31 +51,6 @@
/// * this variable is not visible and should not be edited in the map editor.
var/tmp/list/context_menus
- //? Economy
- // todo: move all this to obj level, you aren't going to sell a fucking turf.
- // the procs can however stay.
- /// intrinsic worth without accounting containing reagents / materials - applies in static and dynamic mode.
- var/worth_intrinsic = 0
- /// static worth of contents - only read if getting a static worth from typepath.
- var/worth_containing = 0
- /// static worth of raw materials - only read if getting a static worth from typepath.
- var/worth_materials = 0
- /// intrinsic worth default markup when buying as factor (2 for 2x)
- var/worth_buy_factor = WORTH_BUY_FACTOR_DEFAULT
- /// intrinsic elasticity as factor, 2 = 2x easy to inflate market
- var/worth_elasticity = WORTH_ELASTICITY_DEFAULT
- /**
- * * DANGER * - do not touch this variable unless you know what you are doing.
- *
- * This signifies that procs have a non-negligible randomization on a *freshly-spawned* instance of this object.
- * This is not the case for most closets / lockers / crates / storage that spawn with items.
- * In those cases, use the other variables to control its static worth.
- *
- * This means that things like cargo should avoid "intuiting" the value of this object
- * through initial()'s alone.
- */
- var/worth_dynamic = FALSE
-
//? Integrity
/// max health
var/integrity_max
diff --git a/code/game/content/factions/corporations/nanotrasen/faction.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-faction.dm
similarity index 100%
rename from code/game/content/factions/corporations/nanotrasen/faction.dm
rename to code/game/content/factions/corporations/nanotrasen/nanotrasen-faction.dm
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm
new file mode 100644
index 000000000000..a7b7800463ec
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply.dm
@@ -0,0 +1,6 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+// todo: supply system
+/datum/supply_pack/nanotrasen
+ legacy = TRUE
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/animals.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/animals.dm
new file mode 100644
index 000000000000..340f893757a3
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/animals.dm
@@ -0,0 +1,125 @@
+
+/datum/supply_pack/nanotrasen/animals
+ category = "Animals"
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/animals/monkey
+ name = "Monkey crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes,
+ )
+ worth = 200
+ container_type = /obj/structure/closet/crate/freezer
+
+/datum/supply_pack/nanotrasen/animals/farwa
+ name = "Farwa crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/farwacubes,
+ )
+ worth = 350
+ container_name = "Farwa crate"
+ container_type = /obj/structure/closet/crate/freezer
+
+/datum/supply_pack/nanotrasen/animals/neara
+ name = "Neaera crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/neaeracubes,
+ )
+ worth = 350
+ container_type = /obj/structure/closet/crate/freezer
+
+/datum/supply_pack/nanotrasen/animals/stok
+ name = "Stok crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/stokcubes,
+ )
+ worth = 350
+ container_type = /obj/structure/closet/crate/freezer
+
+/datum/supply_pack/nanotrasen/animals/lisa
+ name = "Corgi Crate"
+ worth = 350 // DOGGIE :D
+ container_type = /obj/structure/largecrate/animal/corgi
+
+/datum/supply_pack/nanotrasen/animals/cat
+ name = "Cat Crate"
+ worth = 350 // KIBBY :D
+ container_type = /obj/structure/largecrate/animal/cat
+
+/datum/supply_pack/nanotrasen/animals/cow
+ name = "Cow crate"
+ worth = 350
+ container_type = /obj/structure/largecrate/animal/cow
+
+/datum/supply_pack/nanotrasen/animals/goat
+ name = "Goat crate"
+ worth = 350
+ container_type = /obj/structure/largecrate/animal/goat
+
+/datum/supply_pack/nanotrasen/animals/chicken
+ name = "Chicken crate"
+ worth = 350
+ container_type = /obj/structure/largecrate/animal/chick
+
+/datum/supply_pack/nanotrasen/animals/diycarpotox
+ name = "Gather-It-Yourself Carpotoxin"
+ worth = 500 // grr powergamers
+ container_type = /obj/structure/largecrate/animal/carp
+
+/datum/supply_pack/nanotrasen/animals/diyspidertox
+ name = "Gather-It-Yourself Spider Toxin"
+ worth = 500 // grr powergamers
+ container_type = /obj/structure/largecrate/animal/spiders
+
+/datum/supply_pack/nanotrasen/animals/birds
+ name = "Birds Crate"
+ worth = 4000 // dear lord there's a lot of birds in here
+ container_type = /obj/structure/largecrate/birds
+
+/datum/supply_pack/nanotrasen/animals/sobaka
+ name = "Sobaka crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/sobakacubes,
+ )
+ worth = 350
+
+/datum/supply_pack/nanotrasen/animals/saru
+ name = "Saru crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/sarucubes,
+ )
+ worth = 350
+
+/datum/supply_pack/nanotrasen/animals/sparra
+ name = "Sparra crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/sparracubes,
+ )
+ worth = 350
+
+/datum/supply_pack/nanotrasen/animals/wolpin
+ name = "Wolpin crate"
+ contains = list(
+ /obj/item/storage/box/monkeycubes/wolpincubes,
+ )
+ worth = 350
+
+/datum/supply_pack/nanotrasen/animals/fennec
+ name = "Fennec crate"
+ worth = 500 // FOX :D
+ container_type = /obj/structure/largecrate/animal/fennec
+
+/datum/supply_pack/nanotrasen/animals/woolie
+ name = "Woolie crate"
+ worth = 500
+ container_type = /obj/structure/largecrate/animal/woolie
+
+/datum/supply_pack/nanotrasen/animals/icegoat
+ name = "Glacicorn crate"
+ worth = 500
+ container_type = /obj/structure/largecrate/animal/icegoat
+
+/datum/supply_pack/nanotrasen/animals/furnacegrub
+ name = "Furnace Grub crate"
+ worth = 500
+ container_type = /obj/structure/largecrate/animal/furnacegrub
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/atmospherics.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/atmospherics.dm
new file mode 100644
index 000000000000..71a4fea064e2
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/atmospherics.dm
@@ -0,0 +1,122 @@
+/*
+* Here is where any supply packs related
+* to being atmospherics tasks live.
+*/
+
+
+/datum/supply_pack/nanotrasen/atmospherics
+ category = "Atmospherics"
+
+/datum/supply_pack/nanotrasen/atmospherics/inflatable
+ name = "Inflatable barriers"
+ contains = list(
+ /obj/item/storage/briefcase/inflatable = 3,
+ )
+ container_type = /obj/structure/closet/crate/engineering
+ container_name = "Inflatable Barrier Crate"
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_empty
+ name = "Empty gas canister"
+ container_name = "Empty gas canister crate"
+ container_type = /obj/structure/largecrate
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister = 1,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_air
+ name = "Air canister"
+ container_name = "Air canister crate"
+ container_type = /obj/structure/largecrate
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/air,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_helium
+ name = "Helium canister"
+ container_name = "Helium canister crate"
+ container_type = /obj/structure/largecrate
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/helium,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_oxygen
+ name = "Oxygen canister"
+ container_name = "Oxygen canister crate"
+ container_type = /obj/structure/largecrate
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/oxygen,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_nitrogen
+ name = "Nitrogen canister"
+ container_name = "Nitrogen canister crate"
+ container_type = /obj/structure/largecrate
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/nitrogen,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_phoron
+ name = "Phoron gas canister"
+ container_name = "Phoron gas canister crate"
+ container_type = /obj/structure/closet/crate/secure/large
+ container_access = list(
+ ACCESS_ENGINEERING_ATMOS,
+ )
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/phoron,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_nitrous_oxide
+ name = "N2O gas canister"
+ container_name = "N2O gas canister crate"
+ container_type = /obj/structure/closet/crate/secure/large
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/nitrous_oxide,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/canister_carbon_dioxide
+ name = "Carbon dioxide gas canister"
+ container_name = "CO2 canister crate"
+ container_type = /obj/structure/closet/crate/secure/large
+ contains = list(
+ /obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/air_dispenser
+ name = "Pipe Dispenser"
+ container_type = /obj/structure/closet/crate/secure/large
+ container_name = "Pipe Dispenser Crate"
+ contains = list(
+ /obj/machinery/pipedispenser/orderable,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/disposals_dispenser
+ name = "Disposals Pipe Dispenser"
+ container_type = /obj/structure/closet/crate/secure/large
+ container_name = "Disposal Dispenser Crate"
+ contains = list(
+ /obj/machinery/pipedispenser/disposal/orderable,
+ )
+
+/datum/supply_pack/nanotrasen/atmospherics/internals
+ name = "Internals crate"
+ contains = list(
+ /obj/item/clothing/mask/gas = 3,
+ /obj/item/tank/air = 3,
+ )
+ container_type = /obj/structure/closet/crate/internals
+ container_name = "Internals crate"
+
+/datum/supply_pack/nanotrasen/atmospherics/evacuation
+ name = "Emergency equipment"
+ contains = list(
+ /obj/item/storage/toolbox/emergency = 2,
+ /obj/item/clothing/suit/storage/hazardvest = 2,
+ /obj/item/clothing/suit/storage/vest = 2,
+ /obj/item/tank/emergency/oxygen/engi = 4,
+ /obj/item/clothing/suit/space/emergency = 4,
+ /obj/item/clothing/head/helmet/space/emergency = 4,
+ /obj/item/clothing/mask/gas = 4,
+ )
+ container_type = /obj/structure/closet/crate/internals
+ container_name = "Emergency crate"
diff --git a/code/modules/cargo/supplypacks/contraband.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm
similarity index 52%
rename from code/modules/cargo/supplypacks/contraband.dm
rename to code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm
index ca97a98b13b6..bed7fbd69281 100644
--- a/code/modules/cargo/supplypacks/contraband.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/contraband.dm
@@ -3,60 +3,67 @@
* and require modification of the supply controller live.
*/
+// todo: wow this sucks
+/datum/supply_pack/nanotrasen/contraband
+ contains_some = list(
+ list(
+ "amount" = 5,
+ "entities" = list(
+ /obj/item/seeds/bloodtomatoseed,
+ /obj/item/storage/pill_bottle/zoom,
+ /obj/item/storage/pill_bottle/happy,
+ /obj/item/reagent_containers/food/drinks/bottle/pwine,
+ /obj/item/reagent_containers/food/drinks/cans/geometer = 2,
+ ),
+ ),
+ )
-/datum/supply_pack/randomised/contraband
- num_contained = 5
- contains = list(
- /obj/item/seeds/bloodtomatoseed,
- /obj/item/storage/pill_bottle/zoom,
- /obj/item/storage/pill_bottle/happy,
- /obj/item/reagent_containers/food/drinks/bottle/pwine,
- /obj/item/reagent_containers/food/drinks/cans/geometer = 2
- )
+ worth = 250
name = "Contraband crate"
- cost = 25
container_type = /obj/structure/closet/crate
container_name = "Unlabeled crate"
- contraband = 1
- group = "Supplies"
+ legacy_contraband = 1
+ category = "Supplies"
-/datum/supply_pack/security/specialops
+/datum/supply_pack/nanotrasen/security/specialops
name = "Special Ops supplies"
contains = list(
/obj/item/storage/box/emps,
/obj/item/grenade/smokebomb = 4,
- /obj/item/grenade/chem_grenade/incendiary
+ /obj/item/grenade/chem_grenade/incendiary,
)
- cost = 25
container_type = /obj/structure/closet/crate
container_name = "Special Ops crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/munitions/bolt_rifles_militia
+/datum/supply_pack/nanotrasen/munitions/bolt_rifles_militia
name = "Weapon - Misplaced militia rifles"
contains = list(
- /obj/item/gun/ballistic/shotgun/pump/rifle = 3,
- /obj/item/ammo_magazine/clip/c762 = 6
- )
- cost = 50
- contraband = 1
+ /obj/item/gun/ballistic/shotgun/pump/rifle = 3,
+ /obj/item/ammo_magazine/clip/c762 = 6,
+ )
+ legacy_contraband = 1
container_type = /obj/structure/closet/crate/secure/weapon
container_name = "Ballistic weapons crate"
- access = ACCESS_SECURITY_ARMORY
+ container_access = ACCESS_SECURITY_ARMORY
-/datum/supply_pack/randomised/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things
+/datum/supply_pack/nanotrasen/misc/telecrate //you get something awesome, a couple of decent things, and a few weak/filler things
name = "ERR_NULL_ENTRY" //null crate! also dream maker is hell,
- num_contained = 1
- contains = list(
- /obj/item/storage/box/cargo_null_entry_kit/ops,
- /obj/item/storage/box/cargo_null_entry_kit/doctor,
- /obj/item/storage/box/cargo_null_entry_kit/sapper,
- /obj/item/storage/box/cargo_null_entry_kit/spy,
- /obj/item/storage/box/cargo_null_entry_kit/pro
+ contains_some = list(
+ list(
+ "entities" = list(
+ /obj/item/storage/box/cargo_null_entry_kit/ops,
+ /obj/item/storage/box/cargo_null_entry_kit/doctor,
+ /obj/item/storage/box/cargo_null_entry_kit/sapper,
+ /obj/item/storage/box/cargo_null_entry_kit/spy,
+ /obj/item/storage/box/cargo_null_entry_kit/pro,
+ ),
+ "amount" = 1,
+ ),
)
- cost = 250 //more than a hat crate!,
- contraband = 1
+ worth = 5000
+ legacy_contraband = 1
container_type = /obj/structure/largecrate
container_name = "Suspicious crate"
@@ -119,107 +126,113 @@
new /obj/item/material/knife/tacknife/combatknife(src)
new /obj/item/clothing/mask/balaclava(src)
-/datum/supply_pack/supply/stolen
+/datum/supply_pack/nanotrasen/supply/stolen
name = "Stolen Supply Crate"
- contains = list(/obj/item/stolenpackage = 1)
- cost = 75
+ contains = list(
+ /obj/item/stolenpackage = 1,
+ )
container_type = /obj/structure/closet/crate
container_name = "shady crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/randomised/stolenplus
+/datum/supply_pack/nanotrasen/stolenplus
name = "Bulk Stolen Supply Crate"
- num_contained = 4
- contains = list(
- /obj/item/stolenpackage,
- /obj/item/stolenpackageplus,
- ) // uh oh
- cost = 375 //slight discount? still contraband tho glhf
+ contains_some = list(
+ list(
+ "amount" = 4,
+ "entities" = list(
+ /obj/item/stolenpackage,
+ /obj/item/stolenpackageplus,
+ ),
+ ),
+ )
+ worth = /obj/item/stolenpackageplus::worth_intrinsic * 4
container_type = /obj/structure/closet/crate
container_name = "shadier crate"
- contraband = 1
- group = "Supplies"
+ legacy_contraband = 1
+ category = "Supplies"
-/datum/supply_pack/supply/medieval
+/datum/supply_pack/nanotrasen/supply/medieval
name = "Knight set crate"
contains = list(
- /obj/item/clothing/head/helmet/medieval/red = 1,
- /obj/item/clothing/head/helmet/medieval/green = 1,
- /obj/item/clothing/head/helmet/medieval/blue = 1,
- /obj/item/clothing/head/helmet/medieval/orange = 1,
- /obj/item/clothing/suit/armor/medieval/red = 1,
- /obj/item/clothing/suit/armor/medieval/green = 1,
- /obj/item/clothing/suit/armor/medieval/blue = 1,
- /obj/item/clothing/suit/armor/medieval/orange = 1
- )
- cost = 120
+ /obj/item/clothing/head/helmet/medieval/red = 1,
+ /obj/item/clothing/head/helmet/medieval/green = 1,
+ /obj/item/clothing/head/helmet/medieval/blue = 1,
+ /obj/item/clothing/head/helmet/medieval/orange = 1,
+ /obj/item/clothing/suit/armor/medieval/red = 1,
+ /obj/item/clothing/suit/armor/medieval/green = 1,
+ /obj/item/clothing/suit/armor/medieval/blue = 1,
+ /obj/item/clothing/suit/armor/medieval/orange = 1,
+ )
container_type = /obj/structure/closet/crate
container_name = "knight set crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/supply/deusvult_templar
+/datum/supply_pack/nanotrasen/supply/deusvult_templar
name = "Templar set crate"
contains = list(
- /obj/item/clothing/head/helmet/medieval/crusader/templar,
- /obj/item/clothing/suit/armor/medieval/crusader/cross/templar,
- /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/templar
- )
- cost = 30
+ /obj/item/clothing/head/helmet/medieval/crusader/templar,
+ /obj/item/clothing/suit/armor/medieval/crusader/cross/templar,
+ /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/templar,
+ )
container_type = /obj/structure/closet/crate
container_name = "templar armor crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/supply/deusvult_hospitaller
+/datum/supply_pack/nanotrasen/supply/deusvult_hospitaller
name = "Hospitaller set crate"
contains = list(
- /obj/item/clothing/head/helmet/medieval/crusader,
- /obj/item/clothing/suit/armor/medieval/crusader/cross/hospitaller,
- /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/hospitaller
- )
- cost = 30
+ /obj/item/clothing/head/helmet/medieval/crusader,
+ /obj/item/clothing/suit/armor/medieval/crusader/cross/hospitaller,
+ /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/hospitaller,
+ )
container_type = /obj/structure/closet/crate
container_name = "hospitaller armor crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/supply/deusvult_teutonic
+/datum/supply_pack/nanotrasen/supply/deusvult_teutonic
name = "Teutonic set crate"
contains = list(
- /obj/item/clothing/head/helmet/medieval/crusader/horned,
- /obj/item/clothing/head/helmet/medieval/crusader/winged,
- /obj/item/clothing/suit/armor/medieval/crusader/cross,
- /obj/item/clothing/suit/armor/medieval/crusader/cross/teutonic,
- /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade,
- /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/teutonic
- )
- cost = 40
+ /obj/item/clothing/head/helmet/medieval/crusader/horned,
+ /obj/item/clothing/head/helmet/medieval/crusader/winged,
+ /obj/item/clothing/suit/armor/medieval/crusader/cross,
+ /obj/item/clothing/suit/armor/medieval/crusader/cross/teutonic,
+ /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade,
+ /obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/teutonic,
+ )
container_type = /obj/structure/closet/crate
container_name = "teutonic armor crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/robotics/salvage
+/datum/supply_pack/nanotrasen/robotics/salvage
name = "Redirected Mech Salvage"
- contains = list(/obj/item/mechasalvage = 6)
- cost = 400 //High End Mech Parts, Direct To You, at an extreme markup!
+ contains = list(
+ /obj/item/mechasalvage = 6,
+ )
container_type = /obj/structure/closet/crate
container_name = "oil-stained crate"
- contraband = 1
+ legacy_contraband = 1
-/datum/supply_pack/randomised/material/rareores
+/datum/supply_pack/nanotrasen/material/rareores
name = "Smuggled Ores and Materials"
- num_contained = 20
- contains = list(
- /obj/item/stack/material/bananium,
- /obj/item/stack/material/diamond,
- /obj/item/stack/material/durasteel,
- /obj/item/stack/material/morphium,
- /obj/item/stack/material/platinum,
- /obj/item/stack/material/verdantium,
- /obj/item/stack/material/mhydrogen,
- /obj/item/stack/material/silencium,
- /obj/item/stack/material/valhollide
- )
- cost = 350
+ contains_some = list(
+ list(
+ "amount" = 20,
+ "entities" = list(
+ /obj/item/stack/material/bananium,
+ /obj/item/stack/material/diamond,
+ /obj/item/stack/material/durasteel,
+ /obj/item/stack/material/morphium,
+ /obj/item/stack/material/platinum,
+ /obj/item/stack/material/verdantium,
+ /obj/item/stack/material/mhydrogen,
+ /obj/item/stack/material/silencium,
+ /obj/item/stack/material/valhollide,
+ ),
+ ),
+ )
+ worth = 1000
container_type = /obj/structure/closet/crate
container_name = "dented mining crate"
- contraband = 1
- group = "Materials"
+ legacy_contraband = 1
+ category = "Materials"
diff --git a/code/modules/cargo/supplypacks/costumes.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm
similarity index 55%
rename from code/modules/cargo/supplypacks/costumes.dm
rename to code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm
index fa0d3816e145..782a2e66f39f 100644
--- a/code/modules/cargo/supplypacks/costumes.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/costumes.dm
@@ -4,125 +4,124 @@
*/
-/datum/supply_pack/costumes
- group = "Costumes"
+/datum/supply_pack/nanotrasen/costume
+ abstract_type = /datum/supply_pack/nanotrasen/costume
+ category = "Costumes"
-/datum/supply_pack/randomised/costumes
- group = "Costumes"
-
-/datum/supply_pack/costumes/wizard
+/datum/supply_pack/nanotrasen/costume/wizard
name = "Wizard costume"
contains = list(
- /obj/item/staff,
- /obj/item/clothing/suit/wizrobe/fake,
- /obj/item/clothing/shoes/sandal,
- /obj/item/clothing/head/wizard/fake
- )
- cost = 20
+ /obj/item/staff,
+ /obj/item/clothing/suit/wizrobe/fake,
+ /obj/item/clothing/shoes/sandal,
+ /obj/item/clothing/head/wizard/fake,
+ )
+ worth = 200
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Wizard costume crate"
-/datum/supply_pack/costumes/techpriest
+/datum/supply_pack/nanotrasen/costume/techpriest
name = "Tech Priest robes"
contains = list(
- /obj/item/clothing/suit/storage/hooded/techpriest = 2)
- cost = 150
+ /obj/item/clothing/suit/storage/hooded/techpriest = 2,
+ )
+ worth = 350
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Tech Priest crate"
-/datum/supply_pack/randomised/costumes/hats
- num_contained = 4
- 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/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
- )
+/datum/supply_pack/nanotrasen/costume/hats
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = 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/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,
+ )
name = "Collectable hat crate!"
- cost = 200
+ worth = 1500
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Collectable hats crate! Brought to you by Bass.inc!"
-/datum/supply_pack/randomised/costumes/costume
- num_contained = 3
- contains = list(
- /obj/item/clothing/suit/pirate,
- /obj/item/clothing/suit/judgerobe,
- /obj/item/clothing/accessory/wcoat,
- /obj/item/clothing/suit/hastur,
- /obj/item/clothing/suit/holidaypriest,
- /obj/item/clothing/suit/nun,
- /obj/item/clothing/suit/imperium_monk,
- /obj/item/clothing/suit/ianshirt,
- /obj/item/clothing/under/gimmick/rank/captain/suit,
- /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
- /obj/item/clothing/under/lawyer/purpsuit,
- /obj/item/clothing/under/rank/mailman,
- /obj/item/clothing/under/dress/dress_saloon,
- /obj/item/clothing/suit/suspenders,
- /obj/item/clothing/suit/storage/toggle/labcoat/mad,
- /obj/item/clothing/suit/bio_suit/plaguedoctorsuit,
- /obj/item/clothing/under/schoolgirl,
- /obj/item/clothing/under/owl,
- /obj/item/clothing/under/waiter,
- /obj/item/clothing/under/gladiator,
- /obj/item/clothing/under/soviet,
- /obj/item/clothing/under/scratch,
- /obj/item/clothing/under/wedding/bride_white,
- /obj/item/clothing/suit/chef,
- /obj/item/clothing/suit/storage/apron/overalls,
- /obj/item/clothing/under/redcoat,
- /obj/item/clothing/under/kilt,
- /obj/item/clothing/suit/storage/hooded/techpriest
- )
+/datum/supply_pack/nanotrasen/costume/costume
+ lazy_gacha_amount = 3
+ lazy_gacha_contained = list(
+ /obj/item/clothing/suit/pirate,
+ /obj/item/clothing/suit/judgerobe,
+ /obj/item/clothing/accessory/wcoat,
+ /obj/item/clothing/suit/hastur,
+ /obj/item/clothing/suit/holidaypriest,
+ /obj/item/clothing/suit/nun,
+ /obj/item/clothing/suit/imperium_monk,
+ /obj/item/clothing/suit/ianshirt,
+ /obj/item/clothing/under/gimmick/rank/captain/suit,
+ /obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
+ /obj/item/clothing/under/lawyer/purpsuit,
+ /obj/item/clothing/under/rank/mailman,
+ /obj/item/clothing/under/dress/dress_saloon,
+ /obj/item/clothing/suit/suspenders,
+ /obj/item/clothing/suit/storage/toggle/labcoat/mad,
+ /obj/item/clothing/suit/bio_suit/plaguedoctorsuit,
+ /obj/item/clothing/under/schoolgirl,
+ /obj/item/clothing/under/owl,
+ /obj/item/clothing/under/waiter,
+ /obj/item/clothing/under/gladiator,
+ /obj/item/clothing/under/soviet,
+ /obj/item/clothing/under/scratch,
+ /obj/item/clothing/under/wedding/bride_white,
+ /obj/item/clothing/suit/chef,
+ /obj/item/clothing/suit/storage/apron/overalls,
+ /obj/item/clothing/under/redcoat,
+ /obj/item/clothing/under/kilt,
+ /obj/item/clothing/suit/storage/hooded/techpriest,
+ )
name = "Costumes crate"
- cost = 10
+ worth = 350
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Actor Costumes"
-/datum/supply_pack/costumes/formal_wear
+/datum/supply_pack/nanotrasen/costume/formal_wear
contains = list(
- /obj/item/clothing/head/bowler,
- /obj/item/clothing/head/that,
- /obj/item/clothing/suit/storage/toggle/internalaffairs,
- /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket,
- /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket,
- /obj/item/clothing/under/suit_jacket,
- /obj/item/clothing/under/suit_jacket/female,
- /obj/item/clothing/under/suit_jacket/really_black,
- /obj/item/clothing/under/suit_jacket/red,
- /obj/item/clothing/under/lawyer/bluesuit,
- /obj/item/clothing/under/lawyer/purpsuit,
- /obj/item/clothing/shoes/black = 2,
- /obj/item/clothing/shoes/laceup/brown,
- /obj/item/clothing/accessory/wcoat
- )
+ /obj/item/clothing/head/bowler,
+ /obj/item/clothing/head/that,
+ /obj/item/clothing/suit/storage/toggle/internalaffairs,
+ /obj/item/clothing/suit/storage/toggle/lawyer/bluejacket,
+ /obj/item/clothing/suit/storage/toggle/lawyer/purpjacket,
+ /obj/item/clothing/under/suit_jacket,
+ /obj/item/clothing/under/suit_jacket/female,
+ /obj/item/clothing/under/suit_jacket/really_black,
+ /obj/item/clothing/under/suit_jacket/red,
+ /obj/item/clothing/under/lawyer/bluesuit,
+ /obj/item/clothing/under/lawyer/purpsuit,
+ /obj/item/clothing/shoes/black = 2,
+ /obj/item/clothing/shoes/laceup/brown,
+ /obj/item/clothing/accessory/wcoat,
+ )
name = "Formalwear closet"
- cost = 30
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Formalwear for the best occasions."
-/datum/supply_pack/costumes/witch
+/datum/supply_pack/nanotrasen/costume/witch
name = "Witch costume"
container_name = "Witch costume"
container_type = /obj/structure/closet/crate/corporate/nanothreads
- cost = 20
+ worth = 350
contains = list(
/obj/item/clothing/head/wizard/marisa/fake,
/obj/item/clothing/shoes/sandal,
@@ -130,130 +129,130 @@
/obj/item/staff/broom,
)
-/datum/supply_pack/randomised/costumes/costume_hats
+/datum/supply_pack/nanotrasen/costume/costume_hats
name = "Costume hats"
container_name = "Actor hats crate"
container_type = /obj/structure/closet/crate
- cost = 10
- num_contained = 3
- contains = list(
- /obj/item/clothing/head/redcoat,
- /obj/item/clothing/head/mailman,
- /obj/item/clothing/head/plaguedoctorhat,
- /obj/item/clothing/head/pirate,
- /obj/item/clothing/head/hasturhood,
- /obj/item/clothing/head/powdered_wig,
- /obj/item/clothing/head/pin/flower,
- /obj/item/clothing/head/pin/flower/yellow,
- /obj/item/clothing/head/pin/flower/blue,
- /obj/item/clothing/head/pin/flower/pink,
- /obj/item/clothing/head/pin/clover,
- /obj/item/clothing/head/pin/butterfly,
- /obj/item/clothing/mask/gas/owl_mask,
- /obj/item/clothing/mask/gas/monkeymask,
- /obj/item/clothing/head/helmet/gladiator,
- /obj/item/clothing/head/ushanka
- )
+ worth = 350
+ lazy_gacha_amount = 3
+ lazy_gacha_contained = list(
+ /obj/item/clothing/head/redcoat,
+ /obj/item/clothing/head/mailman,
+ /obj/item/clothing/head/plaguedoctorhat,
+ /obj/item/clothing/head/pirate,
+ /obj/item/clothing/head/hasturhood,
+ /obj/item/clothing/head/powdered_wig,
+ /obj/item/clothing/head/pin/flower,
+ /obj/item/clothing/head/pin/flower/yellow,
+ /obj/item/clothing/head/pin/flower/blue,
+ /obj/item/clothing/head/pin/flower/pink,
+ /obj/item/clothing/head/pin/clover,
+ /obj/item/clothing/head/pin/butterfly,
+ /obj/item/clothing/mask/gas/owl_mask,
+ /obj/item/clothing/mask/gas/monkeymask,
+ /obj/item/clothing/head/helmet/gladiator,
+ /obj/item/clothing/head/ushanka,
+ )
-/datum/supply_pack/randomised/costumes/dresses
+/datum/supply_pack/nanotrasen/costume/dresses
name = "Womens formal dress locker"
container_name = "Pretty dress locker"
container_type = /obj/structure/closet/crate/corporate/nanothreads
- cost = 15
- num_contained = 3
- contains = list(
- /obj/item/clothing/under/wedding/bride_orange,
- /obj/item/clothing/under/wedding/bride_purple,
- /obj/item/clothing/under/wedding/bride_blue,
- /obj/item/clothing/under/wedding/bride_red,
- /obj/item/clothing/under/wedding/bride_white,
- /obj/item/clothing/under/sundress,
- /obj/item/clothing/under/dress/dress_green,
- /obj/item/clothing/under/dress/dress_pink,
- /obj/item/clothing/under/dress/dress_orange,
- /obj/item/clothing/under/dress/dress_yellow,
- /obj/item/clothing/under/dress/dress_saloon
- )
+ worth = 350
+ lazy_gacha_amount = 3
+ lazy_gacha_contained = list(
+ /obj/item/clothing/under/wedding/bride_orange,
+ /obj/item/clothing/under/wedding/bride_purple,
+ /obj/item/clothing/under/wedding/bride_blue,
+ /obj/item/clothing/under/wedding/bride_red,
+ /obj/item/clothing/under/wedding/bride_white,
+ /obj/item/clothing/under/sundress,
+ /obj/item/clothing/under/dress/dress_green,
+ /obj/item/clothing/under/dress/dress_pink,
+ /obj/item/clothing/under/dress/dress_orange,
+ /obj/item/clothing/under/dress/dress_yellow,
+ /obj/item/clothing/under/dress/dress_saloon,
+ )
-/datum/supply_pack/costumes/xenowear
+/datum/supply_pack/nanotrasen/costume/xenowear
name = "Xenowear crate"
contains = list(
- /obj/item/clothing/shoes/footwraps,
- /obj/item/clothing/shoes/boots/jackboots/toeless,
- /obj/item/clothing/shoes/boots/workboots/toeless,
- /obj/item/clothing/suit/tajaran/furs,
- /obj/item/clothing/head/tajaranold/scarf,
- /obj/item/clothing/suit/unathi/robe,
- /obj/item/clothing/suit/unathi/mantle,
- /obj/item/clothing/under/permit,
- /obj/item/clothing/under/vox/vox_casual,
- /obj/item/clothing/under/vox/vox_robes,
- /obj/item/clothing/under/harness,
- /obj/item/clothing/under/skirt/loincloth,
- /obj/item/clothing/gloves/vox
- )
- cost = 100
+ /obj/item/clothing/shoes/footwraps,
+ /obj/item/clothing/shoes/boots/jackboots/toeless,
+ /obj/item/clothing/shoes/boots/workboots/toeless,
+ /obj/item/clothing/suit/tajaran/furs,
+ /obj/item/clothing/head/tajaranold/scarf,
+ /obj/item/clothing/suit/unathi/robe,
+ /obj/item/clothing/suit/unathi/mantle,
+ /obj/item/clothing/under/permit,
+ /obj/item/clothing/under/vox/vox_casual,
+ /obj/item/clothing/under/vox/vox_robes,
+ /obj/item/clothing/under/harness,
+ /obj/item/clothing/under/skirt/loincloth,
+ /obj/item/clothing/gloves/vox,
+ )
+ worth = 450
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Xenowear crate"
-/datum/supply_pack/costumes/tesh_smocks
+/datum/supply_pack/nanotrasen/costume/tesh_smocks
name = "Teshari smocks"
contains = list(
- /obj/item/clothing/under/teshari/smock,
- /obj/item/clothing/under/teshari/smock/rainbow,
- /obj/item/clothing/under/teshari/smock/red,
- /obj/item/clothing/under/teshari/smock/white,
- /obj/item/clothing/under/teshari/smock/yellow
- )
- cost = 25
+ /obj/item/clothing/under/teshari/smock,
+ /obj/item/clothing/under/teshari/smock/rainbow,
+ /obj/item/clothing/under/teshari/smock/red,
+ /obj/item/clothing/under/teshari/smock/white,
+ /obj/item/clothing/under/teshari/smock/yellow,
+ )
+ worth = 350
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Teshari smocks crate"
-/datum/supply_pack/randomised/costumes/tesh_coats
+/datum/supply_pack/nanotrasen/costume/tesh_coats
name = "Teshari undercoats"
- num_contained = 4
- contains = list(
- /obj/item/clothing/under/teshari/undercoat/standard/blue_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/brown_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/green_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/lightgrey_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/orange,
- /obj/item/clothing/under/teshari/undercoat/standard/orange_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/pink_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/purple_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/rainbow,
- /obj/item/clothing/under/teshari/undercoat/standard/red_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/white_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/yellow_grey
- )
- cost = 20
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
+ /obj/item/clothing/under/teshari/undercoat/standard/blue_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/brown_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/green_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/lightgrey_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/orange,
+ /obj/item/clothing/under/teshari/undercoat/standard/orange_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/pink_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/purple_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/rainbow,
+ /obj/item/clothing/under/teshari/undercoat/standard/red_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/white_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/yellow_grey,
+ )
+ worth = 300
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Teshari undercoats crate"
-/datum/supply_pack/randomised/costumes/tesh_coats_b
+/datum/supply_pack/nanotrasen/costume/tesh_coats_b
name = "Teshari undercoats (black)"
- num_contained = 4
- contains = list(
- /obj/item/clothing/under/teshari/undercoat/standard/black,
- /obj/item/clothing/under/teshari/undercoat/standard/black_blue,
- /obj/item/clothing/under/teshari/undercoat/standard/black_brown,
- /obj/item/clothing/under/teshari/undercoat/standard/black_green,
- /obj/item/clothing/under/teshari/undercoat/standard/black_grey,
- /obj/item/clothing/under/teshari/undercoat/standard/black_orange,
- /obj/item/clothing/under/teshari/undercoat/standard/black_pink,
- /obj/item/clothing/under/teshari/undercoat/standard/black_purple,
- /obj/item/clothing/under/teshari/undercoat/standard/black_red,
- /obj/item/clothing/under/teshari/undercoat/standard/black_white,
- /obj/item/clothing/under/teshari/undercoat/standard/black_yellow
- )
- cost = 20
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
+ /obj/item/clothing/under/teshari/undercoat/standard/black,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_blue,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_brown,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_green,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_grey,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_orange,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_pink,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_purple,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_red,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_white,
+ /obj/item/clothing/under/teshari/undercoat/standard/black_yellow,
+ )
+ worth = 350
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Teshari undercoats crate"
-/datum/supply_pack/randomised/costumes/tesh_cloaks
+/datum/supply_pack/nanotrasen/costume/tesh_cloaks
name = "Teshari cloaks"
- num_contained = 4
- contains = list(
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
/obj/item/clothing/suit/storage/teshari/cloak/standard/blue_grey,
/obj/item/clothing/suit/storage/teshari/cloak/standard/brown_grey,
/obj/item/clothing/suit/storage/teshari/cloak/standard/green_grey,
@@ -266,14 +265,14 @@
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey,
/obj/item/clothing/suit/storage/teshari/cloak/standard/yellow_grey
)
- cost = 40
+ worth = 250
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Teshari cloaks crate"
-/datum/supply_pack/randomised/costumes/tesh_cloaks_b
+/datum/supply_pack/nanotrasen/costume/tesh_cloaks_b
name = "Teshari cloaks (black)"
- num_contained = 4
- contains = list(
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
/obj/item/clothing/suit/storage/teshari/cloak,
/obj/item/clothing/suit/storage/teshari/cloak/standard/black_blue,
/obj/item/clothing/suit/storage/teshari/cloak/standard/black_brown,
@@ -286,22 +285,22 @@
/obj/item/clothing/suit/storage/teshari/cloak/standard/black_white,
/obj/item/clothing/suit/storage/teshari/cloak/standard/black_yellow
)
- cost = 40
+ worth = 250
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Teshari cloaks crate"
-/datum/supply_pack/costumes/utility
+/datum/supply_pack/nanotrasen/costume/utility
name = "Utility uniforms"
contains = list(
/obj/item/clothing/under/utility,
/obj/item/clothing/under/utility/blue,
/obj/item/clothing/under/utility/grey
)
- cost = 30
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Utility uniforms crate"
-/datum/supply_pack/costumes/skirts
+/datum/supply_pack/nanotrasen/costume/skirts
name = "Skirts crate"
contains = list(
/obj/item/clothing/under/skirt,
@@ -316,11 +315,11 @@
/obj/item/clothing/under/skirt/outfit/plaid_red,
/obj/item/clothing/under/skirt/outfit/plaid_green
)
- cost = 40
+ worth = 300
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Skirts crate"
-/datum/supply_pack/costumes/varsity
+/datum/supply_pack/nanotrasen/costume/varsity
name = "Varsity jackets"
contains = list(
/obj/item/clothing/suit/varsity,
@@ -330,14 +329,14 @@
/obj/item/clothing/suit/varsity/purple,
/obj/item/clothing/suit/varsity/red
)
- cost = 60
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Varsity jackets crate"
-/datum/supply_pack/randomised/costumes/leathergear
+/datum/supply_pack/nanotrasen/costume/leathergear
name = "Leather gear"
- num_contained = 5
- contains = list(
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
/obj/item/clothing/suit/leathercoat,
/obj/item/clothing/suit/storage/leather_jacket_alt,
/obj/item/clothing/suit/storage/toggle/leather_jacket,
@@ -361,11 +360,11 @@
/obj/item/clothing/head/cowboy_hat,
/obj/item/clothing/head/cowboy_hat/black
)
- cost = 50
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Leather gear crate"
-/datum/supply_pack/costumes/eyewear
+/datum/supply_pack/nanotrasen/costume/eyewear
name = "Eyewear crate"
contains = list(
/obj/item/clothing/glasses/eyepatch,
@@ -380,14 +379,14 @@
/obj/item/clothing/glasses/regular/scanners,
/obj/item/clothing/glasses/threedglasses
)
- cost = 50
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Eyewear crate"
-/datum/supply_pack/randomised/costumes/gloves
+/datum/supply_pack/nanotrasen/costume/gloves
name = "Gloves crate"
- num_contained = 4
- contains = list(
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
/obj/item/clothing/gloves/black,
/obj/item/clothing/gloves/blue,
/obj/item/clothing/gloves/botanic_leather,
@@ -404,14 +403,14 @@
/obj/item/clothing/gloves/red,
/obj/item/clothing/gloves/white
)
- cost = 40
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Gloves crate"
-/datum/supply_pack/randomised/costumes/boots
+/datum/supply_pack/nanotrasen/costume/boots
name = "Boots crate"
- num_contained = 3
- contains = list(
+ lazy_gacha_amount = 3
+ lazy_gacha_contained = list(
/obj/item/clothing/shoes/boots/workboots,
/obj/item/clothing/shoes/boots/cowboy,
/obj/item/clothing/shoes/boots/cowboy/classic,
@@ -421,22 +420,22 @@
/obj/item/clothing/shoes/boots/jungle,
/obj/item/clothing/shoes/boots/winter
)
- cost = 60
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Boots crate"
-/datum/supply_pack/costumes/taurbags
+/datum/supply_pack/nanotrasen/costume/taurbags
name = "Saddlebags crate"
contains = list(
/obj/item/storage/backpack/saddlebag_common,
/obj/item/storage/backpack/saddlebag_common/robust,
/obj/item/storage/backpack/saddlebag_common/vest
)
- cost = 60
+ worth = 400
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "Saddlebags crate"
-/datum/supply_pack/costumes/larp
+/datum/supply_pack/nanotrasen/costume/larp
name = "Knight cosplay crate"
contains = list(
/obj/item/clothing/head/medievalfake/red = 1,
@@ -455,33 +454,33 @@
/obj/item/clothing/suit/medievalfake/paladin = 1,
/obj/item/clothing/shoes/boots/paladin_fake = 1
)
- cost = 80
+ worth = 1000
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "knight cosplay crate"
-/datum/supply_pack/costumes/situlavult_templar
+/datum/supply_pack/nanotrasen/costume/situlavult_templar
name = "Templar cosplay crate"
contains = list(
/obj/item/clothing/head/medievalfake/crusader/templar,
/obj/item/clothing/suit/medievalfake/crusader/cross/templar,
/obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/templar
)
- cost = 15
+ worth = 500
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "templar cosplay crate"
-/datum/supply_pack/costumes/situlavult_hospitaller
+/datum/supply_pack/nanotrasen/costume/situlavult_hospitaller
name = "Hospitaller cosplay crate"
contains = list(
/obj/item/clothing/head/medievalfake/crusader,
/obj/item/clothing/suit/medievalfake/crusader/cross/hospitaller,
/obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/hospitaller
)
- cost = 15
+ worth = 500
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "hospitaller cosplay crate"
-/datum/supply_pack/costumes/situlavult_teutonic
+/datum/supply_pack/nanotrasen/costume/situlavult_teutonic
name = "Teutonic cosplay crate"
contains = list(
/obj/item/clothing/head/medievalfake/crusader/horned,
@@ -491,6 +490,6 @@
/obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade,
/obj/item/clothing/accessory/poncho/roles/cloak/custom/crusade/teutonic
)
- cost = 30
+ worth = 500
container_type = /obj/structure/closet/crate/corporate/nanothreads
container_name = "teutonic cosplay crate"
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/engineering.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/engineering.dm
new file mode 100644
index 000000000000..aa8b937088a1
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/engineering.dm
@@ -0,0 +1,341 @@
+/*
+* Here is where any supply packs
+* related to engineering tasks live.
+*/
+
+
+/datum/supply_pack/nanotrasen/engineering
+ abstract_type = /datum/supply_pack/nanotrasen/engineering
+ container_type = /obj/structure/closet/crate/engineering
+ category = "Engineering"
+
+/datum/supply_pack/nanotrasen/engineering/lightbulbs
+ name = "Replacement lights"
+ contains = list(
+ /obj/item/storage/box/lights/mixed = 3,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/electrical
+ name = "Electrical maintenance crate"
+ contains = list(
+ /obj/item/storage/toolbox/electrical = 2,
+ /obj/item/clothing/gloves/yellow = 2,
+ /obj/item/cell = 2,
+ /obj/item/cell/high = 2,
+ )
+ worth = 300
+ container_type = /obj/structure/closet/crate/engineering/electrical
+
+/datum/supply_pack/nanotrasen/engineering/e_welders
+ name = "Electric welder crate"
+ contains = list(
+ /obj/item/weldingtool/electric = 3,
+ )
+ container_type = /obj/structure/closet/crate/engineering/electrical
+
+/datum/supply_pack/nanotrasen/engineering/mechanical
+ name = "Mechanical maintenance crate"
+ contains = list(
+ /obj/item/storage/belt/utility/full = 3,
+ /obj/item/clothing/suit/storage/hazardvest = 3,
+ /obj/item/clothing/head/welding = 2,
+ /obj/item/clothing/head/hardhat,
+ )
+ worth = 300
+ container_type = /obj/structure/closet/crate/engineering
+ container_name = "Mechanical maintenance crate"
+
+/datum/supply_pack/nanotrasen/engineering/fueltank
+ name = "welding fuel tank"
+ contains = list(
+ /obj/structure/reagent_dispensers/fueltank,
+ )
+ worth = 200
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/engineering/solar
+ name = "Solar Pack crate"
+ contains = list(
+ /obj/item/frame2/solar_panel = 21,
+ /obj/item/circuitboard/solar_control,
+ /obj/item/tracker_electronics,
+ /obj/item/paper/solar,
+ )
+ worth = 500 // solars are cheap nowadays :)
+ container_type = /obj/structure/closet/crate/corporate/focalpoint
+
+/datum/supply_pack/nanotrasen/engineering/shield_generator
+ name = "Shield Generator Construction Kit"
+ contains = list(
+ /obj/item/circuitboard/shield_generator,
+ /obj/item/stock_parts/capacitor,
+ /obj/item/stock_parts/micro_laser,
+ /obj/item/smes_coil,
+ /obj/item/stock_parts/console_screen,
+ /obj/item/stock_parts/subspace/amplifier,
+ )
+ worth = 1000
+
+/datum/supply_pack/nanotrasen/engineering/teg
+ name = "Mark I TEG + Circulators"
+ contains = list(
+ /obj/machinery/power/generator,
+ /obj/machinery/atmospherics/component/binary/circulator = 2,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/large
+
+/datum/supply_pack/nanotrasen/engineering/radsuit
+ contains = list(
+ /obj/item/clothing/suit/radiation = 3,
+ /obj/item/clothing/head/radiation = 3,
+ )
+ name = "Radiation suits package"
+ container_type = /obj/structure/closet/radiation
+ container_name = "Radiation suit locker"
+
+/datum/supply_pack/nanotrasen/engineering/pacman_parts
+ name = "P.A.C.M.A.N. portable generator parts"
+ worth = 350
+ container_type = /obj/structure/closet/crate/secure/engineering
+ contains = list(
+ /obj/item/stock_parts/micro_laser,
+ /obj/item/stock_parts/capacitor,
+ /obj/item/stock_parts/matter_bin,
+ /obj/item/circuitboard/pacman,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/super_pacman_parts
+ name = "Super P.A.C.M.A.N. portable generator parts"
+ container_type = /obj/structure/closet/crate/secure/engineering
+ worth = 650
+ contains = list(
+ /obj/item/stock_parts/micro_laser,
+ /obj/item/stock_parts/capacitor,
+ /obj/item/stock_parts/matter_bin,
+ /obj/item/circuitboard/pacman/super,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/reflector
+ name = "Reflector crate"
+ container_name = "Reflector crate"
+ container_type = /obj/structure/closet/crate/engineering
+ contains = list(
+ /obj/structure/prop/prism/reflector = 1,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/tritium
+ name = "Tritium crate"
+ container_name = "Tritium crate"
+ container_type = /obj/structure/closet/crate/engineering
+ contains = list(
+ /datum/material/hydrogen/tritium = 50,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/thermoregulator
+ name = "Thermal Regulator"
+ contains = list(
+ /obj/machinery/power/thermoregulator,
+ )
+ container_type = /obj/structure/closet/crate/large
+ container_name = "thermal regulator crate"
+
+/datum/supply_pack/nanotrasen/engineering/algae
+ name = "Algae Sheets (10)"
+ contains = list(
+ /datum/material/algae = 10,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "algae sheets crate"
+
+/datum/supply_pack/nanotrasen/engineering/point_defense_cannon_circuit
+ name = "Point Defense Turret Circuit"
+ contains = list(
+ /obj/item/circuitboard/pointdefense = 2,
+ )
+ worth = 450
+ container_type = /obj/structure/closet/crate/corporate/heph
+ container_name = "point defense turret circuit crate"
+
+/datum/supply_pack/nanotrasen/engineering/point_defense_control_circuit
+ name = "Point Defense Controller Circuit"
+ contains = list(
+ /obj/item/circuitboard/pointdefense_control = 1,
+ )
+ worth = 150
+ container_type = /obj/structure/closet/crate/corporate/heph
+ container_name = "point defense mainframe circuit crate"
+
+/datum/supply_pack/nanotrasen/engineering/portable_pump
+ name = "Portable Pump (2x)"
+ contains = list(
+ /obj/machinery/portable_atmospherics/powered/pump = 2,
+ )
+ container_name = "portable pumps crate"
+
+/datum/supply_pack/nanotrasen/engineering/shield_wall_generators
+ name = "Misc - Wall shield generators"
+ contains = list(
+ /obj/machinery/shieldwallgen = 4,
+ )
+ container_type = /obj/structure/closet/crate/secure
+ container_name = "Wall shield generators crate"
+
+//* Engine *//
+//* Access locked because most of these are very dangerous. *//
+
+
+/datum/supply_pack/nanotrasen/engineering/engine
+ abstract_type = /datum/supply_pack/nanotrasen/engineering/engine
+ container_type = /obj/structure/closet/crate/secure/engineering
+ container_access = list(
+ /datum/access/station/engineering/engine,
+ )
+ supply_pack_flags = SUPPLY_PACK_LOCK_PRIVATE_ORDERS
+
+/datum/supply_pack/nanotrasen/engineering/engine/emitter
+ name = "Emitter crate"
+ contains = list(
+ /obj/machinery/power/emitter = 2,
+ )
+ container_name = "Emitter crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/gyrotron
+ name = "gyrotron crate"
+ contains = list(
+ /obj/machinery/power/emitter/gyrotron,
+ /obj/item/circuitboard/gyrotron_control,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/engine/field_generator
+ name = "Field Generator crate"
+ contains = list(
+ /obj/machinery/field_generator = 2,
+ )
+ container_name = "Field Generator crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/singularity_generator
+ name = "Singularity Generator crate"
+ contains = list(
+ /obj/machinery/the_singularitygen,
+ )
+ worth = 4500
+ container_name = "Singularity Generator crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/radiation_collector
+ name = "Collector crate"
+ contains = list(
+ /obj/machinery/power/rad_collector = 3,
+ )
+ container_type = /obj/structure/closet/crate/secure/engineering
+ container_name = "collector crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/particle_accelerator
+ name = "Particle Accelerator crate"
+ 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,
+ /obj/item/paper/particle_info,
+ )
+ worth = 1800
+ container_name = "Particle Accelerator crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/tesla_generator
+ name = "Tesla Generator crate"
+ contains = list(
+ /obj/machinery/the_singularitygen/tesla,
+ )
+ container_type = /obj/structure/closet/crate/secure/engineering
+ container_name = "Tesla Generator crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/fission
+ name = "Fission Starter crate"
+ contains = list(
+ /obj/machinery/power/fission,
+ /obj/item/circuitboard/fission_monitor,
+ /obj/item/storage/briefcase/fission/fuelmixed,
+ /obj/item/storage/briefcase/fission/reflectormixed,
+ /obj/item/storage/briefcase/fission/controlmixed,
+ )
+ worth = 2750
+ container_type = /obj/structure/closet/crate/secure/engineering
+ container_name = "fission core crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/fission/expansion
+ name = "Fission Expansion crate"
+ contains = list(
+ /obj/item/circuitboard/fission_monitor,
+ /obj/item/storage/briefcase/fission/uranium,
+ /obj/item/storage/briefcase/fission/tungstencarbide,
+ /obj/item/storage/briefcase/fission/boron,
+ )
+ worth = 2000
+ container_type = /obj/structure/closet/crate/secure/engineering
+ container_name = "fission expansion crate"
+
+/datum/supply_pack/nanotrasen/engineering/engine/supermatter_core
+ name = "Supermatter Core"
+ contains = list(
+ /obj/machinery/power/supermatter,
+ )
+ worth = 4500 // oh god it's the big supermatter :skull:
+ container_type = /obj/structure/closet/crate/secure/phoron
+ container_name = "Supermatter crate (CAUTION)"
+
+/datum/supply_pack/nanotrasen/engineering/engine/fusion_core
+ name = "R-UST Mk. 8 Tokamak fusion core crate"
+ worth = 1250
+ container_name = "R-UST Mk. 8 Tokamak Fusion Core crate"
+ contains = list(
+ /obj/item/book/manual/rust_engine,
+ /obj/machinery/power/fusion_core,
+ /obj/item/circuitboard/fusion_core_control,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/engine/fusion_fuel_injector
+ name = "R-UST Mk. 8 fuel injector crate"
+ worth = 1250
+ container_name = "R-UST Mk. 8 fuel injector crate"
+ contains = list(
+ /obj/machinery/fusion_fuel_injector,
+ /obj/machinery/fusion_fuel_injector,
+ /obj/item/circuitboard/fusion_fuel_control,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/engine/fusion_fuel_compressor
+ name = "fusion fuel compressor parts crate"
+ contains = list(
+ /obj/item/circuitboard/fusion_fuel_compressor,
+ /obj/item/stock_parts/manipulator/nano = 2,
+ /obj/item/stock_parts/matter_bin/super = 2,
+ /obj/item/stock_parts/console_screen = 1,
+ /obj/item/stack/cable_coil = 5,
+ )
+ worth = 500
+
+//* SMES Coils *//
+/datum/supply_pack/nanotrasen/engineering/smescoil
+ abstract_type = /datum/supply_pack/nanotrasen/engineering/smescoil
+
+/datum/supply_pack/nanotrasen/engineering/smescoil/normal
+ name = "Superconducting Magnetic Coil"
+ contains = list(
+ /obj/item/smes_coil,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/smescoil/super_capacity
+ name = "Superconducting Capacitance Coil"
+ contains = list(
+ /obj/item/smes_coil/super_capacity,
+ )
+
+/datum/supply_pack/nanotrasen/engineering/smescoil/super_io
+ name = "Superconducting Transmission Coil"
+ contains = list(
+ /obj/item/smes_coil/super_io,
+ )
diff --git a/code/modules/cargo/supplypacks/hospitality.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/hospitality.dm
similarity index 68%
rename from code/modules/cargo/supplypacks/hospitality.dm
rename to code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/hospitality.dm
index a2a1aa2413b6..88069452c5f4 100644
--- a/code/modules/cargo/supplypacks/hospitality.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/hospitality.dm
@@ -4,10 +4,11 @@
*/
-/datum/supply_pack/hospitality
- group = "Hospitality"
+/datum/supply_pack/nanotrasen/hospitality
+ abstract_type = /datum/supply_pack/nanotrasen/hospitality
+ category = "Hospitality"
-/datum/supply_pack/hospitality/party
+/datum/supply_pack/nanotrasen/hospitality/party
name = "Party equipment"
contains = list(
/obj/item/storage/box/mixedglasses = 2,
@@ -22,11 +23,11 @@
/obj/item/reagent_containers/food/drinks/bottle/small/ale = 2,
/obj/item/reagent_containers/food/drinks/bottle/small/beer = 4,
)
- cost = 10
+ worth = 350
container_type = /obj/structure/closet/crate/corporate/gilthari
container_name = "Party equipment"
-/datum/supply_pack/hospitality/barsupplies
+/datum/supply_pack/nanotrasen/hospitality/barsupplies
name = "Bar supplies"
contains = list(
/obj/item/storage/box/glasses/cocktail,
@@ -42,51 +43,24 @@
/obj/item/storage/box/glass_extras/straws,
/obj/item/storage/box/glass_extras/sticks
)
- cost = 10
+ worth = 350
container_type = /obj/structure/closet/crate/corporate/gilthari
container_name = "crate of bar supplies"
-/datum/supply_pack/hospitality/condiments
- contains = list(
- /obj/item/reagent_containers/food/condiment/enzyme,
- /obj/item/reagent_containers/food/condiment/ketchup,
- /obj/item/reagent_containers/food/condiment/ketchup,
- /obj/item/reagent_containers/food/condiment/sugar,
- /obj/item/reagent_containers/food/condiment/hotsauce,
- /obj/item/reagent_containers/food/condiment/coldsauce,
- /obj/item/reagent_containers/food/condiment/soysauce,
- /obj/item/reagent_containers/food/condiment/small/saltshaker,
- /obj/item/reagent_containers/food/condiment/small/saltshaker,
- /obj/item/reagent_containers/food/condiment/small/saltshaker,
- /obj/item/reagent_containers/food/condiment/small/peppermill,
- /obj/item/reagent_containers/food/condiment/small/peppermill,
- /obj/item/reagent_containers/food/condiment/small/peppermill,
- /obj/item/reagent_containers/food/condiment/spacespice,
- /obj/item/reagent_containers/food/condiment/spacespice,
- /obj/item/reagent_containers/food/condiment/spacespice,
- )
- name = "Condiment crate"
- cost = 20
- container_type = /obj/structure/closet/crate/corporate/centauri
- container_name = "Condiment crate"
-
-/datum/supply_pack/randomised/hospitality/
- group = "Hospitality"
-
-/datum/supply_pack/randomised/hospitality/pizza
- num_contained = 5
- contains = list(
+/datum/supply_pack/nanotrasen/hospitality/pizza
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
/obj/item/pizzabox/margherita,
/obj/item/pizzabox/mushroom,
/obj/item/pizzabox/meat,
- /obj/item/pizzabox/vegetable
+ /obj/item/pizzabox/vegetable,
)
name = "Surprise pack of five pizzas"
- cost = 50
+ worth = 250
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "Pizza crate"
-/datum/supply_pack/hospitality/gifts
+/datum/supply_pack/nanotrasen/hospitality/gifts
name = "Gift crate"
contains = list(
/obj/item/toy/bouquet = 3,
@@ -96,13 +70,13 @@
/obj/item/paper/card/cat,
/obj/item/paper/card/flower
)
- cost = 10
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "crate of gifts"
-/datum/supply_pack/randomised/hospitality/burgers
- num_contained = 5
- contains = list(
+/datum/supply_pack/nanotrasen/hospitality/burgers
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
/obj/item/reagent_containers/food/snacks/bigbiteburger,
/obj/item/reagent_containers/food/snacks/cheeseburger,
/obj/item/reagent_containers/food/snacks/jellyburger,
@@ -110,13 +84,13 @@
/obj/item/reagent_containers/food/snacks/fries
)
name = "Burger crate"
- cost = 25
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "Burger crate"
-/datum/supply_pack/randomised/hospitality/bakery
- num_contained = 5
- contains = list(
+/datum/supply_pack/nanotrasen/hospitality/bakery
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
/obj/item/reagent_containers/food/snacks/baguette,
/obj/item/reagent_containers/food/snacks/appletart,
/obj/item/reagent_containers/food/snacks/berrymuffin,
@@ -124,6 +98,7 @@
/obj/item/reagent_containers/food/snacks/cherrypie,
/obj/item/reagent_containers/food/snacks/cookie,
/obj/item/reagent_containers/food/snacks/croissant,
+ /obj/item/reagent_containers/food/snacks/donut/normal,
/obj/item/reagent_containers/food/snacks/donut/jelly,
/obj/item/reagent_containers/food/snacks/donut/cherryjelly,
/obj/item/reagent_containers/food/snacks/muffin,
@@ -135,13 +110,13 @@
/obj/item/reagent_containers/food/snacks/waffles
)
name = "Bakery products crate"
- cost = 25
+ worth = 75
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "Bakery products crate"
-/datum/supply_pack/randomised/hospitality/cakes
- num_contained = 2
- contains = list(
+/datum/supply_pack/nanotrasen/hospitality/cakes
+ lazy_gacha_amount = 2
+ lazy_gacha_contained = list(
/obj/item/reagent_containers/food/snacks/sliceable/applecake,
/obj/item/reagent_containers/food/snacks/sliceable/birthdaycake,
/obj/item/reagent_containers/food/snacks/sliceable/carrotcake,
@@ -153,67 +128,66 @@
/obj/item/reagent_containers/food/snacks/sliceable/plaincake
)
name = "Cake crate"
- cost = 100
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "Cake crate"
-/datum/supply_pack/hospitality/donuts
- contains = list(
- /obj/item/storage/box/donut,
- /obj/item/storage/box/donut,
- /obj/item/storage/box/donut,
- )
- name = "Donut resupply crate"
- cost = 25
- container_type = /obj/structure/closet/crate/corporate/centauri
- container_name = "Donut Resupply Crate"
- container_desc = "For all your emergency donut resupply needs, Centauri Provision's got you."
-
-/datum/supply_pack/randomised/hospitality/mexican
- num_contained = 5
- contains = list(
+/datum/supply_pack/nanotrasen/hospitality/mexican
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
/obj/item/reagent_containers/food/snacks/cheeseburrito,
/obj/item/reagent_containers/food/snacks/enchiladas,
/obj/item/reagent_containers/food/snacks/meatburrito,
/obj/item/reagent_containers/food/snacks/taco
)
name = "Mexican takeout crate"
- cost = 50
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "Mexican takeout crate"
-/datum/supply_pack/randomised/hospitality/asian
- num_contained = 5
- contains = list(
+/datum/supply_pack/nanotrasen/hospitality/asian
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
/obj/item/reagent_containers/food/snacks/generalschicken,
/obj/item/reagent_containers/food/snacks/hotandsoursoup
)
name = "Chinese takeout crate"
- cost = 50
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/centauri
container_name = "Chinese takeout crate"
-/datum/supply_pack/hospitality/cookingoil
+/datum/supply_pack/nanotrasen/hospitality/cookingoil
name = "Tallow tank crate"
contains = list(/obj/structure/reagent_dispensers/tallow)
- cost = 10
+ worth = 350
container_type = /obj/structure/largecrate
container_name = "Tallow tank crate"
-/datum/supply_pack/hospitality/vampcarepackage
+/datum/supply_pack/nanotrasen/hospitality/vampcarepackage
name = "Vetalan Care package"
contains = list(/obj/item/reagent_containers/blood/prelabeled/ABPlus = 3,
/obj/item/clothing/under/suit_jacket)
- cost = 50
+ worth = 500
container_type = /obj/structure/closet/coffin/comfy
container_name = "Extra comfortable coffin"
-/datum/supply_pack/hospitality/moghes
+/datum/supply_pack/nanotrasen/hospitality/moghes
name = "Moghes Foodstuffs"
contains = list(
/obj/item/reagent_containers/food/drinks/bottle/redeemersbrew = 2,
/obj/item/reagent_containers/food/snacks/boxed/unajerky = 4
)
- cost = 50 //same cost as the others
+ worth = 150
container_type = /obj/structure/closet/crate/corporate/unathi
container_name = "Moghes Foodstuffs"
+
+/datum/supply_pack/nanotrasen/hospitality/fish
+ name = "Fish supply crate"
+ contains = list(
+ /obj/item/reagent_containers/food/snacks/lobster = 6,
+ /obj/item/reagent_containers/food/snacks/shrimp = 6,
+ /obj/item/reagent_containers/food/snacks/cuttlefish = 8,
+ /obj/item/reagent_containers/food/snacks/sliceable/monkfish = 1
+ )
+ worth = 150
+ container_name = "Fish crate"
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/hydroponics.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/hydroponics.dm
new file mode 100644
index 000000000000..77465a3b3062
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/hydroponics.dm
@@ -0,0 +1,113 @@
+/*
+* Here is where any supply packs
+* related to hydroponics tasks live.
+*/
+
+
+/datum/supply_pack/nanotrasen/hydroponics
+ category = "Hydroponics"
+ container_type = /obj/structure/closet/crate/hydroponics
+
+/datum/supply_pack/nanotrasen/hydroponics/hydroponics
+ name = "Hydroponics Supply Crate"
+ contains = list(
+ /obj/item/reagent_containers/spray/plantbgone = 4,
+ /obj/item/reagent_containers/glass/bottle/ammonia = 2,
+ /obj/item/material/knife/machete/hatchet,
+ /obj/item/material/minihoe,
+ /obj/item/plant_analyzer,
+ /obj/item/clothing/gloves/botanic_leather,
+ /obj/item/clothing/suit/storage/apron,
+ /obj/item/material/minihoe,
+ /obj/item/storage/box/botanydisk,
+ )
+ worth = 350
+ container_type = /obj/structure/closet/crate/hydroponics
+ container_name = "Hydroponics crate"
+
+/datum/supply_pack/nanotrasen/hydroponics/seeds
+ name = "Seeds crate"
+ contains = list(
+ /obj/item/seeds/chiliseed,
+ /obj/item/seeds/berryseed,
+ /obj/item/seeds/cornseed,
+ /obj/item/seeds/eggplantseed,
+ /obj/item/seeds/tomatoseed,
+ /obj/item/seeds/appleseed,
+ /obj/item/seeds/soyaseed,
+ /obj/item/seeds/wheatseed,
+ /obj/item/seeds/carrotseed,
+ /obj/item/seeds/harebell,
+ /obj/item/seeds/lemonseed,
+ /obj/item/seeds/orangeseed,
+ /obj/item/seeds/grassseed,
+ /obj/item/seeds/sunflowerseed,
+ /obj/item/seeds/chantermycelium,
+ /obj/item/seeds/potatoseed,
+ /obj/item/seeds/sugarcaneseed,
+ )
+ worth = 125
+
+/datum/supply_pack/nanotrasen/hydroponics/weedcontrol
+ name = "Weed control crate"
+ contains = list(
+ /obj/item/material/knife/machete/hatchet = 2,
+ /obj/item/reagent_containers/spray/plantbgone = 4,
+ /obj/item/clothing/mask/gas = 2,
+ /obj/item/grenade/chem_grenade/antiweed = 2,
+ /obj/item/material/twohanded/fireaxe/scythe,
+ )
+ worth = 125
+
+/datum/supply_pack/nanotrasen/hydroponics/watertank
+ name = "Water tank crate"
+ contains = list(
+ /obj/structure/reagent_dispensers/watertank,
+ )
+ worth = 75
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/hydroponics/bee_keeper
+ name = "Beekeeping crate"
+ contains = list(
+ /obj/item/clothing/head/beekeeper,
+ /obj/item/clothing/suit/beekeeper,
+ /obj/item/beehive_assembly,
+ /obj/item/bee_smoker,
+ /obj/item/honey_frame = 5,
+ /obj/item/bee_pack,
+ )
+ worth = 300
+ container_name = "Beekeeping crate"
+
+/datum/supply_pack/nanotrasen/hydroponics/tray
+ name = "Empty hydroponics trays"
+ worth = 75
+ container_name = "Hydroponics tray crate"
+ contains = list(
+ /obj/machinery/portable_atmospherics/hydroponics/unanchored = 3,
+ )
+
+/datum/supply_pack/nanotrasen/hydroponics/ironwood
+ name = "Ironwood Saplings"
+ contains = list(
+ /obj/item/seeds/ironwood = 6,
+ )
+ worth = 100
+ container_name = "Ironwood Sapling Samples"
+
+/datum/supply_pack/nanotrasen/hydroponics/creeper
+ name = "Creeper Sanghum"
+ contains = list(
+ /obj/item/seeds/creepermoss = 6,
+ )
+ worth = 100
+ container_name = "Creeper Sanghum Seeds"
+
+/datum/supply_pack/nanotrasen/hydroponics/fungiwheat
+ name = "Fungiwheat"
+ contains = list(
+ /obj/item/seeds/fungiwheat = 6,
+ )
+ worth = 100
+ container_name = "Fungiwheat Spores"
diff --git a/code/modules/cargo/supplypacks/materials.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/materials.dm
similarity index 55%
rename from code/modules/cargo/supplypacks/materials.dm
rename to code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/materials.dm
index 561a0d580ce4..9094a11bb4dc 100644
--- a/code/modules/cargo/supplypacks/materials.dm
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/materials.dm
@@ -1,151 +1,165 @@
-/*
-* Here is where any supply packs
-* related to materials live.
-*/
+/datum/supply_pack/nanotrasen/materials
+ abstract_type = /datum/supply_pack/nanotrasen/materials
+ category = "Materials"
-
-/datum/supply_pack/materials
- group = "Materials"
-
-/datum/supply_pack/materials/metal50
+/datum/supply_pack/nanotrasen/materials/metal50
name = "50 metal sheets"
- contains = list(/obj/fiftyspawner/steel)
- cost = 10
+ contains = list(
+ /datum/material/steel = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Metal sheets crate"
-/datum/supply_pack/materials/glass50
+/datum/supply_pack/nanotrasen/materials/glass50
name = "50 glass sheets"
- contains = list(/obj/fiftyspawner/glass)
- cost = 10
+ contains = list(
+ /datum/material/glass = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Glass sheets crate"
-/datum/supply_pack/materials/wood50
+/datum/supply_pack/nanotrasen/materials/wood50
name = "50 wooden planks"
- contains = list(/obj/fiftyspawner/wood)
- cost = 10
+ contains = list(
+ /datum/material/wood_plank = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Wooden planks crate"
-/datum/supply_pack/materials/hardwood50
+/datum/supply_pack/nanotrasen/materials/hardwood50
name = "50 hardwood planks"
- contains = list(/obj/fiftyspawner/hardwood)
- cost = 50
+ contains = list(
+ /datum/material/wood_plank/hardwood = 50,
+ )
+
container_type = /obj/structure/closet/crate
container_name = "Hardwood planks crate"
-/datum/supply_pack/materials/plastic50
+/datum/supply_pack/nanotrasen/materials/plastic50
name = "50 plastic sheets"
- contains = list(/obj/fiftyspawner/plastic)
- cost = 10
+ contains = list(
+ /datum/material/plastic = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Plastic sheets crate"
-/datum/supply_pack/materials/leather50
+/datum/supply_pack/nanotrasen/materials/leather50
name = "50 leather sheets"
- contains = list(/obj/fiftyspawner/leather)
- cost = 10
+ contains = list(
+ /datum/material/leather = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Leather sheets crate"
-/datum/supply_pack/materials/cloth50
+/datum/supply_pack/nanotrasen/materials/cloth50
name = "50 cloth sheets"
- contains = list(/obj/fiftyspawner/cloth)
- cost = 10
+ contains = list(
+ /datum/material/cloth = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Cloth sheets crate"
-/datum/supply_pack/materials/cardboard_sheets
- contains = list(/obj/fiftyspawner/cardboard)
+/datum/supply_pack/nanotrasen/materials/cardboard_sheets
name = "50 cardboard sheets"
- cost = 10
+ contains = list(
+ /datum/material/cardboard = 50,
+ )
container_type = /obj/structure/closet/crate
container_name = "Cardboard sheets crate"
-/datum/supply_pack/materials/redcarpet
+/datum/supply_pack/nanotrasen/materials/redcarpet
name = "50 red carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Red carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/carpet
- )
-/datum/supply_pack/materials/tealcarpet
+ /obj/fiftyspawner/carpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/tealcarpet
name = "50 teal carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Teal carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/tealcarpet
- )
-/datum/supply_pack/materials/bcarpet
+ /obj/fiftyspawner/tealcarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/bcarpet
name = "50 black carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Black carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/bcarpet
- )
-/datum/supply_pack/materials/blucarpet
+ /obj/fiftyspawner/bcarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/blucarpet
name = "50 blue carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Blue carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/blucarpet
- )
-/datum/supply_pack/materials/turcarpet
+ /obj/fiftyspawner/blucarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/turcarpet
name = "50 tur carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Tur carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/turcarpet
- )
-/datum/supply_pack/materials/sblucarpet
+ /obj/fiftyspawner/turcarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/sblucarpet
name = "50 silver-blue carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Silver-blue carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/sblucarpet
- )
-/datum/supply_pack/materials/gaycarpet
+ /obj/fiftyspawner/sblucarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/gaycarpet
name = "50 clowny carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Clowny carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/gaycarpet
- )
-/datum/supply_pack/materials/purcarpet
+ /obj/fiftyspawner/gaycarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/purcarpet
name = "50 purple carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Purple carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/purcarpet
- )
-/datum/supply_pack/materials/oracarpet
+ /obj/fiftyspawner/purcarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/oracarpet
name = "50 orange carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Orange carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/oracarpet
- )
-/datum/supply_pack/materials/arcadecarpet
+ /obj/fiftyspawner/oracarpet,
+ )
+
+/datum/supply_pack/nanotrasen/materials/arcadecarpet
name = "50 arcade carpet tiles"
container_type = /obj/structure/closet/crate
container_name = "Arcade carpet crate"
- cost = 15
+ worth = 50
contains = list(
- /obj/fiftyspawner/arcadecarpet
- )
+ /obj/fiftyspawner/arcadecarpet,
+ )
+
/datum/supply_pack/misc/linoleum
name = "Linoleum"
container_type = /obj/structure/closet/crate
container_name = "Linoleum crate"
- cost = 15
+ worth = 50
contains = list(/obj/fiftyspawner/linoleum)
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm
new file mode 100644
index 000000000000..5c11413b3a01
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/medical.dm
@@ -0,0 +1,394 @@
+/*
+* Here is where any supply packs
+* related to medical tasks live.
+*/
+
+
+/datum/supply_pack/nanotrasen/medical
+ abstract_type = /datum/supply_pack/nanotrasen/medical
+ category = "Medical"
+
+/datum/supply_pack/nanotrasen/medical/supplies
+ name = "Medical Supplies crate"
+ contains = list(
+ /obj/item/storage/firstaid/regular,
+ /obj/item/storage/firstaid/fire,
+ /obj/item/storage/firstaid/toxin,
+ /obj/item/storage/firstaid/o2,
+ /obj/item/storage/firstaid/adv,
+ /obj/item/reagent_containers/glass/bottle/antitoxin,
+ /obj/item/reagent_containers/glass/bottle/inaprovaline,
+ /obj/item/reagent_containers/glass/bottle/stoxin,
+ /obj/item/storage/box/syringes,
+ /obj/item/storage/box/autoinjectors,
+ )
+ worth = 250
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+ container_name = "Medical crate"
+
+/datum/supply_pack/nanotrasen/medical/bloodpack
+ name = "BloodPack crate"
+ contains = list(
+ /obj/item/storage/box/bloodpacks = 3,
+ )
+ worth = 250
+ container_type = /obj/structure/closet/crate/medical/blood
+ container_name = "BloodPack crate"
+
+/datum/supply_pack/nanotrasen/medical/bodybag
+ name = "Body bag crate"
+ contains = list(
+ /obj/item/storage/box/bodybags = 3,
+ )
+ worth = 125
+ container_type = /obj/structure/closet/crate/medical
+ container_name = "Body bag crate"
+
+/datum/supply_pack/nanotrasen/medical/cryobag
+ name = "Stasis bag crate"
+ contains = list(
+ /obj/item/bodybag/cryobag = 3,
+ )
+ worth = 120
+ container_type = /obj/structure/closet/crate/medical
+ container_name = "Stasis bag crate"
+
+/datum/supply_pack/nanotrasen/medical/surgery
+ name = "Surgery crate"
+ contains = list(
+ /obj/item/surgical/cautery,
+ /obj/item/surgical/surgicaldrill,
+ /obj/item/clothing/mask/breath/medical,
+ /obj/item/tank/anesthetic,
+ /obj/item/surgical/FixOVein,
+ /obj/item/surgical/hemostat,
+ /obj/item/surgical/scalpel,
+ /obj/item/surgical/bonegel,
+ /obj/item/surgical/retractor,
+ /obj/item/surgical/bonesetter,
+ /obj/item/surgical/circular_saw,
+ )
+ worth = 300
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+ container_name = "Surgery crate"
+
+/datum/supply_pack/nanotrasen/medical/deathalarm
+ name = "Death Alarm crate"
+ contains = list(
+ /obj/item/storage/box/cdeathalarm_kit,
+ /obj/item/storage/box/cdeathalarm_kit,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/corporate/veymed
+
+/datum/supply_pack/nanotrasen/medical/clotting
+ name = "Clotting Medicine crate"
+ contains = list(
+ /obj/item/storage/firstaid/clotting,
+ )
+ worth = 750 // "it's too high" go rebalance IB to not be a 5 minute death sentence, don't add chemicals to nullify it then
+ container_type = /obj/structure/closet/crate/corporate/zenghu
+
+/datum/supply_pack/nanotrasen/medical/sterile
+ name = "Sterile equipment crate"
+ contains = list(
+ /obj/item/clothing/under/rank/medical/scrubs/green = 2,
+ /obj/item/clothing/head/surgery/green = 2,
+ /obj/item/storage/box/masks,
+ /obj/item/storage/box/gloves,
+ /obj/item/storage/belt/medical = 3,
+ )
+ worth = 150
+
+/datum/supply_pack/nanotrasen/medical/extragear
+ name = "Medical surplus equipment"
+ contains = list(
+ /obj/item/storage/belt/medical = 3,
+ /obj/item/clothing/glasses/hud/health = 3,
+ /obj/item/radio/headset/headset_med/alt = 3,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3,
+ )
+ worth = 150
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/cmogear
+ name = "Chief medical officer equipment"
+ contains = list(
+ /obj/item/storage/belt/medical,
+ /obj/item/radio/headset/heads/cmo,
+ /obj/item/clothing/under/rank/chief_medical_officer,
+ /obj/item/storage/hypokit/advanced/cmo,
+ /obj/item/clothing/accessory/stethoscope,
+ /obj/item/clothing/glasses/hud/health,
+ /obj/item/clothing/suit/storage/toggle/labcoat/cmo,
+ /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
+ /obj/item/clothing/mask/surgical,
+ /obj/item/clothing/shoes/white,
+ /obj/item/cartridge/cmo,
+ /obj/item/clothing/gloves/sterile/latex,
+ /obj/item/healthanalyzer,
+ /obj/item/flashlight/pen,
+ /obj/item/reagent_containers/syringe,
+ )
+ worth = 1000 // don't lose your shit
+ container_type = /obj/structure/closet/crate/secure/corporate/nanomed
+ container_name = "Chief medical officer equipment"
+ container_access = list(
+ /datum/access/station/medical/cmo,
+ )
+
+/datum/supply_pack/nanotrasen/medical/doctorgear
+ name = "Medical Doctor Equipment"
+ contains = list(
+ /obj/item/storage/belt/medical,
+ /obj/item/radio/headset/headset_med,
+ /obj/item/clothing/under/rank/medical,
+ /obj/item/clothing/accessory/stethoscope,
+ /obj/item/clothing/glasses/hud/health,
+ /obj/item/clothing/suit/storage/toggle/labcoat,
+ /obj/item/clothing/mask/surgical,
+ /obj/item/storage/firstaid/adv,
+ /obj/item/clothing/shoes/white,
+ /obj/item/cartridge/medical,
+ /obj/item/clothing/gloves/sterile/latex,
+ /obj/item/healthanalyzer,
+ /obj/item/flashlight/pen,
+ /obj/item/reagent_containers/syringe,
+ )
+ worth = 450
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/chemistgear
+ name = "Chemist equipment"
+ contains = list(
+ /obj/item/storage/box/beakers,
+ /obj/item/radio/headset/headset_med,
+ /obj/item/storage/box/autoinjectors,
+ /obj/item/clothing/under/rank/chemist,
+ /obj/item/clothing/glasses/science,
+ /obj/item/clothing/suit/storage/toggle/labcoat/chemist,
+ /obj/item/clothing/mask/surgical,
+ /obj/item/clothing/shoes/white,
+ /obj/item/cartridge/chemistry,
+ /obj/item/clothing/gloves/sterile/latex,
+ /obj/item/reagent_containers/dropper,
+ /obj/item/healthanalyzer,
+ /obj/item/storage/box/pillbottles,
+ /obj/item/storage/box/syringes,
+ /obj/item/storage/hypokit,
+ )
+ worth = 450
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/paramedicgear
+ name = "Paramedic equipment"
+ contains = list(
+ /obj/item/storage/belt/medical/emt,
+ /obj/item/radio/headset/headset_med,
+ /obj/item/clothing/under/rank/medical/scrubs/black,
+ /obj/item/clothing/accessory/armband/medblue,
+ /obj/item/clothing/glasses/hud/health,
+ /obj/item/clothing/suit/storage/toggle/labcoat/emt,
+ /obj/item/clothing/under/rank/medical/paramedic,
+ /obj/item/clothing/suit/storage/toggle/fr_jacket,
+ /obj/item/clothing/mask/gas,
+ /obj/item/clothing/under/rank/medical/paramedic,
+ /obj/item/clothing/accessory/stethoscope,
+ /obj/item/storage/firstaid/adv,
+ /obj/item/clothing/shoes/boots/jackboots,
+ /obj/item/clothing/gloves/sterile/latex,
+ /obj/item/healthanalyzer,
+ /obj/item/cartridge/medical,
+ /obj/item/flashlight/pen,
+ /obj/item/clothing/accessory/storage/white_vest,
+ /obj/item/storage/hypokit,
+ )
+ worth = 450
+ container_type = /obj/structure/closet/crate/secure/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/psychiatristgear
+ name = "Psychiatrist equipment"
+ contains = list(
+ /obj/item/clothing/under/rank/psych,
+ /obj/item/radio/headset/headset_med,
+ /obj/item/clothing/under/rank/psych/turtleneck,
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/suit/storage/toggle/labcoat,
+ /obj/item/clothing/shoes/white,
+ /obj/item/clipboard,
+ /obj/item/folder/white,
+ /obj/item/pen,
+ /obj/item/cartridge/medical,
+ )
+ worth = 450
+ container_type = /obj/structure/closet/crate/secure/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/medicalscrubs
+ name = "Medical scrubs"
+ contains = list(
+ /obj/item/clothing/shoes/white = 3,,
+ /obj/item/clothing/under/rank/medical/scrubs = 3,
+ /obj/item/clothing/under/rank/medical/scrubs/green = 3,
+ /obj/item/clothing/under/rank/medical/scrubs/purple = 3,
+ /obj/item/clothing/under/rank/medical/scrubs/black = 3,
+ /obj/item/clothing/head/surgery = 3,
+ /obj/item/clothing/head/surgery/purple = 3,
+ /obj/item/clothing/head/surgery/blue = 3,
+ /obj/item/clothing/head/surgery/green = 3,
+ /obj/item/clothing/head/surgery/black = 3,
+ /obj/item/storage/box/masks,
+ /obj/item/storage/box/gloves,
+ )
+ worth = 500 // item spam
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/autopsy
+ name = "Autopsy equipment"
+ contains = list(
+ /obj/item/folder/white,
+ /obj/item/camera,
+ /obj/item/camera_film = 2,
+ /obj/item/autopsy_scanner,
+ /obj/item/surgical/scalpel,
+ /obj/item/storage/box/masks,
+ /obj/item/storage/box/gloves,
+ /obj/item/pen,
+ )
+ worth = 450
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+ container_name = "Autopsy equipment crate"
+
+/datum/supply_pack/nanotrasen/medical/medicaluniforms
+ name = "Medical uniforms"
+ contains = list(
+ /obj/item/clothing/shoes/white = 3,
+ /obj/item/clothing/under/rank/chief_medical_officer,
+ /obj/item/clothing/under/rank/geneticist,
+ /obj/item/clothing/under/rank/virologist,
+ /obj/item/clothing/under/rank/nursesuit,
+ /obj/item/clothing/under/rank/nurse,
+ /obj/item/clothing/under/rank/orderly,
+ /obj/item/clothing/under/rank/medical = 3,
+ /obj/item/clothing/under/rank/medical/paramedic = 3,
+ /obj/item/clothing/suit/storage/toggle/labcoat = 3,
+ /obj/item/clothing/suit/storage/toggle/labcoat/cmo,
+ /obj/item/clothing/suit/storage/toggle/labcoat/emt,
+ /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
+ /obj/item/clothing/suit/storage/toggle/labcoat/genetics,
+ /obj/item/clothing/suit/storage/toggle/labcoat/virologist,
+ /obj/item/clothing/suit/storage/toggle/labcoat/chemist,
+ /obj/item/storage/box/masks,
+ /obj/item/storage/box/gloves,
+ )
+ worth = 500 // item spam + CMO coat
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+
+/datum/supply_pack/nanotrasen/medical/medicalbiosuits
+ name = "Medical biohazard gear"
+ contains = list(
+ /obj/item/clothing/head/bio_hood = 2,
+ /obj/item/clothing/suit/bio_suit = 2,
+ /obj/item/clothing/head/bio_hood/virology = 1,
+ /obj/item/clothing/suit/bio_suit/virology = 1,
+ /obj/item/clothing/suit/bio_suit/cmo,
+ /obj/item/clothing/head/bio_hood/cmo,
+ /obj/item/clothing/mask/gas = 5,
+ /obj/item/tank/oxygen = 5,
+ /obj/item/storage/box/masks,
+ /obj/item/storage/box/gloves,
+ )
+ worth = 900 // 4 bio suits what the fuck??
+ container_type = /obj/structure/closet/crate/corporate/nanomed
+ container_name = "Medical biohazard equipment"
+
+/datum/supply_pack/nanotrasen/medical/portablefreezers
+ name = "Portable freezers crate"
+ contains = list(
+ /obj/item/storage/box/freezer = 7,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Portable freezers"
+
+/datum/supply_pack/nanotrasen/medical/virus
+ name = "Virus sample crate"
+ contains = list(
+ /obj/item/virusdish/random = 4,
+ )
+ container_type = /obj/structure/closet/crate/secure
+ container_name = "Virus sample crate"
+ container_access = list(
+ /datum/access/station/medical/cmo,
+ )
+
+/datum/supply_pack/nanotrasen/medical/defib
+ name = "Defibrillator crate"
+ contains = list(
+ /obj/item/defib_kit = 2,
+ )
+ container_type = /obj/structure/closet/crate/medical
+ container_name = "Defibrillator crate"
+
+/datum/supply_pack/nanotrasen/medical/distillery
+ name = "Chemical distiller crate"
+ contains = list(
+ /obj/machinery/portable_atmospherics/powered/reagent_distillery = 1,
+ )
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/medical/advdistillery
+ name = "Industrial Chemical distiller crate"
+ contains = list(
+ /obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial = 1,
+ )
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/medical/oxypump
+ name = "Oxygen pump crate"
+ contains = list(
+ /obj/machinery/oxygen_pump/mobile = 1,
+ )
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/medical/anestheticpump
+ name = "Anesthetic pump crate"
+ contains = list(
+ /obj/machinery/oxygen_pump/mobile/anesthetic = 1,
+ )
+ container_type = /obj/structure/largecrate
+
+/datum/supply_pack/nanotrasen/medical/stablepump
+ name = "Portable stabilizer crate"
+ contains = list(
+ /obj/machinery/oxygen_pump/mobile/stabilizer = 1,
+ )
+ container_type = /obj/structure/largecrate
+
+
+/datum/supply_pack/nanotrasen/medical/compactdefib
+ name = "Compact Defibrillator crate"
+ contains = list(
+ /obj/item/defib_kit/compact = 1,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/nanomed
+ container_name = "Compact Defibrillator crate"
+
+/datum/supply_pack/nanotrasen/medical/medigun
+ name = "Cell-Loaded Medigun crate"
+ contains = list(
+ /obj/item/gun/ballistic/cell_loaded/medical = 1,
+ /obj/item/ammo_magazine/cell_mag/medical = 1,
+ )
+ worth = 1500
+ container_type = /obj/structure/closet/crate/secure/corporate/veymed
+ container_name = "Cell-Loaded Medigun crate"
+
+/datum/supply_pack/nanotrasen/medical/medigun_cells
+ name = "Cell-Loaded Medigun Cell Pack crate"
+ contains = list(
+ /obj/item/ammo_casing/microbattery/medical/brute = 3,
+ /obj/item/ammo_casing/microbattery/medical/burn = 3,
+ /obj/item/ammo_casing/microbattery/medical/stabilize = 3,
+ )
+ worth = 1000
+ container_type = /obj/structure/closet/crate/secure/corporate/veymed
+ container_name = "Cell-Loaded Medigun Cell Pack crate"
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/miscellaneous.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/miscellaneous.dm
new file mode 100644
index 000000000000..6d124e01c2bc
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/miscellaneous.dm
@@ -0,0 +1,301 @@
+/*
+* Here is where any supply packs
+* that don't belong elsewhere live.
+*/
+
+/datum/supply_pack/nanotrasen/misc
+ category = "Miscellaneous"
+
+/datum/supply_pack/nanotrasen/misc/card_packs
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/pack/cardemon,
+ /obj/item/pack/spaceball,
+ /obj/item/deck/holder
+ )
+ name = "Trading Card Crate"
+ worth = 350
+ container_type = /obj/structure/closet/crate/corporate/allico
+ container_name = "cards crate"
+
+/datum/supply_pack/nanotrasen/misc/dnd
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
+ /obj/item/toy/character/alien,
+ /obj/item/toy/character/warrior,
+ /obj/item/toy/character/cleric,
+ /obj/item/toy/character/thief,
+ /obj/item/toy/character/wizard,
+ /obj/item/toy/character/voidone,
+ /obj/item/toy/character/lich
+ )
+ name = "Miniatures Crate"
+ worth = 350
+ container_type = /obj/structure/closet/crate/corporate/allico
+ container_name = "Miniature Crate"
+
+/datum/supply_pack/nanotrasen/misc/plushies
+ name = "Plushies Crate"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/toy/plushie/nymph,
+ /obj/item/toy/plushie/mouse,
+ /obj/item/toy/plushie/kitten,
+ /obj/item/toy/plushie/lizard,
+ /obj/item/toy/plushie/spider,
+ /obj/item/toy/plushie/farwa,
+ /obj/item/toy/plushie/corgi,
+ /obj/item/toy/plushie/girly_corgi,
+ /obj/item/toy/plushie/robo_corgi,
+ /obj/item/toy/plushie/octopus,
+ /obj/item/toy/plushie/face_hugger,
+ /obj/item/toy/plushie/red_fox,
+ /obj/item/toy/plushie/black_fox,
+ /obj/item/toy/plushie/marble_fox,
+ /obj/item/toy/plushie/blue_fox,
+ /obj/item/toy/plushie/coffee_fox,
+ /obj/item/toy/plushie/pink_fox,
+ /obj/item/toy/plushie/purple_fox,
+ /obj/item/toy/plushie/crimson_fox,
+ /obj/item/toy/plushie/deer,
+ /obj/item/toy/plushie/black_cat,
+ /obj/item/toy/plushie/grey_cat,
+ /obj/item/toy/plushie/white_cat,
+ /obj/item/toy/plushie/orange_cat,
+ /obj/item/toy/plushie/siamese_cat,
+ /obj/item/toy/plushie/tabby_cat,
+ /obj/item/toy/plushie/tuxedo_cat,
+ /obj/item/toy/plushie/squid/green,
+ /obj/item/toy/plushie/squid/mint,
+ /obj/item/toy/plushie/squid/blue,
+ /obj/item/toy/plushie/squid/orange,
+ /obj/item/toy/plushie/squid/yellow,
+ /obj/item/toy/plushie/squid/pink,
+ )
+ worth = 350
+ container_type = /obj/structure/closet/crate/corporate/allico
+ container_name = "Plushies Crate"
+
+/datum/supply_pack/nanotrasen/misc/eftpos
+ name = "EFTPOS scanner"
+ contains = list(
+ /obj/item/eftpos,
+ )
+ worth = 150
+
+/datum/supply_pack/nanotrasen/misc/chaplaingear
+ name = "Chaplain equipment"
+ contains = list(
+ /obj/item/clothing/under/rank/chaplain,
+ /obj/item/clothing/shoes/black,
+ /obj/item/clothing/suit/nun,
+ /obj/item/clothing/head/nun_hood,
+ /obj/item/clothing/suit/storage/hooded/chaplain_hoodie,
+ /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout,
+ /obj/item/clothing/suit/holidaypriest,
+ /obj/item/clothing/under/wedding/bride_white,
+ /obj/item/storage/backpack/cultpack,
+ /obj/item/storage/fancy/candle_box = 3,
+ /obj/item/reagent_containers/food/drinks/bottle/holywater,
+ )
+ worth = 850 // lmao larper tax
+
+/datum/supply_pack/nanotrasen/misc/hoverpod
+ name = "Hoverpod Shipment"
+ container_type = /obj/structure/largecrate/hoverpod
+ worth = 1000
+
+/datum/supply_pack/nanotrasen/misc/webbing
+ name = "Webbing crate"
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
+ /obj/item/clothing/accessory/storage/black_vest,
+ /obj/item/clothing/accessory/storage/brown_vest,
+ /obj/item/clothing/accessory/storage/white_vest,
+ /obj/item/clothing/accessory/storage/black_drop_pouches,
+ /obj/item/clothing/accessory/storage/brown_drop_pouches,
+ /obj/item/clothing/accessory/storage/white_drop_pouches,
+ /obj/item/clothing/accessory/storage/webbing
+ )
+ worth = 150
+ container_type = /obj/structure/closet/crate
+ container_name = "Webbing crate"
+
+/datum/supply_pack/nanotrasen/misc/holoplant
+ name = "Holoplant Pot"
+ contains = list(
+ /obj/machinery/holoplant/shipped,
+ )
+ worth = 50
+
+/datum/supply_pack/nanotrasen/misc/glucose_hypos
+ name = "Glucose Hypoinjectors"
+ contains = list(
+ /obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5,
+ )
+ worth = 100
+
+/datum/supply_pack/nanotrasen/misc/mre_rations
+ name = "Emergency - MREs"
+ contains = list(
+ /obj/item/storage/single_use/mre,
+ /obj/item/storage/single_use/mre/menu2,
+ /obj/item/storage/single_use/mre/menu3,
+ /obj/item/storage/single_use/mre/menu4,
+ /obj/item/storage/single_use/mre/menu5,
+ /obj/item/storage/single_use/mre/menu6,
+ /obj/item/storage/single_use/mre/menu7,
+ /obj/item/storage/single_use/mre/menu8,
+ /obj/item/storage/single_use/mre/menu9,
+ /obj/item/storage/single_use/mre/menu10,
+ )
+ worth = 300
+ container_type = /obj/structure/closet/crate/corporate/centauri
+
+/datum/supply_pack/nanotrasen/misc/paste_rations
+ name = "Emergency - Paste"
+ contains = list(
+ /obj/item/storage/single_use/mre/menu11 = 2,
+ )
+ worth = 75
+ container_type = /obj/structure/closet/crate/corporate/centauri
+
+/datum/supply_pack/nanotrasen/misc/medical_rations
+ name = "Emergency - VitaPaste"
+ contains = list(
+ /obj/item/storage/single_use/mre/menu13 = 2,
+ )
+ worth = 100
+ container_type = /obj/structure/closet/crate/corporate/centauri
+
+/datum/supply_pack/nanotrasen/misc/beltminer
+ name = "Belt-miner gear crate"
+ contains = list(
+ /obj/item/gun/energy/particle = 2,
+ /obj/item/cell/device/weapon = 2,
+ /obj/item/storage/firstaid/regular = 1,
+ /obj/item/gps = 2,
+ /obj/item/storage/box/traumainjectors = 1,
+ )
+ worth = 500
+ container_type = /obj/structure/closet/crate/secure/corporate/grayson
+
+/datum/supply_pack/nanotrasen/misc/eva_rig
+ name = "eva hardsuit (empty)"
+ contains = list(
+ /obj/item/hardsuit/eva = 1,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/gear
+
+/datum/supply_pack/nanotrasen/misc/mining_rig
+ name = "industrial hardsuit (empty)"
+ contains = list(
+ /obj/item/hardsuit/industrial = 1,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/corporate/grayson
+
+/datum/supply_pack/nanotrasen/misc/medical_rig
+ name = "medical hardsuit (empty)"
+ contains = list(
+ /obj/item/hardsuit/medical = 1,
+ )
+ worth = 750
+
+/datum/supply_pack/nanotrasen/misc/phoronoid
+ name = "Spare Phoronoid containment suits"
+ contains = list(
+ /obj/item/clothing/suit/space/plasman = 3,
+ /obj/item/clothing/head/helmet/space/plasman = 3,
+ /obj/item/clothing/mask/breath = 3,
+ /obj/item/tank/vox = 3,
+ )
+ worth = 500
+
+/datum/supply_pack/nanotrasen/misc/security_rig
+ name = "hazard hardsuit (empty)"
+ contains = list(
+ /obj/item/hardsuit/hazard = 1,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/gear
+ container_access = list(
+ /datum/access/station/security/equipment,
+ )
+
+/datum/supply_pack/nanotrasen/misc/science_rig
+ name = "ami hardsuit (empty)"
+ contains = list(
+ /obj/item/hardsuit/hazmat = 1,
+ )
+ worth = 750
+
+/datum/supply_pack/nanotrasen/misc/ce_rig
+ name = "advanced hardsuit (empty)"
+ contains = list(
+ /obj/item/hardsuit/ce = 1,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/corporate/aether
+
+/datum/supply_pack/nanotrasen/misc/colored_lights
+ name = "Colored Lights Bundle"
+ contains = list(
+ /obj/item/storage/box/lights/bulbs_colored = 2,
+ /obj/item/storage/box/lights/tubes_colored = 2,
+ /obj/item/storage/box/lights/mixed_colored = 1,
+ )
+
+/datum/supply_pack/nanotrasen/misc/neon_lights
+ name = "Neon Lights Bundle"
+ contains = list(
+ /obj/item/storage/box/lights/bulbs_neon = 2,
+ /obj/item/storage/box/lights/tubes_neon = 2,
+ /obj/item/storage/box/lights/mixed_neon = 1,
+ )
+
+//Culture Crates
+/datum/supply_pack/nanotrasen/misc/culture_apidean
+ name = "Apidean Culture Crate"
+ contains = list(
+ /obj/fiftyspawner/wax = 2,
+ /obj/item/healthanalyzer/apidean = 1,
+ /obj/item/atmos_analyzer/apidean = 1,
+ /obj/item/reagent_scanner/apidean = 1,
+ /mob/living/bot/medibot/apidean = 1,
+ /obj/item/reagent_containers/food/drinks/bottle/ambrosia_mead = 2,
+ /obj/item/reagent_containers/food/drinks/bottle/royaljelly = 1,
+ )
+ worth = 1000
+
+/datum/supply_pack/nanotrasen/misc/culture_tyrmalin
+ name = "Tyrmalin Culture Crate"
+ contains = list(
+ /obj/item/tool/wrench/goblin = 2,
+ /obj/item/weldingtool/welder_spear = 2,
+ /obj/item/clothing/accessory/skullcodpiece = 2,
+ /obj/item/reagent_containers/food/snacks/cavemoss_can = 2,
+ /obj/item/reagent_containers/food/snacks/diggerstew_can = 2,
+ /obj/item/reagent_containers/food/snacks/canned_bettles = 2,
+ /obj/item/reagent_containers/food/snacks/rust_can = 2,
+ /obj/item/reagent_containers/food/drinks/bottle/phobos = 1,
+ /obj/item/reagent_containers/food/drinks/bottle/greenstuff = 1,
+ )
+ worth = 1000
+
+/datum/supply_pack/nanotrasen/misc/culture_alraune
+ name = "Alraune Culture Crate"
+ contains = list(
+ /obj/item/reagent_containers/food/snacks/wrapped/alraune_bar = 3,
+ /obj/item/reagent_containers/food/snacks/boxed/bugsnacks = 3,
+ /obj/item/reagent_containers/food/drinks/cans/alraune = 3,
+ )
+ worth = 1000
+
+/datum/supply_pack/nanotrasen/misc/music_players
+ name = "Portable Music Players"
+ contains = list(
+ /obj/item/device/walkpod = 3,
+ )
+ worth = 75
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm
new file mode 100644
index 000000000000..75134297cde2
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/munitions.dm
@@ -0,0 +1,248 @@
+/*
+* Here is where any supply packs
+* related to weapons live.
+*/
+
+/datum/supply_pack/nanotrasen/munitions
+ abstract_type = /datum/supply_pack/nanotrasen/munitions
+ category = "Munitions"
+ supply_pack_flags = SUPPLY_PACK_LOCK_PRIVATE_ORDERS | SUPPLY_PACK_RESTRICT_PRIVATE_ORDERS
+ container_type = /obj/structure/closet/crate/secure/weapon
+ container_access = list(
+ /datum/access/station/security/armory,
+ )
+
+/datum/supply_pack/nanotrasen/munitions/egunpistol
+ name = "Weapons - Energy sidearms"
+ contains = list(
+ /obj/item/gun/energy/gun = 2,
+ )
+ container_name = "Energy sidearms crate"
+
+/datum/supply_pack/nanotrasen/munitions/flareguns
+ name = "Weapons - Flare guns"
+ contains = list(
+ /obj/item/gun/ballistic/shotgun/flare = 2,
+ /obj/item/storage/box/flashshells = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/gear
+ container_name = "Flare gun crate"
+
+/datum/supply_pack/nanotrasen/munitions/eweapons
+ name = "Weapons - Experimental weapons crate"
+ contains = list(
+ /obj/item/gun/energy/xray = 2,
+ /obj/item/shield/energy = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Experimental weapons crate"
+
+/datum/supply_pack/nanotrasen/munitions/energyweapons
+ name = "Weapons - Laser rifle crate"
+ contains = list(
+ /obj/item/gun/energy/laser = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+ container_name = "Energy weapons crate"
+
+/datum/supply_pack/nanotrasen/munitions/shotgun
+ name = "Weapons - Shotgun crate"
+ contains = list(
+ /obj/item/storage/box/shotgunammo,
+ /obj/item/storage/box/shotgunshells,
+ /obj/item/gun/ballistic/shotgun/pump/combat = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/ward
+ container_name = "Shotgun crate"
+
+/datum/supply_pack/nanotrasen/munitions/erifle
+ name = "Weapons - Energy marksman"
+ contains = list(
+ /obj/item/gun/energy/sniperrifle = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+ container_name = "Energy marksman crate"
+
+/datum/supply_pack/nanotrasen/munitions/burstlaser
+ name = "Weapons - Burst laser"
+ contains = list(
+ /obj/item/gun/energy/gun/burst = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/weapon
+ container_name = "Burst laser crate"
+
+/datum/supply_pack/nanotrasen/munitions/ionweapons
+ name = "Weapons - Electromagnetic Rifles"
+ contains = list(
+ /obj/item/gun/energy/ionrifle = 2,
+ /obj/item/storage/box/empslite,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Electromagnetic weapons crate"
+
+/datum/supply_pack/nanotrasen/munitions/ionpistols
+ name = "Weapons - Electromagnetic pistols"
+ contains = list(
+ /obj/item/gun/energy/ionrifle/pistol = 2,
+ /obj/item/storage/box/empslite,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Electromagnetic weapons crate"
+
+/datum/supply_pack/nanotrasen/munitions/bsmg
+ name = "Weapons - Ballistic SMGs"
+ contains = list(
+ /obj/item/gun/ballistic/automatic/wt550 = 2,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/ward
+ container_name = "Ballistic weapon crate"
+
+/datum/supply_pack/nanotrasen/munitions/brifle
+ name = "Weapons - Ballistic Rifles"
+ contains = list(
+ /obj/item/gun/ballistic/automatic/z8 = 2,
+ )
+ container_name = "Ballistic weapon crate"
+
+/datum/supply_pack/nanotrasen/munitions/bolt_rifles_competitive
+ name = "Weapons - Competitive shooting rifles"
+ contains = list(
+ /obj/item/assembly/timer,
+ /obj/item/gun/ballistic/shotgun/pump/rifle/practice = 2,
+ /obj/item/ammo_magazine/clip/c762/practice = 4,
+ /obj/item/target = 2,
+ /obj/item/target/alien = 2,
+ /obj/item/target/syndicate = 2,
+ )
+ worth = 500
+ container_name = "Ballistic Weapons crate"
+
+/datum/supply_pack/nanotrasen/munitions/mrifle
+ name = "Weapons - Magnetic Rifles"
+ contains = list(
+ /obj/item/gun/magnetic/railgun/heater = 2,
+ )
+ container_name = "Magnetic weapon crate"
+
+/datum/supply_pack/nanotrasen/munitions/mpistol
+ name = "Weapons - Magnetic Pistols"
+ contains = list(
+ /obj/item/gun/magnetic/railgun/heater/pistol = 2,
+ )
+ container_name = "Magnetic weapon crate"
+
+/datum/supply_pack/nanotrasen/munitions/mcarbine
+ name = "Weapons - Magnetic Carbines"
+ contains = list(
+ /obj/item/gun/magnetic/railgun/flechette/sif = 2,
+ )
+ container_name = "Magnetic weapon crate"
+
+/datum/supply_pack/nanotrasen/munitions/shotgunammo
+ name = "Ammunition - Shotgun shells"
+ contains = list(
+ /obj/item/storage/box/shotgunammo = 2,
+ /obj/item/storage/box/shotgunshells = 2,
+ )
+ container_name = "Ballistic ammunition crate"
+
+/datum/supply_pack/nanotrasen/munitions/beanbagammo
+ name = "Ammunition - Beanbag shells"
+ contains = list(
+ /obj/item/storage/box/beanbags = 3,
+ )
+ container_name = "Ballistic ammunition crate"
+
+/datum/supply_pack/nanotrasen/munitions/bsmgammo
+ name = "Ammunition - 9mm top mounted lethal"
+ contains = list(
+ /obj/item/ammo_magazine/m9mmt = 6,
+ )
+ worth = 250
+ container_name = "Ballistic ammunition crate"
+
+/datum/supply_pack/nanotrasen/munitions/bsmgammorubber
+ name = "Ammunition - 9mm top mounted rubber"
+ contains = list(
+ /obj/item/ammo_magazine/m9mmt/rubber = 6,
+ )
+ worth = 250
+ container_type = /obj/structure/closet/crate/secure
+ container_name = "Ballistic ammunition crate"
+
+/datum/supply_pack/nanotrasen/munitions/brifleammo
+ name = "Ammunition - 7.62mm lethal"
+ contains = list(
+ /obj/item/ammo_magazine/m762 = 6,
+ )
+ worth = 250
+ container_type = /obj/structure/closet/crate/secure
+ container_name = "Ballistic ammunition crate"
+
+/datum/supply_pack/nanotrasen/munitions/pcellammo
+ name = "Ammunition - Power cell"
+ contains = list(
+ /obj/item/cell/device/weapon = 3,
+ )
+ container_access = list()
+
+/datum/supply_pack/nanotrasen/munitions/firingpins
+ name = "Weapons - Standard firing pins"
+ contains = list(
+ /obj/item/storage/box/firingpins = 3,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Firing pin crate"
+
+/datum/supply_pack/nanotrasen/munitions/expeditionguns
+ name = "frontier phasers (station-locked)"
+ contains = list(
+ /obj/item/gun/energy/frontier/locked = 2,
+ /obj/item/gun/energy/frontier/locked/holdout = 1,
+ )
+ worth = 1000 // powergamer guns lmao
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+
+//Culture Update
+/datum/supply_pack/nanotrasen/munitions/weaponry_apidean
+ name = "Apidean Weaponry Crate"
+ contains = list(
+ /obj/item/gun/ballistic/apinae_stinger = 1,
+ /obj/item/gun/ballistic/apinae_pistol = 2,
+ /obj/item/grenade/spawnergrenade/manhacks/apidean = 3,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/gear
+ container_name = "Apidean Weaponry crate"
+
+/datum/supply_pack/nanotrasen/munitions/weaponry_tyrmalin
+ name = "Tyrmalin Weaponry Crate"
+ contains = list(
+ /obj/item/gun/energy/ermitter = 1,
+ /obj/item/gun/ballistic/rocket/tyrmalin = 1,
+ /obj/item/ammo_casing/rocket/weak = 2,
+ /obj/item/gun/ballistic/pirate/junker_pistol = 2,
+ /obj/item/gun/energy/ionrifle/pistol/tyrmalin = 1,
+ )
+ worth = 1500
+ container_type = /obj/structure/closet/crate/secure/gear
+ container_name = "Tyrmalin Weaponry crate"
+
+/datum/supply_pack/nanotrasen/munitions/battlerifle
+ name = "Battle Rifle Pack"
+ contains = list(
+ /obj/item/gun/ballistic/automatic/battlerifle = 2,
+ /obj/item/ammo_magazine/m95 = 4,
+ )
+ worth = 1500
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+
+/datum/supply_pack/nanotrasen/munitions/quadshot
+ name = "Quad Shotgun Pack"
+ contains = list(
+ /obj/item/gun/ballistic/shotgun/doublebarrel/quad = 2,
+ /obj/item/storage/box/shotgunshells = 2,
+ /obj/item/storage/belt/security/tactical/bandolier = 2,
+ )
+ worth = 1250
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/reagents.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/reagents.dm
new file mode 100644
index 000000000000..1823436a728b
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/reagents.dm
@@ -0,0 +1,48 @@
+/datum/supply_pack/nanotrasen/reagents
+ category = "Reagents"
+
+/datum/supply_pack/nanotrasen/reagents/chemical_dispenser
+ name = "Reagent Synthesizer"
+ contains = list(
+ /obj/machinery/chemical_dispenser/full,
+ )
+ container_type = /obj/structure/largecrate
+ container_name = "reagent dispenser crate"
+
+/datum/supply_pack/nanotrasen/reagents/beer_dispenser
+ name = "Booze Synthesizer"
+ contains = list(
+ /obj/machinery/chemical_dispenser/catering/bar_alc/unanchored,
+ )
+ container_type = /obj/structure/largecrate
+ container_name = "booze dispenser crate"
+
+/datum/supply_pack/nanotrasen/reagents/soda_dispenser
+ name = "Soda Synthesizer"
+ contains = list(
+ /obj/machinery/chemical_dispenser/catering/bar_soft/unanchored,
+ )
+ container_type = /obj/structure/largecrate
+ container_name = "soda dispenser crate"
+
+/datum/supply_pack/nanotrasen/reagents/coffee_dispenser
+ name = "Coffee Synthesizer"
+ contains = list(
+ /obj/machinery/chemical_dispenser/catering/bar_coffee/unanchored,
+ )
+ container_type = /obj/structure/largecrate
+ container_name = "coffee dispenser crate"
+
+/datum/supply_pack/nanotrasen/reagents/reagent_synth_chemistry
+ name = "Reagent Synthesis Module - Chemistry"
+ contains = list(
+ /obj/item/reagent_synth/chemistry,
+ )
+
+/datum/supply_pack/nanotrasen/reagents/dispenser_cartridges
+ name = "Large Chemical Dispenser Cartridges"
+ contains = list(
+ /obj/item/reagent_containers/cartridge/dispenser/large = 10,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "dispenser cartridge crate"
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm
new file mode 100644
index 000000000000..51120d081856
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/recreation.dm
@@ -0,0 +1,202 @@
+/*
+* Here is where any supply packs
+* related to recreation live.
+*/
+
+
+/datum/supply_pack/nanotrasen/recreation
+ abstract_type = /datum/supply_pack/nanotrasen/recreation
+ category = "Recreation"
+
+/datum/supply_pack/nanotrasen/recreation/foam_weapons
+ name = "Foam Weapon Crate"
+ contains = list(
+ /obj/item/material/sword/foam = 2,
+ /obj/item/material/twohanded/baseballbat/foam = 2,
+ /obj/item/material/twohanded/spear/foam = 2,
+ /obj/item/material/twohanded/fireaxe/foam = 2,
+ )
+ worth = 300
+
+/datum/supply_pack/nanotrasen/recreation/lasertag
+ name = "Lasertag equipment"
+ contains = list(
+ /obj/item/gun/energy/lasertag/red,
+ /obj/item/clothing/suit/redtag,
+ /obj/item/gun/energy/lasertag/blue,
+ /obj/item/clothing/suit/bluetag,
+ )
+ container_type = /obj/structure/closet
+ container_name = "Lasertag Closet"
+ worth = 100
+
+/datum/supply_pack/nanotrasen/recreation/artscrafts
+ name = "Arts and Crafts supplies"
+ contains = list(
+ /obj/item/storage/fancy/crayons,
+ /obj/item/storage/fancy/markers,
+ /obj/item/camera,
+ /obj/item/camera_film = 2,
+ /obj/item/storage/photo_album,
+ /obj/item/packageWrap,
+ /obj/item/reagent_containers/glass/paint/red,
+ /obj/item/reagent_containers/glass/paint/green,
+ /obj/item/reagent_containers/glass/paint/blue,
+ /obj/item/reagent_containers/glass/paint/yellow,
+ /obj/item/reagent_containers/glass/paint/purple,
+ /obj/item/reagent_containers/glass/paint/black,
+ /obj/item/reagent_containers/glass/paint/white,
+ /obj/item/contraband/poster,
+ /obj/item/wrapping_paper = 3,
+ )
+ worth = 350
+
+/datum/supply_pack/nanotrasen/recreation/painters
+ name = "Station Painting Supplies"
+ contains = list(
+ /obj/item/pipe_painter = 2,
+ /obj/item/floor_painter = 2,
+ )
+ worth = 500 // this is pretty much just clowning supplies
+
+/datum/supply_pack/nanotrasen/recreation/cheap_bait
+ name = "Cheap Fishing Bait"
+ container_name = "cheap bait crate"
+ container_type = /obj/structure/closet/crate/freezer
+ contains = list(
+ /obj/item/storage/box/wormcan/sickly = 5,
+ )
+ worth = 100
+
+/datum/supply_pack/nanotrasen/recreation/less_cheap_bait
+ name = "Deluxe Fishing Bait"
+ container_type = /obj/structure/closet/crate/freezer
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/storage/box/wormcan,
+ /obj/item/storage/box/wormcan/deluxe,
+ )
+ worth = 400
+
+// todo: this is dumb because you're just spawning turrets in, why the fuck?
+// /datum/supply_pack/nanotrasen/recreation/ltagturrets
+// name = "Laser Tag Turrets"
+// cost = 40
+// container_name = "laser tag turret crate"
+// container_type = /obj/structure/closet/crate
+// contains = list(
+// /obj/machinery/porta_turret/lasertag/blue,
+// /obj/machinery/porta_turret/lasertag/red
+// )
+
+/datum/supply_pack/nanotrasen/recreation/jukebox
+ name = "Jukebox crate"
+ contains = list (
+ /obj/machinery/media/jukebox = 1,
+ )
+ worth = 500
+
+/datum/supply_pack/nanotrasen/recreation/restraints
+ name = "Recreational Restraints"
+ contains = list(
+ /obj/item/clothing/mask/muzzle,
+ /obj/item/clothing/glasses/sunglasses/blindfold,
+ /obj/item/handcuffs/fuzzy,
+ /obj/item/duct_tape_roll,
+ /obj/item/stack/cable_coil/random,
+ /obj/item/clothing/accessory/collar/shock,
+ /obj/item/clothing/suit/straight_jacket,
+ /obj/item/handcuffs/legcuffs/fuzzy,
+ /obj/item/melee/fluff/holochain/mass,
+ /obj/item/fluff/riding_crop,
+ /obj/item/clothing/under/fluff/latexmaid,
+ )
+ worth = 500
+ legacy_contraband = TRUE
+
+/datum/supply_pack/nanotrasen/recreation/wolfgirl_cosplay_crate
+ name = "Wolfgirl Cosplay Crate"
+ contains = list(
+ /obj/item/clothing/head/fluff/wolfgirl = 1,
+ /obj/item/clothing/shoes/fluff/wolfgirl = 1,
+ /obj/item/clothing/under/fluff/wolfgirl = 1,
+ /obj/item/melee/fluffstuff/wolfgirlsword = 1,
+ /obj/item/shield/fluff/wolfgirlshield = 1,
+ )
+ worth = 750
+
+/datum/supply_pack/nanotrasen/recreation/figures
+ name = "Action figures crate"
+ contains = list(
+ /obj/random/action_figure/supplypack = 5,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/corporate/allico
+
+/datum/supply_pack/nanotrasen/recreation/characters
+ name = "Tabletop miniatures"
+ contains = list(
+ /obj/item/storage/box/characters,
+ )
+ worth = 750
+ container_name = "Tabletop miniatures crate"
+
+/datum/supply_pack/nanotrasen/recreation/plushies
+ name = "Plushies crate"
+ contains = list(
+ /obj/random/plushie = 3,
+ )
+ worth = 300
+ container_type = /obj/structure/closet/crate/corporate/allico
+
+/datum/supply_pack/nanotrasen/recreation/collars
+ name = "Collar bundle"
+ contains = list(
+ /obj/item/clothing/accessory/collar/shock = 1,
+ /obj/item/clothing/accessory/collar/spike = 1,
+ /obj/item/clothing/accessory/collar/silver = 1,
+ /obj/item/clothing/accessory/collar/gold = 1,
+ /obj/item/clothing/accessory/collar/bell = 1,
+ /obj/item/clothing/accessory/collar/pink = 1,
+ /obj/item/clothing/accessory/collar/holo = 1,
+ )
+ worth = 500
+
+//DONKsoft
+/datum/supply_pack/nanotrasen/recreation/donksoft
+ name = "DONKsoft Skirmish Bundle"
+ contains = list(
+ /obj/item/gunbox/donksoft = 2,
+ /obj/item/gunbox/donksoft/shotgun = 2,
+ /obj/item/gunbox/donksoft/smg = 2,
+ /obj/item/material/sword/foam = 2,
+ /obj/item/shield/riot/foam = 2,
+ )
+ worth = 750
+
+/datum/supply_pack/nanotrasen/recreation/donksoft_exotic
+ name = "DONKsoft Exotic Weaponry Bundle"
+ contains = list(
+ /obj/item/gun/ballistic/automatic/c20r/foam = 2,
+ /obj/item/gun/ballistic/automatic/lmg/foam = 1,
+ /obj/item/ammo_magazine/mfoam/c20 = 4,
+ /obj/item/ammo_magazine/mfoam/lmg = 2,
+ /obj/item/material/twohanded/spear/foam = 2,
+ /obj/item/material/twohanded/fireaxe/foam = 1,
+ )
+ worth = 1500
+
+/datum/supply_pack/nanotrasen/recreation/donksoft_ammo
+ name = "DONKsoft Resupply Bundle"
+ contains = list(
+ /obj/item/storage/box/foamdart= 4,
+ )
+ worth = 250
+
+/datum/supply_pack/nanotrasen/recreation/pelletgun
+ name = "Recreational Pellet Gun"
+ contains = list(
+ /obj/item/gun/ballistic/caseless/pellet,
+ /obj/item/ammo_magazine/pellets,
+ )
+ worth = 75
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/robotics.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/robotics.dm
new file mode 100644
index 000000000000..87a54ae77089
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/robotics.dm
@@ -0,0 +1,142 @@
+/*
+* Here is where any supply packs
+* related to robotics tasks live.
+*/
+
+//PROSTHETICS
+
+/datum/supply_pack/nanotrasen/robotics
+ category = "Robotics"
+ container_type = /obj/structure/closet/crate/science
+
+/datum/supply_pack/nanotrasen/robotics/robotics_assembly
+ name = "Robotics assembly crate"
+ contains = list(
+ /obj/item/assembly/prox_sensor = 3,
+ /obj/item/storage/toolbox/electrical,
+ /obj/item/flash = 4,
+ /obj/item/cell/high = 2,
+ )
+ worth = 250 // literally only because of the flashes; nerf flashes when?
+
+/datum/supply_pack/nanotrasen/robotics/jumper_cables
+ name = "Jumper kit crate"
+ contains = list(
+ /obj/item/defib_kit/jumper_kit = 2,
+ )
+ worth = 250
+
+/datum/supply_pack/nanotrasen/robotics/restrainingbolt
+ name = "Restraining bolt crate"
+ contains = list(
+ /obj/item/implanter = 1,
+ /obj/item/implantcase/restrainingbolt = 2,
+ )
+ worth = 1000 // stun combat tax intensifies
+
+/datum/supply_pack/nanotrasen/robotics/some_robolimbs
+ name = "Basic Robolimb Blueprints"
+ contains = list(
+ /obj/item/disk/limb/morpheus,
+ /obj/item/disk/limb/xion,
+ /obj/item/disk/limb/talon,
+ )
+ worth = 500
+
+/datum/supply_pack/nanotrasen/robotics/all_robolimbs
+ name = "Advanced Robolimb Blueprints (No Basic)"
+ contains = list(
+ /obj/item/disk/limb/bishop,
+ /obj/item/disk/limb/hephaestus,
+ /obj/item/disk/limb/veymed,
+ /obj/item/disk/limb/wardtakahashi,
+ /obj/item/disk/limb/zenghu,
+ /obj/item/disk/limb/dsi_tajaran,
+ /obj/item/disk/limb/dsi_lizard,
+ /obj/item/disk/limb/dsi_sergal,
+ /obj/item/disk/limb/dsi_nevrean,
+ /obj/item/disk/limb/dsi_vulpkanin,
+ /obj/item/disk/limb/dsi_akula,
+ /obj/item/disk/limb/dsi_spider,
+ /obj/item/disk/limb/dsi_teshari,
+ /obj/item/disk/limb/eggnerdltd,
+ /obj/item/disk/limb/eggnerdltdred,
+ /obj/item/disk/limb/antares,
+ /obj/item/disk/limb/grayson,
+ /obj/item/disk/limb/cybersolutions,
+ /obj/item/disk/limb/cenilimicybernetics,
+ )
+ worth = 2500
+ container_type = /obj/structure/closet/crate/secure
+
+//* Mechs *//
+
+/datum/supply_pack/nanotrasen/robotics/mecha_ripley
+ name = "Circuit Crate (\"Ripley\" APLU)"
+ contains = list(
+ /obj/item/book/manual/ripley_build_and_repair,
+ /obj/item/circuitboard/mecha/ripley/main,
+ /obj/item/circuitboard/mecha/ripley/peripherals,
+ )
+ worth = 275
+ container_name = "APLU \"Ripley\" Circuit Crate"
+
+/datum/supply_pack/nanotrasen/robotics/mecha_odysseus
+ name = "Circuit Crate (\"Odysseus\")"
+ contains = list(
+ /obj/item/circuitboard/mecha/odysseus/peripherals,
+ /obj/item/circuitboard/mecha/odysseus/main,
+ )
+ worth = 275
+ container_name = "\"Odysseus\" Circuit Crate"
+
+/datum/supply_pack/nanotrasen/robotics/mecha_gopher
+ name = "Circuit Crate (\"Gopher\" APLU)"
+ contains = list(
+ /obj/item/circuitboard/mecha/gopher/main,
+ /obj/item/circuitboard/mecha/gopher/peripherals,
+ )
+ worth = 275
+ container_name = "APLU \"Gopher\" Circuit Crate"
+
+/datum/supply_pack/nanotrasen/robotics/mecha_polecat
+ name = "Circuit Crate (\"Polecat\" APLU)"
+ contains = list(
+ /obj/item/circuitboard/mecha/polecat/main,
+ /obj/item/circuitboard/mecha/polecat/peripherals,
+ /obj/item/circuitboard/mecha/polecat/targeting,
+ )
+ worth = 275
+ container_name = "APLU \"Polecat\" Circuit Crate"
+
+/datum/supply_pack/nanotrasen/robotics/mecha_weasel
+ name = "Circuit Crate (\"Weasel\" APLU)"
+ contains = list(
+ /obj/item/circuitboard/mecha/weasel/main,
+ /obj/item/circuitboard/mecha/weasel/peripherals,
+ /obj/item/circuitboard/mecha/weasel/targeting,
+ )
+ worth = 275
+ container_name = "APLU \"Weasel\" Circuit Crate"
+
+//* Mechs - Paintkits *//
+
+/datum/supply_pack/nanotrasen/robotics/exosuit_mod
+ name = "Random APLU modkit"
+ contains = list(
+ /obj/random/paintkit,
+ )
+ worth = 750
+ container_name = "heavy crate"
+
+/datum/supply_pack/nanotrasen/robotics/exosuit_mod/durand
+ name = "Random Durand exosuit modkit"
+ contains = list(
+ /obj/random/paintkit,
+ )
+
+/datum/supply_pack/nanotrasen/robotics/exosuit_mod/gygax
+ name = "Random Gygax exosuit modkit"
+ contains = list(
+ /obj/random/paintkit/gygax,
+ )
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/science.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/science.dm
new file mode 100644
index 000000000000..eeeddc722d8d
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/science.dm
@@ -0,0 +1,114 @@
+/*
+* Here is where any supply packs
+* related to science tasks live
+*/
+/datum/supply_pack/nanotrasen/science
+ category = "Science"
+
+/datum/supply_pack/nanotrasen/science/virus
+ name = "Virus sample crate"
+ contains = list(
+ /obj/item/virusdish/random = 4,
+ )
+ container_type = "/obj/structure/closet/crate/secure"
+ container_name = "Virus sample crate"
+ container_access = list(
+ /datum/access/station/medical/virology,
+ )
+
+/datum/supply_pack/nanotrasen/science/coolanttank
+ name = "Coolant tank crate"
+ contains = list(/obj/structure/reagent_dispensers/coolanttank)
+ worth = 350 // reagent worth unimplemented
+ container_type = /obj/structure/largecrate
+ container_name = "coolant tank crate"
+
+/datum/supply_pack/nanotrasen/science/phoron
+ name = "Phoron research crate"
+ contains = list(
+ /obj/item/tank/phoron = 3,
+ /obj/item/tank/oxygen = 3,
+ /obj/item/assembly/igniter = 3,
+ /obj/item/assembly/prox_sensor = 3,
+ /obj/item/assembly/timer = 3,
+ /obj/item/assembly/signaler = 3,
+ /obj/item/transfer_valve = 3,
+ )
+ container_type = /obj/structure/closet/crate/secure/phoron
+ container_name = "Phoron assembly crate"
+ container_access = list(
+ /datum/access/station/science/toxins,
+ )
+
+/datum/supply_pack/nanotrasen/science/exoticseeds
+ name = "Exotic seeds crate"
+ contains = list(
+ /obj/item/seeds/replicapod = 2,
+ /obj/item/seeds/ambrosiavulgarisseed = 2,
+ /obj/item/seeds/libertymycelium,
+ /obj/item/seeds/reishimycelium,
+ /obj/item/seeds/random = 6,
+ /obj/item/seeds/kudzuseed,
+ )
+ worth = 650
+ container_type = /obj/structure/closet/crate/hydroponics
+ container_name = "Exotic Seeds crate"
+
+/datum/supply_pack/nanotrasen/science/integrated_circuit_printer
+ name = "Integrated circuit printer"
+ contains = list(
+ /obj/item/integrated_circuit_printer = 2,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Integrated circuit crate"
+
+/datum/supply_pack/nanotrasen/science/integrated_circuit_printer_upgrade
+ name = "Integrated circuit printer upgrade - advanced designs"
+ contains = list(
+ /obj/item/disk/integrated_circuit/upgrade/advanced,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Integrated circuit crate"
+
+/datum/supply_pack/nanotrasen/science/xenoarch
+ name = "Xenoarchaeology Tech crate"
+ contains = list(
+ /obj/item/pickaxe/excavationdrill,
+ /obj/item/xenoarch_multi_tool,
+ /obj/item/clothing/suit/space/anomaly,
+ /obj/item/clothing/head/helmet/space/anomaly,
+ /obj/item/storage/belt/archaeology,
+ /obj/item/flashlight/lantern,
+ /obj/item/core_sampler,
+ /obj/item/gps,
+ /obj/item/beacon_locator,
+ /obj/item/radio/beacon,
+ /obj/item/clothing/glasses/meson,
+ /obj/item/pickaxe,
+ /obj/item/storage/bag/fossils,
+ /obj/item/hand_labeler,
+ )
+ container_type = /obj/structure/closet/crate/secure/science
+ container_name = "Xenoarchaeology Tech crate"
+
+/datum/supply_pack/nanotrasen/science/jukebox_circuitboard
+ name = "Jukebox Circuit Board crate"
+ contains = list(
+ /obj/item/circuitboard/jukebox = 2,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Jukebox Circuit Board crate"
+
+
+/datum/supply_pack/nanotrasen/science/pred
+ name = "Dangerous Predator crate"
+ container_type = /obj/structure/largecrate/animal/pred
+ container_name = "Dangerous Predator crate"
+ worth = 350
+
+/datum/supply_pack/nanotrasen/science/pred_doom
+ name = "EXTREMELY Dangerous Predator crate"
+ container_type = /obj/structure/largecrate/animal/dangerous
+ container_name = "EXTREMELY Dangerous Predator crate"
+ legacy_contraband = 1
+ worth = 550
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/security.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/security.dm
new file mode 100644
index 000000000000..bb09c938ed6b
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/security.dm
@@ -0,0 +1,607 @@
+/*
+* Here is where any supply packs
+* related to security tasks live
+*/
+
+
+/datum/supply_pack/nanotrasen/security
+ abstract_type = /datum/supply_pack/nanotrasen/security
+ category = "Security"
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_access = list(
+ /datum/access/station/security/equipment,
+ )
+ supply_pack_flags = SUPPLY_PACK_LOCK_PRIVATE_ORDERS
+
+/datum/supply_pack/nanotrasen/security/weapons
+ name = "Weapons - Security basic equipment"
+ contains = list(
+ /obj/item/flash = 2,
+ /obj/item/reagent_containers/spray/pepper = 2,
+ /obj/item/melee/baton/loaded = 2,
+ /obj/item/gun/energy/taser = 2,
+ /obj/item/gunbox = 2,
+ /obj/item/storage/box/flashbangs = 2,
+ )
+ worth = 400
+ container_name = "Security equipment crate"
+
+/datum/supply_pack/nanotrasen/security/armor
+ name = "Armor - Security armor"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/clothing/suit/storage/vest,
+ /obj/item/clothing/suit/storage/vest/officer,
+ /obj/item/clothing/suit/storage/vest/warden,
+ /obj/item/clothing/suit/storage/vest/hos,
+ /obj/item/clothing/suit/storage/vest/detective,
+ /obj/item/clothing/suit/storage/vest/heavy,
+ /obj/item/clothing/suit/storage/vest/heavy/officer,
+ /obj/item/clothing/suit/storage/vest/heavy/warden,
+ /obj/item/clothing/suit/storage/vest/heavy/hos,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Armor crate"
+
+/datum/supply_pack/nanotrasen/security/carriers
+ name = "Armor - Plate carriers"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/clothing/suit/armor/pcarrier,
+ /obj/item/clothing/suit/armor/pcarrier/alt,
+ /obj/item/clothing/suit/armor/pcarrier/blue,
+ /obj/item/clothing/suit/armor/pcarrier/green,
+ /obj/item/clothing/suit/armor/pcarrier/navy,
+ /obj/item/clothing/suit/armor/pcarrier/tan,
+ /obj/item/clothing/suit/armor/pcarrier/press,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Plate Carrier crate"
+
+/datum/supply_pack/nanotrasen/security/carriertags
+ name = "Armor - Plate carrier tags"
+ // todo: just do fucking holotags WHY ARE WE SPAMMING THESE??
+ contains = list(
+ /obj/item/clothing/accessory/armor/tag,
+ /obj/item/clothing/accessory/armor/tag/nts,
+ /obj/item/clothing/accessory/armor/tag/ntc,
+ /obj/item/clothing/accessory/armor/tag/opos,
+ /obj/item/clothing/accessory/armor/tag/oneg,
+ /obj/item/clothing/accessory/armor/tag/apos,
+ /obj/item/clothing/accessory/armor/tag/aneg,
+ /obj/item/clothing/accessory/armor/tag/bpos,
+ /obj/item/clothing/accessory/armor/tag/bneg,
+ /obj/item/clothing/accessory/armor/tag/abpos,
+ /obj/item/clothing/accessory/armor/tag/abneg,
+ )
+ worth = 100
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Plate Carrier crate"
+
+/datum/supply_pack/nanotrasen/security/helmcovers
+ name = "Armor - Helmet covers"
+ // todo: just do fucking holocovers WHY ARE WE SPAMMING THESE??
+ contains = list(
+ /obj/item/clothing/accessory/armor/helmcover/blue = 2,
+ /obj/item/clothing/accessory/armor/helmcover/navy = 2,
+ /obj/item/clothing/accessory/armor/helmcover/green = 2,
+ /obj/item/clothing/accessory/armor/helmcover/tan = 2,
+ )
+ worth = 100
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Helmet Covers crate"
+
+/datum/supply_pack/nanotrasen/security/armorplates
+ name = "Armor - Security p-carrier armor plates"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/clothing/accessory/armor/armorplate = 2,
+ /obj/item/clothing/accessory/armor/armorplate/stab = 2,
+ /obj/item/clothing/accessory/armor/armorplate/medium = 2,
+ /obj/item/clothing/accessory/armor/armorplate/tactical,
+ /obj/item/clothing/accessory/armor/armorplate/ablative,
+ /obj/item/clothing/accessory/armor/armorplate/riot,
+ /obj/item/clothing/accessory/armor/armorplate/ballistic,
+ )
+ worth = 1000
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Armor plate crate"
+
+/datum/supply_pack/nanotrasen/security/carrierarms
+ name = "Armor - Security armguard attachments"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/clothing/accessory/armor/armguards,
+ /obj/item/clothing/accessory/armor/armguards/blue,
+ /obj/item/clothing/accessory/armor/armguards/navy,
+ /obj/item/clothing/accessory/armor/armguards/green,
+ /obj/item/clothing/accessory/armor/armguards/tan,
+ /obj/item/clothing/accessory/armor/armguards/ablative,
+ /obj/item/clothing/accessory/armor/armguards/riot,
+ /obj/item/clothing/accessory/armor/armguards/ballistic,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Armor plate crate"
+
+/datum/supply_pack/nanotrasen/security/carrierlegs
+ name = "Armor - Security legguard attachments"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/clothing/accessory/armor/legguards,
+ /obj/item/clothing/accessory/armor/legguards/blue,
+ /obj/item/clothing/accessory/armor/legguards/navy,
+ /obj/item/clothing/accessory/armor/legguards/green,
+ /obj/item/clothing/accessory/armor/legguards/tan,
+ /obj/item/clothing/accessory/armor/legguards/ablative,
+ /obj/item/clothing/accessory/armor/legguards/riot,
+ /obj/item/clothing/accessory/armor/legguards/ballistic,
+ )
+ worth = 750
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Armor plate crate"
+
+/datum/supply_pack/nanotrasen/security/carrierbags
+ name = "Armor - Security p-carrier pouch attachments"
+ lazy_gacha_amount = 5
+ lazy_gacha_contained = list(
+ /obj/item/clothing/accessory/storage/pouches,
+ /obj/item/clothing/accessory/storage/pouches/blue,
+ /obj/item/clothing/accessory/storage/pouches/navy,
+ /obj/item/clothing/accessory/storage/pouches/green,
+ /obj/item/clothing/accessory/storage/pouches/tan,
+ /obj/item/clothing/accessory/storage/pouches/large,
+ /obj/item/clothing/accessory/storage/pouches/large/blue,
+ /obj/item/clothing/accessory/storage/pouches/large/navy,
+ /obj/item/clothing/accessory/storage/pouches/large/green,
+ /obj/item/clothing/accessory/storage/pouches/large/tan,
+ )
+ worth = 500
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Armor plate crate"
+
+/datum/supply_pack/nanotrasen/security/armory
+ abstract_type = /datum/supply_pack/nanotrasen/security/armory
+ container_access = list(
+ /datum/access/station/security/armory,
+ )
+
+/datum/supply_pack/nanotrasen/security/armory/riot_gear
+ name = "Gear - Riot"
+ contains = list(
+ /obj/item/melee/baton = 3,
+ /obj/item/shield/riot = 3,
+ /obj/item/handcuffs = 3,
+ /obj/item/storage/box/flashbangs,
+ /obj/item/storage/box/beanbags,
+ /obj/item/storage/box/handcuffs,
+ )
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Riot gear crate"
+
+/datum/supply_pack/nanotrasen/security/armory/riot_armor
+ name = "Armor Set - Riot"
+ contains = list(
+ /obj/item/clothing/head/helmet/riot,
+ /obj/item/clothing/suit/armor/riot,
+ /obj/item/clothing/gloves/arm_guard/riot,
+ /obj/item/clothing/shoes/leg_guard/riot,
+ )
+ worth = 650 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Riot armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/riot_plates
+ name = "Armor Set - Riot (P-Carrier)"
+ contains = list(
+ /obj/item/clothing/head/helmet/riot,
+ /obj/item/clothing/suit/armor/pcarrier/riot,
+ /obj/item/clothing/accessory/armor/armguards/riot,
+ /obj/item/clothing/accessory/armor/legguards/riot,
+ )
+ worth = 650 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Riot armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/ablative_armor
+ name = "Armor Set - Ablative"
+ contains = list(
+ /obj/item/clothing/head/helmet/ablative,
+ /obj/item/clothing/suit/armor/laserproof,
+ /obj/item/clothing/gloves/arm_guard/laserproof,
+ /obj/item/clothing/shoes/leg_guard/laserproof,
+ )
+ worth = 750 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Ablative armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/ablative_plates
+ name = "Armor Set - Ablative (P-Carrier)"
+ contains = list(
+ /obj/item/clothing/head/helmet/ablative,
+ /obj/item/clothing/suit/armor/pcarrier/ablative,
+ /obj/item/clothing/accessory/armor/armguards/ablative,
+ /obj/item/clothing/accessory/armor/legguards/ablative,
+ )
+ worth = 750 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Ablative armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/bullet_resistant_armor
+ name = "Armor Set - Ballistic"
+ contains = list(
+ /obj/item/clothing/head/helmet/ballistic,
+ /obj/item/clothing/suit/armor/bulletproof,
+ /obj/item/clothing/gloves/arm_guard/bulletproof,
+ /obj/item/clothing/shoes/leg_guard/bulletproof,
+ )
+ worth = 750 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Ballistic armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/bullet_resistant_plates
+ name = "Armor Set - Ballistic (P-Carrier)"
+ contains = list(
+ /obj/item/clothing/head/helmet/ballistic,
+ /obj/item/clothing/suit/armor/pcarrier/ballistic,
+ /obj/item/clothing/accessory/armor/armguards/ballistic,
+ /obj/item/clothing/accessory/armor/legguards/ballistic,
+ )
+ worth = 750 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Ballistic armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/combat_armor
+ name = "Armor - Combat"
+ contains = list(
+ /obj/item/clothing/head/helmet/combat,
+ /obj/item/clothing/suit/armor/combat,
+ /obj/item/clothing/gloves/arm_guard/combat,
+ /obj/item/clothing/shoes/leg_guard/combat,
+ )
+ worth = 750 // lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Combat armor crate"
+
+/datum/supply_pack/nanotrasen/security/armory/tactical
+ name = "Armor - NT Tactical"
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "NT Tactical armor crate"
+ worth = 850 // the milrp tax is real
+
+ contains = list(
+ /obj/item/clothing/under/tactical,
+ /obj/item/clothing/suit/armor/tactical,
+ /obj/item/clothing/head/helmet/tactical,
+ /obj/item/clothing/mask/balaclava/tactical,
+ /obj/item/clothing/glasses/sunglasses/sechud/tactical,
+ /obj/item/storage/belt/security/tactical,
+ /obj/item/clothing/shoes/boots/jackboots,
+ /obj/item/clothing/gloves/black,
+ )
+
+/datum/supply_pack/nanotrasen/security/armory/flexitac
+ name = "Armor - Tactical Light"
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Tactical Light armor crate"
+ worth = 850 // the milrp tax is real
+ contains = list(
+ /obj/item/clothing/suit/storage/vest/heavy/flexitac,
+ /obj/item/clothing/head/helmet/flexitac,
+ /obj/item/clothing/shoes/leg_guard/flexitac,
+ /obj/item/clothing/gloves/arm_guard/flexitac,
+ /obj/item/clothing/mask/balaclava/tactical,
+ /obj/item/clothing/glasses/sunglasses/sechud/tactical,
+ /obj/item/storage/belt/security/tactical,
+ )
+
+/datum/supply_pack/nanotrasen/security/securitybarriers
+ name = "Misc - Security Barriers"
+ contains = list(
+ /obj/machinery/deployable/barrier = 4,
+ )
+ container_type = /obj/structure/largecrate
+ container_name = "Security barrier crate"
+
+/datum/supply_pack/nanotrasen/security/holster
+ name = "Gear - Holsters"
+ lazy_gacha_amount = 4
+ lazy_gacha_contained = list(
+ /obj/item/clothing/accessory/holster,
+ /obj/item/clothing/accessory/holster/armpit,
+ /obj/item/clothing/accessory/holster/waist,
+ /obj/item/clothing/accessory/holster/hip,
+ )
+ container_type = /obj/structure/closet/crate/corporate/nanotrasen
+ container_name = "Holster crate"
+
+/datum/supply_pack/nanotrasen/security/extragear
+ name = "Gear - Security surplus equipment"
+ contains = list(
+ /obj/item/storage/belt/security = 3,
+ /obj/item/clothing/glasses/sunglasses/sechud = 3,
+ /obj/item/radio/headset/headset_sec/alt = 3,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3,
+ /obj/item/storage/belt/dualholster = 3,
+ )
+ worth = 600 // i'm lazy
+ container_type = /obj/structure/closet/crate/corporate/nanotrasen
+ container_name = "Security surplus equipment"
+
+/datum/supply_pack/nanotrasen/security/detectivegear
+ name = "Forensic - Investigation equipment"
+ contains = list(
+ /obj/item/storage/box/evidence = 2,
+ /obj/item/clothing/suit/storage/vest/detective,
+ /obj/item/cartridge/detective,
+ /obj/item/radio/headset/headset_sec,
+ /obj/item/barrier_tape_roll/police,
+ /obj/item/clothing/glasses/sunglasses,
+ /obj/item/camera,
+ /obj/item/folder/red,
+ /obj/item/folder/blue,
+ /obj/item/storage/belt/detective,
+ /obj/item/clothing/gloves/black,
+ /obj/item/tape_recorder,
+ /obj/item/mass_spectrometer,
+ /obj/item/camera_film = 2,
+ /obj/item/storage/photo_album,
+ /obj/item/reagent_scanner,
+ /obj/item/flashlight/maglight,
+ /obj/item/storage/briefcase/crimekit,
+ /obj/item/storage/bag/detective,
+ )
+ worth = 750 // i'm lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Forensic equipment"
+
+/datum/supply_pack/nanotrasen/security/detectivescan
+ name = "Forensic - Scanning Equipment"
+ contains = list(
+ /obj/item/mass_spectrometer,
+ /obj/item/reagent_scanner,
+ /obj/item/storage/briefcase/crimekit,
+ /obj/item/detective_scanner,
+ )
+ worth = 850 // detective scanner buff someday
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Forensic equipment"
+
+/datum/supply_pack/nanotrasen/security/detectiveclothes
+ name = "Forensic - Investigation apparel"
+ contains = list(
+ /obj/item/clothing/under/det/black = 2,
+ /obj/item/clothing/under/det/grey = 2,
+ /obj/item/clothing/head/det/grey = 2,
+ /obj/item/clothing/under/det/skirt = 2,
+ /obj/item/clothing/under/det = 2,
+ /obj/item/clothing/head/det = 2,
+ /obj/item/clothing/suit/storage/det_trench,
+ /obj/item/clothing/suit/storage/det_trench/grey,
+ /obj/item/clothing/suit/storage/forensics/red,
+ /obj/item/clothing/suit/storage/forensics/blue,
+ /obj/item/clothing/under/det/corporate = 2,
+ /obj/item/clothing/accessory/badge/holo/detective = 2,
+ /obj/item/clothing/gloves/black = 2,
+ )
+ worth = 750 // the LARPer tax is real + these are armored
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Investigation clothing"
+
+/datum/supply_pack/nanotrasen/security/officergear
+ name = "Gear - Officer equipment"
+ contains = list(
+ /obj/item/clothing/suit/storage/vest/officer,
+ /obj/item/clothing/head/helmet,
+ /obj/item/cartridge/security,
+ /obj/item/clothing/accessory/badge/holo,
+ /obj/item/clothing/accessory/badge/holo/cord,
+ /obj/item/radio/headset/headset_sec,
+ /obj/item/storage/belt/security,
+ /obj/item/flash,
+ /obj/item/reagent_containers/spray/pepper,
+ /obj/item/grenade/flashbang,
+ /obj/item/melee/baton/loaded,
+ /obj/item/clothing/glasses/sunglasses/sechud,
+ /obj/item/barrier_tape_roll/police,
+ /obj/item/clothing/gloves/black,
+ /obj/item/hailer,
+ /obj/item/flashlight/flare,
+ /obj/item/clothing/accessory/storage/black_vest,
+ /obj/item/clothing/head/soft/sec/corp,
+ /obj/item/clothing/under/rank/security/corp,
+ /obj/item/gun/energy/taser,
+ /obj/item/flashlight/maglight,
+ )
+ worth = 750 // i'm lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Officer equipment"
+
+/datum/supply_pack/nanotrasen/security/wardengear
+ name = "Gear - Warden equipment"
+ contains = list(
+ /obj/item/clothing/suit/storage/vest/warden,
+ /obj/item/clothing/under/rank/warden,
+ /obj/item/clothing/under/rank/warden/corp,
+ /obj/item/clothing/suit/storage/vest/wardencoat,
+ /obj/item/clothing/suit/storage/vest/wardencoat/alt,
+ /obj/item/clothing/head/helmet/warden,
+ /obj/item/cartridge/security,
+ /obj/item/radio/headset/headset_sec,
+ /obj/item/clothing/glasses/sunglasses/sechud,
+ /obj/item/barrier_tape_roll/police,
+ /obj/item/hailer,
+ /obj/item/clothing/accessory/badge/holo/warden,
+ /obj/item/storage/box/flashbangs,
+ /obj/item/storage/belt/security,
+ /obj/item/reagent_containers/spray/pepper,
+ /obj/item/melee/baton/loaded,
+ /obj/item/storage/box/holobadge,
+ /obj/item/clothing/head/beret/sec/corporate/warden,
+ /obj/item/flashlight/maglight,
+ )
+ worth = 850 // i'm lazy
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Warden equipment"
+ container_access = list(
+ /datum/access/station/security/armory,
+ )
+
+/datum/supply_pack/nanotrasen/security/headofsecgear
+ name = "Gear - Head of security equipment"
+ contains = list(
+ /obj/item/clothing/head/helmet/HoS,
+ /obj/item/clothing/suit/storage/vest/hos,
+ /obj/item/clothing/under/rank/head_of_security/corp,
+ /obj/item/clothing/suit/storage/vest/hoscoat,
+ /obj/item/clothing/head/helmet/dermal,
+ /obj/item/cartridge/hos,
+ /obj/item/radio/headset/heads/hos,
+ /obj/item/clothing/glasses/sunglasses/sechud,
+ /obj/item/storage/belt/security,
+ /obj/item/flash,
+ /obj/item/hailer,
+ /obj/item/clothing/accessory/badge/holo/hos,
+ /obj/item/clothing/accessory/holster/waist,
+ /obj/item/melee/telebaton,
+ /obj/item/shield/riot/tele,
+ /obj/item/clothing/head/beret/sec/corporate/hos,
+ /obj/item/flashlight/maglight,
+ )
+ worth = 1500 // the milrper tax is real + good armor + don't lose your shit lol
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Head of security equipment"
+ container_access = list(
+ /datum/access/station/security/hos,
+ )
+
+/datum/supply_pack/nanotrasen/security/securityclothing
+ name = "Misc - Security uniform red"
+ contains = list(
+ /obj/item/storage/backpack/satchel/sec = 2,
+ /obj/item/storage/backpack/security = 2,
+ /obj/item/clothing/accessory/armband = 4,
+ /obj/item/clothing/under/rank/security = 4,
+ /obj/item/clothing/under/rank/security2 = 4,
+ /obj/item/clothing/under/rank/warden,
+ /obj/item/clothing/under/rank/head_of_security,
+ /obj/item/clothing/head/soft/sec = 4,
+ /obj/item/clothing/gloves/black = 4,
+ /obj/item/storage/box/holobadge,
+ )
+ worth = 500 // *facepalm* item spam
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Security uniform crate"
+
+/datum/supply_pack/nanotrasen/security/navybluesecurityclothing
+ name = "Misc - Security uniform navy blue"
+ contains = list(
+ /obj/item/storage/backpack/satchel/sec = 2,
+ /obj/item/storage/backpack/security = 2,
+ /obj/item/clothing/under/rank/security/navyblue = 4,
+ /obj/item/clothing/suit/security/navyofficer = 4,
+ /obj/item/clothing/under/rank/warden/navyblue,
+ /obj/item/clothing/suit/security/navywarden,
+ /obj/item/clothing/under/rank/head_of_security/navyblue,
+ /obj/item/clothing/suit/security/navyhos,
+ /obj/item/clothing/head/beret/sec/navy/officer = 4,
+ /obj/item/clothing/head/beret/sec/navy/warden,
+ /obj/item/clothing/head/beret/sec/navy/hos,
+ /obj/item/clothing/gloves/black = 4,
+ /obj/item/storage/box/holobadge,
+ )
+ worth = 500 // item spam
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Navy blue security uniform crate"
+
+/datum/supply_pack/nanotrasen/security/corporatesecurityclothing
+ name = "Misc - Security uniform corporate"
+ contains = list(
+ /obj/item/storage/backpack/satchel/sec = 2,
+ /obj/item/storage/backpack/security = 2,
+ /obj/item/clothing/under/rank/security/corp = 4,
+ /obj/item/clothing/head/soft/sec/corp = 4,
+ /obj/item/clothing/under/rank/warden/corp,
+ /obj/item/clothing/under/rank/head_of_security/corp,
+ /obj/item/clothing/head/beret/sec = 4,
+ /obj/item/clothing/head/beret/sec/corporate/warden,
+ /obj/item/clothing/head/beret/sec/corporate/hos,
+ /obj/item/clothing/under/det/corporate = 2,
+ /obj/item/clothing/gloves/black = 4,
+ /obj/item/storage/box/holobadge,
+ )
+ worth = 500 // item spam
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Corporate security uniform crate"
+
+/datum/supply_pack/nanotrasen/security/biosuit
+ name = "Gear - Security biohazard gear"
+ contains = list(
+ /obj/item/clothing/head/bio_hood/security = 3,
+ /obj/item/clothing/under/rank/security = 3,
+ /obj/item/clothing/suit/bio_suit/security = 3,
+ /obj/item/clothing/shoes/white = 3,
+ /obj/item/clothing/mask/gas = 3,
+ /obj/item/tank/oxygen = 3,
+ /obj/item/clothing/gloves/sterile/latex,
+ /obj/item/storage/box/gloves,
+ )
+ worth = 1250 // honestly kinda cheap for 3 sets
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Security biohazard gear"
+
+/datum/supply_pack/nanotrasen/security/posters
+ name = "Gear - Morale Posters"
+ contains = list(
+ /obj/item/contraband/poster/nanotrasen = 6,
+ )
+ worth = 100 // YEAAAH NANOTRASEN PROPAGANDA WOO
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Morale Posters"
+
+/datum/supply_pack/nanotrasen/security/kevlarkit
+ name = "Misc - Kevlar Upgrade Kits"
+ contains = list(
+ /obj/item/kevlarupgrade = 5,
+ )
+ worth = 500 // the powergamer tax is real
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Kevlar Upgrade Kits"
+ // "why is this not locked"
+ // because i'll be entirely blunt here
+ // uniform armor upgrades is stupid as shit
+ // i have no game design reason to lock it to security
+ // because that gives security an unfair advantage (uniform armor is historically antag-only)
+ // if you're going to add stuff like this, it's not going to be security-only.
+ container_access = null
+
+/datum/supply_pack/nanotrasen/security/pcarriers/combat
+ name = "Armor - Combat Armor (P-Carrier)"
+ contains = list(
+ /obj/item/clothing/suit/armor/pcarrier = 3,
+ /obj/item/clothing/accessory/armor/armorplate/combat = 3,
+ /obj/item/clothing/accessory/armor/armguards/combat = 3,
+ /obj/item/clothing/accessory/armor/legguards/combat = 3,
+ /obj/item/clothing/head/helmet/redcombat = 3,
+ )
+ worth = 1650 // the milrp tax is real + this is cheap for 3 armors
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Combat Armor crate"
+
+/datum/supply_pack/nanotrasen/security/helmets
+ name = "Armor - Helmet Pack"
+ contains = list(
+ /obj/item/clothing/head/helmet = 3,
+ )
+ worth = 125 * 3 // it's just helmets, 125 a piece is fine
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+
+/datum/supply_pack/nanotrasen/security/wardengear
+ name = "Tracking Implants"
+ contains = list(
+ /obj/item/storage/box/trackimp = 1,
+ )
+ worth = 1500 // the 1984 tax is real, don't spam this shit
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/supplies.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/supplies.dm
new file mode 100644
index 000000000000..bb725bfe6f15
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/supplies.dm
@@ -0,0 +1,152 @@
+/*
+* Here is where any supply packs
+* related to civilian tasks live
+*/
+
+/datum/supply_pack/nanotrasen/supply
+ abstract_type = /datum/supply_pack/nanotrasen/supply
+ category = "Supplies"
+
+/datum/supply_pack/nanotrasen/supply/food
+ name = "Kitchen supply crate"
+ contains = list(
+ /obj/item/reagent_containers/food/condiment/flour = 6,
+ /obj/item/reagent_containers/food/drinks/milk = 3,
+ /obj/item/reagent_containers/food/drinks/soymilk = 2,
+ /obj/item/storage/fancy/egg_box = 2,
+ /obj/item/reagent_containers/food/snacks/tofu = 4,
+ /obj/item/reagent_containers/food/snacks/meat = 4,
+ )
+ worth = 100 // i like our service players and will not grief them with high prices
+ container_type = /obj/structure/closet/crate/corporate/centauri
+ container_name = "Food crate"
+
+/datum/supply_pack/nanotrasen/supply/toner
+ name = "Toner cartridges"
+ contains = list(
+ /obj/item/toner = 6,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Toner cartridges"
+
+/datum/supply_pack/nanotrasen/supply/janitor
+ name = "Janitorial supplies"
+ contains = list(
+ /obj/item/reagent_containers/glass/bucket,
+ /obj/item/mop,
+ /obj/item/clothing/under/rank/janitor,
+ /obj/item/cartridge/janitor,
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/head/soft/purple,
+ /obj/item/storage/belt/janitor,
+ /obj/item/clothing/shoes/galoshes,
+ /obj/item/caution = 4,
+ /obj/item/storage/bag/trash,
+ /obj/item/lightreplacer,
+ /obj/item/reagent_containers/spray/cleaner,
+ /obj/item/reagent_containers/glass/rag,
+ /obj/item/reagent_containers/spray/pestbgone,
+ /obj/item/grenade/chem_grenade/cleaner = 3,
+ /obj/structure/mopbucket,
+ )
+ worth = 350 // i like our service players and will not grief them with high prices
+ container_type = /obj/structure/closet/crate
+ container_name = "Janitorial supplies"
+
+/datum/supply_pack/nanotrasen/supply/shipping
+ name = "Shipping supplies"
+ contains = list(
+ /obj/fiftyspawner/cardboard,
+ /obj/item/packageWrap = 4,
+ /obj/item/wrapping_paper = 2,
+ /obj/item/destTagger,
+ /obj/item/hand_labeler,
+ /obj/item/tool/wirecutters,
+ /obj/item/duct_tape_roll = 2,
+ )
+ worth = 150
+ container_type = /obj/structure/closet/crate
+ container_name = "Shipping supplies crate"
+
+/datum/supply_pack/nanotrasen/supply/bureaucracy
+ contains = list(
+ /obj/item/clipboard = 2,
+ /obj/item/pen/red,
+ /obj/item/pen/blue,
+ /obj/item/pen/blue,
+ /obj/item/camera_film,
+ /obj/item/folder/blue,
+ /obj/item/folder/red,
+ /obj/item/folder/yellow,
+ /obj/item/hand_labeler,
+ /obj/item/duct_tape_roll,
+ /obj/structure/filingcabinet/chestdrawer/unanchored,
+ /obj/item/paper_bin,
+ )
+ name = "Office supplies"
+ worth = 150
+ container_type = /obj/structure/closet/crate
+ container_name = "Office supplies crate"
+
+/datum/supply_pack/nanotrasen/supply/spare_pda
+ name = "Spare PDAs"
+ contains = list(
+ /obj/item/pda = 3,
+ )
+ worth = 150
+ container_type = /obj/structure/closet/crate/corporate/thinktronic
+
+/datum/supply_pack/nanotrasen/supply/minergear
+ name = "Shaft miner equipment"
+ contains = list(
+ /obj/item/storage/backpack/industrial,
+ /obj/item/storage/backpack/satchel/eng,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/miner,
+ /obj/item/radio/headset/headset_cargo,
+ /obj/item/clothing/under/rank/miner,
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/shoes/black,
+ /obj/item/atmos_analyzer,
+ /obj/item/storage/bag/ore,
+ /obj/item/flashlight/lantern,
+ /obj/item/shovel,
+ /obj/item/pickaxe,
+ /obj/item/mining_scanner,
+ /obj/item/clothing/glasses/material,
+ /obj/item/clothing/glasses/meson,
+ )
+ worth = 350
+ container_type = /obj/structure/closet/crate/secure/corporate/grayson
+
+/datum/supply_pack/nanotrasen/supply/mule
+ name = "Mulebot Crate"
+ contains = list()
+ worth = 500
+ container_type = /obj/structure/largecrate/animal/mulebot
+ container_name = "Mulebot Crate"
+
+//Culture Update
+/datum/supply_pack/nanotrasen/misc/mining_tyrmalin
+ name = "Tyrmalin Mining Crate"
+ contains = list(
+ /obj/item/melee/thermalcutter = 1,
+ /obj/item/pickaxe/tyrmalin = 2,
+ /obj/item/grenade/explosive/ied/tyrmalin = 2,
+ )
+ worth = 250
+ container_type = /obj/structure/closet/crate/secure/gear
+ container_name = "Tyrmalin Mining crate"
+ container_access = list(
+ /datum/access/station/supply/mining,
+ )
+
+/datum/supply_pack/nanotrasen/misc/breathing_nitrogen
+ name = "Emergency Nitrogen Supplies"
+ contains = list(
+ /obj/item/tank/emergency/nitrogen = 2,
+ /obj/item/tank/emergency/nitrogen/double = 1,
+ /obj/item/clothing/mask/gas/opaque = 3,
+ )
+ worth = 150
+ container_type = /obj/structure/closet/crate/corporate/unathi
+ container_name = "Emergency Nitrogen Supplies"
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/vehicles.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/vehicles.dm
new file mode 100644
index 000000000000..3a46f4cef3d4
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/vehicles.dm
@@ -0,0 +1,86 @@
+/datum/supply_pack/nanotrasen/vehicles
+ category = "Vehicles"
+
+/datum/supply_pack/nanotrasen/vehicles/dune_buggy
+ name = "Exploration Dune Buggy"
+ contains = list(
+ /obj/vehicle_old/train/rover/engine/dunebuggy,
+ )
+ worth = 1250
+ container_type = /obj/structure/largecrate
+ container_name = "Exploration Dune Buggy Crate"
+
+
+/datum/supply_pack/nanotrasen/vehicles/bike
+ name = "Spacebike Crate"
+ contains = list(
+ /obj/structure/vehiclecage/spacebike,
+ )
+ worth = 1250
+ container_type = /obj/structure/largecrate/vehicle
+ container_name = "spacebike crate"
+
+/datum/supply_pack/nanotrasen/vehicles/quadbike
+ name = "ATV Crate"
+ contains = list(
+ /obj/vehicle/ridden/quadbike/random,
+ /obj/item/key/quadbike,
+ )
+ worth = 1250
+ container_type = /obj/structure/largecrate/vehicle
+ container_name = "ATV crate"
+
+/datum/supply_pack/nanotrasen/vehicles/skatepack1
+ name = "Beginner Skateboard Pack"
+ contains = list(
+ /obj/vehicle_old/skateboard/beginner = 3,
+ /obj/item/clothing/head/helmet/bike_helmet/random = 3,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Skateboard Crate - Beginner"
+
+/datum/supply_pack/nanotrasen/vehicles/skatepack2
+ name = "Professional Skateboard Pack"
+ contains = list(
+ /obj/vehicle_old/skateboard/pro = 2,
+ /obj/item/clothing/head/helmet/bike_helmet/random = 2,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Skateboard Crate - Professional"
+
+/datum/supply_pack/nanotrasen/vehicles/skatepack3
+ name = "Hoverboard Pack"
+ contains = list(
+ /obj/vehicle_old/skateboard/hoverboard = 2,
+ /obj/item/clothing/head/helmet/bike_helmet/random = 2,
+ )
+ container_type = /obj/structure/closet/crate
+ container_name = "Hoverboard Crate"
+
+/datum/supply_pack/nanotrasen/vehicles/rover
+ name = "NT Humvee"
+ contains = list(
+ /obj/vehicle_old/train/rover/engine,
+ )
+ worth = 1500
+ container_type = /obj/structure/largecrate
+ container_name = "NT Humvee Crate"
+
+
+/datum/supply_pack/nanotrasen/vehicles/cargotrain
+ name = "Cargo Train Tug"
+ contains = list(
+ /obj/vehicle_old/train/engine,
+ )
+ worth = 1500
+ container_type = /obj/structure/largecrate
+ container_name = "Cargo Train Tug Crate"
+
+/datum/supply_pack/nanotrasen/vehicles/cargotrailer
+ name = "Cargo Train Trolley"
+ contains = list(
+ /obj/vehicle_old/train/trolley,
+ )
+ worth = 500
+ container_type = /obj/structure/largecrate
+ container_name = "Cargo Train Trolley Crate"
diff --git a/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/voidsuits.dm b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/voidsuits.dm
new file mode 100644
index 000000000000..1a3c1918021d
--- /dev/null
+++ b/code/game/content/factions/corporations/nanotrasen/nanotrasen-supply/voidsuits.dm
@@ -0,0 +1,224 @@
+/datum/supply_pack/nanotrasen/voidsuit
+ category = "Voidsuits"
+
+/**
+ * for single types of voidsuits
+ *
+ * * voidsuit & its helmet must have worth set
+ * * voidsuit must have its helmet_type var set
+ */
+/datum/supply_pack/nanotrasen/voidsuit/single
+ var/voidsuit_type = /obj/item/clothing/suit/space/void
+ var/amount = 1
+ /// if it doesn't start with boots, spawn boots in the package
+ var/automatically_include_boots = TRUE
+ /// if it doesn't start with an oxygen tank or cooler, spawn life support in the package
+ var/automatically_include_life_support = TRUE
+
+/datum/supply_pack/nanotrasen/voidsuit/single/populate()
+ ..()
+ var/obj/item/clothing/suit/space/void/casted = voidsuit_type
+ contains[voidsuit_type] = amount + contains[voidsuit_type]
+
+ if(!initial(casted.starts_with_helmet))
+ contains[initial(casted.helmet_type)] = amount + contains[initial(casted.helmet_type)]
+ if(!initial(casted.starts_with_boots) && automatically_include_boots)
+ contains[initial(casted.boots_type)] = amount + contains[initial(casted.boots_type)]
+ if(!initial(casted.starts_with_life_support) && automatically_include_life_support)
+ contains[initial(casted.tank_type)] = amount + contains[initial(casted.tank_type)]
+
+/datum/supply_pack/nanotrasen/voidsuit/single/atmos
+ name = "Atmospherics voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/atmos
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/aether
+ container_name = "atmospherics voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/atmos/alt
+ name = "Heavy Duty Atmospherics voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/atmos/alt
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/aether
+ container_name = "heavy duty atmospherics voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/engineering
+ name = "Engineering voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/engineering
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Engineering voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/engineering/construction
+ name = "Engineering Construction voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/engineering/construction
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Engineering Construction voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/engineering/hazmat
+ name = "Engineering Hazmat voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/engineering/hazmat
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/aether
+ container_name = "Engineering Hazmat voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/engineering/alt
+ name = "Reinforced Engineering voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/engineering/alt
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/aether
+ container_name = "Reinforced Engineering voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/medical
+ name = "Medical voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/medical
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure
+ container_name = "Medical voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/medical/emt
+ name = "Medical EMT voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/medical/emt
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Medical EMT voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/medical/bio
+ name = "Medical Biohazard voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/medical/bio
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Medical Biohazard voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/medical/alt
+ name = "Vey-Med Medical voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/medical/alt
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/veymed
+ container_name = "Vey-Med Medical voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/medical/alt2
+ name = "Vey-Med Plated Medical voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/medical/alt_plated
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/veymed
+ container_name = "Vey-Med Medical voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/security
+ name = "Security voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/security
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Security voidsuit crate"
+ container_access = list(
+ /datum/access/station/security/equipment,
+ )
+
+/datum/supply_pack/nanotrasen/voidsuit/single/security/crowd
+ name = "Security Crowd Control voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/security/riot
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Security Crowd Control voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/security/alt
+ name = "Security EVA Riot voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/security/alt
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Security EVA Riot voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/supply
+ name = "Mining voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/mining
+ amount = 2
+ container_name = "Mining voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/supply/alt
+ name = "Frontier Mining voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/mining/alt
+ amount = 2
+ container_name = "Frontier Mining voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/zaddat
+ name = "Zaddat Shroud"
+ voidsuit_type = /obj/item/clothing/suit/space/void/zaddat
+ amount = 1
+
+/datum/supply_pack/nanotrasen/voidsuit/single/supply
+ name = "Mining voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/mining
+ amount = 3
+/datum/supply_pack/nanotrasen/voidsuit/single/explorer
+ name = "Exploration voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/exploration
+ amount = 3
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Exploration voidsuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/pilot
+ name = "Pilot voidsuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/pilot
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Pilot voidsuit crate"
+
+//Cryosuits
+/datum/supply_pack/nanotrasen/voidsuit/single/cryosec
+ name = "Security cryosuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/security/cryo
+ amount = 1
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Security cryosuit crate"
+ container_access = list(
+ /datum/access/station/security/equipment,
+ )
+
+/datum/supply_pack/nanotrasen/voidsuit/single/cryoengi
+ name = "Engineering cryosuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/engineering/cryo
+ amount = 1
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Engineering cryosuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/cryoatmos
+ name = "Atmospherics cryosuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/atmos/cryo
+ amount = 1
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Atmospherics cryosuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/cryomining
+ name = "Mining cryosuits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/mining/cryo
+ amount = 1
+ container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
+ container_name = "Mining cryosuit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/odst
+ name = "Hephaestus Icarus Combat Suits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/odst
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+ container_name = "Icarus Combat Suit crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/odst_med
+ name = "Hephaestus Icarus Medic Suits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/odst_med
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+ container_name = "Hephaestheus Icarus Medic crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/odst_eng
+ name = "Hephaestus Icarus Engineer Suits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/odst_eng
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+ container_name = "Hephaestheus Icarus Engineer crate"
+
+/datum/supply_pack/nanotrasen/voidsuit/single/odst_exp
+ name = "Hephaestus Icarus Frontier Suits"
+ voidsuit_type = /obj/item/clothing/suit/space/void/odst_exp
+ amount = 2
+ container_type = /obj/structure/closet/crate/secure/corporate/heph
+ container_name = "Hephaestheus Icarus Frontier crate"
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
index b8465c5db694..00e2d24145e2 100644
--- a/code/game/machinery/computer/supply.dm
+++ b/code/game/machinery/computer/supply.dm
@@ -111,15 +111,15 @@
else
shuttle["mode"] = SUP_SHUTTLE_ERROR
- for(var/pack_name in SSsupply.supply_pack)
- var/datum/supply_pack/P = SSsupply.supply_pack[pack_name]
- if(P.group == active_category)
+ for(var/pack_name in SSsupply.legacy_supply_packs)
+ var/datum/supply_pack/P = SSsupply.legacy_supply_packs[pack_name]
+ if(P.category == active_category)
var/list/pack = list(
"name" = P.name,
- "cost" = P.cost,
- "contraband" = P.contraband,
- "manifest" = P.flattened_nanoui_manifest(),
- "random" = P.is_random(),
+ "cost" = P.legacy_cost,
+ "contraband" = P.legacy_contraband,
+ "manifest" = P.nanoui_manifest_list(),
+ "random" = P.nanoui_is_random() && P.lazy_gacha_amount,
"expand" = 0,
"ref" = "\ref[P]"
)
@@ -167,7 +167,7 @@
data["order_auth"] = (authorization & SUP_ACCEPT_ORDERS) // Whether this ui is permitted to accept/deny requested orders
data["shuttle"] = shuttle_status
data["supply_points"] = SSsupply.points
- data["categories"] = all_supply_groups
+ data["categories"] = SSsupply.legacy_supply_categories
data["active_category"] = active_category
data["supply_packs"] = pack_list
data["orders"] = orders
@@ -262,7 +262,7 @@
reqform.info += "RANK: [idrank]
"
reqform.info += "REASON: [reason]
"
reqform.info += "SUPPLY CRATE TYPE: [S.name]
"
- reqform.info += "ACCESS RESTRICTION: [get_access_desc(S.access)]
"
+ reqform.info += "ACCESS RESTRICTION: [get_access_desc(S.container_access | S.container_one_access)]
"
reqform.info += S.get_html_manifest().Join("")
reqform.info += "
"
reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:
"
diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm
index 92e9e54feacc..7d705590927a 100644
--- a/code/game/machinery/deployable.dm
+++ b/code/game/machinery/deployable.dm
@@ -14,6 +14,7 @@
pass_flags_self = ATOM_PASS_TABLE
integrity = 200
integrity_max = 200
+ worth_intrinsic = 150
var/locked = FALSE
// req_access = list(ACCESS_ENGINEERING_MAINT)
diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm
index 3f1e3fcba9cd..05cdf8d22a0d 100644
--- a/code/game/machinery/oxygen_pump.dm
+++ b/code/game/machinery/oxygen_pump.dm
@@ -250,6 +250,8 @@
anchored = FALSE
density = TRUE
+ worth_intrinsic = 250
+
mask_type = /obj/item/clothing/mask/gas/clear
var/last_area = null
@@ -278,6 +280,8 @@
name = "portable patient stabilizer"
desc = "A portable oxygen pump with a retractable mask used for stabilizing patients in the field."
+ worth_intrinsic = 500
+
/obj/machinery/oxygen_pump/mobile/stabilizer/process(delta_time)
if(breather)
if(!can_apply_to_target(breather))
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 5677ee85cd0a..57c717216504 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -4,6 +4,7 @@
icon_state = "pipe_d"
density = TRUE
anchored = TRUE
+ worth_intrinsic = 500
var/unwrenched = FALSE
var/wait = FALSE
///The default layer selected on the machine.
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index 7383b5c06e96..6dad1ded03ec 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -190,6 +190,8 @@
density = 1
anchored = 0
+ worth_intrinsic = 500
+
use_power = USE_POWER_OFF //is powered directly from cables
active_power_usage = 150 KILOWATTS //BIG POWER
idle_power_usage = 500
diff --git a/code/game/objects/items/circuitboards/circuitboard.dm b/code/game/objects/items/circuitboards/circuitboard.dm
index c18140f7309d..692372a5ff4b 100644
--- a/code/game/objects/items/circuitboards/circuitboard.dm
+++ b/code/game/objects/items/circuitboards/circuitboard.dm
@@ -19,6 +19,7 @@
throw_force = 5
throw_speed = 3
throw_range = 15
+ worth_intrinsic = 45
var/build_path = null
var/board_type = new /datum/frame/frame_types/computer
/**
diff --git a/code/game/objects/items/contraband.dm b/code/game/objects/items/contraband.dm
index 97f760894863..a54ee11a41e7 100644
--- a/code/game/objects/items/contraband.dm
+++ b/code/game/objects/items/contraband.dm
@@ -47,6 +47,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "deliverycrate5"
item_state = "table_parts"
+ worth_intrinsic = 200
w_class = WEIGHT_CLASS_HUGE
/obj/item/stolenpackage/attack_self(mob/user)
@@ -175,6 +176,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "deliverycrate5"
item_state = "table_parts"
+ worth_intrinsic = 350
w_class = WEIGHT_CLASS_HUGE
/obj/item/stolenpackageplus/attack_self(mob/user)
@@ -241,6 +243,7 @@
icon_state = "deliverycrate5"
item_state = "table_parts"
w_class = WEIGHT_CLASS_HUGE
+ worth_intrinsic = 400
/obj/item/mechasalvage/attack_self(mob/user)
. = ..()
diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm
index 2fb48820002d..206d7adca918 100644
--- a/code/game/objects/items/devices/debugger.dm
+++ b/code/game/objects/items/devices/debugger.dm
@@ -21,25 +21,25 @@
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage
-/obj/item/debugger/is_used_on(obj/O, mob/user)
- if(istype(O, /obj/machinery/power/apc))
- var/obj/machinery/power/apc/A = O
- if(A.emagged || A.hacker)
- to_chat(user, "There is a software error with the device.")
- else
- to_chat(user, "The device's software appears to be fine.")
- return 1
- if(istype(O, /obj/machinery/door))
- var/obj/machinery/door/D = O
- if(D.operating == -1)
- to_chat(user, "There is a software error with the device.")
- else
- to_chat(user, "The device's software appears to be fine.")
- return 1
- else if(istype(O, /obj/machinery))
- var/obj/machinery/A = O
- if(A.emagged)
- to_chat(user, "There is a software error with the device.")
- else
- to_chat(user, "The device's software appears to be fine.")
- return 1
+// /obj/item/debugger/is_used_on(obj/O, mob/user)
+// if(istype(O, /obj/machinery/power/apc))
+// var/obj/machinery/power/apc/A = O
+// if(A.emagged || A.hacker)
+// to_chat(user, "There is a software error with the device.")
+// else
+// to_chat(user, "The device's software appears to be fine.")
+// return 1
+// if(istype(O, /obj/machinery/door))
+// var/obj/machinery/door/D = O
+// if(D.operating == -1)
+// to_chat(user, "There is a software error with the device.")
+// else
+// to_chat(user, "The device's software appears to be fine.")
+// return 1
+// else if(istype(O, /obj/machinery))
+// var/obj/machinery/A = O
+// if(A.emagged)
+// to_chat(user, "There is a software error with the device.")
+// else
+// to_chat(user, "The device's software appears to be fine.")
+// return 1
diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm
index ca492d435468..18afd34b01ff 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -16,6 +16,7 @@
w_class = WEIGHT_CLASS_BULKY
origin_tech = list(TECH_BIO = 4, TECH_POWER = 2)
item_action_name = "Remove/Replace Paddles"
+ worth_intrinsic = 300
var/obj/item/shockpaddles/linked/paddles
var/obj/item/cell/bcell = null
@@ -165,6 +166,7 @@
w_class = WEIGHT_CLASS_NORMAL
slot_flags = SLOT_BELT
origin_tech = list(TECH_BIO = 5, TECH_POWER = 3)
+ worth_intrinsic = 500
/obj/item/defib_kit/compact/loaded
bcell = /obj/item/cell/high
@@ -627,6 +629,7 @@
item_state = "defibunit"
// item_state = "jumperunit"
paddles = /obj/item/shockpaddles/linked/jumper
+ worth_intrinsic = 150
/obj/item/defib_kit/jumper_kit/loaded
bcell = /obj/item/cell/high
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index ac803e703226..396ee6999be7 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -9,6 +9,7 @@
throw_speed = 4
throw_range = 10
origin_tech = list(TECH_MAGNET = 2, TECH_COMBAT = 1)
+ worth_intrinsic = 45
var/times_used = 0 //Number of times it's been used.
var/broken = FALSE //Is the flash burnt out?
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index f991a4ca8bd9..0c5736fac96a 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -8,6 +8,7 @@
materials_base = list(MAT_STEEL = 50, MAT_GLASS = 20)
item_action_name = "Toggle Flashlight"
light_wedge = LIGHT_WIDE
+ worth_intrinsic = 25
var/on = FALSE
/// Luminosity when on
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index c590c9c5d025..a2712ccf6d4f 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -26,6 +26,7 @@
slot_flags = SLOT_BELT
origin_tech = list(TECH_MATERIAL = 2, TECH_BLUESPACE = 2, TECH_MAGNET = 1)
materials_base = list(MAT_STEEL = 500)
+ worth_intrinsic = 40
/// our GPS tag
var/gps_tag = "GEN0"
diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm
index 6c69a0934cd1..2595a5787303 100644
--- a/code/game/objects/items/devices/radio/beacon.dm
+++ b/code/game/objects/items/devices/radio/beacon.dm
@@ -9,6 +9,7 @@
var/functioning = TRUE
var/identifier
origin_tech = list(TECH_BLUESPACE = 1)
+ worth_intrinsic = 50
GLOBAL_LIST_BOILERPLATE(all_beacons, /obj/item/radio/beacon)
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index 8363b56abbae..83dd062a0ff3 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -8,6 +8,7 @@
//lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi'
//righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi'
w_class = WEIGHT_CLASS_BULKY
+ worth_intrinsic = 250
var/obj/item/tank/tank_one
var/obj/item/tank/tank_two
diff --git a/code/game/objects/items/gunbox.dm b/code/game/objects/items/gunbox.dm
index 2561a727adbb..ebfbe0ad04b2 100644
--- a/code/game/objects/items/gunbox.dm
+++ b/code/game/objects/items/gunbox.dm
@@ -3,6 +3,7 @@
desc = "A secure box containing a security LTL sidearm."
icon = 'icons/obj/storage.dmi'
icon_state = "gunbox"
+ worth_intrinsic = 350
/obj/item/gunbox/attack_self(mob/user)
var/list/options = list()
@@ -23,6 +24,7 @@
desc = "A secure box containing a lethal security sidearm."
icon = 'icons/obj/storage.dmi'
icon_state = "gunbox"
+ worth_intrinsic = 450
/obj/item/gunbox/lethal/attack_self(mob/user)
var/list/options = list()
diff --git a/code/game/objects/items/inflatables.dm b/code/game/objects/items/inflatables.dm
index a3e6c8c5b5a6..0f8f5be29357 100644
--- a/code/game/objects/items/inflatables.dm
+++ b/code/game/objects/items/inflatables.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/inflatable.dmi'
icon_state = "folded_wall"
w_class = WEIGHT_CLASS_NORMAL
+ worth_intrinsic = 15
var/deploy_path = /obj/structure/inflatable
/obj/item/inflatable/attack_self(mob/user)
@@ -38,6 +39,7 @@
desc = "A folded membrane which rapidly expands into a simple door on activation."
icon = 'icons/obj/inflatable.dmi'
icon_state = "folded_door"
+ worth_intrinsic = 25
deploy_path = /obj/structure/inflatable/door
/obj/item/inflatable/torn
@@ -70,12 +72,8 @@
max_combined_volume = WEIGHT_VOLUME_NORMAL * 7
insertion_whitelist = list(/obj/item/inflatable)
-/obj/item/storage/briefcase/inflatable/legacy_spawn_contents()
- . = ..()
- new /obj/item/inflatable/door(src)
- new /obj/item/inflatable/door(src)
- new /obj/item/inflatable/door(src)
- new /obj/item/inflatable(src)
- new /obj/item/inflatable(src)
- new /obj/item/inflatable(src)
- new /obj/item/inflatable(src)
+ starts_with = list(
+ /obj/item/inflatable = 4,
+ /obj/item/inflatable/door = 3,
+ )
+
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 3e52376b9c04..bde4383c2036 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -28,6 +28,8 @@
/**
* Items that can stack, tracking the number of which is in it
+ *
+ * * [worth_intrinsic] is the only thing used on this path for detecting economic value. Normal get_worth() is not considered.
*/
/obj/item/stack
gender = PLURAL
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 09798675f1cf..489f27b412b2 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -26,6 +26,8 @@
allow_quick_empty = TRUE
allow_quick_empty_via_attack_self = TRUE
+ worth_intrinsic = 75
+
var/auto_fit_weight_class_to_largest_contained = TRUE
/obj/item/storage/bag/Entered(atom/movable/AM, atom/oldLoc)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index fd39c5cefdb0..4e4b885d9c67 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -12,6 +12,7 @@
equip_sound = 'sound/items/toolbelt_equip.ogg'
drop_sound = 'sound/items/drop/toolbelt.ogg'
pickup_sound = 'sound/items/pickup/toolbelt.ogg'
+ worth_intrinsic = 50
var/show_above_suit = 0
/obj/item/storage/belt/verb/toggle_layer()
@@ -409,6 +410,7 @@
icon_state = "janitor"
max_items = 7
max_single_weight_class = WEIGHT_CLASS_NORMAL
+ worth_intrinsic = 35
insertion_whitelist = list(
/obj/item/clothing/glasses,
/obj/item/flashlight,
@@ -432,6 +434,7 @@
name = "excavation gear-belt"
desc = "Can hold various excavation gear."
icon_state = "gear"
+ worth_intrinsic = 65
insertion_whitelist = list(
/obj/item/storage/box/samplebags,
/obj/item/core_sampler,
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index 9de90fb2eca4..517fd0870f0a 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -29,6 +29,7 @@
max_combined_volume = STORAGE_VOLUME_BOX
drop_sound = 'sound/items/drop/cardboardbox.ogg'
pickup_sound = 'sound/items/pickup/cardboardbox.ogg'
+ worth_intrinsic = 25
/// dynamic state support
var/dynamic_state = TRUE
@@ -121,6 +122,8 @@
/obj/item/dnainjector/m2h = 3
)
+// todo: all this should be special ammo magazines or something i hate abusing box-code lmao
+
/obj/item/storage/box/blanks
name = "box of blank shells"
desc = "It has a picture of a gun and several warning symbols on the front."
@@ -482,8 +485,8 @@
icon_state = "lightmixed"
starts_with = list(
/obj/item/light/tube = 16,
- /obj/item/light/bulb = 8
- )
+ /obj/item/light/bulb = 8,
+ )
/obj/item/storage/box/lights/fairy
name = "box of replacement fairy bulbs"
@@ -501,8 +504,8 @@
/obj/item/light/bulb/yellow = 4,
/obj/item/light/bulb/green = 4,
/obj/item/light/bulb/blue = 4,
- /obj/item/light/bulb/purple = 4
- )
+ /obj/item/light/bulb/purple = 4,
+ )
/obj/item/storage/box/lights/bulbs_neon
name = "box of neon bulbs"
@@ -513,8 +516,8 @@
/obj/item/light/bulb/neon_blue = 6,
/obj/item/light/bulb/neon_green = 6,
/obj/item/light/bulb/neon_yellow = 6,
- /obj/item/light/bulb/neon_white = 6
- )
+ /obj/item/light/bulb/neon_white = 6,
+ )
/obj/item/storage/box/lights/tubes_colored
name = "box of colored tubes"
@@ -525,8 +528,8 @@
/obj/item/light/tube/yellow = 4,
/obj/item/light/tube/green = 4,
/obj/item/light/tube/blue = 4,
- /obj/item/light/tube/purple = 4
- )
+ /obj/item/light/tube/purple = 4,
+ )
/obj/item/storage/box/lights/tubes_neon
name = "box of neon tubes"
@@ -537,8 +540,8 @@
/obj/item/light/tube/neon_blue = 6,
/obj/item/light/tube/neon_green = 6,
/obj/item/light/tube/neon_yellow = 6,
- /obj/item/light/tube/neon_white = 6
- )
+ /obj/item/light/tube/neon_white = 6,
+ )
/obj/item/storage/box/lights/mixed_colored
name = "box of colored lights"
@@ -555,8 +558,8 @@
/obj/item/light/bulb/yellow = 2,
/obj/item/light/bulb/green = 2,
/obj/item/light/bulb/blue = 2,
- /obj/item/light/bulb/purple = 2
- )
+ /obj/item/light/bulb/purple = 2,
+ )
/obj/item/storage/box/lights/mixed_neon
name = "box of neon lights"
@@ -572,8 +575,8 @@
/obj/item/light/bulb/neon_blue = 3,
/obj/item/light/bulb/neon_green = 3,
/obj/item/light/bulb/neon_yellow = 3,
- /obj/item/light/bulb/neon_white = 3
- )
+ /obj/item/light/bulb/neon_white = 3,
+ )
/obj/item/storage/box/freezer
name = "portable freezer"
@@ -586,6 +589,7 @@
insertion_whitelist = list(/obj/item/organ)
max_combined_volume = WEIGHT_VOLUME_NORMAL * 5 // Formally 21. Odd numbers are bad.
allow_mass_gather = TRUE // for picking up broken bulbs, not that most people will try
+ worth_intrinsic = 150
/obj/item/storage/box/freezer/Entered(var/atom/movable/AM)
if(istype(AM, /obj/item/organ))
diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm
index 394a254ab05f..ab6f5c2c6c7a 100644
--- a/code/game/objects/items/storage/storage.dm
+++ b/code/game/objects/items/storage/storage.dm
@@ -46,11 +46,14 @@
/// set to prevent us from spawning starts_with
var/empty = FALSE
-/obj/item/storage/Initialize(mapload)
+/obj/item/storage/Initialize(mapload, empty)
. = ..()
initialize_storage()
- spawn_contents()
- legacy_spawn_contents()
+ if(!empty)
+ spawn_contents()
+ legacy_spawn_contents()
+ else
+ starts_with = null
/**
* Make sure to set [worth_dynamic] to TRUE if this does more than spawning what's in starts_with.
diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm
index 8e5d3de0de4f..7121bb3e5829 100644
--- a/code/game/objects/items/tools/weldingtool.dm
+++ b/code/game/objects/items/tools/weldingtool.dm
@@ -17,6 +17,8 @@
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
+ worth_intrinsic = 35
+
//Cost to make in the autolathe
materials_base = list(MAT_STEEL = 70, MAT_GLASS = 30)
@@ -575,6 +577,7 @@
icon_state = "arcwelder"
max_fuel = 0 //We'll handle the consumption later.
item_state = "ewelder"
+ worth_intrinsic = 70
var/obj/item/cell/power_supply //What type of power cell this uses
var/charge_cost = 24 //The rough equivalent of 1 unit of fuel, based on us wanting 10 welds per battery
var/cell_type = /obj/item/cell/device
diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm
index c73105a24b3d..588965be9ea6 100644
--- a/code/game/objects/items/weapons/grenades/chem_grenade.dm
+++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm
@@ -215,6 +215,7 @@
desc = "Used for clearing rooms of living things."
path = 1
stage = 2
+ worth_intrinsic = 150
/obj/item/grenade/chem_grenade/incendiary/Initialize(mapload)
. = ..()
diff --git a/code/game/objects/items/weapons/grenades/emgrenade.dm b/code/game/objects/items/weapons/grenades/emgrenade.dm
index 19157af633db..47f1133a941a 100644
--- a/code/game/objects/items/weapons/grenades/emgrenade.dm
+++ b/code/game/objects/items/weapons/grenades/emgrenade.dm
@@ -3,6 +3,7 @@
icon_state = "emp"
item_state = "empgrenade"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
+ worth_intrinsic = 70
var/emp_heavy = 2
var/emp_med = 4
var/emp_light = 7
@@ -18,6 +19,7 @@
name = "low yield emp grenade"
desc = "A weaker variant of the EMP grenade"
icon_state = "lyemp"
+ worth_intrinsic = 35
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 3)
emp_heavy = 1
emp_med = 2
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index bbd008ea76d4..7018d5f8d96f 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -3,6 +3,7 @@
icon_state = "flashbang"
item_state = "flashbang"
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1)
+ worth_intrinsic = 35
var/max_range = 10 //The maximum range possible, including species effect mods. Cuts off at 7 for normal humans. Should be 3 higher than your intended target range for affecting normal humans.
var/banglet = 0
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index 416aa4f518d9..764e4e6aa75b 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -6,6 +6,7 @@
det_time = 20
item_state = "flashbang"
slot_flags = SLOT_BELT
+ worth_intrinsic = 50
var/datum/effect_system/smoke_spread/bad/smoke
var/smoke_color
var/smoke_strength = 8
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 8faf835e2a90..e59858133bc5 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -13,6 +13,7 @@
materials_base = list(MAT_STEEL = 500)
drop_sound = 'sound/items/drop/accessory.ogg'
pickup_sound = 'sound/items/pickup/accessory.ogg'
+ worth_intrinsic = 10
var/elastic
var/dispenser = 0
var/breakouttime = 1200 //Deciseconds = 120s = 2 minutes
@@ -153,6 +154,8 @@ var/last_chew = 0
cuff_sound = 'sound/weapons/cablecuff.ogg'
cuff_type = "cable restraints"
elastic = 0 //citadel change, why would cable be better than actual handcuffs? who knows.
+ worth_intrinsic = 10
+ economic_category_obj = ECONOMIC_CATEGORY_OBJ_SCRAP
/obj/item/handcuffs/cable/red
color = "#DD0000"
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 268af9819fda..b036965c9baf 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -70,6 +70,7 @@
origin_tech = list(TECH_MATERIAL = 2)
materials_base = list(MAT_GLASS = 7500, MAT_STEEL = 1000)
attack_verb = list("shoved", "bashed")
+ worth_intrinsic = 300
var/cooldown = 0 //shield bash cooldown. based on world.time
/obj/item/shield/riot/handle_shield(mob/user, var/damage, atom/damage_source = null, mob/attacker = null, var/def_zone = null, var/attack_text = "the attack")
@@ -305,6 +306,7 @@
SLOT_ID_LEFT_HAND = 'icons/mob/items/lefthand_melee.dmi',
SLOT_ID_RIGHT_HAND = 'icons/mob/items/righthand_melee.dmi',
)
+ worth_intrinsic = 500 // op as balls
/obj/item/shield/energy/handle_shield(mob/user)
if(!active)
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 885ad0a05203..ac7800a0ec4c 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -17,6 +17,7 @@
pickup_sound = 'sound/items/pickup/metalweapon.ogg'
origin_tech = list(TECH_COMBAT = 2)
attack_verb = list("beaten")
+ worth_intrinsic = 75
var/lightcolor = "#FF6A00"
var/stunforce = 0
var/agonyforce = 60
@@ -30,6 +31,11 @@
. = ..()
update_icon()
+/obj/item/melee/baton/worth_contents(flags)
+ . = ..()
+ if(bcell)
+ . += bcell
+
/obj/item/melee/baton/get_cell(inducer)
return bcell
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tank.dm
similarity index 98%
rename from code/game/objects/items/weapons/tanks/tanks.dm
rename to code/game/objects/items/weapons/tanks/tank.dm
index 68f8049127c8..4a3291e1b993 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tank.dm
@@ -42,6 +42,8 @@ var/list/global/tank_gauge_cache = list()
var/leaking = 0
var/wired = 0
+ worth_intrinsic = 50
+
description_info = "These tanks are utilised to store any of the various types of gaseous substances. \
They can be attached to various portable atmospheric devices to be filled or emptied.
\
\
@@ -84,6 +86,13 @@ var/list/global/tank_gauge_cache = list()
. = ..()
+/obj/item/tank/get_containing_worth(flags)
+ . = ..()
+ var/list/gas = air_contents.gas
+ for(var/id in gas)
+ var/datum/gas/gas_datum = global.gas_data.gases[id]
+ . += gas_datum.worth * gas[id]
+
/obj/item/tank/examine(mob/user, dist)
. = ..()
if(.)
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index cbb62e971cb6..88e1f645ef57 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -84,6 +84,7 @@
icon_state = "phoron"
gauge_icon = null
slot_flags = null //they have no straps!
+ worth_intrinsic = 75 // heavy duty
/obj/item/tank/phoron/Initialize(mapload)
. = ..()
@@ -142,6 +143,7 @@
damage_force = 4
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
volume = 2 //Tiny. Real life equivalents only have 21 breaths of oxygen in them. They're EMERGENCY tanks anyway -errorage (dangercon 2011)
+ worth_intrinsic = 25
/obj/item/tank/emergency/oxygen
name = "emergency oxygen tank"
@@ -167,6 +169,7 @@
icon_state = "emergency_engi"
volume = 6
gauge_cap = 3
+ worth_intrinsic = 50
/obj/item/tank/emergency/oxygen/double
name = "double emergency oxygen tank"
@@ -175,6 +178,7 @@
gauge_icon = "indicator_emergency_double"
volume = 10
gauge_cap = 3
+ worth_intrinsic = 75
/obj/item/tank/stasis/oxygen // Stasis bags need to have initial pressure within safe bounds for human atmospheric pressure (NOT breath pressure)
name = "stasis oxygen tank"
diff --git a/code/game/objects/items/weapons/tanks/tank_types/shipment.dm b/code/game/objects/items/weapons/tanks/tank_types/shipment.dm
new file mode 100644
index 000000000000..1fe6669021af
--- /dev/null
+++ b/code/game/objects/items/weapons/tanks/tank_types/shipment.dm
@@ -0,0 +1,14 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+/**
+ * Used for supply shipments
+ */
+/obj/item/tank/shipment
+ name = "logistics tank"
+ desc = "A heavy duty tank used to ship gases in logistics settings."
+
+ // todo: sprite
+
+ worth_intrinsic = 20
+ volume = 250
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 1d089502a53d..afa68ab234f6 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -19,8 +19,10 @@
//? Access - see [modules/jobs/access.dm]
/// If set, all of these accesses are needed to access this object.
+ // todo: getter / setter, enforced cached & deduped lists
var/list/req_access
/// If set, at least one of these accesses are needed to access this object.
+ // todo: getter / setter, enforced cached & deduped lists
var/list/req_one_access
//? Climbing
@@ -57,9 +59,30 @@
/// contributes to depth when we're on a turf
var/depth_projected = FALSE
- //? Economy
+ //* Economy *//
/// economic category for objects
var/economic_category_obj = ECONOMIC_CATEGORY_OBJ_DEFAULT
+ /// intrinsic worth without accounting containing reagents / materials - applies in static and dynamic mode.
+ var/worth_intrinsic = 0
+ /// intrinsic elasticity as factor, 2 = 2x easy to inflate market
+ ///
+ /// * set this to a multiple of WORTH_ELASTICITY_DEFAULT if possible.
+ var/worth_elasticity = WORTH_ELASTICITY_DEFAULT
+ /// default worth flags to use when buying
+ var/worth_buy_flags = GET_WORTH_INTRINSIC | GET_WORTH_CONTAINING
+ /// default worth flags to use when selling
+ var/worth_sell_flags = GET_WORTH_INTRINSIC | GET_WORTH_CONTAINING
+ /**
+ * * DANGER * - do not touch this variable unless you know what you are doing.
+ *
+ * This signifies that procs have a non-negligible randomization on a *freshly-spawned* instance of this object.
+ * This is not the case for most closets / lockers / crates / storage that spawn with items.
+ * In those cases, use the other variables to control its static worth.
+ *
+ * This means that things like cargo should avoid "intuiting" the value of this object
+ * through initial()'s alone.
+ */
+ var/worth_dynamic = FALSE
//? Integrity
integrity = 200
@@ -268,7 +291,11 @@
old_turf.unregister_dangerous_object(src)
new_turf.register_dangerous_object(src)
-/obj/item/proc/is_used_on(obj/O, mob/user)
+/obj/worth_contents(flags)
+ . = ..()
+ if(obj_storage?.use_worth_containing)
+ for(var/obj/item/item in obj_storage.contents())
+ . += item
/obj/proc/updateUsrDialog()
if(in_use)
diff --git a/code/game/objects/structures/crates_lockers/__closet.dm b/code/game/objects/structures/crates_lockers/__closet.dm
index 2ff7861ae679..979cae2af26c 100644
--- a/code/game/objects/structures/crates_lockers/__closet.dm
+++ b/code/game/objects/structures/crates_lockers/__closet.dm
@@ -9,6 +9,8 @@
layer = UNDER_JUNK_LAYER
armor_type = /datum/armor/object/medium
+ worth_intrinsic = 25
+
integrity = 200
integrity_max = 200
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 8c70b3be3e93..5f5d7baf0312 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
/obj/structure/closet/crate
name = "crate"
desc = "A rectangular steel crate."
@@ -11,8 +9,8 @@
use_old_icon_update = TRUE
depth_level = 8
armor_type = /datum/armor/object/medium
+ worth_intrinsic = 45
var/points_per_crate = 5
-// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //???
var/rigged = 0
/obj/structure/closet/crate/CanPass(atom/movable/AM, turf/T)
@@ -520,6 +518,7 @@
icon_state = "largemetalsecure"
redlight = "largemetalr"
greenlight = "largemetalg"
+ worth_intrinsic = 200
//closet_appearance = /singleton/closet_appearance/large_crate/secure
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index e5712db81b72..2413a5fbb816 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "densecrate"
density = 1
+ worth_intrinsic = 200
var/list/starts_with
var/storage_capacity = 2 * MOB_LARGE //This is so that someone can't pack hundreds of items in a locker/crate
//then open it in a populated area to crash clients.
@@ -107,12 +108,6 @@
desc = "It comes in a box for the consumer's sake. ..How is this lighter?"
icon_state = "vehiclecrate"
-/obj/structure/largecrate/vehicle/Initialize(mapload)
- . = ..()
- spawn(1)
- for(var/obj/O in contents)
- O.update_icon()
-
/obj/structure/largecrate/vehicle/bike
name = "spacebike crate"
starts_with = list(/obj/structure/vehiclecage/spacebike)
diff --git a/code/game/objects/structures/props/beam_prism.dm b/code/game/objects/structures/props/beam_prism.dm
index d73b843a960a..fad0ecd0328f 100644
--- a/code/game/objects/structures/props/beam_prism.dm
+++ b/code/game/objects/structures/props/beam_prism.dm
@@ -226,6 +226,7 @@
silent = TRUE
free_rotate = FALSE
anchored = FALSE
+ worth_intrinsic = 350
/obj/structure/prop/prism/reflector/attackby(obj/item/I, mob/living/user, list/params, clickchain_flags, damage_multiplier)
. = ..()
diff --git a/code/game/objects/systems/storage.dm b/code/game/objects/systems/storage.dm
index 5c32ef39c8d2..913261e1214f 100644
--- a/code/game/objects/systems/storage.dm
+++ b/code/game/objects/systems/storage.dm
@@ -33,21 +33,26 @@
/// carry weight mitigation, multiplicative.
var/weight_multiply = 1
- //* Deconstruction & Integrity
+ //* Deconstruction & Integrity *//
/// on deconstruct(method), drop on these method flags
var/drop_on_deconstruction_methods = ALL
/// locks don't work if atom is broken
var/lock_nullified_by_atom_break = FALSE
- //* Defense
+ //* Defense *//
/// pass EMPs in
var/pass_emp_inside = TRUE
/// pass EMPs in but weaken them
var/pass_emp_weaken = TRUE
- //* Filters
+ //* Economy *//
+
+ /// allow selling stuff in worth intrinsic
+ var/use_worth_containing = TRUE
+
+ //* Filters *//
/// protected var because we want to cache.
/// set to a list of typepaths to initialize it at New().
@@ -69,7 +74,7 @@
/// this is so overriding things can be easier.
VAR_PROTECTED/list/insertion_allow_typecache
- //* Interaction
+ //* Interaction *//
/// insert proposition: 'on', 'in', etc
var/insert_preposition = "in"
@@ -109,7 +114,7 @@
/// ghosts can always see inside
var/always_allow_observer_view = TRUE
- //* Limits
+ //* Limits *//
/// if set, limit to a certain volume
var/max_combined_volume
@@ -122,19 +127,19 @@
/// disallow nesting storage items of same or bigger weight class
var/disallow_equal_weight_class_storage_nesting = TRUE
- //* Locking
+ //* Locking *//
/// locked storage can't be accessed, unless show() is called with force
/// however, you can continue viewing even if it's locked.
/// use set_locked() to modify.
var/locked = FALSE
- //* Mass Operations
+ //* Mass Operations *//
/// mutex to prevent mass operation spam
var/mass_operation_interaction_mutex = FALSE
- //* Redirection
+ //* Redirection *//
/// When set, we treat this as the real parent object.
/// **Warning**: This is an advanced feature.
@@ -147,26 +152,29 @@
/// That, however, is too complex and awful, so, we just have a single redirection var now
/// if you mess it up, it is not my fault. ~silicons
///
+ /// * If you use this, you should probably set [use_worth_containing] to FALSE if it isn't logically in here.
+ /// * If you don't, double (or even infinite) selling can happen.
+ ///
/// todo: this literally doesn't work due to no Reachability hooks. please implement this properly later via reachability signal hooks.
var/atom/movable/storage_indirection/indirection
- //* Radiation
+ //* Radiation *//
/// pass clean radiation calls inside?
var/pass_clean_radiation_inside = FALSE
- //* Rendering
+ //* Rendering *//
/// update icon on item change
var/update_icon_on_item_change = FALSE
- //* State Caches
+ //* State Caches *//
/// cached combined w class
var/tmp/cached_combined_weight_class
/// cached combined volume
var/tmp/cached_combined_volume
- //* Sound Effects
+ //* Sound Effects *//
/// open / access sound passed into playsound
var/sfx_open = "rustle"
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 1e9502a15dca..b902a0a7c075 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -19,6 +19,7 @@
pickup_sound = 'sound/items/pickup/component.ogg'
origin_tech = list(TECH_MAGNET = 1)
worn_render_flags = WORN_RENDER_SLOT_NO_RENDER | WORN_RENDER_INHAND_NO_RENDER
+ worth_intrinsic = 15
var/secured = 1
var/list/attached_overlays = null
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
index 82331d03954f..72c7331a1bbc 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types.dm
@@ -12,6 +12,10 @@
/// gas group - flag
var/gas_groups = GAS_GROUP_OTHER
+ //* Economy *//
+ /// cost in thaler per mol
+ var/worth = 0
+
//* physics
/// Specific heat in J/(mol*K).
/// For chemicals that exist in real life this is the specific heat value under constant volume.
diff --git a/code/modules/atmospherics/gasmixtures/gas_types/core.dm b/code/modules/atmospherics/gasmixtures/gas_types/core.dm
index 41fe6208fd54..ab8a4341076c 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types/core.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types/core.dm
@@ -11,6 +11,7 @@
gas_groups = GAS_GROUP_CORE
default_tlv = list(16, 19, 70, 100)
+ worth = 0.05
/datum/gas/nitrogen
id = GAS_ID_NITROGEN
@@ -22,6 +23,7 @@
gas_groups = GAS_GROUP_CORE
default_tlv = list(0, 0, 135, 140)
+ worth = 0.05
/datum/gas/carbon_dioxide
id = GAS_ID_CARBON_DIOXIDE
@@ -33,6 +35,7 @@
gas_groups = GAS_GROUP_CORE
default_tlv = list(0, 0, 5, 10)
+ worth = 0.1
/datum/gas/nitrous_oxide
id = GAS_ID_NITROUS_OXIDE
@@ -47,6 +50,7 @@
gas_groups = GAS_GROUP_CORE
default_tlv = list(0, 0, 3, 7)
+ worth = 0.25
/datum/gas/hydrogen
id = GAS_ID_HYDROGEN
@@ -58,6 +62,7 @@
gas_groups = GAS_GROUP_CORE
default_tlv = list(0, 0, 0.25, 1)
+ worth = 0.25
/datum/gas/phoron
id = GAS_ID_PHORON
@@ -80,3 +85,4 @@
gas_groups = GAS_GROUP_CORE
default_tlv = list(0, 0, 0.25, 0.5)
+ worth = 0.35
diff --git a/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm b/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm
index 01e599794590..86eb5fd29bd3 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types_hardcoded.dm
@@ -7,6 +7,8 @@
gas_flags = GAS_FLAG_FUEL
+ worth = 1
+
//The following is partially stolen from Nebula
//I am not rewriting our handling of air for this, at least for now.
/datum/gas/helium
@@ -17,6 +19,8 @@
gas_flags = GAS_FLAG_FUSION_FUEL
+ worth = 1
+
/datum/gas/carbon_monoxide
id = GAS_ID_CARBON_MONOXIDE
name = "Carbon Monoxide"
@@ -29,6 +33,8 @@
//taste_description = "stale air"
//metabolism = 0.05 // As with helium.
+ worth = 1
+
/datum/gas/methyl_bromide
id = GAS_ID_METHYL_BROMIDE
name = "Methyl Bromide"
@@ -43,6 +49,8 @@
)
value = 0.25*/
+ worth = 1
+
/datum/gas/nitrodioxide
id = GAS_ID_NITROGEN_DIOXIDE
name = "Nitrogen Dioxide"
@@ -53,6 +61,8 @@
//gas_symbol_html = "NO2"
//gas_symbol = "NO2"
+ worth = 1
+
/datum/gas/nitricoxide
id = GAS_ID_NITRIC_OXIDE
name = "Nitric Oxide"
@@ -62,6 +72,8 @@
//gas_symbol_html = "NO"
//gas_symbol = "NO"
+ worth = 1
+
/datum/gas/methane
id = GAS_ID_METHANE
name = "Methane"
@@ -71,6 +83,8 @@
//gas_symbol_html = "CH4"
//gas_symbol = "CH4"
+ worth = 1
+
/datum/gas/argon
id = GAS_ID_ARGON
name = "Argon"
@@ -81,6 +95,8 @@
//gas_symbol = "Ar"
//value = 0.25
+ worth = 1
+
// If narcosis is ever simulated, krypton has a narcotic potency seven times greater than regular airmix.
/datum/gas/krypton
id = GAS_ID_KRYPTON
@@ -91,6 +107,8 @@
//gas_symbol = "Kr"
//value = 0.25
+ worth = 1
+
/datum/gas/neon
id = GAS_ID_NEON
name = "Neon"
@@ -100,6 +118,8 @@
//gas_symbol = "Ne"
//value = 0.25
+ worth = 1
+
/datum/gas/ammonia
id = GAS_ID_AMMONIA
name = "Ammonia"
@@ -115,6 +135,8 @@
//metabolism = REM * 0.5
//overdose = 5
+ worth = 1
+
/datum/gas/xenon
id = GAS_ID_XENON
name = "Xenon"
@@ -124,6 +146,8 @@
//gas_symbol = "Xe"
//value = 0.25
+ worth = 1
+
/datum/gas/chlorine
id = GAS_ID_CHLORINE
name = "Chlorine"
@@ -146,6 +170,8 @@
gas_reagent_amount = 1
gas_reagent_threshold = 0.5
+ worth = 1
+
/datum/gas/sulfur_dioxide
id = GAS_ID_SULFUR_DIOXIDE
name = "Sulfur Dioxide"
@@ -158,6 +184,8 @@
/singleton/material/gas/oxygen = 0.5
)*/
+ worth = 1
+
/datum/gas/tritium
id = GAS_ID_TRITIUM
name = "Tritium"
@@ -169,6 +197,8 @@
gas_symbol_html = "T"
gas_symbol = "T"*/
+ worth = 1
+
/datum/gas/deuterium
id = GAS_ID_DEUTERIUM
name = "Deuterium"
@@ -190,6 +220,8 @@
neutron_absorption = 5
neutron_cross_section = 3*/
+ worth = 1
+
//Special gas type that are very powerful and shouldnt be avaiable in large portions
/datum/gas/vimur
id = GAS_ID_VIMUR
@@ -199,3 +231,5 @@
visual_overlay = "vimur"
visual_threshold = 0.1
+
+ worth = 3
diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm
index bd65d68502be..c70bc68b6aa6 100644
--- a/code/modules/atmospherics/machinery/portable/canister.dm
+++ b/code/modules/atmospherics/machinery/portable/canister.dm
@@ -10,6 +10,10 @@
integrity_max = 300
integrity_failure = 100
w_class = WEIGHT_CLASS_HUGE
+ materials_base = list(
+ /datum/material/steel::id = 5 * /datum/material/steel::sheet_amount,
+ )
+ worth_intrinsic = 50
layer = TABLE_LAYER // Above catwalks, hopefully below other things
@@ -42,6 +46,13 @@
use_power = USE_POWER_OFF
var/update_flag = 0
+/obj/machinery/portable_atmospherics/canister/get_containing_worth(flags)
+ . = ..()
+ var/list/gas = air_contents.gas
+ for(var/id in gas)
+ var/datum/gas/gas_datum = global.gas_data.gases[id]
+ . += gas_datum.worth * gas[id]
+
/obj/machinery/portable_atmospherics/canister/nitrous_oxide
name = "Canister: \[N2O\]"
icon_state = "redws"
diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm
index fc9ebb05f1fd..dc3fa0c1134e 100644
--- a/code/modules/atmospherics/machinery/portable/pump.dm
+++ b/code/modules/atmospherics/machinery/portable/pump.dm
@@ -5,6 +5,8 @@
density = 1
w_class = WEIGHT_CLASS_NORMAL
+ worth_intrinsic = 275
+
var/direction_out = 0 //0 = siphoning, 1 = releasing
var/target_pressure = ONE_ATMOSPHERE
diff --git a/code/modules/cargo/supplypacks/_supplypacks.dm b/code/modules/cargo/supplypacks/_supplypacks.dm
deleted file mode 100644
index 6cdee933a28f..000000000000
--- a/code/modules/cargo/supplypacks/_supplypacks.dm
+++ /dev/null
@@ -1,207 +0,0 @@
-/**
- * supplypacks
- * these are the "bundle buys" of cargo
- * they usually ship in a crate and is used by the main
- * cargo system, as opposed to trading, but is perfectly usable
- * by anything using the spawn procs.
- */
-
-//SUPPLY PACKS
-//NOTE: only secure crate types use the access var (and are lockable)
-//NOTE: hidden packs only show up when the computer has been hacked.
-//ANOTER NOTE: Contraband is obtainable through modified supplycomp circuitboards.
-//BIG NOTE: Don't add living things to crates, that's bad, it will break the shuttle.
-//NEW NOTE: Do NOT set the price of any crates below 7 points. Doing so allows infinite points.
-//NOTE NOTE: Hidden var is now deprecated, whoever removed support for it should've removed the var altogether
-
-var/list/all_supply_groups = list("Atmospherics",
- "Costumes",
- "Engineering",
- "Hospitality",
- "Hydroponics",
- "Materials",
- "Medical",
- "Miscellaneous",
- "Munitions",
- "Reagents",
- "Reagent Cartridges",
- "Recreation",
- "Robotics",
- "Science",
- "Security",
- "Supplies",
- "Voidsuits",
- "Vehicles")
-
-/datum/supply_pack
- var/name
- var/cost
-
- // the container
- /// the type of the containier we spawn at - our contained objects will spawn in this.
- var/container_type = /obj/structure/closet/crate/plastic
- /// the name to set on our container, if any
- var/container_name
- /// the desc to set on our container, if any
- var/container_desc
-
- // the contained
- /// what we contain - list of typepaths associated to count. if no count is associated, it's assumed to be one.
- var/list/contains
-
- var/access
- var/one_access = FALSE
- var/contraband = 0
- var/group = "Miscellaneous"
-
-/**
- * instance the supply pack at a location. returns the container used.
- */
-/datum/supply_pack/proc/Instantiate(atom/loc)
- RETURN_TYPE(/atom/movable)
- . = InstanceContainer(loc)
- SetupContainer(.)
- SpawnContents(.)
-
-/**
- * creates our container
- */
-/datum/supply_pack/proc/InstanceContainer(atom/loc)
- RETURN_TYPE(/atom/movable)
- return new container_type(loc)
-
-/**
- * sets up our container, happens before objects are spawned
- */
-/datum/supply_pack/proc/SetupContainer(atom/movable/container)
- if(container_name)
- container.name = container_name
- if(container_desc)
- container.desc = container_desc
- if(isobj(container))
- var/obj/O = container
- // only objs have the concept of access
- if(access)
- if(isnum(access))
- O.req_access = list(access)
- else if(islist(access) && one_access)
- var/list/L = access // Access var is a plain var, we need a list
- O.req_one_access = L.Copy()
- O.req_access = null
- else if(islist(access) && !one_access)
- var/list/L = access
- O.req_access = L.Copy()
- else
- log_debug(SPAN_DEBUGERROR("Supply pack with invalid access restriction [access] encountered!"))
-
-/**
- * spawn an object of a certain type
- */
-/datum/supply_pack/proc/InstanceObject(path, atom/loc, ...)
- RETURN_TYPE(/atom/movable)
- return new path(arglist(args.Copy(2)))
-
-/**
- * spawwns our contents into a container. if you need special behavior like randomization, besure to modify default manifest too!
- */
-/datum/supply_pack/proc/SpawnContents(atom/loc)
- var/list/to_spawn = preprocess_contents_list()
- if(!LAZYLEN(to_spawn))
- return
- var/safety = 500
- for(var/path in to_spawn)
- var/amount = to_spawn[path] || 1
- for(var/i in 1 to amount)
- if(!--safety)
- // adminproofing
- // no, no admin would fuck this up but myself
- // hence, self-proofing
- // ~silicons
- CRASH("Ran out of safety during SpawnContents")
- InstanceObject(path, loc)
-
-/**
- * used to preprocess the contained list for spawning
- */
-/datum/supply_pack/proc/preprocess_contents_list()
- return contains.Copy()
-
-/**
- * generates our HTML manifest as a **list**
- *
- * argument is provided for container incase you want to modify based on what actually spawned
- */
-/datum/supply_pack/proc/get_html_manifest(atom/movable/container)
- RETURN_TYPE(/list)
- var/list/lines = list()
- lines += "Contents:
"
- lines += ""
- for(var/path in contains)
- var/amount = contains[path] || 1
- var/atom/movable/AM = path
- var/name = initial(AM.name)
- lines += "- [amount > 1? "[amount] [name](s)" : "[name]"]
"
- lines += "
"
- return lines
-
- // ^\s+to_chat\(world\s*,\s*"[a-zA-Z0-9 .\[\]_]*"\)\n
-
-/**
- * returns if we're random. if we are, return number of items.
- * required for old nanoui
- * this proc's existence, as well as hardcoded ui data for packs, really makes me hate life
- * but i'm not doing nanoui/tgui conversion today.
- */
-/datum/supply_pack/proc/is_random()
- return FALSE
-
-/**
- * gets a list of things to show on nanoui
- * god, i hate nanoui
- * burn this proc and is_random() with fire at some point, please.
- */
-/datum/supply_pack/proc/flattened_nanoui_manifest()
- . = list()
- for(var/path in contains)
- var/amount = contains[path] || 1
- var/atom/movable/AM = path
- var/name = initial(AM.name)
- . += "[amount > 1? "[amount] [name](s)" : "[name]"]"
-
-/**
- * randomized supplypacks
- * only x items can be ever spawned
- * weighting is equal - the list of typepaths normally spawned is treated as pick-and-take-one-of.
- *
- * maybe we should roll this into default functionality
- * question for another day, not like we aren't modular enough with this system now to do it easily.
- */
-/datum/supply_pack/randomised
- /// how many of our items at random to spawn
- var/num_contained = 1
-
-/datum/supply_pack/randomised/get_html_manifest(atom/movable/container)
- var/list/lines = list()
- lines += "Contains any [num_contained] of the following:
"
- lines += ""
- for(var/path in contains)
- var/amount = contains[path] || 1
- var/atom/movable/AM = path
- var/name = initial(AM.name)
- lines += "- [amount > 1? "[amount] [name](s)" : "[name]"]
"
- lines += "
"
- return lines
-
-/datum/supply_pack/randomised/preprocess_contents_list()
- var/list/L = list()
- // first, flatten list
- for(var/path in contains)
- L[path] = contains[path] || 1
- // pick and take
- . = list()
- for(var/i in 1 to num_contained)
- var/path = pickweight(L)
- .[path]++
-
-/datum/supply_pack/randomised/is_random()
- return num_contained
diff --git a/code/modules/cargo/supplypacks/atmospherics.dm b/code/modules/cargo/supplypacks/atmospherics.dm
deleted file mode 100644
index bfa3f8d57253..000000000000
--- a/code/modules/cargo/supplypacks/atmospherics.dm
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-* Here is where any supply packs related
-* to being atmospherics tasks live.
-*/
-
-
-/datum/supply_pack/atmos
- group = "Atmospherics"
-
-/datum/supply_pack/atmos/inflatable
- name = "Inflatable barriers"
- contains = list(/obj/item/storage/briefcase/inflatable = 3)
- cost = 20
- container_type = /obj/structure/closet/crate/engineering
- container_name = "Inflatable Barrier Crate"
-
-/datum/supply_pack/atmos/canister_empty
- name = "Empty gas canister"
- cost = 7
- container_name = "Empty gas canister crate"
- container_type = /obj/structure/largecrate
- contains = list(/obj/machinery/portable_atmospherics/canister)
-
-/datum/supply_pack/atmos/canister_air
- name = "Air canister"
- cost = 10
- container_name = "Air canister crate"
- container_type = /obj/structure/largecrate
- contains = list(/obj/machinery/portable_atmospherics/canister/air)
-
-/datum/supply_pack/atmos/canister_helium
- name = "Helium canister"
- cost = 10
- container_name = "Helium canister crate"
- container_type = /obj/structure/largecrate
- contains = list(/obj/machinery/portable_atmospherics/canister/helium)
-
-/datum/supply_pack/atmos/canister_oxygen
- name = "Oxygen canister"
- cost = 15
- container_name = "Oxygen canister crate"
- container_type = /obj/structure/largecrate
- contains = list(/obj/machinery/portable_atmospherics/canister/oxygen)
-
-/datum/supply_pack/atmos/canister_nitrogen
- name = "Nitrogen canister"
- cost = 10
- container_name = "Nitrogen canister crate"
- container_type = /obj/structure/largecrate
- contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen)
-
-/datum/supply_pack/atmos/canister_phoron
- name = "Phoron gas canister"
- cost = 60
- container_name = "Phoron gas canister crate"
- container_type = /obj/structure/closet/crate/secure/large
- access = ACCESS_ENGINEERING_ATMOS
- contains = list(/obj/machinery/portable_atmospherics/canister/phoron)
-
-/datum/supply_pack/atmos/canister_nitrous_oxide
- name = "N2O gas canister"
- cost = 15
- container_name = "N2O gas canister crate"
- container_type = /obj/structure/closet/crate/secure/large
- access = ACCESS_ENGINEERING_ATMOS
- contains = list(/obj/machinery/portable_atmospherics/canister/nitrous_oxide)
-
-/datum/supply_pack/atmos/canister_carbon_dioxide
- name = "Carbon dioxide gas canister"
- cost = 15
- container_name = "CO2 canister crate"
- container_type = /obj/structure/closet/crate/secure/large
- access = ACCESS_ENGINEERING_ATMOS
- contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide)
-
-/datum/supply_pack/atmos/air_dispenser
- contains = list(/obj/machinery/pipedispenser/orderable)
- name = "Pipe Dispenser"
- cost = 25
- container_type = /obj/structure/closet/crate/secure/large
- container_name = "Pipe Dispenser Crate"
- access = ACCESS_ENGINEERING_ATMOS
-
-/datum/supply_pack/atmos/disposals_dispenser
- contains = list(/obj/machinery/pipedispenser/disposal/orderable)
- name = "Disposals Pipe Dispenser"
- cost = 25
- container_type = /obj/structure/closet/crate/secure/large
- container_name = "Disposal Dispenser Crate"
- access = ACCESS_ENGINEERING_ATMOS
-
-/datum/supply_pack/atmos/internals
- name = "Internals crate"
- contains = list(
- /obj/item/clothing/mask/gas = 3,
- /obj/item/tank/air = 3
- )
- cost = 10
- container_type = /obj/structure/closet/crate/internals
- container_name = "Internals crate"
-
-/datum/supply_pack/atmos/evacuation
- name = "Emergency equipment"
- contains = list(
- /obj/item/storage/toolbox/emergency = 2,
- /obj/item/clothing/suit/storage/hazardvest = 2,
- /obj/item/clothing/suit/storage/vest = 2,
- /obj/item/tank/emergency/oxygen/engi = 4,
- /obj/item/clothing/suit/space/emergency = 4,
- /obj/item/clothing/head/helmet/space/emergency = 4,
- /obj/item/clothing/mask/gas = 4
- )
- cost = 35
- container_type = /obj/structure/closet/crate/internals
- container_name = "Emergency crate"
diff --git a/code/modules/cargo/supplypacks/engineering.dm b/code/modules/cargo/supplypacks/engineering.dm
deleted file mode 100644
index d5ebeb32a387..000000000000
--- a/code/modules/cargo/supplypacks/engineering.dm
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
-* Here is where any supply packs
-* related to engineering tasks live.
-*/
-
-
-/datum/supply_pack/eng
- group = "Engineering"
-
-/datum/supply_pack/eng/lightbulbs
- name = "Replacement lights"
- contains = list(/obj/item/storage/box/lights/mixed = 3)
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Replacement lights"
-
-/datum/supply_pack/eng/smescoil
- name = "Superconducting Magnetic Coil"
- contains = list(/obj/item/smes_coil)
- cost = 20
- container_type = /obj/structure/closet/crate/engineering
- container_name = "Superconducting Magnetic Coil crate"
-
-/datum/supply_pack/eng/smescoil/super_capacity
- name = "Superconducting Capacitance Coil"
- contains = list(/obj/item/smes_coil/super_capacity)
- cost = 25
- container_type = /obj/structure/closet/crate/engineering
- container_name = "Superconducting Capacitance Coil crate"
-
-/datum/supply_pack/eng/smescoil/super_io
- name = "Superconducting Transmission Coil"
- contains = list(/obj/item/smes_coil/super_io)
- cost = 25
- container_type = /obj/structure/closet/crate/engineering
- container_name = "Superconducting Transmission Coil crate"
-
-/datum/supply_pack/eng/electrical
- name = "Electrical maintenance crate"
- contains = list(
- /obj/item/storage/toolbox/electrical = 2,
- /obj/item/clothing/gloves/yellow = 2,
- /obj/item/cell = 2,
- /obj/item/cell/high = 2
- )
- cost = 10
- container_type = /obj/structure/closet/crate/engineering/electrical
- container_name = "Electrical maintenance crate"
-
-/datum/supply_pack/eng/e_welders
- name = "Electric welder crate"
- contains = list(
- /obj/item/weldingtool/electric = 3
- )
- cost = 15
- container_type = /obj/structure/closet/crate/engineering/electrical
- container_name = "Electric welder crate"
-
-/datum/supply_pack/eng/mechanical
- name = "Mechanical maintenance crate"
- contains = list(
- /obj/item/storage/belt/utility/full = 3,
- /obj/item/clothing/suit/storage/hazardvest = 3,
- /obj/item/clothing/head/welding = 2,
- /obj/item/clothing/head/hardhat
- )
- cost = 10
- container_type = /obj/structure/closet/crate/engineering
- container_name = "Mechanical maintenance crate"
-
-/datum/supply_pack/eng/fueltank
- name = "Fuel tank crate"
- contains = list(/obj/structure/reagent_dispensers/fueltank)
- cost = 10
- container_type = /obj/structure/largecrate
- container_name = "fuel tank crate"
-
-/datum/supply_pack/eng/solar
- name = "Solar Pack crate"
- contains = list(
- /obj/item/frame2/solar_panel = 21,
- /obj/item/circuitboard/solar_control,
- /obj/item/tracker_electronics,
- /obj/item/paper/solar
- )
- cost = 20
- container_type = /obj/structure/closet/crate/corporate/focalpoint
- container_name = "Solar pack crate"
-
-/datum/supply_pack/eng/engine
- name = "Emitter crate"
- contains = list(/obj/machinery/power/emitter = 2)
- cost = 10
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "Emitter crate"
- access = ACCESS_ENGINEERING_MAIN
-
-/datum/supply_pack/eng/engine/field_gen
- name = "Field Generator crate"
- contains = list(/obj/machinery/field_generator = 2)
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "Field Generator crate"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/engine/sing_gen
- name = "Singularity Generator crate"
- contains = list(/obj/machinery/the_singularitygen)
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "Singularity Generator crate"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/engine/collector
- name = "Collector crate"
- contains = list(/obj/machinery/power/rad_collector = 3)
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "collector crate"
- access = ACCESS_ENGINEERING_MAIN
-
-/datum/supply_pack/eng/engine/PA
- name = "Particle Accelerator crate"
- cost = 40
- 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,
- /obj/item/paper/particle_info
- )
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "Particle Accelerator crate"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/shield_generator
- name = "Shield Generator Construction Kit"
- contains = list(
- /obj/item/circuitboard/shield_generator,
- /obj/item/stock_parts/capacitor,
- /obj/item/stock_parts/micro_laser,
- /obj/item/smes_coil,
- /obj/item/stock_parts/console_screen,
- /obj/item/stock_parts/subspace/amplifier
- )
- cost = 80
- container_type = /obj/structure/closet/crate/engineering
- container_name = "shield generator construction kit crate"
-
-/datum/supply_pack/eng/smbig
- name = "Supermatter Core"
- contains = list(/obj/machinery/power/supermatter)
- cost = 150
- container_type = /obj/structure/closet/crate/secure/phoron
- container_name = "Supermatter crate (CAUTION)"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/teg
- contains = list(
- /obj/machinery/power/generator,
- /obj/machinery/atmospherics/component/binary/circulator = 2)
- name = "Mark I TEG + Circulators"
- cost = 35
- container_type = /obj/structure/closet/crate/secure/large
- container_name = "Mk1 TEG crate"
- access = ACCESS_ENGINEERING_MAIN
-/*
-/datum/supply_pack/eng/circulator
- contains = list(/obj/machinery/atmospherics/component/binary/circulator = 2)
- name = "Binary atmospheric circulators"
- cost = 15
- container_type = /obj/structure/closet/crate/secure/large
- container_name = "Atmospheric circulators crate"
- access = ACCESS_ENGINEERING_MAIN
-*/
-/datum/supply_pack/eng/radsuit
- contains = list(
- /obj/item/clothing/suit/radiation = 3,
- /obj/item/clothing/head/radiation = 3
- )
- name = "Radiation suits package"
- cost = 20
- container_type = /obj/structure/closet/radiation
- container_name = "Radiation suit locker"
-
-/datum/supply_pack/eng/pacman_parts
- name = "P.A.C.M.A.N. portable generator parts"
- cost = 25
- container_name = "P.A.C.M.A.N. Portable Generator Construction Kit"
- container_type = /obj/structure/closet/crate/secure/engineering
- access = ACCESS_ENGINEERING_TECHSTORAGE
- contains = list(
- /obj/item/stock_parts/micro_laser,
- /obj/item/stock_parts/capacitor,
- /obj/item/stock_parts/matter_bin,
- /obj/item/circuitboard/pacman
- )
-
-/datum/supply_pack/eng/super_pacman_parts
- name = "Super P.A.C.M.A.N. portable generator parts"
- cost = 35
- container_name = "Super P.A.C.M.A.N. portable generator construction kit"
- container_type = /obj/structure/closet/crate/secure/engineering
- access = ACCESS_ENGINEERING_TECHSTORAGE
- contains = list(
- /obj/item/stock_parts/micro_laser,
- /obj/item/stock_parts/capacitor,
- /obj/item/stock_parts/matter_bin,
- /obj/item/circuitboard/pacman/super
- )
-
-/datum/supply_pack/eng/fusion_core
- name = "R-UST Mk. 8 Tokamak fusion core crate"
- cost = 50
- container_name = "R-UST Mk. 8 Tokamak Fusion Core crate"
- container_type = /obj/structure/closet/crate/secure/engineering
- access = ACCESS_ENGINEERING_MAIN
- contains = list(
- /obj/item/book/manual/rust_engine,
- /obj/machinery/power/fusion_core,
- /obj/item/circuitboard/fusion_core_control
- )
-
-/datum/supply_pack/eng/fusion_fuel_injector
- name = "R-UST Mk. 8 fuel injector crate"
- cost = 30
- container_name = "R-UST Mk. 8 fuel injector crate"
- container_type = /obj/structure/closet/crate/secure/engineering
- access = ACCESS_ENGINEERING_MAIN
- contains = list(
- /obj/machinery/fusion_fuel_injector,
- /obj/machinery/fusion_fuel_injector,
- /obj/item/circuitboard/fusion_fuel_control
- )
-
-/datum/supply_pack/eng/gyrotron
- name = "Gyrotron crate"
- cost = 15
- container_name = "Gyrotron Crate"
- container_type = /obj/structure/closet/crate/secure/engineering
- access = ACCESS_ENGINEERING_MAIN
- contains = list(
- /obj/machinery/power/emitter/gyrotron,
- /obj/item/circuitboard/gyrotron_control
- )
-
-/datum/supply_pack/eng/fusion_fuel_compressor
- name = "Fusion Fuel Compressor circuitry crate"
- cost = 10
- container_name = "Fusion Fuel Compressor circuitry crate"
- container_type = /obj/structure/closet/crate/engineering
- contains = list(
- /obj/item/circuitboard/fusion_fuel_compressor,
- /obj/item/stock_parts/manipulator/nano = 2,
- /obj/item/stock_parts/matter_bin/super = 2,
- /obj/item/stock_parts/console_screen = 1,
- /obj/item/stack/cable_coil = 5
- )
-
-/datum/supply_pack/eng/reflector
- name = "Reflector crate"
- cost = 60
- container_name = "Reflector crate"
- container_type = /obj/structure/closet/crate/engineering
- contains = list(
- /obj/structure/prop/prism/reflector = 1
- )
-
-/datum/supply_pack/eng/tritium
- name = "Tritium crate"
- cost = 75
- container_name = "Tritium crate"
- container_type = /obj/structure/closet/crate/engineering
- contains = list(/obj/fiftyspawner/tritium)
-
-/datum/supply_pack/eng/engine/fission
- name = "Fission Starter crate"
- contains = list(/obj/machinery/power/fission,
- /obj/item/circuitboard/fission_monitor,
- /obj/item/storage/briefcase/fission/fuelmixed,
- /obj/item/storage/briefcase/fission/reflectormixed,
- /obj/item/storage/briefcase/fission/controlmixed)
- cost = 50
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "fission core crate"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/engine/fission/expansion
- name = "Fission Expansion crate"
- contains = list(/obj/item/circuitboard/fission_monitor,
- /obj/item/storage/briefcase/fission/uranium,
- /obj/item/storage/briefcase/fission/tungstencarbide,
- /obj/item/storage/briefcase/fission/boron)
- cost = 30
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "fission expansion crate"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/thermoregulator
- contains = list(/obj/machinery/power/thermoregulator)
- name = "Thermal Regulator"
- cost = 30
- container_type = /obj/structure/closet/crate/large
- container_name = "thermal regulator crate"
-
-/datum/supply_pack/eng/radsuit
- contains = list(
- /obj/item/clothing/suit/radiation = 3,
- /obj/item/clothing/head/radiation = 3
- )
-
-/datum/supply_pack/eng/algae
- contains = list(/obj/item/stack/material/algae/ten)
- name = "Algae Sheets (10)"
- cost = 20
- container_type = /obj/structure/closet/crate
- container_name = "algae sheets crate"
-
-/datum/supply_pack/eng/engine/tesla_gen
- name = "Tesla Generator crate"
- contains = list(/obj/machinery/the_singularitygen/tesla)
- container_type = /obj/structure/closet/crate/secure/engineering
- container_name = "Tesla Generator crate"
- access = ACCESS_ENGINEERING_CE
-
-/datum/supply_pack/eng/point_defense_cannon_circuit
- name = "Point Defense Turret Circuit"
- contains = list(/obj/item/circuitboard/pointdefense = 2)
- cost = 20
- container_type = /obj/structure/closet/crate/corporate/heph
- container_name = "point defense turret circuit crate"
-
-/datum/supply_pack/eng/point_defense_control_circuit
- name = "Point Defense Controller Circuit"
- contains = list(/obj/item/circuitboard/pointdefense_control = 1)
- cost = 30
- container_type = /obj/structure/closet/crate/corporate/heph
- container_name = "point defense mainframe circuit crate"
-
-/datum/supply_pack/eng/portable_pump
- name = "Portable Pump (2x)"
- contains = list(
- /obj/machinery/portable_atmospherics/powered/pump = 2
- )
- cost = 10
- container_name = "portable pumps crate"
diff --git a/code/modules/cargo/supplypacks/hydroponics.dm b/code/modules/cargo/supplypacks/hydroponics.dm
deleted file mode 100644
index f531c2e8d474..000000000000
--- a/code/modules/cargo/supplypacks/hydroponics.dm
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-* Here is where any supply packs
-* related to hydroponics tasks live.
-*/
-
-
-/datum/supply_pack/hydro
- group = "Hydroponics"
-
-/datum/supply_pack/hydro/monkey
- name = "Monkey crate"
- contains = list (/obj/item/storage/box/monkeycubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Monkey crate"
-
-/datum/supply_pack/hydro/farwa
- name = "Farwa crate"
- contains = list (/obj/item/storage/box/monkeycubes/farwacubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Farwa crate"
-
-/datum/supply_pack/hydro/neara
- name = "Neaera crate"
- contains = list (/obj/item/storage/box/monkeycubes/neaeracubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Neaera crate"
-
-/datum/supply_pack/hydro/stok
- name = "Stok crate"
- contains = list (/obj/item/storage/box/monkeycubes/stokcubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Stok crate"
-
-/datum/supply_pack/hydro/lisa
- name = "Corgi Crate"
- contains = list()
- cost = 50
- container_type = /obj/structure/largecrate/animal/corgi
- container_name = "Corgi Crate"
-
-/datum/supply_pack/hydro/cat
- name = "Cat Crate"
- contains = list()
- cost = 45
- container_type = /obj/structure/largecrate/animal/cat
- container_name = "Cat Crate"
-
-/datum/supply_pack/hydro/hydroponics
- name = "Hydroponics Supply Crate"
- contains = list(
- /obj/item/reagent_containers/spray/plantbgone = 4,
- /obj/item/reagent_containers/glass/bottle/ammonia = 2,
- /obj/item/material/knife/machete/hatchet,
- /obj/item/material/minihoe,
- /obj/item/plant_analyzer,
- /obj/item/clothing/gloves/botanic_leather,
- /obj/item/clothing/suit/storage/apron,
- /obj/item/material/minihoe,
- /obj/item/storage/box/botanydisk
- )
- cost = 20
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Hydroponics crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/cow
- name = "Cow crate"
- cost = 25
- container_type = /obj/structure/largecrate/animal/cow
- container_name = "Cow crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/goat
- name = "Goat crate"
- cost = 25
- container_type = /obj/structure/largecrate/animal/goat
- container_name = "Goat crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/chicken
- name = "Chicken crate"
- cost = 25
- container_type = /obj/structure/largecrate/animal/chick
- container_name = "Chicken crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/seeds
- name = "Seeds crate"
- contains = list(
- /obj/item/seeds/chiliseed,
- /obj/item/seeds/berryseed,
- /obj/item/seeds/cornseed,
- /obj/item/seeds/eggplantseed,
- /obj/item/seeds/tomatoseed,
- /obj/item/seeds/appleseed,
- /obj/item/seeds/soyaseed,
- /obj/item/seeds/wheatseed,
- /obj/item/seeds/carrotseed,
- /obj/item/seeds/harebell,
- /obj/item/seeds/lemonseed,
- /obj/item/seeds/orangeseed,
- /obj/item/seeds/grassseed,
- /obj/item/seeds/sunflowerseed,
- /obj/item/seeds/chantermycelium,
- /obj/item/seeds/potatoseed,
- /obj/item/seeds/sugarcaneseed
- )
- cost = 10
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Seeds crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/weedcontrol
- name = "Weed control crate"
- contains = list(
- /obj/item/material/knife/machete/hatchet = 2,
- /obj/item/reagent_containers/spray/plantbgone = 4,
- /obj/item/clothing/mask/gas = 2,
- /obj/item/grenade/chem_grenade/antiweed = 2,
- /obj/item/material/twohanded/fireaxe/scythe
- )
- cost = 45
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Weed control crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/watertank
- name = "Water tank crate"
- contains = list(/obj/structure/reagent_dispensers/watertank)
- cost = 10
- container_type = /obj/structure/largecrate
- container_name = "water tank crate"
-
-/datum/supply_pack/hydro/bee_keeper
- name = "Beekeeping crate"
- contains = list(
- /obj/item/clothing/head/beekeeper,
- /obj/item/clothing/suit/beekeeper,
- /obj/item/beehive_assembly,
- /obj/item/bee_smoker,
- /obj/item/honey_frame = 5,
- /obj/item/bee_pack
- )
- cost = 40
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Beekeeping crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/tray
- name = "Empty hydroponics trays"
- cost = 50
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Hydroponics tray crate"
- contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0} = 3)
- access = ACCESS_GENERAL_BOTANY
-
-
-/datum/supply_pack/hydro/diycarpotox
- name = "Gather-It-Yourself Carpotoxin"
- cost = 30
- container_type = /obj/structure/largecrate/animal/carp
- container_name = "DIY carpotoxin crate"
-
-/datum/supply_pack/hydro/diyspidertox
- name = "Gather-It-Yourself Spider Toxin"
- cost = 30
- container_type = /obj/structure/largecrate/animal/spiders
- container_name = "DIY spider toxin crate"
-
-/datum/supply_pack/hydro/birds
- name = "Birds Crate"
- cost = 200 //You're getting 22 birds. Of course it's going to be a lot!
- container_type = /obj/structure/largecrate/birds
- container_name = "Bird crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/sobaka
- name = "Sobaka crate"
- contains = list (/obj/item/storage/box/monkeycubes/sobakacubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Sobaka crate"
-
-/datum/supply_pack/hydro/saru
- name = "Saru crate"
- contains = list (/obj/item/storage/box/monkeycubes/sarucubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Saru crate"
-
-/datum/supply_pack/hydro/sparra
- name = "Sparra crate"
- contains = list (/obj/item/storage/box/monkeycubes/sparracubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Sparra crate"
-
-/datum/supply_pack/hydro/wolpin
- name = "Wolpin crate"
- contains = list (/obj/item/storage/box/monkeycubes/wolpincubes)
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Wolpin crate"
-
-/datum/supply_pack/hydro/fennec
- name = "Fennec crate"
- cost = 60 //considering a corgi crate is 50, and you get two fennecs
- container_type = /obj/structure/largecrate/animal/fennec
- container_name = "Fennec crate"
-
-/datum/supply_pack/hydro/fish
- name = "Fish supply crate"
- contains = list(
- /obj/item/reagent_containers/food/snacks/lobster = 6,
- /obj/item/reagent_containers/food/snacks/shrimp = 6,
- /obj/item/reagent_containers/food/snacks/cuttlefish = 8,
- /obj/item/reagent_containers/food/snacks/sliceable/monkfish = 1
- )
- cost = 20
- container_type = /obj/structure/closet/crate/freezer
- container_name = "Fish crate"
-
-/datum/supply_pack/hydro/woolie
- name = "Woolie crate"
- cost = 50
- container_type = /obj/structure/largecrate/animal/woolie
- container_name = "Woolie crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/icegoat
- name = "Glacicorn crate"
- cost = 50
- container_type = /obj/structure/largecrate/animal/icegoat
- container_name = "Glacicorn crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/furnacegrub
- name = "Furnace Grub crate"
- cost = 40
- container_type = /obj/structure/largecrate/animal/furnacegrub
- container_name = "Furnace Grub crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/ironwood
- name = "Ironwood Saplings"
- contains = list(
- /obj/item/seeds/ironwood = 6
- )
- cost = 25
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Ironwood Sapling Samples"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/creeper
- name = "Creeper Sanghum"
- contains = list(
- /obj/item/seeds/creepermoss = 6
- )
- cost = 25
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Creeper Sanghum Seeds"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/hydro/fungiwheat
- name = "Fungiwheat"
- contains = list(
- /obj/item/seeds/fungiwheat = 6
- )
- cost = 25
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Fungiwheat Spores"
- access = ACCESS_GENERAL_BOTANY
-
diff --git a/code/modules/cargo/supplypacks/medical.dm b/code/modules/cargo/supplypacks/medical.dm
deleted file mode 100644
index faea4af16db4..000000000000
--- a/code/modules/cargo/supplypacks/medical.dm
+++ /dev/null
@@ -1,447 +0,0 @@
-/*
-* Here is where any supply packs
-* related to medical tasks live.
-*/
-
-
-/datum/supply_pack/med
- group = "Medical"
-
-/datum/supply_pack/med/medical
- name = "Medical crate"
- contains = list(
- /obj/item/storage/firstaid/regular,
- /obj/item/storage/firstaid/fire,
- /obj/item/storage/firstaid/toxin,
- /obj/item/storage/firstaid/o2,
- /obj/item/storage/firstaid/adv,
- /obj/item/reagent_containers/glass/bottle/antitoxin,
- /obj/item/reagent_containers/glass/bottle/inaprovaline,
- /obj/item/reagent_containers/glass/bottle/stoxin,
- /obj/item/storage/box/syringes,
- /obj/item/storage/box/autoinjectors
- )
- cost = 10
- container_type = /obj/structure/closet/crate/corporate/nanomed
- container_name = "Medical crate"
-
-/datum/supply_pack/med/bloodpack
- name = "BloodPack crate"
- contains = list(/obj/item/storage/box/bloodpacks = 3)
- cost = 10
- container_type = /obj/structure/closet/crate/medical
- container_name = "BloodPack crate"
-
-/datum/supply_pack/med/bodybag
- name = "Body bag crate"
- contains = list(/obj/item/storage/box/bodybags = 3)
- cost = 10
- container_type = /obj/structure/closet/crate/medical
- container_name = "Body bag crate"
-
-/datum/supply_pack/med/cryobag
- name = "Stasis bag crate"
- contains = list(/obj/item/bodybag/cryobag = 3)
- cost = 40
- container_type = /obj/structure/closet/crate/medical
- container_name = "Stasis bag crate"
-
-/datum/supply_pack/med/surgery
- name = "Surgery crate"
- contains = list(
- /obj/item/surgical/cautery,
- /obj/item/surgical/surgicaldrill,
- /obj/item/clothing/mask/breath/medical,
- /obj/item/tank/anesthetic,
- /obj/item/surgical/FixOVein,
- /obj/item/surgical/hemostat,
- /obj/item/surgical/scalpel,
- /obj/item/surgical/bonegel,
- /obj/item/surgical/retractor,
- /obj/item/surgical/bonesetter,
- /obj/item/surgical/circular_saw
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Surgery crate"
- access = ACCESS_MEDICAL_MAIN
-
-/datum/supply_pack/med/deathalarm
- name = "Death Alarm crate"
- contains = list(
- /obj/item/storage/box/cdeathalarm_kit,
- /obj/item/storage/box/cdeathalarm_kit
- )
- cost = 40
- container_type = /obj/structure/closet/crate/corporate/veymed
- container_name = "Death Alarm crate"
- access = ACCESS_MEDICAL_MAIN
-
-/datum/supply_pack/med/clotting
- name = "Clotting Medicine crate"
- contains = list(
- /obj/item/storage/firstaid/clotting
- )
- cost = 100
- container_type = /obj/structure/closet/crate/secure/corporate/zenghu
- container_name = "Clotting Medicine crate"
- access = ACCESS_MEDICAL_MAIN
-
-/datum/supply_pack/med/sterile
- name = "Sterile equipment crate"
- contains = list(
- /obj/item/clothing/under/rank/medical/scrubs/green = 2,
- /obj/item/clothing/head/surgery/green = 2,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves,
- /obj/item/storage/belt/medical = 3
- )
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Sterile equipment crate"
-
-/datum/supply_pack/med/extragear
- name = "Medical surplus equipment"
- contains = list(
- /obj/item/storage/belt/medical = 3,
- /obj/item/clothing/glasses/hud/health = 3,
- /obj/item/radio/headset/headset_med/alt = 3,
- /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Medical surplus equipment"
- access = ACCESS_MEDICAL_MAIN
-
-/datum/supply_pack/med/cmogear
- name = "Chief medical officer equipment"
- contains = list(
- /obj/item/storage/belt/medical,
- /obj/item/radio/headset/heads/cmo,
- /obj/item/clothing/under/rank/chief_medical_officer,
- /obj/item/storage/hypokit/advanced/cmo,
- /obj/item/clothing/accessory/stethoscope,
- /obj/item/clothing/glasses/hud/health,
- /obj/item/clothing/suit/storage/toggle/labcoat/cmo,
- /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
- /obj/item/clothing/mask/surgical,
- /obj/item/clothing/shoes/white,
- /obj/item/cartridge/cmo,
- /obj/item/clothing/gloves/sterile/latex,
- /obj/item/healthanalyzer,
- /obj/item/flashlight/pen,
- /obj/item/reagent_containers/syringe
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Chief medical officer equipment"
- access = ACCESS_MEDICAL_CMO
-
-/datum/supply_pack/med/doctorgear
- name = "Medical Doctor equipment"
- contains = list(
- /obj/item/storage/belt/medical,
- /obj/item/radio/headset/headset_med,
- /obj/item/clothing/under/rank/medical,
- /obj/item/clothing/accessory/stethoscope,
- /obj/item/clothing/glasses/hud/health,
- /obj/item/clothing/suit/storage/toggle/labcoat,
- /obj/item/clothing/mask/surgical,
- /obj/item/storage/firstaid/adv,
- /obj/item/clothing/shoes/white,
- /obj/item/cartridge/medical,
- /obj/item/clothing/gloves/sterile/latex,
- /obj/item/healthanalyzer,
- /obj/item/flashlight/pen,
- /obj/item/reagent_containers/syringe
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Medical Doctor equipment"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/chemistgear
- name = "Chemist equipment"
- contains = list(
- /obj/item/storage/box/beakers,
- /obj/item/radio/headset/headset_med,
- /obj/item/storage/box/autoinjectors,
- /obj/item/clothing/under/rank/chemist,
- /obj/item/clothing/glasses/science,
- /obj/item/clothing/suit/storage/toggle/labcoat/chemist,
- /obj/item/clothing/mask/surgical,
- /obj/item/clothing/shoes/white,
- /obj/item/cartridge/chemistry,
- /obj/item/clothing/gloves/sterile/latex,
- /obj/item/reagent_containers/dropper,
- /obj/item/healthanalyzer,
- /obj/item/storage/box/pillbottles,
- /obj/item/storage/box/syringes,
- /obj/item/storage/hypokit,
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Chemist equipment"
- access = ACCESS_MEDICAL_CHEMISTRY
-
-/datum/supply_pack/med/paramedicgear
- name = "Paramedic equipment"
- contains = list(
- /obj/item/storage/belt/medical/emt,
- /obj/item/radio/headset/headset_med,
- /obj/item/clothing/under/rank/medical/scrubs/black,
- /obj/item/clothing/accessory/armband/medblue,
- /obj/item/clothing/glasses/hud/health,
- /obj/item/clothing/suit/storage/toggle/labcoat/emt,
- /obj/item/clothing/under/rank/medical/paramedic,
- /obj/item/clothing/suit/storage/toggle/fr_jacket,
- /obj/item/clothing/mask/gas,
- /obj/item/clothing/under/rank/medical/paramedic,
- /obj/item/clothing/accessory/stethoscope,
- /obj/item/storage/firstaid/adv,
- /obj/item/clothing/shoes/boots/jackboots,
- /obj/item/clothing/gloves/sterile/latex,
- /obj/item/healthanalyzer,
- /obj/item/cartridge/medical,
- /obj/item/flashlight/pen,
- /obj/item/clothing/accessory/storage/white_vest,
- /obj/item/storage/hypokit,
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Paramedic equipment"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/psychiatristgear
- name = "Psychiatrist equipment"
- contains = list(
- /obj/item/clothing/under/rank/psych,
- /obj/item/radio/headset/headset_med,
- /obj/item/clothing/under/rank/psych/turtleneck,
- /obj/item/clothing/shoes/laceup,
- /obj/item/clothing/suit/storage/toggle/labcoat,
- /obj/item/clothing/shoes/white,
- /obj/item/clipboard,
- /obj/item/folder/white,
- /obj/item/pen,
- /obj/item/cartridge/medical
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Psychiatrist equipment"
- access = ACCESS_MEDICAL_PSYCH
-
-/datum/supply_pack/med/medicalscrubs
- name = "Medical scrubs"
- contains = list(
- /obj/item/clothing/shoes/white = 3,,
- /obj/item/clothing/under/rank/medical/scrubs = 3,
- /obj/item/clothing/under/rank/medical/scrubs/green = 3,
- /obj/item/clothing/under/rank/medical/scrubs/purple = 3,
- /obj/item/clothing/under/rank/medical/scrubs/black = 3,
- /obj/item/clothing/head/surgery = 3,
- /obj/item/clothing/head/surgery/purple = 3,
- /obj/item/clothing/head/surgery/blue = 3,
- /obj/item/clothing/head/surgery/green = 3,
- /obj/item/clothing/head/surgery/black = 3,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Medical scrubs crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/autopsy
- name = "Autopsy equipment"
- contains = list(
- /obj/item/folder/white,
- /obj/item/camera,
- /obj/item/camera_film = 2,
- /obj/item/autopsy_scanner,
- /obj/item/surgical/scalpel,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves,
- /obj/item/pen
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Autopsy equipment crate"
- access = ACCESS_MEDICAL_MORGUE
-
-/datum/supply_pack/med/medicaluniforms
- name = "Medical uniforms"
- contains = list(
- /obj/item/clothing/shoes/white = 3,
- /obj/item/clothing/under/rank/chief_medical_officer,
- /obj/item/clothing/under/rank/geneticist,
- /obj/item/clothing/under/rank/virologist,
- /obj/item/clothing/under/rank/nursesuit,
- /obj/item/clothing/under/rank/nurse,
- /obj/item/clothing/under/rank/orderly,
- /obj/item/clothing/under/rank/medical = 3,
- /obj/item/clothing/under/rank/medical/paramedic = 3,
- /obj/item/clothing/suit/storage/toggle/labcoat = 3,
- /obj/item/clothing/suit/storage/toggle/labcoat/cmo,
- /obj/item/clothing/suit/storage/toggle/labcoat/emt,
- /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt,
- /obj/item/clothing/suit/storage/toggle/labcoat/genetics,
- /obj/item/clothing/suit/storage/toggle/labcoat/virologist,
- /obj/item/clothing/suit/storage/toggle/labcoat/chemist,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Medical uniform crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/medicalbiosuits
- name = "Medical biohazard gear"
- contains = list(
- /obj/item/clothing/head/bio_hood = 3,
- /obj/item/clothing/suit/bio_suit = 3,
- /obj/item/clothing/head/bio_hood/virology = 2,
- /obj/item/clothing/suit/bio_suit/cmo,
- /obj/item/clothing/head/bio_hood/cmo,
- /obj/item/clothing/mask/gas = 5,
- /obj/item/tank/oxygen = 5,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Medical biohazard equipment"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/portablefreezers
- name = "Portable freezers crate"
- contains = list(/obj/item/storage/box/freezer = 7)
- cost = 25
- container_type = /obj/structure/closet/crate/secure
- container_name = "Portable freezers"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/virus
- name = "Virus sample crate"
- contains = list(/obj/item/virusdish/random = 4)
- cost = 25
- container_type = /obj/structure/closet/crate/secure
- container_name = "Virus sample crate"
- access = ACCESS_MEDICAL_CMO
-
-/datum/supply_pack/med/defib
- name = "Defibrillator crate"
- contains = list(/obj/item/defib_kit = 2)
- cost = 30
- container_type = /obj/structure/closet/crate/medical
- container_name = "Defibrillator crate"
-
-/datum/supply_pack/med/distillery
- name = "Chemical distiller crate"
- contains = list(/obj/machinery/portable_atmospherics/powered/reagent_distillery = 1)
- cost = 175
- container_type = /obj/structure/largecrate
- container_name = "Chemical distiller crate"
-
-/datum/supply_pack/med/advdistillery
- name = "Industrial Chemical distiller crate"
- contains = list(/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial = 1)
- cost = 250
- container_type = /obj/structure/largecrate
- container_name = "Industrial Chemical distiller crate"
-
-/datum/supply_pack/med/oxypump
- name = "Oxygen pump crate"
- contains = list(/obj/machinery/oxygen_pump/mobile = 1)
- cost = 125
- container_type = /obj/structure/largecrate
- container_name = "Oxygen pump crate"
-
-/datum/supply_pack/med/anestheticpump
- name = "Anesthetic pump crate"
- contains = list(/obj/machinery/oxygen_pump/mobile/anesthetic = 1)
- cost = 130
- container_type = /obj/structure/largecrate
- container_name = "Anesthetic pump crate"
-
-/datum/supply_pack/med/stablepump
- name = "Portable stabilizer crate"
- contains = list(/obj/machinery/oxygen_pump/mobile/stabilizer = 1)
- cost = 175
- container_type = /obj/structure/largecrate
- container_name = "Portable stabilizer crate"
-
-/datum/supply_pack/med/medicalbiosuits
- contains = list(
- /obj/item/clothing/head/bio_hood/scientist = 3,
- /obj/item/clothing/suit/bio_suit/scientist = 3,
- /obj/item/clothing/suit/bio_suit/virology = 3,
- /obj/item/clothing/head/bio_hood/virology = 3,
- /obj/item/clothing/suit/bio_suit/cmo,
- /obj/item/clothing/head/bio_hood/cmo,
- /obj/item/clothing/shoes/white = 7,
- /obj/item/clothing/mask/gas = 7,
- /obj/item/tank/oxygen = 7,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves
- )
- cost = 40
-
-/datum/supply_pack/med/virologybiosuits
- name = "Virology biohazard gear"
- contains = list(
- /obj/item/clothing/suit/bio_suit/virology = 3,
- /obj/item/clothing/head/bio_hood/virology = 3,
- /obj/item/clothing/mask/gas = 3,
- /obj/item/tank/oxygen = 3,
- /obj/item/storage/box/masks,
- /obj/item/storage/box/gloves
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure
- container_name = "Virology biohazard equipment"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/virus
- name = "Virus sample crate"
- contains = list(/obj/item/virusdish/random = 4)
- cost = 25
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Virus sample crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-
-/datum/supply_pack/med/bloodpack
- container_type = /obj/structure/closet/crate/medical/blood
-
-/datum/supply_pack/med/compactdefib
- name = "Compact Defibrillator crate"
- contains = list(/obj/item/defib_kit/compact = 1)
- cost = 90
- container_type = /obj/structure/closet/crate/secure/corporate/nanomed
- container_name = "Compact Defibrillator crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/med/medigun
- name = "Cell-Loaded Medigun crate"
- contains = list(
- /obj/item/gun/ballistic/cell_loaded/medical = 1,
- /obj/item/ammo_magazine/cell_mag/medical = 1
- )
- cost = 250
- container_type = /obj/structure/closet/crate/secure/corporate/veymed
- container_name = "Cell-Loaded Medigun crate"
- access = ACCESS_MEDICAL_CMO
-
-/datum/supply_pack/med/medigun_cells
- name = "Cell-Loaded Medigun Cell Pack crate"
- contains = list(
- /obj/item/ammo_casing/microbattery/medical/brute = 3,
- /obj/item/ammo_casing/microbattery/medical/burn = 3,
- /obj/item/ammo_casing/microbattery/medical/stabilize = 3
- )
- cost = 100
- container_type = /obj/structure/closet/crate/secure/corporate/veymed
- container_name = "Cell-Loaded Medigun Cell Pack crate"
- access = ACCESS_MEDICAL_CMO
diff --git a/code/modules/cargo/supplypacks/misc.dm b/code/modules/cargo/supplypacks/misc.dm
deleted file mode 100644
index c2736675534b..000000000000
--- a/code/modules/cargo/supplypacks/misc.dm
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
-* Here is where any supply packs
-* that don't belong elsewhere live.
-*/
-
-/datum/supply_pack/misc
- group = "Miscellaneous"
-
-/datum/supply_pack/randomised/misc
- group = "Miscellaneous"
-
-/datum/supply_pack/randomised/misc/card_packs
- num_contained = 5
- contains = list(
- /obj/item/pack/cardemon,
- /obj/item/pack/spaceball,
- /obj/item/deck/holder
- )
- name = "Trading Card Crate"
- cost = 10
- container_type = /obj/structure/closet/crate/corporate/allico
- container_name = "cards crate"
-
-/datum/supply_pack/randomised/misc/dnd
- num_contained = 4
- contains = list(
- /obj/item/toy/character/alien,
- /obj/item/toy/character/warrior,
- /obj/item/toy/character/cleric,
- /obj/item/toy/character/thief,
- /obj/item/toy/character/wizard,
- /obj/item/toy/character/voidone,
- /obj/item/toy/character/lich
- )
- name = "Miniatures Crate"
- cost = 200
- container_type = /obj/structure/closet/crate/corporate/allico
- container_name = "Miniature Crate"
-
-/datum/supply_pack/randomised/misc/plushies
- num_contained = 5
- contains = list(
- /obj/item/toy/plushie/nymph,
- /obj/item/toy/plushie/mouse,
- /obj/item/toy/plushie/kitten,
- /obj/item/toy/plushie/lizard,
- /obj/item/toy/plushie/spider,
- /obj/item/toy/plushie/farwa,
- /obj/item/toy/plushie/corgi,
- /obj/item/toy/plushie/girly_corgi,
- /obj/item/toy/plushie/robo_corgi,
- /obj/item/toy/plushie/octopus,
- /obj/item/toy/plushie/face_hugger,
- /obj/item/toy/plushie/red_fox,
- /obj/item/toy/plushie/black_fox,
- /obj/item/toy/plushie/marble_fox,
- /obj/item/toy/plushie/blue_fox,
- /obj/item/toy/plushie/coffee_fox,
- /obj/item/toy/plushie/pink_fox,
- /obj/item/toy/plushie/purple_fox,
- /obj/item/toy/plushie/crimson_fox,
- /obj/item/toy/plushie/deer,
- /obj/item/toy/plushie/black_cat,
- /obj/item/toy/plushie/grey_cat,
- /obj/item/toy/plushie/white_cat,
- /obj/item/toy/plushie/orange_cat,
- /obj/item/toy/plushie/siamese_cat,
- /obj/item/toy/plushie/tabby_cat,
- /obj/item/toy/plushie/tuxedo_cat,
- /obj/item/toy/plushie/squid/green,
- /obj/item/toy/plushie/squid/mint,
- /obj/item/toy/plushie/squid/blue,
- /obj/item/toy/plushie/squid/orange,
- /obj/item/toy/plushie/squid/yellow,
- /obj/item/toy/plushie/squid/pink
- )
- name = "Plushies Crate"
- cost = 15
- container_type = /obj/structure/closet/crate/corporate/allico
- container_name = "Plushies Crate"
-
-/datum/supply_pack/misc/eftpos
- contains = list(/obj/item/eftpos)
- name = "EFTPOS scanner"
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "EFTPOS crate"
-
-/datum/supply_pack/misc/chaplaingear
- name = "Chaplain equipment"
- contains = list(
- /obj/item/clothing/under/rank/chaplain,
- /obj/item/clothing/shoes/black,
- /obj/item/clothing/suit/nun,
- /obj/item/clothing/head/nun_hood,
- /obj/item/clothing/suit/storage/hooded/chaplain_hoodie,
- /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout,
- /obj/item/clothing/suit/holidaypriest,
- /obj/item/clothing/under/wedding/bride_white,
- /obj/item/storage/backpack/cultpack,
- /obj/item/storage/fancy/candle_box = 3,
- /obj/item/reagent_containers/food/drinks/bottle/holywater
- )
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Chaplain equipment crate"
-
-/datum/supply_pack/misc/hoverpod
- name = "Hoverpod Shipment"
- contains = list()
- cost = 80
- container_type = /obj/structure/largecrate/hoverpod
- container_name = "Hoverpod Crate"
-
-/datum/supply_pack/randomised/misc/webbing
- name = "Webbing crate"
- num_contained = 4
- contains = list(
- /obj/item/clothing/accessory/storage/black_vest,
- /obj/item/clothing/accessory/storage/brown_vest,
- /obj/item/clothing/accessory/storage/white_vest,
- /obj/item/clothing/accessory/storage/black_drop_pouches,
- /obj/item/clothing/accessory/storage/brown_drop_pouches,
- /obj/item/clothing/accessory/storage/white_drop_pouches,
- /obj/item/clothing/accessory/storage/webbing
- )
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Webbing crate"
-
-/datum/supply_pack/misc/holoplant
- name = "Holoplant Pot"
- contains = list(/obj/machinery/holoplant/shipped)
- cost = 15
- container_type = /obj/structure/closet/crate
- container_name = "Holoplant crate"
-
-/datum/supply_pack/misc/glucose_hypos
- name = "Glucose Hypoinjectors"
- contains = list(
- /obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5
- )
- cost = 25
- container_type = /obj/structure/closet/crate
- container_name = "Glucose Hypo Crate"
-
-/datum/supply_pack/misc/mre_rations
- // num_contained = 6 i'm just commenting this out because whoever made this should have looked and seen that this doesn't work for non randomized crates
- // screw you for causing me a compile error
- name = "Emergency - MREs"
- contains = list(
- /obj/item/storage/single_use/mre,
- /obj/item/storage/single_use/mre/menu2,
- /obj/item/storage/single_use/mre/menu3,
- /obj/item/storage/single_use/mre/menu4,
- /obj/item/storage/single_use/mre/menu5,
- /obj/item/storage/single_use/mre/menu6,
- /obj/item/storage/single_use/mre/menu7,
- /obj/item/storage/single_use/mre/menu8,
- /obj/item/storage/single_use/mre/menu9,
- /obj/item/storage/single_use/mre/menu10,
- )
- cost = 50
- container_type = /obj/structure/closet/crate/corporate/centauri
- container_name = "ready to eat rations"
-
-/datum/supply_pack/misc/paste_rations
- name = "Emergency - Paste"
- contains = list(
- /obj/item/storage/single_use/mre/menu11 = 2,
- )
- cost = 25
- container_type = /obj/structure/closet/crate/corporate/centauri
- container_name = "emergency rations"
-
-/datum/supply_pack/misc/medical_rations
- name = "Emergency - VitaPaste"
- contains = list(
- /obj/item/storage/single_use/mre/menu13 = 2,
- )
- cost = 40
- container_type = /obj/structure/closet/crate/corporate/centauri
- container_name = "emergency rations"
-
-/datum/supply_pack/misc/beltminer
- name = "Belt-miner gear crate"
- contains = list(
- /obj/item/gun/energy/particle = 2,
- /obj/item/cell/device/weapon = 2,
- /obj/item/storage/firstaid/regular = 1,
- /obj/item/gps = 2,
- /obj/item/storage/box/traumainjectors = 1
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/grayson
- container_name = "Belt-miner gear crate"
- access = ACCESS_SUPPLY_MINE
-
-/datum/supply_pack/misc/eva_rig
- name = "eva hardsuit (empty)"
- contains = list(
- /obj/item/hardsuit/eva = 1
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "eva hardsuit crate"
- access = list(ACCESS_SUPPLY_MINE,
- ACCESS_COMMAND_EVA,
- ACCESS_GENERAL_EXPLORER,
- ACCESS_GENERAL_PILOT)
- one_access = TRUE
-
-/datum/supply_pack/misc/mining_rig
- name = "industrial hardsuit (empty)"
- contains = list(
- /obj/item/hardsuit/industrial = 1
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/corporate/grayson
- container_name = "industrial hardsuit crate"
- access = list(ACCESS_SUPPLY_MINE,
- ACCESS_COMMAND_EVA)
- one_access = TRUE
-
-/datum/supply_pack/misc/medical_rig
- name = "medical hardsuit (empty)"
- contains = list(
- /obj/item/hardsuit/medical = 1
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/corporate/veymed
- container_name = "medical hardsuit crate"
- access = ACCESS_MEDICAL_MAIN
-
-/datum/supply_pack/misc/phoronoid
- name = "Spare Phoronoid containment suits"
- contains = list(
- /obj/item/clothing/suit/space/plasman = 3,
- /obj/item/clothing/head/helmet/space/plasman = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/tank/vox = 3,
- )
- cost = 40
- container_name = "spare phoronoid suits"
-
-/datum/supply_pack/misc/security_rig
- name = "hazard hardsuit (empty)"
- contains = list(
- /obj/item/hardsuit/hazard = 1
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "hazard hardsuit crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/misc/science_rig
- name = "ami hardsuit (empty)"
- contains = list(
- /obj/item/hardsuit/hazmat = 1
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "ami hardsuit crate"
- access = ACCESS_SCIENCE_RD
-
-/datum/supply_pack/misc/ce_rig
- name = "advanced hardsuit (empty)"
- contains = list(
- /obj/item/hardsuit/ce = 1
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/corporate/aether
- container_name = "advanced hardsuit crate"
- access = ACCESS_ENGINEERING_CE
-
-
-/datum/supply_pack/misc/colored_lights
- name = "Colored Lights Bundle"
- contains = list(
- /obj/item/storage/box/lights/bulbs_colored = 2,
- /obj/item/storage/box/lights/tubes_colored = 2,
- /obj/item/storage/box/lights/mixed_colored = 1
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "Colored Lights crate"
-
-/datum/supply_pack/misc/neon_lights
- name = "Neon Lights Bundle"
- contains = list(
- /obj/item/storage/box/lights/bulbs_neon = 2,
- /obj/item/storage/box/lights/tubes_neon = 2,
- /obj/item/storage/box/lights/mixed_neon = 1
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "Neon Lights crate"
-
-//Culture Crates
-/datum/supply_pack/misc/culture_apidean
- name = "Apidean Culture Crate"
- contains = list(
- /obj/fiftyspawner/wax = 2,
- /obj/item/healthanalyzer/apidean = 1,
- /obj/item/atmos_analyzer/apidean = 1,
- /obj/item/reagent_scanner/apidean = 1,
- /mob/living/bot/medibot/apidean = 1,
- /obj/item/reagent_containers/food/drinks/bottle/ambrosia_mead = 2,
- /obj/item/reagent_containers/food/drinks/bottle/royaljelly = 1
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "Apidean Culture crate"
-
-/datum/supply_pack/misc/culture_tyrmalin
- name = "Tyrmalin Culture Crate"
- contains = list(
- /obj/item/tool/wrench/goblin = 2,
- /obj/item/weldingtool/welder_spear = 2,
- /obj/item/clothing/accessory/skullcodpiece = 2,
- /obj/item/reagent_containers/food/snacks/cavemoss_can = 2,
- /obj/item/reagent_containers/food/snacks/diggerstew_can = 2,
- /obj/item/reagent_containers/food/snacks/canned_bettles = 2,
- /obj/item/reagent_containers/food/snacks/rust_can = 2,
- /obj/item/reagent_containers/food/drinks/bottle/phobos = 1,
- /obj/item/reagent_containers/food/drinks/bottle/greenstuff = 1
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "Tyrmalin Culture crate"
-
-/datum/supply_pack/misc/culture_alraune
- name = "Alraune Culture Crate"
- contains = list(
- /obj/item/reagent_containers/food/snacks/wrapped/alraune_bar = 3,
- /obj/item/reagent_containers/food/snacks/boxed/bugsnacks = 3,
- /obj/item/reagent_containers/food/drinks/cans/alraune = 3
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "Alraune Culture crate"
-
-/datum/supply_pack/misc/music_players
- name = "Music players"
- contains = list(
- /obj/item/device/walkpod = 3
- )
- cost = 150
- container_type = /obj/structure/closet/crate
- container_name = "Portable music players crate"
diff --git a/code/modules/cargo/supplypacks/munitions.dm b/code/modules/cargo/supplypacks/munitions.dm
deleted file mode 100644
index 9f24bd3a7010..000000000000
--- a/code/modules/cargo/supplypacks/munitions.dm
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
-* Here is where any supply packs
-* related to weapons live.
-*/
-
-/datum/supply_pack/munitions
- group = "Munitions"
-
-/datum/supply_pack/randomised/munitions
- group = "Munitions"
-
-/datum/supply_pack/munitions/weapons
- name = "Weapons - Security basic equipment"
- contains = list(
- /obj/item/flash = 2,
- /obj/item/reagent_containers/spray/pepper = 2,
- /obj/item/melee/baton/loaded = 2,
- /obj/item/gun/energy/taser = 2,
- /obj/item/gunbox = 2,
- /obj/item/storage/box/flashbangs = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security equipment crate"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/munitions/egunpistol
- name = "Weapons - Energy sidearms"
- contains = list(/obj/item/gun/energy/gun = 2)
- cost = 50
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Energy sidearms crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/flareguns
- name = "Weapons - Flare guns"
- contains = list(
- /obj/item/gun/ballistic/shotgun/flare = 2,
- /obj/item/storage/box/flashshells = 2
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "Flare gun crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/eweapons
- name = "Weapons - Experimental weapons crate"
- contains = list(
- /obj/item/gun/energy/xray = 2,
- /obj/item/shield/energy = 2)
- cost = 100
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Experimental weapons crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/energyweapons
- name = "Weapons - Laser rifle crate"
- contains = list(/obj/item/gun/energy/laser = 2)
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Energy weapons crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/shotgun
- name = "Weapons - Shotgun crate"
- contains = list(
- /obj/item/storage/box/shotgunammo,
- /obj/item/storage/box/shotgunshells,
- /obj/item/gun/ballistic/shotgun/pump/combat = 2
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/ward
- container_name = "Shotgun crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/erifle
- name = "Weapons - Energy marksman"
- contains = list(/obj/item/gun/energy/sniperrifle = 2)
- cost = 100
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- container_name = "Energy marksman crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/burstlaser
- name = "Weapons - Burst laser"
- contains = list(/obj/item/gun/energy/gun/burst = 2)
- cost = 50
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Burst laser crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/ionweapons
- name = "Weapons - Electromagnetic Rifles"
- contains = list(
- /obj/item/gun/energy/ionrifle = 2,
- /obj/item/storage/box/empslite
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Electromagnetic weapons crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/ionpistols
- name = "Weapons - Electromagnetic pistols"
- contains = list(
- /obj/item/gun/energy/ionrifle/pistol = 2,
- /obj/item/storage/box/empslite
- )
- cost = 30
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Electromagnetic weapons crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/bsmg
- name = "Weapons - Ballistic SMGs"
- contains = list(/obj/item/gun/ballistic/automatic/wt550 = 2)
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/ward
- container_name = "Ballistic weapon crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/brifle
- name = "Weapons - Ballistic Rifles"
- contains = list(/obj/item/gun/ballistic/automatic/z8 = 2)
- cost = 80
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Ballistic weapon crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/bolt_rifles_competitive
- name = "Weapons - Competitive shooting rifles"
- contains = list(
- /obj/item/assembly/timer,
- /obj/item/gun/ballistic/shotgun/pump/rifle/practice = 2,
- /obj/item/ammo_magazine/clip/c762/practice = 4,
- /obj/item/target = 2,
- /obj/item/target/alien = 2,
- /obj/item/target/syndicate = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Ballistic Weapons crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/mrifle
- name = "Weapons - Magnetic Rifles"
- contains = list(/obj/item/gun/magnetic/railgun/heater = 2)
- cost = 120
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Magnetic weapon crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/mpistol
- name = "Weapons - Magnetic Pistols"
- contains = list(/obj/item/gun/magnetic/railgun/heater/pistol = 2)
- cost = 200
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Magnetic weapon crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/mcarbine
- name = "Weapons - Magnetic Carbines"
- contains = list(/obj/item/gun/magnetic/railgun/flechette/sif = 2)
- cost = 130
- container_type = /obj/structure/closet/crate/secure/weapon
- container_name = "Magnetic weapon crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/shotgunammo
- name = "Ammunition - Shotgun shells"
- contains = list(
- /obj/item/storage/box/shotgunammo = 2,
- /obj/item/storage/box/shotgunshells = 2
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure
- container_name = "Ballistic ammunition crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/beanbagammo
- name = "Ammunition - Beanbag shells"
- contains = list(/obj/item/storage/box/beanbags = 3)
- cost = 25
- container_type = /obj/structure/closet/crate
- container_name = "Ballistic ammunition crate"
- access = ACCESS_SECURITY_ARMORY // Guns are for the armory.
-
-/datum/supply_pack/munitions/bsmgammo
- name = "Ammunition - 9mm top mounted lethal"
- contains = list(/obj/item/ammo_magazine/m9mmt = 6)
- cost = 25
- container_type = /obj/structure/closet/crate/secure
- container_name = "Ballistic ammunition crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/bsmgammorubber
- name = "Ammunition - 9mm top mounted rubber"
- contains = list(/obj/item/ammo_magazine/m9mmt/rubber = 6)
- cost = 25
- container_type = /obj/structure/closet/crate/secure
- container_name = "Ballistic ammunition crate"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/munitions/brifleammo
- name = "Ammunition - 7.62mm lethal"
- contains = list(/obj/item/ammo_magazine/m762 = 6)
- cost = 25
- container_type = /obj/structure/closet/crate/secure
- container_name = "Ballistic ammunition crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/pcellammo
- name = "Ammunition - Power cell"
- contains = list(/obj/item/cell/device/weapon = 3)
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/einstein
- container_name = "Energy ammunition crate"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/munitions/firingpins
- name = "Weapons - Standard firing pins"
- contains = list(/obj/item/storage/box/firingpins = 3)
- cost = 10
- container_type = /obj/structure/closet/crate/secure
- container_name = "Firing pin crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/munitions/expeditionguns
- name = "Frontier phaser (station-locked) crate"
- contains = list(
- /obj/item/gun/energy/frontier/locked = 2,
- /obj/item/gun/energy/frontier/locked/holdout = 1,
- )
- cost = 35
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "frontier phaser crate"
- access = ACCESS_GENERAL_EXPLORER
-
-//Culture Update
-/datum/supply_pack/munitions/weaponry_apidean
- name = "Apidean Weaponry Crate"
- contains = list(
- /obj/item/gun/ballistic/apinae_stinger = 1,
- /obj/item/gun/ballistic/apinae_pistol = 2,
- /obj/item/grenade/spawnergrenade/manhacks/apidean = 3
- )
- cost = 150
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "Apidean Weaponry crate"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/misc/weaponry_tyrmalin
- name = "Tyrmalin Weaponry Crate"
- contains = list(
- /obj/item/gun/energy/ermitter = 1,
- /obj/item/gun/ballistic/rocket/tyrmalin = 1,
- /obj/item/ammo_casing/rocket/weak = 2,
- /obj/item/gun/ballistic/pirate/junker_pistol = 2,
- /obj/item/gun/energy/ionrifle/pistol/tyrmalin = 1
- )
- cost = 175
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "Tyrmalin Weaponry crate"
- access = ACCESS_SECURITY_EQUIPMENT
diff --git a/code/modules/cargo/supplypacks/recreation.dm b/code/modules/cargo/supplypacks/recreation.dm
deleted file mode 100644
index c148a8b5774f..000000000000
--- a/code/modules/cargo/supplypacks/recreation.dm
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
-* Here is where any supply packs
-* related to recreation live.
-*/
-
-
-/datum/supply_pack/recreation
- group = "Recreation"
-
-/datum/supply_pack/randomised/recreation
- group = "Recreation"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/recreation/foam_weapons
- name = "Foam Weapon Crate"
- contains = list(
- /obj/item/material/sword/foam = 2,
- /obj/item/material/twohanded/baseballbat/foam = 2,
- /obj/item/material/twohanded/spear/foam = 2,
- /obj/item/material/twohanded/fireaxe/foam = 2
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "foam weapon crate"
-
-/datum/supply_pack/recreation/lasertag
- name = "Lasertag equipment"
- contains = list(
- /obj/item/gun/energy/lasertag/red,
- /obj/item/clothing/suit/redtag,
- /obj/item/gun/energy/lasertag/blue,
- /obj/item/clothing/suit/bluetag
- )
- container_type = /obj/structure/closet
- container_name = "Lasertag Closet"
- cost = 10
-
-/datum/supply_pack/recreation/artscrafts
- name = "Arts and Crafts supplies"
- contains = list(
- /obj/item/storage/fancy/crayons,
- /obj/item/storage/fancy/markers,
- /obj/item/camera,
- /obj/item/camera_film = 2,
- /obj/item/storage/photo_album,
- /obj/item/packageWrap,
- /obj/item/reagent_containers/glass/paint/red,
- /obj/item/reagent_containers/glass/paint/green,
- /obj/item/reagent_containers/glass/paint/blue,
- /obj/item/reagent_containers/glass/paint/yellow,
- /obj/item/reagent_containers/glass/paint/purple,
- /obj/item/reagent_containers/glass/paint/black,
- /obj/item/reagent_containers/glass/paint/white,
- /obj/item/contraband/poster,
- /obj/item/wrapping_paper = 3
- )
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Arts and Crafts crate"
-
-/datum/supply_pack/recreation/painters
- name = "Station Painting Supplies"
- cost = 10
- container_name = "station painting supplies crate"
- container_type = /obj/structure/closet/crate
- contains = list(
- /obj/item/pipe_painter = 2,
- /obj/item/floor_painter = 2
- )
-
-/datum/supply_pack/recreation/cheapbait
- name = "Cheap Fishing Bait"
- cost = 10
- container_name = "cheap bait crate"
- container_type = /obj/structure/closet/crate/freezer
- contains = list(
- /obj/item/storage/box/wormcan/sickly = 5
- )
-
-/datum/supply_pack/randomised/recreation/cheapbait
- name = "Deluxe Fishing Bait"
- cost = 40
- container_name = "deluxe bait crate"
- container_type = /obj/structure/closet/crate/freezer
- num_contained = 8
- contains = list(
- /obj/item/storage/box/wormcan,
- /obj/item/storage/box/wormcan/deluxe
- )
-
-/datum/supply_pack/recreation/ltagturrets
- name = "Laser Tag Turrets"
- cost = 40
- container_name = "laser tag turret crate"
- container_type = /obj/structure/closet/crate
- contains = list(
- /obj/machinery/porta_turret/lasertag/blue,
- /obj/machinery/porta_turret/lasertag/red
- )
-
-/datum/supply_pack/recreation/jukebox
- name = "Jukebox crate"
- cost = 50
- container_name = "Jukebox crate"
- container_type = /obj/structure/closet/crate
- contains = list (/obj/machinery/media/jukebox = 1)
-
-
-/datum/supply_pack/recreation/restraints
- name = "Recreational Restraints"
- contains = list(
- /obj/item/clothing/mask/muzzle,
- /obj/item/clothing/glasses/sunglasses/blindfold,
- /obj/item/handcuffs/fuzzy,
- /obj/item/duct_tape_roll,
- /obj/item/stack/cable_coil/random,
- /obj/item/clothing/accessory/collar/shock,
- /obj/item/clothing/suit/straight_jacket,
- /obj/item/handcuffs/legcuffs/fuzzy,
- /obj/item/melee/fluff/holochain/mass,
- /obj/item/fluff/riding_crop,
- /obj/item/clothing/under/fluff/latexmaid
- )
- container_type = /obj/structure/closet/crate
- container_name = "Restraints crate"
- cost = 30
-
-/datum/supply_pack/recreation/wolfgirl_cosplay_crate
- name = "Wolfgirl Cosplay Crate"
- contains = list(
- /obj/item/clothing/head/fluff/wolfgirl = 1,
- /obj/item/clothing/shoes/fluff/wolfgirl = 1,
- /obj/item/clothing/under/fluff/wolfgirl = 1,
- /obj/item/melee/fluffstuff/wolfgirlsword = 1,
- /obj/item/shield/fluff/wolfgirlshield = 1
- )
- cost = 50
- container_type = /obj/structure/closet/crate
- container_name = "wolfgirl cosplay crate"
-
-/datum/supply_pack/randomised/recreation/figures
- name = "Action figures crate"
- num_contained = 5
- contains = list(
- /obj/random/action_figure/supplypack
- )
- cost = 200
- container_type = /obj/structure/closet/crate/corporate/allico
- container_name = "Action figures crate"
-
-/datum/supply_pack/recreation/characters
- name = "Tabletop miniatures"
- contains = list(
- /obj/item/storage/box/characters
- )
- container_type = /obj/structure/closet/crate
- container_name = "Tabletop miniatures crate"
- cost = 50
-
-/datum/supply_pack/randomised/recreation/plushies
- name = "Plushies crate"
- num_contained = 3
- contains = list(
- /obj/random/plushie
- )
- cost = 60
- container_type = /obj/structure/closet/crate/corporate/allico
- container_name = "Plushies crate"
-
-/datum/supply_pack/recreation/collars
- name = "Collar bundle"
- contains = list(
- /obj/item/clothing/accessory/collar/shock = 1,
- /obj/item/clothing/accessory/collar/spike = 1,
- /obj/item/clothing/accessory/collar/silver = 1,
- /obj/item/clothing/accessory/collar/gold = 1,
- /obj/item/clothing/accessory/collar/bell = 1,
- /obj/item/clothing/accessory/collar/pink = 1,
- /obj/item/clothing/accessory/collar/holo = 1
- )
- cost = 25
- container_type = /obj/structure/closet/crate
- container_name = "collar crate"
-
-//DONKsoft
-/datum/supply_pack/recreation/donksoft
- name = "DONKsoft Skirmish Bundle"
- contains = list(
- /obj/item/gunbox/donksoft = 2,
- /obj/item/gunbox/donksoft/shotgun = 2,
- /obj/item/gunbox/donksoft/smg = 2,
- /obj/item/material/sword/foam = 2,
- /obj/item/shield/riot/foam = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate
- container_name = "DONKsoft Skirmish crate"
-
-/datum/supply_pack/recreation/donksoft_exotic
- name = "DONKsoft Exotic Weaponry Bundle"
- contains = list(
- /obj/item/gun/ballistic/automatic/c20r/foam = 2,
- /obj/item/gun/ballistic/automatic/lmg/foam = 1,
- /obj/item/ammo_magazine/mfoam/c20 = 4,
- /obj/item/ammo_magazine/mfoam/lmg = 2,
- /obj/item/material/twohanded/spear/foam = 2,
- /obj/item/material/twohanded/fireaxe/foam = 1
- )
- cost = 80
- container_type = /obj/structure/closet/crate
- container_name = "DONKsoft Exotic Weaponry crate"
-
-/datum/supply_pack/recreation/donksoft_ammo
- name = "DONKsoft Resupply Bundle"
- contains = list(
- /obj/item/storage/box/foamdart= 4
- )
- cost = 20
- container_type = /obj/structure/closet/crate
- container_name = "DONKsoft Resupply crate"
-
-//Civilian Pellet
-/datum/supply_pack/recreation/pelletgun
- name = "Recreational Pellet Gun"
- contains = list(
- /obj/item/gun/ballistic/caseless/pellet,
- /obj/item/ammo_magazine/pellets
- )
- cost = 20
- container_type = /obj/structure/closet/crate
diff --git a/code/modules/cargo/supplypacks/robotics.dm b/code/modules/cargo/supplypacks/robotics.dm
deleted file mode 100644
index c0a68d674a91..000000000000
--- a/code/modules/cargo/supplypacks/robotics.dm
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-* Here is where any supply packs
-* related to robotics tasks live.
-*/
-
-//PROSTHETICS
-
-/datum/supply_pack/robotics
- group = "Robotics"
-
-/datum/supply_pack/randomised/robotics
- group = "Robotics"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robotics_assembly
- name = "Robotics assembly crate"
- contains = list(
- /obj/item/assembly/prox_sensor = 3,
- /obj/item/storage/toolbox/electrical,
- /obj/item/flash = 4,
- /obj/item/cell/high = 2
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "Robotics assembly"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/*/datum/supply_pack/robotics/robolimbs_basic
- name = "Basic robolimb blueprints"
- contains = list(
- /obj/item/disk/limb/morpheus,
- /obj/item/disk/limb/xion
- )
- cost = 15
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "Robolimb blueprints (basic)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs_adv
- name = "All robolimb blueprints"
- contains = list(
- /obj/item/disk/limb/bishop,
- /obj/item/disk/limb/hephaestus,
- /obj/item/disk/limb/morpheus,
- /obj/item/disk/limb/veymed,
- /obj/item/disk/limb/wardtakahashi,
- /obj/item/disk/limb/xion,
- /obj/item/disk/limb/zenghu,
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "Robolimb blueprints (adv)"
- access = ACCESS_SCIENCE_ROBOTICS
-*/
-
-/datum/supply_pack/robotics/robolimbs/morpheus
- name = "Morpheus robolimb blueprints"
- contains = list(/obj/item/disk/limb/morpheus)
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/morpheus
- container_name = "Robolimb blueprints (Morpheus)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/antares
- name = "Antares robolimb blueprints"
- contains = list(/obj/item/disk/limb/antares)
- cost = 20
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "Robolimb blueprints (Antares)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/cybersolutions
- name = "Cyber Solutions robolimb blueprints"
- contains = list(/obj/item/disk/limb/cybersolutions)
- cost = 20
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "Robolimb blueprints (Cyber Solutions)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/xion
- name = "Xion robolimb blueprints"
- contains = list(/obj/item/disk/limb/xion)
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/xion
- container_name = "Robolimb blueprints (Xion)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/grayson
- name = "Grayson robolimb blueprints"
- contains = list(/obj/item/disk/limb/grayson)
- cost = 30
- container_type = /obj/structure/closet/crate/secure/corporate/grayson
- container_name = "Robolimb blueprints (Grayson)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/hephaestus
- name = "Hephaestus robolimb blueprints"
- contains = list(/obj/item/disk/limb/hephaestus)
- cost = 35
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- container_name = "Robolimb blueprints (Hephaestus)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/wardtakahashi
- name = "Ward-Takahashi robolimb blueprints"
- contains = list(/obj/item/disk/limb/wardtakahashi)
- cost = 35
- container_type = /obj/structure/closet/crate/secure/corporate/ward
- container_name = "Robolimb blueprints (Ward-Takahashi)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/zenghu
- name = "Zeng Hu robolimb blueprints"
- contains = list(/obj/item/disk/limb/zenghu)
- cost = 35
- container_type = /obj/structure/closet/crate/secure/corporate/zenghu
- container_name = "Robolimb blueprints (Zeng Hu)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/bishop
- name = "Bishop robolimb blueprints"
- contains = list(/obj/item/disk/limb/bishop)
- cost = 70
- container_type = /obj/structure/closet/crate/secure/corporate/bishop
- container_name = "Robolimb blueprints (Bishop)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/robolimbs/cenilimicybernetics
- name = "Cenilimi Cybernetics robolimb blueprints"
- contains = list(/obj/item/disk/limb/cenilimicybernetics)
- cost = 45
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "Robolimb blueprints (Cenilimi Cybernetics)"
- access = ACCESS_SCIENCE_ROBOTICS
-
-//MECHS
-
-/datum/supply_pack/robotics/mecha_ripley
- name = "Circuit Crate (\"Ripley\" APLU)"
- contains = list(
- /obj/item/book/manual/ripley_build_and_repair,
- /obj/item/circuitboard/mecha/ripley/main,
- /obj/item/circuitboard/mecha/ripley/peripherals
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "APLU \"Ripley\" Circuit Crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/mecha_odysseus
- name = "Circuit Crate (\"Odysseus\")"
- contains = list(
- /obj/item/circuitboard/mecha/odysseus/peripherals,
- /obj/item/circuitboard/mecha/odysseus/main
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "\"Odysseus\" Circuit Crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/randomised/robotics/exosuit_mod
- num_contained = 1
- contains = list(
- /obj/random/paintkit,
- /obj/random/paintkit,
- /obj/random/paintkit,
- /obj/random/paintkit
- )
- name = "Random APLU modkit"
- cost = 200
- container_type = /obj/structure/closet/crate/science
- container_name = "heavy crate"
-
-/datum/supply_pack/randomised/robotics/exosuit_mod/durand
- contains = list(
- /obj/random/paintkit/durand,
- /obj/random/paintkit/durand,
- /obj/random/paintkit/durand
- )
- name = "Random Durand exosuit modkit"
-
-/datum/supply_pack/randomised/robotics/exosuit_mod/gygax
- contains = list(
- /obj/random/paintkit/gygax,
- /obj/random/paintkit/gygax,
- /obj/random/paintkit/gygax
- )
- name = "Random Gygax exosuit modkit"
-
-/datum/supply_pack/robotics/jumper_cables
- name = "Jumper kit crate"
- contains = list(
- /obj/item/defib_kit/jumper_kit = 2
- )
- cost = 30
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "Jumper kit crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/restrainingbolt
- name = "Restraining bolt crate"
- contains = list(
- /obj/item/implanter = 1,
- /obj/item/implantcase/restrainingbolt = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/cybersolutions
- container_name = "Restraining bolt crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-
-/datum/supply_pack/robotics/mecha_gopher
- name = "Circuit Crate (\"Gopher\" APLU)"
- contains = list(
- /obj/item/circuitboard/mecha/gopher/main,
- /obj/item/circuitboard/mecha/gopher/peripherals
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "APLU \"Gopher\" Circuit Crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/mecha_polecat
- name = "Circuit Crate (\"Polecat\" APLU)"
- contains = list(
- /obj/item/circuitboard/mecha/polecat/main,
- /obj/item/circuitboard/mecha/polecat/peripherals,
- /obj/item/circuitboard/mecha/polecat/targeting
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "APLU \"Polecat\" Circuit Crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/mecha_weasel
- name = "Circuit Crate (\"Weasel\" APLU)"
- contains = list(
- /obj/item/circuitboard/mecha/weasel/main,
- /obj/item/circuitboard/mecha/weasel/peripherals,
- /obj/item/circuitboard/mecha/weasel/targeting
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "APLU \"Weasel\" Circuit Crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/some_robolimbs
- name = "Basic Robolimb Blueprints"
- contains = list(
- /obj/item/disk/limb/morpheus,
- /obj/item/disk/limb/xion,
- /obj/item/disk/limb/talon
- )
- cost = 15
- container_type = /obj/structure/closet/crate/secure
- container_name = "Basic Robolimb Blueprint Crate"
- access = ACCESS_SCIENCE_ROBOTICS
-
-/datum/supply_pack/robotics/all_robolimbs
- name = "Advanced Robolimb Blueprints"
- contains = list(
- /obj/item/disk/limb/bishop,
- /obj/item/disk/limb/hephaestus,
- /obj/item/disk/limb/morpheus,
- /obj/item/disk/limb/veymed,
- /obj/item/disk/limb/wardtakahashi,
- /obj/item/disk/limb/xion,
- /obj/item/disk/limb/zenghu,
- /obj/item/disk/limb/talon,
- /obj/item/disk/limb/dsi_tajaran,
- /obj/item/disk/limb/dsi_lizard,
- /obj/item/disk/limb/dsi_sergal,
- /obj/item/disk/limb/dsi_nevrean,
- /obj/item/disk/limb/dsi_vulpkanin,
- /obj/item/disk/limb/dsi_akula,
- /obj/item/disk/limb/dsi_spider,
- /obj/item/disk/limb/dsi_teshari,
- /obj/item/disk/limb/eggnerdltd,
- /obj/item/disk/limb/eggnerdltdred,
- /obj/item/disk/limb/antares
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure
- container_name = "Advanced Robolimb Blueprint Crate"
- access = ACCESS_SCIENCE_ROBOTICS
diff --git a/code/modules/cargo/supplypacks/science.dm b/code/modules/cargo/supplypacks/science.dm
deleted file mode 100644
index b8879c06a359..000000000000
--- a/code/modules/cargo/supplypacks/science.dm
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-* Here is where any supply packs
-* related to science tasks live
-*/
-/datum/supply_pack/sci
- group = "Science"
-
-/datum/supply_pack/sci/virus
- name = "Virus sample crate"
- contains = list(/obj/item/virusdish/random = 4)
- cost = 25
- container_type = "/obj/structure/closet/crate/secure"
- container_name = "Virus sample crate"
- access = ACCESS_MEDICAL_CMO
-
-/datum/supply_pack/sci/coolanttank
- name = "Coolant tank crate"
- contains = list(/obj/structure/reagent_dispensers/coolanttank)
- cost = 15
- container_type = /obj/structure/largecrate
- container_name = "coolant tank crate"
-
-/datum/supply_pack/sci/phoron
- name = "Phoron research crate"
- contains = list(
- /obj/item/tank/phoron = 3,
- /obj/item/tank/oxygen = 3,
- /obj/item/assembly/igniter = 3,
- /obj/item/assembly/prox_sensor = 3,
- /obj/item/assembly/timer = 3,
- /obj/item/assembly/signaler = 3,
- /obj/item/transfer_valve = 3
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/phoron
- container_name = "Phoron assembly crate"
- access = ACCESS_SCIENCE_TOXINS
-
-/datum/supply_pack/sci/exoticseeds
- name = "Exotic seeds crate"
- contains = list(
- /obj/item/seeds/replicapod = 2,
- /obj/item/seeds/ambrosiavulgarisseed = 2,
- /obj/item/seeds/libertymycelium,
- /obj/item/seeds/reishimycelium,
- /obj/item/seeds/random = 6,
- /obj/item/seeds/kudzuseed
- )
- cost = 15
- container_type = /obj/structure/closet/crate/hydroponics
- container_name = "Exotic Seeds crate"
- access = ACCESS_GENERAL_BOTANY
-
-/datum/supply_pack/sci/integrated_circuit_printer
- name = "Integrated circuit printer"
- contains = list(/obj/item/integrated_circuit_printer = 2)
- cost = 15
- container_type = /obj/structure/closet/crate
- container_name = "Integrated circuit crate"
-
-/datum/supply_pack/sci/integrated_circuit_printer_upgrade
- name = "Integrated circuit printer upgrade - advanced designs"
- contains = list(/obj/item/disk/integrated_circuit/upgrade/advanced)
- cost = 30
- container_type = /obj/structure/closet/crate
- container_name = "Integrated circuit crate"
-
-/datum/supply_pack/sci/xenoarch
- name = "Xenoarchaeology Tech crate"
- contains = list(
- /obj/item/pickaxe/excavationdrill,
- /obj/item/xenoarch_multi_tool,
- /obj/item/clothing/suit/space/anomaly,
- /obj/item/clothing/head/helmet/space/anomaly,
- /obj/item/storage/belt/archaeology,
- /obj/item/flashlight/lantern,
- /obj/item/core_sampler,
- /obj/item/gps,
- /obj/item/beacon_locator,
- /obj/item/radio/beacon,
- /obj/item/clothing/glasses/meson,
- /obj/item/pickaxe,
- /obj/item/storage/bag/fossils,
- /obj/item/hand_labeler)
- cost = 100
- container_type = /obj/structure/closet/crate/secure/science
- container_name = "Xenoarchaeology Tech crate"
- access = ACCESS_SCIENCE_MAIN
-
-/datum/supply_pack/sci/jukebox_circuitboard
- name = "Jukebox Circuit Board crate"
- contains = list(/obj/item/circuitboard/jukebox = 2)
- cost = 25
- container_type = /obj/structure/closet/crate
- container_name = "Jukebox Circuit Board crate"
-
-
-/datum/supply_pack/sci/pred
- name = "Dangerous Predator crate"
- cost = 40
- container_type = /obj/structure/largecrate/animal/pred
- container_name = "Dangerous Predator crate"
- access = ACCESS_SCIENCE_XENOBIO
-
-/datum/supply_pack/sci/pred_doom
- name = "EXTREMELY Dangerous Predator crate"
- cost = 200
- container_type = /obj/structure/largecrate/animal/dangerous
- container_name = "EXTREMELY Dangerous Predator crate"
- access = ACCESS_SCIENCE_XENOBIO
- contraband = 1
diff --git a/code/modules/cargo/supplypacks/security.dm b/code/modules/cargo/supplypacks/security.dm
deleted file mode 100644
index d41850aa7f64..000000000000
--- a/code/modules/cargo/supplypacks/security.dm
+++ /dev/null
@@ -1,680 +0,0 @@
-/*
-* Here is where any supply packs
-* related to security tasks live
-*/
-
-
-/datum/supply_pack/security
- group = "Security"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/randomised/security
- group = "Security"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/randomised/security/armor
- name = "Armor - Security armor"
- num_contained = 5
- contains = list(
- /obj/item/clothing/suit/storage/vest,
- /obj/item/clothing/suit/storage/vest/officer,
- /obj/item/clothing/suit/storage/vest/warden,
- /obj/item/clothing/suit/storage/vest/hos,
- /obj/item/clothing/suit/storage/vest/detective,
- /obj/item/clothing/suit/storage/vest/heavy,
- /obj/item/clothing/suit/storage/vest/heavy/officer,
- /obj/item/clothing/suit/storage/vest/heavy/warden,
- /obj/item/clothing/suit/storage/vest/heavy/hos
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Armor crate"
-
-/datum/supply_pack/randomised/security/carriers
- name = "Armor - Plate carriers"
- num_contained = 5
- contains = list(
- /obj/item/clothing/suit/armor/pcarrier,
- /obj/item/clothing/suit/armor/pcarrier/alt,
- /obj/item/clothing/suit/armor/pcarrier/blue,
- /obj/item/clothing/suit/armor/pcarrier/green,
- /obj/item/clothing/suit/armor/pcarrier/navy,
- /obj/item/clothing/suit/armor/pcarrier/tan,
- /obj/item/clothing/suit/armor/pcarrier/press
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Plate Carrier crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/carriertags
- name = "Armor - Plate carrier tags"
- contains = list(
- /obj/item/clothing/accessory/armor/tag,
- /obj/item/clothing/accessory/armor/tag/nts,
- /obj/item/clothing/accessory/armor/tag/ntc,
- /obj/item/clothing/accessory/armor/tag/opos,
- /obj/item/clothing/accessory/armor/tag/oneg,
- /obj/item/clothing/accessory/armor/tag/apos,
- /obj/item/clothing/accessory/armor/tag/aneg,
- /obj/item/clothing/accessory/armor/tag/bpos,
- /obj/item/clothing/accessory/armor/tag/bneg,
- /obj/item/clothing/accessory/armor/tag/abpos,
- /obj/item/clothing/accessory/armor/tag/abneg
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Plate Carrier crate"
-
-/datum/supply_pack/security/helmcovers
- name = "Armor - Helmet covers"
- contains = list(
- /obj/item/clothing/accessory/armor/helmcover/blue,
- /obj/item/clothing/accessory/armor/helmcover/blue,
- /obj/item/clothing/accessory/armor/helmcover/navy,
- /obj/item/clothing/accessory/armor/helmcover/navy,
- /obj/item/clothing/accessory/armor/helmcover/green,
- /obj/item/clothing/accessory/armor/helmcover/green,
- /obj/item/clothing/accessory/armor/helmcover/tan,
- /obj/item/clothing/accessory/armor/helmcover/tan
- )
- cost = 15
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Helmet Covers crate"
-
-/datum/supply_pack/randomised/security/armorplates
- name = "Armor - Security p-carrier armor plates"
- num_contained = 5
- contains = list(
- /obj/item/clothing/accessory/armor/armorplate,
- /obj/item/clothing/accessory/armor/armorplate/stab,
- /obj/item/clothing/accessory/armor/armorplate,
- /obj/item/clothing/accessory/armor/armorplate/stab,
- /obj/item/clothing/accessory/armor/armorplate/medium,
- /obj/item/clothing/accessory/armor/armorplate/medium,
- /obj/item/clothing/accessory/armor/armorplate/tactical,
- /obj/item/clothing/accessory/armor/armorplate/ablative,
- /obj/item/clothing/accessory/armor/armorplate/riot,
- /obj/item/clothing/accessory/armor/armorplate/ballistic
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Armor plate crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/randomised/security/carrierarms
- name = "Armor - Security armguard attachments"
- num_contained = 5
- contains = list(
- /obj/item/clothing/accessory/armor/armguards,
- /obj/item/clothing/accessory/armor/armguards/blue,
- /obj/item/clothing/accessory/armor/armguards/navy,
- /obj/item/clothing/accessory/armor/armguards/green,
- /obj/item/clothing/accessory/armor/armguards/tan,
- /obj/item/clothing/accessory/armor/armguards/ablative,
- /obj/item/clothing/accessory/armor/armguards/riot,
- /obj/item/clothing/accessory/armor/armguards/ballistic
- )
- cost = 30
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Armor plate crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/randomised/security/carrierlegs
- name = "Armor - Security legguard attachments"
- num_contained = 5
- contains = list(
- /obj/item/clothing/accessory/armor/legguards,
- /obj/item/clothing/accessory/armor/legguards/blue,
- /obj/item/clothing/accessory/armor/legguards/navy,
- /obj/item/clothing/accessory/armor/legguards/green,
- /obj/item/clothing/accessory/armor/legguards/tan,
- /obj/item/clothing/accessory/armor/legguards/ablative,
- /obj/item/clothing/accessory/armor/legguards/riot,
- /obj/item/clothing/accessory/armor/legguards/ballistic
- )
- cost = 30
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Armor plate crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/randomised/security/carrierbags
- name = "Armor - Security p-carrier pouch attachments"
- num_contained = 5
- contains = list(
- /obj/item/clothing/accessory/storage/pouches,
- /obj/item/clothing/accessory/storage/pouches/blue,
- /obj/item/clothing/accessory/storage/pouches/navy,
- /obj/item/clothing/accessory/storage/pouches/green,
- /obj/item/clothing/accessory/storage/pouches/tan,
- /obj/item/clothing/accessory/storage/pouches/large,
- /obj/item/clothing/accessory/storage/pouches/large/blue,
- /obj/item/clothing/accessory/storage/pouches/large/navy,
- /obj/item/clothing/accessory/storage/pouches/large/green,
- /obj/item/clothing/accessory/storage/pouches/large/tan
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Armor plate crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/riot_gear
- name = "Gear - Riot"
- contains = list(
- /obj/item/melee/baton = 3,
- /obj/item/shield/riot = 3,
- /obj/item/handcuffs = 3,
- /obj/item/storage/box/flashbangs,
- /obj/item/storage/box/beanbags,
- /obj/item/storage/box/handcuffs
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Riot gear crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/riot_armor
- name = "Armor Set - Riot"
- contains = list(
- /obj/item/clothing/head/helmet/riot,
- /obj/item/clothing/suit/armor/riot,
- /obj/item/clothing/gloves/arm_guard/riot,
- /obj/item/clothing/shoes/leg_guard/riot
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Riot armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/riot_plates
- name = "Armor Set - Riot (P-Carrier)"
- contains = list(
- /obj/item/clothing/head/helmet/riot,
- /obj/item/clothing/suit/armor/pcarrier/riot,
- /obj/item/clothing/accessory/armor/armguards/riot,
- /obj/item/clothing/accessory/armor/legguards/riot
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Riot armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/ablative_armor
- name = "Armor Set - Ablative"
- contains = list(
- /obj/item/clothing/head/helmet/ablative,
- /obj/item/clothing/suit/armor/laserproof,
- /obj/item/clothing/gloves/arm_guard/laserproof,
- /obj/item/clothing/shoes/leg_guard/laserproof
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Ablative armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/ablative_plates
- name = "Armor Set - Ablative (P-Carrier)"
- contains = list(
- /obj/item/clothing/head/helmet/ablative,
- /obj/item/clothing/suit/armor/pcarrier/ablative,
- /obj/item/clothing/accessory/armor/armguards/ablative,
- /obj/item/clothing/accessory/armor/legguards/ablative
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Ablative armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-
-/datum/supply_pack/security/bullet_resistant_armor
- name = "Armor Set - Ballistic"
- contains = list(
- /obj/item/clothing/head/helmet/ballistic,
- /obj/item/clothing/suit/armor/bulletproof,
- /obj/item/clothing/gloves/arm_guard/bulletproof,
- /obj/item/clothing/shoes/leg_guard/bulletproof
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Ballistic armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-
-/datum/supply_pack/security/bullet_resistant_plates
- name = "Armor Set - Ballistic (P-Carrier)"
- contains = list(
- /obj/item/clothing/head/helmet/ballistic,
- /obj/item/clothing/suit/armor/pcarrier/ballistic,
- /obj/item/clothing/accessory/armor/armguards/ballistic,
- /obj/item/clothing/accessory/armor/legguards/ballistic
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Ballistic armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/combat_armor
- name = "Armor - Combat"
- contains = list(
- /obj/item/clothing/head/helmet/combat,
- /obj/item/clothing/suit/armor/combat,
- /obj/item/clothing/gloves/arm_guard/combat,
- /obj/item/clothing/shoes/leg_guard/combat
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Combat armor crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/tactical
- name = "Armor - NT Tactical"
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "NT Tactical armor crate"
- cost = 40
- access = ACCESS_SECURITY_ARMORY
- contains = list(
- /obj/item/clothing/under/tactical,
- /obj/item/clothing/suit/armor/tactical,
- /obj/item/clothing/head/helmet/tactical,
- /obj/item/clothing/mask/balaclava/tactical,
- /obj/item/clothing/glasses/sunglasses/sechud/tactical,
- /obj/item/storage/belt/security/tactical,
- /obj/item/clothing/shoes/boots/jackboots,
- /obj/item/clothing/gloves/black,
- /obj/item/clothing/under/tactical,
- /obj/item/clothing/suit/armor/tactical,
- /obj/item/clothing/head/helmet/tactical,
- /obj/item/clothing/mask/balaclava/tactical,
- /obj/item/clothing/glasses/sunglasses/sechud/tactical,
- /obj/item/storage/belt/security/tactical,
- /obj/item/clothing/shoes/boots/jackboots,
- /obj/item/clothing/gloves/black
- )
-
-/datum/supply_pack/security/flexitac
- name = "Armor - Tactical Light"
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Tactical Light armor crate"
- cost = 75
- access = ACCESS_SECURITY_ARMORY
- contains = list(
- /obj/item/clothing/suit/storage/vest/heavy/flexitac,
- /obj/item/clothing/head/helmet/flexitac,
- /obj/item/clothing/shoes/leg_guard/flexitac,
- /obj/item/clothing/gloves/arm_guard/flexitac,
- /obj/item/clothing/mask/balaclava/tactical,
- /obj/item/clothing/glasses/sunglasses/sechud/tactical,
- /obj/item/storage/belt/security/tactical,
- /obj/item/clothing/suit/storage/vest/heavy/flexitac,
- /obj/item/clothing/head/helmet/flexitac,
- /obj/item/clothing/shoes/leg_guard/flexitac,
- /obj/item/clothing/gloves/arm_guard/flexitac,
- /obj/item/clothing/mask/balaclava/tactical,
- /obj/item/clothing/glasses/sunglasses/sechud/tactical,
- /obj/item/storage/belt/security/tactical
- )
-
-/datum/supply_pack/security/securitybarriers
- name = "Misc - Security Barriers"
- contains = list(/obj/machinery/deployable/barrier = 4)
- cost = 20
- container_type = /obj/structure/largecrate
- container_name = "Security barrier crate"
- access = null
-
-/datum/supply_pack/security/securityshieldgen
- name = "Misc - Wall shield generators"
- contains = list(/obj/machinery/shieldwallgen = 4)
- cost = 20
- container_type = /obj/structure/closet/crate/secure
- container_name = "Wall shield generators crate"
- access = ACCESS_COMMAND_TELEPORTER
-
-/datum/supply_pack/randomised/security/holster
- name = "Gear - Holsters"
- num_contained = 4
- contains = list(
- /obj/item/clothing/accessory/holster,
- /obj/item/clothing/accessory/holster/armpit,
- /obj/item/clothing/accessory/holster/waist,
- /obj/item/clothing/accessory/holster/hip
- )
- cost = 15
- container_type = /obj/structure/closet/crate/corporate/nanotrasen
- container_name = "Holster crate"
-
-/datum/supply_pack/security/extragear
- name = "Gear - Security surplus equipment"
- contains = list(
- /obj/item/storage/belt/security = 3,
- /obj/item/clothing/glasses/sunglasses/sechud = 3,
- /obj/item/radio/headset/headset_sec/alt = 3,
- /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3,
- /obj/item/storage/belt/dualholster = 3
- )
- cost = 15
- container_type = /obj/structure/closet/crate/corporate/nanotrasen
- container_name = "Security surplus equipment"
-
-/datum/supply_pack/security/detectivegear
- name = "Forensic - Investigation equipment"
- contains = list(
- /obj/item/storage/box/evidence = 2,
- /obj/item/clothing/suit/storage/vest/detective,
- /obj/item/cartridge/detective,
- /obj/item/radio/headset/headset_sec,
- /obj/item/barrier_tape_roll/police,
- /obj/item/clothing/glasses/sunglasses,
- /obj/item/camera,
- /obj/item/folder/red,
- /obj/item/folder/blue,
- /obj/item/storage/belt/detective,
- /obj/item/clothing/gloves/black,
- /obj/item/tape_recorder,
- /obj/item/mass_spectrometer,
- /obj/item/camera_film = 2,
- /obj/item/storage/photo_album,
- /obj/item/reagent_scanner,
- /obj/item/flashlight/maglight,
- /obj/item/storage/briefcase/crimekit,
- /obj/item/storage/bag/detective
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Forensic equipment"
- access = ACCESS_SECURITY_FORENSICS
-
-/datum/supply_pack/security/detectivescan
- name = "Forensic - Scanning Equipment"
- contains = list(
- /obj/item/mass_spectrometer,
- /obj/item/reagent_scanner,
- /obj/item/storage/briefcase/crimekit,
- /obj/item/detective_scanner
- )
- cost = 60
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Forensic equipment"
- access = ACCESS_SECURITY_FORENSICS
-
-/datum/supply_pack/security/detectiveclothes
- name = "Forensic - Investigation apparel"
- contains = list(
- /obj/item/clothing/under/det/black = 2,
- /obj/item/clothing/under/det/grey = 2,
- /obj/item/clothing/head/det/grey = 2,
- /obj/item/clothing/under/det/skirt = 2,
- /obj/item/clothing/under/det = 2,
- /obj/item/clothing/head/det = 2,
- /obj/item/clothing/suit/storage/det_trench,
- /obj/item/clothing/suit/storage/det_trench/grey,
- /obj/item/clothing/suit/storage/forensics/red,
- /obj/item/clothing/suit/storage/forensics/blue,
- /obj/item/clothing/under/det/corporate = 2,
- /obj/item/clothing/accessory/badge/holo/detective = 2,
- /obj/item/clothing/gloves/black = 2
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Investigation clothing"
- access = ACCESS_SECURITY_FORENSICS
-
-/datum/supply_pack/security/officergear
- name = "Gear - Officer equipment"
- contains = list(
- /obj/item/clothing/suit/storage/vest/officer,
- /obj/item/clothing/head/helmet,
- /obj/item/cartridge/security,
- /obj/item/clothing/accessory/badge/holo,
- /obj/item/clothing/accessory/badge/holo/cord,
- /obj/item/radio/headset/headset_sec,
- /obj/item/storage/belt/security,
- /obj/item/flash,
- /obj/item/reagent_containers/spray/pepper,
- /obj/item/grenade/flashbang,
- /obj/item/melee/baton/loaded,
- /obj/item/clothing/glasses/sunglasses/sechud,
- /obj/item/barrier_tape_roll/police,
- /obj/item/clothing/gloves/black,
- /obj/item/hailer,
- /obj/item/flashlight/flare,
- /obj/item/clothing/accessory/storage/black_vest,
- /obj/item/clothing/head/soft/sec/corp,
- /obj/item/clothing/under/rank/security/corp,
- /obj/item/gun/energy/taser,
- /obj/item/flashlight/maglight
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Officer equipment"
- access = ACCESS_SECURITY_BRIG
-
-/datum/supply_pack/security/wardengear
- name = "Gear - Warden equipment"
- contains = list(
- /obj/item/clothing/suit/storage/vest/warden,
- /obj/item/clothing/under/rank/warden,
- /obj/item/clothing/under/rank/warden/corp,
- /obj/item/clothing/suit/storage/vest/wardencoat,
- /obj/item/clothing/suit/storage/vest/wardencoat/alt,
- /obj/item/clothing/head/helmet/warden,
- /obj/item/cartridge/security,
- /obj/item/radio/headset/headset_sec,
- /obj/item/clothing/glasses/sunglasses/sechud,
- /obj/item/barrier_tape_roll/police,
- /obj/item/hailer,
- /obj/item/clothing/accessory/badge/holo/warden,
- /obj/item/storage/box/flashbangs,
- /obj/item/storage/belt/security,
- /obj/item/reagent_containers/spray/pepper,
- /obj/item/melee/baton/loaded,
- /obj/item/storage/box/holobadge,
- /obj/item/clothing/head/beret/sec/corporate/warden,
- /obj/item/flashlight/maglight
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Warden equipment"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/headofsecgear
- name = "Gear - Head of security equipment"
- contains = list(
- /obj/item/clothing/head/helmet/HoS,
- /obj/item/clothing/suit/storage/vest/hos,
- /obj/item/clothing/under/rank/head_of_security/corp,
- /obj/item/clothing/suit/storage/vest/hoscoat,
- /obj/item/clothing/head/helmet/dermal,
- /obj/item/cartridge/hos,
- /obj/item/radio/headset/heads/hos,
- /obj/item/clothing/glasses/sunglasses/sechud,
- /obj/item/storage/belt/security,
- /obj/item/flash,
- /obj/item/hailer,
- /obj/item/clothing/accessory/badge/holo/hos,
- /obj/item/clothing/accessory/holster/waist,
- /obj/item/melee/telebaton,
- /obj/item/shield/riot/tele,
- /obj/item/clothing/head/beret/sec/corporate/hos,
- /obj/item/flashlight/maglight
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Head of security equipment"
- access = ACCESS_SECURITY_HOS
-
-/datum/supply_pack/security/securityclothing
- name = "Misc - Security uniform red"
- contains = list(
- /obj/item/storage/backpack/satchel/sec = 2,
- /obj/item/storage/backpack/security = 2,
- /obj/item/clothing/accessory/armband = 4,
- /obj/item/clothing/under/rank/security = 4,
- /obj/item/clothing/under/rank/security2 = 4,
- /obj/item/clothing/under/rank/warden,
- /obj/item/clothing/under/rank/head_of_security,
- /obj/item/clothing/head/soft/sec = 4,
- /obj/item/clothing/gloves/black = 4,
- /obj/item/storage/box/holobadge
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security uniform crate"
-
-/datum/supply_pack/security/navybluesecurityclothing
- name = "Misc - Security uniform navy blue"
- contains = list(
- /obj/item/storage/backpack/satchel/sec = 2,
- /obj/item/storage/backpack/security = 2,
- /obj/item/clothing/under/rank/security/navyblue = 4,
- /obj/item/clothing/suit/security/navyofficer = 4,
- /obj/item/clothing/under/rank/warden/navyblue,
- /obj/item/clothing/suit/security/navywarden,
- /obj/item/clothing/under/rank/head_of_security/navyblue,
- /obj/item/clothing/suit/security/navyhos,
- /obj/item/clothing/head/beret/sec/navy/officer = 4,
- /obj/item/clothing/head/beret/sec/navy/warden,
- /obj/item/clothing/head/beret/sec/navy/hos,
- /obj/item/clothing/gloves/black = 4,
- /obj/item/storage/box/holobadge
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Navy blue security uniform crate"
-
-/datum/supply_pack/security/corporatesecurityclothing
- name = "Misc - Security uniform corporate"
- contains = list(
- /obj/item/storage/backpack/satchel/sec = 2,
- /obj/item/storage/backpack/security = 2,
- /obj/item/clothing/under/rank/security/corp = 4,
- /obj/item/clothing/head/soft/sec/corp = 4,
- /obj/item/clothing/under/rank/warden/corp,
- /obj/item/clothing/under/rank/head_of_security/corp,
- /obj/item/clothing/head/beret/sec = 4,
- /obj/item/clothing/head/beret/sec/corporate/warden,
- /obj/item/clothing/head/beret/sec/corporate/hos,
- /obj/item/clothing/under/det/corporate = 2,
- /obj/item/clothing/gloves/black = 4,
- /obj/item/storage/box/holobadge
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Corporate security uniform crate"
-
-/datum/supply_pack/security/biosuit
- name = "Gear - Security biohazard gear"
- contains = list(
- /obj/item/clothing/head/bio_hood/security = 3,
- /obj/item/clothing/under/rank/security = 3,
- /obj/item/clothing/suit/bio_suit/security = 3,
- /obj/item/clothing/shoes/white = 3,
- /obj/item/clothing/mask/gas = 3,
- /obj/item/tank/oxygen = 3,
- /obj/item/clothing/gloves/sterile/latex,
- /obj/item/storage/box/gloves
- )
- cost = 25
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security biohazard gear"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/security/posters
- name = "Gear - Morale Posters"
- contains = list(
- /obj/item/contraband/poster/nanotrasen = 6
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Morale Posters"
- access = ACCESS_ENGINEERING_MAINT
-
-/datum/supply_pack/security/biosuit
- contains = list(
- /obj/item/clothing/head/bio_hood/security = 3,
- /obj/item/clothing/under/rank/security = 3,
- /obj/item/clothing/suit/bio_suit/security = 3,
- /obj/item/clothing/shoes/white = 3,
- /obj/item/clothing/mask/gas = 3,
- /obj/item/tank/oxygen = 3,
- /obj/item/clothing/gloves/sterile/latex,
- /obj/item/storage/box/gloves
- )
- cost = 40
-
-/datum/supply_pack/randomised/security/holster
- num_contained = 5
- contains = list(
- /obj/item/clothing/accessory/holster,
- /obj/item/clothing/accessory/holster/armpit,
- /obj/item/clothing/accessory/holster/waist,
- /obj/item/clothing/accessory/holster/hip,
- /obj/item/clothing/accessory/holster/leg,
- /obj/item/storage/belt/dualholster
- )
-
-/datum/supply_pack/security/kevlarkit
- name = "Misc - Kevlar Upgrade Kits"
- contains = list(
- /obj/item/kevlarupgrade = 5,
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Kevlar Upgrade Kits"
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/security/pcarriers/combat
- name = "Armor - Combat Armor (P-Carrier)"
- contains = list(
- /obj/item/clothing/suit/armor/pcarrier = 3,
- /obj/item/clothing/accessory/armor/armorplate/combat = 3,
- /obj/item/clothing/accessory/armor/armguards/combat = 3,
- /obj/item/clothing/accessory/armor/legguards/combat = 3,
- /obj/item/clothing/head/helmet/redcombat = 3,
- )
- cost = 70
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Combat Armor crate"
- access = ACCESS_SECURITY_EQUIPMENT
- contraband = 1
-
-/datum/supply_pack/security/helmets
- name = "Armor - Helmet Pack"
- contains = list(
- /obj/item/clothing/head/helmet = 3,
- /obj/item/clothing/head/helmet/warden = 1,
- /obj/item/clothing/head/helmet/HoS = 1,
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- access = ACCESS_SECURITY_EQUIPMENT
-
-/datum/supply_pack/security/wardengear
- name = "Tracking Implants"
- contains = list(
- /obj/item/storage/box/trackimp = 1
- )
- cost = 30
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/battlerifle
- name = "Battle Rifle Pack"
- contains = list(
- /obj/item/gun/ballistic/automatic/battlerifle = 2,
- /obj/item/ammo_magazine/m95 = 4
- )
- cost = 60
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/security/quadshot
- name = "Quad Shotgun Pack"
- contains = list(
- /obj/item/gun/ballistic/shotgun/doublebarrel/quad = 2,
- /obj/item/storage/box/shotgunshells = 2,
- /obj/item/storage/belt/security/tactical/bandolier = 2,
- )
- cost = 70
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- access = ACCESS_SECURITY_ARMORY
diff --git a/code/modules/cargo/supplypacks/supply.dm b/code/modules/cargo/supplypacks/supply.dm
deleted file mode 100644
index dddafeb2e2c4..000000000000
--- a/code/modules/cargo/supplypacks/supply.dm
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-* Here is where any supply packs
-* related to civilian tasks live
-*/
-
-/datum/supply_pack/supply
- group = "Supplies"
-
-/datum/supply_pack/supply/food
- name = "Kitchen supply crate"
- contains = list(
- /obj/item/reagent_containers/food/condiment/flour = 6,
- /obj/item/reagent_containers/food/drinks/milk = 3,
- /obj/item/reagent_containers/food/drinks/soymilk = 2,
- /obj/item/storage/fancy/egg_box = 2,
- /obj/item/reagent_containers/food/snacks/tofu = 4,
- /obj/item/reagent_containers/food/snacks/meat = 4
- )
- cost = 10
- container_type = /obj/structure/closet/crate/corporate/centauri
- container_name = "Food crate"
-
-/datum/supply_pack/supply/toner
- name = "Toner cartridges"
- contains = list(/obj/item/toner = 6)
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Toner cartridges"
-
-/datum/supply_pack/supply/janitor
- name = "Janitorial supplies"
- contains = list(
- /obj/item/reagent_containers/glass/bucket,
- /obj/item/mop,
- /obj/item/clothing/under/rank/janitor,
- /obj/item/cartridge/janitor,
- /obj/item/clothing/gloves/black,
- /obj/item/clothing/head/soft/purple,
- /obj/item/storage/belt/janitor,
- /obj/item/clothing/shoes/galoshes,
- /obj/item/caution = 4,
- /obj/item/storage/bag/trash,
- /obj/item/lightreplacer,
- /obj/item/reagent_containers/spray/cleaner,
- /obj/item/reagent_containers/glass/rag,
- /obj/item/reagent_containers/spray/pestbgone,
- /obj/item/grenade/chem_grenade/cleaner = 3,
- /obj/structure/mopbucket
- )
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Janitorial supplies"
-
-/datum/supply_pack/supply/shipping
- name = "Shipping supplies"
- contains = list(
- /obj/fiftyspawner/cardboard,
- /obj/item/packageWrap = 4,
- /obj/item/wrapping_paper = 2,
- /obj/item/destTagger,
- /obj/item/hand_labeler,
- /obj/item/tool/wirecutters,
- /obj/item/duct_tape_roll = 2)
- cost = 10
- container_type = /obj/structure/closet/crate
- container_name = "Shipping supplies crate"
-
-/datum/supply_pack/supply/bureaucracy
- contains = list(
- /obj/item/clipboard = 2,
- /obj/item/pen/red,
- /obj/item/pen/blue,
- /obj/item/pen/blue,
- /obj/item/camera_film,
- /obj/item/folder/blue,
- /obj/item/folder/red,
- /obj/item/folder/yellow,
- /obj/item/hand_labeler,
- /obj/item/duct_tape_roll,
- /obj/structure/filingcabinet/chestdrawer/unanchored,
- /obj/item/paper_bin
- )
- name = "Office supplies"
- cost = 15
- container_type = /obj/structure/closet/crate
- container_name = "Office supplies crate"
-
-/datum/supply_pack/supply/spare_pda
- name = "Spare PDAs"
- cost = 10
- container_type = /obj/structure/closet/crate/corporate/thinktronic
- container_name = "Spare PDA crate"
- contains = list(/obj/item/pda = 3)
-
-/datum/supply_pack/supply/minergear
- name = "Shaft miner equipment"
- contains = list(
- /obj/item/storage/backpack/industrial,
- /obj/item/storage/backpack/satchel/eng,
- /obj/item/clothing/suit/storage/hooded/wintercoat/miner,
- /obj/item/radio/headset/headset_cargo,
- /obj/item/clothing/under/rank/miner,
- /obj/item/clothing/gloves/black,
- /obj/item/clothing/shoes/black,
- /obj/item/atmos_analyzer,
- /obj/item/storage/bag/ore,
- /obj/item/flashlight/lantern,
- /obj/item/shovel,
- /obj/item/pickaxe,
- /obj/item/mining_scanner,
- /obj/item/clothing/glasses/material,
- /obj/item/clothing/glasses/meson
- )
- cost = 10
- container_type = /obj/structure/closet/crate/secure/corporate/grayson
- container_name = "Shaft miner equipment"
- access = ACCESS_SUPPLY_MINE
-
-/* //MULE Bots can't traverse the Tether.
-/datum/supply_pack/supply/mule
- name = "Mulebot Crate"
- contains = list()
- cost = 20
- container_type = /obj/structure/largecrate/animal/mulebot
- container_name = "Mulebot Crate"
-*/
-
-
-//Culture Update
-/datum/supply_pack/misc/mining_tyrmalin
- name = "Tyrmalin Mining Crate"
- contains = list(
- /obj/item/melee/thermalcutter = 1,
- /obj/item/pickaxe/tyrmalin = 2,
- /obj/item/grenade/explosive/ied/tyrmalin = 2
- )
- cost = 60
- container_type = /obj/structure/closet/crate/secure/gear
- container_name = "Tyrmalin Mining crate"
- access = ACCESS_SUPPLY_MINE
-
-/datum/supply_pack/misc/breathing_nitrogen
- name = "Emergency Nitrogen Supplies"
- contains = list(
- /obj/item/tank/emergency/nitrogen = 2,
- /obj/item/tank/emergency/nitrogen/double = 1,
- /obj/item/clothing/mask/gas/opaque = 3
- )
- cost = 15
- container_type = /obj/structure/closet/crate/corporate/unathi
- container_name = "Emergency Nitrogen Supplies"
diff --git a/code/modules/cargo/supplypacks/vehicles.dm b/code/modules/cargo/supplypacks/vehicles.dm
deleted file mode 100644
index a44b48ad7107..000000000000
--- a/code/modules/cargo/supplypacks/vehicles.dm
+++ /dev/null
@@ -1,90 +0,0 @@
-/datum/supply_pack/vehicles
- group = "Vehicles"
-
-
-/datum/supply_pack/vehicles/dune_buggy
- name = "Exploration Dune Buggy"
- contains = list(
- /obj/vehicle_old/train/rover/engine/dunebuggy
- )
- cost = 100
- container_type = /obj/structure/largecrate
- container_name = "Exploration Dune Buggy Crate"
-
-
-/datum/supply_pack/vehicles/bike
- name = "Spacebike Crate"
- contains = list()
- cost = 200
- container_type = /obj/structure/largecrate/vehicle/bike
- container_name = "Spacebike Crate"
-
-/datum/supply_pack/vehicles/quadbike
- name = "ATV Crate"
- contains = list()
- cost = 30
- container_type = /obj/structure/largecrate/vehicle/quadbike
- container_name = "ATV Crate"
-
-/*
-/datum/supply_pack/vehicles/quadtrailer
- name = "ATV Trailer Crate"
- contains = list()
- cost = 50
- container_type = /obj/structure/largecrate/vehicle/quadtrailer
- container_name = "ATV Trailer Crate"
-*/
-
-/datum/supply_pack/vehicles/skatepack1
- name = "Beginner Skateboard Pack"
- contains = list(
- /obj/vehicle_old/skateboard/beginner = 3,
- /obj/item/clothing/head/helmet/bike_helmet/random = 3
- )
- cost = 100
- container_type = /obj/structure/closet/crate
- container_name = "Skateboard Crate - Beginner"
-
-/datum/supply_pack/vehicles/skatepack2
- name = "Professional Skateboard Pack"
- contains = list(
- /obj/vehicle_old/skateboard/pro = 2,
- /obj/item/clothing/head/helmet/bike_helmet/random = 2
- )
- cost = 200
- container_type = /obj/structure/closet/crate
- container_name = "Skateboard Crate - Professional"
-
-/datum/supply_pack/vehicles/skatepack3
- name = "Hoverboard Pack"
- contains = list(
- /obj/vehicle_old/skateboard/hoverboard = 2,
- /obj/item/clothing/head/helmet/bike_helmet/random = 2
- )
- cost = 300
- container_type = /obj/structure/closet/crate
- container_name = "Hoverboard Crate"
-
-/datum/supply_pack/vehicles/rover
- name = "NT Humvee"
- contains = list(
- /obj/vehicle_old/train/rover/engine
- )
- container_type = /obj/structure/largecrate
- container_name = "NT Humvee Crate"
- cost = 500
-
-
-/datum/supply_pack/vehicles/cargotrain
- name = "Cargo Train Tug"
- contains = list(/obj/vehicle_old/train/engine)
- cost = 35
- container_type = /obj/structure/largecrate
- container_name = "Cargo Train Tug Crate"
-
-/datum/supply_pack/vehicles/cargotrailer
- name = "Cargo Train Trolley"
- contains = list(/obj/vehicle_old/train/trolley)
- cost = 15
- container_type = /obj/structure/largecrate
- container_name = "Cargo Train Trolley Crate"
diff --git a/code/modules/cargo/supplypacks/voidsuits.dm b/code/modules/cargo/supplypacks/voidsuits.dm
deleted file mode 100644
index 9daaeb94fe79..000000000000
--- a/code/modules/cargo/supplypacks/voidsuits.dm
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
-* Here is where any supply packs
-* related to voidsuits live.
-*/
-
-
-/datum/supply_pack/voidsuits
- group = "Voidsuits"
-
-/datum/supply_pack/voidsuits/atmos
- name = "Atmospheric voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/atmos = 2,
- /obj/item/clothing/head/helmet/space/void/atmos = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2,
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/aether
- container_name = "Atmospheric voidsuit crate"
- access = ACCESS_ENGINEERING_ATMOS
-
-/datum/supply_pack/voidsuits/atmos/alt
- name = "Heavy Duty Atmospheric voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/atmos/alt = 2,
- /obj/item/clothing/head/helmet/space/void/atmos/alt = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2,
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/aether
- container_name = "Heavy Duty Atmospheric voidsuit crate"
- access = ACCESS_ENGINEERING_ATMOS
-
-/datum/supply_pack/voidsuits/engineering
- name = "Engineering voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/engineering = 2,
- /obj/item/clothing/head/helmet/space/void/engineering = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Engineering voidsuit crate"
- access = ACCESS_ENGINEERING_ENGINE
-
-/datum/supply_pack/voidsuits/engineering/construction
- name = "Engineering Construction voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/engineering/construction = 2,
- /obj/item/clothing/head/helmet/space/void/engineering/construction = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Engineering Construction voidsuit crate"
- access = ACCESS_ENGINEERING_ENGINE
-
-/datum/supply_pack/voidsuits/engineering/hazmat
- name = "Engineering Hazmat voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/engineering/hazmat = 2,
- /obj/item/clothing/head/helmet/space/void/engineering/hazmat = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 45
- container_type = /obj/structure/closet/crate/secure/corporate/aether
- container_name = "Engineering Hazmat voidsuit crate"
- access = ACCESS_ENGINEERING_ENGINE
-
-/datum/supply_pack/voidsuits/engineering/alt
- name = "Reinforced Engineering voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/engineering/alt = 2,
- /obj/item/clothing/head/helmet/space/void/engineering/alt = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/aether
- container_name = "Reinforced Engineering voidsuit crate"
- access = ACCESS_ENGINEERING_ENGINE
-
-/datum/supply_pack/voidsuits/medical
- name = "Medical voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/medical = 2,
- /obj/item/clothing/head/helmet/space/void/medical = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure
- container_name = "Medical voidsuit crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/voidsuits/medical/emt
- name = "Medical EMT voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/medical/emt = 2,
- /obj/item/clothing/head/helmet/space/void/medical/emt = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Medical EMT voidsuit crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/voidsuits/medical/bio
- name = "Medical Biohazard voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/medical/bio = 2,
- /obj/item/clothing/head/helmet/space/void/medical/bio = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 45
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Medical Biohazard voidsuit crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/voidsuits/medical/alt
- name = "Vey-Med Medical voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/medical/alt = 2,
- /obj/item/clothing/head/helmet/space/void/medical/alt = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 60
- container_type = /obj/structure/closet/crate/secure/corporate/veymed
- container_name = "Vey-Med Medical voidsuit crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/voidsuits/medical/alt2
- name = "Vey-Med Plated Medical voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/medical/alt_plated = 2,
- /obj/item/clothing/head/helmet/space/void/medical/alt_plated = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/veymed
- container_name = "Vey-Med Medical voidsuit crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/voidsuits/security
- name = "Security voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/security = 2,
- /obj/item/clothing/head/helmet/space/void/security = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security voidsuit crate"
-
-/datum/supply_pack/voidsuits/security/crowd
- name = "Security Crowd Control voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/security/riot = 2,
- /obj/item/clothing/head/helmet/space/void/security/riot = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security Crowd Control voidsuit crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/voidsuits/security/alt
- name = "Security EVA Riot voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/security/alt = 2,
- /obj/item/clothing/head/helmet/space/void/security/alt = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security EVA Riot voidsuit crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/voidsuits/supply
- name = "Mining voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/mining = 2,
- /obj/item/clothing/head/helmet/space/void/mining = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/grayson
- container_name = "Mining voidsuit crate"
- access = ACCESS_SUPPLY_MINE
-
-/datum/supply_pack/voidsuits/supply/alt
- name = "Frontier Mining voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/mining/alt = 2,
- /obj/item/clothing/head/helmet/space/void/mining/alt = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/grayson
- container_name = "Frontier Mining voidsuit crate"
- access = ACCESS_SUPPLY_MINE
-
-/datum/supply_pack/voidsuits/zaddat
- name = "Zaddat Shroud"
- contains = list(
- /obj/item/clothing/suit/space/void/zaddat = 1,
- /obj/item/clothing/mask/gas/zaddat = 1
- )
- cost = 30
- container_type = /obj/structure/closet/crate
- container_name = "Zaddat Shroud crate"
- access = null
-
-/datum/supply_pack/voidsuits/atmos
- contains = list(
- /obj/item/clothing/suit/space/void/atmos = 3,
- /obj/item/clothing/head/helmet/space/void/atmos = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3,
- )
-
-/datum/supply_pack/voidsuits/engineering
- contains = list(
- /obj/item/clothing/suit/space/void/engineering = 3,
- /obj/item/clothing/head/helmet/space/void/engineering = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/medical
- contains = list(
- /obj/item/clothing/suit/space/void/medical = 3,
- /obj/item/clothing/head/helmet/space/void/medical = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/medical/alt
- contains = list(
- /obj/item/clothing/suit/space/void/medical/alt = 3,
- /obj/item/clothing/head/helmet/space/void/medical/alt = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/security
- contains = list(
- /obj/item/clothing/suit/space/void/security = 3,
- /obj/item/clothing/head/helmet/space/void/security = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/security/crowd
- contains = list(
- /obj/item/clothing/suit/space/void/security/riot = 3,
- /obj/item/clothing/head/helmet/space/void/security/riot = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/security/alt
- contains = list(
- /obj/item/clothing/suit/space/void/security/alt = 3,
- /obj/item/clothing/head/helmet/space/void/security/alt = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/supply
- name = "Mining voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/mining = 3,
- /obj/item/clothing/head/helmet/space/void/mining = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/tank/oxygen = 3
- )
-
-/datum/supply_pack/voidsuits/explorer
- name = "Exploration voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/exploration = 3,
- /obj/item/clothing/head/helmet/space/void/exploration = 3,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Exploration voidsuit crate"
- access = ACCESS_GENERAL_EXPLORER
-
-/datum/supply_pack/voidsuits/pilot
- name = "Pilot voidsuits"
- contains = list(
- /obj/item/clothing/suit/space/void/pilot = 1,
- /obj/item/clothing/head/helmet/space/void/pilot = 1,
- /obj/item/clothing/mask/breath = 1,
- /obj/item/clothing/shoes/magboots = 1,
- /obj/item/tank/oxygen = 1
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Pilot voidsuit crate"
- access = ACCESS_GENERAL_PILOT
-
-//Cryosuits
-/datum/supply_pack/voidsuits/cryosec
- name = "Security cryosuits"
- contains = list(
- /obj/item/clothing/suit/space/void/security/cryo = 1,
- /obj/item/clothing/head/helmet/space/void/security/cryo = 1,
- /obj/item/clothing/mask/breath = 1,
- /obj/item/clothing/shoes/magboots = 1,
- /obj/item/tank/oxygen = 1
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Security cryosuit crate"
- access = ACCESS_SECURITY_ARMORY
-
-/datum/supply_pack/voidsuits/cryoengi
- name = "Engineering cryosuits"
- contains = list(
- /obj/item/clothing/suit/space/void/engineering/cryo = 1,
- /obj/item/clothing/head/helmet/space/void/engineering/cryo = 1,
- /obj/item/clothing/mask/breath = 1,
- /obj/item/clothing/shoes/magboots = 1,
- /obj/item/tank/oxygen = 1
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Engineering cryosuit crate"
- access = ACCESS_ENGINEERING_MAIN
-
-/datum/supply_pack/voidsuits/cryoatmos
- name = "Atmospherics cryosuits"
- contains = list(
- /obj/item/clothing/suit/space/void/atmos/cryo = 1,
- /obj/item/clothing/head/helmet/space/void/atmos/cryo = 1,
- /obj/item/clothing/mask/breath = 1,
- /obj/item/clothing/shoes/magboots = 1,
- /obj/item/tank/oxygen = 1
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Atmospherics cryosuit crate"
- access = ACCESS_ENGINEERING_ATMOS
-
-/datum/supply_pack/voidsuits/cryomining
- name = "Mining cryosuits"
- contains = list(
- /obj/item/clothing/suit/space/void/mining/cryo = 1,
- /obj/item/clothing/head/helmet/space/void/mining/cryo = 1,
- /obj/item/clothing/mask/breath = 1,
- /obj/item/clothing/shoes/magboots = 1,
- /obj/item/tank/oxygen = 1
- )
- cost = 20
- container_type = /obj/structure/closet/crate/secure/corporate/nanotrasen
- container_name = "Mining cryosuit crate"
- access = ACCESS_SUPPLY_MINE
-
-//ODST Suits
-
-/datum/supply_pack/voidsuits/odst
- name = "Hephaestus Icarus Combat Suits"
- contains = list(
- /obj/item/clothing/suit/space/void/odst = 2,
- /obj/item/clothing/head/helmet/space/void/odst = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- container_name = "Icarus Combat Suit crate"
-
-/datum/supply_pack/voidsuits/odst_med
- name = "Hephaestus Icarus Medic Suits"
- contains = list(
- /obj/item/clothing/suit/space/void/odst_med = 2,
- /obj/item/clothing/head/helmet/space/void/odst_med = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 60
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- container_name = "Hephaestheus Icarus Medic crate"
- access = ACCESS_MEDICAL_EQUIPMENT
-
-/datum/supply_pack/voidsuits/odst_eng
- name = "Hephaestus Icarus Engineer Suits"
- contains = list(
- /obj/item/clothing/suit/space/void/odst_eng = 2,
- /obj/item/clothing/head/helmet/space/void/odst_eng = 2,
- /obj/item/clothing/mask/breath = 2,
- /obj/item/clothing/shoes/magboots = 2,
- /obj/item/tank/oxygen = 2
- )
- cost = 40
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- container_name = "Hephaestheus Icarus Engineer crate"
- access = ACCESS_ENGINEERING_ENGINE
-
-/datum/supply_pack/voidsuits/odst_exp
- name = "Hephaestus Icarus Frontier Suits"
- contains = list(
- /obj/item/clothing/suit/space/void/odst_exp = 2,
- /obj/item/clothing/head/helmet/space/void/odst_exp = 2,
- /obj/item/clothing/mask/breath = 3,
- /obj/item/clothing/shoes/magboots = 3,
- /obj/item/tank/oxygen = 3
- )
- cost = 50
- container_type = /obj/structure/closet/crate/secure/corporate/heph
- container_name = "Hephaestheus Icarus Frontier crate"
- access = ACCESS_GENERAL_EXPLORER
diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm
index 69a9cbe4ee0b..c6158d2fc084 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -442,7 +442,6 @@
GLOB.admins -= src //delete them on the managed one too
active_mousedown_item = null
- SSping.currentrun -= src
//* cleanup rendering
// clear perspective
@@ -468,7 +467,9 @@
mob?.pre_logout(src)
//* cleanup from SSinput
- SSinput.currentrun -= src
+ SSinput.currentrun?.Remove(src)
+ //* cleanup from SSping
+ SSping.currentrun?.Remove(src)
. = ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening
return QDEL_HINT_HARDDEL_NOW
diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm
index 5b7d5f82ddcc..5dffd45ae06e 100644
--- a/code/modules/clothing/glasses/_glasses.dm
+++ b/code/modules/clothing/glasses/_glasses.dm
@@ -152,6 +152,7 @@ BLIND // can't see anything
vision_flags_remove = SEE_BLACKNESS
body_cover_flags = EYES //cit change
vision_modifier = /datum/vision/augmenting/legacy_ghetto_nvgs
+ worth_intrinsic = 125
/obj/item/clothing/glasses/meson/prescription
name = "prescription mesons"
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 6a2b9a7d9aac..668f93731198 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -335,6 +335,7 @@
desc = "Safety gear designed to protect the head from impacts. It's a bit dorky."
icon_state = "sport"
armor_type = /datum/armor/head/hardhat
+ worth_intrinsic = 75
color = "#ffffff"
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index e74208853f3a..a682500a4fe8 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -11,6 +11,7 @@
permeability_coefficient = 0.01
siemens_coefficient = 0.9
armor_type = /datum/armor/mask/gas
+ worth_intrinsic = 50
var/gas_filter_strength = 1 //For gas mask filters
var/list/filtered_gases = list(GAS_ID_PHORON, GAS_ID_NITROUS_OXIDE)
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 3e525bd9a284..18716cdd619d 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -16,6 +16,7 @@
step_volume_mod = 1.3
drop_sound = 'sound/items/drop/metalboots.ogg'
pickup_sound = 'sound/items/pickup/toolbox.ogg'
+ worth_intrinsic = 250
var/encumbrance_on = ITEM_ENCUMBRANCE_SHOES_MAGBOOTS_PULSE
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index 4b8014e48c85..fc2803aa8eb5 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -108,6 +108,7 @@
flash_protection = FLASH_PROTECTION_NONE
encumbrance = ITEM_ENCUMBRANCE_EMERGENCY_SOFTSUIT_HELMET
weight = ITEM_WEIGHT_EMERGENCY_SOFTSUIT_HELMET
+ worth_intrinsic = 75
/obj/item/clothing/suit/space/emergency
name = "Emergency Softsuit"
@@ -115,6 +116,7 @@
desc = "A thin, ungainly softsuit colored in blaze orange for rescuers to easily locate, looks pretty fragile."
encumbrance = ITEM_ENCUMBRANCE_EMERGENCY_SOFTSUIT
weight = ITEM_WEIGHT_EMERGENCY_SOFTSUIT
+ worth_intrinsic = 200
//Russian Emergency Suit
/obj/item/clothing/head/helmet/space/emergency/russian
diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm
index 8b22e75f756e..be3f3ab703db 100644
--- a/code/modules/clothing/spacesuits/void/merc.dm
+++ b/code/modules/clothing/spacesuits/void/merc.dm
@@ -114,6 +114,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
siemens_coefficient = 0.6
species_restricted = null
+ helmet_type = /obj/item/clothing/head/helmet/space/void/odst
/obj/item/clothing/head/helmet/space/void/odst_med
name = "hephaestus icarus medic helmet"
@@ -133,6 +134,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
siemens_coefficient = 0.6
species_restricted = null
+ helmet_type = /obj/item/clothing/head/helmet/space/void/odst_med
/obj/item/clothing/head/helmet/space/void/odst_eng
name = "hephaestus icarus engineer helmet"
@@ -152,6 +154,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
siemens_coefficient = 0.6
species_restricted = null
+ helmet_type = /obj/item/clothing/head/helmet/space/void/odst_eng
/obj/item/clothing/head/helmet/space/void/odst_exp
name = "hephaestus icarus frontier helmet"
@@ -171,6 +174,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
siemens_coefficient = 0.6
species_restricted = null
+ helmet_type = /obj/item/clothing/head/helmet/space/void/odst_exp
// Admin spawn only, Necropolis Industries event gear
@@ -194,6 +198,7 @@
allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword,/obj/item/handcuffs)
siemens_coefficient = 0.6
species_restricted = null
+ helmet_type = /obj/item/clothing/head/helmet/space/void/odst_necro
/obj/item/clothing/suit/space/void/odst_necromed
icon_state = "odst_red_mil"
diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm
index 2f43860e0a64..012172bcb562 100644
--- a/code/modules/clothing/spacesuits/void/station.dm
+++ b/code/modules/clothing/spacesuits/void/station.dm
@@ -1,242 +1,3 @@
-// Station voidsuits
-//Engineering
-/obj/item/clothing/head/helmet/space/void/engineering
- name = "engineering voidsuit helmet"
- desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
- icon_state = "rig0-engineering"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_helm", SLOT_ID_LEFT_HAND = "eng_helm")
- armor_type = /datum/armor/engineering/space
- min_pressure_protection = 0 * ONE_ATMOSPHERE
- max_pressure_protection = 15 * ONE_ATMOSPHERE
-
-/obj/item/clothing/suit/space/void/engineering
- name = "engineering voidsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
- icon_state = "rig-engineering"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_voidsuit", SLOT_ID_LEFT_HAND = "eng_voidsuit")
- armor_type = /datum/armor/engineering/space
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/bag/ore,/obj/item/t_scanner,/obj/item/pickaxe, /obj/item/rcd)
- min_pressure_protection = 0 * ONE_ATMOSPHERE
- max_pressure_protection = 15 * ONE_ATMOSPHERE
-
-//Engineering HAZMAT Voidsuit
-
-/obj/item/clothing/head/helmet/space/void/engineering/hazmat
- name = "HAZMAT voidsuit helmet"
- desc = "A engineering helmet designed for work in a low-pressure environment. Extra radiation shielding appears to have been installed at the price of comfort."
- icon_state = "rig0-engineering_rad"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_helm_rad", SLOT_ID_LEFT_HAND = "eng_helm_rad")
- armor_type = /datum/armor/engineering/space/hazmat
-
-/obj/item/clothing/suit/space/void/engineering/hazmat
- name = "HAZMAT voidsuit"
- desc = "A engineering voidsuit that protects against hazardous, low pressure environments. Has enhanced radiation shielding compared to regular engineering voidsuits."
- icon_state = "rig-engineering_rad"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_voidsuit_rad", SLOT_ID_LEFT_HAND = "eng_voidsuit_rad")
- armor_type = /datum/armor/engineering/space/hazmat
-
-//Engineering Construction Voidsuit
-
-/obj/item/clothing/head/helmet/space/void/engineering/construction
- name = "construction voidsuit helmet"
- icon_state = "rig0-engineering_con"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_helm_con", SLOT_ID_LEFT_HAND = "eng_helm_con")
-
-/obj/item/clothing/suit/space/void/engineering/construction
- name = "construction voidsuit"
- icon_state = "rig-engineering_con"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_voidsuit_con", SLOT_ID_LEFT_HAND = "eng_voidsuit_con")
-
-//Engineering Surplus Voidsuits
-
-/obj/item/clothing/head/helmet/space/void/engineering/alt
- name = "reinforced engineering voidsuit helmet"
- desc = "A heavy, radiation-shielded voidsuit helmet with a surprisingly comfortable interior."
- icon_state = "rig0-engineeringalt"
- armor_type = /datum/armor/engineering/space/heavy
- light_overlay = "helmet_light_dual"
-
-/obj/item/clothing/suit/space/void/engineering/alt
- name = "reinforced engineering voidsuit"
- desc = "A bulky industrial voidsuit. It's a few generations old, but a reliable design and radiation shielding make up for the lack of climate control."
- icon_state = "rig-engineeringalt"
- armor_type = /datum/armor/engineering/space/heavy
-
-/obj/item/clothing/head/helmet/space/void/engineering/salvage
- name = "salvage voidsuit helmet"
- desc = "A heavily modified salvage voidsuit helmet. It has been fitted with radiation-resistant plating."
- icon_state = "rig0-salvage"
- item_state_slots = list(
- SLOT_ID_LEFT_HAND = "eng_helm",
- SLOT_ID_RIGHT_HAND = "eng_helm",
- )
- armor_type = /datum/armor/engineering/space/salvage
-
-/obj/item/clothing/suit/space/void/engineering/salvage
- name = "salvage voidsuit"
- desc = "A hand-me-down salvage voidsuit. It has obviously had a lot of repair work done to its radiation shielding."
- icon_state = "rig-engineeringsav"
- armor_type = /datum/armor/engineering/space/salvage
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/t_scanner,/obj/item/rcd)
-
-//Mining
-/obj/item/clothing/head/helmet/space/void/mining
- name = "mining voidsuit helmet"
- desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating."
- icon_state = "rig0-mining"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "mining_helm", SLOT_ID_LEFT_HAND = "mining_helm")
- armor_type = /datum/armor/cargo/mining/space
- light_overlay = "helmet_light_dual"
-
-/obj/item/clothing/suit/space/void/mining
- name = "mining voidsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
- icon_state = "rig-mining"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "mining_voidsuit", SLOT_ID_LEFT_HAND = "mining_voidsuit")
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/pickaxe)
- armor_type = /datum/armor/cargo/mining/space
-
-//Mining Surplus Voidsuit
-
-/obj/item/clothing/head/helmet/space/void/mining/alt
- name = "frontier mining voidsuit helmet"
- desc = "An armored cheap voidsuit helmet. Someone must have through they were pretty cool when they painted a mohawk on it."
- icon_state = "rig0-miningalt"
- armor_type = /datum/armor/cargo/mining/space/armored
-
-/obj/item/clothing/suit/space/void/mining/alt
- icon_state = "rig-miningalt"
- name = "frontier mining voidsuit"
- desc = "A cheap prospecting voidsuit. What it lacks in comfort it makes up for in armor plating and street cred."
- armor_type = /datum/armor/cargo/mining/space/armored
-
-//Medical
-/obj/item/clothing/head/helmet/space/void/medical
- name = "medical voidsuit helmet"
- desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
- icon_state = "rig0-medical"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_helm", SLOT_ID_LEFT_HAND = "medical_helm")
- armor_type = /datum/armor/medical/space
-
-/obj/item/clothing/suit/space/void/medical
- name = "medical voidsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding."
- icon_state = "rig-medical"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_voidsuit", SLOT_ID_LEFT_HAND = "medical_voidsuit")
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/firstaid,/obj/item/healthanalyzer,/obj/item/stack/medical)
- armor_type = /datum/armor/medical/space
-
-//Medical EMT Voidsuit
-
-/obj/item/clothing/head/helmet/space/void/medical/emt
- name = "emergency medical response voidsuit helmet"
- icon_state = "rig0-medical_emt"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_helm_emt", SLOT_ID_LEFT_HAND = "medical_helm_emt")
-
-/obj/item/clothing/suit/space/void/medical/emt
- name = "emergency medical response voidsuit"
- icon_state = "rig-medical_emt"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_voidsuit_emt", SLOT_ID_LEFT_HAND = "medical_voidsuit_emt")
-
-//Medical Biohazard Voidsuit
-
-/obj/item/clothing/head/helmet/space/void/medical/bio
- name = "biohazard voidsuit helmet"
- desc = "A special helmet that protects against hazardous environments. Has minor radiation shielding."
- icon_state = "rig0-medical_bio"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_helm_bio", SLOT_ID_LEFT_HAND = "medical_helm_bio")
- armor_type = /datum/armor/medical/space
-
-/obj/item/clothing/suit/space/void/medical/bio
- name = "biohazard voidsuit"
- desc = "A special suit that protects against hazardous, environments. It feels heavier than the standard suit with extra protection around the joints."
- icon_state = "rig-medical_bio"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_voidsuit_bio", SLOT_ID_LEFT_HAND = "medical_voidsuit_bio")
- armor_type = /datum/armor/medical/space
-
-//Medical Streamlined Voidsuit
-/obj/item/clothing/head/helmet/space/void/medical/alt
- name = "streamlined medical voidsuit helmet"
- desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue."
- icon_state = "rig0-medicalalt"
- armor_type = /datum/armor/medical/space
- light_overlay = "helmet_light_dual_blue"
- encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HELMET_ULTRALIGHT
- weight = ITEM_WEIGHT_VOIDSUIT_HELMET_ULTRALIGHT
-
-/obj/item/clothing/head/helmet/space/void/medical/alt_plated
- name = "streamlined medical voidsuit helmet"
- desc = "A trendy, fully biohazard and radiation-shielded voidsuit helmet trimmed in a sleek blue."
- icon_state = "rig0-medicalalt2"
- armor_type = /datum/armor/medical/space/upgraded
- light_overlay = "helmet_light_dual_blue"
- encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HELMET_ULTRALIGHT
- weight = ITEM_WEIGHT_VOIDSUIT_HELMET_ULTRALIGHT
-
-/obj/item/clothing/suit/space/void/medical/alt
- icon_state = "rig-medicalalt"
- name = "streamlined medical voidsuit"
- desc = "A more recent model of Vey-Med voidsuit, exchanging physical protection for fully unencumbered movement and a complete range of motion."
- encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_ULTRALIGHT
- weight = ITEM_WEIGHT_VOIDSUIT_ULTRALIGHT
- armor_type = /datum/armor/medical/space
-
-/obj/item/clothing/suit/space/void/medical/alt_plated
- icon_state = "rig-medicalalt2"
- name = "plated medical voidsuit"
- desc = "An iteration of an existing Vey-Med voidsuit, allowing full biohazard, radiation and increased close-quarters protection, at the expense of projectile and ranged layers."
- encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_ULTRALIGHT
- weight = ITEM_WEIGHT_VOIDSUIT_ULTRALIGHT
- armor_type = /datum/armor/medical/space/upgraded
-
-//Security
-/obj/item/clothing/head/helmet/space/void/security
- name = "security voidsuit helmet"
- desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
- icon_state = "rig0-sec"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_helm", SLOT_ID_LEFT_HAND = "sec_helm")
- armor_type = /datum/armor/station/secsuit
- siemens_coefficient = 0.7
- light_overlay = "helmet_light_dual"
- camera_networks = list(NETWORK_SEC_HELMETS)
-
-/obj/item/clothing/suit/space/void/security
- name = "security voidsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
- icon_state = "rig-sec"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_voidsuit", SLOT_ID_LEFT_HAND = "sec_voidsuit")
- armor_type = /datum/armor/station/secsuit
- allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton)
- siemens_coefficient = 0.7
-
-//Security Alternate Voidsuit
-//Todo: Swap crowd control and riot icons and names.
-
-/obj/item/clothing/head/helmet/space/void/security/riot
- name = "crowd control voidsuit helmet"
- icon_state = "rig0-sec_riot"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_helm_riot", SLOT_ID_LEFT_HAND = "sec_helm_riot")
-
-/obj/item/clothing/suit/space/void/security/riot
- name = "crowd control voidsuit"
- icon_state = "rig-sec_riot"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_voidsuit_riot", SLOT_ID_LEFT_HAND = "sec_voidsuit_riot")
-
-//Security Riot Voidsuit
-//Todo: Both of them being called Riot/CC with one in the suit cycler, and one with actual armor values is really dumb. Seriously.
-/obj/item/clothing/head/helmet/space/void/security/alt
- name = "riot security voidsuit helmet"
- desc = "A somewhat tacky voidsuit helmet, a fact mitigated by heavy armor plating."
- icon_state = "rig0-secalt"
- armor_type = /datum/armor/station/secsuitriot
-
-/obj/item/clothing/suit/space/void/security/alt
- icon_state = "rig-secalt"
- name = "riot security voidsuit"
- desc = "A heavily armored voidsuit, designed to intimidate people who find black intimidating. Surprisingly slimming."
- armor_type = /datum/armor/station/secsuitriot
- allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton)
-
//Cydonia Armor
/obj/item/clothing/head/helmet/space/void/security/cydonia
name = "cydonian helmet"
@@ -248,155 +9,7 @@
name = "cydonian voidsuit"
desc = "A bulky, but well armored suit capable of protecting the wearer from both trauma and hazardous environments."
icon_state = "knight_cydonia"
-
-//Atmospherics
-/obj/item/clothing/head/helmet/space/void/atmos
- desc = "A special helmet designed for work in a hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
- name = "atmospherics voidsuit helmet"
- icon_state = "rig0-atmos"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_helm", SLOT_ID_LEFT_HAND = "atmos_helm")
- armor_type = /datum/armor/engineering/space/atmos
- max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
- light_overlay = "helmet_light_dual"
- min_pressure_protection = 0 * ONE_ATMOSPHERE
- max_pressure_protection = 20* ONE_ATMOSPHERE
-
-/obj/item/clothing/suit/space/void/atmos
- name = "atmos voidsuit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
- icon_state = "rig-atmos"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_voidsuit", SLOT_ID_LEFT_HAND = "atmos_voidsuit")
- armor_type = /datum/armor/engineering/space/atmos
- max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
- min_pressure_protection = 0 * ONE_ATMOSPHERE
- max_pressure_protection = 20* ONE_ATMOSPHERE
-
-//Atmospherics Surplus Voidsuit
-
-/obj/item/clothing/head/helmet/space/void/atmos/alt
- desc = "A special voidsuit helmet designed for work in hazardous, low pressure environments.This one has been plated with an expensive heat and radiation resistant ceramic."
- name = "heavy duty atmospherics voidsuit helmet"
- icon_state = "rig0-atmosalt"
- armor_type = /datum/armor/engineering/space/atmos/heavy
- max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
- light_overlay = "hardhat_light"
-
-/obj/item/clothing/suit/space/void/atmos/alt
- desc = "A special suit that protects against hazardous, low pressure environments. Fits better than the standard atmospheric voidsuit while still rated to withstand extreme heat and even minor radiation."
- icon_state = "rig-atmosalt"
- name = "heavy duty atmos voidsuit"
- armor_type = /datum/armor/engineering/space/atmos/heavy
- max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
-
-//Exploration
-/obj/item/clothing/head/helmet/space/void/exploration
- name = "exploration voidsuit helmet"
- desc = "A radiation-resistant helmet made especially for exploring unknown planetary environments."
- icon_state = "helm_explorer"
- item_state = "helm_explorer"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "syndicate-helm-black", SLOT_ID_LEFT_HAND = "syndicate-helm-black")
- armor_type = /datum/armor/exploration/space
- light_overlay = "helmet_light_dual" //explorer_light
- camera_networks = list(NETWORK_EXPLO_HELMETS)
-
-/obj/item/clothing/suit/space/void/exploration
- name = "exploration voidsuit"
- desc = "A lightweight, radiation-resistant voidsuit, featuring the Explorer emblem on its chest plate. Designed for exploring unknown planetary environments."
- icon_state = "void_explorer"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "skrell_suit_black", SLOT_ID_LEFT_HAND = "skrell_suit_black")
- armor_type = /datum/armor/exploration/space
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/healthanalyzer,/obj/item/gps,/obj/item/radio/beacon, \
- /obj/item/shovel,/obj/item/ammo_magazine,/obj/item/gun)
-
-/obj/item/clothing/head/helmet/space/void/exploration/alt
- desc = "A radiation-resistant helmet made especially for exploring unknown planetary environments."
- icon_state = "helm_explorer2"
- item_state = "helm_explorer2"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "mining_helm", SLOT_ID_LEFT_HAND = "mining_helm")
-
-/obj/item/clothing/suit/space/void/exploration/alt
- desc = "A lightweight, radiation-resistant voidsuit. Designed for exploring unknown planetary environments."
- icon_state = "void_explorer2"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "skrell_suit_white", SLOT_ID_LEFT_HAND = "skrell_suit_white")
-
-/obj/item/clothing/head/helmet/space/void/exploration/pathfinder
- name = "pathfinder voidsuit helmet"
- desc = "A comfortable helmet designed to provide protection for Pathfinder units on long-term operations."
- icon_state = "helm_explorer_pf"
- item_state = "helm_explorer_pf"
- armor_type = /datum/armor/exploration/space/pathfinder
-
-/obj/item/clothing/suit/space/void/exploration/pathfinder
- name = "pathfinder voidsuit"
- desc = "A versatile, armored voidsuit, featuring the Pathfinder emblem on its chest plate. Designed for long deployments in unknown planetary environments."
- icon_state = "void_explorer_pf"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "skrell_suit_black", SLOT_ID_LEFT_HAND = "skrell_suit_black")
- armor_type = /datum/armor/exploration/space/pathfinder
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/healthanalyzer,/obj/item/gps,/obj/item/radio/beacon, \
- /obj/item/shovel,/obj/item/ammo_magazine,/obj/item/gun)
-
-//Pilot
-/obj/item/clothing/head/helmet/space/void/pilot
- desc = "An atmos resistant helmet for space and planet exploration."
- name = "pilot voidsuit helmet"
- icon_state = "rig0_pilot"
- item_state = "pilot_helm"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_helm", SLOT_ID_LEFT_HAND = "atmos_helm")
- armor_type = /datum/armor/exploration/space/pilot
- max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
- light_overlay = "helmet_light_dual"
- camera_networks = list(NETWORK_EXPLO_HELMETS)
-
-/obj/item/clothing/suit/space/void/pilot
- desc = "An atmos resistant voidsuit for space and planet exploration."
- icon_state = "rig-pilot"
- item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_voidsuit", SLOT_ID_LEFT_HAND = "atmos_voidsuit")
- name = "pilot voidsuit"
- armor_type = /datum/armor/exploration/space/pilot
- max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable)
-
-/obj/item/clothing/head/helmet/space/void/pilot/alt
- icon_state = "rig0_pilot2"
- item_state = "pilot_helm2"
-
-/obj/item/clothing/suit/space/void/pilot/alt
- desc = "An atmos resistant voidsuit for space."
- icon_state = "rig-pilot2"
- item_state = "rig-pilot2"
-
-//Captain (cit addition, the idea is to replace the "Facility Director armor" which doesnt function like a voidsuit
-/obj/item/clothing/head/helmet/space/void/captain
- desc = "Shiny blue helmet, complete with far-too-big golden visor. It probably doesn't protects from bright flashes."
- name = "Facility Director voidsuit helmet"
- icon_state = "capvoid"
- armor_type = /datum/armor/station/tactical
-
-/obj/item/clothing/suit/space/void/captain
- desc = "Sleek, blue and gold suit, fitted with spaceproofing and protective inserts. Fits like an oversized, shiny glove."
- name = "Facility Director voidsuit"
- icon_state = "capsuit_void"
- armor_type = /datum/armor/station/tactical
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun)
-
-//Head of Security - update to the snowflake suit
-/obj/item/clothing/head/helmet/space/void/headofsecurity
- desc = "A customized security voidsuit helmet. Has additional composite armor."
- name = "head of security protosuit helmet"
- icon_state = "hosproto"
- armor_type = /datum/armor/security/hos/space
- camera_networks = list(NETWORK_SEC_HELMETS)
- encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HELMET_HEAVY
- weight = ITEM_WEIGHT_VOIDSUIT_HELMET_HEAVY
-
-/obj/item/clothing/suit/space/void/headofsecurity
- desc = "A customized security voidsuit. Has additional composite armor."
- name = "head of security protosuit"
- icon_state = "hosproto_void"
- armor_type = /datum/armor/security/hos/space
- allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun)
- encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HEAVY
- weight = ITEM_WEIGHT_VOIDSUIT_HEAVY
+ helmet_type = /obj/item/clothing/head/helmet/space/void/security/cydonia
//PARA
/obj/item/clothing/head/helmet/space/void/para
@@ -461,6 +74,7 @@
icon_state = "cryo_sec"
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
RENDER_LEGACY_PATCH_NO_CYCLING
+ helmet_type = /obj/item/clothing/head/helmet/space/void/security/cryo
//Engi
/obj/item/clothing/head/helmet/space/void/engineering/cryo
@@ -478,6 +92,7 @@
icon_state = "cryo_engi"
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
RENDER_LEGACY_PATCH_NO_CYCLING
+ helmet_type = /obj/item/clothing/head/helmet/space/void/engineering/cryo
//Atmospherics
/obj/item/clothing/head/helmet/space/void/atmos/cryo
@@ -495,6 +110,7 @@
icon_state = "cryo_atmos"
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
RENDER_LEGACY_PATCH_NO_CYCLING
+ helmet_type = /obj/item/clothing/head/helmet/space/void/atmos/cryo
//Mining
/obj/item/clothing/head/helmet/space/void/mining/cryo
@@ -512,3 +128,4 @@
icon_state = "cryo_mining"
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
RENDER_LEGACY_PATCH_NO_CYCLING
+ helmet_type = /obj/item/clothing/head/helmet/space/void/mining/cryo
diff --git a/code/modules/clothing/spacesuits/void/station/command.dm b/code/modules/clothing/spacesuits/void/station/command.dm
new file mode 100644
index 000000000000..07b675f7f2e8
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/command.dm
@@ -0,0 +1,13 @@
+/obj/item/clothing/head/helmet/space/void/captain
+ desc = "Shiny blue helmet, complete with far-too-big golden visor. It probably doesn't protect from bright flashes."
+ name = "Facility Director voidsuit helmet"
+ icon_state = "capvoid"
+ armor_type = /datum/armor/station/tactical
+
+/obj/item/clothing/suit/space/void/captain
+ desc = "Sleek, blue and gold suit, fitted with spaceproofing and protective inserts. Fits like an oversized, shiny glove."
+ name = "Facility Director voidsuit"
+ icon_state = "capsuit_void"
+ armor_type = /datum/armor/station/tactical
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun)
+ helmet_type = /obj/item/clothing/head/helmet/space/void/captain
diff --git a/code/modules/clothing/spacesuits/void/station/engineering.dm b/code/modules/clothing/spacesuits/void/station/engineering.dm
new file mode 100644
index 000000000000..82c1fc2900cb
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/engineering.dm
@@ -0,0 +1,122 @@
+/obj/item/clothing/head/helmet/space/void/engineering
+ name = "engineering voidsuit helmet"
+ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding."
+ icon_state = "rig0-engineering"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_helm", SLOT_ID_LEFT_HAND = "eng_helm")
+ armor_type = /datum/armor/engineering/space
+ min_pressure_protection = 0 * ONE_ATMOSPHERE
+ max_pressure_protection = 15 * ONE_ATMOSPHERE
+ worth_intrinsic = 75
+
+/obj/item/clothing/suit/space/void/engineering
+ name = "engineering voidsuit"
+ desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding."
+ icon_state = "rig-engineering"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_voidsuit", SLOT_ID_LEFT_HAND = "eng_voidsuit")
+ armor_type = /datum/armor/engineering/space
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/bag/ore,/obj/item/t_scanner,/obj/item/pickaxe, /obj/item/rcd)
+ min_pressure_protection = 0 * ONE_ATMOSPHERE
+ max_pressure_protection = 15 * ONE_ATMOSPHERE
+ helmet_type = /obj/item/clothing/head/helmet/space/void/engineering
+ worth_intrinsic = 325
+
+/obj/item/clothing/head/helmet/space/void/engineering/hazmat
+ name = "HAZMAT voidsuit helmet"
+ desc = "A engineering helmet designed for work in a low-pressure environment. Extra radiation shielding appears to have been installed at the price of comfort."
+ icon_state = "rig0-engineering_rad"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_helm_rad", SLOT_ID_LEFT_HAND = "eng_helm_rad")
+ armor_type = /datum/armor/engineering/space/hazmat
+
+/obj/item/clothing/suit/space/void/engineering/hazmat
+ name = "HAZMAT voidsuit"
+ desc = "A engineering voidsuit that protects against hazardous, low pressure environments. Has enhanced radiation shielding compared to regular engineering voidsuits."
+ icon_state = "rig-engineering_rad"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_voidsuit_rad", SLOT_ID_LEFT_HAND = "eng_voidsuit_rad")
+ armor_type = /datum/armor/engineering/space/hazmat
+ helmet_type = /obj/item/clothing/head/helmet/space/void/engineering/hazmat
+
+/obj/item/clothing/head/helmet/space/void/engineering/construction
+ name = "construction voidsuit helmet"
+ icon_state = "rig0-engineering_con"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_helm_con", SLOT_ID_LEFT_HAND = "eng_helm_con")
+
+/obj/item/clothing/suit/space/void/engineering/construction
+ name = "construction voidsuit"
+ icon_state = "rig-engineering_con"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "eng_voidsuit_con", SLOT_ID_LEFT_HAND = "eng_voidsuit_con")
+ helmet_type = /obj/item/clothing/head/helmet/space/void/engineering/construction
+
+/obj/item/clothing/head/helmet/space/void/engineering/alt
+ name = "reinforced engineering voidsuit helmet"
+ desc = "A heavy, radiation-shielded voidsuit helmet with a surprisingly comfortable interior."
+ icon_state = "rig0-engineeringalt"
+ armor_type = /datum/armor/engineering/space/heavy
+ light_overlay = "helmet_light_dual"
+
+/obj/item/clothing/suit/space/void/engineering/alt
+ name = "reinforced engineering voidsuit"
+ desc = "A bulky industrial voidsuit. It's a few generations old, but a reliable design and radiation shielding make up for the lack of climate control."
+ icon_state = "rig-engineeringalt"
+ armor_type = /datum/armor/engineering/space/heavy
+ helmet_type = /obj/item/clothing/head/helmet/space/void/engineering/alt
+
+/obj/item/clothing/head/helmet/space/void/engineering/salvage
+ name = "salvage voidsuit helmet"
+ desc = "A heavily modified salvage voidsuit helmet. It has been fitted with radiation-resistant plating."
+ icon_state = "rig0-salvage"
+ item_state_slots = list(
+ SLOT_ID_LEFT_HAND = "eng_helm",
+ SLOT_ID_RIGHT_HAND = "eng_helm",
+ )
+ armor_type = /datum/armor/engineering/space/salvage
+
+/obj/item/clothing/suit/space/void/engineering/salvage
+ name = "salvage voidsuit"
+ desc = "A hand-me-down salvage voidsuit. It has obviously had a lot of repair work done to its radiation shielding."
+ icon_state = "rig-engineeringsav"
+ armor_type = /datum/armor/engineering/space/salvage
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable,/obj/item/t_scanner,/obj/item/rcd)
+ helmet_type = /obj/item/clothing/head/helmet/space/void/engineering/salvage
+
+//Atmospherics
+/obj/item/clothing/head/helmet/space/void/atmos
+ desc = "A special helmet designed for work in a hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
+ name = "atmospherics voidsuit helmet"
+ icon_state = "rig0-atmos"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_helm", SLOT_ID_LEFT_HAND = "atmos_helm")
+ armor_type = /datum/armor/engineering/space/atmos
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ light_overlay = "helmet_light_dual"
+ min_pressure_protection = 0 * ONE_ATMOSPHERE
+ max_pressure_protection = 20* ONE_ATMOSPHERE
+ worth_intrinsic = 125
+
+/obj/item/clothing/suit/space/void/atmos
+ name = "atmos voidsuit"
+ desc = "A special suit that protects against hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
+ icon_state = "rig-atmos"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_voidsuit", SLOT_ID_LEFT_HAND = "atmos_voidsuit")
+ armor_type = /datum/armor/engineering/space/atmos
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ min_pressure_protection = 0 * ONE_ATMOSPHERE
+ max_pressure_protection = 20* ONE_ATMOSPHERE
+ helmet_type = /obj/item/clothing/head/helmet/space/void/atmos
+ worth_intrinsic = 450
+
+//Atmospherics Surplus Voidsuit
+
+/obj/item/clothing/head/helmet/space/void/atmos/alt
+ desc = "A special voidsuit helmet designed for work in hazardous, low pressure environments.This one has been plated with an expensive heat and radiation resistant ceramic."
+ name = "heavy duty atmospherics voidsuit helmet"
+ icon_state = "rig0-atmosalt"
+ armor_type = /datum/armor/engineering/space/atmos/heavy
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ light_overlay = "hardhat_light"
+
+/obj/item/clothing/suit/space/void/atmos/alt
+ desc = "A special suit that protects against hazardous, low pressure environments. Fits better than the standard atmospheric voidsuit while still rated to withstand extreme heat and even minor radiation."
+ icon_state = "rig-atmosalt"
+ name = "heavy duty atmos voidsuit"
+ armor_type = /datum/armor/engineering/space/atmos/heavy
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ helmet_type = /obj/item/clothing/head/helmet/space/void/atmos/alt
diff --git a/code/modules/clothing/spacesuits/void/station/exploration.dm b/code/modules/clothing/spacesuits/void/station/exploration.dm
new file mode 100644
index 000000000000..0841fa28bd1a
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/exploration.dm
@@ -0,0 +1,52 @@
+/obj/item/clothing/head/helmet/space/void/exploration
+ name = "exploration voidsuit helmet"
+ desc = "A radiation-resistant helmet made especially for exploring unknown planetary environments."
+ icon_state = "helm_explorer"
+ item_state = "helm_explorer"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "syndicate-helm-black", SLOT_ID_LEFT_HAND = "syndicate-helm-black")
+ armor_type = /datum/armor/exploration/space
+ light_overlay = "helmet_light_dual" //explorer_light
+ camera_networks = list(NETWORK_EXPLO_HELMETS)
+ worth_intrinsic = 75
+
+/obj/item/clothing/suit/space/void/exploration
+ name = "exploration voidsuit"
+ desc = "A lightweight, radiation-resistant voidsuit, featuring the Explorer emblem on its chest plate. Designed for exploring unknown planetary environments."
+ icon_state = "void_explorer"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "skrell_suit_black", SLOT_ID_LEFT_HAND = "skrell_suit_black")
+ armor_type = /datum/armor/exploration/space
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/healthanalyzer,/obj/item/gps,/obj/item/radio/beacon, \
+ /obj/item/shovel,/obj/item/ammo_magazine,/obj/item/gun)
+ helmet_type = /obj/item/clothing/head/helmet/space/void/exploration
+ worth_intrinsic = 300
+
+/obj/item/clothing/head/helmet/space/void/exploration/alt
+ desc = "A radiation-resistant helmet made especially for exploring unknown planetary environments."
+ icon_state = "helm_explorer2"
+ item_state = "helm_explorer2"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "mining_helm", SLOT_ID_LEFT_HAND = "mining_helm")
+
+/obj/item/clothing/suit/space/void/exploration/alt
+ desc = "A lightweight, radiation-resistant voidsuit. Designed for exploring unknown planetary environments."
+ icon_state = "void_explorer2"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "skrell_suit_white", SLOT_ID_LEFT_HAND = "skrell_suit_white")
+ helmet_type = /obj/item/clothing/head/helmet/space/void/exploration/alt
+
+/obj/item/clothing/head/helmet/space/void/exploration/pathfinder
+ name = "pathfinder voidsuit helmet"
+ desc = "A comfortable helmet designed to provide protection for Pathfinder units on long-term operations."
+ icon_state = "helm_explorer_pf"
+ item_state = "helm_explorer_pf"
+ armor_type = /datum/armor/exploration/space/pathfinder
+ worth_intrinsic = 100
+
+/obj/item/clothing/suit/space/void/exploration/pathfinder
+ name = "pathfinder voidsuit"
+ desc = "A versatile, armored voidsuit, featuring the Pathfinder emblem on its chest plate. Designed for long deployments in unknown planetary environments."
+ icon_state = "void_explorer_pf"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "skrell_suit_black", SLOT_ID_LEFT_HAND = "skrell_suit_black")
+ armor_type = /datum/armor/exploration/space/pathfinder
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/stack/flag,/obj/item/healthanalyzer,/obj/item/gps,/obj/item/radio/beacon, \
+ /obj/item/shovel,/obj/item/ammo_magazine,/obj/item/gun)
+ helmet_type = /obj/item/clothing/head/helmet/space/void/exploration/pathfinder
+ worth_intrinsic = 400
diff --git a/code/modules/clothing/spacesuits/void/station/medical.dm b/code/modules/clothing/spacesuits/void/station/medical.dm
new file mode 100644
index 000000000000..3edc945fc769
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/medical.dm
@@ -0,0 +1,79 @@
+/obj/item/clothing/head/helmet/space/void/medical
+ name = "medical voidsuit helmet"
+ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has minor radiation shielding."
+ icon_state = "rig0-medical"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_helm", SLOT_ID_LEFT_HAND = "medical_helm")
+ armor_type = /datum/armor/medical/space
+ worth_intrinsic = 75
+
+/obj/item/clothing/suit/space/void/medical
+ name = "medical voidsuit"
+ desc = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding."
+ icon_state = "rig-medical"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_voidsuit", SLOT_ID_LEFT_HAND = "medical_voidsuit")
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/firstaid,/obj/item/healthanalyzer,/obj/item/stack/medical)
+ armor_type = /datum/armor/medical/space
+ helmet_type = /obj/item/clothing/head/helmet/space/void/medical
+ worth_intrinsic = 375
+
+/obj/item/clothing/head/helmet/space/void/medical/emt
+ name = "emergency medical response voidsuit helmet"
+ icon_state = "rig0-medical_emt"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_helm_emt", SLOT_ID_LEFT_HAND = "medical_helm_emt")
+
+/obj/item/clothing/suit/space/void/medical/emt
+ name = "emergency medical response voidsuit"
+ icon_state = "rig-medical_emt"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_voidsuit_emt", SLOT_ID_LEFT_HAND = "medical_voidsuit_emt")
+ helmet_type = /obj/item/clothing/head/helmet/space/void/medical/emt
+
+/obj/item/clothing/head/helmet/space/void/medical/bio
+ name = "biohazard voidsuit helmet"
+ desc = "A special helmet that protects against hazardous environments. Has minor radiation shielding."
+ icon_state = "rig0-medical_bio"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_helm_bio", SLOT_ID_LEFT_HAND = "medical_helm_bio")
+ armor_type = /datum/armor/medical/space
+
+/obj/item/clothing/suit/space/void/medical/bio
+ name = "biohazard voidsuit"
+ desc = "A special suit that protects against hazardous, environments. It feels heavier than the standard suit with extra protection around the joints."
+ icon_state = "rig-medical_bio"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "medical_voidsuit_bio", SLOT_ID_LEFT_HAND = "medical_voidsuit_bio")
+ armor_type = /datum/armor/medical/space
+ helmet_type = /obj/item/clothing/head/helmet/space/void/medical/bio
+
+/obj/item/clothing/head/helmet/space/void/medical/alt
+ name = "streamlined medical voidsuit helmet"
+ desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue."
+ icon_state = "rig0-medicalalt"
+ armor_type = /datum/armor/medical/space
+ light_overlay = "helmet_light_dual_blue"
+ encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HELMET_ULTRALIGHT
+ weight = ITEM_WEIGHT_VOIDSUIT_HELMET_ULTRALIGHT
+
+/obj/item/clothing/suit/space/void/medical/alt
+ icon_state = "rig-medicalalt"
+ name = "streamlined medical voidsuit"
+ desc = "A more recent model of Vey-Med voidsuit, exchanging physical protection for fully unencumbered movement and a complete range of motion."
+ encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_ULTRALIGHT
+ weight = ITEM_WEIGHT_VOIDSUIT_ULTRALIGHT
+ armor_type = /datum/armor/medical/space
+ helmet_type = /obj/item/clothing/head/helmet/space/void/medical/alt
+
+/obj/item/clothing/head/helmet/space/void/medical/alt_plated
+ name = "streamlined medical voidsuit helmet"
+ desc = "A trendy, fully biohazard and radiation-shielded voidsuit helmet trimmed in a sleek blue."
+ icon_state = "rig0-medicalalt2"
+ armor_type = /datum/armor/medical/space/upgraded
+ light_overlay = "helmet_light_dual_blue"
+ encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HELMET_ULTRALIGHT
+ weight = ITEM_WEIGHT_VOIDSUIT_HELMET_ULTRALIGHT
+
+/obj/item/clothing/suit/space/void/medical/alt_plated
+ icon_state = "rig-medicalalt2"
+ name = "plated medical voidsuit"
+ desc = "An iteration of an existing Vey-Med voidsuit, allowing full biohazard, radiation and increased close-quarters protection, at the expense of projectile and ranged layers."
+ encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_ULTRALIGHT
+ weight = ITEM_WEIGHT_VOIDSUIT_ULTRALIGHT
+ armor_type = /datum/armor/medical/space/upgraded
+ helmet_type = /obj/item/clothing/head/helmet/space/void/medical/alt_plated
diff --git a/code/modules/clothing/spacesuits/void/station/operations.dm b/code/modules/clothing/spacesuits/void/station/operations.dm
new file mode 100644
index 000000000000..3cf3ac67ded8
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/operations.dm
@@ -0,0 +1,33 @@
+
+/obj/item/clothing/head/helmet/space/void/pilot
+ desc = "An atmos resistant helmet for space and planet exploration."
+ name = "pilot voidsuit helmet"
+ icon_state = "rig0_pilot"
+ item_state = "pilot_helm"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_helm", SLOT_ID_LEFT_HAND = "atmos_helm")
+ armor_type = /datum/armor/exploration/space/pilot
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ light_overlay = "helmet_light_dual"
+ camera_networks = list(NETWORK_EXPLO_HELMETS)
+ worth_intrinsic = 125 // literally an atmos suit
+
+/obj/item/clothing/suit/space/void/pilot
+ desc = "An atmos resistant voidsuit for space and planet exploration."
+ icon_state = "rig-pilot"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "atmos_voidsuit", SLOT_ID_LEFT_HAND = "atmos_voidsuit")
+ name = "pilot voidsuit"
+ armor_type = /datum/armor/exploration/space/pilot
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/storage/toolbox,/obj/item/storage/briefcase/inflatable)
+ helmet_type = /obj/item/clothing/head/helmet/space/void/pilot
+ worth_intrinsic = 450 // literally an atmos suit
+
+/obj/item/clothing/head/helmet/space/void/pilot/alt
+ icon_state = "rig0_pilot2"
+ item_state = "pilot_helm2"
+
+/obj/item/clothing/suit/space/void/pilot/alt
+ desc = "An atmos resistant voidsuit for space."
+ icon_state = "rig-pilot2"
+ item_state = "rig-pilot2"
+ helmet_type = /obj/item/clothing/head/helmet/space/void/pilot/alt
diff --git a/code/modules/clothing/spacesuits/void/station/security.dm b/code/modules/clothing/spacesuits/void/station/security.dm
new file mode 100644
index 000000000000..eb29b32a6aa6
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/security.dm
@@ -0,0 +1,47 @@
+/obj/item/clothing/head/helmet/space/void/security
+ name = "security voidsuit helmet"
+ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor."
+ icon_state = "rig0-sec"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_helm", SLOT_ID_LEFT_HAND = "sec_helm")
+ armor_type = /datum/armor/station/secsuit
+ siemens_coefficient = 0.7
+ light_overlay = "helmet_light_dual"
+ camera_networks = list(NETWORK_SEC_HELMETS)
+ worth_intrinsic = 125
+
+/obj/item/clothing/suit/space/void/security
+ name = "security voidsuit"
+ desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor."
+ icon_state = "rig-sec"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_voidsuit", SLOT_ID_LEFT_HAND = "sec_voidsuit")
+ armor_type = /datum/armor/station/secsuit
+ allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton)
+ siemens_coefficient = 0.7
+ helmet_type = /obj/item/clothing/head/helmet/space/void/security
+ worth_intrinsic = 450
+
+/obj/item/clothing/head/helmet/space/void/security/riot
+ name = "crowd control voidsuit helmet"
+ icon_state = "rig0-sec_riot"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_helm_riot", SLOT_ID_LEFT_HAND = "sec_helm_riot")
+
+/obj/item/clothing/suit/space/void/security/riot
+ name = "crowd control voidsuit"
+ icon_state = "rig-sec_riot"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "sec_voidsuit_riot", SLOT_ID_LEFT_HAND = "sec_voidsuit_riot")
+ helmet_type = /obj/item/clothing/head/helmet/space/void/security/riot
+
+//Todo: Both of them being called Riot/CC with one in the suit cycler, and one with actual armor values is really dumb. Seriously.
+/obj/item/clothing/head/helmet/space/void/security/alt
+ name = "riot security voidsuit helmet"
+ desc = "A somewhat tacky voidsuit helmet, a fact mitigated by heavy armor plating."
+ icon_state = "rig0-secalt"
+ armor_type = /datum/armor/station/secsuitriot
+
+/obj/item/clothing/suit/space/void/security/alt
+ icon_state = "rig-secalt"
+ name = "riot security voidsuit"
+ desc = "A heavily armored voidsuit, designed to intimidate people who find black intimidating. Surprisingly slimming."
+ armor_type = /datum/armor/station/secsuitriot
+ allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/melee/baton)
+ helmet_type = /obj/item/clothing/head/helmet/space/void/security/alt
diff --git a/code/modules/clothing/spacesuits/void/station/supply.dm b/code/modules/clothing/spacesuits/void/station/supply.dm
new file mode 100644
index 000000000000..64b5eda80bd6
--- /dev/null
+++ b/code/modules/clothing/spacesuits/void/station/supply.dm
@@ -0,0 +1,52 @@
+/obj/item/clothing/head/helmet/space/void/mining
+ name = "mining voidsuit helmet"
+ desc = "A special helmet designed for work in a hazardous, low pressure environment. Has reinforced plating."
+ icon_state = "rig0-mining"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "mining_helm", SLOT_ID_LEFT_HAND = "mining_helm")
+ armor_type = /datum/armor/cargo/mining/space
+ light_overlay = "helmet_light_dual"
+ worth_intrinsic = 75
+
+/obj/item/clothing/suit/space/void/mining
+ name = "mining voidsuit"
+ desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating."
+ icon_state = "rig-mining"
+ item_state_slots = list(SLOT_ID_RIGHT_HAND = "mining_voidsuit", SLOT_ID_LEFT_HAND = "mining_voidsuit")
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/pickaxe)
+ armor_type = /datum/armor/cargo/mining/space
+ helmet_type = /obj/item/clothing/head/helmet/space/void/mining
+ worth_intrinsic = 250
+
+/obj/item/clothing/head/helmet/space/void/mining/alt
+ name = "frontier mining voidsuit helmet"
+ desc = "An armored cheap voidsuit helmet. Someone must have through they were pretty cool when they painted a mohawk on it."
+ icon_state = "rig0-miningalt"
+ armor_type = /datum/armor/cargo/mining/space/armored
+ worth_intrinsic = 100
+
+/obj/item/clothing/suit/space/void/mining/alt
+ icon_state = "rig-miningalt"
+ name = "frontier mining voidsuit"
+ desc = "A cheap prospecting voidsuit. What it lacks in comfort it makes up for in armor plating and street cred."
+ armor_type = /datum/armor/cargo/mining/space/armored
+ helmet_type = /obj/item/clothing/head/helmet/space/void/mining/alt
+ worth_intrinsic = 300
+
+/obj/item/clothing/head/helmet/space/void/headofsecurity
+ desc = "A customized security voidsuit helmet. Has additional composite armor."
+ name = "head of security protosuit helmet"
+ icon_state = "hosproto"
+ armor_type = /datum/armor/security/hos/space
+ camera_networks = list(NETWORK_SEC_HELMETS)
+ encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HELMET_HEAVY
+ weight = ITEM_WEIGHT_VOIDSUIT_HELMET_HEAVY
+
+/obj/item/clothing/suit/space/void/headofsecurity
+ desc = "A customized security voidsuit. Has additional composite armor."
+ name = "head of security protosuit"
+ icon_state = "hosproto_void"
+ armor_type = /datum/armor/security/hos/space
+ allowed = list(/obj/item/flashlight,/obj/item/tank,/obj/item/suit_cooling_unit,/obj/item/gun)
+ encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_HEAVY
+ weight = ITEM_WEIGHT_VOIDSUIT_HEAVY
+ helmet_type = /obj/item/clothing/head/helmet/space/void/headofsecurity
diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm
index ec8e11282bef..8bf334f378a1 100644
--- a/code/modules/clothing/spacesuits/void/void.dm
+++ b/code/modules/clothing/spacesuits/void/void.dm
@@ -77,6 +77,24 @@
breach_threshold = 12
can_breach = 1
+ /// nominal helmet type
+ var/helmet_type = /obj/item/clothing/head/helmet/space/void
+ /// do we contain helmet by default?
+ var/starts_with_helmet = FALSE
+ /// nominal magboots type
+ var/boots_type = /obj/item/clothing/shoes/magboots
+ /// do we contain boots by default?
+ var/starts_with_boots = FALSE
+ // todo: support for having both tank and cooler so anyone can use it
+ /// nominal tank type
+ var/tank_type = /obj/item/tank/oxygen/yellow
+ /// nominal suit cooler type
+ var/cooler_type = /obj/item/suit_cooling_unit
+ /// do we have a tank or cooler by default?
+ var/starts_with_life_support = FALSE
+ /// default to cooler instead of tank
+ var/starts_with_cooler_instead = FALSE
+
//Inbuilt devices.
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any.
@@ -85,6 +103,35 @@
item_action_name = "Toggle Helmet"
+/**
+ * @params
+ * * mapload - mapload as usual
+ * * override_start_equipped - if TRUE / FALSE, we will start with all equipment populated
+ * * spawn_cooler_instead - spawn cooler instead of tank
+ */
+/obj/item/clothing/suit/space/void/Initialize(mapload, override_start_equipped, spawn_cooler_instead)
+ . = ..()
+ if(isnull(override_start_equipped)? starts_with_helmet : override_start_equipped)
+ helmet = new helmet_type
+ if(isnull(override_start_equipped)? starts_with_boots : override_start_equipped)
+ boots = new boots_type
+ if(isnull(override_start_equipped)? starts_with_life_support : override_start_equipped)
+ if(isnull(spawn_cooler_instead)? starts_with_cooler_instead : spawn_cooler_instead)
+ cooler = new cooler_type
+ else
+ tank = new tank_type
+
+/obj/item/clothing/suit/space/void/worth_contents(flags)
+ . = ..()
+ if(boots)
+ . += boots
+ if(helmet)
+ . += helmet
+ if(tank)
+ . += tank
+ if(cooler)
+ . += cooler
+
/obj/item/clothing/suit/space/void/get_weight()
. = ..()
if(boots?.loc == src)
diff --git a/code/modules/clothing/spacesuits/void/void_vr.dm b/code/modules/clothing/spacesuits/void/void_vr.dm
index 4b1cc4dfd5d2..474ce99f92fe 100644
--- a/code/modules/clothing/spacesuits/void/void_vr.dm
+++ b/code/modules/clothing/spacesuits/void/void_vr.dm
@@ -48,6 +48,7 @@
/obj/item/clothing/suit/space/void/explorer
desc = "A classy red voidsuit for the needs of any semi-retro-futuristic spaceperson! This one is rather loose fitting."
+ helmet_type = /obj/item/clothing/head/helmet/space/void/explorer
species_restricted = list(
SPECIES_AKULA,
SPECIES_ALRAUNE,
@@ -121,6 +122,7 @@
species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX) //this thing can autoadapt
breach_threshold = 6 //this thing is basically tissue paper
w_class = WEIGHT_CLASS_NORMAL //if it's snug, high-tech, and made of relatively soft materials, it should be much easier to store!
+ helmet_type = /obj/item/clothing/suit/space/void/autolok
/obj/item/clothing/suit/space/void/autolok/Initialize(mapload)
. = ..()
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 81ffd39b65e0..99728ffc838b 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -316,6 +316,7 @@
heat_protection_cover = UPPER_TORSO|LOWER_TORSO
max_heat_protection_temperature = ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0.6
+ worth_intrinsic = 100
/obj/item/clothing/suit/storage/vest/officer
name = "officer armor vest"
diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm
index a70a3195cddb..855db3a826b5 100644
--- a/code/modules/clothing/suits/jobs.dm
+++ b/code/modules/clothing/suits/jobs.dm
@@ -180,6 +180,7 @@
/obj/item/tool/crowbar, /obj/item/tool/screwdriver, /obj/item/weldingtool, /obj/item/tool/wirecutters, /obj/item/tool/wrench, /obj/item/tank/emergency/oxygen,
/obj/item/clothing/mask/gas, /obj/item/barrier_tape_roll/engineering)
body_cover_flags = UPPER_TORSO
+ worth_intrinsic = 50
//Lawyer
/obj/item/clothing/suit/storage/toggle/lawyer/bluejacket
diff --git a/code/modules/clothing/suits/medieval_armor.dm b/code/modules/clothing/suits/medieval_armor.dm
index bca0635ea06c..af49c3e0d1e1 100644
--- a/code/modules/clothing/suits/medieval_armor.dm
+++ b/code/modules/clothing/suits/medieval_armor.dm
@@ -8,6 +8,7 @@
body_cover_flags = HEAD|FACE|EYES
inv_hide_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
+ worth_intrinsic = 175
/obj/item/clothing/head/helmet/medieval/red
icon_state = "knighthelm_red"
@@ -55,6 +56,7 @@
inv_hide_flags = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
body_cover_flags = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
worn_render_flags = WORN_RENDER_SLOT_ONE_FOR_ALL
+ worth_intrinsic = 325
/obj/item/clothing/suit/armor/medieval/red
icon_state = "knight_red"
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index d151cf25474d..cc0e43635685 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -83,6 +83,7 @@
armor_type = /datum/armor/general/radsuit
weight = ITEM_WEIGHT_ARMOR_BIORAD_SUIT_HELMET
encumbrance = ITEM_ENCUMBRANCE_ARMOR_BIORAD_HELMET
+ worth_intrinsic = 75
/obj/item/clothing/suit/radiation
name = "Radiation suit"
@@ -98,3 +99,4 @@
inv_hide_flags = HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER
clothing_flags = CLOTHING_THICK_MATERIAL | CLOTHING_INJECTION_PORT
encumbrance = ITEM_ENCUMBRANCE_ARMOR_BIORAD_SUIT
+ worth_intrinsic = 250
diff --git a/code/modules/clothing/under/accessories/clothing.dm b/code/modules/clothing/under/accessories/clothing.dm
index bce72d440dec..86d77f3e4825 100644
--- a/code/modules/clothing/under/accessories/clothing.dm
+++ b/code/modules/clothing/under/accessories/clothing.dm
@@ -57,6 +57,7 @@
siemens_coefficient = 0.9
w_class = WEIGHT_CLASS_NORMAL
slot = ACCESSORY_SLOT_OVER
+ worth_intrinsic = 150
/obj/item/clothing/accessory/poncho/equipped(mob/user, slot, flags) //Solution for race-specific sprites for an accessory which is also a suit. Suit icons break if you don't use icon override which then also overrides race-specific sprites.
..()
diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm
index 30f72264548c..4107b17d5459 100644
--- a/code/modules/clothing/under/accessories/holster.dm
+++ b/code/modules/clothing/under/accessories/holster.dm
@@ -4,6 +4,7 @@
icon_state = "holster"
slot = ACCESSORY_SLOT_WEAPON //Legacy/balance purposes
concealed_holster = 1
+ worth_intrinsic = 75 // milrp tax is real
var/obj/item/holstered = null
var/list/can_hold
var/list/cant_hold
diff --git a/code/modules/economy/README.md b/code/modules/economy/README.md
new file mode 100644
index 000000000000..36b1e1c9f68c
--- /dev/null
+++ b/code/modules/economy/README.md
@@ -0,0 +1,35 @@
+# Economy Module
+
+All core code for in-game money simulation.
+
+## Balancing Guidelines
+
+Here's some rough costs in whatever money unit of choice the lore team has bikeshedded the codebase to in a given year.
+
+- Remember that 'worth' is both a buy and a sell price.
+
+### clothing
+
+- basic clothing (e.g. bland jumpsuits, gray satchels) should be no more than 5-10
+- branded clothing should be 25-75
+- 'luxury' / rare clothing can be any value you want.
+
+### armor
+
+armor can be anywhere from 150 to well over 1000 for a full set depending on functions
+
+- light 100-250
+- medium 200-600
+- heavy 350-1000+
+- specialized 250-1000+
+
+spacesuits are function-dependent; follow armor guidelines with baseline being medium.
+
+- rigsuits specifically should be a bit more expensive than the voidsuit equivalent
+- rigsuits should take into account weight / slots / etc limitations.
+
+### equipment
+
+- basic tools should be no more than 5-10
+- advanced tools (powertools+) should be around the 30-50 range
+- specialized tools (rcds, etc) should be around the 100-400 range, depending on function
diff --git a/code/modules/economy/currency.dm b/code/modules/economy/currency.dm
index 991a88459ce0..fdf0f442ff21 100644
--- a/code/modules/economy/currency.dm
+++ b/code/modules/economy/currency.dm
@@ -91,6 +91,7 @@
/obj/item/proc/attempt_dynamic_currency(mob/user, atom/movable/predicate, amount, force, prevent_types, list/data = list(), silent, visual_range = 7)
. = PAYMENT_NOT_CURRENCY
var/list/iterating = list()
+ // todo: this is all bad. notice how we are calling on the component and not ourselves?
SEND_SIGNAL(src, COMSIG_ITEM_DYNAMIC_CURRENCY_QUERY, iterating)
if(length(iterating))
for(var/datum/D in iterating)
diff --git a/code/modules/economy/items/cash.dm b/code/modules/economy/items/cash.dm
index 3ab8940b50bd..1da69fe8d697 100644
--- a/code/modules/economy/items/cash.dm
+++ b/code/modules/economy/items/cash.dm
@@ -106,7 +106,7 @@
return (prevent_types & PAYMENT_TYPE_CASH)? NOT_STATIC_CURRENCY : PLURAL_STATIC_CURRENCY
/obj/item/spacecash/do_static_currency_feedback(amount, mob/user, atom/target, range)
- user.visible_message(SPAN_NOTICE("[user] inserts some cash into [target]."), SPAN_NOTICE("You insert [amount] [CURRENCY_NAME_PLURAL_PROPERR] into [target]."), SPAN_NOTICE("You hear some papers shuffling."), range)
+ user.visible_message(SPAN_NOTICE("[user] inserts some cash into [target]."), SPAN_NOTICE("You insert [amount] [CURRENCY_NAME_PLURAL_PROPER] into [target]."), SPAN_NOTICE("You hear some papers shuffling."), range)
/obj/item/spacecash/consume_static_currency(amount, force, mob/user, atom/target, range)
if(force)
diff --git a/code/modules/economy/worth.dm b/code/modules/economy/worth.dm
index cb89ce17c6a4..54fdd8d583b6 100644
--- a/code/modules/economy/worth.dm
+++ b/code/modules/economy/worth.dm
@@ -10,39 +10,63 @@
/**
* gets our worth
*/
-/atom/proc/worth(flags = GET_WORTH_DEFAULT, buying)
- return worth_provider().get_worth(flags, buying)
+/atom/proc/worth(flags = GET_WORTH_FLAGS_DEFAULT)
+ return worth_provider().get_worth(flags)
+
+/**
+ * used to change the "real" target of what we're checking the worth of.
+ *
+ * useful for things like skateboards and roller beds.
+ */
+/atom/proc/worth_provider()
+ RETURN_TYPE(/atom)
+ return src
/**
* estimate our total worth
*
+ * * Do not call this directly, call worth()
+ *
+ * todo: a way to get itemized worth
+ * todo: the way must respect obfuscation (e.g. not accessing real names of undiscovered gases)
+ *
* @params
* * flags - see [code/__DEFINES/economy/worth.dm]
- * * buying - buying instead of selling
*
* @return worth as number
*/
-/atom/proc/get_worth(flags, buying)
+/atom/proc/get_worth(flags)
+ return 0
+
+//* Objs *//
+
+/obj/get_worth(flags)
. = 0
if(flags & GET_WORTH_INTRINSIC)
- . = worth_intrinsic
+ var/intrinsic = get_intrinsic_worth(flags)
+ . += intrinsic
if(flags & GET_WORTH_MATERIALS)
- . += get_materials_worth(flags, buying)
+ var/materials = get_materials_worth(flags)
+ . += materials
if(flags & GET_WORTH_CONTAINING)
- . += get_containing_worth(flags, buying)
- if(buying)
- . *= worth_buy_factor
+ var/containing = get_containing_worth(flags)
+ . += containing
+
+/**
+ * estimate our intrinsic worth
+ */
+/obj/proc/get_intrinsic_worth(flags)
+ return worth_intrinsic
/**
* estimate our raw materials worth
*
* @params
* * flags - see [code/__DEFINES/economy/worth.dm]
- * * buying - buying instead of selling
*
* @return worth as number
*/
-/atom/proc/get_materials_worth(flags, buying)
+/obj/proc/get_materials_worth(flags)
return 0
/**
@@ -50,72 +74,16 @@
*
* @params
* * flags - see [code/__DEFINES/economy/worth.dm]
- * * buying - buying instead of selling
*
* @return worth as number
*/
-/atom/proc/get_containing_worth(flags, buying)
+/obj/proc/get_containing_worth(flags)
. = 0
- for(var/atom/target as anything in worth_containing(flags, buying))
- . += target.worth(flags, buying)
+ for(var/obj/target as anything in worth_contents(flags))
+ . += target.worth(flags)
/**
* gets relevant atoms inside us to be checked for containing worth
*/
-/atom/proc/worth_containing(flags, buying)
+/obj/proc/worth_contents(flags)
return list()
-
-/**
- * used to change the "real" target of what we're checking the worth of.
- *
- * usefulf for things like skateboards and roller beds.
- */
-/atom/proc/worth_provider()
- RETURN_TYPE(/atom)
- return src
-
-/**
- * estimate a typepath's worth
- *
- * @params
- * * path - typepath to estimate
- * * flags - see [code/__DEFINES/economy/worth.dm]
- * * buying - buying instead of selling
- *
- * @return worth as number or null if unable
- */
-/proc/get_worth_static(path, flags = GET_WORTH_DEFAULT, buying)
- var/atom/fetching = path
- if(initial(fetching.worth_dynamic))
- return null
- . = initial(fetching.worth_intrinsic)
- . += get_materials_worth_static(path, flags, buying)
- . += get_containing_worth_static(path, flags, buying)
-
-/**
- * estimates a typepath's raw materials worth
- *
- * @params
- * * path - typepath to estimate
- * * flags - see [code/__DEFINES/economy/worth.dm]
- * * buying - buying instead of selling
- *
- * @return worth as number or null if unable
- */
-/proc/get_materials_worth_static(path, flags, buying)
- var/atom/fetching = path
- return initial(fetching.worth_materials)
-
-/**
- * estimates a typepath's contents worth
- *
- * @params
- * * path - typepath to estimate
- * * flags - see [code/__DEFINES/economy/worth.dm]
- * * buying - buying instead of selling
- *
- * @return worth as number or null if unable
- */
-/proc/get_containing_worth_static(path, flags, buying)
- var/atom/fetching = path
- return initial(fetching.worth_containing)
diff --git a/code/modules/events/shipping_error.dm b/code/modules/events/shipping_error.dm
index 8c42113e2349..9dbcee2bc1c0 100644
--- a/code/modules/events/shipping_error.dm
+++ b/code/modules/events/shipping_error.dm
@@ -1,6 +1,6 @@
/datum/event/shipping_error/start()
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = SSsupply.ordernum
- O.object = SSsupply.supply_pack[pick(SSsupply.supply_pack)]
+ O.object = SSsupply.legacy_supply_packs[pick(SSsupply.legacy_supply_packs)]
O.ordered_by = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN)
SSsupply.shoppinglist += O
diff --git a/code/modules/examine/descriptions/weapons.dm b/code/modules/examine/descriptions/weapons.dm
index 5f381d332ec0..00b5c0d192f2 100644
--- a/code/modules/examine/descriptions/weapons.dm
+++ b/code/modules/examine/descriptions/weapons.dm
@@ -7,13 +7,6 @@
//******
//This contains a lot of copypasta but I'm told it's better then a lot of New()s appending the var.
-/obj/item/gun
- description_info = "This is a gun. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
- then click where you want to fire."
-
-/obj/item/gun/energy
- description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
- then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
/obj/item/gun/energy/crossbow
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
@@ -43,11 +36,6 @@
description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. Most energy weapons can fire through windows harmlessly. Unlike most weapons, this weapon recharges itself."
-/obj/item/gun/energy/sniperrifle
- description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
- then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger. \
- To use the scope, use the appropriate verb in the object tab."
-
/obj/item/gun/ballistic
description_info = "This is a ballistic weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
then click where you want to fire. To reload, click the weapon in your hand to unload (if needed), then add the appropriate ammo. The description \
diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm
index e4bcd83093da..539cfedfa316 100644
--- a/code/modules/food/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -3372,26 +3372,41 @@
return
. = ..()
+/obj/item/pizzabox/margherita
+ name = "pizza box (margherita)"
+
/obj/item/pizzabox/margherita/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
boxtag = "Margherita Deluxe"
+/obj/item/pizzabox/vegetable
+ name = "pizza box (vegetable)"
+
/obj/item/pizzabox/vegetable/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
boxtag = "Gourmet Vegatable"
+/obj/item/pizzabox/mushroom
+ name = "pizza box (mushroom)"
+
/obj/item/pizzabox/mushroom/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
boxtag = "Mushroom Special"
+/obj/item/pizzabox/meat
+ name = "pizza box (meat)"
+
/obj/item/pizzabox/meat/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
boxtag = "Meatlover's Supreme"
+/obj/item/pizzabox/pineapple
+ name = "pizza box (pineapple)"
+
/obj/item/pizzabox/pineapple/Initialize(mapload)
. = ..()
pizza = new /obj/item/reagent_containers/food/snacks/sliceable/pizza/pineapple(src)
diff --git a/code/modules/gamemaster/actions/shipping_error.dm b/code/modules/gamemaster/actions/shipping_error.dm
index 4d3c5bb5fc77..52332a343eda 100644
--- a/code/modules/gamemaster/actions/shipping_error.dm
+++ b/code/modules/gamemaster/actions/shipping_error.dm
@@ -12,6 +12,6 @@
..()
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = SSsupply.ordernum
- O.object = SSsupply.supply_pack[pick(SSsupply.supply_pack)]
+ O.object = SSsupply.legacy_supply_packs[pick(SSsupply.legacy_supply_packs)]
O.ordered_by = random_name(pick(MALE,FEMALE), species = SPECIES_HUMAN)
SSsupply.shoppinglist += O
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index 074840debc1c..e1689c458cbf 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -654,3 +654,8 @@
closed_system = !closed_system
to_chat(user, "You [closed_system ? "close" : "open"] the tray's lid.")
update_icon()
+
+//* Subtypes *//
+
+/obj/machinery/portable_atmospherics/hydroponics/unanchored
+ anchored = FALSE
diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm
index 368dea1d1c41..536ebe2f61d9 100644
--- a/code/modules/integrated_electronics/core/printer.dm
+++ b/code/modules/integrated_electronics/core/printer.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/integrated_electronics/electronic_tools.dmi'
icon_state = "circuit_printer"
w_class = WEIGHT_CLASS_BULKY
+ worth_intrinsic = 150
var/cur_metal = 0
var/max_metal = 250
/// One sheet equals this much metal.
@@ -25,6 +26,8 @@
var/list/program
var/dirty_items = FALSE
+// todo: get_containing_worth for the metal inside
+
/obj/item/integrated_circuit_printer/examine(mob/user, dist)
. = ..()
ui_interact(user)
@@ -367,9 +370,11 @@
/obj/item/disk/integrated_circuit/upgrade/advanced
name = "integrated circuit printer upgrade disk - advanced designs"
desc = "Install this into your integrated circuit printer to enhance it. This one adds new, advanced designs to the printer."
+ worth_intrinsic = 150
/obj/item/disk/integrated_circuit/upgrade/clone
name = "integrated circuit printer upgrade disk - circuit cloner"
desc = "Install this into your integrated circuit printer to enhance it. This one allows the printer to duplicate assemblies."
icon_state = "upgrade_disk_clone"
origin_tech = list(TECH_ENGINEERING = 5, TECH_DATA = 6)
+ worth_intrinsic = 150
diff --git a/code/modules/materials/definitions/crystals/diamond.dm b/code/modules/materials/definitions/crystals/diamond.dm
index 0372ea5a5bdb..876d8bee4877 100644
--- a/code/modules/materials/definitions/crystals/diamond.dm
+++ b/code/modules/materials/definitions/crystals/diamond.dm
@@ -21,6 +21,8 @@
density = 8 * 0.8
relative_conductivity = 0
+ worth = 37.5
+
/datum/material/diamond/generate_recipes()
. = ..()
. += create_stack_recipe_datum(category = "statues", name = "ai hologram statue", product = /obj/structure/statue/diamond/ai1, cost = 10, time = 2 SECONDS)
diff --git a/code/modules/materials/definitions/crystals/glass.dm b/code/modules/materials/definitions/crystals/glass.dm
index db2bd904f814..b7c406082b71 100644
--- a/code/modules/materials/definitions/crystals/glass.dm
+++ b/code/modules/materials/definitions/crystals/glass.dm
@@ -30,6 +30,8 @@
density = 8 * 1
relative_conductivity = 0
+ worth = 0.5
+
/datum/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
if(!user || !used_stack || !created_window || !created_fulltile_window || !window_options.len)
diff --git a/code/modules/materials/definitions/elements/carbon.dm b/code/modules/materials/definitions/elements/carbon.dm
index 3622b889408b..831cb1675742 100644
--- a/code/modules/materials/definitions/elements/carbon.dm
+++ b/code/modules/materials/definitions/elements/carbon.dm
@@ -22,3 +22,5 @@
refraction = MATERIAL_RESISTANCE_NONE
absorption = MATERIAL_RESISTANCE_LOW
nullification = MATERIAL_RESISTANCE_NONE
+
+ worth = 1.25
diff --git a/code/modules/materials/definitions/metals/brass.dm b/code/modules/materials/definitions/metals/brass.dm
index c2918d3a59a8..7447277e461e 100644
--- a/code/modules/materials/definitions/metals/brass.dm
+++ b/code/modules/materials/definitions/metals/brass.dm
@@ -16,6 +16,8 @@
relative_reactivity = 0.5
relative_permeability = 0
+ worth = 7.5
+
/datum/material/brass/generate_recipes()
. = ..()
. += create_stack_recipe_datum(name = "brass floor tiles", product = /obj/item/stack/tile/brass, amount = 4)
diff --git a/code/modules/materials/definitions/metals/bronze.dm b/code/modules/materials/definitions/metals/bronze.dm
index 25e41cdd05f6..dadeabb72878 100644
--- a/code/modules/materials/definitions/metals/bronze.dm
+++ b/code/modules/materials/definitions/metals/bronze.dm
@@ -19,3 +19,5 @@
refraction = MATERIAL_RESISTANCE_NONE
absorption = MATERIAL_RESISTANCE_LOW
nullification = MATERIAL_RESISTANCE_NONE
+
+ worth = 7.5
diff --git a/code/modules/materials/definitions/metals/copper.dm b/code/modules/materials/definitions/metals/copper.dm
index c703a8765f6f..50b0c027e23a 100644
--- a/code/modules/materials/definitions/metals/copper.dm
+++ b/code/modules/materials/definitions/metals/copper.dm
@@ -5,6 +5,8 @@
stack_type = /obj/item/stack/material/copper
tgui_icon_key = "copper"
+ worth = 3.5
+
relative_integrity = 0.8
density = 8 * 0.9
relative_conductivity = 0.9
diff --git a/code/modules/materials/definitions/metals/durasteel.dm b/code/modules/materials/definitions/metals/durasteel.dm
index 86a5dc86ce3c..4fe9673596f1 100644
--- a/code/modules/materials/definitions/metals/durasteel.dm
+++ b/code/modules/materials/definitions/metals/durasteel.dm
@@ -12,6 +12,8 @@
table_icon_base = "metal"
tgui_icon_key = "durasteel"
+ worth = 35
+
relative_integrity = 2
density = 8 * 2.5
relative_conductivity = 0.3
diff --git a/code/modules/materials/definitions/metals/gold.dm b/code/modules/materials/definitions/metals/gold.dm
index 8869e522a726..3dc6fcc9f177 100644
--- a/code/modules/materials/definitions/metals/gold.dm
+++ b/code/modules/materials/definitions/metals/gold.dm
@@ -8,6 +8,8 @@
sheet_plural_name = "ingots"
tgui_icon_key = "gold"
+ worth = 15
+
relative_integrity = 0.8
density = 8 * 1.75
relative_conductivity = 2
diff --git a/code/modules/materials/definitions/metals/hydrogens.dm b/code/modules/materials/definitions/metals/hydrogens.dm
index 83ae65e46f3d..2b0dfbe253f8 100644
--- a/code/modules/materials/definitions/metals/hydrogens.dm
+++ b/code/modules/materials/definitions/metals/hydrogens.dm
@@ -20,6 +20,7 @@
stack_origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 6, TECH_MAGNET = 5)
is_fusion_fuel = 1
tgui_icon_key = "mhydrogen"
+ worth = 50
/datum/material/hydrogen/tritium
name = "tritium"
@@ -31,6 +32,7 @@
sheet_plural_name = "ingots"
is_fusion_fuel = 1
tgui_icon_key = "ingots"
+ worth = 35
/datum/material/hydrogen/deuterium
name = "deuterium"
@@ -42,3 +44,4 @@
sheet_plural_name = "ingots"
is_fusion_fuel = 1
tgui_icon_key = "ingots"
+ worth = 22.5
diff --git a/code/modules/materials/definitions/metals/iron.dm b/code/modules/materials/definitions/metals/iron.dm
index 694d6add8044..1781ce98a9be 100644
--- a/code/modules/materials/definitions/metals/iron.dm
+++ b/code/modules/materials/definitions/metals/iron.dm
@@ -7,6 +7,8 @@
sheet_plural_name = "ingots"
tgui_icon_key = "ingots"
+ worth = 1
+
relative_integrity = 0.7
density = 8 * 0.7
relative_conductivity = 1
diff --git a/code/modules/materials/definitions/metals/lead.dm b/code/modules/materials/definitions/metals/lead.dm
index f62b694812ae..86a3d87c818f 100644
--- a/code/modules/materials/definitions/metals/lead.dm
+++ b/code/modules/materials/definitions/metals/lead.dm
@@ -7,6 +7,8 @@
sheet_plural_name = "ingots"
tgui_icon_key = "ingots"
+ worth = 5
+
relative_integrity = 1
density = 8 * 3
relative_conductivity = 0.3
diff --git a/code/modules/materials/definitions/metals/osmium.dm b/code/modules/materials/definitions/metals/osmium.dm
index 4ff9b80304b0..e5f0b38aee36 100644
--- a/code/modules/materials/definitions/metals/osmium.dm
+++ b/code/modules/materials/definitions/metals/osmium.dm
@@ -8,6 +8,8 @@
sheet_plural_name = "ingots"
tgui_icon_key = "ingots"
+ worth = 17.5
+
relative_integrity = 0.8
density = 8 * 1.5
relative_conductivity = 2
diff --git a/code/modules/materials/definitions/metals/plasteel.dm b/code/modules/materials/definitions/metals/plasteel.dm
index 7489f97c6fd5..6fced9f91424 100644
--- a/code/modules/materials/definitions/metals/plasteel.dm
+++ b/code/modules/materials/definitions/metals/plasteel.dm
@@ -14,6 +14,8 @@
table_icon_base = "metal"
tgui_icon_key = "plasteel"
+ worth = 17
+
relative_integrity = 1.5
weight_multiplier = 1
density = 8 * 1.75
diff --git a/code/modules/materials/definitions/metals/platinum.dm b/code/modules/materials/definitions/metals/platinum.dm
index 25af15629865..8de5e124c069 100644
--- a/code/modules/materials/definitions/metals/platinum.dm
+++ b/code/modules/materials/definitions/metals/platinum.dm
@@ -8,6 +8,8 @@
sheet_plural_name = "ingots"
tgui_icon_key = "ingots"
+ worth = 25
+
relative_integrity = 0.8
weight_multiplier = 1
density = 8 * 1.75
diff --git a/code/modules/materials/definitions/metals/silver.dm b/code/modules/materials/definitions/metals/silver.dm
index 210e2ccb5b3b..193c4cccc7eb 100644
--- a/code/modules/materials/definitions/metals/silver.dm
+++ b/code/modules/materials/definitions/metals/silver.dm
@@ -8,6 +8,8 @@
sheet_plural_name = "ingots"
tgui_icon_key = "silver"
+ worth = 12.5
+
relative_integrity = 0.7
weight_multiplier = 1
density = 8 * 1.4
diff --git a/code/modules/materials/definitions/metals/steel.dm b/code/modules/materials/definitions/metals/steel.dm
index ce337ac483f0..179473cb42d0 100644
--- a/code/modules/materials/definitions/metals/steel.dm
+++ b/code/modules/materials/definitions/metals/steel.dm
@@ -8,6 +8,8 @@
table_icon_base = "metal"
tgui_icon_key = "metal"
+ worth = 2
+
// the true neutral material
relative_integrity = 1
@@ -90,7 +92,7 @@
. += create_stack_recipe_datum(
name = "canister",
product = /obj/machinery/portable_atmospherics/canister,
- cost = 10,
+ cost = 5,
time = 1 SECONDS,
)
. += create_stack_recipe_datum(
diff --git a/code/modules/materials/definitions/metals/titanium.dm b/code/modules/materials/definitions/metals/titanium.dm
index fd3ad0c13546..2b26b55dc969 100644
--- a/code/modules/materials/definitions/metals/titanium.dm
+++ b/code/modules/materials/definitions/metals/titanium.dm
@@ -9,6 +9,8 @@
table_icon_base = "metal"
tgui_icon_key = "titanium"
+ worth = 3
+
relative_integrity = 1
density = 8 * 0.5
relative_conductivity = 1.27
diff --git a/code/modules/materials/definitions/metals/uranium.dm b/code/modules/materials/definitions/metals/uranium.dm
index 4ce07205395e..7d9087426e5e 100644
--- a/code/modules/materials/definitions/metals/uranium.dm
+++ b/code/modules/materials/definitions/metals/uranium.dm
@@ -10,6 +10,8 @@
door_icon_base = "stone"
tgui_icon_key = "uranium"
+ worth = 17.5
+
relative_integrity = 1.2
weight_multiplier = 1
density = 8 * 2.25
diff --git a/code/modules/materials/definitions/misc/cardboard.dm b/code/modules/materials/definitions/misc/cardboard.dm
index bcb6a79457fc..e5c5db8e86fc 100644
--- a/code/modules/materials/definitions/misc/cardboard.dm
+++ b/code/modules/materials/definitions/misc/cardboard.dm
@@ -12,6 +12,8 @@
destruction_desc = "crumples"
pass_stack_colors = TRUE
+ worth = 1
+
relative_integrity = 0.25
weight_multiplier = 1
density = 8 * 0.2
diff --git a/code/modules/materials/definitions/misc/cloths.dm b/code/modules/materials/definitions/misc/cloths.dm
index e17fbdf85c58..1db7dd95bee5 100644
--- a/code/modules/materials/definitions/misc/cloths.dm
+++ b/code/modules/materials/definitions/misc/cloths.dm
@@ -8,6 +8,8 @@
melting_point = T0C+300
pass_stack_colors = TRUE
+ worth = 2
+
relative_integrity = 0.25
density = 8 * 0.2
relative_conductivity = 0
diff --git a/code/modules/materials/definitions/misc/plastic.dm b/code/modules/materials/definitions/misc/plastic.dm
index e96bd237c5d4..bcc761a1ad54 100644
--- a/code/modules/materials/definitions/misc/plastic.dm
+++ b/code/modules/materials/definitions/misc/plastic.dm
@@ -8,6 +8,8 @@
melting_point = T0C+371 //assuming heat resistant plastic
stack_origin_tech = list(TECH_MATERIAL = 3)
+ worth = 3.5
+
relative_integrity = 0.65
weight_multiplier = 0.75
density = 8 * 1
diff --git a/code/modules/materials/definitions/organic/algae.dm b/code/modules/materials/definitions/organic/algae.dm
index 6ce5578bfa50..331824df25cf 100644
--- a/code/modules/materials/definitions/organic/algae.dm
+++ b/code/modules/materials/definitions/organic/algae.dm
@@ -18,3 +18,5 @@
refraction = MATERIAL_RESISTANCE_NONE
absorption = MATERIAL_RESISTANCE_LOW
nullification = MATERIAL_RESISTANCE_NONE
+
+ worth = 10
diff --git a/code/modules/materials/definitions/organic/leather.dm b/code/modules/materials/definitions/organic/leather.dm
index 67f9cb61b427..bc48abaed368 100644
--- a/code/modules/materials/definitions/organic/leather.dm
+++ b/code/modules/materials/definitions/organic/leather.dm
@@ -21,6 +21,8 @@
absorption = MATERIAL_RESISTANCE_LOW
nullification = MATERIAL_RESISTANCE_NONE
+ worth = 2.5
+
/datum/material/leather/generate_recipes()
. = ..()
. += create_stack_recipe_datum(
diff --git a/code/modules/materials/definitions/organic/wood/log.dm b/code/modules/materials/definitions/organic/wood/log.dm
index bdfda1937537..ef5515d86eff 100644
--- a/code/modules/materials/definitions/organic/wood/log.dm
+++ b/code/modules/materials/definitions/organic/wood/log.dm
@@ -35,6 +35,8 @@
absorption = MATERIAL_RESISTANCE_MODERATE
nullification = MATERIAL_RESISTANCE_VULNERABLE
+ worth = 5
+
/datum/material/wood_log/generate_recipes()
. = ..()
. += create_stack_recipe_datum(
diff --git a/code/modules/materials/definitions/organic/wood/plank.dm b/code/modules/materials/definitions/organic/wood/plank.dm
index 1bd8c7a6c3d0..3fa4ddee830d 100644
--- a/code/modules/materials/definitions/organic/wood/plank.dm
+++ b/code/modules/materials/definitions/organic/wood/plank.dm
@@ -33,6 +33,8 @@
absorption = MATERIAL_RESISTANCE_MODERATE
nullification = MATERIAL_RESISTANCE_VULNERABLE
+ worth = 2.5
+
/datum/material/wood_plank/generate_recipes()
. = ..()
. += create_stack_recipe_datum(
diff --git a/code/modules/materials/definitions/special/morphium.dm b/code/modules/materials/definitions/special/morphium.dm
index b1a41f364c87..f0f56be54790 100644
--- a/code/modules/materials/definitions/special/morphium.dm
+++ b/code/modules/materials/definitions/special/morphium.dm
@@ -23,6 +23,8 @@
absorption = MATERIAL_RESISTANCE_MODERATE
nullification = MATERIAL_RESISTANCE_MODERATE
+ worth = 100
+
/datum/material/morphium/hull
name = MAT_MORPHIUMHULL
id = "morphium_hull"
diff --git a/code/modules/materials/definitions/special/phoron.dm b/code/modules/materials/definitions/special/phoron.dm
index aa34a9581eec..e036dc05f3cc 100644
--- a/code/modules/materials/definitions/special/phoron.dm
+++ b/code/modules/materials/definitions/special/phoron.dm
@@ -24,6 +24,8 @@
absorption = MATERIAL_RESISTANCE_LOW
nullification = MATERIAL_RESISTANCE_MODERATE
+ worth = 20
+
// Commenting this out while fires are so spectacularly lethal, as I can't seem to get this balanced appropriately.
/*
/datum/material/phoron/combustion_effect(var/turf/T, var/temperature, var/effect_multiplier)
diff --git a/code/modules/materials/definitions/special/supermatter.dm b/code/modules/materials/definitions/special/supermatter.dm
index 253d7df8bc7a..75c069074791 100644
--- a/code/modules/materials/definitions/special/supermatter.dm
+++ b/code/modules/materials/definitions/special/supermatter.dm
@@ -25,6 +25,8 @@
absorption = MATERIAL_RESISTANCE_EXTREME
nullification = MATERIAL_RESISTANCE_HIGH
+ worth = 200 // holy moly!
+
// you didn't think you were getting the stats for free now did you
material_traits = list(
/datum/material_trait/radioactive = RAD_INTENSITY_MAT_SUPERMATTER,
diff --git a/code/modules/materials/definitions/special/valhollide.dm b/code/modules/materials/definitions/special/valhollide.dm
index 5e0c69eb5673..48333b994e03 100644
--- a/code/modules/materials/definitions/special/valhollide.dm
+++ b/code/modules/materials/definitions/special/valhollide.dm
@@ -24,3 +24,5 @@
refraction = MATERIAL_RESISTANCE_HIGH
absorption = MATERIAL_RESISTANCE_HIGH
nullification = MATERIAL_RESISTANCE_MODERATE
+
+ worth = 100
diff --git a/code/modules/materials/definitions/special/verdantium.dm b/code/modules/materials/definitions/special/verdantium.dm
index 25d227b3883b..dd8a1ef45b8d 100644
--- a/code/modules/materials/definitions/special/verdantium.dm
+++ b/code/modules/materials/definitions/special/verdantium.dm
@@ -23,3 +23,5 @@
refraction = MATERIAL_RESISTANCE_LOW
absorption = MATERIAL_RESISTANCE_HIGH
nullification = MATERIAL_RESISTANCE_MODERATE
+
+ worth = 35
diff --git a/code/modules/materials/definitions/stones/marble.dm b/code/modules/materials/definitions/stones/marble.dm
index bbe9c92fe841..c41d18940a66 100644
--- a/code/modules/materials/definitions/stones/marble.dm
+++ b/code/modules/materials/definitions/stones/marble.dm
@@ -25,6 +25,8 @@
absorption = MATERIAL_RESISTANCE_MODERATE
nullification = MATERIAL_RESISTANCE_VULNERABLE
+ worth = 2
+
/datum/material/marble/generate_recipes()
. = ..()
. += create_stack_recipe_datum(
diff --git a/code/modules/materials/definitions/stones/sandstone.dm b/code/modules/materials/definitions/stones/sandstone.dm
index 9eb0a0175adc..4dd4c1a2b16b 100644
--- a/code/modules/materials/definitions/stones/sandstone.dm
+++ b/code/modules/materials/definitions/stones/sandstone.dm
@@ -25,6 +25,8 @@
absorption = MATERIAL_RESISTANCE_MODERATE
nullification = MATERIAL_RESISTANCE_VULNERABLE
+ worth = 1.25
+
/datum/material/sandstone/generate_recipes()
. = ..()
. += create_stack_recipe_datum(category = "statues", name = "assistant statue", product = /obj/structure/statue/sandstone/assistant, amount = 10)
diff --git a/code/modules/materials/material.dm b/code/modules/materials/material.dm
index 2c0819a97216..51b061ae608c 100644
--- a/code/modules/materials/material.dm
+++ b/code/modules/materials/material.dm
@@ -6,21 +6,25 @@
abstract_type = /datum/material
//* Core
-
/**
* ID.
* Must be unique.
* Hardcoded materials can be looked up by typepath too and must never have their ids changed under the current implementation.
*/
var/id
- /// Unique name for use in indexing the list.
+ /// Name for debugging purposes; not player-facing.
var/name
- /// Prettier name for display.
+
+ //* Identification *//
+ /// Player-facing name. Always used.
var/display_name
+
+ // todo: reevaluate
var/use_name
+ // todo: reevaluate
var/sheet_singular_name = "sheet"
+ // todo: reevaluate
var/sheet_plural_name = "sheets"
- var/is_fusion_fuel
//! Shards/tables/structures
/// Path of debris object.
@@ -157,6 +161,7 @@
var/spatial_instability = 0
/// If set, object matter var will be a list containing these values.
var/list/composite_material
+ var/is_fusion_fuel
//! Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
var/created_window
@@ -176,19 +181,23 @@
/// Wallrot crumble message.
var/rotting_touch_message = "crumbles under your touch"
- //* Economy
+ //* Stacking *//
+ /// amount per sheet / whatever
+ var/sheet_amount = SHEET_MATERIAL_AMOUNT
+
+ //* Economy *//
/// Raw worth per cm3
var/worth = 0
/// economic category for this
var/economic_category_material = ECONOMIC_CATEGORY_MATERIAL_DEFAULT
- //* Sounds
+ //* Sounds *//
/// melee sound on blunt force - getsfx compatible
var/sound_melee_brute = 'sound/weapons/smash.ogg'
/// melee sound on burn damage - getsfx compatible
var/sound_melee_burn = 'sound/items/Welder.ogg'
- //* TGUI
+ //* TGUI *//
/// tgui icon key in icons/interface/materials.dm
var/tgui_icon_key = "unknown"
@@ -300,7 +309,7 @@
/datum/material/proc/wall_touch_special(turf/simulated/wall/W, mob/living/L)
return
-//* traits & trait hooks
+//* traits & trait hooks *//
/datum/material/proc/init_traits()
for(var/i in 1 to length(material_traits))
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 8e628d5716de..04f32a1e5c55 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -7,6 +7,7 @@
brightness_on = 6 // luminosity when on
light_color = "#ff9933" // A slight yellow/orange color.
light_wedge = LIGHT_OMNI
+ worth_intrinsic = 45
/*****************************Pickaxe********************************/
@@ -21,6 +22,7 @@
item_state = "jackhammer"
w_class = WEIGHT_CLASS_BULKY
materials_base = list(MAT_STEEL = 3750)
+ worth_intrinsic = 75
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
var/sand_dig = FALSE
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
@@ -58,6 +60,7 @@
desc = "Yours is the drill that will pierce through the rock walls."
drill_verb = "drilling"
sand_dig = TRUE
+ worth_intrinsic = 125
/obj/item/pickaxe/jackhammer
name = "sonic jackhammer"
@@ -67,6 +70,7 @@
origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINEERING = 2)
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
drill_verb = "hammering"
+ worth_intrinsic = 250
/obj/item/pickaxe/gold
name = "golden pickaxe"
@@ -90,6 +94,7 @@
drill_sound = 'sound/items/Welder.ogg'
sharp = 1
edge = 1
+ worth_intrinsic = 175
/obj/item/pickaxe/diamond
name = "diamond pickaxe"
@@ -109,6 +114,7 @@
desc = "Yours is the drill that will pierce the heavens!"
drill_verb = "drilling"
sand_dig = TRUE
+ worth_intrinsic = 350
/obj/item/pickaxe/borgdrill
name = "enhanced sonic jackhammer"
@@ -134,6 +140,7 @@
attack_verb = list("mined", "pierced", "stabbed", "attacked")
drill_verb = "picking"
sharp = 1
+ worth_intrinsic = 75
//Snowflake drill that works like a chainsaw! How fun. Honestly they should probably all work like this or something. I dunno. Might be a fun mining overhaul later.
/obj/item/pickaxe/tyrmalin
@@ -145,6 +152,7 @@
var/max_fuel = 100
active = 0
var/jam_chance = TRUE
+ worth_intrinsic = 75
/obj/item/pickaxe/tyrmalin/Initialize(mapload)
. = ..()
@@ -276,6 +284,7 @@
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharp = 0
edge = 1
+ worth_intrinsic = 50
var/digspeed = 40
/obj/item/shovel/bone
diff --git a/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm b/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm
index dfcd85f613a9..b55ba7453580 100644
--- a/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm
+++ b/code/modules/mining/ore_redemption_machine/engineering_points_vendor.dm
@@ -182,49 +182,49 @@
name = "Thermo-Electric Generator voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of a Thermo-Electric Generator"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/teg
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/teg
/obj/item/engineering_voucher/collectors
name = "Radiation Collector voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of crate of radiation collectors"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/engine/collector
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/radiation_collector
/obj/item/engineering_voucher/smcore
name = "Supermatter Core voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of a Supermatter core"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/smbig
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/supermatter_core
/obj/item/engineering_voucher/fusion_core
name = "Fusion Core voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of a fusion core"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/fusion_core
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/fusion_core
/obj/item/engineering_voucher/fusion_fuel_injector
name = "Fuel Injector voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of a fusion fuel injector"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/fusion_fuel_injector
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/fusion_fuel_injector
/obj/item/engineering_voucher/gyrotrons
name = "Gyrotron voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of Gyrotrons"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/gyrotron
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/gyrotron
/obj/item/engineering_voucher/fuel_compressor
name = "Fuel compressor voucher"
desc = "A voucher redeemable, at any NT cargo department, for shipment of a Fuel rod compressor"
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/fusion_fuel_compressor
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/fusion_fuel_compressor
/obj/item/engineering_voucher/reflector
name = "Laser reflector voucher"
desc = "A voucher redeemable, at any NT cargo department, for a single laser reflector."
icon_state = "engineering_voucher"
- redeemable_for = new /datum/supply_pack/eng/fusion_fuel_compressor
+ redeemable_for = new /datum/supply_pack/nanotrasen/engineering/engine/fusion_fuel_compressor
/obj/item/engineering_mystical_tech
name = "XYE"
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 40bdb82a54f8..f8d9fc7ab7f9 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -38,10 +38,6 @@
/// How are we intending to act? Help / harm / etc.
var/a_intent = INTENT_HELP
- //? Economy
- /// This mob's economic category
- var/economic_category_mob = ECONOMIC_CATEGORY_MOB_DEFAULT
-
//? Perspectives
/// using perspective - if none, it'll be self - when client logs out, if using_perspective has reset_on_logout, this'll be unset.
var/datum/perspective/using_perspective
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
index da2019fb79d4..ae8e907f7876 100644
--- a/code/modules/paperwork/handlabeler.dm
+++ b/code/modules/paperwork/handlabeler.dm
@@ -6,6 +6,7 @@
var/labels_left = 30
var/mode = 0 //off or on.
w_class = WEIGHT_CLASS_SMALL
+ worth_intrinsic = 50
/obj/item/hand_labeler/attack_mob(mob/target, mob/user, clickchain_flags, list/params, mult, target_zone, intent)
if(user.a_intent == INTENT_HARM)
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index c1718a9e7ac1..632c340da4a9 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -165,7 +165,7 @@
return
to_chat(user, "You insert the toner cartridge into \the [src].")
var/obj/item/toner/T = O
- toner += T.toner_amount
+ toner += T.amount
qdel(T)
else
to_chat(user, "This cartridge is not yet ready for replacement! Use up the rest of the toner.")
@@ -373,4 +373,11 @@
name = "toner cartridge"
icon = 'icons/obj/device.dmi'
icon_state = "tonercartridge"
- var/toner_amount = 30
+ worth_intrinsic = 5
+
+ var/max_amount = 30
+ var/amount = 30
+
+/obj/item/toner/get_containing_worth(flags)
+ . = ..()
+ . += clamp(amount, 0, max_amount) * 1 // printer companies are still scams in 2656
diff --git a/code/modules/power/cells/device_cells.dm b/code/modules/power/cells/device_cells.dm
index dcb9244799c9..51c67e608999 100644
--- a/code/modules/power/cells/device_cells.dm
+++ b/code/modules/power/cells/device_cells.dm
@@ -13,6 +13,8 @@
materials_base = list("metal" = 350, MAT_GLASS = 50)
preserve_item = 1
+ worth_intrinsic = 25
+
/obj/item/cell/device/empty
charge = 0
@@ -23,6 +25,8 @@
maxcharge = 2400
charge_amount = 20
+ worth_intrinsic = 50
+
/obj/item/cell/device/weapon/empty
charge = 0
diff --git a/code/modules/power/fusion/gyrotron/gyrotron.dm b/code/modules/power/fusion/gyrotron/gyrotron.dm
index eee572332636..0291e70f59c5 100644
--- a/code/modules/power/fusion/gyrotron/gyrotron.dm
+++ b/code/modules/power/fusion/gyrotron/gyrotron.dm
@@ -9,6 +9,8 @@ var/list/gyrotrons = list()
use_power = USE_POWER_IDLE
active_power_usage = 50000
+ worth_intrinsic = 700
+
circuit = /obj/item/circuitboard/gyrotron
var/id_tag
diff --git a/code/modules/power/lighting/lights.dm b/code/modules/power/lighting/lights.dm
index fb697578a656..cd1dddcda2ff 100644
--- a/code/modules/power/lighting/lights.dm
+++ b/code/modules/power/lighting/lights.dm
@@ -48,12 +48,16 @@
nightshift_range = 6
nightshift_power = 0.5
+ worth_intrinsic = 5
+
/obj/item/light/tube/large
w_class = WEIGHT_CLASS_SMALL
name = "large light tube"
brightness_range = 8
brightness_power = 1
+ worth_intrinsic = 10
+
//! ## Colored Light Tubes
//! Standard Rainbow
@@ -121,6 +125,8 @@
nightshift_range = null
nightshift_power = null
+ worth_intrinsic = 2
+
/obj/item/light/bulb/strong
name = "light bulb"
desc = "A replacement light bulb."
@@ -131,6 +137,8 @@
brightness_range = 8
+ worth_intrinsic = 4
+
/obj/item/light/throw_impact(atom/hit_atom)
..()
shatter()
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 1f42f4c4e5fb..1e5de40b4b86 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -7,7 +7,9 @@
anchored = FALSE
density = TRUE
req_access = list(ACCESS_ENGINEERING_ENGINE)
-// use_power = 0
+
+ worth_intrinsic = 500
+
var/obj/item/tank/phoron/P = null
/// stored power in kilojoules
var/stored_power = 0
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index c1821021e778..7da6c2e6c880 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -9,6 +9,8 @@
density = 1
req_access = list(ACCESS_ENGINEERING_ENGINE)
armor_type = /datum/armor/object/medium
+
+ worth_intrinsic = 350
var/id = null
use_power = USE_POWER_OFF //uses powernet power, not APC power
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index bfa09404df67..2233e458f083 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -21,6 +21,8 @@ field_generator power level display
anchored = 0
density = 1
use_power = USE_POWER_OFF
+
+ worth_intrinsic = 350
var/const/num_power_levels = 6 // Total number of power level icon has
var/Varedit_start = 0
var/Varpower = 0
diff --git a/code/modules/power/singularity/generator.dm b/code/modules/power/singularity/generator.dm
index ca0c7b6b5aa1..c9963363fdd6 100644
--- a/code/modules/power/singularity/generator.dm
+++ b/code/modules/power/singularity/generator.dm
@@ -1,12 +1,13 @@
-/////SINGULARITY SPAWNER
-/obj/machinery/the_singularitygen/
+/obj/machinery/the_singularitygen
name = "Gravitational Singularity Generator"
- desc = "An Odd Device which produces a Gravitational Singularity when set up."
+ desc = "An odd device which produces a gravitational singularity when set up."
icon = 'icons/obj/singularity.dmi'
icon_state = "TheSingGen"
anchored = 0
density = 1
use_power = USE_POWER_OFF
+
+ worth_intrinsic = 3000
var/energy = 0
var/creation_type = /obj/singularity
@@ -14,7 +15,8 @@
var/turf/T = get_turf(src)
if(src.energy >= 200)
new creation_type(T, 50)
- if(src) qdel(src)
+ if(src)
+ qdel(src)
/obj/machinery/the_singularitygen/attackby(obj/item/W, mob/user)
if(W.is_wrench())
diff --git a/code/modules/power/smes/coil.dm b/code/modules/power/smes/coil.dm
index 76aa4e00ddb6..168c6289455b 100644
--- a/code/modules/power/smes/coil.dm
+++ b/code/modules/power/smes/coil.dm
@@ -7,6 +7,7 @@
icon = 'icons/obj/stock_parts.dmi'
icon_state = "smes_coil" // Just few icons patched together. If someone wants to make better icon, feel free to do so!
w_class = WEIGHT_CLASS_BULKY // It's LARGE (backpack size)
+ worth_intrinsic = 150
/// capacity in kWh
var/charge_capacity = SMES_COIL_STORAGE_BASIC
/// IO in kW
@@ -17,15 +18,18 @@
desc = "A cheaper model of superconductive magnetic coil. Its capacity and I/O rating are considerably lower."
charge_capacity = SMES_COIL_STORAGE_WEAK
flow_capacity = SMES_COIL_FLOW_WEAK
+ worth_intrinsic = 100
/obj/item/smes_coil/super_capacity
name = "superconductive capacitance coil"
desc = "A specialised type of superconductive magnetic coil with a significantly stronger containment field, allowing for larger power storage. Its IO rating is much lower, however."
charge_capacity = SMES_COIL_STORAGE_CAPACITANCE
flow_capacity = SMES_COIL_FLOW_CAPACITANCE
+ worth_intrinsic = 350
/obj/item/smes_coil/super_io
name = "superconductive transmission coil"
desc = "A specialised type of superconductive magnetic coil with reduced storage capabilites but vastly improved power transmission capabilities, making it useful in systems which require large throughput."
charge_capacity = SMES_COIL_STORAGE_TRANSMISSION
flow_capacity = SMES_COIL_FLOW_TRANSMISSION
+ worth_intrinsic = 350
diff --git a/code/modules/projectiles/ammunition/ammo_casing.dm b/code/modules/projectiles/ammunition/ammo_casing.dm
index 2c12ce235bf8..a5131b48e330 100644
--- a/code/modules/projectiles/ammunition/ammo_casing.dm
+++ b/code/modules/projectiles/ammunition/ammo_casing.dm
@@ -40,6 +40,9 @@
QDEL_NULL(stored)
return ..()
+/obj/item/ammo_casing/get_intrinsic_worth(flags)
+ return loaded()? ..() : 0
+
//removes the projectile from the ammo casing
// todo: refactor for actual on-shot or whatever
/obj/item/ammo_casing/proc/expend()
diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm
index 644644bfb5a0..e43c6248cb0e 100644
--- a/code/modules/projectiles/ammunition/rounds.dm
+++ b/code/modules/projectiles/ammunition/rounds.dm
@@ -252,12 +252,14 @@
projectile_type = /obj/projectile/bullet/shotgun
materials_base = list(MAT_STEEL = 360)
fall_sounds = list('sound/weapons/guns/shotgun_fall.ogg')
+ worth_intrinsic = 7.5
/obj/item/ammo_casing/a12g/pellet
name = "shotgun shell"
desc = "A 12 gauge shell."
icon_state = "gshell"
projectile_type = /obj/projectile/bullet/pellet/shotgun
+ worth_intrinsic = 7.5
/obj/item/ammo_casing/a12g/blank
name = "shotgun shell"
@@ -265,6 +267,7 @@
icon_state = "blshell"
projectile_type = /obj/projectile/bullet/blank
materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 2.5
/obj/item/ammo_casing/a12g/practice
name = "shotgun shell"
@@ -272,6 +275,7 @@
icon_state = "pshell"
projectile_type = /obj/projectile/bullet/practice
materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 2.5
/obj/item/ammo_casing/a12g/beanbag
name = "beanbag shell"
@@ -279,6 +283,7 @@
icon_state = "bshell"
projectile_type = /obj/projectile/bullet/shotgun/beanbag
materials_base = list(MAT_STEEL = 180)
+ worth_intrinsic = 3.5
/obj/item/ammo_casing/a12g/improvised
name = "improvised shell"
@@ -295,6 +300,7 @@
icon_state = "stunshell"
projectile_type = /obj/projectile/energy/electrode/stunshot
materials_base = list(MAT_STEEL = 360, MAT_GLASS = 720)
+ worth_intrinsic = 7.5
//Does not stun, only blinds, but has area of effect.
/obj/item/ammo_casing/a12g/flare
@@ -303,6 +309,7 @@
icon_state = "fshell"
projectile_type = /obj/projectile/energy/flash/flare
materials_base = list(MAT_STEEL = 90, MAT_GLASS = 90)
+ worth_intrinsic = 2.5
//Silver 12g
/obj/item/ammo_casing/a12g/silver
@@ -312,6 +319,7 @@
caliber = "12g"
projectile_type = /obj/projectile/bullet/pellet/shotgun/silver
materials_base = list(MAT_STEEL = 360, MAT_SILVER = 240)
+ worth_intrinsic = 20
//Wooden Stake 12g
/obj/item/ammo_casing/a12g/stake
@@ -321,6 +329,7 @@
caliber = "12g"
projectile_type = /obj/projectile/bullet/shotgun/stake
materials_base = list(MAT_STEEL = 500)
+ worth_intrinsic = 45
//Techshell & Derivatives
/obj/item/ammo_casing/a12g/techshell
@@ -330,6 +339,7 @@
caliber = "12g"
projectile_type = null
materials_base = list(MAT_STEEL = 500, MAT_PHORON = 200)
+ worth_intrinsic = 35
/obj/item/ammo_casing/a12g/techshell/meteorslug
name = "meteorslug shell"
@@ -337,6 +347,7 @@
icon_state = "mshell"
projectile_type = /obj/projectile/meteor/slug
materials_base = list(MAT_STEEL = 500, MAT_GOLD = 200)
+ worth_intrinsic = 75
/obj/item/ammo_casing/a12g/techshell/emp
name = "ion shell"
@@ -345,6 +356,7 @@
projectile_type = /obj/projectile/scatter/ion
// projectile_type = /obj/projectile/bullet/shotgun/ion
materials_base = list(MAT_STEEL = 360, MAT_URANIUM = 240)
+ worth_intrinsic = 50
/obj/item/ammo_casing/a12g/techshell/pulseslug
name = "pulse slug"
@@ -354,12 +366,14 @@
icon_state = "plshell"
projectile_type = /obj/projectile/beam/pulse/shotgun
materials_base = list(MAT_STEEL = 500, MAT_SILVER = 200)
+ worth_intrinsic = 75
/obj/item/ammo_casing/a12g/techshell/dragonsbreath
name = "dragonsbreath shell"
desc = "A shotgun shell which fires a spread of incendiary pellets."
icon_state = "ishell"
projectile_type = /obj/projectile/bullet/incendiary/shotgun
+ worth_intrinsic = 75
/obj/item/ammo_casing/a12g/techshell/frag12
name = "FRAG-12 slug"
@@ -367,6 +381,7 @@
icon_state = "heshell"
projectile_type = /obj/projectile/bullet/shotgun/frag12
materials_base = list(MAT_STEEL = 500, MAT_PHORON = 200)
+ worth_intrinsic = 100
/obj/item/ammo_casing/a12g/techshell/laserslug
name = "scatter laser shell"
@@ -374,6 +389,7 @@
icon_state = "lshell"
projectile_type = /obj/projectile/scatter/laser
materials_base = list(MAT_STEEL = 500, MAT_GLASS = 200)
+ worth_intrinsic = 75
/*
* 7.62mm
@@ -385,11 +401,13 @@
icon_state = "rifle-casing"
projectile_type = /obj/projectile/bullet/rifle/a762
materials_base = list(MAT_STEEL = 200)
+ worth_intrinsic = 20
/obj/item/ammo_casing/a762/ap
desc = "A 7.62mm armor-piercing bullet casing."
projectile_type = /obj/projectile/bullet/rifle/a762/ap
materials_base = list(MAT_STEEL = 300)
+ worth_intrinsic = 30
/obj/item/ammo_casing/a762/practice
desc = "A 7.62mm practice bullet casing."
@@ -401,6 +419,7 @@
desc = "A blank 7.62mm bullet casing."
projectile_type = /obj/projectile/bullet/blank
materials_base = list(MAT_STEEL = 90)
+ worth_intrinsic = 5
/obj/item/ammo_casing/a762/hp
desc = "A 7.62mm hollow-point bullet casing."
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 99faceeee183..c67e1b855229 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -31,6 +31,8 @@
/obj/item/gun
name = "gun"
desc = "Its a gun. It's pretty terrible, though."
+ description_info = "This is a gun. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
+ then click where you want to fire."
icon = 'icons/obj/gun/ballistic.dmi'
item_icons = list(
SLOT_ID_LEFT_HAND = 'icons/mob/items/lefthand_guns.dmi',
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 3977ec6de2ce..19e9f2b2b73c 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -15,6 +15,8 @@
heavy = TRUE
one_handed_penalty = 30
+ worth_intrinsic = 350
+
firemodes = list(
list(mode_name="normal", fire_delay=8, projectile_type=/obj/projectile/beam/midlaser, charge_cost = 240),
list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/projectile/beam/weaklaser, charge_cost = 60),
@@ -159,15 +161,22 @@
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
projectile_type = /obj/projectile/beam/xray
charge_cost = 200
+ worth_intrinsic = 500 // op as balls
/obj/item/gun/energy/sniperrifle
name = "marksman energy rifle"
desc = "The HI DMR 9E is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful \
ionized beams, this is a weapon to kill from a distance."
+ description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
+ then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger. \
+ To use the scope, use the appropriate verb in the object tab."
icon_state = "sniper"
item_state = "sniper"
item_state_slots = list(SLOT_ID_RIGHT_HAND = "z8carbine", SLOT_ID_LEFT_HAND = "z8carbine") //placeholder
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
+
+ worth_intrinsic = 750
+
projectile_type = /obj/projectile/beam/sniper
slot_flags = SLOT_BACK
charge_cost = 600
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index 84170a816f7c..b0ff6e0a1e65 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -1,10 +1,14 @@
/obj/item/gun/energy/gun
name = "energy gun"
desc = "Another bestseller of Lawson Arms and "+TSC_HEPH+", the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
+ description_info = "This is an energy weapon. To fire the weapon, ensure your intent is *not* set to 'help', have your gun mode set to 'fire', \
+ then click where you want to fire. Most energy weapons can fire through windows harmlessly. To recharge this weapon, use a weapon recharger."
icon_state = "energystun100"
item_state = null //so the human update icon uses the icon_state instead.
fire_delay = 10 // Handguns should be inferior to two-handed weapons.
+ worth_intrinsic = 250
+
projectile_type = /obj/projectile/beam/stun/med
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
modifystate = "energystun"
@@ -36,6 +40,7 @@
// requires_two_hands = 1
one_handed_penalty = 30
+ worth_intrinsic = 450
firemodes = list(
list(mode_name="stun", burst=1, projectile_type=/obj/projectile/beam/stun/weak, modifystate="fm-2tstun", charge_cost = 100),
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 11e1dd6ee286..4286b0cd921d 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -11,6 +11,7 @@
heavy = TRUE
projectile_type = /obj/projectile/ion
one_handed_penalty = 15
+ worth_intrinsic = 500
/obj/item/gun/energy/ionrifle/emp_act(severity)
..(max(severity, 4)) //so it doesn't EMP itself, I guess
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 960100b4b6b3..347b32ad1c95 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -6,6 +6,8 @@
fire_delay = 4
+ worth_intrinsic = 350
+
projectile_type = /obj/projectile/energy/electrode
modifystate = "taser"
diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
index 650154c9ea91..b87c0e755a75 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
@@ -132,6 +132,8 @@
loaded = null
empty_sound = 'sound/weapons/smg_empty_alarm.ogg'
+ worth_intrinsic = 500
+
firemodes = list(
list(mode_name="high power", power_cost = 400, projectile_type = /obj/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, move_delay=null, one_handed_penalty=15),
list(mode_name="low power", power_cost = 150, projectile_type = /obj/projectile/bullet/magnetic/heated/weak, burst=1, fire_delay=5, move_delay=null, one_handed_penalty=15),
@@ -152,6 +154,8 @@
slot_flags = SLOT_BELT|SLOT_HOLSTER
+ worth_intrinsic = 350
+
firemodes = list(
list(mode_name="lethal", power_cost = 2000, projectile_type = /obj/projectile/bullet/magnetic/heated, burst=1, fire_delay=8, move_delay=null, one_handed_penalty=0),
list(mode_name="stun", power_cost = 1500, projectile_type = /obj/projectile/energy/electrode/stunshot, burst=1, fire_delay=5, move_delay=null, one_handed_penalty=0),
@@ -184,6 +188,8 @@
weight = ITEM_WEIGHT_GUN_NORMAL
encumbrance = ITEM_ENCUMBRANCE_GUN_NORMAL
+ worth_intrinsic = 500
+
power_cost = 200
projectile_type = /obj/projectile/bullet/magnetic/flechette/hunting
empty_sound = 'sound/weapons/smg_empty_alarm.ogg'
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 0d623eb7b26d..f7e8c4edfb02 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -111,6 +111,7 @@
magazine_type = /obj/item/ammo_magazine/m9mmt/rubber
allowed_magazines = list(/obj/item/ammo_magazine/m9mmt)
projectile_type = /obj/projectile/bullet/pistol/medium
+ worth_intrinsic = 450
/obj/item/gun/ballistic/automatic/wt550/update_icon_state()
. = ..()
@@ -143,6 +144,7 @@
mag_remove_sound = 'sound/weapons/guns/interaction/batrifle_magout.ogg'
heavy = TRUE
one_handed_penalty = 60
+ worth_intrinsic = 650 // milrp time
burst_delay = 4
firemodes = list(
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
index e19910e122dd..2f11bfa5cb00 100644
--- a/code/modules/projectiles/guns/projectile/boltaction.dm
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -13,6 +13,7 @@
ammo_type = /obj/item/ammo_casing/a762
load_method = SINGLE_CASING|SPEEDLOADER
action_sound = 'sound/weapons/riflebolt.ogg'
+ worth_intrinsic = 300
/obj/item/gun/ballistic/shotgun/pump/rifle/practice // For target practice
desc = "A bolt-action rifle with a lightweight synthetic wood stock, designed for competitive shooting. Comes shipped with practice rounds pre-loaded into the gun. Popular among professional marksmen. Uses 7.62mm rounds."
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 0e21977cc57a..32f77895c863 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -67,6 +67,7 @@
icon_state = "shotgun_c"
item_state = "cshotgun"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
+ worth_intrinsic = 500
max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8.
ammo_type = /obj/item/ammo_casing/a12g
load_method = SINGLE_CASING|SPEEDLOADER
@@ -284,6 +285,7 @@
ammo_type = /obj/item/ammo_casing/a12g/flare
projectile_type = /obj/projectile/energy/flash
one_handed_penalty = 0
+ worth_intrinsic = 150
/obj/item/gun/ballistic/shotgun/flare/paramed
name = "Paramedic Flare Gun"
diff --git a/code/modules/projectiles/magazines/magazine.dm b/code/modules/projectiles/magazines/magazine.dm
index 8a5326dc0093..c03ca5d1ad78 100644
--- a/code/modules/projectiles/magazines/magazine.dm
+++ b/code/modules/projectiles/magazines/magazine.dm
@@ -61,6 +61,11 @@
for(var/key in adding)
.[key] += adding[key] * shell_amount
+/obj/item/ammo_magazine/get_containing_worth(flags)
+ . = ..()
+ var/obj/item/ammo_casing/ammo_casted = ammo_type
+ . += (isnull(initial_ammo)? max_ammo : initial_ammo) * initial(ammo_casted.worth_intrinsic)
+
/obj/item/ammo_magazine/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/ammo_casing))
var/obj/item/ammo_casing/C = W
diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm
index ba9f2aab0fcd..d8aef4eafd08 100644
--- a/code/modules/projectiles/pins.dm
+++ b/code/modules/projectiles/pins.dm
@@ -6,6 +6,7 @@
item_state = "pen"
w_class = WEIGHT_CLASS_TINY
attack_verb = list("poked")
+ worth_intrinsic = 25
var/fail_message = "INVALID USER."
var/selfdestruct = 0 // Explode when user check is failed.
var/pin_irremovable = 0 // Cannot be replaced by any pin.
diff --git a/code/modules/reagents/distilling/distilling.dm b/code/modules/reagents/distilling/distilling.dm
index bfce4bbdc5c5..04436f57fb1f 100644
--- a/code/modules/reagents/distilling/distilling.dm
+++ b/code/modules/reagents/distilling/distilling.dm
@@ -10,6 +10,8 @@
icon = 'icons/obj/machines/reagent.dmi'
icon_state = "distiller"
+
+ worth_intrinsic = 500
var/base_state // The string var used in update icon for overlays, either set manually or initialized.
var/power_rating = 3000
@@ -309,3 +311,4 @@
desc = "A gas-operated variant of a chemical distillery. Able to reach much higher, and lower, temperatures through the use of treated gas."
use_atmos = TRUE
+ worth_intrinsic = 1000
diff --git a/code/modules/reagents/machinery/dispenser/cartridge.dm b/code/modules/reagents/machinery/dispenser/cartridge.dm
index f60e72fb8463..deedfbffa40a 100644
--- a/code/modules/reagents/machinery/dispenser/cartridge.dm
+++ b/code/modules/reagents/machinery/dispenser/cartridge.dm
@@ -56,11 +56,23 @@
/obj/item/reagent_containers/cartridge/dispenser/large
name = "large dispenser cartridge"
volume = 1000
+ materials_base = list(
+ /datum/material/plastic::id = 5 * /datum/material/plastic::sheet_amount,
+ )
+ worth_intrinsic = 100
/obj/item/reagent_containers/cartridge/dispenser/medium
name = "medium dispenser cartridge"
volume = 500
+ materials_base = list(
+ /datum/material/plastic::id = 3 * /datum/material/plastic::sheet_amount,
+ )
+ worth_intrinsic = 75
/obj/item/reagent_containers/cartridge/dispenser/small
name = "small dispenser cartridge"
volume = 250
+ materials_base = list(
+ /datum/material/plastic::id = 1 * /datum/material/plastic::sheet_amount,
+ )
+ worth_intrinsic = 50
diff --git a/code/modules/reagents/machinery/dispenser/dispenser.dm b/code/modules/reagents/machinery/dispenser/dispenser.dm
index 2bbf1d68c28d..7e001e134515 100644
--- a/code/modules/reagents/machinery/dispenser/dispenser.dm
+++ b/code/modules/reagents/machinery/dispenser/dispenser.dm
@@ -27,6 +27,8 @@
interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE_SILICON
+ worth_intrinsic = 150
+
/// reagent synthesizers in us - set to list of typepaths to init on Initialize().
var/list/obj/item/reagent_synth/synthesizers
/// synthesizers are swappable
@@ -88,6 +90,15 @@
component_parts -= cell
return ..()
+/obj/machinery/chemical_dispenser/worth_contents(flags)
+ . = ..()
+ if(synthesizers)
+ . += synthesizers
+ if(cartridges)
+ . += cartridges
+ if(inserted)
+ . += inserted
+
/obj/machinery/chemical_dispenser/RefreshParts()
var/total_capacitor_rating = 0
var/total_capacitors = 0
diff --git a/code/modules/reagents/machinery/dispenser/supply.dm b/code/modules/reagents/machinery/dispenser/supply.dm
deleted file mode 100644
index d79d542e8f7e..000000000000
--- a/code/modules/reagents/machinery/dispenser/supply.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-/datum/supply_pack/chemical_dispenser
- name = "Reagent dispenser (Empty)"
- contains = list(
- /obj/item/circuitboard/machine/chemical_dispenser
- )
- cost = 10
- container_type = /obj/structure/largecrate
- container_name = "reagent dispenser crate"
- group = "Reagents"
-
-/datum/supply_pack/beer_dispenser
- name = "Booze dispenser"
- contains = list(
- /obj/machinery/chemical_dispenser/catering/bar_alc/unanchored
- )
- cost = 20
- container_type = /obj/structure/largecrate
- container_name = "booze dispenser crate"
- group = "Reagents"
-
-/datum/supply_pack/soda_dispenser
- name = "Soda dispenser"
- contains = list(
- /obj/machinery/chemical_dispenser/catering/bar_soft/unanchored
- )
- cost = 20
- container_type = /obj/structure/largecrate
- container_name = "soda dispenser crate"
- group = "Reagents"
-
-/datum/supply_pack/coffee_dispenser
- name = "Coffee dispenser"
- contains = list(
- /obj/machinery/chemical_dispenser/catering/bar_coffee/unanchored
- )
- cost = 20
- container_type = /obj/structure/largecrate
- container_name = "coffee dispenser crate"
- group = "Reagents"
-
-/datum/supply_pack/reagent_synth_chemistry
- name = "Reagent Synthesis Module - Chemistry"
- contains = list(
- /obj/item/reagent_synth/chemistry,
- )
- cost = 20
- group = "Reagents"
-
-/datum/supply_pack/dispenser_cartridges
- name = "Large Chemical Dispenser Cartridges"
- contains = list(
- /obj/item/reagent_containers/cartridge/dispenser/large = 10,
- )
- cost = 15
- container_type = /obj/structure/closet/crate
- container_name = "dispenser cartridge crate"
- group = "Reagents"
diff --git a/code/modules/reagents/machinery/dispenser/synthesizer.dm b/code/modules/reagents/machinery/dispenser/synthesizer.dm
index daa54c516fdb..402cc2857e5e 100644
--- a/code/modules/reagents/machinery/dispenser/synthesizer.dm
+++ b/code/modules/reagents/machinery/dispenser/synthesizer.dm
@@ -55,6 +55,7 @@
/datum/reagent/sulfur,
/datum/reagent/chlorine,
)
+ worth_intrinsic = 1000
/obj/item/reagent_synth/bar
name = "reagent synthesis module (Bar)"
@@ -80,6 +81,7 @@
/datum/reagent/ethanol/ale,
/datum/reagent/ethanol/mead,
)
+ worth_intrinsic = 350
/obj/item/reagent_synth/cafe
name = "reagent synthesis module (Cafe)"
@@ -101,6 +103,7 @@
/datum/reagent/drink/juice/lime,
/datum/reagent/drink/juice/berry,
)
+ worth_intrinsic = 350
/obj/item/reagent_synth/drink
name = "reagent synthesis module (Soda)"
@@ -126,6 +129,7 @@
/datum/reagent/drink/soda/gingerale,
/datum/reagent/drink/soda/lemon_lime,
)
+ worth_intrinsic = 350
/obj/item/reagent_synth/medicine
name = "reagent synthesis module (Medicine)"
@@ -159,6 +163,7 @@
/datum/reagent/cryoxadone,
/datum/reagent/clonexadone,
)
+ worth_intrinsic = 4000
/obj/item/reagent_synth/medicine_addon
reagents_provided = list(
@@ -171,6 +176,7 @@
/datum/reagent/nutriment,
/datum/reagent/nutriment/protein
)
+ worth_intrinsic = 2000
/obj/item/reagent_synth/bioproduct
reagents_provided = list(
@@ -178,6 +184,7 @@
/datum/reagent/nutriment/protein,
/datum/reagent/drink/milk,
)
+ worth_intrinsic = 500
/obj/item/reagent_synth/botanical
reagents_provided = list(
@@ -191,3 +198,4 @@
/datum/reagent/toxin/plantbgone,
/datum/reagent/calcium,
)
+ worth_intrinsic = 1000
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 173247f04f97..34a7123f39fd 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -123,6 +123,7 @@
item_state = "pepperspray"
possible_transfer_amounts = null
volume = 40
+ worth_intrinsic = 85
var/safety = TRUE
materials_base = list(MAT_STEEL = 1000)
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index 21caac55c0af..d5cbc172a198 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -7,6 +7,7 @@
anchored = 0
density = 1
req_access = list(ACCESS_ENGINEERING_ENGINE)
+ worth_intrinsic = 450
var/active = 0
var/power = 0
var/state = 0
diff --git a/code/modules/supply/README.md b/code/modules/supply/README.md
new file mode 100644
index 000000000000..bb24743897a5
--- /dev/null
+++ b/code/modules/supply/README.md
@@ -0,0 +1,9 @@
+# Cargo Module
+
+The game's Supply and Cargo systems with their related things live here.
+
+While this can somewhat be associated with Cargo, remember that the station is not the only one with a supply controller.
+
+- supply - the supply buy/sell system, which is literally just an IC way for the game world to spawn/delete things for this abstract thing we call 'money'
+
+More modules to come.
diff --git a/code/modules/supply/supply_pack.dm b/code/modules/supply/supply_pack.dm
new file mode 100644
index 000000000000..4bab85362f7e
--- /dev/null
+++ b/code/modules/supply/supply_pack.dm
@@ -0,0 +1,272 @@
+//* This file is explicitly licensed under the MIT license. *//
+//* Copyright (c) 2024 silicons *//
+
+/**
+ * a holder for a pack of objects that can be ordered
+ *
+ * todo: rename to supply_pack
+ */
+/datum/supply_pack
+ /// name of pack
+ var/name = "Supply Pack"
+ /// arbitrary category to group under
+ var/category = "Miscellaneous"
+
+ /// flags
+ var/supply_pack_flags = NONE
+
+ /// raw worth of everything in pack
+ ///
+ /// * if null, it will be autodetected.
+ var/worth
+ /// raw worth of non-deterministic parts of pack
+ ///
+ /// * required for non-deterministic packs if you don't want to hard-set worth
+ var/worth_additional
+
+ //* Container *//
+
+ /// type of the container
+ var/container_type = /obj/structure/closet/crate/plastic
+ /// override name of container
+ var/container_name
+ /// override desc of container
+ var/container_desc
+
+ /// set access of container
+ var/list/container_access
+ /// set req one access of container
+ var/list/container_one_access
+
+ //* Contents *//
+
+ /// contains these entity descriptors
+ ///
+ /// * don't be fooled; this **is** a lazy list! this means it's null while empty.
+ /// * a descriptor associated to amount
+ /// * a list of list("entity" = ..., "amount" = number, "entity_hint" (optional), "container_hint" (optional)), associated to amount
+ var/list/contains = list()
+ /// contains some amount of these entity descriptor groups
+ ///
+ /// * don't be fooled; this **is** a lazy list! this means it's null while empty.
+ /// * this should be a list of lists with "entities", "amount" as keys
+ /// * "entities" should be associated to a list of entities as per [contains]; the entity can be associated to a number for weight
+ /// * "amount" should be associated to a random amount of them to spawn
+ /// * amount will be distrbuted randomly as needed, evenly, across the entities.
+ var/list/contains_some = list()
+ /// a list of custom 'contains' lines that get printed to the manifest/interface
+ ///
+ /// * don't be fooled; this **is** a lazy list! this means it's null while empty.
+ var/list/contains_custom_text = list()
+
+ // * For Lazy People *//
+
+ /// amount contained
+ var/lazy_gacha_amount = 1
+ /// list of entities
+ var/list/lazy_gacha_contained
+
+ //* legacy *//
+ /// if null, it will be auto-converted from worth
+ var/legacy_cost
+ var/legacy_contraband = FALSE
+ /// literally just a flag so the subsystem picks it up
+ var/legacy = FALSE
+
+/**
+ * **Always call this before using it!**
+ */
+/datum/supply_pack/proc/initialize()
+ populate()
+ generate()
+ compact()
+
+/**
+ * use this to manipulate our contents before generation.
+ */
+/datum/supply_pack/proc/populate()
+ return
+
+/datum/supply_pack/proc/generate()
+ // resolve accesses
+ for(var/i in 1 to length(container_access))
+ var/key = container_access[i]
+ if(ispath(key, /datum/access))
+ var/datum/access/resolved_access = SSjob.access_path_lookup[key]
+ container_access[i] = resolved_access.access_value
+ for(var/i in 1 to length(container_one_access))
+ var/key = container_one_access[i]
+ if(ispath(key, /datum/access))
+ var/datum/access/resolved_access = SSjob.access_path_lookup[key]
+ container_one_access[i] = resolved_access.access_value
+ // auto-detect worth
+ if(isnull(worth))
+ worth = detect_worth()
+ if(!worth)
+ stack_trace("pack [src] ([type]) failed to detect worth.")
+ // autoset container name
+ if(isnull(container_name))
+ container_name = name
+ // gacha
+ if(length(lazy_gacha_contained) && lazy_gacha_amount)
+ contains_some[++contains_some.len] = list(
+ "entities" = lazy_gacha_contained,
+ "amount" = lazy_gacha_amount,
+ )
+ lazy_gacha_contained = null
+ // legacy
+ if(isnull(legacy_cost))
+ legacy_cost = ceil(worth * 0.06)
+
+/datum/supply_pack/proc/compact()
+ if(!length(contains))
+ contains = null
+ if(!length(contains_some))
+ contains_some = null
+ if(!length(contains_custom_text))
+ contains_custom_text = null
+
+/datum/supply_pack/proc/detect_worth()
+ . = 0
+
+ // if non-deterministic, must need that
+ if(length(contains_some) || length(contains_custom_text))
+ if(isnull(worth_additional))
+ . = INFINITY
+ CRASH("attempted to generate worth on a non-deterministic crate (has contains_some or contains_custom_text); fix this.")
+ // add worth additional
+ . += worth_additional
+
+ // container
+ if(container_type)
+ . += SSsupply.value_entity_via_descriptor(container_type)
+
+ // deterministic contents
+ for(var/descriptor as anything in contains)
+ var/amount = contains[descriptor] || 1
+ var/worth
+ if(islist(descriptor))
+ var/list/descriptor_list = descriptor
+ worth = SSsupply.value_entity_via_descriptor(
+ descriptor_list["entity"],
+ descriptor_list["amount"],
+ descriptor_list["entity_hint"],
+ descriptor_list["container_hint"],
+ )
+ else
+ worth = SSsupply.value_entity_via_descriptor(descriptor, amount)
+ . += worth
+
+/**
+ * todo: return list of entities?
+ *
+ * @return container spawned, or null (which can also mean we don't use a container for some reason)
+ */
+/datum/supply_pack/proc/instantiate_pack_at(atom/where)
+ . = instantiate_container(where)
+ instantiate_contents(.)
+
+/datum/supply_pack/proc/instantiate_container(atom/where)
+ RETURN_TYPE(/atom/movable)
+
+ if(!container_type)
+ return
+
+ var/atom/movable/container = new container_type(where)
+ . = container
+
+ container.name = container_name
+ container.desc = container_desc
+
+ if(isobj(container))
+ var/obj/obj_container = container
+ if(container_access)
+ // todo: getter / setter for req-accesses, enforced cached & deduped lists
+ obj_container.req_access = container_access.Copy()
+ if(container_one_access)
+ // todo: getter / setter for req-accesses, enforced cached & deduped lists
+ obj_container.req_one_access = container_one_access.Copy()
+
+/**
+ * todo: return list of entities?
+ */
+/datum/supply_pack/proc/instantiate_contents(atom/where)
+ var/list/descriptors_to_spawn = resolve_contents_descriptors()
+ for(var/descriptor in descriptors_to_spawn)
+ var/amount = descriptors_to_spawn[descriptor] || 1
+ SSsupply.instantiate_entity_via_descriptor(descriptor, amount, null, null, where)
+
+/**
+ * @return list of descriptor associated to amount
+ */
+/datum/supply_pack/proc/resolve_contents_descriptors()
+ . = contains? contains.Copy() : list()
+
+ if(length(contains_some))
+ for(var/list/entry as anything in contains_some)
+ var/list/entities = entry["entities"]
+ var/amount = entry["amount"]
+
+ // this is basically an inlined pickweight()
+
+ var/total_weight = 0
+ for(var/key in entities)
+ total_weight += entities[key] || 1
+
+ if(total_weight == length(entities))
+ for(var/i in 1 to amount)
+ .[pick(entities)] += 1
+ else
+ for(var/i in 1 to amount)
+ var/chosen = rand(1, total_weight)
+ var/remaining = chosen
+ for(var/j in 1 to length(entities))
+ var/entity = entities[j]
+ var/weight = entities[entity]
+ remaining -= weight
+ if(remaining <= 0)
+ .[entity] += 1
+
+//* LEGACY CRAP *//
+
+/**
+ * generates our HTML manifest as a **list**
+ *
+ * argument is provided for container incase you want to modify based on what actually spawned
+ */
+/datum/supply_pack/proc/get_html_manifest(atom/movable/container)
+ RETURN_TYPE(/list)
+ var/list/lines = list()
+ lines += "Contents:
"
+ lines += ""
+ var/list/assembled = list()
+ var/truncated = FALSE
+ for(var/atom/movable/thing in container)
+ assembled["[thing]"] += 1
+ if(length(assembled) > 100)
+ truncated = TRUE
+ break
+ for(var/i in 1 to length(assembled))
+ var/key = assembled[i]
+ var/value = assembled[key]
+ assembled[i] = "- [value > 1? "[value] [key](s)" : "[key]"]
"
+ lines += assembled
+ if(truncated)
+ lines += "- ... (truncated)
"
+ lines += "
"
+ return lines
+
+/datum/supply_pack/proc/nanoui_manifest_list()
+ . = list()
+ for(var/descriptor in contains)
+ var/amount = contains[descriptor]
+ var/described = SSsupply.describe_entity_via_descriptor(descriptor, amount)
+ . += described
+ for(var/list/gacha_list as anything in contains_some)
+ var/list/entities = gacha_list["entities"]
+ for(var/entity in entities)
+ var/described = SSsupply.describe_entity_via_descriptor(entity)
+ . += described
+
+/datum/supply_pack/proc/nanoui_is_random()
+ return !!length(contains_some)
diff --git a/code/modules/vehicles_legacy/skateboard.dm b/code/modules/vehicles_legacy/skateboard.dm
index a2d16724a2c1..1b500e707aed 100644
--- a/code/modules/vehicles_legacy/skateboard.dm
+++ b/code/modules/vehicles_legacy/skateboard.dm
@@ -98,7 +98,7 @@
egg?.fracture()
H.adjustBrainLoss(rand(5, 10))
visible_message("[src] crashes into [A], sending [H] flying! They land on their head, that doesn't look good...")
- else
+ else
//Minor brain injury from hitting your head
H.adjustBrainLoss(rand(1, 2))
visible_message("[src] crashes into [A], sending [H] flying!")
@@ -116,7 +116,7 @@
egg?.fracture()
H.adjustBrainLoss(rand(5, 10))
visible_message("[src] crashes into [A], sending [H] flying! They land on their head, that doesn't look good...")
- else
+ else
H.adjustBrainLoss(rand(1, 2))
visible_message("[src] crashes into [A], sending [H] flying!")
H.update_health()
@@ -223,6 +223,7 @@
board_item_type = /obj/item/melee/skateboard/improv
icon_state = "skateboard"
board_icon = "skateboard"
+ worth_intrinsic = 75
/obj/vehicle_old/skateboard/beginner
name = "skateboard"
@@ -230,6 +231,7 @@
board_item_type = /obj/item/melee/skateboard/beginner
icon_state = "skateboard"
board_icon = "skateboard"
+ worth_intrinsic = 125
/obj/vehicle_old/skateboard/pro
name = "skateboard"
@@ -238,6 +240,7 @@
icon_state = "skateboard2"
board_icon = "skateboard2"
move_delay = 1
+ worth_intrinsic = 200
/*
/obj/vehicle_old/skateboard/pro/Bump(atom/A)
@@ -284,6 +287,7 @@
icon_state = "hoverboard_red"
board_icon = "hoverboard_red"
move_delay = 0
+ worth_intrinsic = 275
/obj/vehicle_old/skateboard/hoverboard/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/stack/rods))
diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm
index 718368872211..8124a1a7954c 100644
--- a/code/modules/virus2/items_devices.dm
+++ b/code/modules/virus2/items_devices.dm
@@ -41,6 +41,7 @@
name = "virus dish"
icon = 'icons/obj/items.dmi'
icon_state = "implantcase-b"
+ worth_intrinsic = 35
var/datum/disease2/disease/virus2 = null
var/growth = 0
var/basic_info = null
@@ -50,12 +51,20 @@
/obj/item/virusdish/random
name = "virus sample"
+ /// the worth of the contained random virus
+ var/worth_contained_virus = 250
+
/obj/item/virusdish/random/Initialize(mapload)
. = ..()
virus2 = new /datum/disease2/disease
virus2.makerandom()
growth = rand(5, 50)
+/obj/item/virusdish/random/get_containing_worth(flags)
+ . = ..()
+ if(flags & GET_WORTH_DETECTING_PRICE)
+ . += worth_contained_virus
+
/obj/item/virusdish/attackby(var/obj/item/W as obj,var/mob/living/carbon/user as mob)
if(istype(W,/obj/item/hand_labeler) || istype(W,/obj/item/reagent_containers/syringe))
return
diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm
index d1a07aa1704c..be7e5bce0a54 100644
--- a/code/modules/xenoarcheaology/sampling.dm
+++ b/code/modules/xenoarcheaology/sampling.dm
@@ -22,6 +22,7 @@
icon_state = "sampler0"
item_state = "screwdriver_brown"
w_class = WEIGHT_CLASS_TINY
+ worth_intrinsic = 50
var/sampled_turf = ""
var/num_stored_bags = 10
diff --git a/code/modules/xenoarcheaology/tools/equipment.dm b/code/modules/xenoarcheaology/tools/equipment.dm
index 327169c1b7d4..2c25abf64771 100644
--- a/code/modules/xenoarcheaology/tools/equipment.dm
+++ b/code/modules/xenoarcheaology/tools/equipment.dm
@@ -9,6 +9,7 @@
min_pressure_protection = 0.4 * ONE_ATMOSPHERE
encumbrance = ITEM_ENCUMBRANCE_ARMOR_ANOMALY
weight = ITEM_WEIGHT_ARMOR_ANOMALY
+ worth_intrinsic = 75
/obj/item/clothing/head/bio_hood/anomaly
name = "Anomaly hood"
@@ -20,6 +21,7 @@
min_pressure_protection = 0.4 * ONE_ATMOSPHERE
encumbrance = ITEM_ENCUMBRANCE_ARMOR_ANOMALY_HELMET
weight = ITEM_WEIGHT_ARMOR_ANOMALY_HELMET
+ worth_intrinsic = 375
/obj/item/clothing/suit/space/anomaly
name = "Excavation suit"
@@ -31,6 +33,7 @@
encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_ANOMALY
weight = ITEM_WEIGHT_VOIDSUIT_ANOMALY
// Pressure protection inherited from space suits
+ worth_intrinsic = 450
/obj/item/clothing/head/helmet/space/anomaly
name = "Excavation hood"
@@ -40,3 +43,4 @@
armor_type = /datum/armor/general/biosuit/anomaly
encumbrance = ITEM_ENCUMBRANCE_VOIDSUIT_ANOMALY_HELMET
weight = ITEM_WEIGHT_VOIDSUIT_ANOMALY_HELMET
+ worth_intrinsic = 100
diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm
index 4a3cd03e2233..d8743d7905a2 100644
--- a/code/modules/xenoarcheaology/tools/tools.dm
+++ b/code/modules/xenoarcheaology/tools/tools.dm
@@ -337,6 +337,7 @@
materials_base = list(MAT_STEEL = 10000, MAT_GLASS = 5000)
w_class = WEIGHT_CLASS_SMALL
slot_flags = SLOT_BELT
+ worth_intrinsic = 250
var/mode = 1 //Start off scanning. 1 = scanning, 0 = measuring
var/obj/item/ano_scanner/anomaly_scanner = null
var/obj/item/depth_scanner/depth_scanner = null
diff --git a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm
index 24bd6ac819dc..54bebf67dffc 100644
--- a/code/modules/xenoarcheaology/tools/tools_pickaxe.dm
+++ b/code/modules/xenoarcheaology/tools/tools_pickaxe.dm
@@ -150,6 +150,7 @@
damage_force = 5
w_class = 2
attack_verb = list("drilled")
+ worth_intrinsic = 250 // this is gonna be very useful/powerful later
/obj/item/pickaxe/excavationdrill/attack_self(mob/user)
. = ..()