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:
scriptis
2022-10-03 17:09:50 -05:00
committed by GitHub
parent a0e03c56f8
commit 14c96d05b8
49 changed files with 6243 additions and 3435 deletions
-15
View File
@@ -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"
+181 -74
View File
@@ -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
View File
@@ -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)
+4 -2
View File
@@ -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
+2 -2
View File
@@ -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
+174 -94
View File
@@ -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
+77 -19
View File
@@ -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
+240 -87
View File
@@ -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
+42 -18
View File
@@ -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
+104 -35
View File
@@ -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
)
+110 -44
View File
@@ -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
)
+22 -4
View File
@@ -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
+6 -6
View File
@@ -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
+66 -7
View File
@@ -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",
+109 -212
View File
@@ -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"])
+22 -8
View File
@@ -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++
-224
View File
@@ -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>
);
};
+254
View File
@@ -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 })}>
&times;{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>
);
};
@@ -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)}>
&times;{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;
}[];
};
+79 -178
View File
@@ -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 })}>
&times;{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 })}>
&times;{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;
}
}