[MIRROR] Techweb Unittest (#11813)

Co-authored-by: Will <7099514+Willburd@users.noreply.github.com>
Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
CHOMPStation2StaffMirrorBot
2025-10-18 17:29:15 -07:00
committed by GitHub
parent 6bb56dd70c
commit 2a5af7a893
18 changed files with 191 additions and 76 deletions

24
.gitignore vendored
View File

@@ -32,18 +32,6 @@ cfg/
!/.vscode/settings.json !/.vscode/settings.json
!/.vscode/tasks.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. #Ignore IDE files we don't need in the repo.
/.vs/**/* /.vs/**/*
/v17/**/* /v17/**/*
@@ -52,22 +40,18 @@ cfg/
/v20/**/* /v20/**/*
/v21/**/* /v21/**/*
/v22/**/* /v22/**/*
>>>>>>> 4cb5713256 (Gatorsnout (#18536))
temp.dmi temp.dmi
# JavaScript tools node_modules/
**/node_modules
package-lock.json package-lock.json
# CBT Things # CBT Things
.cache .cache
# named byond versions config #These get built by some automatic process
/tools/build/dm_versions.json tgui/public/tgui.bundle.css
tgui/public/tgui.bundle.js
config/jobwhitelist.txt
#ignore tracy dll #ignore tracy dll
prof.dll prof.dll

View File

@@ -107,7 +107,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL 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 /datum/design_techweb/board/chem_analyzer
name = "chem analyzer PRO circuit" name = "chem analyzer PRO circuit"
@@ -117,4 +117,4 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_MEDICAL 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

View File

@@ -16,7 +16,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT 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 /datum/design_techweb/board/oriontrail
name = "orion trail arcade machine" name = "orion trail arcade machine"
@@ -27,7 +27,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT 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 /datum/design_techweb/board/clawmachine
name = "grab-a-gift arcade machine" name = "grab-a-gift arcade machine"
@@ -38,7 +38,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_ENTERTAINMENT 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 /datum/design_techweb/board/seccamera
name = "security camera monitor" name = "security camera monitor"
@@ -48,7 +48,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY 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 /datum/design_techweb/board/secdata
name = "security records console" name = "security records console"
@@ -58,7 +58,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY 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 /datum/design_techweb/board/prisonmanage
name = "prisoner management console" name = "prisoner management console"
@@ -68,7 +68,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_SECURITY 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 /datum/design_techweb/board/med_data
name = "medical records console" name = "medical records console"
@@ -78,7 +78,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL 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 /datum/design_techweb/board/operating
name = "patient monitoring console" name = "patient monitoring console"
@@ -88,7 +88,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL 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 /datum/design_techweb/board/scan_console
name = "DNA console" name = "DNA console"
@@ -98,7 +98,7 @@
category = list( category = list(
RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_MEDICAL 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 /datum/design_techweb/board/clonecontrol
name = "cloning control console circuit" name = "cloning control console circuit"

View File

@@ -6,7 +6,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_furnace
name = "Industrial Reagent Furnace" name = "Industrial Reagent Furnace"
@@ -16,7 +16,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_grinder
name = "Industrial Reagent Grinder" name = "Industrial Reagent Grinder"
@@ -26,7 +26,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_hub
name = "Industrial Reagent Hub" name = "Industrial Reagent Hub"
@@ -36,7 +36,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_pipe
name = "Industrial Reagent Pipe" name = "Industrial Reagent Pipe"
@@ -46,7 +46,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_pump
name = "Industrial Reagent Pump" name = "Industrial Reagent Pump"
@@ -56,7 +56,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_reactor
name = "Industrial Reagent Reactor" name = "Industrial Reagent Reactor"
@@ -66,7 +66,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_vat
name = "Industrial Reagent Vat" name = "Industrial Reagent Vat"
@@ -76,7 +76,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_mixer
name = "Industrial Reagent Mixer" name = "Industrial Reagent Mixer"
@@ -86,7 +86,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/industrial_reagent_waste_processor
name = "Industrial Reagent Waste Processor" name = "Industrial Reagent Waste Processor"
@@ -96,7 +96,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/pump_relay
name = "Pump Relay" name = "Pump Relay"
@@ -106,7 +106,7 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING 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 /datum/design_techweb/board/fluid_pump
name = "Fluid Pump" name = "Fluid Pump"
@@ -116,4 +116,4 @@
category = list( category = list(
RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING
) )
departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE

View File

@@ -20,7 +20,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING 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 /datum/design_techweb/mechfab/equipment/drill
name = "Drill" name = "Drill"
@@ -29,7 +29,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING 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 /datum/design_techweb/mechfab/equipment/extinguisher
name = "Extinguisher" name = "Extinguisher"
@@ -56,7 +56,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL 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 /datum/design_techweb/mechfab/equipment/passenger
name = "Passenger Compartment" name = "Passenger Compartment"
@@ -77,7 +77,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES 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... /// I guess this isn't STRICTLY a weapon...
/datum/design_techweb/mechfab/equipment/syringe_gun /datum/design_techweb/mechfab/equipment/syringe_gun
@@ -88,7 +88,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL 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. //You escape the weapon designation as well.
/datum/design_techweb/mechfab/equipment/medigun /datum/design_techweb/mechfab/equipment/medigun
@@ -101,7 +101,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL
) )
departmental_flags = DEPARTMENT_BITFLAG_MEDICAL departmental_flags = DEPARTMENT_BITFLAG_MEDICAL | DEPARTMENT_BITFLAG_SCIENCE
// *** Weapon modules // *** Weapon modules
/datum/design_techweb/mechfab/equipment/weapon /datum/design_techweb/mechfab/equipment/weapon
@@ -110,7 +110,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_WEAPONS 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 /datum/design_techweb/mechfab/equipment/weapon/taser
@@ -324,7 +324,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/gravcatapult
name = "Gravitational Catapult" name = "Gravitational Catapult"
@@ -381,7 +381,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL 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 /datum/design_techweb/mechfab/equipment/rad_drone
name = "Hazmat Drone" name = "Hazmat Drone"
@@ -393,7 +393,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL 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 /datum/design_techweb/mechfab/equipment/medanalyzer
name = "Mounted Body Scanner" name = "Mounted Body Scanner"
@@ -405,7 +405,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MEDICAL 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 /datum/design_techweb/mechfab/equipment/jetpack
name = "Ion Jetpack" name = "Ion Jetpack"
@@ -449,7 +449,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES 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 /datum/design_techweb/mechfab/equipment/proj_armor
name = "Ranged Armor Booster" name = "Ranged Armor Booster"
@@ -461,7 +461,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MODULES 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 /datum/design_techweb/mechfab/equipment/diamond_drill
name = "Diamond Drill" name = "Diamond Drill"
@@ -473,7 +473,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING 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 /datum/design_techweb/mechfab/equipment/ground_drill
name = "Surface Bore" name = "Surface Bore"
@@ -485,7 +485,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING 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 /datum/design_techweb/mechfab/equipment/orescanner
name = "Ore Scanner" name = "Ore Scanner"
@@ -497,7 +497,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING 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 /datum/design_techweb/mechfab/equipment/advorescanner
name = "Advanced Ore Scanner" name = "Advanced Ore Scanner"
@@ -509,7 +509,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MINING 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 /datum/design_techweb/mechfab/equipment/runningboard
name = "Powered Exosuit Running Board" name = "Powered Exosuit Running Board"
@@ -532,7 +532,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/powercrowbar
name = "hydraulic prybar" name = "hydraulic prybar"
@@ -544,7 +544,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/powercutters
name = "hydraulic cable cutter" name = "hydraulic cable cutter"
@@ -556,7 +556,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/powerscrewdriver
name = "hydraulic screwdriver" name = "hydraulic screwdriver"
@@ -568,7 +568,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/powerwelder
name = "welding laser" name = "welding laser"
@@ -580,7 +580,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/inflatables
name = "inflatables deployer" name = "inflatables deployer"
@@ -592,7 +592,7 @@
category = list( category = list(
RND_CATEGORY_MECHFAB_EQUIPMENT + RND_SUBCATEGORY_MECHFAB_EQUIPMENT_MISC 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 /datum/design_techweb/mechfab/equipment/hardpoint_clamp
name = "hardpoint actuator" name = "hardpoint actuator"

View File

@@ -402,7 +402,7 @@
id = "rig_component_graviton" id = "rig_component_graviton"
//req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 6, TECH_MAGNET = 4, TECH_POWER = 5) //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) 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( category = list(
RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE RND_CATEGORY_MODSUIT_MODULES + RND_SUBCATEGORY_MODSUIT_MODULES_SCIENCE
) )

View File

@@ -196,7 +196,7 @@
category = list( category = list(
RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_MISC 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 /datum/design_techweb/beaker_noreact
name = "Cryostasis Beaker" name = "Cryostasis Beaker"

View File

@@ -10,7 +10,8 @@
"anobattery-advanced", "anobattery-advanced",
"anobattery-exotic", "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 /datum/techweb_node/alien_engi
id = TECHWEB_NODE_ALIEN_ENGI id = TECHWEB_NODE_ALIEN_ENGI
@@ -24,5 +25,5 @@
"hybridwirecutters", "hybridwirecutters",
"hybridwelder", "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) announce_channels = list(CHANNEL_ENGINEERING)

View File

@@ -31,6 +31,7 @@
// "biopsy_tool", // "biopsy_tool",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(CHANNEL_MEDICAL)
/datum/techweb_node/xenobiology /datum/techweb_node/xenobiology
id = TECHWEB_NODE_XENOBIOLOGY id = TECHWEB_NODE_XENOBIOLOGY
@@ -55,6 +56,7 @@
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
discount_experiments = list(/datum/experiment/scanning/points/slime_scanning = 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 /datum/techweb_node/gene_engineering
id = TECHWEB_NODE_GENE_ENGINEERING id = TECHWEB_NODE_GENE_ENGINEERING

View File

@@ -26,6 +26,7 @@
"ic_printer_upgrade_clone", "ic_printer_upgrade_clone",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
announce_channels = list(CHANNEL_SCIENCE)
/datum/techweb_node/programmed_robot /datum/techweb_node/programmed_robot
id = TECHWEB_NODE_PROGRAMMED_ROBOT id = TECHWEB_NODE_PROGRAMMED_ROBOT
@@ -41,3 +42,4 @@
"assembly-drone-e", //CHOMPEdit Start - More Movable Shells "assembly-drone-e", //CHOMPEdit Start - More Movable Shells
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(CHANNEL_SCIENCE)

View File

@@ -169,6 +169,7 @@
prereq_ids = list(TECHWEB_NODE_AUGMENTATION) prereq_ids = list(TECHWEB_NODE_AUGMENTATION)
design_ids = list( design_ids = list(
"implant_backup", "implant_backup",
"health_scan_implant",
// "skill_station", // "skill_station",
// "implant_trombone", // "implant_trombone",
// "implant_chem", // "implant_chem",

View File

@@ -118,6 +118,7 @@
"s-transmitter", "s-transmitter",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
announce_channels = list(CHANNEL_ENGINEERING)
/datum/techweb_node/parts_omni /datum/techweb_node/parts_omni
id = TECHWEB_NODE_PARTS_OMNI id = TECHWEB_NODE_PARTS_OMNI
@@ -210,6 +211,7 @@
"grid_checker", "grid_checker",
"breakerbox", "breakerbox",
"tesla_coil", "tesla_coil",
"rtg",
// "apc_control", // "apc_control",
// "powermonitor", // "powermonitor",
// "smes", // "smes",
@@ -256,6 +258,7 @@
// "modular_shield_console", // "modular_shield_console",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(CHANNEL_ENGINEERING)
/datum/techweb_node/exp_tools /datum/techweb_node/exp_tools
id = TECHWEB_NODE_EXP_TOOLS id = TECHWEB_NODE_EXP_TOOLS
@@ -293,6 +296,7 @@
"janitor_hud", "janitor_hud",
"rig_component_medhud", "rig_component_medhud",
"rig_component_sechud", "rig_component_sechud",
"rig_component_mining",
"graviton_goggles", "graviton_goggles",
"omnihud", "omnihud",
// "diagnostic_hud", // "diagnostic_hud",
@@ -393,6 +397,8 @@
// "nv_scigoggles", // "nv_scigoggles",
// "security_hud_night", // "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 /datum/techweb_node/graviton_vision
id = TECHWEB_NODE_GRAVITON_VISION id = TECHWEB_NODE_GRAVITON_VISION

View File

@@ -112,6 +112,7 @@
"mech_med_analyzer", "mech_med_analyzer",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(CHANNEL_SCIENCE)
/datum/techweb_node/mech_mining /datum/techweb_node/mech_mining
id = TECHWEB_NODE_MECH_MINING id = TECHWEB_NODE_MECH_MINING

View File

@@ -41,3 +41,4 @@
"mindbinder", //CHOMPEDIT - Adds Mindbinder to illegal techweb. "mindbinder", //CHOMPEDIT - Adds Mindbinder to illegal techweb.
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(CHANNEL_SCIENCE)

View File

@@ -167,7 +167,8 @@
"nsfw_cell_xray", "nsfw_cell_xray",
// "nsfw_cell_stripper", // CHOMPRemove // "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 /datum/techweb_node/phase_weapons //CHOMPEdit Start - Adds Phase Weaponry
id = TECHWEB_NODE_PHASE_WEAPONS id = TECHWEB_NODE_PHASE_WEAPONS
@@ -185,7 +186,7 @@
"marksman_rifle_frontier_phaser", "marksman_rifle_frontier_phaser",
"handbow_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 announce_channels = list(CHANNEL_SECURITY) //CHOMPEdit End - Adds Phase Weaponry
/datum/techweb_node/cryogun //CHOMPEdit Start /datum/techweb_node/cryogun //CHOMPEdit Start
@@ -196,7 +197,7 @@
design_ids = list( design_ids = list(
"cryogun", "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) announce_channels = list(CHANNEL_SECURITY)
/datum/techweb_node/caseless_rifle /datum/techweb_node/caseless_rifle

View File

@@ -176,6 +176,7 @@
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
discount_experiments = list(/datum/experiment/physical/arcade_winner = 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 /datum/techweb_node/fireworks
id = TECHWEB_NODE_FIREWORKS id = TECHWEB_NODE_FIREWORKS
@@ -199,7 +200,7 @@
"fireworkfallout", "fireworkfallout",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(CHANNEL_COMMON) announce_channels = list(CHANNEL_SCIENCE)
// Kitchen root node // Kitchen root node
@@ -271,5 +272,5 @@
design_ids = list( design_ids = list(
"confetti_cannon", "confetti_cannon",
) )
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(CHANNEL_COMMON) announce_channels = list(CHANNEL_SERVICE)

View File

@@ -113,6 +113,7 @@
#include "spritesheets.dm" #include "spritesheets.dm"
#include "sqlite_tests.dm" #include "sqlite_tests.dm"
#include "subsystem_init.dm" #include "subsystem_init.dm"
#include "techwebs.dm"
#include "tgui_create_message.dm" #include "tgui_create_message.dm"
#include "timer_sanity.dm" #include "timer_sanity.dm"
#include "trait_tests.dm" #include "trait_tests.dm"

View File

@@ -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")