mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
TGUI for Techfabs II: The Great Recategorizing (AND ICONS) (AND MECHFABS) (AND AUTOLATHES) (#69990)
I recategorized EVERY /datum/design/ IN THE GAME to be more UX friendly and I HATE MYSELF FOR IT
I refactored techfab UI to WORK ANYWHERE for ANY MACHINE THAT USES /datum/design as a SET OF MODULAR COMPONENTS
I moved a lot of DESIGNS EXCLUSIVE TO THE AUTOLATHE to also work IN PROTOLATHES
I made MATERIAL ICONS animate between ICON STATES for STACKS
I PUT ICONS IN ALL OF YOUR FABRICATORS
I SOMEHOW DID ALL OF THIS WITHOUT LOSING ANY PERFORMANCE
ALSO SUPPORTS COMPONENT PRINTERS AND MODULE DUPLICATORS
Other garbage:
Fixed numerous spelling and consistency issues in designs
Removed Machine Design (<x>) and Computer Design (<x>) from all relevant designs
All designs are now in title case
Numerous designs that were formerly autolathe exclusives can now also be printed at a protolathe (but not all); this is mostly just service equipment like drinking glasses and plates and silverware
Circuits components can no longer be printed at a circuit imprinter (fixes
Integrated circuit components printed in the component printer/module printer cost twice as much than from an un upgraded circuit printer #67758)
Designs that are not sensible for a department to have are no longer accessible to that department (read: medbay printing turbine parts)
Why It's Good For The Game
Improved UX for techfabs, but also for mechfabs and autolathes, and oh look it's pretty!
also I spent like eight hours doing nothing but categorizing /datum/designs and I'll cry if some version of this doesn't get merged eventually
Changelog
cl
refactor: mechfabs, autolathes, component printers, and module duplicators now use techfab tgui components
refactor: every single design is now categorized and subcategorized
refactor: mechfabs and autolathes are now in typescript
qol: techfabs now have icons for what you're about to print
qol: techfab material icons are now animated
qol: techfab material icons now fade when no materials are available
qol: techfab searching no longer lags like hell
qol: techfab searching now searches all recipes instead of just the current category
qol: techfabs now have subcategorization (stock part users rejoice)
qol: techfabs now announce when new recipes are available
qol: numerous other techfab ui tweaks
balance: some designs that were formerly autolathe exclusive can now be printed at some departmental techfabs
This commit is contained in:
@@ -34,18 +34,3 @@
|
||||
#define EXOSUIT_MODULE_COMBAT EXOSUIT_MODULE_GYGAX | EXOSUIT_MODULE_HONK | EXOSUIT_MODULE_DURAND | EXOSUIT_MODULE_PHAZON | EXOSUIT_MODULE_SAVANNAH | EXOSUIT_MODULE_CONCEALED_WEP_BAY
|
||||
/// Module is compatible with "Medical" Exosuit modelsm - Odysseus
|
||||
#define EXOSUIT_MODULE_MEDICAL EXOSUIT_MODULE_ODYSSEUS
|
||||
|
||||
/// Module is standard in use
|
||||
#define MODULE_GENERAL "General"
|
||||
/// Module is preferred for engineering uses
|
||||
#define MODULE_ENGINEERING "Engineering"
|
||||
/// Module is preferred for medical uses
|
||||
#define MODULE_MEDICAL "Medical"
|
||||
/// Module is preferred for science uses
|
||||
#define MODULE_SCIENCE "Science"
|
||||
/// Module is preferred for security uses
|
||||
#define MODULE_SECURITY "Security"
|
||||
/// Module is preferred for supply uses
|
||||
#define MODULE_SUPPLY "Supply"
|
||||
/// Module is preferred for service uses
|
||||
#define MODULE_SERVICE "Service"
|
||||
|
||||
@@ -1,87 +1,194 @@
|
||||
/**
|
||||
* Research Categories
|
||||
*/
|
||||
|
||||
// Research Designs
|
||||
#define RND_CATEGORY_TOOL_DESIGNS "Tool Designs"
|
||||
#define RND_CATEGORY_MEDICAL_DESIGNS "Medical Designs"
|
||||
#define RND_CATEGORY_BLUESPACE_DESIGNS "Bluespace Designs"
|
||||
#define RND_CATEGORY_POWER_DESIGNS "Power Designs"
|
||||
#define RND_CATEGORY_MINING_DESIGNS "Mining Designs"
|
||||
|
||||
// Weapon Categories
|
||||
#define RND_CATEGORY_FIRING_PINS "Firing Pins"
|
||||
#define RND_CATEGORY_WEAPONS "Weapons"
|
||||
#define RND_CATEGORY_AMMO "Ammo"
|
||||
#define RND_CATEGORY_WEAPONS "/Weaponry"
|
||||
#define RND_SUBCATEGORY_WEAPONS_FIRING_PINS "/Firing Pins"
|
||||
#define RND_SUBCATEGORY_WEAPONS_AMMO "/Ammunition"
|
||||
#define RND_SUBCATEGORY_WEAPONS_PARTS "/Weapon Parts"
|
||||
#define RND_SUBCATEGORY_WEAPONS_RANGED "/Ranged Weapons"
|
||||
#define RND_SUBCATEGORY_WEAPONS_MELEE "/Melee Weapons"
|
||||
#define RND_SUBCATEGORY_WEAPONS_KITS "/Weapon Fabrication Kits"
|
||||
|
||||
// Wiremod Categories
|
||||
#define RND_CATEGORY_CORE "Core"
|
||||
#define RND_CATEGORY_CIRCUITRY "Circuitry"
|
||||
#define RND_CATEGORY_COMPONENTS "Components"
|
||||
#define RND_CATEGORY_BCI_COMPONENTS "BCI Components"
|
||||
#define RND_CATEGORY_SHELLS "Shells"
|
||||
#define RND_CATEGORY_CIRCUITRY "/Circuitry"
|
||||
#define RND_CATEGORY_CIRCUITRY_CORE "/Core"
|
||||
#define RND_SUBCATEGORY_CIRCUITRY_COMPONENTS "/Circuit Components"
|
||||
#define RND_SUBCATEGORY_CIRCUITRY_BCI_COMPONENTS "/Circuit BCI Components"
|
||||
#define RND_SUBCATEGORY_CIRCUITRY_SHELLS "/Circuit Shells"
|
||||
|
||||
// Department Categories
|
||||
#define RND_CATEGORY_MEDICAL "Medical"
|
||||
#define RND_CATEGORY_SECURITY "Security"
|
||||
#define RND_CATEGORY_TELECOMMS "T-Comm"
|
||||
// Tool Categories
|
||||
#define RND_CATEGORY_TOOLS "/Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_MEDICAL "/Medical Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_MEDICAL_ADVANCED "/Medical Tools (Advanced)"
|
||||
#define RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN "/Medical Tools (Alien)"
|
||||
#define RND_SUBCATEGORY_TOOLS_ENGINEERING "/Engineering Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED "/Engineering Tools (Advanced)"
|
||||
#define RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN "/Engineering Tools (Alien)"
|
||||
#define RND_SUBCATEGORY_TOOLS_SERVICE "/Service Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_BOTANY "/Botany Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_BOTANY_ADVANCED "/Botany Tools (Advanced)"
|
||||
#define RND_SUBCATEGORY_TOOLS_JANITORIAL "/Janitorial Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_PLUMBING "/Plumbing Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_ATMOSPHERICS "/Atmospherics Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_MINING "/Mining Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_CARGO "/Cargo Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_PKA_MODS "/PKA Modkits"
|
||||
#define RND_SUBCATEGORY_TOOLS_SECURITY "/Security Tools"
|
||||
#define RND_SUBCATEGORY_TOOLS_MISC "/Miscellaneous Tools"
|
||||
|
||||
// Machinery Categories
|
||||
#define RND_CATEGORY_MACHINERY "Machinery"
|
||||
#define RND_CATEGORY_ENGINEERING_MACHINERY "Engineering Machinery"
|
||||
#define RND_CATEGORY_SUBSPACE_TELECOMMS "Subspace Telecomms"
|
||||
#define RND_CATEGORY_TELEPORTATION_MACHINERY "Teleportation Machinery"
|
||||
#define RND_CATEGORY_MISC_MACHINERY "Misc. Machinery"
|
||||
#define RND_CATEGORY_RESEARCH_MACHINERY "Research Machinery"
|
||||
#define RND_CATEGORY_MEDICAL_MACHINERY "Medical Machinery"
|
||||
#define RND_CATEGORY_HYDROPONICS_MACHINERY "Hydroponics Machinery"
|
||||
#define RND_CATEGORY_CONSTRUCTION "/Construction"
|
||||
#define RND_SUBCATEGORY_CONSTRUCTION_MOUNTS "/Frames & Mounts"
|
||||
#define RND_SUBCATEGORY_CONSTRUCTION_ELECTRONICS "/Electronics"
|
||||
#define RND_SUBCATEGORY_CONSTRUCTION_MACHINERY "/Machinery"
|
||||
#define RND_SUBCATEGORY_CONSTRUCTION_MATERIALS "/Materials & Alloys"
|
||||
#define RND_SUBCATEGORY_CONSTRUCTION_LIGHTING "/Lighting"
|
||||
#define RND_SUBCATEGORY_CONSTRUCTION_ASSEMBLIES "/Electrical Assemblies"
|
||||
|
||||
// Exosuit Fabricator Categories
|
||||
#define RND_CATEGORY_EXOSUIT_MODULES "Exosuit Modules"
|
||||
#define RND_CATEGORY_EXOSUIT_EQUIPMENT "Exosuit Equipment"
|
||||
#define RND_CATEGORY_EXOSUIT_AMMUNIATION "Exosuit Ammunition"
|
||||
#define RND_CATEGORY_CYBORG "Cyborg"
|
||||
#define RND_CATEGORY_RIPLEY "Ripley"
|
||||
#define RND_CATEGORY_ODYSSEUS "Odysseus"
|
||||
#define RND_CATEGORY_GYGAX "Gygax"
|
||||
#define RND_CATEGORY_DURAND "Durand"
|
||||
#define RND_CATEGORY_HONK "H.O.N.K"
|
||||
#define RND_CATEGORY_PHAZON "Phazon"
|
||||
#define RND_CATEGORY_SAVANNAH_IVANOV "Savannah-Ivanov"
|
||||
#define RND_CATEGORY_CLARKE "Clarke"
|
||||
#define RND_CATEGORY_CYBORG_UPGRADE_MODULES "Cyborg Upgrade Modules"
|
||||
#define RND_CATEGORY_CONTROL_INTERFACES "Control Interfaces"
|
||||
#define RND_CATEGORY_AI_MODULES "AI Modules"
|
||||
#define RND_CATEGORY_IMPLANTS "Implants"
|
||||
#define RND_CATEGORY_CYBERNETICS "Cybernetics"
|
||||
#define RND_CATEGORY_COMPUTER "/Computer Boards"
|
||||
#define RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT "/Service Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_MEDICAL "/Medical Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_ROBOTICS "/Robotics Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_GENETICS "/Genetics Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_RECORDS "/Records Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_COMMAND "/Command Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_SECURITY "/Security Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_RESEARCH "/Research Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_ENGINEERING "/Engineering & Atmospherics Consoles"
|
||||
#define RND_SUBCATEGORY_COMPUTER_CARGO "/Cargo Consoles"
|
||||
|
||||
#define RND_CATEGORY_MACHINE "/Machine Boards"
|
||||
#define RND_SUBCATEGORY_MACHINE_ATMOS "/Atmospherics Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_KITCHEN "/Kitchen Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_BAR "/Bar Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_BOTANY "/Botany Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_ENGINEERING "/Engineering Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_RESEARCH "/Research Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_MEDICAL "/Medical Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_CHEMISTRY "/Chemistry Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_SECURITY "/Security Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_CARGO "/Cargo Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_TELEPORT "/Teleportation Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_ROBOTICS "/Robotics Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_GENETICS "/Genetics Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_FAB "/Fabricators"
|
||||
#define RND_SUBCATEGORY_MACHINE_SERVICE "/Service Machines"
|
||||
#define RND_SUBCATEGORY_MACHINE_TELECOMMS "/Telecommunications Machines"
|
||||
|
||||
#define RND_CATEGORY_EQUIPMENT "/Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_SERVICE "/Service Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_JOKE "/Top-Secret Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY "/Chemistry Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_MEDICAL "/Medical Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_SECURITY "/Security Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_TELECOMMS "/Communications Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_BLUESPACE "/Bluespace Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_ENGINEERING "/Engineering Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_ATMOSPHERICS "/Atmospherics Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_SCIENCE "/Science Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS "/Gas Tanks"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_XENOBIOLOGY "/Xenobiology Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_GENETICS "/Genetics Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_JANITOR "/Janitorial Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_KITCHEN "/Bar & Kitchen Equipment"
|
||||
#define RND_SUBCATEGORY_EQUIPMENT_MISC "/Miscellaneous Equipment"
|
||||
|
||||
#define RND_CATEGORY_AI "/Artificial Intelligence"
|
||||
#define RND_SUBCATEGORY_AI_CORE "/AI Construction"
|
||||
#define RND_SUBCATEGORY_AI_LAW_MANIPULATION "/AI Law Manipulation"
|
||||
#define RND_SUBCATEGORY_AI_CORE_MODULES "/Core AI Modules"
|
||||
#define RND_SUBCATEGORY_AI_DANGEROUS_MODULES "/Dangerous AI Modules"
|
||||
|
||||
#define RND_CATEGORY_MODULAR_COMPUTERS "/Modular Computers"
|
||||
#define RND_SUBCATEGORY_MODULAR_COMPUTERS_FRAMES "/Frames"
|
||||
#define RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS "/Parts"
|
||||
|
||||
#define RND_CATEGORY_STOCK_PARTS "/Stock Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_MISC "/Miscellaneous Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_TURBINE "/Turbine Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS "/Telecommunications Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_1 "/Tier 1 Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_2 "/Tier 2 Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_3 "/Tier 3 Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_4 "/Tier 4 Parts"
|
||||
#define RND_SUBCATEGORY_STOCK_PARTS_EXCHANGERS "/Exchange Devices"
|
||||
|
||||
#define RND_CATEGORY_SYNDICATE "/Illegal Designs"
|
||||
|
||||
#define RND_CATEGORY_EXOSUIT_BOARDS "/Exosuit Boards"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_RIPLEY "/Ripley"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_ODYSSEUS "/Odysseus"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_GYGAX "/Gygax"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_DURAND "/Durand"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_HONK "/H.O.N.K."
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_PHAZON "/Phazon"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_CLARKE "/Clarke"
|
||||
#define RND_SUBCATEGORY_EXOSUIT_BOARDS_SAVANNAH_IVANOV "/Savannah-Ivanov"
|
||||
|
||||
#define RND_CATEGORY_MECHFAB_RIPLEY "/Ripley"
|
||||
#define RND_CATEGORY_MECHFAB_ODYSSEUS "/Odysseus"
|
||||
#define RND_CATEGORY_MECHFAB_GYGAX "/Gygax"
|
||||
#define RND_CATEGORY_MECHFAB_DURAND "/Durand"
|
||||
#define RND_CATEGORY_MECHFAB_HONK "/H.O.N.K."
|
||||
#define RND_CATEGORY_MECHFAB_PHAZON "/Phazon"
|
||||
#define RND_CATEGORY_MECHFAB_CLARKE "/Clarke"
|
||||
#define RND_CATEGORY_MECHFAB_SAVANNAH_IVANOV "/Savannah-Ivanov"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CHASSIS "/Chassis"
|
||||
#define RND_SUBCATEGORY_MECHFAB_SUPPORTED_EQUIPMENT "/Supported Equipment"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CONTROL_INTERFACES "/Control Interfaces"
|
||||
|
||||
#define RND_CATEGORY_MECHFAB_EQUIPMENT "/Exosuit Equipment"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING "/Mining Equipment"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS "/Weapons & Ammunition"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES "/Armor & Repair Modules"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC "/Miscellaneous"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL "/Medical"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_HONK "/Clown Designs"
|
||||
#define RND_SUBCATEGORY_MECHFAB_EQUIPMENT_CONTROL_INTERFACES "/Control Interfaces"
|
||||
|
||||
#define RND_CATEGORY_MECHFAB_CYBORG "/Cyborg"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_CHASSIS "/Cyborg Chassis"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_COMPONENTS "/Components"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_CELLS "/Power Cells"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_CONTROL_INTERFACES "/Control Interfaces"
|
||||
|
||||
#define RND_CATEGORY_MECHFAB_CYBORG_MODULES "/Cyborg Modules"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ALL "/All Cyborgs"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MEDICAL "/Medical Cyborgs"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_ENGINEERING "/Engineering Cyborgs"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR "/Janitorial Cyborgs"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_SECURITY "/Security Cyborgs"
|
||||
#define RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING "/Mining Cyborgs"
|
||||
|
||||
#define RND_CATEGORY_MODSUITS "/MOD Suits"
|
||||
#define RND_SUBCATEGORY_MODUITS_CHASSIS "/Chassis"
|
||||
#define RND_SUBCATEGORY_MODSUITS_PLATING "/Plating"
|
||||
#define RND_SUBCATEGORY_MODSUITS_MISC "/Misc"
|
||||
|
||||
#define RND_CATEGORY_MODSUIT_MODULES "/MOD Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_GENERAL "/General Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_ENGINEERING "/Engineering Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_MEDICAL "/Medical Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE "/Science Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_SECURITY "/Security Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_SUPPLY "/Supply Modules"
|
||||
#define RND_SUBCATEGORY_MODSUIT_MODULES_SERVICE "/Service Modules"
|
||||
|
||||
|
||||
#define RND_CATEGORY_CYBERNETICS "/Cybernetics"
|
||||
#define RND_SUBCATEGORY_CYBERNETICS_ORGANS "/Cybernetic Organs"
|
||||
#define RND_SUBCATEGORY_CYBERNETICS_IMPLANTS "/Cybernetic Implants"
|
||||
|
||||
#define RND_SUBCATEGORY_IMPLANTS "/Implants"
|
||||
|
||||
// Limb Categories
|
||||
#define RND_CATEGORY_DIGITIGRADE "digitigrade"
|
||||
#define RND_CATEGORY_OTHER "other"
|
||||
#define RND_CATEGORY_LIMBS_DIGITIGRADE "Digitigrade"
|
||||
#define RND_CATEGORY_LIMBS_OTHER "Other Limbs"
|
||||
|
||||
// Computer Categories
|
||||
#define RND_CATEGORY_COMPUTER_BOARDS "Computer Boards"
|
||||
#define RND_CATEGORY_COMPUTER_PARTS "Computer Parts"
|
||||
|
||||
// Hacked Categories
|
||||
#define RND_CATEGORY_HACKED "hacked"
|
||||
#define RND_CATEGORY_EMAGGED "emagged"
|
||||
|
||||
// MOD Categories
|
||||
#define RND_CATEGORY_MOD_CONSTRUCTION "MOD Construction"
|
||||
#define RND_CATEGORY_MOD_MODULES "MOD Modules"
|
||||
|
||||
/// Misc Categories
|
||||
/// Biogenerator Categories
|
||||
#define RND_CATEGORY_FOOD "Food"
|
||||
#define RND_CATEGORY_BOTANY_CHEMICALS "Botany Chemicals"
|
||||
#define RND_CATEGORY_ORGANIC_MATERIALS "Organic Materials"
|
||||
#define RND_CATEGORY_IMPORTED "Imported"
|
||||
|
||||
// Meta categories
|
||||
#define RND_CATEGORY_INITIAL "initial"
|
||||
#define RND_CATEGORY_TOOLS "Tools"
|
||||
#define RND_CATEGORY_EQUIPMENT "Equipment"
|
||||
#define RND_CATEGORY_ELECTRONICS "Electronics"
|
||||
#define RND_CATEGORY_MISC "Misc"
|
||||
#define RND_CATEGORY_MATERIAL "Material"
|
||||
#define RND_CATEGORY_STOCK_PARTS "Stock Parts"
|
||||
#define RND_CATEGORY_CONSTRUCTION "Construction"
|
||||
#define RND_CATEGORY_DINNERWARE "Dinnerware"
|
||||
#define RND_CATEGORY_HACKED "hacked"
|
||||
#define RND_CATEGORY_EMAGGED "emagged"
|
||||
#define RND_CATEGORY_IMPORTED "/Imported Designs"
|
||||
|
||||
@@ -444,6 +444,7 @@
|
||||
"amount" = amount,
|
||||
"sheets" = round(amount / MINERAL_MATERIAL_AMOUNT),
|
||||
"removable" = amount >= MINERAL_MATERIAL_AMOUNT,
|
||||
"color" = material.greyscale_colors
|
||||
))
|
||||
|
||||
return data
|
||||
|
||||
+162
-156
@@ -7,48 +7,24 @@
|
||||
circuit = /obj/item/circuitboard/machine/autolathe
|
||||
layer = BELOW_OBJ_LAYER
|
||||
|
||||
var/operating = FALSE
|
||||
var/list/L = list()
|
||||
var/list/LL = list()
|
||||
var/hacked = FALSE
|
||||
var/disabled = FALSE
|
||||
var/shocked = FALSE
|
||||
var/hack_wire
|
||||
var/disable_wire
|
||||
var/shock_wire
|
||||
|
||||
var/busy = FALSE
|
||||
|
||||
///the multiplier for how much materials the created object takes from this machines stored materials
|
||||
/// Coefficient applied to consumed materials. Lower values result in lower material consumption.
|
||||
var/creation_efficiency = 1.6
|
||||
|
||||
var/datum/design/being_built
|
||||
var/datum/techweb/stored_research
|
||||
var/list/datum/design/matching_designs
|
||||
var/selected_category = "None"
|
||||
var/base_price = 25
|
||||
var/hacked_price = 50
|
||||
|
||||
var/list/categories = list(
|
||||
RND_CATEGORY_TOOLS,
|
||||
RND_CATEGORY_EQUIPMENT,
|
||||
RND_CATEGORY_CONSTRUCTION,
|
||||
RND_CATEGORY_MATERIAL,
|
||||
RND_CATEGORY_TELECOMMS,
|
||||
RND_CATEGORY_SECURITY,
|
||||
RND_CATEGORY_MACHINERY,
|
||||
RND_CATEGORY_MEDICAL,
|
||||
RND_CATEGORY_MISC,
|
||||
RND_CATEGORY_DINNERWARE,
|
||||
RND_CATEGORY_IMPORTED
|
||||
)
|
||||
|
||||
/obj/machinery/autolathe/Initialize(mapload)
|
||||
AddComponent(/datum/component/material_container, SSmaterials.materials_by_category[MAT_CATEGORY_ITEM_MATERIAL], 0, MATCONTAINER_EXAMINE, _after_insert = CALLBACK(src, .proc/AfterMaterialInsert))
|
||||
|
||||
. = ..()
|
||||
|
||||
wires = new /datum/wires/autolathe(src)
|
||||
stored_research = new /datum/techweb/specialized/autounlocking/autolathe
|
||||
matching_designs = list()
|
||||
|
||||
/obj/machinery/autolathe/Destroy()
|
||||
QDEL_NULL(wires)
|
||||
@@ -59,171 +35,195 @@
|
||||
return
|
||||
|
||||
if(shocked && !(machine_stat & NOPOWER))
|
||||
shock(user,50)
|
||||
shock(user, 50)
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
|
||||
if(!ui)
|
||||
ui = new(user, src, "Autolathe")
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/autolathe/ui_data(mob/user)
|
||||
/obj/machinery/autolathe/ui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["materials"] = list()
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
data["materialtotal"] = materials.total_amount
|
||||
data["materialsmax"] = materials.max_amount
|
||||
data["categories"] = categories
|
||||
data["designs"] = list()
|
||||
data["active"] = busy
|
||||
|
||||
for(var/mat_id in materials.materials)
|
||||
var/datum/material/M = mat_id
|
||||
var/mineral_count = materials.materials[mat_id]
|
||||
var/list/material_data = list(
|
||||
name = M.name,
|
||||
mineral_amount = mineral_count,
|
||||
matcolour = M.greyscale_colors,
|
||||
)
|
||||
data["materials"] += list(material_data)
|
||||
if(selected_category != "None" && !length(matching_designs))
|
||||
data["designs"] = handle_designs(stored_research.researched_designs, TRUE)
|
||||
else
|
||||
data["designs"] = handle_designs(matching_designs, FALSE)
|
||||
data["designs"] = handle_designs(stored_research.researched_designs)
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/autolathe/proc/handle_designs(list/designs, categorycheck)
|
||||
/obj/machinery/autolathe/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
data["materials"] = list()
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
|
||||
data["materialtotal"] = materials.total_amount
|
||||
data["materialsmax"] = materials.max_amount
|
||||
data["active"] = busy
|
||||
data["materials"] = materials.ui_data()
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/autolathe/proc/handle_designs(list/designs)
|
||||
var/list/output = list()
|
||||
for(var/v in designs)
|
||||
var/datum/design/D = categorycheck ? SSresearch.techweb_design_by_id(v) : v
|
||||
if(categorycheck)
|
||||
if(!(selected_category in D.category))
|
||||
continue
|
||||
|
||||
var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
var/size32x32 = "[spritesheet.name]32x32"
|
||||
|
||||
for(var/design_id in designs)
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(design_id)
|
||||
|
||||
var/unbuildable = FALSE // we can't build the design currently
|
||||
var/m10 = FALSE // 10x mult
|
||||
var/m25 = FALSE // 25x mult
|
||||
var/m50 = FALSE // 50x mult
|
||||
var/m5 = FALSE // 5x mult
|
||||
var/sheets = FALSE // sheets or no?
|
||||
if(disabled || !can_build(D))
|
||||
|
||||
if(disabled || !can_build(design))
|
||||
unbuildable = TRUE
|
||||
|
||||
var/max_multiplier = unbuildable ? 0 : 1
|
||||
if(ispath(D.build_path, /obj/item/stack))
|
||||
|
||||
if(ispath(design.build_path, /obj/item/stack))
|
||||
sheets = TRUE
|
||||
|
||||
if(!unbuildable)
|
||||
var/datum/component/material_container/mats = GetComponent(/datum/component/material_container)
|
||||
for(var/datum/material/mat in D.materials)
|
||||
max_multiplier = min(D.maxstack, round(mats.get_material_amount(mat)/D.materials[mat]))
|
||||
|
||||
for(var/datum/material/mat in design.materials)
|
||||
max_multiplier = min(design.maxstack, round(mats.get_material_amount(mat) / design.materials[mat]))
|
||||
if (max_multiplier >= 10 && !disabled)
|
||||
m10 = TRUE
|
||||
if (max_multiplier >= 25 && !disabled)
|
||||
m25 = TRUE
|
||||
else
|
||||
if(!unbuildable)
|
||||
if(!disabled && can_build(D, 5))
|
||||
if(!disabled && can_build(design, 5))
|
||||
m5 = TRUE
|
||||
if(!disabled && can_build(D, 10))
|
||||
if(!disabled && can_build(design, 10))
|
||||
m10 = TRUE
|
||||
var/datum/component/material_container/mats = GetComponent(/datum/component/material_container)
|
||||
for(var/datum/material/mat in D.materials)
|
||||
max_multiplier = min(50, round(mats.get_material_amount(mat)/(D.materials[mat] * creation_efficiency)))
|
||||
|
||||
var/list/design = list(
|
||||
name = D.name,
|
||||
id = D.id,
|
||||
ref = REF(src),
|
||||
cost = get_design_cost(D),
|
||||
buildable = unbuildable,
|
||||
mult5 = m5,
|
||||
mult10 = m10,
|
||||
mult25 = m25,
|
||||
mult50 = m50,
|
||||
sheet = sheets,
|
||||
maxmult = max_multiplier,
|
||||
var/datum/component/material_container/mats = GetComponent(/datum/component/material_container)
|
||||
|
||||
for(var/datum/material/mat in design.materials)
|
||||
max_multiplier = min(50, round(mats.get_material_amount(mat) / (design.materials[mat] * creation_efficiency)))
|
||||
|
||||
var/icon_size = spritesheet.icon_size_id(design.id)
|
||||
|
||||
var/list/design_data = list(
|
||||
"name" = design.name,
|
||||
"desc" = design.get_description(),
|
||||
"cost" = get_design_cost(design),
|
||||
"id" = design.id,
|
||||
"categories" = design.category,
|
||||
"icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]",
|
||||
"constructionTime" = -1,
|
||||
|
||||
"buildable" = unbuildable,
|
||||
"mult5" = m5,
|
||||
"mult10" = m10,
|
||||
"mult25" = m25,
|
||||
"mult50" = m50,
|
||||
"sheet" = sheets,
|
||||
"maxmult" = max_multiplier,
|
||||
)
|
||||
output += list(design)
|
||||
|
||||
output += list(design_data)
|
||||
|
||||
return output
|
||||
|
||||
/obj/machinery/autolathe/ui_act(action, params)
|
||||
/obj/machinery/autolathe/ui_assets(mob/user)
|
||||
return list(
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
|
||||
get_asset_datum(/datum/asset/spritesheet/research_designs),
|
||||
)
|
||||
|
||||
/obj/machinery/autolathe/ui_act(action, list/params)
|
||||
. = ..()
|
||||
|
||||
if(.)
|
||||
return
|
||||
if(action == "menu")
|
||||
selected_category = null
|
||||
matching_designs.Cut()
|
||||
. = TRUE
|
||||
|
||||
if(action == "category")
|
||||
selected_category = params["selectedCategory"]
|
||||
matching_designs.Cut()
|
||||
. = TRUE
|
||||
|
||||
if(action == "search")
|
||||
matching_designs.Cut()
|
||||
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
if(findtext(D.name,params["to_search"]))
|
||||
matching_designs.Add(D)
|
||||
. = TRUE
|
||||
|
||||
if(action == "make")
|
||||
if (!busy)
|
||||
/////////////////
|
||||
//href protection
|
||||
being_built = stored_research.isDesignResearchedID(params["id"])
|
||||
if(!being_built)
|
||||
return
|
||||
var/design_id = params["id"]
|
||||
|
||||
var/multiplier = text2num(params["multiplier"])
|
||||
if(!multiplier || !IS_FINITE(multiplier))
|
||||
stack_trace("Invalid multiplier value in stack creation [multiplier], [usr] is likely attempting an exploit")
|
||||
return
|
||||
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
|
||||
multiplier = clamp(round(multiplier),1,50)
|
||||
if(!istext(design_id))
|
||||
return
|
||||
|
||||
/////////////////
|
||||
if(!stored_research.isDesignResearchedID(design_id))
|
||||
return
|
||||
|
||||
var/coeff = (is_stack ? 1 : creation_efficiency) //stacks are unaffected by production coefficient
|
||||
var/total_amount = 0
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(design_id)
|
||||
|
||||
for(var/MAT in being_built.materials)
|
||||
total_amount += being_built.materials[MAT]
|
||||
if(!(design.build_type & AUTOLATHE) || design.id != design_id)
|
||||
return
|
||||
|
||||
var/power = max(active_power_usage, (total_amount)*multiplier/5) //Change this to use all materials
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
|
||||
var/list/materials_used = list()
|
||||
var/list/custom_materials = list() //These will apply their material effect, This should usually only be one.
|
||||
|
||||
for(var/MAT in being_built.materials)
|
||||
var/datum/material/used_material = MAT
|
||||
var/amount_needed = being_built.materials[MAT] * coeff * multiplier
|
||||
if(istext(used_material)) //This means its a category
|
||||
var/list/list_to_show = list()
|
||||
for(var/i in SSmaterials.materials_by_category[used_material])
|
||||
if(materials.materials[i] > 0)
|
||||
list_to_show += i
|
||||
|
||||
used_material = tgui_input_list(usr, "Choose [used_material]", "Custom Material", sort_list(list_to_show, /proc/cmp_typepaths_asc))
|
||||
if(isnull(used_material))
|
||||
return //Didn't pick any material, so you can't build shit either.
|
||||
custom_materials[used_material] += amount_needed
|
||||
|
||||
materials_used[used_material] = amount_needed
|
||||
|
||||
if(materials.has_materials(materials_used))
|
||||
busy = TRUE
|
||||
to_chat(usr, span_notice("You print [multiplier] item(s) from the [src]"))
|
||||
use_power(power)
|
||||
icon_state = "autolathe_n"
|
||||
var/time = is_stack ? 32 : (32 * coeff * multiplier) ** 0.8
|
||||
addtimer(CALLBACK(src, .proc/make_item, power, materials_used, custom_materials, multiplier, coeff, is_stack, usr), time)
|
||||
. = TRUE
|
||||
else
|
||||
to_chat(usr, span_alert("Not enough materials for this operation."))
|
||||
else
|
||||
if (busy)
|
||||
to_chat(usr, span_alert("The autolathe is busy. Please wait for completion of previous operation."))
|
||||
|
||||
return
|
||||
|
||||
being_built = design
|
||||
|
||||
var/multiplier = round(text2num(params["multiplier"]))
|
||||
|
||||
if(!multiplier || !IS_FINITE(multiplier))
|
||||
return
|
||||
|
||||
var/is_stack = ispath(being_built.build_path, /obj/item/stack)
|
||||
multiplier = clamp(multiplier, 1, 50)
|
||||
|
||||
var/coeff = (is_stack ? 1 : creation_efficiency) // Stacks are unaffected by production coefficient
|
||||
var/total_amount = 0
|
||||
|
||||
for(var/material in being_built.materials)
|
||||
total_amount += being_built.materials[material]
|
||||
|
||||
var/power = max(active_power_usage, (total_amount)*multiplier/5) // Change this to use all materials
|
||||
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
|
||||
var/list/materials_used = list()
|
||||
var/list/custom_materials = list() // These will apply their material effect, should usually only be one.
|
||||
|
||||
for(var/mat in being_built.materials)
|
||||
var/datum/material/used_material = mat
|
||||
var/amount_needed = being_built.materials[mat] * coeff * multiplier
|
||||
|
||||
if(istext(used_material)) // This means its a category
|
||||
var/list/list_to_show = list()
|
||||
|
||||
for(var/i in SSmaterials.materials_by_category[used_material])
|
||||
if(materials.materials[i] > 0)
|
||||
list_to_show += i
|
||||
|
||||
used_material = tgui_input_list(
|
||||
usr,
|
||||
"Choose [used_material]",
|
||||
"Custom Material",
|
||||
sort_list(list_to_show, /proc/cmp_typepaths_asc)
|
||||
)
|
||||
|
||||
if(isnull(used_material))
|
||||
// Didn't pick any material, so you can't build shit either.
|
||||
return
|
||||
|
||||
custom_materials[used_material] += amount_needed
|
||||
|
||||
materials_used[used_material] = amount_needed
|
||||
|
||||
if(materials.has_materials(materials_used))
|
||||
busy = TRUE
|
||||
to_chat(usr, span_notice("You print [multiplier] item(s) from the [src]"))
|
||||
use_power(power)
|
||||
icon_state = "autolathe_n"
|
||||
var/time = is_stack ? 32 : (32 * coeff * multiplier) ** 0.8
|
||||
addtimer(CALLBACK(src, .proc/make_item, power, materials_used, custom_materials, multiplier, coeff, is_stack, usr), time)
|
||||
. = TRUE
|
||||
else
|
||||
to_chat(usr, span_alert("Not enough materials for this operation."))
|
||||
|
||||
/obj/machinery/autolathe/on_deconstruction()
|
||||
var/datum/component/material_container/materials = GetComponent(/datum/component/material_container)
|
||||
materials.retrieve_all()
|
||||
@@ -264,6 +264,7 @@
|
||||
if(not_imported)
|
||||
to_chat(user, span_warning("The following design[length(not_imported) > 1 ? "s" : ""] couldn't be imported: [english_list(not_imported)]"))
|
||||
busy = FALSE
|
||||
update_static_data_for_all_viewers()
|
||||
return TRUE
|
||||
|
||||
if(panel_open)
|
||||
@@ -369,16 +370,19 @@
|
||||
return materials.has_materials(required_materials)
|
||||
|
||||
|
||||
/obj/machinery/autolathe/proc/get_design_cost(datum/design/D)
|
||||
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : creation_efficiency)
|
||||
var/dat
|
||||
for(var/i in D.materials)
|
||||
if(istext(i)) //Category handling
|
||||
dat += "[D.materials[i] * coeff] [i]"
|
||||
/obj/machinery/autolathe/proc/get_design_cost(datum/design/design)
|
||||
var/coeff = (ispath(design.build_path, /obj/item/stack) ? 1 : creation_efficiency)
|
||||
var/list/cost = list()
|
||||
|
||||
for(var/material in design.materials)
|
||||
if (istext(material))
|
||||
// Wildcard materials
|
||||
cost[material] = design.materials[material] * coeff
|
||||
else
|
||||
var/datum/material/M = i
|
||||
dat += "[D.materials[i] * coeff] [M.name] "
|
||||
return dat
|
||||
var/datum/material/cast = material
|
||||
cost[cast.name] = design.materials[cast] * coeff
|
||||
|
||||
return cost
|
||||
|
||||
/obj/machinery/autolathe/proc/reset(wire)
|
||||
switch(wire)
|
||||
@@ -415,6 +419,8 @@
|
||||
else
|
||||
stored_research.remove_design(D)
|
||||
|
||||
update_static_data_for_all_viewers()
|
||||
|
||||
/obj/machinery/autolathe/hacked/Initialize(mapload)
|
||||
. = ..()
|
||||
adjust_hacked(TRUE)
|
||||
|
||||
@@ -28,8 +28,10 @@
|
||||
modkit_design = /datum/design/unique_modkit/bounty
|
||||
|
||||
/datum/design/unique_modkit
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS, RND_CATEGORY_CYBORG_UPGRADE_MODULES) //can't be normally obtained
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS,
|
||||
)
|
||||
build_type = PROTOLATHE
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/unique_modkit/offensive_turf_aoe
|
||||
|
||||
@@ -37,8 +37,8 @@ other types of metals and chemistry for reagents).
|
||||
var/build_path = null
|
||||
/// List of reagents produced by this design. Currently only supported by the biogenerator.
|
||||
var/list/make_reagents = list()
|
||||
/// What category this design falls under. Used for sorting in production machines, mostly the mechfab.
|
||||
var/list/category = null
|
||||
/// What categories this design falls under. Used for sorting in production machines.
|
||||
var/list/category = list()
|
||||
/// List of reagents required to create one unit of the product.
|
||||
var/list/reagents_list = list()
|
||||
/// The maximum number of units of whatever is produced by this can be produced in one go.
|
||||
|
||||
@@ -3,315 +3,385 @@
|
||||
///////////////////////////////////
|
||||
|
||||
/datum/design/board/aicore
|
||||
name = "AI Design (AI Core)"
|
||||
name = "AI Core Board"
|
||||
desc = "Allows for the construction of circuit boards used to build new AI cores."
|
||||
id = "aicore"
|
||||
build_path = /obj/item/circuitboard/aicore
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/safeguard_module
|
||||
name = "Module Design (Safeguard)"
|
||||
name = "Safeguard Module"
|
||||
desc = "Allows for the construction of a Safeguard AI Module."
|
||||
id = "safeguard_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/supplied/safeguard
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/onehuman_module
|
||||
name = "Module Design (OneHuman)"
|
||||
name = "OneHuman Module"
|
||||
desc = "Allows for the construction of a OneHuman AI Module."
|
||||
id = "onehuman_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 6000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/zeroth/onehuman
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/protectstation_module
|
||||
name = "Module Design (ProtectStation)"
|
||||
name = "ProtectStation Module"
|
||||
desc = "Allows for the construction of a ProtectStation AI Module."
|
||||
id = "protectstation_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/supplied/protect_station
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/quarantine_module
|
||||
name = "Module Design (Quarantine)"
|
||||
name = "Quarantine Module"
|
||||
desc = "Allows for the construction of a Quarantine AI Module."
|
||||
id = "quarantine_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/supplied/quarantine
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/oxygen_module
|
||||
name = "Module Design (OxygenIsToxicToHumans)"
|
||||
desc = "Allows for the construction of a Safeguard AI Module."
|
||||
name = "OxygenIsToxicToHumans Module"
|
||||
desc = "Allows for the construction of a OxygenIsToxicToHumans AI Module."
|
||||
id = "oxygen_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/supplied/oxygen
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/freeform_module
|
||||
name = "Module Design (Freeform)"
|
||||
name = "Freeform Module"
|
||||
desc = "Allows for the construction of a Freeform AI Module."
|
||||
id = "freeform_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 10000, /datum/material/bluespace = 2000)//Custom inputs should be more expensive to get
|
||||
build_path = /obj/item/ai_module/supplied/freeform
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_LAW_MANIPULATION
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/reset_module
|
||||
name = "Module Design (Reset)"
|
||||
name = "Reset Module"
|
||||
desc = "Allows for the construction of a Reset AI Module."
|
||||
id = "reset_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000)
|
||||
build_path = /obj/item/ai_module/reset
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_LAW_MANIPULATION
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/purge_module
|
||||
name = "Module Design (Purge)"
|
||||
name = "Purge Module"
|
||||
desc = "Allows for the construction of a Purge AI Module."
|
||||
id = "purge_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/reset/purge
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_LAW_MANIPULATION
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/remove_module
|
||||
name = "Module Design (Law Removal)"
|
||||
name = "Law Removal Module"
|
||||
desc = "Allows for the construction of a Law Removal AI Core Module."
|
||||
id = "remove_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/remove
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_LAW_MANIPULATION
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/freeformcore_module
|
||||
name = "AI Core Module (Freeform)"
|
||||
desc = "Allows for the construction of a Freeform AI Core Module."
|
||||
name = "Core Freeform Module"
|
||||
desc = "Allows for the construction of a Core Freeform AI Core Module."
|
||||
id = "freeformcore_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 10000, /datum/material/bluespace = 2000)//Ditto
|
||||
build_path = /obj/item/ai_module/core/freeformcore
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_LAW_MANIPULATION
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/asimov
|
||||
name = "Core Module Design (Asimov)"
|
||||
name = "Asimov Module"
|
||||
desc = "Allows for the construction of an Asimov AI Core Module."
|
||||
id = "asimov_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/asimov
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/paladin_module
|
||||
name = "Core Module Design (P.A.L.A.D.I.N.)"
|
||||
name = "P.A.L.A.D.I.N. Module"
|
||||
desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module."
|
||||
id = "paladin_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/paladin
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/tyrant_module
|
||||
name = "Core Module Design (T.Y.R.A.N.T.)"
|
||||
name = "T.Y.R.A.N.T. Module"
|
||||
desc = "Allows for the construction of a T.Y.R.A.N.T. AI Module."
|
||||
id = "tyrant_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/tyrant
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/overlord_module
|
||||
name = "Core Module Design (Overlord)"
|
||||
name = "Overlord Module"
|
||||
desc = "Allows for the construction of an Overlord AI Module."
|
||||
id = "overlord_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/overlord
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/corporate_module
|
||||
name = "Core Module Design (Corporate)"
|
||||
name = "Corporate Module"
|
||||
desc = "Allows for the construction of a Corporate AI Core Module."
|
||||
id = "corporate_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/corp
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/default_module
|
||||
name = "Core Module Design (Default)"
|
||||
name = "Default Module"
|
||||
desc = "Allows for the construction of a Default AI Core Module."
|
||||
id = "default_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/custom
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/dungeon_master_module
|
||||
name = "Core Module Design (Dungeon Master)"
|
||||
name = "Dungeon Master Module"
|
||||
desc = "Allows for the construction of a Dungeon Master AI Core Module."
|
||||
id = "dungeon_master_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/dungeon_master
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/painter_module
|
||||
name = "Core Module Design (Painter)"
|
||||
name = "Painter Module"
|
||||
desc = "Allows for the construction of a Painter AI Core Module."
|
||||
id = "painter_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/painter
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nutimov_module
|
||||
name = "Core Module Design (Nutimov)"
|
||||
name = "Nutimov Module"
|
||||
desc = "Allows for the construction of a Nutimov AI Core Module."
|
||||
id = "nutimov_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/nutimov
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/ten_commandments_module
|
||||
name = "Core Module Design (10 Commandments)"
|
||||
name = "10 Commandments Module"
|
||||
desc = "Allows for the construction of a 10 Commandments AI Core Module."
|
||||
id = "ten_commandments_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/ten_commandments
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/asimovpp_module
|
||||
name = "Core Module Design (Asimov++)"
|
||||
name = "Asimov++ Module"
|
||||
desc = "Allows for the construction of a Asimov++ AI Core Module."
|
||||
id = "asimovpp_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/asimovpp
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/hippocratic_module
|
||||
name = "Core Module Design (Hippocratic)"
|
||||
name = "Hippocratic Module"
|
||||
desc = "Allows for the construction of a Hippocratic AI Core Module."
|
||||
id = "hippocratic_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/hippocratic
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/paladin_devotion_module
|
||||
name = "Core Module Design (Paladin Devotion)"
|
||||
name = "Paladin Devotion Module"
|
||||
desc = "Allows for the construction of a Paladin Devotion AI Core Module."
|
||||
id = "paladin_devotion_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/paladin_devotion
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/robocop_module
|
||||
name = "Core Module Design (Robocop)"
|
||||
name = "Robocop Module"
|
||||
desc = "Allows for the construction of a Robocop AI Core Module."
|
||||
id = "robocop_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/robocop
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/maintain_module
|
||||
name = "Core Module Design (Maintain)"
|
||||
name = "Maintain Module"
|
||||
desc = "Allows for the construction of a Maintain AI Core Module."
|
||||
id = "maintain_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/maintain
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/liveandletlive_module
|
||||
name = "Core Module Design (Liveandletlive)"
|
||||
name = "Liveandletlive Module"
|
||||
desc = "Allows for the construction of a Liveandletlive AI Core Module."
|
||||
id = "liveandletlive_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/liveandletlive
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/peacekeeper_module
|
||||
name = "Core Module Design (Peacekeeper)"
|
||||
name = "Peacekeeper Module"
|
||||
desc = "Allows for the construction of a Peacekeeper AI Core Module."
|
||||
id = "peacekeeper_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/peacekeeper
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/reporter_module
|
||||
name = "Core Module Design (Reporter)"
|
||||
name = "Reporter Module"
|
||||
desc = "Allows for the construction of a Reporter AI Core Module."
|
||||
id = "reporter_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/reporter
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/hulkamania_module
|
||||
name = "Core Module Design (Hulkamania)"
|
||||
desc = "Allows for the construction of a Hulkamania AI Core Module."
|
||||
name = "H.O.G.A.N. Module"
|
||||
desc = "Allows for the construction of a H.O.G.A.N. AI Core Module."
|
||||
id = "hulkamania_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/hulkamania
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/drone_module
|
||||
name = "Core Module Design (Drone)"
|
||||
name = "Drone Module"
|
||||
desc = "Allows for the construction of a Drone AI Core Module."
|
||||
id = "drone_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/drone
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_CORE_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/antimov_module
|
||||
name = "Core Module Design (Antimov)"
|
||||
name = "Antimov Module"
|
||||
desc = "Allows for the construction of a Antimov AI Core Module."
|
||||
id = "antimov_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/antimov
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/balance_module
|
||||
name = "Core Module Design (Balance)"
|
||||
name = "Balance Module"
|
||||
desc = "Allows for the construction of a Balance AI Core Module."
|
||||
id = "balance_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/balance
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/thermurderdynamic_module
|
||||
name = "Core Module Design (Thermurderdynamic)"
|
||||
desc = "Allows for the construction of a Thermurderdynamic AI Core Module."
|
||||
name = "Thermodynamic Module"
|
||||
desc = "Allows for the construction of a Thermodynamic AI Core Module."
|
||||
id = "thermurderdynamic_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/thermurderdynamic
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/damaged
|
||||
name = "Core Module Design (Damaged)"
|
||||
name = "Damaged AI Module"
|
||||
desc = "Allows for the construction of a Damaged AI Core Module."
|
||||
id = "damaged_module"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/diamond = 2000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/ai_module/core/full/damaged
|
||||
category = list(RND_CATEGORY_AI_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_AI + RND_SUBCATEGORY_AI_DANGEROUS_MODULES
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,7 +10,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 150, /datum/material/glass = 100)
|
||||
build_path = /obj/item/beacon
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/bag_holding
|
||||
@@ -20,7 +22,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/gold = 3000, /datum/material/diamond = 1500, /datum/material/uranium = 250, /datum/material/bluespace = 2000)
|
||||
build_path = /obj/item/bag_of_holding_inert
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
dangerous_construction = TRUE
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -31,7 +35,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/diamond = 1500, /datum/material/plasma = 1500)
|
||||
build_path = /obj/item/stack/ore/bluespace_crystal/artificial
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/telesci_gps
|
||||
@@ -41,7 +47,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/gps
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -52,7 +60,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 500, /datum/material/silver = 1500, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/desynchronizer
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/miningsatchel_holding
|
||||
@@ -62,7 +72,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/gold = 250, /datum/material/uranium = 500) //quite cheap, for more convenience
|
||||
build_path = /obj/item/storage/bag/ore/holding
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/swapper
|
||||
@@ -72,5 +84,7 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 1000, /datum/material/bluespace = 2000, /datum/material/gold = 1500, /datum/material/silver = 1000)
|
||||
build_path = /obj/item/swapper
|
||||
category = list(RND_CATEGORY_BLUESPACE_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_BLUESPACE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -1,317 +1,387 @@
|
||||
///////////////////Computer Boards///////////////////////////////////
|
||||
|
||||
/datum/design/board
|
||||
name = "Computer Design ( NULL ENTRY )"
|
||||
name = "NULL ENTRY Board"
|
||||
desc = "I promise this doesn't give you syndicate goodies!"
|
||||
build_type = IMPRINTER | AWAY_IMPRINTER
|
||||
materials = list(/datum/material/glass = 1000)
|
||||
|
||||
/datum/design/board/arcade_battle
|
||||
name = "Computer Design (Battle Arcade Machine)"
|
||||
name = "Battle Arcade Machine Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
|
||||
id = "arcade_battle"
|
||||
build_path = /obj/item/circuitboard/computer/arcade/battle
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/board/orion_trail
|
||||
name = "Computer Design (Orion Trail Arcade Machine)"
|
||||
name = "Orion Trail Arcade Machine Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
|
||||
id = "arcade_orion"
|
||||
build_path = /obj/item/circuitboard/computer/arcade/orion_trail
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/board/seccamera
|
||||
name = "Computer Design (Security Camera)"
|
||||
name = "Security Camera Board"
|
||||
desc = "Allows for the construction of circuit boards used to build security camera computers."
|
||||
id = "seccamera"
|
||||
build_path = /obj/item/circuitboard/computer/security
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/board/rdcamera
|
||||
name = "Computer Design (Research Monitor)"
|
||||
name = "Research Monitor Board"
|
||||
desc = "Allows for the construction of circuit boards used to build research camera computers."
|
||||
id = "rdcamera"
|
||||
build_path = /obj/item/circuitboard/computer/research
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/xenobiocamera
|
||||
name = "Computer Design (Xenobiology Console)"
|
||||
name = "Xenobiology Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build xenobiology camera computers."
|
||||
id = "xenobioconsole"
|
||||
build_path = /obj/item/circuitboard/computer/xenobiology
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/aiupload
|
||||
name = "Computer Design (AI Upload)"
|
||||
name = "AI Upload Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
|
||||
id = "aiupload"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000, /datum/material/diamond = 2000, /datum/material/bluespace = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/aiupload
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/borgupload
|
||||
name = "Computer Design (Cyborg Upload)"
|
||||
name = "Cyborg Upload Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
|
||||
id = "borgupload"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 2000, /datum/material/diamond = 2000, /datum/material/bluespace = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/borgupload
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/med_data
|
||||
name = "Computer Design (Medical Records)"
|
||||
name = "Medical Records Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a medical records console."
|
||||
id = "med_data"
|
||||
build_path = /obj/item/circuitboard/computer/med_data
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/board/operating
|
||||
name = "Computer Design (Operating Computer)"
|
||||
name = "Operating Computer Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an operating computer console."
|
||||
id = "operating"
|
||||
build_path = /obj/item/circuitboard/computer/operating
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/pandemic
|
||||
name = "Computer Design (PanD.E.M.I.C. 2200)"
|
||||
name = "PanD.E.M.I.C. 2200 Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console."
|
||||
id = "pandemic"
|
||||
build_path = /obj/item/circuitboard/computer/pandemic
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/board/scan_console
|
||||
name = "Computer Design (DNA Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new DNA console."
|
||||
id = "scan_console"
|
||||
build_path = /obj/item/circuitboard/computer/scan_consolenew
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/comconsole
|
||||
name = "Computer Design (Communications)"
|
||||
name = "Communications Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a communications console."
|
||||
id = "comconsole"
|
||||
build_path = /obj/item/circuitboard/computer/communications
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_COMMAND
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY //Honestly should have a bridge techfab for this sometime.
|
||||
|
||||
/datum/design/board/crewconsole
|
||||
name = "Computer Design (Crew monitoring computer)"
|
||||
name = "Crew Monitoring Computer Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
|
||||
id = "crewconsole"
|
||||
build_type = IMPRINTER
|
||||
build_path = /obj/item/circuitboard/computer/crew
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/board/secdata
|
||||
name = "Computer Design (Security Records Console)"
|
||||
name = "Security Records Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a security records console."
|
||||
id = "secdata"
|
||||
build_path = /obj/item/circuitboard/computer/secure_data
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/board/atmosalerts
|
||||
name = "Computer Design (Atmosphere Alert)"
|
||||
name = "Atmosphere Alert Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an atmosphere alert console."
|
||||
id = "atmosalerts"
|
||||
build_path = /obj/item/circuitboard/computer/atmos_alert
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/atmos_control
|
||||
name = "Computer Design (Atmospheric Monitor)"
|
||||
name = "Atmospheric Monitor Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
|
||||
id = "atmos_control"
|
||||
build_path = /obj/item/circuitboard/computer/atmos_control
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/robocontrol
|
||||
name = "Computer Design (Robotics Control Console)"
|
||||
name = "Robotics Control Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
|
||||
id = "robocontrol"
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000, /datum/material/bluespace = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/robotics
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/slot_machine
|
||||
name = "Computer Design (Slot Machine)"
|
||||
name = "Slot Machine Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new slot machine."
|
||||
id = "slotmachine"
|
||||
build_path = /obj/item/circuitboard/computer/slot_machine
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
|
||||
/datum/design/board/powermonitor
|
||||
name = "Computer Design (Power Monitor)"
|
||||
name = "Power Monitor Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new power monitor."
|
||||
id = "powermonitor"
|
||||
build_path = /obj/item/circuitboard/computer/powermonitor
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/solarcontrol
|
||||
name = "Computer Design (Solar Control)"
|
||||
name = "Solar Control Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a solar control console."
|
||||
id = "solarcontrol"
|
||||
build_path = /obj/item/circuitboard/computer/solar_control
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/prisonmanage
|
||||
name = "Computer Design (Prisoner Management Console)"
|
||||
name = "Prisoner Management Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a prisoner management console."
|
||||
id = "prisonmanage"
|
||||
build_path = /obj/item/circuitboard/computer/prisoner
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/board/mechacontrol
|
||||
name = "Computer Design (Exosuit Control Console)"
|
||||
name = "Exosuit Control Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an exosuit control console."
|
||||
id = "mechacontrol"
|
||||
build_path = /obj/item/circuitboard/computer/mecha_control
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mechapower
|
||||
name = "Computer Design (Mech Bay Power Control Console)"
|
||||
name = "Mech Bay Power Control Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a mech bay power control console."
|
||||
id = "mechapower"
|
||||
build_path = /obj/item/circuitboard/computer/mech_bay_power_console
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdconsole
|
||||
name = "Computer Design (R&D Console)"
|
||||
name = "R&D Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new R&D console."
|
||||
id = "rdconsole"
|
||||
build_path = /obj/item/circuitboard/computer/rdconsole
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/cargo
|
||||
name = "Computer Design (Supply Console)"
|
||||
name = "Supply Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a Supply Console."
|
||||
id = "cargo"
|
||||
build_type = IMPRINTER
|
||||
build_path = /obj/item/circuitboard/computer/cargo
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/board/cargorequest
|
||||
name = "Computer Design (Supply Request Console)"
|
||||
name = "Supply Request Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a Supply Request Console."
|
||||
id = "cargorequest"
|
||||
build_type = IMPRINTER
|
||||
build_path = /obj/item/circuitboard/computer/cargo/request
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/board/mining
|
||||
name = "Computer Design (Outpost Status Display)"
|
||||
name = "Outpost Status Display Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
|
||||
id = "mining"
|
||||
build_path = /obj/item/circuitboard/computer/mining
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/board/comm_monitor
|
||||
name = "Computer Design (Telecommunications Monitoring Console)"
|
||||
name = "Telecommunications Monitoring Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a telecommunications monitor."
|
||||
id = "comm_monitor"
|
||||
build_path = /obj/item/circuitboard/computer/comm_monitor
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/comm_server
|
||||
name = "Computer Design (Telecommunications Server Monitoring Console)"
|
||||
name = "Telecommunications Server Monitoring Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor."
|
||||
id = "comm_server"
|
||||
build_path = /obj/item/circuitboard/computer/comm_server
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/message_monitor
|
||||
name = "Computer Design (Messaging Monitor Console)"
|
||||
name = "Messaging Monitor Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
|
||||
id = "message_monitor"
|
||||
build_path = /obj/item/circuitboard/computer/message_monitor
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/aifixer
|
||||
name = "Computer Design (AI Integrity Restorer)"
|
||||
name = "AI Integrity Restorer Board"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
|
||||
id = "aifixer"
|
||||
build_path = /obj/item/circuitboard/computer/aifixer
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ROBOTICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/libraryconsole
|
||||
name = "Computer Design (Library Console)"
|
||||
name = "Library Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new library console."
|
||||
id = "libraryconsole"
|
||||
build_path = /obj/item/circuitboard/computer/libraryconsole
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/board/apc_control
|
||||
name = "Computer Design (APC Control)"
|
||||
name = "APC Control Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new APC control console."
|
||||
id = "apc_control"
|
||||
build_path = /obj/item/circuitboard/computer/apc_control
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/advanced_camera
|
||||
name = "Computer Design (Advanced Camera Console)"
|
||||
name = "Advanced Camera Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build advanced camera consoles."
|
||||
id = "advanced_camera"
|
||||
build_path = /obj/item/circuitboard/computer/advanced_camera
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/board/bountypad_control
|
||||
name = "Computer Design (Civilian Bounty Pad Control)"
|
||||
name = "Civilian Bounty Pad Control Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new civilian bounty pad console."
|
||||
id = "bounty_pad_control"
|
||||
build_path = /obj/item/circuitboard/computer/bountypad
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/board/exoscanner_console
|
||||
name = "Computer Design (Scanner Array Control Console)"
|
||||
name = "Scanner Array Control Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new scanner array control console."
|
||||
id = "exoscanner_console"
|
||||
build_type = IMPRINTER
|
||||
build_path = /obj/item/circuitboard/computer/exoscanner_console
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/exodrone_console
|
||||
name = "Computer Design (Exploration Drone Control Console)"
|
||||
name = "Exploration Drone Control Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to build a new exploration drone control console."
|
||||
id = "exodrone_console"
|
||||
build_type = IMPRINTER
|
||||
build_path = /obj/item/circuitboard/computer/exodrone_console
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_RESEARCH
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/accounting_console
|
||||
name = "Computer Design (Account Lookup Console)"
|
||||
name = "Account Lookup Console Board"
|
||||
desc = "Allows for the construction of circuit boards used to assess the wealth of crewmates on station."
|
||||
id = "account_console"
|
||||
build_type = IMPRINTER
|
||||
build_path = /obj/item/circuitboard/computer/accounting
|
||||
category = list(RND_CATEGORY_COMPUTER_BOARDS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
@@ -8,7 +8,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 400, /datum/material/glass = 100)
|
||||
build_path = /obj/item/computer_hardware/hard_drive
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/disk/advanced
|
||||
@@ -17,7 +19,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 800, /datum/material/glass = 200)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/advanced
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/disk/super
|
||||
@@ -26,7 +30,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1600, /datum/material/glass = 400)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/super
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/disk/cluster
|
||||
@@ -35,7 +41,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3200, /datum/material/glass = 800)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/cluster
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/disk/small
|
||||
@@ -44,7 +52,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 800, /datum/material/glass = 200)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/small
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/disk/micro
|
||||
@@ -53,7 +63,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 400, /datum/material/glass = 100)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/micro
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
// Data disks
|
||||
@@ -63,7 +75,9 @@
|
||||
build_type = IMPRINTER | AWAY_IMPRINTER
|
||||
materials = list(/datum/material/glass = 800)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/portable
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/portabledrive/advanced
|
||||
@@ -72,7 +86,9 @@
|
||||
build_type = IMPRINTER | AWAY_IMPRINTER
|
||||
materials = list(/datum/material/glass = 1600)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/portable/advanced
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/portabledrive/super
|
||||
@@ -81,7 +97,9 @@
|
||||
build_type = IMPRINTER | AWAY_IMPRINTER
|
||||
materials = list(/datum/material/glass = 3200)
|
||||
build_path = /obj/item/computer_hardware/hard_drive/portable/super
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
// Card slot
|
||||
@@ -91,7 +109,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600)
|
||||
build_path = /obj/item/computer_hardware/card_slot
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
// Batteries
|
||||
@@ -101,7 +121,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 400)
|
||||
build_path = /obj/item/computer_hardware/battery
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/battery/normal
|
||||
@@ -110,7 +132,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 400)
|
||||
build_path = /obj/item/stock_parts/cell/computer
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/battery/advanced
|
||||
@@ -119,7 +143,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 800)
|
||||
build_path = /obj/item/stock_parts/cell/computer/advanced
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/battery/super
|
||||
@@ -128,7 +154,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1600)
|
||||
build_path = /obj/item/stock_parts/cell/computer/super
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/battery/nano
|
||||
@@ -137,7 +165,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200)
|
||||
build_path = /obj/item/stock_parts/cell/computer/nano
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/battery/micro
|
||||
@@ -146,5 +176,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 400)
|
||||
build_path = /obj/item/stock_parts/cell/computer/micro
|
||||
category = list(RND_CATEGORY_COMPUTER_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_MODULAR_COMPUTERS + RND_SUBCATEGORY_MODULAR_COMPUTERS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/gold = 200)
|
||||
build_path = /obj/item/aicard
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
category = list(RND_CATEGORY_AI)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/paicard
|
||||
@@ -20,8 +20,8 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 500, /datum/material/iron = 500)
|
||||
build_path = /obj/item/pai_card
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
|
||||
category = list(RND_CATEGORY_AI)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/ai_cam_upgrade
|
||||
name = "AI Surveillance Software Update"
|
||||
@@ -30,7 +30,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 5000, /datum/material/gold = 15000, /datum/material/silver = 15000, /datum/material/diamond = 20000, /datum/material/plasma = 10000)
|
||||
build_path = /obj/item/surveillance_upgrade
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
category = list(RND_CATEGORY_AI)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
////////////////////////////////////////
|
||||
@@ -43,7 +43,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 300, /datum/material/glass = 100)
|
||||
build_path = /obj/item/disk/design_disk
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/design_disk_adv
|
||||
@@ -53,7 +55,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 300, /datum/material/glass = 100, /datum/material/silver=50)
|
||||
build_path = /obj/item/disk/design_disk/adv
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/tech_disk
|
||||
@@ -63,5 +67,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 300, /datum/material/glass = 100)
|
||||
build_path = /obj/item/disk/tech_disk
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -5,5 +5,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 500, /datum/material/iron = 500)
|
||||
build_path = /obj/item/experi_scanner
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25)
|
||||
build_path = /obj/item/bodypart/l_leg
|
||||
category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_DIGITIGRADE)
|
||||
category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_LIMBS_DIGITIGRADE)
|
||||
|
||||
/datum/design/rightleg
|
||||
name = "Right Leg"
|
||||
@@ -32,7 +32,7 @@
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 25)
|
||||
build_path = /obj/item/bodypart/r_leg
|
||||
category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_DIGITIGRADE)
|
||||
category = list(RND_CATEGORY_INITIAL, SPECIES_HUMAN, SPECIES_LIZARD, SPECIES_MOTH, SPECIES_PLASMAMAN, SPECIES_ETHEREAL, RND_CATEGORY_LIMBS_DIGITIGRADE)
|
||||
|
||||
//Non-limb limb designs
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 20)
|
||||
build_path = /obj/item/organ/external/tail/monkey
|
||||
category = list(RND_CATEGORY_OTHER, RND_CATEGORY_INITIAL)
|
||||
category = list(RND_CATEGORY_LIMBS_OTHER, RND_CATEGORY_INITIAL)
|
||||
|
||||
/datum/design/cat_tail
|
||||
name = "Cat Tail"
|
||||
@@ -212,7 +212,7 @@
|
||||
build_type = LIMBGROWER
|
||||
reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 75)
|
||||
build_path = /obj/item/melee/synthetic_arm_blade
|
||||
category = list(RND_CATEGORY_OTHER, RND_CATEGORY_EMAGGED)
|
||||
category = list(RND_CATEGORY_LIMBS_OTHER, RND_CATEGORY_EMAGGED)
|
||||
|
||||
/// Design disks and designs - for adding limbs and organs to the limbgrower.
|
||||
/obj/item/disk/design_disk/limbs
|
||||
@@ -236,7 +236,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 300, /datum/material/glass = 100)
|
||||
build_path = /obj/item/disk/design_disk/limbs
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/obj/item/disk/design_disk/limbs/felinid
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,29 +8,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 50)
|
||||
build_path = /obj/item/healthanalyzer
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/mmi
|
||||
name = "Man-Machine Interface"
|
||||
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity."
|
||||
id = "mmi"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 500)
|
||||
construction_time = 75
|
||||
build_path = /obj/item/mmi
|
||||
category = list(RND_CATEGORY_CONTROL_INTERFACES, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/posibrain
|
||||
name = "Positronic Brain"
|
||||
desc = "The latest in Artificial Intelligences."
|
||||
id = "mmi_posi"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
materials = list(/datum/material/iron = 1700, /datum/material/glass = 1350, /datum/material/gold = 500) //Gold, because SWAG.
|
||||
construction_time = 75
|
||||
build_path = /obj/item/mmi/posibrain
|
||||
category = list(RND_CATEGORY_CONTROL_INTERFACES, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/bluespacebeaker
|
||||
@@ -39,7 +19,9 @@
|
||||
id = "bluespacebeaker"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 5000, /datum/material/plastic = 3000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/cup/beaker/bluespace
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -49,36 +31,44 @@
|
||||
id = "splitbeaker"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/cup/beaker/noreact
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/xlarge_beaker
|
||||
name = "X-large Beaker"
|
||||
id = "xlarge_beaker"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/glass = 2500, /datum/material/plastic = 3000)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/cup/beaker/plastic
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/meta_beaker
|
||||
name = "Metamaterial Beaker"
|
||||
id = "meta_beaker"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/glass = 2500, /datum/material/plastic = 3000, /datum/material/gold = 1000, /datum/material/titanium = 1000)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/cup/beaker/meta
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/ph_meter
|
||||
name = "Chemical Analyzer"
|
||||
id = "ph_meter"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/glass = 2500, /datum/material/gold = 1000, /datum/material/titanium = 1000)
|
||||
build_path = /obj/item/ph_meter
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/bluespacesyringe
|
||||
name = "Bluespace Syringe"
|
||||
@@ -87,7 +77,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/plasma = 1000, /datum/material/diamond = 1000, /datum/material/bluespace = 500)
|
||||
build_path = /obj/item/reagent_containers/syringe/bluespace
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/dna_disk
|
||||
@@ -97,8 +89,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 300, /datum/material/glass = 100, /datum/material/silver = 50)
|
||||
build_path = /obj/item/disk/data
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GENETICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/piercesyringe
|
||||
name = "Piercing Syringe"
|
||||
@@ -107,8 +101,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/diamond = 1000)
|
||||
build_path = /obj/item/reagent_containers/syringe/piercing
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/bluespacebodybag
|
||||
name = "Bluespace Body Bag"
|
||||
@@ -117,18 +113,22 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/plasma = 2000, /datum/material/diamond = 500, /datum/material/bluespace = 500)
|
||||
build_path = /obj/item/bodybag/bluespace
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_TOOLS_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/plasmarefiller
|
||||
name = "Plasma-Man Jumpsuit Refill"
|
||||
name = "Plasmaman Jumpsuit Refill"
|
||||
desc = "A refill pack for the auto-extinguisher on Plasma-man suits."
|
||||
id = "plasmarefiller" //Why did this have no plasmatech
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/plasma = 1000)
|
||||
build_path = /obj/item/extinguisher_refill
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS
|
||||
)
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design/crewpinpointer
|
||||
name = "Crew Pinpointer"
|
||||
@@ -137,7 +137,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 1500, /datum/material/gold = 500)
|
||||
build_path = /obj/item/pinpointer/crew
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/defibrillator
|
||||
@@ -147,7 +149,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
build_path = /obj/item/defibrillator
|
||||
materials = list(/datum/material/iron = 8000, /datum/material/glass = 4000, /datum/material/silver = 3000, /datum/material/gold = 1500)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/defibrillator_mount
|
||||
@@ -157,7 +161,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/wallframe/defib_mount
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/defibrillator_mount_charging
|
||||
@@ -167,10 +173,11 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000, /datum/material/silver = 500)
|
||||
build_path = /obj/item/wallframe/defib_mount/charging
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MOUNTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
|
||||
/datum/design/defibrillator_compact
|
||||
name = "Compact Defibrillator"
|
||||
desc = "A compact defibrillator that can be worn on a belt."
|
||||
@@ -178,7 +185,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
build_path = /obj/item/defibrillator/compact
|
||||
materials = list(/datum/material/iron = 16000, /datum/material/glass = 8000, /datum/material/silver = 6000, /datum/material/gold = 3000)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/genescanner
|
||||
@@ -188,8 +197,10 @@
|
||||
build_path = /obj/item/sequence_scanner
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 500)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GENETICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/healthanalyzer_advanced
|
||||
name = "Advanced Health Analyzer"
|
||||
@@ -198,7 +209,9 @@
|
||||
build_path = /obj/item/healthanalyzer/advanced
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 2000, /datum/material/gold = 1500)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/medigel
|
||||
@@ -208,7 +221,9 @@
|
||||
build_path = /obj/item/reagent_containers/medigel
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2500, /datum/material/glass = 500)
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/surgical_drapes
|
||||
@@ -217,7 +232,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 2000)
|
||||
build_path = /obj/item/surgical_drapes
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/laserscalpel
|
||||
@@ -227,8 +244,10 @@
|
||||
build_path = /obj/item/scalpel/advanced
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 1500, /datum/material/silver = 2000, /datum/material/gold = 1500, /datum/material/diamond = 200, /datum/material/titanium = 4000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/mechanicalpinches
|
||||
name = "Mechanical Pinches"
|
||||
@@ -237,8 +256,10 @@
|
||||
build_path = /obj/item/retractor/advanced
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 12000, /datum/material/glass = 4000, /datum/material/silver = 4000, /datum/material/titanium = 5000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/searingtool
|
||||
name = "Searing Tool"
|
||||
@@ -247,18 +268,22 @@
|
||||
build_path = /obj/item/cautery/advanced
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/glass = 2000, /datum/material/plasma = 2000, /datum/material/uranium = 3000, /datum/material/titanium = 3000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/medical_spray_bottle
|
||||
name = "Medical Spray Bottle"
|
||||
desc = "A traditional spray bottle used to generate a fine mist. Not to be confused with a medspray."
|
||||
id = "med_spray_bottle"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/plastic = 2000)
|
||||
build_path = /obj/item/reagent_containers/spray/medical
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/chem_pack
|
||||
name = "Intravenous Medicine Bag"
|
||||
@@ -268,7 +293,10 @@
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/plastic = 2000)
|
||||
build_path = /obj/item/reagent_containers/chem_pack
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/blood_pack
|
||||
name = "Blood Pack"
|
||||
@@ -278,7 +306,10 @@
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/plastic = 1000)
|
||||
build_path = /obj/item/reagent_containers/blood
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/portable_chem_mixer
|
||||
name = "Portable Chemical Mixer"
|
||||
@@ -288,7 +319,10 @@
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
materials = list(/datum/material/plastic = 5000, /datum/material/iron = 10000, /datum/material/glass = 3000)
|
||||
build_path = /obj/item/storage/portable_chem_mixer
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Cybernetic Implants////////////
|
||||
@@ -302,7 +336,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 400)
|
||||
build_path = /obj/item/organ/internal/eyes/robotic/shield
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_gloweyes
|
||||
@@ -313,7 +349,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/organ/internal/eyes/robotic/glow
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_breather
|
||||
@@ -324,7 +362,9 @@
|
||||
construction_time = 35
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 250)
|
||||
build_path = /obj/item/organ/internal/cyberimp/mouth/breathing_tube
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_surgical
|
||||
@@ -335,7 +375,9 @@
|
||||
materials = list (/datum/material/iron = 2500, /datum/material/glass = 1500, /datum/material/silver = 1500)
|
||||
construction_time = 200
|
||||
build_path = /obj/item/organ/internal/cyberimp/arm/surgery
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_toolset
|
||||
@@ -346,7 +388,9 @@
|
||||
materials = list (/datum/material/iron = 2500, /datum/material/glass = 1500, /datum/material/silver = 1500)
|
||||
construction_time = 200
|
||||
build_path = /obj/item/organ/internal/cyberimp/arm/toolset
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_medical_hud
|
||||
@@ -357,7 +401,9 @@
|
||||
construction_time = 50
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 500, /datum/material/gold = 500)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/hud/medical
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_security_hud
|
||||
@@ -368,7 +414,9 @@
|
||||
construction_time = 50
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 750, /datum/material/gold = 750)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/hud/security
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_diagnostic_hud
|
||||
@@ -379,7 +427,9 @@
|
||||
construction_time = 50
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600)
|
||||
build_path = /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_xray
|
||||
@@ -390,7 +440,9 @@
|
||||
construction_time = 60
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600, /datum/material/plasma = 1000, /datum/material/uranium = 1000, /datum/material/diamond = 1000, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/organ/internal/eyes/robotic/xray
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_thermals
|
||||
@@ -401,7 +453,9 @@
|
||||
construction_time = 60
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 600, /datum/material/gold = 600, /datum/material/plasma = 1000, /datum/material/diamond = 2000)
|
||||
build_path = /obj/item/organ/internal/eyes/robotic/thermals
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_antidrop
|
||||
@@ -412,7 +466,9 @@
|
||||
construction_time = 60
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 400, /datum/material/gold = 400)
|
||||
build_path = /obj/item/organ/internal/cyberimp/brain/anti_drop
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_antistun
|
||||
@@ -423,7 +479,9 @@
|
||||
construction_time = 60
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/silver = 500, /datum/material/gold = 1000)
|
||||
build_path = /obj/item/organ/internal/cyberimp/brain/anti_stun
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_nutriment
|
||||
@@ -434,7 +492,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/gold = 500)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/nutriment
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_nutriment_plus
|
||||
@@ -445,7 +505,9 @@
|
||||
construction_time = 50
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/gold = 500, /datum/material/uranium = 750)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/nutriment/plus
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_reviver
|
||||
@@ -456,7 +518,9 @@
|
||||
construction_time = 60
|
||||
materials = list(/datum/material/iron = 800, /datum/material/glass = 800, /datum/material/gold = 300, /datum/material/uranium = 500)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/reviver
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cyberimp_thrusters
|
||||
@@ -467,7 +531,9 @@
|
||||
construction_time = 80
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/glass = 2000, /datum/material/silver = 1000, /datum/material/diamond = 1000)
|
||||
build_path = /obj/item/organ/internal/cyberimp/chest/thrusters
|
||||
category = list(RND_CATEGORY_IMPLANTS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_IMPLANTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -481,8 +547,8 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 200)
|
||||
build_path = /obj/item/implanter
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(RND_SUBCATEGORY_IMPLANTS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/implantcase
|
||||
name = "Implant Case"
|
||||
@@ -491,8 +557,8 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 500)
|
||||
build_path = /obj/item/implantcase
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(RND_SUBCATEGORY_IMPLANTS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/implant_sadtrombone
|
||||
name = "Sad Trombone Implant Case"
|
||||
@@ -501,8 +567,8 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 500, /datum/material/bananium = 500)
|
||||
build_path = /obj/item/implantcase/sad_trombone
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
|
||||
category = list(RND_SUBCATEGORY_IMPLANTS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/implant_chem
|
||||
name = "Chemical Implant Case"
|
||||
@@ -511,7 +577,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 700)
|
||||
build_path = /obj/item/implantcase/chem
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(RND_SUBCATEGORY_IMPLANTS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/implant_tracking
|
||||
@@ -521,7 +587,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/implantcase/tracking
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(RND_SUBCATEGORY_IMPLANTS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
//Cybernetic organs
|
||||
@@ -534,7 +600,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/internal/liver/cybernetic
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_liver/tier2
|
||||
@@ -560,7 +628,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/internal/heart/cybernetic
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_heart/tier2
|
||||
@@ -586,7 +656,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/internal/lungs/cybernetic
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_lungs/tier2
|
||||
@@ -612,7 +684,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/organ/internal/stomach/cybernetic
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_stomach/tier2
|
||||
@@ -638,7 +712,9 @@
|
||||
construction_time = 30
|
||||
materials = list(/datum/material/iron = 250, /datum/material/glass = 400)
|
||||
build_path = /obj/item/organ/internal/ears/cybernetic
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_ears_u
|
||||
@@ -649,7 +725,9 @@
|
||||
construction_time = 40
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver = 500)
|
||||
build_path = /obj/item/organ/internal/ears/cybernetic/upgraded
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_eyes
|
||||
@@ -660,7 +738,9 @@
|
||||
construction_time = 30
|
||||
materials = list(/datum/material/iron = 250, /datum/material/glass = 400)
|
||||
build_path = /obj/item/organ/internal/eyes/robotic/basic
|
||||
category = list(RND_CATEGORY_CYBERNETICS, RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_CYBERNETICS + RND_SUBCATEGORY_CYBERNETICS_ORGANS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cybernetic_eyes/improved
|
||||
|
||||
@@ -3,23 +3,27 @@
|
||||
/////////////////Mining//////////////////
|
||||
/////////////////////////////////////////
|
||||
/datum/design/cargo_express
|
||||
name = "Computer Design (Express Supply Console)"//shes beautiful
|
||||
name = "Express Supply Console Board"//shes beautiful
|
||||
desc = "Allows for the construction of circuit boards used to build an Express Supply Console."//who?
|
||||
id = "cargoexpress"//the coder reading this
|
||||
build_type = IMPRINTER
|
||||
materials = list(/datum/material/glass = 1000)
|
||||
build_path = /obj/item/circuitboard/computer/cargo/express
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/bluespace_pod
|
||||
name = "Supply Drop Pod Upgrade Disk"
|
||||
name = "Express Supply Drop Pod Upgrade Disk"
|
||||
desc = "Allows the Cargo Express Console to call down the Bluespace Drop Pod, greatly increasing user safety."//who?
|
||||
id = "bluespace_pod"//the coder reading this
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/glass = 1000)
|
||||
build_path = /obj/item/disk/cargo/bluespace_pod
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/drill
|
||||
@@ -29,7 +33,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 1000) //expensive, but no need for miners.
|
||||
build_path = /obj/item/pickaxe/drill
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/drill_diamond
|
||||
@@ -39,7 +45,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 1000, /datum/material/diamond = 2000) //Yes, a whole diamond is needed.
|
||||
build_path = /obj/item/pickaxe/drill/diamonddrill
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/plasmacutter
|
||||
@@ -49,7 +57,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1500, /datum/material/glass = 500, /datum/material/plasma = 400)
|
||||
build_path = /obj/item/gun/energy/plasmacutter
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/plasmacutter_adv
|
||||
@@ -59,7 +69,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 1000, /datum/material/plasma = 2000, /datum/material/gold = 500)
|
||||
build_path = /obj/item/gun/energy/plasmacutter/adv
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/jackhammer
|
||||
@@ -69,7 +81,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 6000, /datum/material/glass = 2000, /datum/material/silver = 2000, /datum/material/diamond = 6000)
|
||||
build_path = /obj/item/pickaxe/drill/jackhammer
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/superresonator
|
||||
@@ -79,7 +93,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/glass = 1500, /datum/material/silver = 1000, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/resonator/upgraded
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/trigger_guard_mod
|
||||
@@ -89,45 +105,87 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/trigger_guard
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/damage_mod
|
||||
name = "Kinetic Accelerator Damage Mod"
|
||||
desc = "A device which allows kinetic accelerators to deal more damage."
|
||||
id = "damagemod"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/damage
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS, RND_CATEGORY_CYBORG_UPGRADE_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/damage_mod/borg
|
||||
id = "damagemod_b"
|
||||
build_type = MECHFAB
|
||||
category = list(
|
||||
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/cooldown_mod
|
||||
name = "Kinetic Accelerator Cooldown Mod"
|
||||
desc = "A device which decreases the cooldown of a Kinetic Accelerator."
|
||||
id = "cooldownmod"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/cooldown
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS, RND_CATEGORY_CYBORG_UPGRADE_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/cooldown_mod/borg
|
||||
id = "cooldownmod_b"
|
||||
build_type = MECHFAB
|
||||
category = list(
|
||||
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/range_mod
|
||||
name = "Kinetic Accelerator Range Mod"
|
||||
desc = "A device which allows kinetic accelerators to fire at a further range."
|
||||
id = "rangemod"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1500, /datum/material/gold = 1500, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/range
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS, RND_CATEGORY_CYBORG_UPGRADE_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/range_mod/borg
|
||||
id = "rangemod_b"
|
||||
build_type = MECHFAB
|
||||
category = list(
|
||||
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/hyperaccelerator
|
||||
name = "Kinetic Accelerator Mining AoE Mod"
|
||||
desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock."
|
||||
id = "hypermod"
|
||||
build_type = PROTOLATHE | AWAY_LATHE | MECHFAB
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 8000, /datum/material/glass = 1500, /datum/material/silver = 2000, /datum/material/gold = 2000, /datum/material/diamond = 2000)
|
||||
build_path = /obj/item/borg/upgrade/modkit/aoe/turfs
|
||||
category = list(RND_CATEGORY_MINING_DESIGNS, RND_CATEGORY_CYBORG_UPGRADE_MODULES)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/hyperaccelerator/borg
|
||||
id = "hypermod_b"
|
||||
build_type = MECHFAB
|
||||
category = list(
|
||||
RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_MINING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/hud/health
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/health_hud_night
|
||||
@@ -20,7 +22,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = 1000, /datum/material/silver = 350)
|
||||
build_path = /obj/item/clothing/glasses/hud/health/night
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/security_hud
|
||||
@@ -30,7 +34,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/hud/security
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/security_hud_night
|
||||
@@ -40,7 +46,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = 1000, /datum/material/gold = 350)
|
||||
build_path = /obj/item/clothing/glasses/hud/security/night
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/diagnostic_hud
|
||||
@@ -50,7 +58,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/hud/diagnostic
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/diagnostic_hud_night
|
||||
@@ -60,7 +70,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/uranium = 1000, /datum/material/plasma = 300)
|
||||
build_path = /obj/item/clothing/glasses/hud/diagnostic/night
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -74,7 +86,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/welding
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/welding_mask
|
||||
@@ -84,7 +98,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/clothing/mask/gas/welding
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/bright_helmet
|
||||
@@ -94,8 +110,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000, /datum/material/plastic = 3000, /datum/material/silver = 500)
|
||||
build_path = /obj/item/clothing/head/hardhat/red/upgraded
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_CARGO
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/mauna_mug
|
||||
name = "Mauna Mug"
|
||||
@@ -103,9 +121,11 @@
|
||||
id = "mauna_mug"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 100)
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/cup/maunamug
|
||||
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/rolling_table
|
||||
name = "Rolly poly"
|
||||
@@ -114,8 +134,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000)
|
||||
build_path = /obj/structure/table/rolling
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/portaseeder
|
||||
name = "Portable Seed Extractor"
|
||||
@@ -124,7 +146,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 400)
|
||||
build_path = /obj/item/storage/bag/plants/portaseeder
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_TOOLS_BOTANY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/air_horn
|
||||
@@ -134,8 +158,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/bananium = 1000)
|
||||
build_path = /obj/item/bikehorn/airhorn
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/mesons
|
||||
name = "Optical Meson Scanners"
|
||||
@@ -144,7 +170,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/meson
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/engine_goggles
|
||||
@@ -154,7 +182,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/plasma = 100)
|
||||
build_path = /obj/item/clothing/glasses/meson/engine
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/tray_goggles
|
||||
@@ -164,7 +194,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/meson/engine/tray
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ATMOSPHERICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/atmos_thermal
|
||||
@@ -184,7 +216,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/plasma = 350, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/clothing/glasses/meson/night
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/night_vision_goggles
|
||||
@@ -194,7 +228,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/plasma = 350, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/clothing/glasses/night
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_MISC
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/magboots
|
||||
@@ -204,7 +240,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4500, /datum/material/silver = 1500, /datum/material/gold = 2500)
|
||||
build_path = /obj/item/clothing/shoes/magboots
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/forcefield_projector
|
||||
@@ -214,7 +252,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2500, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/forcefield_projector
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/sci_goggles
|
||||
@@ -224,8 +264,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500)
|
||||
build_path = /obj/item/clothing/glasses/science
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/nv_sci_goggles
|
||||
name = "Night Vision Science Goggles"
|
||||
@@ -234,8 +276,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 600, /datum/material/glass = 600, /datum/material/plasma = 350, /datum/material/uranium = 1000)
|
||||
build_path = /obj/item/clothing/glasses/science/night
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/roastingstick
|
||||
name = "Advanced Roasting Stick"
|
||||
@@ -244,7 +288,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/bluespace = 250)
|
||||
build_path = /obj/item/melee/roastingstick
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/locator
|
||||
@@ -254,7 +300,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/silver = 500)
|
||||
build_path = /obj/item/locator
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/quantum_keycard
|
||||
@@ -264,8 +312,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 500, /datum/material/iron = 500, /datum/material/silver = 500, /datum/material/bluespace = 1000)
|
||||
build_path = /obj/item/quantum_keycard
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/anomaly_neutralizer
|
||||
name = "Anomaly Neutralizer"
|
||||
@@ -274,8 +324,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/gold = 2000, /datum/material/plasma = 5000, /datum/material/uranium = 2000)
|
||||
build_path = /obj/item/anomaly_neutralizer
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/donksoft_refill
|
||||
name = "Donksoft Toy Vendor Refill"
|
||||
@@ -284,7 +336,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 25000, /datum/material/glass = 15000, /datum/material/plasma = 20000, /datum/material/gold = 10000, /datum/material/silver = 10000)
|
||||
build_path = /obj/item/vending_refill/donksoft
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_MISC
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/oxygen_tank
|
||||
name = "Oxygen Tank"
|
||||
@@ -293,8 +348,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000)
|
||||
build_path = /obj/item/tank/internals/oxygen/empty
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO
|
||||
|
||||
/datum/design/plasma_tank
|
||||
name = "Plasma Tank"
|
||||
@@ -303,7 +360,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000)
|
||||
build_path = /obj/item/tank/internals/plasma/empty
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/id
|
||||
@@ -313,7 +372,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=200, /datum/material/glass = 100)
|
||||
build_path = /obj/item/card/id/advanced
|
||||
category = list(RND_CATEGORY_ELECTRONICS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/eng_gloves
|
||||
@@ -323,7 +384,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=2000, /datum/material/silver=1500, /datum/material/gold = 1000)
|
||||
build_path = /obj/item/clothing/gloves/color/latex/engineering
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/lavarods
|
||||
@@ -332,7 +395,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=1000, /datum/material/plasma=500, /datum/material/titanium=2000)
|
||||
build_path = /obj/item/stack/rods/lava
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/plasticducky
|
||||
@@ -342,7 +407,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 1000)
|
||||
build_path = /obj/item/bikehorn/rubberducky/plasticducky
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/pneumatic_seal
|
||||
name = "Pneumatic Airlock Seal"
|
||||
@@ -351,7 +419,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 20000, /datum/material/plasma = 10000)
|
||||
build_path = /obj/item/door_seal
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -365,7 +435,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2500, /datum/material/glass = 200)
|
||||
build_path = /obj/item/mop/advanced
|
||||
category = list(RND_CATEGORY_EQUIPMENT, RND_CATEGORY_TOOLS, RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/normtrash
|
||||
@@ -375,7 +447,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 2000)
|
||||
build_path = /obj/item/storage/bag/trash
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/blutrash
|
||||
@@ -385,7 +459,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/gold = 1500, /datum/material/uranium = 250, /datum/material/plasma = 1500)
|
||||
build_path = /obj/item/storage/bag/trash/bluespace
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/light_replacer
|
||||
@@ -395,8 +471,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1500, /datum/material/silver = 150, /datum/material/glass = 3000)
|
||||
build_path = /obj/item/lightreplacer
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/buffer_upgrade
|
||||
name = "Floor Buffer Upgrade"
|
||||
@@ -405,7 +483,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 200)
|
||||
build_path = /obj/item/janicart_upgrade/buffer
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_JANITOR
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/vacuum_upgrade
|
||||
@@ -415,7 +495,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 200)
|
||||
build_path = /obj/item/janicart_upgrade/vacuum
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_JANITOR
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/paint_remover
|
||||
@@ -426,7 +508,9 @@
|
||||
materials = list(/datum/material/iron = 1000)
|
||||
reagents_list = list(/datum/reagent/acetone = 60)
|
||||
build_path = /obj/item/paint/paint_remover
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/spraybottle
|
||||
@@ -436,7 +520,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 200)
|
||||
build_path = /obj/item/reagent_containers/spray
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/beartrap
|
||||
@@ -446,7 +532,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/titanium = 1000)
|
||||
build_path = /obj/item/restraints/legcuffs/beartrap
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
|
||||
@@ -459,7 +547,9 @@
|
||||
id = "adv_watering_can"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2500, /datum/material/glass = 200)
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_TOOLS, RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_BOTANY_ADVANCED
|
||||
)
|
||||
build_path = /obj/item/reagent_containers/cup/watering_can/advanced
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
@@ -474,7 +564,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/holosign_creator
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/holobarrier_jani
|
||||
@@ -484,10 +576,11 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000, /datum/material/silver = 1000)
|
||||
build_path = /obj/item/holosign_creator/janibarrier
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
|
||||
/datum/design/holosignsec
|
||||
name = "Security Holobarrier Projector"
|
||||
desc = "A holographic projector that creates holographic security barriers."
|
||||
@@ -495,7 +588,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000)
|
||||
build_path = /obj/item/holosign_creator/security
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/holosignengi
|
||||
@@ -505,7 +600,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000)
|
||||
build_path = /obj/item/holosign_creator/engineering
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/holosignatmos
|
||||
@@ -515,7 +612,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/silver = 1000)
|
||||
build_path = /obj/item/holosign_creator/atmos
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ATMOSPHERICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/holobarrier_med
|
||||
@@ -525,7 +624,9 @@
|
||||
build_path = /obj/item/holosign_creator/medical
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 500, /datum/material/silver = 100) //a hint of silver since it can troll 2 antags (bad viros and sentient disease)
|
||||
id = "holobarrier_med"
|
||||
category = list(RND_CATEGORY_MEDICAL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -539,8 +640,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/diamond = 5000, /datum/material/uranium = 8000, /datum/material/silver = 4500, /datum/material/gold = 5000)
|
||||
build_path = /obj/item/reactive_armour_shell
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/knight_armour
|
||||
name = "Knight Armour"
|
||||
@@ -573,7 +676,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2500)
|
||||
build_path = /obj/item/flashlight/seclite
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/detective_scanner
|
||||
@@ -583,7 +688,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 2500, /datum/material/silver = 2000)
|
||||
build_path = /obj/item/detective_scanner
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/pepperspray
|
||||
@@ -593,7 +700,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/reagent_containers/spray/pepper/empty
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/bola_energy
|
||||
@@ -603,7 +712,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/silver = 500, /datum/material/plasma = 500, /datum/material/titanium = 500)
|
||||
build_path = /obj/item/restraints/legcuffs/bola/energy
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -614,7 +725,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 250)
|
||||
build_path = /obj/item/restraints/handcuffs/cable/zipties
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/evidencebag
|
||||
@@ -624,7 +737,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 100)
|
||||
build_path = /obj/item/evidencebag
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/inspector
|
||||
@@ -634,7 +749,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000, /datum/material/gold = 1000, /datum/material/uranium = 2000)
|
||||
build_path = /obj/item/inspector
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/plumbing_rcd
|
||||
@@ -643,24 +760,32 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 75000, /datum/material/glass = 37500, /datum/material/plastic = 1000)
|
||||
build_path = /obj/item/construction/plumbing
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PLUMBING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/gas_filter
|
||||
name = "Gas filter"
|
||||
name = "Gas Filter"
|
||||
id = "gas_filter"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100)
|
||||
build_path = /obj/item/gas_filter
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS
|
||||
)
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design/plasmaman_gas_filter
|
||||
name = "Plasmaman gas filter"
|
||||
name = "Plasmaman Gas Filter"
|
||||
id = "plasmaman_gas_filter"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100)
|
||||
build_path = /obj/item/gas_filter/plasmaman
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS
|
||||
)
|
||||
departmental_flags = ALL
|
||||
|
||||
/////////////////////////////////////////
|
||||
/////////////////Tape////////////////////
|
||||
@@ -672,7 +797,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 3000)
|
||||
build_path = /obj/item/stack/sticky_tape/super
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/pointy_tape
|
||||
@@ -681,7 +808,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1500, /datum/material/plastic = 1000)
|
||||
build_path = /obj/item/stack/sticky_tape/pointy
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/super_pointy_tape
|
||||
@@ -690,7 +819,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/plastic = 2000)
|
||||
build_path = /obj/item/stack/sticky_tape/pointy/super
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -703,7 +834,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 2500)
|
||||
build_path = /obj/item/clothing/gloves/tackler/dolphin
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/tackle_rocket
|
||||
@@ -712,7 +845,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plasma = 1000, /datum/material/plastic = 2000)
|
||||
build_path = /obj/item/clothing/gloves/tackler/rocket
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SECURITY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
|
||||
@@ -728,7 +863,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/holosign_creator/robot_seat/restaurant
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/holosign/bar
|
||||
@@ -738,7 +875,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/holosign_creator/robot_seat/bar
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/oven_tray
|
||||
@@ -748,7 +887,9 @@
|
||||
build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500)
|
||||
build_path = /obj/item/plate/oven_tray
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -761,7 +902,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/uranium = 1000, /datum/material/plastic = 2000)
|
||||
build_path = /obj/item/fishing_rod/tech
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/////////////////////////////////////////
|
||||
/////////Coffeemaker Stuff///////////////
|
||||
@@ -773,7 +917,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 500, /datum/material/plastic = 500)
|
||||
build_path = /obj/item/reagent_containers/cup/coffeepot
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/coffeepot_bluespace
|
||||
name = "Bluespace Coffeepot"
|
||||
@@ -781,7 +928,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/plastic = 500, /datum/material/bluespace = 500)
|
||||
build_path = /obj/item/reagent_containers/cup/coffeepot/bluespace
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/coffee_cartridge
|
||||
name = "Blank Coffee Cartridge"
|
||||
@@ -789,4 +939,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plastic = 1000)
|
||||
build_path = /obj/item/blank_coffee_cartridge
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_KITCHEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
@@ -10,7 +10,10 @@
|
||||
materials = list(/datum/material/iron = 700, /datum/material/glass = 50)
|
||||
construction_time=100
|
||||
build_path = /obj/item/stock_parts/cell/empty
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/high_cell
|
||||
name = "High-Capacity Power Cell"
|
||||
@@ -20,7 +23,9 @@
|
||||
materials = list(/datum/material/iron = 700, /datum/material/glass = 60)
|
||||
construction_time=100
|
||||
build_path = /obj/item/stock_parts/cell/high/empty
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/super_cell
|
||||
@@ -31,7 +36,9 @@
|
||||
materials = list(/datum/material/iron = 700, /datum/material/glass = 70)
|
||||
construction_time=100
|
||||
build_path = /obj/item/stock_parts/cell/super/empty
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/hyper_cell
|
||||
@@ -42,7 +49,9 @@
|
||||
materials = list(/datum/material/iron = 700, /datum/material/gold = 150, /datum/material/silver = 150, /datum/material/glass = 80)
|
||||
construction_time=100
|
||||
build_path = /obj/item/stock_parts/cell/hyper/empty
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/bluespace_cell
|
||||
@@ -53,7 +62,9 @@
|
||||
materials = list(/datum/material/iron = 800, /datum/material/gold = 120, /datum/material/glass = 160, /datum/material/diamond = 160, /datum/material/titanium = 300, /datum/material/bluespace = 100)
|
||||
construction_time=100
|
||||
build_path = /obj/item/stock_parts/cell/bluespace/empty
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/inducer
|
||||
@@ -63,43 +74,56 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/inducer/sci
|
||||
category = list(RND_CATEGORY_POWER_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/pacman
|
||||
name = "Machine Design (PACMAN-type Generator Board)"
|
||||
desc = "The circuit board that for a PACMAN-type portable generator."
|
||||
name = "PACMAN Board"
|
||||
desc = "The circuit board for a PACMAN-type portable generator."
|
||||
id = "pacman"
|
||||
build_path = /obj/item/circuitboard/machine/pacman
|
||||
category = list(RND_CATEGORY_ENGINEERING_MACHINERY)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/turbine_part_compressor
|
||||
name = "Turbine Part - Compressor"
|
||||
name = "Turbine Compressor"
|
||||
desc = "The basic tier of a compressor blade."
|
||||
id = "turbine_part_compressor"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 500)
|
||||
construction_time = 100
|
||||
build_path = /obj/item/turbine_parts/compressor
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TURBINE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/turbine_part_rotor
|
||||
name = "Turbine Part - Rotor"
|
||||
name = "Turbine Rotor"
|
||||
desc = "The basic tier of a rotor shaft."
|
||||
id = "turbine_part_rotor"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 500)
|
||||
construction_time = 100
|
||||
build_path = /obj/item/turbine_parts/rotor
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TURBINE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/turbine_part_stator
|
||||
name = "Turbine Part - Stator"
|
||||
name = "Turbine Stator"
|
||||
desc = "The basic tier of a stator."
|
||||
id = "turbine_part_stator"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/iron = 500)
|
||||
construction_time = 100
|
||||
build_path = /obj/item/turbine_parts/stator
|
||||
category = list(RND_CATEGORY_MISC, RND_CATEGORY_POWER_DESIGNS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TURBINE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
@@ -1,63 +1,74 @@
|
||||
///////SMELTABLE ALLOYS///////
|
||||
|
||||
/datum/design/plasteel_alloy
|
||||
name = "Plasma + Iron alloy"
|
||||
name = "Plasteel"
|
||||
id = "plasteel"
|
||||
build_type = SMELTER | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = MINERAL_MATERIAL_AMOUNT, /datum/material/plasma = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plasteel
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
|
||||
/datum/design/plastitanium_alloy
|
||||
name = "Plasma + Titanium alloy"
|
||||
name = "Plastitanium"
|
||||
id = "plastitanium"
|
||||
build_type = SMELTER | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/titanium = MINERAL_MATERIAL_AMOUNT, /datum/material/plasma = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/mineral/plastitanium
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/plaglass_alloy
|
||||
name = "Plasma + Glass alloy"
|
||||
name = "Plasma Glass"
|
||||
id = "plasmaglass"
|
||||
build_type = SMELTER | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plasma = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plasmaglass
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/plasmarglass_alloy
|
||||
name = "Plasma + Iron + Glass alloy"
|
||||
name = "Reinforced Plasma Glass"
|
||||
id = "plasmareinforcedglass"
|
||||
build_type = SMELTER | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plasma = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/iron = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plasmarglass
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/titaniumglass_alloy
|
||||
name = "Titanium + Glass alloy"
|
||||
name = "Titanium Glass"
|
||||
id = "titaniumglass"
|
||||
build_type = SMELTER | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/titanium = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/titaniumglass
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
/datum/design/plastitaniumglass_alloy
|
||||
name = "Plasma + Titanium + Glass alloy"
|
||||
name = "Plastitanium Glass"
|
||||
id = "plastitaniumglass"
|
||||
build_type = SMELTER | PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/plasma = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/titanium = MINERAL_MATERIAL_AMOUNT * 0.5, /datum/material/glass = MINERAL_MATERIAL_AMOUNT)
|
||||
build_path = /obj/item/stack/sheet/plastitaniumglass
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
@@ -68,5 +79,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | SMELTER
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/plasma = 4000)
|
||||
build_path = /obj/item/stack/sheet/mineral/abductor
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/glass = 5000) //hardcore
|
||||
build_path = /obj/item/storage/part_replacer
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_EXCHANGERS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/bs_rped
|
||||
@@ -19,7 +21,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 15000, /datum/material/glass = 5000, /datum/material/silver = 2500) //hardcore
|
||||
build_path = /obj/item/storage/part_replacer/bluespace
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_EXCHANGERS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
//Capacitors
|
||||
@@ -30,7 +34,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/glass = 100)
|
||||
build_path = /obj/item/stock_parts/capacitor
|
||||
category = list(RND_CATEGORY_STOCK_PARTS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -41,7 +47,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 150, /datum/material/glass = 150)
|
||||
build_path = /obj/item/stock_parts/capacitor/adv
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -52,7 +60,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/gold = 100)
|
||||
build_path = /obj/item/stock_parts/capacitor/super
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -63,7 +73,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/gold = 100, /datum/material/diamond = 100)
|
||||
build_path = /obj/item/stock_parts/capacitor/quadratic
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -75,7 +87,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/glass = 50)
|
||||
build_path = /obj/item/stock_parts/scanning_module
|
||||
category = list(RND_CATEGORY_STOCK_PARTS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -86,7 +100,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 150, /datum/material/glass = 100)
|
||||
build_path = /obj/item/stock_parts/scanning_module/adv
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -97,7 +113,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 150, /datum/material/silver = 60)
|
||||
build_path = /obj/item/stock_parts/scanning_module/phasic
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -108,7 +126,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/diamond = 30, /datum/material/bluespace = 30)
|
||||
build_path = /obj/item/stock_parts/scanning_module/triphasic
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -120,7 +140,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100)
|
||||
build_path = /obj/item/stock_parts/manipulator
|
||||
category = list(RND_CATEGORY_STOCK_PARTS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -131,7 +153,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 150)
|
||||
build_path = /obj/item/stock_parts/manipulator/nano
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -142,7 +166,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200)
|
||||
build_path = /obj/item/stock_parts/manipulator/pico
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -153,7 +179,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/diamond = 30, /datum/material/titanium = 30)
|
||||
build_path = /obj/item/stock_parts/manipulator/femto
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -165,7 +193,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/glass = 50)
|
||||
build_path = /obj/item/stock_parts/micro_laser
|
||||
category = list(RND_CATEGORY_STOCK_PARTS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -176,7 +206,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 150, /datum/material/glass = 100)
|
||||
build_path = /obj/item/stock_parts/micro_laser/high
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -187,7 +219,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 150, /datum/material/uranium = 60)
|
||||
build_path = /obj/item/stock_parts/micro_laser/ultra
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -198,7 +232,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 200, /datum/material/uranium = 100, /datum/material/diamond = 60)
|
||||
build_path = /obj/item/stock_parts/micro_laser/quadultra
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -209,7 +245,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/iron = 100)
|
||||
build_path = /obj/item/stock_parts/matter_bin
|
||||
category = list(RND_CATEGORY_STOCK_PARTS, RND_CATEGORY_MACHINERY, RND_CATEGORY_INITIAL)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_1
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -220,7 +258,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 150)
|
||||
build_path = /obj/item/stock_parts/matter_bin/adv
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_2
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -231,7 +271,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200)
|
||||
build_path = /obj/item/stock_parts/matter_bin/super
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_3
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -242,7 +284,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 250, /datum/material/diamond = 100, /datum/material/bluespace = 100)
|
||||
build_path = /obj/item/stock_parts/matter_bin/bluespace
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_4
|
||||
)
|
||||
lathe_time_factor = 0.2
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -254,7 +298,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/silver = 100)
|
||||
build_path = /obj/item/stock_parts/subspace/ansible
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/hyperwave_filter
|
||||
@@ -264,7 +310,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/silver = 100)
|
||||
build_path = /obj/item/stock_parts/subspace/filter
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/subspace_amplifier
|
||||
@@ -274,7 +322,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/gold = 100, /datum/material/uranium = 100)
|
||||
build_path = /obj/item/stock_parts/subspace/amplifier
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/subspace_treatment
|
||||
@@ -284,7 +334,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/silver = 200)
|
||||
build_path = /obj/item/stock_parts/subspace/treatment
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/subspace_analyzer
|
||||
@@ -294,7 +346,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/gold = 100)
|
||||
build_path = /obj/item/stock_parts/subspace/analyzer
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/subspace_crystal
|
||||
@@ -304,7 +358,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 800, /datum/material/silver = 100, /datum/material/gold = 100)
|
||||
build_path = /obj/item/stock_parts/subspace/crystal
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/subspace_transmitter
|
||||
@@ -314,7 +370,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/glass = 100, /datum/material/silver = 100, /datum/material/uranium = 100)
|
||||
build_path = /obj/item/stock_parts/subspace/transmitter
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/card_reader
|
||||
@@ -324,7 +382,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=50, /datum/material/glass=10)
|
||||
build_path = /obj/item/stock_parts/card_reader
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_MISC
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/water_recycler
|
||||
name = "Water Recycler"
|
||||
@@ -333,5 +394,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE | AUTOLATHE
|
||||
materials = list(/datum/material/plastic = 200, /datum/material/iron = 50)
|
||||
build_path = /obj/item/stock_parts/water_recycler
|
||||
category = list(RND_CATEGORY_STOCK_PARTS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(
|
||||
RND_CATEGORY_STOCK_PARTS + RND_SUBCATEGORY_STOCK_PARTS_MISC
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -3,65 +3,81 @@
|
||||
///////////////////////////////////
|
||||
|
||||
/datum/design/board/subspace_receiver
|
||||
name = "Machine Design (Subspace Receiver)"
|
||||
name = "Subspace Receiver Board"
|
||||
desc = "Allows for the construction of Subspace Receiver equipment."
|
||||
id = "s_receiver"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/receiver
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/telecomms_bus
|
||||
name = "Machine Design (Bus Mainframe)"
|
||||
name = "Bus Mainframe Board"
|
||||
desc = "Allows for the construction of Telecommunications Bus Mainframes."
|
||||
id = "s_bus"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/bus
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/telecomms_hub
|
||||
name = "Machine Design (Hub Mainframe)"
|
||||
name = "Hub Mainframe Board"
|
||||
desc = "Allows for the construction of Telecommunications Hub Mainframes."
|
||||
id = "s_hub"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/hub
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/telecomms_relay
|
||||
name = "Machine Design (Relay Mainframe)"
|
||||
name = "Relay Mainframe Board"
|
||||
desc = "Allows for the construction of Telecommunications Relay Mainframes."
|
||||
id = "s_relay"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/relay
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/telecomms_processor
|
||||
name = "Machine Design (Processor Unit)"
|
||||
name = "Processor Unit Board"
|
||||
desc = "Allows for the construction of Telecommunications Processor equipment."
|
||||
id = "s_processor"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/processor
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/telecomms_server
|
||||
name = "Machine Design (Server Mainframe)"
|
||||
name = "Server Mainframe Board"
|
||||
desc = "Allows for the construction of Telecommunications Servers."
|
||||
id = "s_server"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/server
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/telecomms_messaging
|
||||
name = "Machine Design (Messaging Server)"
|
||||
name = "Messaging Server Board"
|
||||
desc = "Allows for the construction of Telecommunications Messaging Servers."
|
||||
id = "s_messaging"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/message_server
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/board/subspace_broadcaster
|
||||
name = "Machine Design (Subspace Broadcaster)"
|
||||
name = "Subspace Broadcaster Board"
|
||||
desc = "Allows for the construction of Subspace Broadcasting equipment."
|
||||
id = "s_broadcaster"
|
||||
build_path = /obj/item/circuitboard/machine/telecomms/broadcaster
|
||||
category = list(RND_CATEGORY_SUBSPACE_TELECOMMS)
|
||||
category = list(
|
||||
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_TELECOMMS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3500, /datum/material/silver = 1500, /datum/material/titanium = 2500)
|
||||
build_path = /obj/item/screwdriver/power
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/jawsoflife
|
||||
@@ -20,7 +22,9 @@
|
||||
build_path = /obj/item/crowbar/power
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4500, /datum/material/silver = 2500, /datum/material/titanium = 3500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -31,8 +35,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 500, /datum/material/plasma = 1500, /datum/material/uranium = 200)
|
||||
build_path = /obj/item/weldingtool/experimental
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rangedanalyzer
|
||||
name = "Experimental Long-range Gas Analyzer"
|
||||
@@ -41,8 +47,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 100, /datum/material/glass = 20, /datum/material/gold = 300, /datum/material/bluespace=200)
|
||||
build_path = /obj/item/analyzer/ranged
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags= DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_ENGINEERING
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ATMOSPHERICS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/rpd
|
||||
name = "Rapid Pipe Dispenser (RPD)"
|
||||
@@ -50,19 +58,33 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 75000, /datum/material/glass = 37500)
|
||||
build_path = /obj/item/pipe_dispenser
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_loaded
|
||||
name = "Rapid Construction Device"
|
||||
desc = "A tool that can construct and deconstruct walls, airlocks and floors on the fly."
|
||||
id = "rcd_loaded"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 60000, /datum/material/glass = 5000) // costs more than what it did in the autolathe, this one comes loaded.
|
||||
materials = list(/datum/material/iron = 60000, /datum/material/glass = 5000)
|
||||
build_path = /obj/item/construction/rcd/loaded
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_ammo
|
||||
name = "RCD Matter Cartridge"
|
||||
id = "rcd_ammo"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 12000, /datum/material/glass = 8000)
|
||||
build_path = /obj/item/rcd_ammo
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_upgrade/frames
|
||||
name = "RCD frames designs upgrade"
|
||||
@@ -71,7 +93,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 1500, /datum/material/titanium = 2000)
|
||||
build_path = /obj/item/rcd_upgrade/frames
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_upgrade/simple_circuits
|
||||
@@ -81,7 +105,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 1500, /datum/material/titanium = 2000)
|
||||
build_path = /obj/item/rcd_upgrade/simple_circuits
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_upgrade/furnishing
|
||||
@@ -91,7 +117,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500, /datum/material/silver = 1500, /datum/material/titanium = 2000)
|
||||
build_path = /obj/item/rcd_upgrade/furnishing
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rcd_upgrade/silo_link
|
||||
@@ -101,7 +129,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2500, /datum/material/glass = 2500, /datum/material/silver = 2500, /datum/material/titanium = 2500, /datum/material/bluespace = 2500)
|
||||
build_path = /obj/item/rcd_upgrade/silo_link
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rpd_upgrade/unwrench
|
||||
@@ -111,7 +141,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2500)
|
||||
build_path = /obj/item/rpd_upgrade/unwrench
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/rld_mini
|
||||
@@ -121,8 +153,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 20000, /datum/material/glass = 10000, /datum/material/plastic = 8000, /datum/material/gold = 2000)
|
||||
build_path = /obj/item/construction/rld/mini
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/geneshears
|
||||
name = "Botanogenetic Plant Shears"
|
||||
@@ -131,7 +165,9 @@
|
||||
build_path = /obj/item/geneshears
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron=4000, /datum/material/uranium=1500, /datum/material/silver=500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_BOTANY_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/plumbing_rcd_sci
|
||||
@@ -140,7 +176,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 75000, /datum/material/glass = 37500, /datum/material/plastic = 1000)
|
||||
build_path = /obj/item/construction/plumbing/research
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PLUMBING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/plumbing_rcd_service
|
||||
@@ -149,7 +187,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 75000, /datum/material/glass = 37500, /datum/material/plastic = 1000)
|
||||
build_path = /obj/item/construction/plumbing/service
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PLUMBING
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/biopsy_tool
|
||||
@@ -158,7 +198,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/glass = 3000)
|
||||
build_path = /obj/item/biopsy_tool
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_XENOBIOLOGY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -172,7 +214,9 @@
|
||||
build_path = /obj/item/wrench/abductor
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/alienwirecutters
|
||||
@@ -182,7 +226,9 @@
|
||||
build_path = /obj/item/wirecutters/abductor
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/alienscrewdriver
|
||||
@@ -192,7 +238,9 @@
|
||||
build_path = /obj/item/screwdriver/abductor
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/aliencrowbar
|
||||
@@ -202,7 +250,9 @@
|
||||
build_path = /obj/item/crowbar/abductor
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/alienwelder
|
||||
@@ -212,7 +262,9 @@
|
||||
build_path = /obj/item/weldingtool/abductor
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 5000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/datum/design/alienmultitool
|
||||
@@ -222,7 +274,9 @@
|
||||
build_path = /obj/item/multitool/abductor
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/silver = 2500, /datum/material/plasma = 5000, /datum/material/titanium = 2000, /datum/material/diamond = 2000)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_ENGINEERING_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING
|
||||
|
||||
/////////////////////////////////////////
|
||||
@@ -236,7 +290,9 @@
|
||||
build_path = /obj/item/scalpel/alien
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/alienhemostat
|
||||
@@ -246,7 +302,9 @@
|
||||
build_path = /obj/item/hemostat/alien
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/alienretractor
|
||||
@@ -256,7 +314,9 @@
|
||||
build_path = /obj/item/retractor/alien
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/aliensaw
|
||||
@@ -266,7 +326,9 @@
|
||||
build_path = /obj/item/circular_saw/alien
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 1500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/aliendrill
|
||||
@@ -276,7 +338,9 @@
|
||||
build_path = /obj/item/surgicaldrill/alien
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/silver = 2500, /datum/material/plasma = 1000, /datum/material/titanium = 1500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/aliencautery
|
||||
@@ -286,7 +350,9 @@
|
||||
build_path = /obj/item/cautery/alien
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/silver = 1500, /datum/material/plasma = 500, /datum/material/titanium = 1500)
|
||||
category = list(RND_CATEGORY_TOOL_DESIGNS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MEDICAL_ALIEN
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/wirebrush
|
||||
@@ -297,5 +363,8 @@
|
||||
category = list(RND_CATEGORY_INITIAL, RND_CATEGORY_TOOLS)
|
||||
materials = list(/datum/material/iron = 200, /datum/material/glass = 200)
|
||||
build_path = /obj/item/wirebrush
|
||||
category = list(RND_CATEGORY_EQUIPMENT)
|
||||
category = list(RND_CATEGORY_TOOLS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_JANITORIAL
|
||||
)
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
/datum/design/c38/sec
|
||||
id = "sec_38"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE //Redundant, there's already an autolathe version.
|
||||
|
||||
@@ -16,7 +18,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 20000, /datum/material/silver = 5000, /datum/material/gold = 1000)
|
||||
build_path = /obj/item/ammo_box/c38/trac
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/c38_hotshot
|
||||
@@ -26,7 +30,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 20000, /datum/material/plasma = 5000)
|
||||
build_path = /obj/item/ammo_box/c38/hotshot
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/c38_iceblox
|
||||
@@ -36,7 +42,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 20000, /datum/material/plasma = 5000)
|
||||
build_path = /obj/item/ammo_box/c38/iceblox
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/c38_rubber
|
||||
@@ -46,34 +54,44 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 20000)
|
||||
build_path = /obj/item/ammo_box/c38/match/bouncy
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/rubbershot/sec
|
||||
id = "sec_rshot"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE //Redundant
|
||||
|
||||
/datum/design/beanbag_slug/sec
|
||||
id = "sec_beanbag_slug"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
/datum/design/shotgun_dart/sec
|
||||
id = "sec_dart"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
/datum/design/incendiary_slug/sec
|
||||
id = "sec_Islug"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -84,7 +102,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 500, /datum/material/glass = 300)
|
||||
build_path = /obj/item/firing_pin/test_range
|
||||
category = list(RND_CATEGORY_FIRING_PINS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_FIRING_PINS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/pin_mindshield
|
||||
@@ -94,7 +114,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/silver = 600, /datum/material/diamond = 600, /datum/material/uranium = 200)
|
||||
build_path = /obj/item/firing_pin/implant/mindshield
|
||||
category = list(RND_CATEGORY_FIRING_PINS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_FIRING_PINS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/pin_explorer
|
||||
@@ -104,7 +126,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/silver = 1000, /datum/material/gold = 1000, /datum/material/iron = 500)
|
||||
build_path = /obj/item/firing_pin/explorer
|
||||
category = list(RND_CATEGORY_FIRING_PINS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_FIRING_PINS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/stunrevolver
|
||||
@@ -114,7 +138,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/glass = 10000, /datum/material/silver = 10000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/tesla
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -125,7 +151,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/glass = 2000, /datum/material/uranium = 3000, /datum/material/titanium = 1000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/nuclear
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -136,7 +164,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 4000, /datum/material/glass = 4000, /datum/material/silver = 300, /datum/material/titanium = 200)
|
||||
build_path = /obj/item/shield/riot/tele
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_MELEE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -147,7 +177,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/glass = 5000, /datum/material/diamond = 5000, /datum/material/uranium = 8000, /datum/material/silver = 4500, /datum/material/gold = 5000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/beam_rifle
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -158,7 +190,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/gold = 5000, /datum/material/uranium = 10000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/decloner
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -169,7 +203,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1000)
|
||||
build_path = /obj/item/gun/syringe/rapidsyringe
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL //uwu
|
||||
|
||||
/datum/design/temp_gun
|
||||
@@ -179,7 +215,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 500, /datum/material/silver = 3000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/temperature
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -190,48 +228,58 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/glass = 500, /datum/material/uranium = 2000)
|
||||
build_path = /obj/item/gun/energy/floragun
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_BOTANY_ADVANCED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SERVICE
|
||||
|
||||
/datum/design/large_grenade
|
||||
name = "Large Grenade"
|
||||
name = "Large Grenade Casing"
|
||||
desc = "A grenade that affects a larger area and use larger containers."
|
||||
id = "large_grenade"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000)
|
||||
build_path = /obj/item/grenade/chem_grenade/large
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/pyro_grenade
|
||||
name = "Pyro Grenade"
|
||||
name = "Pyro Grenade Casing"
|
||||
desc = "An advanced grenade that is able to self ignite its mixture."
|
||||
id = "pyro_grenade"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/plasma = 500)
|
||||
build_path = /obj/item/grenade/chem_grenade/pyro
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/cryo_grenade
|
||||
name = "Cryo Grenade"
|
||||
name = "Cryo Grenade Casing"
|
||||
desc = "An advanced grenade that rapidly cools its contents upon detonation."
|
||||
id = "cryo_grenade"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/silver = 500)
|
||||
build_path = /obj/item/grenade/chem_grenade/cryo
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/adv_grenade
|
||||
name = "Advanced Release Grenade"
|
||||
name = "Advanced Release Grenade Casing"
|
||||
desc = "An advanced grenade that can be detonated several times, best used with a repeating igniter."
|
||||
id = "adv_grenade"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 3000, /datum/material/glass = 500)
|
||||
build_path = /obj/item/grenade/chem_grenade/adv_release
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_MEDICAL
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_CHEMISTRY
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL
|
||||
|
||||
/datum/design/xray
|
||||
name = "X-ray Laser Gun Part Kit"
|
||||
@@ -240,18 +288,22 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/gold = 5000, /datum/material/uranium = 4000, /datum/material/iron = 5000, /datum/material/titanium = 2000, /datum/material/bluespace = 2000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/xray
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
/datum/design/ioncarbine
|
||||
name = "Ion Carbine Part Kit"
|
||||
desc = "How to dismantle a cyborg : The gun."
|
||||
desc = "How to Dismantle a Cyborg: The Gun."
|
||||
id = "ioncarbine"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/silver = 6000, /datum/material/iron = 8000, /datum/material/uranium = 2000)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/ion
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_KITS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -262,7 +314,9 @@
|
||||
build_type = PROTOLATHE
|
||||
materials = list(/datum/material/silver = 2000, /datum/material/iron = 5000, /datum/material/diamond = 2000, /datum/material/bluespace = 3000)
|
||||
build_path = /obj/item/gun/energy/wormhole_projector
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/stunshell
|
||||
@@ -272,7 +326,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 200)
|
||||
build_path = /obj/item/ammo_casing/shotgun/stunslug
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/techshell
|
||||
@@ -282,8 +338,10 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 1000, /datum/material/glass = 200)
|
||||
build_path = /obj/item/ammo_casing/shotgun/techshell
|
||||
category = list(RND_CATEGORY_AMMO)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_AMMO
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/suppressor
|
||||
name = "Suppressor"
|
||||
@@ -292,7 +350,9 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 2000, /datum/material/silver = 500)
|
||||
build_path = /obj/item/suppressor
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_PARTS
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
/datum/design/gravitygun
|
||||
@@ -302,17 +362,21 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/silver = 8000, /datum/material/uranium = 8000, /datum/material/glass = 12000, /datum/material/iron = 12000, /datum/material/diamond = 3000, /datum/material/bluespace = 3000)
|
||||
build_path = /obj/item/gun/energy/gravity_gun
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SCIENCE
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
/datum/design/largecrossbow
|
||||
name = "Energy Crossbow Part Kit"
|
||||
desc = "A kit to reverse-engineer a proto-kinetic acceleratr into an energy crossbow, favored by syndicate infiltration teams and carp hunters."
|
||||
desc = "A kit to reverse-engineer a proto-kinetic accelerator into an energy crossbow, favored by syndicate infiltration teams and carp hunters."
|
||||
id = "largecrossbow"
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1500, /datum/material/uranium = 1500, /datum/material/silver = 1500)
|
||||
build_path = /obj/item/weaponcrafting/gunkit/ebow
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_RANGED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
autolathe_exportable = FALSE
|
||||
|
||||
@@ -332,5 +396,7 @@
|
||||
build_type = PROTOLATHE | AWAY_LATHE
|
||||
materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000)
|
||||
build_path = /obj/item/melee/baton/security/boomerang
|
||||
category = list(RND_CATEGORY_WEAPONS)
|
||||
category = list(
|
||||
RND_CATEGORY_WEAPONS + RND_SUBCATEGORY_WEAPONS_RANGED
|
||||
)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SECURITY
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
desc = "The foundation of all circuits. All Circuitry go onto this."
|
||||
id = "integrated_circuit"
|
||||
build_path = /obj/item/integrated_circuit
|
||||
build_type = IMPRINTER | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_CORE)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_CATEGORY_CIRCUITRY_CORE
|
||||
)
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/iron = 1000)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -13,8 +15,10 @@
|
||||
desc = "A circuit multitool to mark entities and load them into."
|
||||
id = "circuit_multitool"
|
||||
build_path = /obj/item/multitool/circuit
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_CORE)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_CATEGORY_CIRCUITRY_CORE
|
||||
)
|
||||
materials = list(/datum/material/glass = 1000, /datum/material/iron = 1000)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
|
||||
@@ -23,8 +27,10 @@
|
||||
desc = "A cable that allows certain shells to connect to nearby computers and machines."
|
||||
id = "usb_cable"
|
||||
build_path = /obj/item/usb_cable
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_CORE)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_CATEGORY_CIRCUITRY_CORE
|
||||
)
|
||||
// Yes, it would make sense to make them take plastic, but then less people would make them, and I think they're cool
|
||||
materials = list(/datum/material/iron = 2500)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
@@ -32,10 +38,12 @@
|
||||
/datum/design/component
|
||||
name = "Component ( NULL ENTRY )"
|
||||
desc = "A component that goes into an integrated circuit."
|
||||
build_type = IMPRINTER | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(/datum/material/glass = 1000)
|
||||
departmental_flags = DEPARTMENT_BITFLAG_SCIENCE
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_COMPONENTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_COMPONENTS
|
||||
)
|
||||
|
||||
/datum/design/component/New()
|
||||
. = ..()
|
||||
@@ -334,7 +342,9 @@
|
||||
build_path = /obj/item/circuit_component/pinpointer
|
||||
|
||||
/datum/design/component/bci
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_BCI_COMPONENTS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_BCI_COMPONENTS
|
||||
)
|
||||
|
||||
/datum/design/component/bci/bci_action
|
||||
name = "BCI Action Component"
|
||||
@@ -422,26 +432,32 @@
|
||||
id = "compact_remote_shell"
|
||||
build_path = /obj/item/compact_remote
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 5000)
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/controller_shell
|
||||
name = "Controller Shell"
|
||||
desc = "A handheld shell with several buttons."
|
||||
id = "controller_shell"
|
||||
build_path = /obj/item/controller
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 7000)
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/scanner_shell
|
||||
name = "Scanner Shell"
|
||||
desc = "A handheld scanner shell that can scan entities."
|
||||
id = "scanner_shell"
|
||||
build_path = /obj/item/wiremod_scanner
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 7000)
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/keyboard_shell
|
||||
name = "Keyboard Shell"
|
||||
@@ -449,48 +465,58 @@
|
||||
id = "keyboard_shell"
|
||||
build_path = /obj/item/keyboard_shell
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 10000)
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list("Circuitry", "Shells")
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/gun_shell
|
||||
name = "Gun Shell"
|
||||
desc = "A handheld shell that can fire projectiles to output entities."
|
||||
id = "gun_shell"
|
||||
build_path = /obj/item/gun/energy/wiremod_gun
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 10000, /datum/material/plasma = 100)
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/bot_shell
|
||||
name = "Bot Shell"
|
||||
desc = "An immobile shell that can store more components. Has a USB port to be able to connect to computers and machines."
|
||||
id = "bot_shell"
|
||||
build_path = /obj/item/shell/bot
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 10000)
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/money_bot_shell
|
||||
name = "Money Bot Shell"
|
||||
desc = "An immobile shell that is similar to a regular bot shell, but accepts monetary inputs and can also dispense money."
|
||||
id = "money_bot_shell"
|
||||
build_path = /obj/item/shell/money_bot
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 10000, /datum/material/gold = 50)
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/drone_shell
|
||||
name = "Drone Shell"
|
||||
desc = "A shell with the ability to move itself around."
|
||||
id = "drone_shell"
|
||||
build_path = /obj/item/shell/drone
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
build_type = COMPONENT_PRINTER
|
||||
materials = list(
|
||||
/datum/material/glass = 2000,
|
||||
/datum/material/iron = 11000,
|
||||
/datum/material/gold = 500,
|
||||
)
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/server_shell
|
||||
name = "Server Shell"
|
||||
@@ -502,8 +528,10 @@
|
||||
/datum/material/gold = 1500,
|
||||
)
|
||||
build_path = /obj/item/shell/server
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/airlock_shell
|
||||
name = "Airlock Shell"
|
||||
@@ -514,8 +542,10 @@
|
||||
/datum/material/iron = 15000,
|
||||
)
|
||||
build_path = /obj/item/shell/airlock
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/dispenser_shell
|
||||
name = "Dispenser Shell"
|
||||
@@ -526,8 +556,10 @@
|
||||
/datum/material/iron = 15000,
|
||||
)
|
||||
build_path = /obj/item/shell/dispenser
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/bci_shell
|
||||
name = "Brain-Computer Interface Shell"
|
||||
@@ -538,8 +570,10 @@
|
||||
/datum/material/iron = 8000,
|
||||
)
|
||||
build_path = /obj/item/shell/bci
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/scanner_gate_shell
|
||||
name = "Scanner Gate Shell"
|
||||
@@ -550,16 +584,20 @@
|
||||
/datum/material/iron = 12000,
|
||||
)
|
||||
build_path = /obj/item/shell/scanner_gate
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/board/bci_implanter
|
||||
name = "Brain-Computer Interface Manipulation Chamber"
|
||||
desc = "A machine that, when given a brain-computer interface, will implant it into an occupant. Otherwise, will remove any brain-computer interfaces they already have."
|
||||
id = "bci_implanter"
|
||||
build_path = /obj/item/circuitboard/machine/bci_implanter
|
||||
build_type = IMPRINTER | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_CORE)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_CATEGORY_CIRCUITRY_CORE
|
||||
)
|
||||
|
||||
/datum/design/assembly_shell
|
||||
name = "Assembly Shell"
|
||||
@@ -567,8 +605,10 @@
|
||||
id = "assembly_shell"
|
||||
materials = list(/datum/material/glass = 2000, /datum/material/iron = 5000)
|
||||
build_path = /obj/item/assembly/wiremod
|
||||
build_type = PROTOLATHE | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_CIRCUITRY, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
/datum/design/mod_module_shell
|
||||
name = "MOD Module Shell"
|
||||
@@ -576,5 +616,7 @@
|
||||
id = "module_shell"
|
||||
materials = list(/datum/material/glass = 2000)
|
||||
build_path = /obj/item/mod/module/circuit
|
||||
build_type = MECHFAB | COMPONENT_PRINTER
|
||||
category = list(RND_CATEGORY_MOD_MODULES, RND_CATEGORY_SHELLS)
|
||||
build_type = COMPONENT_PRINTER
|
||||
category = list(
|
||||
RND_CATEGORY_CIRCUITRY + RND_SUBCATEGORY_CIRCUITRY_SHELLS
|
||||
)
|
||||
|
||||
@@ -59,10 +59,12 @@
|
||||
|
||||
// We're probably going to get more than one update (design) at a time, so batch
|
||||
// them together.
|
||||
addtimer(CALLBACK(src, .proc/update_designs), 0.25 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
addtimer(CALLBACK(src, .proc/update_designs), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
|
||||
/// Updates the list of designs this fabricator can print.
|
||||
/obj/machinery/rnd/production/proc/update_designs()
|
||||
var/previous_design_count = cached_designs.len
|
||||
|
||||
cached_designs.Cut()
|
||||
|
||||
for(var/design_id in stored_research.researched_designs)
|
||||
@@ -71,6 +73,12 @@
|
||||
if((isnull(allowed_department_flags) || (design.departmental_flags & allowed_department_flags)) && (design.build_type & allowed_buildtypes))
|
||||
cached_designs |= design
|
||||
|
||||
var/design_delta = cached_designs.len - previous_design_count
|
||||
|
||||
if(design_delta > 0)
|
||||
say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].")
|
||||
playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE)
|
||||
|
||||
update_static_data_for_all_viewers()
|
||||
|
||||
/obj/machinery/rnd/production/RefreshParts()
|
||||
@@ -82,6 +90,7 @@
|
||||
/obj/machinery/rnd/production/ui_assets(mob/user)
|
||||
return list(
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
|
||||
get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
)
|
||||
|
||||
/obj/machinery/rnd/production/ui_interact(mob/user, datum/tgui/ui)
|
||||
@@ -97,6 +106,9 @@
|
||||
var/list/data = list()
|
||||
var/list/designs = list()
|
||||
|
||||
var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
var/size32x32 = "[spritesheet.name]32x32"
|
||||
|
||||
for(var/datum/design/design in cached_designs)
|
||||
var/cost = list()
|
||||
|
||||
@@ -104,16 +116,20 @@
|
||||
var/coefficient = efficient_with(design.build_path) ? efficiency_coeff : 1
|
||||
cost[material.name] = design.materials[material] * coefficient
|
||||
|
||||
var/icon_size = spritesheet.icon_size_id(design.id)
|
||||
|
||||
designs[design.id] = list(
|
||||
"name" = design.name,
|
||||
"desc" = design.get_description(),
|
||||
"cost" = cost,
|
||||
"id" = design.id,
|
||||
"categories" = design.category
|
||||
"categories" = design.category,
|
||||
"icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]",
|
||||
"constructionTime" = 0
|
||||
)
|
||||
|
||||
data["designs"] = designs
|
||||
data["fab_name"] = name
|
||||
data["fabName"] = name
|
||||
|
||||
return data
|
||||
|
||||
@@ -121,8 +137,10 @@
|
||||
var/list/data = list()
|
||||
|
||||
data["materials"] = materials.mat_container?.ui_data()
|
||||
data["on_hold"] = materials.on_hold()
|
||||
data["onHold"] = materials.on_hold()
|
||||
data["busy"] = busy
|
||||
data["materialMaximum"] = materials.local_size
|
||||
data["queue"] = list()
|
||||
|
||||
return data
|
||||
|
||||
|
||||
@@ -41,14 +41,14 @@
|
||||
var/list/available_experiments = list()
|
||||
/// Completed experiments
|
||||
var/list/completed_experiments = list()
|
||||
|
||||
|
||||
/**
|
||||
* Assoc list of relationships with various partners
|
||||
* scientific_cooperation[partner_typepath] = relationship
|
||||
*/
|
||||
var/list/scientific_cooperation
|
||||
/**
|
||||
* Assoc list of papers already published by the crew.
|
||||
* Assoc list of papers already published by the crew.
|
||||
* published_papers[experiment_typepath][tier] = paper
|
||||
* Filled with nulls on init, populated only on publication.
|
||||
*/
|
||||
@@ -456,7 +456,7 @@
|
||||
|
||||
/datum/techweb/specialized/autounlocking
|
||||
var/design_autounlock_buildtypes = NONE
|
||||
var/design_autounlock_categories = list("initial") //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it.
|
||||
var/design_autounlock_categories = list(RND_CATEGORY_INITIAL) //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it.
|
||||
var/node_autounlock_ids = list() //autounlock nodes of this type.
|
||||
|
||||
/datum/techweb/specialized/autounlocking/New()
|
||||
@@ -512,7 +512,7 @@
|
||||
|
||||
// If we haven't published a paper in the same topic ...
|
||||
if(locate(paper_to_add.experiment_path) in published_papers[paper_to_add.experiment_path])
|
||||
return TRUE
|
||||
return TRUE
|
||||
// Quickly add and complete it.
|
||||
// PS: It's also possible to use add_experiment() together with a list/available_experiments check
|
||||
// to determine if we need to run all this, but this pretty much does the same while only needing one evaluation.
|
||||
@@ -527,6 +527,6 @@
|
||||
complete_experiment(experiment)
|
||||
if(length(GLOB.experiment_handlers))
|
||||
var/datum/component/experiment_handler/handler = GLOB.experiment_handlers[1]
|
||||
handler.announce_message_to_all("The [experiment.name] has been completed!")
|
||||
|
||||
handler.announce_message_to_all("The [experiment.name] has been completed!")
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -15,31 +15,67 @@
|
||||
"basic_micro_laser",
|
||||
"basic_scanning",
|
||||
"bepis",
|
||||
"blast",
|
||||
"bounced_radio",
|
||||
"bowl",
|
||||
"bucket",
|
||||
"c38_rubber",
|
||||
"c-reader",
|
||||
"circuit_imprinter",
|
||||
"c38_rubber",
|
||||
"camera_assembly",
|
||||
"camera_film",
|
||||
"camera",
|
||||
"capbox",
|
||||
"chisel",
|
||||
"circuit_imprinter_offstation",
|
||||
"circuit_imprinter",
|
||||
"circuit",
|
||||
"circuitgreen",
|
||||
"circuitred",
|
||||
"coffee_cartridge",
|
||||
"coffeemaker",
|
||||
"coffeepot",
|
||||
"coffee_cartridge",
|
||||
"condenser",
|
||||
"conveyor_belt",
|
||||
"conveyor_switch",
|
||||
"custom_vendor_refill",
|
||||
"design_disk",
|
||||
"destructive_analyzer",
|
||||
"destructive_scanner",
|
||||
"desttagger",
|
||||
"doppler_array",
|
||||
"drinking_glass",
|
||||
"earmuffs",
|
||||
"electropack",
|
||||
"experi_scanner",
|
||||
"experimentor",
|
||||
"extinguisher",
|
||||
"fax",
|
||||
"fishing_rod",
|
||||
"flashlight",
|
||||
"fluid_ducts",
|
||||
"foam_dart",
|
||||
"fork",
|
||||
"gas_filter",
|
||||
"handcuffs_s",
|
||||
"handlabel",
|
||||
"health_sensor",
|
||||
"holodisk",
|
||||
"igniter",
|
||||
"infrared_emitter",
|
||||
"intercom_frame",
|
||||
"kitchen_knife",
|
||||
"laptop",
|
||||
"light_bulb",
|
||||
"light_tube",
|
||||
"mechfab",
|
||||
"micro_mani",
|
||||
"miniature_power_cell",
|
||||
"newscaster_frame",
|
||||
"oven_tray",
|
||||
"packagewrap",
|
||||
"pet_carrier",
|
||||
"plasmaglass",
|
||||
"plasmaman_gas_filter",
|
||||
"plasmareinforcedglass",
|
||||
"plasteel",
|
||||
"plastic_fork",
|
||||
@@ -47,28 +83,49 @@
|
||||
"plastic_spoon",
|
||||
"plastitanium",
|
||||
"plastitaniumglass",
|
||||
"plasmaman_gas_filter",
|
||||
"plate",
|
||||
"prox_sensor",
|
||||
"radio_headset",
|
||||
"rdconsole",
|
||||
"rdserver",
|
||||
"rdservercontrol",
|
||||
"restaurant_portal",
|
||||
"receiver",
|
||||
"recorder",
|
||||
"rglass",
|
||||
"roll",
|
||||
"salestagger",
|
||||
"sec_38",
|
||||
"sec_Islug",
|
||||
"sec_beanbag_slug",
|
||||
"sec_dart",
|
||||
"sec_Islug",
|
||||
"sec_rshot",
|
||||
"servingtray",
|
||||
"shaker",
|
||||
"shot_glass",
|
||||
"signaler",
|
||||
"slime_scanner",
|
||||
"solar_panel",
|
||||
"solar_tracker",
|
||||
"space_heater",
|
||||
"spoon",
|
||||
"status_display_frame",
|
||||
"sticky_tape",
|
||||
"tablet",
|
||||
"tape",
|
||||
"tech_disk",
|
||||
"timer",
|
||||
"titaniumglass",
|
||||
"toner",
|
||||
"toner_large",
|
||||
"toner",
|
||||
"toy_armblade",
|
||||
"toy_balloon",
|
||||
"toygun",
|
||||
"trapdoor_electronics",
|
||||
"turbine_part_compressor",
|
||||
"turbine_part_rotor",
|
||||
"turbine_part_stator",
|
||||
"turret_control",
|
||||
"voice_analyzer",
|
||||
"watering_can",
|
||||
)
|
||||
|
||||
@@ -216,6 +273,7 @@
|
||||
"dropper",
|
||||
"hemostat",
|
||||
"large_beaker",
|
||||
"mmi_m",
|
||||
"operating",
|
||||
"petri_dish",
|
||||
"pillbottle",
|
||||
@@ -551,6 +609,7 @@
|
||||
"forcefield_projector",
|
||||
"magboots",
|
||||
"rcd_loaded",
|
||||
"rcd_ammo",
|
||||
"rpd_loaded",
|
||||
"sheetifier",
|
||||
"weldingmask",
|
||||
|
||||
@@ -11,23 +11,32 @@
|
||||
subsystem_type = /datum/controller/subsystem/processing/fastprocess
|
||||
|
||||
/// Current items in the build queue.
|
||||
var/list/queue = list()
|
||||
var/list/datum/design/queue = list()
|
||||
|
||||
/// Whether or not the machine is building the entire queue automagically.
|
||||
var/process_queue = FALSE
|
||||
|
||||
/// The current design datum that the machine is building.
|
||||
var/datum/design/being_built
|
||||
|
||||
/// World time when the build will finish.
|
||||
var/build_finish = 0
|
||||
|
||||
/// World time when the build started.
|
||||
var/build_start = 0
|
||||
|
||||
/// The job ID of the part currently being processed. This is used for ordering list items for the client UI.
|
||||
var/top_job_id = 0
|
||||
|
||||
/// Reference to all materials used in the creation of the item being_built.
|
||||
var/list/build_materials
|
||||
|
||||
/// Part currently stored in the Exofab.
|
||||
var/obj/item/stored_part
|
||||
|
||||
/// Coefficient for the speed of item building. Based on the installed parts.
|
||||
var/time_coeff = 1
|
||||
|
||||
/// Coefficient for the efficiency of material usage in item building. Based on the installed parts.
|
||||
var/component_coeff = 1
|
||||
|
||||
@@ -40,37 +49,13 @@
|
||||
/// Reference to a remote material inventory, such as an ore silo.
|
||||
var/datum/component/remote_materials/rmat
|
||||
|
||||
/// A list of part sets used for TGUI static data. Updated on Init() and syncing with the R&D console.
|
||||
var/list/final_sets = list()
|
||||
|
||||
/// A list of individual parts used for TGUI static data. Updated on Init() and syncing with the R&D console.
|
||||
var/list/buildable_parts = list()
|
||||
|
||||
/// A list of categories that valid MECHFAB design datums will broadly categorise themselves under.
|
||||
var/list/part_sets = list(
|
||||
"Cyborg",
|
||||
"Ripley",
|
||||
"Odysseus",
|
||||
"Clarke",
|
||||
"Gygax",
|
||||
"Durand",
|
||||
"H.O.N.K",
|
||||
"Phazon",
|
||||
"Savannah-Ivanov",
|
||||
"Exosuit Equipment",
|
||||
"Exosuit Ammunition",
|
||||
"Cyborg Upgrade Modules",
|
||||
"Cybernetics",
|
||||
"Implants",
|
||||
"Control Interfaces",
|
||||
"MOD Construction",
|
||||
"MOD Modules",
|
||||
"Misc"
|
||||
)
|
||||
/// All designs in the techweb that can be fabricated by this machine, since the last update.
|
||||
var/list/datum/design/cached_designs
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/Initialize(mapload)
|
||||
stored_research = SSresearch.science_tech
|
||||
rmat = AddComponent(/datum/component/remote_materials, "mechfab", mapload && link_on_init, mat_container_flags=BREAKDOWN_FLAGS_LATHE)
|
||||
cached_designs = list()
|
||||
RefreshParts() //Recalculating local material sizes if the fab isn't linked
|
||||
update_menu_tech()
|
||||
RegisterSignal(
|
||||
@@ -85,7 +70,7 @@
|
||||
|
||||
// We're probably going to get more than one update (design) at a time, so batch
|
||||
// them together.
|
||||
addtimer(CALLBACK(src, .proc/update_menu_tech), 0.25 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
addtimer(CALLBACK(src, .proc/update_menu_tech), 2 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/RefreshParts()
|
||||
. = ..()
|
||||
@@ -134,115 +119,25 @@
|
||||
balloon_alert(user, "rotated to [dir2text(dir)].")
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Generates an info list for a given part.
|
||||
*
|
||||
* Returns a list of part information.
|
||||
* * D - Design datum to get information on.
|
||||
* * categories - Boolean, whether or not to parse snowflake categories into the part information list.
|
||||
*/
|
||||
/obj/machinery/mecha_part_fabricator/proc/output_part_info(datum/design/D, categories = FALSE)
|
||||
var/cost = list()
|
||||
for(var/c in D.materials)
|
||||
var/datum/material/M = c
|
||||
cost[M.name] = get_resource_cost_w_coeff(D, M)
|
||||
|
||||
var/obj/built_item = D.build_path
|
||||
|
||||
var/list/category_override = null
|
||||
var/list/sub_category = null
|
||||
|
||||
if(categories)
|
||||
// Handle some special cases to build up sub-categories for the fab interface.
|
||||
// Start with checking if this design builds a cyborg module.
|
||||
if(ispath(built_item, /obj/item/borg/upgrade))
|
||||
var/obj/item/borg/upgrade/U = built_item
|
||||
var/model_types = initial(U.model_flags)
|
||||
sub_category = list()
|
||||
if(model_types)
|
||||
if(model_types & BORG_MODEL_SECURITY)
|
||||
sub_category += "Security"
|
||||
if(model_types & BORG_MODEL_MINER)
|
||||
sub_category += "Mining"
|
||||
if(model_types & BORG_MODEL_JANITOR)
|
||||
sub_category += "Janitor"
|
||||
if(model_types & BORG_MODEL_MEDICAL)
|
||||
sub_category += "Medical"
|
||||
if(model_types & BORG_MODEL_ENGINEERING)
|
||||
sub_category += "Engineering"
|
||||
else
|
||||
sub_category += "All Cyborgs"
|
||||
|
||||
else if(ispath(built_item, /obj/item/mecha_parts/mecha_equipment))
|
||||
var/obj/item/mecha_parts/mecha_equipment/E = built_item
|
||||
var/mech_types = initial(E.mech_flags)
|
||||
sub_category = "Equipment"
|
||||
if(mech_types)
|
||||
category_override = list()
|
||||
if(mech_types & EXOSUIT_MODULE_RIPLEY)
|
||||
category_override += "Ripley"
|
||||
if(mech_types & EXOSUIT_MODULE_ODYSSEUS)
|
||||
category_override += "Odysseus"
|
||||
if(mech_types & EXOSUIT_MODULE_CLARKE)
|
||||
category_override += "Clarke"
|
||||
if(mech_types & EXOSUIT_MODULE_GYGAX)
|
||||
category_override += "Gygax"
|
||||
if(mech_types & EXOSUIT_MODULE_DURAND)
|
||||
category_override += "Durand"
|
||||
if(mech_types & EXOSUIT_MODULE_HONK)
|
||||
category_override += "H.O.N.K"
|
||||
if(mech_types & EXOSUIT_MODULE_PHAZON)
|
||||
category_override += "Phazon"
|
||||
if(mech_types & EXOSUIT_MODULE_SAVANNAH)
|
||||
category_override += "Savannah-Ivanov"
|
||||
|
||||
else if(ispath(built_item, /obj/item/borg_restart_board))
|
||||
sub_category += "All Cyborgs" //Otherwise the restart board shows in the "parts" category, which seems dumb
|
||||
|
||||
else if(istype(D, /datum/design/module))
|
||||
var/datum/design/module/module_design = D
|
||||
sub_category = list(module_design.department_type)
|
||||
|
||||
var/list/part = list(
|
||||
"name" = D.name,
|
||||
"desc" = D.get_description(),
|
||||
"printTime" = get_construction_time_w_coeff(initial(D.construction_time))/10,
|
||||
"cost" = cost,
|
||||
"id" = D.id,
|
||||
"subCategory" = sub_category,
|
||||
"category_override" = category_override,
|
||||
"searchMeta" = D.search_metadata
|
||||
)
|
||||
|
||||
return part
|
||||
|
||||
/**
|
||||
* Updates the `final_sets` and `buildable_parts` for the current mecha fabricator.
|
||||
*/
|
||||
/obj/machinery/mecha_part_fabricator/proc/update_menu_tech()
|
||||
final_sets = list()
|
||||
buildable_parts = list()
|
||||
final_sets += part_sets
|
||||
var/previous_design_count = cached_designs.len
|
||||
|
||||
cached_designs.Cut()
|
||||
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
if(D.build_type & MECHFAB)
|
||||
// This is for us.
|
||||
var/list/part = output_part_info(D, TRUE)
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(v)
|
||||
|
||||
if(part["category_override"])
|
||||
for(var/cat in part["category_override"])
|
||||
buildable_parts[cat] += list(part)
|
||||
if(!(cat in part_sets))
|
||||
final_sets += cat
|
||||
continue
|
||||
if(design.build_type & MECHFAB)
|
||||
cached_designs |= design
|
||||
|
||||
for(var/cat in part_sets)
|
||||
// Find all matching categories.
|
||||
if(!(cat in D.category))
|
||||
continue
|
||||
var/design_delta = cached_designs.len - previous_design_count
|
||||
|
||||
buildable_parts[cat] += list(part)
|
||||
if(design_delta > 0)
|
||||
say("Received [design_delta] new design[design_delta == 1 ? "" : "s"].")
|
||||
playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE)
|
||||
|
||||
update_static_data_for_all_viewers()
|
||||
|
||||
@@ -399,20 +294,10 @@
|
||||
|
||||
say("The fabrication of [I] is now complete.")
|
||||
I.forceMove(exit)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Adds a list of datum designs to the build queue.
|
||||
*
|
||||
* Will only add designs that are in this machine's stored techweb.
|
||||
* Does final checks for datum IDs and makes sure this machine can build the designs.
|
||||
* * part_list - List of datum design ids for designs to add to the queue.
|
||||
*/
|
||||
/obj/machinery/mecha_part_fabricator/proc/add_part_set_to_queue(list/part_list)
|
||||
for(var/v in stored_research.researched_designs)
|
||||
var/datum/design/D = SSresearch.techweb_design_by_id(v)
|
||||
if((D.build_type & MECHFAB) && (D.id in part_list))
|
||||
add_to_queue(D)
|
||||
top_job_id += 1
|
||||
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Adds a datum design to the build queue.
|
||||
@@ -423,9 +308,11 @@
|
||||
/obj/machinery/mecha_part_fabricator/proc/add_to_queue(datum/design/D)
|
||||
if(!istype(queue))
|
||||
queue = list()
|
||||
|
||||
if(D)
|
||||
queue[++queue.len] = D
|
||||
return TRUE
|
||||
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
@@ -440,21 +327,6 @@
|
||||
queue.Cut(index,++index)
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
* Generates a list of parts formatted for tgui based on the current build queue.
|
||||
*
|
||||
* Returns a formatted list of lists containing formatted part information for every part in the build queue.
|
||||
*/
|
||||
/obj/machinery/mecha_part_fabricator/proc/list_queue()
|
||||
if(!istype(queue) || !length(queue))
|
||||
return null
|
||||
|
||||
var/list/queued_parts = list()
|
||||
for(var/datum/design/D in queue)
|
||||
var/list/part = output_part_info(D)
|
||||
queued_parts += list(part)
|
||||
return queued_parts
|
||||
|
||||
/**
|
||||
* Calculates the coefficient-modified resource cost of a single material component of a design's recipe.
|
||||
*
|
||||
@@ -478,7 +350,8 @@
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/ui_assets(mob/user)
|
||||
return list(
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials)
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
|
||||
get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
)
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/ui_interact(mob/user, datum/tgui/ui)
|
||||
@@ -489,9 +362,30 @@
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/ui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/list/designs = list()
|
||||
|
||||
data["partSets"] = final_sets
|
||||
data["buildableParts"] = buildable_parts
|
||||
var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
var/size32x32 = "[spritesheet.name]32x32"
|
||||
|
||||
for(var/datum/design/design in cached_designs)
|
||||
var/cost = list()
|
||||
|
||||
for(var/datum/material/material in design.materials)
|
||||
cost[material.name] = get_resource_cost_w_coeff(design, material)
|
||||
|
||||
var/icon_size = spritesheet.icon_size_id(design.id)
|
||||
|
||||
designs[design.id] = list(
|
||||
"name" = design.name,
|
||||
"desc" = design.get_description(),
|
||||
"cost" = cost,
|
||||
"id" = design.id,
|
||||
"categories" = design.category,
|
||||
"icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]",
|
||||
"constructionTime" = get_construction_time_w_coeff(design.construction_time)
|
||||
)
|
||||
|
||||
data["designs"] = designs
|
||||
|
||||
return data
|
||||
|
||||
@@ -499,30 +393,34 @@
|
||||
var/list/data = list()
|
||||
|
||||
data["materials"] = rmat.mat_container?.ui_data()
|
||||
data["queue"] = list()
|
||||
data["processing"] = process_queue
|
||||
|
||||
if(being_built)
|
||||
var/list/part = list(
|
||||
"name" = being_built.name,
|
||||
"duration" = build_finish - world.time,
|
||||
"printTime" = get_construction_time_w_coeff(initial(being_built.construction_time))
|
||||
)
|
||||
data["buildingPart"] = part
|
||||
else
|
||||
data["buildingPart"] = null
|
||||
data["queue"] += list(list(
|
||||
"jobId" = top_job_id,
|
||||
"designId" = being_built.id,
|
||||
"processing" = TRUE,
|
||||
"timeLeft" = (build_finish - world.time)
|
||||
))
|
||||
|
||||
data["queue"] = list_queue()
|
||||
var/offset = 0
|
||||
|
||||
if(stored_part)
|
||||
data["storedPart"] = stored_part.name
|
||||
else
|
||||
data["storedPart"] = null
|
||||
for(var/datum/design/design in queue)
|
||||
offset += 1
|
||||
|
||||
data["isProcessingQueue"] = process_queue
|
||||
data["queue"] += list(list(
|
||||
"jobId" = top_job_id + offset,
|
||||
"designId" = design.id,
|
||||
"processing" = FALSE,
|
||||
"timeLeft" = get_construction_time_w_coeff(design.construction_time) / 10
|
||||
))
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/ui_act(action, list/params)
|
||||
. = ..()
|
||||
|
||||
if(.)
|
||||
return
|
||||
|
||||
@@ -532,69 +430,68 @@
|
||||
usr.set_machine(src)
|
||||
|
||||
switch(action)
|
||||
if("add_queue_set")
|
||||
// Add all parts of a set to queue
|
||||
var/part_list = params["part_list"]
|
||||
add_part_set_to_queue(part_list)
|
||||
return
|
||||
if("add_queue_part")
|
||||
// Add a specific part to queue
|
||||
var/id = params["id"]
|
||||
if(!stored_research.researched_designs.Find(id))
|
||||
stack_trace("ID did not map to a researched datum [id]")
|
||||
if("build")
|
||||
var/designs = params["designs"]
|
||||
|
||||
if(!islist(designs))
|
||||
return
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(id)
|
||||
if(!(design.build_type & MECHFAB) || design.id != id)
|
||||
return
|
||||
add_to_queue(design)
|
||||
|
||||
for(var/design_id in designs)
|
||||
if(!istext(design_id))
|
||||
continue
|
||||
|
||||
if(!stored_research.researched_designs.Find(design_id))
|
||||
continue
|
||||
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(design_id)
|
||||
|
||||
if(!(design.build_type & MECHFAB) || design.id != design_id)
|
||||
continue
|
||||
|
||||
add_to_queue(design)
|
||||
|
||||
if(params["now"])
|
||||
if(process_queue)
|
||||
return
|
||||
|
||||
process_queue = TRUE
|
||||
|
||||
if(!being_built)
|
||||
begin_processing()
|
||||
|
||||
return
|
||||
|
||||
if("del_queue_part")
|
||||
// Delete a specific from from the queue
|
||||
var/index = text2num(params["index"])
|
||||
remove_from_queue(index)
|
||||
|
||||
return
|
||||
|
||||
if("clear_queue")
|
||||
// Delete everything from queue
|
||||
queue.Cut()
|
||||
|
||||
return
|
||||
|
||||
if("build_queue")
|
||||
// Build everything in queue
|
||||
if(process_queue)
|
||||
return
|
||||
|
||||
process_queue = TRUE
|
||||
|
||||
if(!being_built)
|
||||
begin_processing()
|
||||
|
||||
return
|
||||
|
||||
if("stop_queue")
|
||||
// Pause queue building. Also known as stop.
|
||||
process_queue = FALSE
|
||||
return
|
||||
if("build_part")
|
||||
// Build a single part
|
||||
if(being_built || process_queue)
|
||||
return
|
||||
|
||||
var/id = params["id"]
|
||||
if(!stored_research.researched_designs.Find(id))
|
||||
stack_trace("ID did not map to a researched datum [id]")
|
||||
return
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(id)
|
||||
if(!(design.build_type & MECHFAB) || design.id != id)
|
||||
return
|
||||
if(build_part(design))
|
||||
on_start_printing()
|
||||
begin_processing()
|
||||
|
||||
return
|
||||
if("move_queue_part")
|
||||
// Moves a part up or down in the queue.
|
||||
var/index = text2num(params["index"])
|
||||
var/new_index = index + text2num(params["newindex"])
|
||||
if(isnum(index) && isnum(new_index) && ISINTEGER(index) && ISINTEGER(new_index))
|
||||
if(ISINRANGE(new_index,1,length(queue)))
|
||||
queue.Swap(index,new_index)
|
||||
return
|
||||
|
||||
if("remove_mat")
|
||||
var/datum/material/material = locate(params["ref"])
|
||||
var/amount = text2num(params["amount"])
|
||||
|
||||
@@ -128,20 +128,27 @@
|
||||
|
||||
/obj/machinery/component_printer/ui_static_data(mob/user)
|
||||
var/list/data = list()
|
||||
|
||||
var/list/designs = list()
|
||||
|
||||
var/datum/asset/spritesheet/research_designs/spritesheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
var/size32x32 = "[spritesheet.name]32x32"
|
||||
|
||||
// for (var/datum/design/component/component_design_type as anything in subtypesof(/datum/design/component))
|
||||
for (var/researched_design_id in techweb.researched_designs)
|
||||
var/datum/design/design = SSresearch.techweb_design_by_id(researched_design_id)
|
||||
if (!(design.build_type & COMPONENT_PRINTER))
|
||||
continue
|
||||
|
||||
var/icon_size = spritesheet.icon_size_id(design.id)
|
||||
|
||||
designs[researched_design_id] = list(
|
||||
"name" = design.name,
|
||||
"description" = design.desc,
|
||||
"materials" = get_material_cost_data(design.materials),
|
||||
"desc" = design.desc,
|
||||
"cost" = get_material_cost_data(design.materials),
|
||||
"id" = researched_design_id,
|
||||
"categories" = design.category,
|
||||
"icon" = "[icon_size == size32x32 ? "" : "[icon_size] "][design.id]",
|
||||
"constructionTime" = -1
|
||||
)
|
||||
|
||||
data["designs"] = designs
|
||||
@@ -228,7 +235,8 @@
|
||||
|
||||
/obj/machinery/debug_component_printer/ui_assets(mob/user)
|
||||
return list(
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials)
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
|
||||
get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
)
|
||||
|
||||
/obj/machinery/debug_component_printer/ui_act(action, list/params)
|
||||
@@ -296,7 +304,8 @@
|
||||
|
||||
/obj/machinery/module_duplicator/ui_assets(mob/user)
|
||||
return list(
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials)
|
||||
get_asset_datum(/datum/asset/spritesheet/sheetmaterials),
|
||||
get_asset_datum(/datum/asset/spritesheet/research_designs)
|
||||
)
|
||||
|
||||
/obj/machinery/module_duplicator/ui_act(action, list/params)
|
||||
@@ -411,6 +420,8 @@
|
||||
balloon_alert(user, "module has been saved.")
|
||||
playsound(src, 'sound/machines/ping.ogg', 50)
|
||||
|
||||
update_static_data_for_all_viewers()
|
||||
|
||||
/obj/machinery/module_duplicator/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
data["materials"] = materials.mat_container.ui_data()
|
||||
@@ -422,12 +433,15 @@
|
||||
var/list/designs = list()
|
||||
|
||||
var/index = 1
|
||||
|
||||
for (var/list/design as anything in scanned_designs)
|
||||
designs["[index]"] = list(
|
||||
"name" = design["name"],
|
||||
"description" = design["desc"],
|
||||
"materials" = get_material_cost_data(design["materials"]),
|
||||
"categories" = list("Circuitry"),
|
||||
"desc" = design["desc"],
|
||||
"cost" = get_material_cost_data(design["materials"]),
|
||||
"id" = "[index]",
|
||||
"icon" = "integrated_circuit",
|
||||
"categories" = list("/Saved Circuits"),
|
||||
)
|
||||
index++
|
||||
|
||||
|
||||
@@ -1,224 +0,0 @@
|
||||
import { useBackend, useLocalState } from '../backend';
|
||||
import { Button, LabeledList, Section, ProgressBar, Flex, Box, Table, Collapsible, Input, Dimmer, Icon } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { capitalize } from 'common/string';
|
||||
|
||||
export const Autolathe = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
// Extract `health` and `color` variables from the `data` object.
|
||||
const {
|
||||
materialtotal,
|
||||
materialsmax,
|
||||
materials = [],
|
||||
categories = [],
|
||||
designs = [],
|
||||
active,
|
||||
} = data;
|
||||
const [current_category, setCategory] = useLocalState(
|
||||
context,
|
||||
'current_category',
|
||||
'None'
|
||||
);
|
||||
const filteredmaterials = materials.filter(
|
||||
(material) => material.mineral_amount > 0
|
||||
);
|
||||
return (
|
||||
<Window title="Autolathe" width={600} height={600}>
|
||||
<Window.Content scrollable>
|
||||
<Section title="Total Materials">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Total Materials">
|
||||
<ProgressBar
|
||||
value={materialtotal}
|
||||
minValue={0}
|
||||
maxValue={materialsmax}
|
||||
ranges={{
|
||||
'good': [materialsmax * 0.85, materialsmax],
|
||||
'average': [materialsmax * 0.25, materialsmax * 0.85],
|
||||
'bad': [0, materialsmax * 0.25],
|
||||
}}>
|
||||
{materialtotal + '/' + materialsmax + ' cm³'}
|
||||
</ProgressBar>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item>
|
||||
{filteredmaterials.length > 0 && (
|
||||
<Collapsible title="Materials">
|
||||
<LabeledList>
|
||||
{filteredmaterials.map((filteredmaterial) => (
|
||||
<LabeledList.Item
|
||||
key={filteredmaterial.id}
|
||||
label={capitalize(filteredmaterial.name)}>
|
||||
<ProgressBar
|
||||
style={{
|
||||
transform: 'scaleX(-1) scaleY(1)',
|
||||
}}
|
||||
value={materialsmax - filteredmaterial.mineral_amount}
|
||||
maxValue={materialsmax}
|
||||
color="black"
|
||||
backgroundColor={filteredmaterial.matcolour}>
|
||||
<div style={{ transform: 'scaleX(-1)' }}>
|
||||
{filteredmaterial.mineral_amount + ' cm³'}
|
||||
</div>
|
||||
</ProgressBar>
|
||||
</LabeledList.Item>
|
||||
))}
|
||||
</LabeledList>
|
||||
</Collapsible>
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
<Section title="Search">
|
||||
<Input
|
||||
fluid
|
||||
placeholder="Search Recipes..."
|
||||
selfClear
|
||||
onChange={(e, value) => {
|
||||
if (value.length) {
|
||||
act('search', {
|
||||
to_search: value,
|
||||
});
|
||||
setCategory('results for "' + value + '"');
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</Section>
|
||||
<Section title="Categories">
|
||||
<Box>
|
||||
{categories.map((category) => (
|
||||
// eslint-disable-next-line react/jsx-key
|
||||
<Button
|
||||
selected={current_category === category}
|
||||
content={category}
|
||||
onClick={() => {
|
||||
act('category', {
|
||||
selectedCategory: category,
|
||||
});
|
||||
setCategory(category);
|
||||
}}
|
||||
/>
|
||||
))}
|
||||
</Box>
|
||||
</Section>
|
||||
{current_category.toString() !== 'None' && (
|
||||
<Section
|
||||
title={'Displaying ' + current_category.toString()}
|
||||
buttons={
|
||||
<Button
|
||||
icon="times"
|
||||
content="Close Category"
|
||||
onClick={() => {
|
||||
act('menu');
|
||||
setCategory('None');
|
||||
}}
|
||||
/>
|
||||
}>
|
||||
{active === 1 && (
|
||||
<Dimmer fontSize="32px">
|
||||
<Icon name="cog" spin />
|
||||
{'Building items...'}
|
||||
</Dimmer>
|
||||
)}
|
||||
<Flex direction="row" wrap="nowrap">
|
||||
<Table>
|
||||
{(designs.length &&
|
||||
designs.map((design) => (
|
||||
<Table.Row key={design.id}>
|
||||
<Flex.Item>
|
||||
<Button
|
||||
content={design.name}
|
||||
disabled={design.buildable}
|
||||
onClick={() =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: '1',
|
||||
})
|
||||
}
|
||||
/>
|
||||
</Flex.Item>
|
||||
{design.sheet ? (
|
||||
<Table.Cell>
|
||||
<Flex.Item grow={1}>
|
||||
<Button
|
||||
icon="hammer"
|
||||
content="10"
|
||||
disabled={!design.mult10}
|
||||
onClick={() =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: '10',
|
||||
})
|
||||
}
|
||||
/>
|
||||
<Button
|
||||
icon="hammer"
|
||||
content="25"
|
||||
disabled={!design.mult25}
|
||||
onClick={() =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: '25',
|
||||
})
|
||||
}
|
||||
/>
|
||||
</Flex.Item>
|
||||
</Table.Cell>
|
||||
) : (
|
||||
<Table.Cell>
|
||||
<Flex.Item grow={3}>
|
||||
<Button
|
||||
icon="hammer"
|
||||
content="5"
|
||||
disabled={!design.mult5}
|
||||
onClick={() =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: '5',
|
||||
})
|
||||
}
|
||||
/>
|
||||
<Button
|
||||
icon="hammer"
|
||||
content="10"
|
||||
disabled={!design.mult10}
|
||||
onClick={() =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: '10',
|
||||
})
|
||||
}
|
||||
/>
|
||||
</Flex.Item>
|
||||
</Table.Cell>
|
||||
)}
|
||||
<Table.Cell>
|
||||
<Button.Input
|
||||
content={'[Max:' + design.maxmult + ']'}
|
||||
maxValue={design.maxmult}
|
||||
disabled={design.buildable}
|
||||
backgroundColor={
|
||||
design.buildable ? '#999999' : 'default'
|
||||
}
|
||||
onCommit={(e, value) =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</Table.Cell>
|
||||
{design.cost}
|
||||
</Table.Row>
|
||||
))) || (
|
||||
<Table.Row>
|
||||
<Table.Cell>{'No designs found.'}</Table.Cell>
|
||||
</Table.Row>
|
||||
)}
|
||||
</Table>
|
||||
</Flex>
|
||||
</Section>
|
||||
)}
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,254 @@
|
||||
import { useBackend } from '../backend';
|
||||
import { LabeledList, Section, ProgressBar, Collapsible, Stack, Icon, Box, Tooltip, Button } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { capitalize } from 'common/string';
|
||||
import { Design, MaterialMap } from './Fabrication/Types';
|
||||
import { DesignBrowser } from './Fabrication/DesignBrowser';
|
||||
import { BooleanLike, classes } from 'common/react';
|
||||
import { MaterialCostSequence } from './Fabrication/MaterialCostSequence';
|
||||
import { Material } from './Fabrication/Types';
|
||||
|
||||
type AutolatheDesign = Design & {
|
||||
buildable: BooleanLike;
|
||||
mult5: BooleanLike;
|
||||
mult10: BooleanLike;
|
||||
mult25: BooleanLike;
|
||||
mult50: BooleanLike;
|
||||
sheet: BooleanLike;
|
||||
maxmult: number;
|
||||
};
|
||||
|
||||
type AutolatheData = {
|
||||
materials: Material[];
|
||||
materialtotal: number;
|
||||
materialsmax: number;
|
||||
designs: AutolatheDesign[];
|
||||
active: BooleanLike;
|
||||
};
|
||||
|
||||
export const Autolathe = (props, context) => {
|
||||
const { act, data } = useBackend<AutolatheData>(context);
|
||||
const { materialtotal, materialsmax, materials, designs, active } = data;
|
||||
|
||||
const filteredMaterials = materials.filter((material) => material.amount > 0);
|
||||
|
||||
const availableMaterials: MaterialMap = {};
|
||||
|
||||
for (const material of filteredMaterials) {
|
||||
availableMaterials[material.name] = material.amount;
|
||||
}
|
||||
|
||||
return (
|
||||
<Window title="Autolathe" width={670} height={600}>
|
||||
<Window.Content scrollable>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item>
|
||||
<Section title="Total Materials">
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Total Materials">
|
||||
<ProgressBar
|
||||
value={materialtotal}
|
||||
minValue={0}
|
||||
maxValue={materialsmax}
|
||||
ranges={{
|
||||
'good': [materialsmax * 0.85, materialsmax],
|
||||
'average': [materialsmax * 0.25, materialsmax * 0.85],
|
||||
'bad': [0, materialsmax * 0.25],
|
||||
}}>
|
||||
{materialtotal + '/' + materialsmax + ' cm³'}
|
||||
</ProgressBar>
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item>
|
||||
{filteredMaterials.length > 0 && (
|
||||
<Collapsible title="Materials">
|
||||
<LabeledList>
|
||||
{filteredMaterials.map((material) => (
|
||||
<LabeledList.Item
|
||||
key={material.name}
|
||||
label={capitalize(material.name)}>
|
||||
<ProgressBar
|
||||
style={{
|
||||
transform: 'scaleX(-1) scaleY(1)',
|
||||
}}
|
||||
value={materialsmax - material.amount}
|
||||
maxValue={materialsmax}
|
||||
backgroundColor={material.color}
|
||||
color="black">
|
||||
<div style={{ transform: 'scaleX(-1)' }}>
|
||||
{material.amount + ' cm³'}
|
||||
</div>
|
||||
</ProgressBar>
|
||||
</LabeledList.Item>
|
||||
))}
|
||||
</LabeledList>
|
||||
</Collapsible>
|
||||
)}
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<DesignBrowser
|
||||
busy={!!active}
|
||||
designs={designs}
|
||||
availableMaterials={availableMaterials}
|
||||
buildRecipeElement={(
|
||||
design,
|
||||
availableMaterials,
|
||||
_onPrintDesign
|
||||
) => (
|
||||
<AutolatheRecipe
|
||||
design={design}
|
||||
availableMaterials={availableMaterials}
|
||||
/>
|
||||
)}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
type PrintButtonProps = {
|
||||
design: Design;
|
||||
quantity: number;
|
||||
availableMaterials: MaterialMap;
|
||||
};
|
||||
|
||||
const PrintButton = (props: PrintButtonProps, context) => {
|
||||
const { act, data } = useBackend<AutolatheData>(context);
|
||||
const { design, quantity, availableMaterials } = props;
|
||||
|
||||
const canPrint = !Object.entries(design.cost).some(
|
||||
([material, amount]) =>
|
||||
!availableMaterials[material] ||
|
||||
amount * quantity > (availableMaterials[material] ?? 0)
|
||||
);
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={design}
|
||||
amount={quantity}
|
||||
available={availableMaterials}
|
||||
/>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}
|
||||
color={'transparent'}
|
||||
onClick={() => act('make', { id: design.id, multiplier: quantity })}>
|
||||
×{quantity}
|
||||
</div>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
|
||||
type AutolatheRecipeProps = {
|
||||
design: AutolatheDesign;
|
||||
availableMaterials: MaterialMap;
|
||||
};
|
||||
|
||||
const AutolatheRecipe = (props: AutolatheRecipeProps, context) => {
|
||||
const { act, data } = useBackend<AutolatheData>(context);
|
||||
const { design, availableMaterials } = props;
|
||||
|
||||
const canPrint = !Object.entries(design.cost).some(
|
||||
([material, amount]) =>
|
||||
!availableMaterials[material] ||
|
||||
amount > (availableMaterials[material] ?? 0)
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="FabricatorRecipe">
|
||||
<Tooltip content={design.desc} position="right">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}>
|
||||
<Icon name="question-circle" />
|
||||
</div>
|
||||
</Tooltip>
|
||||
<Tooltip
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={design}
|
||||
amount={1}
|
||||
available={availableMaterials}
|
||||
/>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Title',
|
||||
!canPrint && 'FabricatorRecipe__Title--disabled',
|
||||
])}
|
||||
onClick={() => act('make', { id: design.id, multiplier: 1 })}>
|
||||
<div className="FabricatorRecipe__Icon">
|
||||
<Box
|
||||
width={'32px'}
|
||||
height={'32px'}
|
||||
className={classes(['design32x32', design.icon])}
|
||||
/>
|
||||
</div>
|
||||
<div className="FabricatorRecipe__Label">{design.name}</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
{!!design.mult5 && (
|
||||
<PrintButton
|
||||
design={design}
|
||||
quantity={5}
|
||||
availableMaterials={availableMaterials}
|
||||
/>
|
||||
)}
|
||||
|
||||
{!!design.mult10 && (
|
||||
<PrintButton
|
||||
design={design}
|
||||
quantity={10}
|
||||
availableMaterials={availableMaterials}
|
||||
/>
|
||||
)}
|
||||
|
||||
{!!design.mult25 && (
|
||||
<PrintButton
|
||||
design={design}
|
||||
quantity={25}
|
||||
availableMaterials={availableMaterials}
|
||||
/>
|
||||
)}
|
||||
|
||||
{!!design.mult50 && (
|
||||
<PrintButton
|
||||
design={design}
|
||||
quantity={50}
|
||||
availableMaterials={availableMaterials}
|
||||
/>
|
||||
)}
|
||||
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}>
|
||||
<Button.Input
|
||||
content={'[Max: ' + design.maxmult + ']'}
|
||||
color={'transparent'}
|
||||
maxValue={design.maxmult}
|
||||
onCommit={(_e, value: string) =>
|
||||
act('make', {
|
||||
id: design.id,
|
||||
multiplier: value,
|
||||
})
|
||||
}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,183 +1,106 @@
|
||||
import { createSearch } from 'common/string';
|
||||
import { useBackend, useLocalState } from '../backend';
|
||||
import { Material, MaterialAmount, MaterialFormatting, Materials, MATERIAL_KEYS } from './common/Materials';
|
||||
import { useBackend } from '../backend';
|
||||
import { Material } from './Fabrication/Types';
|
||||
import { Window } from '../layouts';
|
||||
import { Box, Button, Input, Section, Stack, Tabs } from '../components';
|
||||
|
||||
const CATEGORY_ALL = 'All';
|
||||
|
||||
const searchFor = (searchText) =>
|
||||
createSearch(searchText, ([_, thing]) => thing.name + thing.description);
|
||||
|
||||
const getCategory = (category: string[]) => {
|
||||
return category[0] === 'Circuitry' ? category[1] : category[0];
|
||||
};
|
||||
|
||||
type Design = {
|
||||
name: string;
|
||||
description: string;
|
||||
materials: Record<keyof typeof MATERIAL_KEYS, number>;
|
||||
categories: string[];
|
||||
};
|
||||
import { Box, Tooltip, Icon, Stack, Section } from '../components';
|
||||
import { Design } from './Fabrication/Types';
|
||||
import { MaterialCostSequence } from './Fabrication/MaterialCostSequence';
|
||||
import { MaterialMap } from './Fabrication/Types';
|
||||
import { classes } from 'common/react';
|
||||
import { DesignBrowser } from './Fabrication/DesignBrowser';
|
||||
import { MaterialAccessBar } from './Fabrication/MaterialAccessBar';
|
||||
|
||||
type ComponentPrinterData = {
|
||||
designs: Record<string, Design>;
|
||||
materials: Material[];
|
||||
};
|
||||
|
||||
const canProduce = (
|
||||
designMaterials: Design['materials'],
|
||||
storedMaterials: Material[]
|
||||
) => {
|
||||
for (const material of storedMaterials) {
|
||||
const amountNeeded = designMaterials[material.name];
|
||||
|
||||
if (amountNeeded && amountNeeded > material.amount) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
const MaterialCost = (props: { materials: Design['materials'] }) => {
|
||||
return (
|
||||
<Stack>
|
||||
{Object.entries(props.materials).map(([material, amount]) => {
|
||||
return (
|
||||
<Stack.Item key={material} mr={1}>
|
||||
<MaterialAmount
|
||||
name={material as keyof typeof MATERIAL_KEYS}
|
||||
amount={amount}
|
||||
formatting={MaterialFormatting.Locale}
|
||||
style={{
|
||||
transform: 'scale(0.75) translate(0%, 10%)',
|
||||
}}
|
||||
/>
|
||||
</Stack.Item>
|
||||
);
|
||||
})}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
export const ComponentPrinter = (props, context) => {
|
||||
const { act, data } = useBackend<ComponentPrinterData>(context);
|
||||
const { designs, materials } = data;
|
||||
|
||||
const [currentCategory, setCurrentCategory] = useLocalState(
|
||||
context,
|
||||
'category',
|
||||
CATEGORY_ALL
|
||||
);
|
||||
const [searchText, setSearchText] = useLocalState(context, 'searchText', '');
|
||||
// Reduce the material count array to a map of actually available materials.
|
||||
const availableMaterials: MaterialMap = {};
|
||||
|
||||
for (const material of data.materials) {
|
||||
availableMaterials[material.name] = material.amount;
|
||||
}
|
||||
|
||||
return (
|
||||
<Window title="Component Printer" width={900} height={700}>
|
||||
<Window.Content scrollable>
|
||||
<Stack vertical>
|
||||
<Stack.Item>
|
||||
<Section title="Materials">
|
||||
<Materials
|
||||
materials={data.materials || []}
|
||||
onEject={(ref, amount) => {
|
||||
act('remove_mat', {
|
||||
ref: ref,
|
||||
amount: amount,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</Section>
|
||||
<Window title={'Component Printer'} width={670} height={600}>
|
||||
<Window.Content>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item grow>
|
||||
<DesignBrowser
|
||||
designs={Object.values(designs)}
|
||||
availableMaterials={availableMaterials}
|
||||
buildRecipeElement={(
|
||||
design,
|
||||
availableMaterials,
|
||||
_onPrintDesign
|
||||
) => <Recipe design={design} available={availableMaterials} />}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<Stack>
|
||||
<Stack.Item>
|
||||
<Section title="Categories" fill>
|
||||
<Tabs vertical fill>
|
||||
{Object.values(data.designs)
|
||||
.reduce<string[]>(
|
||||
(categories, design) => {
|
||||
const category = getCategory(design.categories);
|
||||
if (categories.indexOf(category) === -1) {
|
||||
return [category, ...categories];
|
||||
} else {
|
||||
return categories;
|
||||
}
|
||||
},
|
||||
[CATEGORY_ALL]
|
||||
)
|
||||
.sort()
|
||||
.map((category) => {
|
||||
return (
|
||||
<Tabs.Tab
|
||||
key={category}
|
||||
onClick={() => setCurrentCategory(category)}
|
||||
selected={category === currentCategory}
|
||||
fluid>
|
||||
{category}
|
||||
</Tabs.Tab>
|
||||
);
|
||||
})}
|
||||
</Tabs>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
|
||||
<Stack.Item basis="100%">
|
||||
<Section title="Parts">
|
||||
<Stack vertical>
|
||||
<Stack.Item>
|
||||
<Input
|
||||
placeholder="Search..."
|
||||
autoFocus
|
||||
fluid
|
||||
value={searchText}
|
||||
onInput={(_, value) => setSearchText(value)}
|
||||
/>
|
||||
</Stack.Item>
|
||||
|
||||
{Object.entries(data.designs)
|
||||
.filter(
|
||||
([_, design]) =>
|
||||
currentCategory === CATEGORY_ALL ||
|
||||
design.categories.indexOf(currentCategory) !== -1
|
||||
)
|
||||
.filter(searchFor(searchText))
|
||||
.map(([designId, design]) => {
|
||||
return (
|
||||
<Stack.Item key={designId}>
|
||||
<Section
|
||||
title={design.name}
|
||||
buttons={
|
||||
<Button
|
||||
onClick={() => {
|
||||
act('print', {
|
||||
designId,
|
||||
});
|
||||
}}
|
||||
disabled={
|
||||
!canProduce(
|
||||
design.materials,
|
||||
data.materials
|
||||
)
|
||||
}
|
||||
px={1.5}>
|
||||
Print
|
||||
</Button>
|
||||
}>
|
||||
<Box inline width="100%">
|
||||
{design.description}
|
||||
</Box>
|
||||
<MaterialCost materials={design.materials} />
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
);
|
||||
})}
|
||||
</Stack>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
<Section>
|
||||
<MaterialAccessBar
|
||||
availableMaterials={data.materials ?? []}
|
||||
onEjectRequested={(material, amount) =>
|
||||
act('remove_mat', { ref: material.ref, amount })
|
||||
}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
const Recipe = (props: { design: Design; available: MaterialMap }, context) => {
|
||||
const { act, data } = useBackend<ComponentPrinterData>(context);
|
||||
const { design, available } = props;
|
||||
|
||||
const canPrint = !Object.entries(design.cost).some(
|
||||
([material, amount]) =>
|
||||
!available[material] || amount > (available[material] ?? 0)
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="FabricatorRecipe">
|
||||
<Tooltip content={design.desc} position="right">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}>
|
||||
<Icon name="question-circle" />
|
||||
</div>
|
||||
</Tooltip>
|
||||
<Tooltip
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={design}
|
||||
amount={1}
|
||||
available={available}
|
||||
/>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Title',
|
||||
!canPrint && 'FabricatorRecipe__Title--disabled',
|
||||
])}
|
||||
onClick={() => act('print', { designId: design.id, amount: 1 })}>
|
||||
<div className="FabricatorRecipe__Icon">
|
||||
<Box
|
||||
width={'32px'}
|
||||
height={'32px'}
|
||||
className={classes(['design32x32', design.icon])}
|
||||
/>
|
||||
</div>
|
||||
<div className="FabricatorRecipe__Label">{design.name}</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,529 +0,0 @@
|
||||
import { uniqBy } from 'common/collections';
|
||||
import { createSearch } from 'common/string';
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend, useSharedState } from '../backend';
|
||||
import { Box, Button, Icon, Input, ProgressBar, Section, Stack } from '../components';
|
||||
import { Materials, MaterialAmount, MaterialFormatting } from './common/Materials';
|
||||
import { formatMoney } from '../format';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
const COLOR_NONE = 0;
|
||||
const COLOR_AVERAGE = 1;
|
||||
const COLOR_BAD = 2;
|
||||
|
||||
const COLOR_KEYS = {
|
||||
[COLOR_NONE]: false,
|
||||
[COLOR_AVERAGE]: 'average',
|
||||
[COLOR_BAD]: 'bad',
|
||||
};
|
||||
|
||||
const materialArrayToObj = (materials) => {
|
||||
let materialObj = {};
|
||||
|
||||
materials.forEach((m) => {
|
||||
materialObj[m.name] = m.amount;
|
||||
});
|
||||
|
||||
return materialObj;
|
||||
};
|
||||
|
||||
const partBuildColor = (cost, tally, material) => {
|
||||
if (cost > material) {
|
||||
return { color: COLOR_BAD, deficit: cost - material };
|
||||
}
|
||||
|
||||
if (tally > material) {
|
||||
return { color: COLOR_AVERAGE, deficit: cost };
|
||||
}
|
||||
|
||||
if (cost + tally > material) {
|
||||
return { color: COLOR_AVERAGE, deficit: cost + tally - material };
|
||||
}
|
||||
|
||||
return { color: COLOR_NONE, deficit: 0 };
|
||||
};
|
||||
|
||||
const partCondFormat = (materials, tally, part) => {
|
||||
let format = { 'textColor': COLOR_NONE };
|
||||
|
||||
Object.keys(part.cost).forEach((mat) => {
|
||||
format[mat] = partBuildColor(part.cost[mat], tally[mat], materials[mat]);
|
||||
|
||||
if (format[mat].color > format['textColor']) {
|
||||
format['textColor'] = format[mat].color;
|
||||
}
|
||||
});
|
||||
|
||||
return format;
|
||||
};
|
||||
|
||||
const queueCondFormat = (materials, queue) => {
|
||||
let materialTally = {};
|
||||
let matFormat = {};
|
||||
let missingMatTally = {};
|
||||
let textColors = {};
|
||||
|
||||
queue.forEach((part, i) => {
|
||||
textColors[i] = COLOR_NONE;
|
||||
Object.keys(part.cost).forEach((mat) => {
|
||||
materialTally[mat] = materialTally[mat] || 0;
|
||||
missingMatTally[mat] = missingMatTally[mat] || 0;
|
||||
|
||||
matFormat[mat] = partBuildColor(
|
||||
part.cost[mat],
|
||||
materialTally[mat],
|
||||
materials[mat]
|
||||
);
|
||||
|
||||
if (matFormat[mat].color !== COLOR_NONE) {
|
||||
if (textColors[i] < matFormat[mat].color) {
|
||||
textColors[i] = matFormat[mat].color;
|
||||
}
|
||||
} else {
|
||||
materialTally[mat] += part.cost[mat];
|
||||
}
|
||||
|
||||
missingMatTally[mat] += matFormat[mat].deficit;
|
||||
});
|
||||
});
|
||||
return { materialTally, missingMatTally, textColors, matFormat };
|
||||
};
|
||||
|
||||
const searchFilter = (search, allparts) => {
|
||||
if (!search.length) {
|
||||
return;
|
||||
}
|
||||
const resultFilter = createSearch(
|
||||
search,
|
||||
(part) => (part.name || '') + (part.desc || '') + (part.searchMeta || '')
|
||||
);
|
||||
let searchResults = [];
|
||||
Object.keys(allparts).forEach((category) => {
|
||||
allparts[category].filter(resultFilter).forEach((e) => {
|
||||
searchResults.push(e);
|
||||
});
|
||||
});
|
||||
searchResults = uniqBy((part) => part.name)(searchResults);
|
||||
return searchResults;
|
||||
};
|
||||
|
||||
export const ExosuitFabricator = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const queue = data.queue || [];
|
||||
const materialAsObj = materialArrayToObj(data.materials || []);
|
||||
const { materialTally, missingMatTally, textColors } = queueCondFormat(
|
||||
materialAsObj,
|
||||
queue
|
||||
);
|
||||
const [displayMatCost, setDisplayMatCost] = useSharedState(
|
||||
context,
|
||||
'display_mats',
|
||||
false
|
||||
);
|
||||
return (
|
||||
<Window title="Exosuit Fabricator" width={1100} height={640}>
|
||||
<Window.Content>
|
||||
<Stack fill vertical>
|
||||
<Stack.Item>
|
||||
<Stack fill>
|
||||
<Stack.Item grow>
|
||||
<Section fill title="Materials">
|
||||
<Materials
|
||||
materials={data.materials || []}
|
||||
onEject={(ref, amount) => {
|
||||
act('remove_mat', {
|
||||
ref: ref,
|
||||
amount: amount,
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<Section fill title="Settings">
|
||||
<Button.Checkbox
|
||||
onClick={() => setDisplayMatCost(!displayMatCost)}
|
||||
checked={displayMatCost}>
|
||||
Display Material Costs
|
||||
</Button.Checkbox>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Stack fill>
|
||||
<Stack.Item>
|
||||
<Section fill title="Categories">
|
||||
<PartSets />
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<PartLists
|
||||
queueMaterials={materialTally}
|
||||
materials={materialAsObj}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item width="420px">
|
||||
<Queue
|
||||
queueMaterials={materialTally}
|
||||
missingMaterials={missingMatTally}
|
||||
textColors={textColors}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
const PartSets = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const partSets = data.partSets || [];
|
||||
const buildableParts = data.buildableParts || {};
|
||||
const [selectedPartTab, setSelectedPartTab] = useSharedState(
|
||||
context,
|
||||
'part_tab',
|
||||
partSets.length ? buildableParts[0] : ''
|
||||
);
|
||||
return partSets
|
||||
.filter((set) => buildableParts[set])
|
||||
.map((set) => (
|
||||
<Button
|
||||
key={set}
|
||||
fluid
|
||||
color="transparent"
|
||||
selected={set === selectedPartTab}
|
||||
onClick={() => setSelectedPartTab(set)}>
|
||||
{set}
|
||||
</Button>
|
||||
));
|
||||
};
|
||||
|
||||
const PartLists = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
|
||||
const getFirstValidPartSet = (sets) => {
|
||||
for (let set of sets) {
|
||||
if (buildableParts[set]) {
|
||||
return set;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
const partSets = data.partSets || [];
|
||||
const buildableParts = data.buildableParts || [];
|
||||
|
||||
const { queueMaterials, materials } = props;
|
||||
|
||||
const [selectedPartTab, setSelectedPartTab] = useSharedState(
|
||||
context,
|
||||
'part_tab',
|
||||
getFirstValidPartSet(partSets)
|
||||
);
|
||||
|
||||
const [searchText, setSearchText] = useSharedState(
|
||||
context,
|
||||
'search_text',
|
||||
''
|
||||
);
|
||||
|
||||
if (!selectedPartTab || !buildableParts[selectedPartTab]) {
|
||||
const validSet = getFirstValidPartSet(partSets);
|
||||
if (validSet) {
|
||||
setSelectedPartTab(validSet);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let partsList;
|
||||
// Build list of sub-categories if not using a search filter.
|
||||
if (!searchText) {
|
||||
partsList = { 'Parts': [] };
|
||||
buildableParts[selectedPartTab].forEach((part) => {
|
||||
part['format'] = partCondFormat(materials, queueMaterials, part);
|
||||
if (!part.subCategory) {
|
||||
partsList['Parts'].push(part);
|
||||
return;
|
||||
}
|
||||
if (!(part.subCategory in partsList)) {
|
||||
partsList[part.subCategory] = [];
|
||||
}
|
||||
partsList[part.subCategory].push(part);
|
||||
});
|
||||
} else {
|
||||
partsList = [];
|
||||
searchFilter(searchText, buildableParts).forEach((part) => {
|
||||
part['format'] = partCondFormat(materials, queueMaterials, part);
|
||||
partsList.push(part);
|
||||
});
|
||||
}
|
||||
|
||||
return (
|
||||
<Stack fill vertical>
|
||||
<Stack.Item>
|
||||
<Section fill>
|
||||
<Stack align="baseline">
|
||||
<Stack.Item>
|
||||
<Icon name="search" />
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Input
|
||||
fluid
|
||||
placeholder="Search for..."
|
||||
onInput={(e, v) => setSearchText(v)}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section fill scrollable>
|
||||
{(!!searchText && (
|
||||
<PartCategory
|
||||
name={'Search Results'}
|
||||
parts={partsList}
|
||||
forceShow
|
||||
placeholder="No matching results..."
|
||||
/>
|
||||
)) ||
|
||||
Object.keys(partsList).map((category) => (
|
||||
<PartCategory
|
||||
key={category}
|
||||
name={category}
|
||||
parts={partsList[category]}
|
||||
/>
|
||||
))}
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
const PartCategory = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const { buildingPart } = data;
|
||||
const { parts, name, forceShow, placeholder } = props;
|
||||
const [displayMatCost] = useSharedState(context, 'display_mats', false);
|
||||
if (!forceShow && parts.length === 0) {
|
||||
return null;
|
||||
}
|
||||
return (
|
||||
<Section
|
||||
title={name}
|
||||
level={2}
|
||||
buttons={
|
||||
<Button
|
||||
disabled={!parts.length}
|
||||
color="good"
|
||||
content="Queue All"
|
||||
icon="plus-circle"
|
||||
onClick={() =>
|
||||
act('add_queue_set', {
|
||||
part_list: parts.map((part) => part.id),
|
||||
})
|
||||
}
|
||||
/>
|
||||
}>
|
||||
{!parts.length && placeholder}
|
||||
{parts.map((part) => (
|
||||
<Fragment key={part.name}>
|
||||
<Stack align="center">
|
||||
<Stack.Item>
|
||||
<Button
|
||||
disabled={buildingPart || part.format.textColor === COLOR_BAD}
|
||||
color="good"
|
||||
icon="play"
|
||||
onClick={() => act('build_part', { id: part.id })}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<Button
|
||||
color="average"
|
||||
icon="plus-circle"
|
||||
onClick={() => act('add_queue_part', { id: part.id })}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow color={COLOR_KEYS[part.format.textColor]}>
|
||||
{part.name}
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<Button
|
||||
icon="question-circle"
|
||||
tooltip={
|
||||
'Build Time: ' + part.printTime + 's. ' + (part.desc || '')
|
||||
}
|
||||
tooltipPosition="left"
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
{displayMatCost && (
|
||||
<Stack mb={2}>
|
||||
{Object.keys(part.cost).map((material) => (
|
||||
<Stack.Item
|
||||
key={material}
|
||||
width="50px"
|
||||
color={COLOR_KEYS[part.format[material].color]}>
|
||||
<MaterialAmount
|
||||
formatting={MaterialFormatting.Money}
|
||||
style={{
|
||||
transform: 'scale(0.75) translate(0%, 10%)',
|
||||
}}
|
||||
name={material}
|
||||
amount={part.cost[material]}
|
||||
/>
|
||||
</Stack.Item>
|
||||
))}
|
||||
</Stack>
|
||||
)}
|
||||
</Fragment>
|
||||
))}
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
const Queue = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const { isProcessingQueue } = data;
|
||||
const queue = data.queue || [];
|
||||
const { queueMaterials, missingMaterials, textColors } = props;
|
||||
return (
|
||||
<Stack fill vertical>
|
||||
<Stack.Item grow>
|
||||
<Section
|
||||
fill
|
||||
scrollable
|
||||
title="Queue"
|
||||
buttons={
|
||||
<>
|
||||
<Button.Confirm
|
||||
disabled={!queue.length}
|
||||
color="bad"
|
||||
icon="minus-circle"
|
||||
content="Clear Queue"
|
||||
onClick={() => act('clear_queue')}
|
||||
/>
|
||||
{(!!isProcessingQueue && (
|
||||
<Button
|
||||
disabled={!queue.length}
|
||||
content="Stop"
|
||||
icon="stop"
|
||||
onClick={() => act('stop_queue')}
|
||||
/>
|
||||
)) || (
|
||||
<Button
|
||||
disabled={!queue.length}
|
||||
content="Build Queue"
|
||||
icon="play"
|
||||
onClick={() => act('build_queue')}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
}>
|
||||
<Stack fill vertical>
|
||||
<Stack.Item>
|
||||
<BeingBuilt />
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<QueueList textColors={textColors} />
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
{!!queue.length && (
|
||||
<Stack.Item>
|
||||
<Section title="Material Cost">
|
||||
<QueueMaterials
|
||||
queueMaterials={queueMaterials}
|
||||
missingMaterials={missingMaterials}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
)}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
const QueueMaterials = (props, context) => {
|
||||
const { queueMaterials, missingMaterials } = props;
|
||||
return (
|
||||
<Stack wrap>
|
||||
{Object.keys(queueMaterials).map((material) => (
|
||||
<Stack.Item key={material} textAlign="center">
|
||||
<MaterialAmount
|
||||
formatting={MaterialFormatting.Money}
|
||||
name={material}
|
||||
amount={queueMaterials[material]}
|
||||
/>
|
||||
{!!missingMaterials[material] && (
|
||||
<Box color="bad">{formatMoney(missingMaterials[material])}</Box>
|
||||
)}
|
||||
</Stack.Item>
|
||||
))}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
const QueueList = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
|
||||
const { textColors } = props;
|
||||
|
||||
const queue = data.queue || [];
|
||||
|
||||
if (!queue.length) {
|
||||
return <>No parts in queue.</>;
|
||||
}
|
||||
|
||||
return queue.map((part, index) => (
|
||||
<Stack key={part.name} wrap align="baseline">
|
||||
<Stack.Item>
|
||||
<Button
|
||||
icon="minus-circle"
|
||||
color="bad"
|
||||
onClick={() => act('del_queue_part', { index: index + 1 })}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item textColor={COLOR_KEYS[textColors[index]]}>
|
||||
{part.name}
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
));
|
||||
};
|
||||
|
||||
const BeingBuilt = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const { buildingPart, storedPart } = data;
|
||||
|
||||
if (storedPart) {
|
||||
const { name } = storedPart;
|
||||
return (
|
||||
<ProgressBar minValue={0} maxValue={1} value={1} color="average">
|
||||
<Stack>
|
||||
<Stack.Item grow>{name}</Stack.Item>
|
||||
<Stack.Item>Fabricator outlet obstructed...</Stack.Item>
|
||||
</Stack>
|
||||
</ProgressBar>
|
||||
);
|
||||
}
|
||||
|
||||
if (buildingPart) {
|
||||
const { name, duration, printTime } = buildingPart;
|
||||
const timeLeft = Math.ceil(duration / 10);
|
||||
return (
|
||||
<ProgressBar minValue={0} maxValue={printTime} value={duration}>
|
||||
<Stack>
|
||||
<Stack.Item grow>{name}</Stack.Item>
|
||||
<Stack.Item>
|
||||
{(timeLeft >= 0 && timeLeft + 's') || 'Dispensing...'}
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</ProgressBar>
|
||||
);
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
@@ -0,0 +1,318 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend } from '../backend';
|
||||
import { Box, Button, Section, Stack, Icon } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { MaterialAccessBar } from './Fabrication/MaterialAccessBar';
|
||||
import { Design, FabricatorData, MaterialMap } from './Fabrication/Types';
|
||||
import { DesignBrowser } from './Fabrication/DesignBrowser';
|
||||
import { MaterialCostSequence } from './Fabrication/MaterialCostSequence';
|
||||
import { Tooltip } from '../components';
|
||||
import { BooleanLike, classes } from 'common/react';
|
||||
|
||||
type ExosuitFabricatorData = FabricatorData & {
|
||||
processing: BooleanLike;
|
||||
};
|
||||
|
||||
export const ExosuitFabricator = (props, context) => {
|
||||
const { act, data } = useBackend<ExosuitFabricatorData>(context);
|
||||
|
||||
const availableMaterials: MaterialMap = {};
|
||||
|
||||
for (const material of data.materials) {
|
||||
availableMaterials[material.name] = material.amount;
|
||||
}
|
||||
|
||||
return (
|
||||
<Window title="Exosuit Fabricator" width={1100} height={600}>
|
||||
<Window.Content>
|
||||
<Stack fill>
|
||||
<Stack.Item grow>
|
||||
<Stack fill vertical>
|
||||
<Stack.Item grow>
|
||||
<DesignBrowser
|
||||
designs={Object.values(data.designs)}
|
||||
availableMaterials={availableMaterials}
|
||||
buildRecipeElement={(design, availableMaterials) => (
|
||||
<Recipe available={availableMaterials} design={design} />
|
||||
)}
|
||||
categoryButtons={(category) => (
|
||||
<Button
|
||||
color={'transparent'}
|
||||
onClick={() => {
|
||||
act('build', {
|
||||
designs: category.children.map((design) => design.id),
|
||||
});
|
||||
}}>
|
||||
Queue All
|
||||
</Button>
|
||||
)}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<Section>
|
||||
<MaterialAccessBar
|
||||
availableMaterials={data.materials}
|
||||
onEjectRequested={(material, amount) => {
|
||||
act('remove_mat', { ref: material.ref, amount });
|
||||
}}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Stack.Item>
|
||||
<Stack.Item width="420px">
|
||||
<Queue availableMaterials={availableMaterials} />
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
const Recipe = (props: { design: Design; available: MaterialMap }, context) => {
|
||||
const { act, data } = useBackend<ExosuitFabricatorData>(context);
|
||||
const { design, available } = props;
|
||||
|
||||
const canPrint = !Object.entries(design.cost).some(
|
||||
([material, amount]) =>
|
||||
!available[material] || amount > (available[material] ?? 0)
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="FabricatorRecipe">
|
||||
<Tooltip content={design.desc} position="right">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}>
|
||||
<Icon name="question-circle" />
|
||||
</div>
|
||||
</Tooltip>
|
||||
<Tooltip
|
||||
position="bottom"
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={design}
|
||||
amount={1}
|
||||
available={available}
|
||||
/>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Title',
|
||||
!canPrint && 'FabricatorRecipe__Title--disabled',
|
||||
])}
|
||||
onClick={() => act('build', { designs: [design.id], now: true })}>
|
||||
<div className="FabricatorRecipe__Icon">
|
||||
<Box
|
||||
width={'32px'}
|
||||
height={'32px'}
|
||||
className={classes(['design32x32', design.icon])}
|
||||
/>
|
||||
</div>
|
||||
<div className="FabricatorRecipe__Label">{design.name}</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip content={'Add to Queue'} position="right">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}
|
||||
color={'transparent'}
|
||||
onClick={() => act('build', { designs: [design.id] })}>
|
||||
<Icon name="plus-circle" />
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
<Tooltip content={'Build Now'} position="right">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}
|
||||
color={'transparent'}
|
||||
onClick={() => act('build', { designs: [design.id], now: true })}>
|
||||
<Icon name="play" />
|
||||
</div>
|
||||
</Tooltip>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
const Queue = (props: { availableMaterials: MaterialMap }, context) => {
|
||||
const { act, data } = useBackend<ExosuitFabricatorData>(context);
|
||||
const { availableMaterials } = props;
|
||||
const { designs, processing } = data;
|
||||
|
||||
const queue = data.queue || [];
|
||||
|
||||
const materialCosts: MaterialMap = {};
|
||||
|
||||
for (const entry of queue) {
|
||||
const design = designs[entry.designId];
|
||||
|
||||
if (!design) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const [materialName, materialCost] of Object.entries(design.cost)) {
|
||||
materialCosts[materialName] =
|
||||
(materialCosts[materialName] || 0) + materialCost;
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Section fill>
|
||||
<Stack fill vertical>
|
||||
<Stack.Item>
|
||||
<Section
|
||||
fill
|
||||
title="Queue"
|
||||
buttons={
|
||||
<>
|
||||
<Button.Confirm
|
||||
disabled={!queue.length}
|
||||
color="bad"
|
||||
icon="minus-circle"
|
||||
content="Clear Queue"
|
||||
onClick={() => act('clear_queue')}
|
||||
/>
|
||||
{(!!processing && (
|
||||
<Button
|
||||
disabled={!queue.length}
|
||||
content="Stop"
|
||||
icon="stop"
|
||||
onClick={() => act('stop_queue')}
|
||||
/>
|
||||
)) || (
|
||||
<Button
|
||||
disabled={!queue.length}
|
||||
content="Build Queue"
|
||||
icon="play"
|
||||
onClick={() => act('build_queue')}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
}>
|
||||
<MaterialCostSequence
|
||||
available={availableMaterials}
|
||||
costMap={materialCosts}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section fill style={{ 'overflow': 'auto' }}>
|
||||
<QueueList availableMaterials={availableMaterials} />
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
const QueueList = (props: { availableMaterials: MaterialMap }, context) => {
|
||||
const { act, data } = useBackend<ExosuitFabricatorData>(context);
|
||||
const { availableMaterials } = props;
|
||||
|
||||
const queue = data.queue || [];
|
||||
const designs = data.designs;
|
||||
|
||||
if (!queue.length) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const accumulatedCosts: MaterialMap = {};
|
||||
|
||||
return (
|
||||
<>
|
||||
{queue
|
||||
.map((job, index) => ({ job, index, design: designs[job.designId] }))
|
||||
.map((entry) => {
|
||||
// TODO: Side effects in map are gross but at the same time I gotta
|
||||
// accumulate these *costs*
|
||||
let canPrint = true;
|
||||
|
||||
for (const [material, amount] of entry.design
|
||||
? Object.entries(entry.design.cost)
|
||||
: []) {
|
||||
accumulatedCosts[material] =
|
||||
(accumulatedCosts[material] || 0) + amount;
|
||||
|
||||
if (accumulatedCosts[material] > availableMaterials[material]) {
|
||||
canPrint = false;
|
||||
}
|
||||
}
|
||||
|
||||
return { canPrint, ...entry };
|
||||
})
|
||||
.map((entry) => (
|
||||
<div key={entry.job.jobId} className="FabricatorRecipe">
|
||||
{!!entry.job.processing && (
|
||||
<div
|
||||
className={'FabricatorRecipe__Progress'}
|
||||
style={{
|
||||
width:
|
||||
(entry.job.timeLeft /
|
||||
(entry.design ? entry.design.constructionTime : 0)) *
|
||||
100 +
|
||||
'%',
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
<Tooltip
|
||||
position={'bottom'}
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={entry.design}
|
||||
amount={1}
|
||||
available={availableMaterials}
|
||||
/>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Title',
|
||||
!entry.canPrint && 'FabricatorRecipe__Title--disabled',
|
||||
])}>
|
||||
<div className="FabricatorRecipe__Icon">
|
||||
<Box
|
||||
width={'32px'}
|
||||
height={'32px'}
|
||||
className={classes([
|
||||
'design32x32',
|
||||
entry.design && entry.design.icon,
|
||||
])}
|
||||
/>
|
||||
</div>
|
||||
<div className="FabricatorRecipe__Label">
|
||||
{entry.design && entry.design.name}
|
||||
</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
|
||||
{!entry.job.processing && (
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
])}
|
||||
onClick={() => {
|
||||
act('del_queue_part', {
|
||||
index: entry.index + (queue[0]!.processing ? 0 : 1),
|
||||
});
|
||||
}}>
|
||||
<Tooltip content={'Remove from Queue'}>
|
||||
<Icon name="minus-circle" />
|
||||
</Tooltip>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
};
|
||||
@@ -1,80 +0,0 @@
|
||||
import { sortBy } from 'common/collections';
|
||||
import { Stack, Section, Tabs } from '../../components';
|
||||
|
||||
/**
|
||||
* A single category in a category tab list.
|
||||
*/
|
||||
export type Category = {
|
||||
/**
|
||||
* The human-readable name of this category.
|
||||
*/
|
||||
displayName?: string;
|
||||
|
||||
/**
|
||||
* The key used to identify this category.
|
||||
*/
|
||||
key: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* The properties of a category tab list.
|
||||
*/
|
||||
export type CategoryTabsProps = {
|
||||
/**
|
||||
* The current key of the selected category.
|
||||
*/
|
||||
currentCategory: string;
|
||||
|
||||
/**
|
||||
* The categories in this list.
|
||||
*/
|
||||
categories: Category[];
|
||||
|
||||
/**
|
||||
* Invoked with a category's key when a new category is selected.
|
||||
*/
|
||||
onCategorySelected?: (newCategory: string) => void;
|
||||
};
|
||||
|
||||
/**
|
||||
* A tab list used for category selection.
|
||||
*/
|
||||
export const CategoryTabs = (props: CategoryTabsProps, context) => {
|
||||
const {
|
||||
currentCategory,
|
||||
categories,
|
||||
onCategorySelected: setCategory,
|
||||
} = props;
|
||||
|
||||
return (
|
||||
<Section fill>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item>
|
||||
<Section title="Categories" fitted />
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section fill style={{ 'overflow': 'auto' }}>
|
||||
<Tabs vertical>
|
||||
{sortBy((c: Category) => c.displayName || c.key)(categories).map(
|
||||
(descriptor) => (
|
||||
<Tabs.Tab
|
||||
key={descriptor.key}
|
||||
selected={currentCategory === descriptor.key}
|
||||
onClick={() => {
|
||||
currentCategory !== descriptor.key &&
|
||||
setCategory &&
|
||||
setCategory(descriptor.key);
|
||||
}}
|
||||
fluid
|
||||
color="transparent">
|
||||
{descriptor.displayName || descriptor.key}
|
||||
</Tabs.Tab>
|
||||
)
|
||||
)}
|
||||
</Tabs>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,500 @@
|
||||
import { sortBy } from 'common/collections';
|
||||
import { classes } from 'common/react';
|
||||
import { InfernoNode } from 'inferno';
|
||||
import { useSharedState } from '../../backend';
|
||||
import { Stack, Section, Icon, Dimmer } from '../../components';
|
||||
import { Design, MaterialMap } from './Types';
|
||||
import { SearchBar } from './SearchBar';
|
||||
|
||||
/**
|
||||
* A function that does nothing.
|
||||
*/
|
||||
const NOOP = () => {};
|
||||
|
||||
export type DesignBrowserProps<T extends Design = Design> = {
|
||||
/**
|
||||
* All of the designs available to the browser.
|
||||
*/
|
||||
designs: T[];
|
||||
|
||||
/**
|
||||
* A map of materials available for printing designs.
|
||||
*/
|
||||
availableMaterials?: MaterialMap;
|
||||
|
||||
/**
|
||||
* Invoked when the user attempts to print a design.
|
||||
*/
|
||||
onPrintDesign?: (design: T, amount: number) => void;
|
||||
|
||||
/**
|
||||
* If present, dims out the recipe list with a "building items" animation.
|
||||
*/
|
||||
busy?: boolean;
|
||||
|
||||
/**
|
||||
* Invoked for every recipe visible in the design browser. Returns a single
|
||||
* row to be rendered to the output.
|
||||
*/
|
||||
buildRecipeElement: (
|
||||
/**
|
||||
* The design being rendered.
|
||||
*/
|
||||
design: T,
|
||||
|
||||
/**
|
||||
* The materials available to print the design.
|
||||
*/
|
||||
availableMaterials: MaterialMap,
|
||||
|
||||
/**
|
||||
* A callback to print the design.
|
||||
*/
|
||||
onPrintDesign: (design: T, amount: number) => void
|
||||
) => InfernoNode;
|
||||
|
||||
/**
|
||||
* If provided, renders a node into each category in the output.
|
||||
*/
|
||||
categoryButtons?: (category: Category<T>) => InfernoNode;
|
||||
};
|
||||
|
||||
/**
|
||||
* A meta-category that, when selected, renders all designs to the output.
|
||||
*/
|
||||
const ALL_CATEGORY = 'All Designs';
|
||||
|
||||
/**
|
||||
* A meta-category that collects all designs without a single category.
|
||||
*/
|
||||
const UNCATEGORIZED = '/Uncategorized';
|
||||
|
||||
/**
|
||||
* A single category in the category tree.
|
||||
*/
|
||||
type Category<T extends Design = Design> = {
|
||||
/**
|
||||
* The human-readable title of this category.
|
||||
*/
|
||||
title: string;
|
||||
|
||||
/**
|
||||
* The `id` of the `Section` rendering this category in the browser.
|
||||
*/
|
||||
anchorKey: string;
|
||||
|
||||
/**
|
||||
* The set of all designs appearing in this category its descendant
|
||||
* categories, grouped by design ID.
|
||||
*/
|
||||
descendants: Record<string, T>;
|
||||
|
||||
/**
|
||||
* All designs within this specific category.
|
||||
*/
|
||||
children: T[];
|
||||
|
||||
/**
|
||||
* The subcategories within this one, keyed by their titles.
|
||||
*/
|
||||
subcategories: Record<string, Category<T>>;
|
||||
};
|
||||
|
||||
/**
|
||||
* Categories present in this object are not rendered to the final fabricator
|
||||
* UI.
|
||||
*/
|
||||
const BLACKLISTED_CATEGORIES: Record<string, boolean> = {
|
||||
'initial': true,
|
||||
'core': true,
|
||||
'hacked': true,
|
||||
};
|
||||
|
||||
/**
|
||||
* A universal design browser. Takes an arbitrary array of designs, and
|
||||
* generates tabs, a search bar, and a list of designs. Each row of the
|
||||
* resulting table is generated by the provided `buildRecipeElement` function.
|
||||
*/
|
||||
export const DesignBrowser = <T extends Design = Design>(
|
||||
props: DesignBrowserProps<T>,
|
||||
context
|
||||
) => {
|
||||
const {
|
||||
designs,
|
||||
availableMaterials,
|
||||
onPrintDesign,
|
||||
buildRecipeElement,
|
||||
busy,
|
||||
categoryButtons,
|
||||
} = props;
|
||||
|
||||
const [selectedCategory, setSelectedCategory] = useSharedState(
|
||||
context,
|
||||
'selected_category',
|
||||
ALL_CATEGORY
|
||||
);
|
||||
|
||||
const [searchText, setSearchText] = useSharedState(
|
||||
context,
|
||||
'search_text',
|
||||
''
|
||||
);
|
||||
|
||||
const onCategorySelected = (newCategory: string) => {
|
||||
if (newCategory === selectedCategory) {
|
||||
return;
|
||||
}
|
||||
|
||||
setSelectedCategory(newCategory);
|
||||
setSearchText('');
|
||||
};
|
||||
|
||||
// Build a root category from the designs.
|
||||
const root: Category<T> = {
|
||||
title: ALL_CATEGORY,
|
||||
anchorKey: ALL_CATEGORY.replace(/ /g, ''),
|
||||
descendants: {},
|
||||
children: [],
|
||||
subcategories: {},
|
||||
};
|
||||
|
||||
// Sort every design into a single category in the tree.
|
||||
for (const design of designs) {
|
||||
// For designs without any categories, assign them to the "uncategorized"
|
||||
// category.
|
||||
const categories =
|
||||
design.categories.length === 0 ? [UNCATEGORIZED] : design.categories;
|
||||
|
||||
for (const category of categories) {
|
||||
// If the category is a blacklisted meta-category, skip it entirely.
|
||||
if (BLACKLISTED_CATEGORIES[category]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Categories are slash-delimited.
|
||||
const nodes = category.split('/');
|
||||
|
||||
// We always lead with a slash, so the first group is always empty.
|
||||
nodes.shift();
|
||||
|
||||
// Find where this goes, and put it there.
|
||||
let parent = root;
|
||||
|
||||
while (nodes.length > 0) {
|
||||
parent.descendants[design.id] = design;
|
||||
|
||||
const node = nodes.shift()!;
|
||||
|
||||
if (!parent.subcategories[node]) {
|
||||
parent.subcategories[node] = {
|
||||
title: node,
|
||||
anchorKey: node.replace(/ /g, ''),
|
||||
descendants: {},
|
||||
children: [],
|
||||
subcategories: {},
|
||||
};
|
||||
}
|
||||
|
||||
parent = parent.subcategories[node]!;
|
||||
}
|
||||
|
||||
// This is our leaf.
|
||||
parent.descendants[design.id] = design;
|
||||
parent.children.push(design);
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Stack fill>
|
||||
{/* Left Column */}
|
||||
<Stack.Item width={'200px'}>
|
||||
<Section fill>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item>
|
||||
<Section title="Categories" fitted />
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section fill style={{ 'overflow': 'auto' }}>
|
||||
<div className="FabricatorTabs">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorTabs__Tab',
|
||||
selectedCategory === ALL_CATEGORY &&
|
||||
'FabricatorTabs__Tab--active',
|
||||
])}
|
||||
onClick={() => onCategorySelected(ALL_CATEGORY)}>
|
||||
<div className="FabricatorTabs__Label">
|
||||
<div className="FabricatorTabs__CategoryName">
|
||||
All Designs
|
||||
</div>
|
||||
<div className="FabricatorTabs__CategoryCount">
|
||||
({Object.entries(root.descendants).length})
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{sortBy((category: Category) => category.title)(
|
||||
Object.values(root.subcategories)
|
||||
).map((category) => (
|
||||
<DesignBrowserTab
|
||||
key={category.title}
|
||||
category={category}
|
||||
selectedCategory={selectedCategory}
|
||||
setSelectedCategory={onCategorySelected}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
|
||||
{/* Right Column */}
|
||||
<Stack.Item grow>
|
||||
<Section
|
||||
title={
|
||||
searchText.length > 0
|
||||
? `Results for "${searchText}"`
|
||||
: selectedCategory === ALL_CATEGORY
|
||||
? 'All Designs'
|
||||
: selectedCategory
|
||||
}
|
||||
fill>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item>
|
||||
<Section>
|
||||
<SearchBar
|
||||
searchText={searchText}
|
||||
onSearchTextChanged={setSearchText}
|
||||
hint={'Search all designs...'}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section fill style={{ 'overflow': 'auto' }}>
|
||||
{searchText.length > 0 ? (
|
||||
sortBy((design: T) => design.name)(
|
||||
Object.values(root.descendants)
|
||||
)
|
||||
.filter((design) =>
|
||||
design.name
|
||||
.toLowerCase()
|
||||
.includes(searchText.toLowerCase())
|
||||
)
|
||||
.map((design) =>
|
||||
buildRecipeElement(
|
||||
design,
|
||||
availableMaterials || {},
|
||||
onPrintDesign || NOOP
|
||||
)
|
||||
)
|
||||
) : selectedCategory === ALL_CATEGORY ? (
|
||||
<>
|
||||
{sortBy((design: T) => design.name)(
|
||||
Object.values(root.descendants)
|
||||
).map((design) =>
|
||||
buildRecipeElement(
|
||||
design,
|
||||
availableMaterials || {},
|
||||
onPrintDesign || NOOP
|
||||
)
|
||||
)}
|
||||
</>
|
||||
) : (
|
||||
root.subcategories[selectedCategory] && (
|
||||
<CategoryView
|
||||
category={root.subcategories[selectedCategory]}
|
||||
categoryButtons={categoryButtons}
|
||||
availableMaterials={availableMaterials}
|
||||
onPrintDesign={onPrintDesign}
|
||||
buildRecipeElement={buildRecipeElement}
|
||||
/>
|
||||
)
|
||||
)}
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
{!!busy && (
|
||||
<Dimmer
|
||||
style={{
|
||||
'font-size': '2em',
|
||||
'text-align': 'center',
|
||||
}}>
|
||||
<Icon name="cog" spin />
|
||||
{' Building items...'}
|
||||
</Dimmer>
|
||||
)}
|
||||
</Stack>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
type DesignBrowserTabProps<T extends Design = Design> = {
|
||||
category: Category<T>;
|
||||
depth?: number;
|
||||
maxDepth?: number;
|
||||
selectedCategory: string;
|
||||
setSelectedCategory: (newCategory: string) => void;
|
||||
};
|
||||
|
||||
const DesignBrowserTab = <T extends Design = Design>(
|
||||
props: DesignBrowserTabProps<T>,
|
||||
context
|
||||
) => {
|
||||
let { category, depth, maxDepth, selectedCategory, setSelectedCategory } =
|
||||
props;
|
||||
|
||||
depth ??= 0;
|
||||
maxDepth ??= 3;
|
||||
|
||||
return (
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorTabs__Tab',
|
||||
/** Only highlight top-level categories. */
|
||||
depth === 0 &&
|
||||
selectedCategory === category.title &&
|
||||
'FabricatorTabs__Tab--active',
|
||||
])}
|
||||
onClick={
|
||||
depth === 0
|
||||
? /* For top-level categories, set the selected category. */
|
||||
() => setSelectedCategory(category.title)
|
||||
: /* For deeper categories, scroll the subcategory header into view. */
|
||||
() => {
|
||||
document.getElementById(category.anchorKey)?.scrollIntoView(true);
|
||||
}
|
||||
}>
|
||||
<div className="FabricatorTabs__Label">
|
||||
<div className="FabricatorTabs__CategoryName">{category.title}</div>
|
||||
{depth === 0 && (
|
||||
/** Show recipe counts on top-level categories. */
|
||||
<div className={'FabricatorTabs__CategoryCount'}>
|
||||
({Object.entries(category.descendants).length})
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
{depth < maxDepth &&
|
||||
Object.entries(category.subcategories).length > 0 &&
|
||||
selectedCategory === category.title && (
|
||||
<div className="FabricatorTabs">
|
||||
{sortBy((category: Category) => category.title)(
|
||||
Object.values(category.subcategories)
|
||||
).map((subcategory) => (
|
||||
<DesignBrowserTab
|
||||
key={subcategory.title}
|
||||
category={subcategory}
|
||||
depth={(depth || 0) + 1}
|
||||
maxDepth={maxDepth}
|
||||
selectedCategory={selectedCategory}
|
||||
setSelectedCategory={setSelectedCategory}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
type CategoryViewProps<T extends Design = Design> = {
|
||||
/**
|
||||
* The category being rendered.
|
||||
*/
|
||||
category: Category<T>;
|
||||
|
||||
/**
|
||||
* A map of materials available for printing designs.
|
||||
*/
|
||||
availableMaterials?: MaterialMap;
|
||||
|
||||
/**
|
||||
* The depth of this category in the view.
|
||||
*/
|
||||
depth?: number;
|
||||
|
||||
/**
|
||||
* Invoked when the user attempts to print a design.
|
||||
*/
|
||||
onPrintDesign?: (design: T, amount: number) => void;
|
||||
|
||||
/**
|
||||
* Invoked for every recipe visible in the design browser. Returns a single
|
||||
* row to be rendered to the output.
|
||||
*/
|
||||
buildRecipeElement: (
|
||||
/**
|
||||
* The design being rendered.
|
||||
*/
|
||||
design: T,
|
||||
|
||||
/**
|
||||
* The materials available to print the design.
|
||||
*/
|
||||
availableMaterials: MaterialMap,
|
||||
|
||||
/**
|
||||
* A callback to print the design.
|
||||
*/
|
||||
onPrintDesign: (design: T, amount: number) => void
|
||||
) => InfernoNode;
|
||||
|
||||
/**
|
||||
* If provided, renders a node into each category in the output.
|
||||
*/
|
||||
categoryButtons?: (category: Category<T>) => InfernoNode;
|
||||
};
|
||||
|
||||
const CategoryView = <T extends Design = Design>(
|
||||
props: CategoryViewProps<T>,
|
||||
context
|
||||
) => {
|
||||
let {
|
||||
depth,
|
||||
category,
|
||||
availableMaterials,
|
||||
onPrintDesign,
|
||||
buildRecipeElement,
|
||||
categoryButtons,
|
||||
} = props;
|
||||
|
||||
depth ??= 0;
|
||||
|
||||
const body = (
|
||||
<>
|
||||
{sortBy((design: T) => design.name)(category.children).map((design) =>
|
||||
buildRecipeElement(
|
||||
design,
|
||||
availableMaterials || {},
|
||||
onPrintDesign || NOOP
|
||||
)
|
||||
)}
|
||||
|
||||
{Object.keys(category.subcategories)
|
||||
.sort()
|
||||
.map((categoryName: string) => category.subcategories[categoryName])
|
||||
.map((category) => (
|
||||
<CategoryView
|
||||
{...props}
|
||||
depth={(depth || 0) + 1}
|
||||
category={category}
|
||||
key={category.title}
|
||||
/>
|
||||
))}
|
||||
</>
|
||||
);
|
||||
|
||||
if (depth === 0 || category.children.length === 0) {
|
||||
return body;
|
||||
}
|
||||
|
||||
return (
|
||||
<Section
|
||||
title={category.title}
|
||||
id={category.anchorKey}
|
||||
buttons={categoryButtons && categoryButtons(category)}>
|
||||
{body}
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
@@ -1,77 +0,0 @@
|
||||
import { CategoryTabs } from './CategoryTabs';
|
||||
import { Design } from './Types';
|
||||
|
||||
/**
|
||||
* A dummy category that, when selected, renders ALL recipes to the UI.
|
||||
*/
|
||||
export const ALL_CATEGORY = '__ALL';
|
||||
|
||||
/**
|
||||
* Categories present in this object are not rendered to the final fabricator
|
||||
* UI.
|
||||
*/
|
||||
const BLACKLISTED_CATEGORIES: Record<string, boolean> = {
|
||||
'initial': true,
|
||||
'core': true,
|
||||
'hacked': true,
|
||||
};
|
||||
|
||||
export type DesignCategoryTabsProps = {
|
||||
/**
|
||||
* The designs to generate categories from.
|
||||
*/
|
||||
designs: Design[];
|
||||
|
||||
/**
|
||||
* The currently selected category.
|
||||
*/
|
||||
currentCategory: string;
|
||||
|
||||
/**
|
||||
* Invoked when the user selects a new category.
|
||||
*/
|
||||
onCategorySelected?: (newCategory: string) => void;
|
||||
};
|
||||
|
||||
/**
|
||||
* A list of tabs generated on the fly from a number of techfab designs.
|
||||
*/
|
||||
export const DesignCategoryTabs = (props: DesignCategoryTabsProps, context) => {
|
||||
const { designs, currentCategory, onCategorySelected } = props;
|
||||
|
||||
// Find the number of items in each unique category, and the sum total of all
|
||||
// printable items.
|
||||
const categoryCounts: Record<string, number> = {};
|
||||
let totalRecipes = 0;
|
||||
|
||||
for (const design of designs) {
|
||||
totalRecipes += 1;
|
||||
|
||||
for (const category of design.categories ?? []) {
|
||||
categoryCounts[category] = (categoryCounts[category] ?? 0) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
// Strip blacklisted categories from the output.
|
||||
for (const blacklistedCategory in BLACKLISTED_CATEGORIES) {
|
||||
delete categoryCounts[blacklistedCategory];
|
||||
}
|
||||
|
||||
const categories = Object.entries(categoryCounts).map(([name, count]) => ({
|
||||
key: name,
|
||||
displayName: `${name} (${count})`,
|
||||
}));
|
||||
|
||||
categories.unshift({
|
||||
key: ALL_CATEGORY,
|
||||
displayName: `All Designs (${totalRecipes})`,
|
||||
});
|
||||
|
||||
return (
|
||||
<CategoryTabs
|
||||
currentCategory={currentCategory}
|
||||
onCategorySelected={onCategorySelected}
|
||||
categories={categories}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@@ -1,50 +0,0 @@
|
||||
import { Design, MaterialMap } from './Types';
|
||||
import { Stack } from '../../components';
|
||||
import { MaterialAmount, MATERIAL_KEYS, MaterialFormatting } from '../common/Materials';
|
||||
|
||||
export type DesignCostListProps = {
|
||||
/**
|
||||
* The design being printed.
|
||||
*/
|
||||
design: Design;
|
||||
|
||||
/**
|
||||
* The amount of times to print.
|
||||
*/
|
||||
amount: number;
|
||||
|
||||
/**
|
||||
* The materials available to complete the job.
|
||||
*/
|
||||
available: MaterialMap;
|
||||
};
|
||||
|
||||
/**
|
||||
* A horizontal sequence of material costs, indicating the effect of queueing
|
||||
* a print job. Orange labels indicate that the job can only be completed once,
|
||||
* and red labels indicate the job can't be completed at all.
|
||||
*/
|
||||
export const DesignCostList = (props: DesignCostListProps, context) => {
|
||||
const { design, amount, available } = props;
|
||||
|
||||
return (
|
||||
<Stack wrap justify="space-around">
|
||||
{Object.entries(design.cost).map(([material, cost]) => (
|
||||
<Stack.Item key={material}>
|
||||
<MaterialAmount
|
||||
name={material as keyof typeof MATERIAL_KEYS}
|
||||
amount={cost * amount}
|
||||
formatting={MaterialFormatting.SIUnits}
|
||||
color={
|
||||
cost * amount > available[material]
|
||||
? 'bad'
|
||||
: cost * amount * 2 > available[material]
|
||||
? 'average'
|
||||
: 'normal'
|
||||
}
|
||||
/>
|
||||
</Stack.Item>
|
||||
))}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
+34
-22
@@ -1,27 +1,28 @@
|
||||
import { sortBy } from 'common/collections';
|
||||
import { classes } from 'common/react';
|
||||
import { useLocalState } from '../../backend';
|
||||
import { Flex, Button, Stack, AnimatedNumber } from '../../components';
|
||||
import { formatSiUnit } from '../../format';
|
||||
import { Material, MaterialIcon } from '../common/Materials';
|
||||
import { MaterialName } from './Types';
|
||||
import { MaterialIcon } from './MaterialIcon';
|
||||
import { Material } from './Types';
|
||||
|
||||
// by popular demand of discord people (who are always right and never wrong)
|
||||
// this is completely made up
|
||||
const MINERAL_RARITY: Record<MaterialName, number> = {
|
||||
'iron': 1,
|
||||
const MATERIAL_RARITY: Record<string, number> = {
|
||||
'glass': 0,
|
||||
'iron': 1,
|
||||
'plastic': 2,
|
||||
'titanium': 3,
|
||||
'plasma': 4,
|
||||
'silver': 5,
|
||||
'gold': 6,
|
||||
'diamond': 8,
|
||||
'plasma': 4,
|
||||
'uranium': 7,
|
||||
'bananium': 10,
|
||||
'titanium': 3,
|
||||
'diamond': 8,
|
||||
'bluespace crystal': 9,
|
||||
'plastic': 2,
|
||||
'bananium': 10,
|
||||
};
|
||||
|
||||
export type MineralAccessBarProps = {
|
||||
export type MaterialAccessBarProps = {
|
||||
/**
|
||||
* All materials currently available to the user.
|
||||
*/
|
||||
@@ -43,15 +44,15 @@ const LABEL_FORMAT = (value: number) => formatSiUnit(value, 0);
|
||||
* the ore silo. Has pop-out docks for each material type for ejecting up to
|
||||
* fifty sheets.
|
||||
*/
|
||||
export const MineralAccessBar = (props: MineralAccessBarProps, context) => {
|
||||
export const MaterialAccessBar = (props: MaterialAccessBarProps, context) => {
|
||||
const { availableMaterials, onEjectRequested } = props;
|
||||
|
||||
return (
|
||||
<Flex wrap>
|
||||
{sortBy((m: Material) => MINERAL_RARITY[m.name])(availableMaterials).map(
|
||||
{sortBy((m: Material) => MATERIAL_RARITY[m.name])(availableMaterials).map(
|
||||
(material) => (
|
||||
<Flex.Item key={material.name} grow={1} shrink={1}>
|
||||
<MineralCounter
|
||||
<Flex.Item key={material.name} grow={1}>
|
||||
<MaterialCounter
|
||||
material={material}
|
||||
onEjectRequested={(quantity) =>
|
||||
onEjectRequested && onEjectRequested(material, quantity)
|
||||
@@ -64,12 +65,12 @@ export const MineralAccessBar = (props: MineralAccessBarProps, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
type MineralCounterProps = {
|
||||
type MaterialCounterProps = {
|
||||
material: Material;
|
||||
onEjectRequested: (quantity: number) => void;
|
||||
};
|
||||
|
||||
const MineralCounter = (props: MineralCounterProps, context) => {
|
||||
const MaterialCounter = (props: MaterialCounterProps, context) => {
|
||||
const { material, onEjectRequested } = props;
|
||||
|
||||
const [hovering, setHovering] = useLocalState(
|
||||
@@ -78,18 +79,28 @@ const MineralCounter = (props: MineralCounterProps, context) => {
|
||||
false
|
||||
);
|
||||
|
||||
const canEject = material.amount > 2_000;
|
||||
|
||||
return (
|
||||
<div
|
||||
onMouseEnter={() => setHovering(true)}
|
||||
onMouseLeave={() => setHovering(false)}
|
||||
className={`MaterialDock ${hovering ? 'MaterialDock--active' : ''}`}>
|
||||
className={classes([
|
||||
'MaterialDock',
|
||||
hovering && 'MaterialDock--active',
|
||||
!canEject && 'MaterialDock--disabled',
|
||||
])}>
|
||||
<Stack vertial direction={'column-reverse'}>
|
||||
<Flex
|
||||
direction="column"
|
||||
textAlign="center"
|
||||
onClick={() => onEjectRequested(1)}>
|
||||
onClick={() => onEjectRequested(1)}
|
||||
className="MaterialDock__Label">
|
||||
<Flex.Item>
|
||||
<MaterialIcon material={material.name} />
|
||||
<MaterialIcon
|
||||
materialName={material.name}
|
||||
amount={material.amount}
|
||||
/>
|
||||
</Flex.Item>
|
||||
<Flex.Item>
|
||||
<AnimatedNumber value={material.amount} format={LABEL_FORMAT} />
|
||||
@@ -144,9 +155,10 @@ const EjectButton = (props: EjectButtonProps, context) => {
|
||||
<Button
|
||||
fluid
|
||||
color={'transparent'}
|
||||
className={`Fabricator__PrintAmount ${
|
||||
amount * 2_000 > available ? 'Fabricator__PrintAmount--disabled' : ''
|
||||
}`}
|
||||
className={classes([
|
||||
'Fabricator__PrintAmount',
|
||||
amount * 2_000 > available && 'Fabricator__PrintAmount--disabled',
|
||||
])}
|
||||
onClick={() => onEject(amount)}>
|
||||
×{amount}
|
||||
</Button>
|
||||
@@ -0,0 +1,98 @@
|
||||
import { Flex } from '../../components';
|
||||
import { Design, MaterialMap } from './Types';
|
||||
import { MaterialIcon } from './MaterialIcon';
|
||||
import { formatSiUnit } from '../../format';
|
||||
|
||||
export type MaterialCostSequenceProps = {
|
||||
/**
|
||||
* A map of available materials.
|
||||
*/
|
||||
available?: MaterialMap;
|
||||
|
||||
/**
|
||||
* If provided, the materials to be consumed. By default, generated from
|
||||
* `design`; otherwise, an empty list.
|
||||
*/
|
||||
costMap?: MaterialMap;
|
||||
|
||||
/**
|
||||
* A design to generate the cost map from.
|
||||
*/
|
||||
design?: Design;
|
||||
|
||||
/**
|
||||
* The amount of times the provided design will be printed. By default, one.
|
||||
*/
|
||||
amount?: number;
|
||||
|
||||
/**
|
||||
* The `align-items` flex property provided to the generated list.
|
||||
*/
|
||||
align?: string;
|
||||
|
||||
/**
|
||||
* The `justify-content` flex property provided to the generated list.
|
||||
*/
|
||||
justify?: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* A horizontal list of material costs, with labels.
|
||||
*
|
||||
* For a given material set that can only be printed once, the label for
|
||||
* offending materials is orange.
|
||||
*
|
||||
* For a given material set that can't be printed at all, the label for
|
||||
* offending materials is red.
|
||||
*
|
||||
* Otherwise, the labels are white.
|
||||
*/
|
||||
export const MaterialCostSequence = (
|
||||
props: MaterialCostSequenceProps,
|
||||
context
|
||||
) => {
|
||||
const { design, amount, available, align, justify } = props;
|
||||
let { costMap } = props;
|
||||
|
||||
if (!costMap && !design) {
|
||||
return null;
|
||||
}
|
||||
|
||||
costMap ??= {};
|
||||
|
||||
if (design) {
|
||||
for (const [name, value] of Object.entries(design.cost)) {
|
||||
costMap[name] = (costMap[name] || 0) + value;
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<Flex wrap justify={justify ?? 'space-around'} align={align ?? 'center'}>
|
||||
{Object.entries(costMap).map(([material, quantity]) => (
|
||||
<Flex.Item key={material} style={{ 'padding': '0.25em' }}>
|
||||
<Flex direction={'column'} align="center">
|
||||
<Flex.Item>
|
||||
<MaterialIcon
|
||||
materialName={material}
|
||||
amount={(amount || 1) * quantity}
|
||||
/>
|
||||
</Flex.Item>
|
||||
<Flex.Item
|
||||
style={
|
||||
available && {
|
||||
color:
|
||||
(amount || 1) * quantity * 2 <= available[material]
|
||||
? '#fff'
|
||||
: (amount || 1) * quantity <= available[material]
|
||||
? '#f08f11'
|
||||
: '#db2828',
|
||||
}
|
||||
}>
|
||||
{formatSiUnit((amount || 1) * quantity, 0)}
|
||||
</Flex.Item>
|
||||
</Flex>
|
||||
</Flex.Item>
|
||||
))}
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
@@ -0,0 +1,95 @@
|
||||
import { classes } from 'common/react';
|
||||
import { Icon } from '../../components';
|
||||
|
||||
const MATERIAL_ICONS: Record<string, [number, string][]> = {
|
||||
'iron': [
|
||||
[0, 'sheet-metal'],
|
||||
[17, 'sheet-metal_2'],
|
||||
[34, 'sheet-metal_3'],
|
||||
],
|
||||
'glass': [
|
||||
[0, 'sheet-glass'],
|
||||
[17, 'sheet-glass_2'],
|
||||
[34, 'sheet-glass_3'],
|
||||
],
|
||||
'silver': [
|
||||
[0, 'sheet-silver'],
|
||||
[17, 'sheet-silver_2'],
|
||||
[34, 'sheet-silver_3'],
|
||||
],
|
||||
'gold': [
|
||||
[0, 'sheet-gold'],
|
||||
[17, 'sheet-gold_2'],
|
||||
[34, 'sheet-gold_3'],
|
||||
],
|
||||
'diamond': [[0, 'sheet-diamond']],
|
||||
'plasma': [
|
||||
[0, 'sheet-plasma'],
|
||||
[17, 'sheet-plasma_2'],
|
||||
[34, 'sheet-plasma_3'],
|
||||
],
|
||||
'uranium': [[0, 'sheet-uranium']],
|
||||
'bananium': [[0, 'sheet-bananium']],
|
||||
'titanium': [
|
||||
[0, 'sheet-titanium'],
|
||||
[17, 'sheet-titanium_2'],
|
||||
[34, 'sheet-titanium_3'],
|
||||
],
|
||||
'bluespace crystal': [[0, 'bluespace_crystal']],
|
||||
'plastic': [
|
||||
[0, 'sheet-plastic'],
|
||||
[17, 'sheet-plastic_2'],
|
||||
[34, 'sheet-plastic_3'],
|
||||
],
|
||||
};
|
||||
|
||||
export type MaterialIconProps = {
|
||||
/**
|
||||
* The name of the material.
|
||||
*/
|
||||
materialName: string;
|
||||
|
||||
/**
|
||||
* The amount of material. One sheet is 2,000 units. By default, the icon
|
||||
* attempts to render a full stack (200,000 units).
|
||||
*/
|
||||
amount?: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* A 32x32 material icon. Animates between different stack sizes of the given
|
||||
* material.
|
||||
*/
|
||||
export const MaterialIcon = (props: MaterialIconProps) => {
|
||||
const { materialName, amount } = props;
|
||||
const icons = MATERIAL_ICONS[materialName];
|
||||
|
||||
if (!icons) {
|
||||
return <Icon name="question-circle" />;
|
||||
}
|
||||
|
||||
let activeIdx = 0;
|
||||
|
||||
while (
|
||||
icons[activeIdx + 1] &&
|
||||
icons[activeIdx + 1][0] <= (amount ?? 200_000) / 2_000
|
||||
) {
|
||||
activeIdx += 1;
|
||||
}
|
||||
|
||||
return (
|
||||
<div className={'FabricatorMaterialIcon'}>
|
||||
{icons.map(([_, iconState], idx) => (
|
||||
<div
|
||||
key={idx}
|
||||
className={classes([
|
||||
'FabricatorMaterialIcon__Icon',
|
||||
idx === activeIdx && 'FabricatorMaterialIcon__Icon--active',
|
||||
'sheetmaterials32x32',
|
||||
iconState,
|
||||
])}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
@@ -1,3 +1,4 @@
|
||||
import { Component } from 'inferno';
|
||||
import { Stack, Input, Icon } from '../../components';
|
||||
|
||||
/**
|
||||
@@ -20,25 +21,34 @@ export type SearchBarProps = {
|
||||
onSearchTextChanged: (newSearchText: string) => void;
|
||||
};
|
||||
|
||||
/**
|
||||
* A simple, stylized search bar.
|
||||
*/
|
||||
export const SearchBar = (props: SearchBarProps, context) => {
|
||||
const { searchText, onSearchTextChanged, hint } = props;
|
||||
export class SearchBar extends Component<SearchBarProps> {
|
||||
timeout?: NodeJS.Timeout;
|
||||
|
||||
return (
|
||||
<Stack align="baseline">
|
||||
<Stack.Item>
|
||||
<Icon name="search" />
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Input
|
||||
fluid
|
||||
placeholder={hint ? hint : 'Search for...'}
|
||||
onInput={(_e: unknown, v: string) => onSearchTextChanged(v)}
|
||||
value={searchText}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
onInput(value: string) {
|
||||
if (this.timeout) {
|
||||
clearTimeout(this.timeout);
|
||||
}
|
||||
|
||||
this.timeout = setTimeout(() => this.props.onSearchTextChanged(value), 200);
|
||||
}
|
||||
|
||||
render() {
|
||||
const { searchText, hint } = this.props;
|
||||
|
||||
return (
|
||||
<Stack align="baseline">
|
||||
<Stack.Item>
|
||||
<Icon name="search" />
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Input
|
||||
fluid
|
||||
placeholder={hint ? hint : 'Search for...'}
|
||||
onInput={(_e: unknown, v: string) => this.onInput(v)}
|
||||
value={searchText}
|
||||
/>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,14 +1,45 @@
|
||||
import { Material, MATERIAL_KEYS } from '../common/Materials';
|
||||
|
||||
/**
|
||||
* A named material.
|
||||
*/
|
||||
export type MaterialName = keyof typeof MATERIAL_KEYS;
|
||||
import { BooleanLike } from 'common/react';
|
||||
|
||||
/**
|
||||
* A map of keyed materials to a quantity.
|
||||
*/
|
||||
export type MaterialMap = Partial<Record<MaterialName, number>>;
|
||||
export type MaterialMap = Record<string, number>;
|
||||
|
||||
/**
|
||||
* A single, uniquely identifiable material.
|
||||
*/
|
||||
export type Material = {
|
||||
/**
|
||||
* The human-readable name of the material.
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* An internal reference to the material that the server can use to uniquely
|
||||
* identify the material.
|
||||
*/
|
||||
ref: string;
|
||||
|
||||
/**
|
||||
* The amount of material; 2,000 units is one sheet.
|
||||
*/
|
||||
amount: number;
|
||||
|
||||
/**
|
||||
* The number of sheets.
|
||||
*/
|
||||
sheets: number;
|
||||
|
||||
/**
|
||||
* Whether the material can be removed.
|
||||
*/
|
||||
removable: BooleanLike;
|
||||
|
||||
/**
|
||||
* The color of the material.
|
||||
*/
|
||||
color: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* A single design that the fabricator can print.
|
||||
@@ -36,9 +67,22 @@ export type Design = {
|
||||
id: string;
|
||||
|
||||
/**
|
||||
* The categories the design should be present in.
|
||||
* The categories the design should be present in. Subcategories are
|
||||
* slash-delimited, and categories always start with a slash.
|
||||
*/
|
||||
categories?: string[];
|
||||
categories: string[];
|
||||
|
||||
/**
|
||||
* The icon used to represent this design, generated in
|
||||
* /datum/asset/spritesheet/research_designs. **The image within may not be
|
||||
* 32x32.**
|
||||
*/
|
||||
icon: string;
|
||||
|
||||
/**
|
||||
* The amount of time, in seconds, that this design takes to print.
|
||||
*/
|
||||
constructionTime: number;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -53,13 +97,13 @@ export type FabricatorData = {
|
||||
/**
|
||||
* The name of the fabricator, as displayed on the title bar.
|
||||
*/
|
||||
fab_name: string;
|
||||
fabName: string;
|
||||
|
||||
/**
|
||||
* Whether mineral access is disabled from the ore silo (contact the
|
||||
* quartermaster).
|
||||
*/
|
||||
on_hold: boolean;
|
||||
onHold: BooleanLike;
|
||||
|
||||
/**
|
||||
* The set of designs that this fabricator can print, indexed by their ID.
|
||||
@@ -69,12 +113,39 @@ export type FabricatorData = {
|
||||
/**
|
||||
* Whether the fabricator is currently printing an item.
|
||||
*/
|
||||
busy: boolean;
|
||||
busy: BooleanLike;
|
||||
|
||||
/**
|
||||
* If nonzero, the maximum quantity of material that the fabricator can hold.
|
||||
* Typically present with local storage is enabled (e.g, disconnected from
|
||||
* the ore silo).
|
||||
* The maximum quantity of material that the fabricator can hold, or `-1`
|
||||
* if the fabricator can hold infinitely many materials (such as the ore
|
||||
* silo).
|
||||
*/
|
||||
materialMaximum: number;
|
||||
|
||||
/**
|
||||
* The fabricator's current queue.
|
||||
*/
|
||||
queue: {
|
||||
/**
|
||||
* The job ID for this queued job. This is always unique, and can be used
|
||||
* as a `key`.
|
||||
*/
|
||||
jobId: number;
|
||||
|
||||
/**
|
||||
* The design ID being printed. Available in `super.designs`.
|
||||
*/
|
||||
designId: string;
|
||||
|
||||
/**
|
||||
* If `true`, this design is currently being fabricated, and `timeLeft`
|
||||
* is actively decreasing.
|
||||
*/
|
||||
processing: BooleanLike;
|
||||
|
||||
/**
|
||||
* The time left in this design's fabrication, in deciseconds.
|
||||
*/
|
||||
timeLeft: number;
|
||||
}[];
|
||||
};
|
||||
|
||||
@@ -1,37 +1,15 @@
|
||||
import { useBackend, useSharedState } from '../backend';
|
||||
import { Stack, Section, Button, Icon, Dimmer } from '../components';
|
||||
import { useBackend } from '../backend';
|
||||
import { Stack, Section, Icon, Dimmer, Box, Tooltip } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { Material, MaterialAmount, MaterialFormatting, MATERIAL_KEYS } from './common/Materials';
|
||||
import { sortBy } from 'common/collections';
|
||||
import { MineralAccessBar } from './Fabrication/MineralAccessBar';
|
||||
import { SearchBar } from './Fabrication/SearchBar';
|
||||
import { DesignCategoryTabs } from './Fabrication/DesignCategoryTabs';
|
||||
import { MaterialCostSequence } from './Fabrication/MaterialCostSequence';
|
||||
import { MaterialAccessBar } from './Fabrication/MaterialAccessBar';
|
||||
import { FabricatorData, Design, MaterialMap } from './Fabrication/Types';
|
||||
|
||||
/**
|
||||
* A dummy category that, when selected, renders ALL recipes to the UI.
|
||||
*/
|
||||
const ALL_CATEGORY = '__ALL';
|
||||
import { classes } from 'common/react';
|
||||
import { DesignBrowser } from './Fabrication/DesignBrowser';
|
||||
|
||||
export const Fabricator = (props, context) => {
|
||||
const { act, data } = useBackend<FabricatorData>(context);
|
||||
const { fab_name, on_hold, designs, busy } = data;
|
||||
|
||||
const [selectedCategory, setSelectedCategory] = useSharedState(
|
||||
context,
|
||||
'selected_category',
|
||||
ALL_CATEGORY
|
||||
);
|
||||
const [searchText, setSearchText] = useSharedState(
|
||||
context,
|
||||
'search_text',
|
||||
''
|
||||
);
|
||||
|
||||
// Sort the designs by name.
|
||||
const sortedDesigns = sortBy((design: Design) => design.name)(
|
||||
Object.values(designs)
|
||||
);
|
||||
const { fabName, onHold, designs, busy } = data;
|
||||
|
||||
// Reduce the material count array to a map of actually available materials.
|
||||
const availableMaterials: MaterialMap = {};
|
||||
@@ -41,89 +19,25 @@ export const Fabricator = (props, context) => {
|
||||
}
|
||||
|
||||
return (
|
||||
<Window title={fab_name} width={670} height={600}>
|
||||
<Window title={fabName} width={670} height={600}>
|
||||
<Window.Content>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item grow>
|
||||
<Stack fill>
|
||||
<Stack.Item width={'200px'}>
|
||||
<DesignCategoryTabs
|
||||
currentCategory={selectedCategory}
|
||||
onCategorySelected={(category) => {
|
||||
setSelectedCategory(category);
|
||||
setSearchText('');
|
||||
}}
|
||||
designs={sortedDesigns}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section
|
||||
title={
|
||||
selectedCategory === ALL_CATEGORY
|
||||
? 'All Designs'
|
||||
: selectedCategory
|
||||
}
|
||||
fill>
|
||||
<Stack vertical fill>
|
||||
<Stack.Item>
|
||||
<Section>
|
||||
<SearchBar
|
||||
searchText={searchText}
|
||||
onSearchTextChanged={setSearchText}
|
||||
hint={'Search this category...'}
|
||||
/>
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Section fill style={{ 'overflow': 'auto' }}>
|
||||
{sortedDesigns
|
||||
.filter(
|
||||
(design) =>
|
||||
selectedCategory === ALL_CATEGORY ||
|
||||
design.categories?.indexOf(selectedCategory) !==
|
||||
-1
|
||||
)
|
||||
.filter((design) =>
|
||||
design.name
|
||||
.toLowerCase()
|
||||
.includes(searchText.toLowerCase())
|
||||
)
|
||||
.map((design) => (
|
||||
<Recipe
|
||||
key={design.name}
|
||||
design={design}
|
||||
available={availableMaterials}
|
||||
/>
|
||||
))}
|
||||
</Section>
|
||||
{!!busy && (
|
||||
<Dimmer
|
||||
style={{
|
||||
'font-size': '2em',
|
||||
'text-align': 'center',
|
||||
}}>
|
||||
<Icon name="cog" spin />
|
||||
{' Building items...'}
|
||||
</Dimmer>
|
||||
)}
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
</Section>
|
||||
{!!on_hold && (
|
||||
<Dimmer
|
||||
style={{ 'font-size': '2em', 'text-align': 'center' }}>
|
||||
Mineral access is on hold, please contact the quartermaster.
|
||||
</Dimmer>
|
||||
)}
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
<DesignBrowser
|
||||
busy={!!busy}
|
||||
designs={Object.values(designs)}
|
||||
availableMaterials={availableMaterials}
|
||||
buildRecipeElement={(
|
||||
design,
|
||||
availableMaterials,
|
||||
onPrintDesign
|
||||
) => <Recipe design={design} available={availableMaterials} />}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<Section>
|
||||
<MineralAccessBar
|
||||
availableMaterials={sortBy((a: Material) => a.name)(
|
||||
data.materials ?? []
|
||||
)}
|
||||
<MaterialAccessBar
|
||||
availableMaterials={data.materials ?? []}
|
||||
onEjectRequested={(material, amount) =>
|
||||
act('remove_mat', { ref: material.ref, amount })
|
||||
}
|
||||
@@ -131,42 +45,16 @@ export const Fabricator = (props, context) => {
|
||||
</Section>
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
{!!onHold && (
|
||||
<Dimmer style={{ 'font-size': '2em', 'text-align': 'center' }}>
|
||||
Mineral access is on hold, please contact the quartermaster.
|
||||
</Dimmer>
|
||||
)}
|
||||
</Window.Content>
|
||||
</Window>
|
||||
);
|
||||
};
|
||||
|
||||
type MaterialCostProps = {
|
||||
design: Design;
|
||||
amount: number;
|
||||
available: MaterialMap;
|
||||
};
|
||||
|
||||
const MaterialCost = (props: MaterialCostProps, context) => {
|
||||
const { design, amount, available } = props;
|
||||
|
||||
return (
|
||||
<Stack wrap justify="space-around">
|
||||
{Object.entries(design.cost).map(([material, cost]) => (
|
||||
<Stack.Item key={material}>
|
||||
<MaterialAmount
|
||||
name={material as keyof typeof MATERIAL_KEYS}
|
||||
amount={cost * amount}
|
||||
formatting={MaterialFormatting.SIUnits}
|
||||
color={
|
||||
cost * amount > available[material]
|
||||
? 'bad'
|
||||
: cost * amount * 2 > available[material]
|
||||
? 'average'
|
||||
: 'normal'
|
||||
}
|
||||
/>
|
||||
</Stack.Item>
|
||||
))}
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
type PrintButtonProps = {
|
||||
design: Design;
|
||||
quantity: number;
|
||||
@@ -183,17 +71,24 @@ const PrintButton = (props: PrintButtonProps, context) => {
|
||||
);
|
||||
|
||||
return (
|
||||
<Button
|
||||
className={`Fabricator__PrintAmount ${
|
||||
!canPrint ? 'Fabricator__PrintAmount--disabled' : ''
|
||||
}`}
|
||||
tooltip={
|
||||
<MaterialCost design={design} amount={quantity} available={available} />
|
||||
}
|
||||
color={'transparent'}
|
||||
onClick={() => act('build', { ref: design.id, amount: quantity })}>
|
||||
×{quantity}
|
||||
</Button>
|
||||
<Tooltip
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={design}
|
||||
amount={quantity}
|
||||
available={available}
|
||||
/>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}
|
||||
color={'transparent'}
|
||||
onClick={() => act('build', { ref: design.id, amount: quantity })}>
|
||||
×{quantity}
|
||||
</div>
|
||||
</Tooltip>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -207,37 +102,43 @@ const Recipe = (props: { design: Design; available: MaterialMap }, context) => {
|
||||
);
|
||||
|
||||
return (
|
||||
<div class="Fabricator__Recipe">
|
||||
<Stack justify="space-between" align="stretch">
|
||||
<Stack.Item>
|
||||
<Button
|
||||
icon="question-circle"
|
||||
color="transparent"
|
||||
tooltip={design.desc}
|
||||
tooltipPosition="left"
|
||||
<div className="FabricatorRecipe">
|
||||
<Tooltip content={design.desc} position="right">
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Button',
|
||||
'FabricatorRecipe__Button--icon',
|
||||
!canPrint && 'FabricatorRecipe__Button--disabled',
|
||||
])}>
|
||||
<Icon name="question-circle" />
|
||||
</div>
|
||||
</Tooltip>
|
||||
<Tooltip
|
||||
content={
|
||||
<MaterialCostSequence
|
||||
design={design}
|
||||
amount={1}
|
||||
available={available}
|
||||
/>
|
||||
</Stack.Item>
|
||||
<Stack.Item grow>
|
||||
<Button
|
||||
color={'transparent'}
|
||||
className={`Fabricator__Button ${
|
||||
!canPrint ? 'Fabricator__Button--disabled' : ''
|
||||
}`}
|
||||
fluid
|
||||
tooltip={
|
||||
<MaterialCost design={design} amount={1} available={available} />
|
||||
}
|
||||
onClick={() => act('build', { ref: design.id, amount: 1 })}>
|
||||
{design.name}
|
||||
</Button>
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<PrintButton design={design} quantity={5} available={available} />
|
||||
</Stack.Item>
|
||||
<Stack.Item>
|
||||
<PrintButton design={design} quantity={10} available={available} />
|
||||
</Stack.Item>
|
||||
</Stack>
|
||||
}>
|
||||
<div
|
||||
className={classes([
|
||||
'FabricatorRecipe__Title',
|
||||
!canPrint && 'FabricatorRecipe__Title--disabled',
|
||||
])}
|
||||
onClick={() => act('build', { ref: design.id, amount: 1 })}>
|
||||
<div className="FabricatorRecipe__Icon">
|
||||
<Box
|
||||
width={'32px'}
|
||||
height={'32px'}
|
||||
className={classes(['design32x32', design.icon])}
|
||||
/>
|
||||
</div>
|
||||
<div className="FabricatorRecipe__Label">{design.name}</div>
|
||||
</div>
|
||||
</Tooltip>
|
||||
<PrintButton design={design} quantity={5} available={available} />
|
||||
<PrintButton design={design} quantity={10} available={available} />
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
import { BooleanLike } from 'common/react';
|
||||
import { Box, Button, NumberInput, Flex } from '../../components';
|
||||
import { classes } from 'common/react';
|
||||
import { formatMoney, formatSiUnit } from '../../format';
|
||||
import { useSharedState } from '../../backend';
|
||||
import { BoxProps } from '../../components/Box';
|
||||
|
||||
export const MATERIAL_KEYS = {
|
||||
'iron': 'sheet-metal_3',
|
||||
'glass': 'sheet-glass_3',
|
||||
'silver': 'sheet-silver_3',
|
||||
'gold': 'sheet-gold_3',
|
||||
'diamond': 'sheet-diamond',
|
||||
'plasma': 'sheet-plasma_3',
|
||||
'uranium': 'sheet-uranium',
|
||||
'bananium': 'sheet-bananium',
|
||||
'titanium': 'sheet-titanium_3',
|
||||
'bluespace crystal': 'polycrystal',
|
||||
'plastic': 'sheet-plastic_3',
|
||||
} as const;
|
||||
|
||||
export type Material = {
|
||||
name: keyof typeof MATERIAL_KEYS;
|
||||
ref: string;
|
||||
amount: number;
|
||||
sheets: number;
|
||||
removable: BooleanLike;
|
||||
};
|
||||
|
||||
type MaterialIconProps = BoxProps & {
|
||||
material: keyof typeof MATERIAL_KEYS;
|
||||
};
|
||||
|
||||
export const MaterialIcon = (props: MaterialIconProps) => {
|
||||
const { material, ...rest } = props;
|
||||
|
||||
return (
|
||||
<Box
|
||||
{...rest}
|
||||
className={classes(['sheetmaterials32x32', MATERIAL_KEYS[material]])}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
const EjectMaterial = (
|
||||
props: {
|
||||
material: Material;
|
||||
onEject: (amount: number) => void;
|
||||
},
|
||||
context
|
||||
) => {
|
||||
const { name, removable, sheets } = props.material;
|
||||
const [removeMaterials, setRemoveMaterials] = useSharedState(
|
||||
context,
|
||||
'remove_mats_' + name,
|
||||
1
|
||||
);
|
||||
if (removeMaterials > 1 && sheets < removeMaterials) {
|
||||
setRemoveMaterials(sheets || 1);
|
||||
}
|
||||
return (
|
||||
<>
|
||||
<NumberInput
|
||||
width="30px"
|
||||
animated
|
||||
value={removeMaterials}
|
||||
minValue={1}
|
||||
maxValue={sheets || 1}
|
||||
initial={1}
|
||||
onDrag={(e, val) => {
|
||||
const newVal = parseInt(val, 10);
|
||||
if (Number.isInteger(newVal)) {
|
||||
setRemoveMaterials(newVal);
|
||||
}
|
||||
}}
|
||||
/>
|
||||
<Button
|
||||
icon="eject"
|
||||
disabled={!removable}
|
||||
onClick={() => {
|
||||
props.onEject(removeMaterials);
|
||||
}}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export const Materials = (props: {
|
||||
materials: Material[];
|
||||
onEject: (ref: string, amount: number) => void;
|
||||
}) => {
|
||||
return (
|
||||
<Flex wrap>
|
||||
{props.materials.map((material) => (
|
||||
<Flex.Item key={material.name} grow={1} shrink={1}>
|
||||
<MaterialAmount
|
||||
name={material.name}
|
||||
amount={material.amount}
|
||||
formatting={MaterialFormatting.SIUnits}
|
||||
/>
|
||||
<Box mt={1} textAlign="center">
|
||||
<EjectMaterial
|
||||
material={material}
|
||||
onEject={(amount) => {
|
||||
props.onEject(material.ref, amount);
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
</Flex.Item>
|
||||
))}
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
|
||||
export enum MaterialFormatting {
|
||||
SIUnits,
|
||||
Money,
|
||||
Locale,
|
||||
}
|
||||
|
||||
export const MaterialAmount = (props: {
|
||||
name: keyof typeof MATERIAL_KEYS;
|
||||
amount: number;
|
||||
formatting?: MaterialFormatting;
|
||||
color?: string;
|
||||
style?: Record<string, string>;
|
||||
}) => {
|
||||
const { name, amount, color, style } = props;
|
||||
|
||||
let amountDisplay;
|
||||
|
||||
switch (props.formatting) {
|
||||
case MaterialFormatting.SIUnits:
|
||||
amountDisplay = formatSiUnit(amount, 0);
|
||||
break;
|
||||
case MaterialFormatting.Money:
|
||||
amountDisplay = formatMoney(amount);
|
||||
break;
|
||||
case MaterialFormatting.Locale:
|
||||
amountDisplay = amount.toLocaleString();
|
||||
break;
|
||||
default:
|
||||
amountDisplay = amount;
|
||||
}
|
||||
|
||||
return (
|
||||
<Flex direction="column" textAlign="center">
|
||||
<Flex.Item>
|
||||
<MaterialIcon material={name} style={style} />
|
||||
</Flex.Item>
|
||||
<Flex.Item color={color}>{amountDisplay}</Flex.Item>
|
||||
</Flex>
|
||||
);
|
||||
};
|
||||
@@ -1,17 +1,29 @@
|
||||
@use 'sass:math';
|
||||
|
||||
@use '../base.scss';
|
||||
@use '../colors.scss';
|
||||
@use '../functions.scss' as *;
|
||||
@use '../components/Button.scss' as button;
|
||||
@use '../components/Tabs.scss' as tabs;
|
||||
|
||||
.Fabricator__Recipe {
|
||||
padding: 0.25em 0;
|
||||
border-bottom: 1px solid #000;
|
||||
position: relative;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.Fabricator__Button {
|
||||
white-space: normal;
|
||||
.Fabricator__PrintAmount {
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
Fabricator__Icon {
|
||||
vertical-align: middle;
|
||||
.Fabricator__PrintAmount {
|
||||
transition: opacity 0.5s ease-out;
|
||||
}
|
||||
|
||||
.Fabricator__Button--disabled,
|
||||
.Fabricator__PrintAmount--disabled {
|
||||
opacity: 0.5;
|
||||
background-color: transparent;
|
||||
@@ -25,6 +37,7 @@ Fabricator__Icon {
|
||||
position: relative;
|
||||
padding: 0.5em;
|
||||
border-radius: 0 0 0.25em 0.25em;
|
||||
transition: opacity 0.5s ease-in-out;
|
||||
}
|
||||
|
||||
.MaterialDock--active {
|
||||
@@ -32,6 +45,14 @@ Fabricator__Icon {
|
||||
transition: background-color 0.125s ease-out;
|
||||
}
|
||||
|
||||
.MaterialDock__Label {
|
||||
transition: opacity 0.5s ease-out;
|
||||
}
|
||||
|
||||
.MaterialDock--disabled .MaterialDock__Label {
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
.MaterialDock__Dock {
|
||||
position: absolute;
|
||||
background-color: #111;
|
||||
@@ -65,3 +86,133 @@ Fabricator__Icon {
|
||||
position: relative;
|
||||
box-shadow: 0 0 3px #000;
|
||||
}
|
||||
|
||||
.FabricatorRecipe {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
width: auto;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.5);
|
||||
position: relative;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
&__Progress {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 4px;
|
||||
background-color: rgba(255, 255, 255, 0.25);
|
||||
border-radius: 4px;
|
||||
transition: width 1s linear;
|
||||
}
|
||||
|
||||
&__Title,
|
||||
&__Button {
|
||||
@include button.button-color(base.$color-bg);
|
||||
background-color: rgba(base.$color-bg, 0);
|
||||
color: button.$color-transparent-text;
|
||||
position: relative;
|
||||
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-start;
|
||||
padding: 0.25em 0.5em;
|
||||
border-radius: 0;
|
||||
margin: 0;
|
||||
transition: opacity 0.5s ease-out;
|
||||
|
||||
&:first-child {
|
||||
border-radius: 4px 0 0 4px;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-radius: 0 4px 4px 0;
|
||||
}
|
||||
|
||||
&--disabled {
|
||||
opacity: 0.5;
|
||||
}
|
||||
}
|
||||
|
||||
&__Title {
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
&__Icon {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
&__Button {
|
||||
justify-self: flex-end;
|
||||
|
||||
&--icon {
|
||||
padding: 0 1em;
|
||||
}
|
||||
|
||||
&--disabled {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.FabricatorMaterialIcon {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
|
||||
&__Icon {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
opacity: 0;
|
||||
transition: opacity 0.5s ease-out;
|
||||
|
||||
&--active {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.FabricatorTabs {
|
||||
.FabricatorTabs {
|
||||
margin-top: 0.5em;
|
||||
padding-left: 0.25em;
|
||||
}
|
||||
|
||||
&__Tab {
|
||||
background-color: rgba(base.$color-bg, 0);
|
||||
color: button.$color-transparent-text;
|
||||
border-right: 2px solid transparent;
|
||||
border-radius: 0.25em 0 0 0.25em;
|
||||
padding: 0.5em 0 0.5em 0.5em;
|
||||
padding-right: 1.25em;
|
||||
margin-right: -0.5em;
|
||||
padding-right: 0.5em;
|
||||
transition: border-color 0.125s ease-out, background-color 0.0625s ease-out;
|
||||
|
||||
&:hover,
|
||||
&--active {
|
||||
background-color: rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
&--active {
|
||||
color: #fff;
|
||||
border-right: 2px solid colors.$primary;
|
||||
}
|
||||
}
|
||||
|
||||
&__Label {
|
||||
display: -ms-flexbox;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user