From 2a5af7a893002021794593f0a2db79af32c60459 Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Sat, 18 Oct 2025 17:29:15 -0700 Subject: [PATCH] [MIRROR] Techweb Unittest (#11813) Co-authored-by: Will <7099514+Willburd@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> --- .gitignore | 24 +--- .../research/tg/designs/boards/medical.dm | 4 +- .../research/tg/designs/boards/misc.dm | 18 +-- .../research/tg/designs/boards/refinery.dm | 24 ++-- .../tg/designs/mechfab_equipment_designs.dm | 46 +++---- .../research/tg/designs/modsuit_designs.dm | 2 +- .../research/tg/designs/tool_designs.dm | 2 +- .../research/tg/techwebs/nodes/alien_nodes.dm | 5 +- .../tg/techwebs/nodes/biology_nodes.dm | 2 + .../tg/techwebs/nodes/circuit_nodes.dm | 2 + .../tg/techwebs/nodes/cyborg_nodes.dm | 1 + .../research/tg/techwebs/nodes/engi_nodes.dm | 6 + .../research/tg/techwebs/nodes/mech_nodes.dm | 1 + .../research/tg/techwebs/nodes/scene_nodes.dm | 1 + .../tg/techwebs/nodes/security_nodes.dm | 7 +- .../tg/techwebs/nodes/service_nodes.dm | 7 +- code/modules/unit_tests/_unit_tests.dm | 1 + code/modules/unit_tests/techwebs.dm | 114 ++++++++++++++++++ 18 files changed, 191 insertions(+), 76 deletions(-) create mode 100644 code/modules/unit_tests/techwebs.dm diff --git a/.gitignore b/.gitignore index 6d0d14d3d1..661cc08070 100644 --- a/.gitignore +++ b/.gitignore @@ -32,18 +32,6 @@ cfg/ !/.vscode/settings.json !/.vscode/tasks.json -<<<<<<< HEAD -#GitHub Atom -.atom-build.json - -#KDevelop and Kate -*.kdev4* -*.kate-swp - -#extra map stuff -/_maps/**/backup/ -/_maps/templates.dm -======= #Ignore IDE files we don't need in the repo. /.vs/**/* /v17/**/* @@ -52,22 +40,18 @@ cfg/ /v20/**/* /v21/**/* /v22/**/* ->>>>>>> 4cb5713256 (Gatorsnout (#18536)) temp.dmi -# JavaScript tools -**/node_modules +node_modules/ package-lock.json # CBT Things .cache -# named byond versions config -/tools/build/dm_versions.json - -config/jobwhitelist.txt - +#These get built by some automatic process +tgui/public/tgui.bundle.css +tgui/public/tgui.bundle.js #ignore tracy dll prof.dll diff --git a/code/modules/research/tg/designs/boards/medical.dm b/code/modules/research/tg/designs/boards/medical.dm index 9f67427780..45ff914eb5 100644 --- a/code/modules/research/tg/designs/boards/medical.dm +++ b/code/modules/research/tg/designs/boards/medical.dm @@ -107,7 +107,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/chem_analyzer name = "chem analyzer PRO circuit" @@ -117,4 +117,4 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE diff --git a/code/modules/research/tg/designs/boards/misc.dm b/code/modules/research/tg/designs/boards/misc.dm index cd46dcc60e..16d00b90f4 100644 --- a/code/modules/research/tg/designs/boards/misc.dm +++ b/code/modules/research/tg/designs/boards/misc.dm @@ -16,7 +16,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/oriontrail name = "orion trail arcade machine" @@ -27,7 +27,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/clawmachine name = "grab-a-gift arcade machine" @@ -38,7 +38,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE + departmental_flags = DEPARTMENT_BITFLAG_SERVICE | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/seccamera name = "security camera monitor" @@ -48,7 +48,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/secdata name = "security records console" @@ -58,7 +58,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/prisonmanage name = "prisoner management console" @@ -68,7 +68,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/med_data name = "medical records console" @@ -78,7 +78,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/operating name = "patient monitoring console" @@ -88,7 +88,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/scan_console name = "DNA console" @@ -98,7 +98,7 @@ category = list( RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/clonecontrol name = "cloning control console circuit" diff --git a/code/modules/research/tg/designs/boards/refinery.dm b/code/modules/research/tg/designs/boards/refinery.dm index d41b6e7b59..2d83a258e3 100644 --- a/code/modules/research/tg/designs/boards/refinery.dm +++ b/code/modules/research/tg/designs/boards/refinery.dm @@ -6,7 +6,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_furnace name = "Industrial Reagent Furnace" @@ -16,7 +16,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_grinder name = "Industrial Reagent Grinder" @@ -26,7 +26,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_hub name = "Industrial Reagent Hub" @@ -36,7 +36,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_pipe name = "Industrial Reagent Pipe" @@ -46,7 +46,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_pump name = "Industrial Reagent Pump" @@ -56,7 +56,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_reactor name = "Industrial Reagent Reactor" @@ -66,7 +66,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_vat name = "Industrial Reagent Vat" @@ -76,7 +76,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_mixer name = "Industrial Reagent Mixer" @@ -86,7 +86,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/industrial_reagent_waste_processor name = "Industrial Reagent Waste Processor" @@ -96,7 +96,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/pump_relay name = "Pump Relay" @@ -106,7 +106,7 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/board/fluid_pump name = "Fluid Pump" @@ -116,4 +116,4 @@ category = list( RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE diff --git a/code/modules/research/tg/designs/mechfab_equipment_designs.dm b/code/modules/research/tg/designs/mechfab_equipment_designs.dm index ec944eb222..bd7607df16 100644 --- a/code/modules/research/tg/designs/mechfab_equipment_designs.dm +++ b/code/modules/research/tg/designs/mechfab_equipment_designs.dm @@ -20,7 +20,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/drill name = "Drill" @@ -29,7 +29,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/extinguisher name = "Extinguisher" @@ -56,7 +56,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/passenger name = "Passenger Compartment" @@ -77,7 +77,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /// I guess this isn't STRICTLY a weapon... /datum/design_techweb/mechfab/equipment/syringe_gun @@ -88,7 +88,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE //You escape the weapon designation as well. /datum/design_techweb/mechfab/equipment/medigun @@ -101,7 +101,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE // *** Weapon modules /datum/design_techweb/mechfab/equipment/weapon @@ -110,7 +110,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/weapon/taser @@ -324,7 +324,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/gravcatapult name = "Gravitational Catapult" @@ -381,7 +381,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/rad_drone name = "Hazmat Drone" @@ -393,7 +393,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/medanalyzer name = "Mounted Body Scanner" @@ -405,7 +405,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL ) - departmental_flags = DEPARTMENT_BITFLAG_MEDICAL + departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/jetpack name = "Ion Jetpack" @@ -449,7 +449,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/proj_armor name = "Ranged Armor Booster" @@ -461,7 +461,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES ) - departmental_flags = DEPARTMENT_BITFLAG_SECURITY + departmental_flags = DEPARTMENT_BITFLAG_SECURITY | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/diamond_drill name = "Diamond Drill" @@ -473,7 +473,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/ground_drill name = "Surface Bore" @@ -485,7 +485,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/orescanner name = "Ore Scanner" @@ -497,7 +497,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/advorescanner name = "Advanced Ore Scanner" @@ -509,7 +509,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO + departmental_flags = DEPARTMENT_BITFLAG_CARGO | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/runningboard name = "Powered Exosuit Running Board" @@ -532,7 +532,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/powercrowbar name = "hydraulic prybar" @@ -544,7 +544,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/powercutters name = "hydraulic cable cutter" @@ -556,7 +556,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/powerscrewdriver name = "hydraulic screwdriver" @@ -568,7 +568,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/powerwelder name = "welding laser" @@ -580,7 +580,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/inflatables name = "inflatables deployer" @@ -592,7 +592,7 @@ category = list( RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/mechfab/equipment/hardpoint_clamp name = "hardpoint actuator" diff --git a/code/modules/research/tg/designs/modsuit_designs.dm b/code/modules/research/tg/designs/modsuit_designs.dm index e4555be459..ec81a7b97d 100644 --- a/code/modules/research/tg/designs/modsuit_designs.dm +++ b/code/modules/research/tg/designs/modsuit_designs.dm @@ -402,7 +402,7 @@ id = "rig_component_graviton" //req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 4, TECH_POWER = 5) materials = list(MAT_PLASTEEL = 3500, MAT_GRAPHITE = 2000, MAT_OSMIUM = 1000) - build_path = /obj/item/rig_module/vision/mining + build_path = /obj/item/rig_module/vision/graviton category = list( RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE ) diff --git a/code/modules/research/tg/designs/tool_designs.dm b/code/modules/research/tg/designs/tool_designs.dm index 84ef671b63..6a0a85171c 100644 --- a/code/modules/research/tg/designs/tool_designs.dm +++ b/code/modules/research/tg/designs/tool_designs.dm @@ -196,7 +196,7 @@ category = list( RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MISC ) - departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE /datum/design_techweb/beaker_noreact name = "Cryostasis Beaker" diff --git a/code/modules/research/tg/techwebs/nodes/alien_nodes.dm b/code/modules/research/tg/techwebs/nodes/alien_nodes.dm index edc38a0a78..ab3787281a 100644 --- a/code/modules/research/tg/techwebs/nodes/alien_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/alien_nodes.dm @@ -10,7 +10,8 @@ "anobattery-advanced", "anobattery-exotic", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(CHANNEL_SCIENCE) /datum/techweb_node/alien_engi id = TECHWEB_NODE_ALIEN_ENGI @@ -24,5 +25,5 @@ "hybridwirecutters", "hybridwelder", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) announce_channels = list(CHANNEL_ENGINEERING) diff --git a/code/modules/research/tg/techwebs/nodes/biology_nodes.dm b/code/modules/research/tg/techwebs/nodes/biology_nodes.dm index 4172507250..d445e296cf 100644 --- a/code/modules/research/tg/techwebs/nodes/biology_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/biology_nodes.dm @@ -31,6 +31,7 @@ // "biopsy_tool", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(CHANNEL_MEDICAL) /datum/techweb_node/xenobiology id = TECHWEB_NODE_XENOBIOLOGY @@ -55,6 +56,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) discount_experiments = list(/datum/experiment/scanning/points/slime_scanning = TECHWEB_TIER_3_POINTS) + announce_channels = list(CHANNEL_MEDICAL) /datum/techweb_node/gene_engineering id = TECHWEB_NODE_GENE_ENGINEERING diff --git a/code/modules/research/tg/techwebs/nodes/circuit_nodes.dm b/code/modules/research/tg/techwebs/nodes/circuit_nodes.dm index b696de2ed6..4c1446d9b9 100644 --- a/code/modules/research/tg/techwebs/nodes/circuit_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/circuit_nodes.dm @@ -26,6 +26,7 @@ "ic_printer_upgrade_clone", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + announce_channels = list(CHANNEL_SCIENCE) /datum/techweb_node/programmed_robot id = TECHWEB_NODE_PROGRAMMED_ROBOT @@ -41,3 +42,4 @@ "assembly-drone-e", //CHOMPEdit Start - More Movable Shells ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(CHANNEL_SCIENCE) diff --git a/code/modules/research/tg/techwebs/nodes/cyborg_nodes.dm b/code/modules/research/tg/techwebs/nodes/cyborg_nodes.dm index 332912f8d1..21558a8ec4 100644 --- a/code/modules/research/tg/techwebs/nodes/cyborg_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/cyborg_nodes.dm @@ -169,6 +169,7 @@ prereq_ids = list(TECHWEB_NODE_AUGMENTATION) design_ids = list( "implant_backup", + "health_scan_implant", // "skill_station", // "implant_trombone", // "implant_chem", diff --git a/code/modules/research/tg/techwebs/nodes/engi_nodes.dm b/code/modules/research/tg/techwebs/nodes/engi_nodes.dm index 596af3c2c3..001dc4b423 100644 --- a/code/modules/research/tg/techwebs/nodes/engi_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/engi_nodes.dm @@ -118,6 +118,7 @@ "s-transmitter", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + announce_channels = list(CHANNEL_ENGINEERING) /datum/techweb_node/parts_omni id = TECHWEB_NODE_PARTS_OMNI @@ -210,6 +211,7 @@ "grid_checker", "breakerbox", "tesla_coil", + "rtg", // "apc_control", // "powermonitor", // "smes", @@ -256,6 +258,7 @@ // "modular_shield_console", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(CHANNEL_ENGINEERING) /datum/techweb_node/exp_tools id = TECHWEB_NODE_EXP_TOOLS @@ -293,6 +296,7 @@ "janitor_hud", "rig_component_medhud", "rig_component_sechud", + "rig_component_mining", "graviton_goggles", "omnihud", // "diagnostic_hud", @@ -393,6 +397,8 @@ // "nv_scigoggles", // "security_hud_night", ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(CHANNEL_SECURITY, CHANNEL_SCIENCE, CHANNEL_ENGINEERING) /datum/techweb_node/graviton_vision id = TECHWEB_NODE_GRAVITON_VISION diff --git a/code/modules/research/tg/techwebs/nodes/mech_nodes.dm b/code/modules/research/tg/techwebs/nodes/mech_nodes.dm index bd93bebb68..822f7f26ee 100644 --- a/code/modules/research/tg/techwebs/nodes/mech_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/mech_nodes.dm @@ -112,6 +112,7 @@ "mech_med_analyzer", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + announce_channels = list(CHANNEL_SCIENCE) /datum/techweb_node/mech_mining id = TECHWEB_NODE_MECH_MINING diff --git a/code/modules/research/tg/techwebs/nodes/scene_nodes.dm b/code/modules/research/tg/techwebs/nodes/scene_nodes.dm index 747ca8285e..0bf4e06957 100644 --- a/code/modules/research/tg/techwebs/nodes/scene_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/scene_nodes.dm @@ -41,3 +41,4 @@ "mindbinder", //CHOMPEDIT - Adds Mindbinder to illegal techweb. ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(CHANNEL_SCIENCE) diff --git a/code/modules/research/tg/techwebs/nodes/security_nodes.dm b/code/modules/research/tg/techwebs/nodes/security_nodes.dm index a269b28429..4560a8a7b6 100644 --- a/code/modules/research/tg/techwebs/nodes/security_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/security_nodes.dm @@ -167,7 +167,8 @@ "nsfw_cell_xray", // "nsfw_cell_stripper", // CHOMPRemove ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + announce_channels = list(CHANNEL_SECURITY) /datum/techweb_node/phase_weapons //CHOMPEdit Start - Adds Phase Weaponry id = TECHWEB_NODE_PHASE_WEAPONS @@ -185,7 +186,7 @@ "marksman_rifle_frontier_phaser", "handbow_frontier_phaser", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) //They mostly work on mobs. + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) //They mostly work on mobs. announce_channels = list(CHANNEL_SECURITY) //CHOMPEdit End - Adds Phase Weaponry /datum/techweb_node/cryogun //CHOMPEdit Start @@ -196,7 +197,7 @@ design_ids = list( "cryogun", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) //It's actually laughably weak. + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) //It's actually laughably weak. announce_channels = list(CHANNEL_SECURITY) /datum/techweb_node/caseless_rifle diff --git a/code/modules/research/tg/techwebs/nodes/service_nodes.dm b/code/modules/research/tg/techwebs/nodes/service_nodes.dm index ed2a4b43e9..1cf5e838de 100644 --- a/code/modules/research/tg/techwebs/nodes/service_nodes.dm +++ b/code/modules/research/tg/techwebs/nodes/service_nodes.dm @@ -176,6 +176,7 @@ ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) discount_experiments = list(/datum/experiment/physical/arcade_winner = TECHWEB_TIER_2_POINTS) + announce_channels = list(CHANNEL_SERVICE) /datum/techweb_node/fireworks id = TECHWEB_NODE_FIREWORKS @@ -199,7 +200,7 @@ "fireworkfallout", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) - announce_channels = list(CHANNEL_COMMON) + announce_channels = list(CHANNEL_SCIENCE) // Kitchen root node @@ -271,5 +272,5 @@ design_ids = list( "confetti_cannon", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) - announce_channels = list(CHANNEL_COMMON) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + announce_channels = list(CHANNEL_SERVICE) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index c1c0f345cb..9594732b55 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -113,6 +113,7 @@ #include "spritesheets.dm" #include "sqlite_tests.dm" #include "subsystem_init.dm" +#include "techwebs.dm" #include "tgui_create_message.dm" #include "timer_sanity.dm" #include "trait_tests.dm" diff --git a/code/modules/unit_tests/techwebs.dm b/code/modules/unit_tests/techwebs.dm new file mode 100644 index 0000000000..a6b38d5759 --- /dev/null +++ b/code/modules/unit_tests/techwebs.dm @@ -0,0 +1,114 @@ +/datum/unit_test/techwebs_must_all_be_valid + +/datum/unit_test/techwebs_must_all_be_valid/Run() + var/failed = FALSE + var/list/unique_nodes = list() + + // Each node in the web + var/list/used_designs = list() + for(var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + if(node.id == /datum/techweb_node/error_node::id) + continue + + // Nodes must always be unique + if(node.id in unique_nodes) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] used an id already in use by another node: \"[node.id]\"") + failed = TRUE + unique_nodes += node.id + + // Must have a description + if(node.description == /datum/techweb_node::description) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] did not have a description set.") + failed = TRUE + + // Must have an announcement channel + if(!node.starting_node && !node.announce_channels?.len) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] did not have any announce_channels set.") + failed = TRUE + if(node.starting_node && node.announce_channels?.len) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] starting node has announcement channels, it should not.") + failed = TRUE + + // Must have costs set + if(!node.starting_node && !node.research_costs?.len) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] did not have any research_costs set.") + failed = TRUE + + // Must have valid designs + if(!node.design_ids) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] does not have any design_ids.") + failed = TRUE + else + for(var/design in node.design_ids) + used_designs += design + if(!SSresearch.techweb_designs[design]) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] has a non-existant design_id: \"[design]\"") + failed = TRUE + + // Must have valid prereqs + if(node.prereq_ids.len) + for(var/req in node.prereq_ids) + if(!SSresearch.techweb_nodes[req]) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] has a non-existant prereq_id: \"[req]\"") + failed = TRUE + + // We can't check for for some stuff in here if we haven't already checked and made sure the nodes are valid first + if(!failed) + for(var/node_id in SSresearch.techweb_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] + + // Check that our cost and make sure it's more expensive than our prior tier, unless they have a required experiment. + if(!node.required_experiments.len && node.prereq_ids.len) + if(!node.starting_node) + var/current_cost = node.research_costs.len ? INFINITY : 0 + for(var/check_cost_type in node.research_costs) + // Get the LOWEST cost of us + if(node.research_costs[check_cost_type] < current_cost) + current_cost = node.research_costs[check_cost_type] + + for(var/prereq_node_id in node.prereq_ids) + var/datum/techweb_node/prereq_node = SSresearch.techweb_nodes[prereq_node_id] + var/prereq_currentcost = prereq_node.research_costs ? INFINITY : 0 + if(prereq_node.starting_node) + continue + + for(var/req_cost_type in prereq_node.research_costs) + // Get the LOWEST cost of prereq + if(prereq_node.research_costs[req_cost_type] < prereq_currentcost) + prereq_currentcost = prereq_node.research_costs[req_cost_type] + + if(prereq_currentcost > current_cost) + TEST_NOTICE(src, "TECHWEB NODE - [node.type] costs less to make then the previous node, must always be at least the same or more expensive. ours lowest is \[[current_cost]\], prereq lowest is \[[prereq_currentcost]\]. Lesser costs than the previous node is only allowed if the node has a required experiment.") + failed = TRUE + + // Each design + var/used_design_paths = list() + for(var/design_id in SSresearch.techweb_designs) + var/datum/design_techweb/design = SSresearch.techweb_designs[design_id] + if(design.id == DESIGN_ID_IGNORE) + continue + + // Must all be accessible by science + if(!(design.departmental_flags & DEPARTMENT_BITFLAG_SCIENCE)) + TEST_NOTICE(src, "TECHWEB DESIGN - [design.type] was not flagged for science department, all designs must be accessible by science.") + failed = TRUE + + // Designs SHOULD be accessible, only a warning + if(!(design.id in used_designs)) + TEST_NOTICE(src, "TECHWEB DESIGN - WARNING [design.type] is orphaned and not accessible from any techweb node. Is this intended?") + + // Design must produce something + if(!design.build_path) + TEST_NOTICE(src, "TECHWEB DESIGN - [design.type] did not have a build_path.") + failed = TRUE + + // Design must be a unique path produced + if(design.build_path in used_design_paths) + TEST_NOTICE(src, "TECHWEB DESIGN - [design.type] had a build_path that was already used by another design: \"[design.build_path]\"") + failed = TRUE + + used_design_paths += design.build_path + + if(failed) + TEST_FAIL("All techweb entries must be valid")