From 4ba10ab4db2f88d35f52bc44981a6c138969e620 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 4 Jul 2024 03:56:13 +0300 Subject: [PATCH] Scan an android to get 200 point discount on the final augmentation node [NO GBP] (#84502) ## About The Pull Request Provides an alternative way to get the 200 points for the final augmentation node. Also reduced the tier of the prior tech node, it was put to tier 4 by mistake ## Why It's Good For The Game More options to get the desired node. ## Changelog :cl: fix: Techweb: Moved upgraded cyber organs to tier 3 from tier 4 qol: Techweb: Added fully augmented android scan discount experiment for Advanced Cybernetic Organs techweb node /:cl: --- .../experisci/experiment/experiments.dm | 45 ++++++++++++++++--- .../experiment/types/scanning_reagent.dm | 2 +- .../research/techweb/nodes/cyborg_nodes.dm | 6 ++- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index a025d90b44f..ea3a982cb8f 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -380,7 +380,7 @@ /// 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" + 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 @@ -399,11 +399,8 @@ ) 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 + if (organ.slot in vital_organ_slots && IS_ROBOTIC_ORGAN(organ)) + return TRUE return FALSE /// Scan for skillchips @@ -426,9 +423,45 @@ return FALSE return TRUE +/// Scan an android +/datum/experiment/scanning/people/android + name = "Human Field Research: Full Augmentation" + description = "Perform a full cybernetic augmentation on a crewmate then scan them to test their newfound capabilities and new sensory and cognitive functions." + performance_hint = "Achieve full augmentation by performing a set of surgery operations." + required_traits_desc = "fully augmented android" + required_count = 1 + +/datum/experiment/scanning/people/android/is_valid_scan_target(mob/living/carbon/human/check, datum/component/experiment_handler/experiment_handler) + . = ..() + if (!.) + return + if (isandroid(check)) + return TRUE + if (check.organs < 6 || check.bodyparts < 6) + return FALSE + + var/static/list/augmented_organ_slots = list( + ORGAN_SLOT_EYES, + ORGAN_SLOT_EARS, + ORGAN_SLOT_HEART, + ORGAN_SLOT_LUNGS, + ORGAN_SLOT_LIVER, + ORGAN_SLOT_STOMACH, + ) + for (var/obj/item/organ/organ as anything in check.organs) + if (!(organ.slot in augmented_organ_slots)) + continue + if (!IS_ROBOTIC_ORGAN(organ)) + return FALSE + for (var/obj/item/bodypart/bodypart as anything in check.bodyparts) + if (bodypart.bodytype != BODYTYPE_ROBOTIC) + 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." + performance_hint = "Keep the temperature as high as possible during the reaction." required_reagent = /datum/reagent/cryostylane min_purity = 0.99 diff --git a/code/modules/experisci/experiment/types/scanning_reagent.dm b/code/modules/experisci/experiment/types/scanning_reagent.dm index 1a39e2941ef..992c28d148d 100644 --- a/code/modules/experisci/experiment/types/scanning_reagent.dm +++ b/code/modules/experisci/experiment/types/scanning_reagent.dm @@ -31,5 +31,5 @@ return TRUE /datum/experiment/scanning/reagent/serialize_progress_stage(atom/target, list/seen_instances) - return EXPERIMENT_PROG_INT("Scan a reagent container with [required_reagent::name] of at least [PERCENT(min_purity)] purity.", \ + return EXPERIMENT_PROG_INT("Scan a reagent container with [required_reagent::name] of at least [PERCENT(min_purity)]% purity.", \ seen_instances.len, required_atoms[target]) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index da9f485f2bf..447ee2dc7f3 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -19,6 +19,9 @@ "cybernetic_liver", "cybernetic_heart", ) + experiments_to_unlock = list( + /datum/experiment/scanning/people/android, + ) /datum/techweb_node/cybernetics id = TECHWEB_NODE_CYBERNETICS @@ -213,7 +216,7 @@ "cybernetic_liver_tier3", "cybernetic_heart_tier3", ) - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS) + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS) required_experiments = list(/datum/experiment/scanning/people/augmented_organs) /datum/techweb_node/cyber/cyber_organs_adv @@ -229,3 +232,4 @@ "ci-xray-moth", ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS) + discount_experiments = list(/datum/experiment/scanning/people/android = TECHWEB_TIER_5_POINTS)