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)