diff --git a/code/__DEFINES/research/techweb_nodes.dm b/code/__DEFINES/research/techweb_nodes.dm new file mode 100644 index 00000000000..6199918bc01 --- /dev/null +++ b/code/__DEFINES/research/techweb_nodes.dm @@ -0,0 +1,121 @@ +#define TECHWEB_NODE_AI "ai" +#define TECHWEB_NODE_AI_LAWS "ai_laws" +#define TECHWEB_NODE_ALIEN_ENGI "alien_engi" +#define TECHWEB_NODE_ALIEN_SURGERY "alien_surgery" +#define TECHWEB_NODE_ALIENTECH "alientech" +#define TECHWEB_NODE_ANOMALY_RESEARCH "anomaly_research" +#define TECHWEB_NODE_ANOMALY_SHELLS "anomaly_shells" +#define TECHWEB_NODE_APPLIED_BLUESPACE "applied_bluespace" +#define TECHWEB_NODE_ATMOS "atmos" +#define TECHWEB_NODE_AUGMENTATION "augmentation" +#define TECHWEB_NODE_AUS_SECURITY "aus_security" +#define TECHWEB_NODE_BASIC_ARMS "basic_arms" +#define TECHWEB_NODE_BCI "bci" +#define TECHWEB_NODE_BEAM_WEAPONS "beam_weapons" +#define TECHWEB_NODE_BIO_SCAN "bio_scan" +#define TECHWEB_NODE_BITRUNNING "bitrunning" +#define TECHWEB_NODE_BLUESPACE "bluespace" +#define TECHWEB_NODE_BLUESPACE_THEORY "bluespace_theory" +#define TECHWEB_NODE_BLUESPACE_TRAVEL "bluespace_travel" +#define TECHWEB_NODE_BORG_ENGI "borg_engi" +#define TECHWEB_NODE_BORG_MEDICAL "borg_medical" +#define TECHWEB_NODE_BORG_MINING "borg_mining" +#define TECHWEB_NODE_BORG_SERVICES "borg_services" +#define TECHWEB_NODE_BORG_UTILITY "borg_utility" +#define TECHWEB_NODE_BOTANY_EQUIP "botany_equip" +#define TECHWEB_NODE_CAFETERIA_EQUIP "cafeteria_equip" +#define TECHWEB_NODE_CHEM_SYNTHESIS "chem_synthesis" +#define TECHWEB_NODE_CIRCUIT_SHELLS "circuit_shells" +#define TECHWEB_NODE_COMBAT_IMPLANTS "combat_implants" +#define TECHWEB_NODE_CONSOLES "consoles" +#define TECHWEB_NODE_CONSTRUCTION "construction" +#define TECHWEB_NODE_CRYOSTASIS "cryostasis" +#define TECHWEB_NODE_CYBER_IMPLANTS "cyber_implants" +#define TECHWEB_NODE_CYBER_ORGANS "cyber_organs" +#define TECHWEB_NODE_CYBER_ORGANS_ADV "cyber_organs_adv" +#define TECHWEB_NODE_CYBER_ORGANS_UPGRADED "cyber_organs_upgraded" +#define TECHWEB_NODE_CYBERNETICS "cybernetics" +#define TECHWEB_NODE_CYTOLOGY "cytology" +#define TECHWEB_NODE_ELECTRIC_WEAPONS "electric_weapons" +#define TECHWEB_NODE_ENERGY_MANIPULATION "energy_manipulation" +#define TECHWEB_NODE_EXODRONE "exodrone" +#define TECHWEB_NODE_EXOTIC_AMMO "exotic_ammo" +#define TECHWEB_NODE_EXP_TOOLS "exp_tools" +#define TECHWEB_NODE_EXPLOSIVES "explosives" +#define TECHWEB_NODE_EXTREME_OFFICE "extreme_office" +#define TECHWEB_NODE_FISHING_EQUIP "fishing_equip" +#define TECHWEB_NODE_FISHING_EQUIP_ADV "fishing_equip_adv" +#define TECHWEB_NODE_FOOD_PROC "food_proc" +#define TECHWEB_NODE_FUNDIMENTAL_SCI "fundimental_sci" +#define TECHWEB_NODE_FUSION "fusion" +#define TECHWEB_NODE_GAMING "gaming" +#define TECHWEB_NODE_GAS_COMPRESSION "gas_compression" +#define TECHWEB_NODE_GENE_ENGINEERING "gene_engineering" +#define TECHWEB_NODE_HOLOGRAPHICS "holographics" +#define TECHWEB_NODE_HUD "hud" +#define TECHWEB_NODE_HYDROPONICS "hydroponics" +#define TECHWEB_NODE_INTERGRATED_TOOLSETS "intergrated_toolsets" +#define TECHWEB_NODE_INTERROGATION "interrogation" +#define TECHWEB_NODE_LIGHT_APPS "light_apps" +#define TECHWEB_NODE_LOW_PRESSURE_EXCAVATION "low_pressure_excavation" +#define TECHWEB_NODE_MARINE_UTIL "marine_util" +#define TECHWEB_NODE_MATERIAL_PROC "material_proc" +#define TECHWEB_NODE_MECH_ASSAULT "mech_assault" +#define TECHWEB_NODE_MECH_ASSEMBLY "mech_assembly" +#define TECHWEB_NODE_MECH_CLOWN "mech_clown" +#define TECHWEB_NODE_MECH_COMBAT "mech_combat" +#define TECHWEB_NODE_MECH_ENERGY_GUNS "mech_energy_guns" +#define TECHWEB_NODE_MECH_EQUIPMENT "mech_equipment" +#define TECHWEB_NODE_MECH_FIREARMS "mech_firearms" +#define TECHWEB_NODE_MECH_HEAVY "mech_heavy" +#define TECHWEB_NODE_MECH_HEAVY_ARMS "mech_heavy_arms" +#define TECHWEB_NODE_MECH_INFILTRATOR "mech_infiltrator" +#define TECHWEB_NODE_MECH_LIGHT "mech_light" +#define TECHWEB_NODE_MECH_MEDICAL "mech_medical" +#define TECHWEB_NODE_MECH_MINING "mech_mining" +#define TECHWEB_NODE_MEDBAY_EQUIP "medbay_equip" +#define TECHWEB_NODE_MEDBAY_EQUIP_ADV "medbay_equip_adv" +#define TECHWEB_NODE_MINING "mining" +#define TECHWEB_NODE_MINING_ADV "mining_adv" +#define TECHWEB_NODE_MOD_ANOMALY "mod_anomaly" +#define TECHWEB_NODE_MOD_ENGI "mod_engi" +#define TECHWEB_NODE_MOD_ENGI_ADV "mod_engi_adv" +#define TECHWEB_NODE_MOD_ENTERTAINMENT "mod_entertainment" +#define TECHWEB_NODE_MOD_EQUIP "mod_equip" +#define TECHWEB_NODE_MOD_EXPERIMENTAL "mod_experimental" +#define TECHWEB_NODE_MOD_MEDICAL "mod_medical" +#define TECHWEB_NODE_MOD_MEDICAL_ADV "mod_medical_adv" +#define TECHWEB_NODE_MOD_SECURITY "mod_security" +#define TECHWEB_NODE_MOD_SUIT "mod_suit" +#define TECHWEB_NODE_NIGHT_VISION "night_vision" +#define TECHWEB_NODE_OFFICE_EQUIP "office_equip" +#define TECHWEB_NODE_OLDSTATION_SURGERY "oldstation_surgery" +#define TECHWEB_NODE_PARTS "parts" +#define TECHWEB_NODE_PARTS_ADV "parts_adv" +#define TECHWEB_NODE_PARTS_BLUESPACE "parts_bluespace" +#define TECHWEB_NODE_PARTS_UPG "parts_upg" +#define TECHWEB_NODE_PASSIVE_IMPLANTS "passive_implants" +#define TECHWEB_NODE_PLASMA_CONTROL "plasma_control" +#define TECHWEB_NODE_PLASMA_MINING "plasma_mining" +#define TECHWEB_NODE_PLUMBING "plumbing" +#define TECHWEB_NODE_POSITRONIC_SPHERE "positronic_sphere" +#define TECHWEB_NODE_PROGRAMMED_ROBOT "programmed_robot" +#define TECHWEB_NODE_PROGRAMMED_SERVER "programmed_server" +#define TECHWEB_NODE_PROGRAMMING "programming" +#define TECHWEB_NODE_RCD_UPGRADE "rcd_upgrade" +#define TECHWEB_NODE_RIOT_SUPRESSION "riot_supression" +#define TECHWEB_NODE_ROBOTICS "robotics" +#define TECHWEB_NODE_SANITATION "sanitation" +#define TECHWEB_NODE_SEC_EQUIP "sec_equip" +#define TECHWEB_NODE_SELECTION "selection" +#define TECHWEB_NODE_SPEC_ENG "spec_eng" +#define TECHWEB_NODE_STICKY_ADVANCED "sticky_advanced" +#define TECHWEB_NODE_SURGERY "surgery" +#define TECHWEB_NODE_SURGERY_ADV "surgery_adv" +#define TECHWEB_NODE_SURGERY_EXP "surgery_exp" +#define TECHWEB_NODE_SURGERY_TOOLS "surgery_tools" +#define TECHWEB_NODE_SYNDICATE_BASIC "syndicate_basic" +#define TECHWEB_NODE_TACKLE_ADVANCED "tackle_advanced" +#define TECHWEB_NODE_TELECOMS "telecoms" +#define TECHWEB_NODE_UNREGULATED_BLUESPACE "unregulated_bluespace" +#define TECHWEB_NODE_XENOBIOLOGY "xenobiology" diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index 52ba71a2538..71e68f6d8ae 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -207,6 +207,15 @@ worn_icon_state = "horn_air" sound_file = 'sound/items/airhorn2.ogg' +/datum/crafting_recipe/airhorn + name = "Air Horn" + result = /obj/item/bikehorn/airhorn + reqs = list( + /obj/item/bikehorn = 1, + /obj/item/toy/crayon/spraycan = 1, + ) + category = CAT_ENTERTAINMENT + //golden bikehorn /obj/item/bikehorn/golden name = "golden bike horn" diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index dbf1c1a4242..f3a1a97dede 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -327,7 +327,6 @@ description = "Your exosuit fabricators allow for rapid production on a small scale, but the structural integrity of created parts is inferior to more traditional means." exp_tag = "Scan" possible_types = list(/obj/vehicle/sealed/mecha) - total_requirement = 1 ///Damage percent that each mech needs to be at for a scan to work. var/damage_percent @@ -337,6 +336,21 @@ possible_types = list(/obj/vehicle/sealed/mecha) total_requirement = 2 +/// Scan a person with any mutation +/datum/experiment/scanning/people/mutant + name = "Human Field Research: Genetic Mutations" + description = "Our new research assistants have been drinking random chemicals for science, when one of them mastered telekinesis and another started shooting lasers from the eyes. This could be useful for our studies. Repeat the experiment by making assistants drink unstable mutagen, scan them and report the results." + performance_hint = "Scan a person with a random mutation." + required_traits_desc = "random mutation" + +/datum/experiment/scanning/people/mutant/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler) + . = ..() + if (!.) + return + if(!check.dna.mutations.len) + return FALSE + return TRUE + /// Scan for organs you didn't start the round with /datum/experiment/scanning/people/novel_organs name = "Human Field Research: Divergent Biology" @@ -376,3 +390,94 @@ continue return TRUE return FALSE +<<<<<<< HEAD +======= + +/// Scan for cybernetic organs +/datum/experiment/scanning/people/augmented_organs + name = "Human Field Research: Augmented Organs" + description = "We need to gather data on how cybernetic vital organs integrate with human biology. Conduct a scan on a human with these implants to help us understand their compatibility" + performance_hint = "Perform an organ manipulation surgery to replace one of the vital organs with a cybernetic variant." + required_traits_desc = "augmented vital organs" + required_count = 1 + +/datum/experiment/scanning/people/augmented_organs/is_valid_scan_target(mob/living/carbon/human/check) + . = ..() + if (!.) + return + var/static/list/vital_organ_slots = list( + ORGAN_SLOT_HEART, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_EYES, + ORGAN_SLOT_EARS, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_STOMACH, + ) + + for (var/obj/item/organ/organ as anything in check.organs) + if (IS_ORGANIC_ORGAN(organ)) + continue + if (!(organ.slot in vital_organ_slots)) + continue + return TRUE + return FALSE + +/// Scan for skillchips +/datum/experiment/scanning/people/skillchip + name = "Human Field Research: Skill Chip Implants" + description = "Before sticking programmed circuits into human brain, we need to know how it handles simple ones. Scan a live person with a skill chip implant in their brain." + performance_hint = "Perform a skill chip implantation with a skill station." + required_traits_desc = "skill chip implant" + +/datum/experiment/scanning/people/skillchip/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler) + . = ..() + if (!.) + return + var/obj/item/organ/internal/brain/scanned_brain = check.get_organ_slot(ORGAN_SLOT_BRAIN) + if (isnull(scanned_brain)) + experiment_handler.announce_message("Subject is brainless!") + return FALSE + if (scanned_brain.get_used_skillchip_slots() == 0) + experiment_handler.announce_message("No skill chips found!") + return FALSE + return TRUE + +/datum/experiment/scanning/reagent/cryostylane + name = "Pure Cryostylane Scan" + description = "It appears that the Cryostylane reagent can potentially halt all physiological processes in the human body. Produce Cryostylane with at least 99% purity and scan the beaker." + required_reagent = /datum/reagent/cryostylane + min_purity = 0.99 + +/datum/experiment/scanning/points/bluespace_crystal + name = "Bluespace Crystal Sampling" + description = "Investigate the properties of bluespace crystals by scanning either an artificial or naturally occurring variant. This will help us deepen our understanding of bluespace phenomena." + required_points = 1 + required_atoms = list( + /obj/item/stack/ore/bluespace_crystal = 1, + /obj/item/stack/sheet/bluespace_crystal = 1 + ) + +/datum/experiment/scanning/points/anomalies + name = "Neutralized Anomaly Analysis" + description = "We have the power to deal with the anomalies now. Neutralize them with an anomaly neutralizer or refine the raw cores in the refinery and scan the results." + required_points = 4 + required_atoms = list(/obj/item/assembly/signaler/anomaly = 1) + +/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any + name = "Upgraded Stock Parts Benchmark" + description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Upgraded Parts and report the results." + required_points = 6 + required_atoms = list( + /obj/machinery = 1 + ) + required_tier = 2 + +/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any + name = "Advanced Stock Parts Benchmark" + description = "Our newly-designed machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow. Scan any machinery with Advanced Parts and report the results." + required_points = 6 + required_atoms = list( + /obj/machinery = 1 + ) + required_tier = 3 +>>>>>>> 0bc28149e8e... [MIRROR] More techweb tweaks [NO GBP] [MDB IGNORE] (#3538) diff --git a/code/modules/experisci/experiment/types/scanning_vatgrown.dm b/code/modules/experisci/experiment/types/scanning_vatgrown.dm index f4578fdf412..fc50f2ebcf1 100644 --- a/code/modules/experisci/experiment/types/scanning_vatgrown.dm +++ b/code/modules/experisci/experiment/types/scanning_vatgrown.dm @@ -1,14 +1,23 @@ -/datum/experiment/scanning/random/cytology +/datum/experiment/scanning/cytology name = "Cytology Scanning Experiment" - description = "Base experiment for scanning atoms that were vatgrown" exp_tag = "Cytology Scan" +<<<<<<< HEAD total_requirement = 1 possible_types = list(/mob/living/basic/cockroach) traits = EXPERIMENT_TRAIT_DESTRUCTIVE +======= +>>>>>>> 0bc28149e8e... [MIRROR] More techweb tweaks [NO GBP] [MDB IGNORE] (#3538) -/datum/experiment/scanning/random/cytology/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) +/datum/experiment/scanning/cytology/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) return ..() && HAS_TRAIT(target, TRAIT_VATGROWN) -/datum/experiment/scanning/random/cytology/serialize_progress_stage(atom/target, list/seen_instances) - return EXPERIMENT_PROG_INT("Scan samples of \a vat-grown [initial(target.name)]", \ - traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) +/datum/experiment/scanning/cytology/serialize_progress_stage(atom/target, list/seen_instances) + return EXPERIMENT_PROG_INT("Scan samples of \a vat-grown [initial(target.name)]", seen_instances.len, required_atoms[target]) + +/datum/experiment/scanning/cytology/slime + name = "Vat-Grown Slime Scan" + description = "Seen the slimes in the xenobiology pens? They spawned when our researchers donked a moldy bread slice into the vat. Cultivate another one and report the results." + performance_hint = "Swab the slime cell lines from a moldy bread or take a biopsy sample of existing slime. And grow it in the vat." + required_atoms = list(/mob/living/basic/slime = 1) + + diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 84dcb67233d..624e4cb163a 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -166,18 +166,6 @@ ) departmental_flags = DEPARTMENT_BITFLAG_SERVICE -/datum/design/air_horn - name = "Air Horn" - desc = "Damn son, where'd you find this?" - id = "air_horn" - build_type = PROTOLATHE | AWAY_LATHE - materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT*2, /datum/material/bananium =HALF_SHEET_MATERIAL_AMOUNT) - build_path = /obj/item/bikehorn/airhorn - category = list( - RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_SERVICE - ) - departmental_flags = DEPARTMENT_BITFLAG_SERVICE - /datum/design/clown_firing_pin name = "Hilarious Firing Pin" id = "clown_firing_pin" diff --git a/code/modules/research/techweb/nodes/atmos_nodes.dm b/code/modules/research/techweb/nodes/atmos_nodes.dm new file mode 100644 index 00000000000..01f5dfa1d66 --- /dev/null +++ b/code/modules/research/techweb/nodes/atmos_nodes.dm @@ -0,0 +1,115 @@ +/datum/techweb_node/atmos + id = TECHWEB_NODE_ATMOS + starting_node = TRUE + display_name = "Atmospherics" + description = "Maintaining station air and related life support systems." + design_ids = list( + "atmos_control", + "atmosalerts", + "thermomachine", + "space_heater", + "generic_tank", + "oxygen_tank", + "plasma_tank", + "plasmaman_tank_belt", + "plasmarefiller", + "extinguisher", + "gas_filter", + "plasmaman_gas_filter", + "analyzer", + "pipe_painter", + ) + +/datum/techweb_node/gas_compression + id = TECHWEB_NODE_GAS_COMPRESSION + display_name = "Gas Compression" + description = "Highly pressurized gases hold potential for unlocking immense energy capabilities." + prereq_ids = list(TECHWEB_NODE_ATMOS) + design_ids = list( + "tank_compressor", + "emergency_oxygen", + "emergency_oxygen_engi", + "power_turbine_console", + "turbine_part_compressor", + "turbine_part_rotor", + "turbine_part_stator", + "turbine_compressor", + "turbine_rotor", + "turbine_stator", + "atmos_thermal", + "pneumatic_seal", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/plasma_control + id = TECHWEB_NODE_PLASMA_CONTROL + display_name = "Controlled Plasma" + description = "Experiments with high-pressure gases and electricity resulting in crystallization and controlled plasma reactions." + prereq_ids = list(TECHWEB_NODE_GAS_COMPRESSION, TECHWEB_NODE_ENERGY_MANIPULATION) + design_ids = list( + "crystallizer", + "electrolyzer", + "pacman", + "mech_generator", + "plasmacutter", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/ordnance/gaseous/plasma) + +/datum/techweb_node/fusion + id = TECHWEB_NODE_FUSION + display_name = "Fusion" + description = "Investigating fusion reactor technology to achieve sustainable and efficient energy production through controlled plasma reactions involving noble gases." + prereq_ids = list(TECHWEB_NODE_PLASMA_CONTROL) + design_ids = list( + "HFR_core", + "HFR_corner", + "HFR_fuel_input", + "HFR_interface", + "HFR_moderator_input", + "HFR_waste_output", + "adv_fire_extinguisher", + "bolter_wrench", + "rpd_loaded", + "engine_goggles", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/ordnance/gaseous/bz) + discount_experiments = list(/datum/experiment/ordnance/gaseous/nitrous_oxide = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/exp_tools + id = TECHWEB_NODE_EXP_TOOLS + display_name = "Experimental Tools" + description = "Enhances the functionality and versatility of station tools." + prereq_ids = list(TECHWEB_NODE_FUSION) + design_ids = list( + "flatpacker", + "handdrill", + "exwelder", + "jawsoflife", + "rangedanalyzer", + "rtd_loaded", + "mech_rcd", + "rcd_loaded", + "rcd_ammo", + "weldingmask", + "magboots", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/ordnance/gaseous/noblium = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/rcd_upgrade + id = TECHWEB_NODE_RCD_UPGRADE + display_name = "Rapid Construction Device Upgrades" + description = "New designs and enhancements for RCD and RPD." + prereq_ids = list(TECHWEB_NODE_EXP_TOOLS, TECHWEB_NODE_PARTS_BLUESPACE) + design_ids = list( + "rcd_upgrade_silo_link", + "rcd_upgrade_anti_interrupt", + "rcd_upgrade_cooling", + "rcd_upgrade_frames", + "rcd_upgrade_furnishing", + "rcd_upgrade_simple_circuits", + "rpd_upgrade_unwrench", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/biology_nodes.dm b/code/modules/research/techweb/nodes/biology_nodes.dm new file mode 100644 index 00000000000..ef6221997c7 --- /dev/null +++ b/code/modules/research/techweb/nodes/biology_nodes.dm @@ -0,0 +1,102 @@ +/datum/techweb_node/bio_scan + id = TECHWEB_NODE_BIO_SCAN + display_name = "Biological Scan" + description = "Advanced technology for analyzing patient health and reagent compositions, ensuring precise diagnostics and treatment in the medical bay." + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "healthanalyzer", + "autopsyscanner", + "genescanner", + "medical_kiosk", + "chem_master", + "ph_meter", + "scigoggles", + "mod_reagent_scanner", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/cytology + id = TECHWEB_NODE_CYTOLOGY + display_name = "Cytology" + description = "Cellular biology research focused on cultivation of limbs and diverse organisms from cells." + prereq_ids = list(TECHWEB_NODE_BIO_SCAN) + design_ids = list( + "limbgrower", + "pandemic", + "petri_dish", + "swab", + "biopsy_tool", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/xenobiology + id = TECHWEB_NODE_XENOBIOLOGY + display_name = "Xenobiology" + description = "Exploration of non-human biology, unlocking the secrets of extraterrestrial lifeforms and their unique biological processes." + prereq_ids = list(TECHWEB_NODE_CYTOLOGY) + design_ids = list( + "xenobioconsole", + "slime_scanner", + "limbdesign_ethereal", + "limbdesign_felinid", + "limbdesign_lizard", + "limbdesign_plasmaman", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/cytology/slime) + +/datum/techweb_node/gene_engineering + id = TECHWEB_NODE_GENE_ENGINEERING + display_name = "Gene Engineering" + description = "Research into sophisticated DNA manipulation techniques, enabling the modification of human genetic traits to unlock specific abilities and enhancements." + prereq_ids = list(TECHWEB_NODE_SELECTION, TECHWEB_NODE_XENOBIOLOGY) + design_ids = list( + "dnascanner", + "scan_console", + "dna_disk", + "dnainfuser", + "mod_dna_lock", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/scanning/people/mutant = TECHWEB_TIER_4_POINTS) + +// Botany root node +/datum/techweb_node/botany_equip + id = TECHWEB_NODE_BOTANY_EQUIP + starting_node = TRUE + display_name = "Botany Equipment" + description = "Essential tools for maintaining onboard gardens, supporting plant growth in the unique environment of the space station." + design_ids = list( + "seed_extractor", + "plant_analyzer", + "watering_can", + "spade", + "cultivator", + "secateurs", + "hatchet", + ) + +/datum/techweb_node/hydroponics + id = TECHWEB_NODE_HYDROPONICS + display_name = "Hydroponics" + description = "Research into advanced hydroponic systems for efficient and sustainable plant cultivation." + prereq_ids = list(TECHWEB_NODE_BOTANY_EQUIP, TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "biogenerator", + "hydro_tray", + "portaseeder", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/selection + id = TECHWEB_NODE_SELECTION + display_name = "Artificial Selection" + description = "Advancement in plant cultivation techniques through artificial selection, enabling precise manipulation of plant DNA." + prereq_ids = list(TECHWEB_NODE_HYDROPONICS) + design_ids = list( + "flora_gun", + "gene_shears", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/random/plants/wild) + discount_experiments = list(/datum/experiment/scanning/random/plants/traits = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/mech_nodes.dm b/code/modules/research/techweb/nodes/mech_nodes.dm new file mode 100644 index 00000000000..b6bc24f8e54 --- /dev/null +++ b/code/modules/research/techweb/nodes/mech_nodes.dm @@ -0,0 +1,250 @@ +/datum/techweb_node/mech_assembly + id = TECHWEB_NODE_MECH_ASSEMBLY + starting_node = TRUE + display_name = "Mech Assembly" + description = "Development of mech designed to contend with artificial gravity while transporting cargo." + prereq_ids = list(TECHWEB_NODE_ROBOTICS) + design_ids = list( + "mechapower", + "mech_recharger", + "ripley_chassis", + "ripley_torso", + "ripley_left_arm", + "ripley_right_arm", + "ripley_left_leg", + "ripley_right_leg", + "ripley_main", + "ripley_peri", + "mech_hydraulic_clamp", + ) + +/datum/techweb_node/mech_equipment + id = TECHWEB_NODE_MECH_EQUIPMENT + display_name = "Expedition Equipment" + description = "Specialized mech gear tailored for navigating space and celestial bodies, ensuring durability and functionality in the harshest conditions." + prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY) + design_ids = list( + "mechacontrol", + "botpad", + "botpad_remote", + "ripleyupgrade", + "mech_air_tank", + "mech_thrusters", + "mech_extinguisher", + "mecha_camera", + "mecha_tracking", + "mech_radio", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/mech_clown + id = TECHWEB_NODE_MECH_CLOWN + display_name = "Funny Robots" + description = "Fueled by laughter." + prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY) + design_ids = list( + "honk_chassis", + "honk_torso", + "honk_head", + "honk_left_arm", + "honk_right_arm", + "honk_left_leg", + "honk_right_leg", + "honker_main", + "honker_peri", + "honker_targ", + "mech_banana_mortar", + "mech_honker", + "mech_mousetrap_mortar", + "mech_punching_face", + "borg_transform_clown", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/mech_medical + id = TECHWEB_NODE_MECH_MEDICAL + display_name = "Medical Mech" + description = "Advanced robotic unit equipped with syringe guns and healing beams, revolutionizing medical assistance in hazardous environments." + prereq_ids = list(TECHWEB_NODE_MECH_ASSEMBLY, TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "odysseus_chassis", + "odysseus_torso", + "odysseus_head", + "odysseus_left_arm", + "odysseus_right_arm", + "odysseus_left_leg", + "odysseus_right_leg", + "odysseus_main", + "odysseus_peri", + "mech_medi_beam", + "mech_syringe_gun", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mech_mining + id = TECHWEB_NODE_MECH_MINING + display_name = "Mining Mech" + description = "Robust mech engineered to withstand lava and storms for continuous off-station mining operations." + prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT, TECHWEB_NODE_MINING) + design_ids = list( + "clarke_chassis", + "clarke_torso", + "clarke_head", + "clarke_left_arm", + "clarke_right_arm", + "clarke_main", + "clarke_peri", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/mech_combat + id = TECHWEB_NODE_MECH_COMBAT + display_name = "Combat Mechs" + description = "Modular armor upgrades and specialized equipment for security mechs." + prereq_ids = list(TECHWEB_NODE_MECH_EQUIPMENT) + design_ids = list( + "mech_ccw_armor", + "mech_proj_armor", + "paddyupgrade", + "mech_hydraulic_claw", + "mech_disabler", + "mech_repair_droid", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/scanning/random/mecha_equipped_scan) + +/datum/techweb_node/mech_assault + id = TECHWEB_NODE_MECH_ASSAULT + display_name = "Assault Mech" + description = "Heavy battle mech boasting robust armor but sacrificing speed for enhanced durability." + prereq_ids = list(TECHWEB_NODE_MECH_COMBAT) + design_ids = list( + "durand_armor", + "durand_chassis", + "durand_torso", + "durand_head", + "durand_left_arm", + "durand_right_arm", + "durand_left_leg", + "durand_right_leg", + "durand_main", + "durand_peri", + "durand_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mech_light + id = TECHWEB_NODE_MECH_LIGHT + display_name = "Light Combat Mech" + description = "Agile combat mech equipped with overclocking capabilities for temporary speed boosts, prioritizing speed over durability on the battlefield." + prereq_ids = list(TECHWEB_NODE_MECH_COMBAT) + design_ids = list( + "gygax_armor", + "gygax_chassis", + "gygax_torso", + "gygax_head", + "gygax_left_arm", + "gygax_right_arm", + "gygax_left_leg", + "gygax_right_leg", + "gygax_main", + "gygax_peri", + "gygax_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/mech_heavy + id = TECHWEB_NODE_MECH_HEAVY + display_name = "Heavy Mech" + description = "Advanced heavy mechanized unit with dual pilot capability, designed for robust battlefield performance and increased tactical versatility." + prereq_ids = list(TECHWEB_NODE_MECH_ASSAULT) + design_ids = list( + "savannah_ivanov_armor", + "savannah_ivanov_chassis", + "savannah_ivanov_torso", + "savannah_ivanov_head", + "savannah_ivanov_left_arm", + "savannah_ivanov_right_arm", + "savannah_ivanov_left_leg", + "savannah_ivanov_right_leg", + "savannah_ivanov_main", + "savannah_ivanov_peri", + "savannah_ivanov_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/mech_infiltrator + id = TECHWEB_NODE_MECH_INFILTRATOR + display_name = "Infiltration Mech" + description = "Advanced mech with phasing capabilities, allowing it to move through walls and obstacles, ideal for covert and special operations." + prereq_ids = list(TECHWEB_NODE_MECH_LIGHT, TECHWEB_NODE_ANOMALY_RESEARCH) + design_ids = list( + "phazon_armor", + "phazon_chassis", + "phazon_torso", + "phazon_head", + "phazon_left_arm", + "phazon_right_arm", + "phazon_left_leg", + "phazon_right_leg", + "phazon_main", + "phazon_peri", + "phazon_targ", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/mech_energy_guns + id = TECHWEB_NODE_MECH_ENERGY_GUNS + display_name = "Mech Energy Guns" + description = "Scaled-up versions of electric weapons optimized for mech deployment." + prereq_ids = list(TECHWEB_NODE_MECH_COMBAT, TECHWEB_NODE_ELECTRIC_WEAPONS) + design_ids = list( + "mech_laser", + "mech_laser_heavy", + "mech_ion", + "mech_tesla", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/scanning/random/mecha_damage_scan = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/mech_firearms + id = TECHWEB_NODE_MECH_FIREARMS + display_name = "Mech Firearms" + description = "Mounted ballistic weaponry, enhancing combat capabilities for mechanized units." + prereq_ids = list(TECHWEB_NODE_MECH_ENERGY_GUNS, TECHWEB_NODE_EXOTIC_AMMO) + design_ids = list( + "mech_lmg", + "mech_lmg_ammo", + "mech_scattershot", + "mech_scattershot_ammo", + "mech_carbine", + "mech_carbine_ammo", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +/datum/techweb_node/mech_heavy_arms + id = TECHWEB_NODE_MECH_HEAVY_ARMS + display_name = "Heavy Mech Firearms" + description = "High-impact weaponry integrated into mechs, optimized for maximum firepower." + prereq_ids = list(TECHWEB_NODE_MECH_HEAVY, TECHWEB_NODE_EXOTIC_AMMO) + design_ids = list( + "clusterbang_launcher", + "clusterbang_launcher_ammo", + "mech_grenade_launcher", + "mech_grenade_launcher_ammo", + "mech_missile_rack", + "mech_missile_rack_ammo", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + +/datum/techweb_node/mech_equip_bluespace + id = TECHWEB_NODE_BLUESPACE + display_name = "Bluespace Mech Equipment" + description = "An array of equipment empowered by bluespace, providing unmatched mobility and utility." + prereq_ids = list(TECHWEB_NODE_MECH_INFILTRATOR, TECHWEB_NODE_BLUESPACE_TRAVEL) + design_ids = list( + "mech_gravcatapult", + "mech_teleporter", + "mech_wormhole_gen", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/medbay_nodes.dm b/code/modules/research/techweb/nodes/medbay_nodes.dm new file mode 100644 index 00000000000..ebd53996a46 --- /dev/null +++ b/code/modules/research/techweb/nodes/medbay_nodes.dm @@ -0,0 +1,103 @@ +/datum/techweb_node/medbay_equip + id = TECHWEB_NODE_MEDBAY_EQUIP + starting_node = TRUE + display_name = "Medbay Equipment" + description = "Essential medical tools to patch you up while medbay is still intact." + design_ids = list( + "operating", + "medicalbed", + "defibmountdefault", + "defibrillator", + "surgical_drapes", + "scalpel", + "retractor", + "hemostat", + "cautery", + "circular_saw", + "surgicaldrill", + "bonesetter", + "blood_filter", + "surgical_tape", + "penlight", + "penlight_paramedic", + "stethoscope", + "beaker", + "large_beaker", + "chem_pack", + "blood_pack", + "syringe", + "dropper", + "pillbottle", + ) + experiments_to_unlock = list( + /datum/experiment/autopsy/human, + /datum/experiment/autopsy/nonhuman, + /datum/experiment/autopsy/xenomorph, + ) + +/datum/techweb_node/chem_synthesis + id = TECHWEB_NODE_CHEM_SYNTHESIS + display_name = "Chemical Synthesis" + description = "Synthesizing complex chemicals from electricity and thin air... Don't ask how..." + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "xlarge_beaker", + "med_spray_bottle", + "medigel", + "medipen_refiller", + "soda_dispenser", + "beer_dispenser", + "chem_dispenser", + "portable_chem_mixer", + "chem_heater", + "w-recycler", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/plumbing + id = TECHWEB_NODE_PLUMBING + display_name = "Plumbing" + description = "Essential infrastructure for building chemical factories. To scale up the production of happy pills to an industrial level." + prereq_ids = list(TECHWEB_NODE_CHEM_SYNTHESIS) + design_ids = list( + "plumbing_rcd", + "plumbing_rcd_service", + "plumbing_rcd_sci", + "plunger", + "fluid_ducts", + "meta_beaker", + "piercesyringe", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/cryostasis + id = TECHWEB_NODE_CRYOSTASIS + display_name = "Cryostasis" + description = "The result of clown accidentally drinking a chemical, now repurposed for safely preserving crew members in suspended animation." + prereq_ids = list(TECHWEB_NODE_PLUMBING, TECHWEB_NODE_PLASMA_CONTROL) + design_ids = list( + "cryotube", + "mech_sleeper", + "stasis", + "cryo_grenade", + "splitbeaker", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/scanning/reagent/cryostylane) + +/datum/techweb_node/medbay_equip_adv + id = TECHWEB_NODE_MEDBAY_EQUIP_ADV + display_name = "Advanced Medbay Equipment" + description = "State-of-the-art medical gear for keeping the crew in one piece — mostly." + prereq_ids = list(TECHWEB_NODE_CRYOSTASIS) + design_ids = list( + "smoke_machine", + "chem_mass_spec", + "healthanalyzer_advanced", + "mod_health_analyzer", + "crewpinpointer", + "defibrillator_compact", + "defibmount", + "medicalbed_emergency", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/research_nodes.dm b/code/modules/research/techweb/nodes/research_nodes.dm new file mode 100644 index 00000000000..0a37fb19868 --- /dev/null +++ b/code/modules/research/techweb/nodes/research_nodes.dm @@ -0,0 +1,95 @@ +/datum/techweb_node/fundamental_sci + id = TECHWEB_NODE_FUNDIMENTAL_SCI + starting_node = TRUE + display_name = "Fundamental Science" + description = "Establishing the bedrock of scientific understanding, paving the way for deeper exploration and theoretical inquiry." + design_ids = list( + "rdserver", + "rdservercontrol", + "rdconsole", + "tech_disk", + "doppler_array", + "experimentor", + "destructive_analyzer", + "destructive_scanner", + "experi_scanner", + "laptop", + "portadrive_basic", + "portadrive_advanced", + "portadrive_super", + ) + +/datum/techweb_node/bluespace_theory + id = TECHWEB_NODE_BLUESPACE_THEORY + display_name = "Bluespace Theory" + description = "Basic studies into the mysterious alternate dimension known as bluespace." + prereq_ids = list(TECHWEB_NODE_FUNDIMENTAL_SCI) + design_ids = list( + "bluespace_crystal", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/applied_bluespace + id = TECHWEB_NODE_APPLIED_BLUESPACE + display_name = "Applied Bluespace Research" + description = "With a heightened grasp of bluespace dynamics, sophisticated applications and technologies can be devised using data from bluespace crystal analyses." + prereq_ids = list(TECHWEB_NODE_BLUESPACE_THEORY) + design_ids = list( + "ore_silo", + "minerbag_holding", + "plumbing_receiver", + "bluespacebeaker", + "adv_watering_can", + "bluespace_coffeepot", + "bluespacesyringe", + "blutrash", + "light_replacer_blue", + "bluespacebodybag", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/scanning/points/bluespace_crystal) + +/datum/techweb_node/bluespace_travel + id = TECHWEB_NODE_BLUESPACE_TRAVEL + display_name = "Bluespace Travel" + description = "Facilitate teleportation methods based on bluespace principles to revolutionize logistical efficiency." + prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE) + design_ids = list( + "teleconsole", + "tele_station", + "tele_hub", + "launchpad_console", + "quantumpad", + "launchpad", + "bluespace_pod", + "quantum_keycard", + "swapper", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/anomaly_research + id = TECHWEB_NODE_ANOMALY_RESEARCH + display_name = "Anomaly Research" + description = "Delving into the study of mysterious anomalies to investigate methods to refine and harness their unpredictable energies." + prereq_ids = list(TECHWEB_NODE_APPLIED_BLUESPACE) + design_ids = list( + "anomaly_refinery", + "anomaly_neutralizer", + "reactive_armour", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/anomaly_shells + id = TECHWEB_NODE_ANOMALY_SHELLS + display_name = "Advanced Anomaly Shells" + description = "New shells designed to utilize anomaly cores, maximizing their potential in innovative ways." + prereq_ids = list(TECHWEB_NODE_ANOMALY_RESEARCH) + design_ids = list( + "bag_holding", + "cybernetic_heart_anomalock", + "wormholeprojector", + "gravitygun", + "polymorph_belt" + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/points/anomalies = TECHWEB_TIER_5_POINTS) diff --git a/code/modules/research/techweb/nodes/security_nodes.dm b/code/modules/research/techweb/nodes/security_nodes.dm new file mode 100644 index 00000000000..2d3dd63864f --- /dev/null +++ b/code/modules/research/techweb/nodes/security_nodes.dm @@ -0,0 +1,107 @@ +/datum/techweb_node/basic_arms + id = TECHWEB_NODE_BASIC_ARMS + starting_node = TRUE + display_name = "Basic Arms" + description = "Ballistics can be unpredictable in space." + design_ids = list( + "toy_armblade", + "toygun", + "c38_rubber", + "sec_38", + "capbox", + "foam_dart", + "sec_beanbag_slug", + "sec_dart", + "sec_Islug", + "sec_rshot", + ) + +/datum/techweb_node/sec_equip + id = TECHWEB_NODE_SEC_EQUIP + display_name = "Security Equipment" + description = "All the essentials to subdue a mime." + prereq_ids = list(TECHWEB_NODE_BASIC_ARMS) + design_ids = list( + "secdata", + "mining", + "prisonmanage", + "rdcamera", + "seccamera", + "security_photobooth", + "photobooth", + "scanner_gate", + "pepperspray", + "dragnet_beacon", + "inspector", + "evidencebag", + "zipties", + "seclite", + "electropack", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/riot_supression + id = TECHWEB_NODE_RIOT_SUPRESSION + display_name = "Riot Supression" + description = "When you are on the opposing side of a revolutionary movement." + prereq_ids = list(TECHWEB_NODE_SEC_EQUIP) + design_ids = list( + "clown_firing_pin", + "pin_testing", + "pin_loyalty", + "tele_shield", + "ballistic_shield", + "handcuffs_s", + "bola_energy", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/explosives + id = TECHWEB_NODE_EXPLOSIVES + display_name = "Explosives" + description = "For once, intentional explosions." + prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION) + design_ids = list( + "large_grenade", + "adv_grenade", + "pyro_grenade", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + required_experiments = list(/datum/experiment/ordnance/explosive/lowyieldbomb) + +/datum/techweb_node/exotic_ammo + id = TECHWEB_NODE_EXOTIC_AMMO + display_name = "Exotic Ammunition" + description = "Specialized bullets designed to ignite, freeze, and inflict various other effects on targets, expanding combat capabilities." + prereq_ids = list(TECHWEB_NODE_EXPLOSIVES) + design_ids = list( + "c38_hotshot", + "c38_iceblox", + "techshotshell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/ordnance/explosive/highyieldbomb = TECHWEB_TIER_4_POINTS) + +/datum/techweb_node/electric_weapons + id = TECHWEB_NODE_ELECTRIC_WEAPONS + display_name = "Electric Weaponry" + description = "Energy-based weaponry designed for both lethal and non-lethal applications." + prereq_ids = list(TECHWEB_NODE_RIOT_SUPRESSION) + design_ids = list( + "stunrevolver", + "ioncarbine", + "temp_gun", + "lasershell", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/beam_weapons + id = TECHWEB_NODE_BEAM_WEAPONS + display_name = "Advanced Beam Weaponry" + description = "So advanced, even engineers are baffled by its operational principles." + prereq_ids = list(TECHWEB_NODE_ELECTRIC_WEAPONS) + design_ids = list( + "xray_laser", + "nuclear_gun", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) diff --git a/code/modules/research/techweb/nodes/service_nodes.dm b/code/modules/research/techweb/nodes/service_nodes.dm new file mode 100644 index 00000000000..1553f3a0c20 --- /dev/null +++ b/code/modules/research/techweb/nodes/service_nodes.dm @@ -0,0 +1,184 @@ +/datum/techweb_node/office_equip + id = TECHWEB_NODE_OFFICE_EQUIP + starting_node = TRUE + display_name = "Office Equipment" + description = "Nanotrasen's finest in ergonomic office tech, ensuring station admin stays productive and compliant with corporate policies — because even in space, paperwork never stops." + design_ids = list( + "fax", + "sec_pen", + "handlabel", + "roll", + "universal_scanner", + "desttagger", + "packagewrap", + "sticky_tape", + "toner_large", + "toner", + "boxcutter", + "bounced_radio", + "radio_headset", + "earmuffs", + "recorder", + "tape", + "toy_balloon", + "pet_carrier", + "chisel", + "spraycan", + "camera_film", + "camera", + "razor", + "bucket", + "mop", + "pushbroom", + "normtrash", + "wirebrush", + "flashlight", + ) + +/datum/techweb_node/sanitation + id = TECHWEB_NODE_SANITATION + display_name = "Advanced Sanitation Technology" + description = "Nanotrasen's latest in janitorial tech, making sure the station stays spotless and bear-free." + prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) + design_ids = list( + "advmop", + "light_replacer", + "spraybottle", + "paint_remover", + "beartrap", + "buffer", + "vacuum", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + discount_experiments = list(/datum/experiment/scanning/random/janitor_trash = TECHWEB_TIER_2_POINTS) + +/datum/techweb_node/consoles + id = TECHWEB_NODE_CONSOLES + display_name = "Civilian Consoles" + description = "User-friendly consoles for non-technical crew members, enhancing communication and access to essential station information." + prereq_ids = list(TECHWEB_NODE_OFFICE_EQUIP) + design_ids = list( + "comconsole", + "automated_announcement", + "cargo", + "cargorequest", + "med_data", + "crewconsole", + "bankmachine", + "account_console", + "idcard", + "c-reader", + "libraryconsole", + "libraryscanner", + "bookbinder", + "barcode_scanner", + "vendor", + "custom_vendor_refill", + "bounty_pad_control", + "bounty_pad", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/gaming + id = TECHWEB_NODE_GAMING + display_name = "Gaming" + description = "For the slackers on the station." + prereq_ids = list(TECHWEB_NODE_CONSOLES) + design_ids = list( + "arcade_battle", + "arcade_orion", + "slotmachine", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + discount_experiments = list(/datum/experiment/physical/arcade_winner = TECHWEB_TIER_2_POINTS) + +// Kitchen root node +/datum/techweb_node/cafeteria_equip + id = TECHWEB_NODE_CAFETERIA_EQUIP + starting_node = TRUE + display_name = "Cafeteria Equipment" + description = "When standard-issue tubed food no longer satisfies the station crew's appetite..." + design_ids = list( + "griddle", + "microwave", + "bowl", + "plate", + "oven_tray", + "servingtray", + "tongs", + "spoon", + "fork", + "kitchen_knife", + "plastic_spoon", + "plastic_fork", + "plastic_knife", + "shaker", + "drinking_glass", + "shot_glass", + "coffee_cartridge", + "coffeemaker", + "coffeepot", + "syrup_bottle", + ) + +/datum/techweb_node/food_proc + id = TECHWEB_NODE_FOOD_PROC + display_name = "Food Processing" + description = "Top-tier kitchen appliances from Nanotrasen, designed to keep the crew well-fed and happy." + prereq_ids = list(TECHWEB_NODE_CAFETERIA_EQUIP) + design_ids = list( + "deepfryer", + "oven", + "stove", + "range", + "souppot", + "processor", + "gibber", + "monkey_recycler", + "reagentgrinder", + "microwave_engineering", + "smartfridge", + "sheetifier", + "fat_sucker", + "dish_drive", + "roastingstick", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + +// Fishing root node +/datum/techweb_node/fishing_equip + id = TECHWEB_NODE_FISHING_EQUIP + starting_node = TRUE + display_name = "Fishing Equipment" + description = "Basic fishing gear tailored for space station environments, perfect for extraterrestrial aquatic pursuits." + design_ids = list( + "fishing_portal_generator", + "fishing_rod", + "fish_case", + ) + +/datum/techweb_node/fishing_equip_adv + id = TECHWEB_NODE_FISHING_EQUIP_ADV + display_name = "Advanced Fishing Tools" + description = "Continuing advancements in fishing technology, incorporating cutting-edge features in space fishing operations. Just don't try this on space carps..." + prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP) + design_ids = list( + "fishing_rod_tech", + "stabilized_hook", + "auto_reel", + "fish_analyzer", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/scanning/fish) + +/datum/techweb_node/marine_util + id = TECHWEB_NODE_MARINE_UTIL + display_name = "Marine Utility" + description = "Fish are nice to look at and all, but they can be put to use." + prereq_ids = list(TECHWEB_NODE_FISHING_EQUIP_ADV) + design_ids = list( + "bioelec_gen", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + // only available if you've done the first fishing experiment (thus unlocking fishing tech), but not a strict requirement to get the tech + discount_experiments = list(/datum/experiment/scanning/fish/second = TECHWEB_TIER_3_POINTS) diff --git a/code/modules/research/techweb/nodes/surgery_nodes.dm b/code/modules/research/techweb/nodes/surgery_nodes.dm new file mode 100644 index 00000000000..0b8812191e2 --- /dev/null +++ b/code/modules/research/techweb/nodes/surgery_nodes.dm @@ -0,0 +1,72 @@ +/datum/techweb_node/oldstation_surgery + id = TECHWEB_NODE_OLDSTATION_SURGERY + display_name = "Experimental Dissection" + description = "Grants access to experimental dissections, which allows generation of research points." + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "surgery_oldstation_dissection", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + hidden = TRUE + show_on_wiki = FALSE + +/datum/techweb_node/surgery + id = TECHWEB_NODE_SURGERY + display_name = "Improved Wound-Tending" + description = "Who would have known being more gentle with a hemostat decreases patient pain?" + prereq_ids = list(TECHWEB_NODE_MEDBAY_EQUIP) + design_ids = list( + "surgery_heal_brute_upgrade", + "surgery_heal_burn_upgrade", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS) + +/datum/techweb_node/surgery_adv + id = TECHWEB_NODE_SURGERY_ADV + display_name = "Advanced Surgery" + description = "When simple medicine doesn't cut it." + prereq_ids = list(TECHWEB_NODE_SURGERY) + design_ids = list( + "harvester", + "surgery_heal_brute_upgrade_femto", + "surgery_heal_burn_upgrade_femto", + "surgery_heal_combo", + "surgery_lobotomy", + "surgery_wing_reconstruction", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) + required_experiments = list(/datum/experiment/autopsy/human) + +/datum/techweb_node/surgery_exp + id = TECHWEB_NODE_SURGERY_EXP + display_name = "Experimental Surgery" + description = "When evolution isn't fast enough." + prereq_ids = list(TECHWEB_NODE_SURGERY_ADV) + design_ids = list( + "surgery_cortex_folding", + "surgery_cortex_imprint", + "surgery_heal_combo_upgrade", + "surgery_ligament_hook", + "surgery_ligament_reinforcement", + "surgery_muscled_veins", + "surgery_nerve_ground", + "surgery_nerve_splice", + "surgery_pacify", + "surgery_vein_thread", + "surgery_viral_bond", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) + discount_experiments = list(/datum/experiment/autopsy/nonhuman = TECHWEB_TIER_3_POINTS) + +/datum/techweb_node/surgery_tools + id = TECHWEB_NODE_SURGERY_TOOLS + display_name = "Advanced Surgery Tools" + description = "Surgical instruments of dual purpose for quick operations." + prereq_ids = list(TECHWEB_NODE_SURGERY_EXP) + design_ids = list( + "laserscalpel", + "searingtool", + "mechanicalpinches", + ) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + discount_experiments = list(/datum/experiment/autopsy/xenomorph = TECHWEB_TIER_4_POINTS)