/datum/experiment/scanning/points/slime name = "Base Slime Experiment" required_points = 1 /datum/experiment/scanning/points/slime/hard name = "Challenging Slime Survey" description = "Another station has challenged your research team to collect several challenging slime cores, \ are you up to the task?" required_points = 10 required_atoms = list(/obj/item/slime_extract/bluespace = 1, /obj/item/slime_extract/sepia = 1, /obj/item/slime_extract/cerulean = 1, /obj/item/slime_extract/pyrite = 1, /obj/item/slime_extract/red = 2, /obj/item/slime_extract/green = 2, /obj/item/slime_extract/pink = 2, /obj/item/slime_extract/gold = 2) /datum/experiment/scanning/points/slime/expert name = "Expert Slime Survey" description = "The intergalactic society of xenobiologists are currently looking for samples of the most complex \ slime cores, we are tasking your station with providing them with everything they need." required_points = 10 required_atoms = list(/obj/item/slime_extract/adamantine = 1, /obj/item/slime_extract/oil = 1, /obj/item/slime_extract/black = 1, /obj/item/slime_extract/lightpink = 1, /obj/item/slime_extract/rainbow = 10) /datum/experiment/scanning/random/cytology/easy name = "Basic Cytology Scanning Experiment" description = "A scientist needs vermin to test on, use the cytology equipment to grow some of these simple critters!" total_requirement = 3 max_requirement_per_type = 2 possible_types = list(/mob/living/basic/cockroach, /mob/living/basic/mouse, /mob/living/basic/snail) /datum/experiment/scanning/random/cytology/medium name = "Advanced Cytology Scanning Experiment" description = "We need to see how the body functions from the earliest moments. Some cytology experiments will help us gain this understanding." total_requirement = 3 max_requirement_per_type = 2 possible_types = list( /mob/living/basic/pet/cat, /mob/living/basic/carp, /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/pet/dog/corgi, /mob/living/basic/snake, ) /datum/experiment/scanning/random/cytology/medium/one name = "Advanced Cytology Scanning Experiment One" /datum/experiment/scanning/random/cytology/medium/two name = "Advanced Cytology Scanning Experiment Two" /datum/experiment/scanning/random/janitor_trash name = "Station Hygiene Inspection" description = "To learn how to clean, we must first learn what it is to have filth. We need you to scan some filth around the station." possible_types = list(/obj/effect/decal/cleanable/vomit, /obj/effect/decal/cleanable/blood) total_requirement = 3 /datum/experiment/ordnance/explosive/lowyieldbomb name = "Low-Yield Explosives" description = "Low-yield explosives may prove useful for our asset protection teams. Capture a small explosion with a Doppler Array and publish the data in a paper." gain = list(10,15,20) target_amount = list(5,10,20) experiment_proper = TRUE sanitized_misc = FALSE sanitized_reactions = FALSE allow_any_source = TRUE /datum/experiment/ordnance/explosive/highyieldbomb name = "High-Yield Explosives" description = "Several reactions react very energetically and can be utilized for bigger explosives. Capture any tank explosion with a Doppler Array and publish the data in a paper. Any gas reaction is allowed." gain = list(10,50,100) target_amount = list(50,100,300) experiment_proper = TRUE sanitized_misc = FALSE sanitized_reactions = FALSE /datum/experiment/ordnance/explosive/hydrogenbomb name = "Hydrogen Explosives" description = "Combustion of Hydrogen and its derivatives can be very powerful. Capture any tank explosion with a Doppler Array and publish the data in a paper. Only Hydrogen or Tritium Fires are allowed." gain = list(15,40,60) target_amount = list(50,75,150) experiment_proper = TRUE sanitized_misc = TRUE sanitized_reactions = TRUE require_all = FALSE required_reactions = list(/datum/gas_reaction/h2fire, /datum/gas_reaction/tritfire) /datum/experiment/ordnance/explosive/nobliumbomb name = "Noblium Explosives" description = "The formation of Hyper-Noblium is very energetic and can be harnessed for explosives. Capture any tank explosion with a Doppler Array and publish the data in a paper. Only Hyper-Noblium Condensation is allowed." gain = list(15,60,120) target_amount = list(50,100,300) experiment_proper = TRUE sanitized_misc = TRUE sanitized_reactions = TRUE required_reactions = list(/datum/gas_reaction/nobliumformation) /datum/experiment/ordnance/explosive/pressurebomb name = "Reactionless Explosives" description = "Gases with high specific heat can heat up those with a low one and produce a lot of pressure.Capture any tank explosion with a Doppler Array and publish the data in a paper. No gas reactions are allowed." gain = list(10,50,100) target_amount = list(20,50,100) experiment_proper = TRUE sanitized_misc = FALSE sanitized_reactions = TRUE /datum/experiment/ordnance/gaseous/nitrous_oxide name = "Nitrous Oxide Gas Shells" description = "The delivery of N2O into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." gain = list(10,40) target_amount = list(200,600) experiment_proper = TRUE required_gas = /datum/gas/nitrous_oxide /datum/experiment/ordnance/gaseous/plasma name = "Plasma Gas Shells" description = "The delivery of Plasma gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." gain = list(10,40) target_amount = list(200,600) experiment_proper = TRUE required_gas = /datum/gas/plasma /datum/experiment/ordnance/gaseous/bz name = "BZ Gas Shells" description = "The delivery of BZ gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." gain = list(10,30,60) target_amount = list(50,125,400) experiment_proper = TRUE required_gas = /datum/gas/bz /datum/experiment/ordnance/gaseous/noblium name = "Hypernoblium Gas Shells" description = "The delivery of Hypernoblium gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." gain = list(10,40,80) target_amount = list(15,55,250) experiment_proper = TRUE required_gas = /datum/gas/hypernoblium /datum/experiment/scanning/random/material/meat name = "Biological Material Scanning Experiment" description = "They told us we couldn't make chairs out of every material in the world. You're here to prove those naysayers wrong." possible_material_types = list(/datum/material/meat) /datum/experiment/scanning/random/material/easy name = "Low Grade Material Scanning Experiment" description = "Material science is all about a basic understanding of the universe, and how it's built. To explain this, build something basic and we'll show you how to break it." total_requirement = 6 possible_types = list(/obj/structure/chair, /obj/structure/toilet, /obj/structure/table) possible_material_types = list(/datum/material/iron, /datum/material/glass) /datum/experiment/scanning/random/material/medium name = "Medium Grade Material Scanning Experiment" description = "Not all materials are strong enough to hold together a space station. Look at these materials for example, and see what makes them useful for our electronics and equipment." possible_material_types = list(/datum/material/silver, /datum/material/gold, /datum/material/plastic, /datum/material/titanium) /datum/experiment/scanning/random/material/medium/one name = "Medium Grade Material Scanning Experiment One" /datum/experiment/scanning/random/material/medium/two name = "Medium Grade Material Scanning Experiment Two" /datum/experiment/scanning/random/material/medium/three name = "Medium Grade Material Scanning Experiment Three" /datum/experiment/scanning/random/material/hard name = "High Grade Material Scanning Experiment" description = "NT spares no expense to test even the most valuable of materials for their qualities as construction materials. Go build us some of these exotic creations and collect the data." possible_material_types = list(/datum/material/diamond, /datum/material/plasma, /datum/material/uranium) /datum/experiment/scanning/random/material/hard/one name = "High Grade Material Scanning Experiment One" /datum/experiment/scanning/random/material/hard/two name = "High Grade Material Scanning Experiment Two" /datum/experiment/scanning/random/material/hard/three name = "High Grade Material Scanning Experiment Three" /datum/experiment/scanning/random/plants/wild name = "Wild Biomatter Mutation Sample" description = "Due to a number of reasons, (Solar Rays, a diet consisting only of unstable mutagen, entropy) plants with lower levels of instability may occasionally mutate upon harvest. Scan one of these samples for us." performance_hint = "\"Wild\" mutations have been recorded to occur above 30 points of instability, while species mutations occur above 60 points of instability." total_requirement = 1 /datum/experiment/scanning/random/plants/traits name = "Unique Biomatter Mutation Sample" description = "We here at CentCom are on the look out for rare and exotic plants with unique properties to brag about to our shareholders. We're looking for a sample with a very specific genes currently." performance_hint = "The wide varities of plants on station each carry various traits, some unique to them. Look for plants that may mutate into what we're looking for." total_requirement = 3 possible_plant_genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/brewing, /datum/plant_gene/trait/juicing, /datum/plant_gene/trait/eyes, /datum/plant_gene/trait/sticky) /datum/experiment/scanning/points/machinery_tiered_scan/tier2_lathes name = "Advanced Stock Parts Benchmark" description = "Our newly-designed advanced 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." required_points = 6 required_atoms = list( /obj/machinery/rnd/production/protolathe/department/science = 1, /obj/machinery/rnd/production/protolathe/department/engineering = 1, /obj/machinery/rnd/production/techfab/department/cargo = 1, /obj/machinery/rnd/production/techfab/department/medical = 1, /obj/machinery/rnd/production/techfab/department/security = 1, /obj/machinery/rnd/production/techfab/department/service = 1 ) required_tier = 2 /datum/experiment/scanning/points/machinery_tiered_scan/tier3_bluespacemachines name = "Bluespace Machinery Attunement" description = "Teleportation technology using bluespace capabilities is a high selling point for our company, but the threat of a critical malfunction in calibration procedures wasn't something we predicted to emerge. Since our RnD department has started a flyperson race riot, maybe your advancements in stock parts could help mitigate the buzzing problem." required_points = 4 required_atoms = list( /obj/machinery/teleport/hub = 1, /obj/machinery/teleport/station = 1 ) required_tier = 3 /datum/experiment/scanning/points/machinery_tiered_scan/tier3_variety name = "High Efficiency Parts Applications Test" description = "We require further testing of the stock part designs to push their efficiency and market price even further." required_points = 15 required_atoms = list( /obj/machinery/autolathe = 1, /obj/machinery/rnd/production/circuit_imprinter/department/science = 1, /obj/machinery/monkey_recycler = 1, /obj/machinery/processor/slime = 1, /obj/machinery/processor = 2, /obj/machinery/reagentgrinder = 2, /obj/machinery/hydroponics = 2, /obj/machinery/biogenerator = 3, /obj/machinery/gibber = 3, /obj/machinery/chem_master = 3, /obj/machinery/cryo_cell = 3, /obj/machinery/harvester = 5, /obj/machinery/quantumpad = 5 ) required_tier = 3 /datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay name = "Military-grade Mech Bay Setup" description = "Constructing combat-oriented exosuits is a pricy endeavour. Make sure you have an efficient setup for production, and we'll send over some of our design documents." required_points = 6 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, /obj/machinery/mech_bay_recharge_port = 1, /obj/machinery/recharge_station = 1 ) required_tier = 3 /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser name = "High-power Micro-lasers Calibration" description = "Our Nanotrasen High-Power Office-Ready Laser Pointer ™ isn't powerful enough to strike airborne Syndidrones out of the sky yet. Find us some diode applications for hints on how to improve them!" required_points = 10 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, /obj/machinery/rnd/experimentor = 1, /obj/machinery/dna_scannernew = 1, /obj/machinery/microwave = 2, /obj/machinery/deepfryer = 2, /obj/machinery/chem_heater = 3, /obj/machinery/power/emitter = 3 ) required_stock_part = /obj/item/stock_parts/micro_laser/high /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_capacitors name = "Advanced Capacitors Benchmark" description = "Further improving the power capacity of devices station-wide is the next step towards the important project marked as CRITICAL: motorised wheelchairs that run on bluespace-contained nuclear power." required_points = 12 required_atoms = list( /obj/machinery/recharge_station = 1, /obj/machinery/cell_charger = 1, /obj/machinery/mech_bay_recharge_port = 1, /obj/machinery/recharger = 2, /obj/machinery/power/smes = 2, /obj/machinery/chem_dispenser = 3, /obj/machinery/chem_dispenser/drinks = 3, /*actually having only the chem dispenser works for scanning soda/booze dispensers but im not quite sure how would i go about actually pointing that out w/o these two lines*/ /obj/machinery/chem_dispenser/drinks/beer = 3 ) required_stock_part = /obj/item/stock_parts/capacitor/adv /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_scanmodules name = "Advanced Scanning Modules Calibration" description = "Despite the apparent lack of use of the scanning modules on our stations, we still expect you to run performance tests on them, just in case we come up with a ground-breaking way to fit 6 scanning modules in an exosuit." required_points = 6 required_atoms = list( /obj/machinery/dna_scannernew = 1, /obj/machinery/rnd/experimentor = 1, /obj/machinery/medical_kiosk = 2, /obj/machinery/piratepad/civilian = 2, ) required_stock_part = /obj/item/stock_parts/scanning_module/adv /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_cells name = "Power Cells Capacity Test" description = "Nanotrasen has two major problems with their new Hamster-powered Generator Array: excess of power produced and violent protests of Animal Rights Consortium activists over genetically modifying hamsters with the Hulk gene. We place dibs on dealing with the latter!" required_points = 8 required_atoms = list( /obj/machinery/recharge_station = 1, /obj/machinery/chem_dispenser = 1, /obj/machinery/chem_dispenser/drinks = 1, /obj/machinery/chem_dispenser/drinks/beer = 1, /obj/machinery/power/smes = 2 ) required_stock_part = /obj/item/stock_parts/power_store/cell/hyper /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_microlaser name = "Ultra-high-power Micro-lasers Calibration" description = "We're very close to outperforming the surgeons of the past by inventing laser tools precise enough to perform surgeries on grapes. Help us fine-tune the diodes to perfection!" required_points = 10 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, /obj/machinery/microwave = 1, /obj/machinery/rnd/experimentor = 1, /obj/machinery/atmospherics/components/unary/thermomachine/freezer = 2, /obj/machinery/power/emitter = 2, /obj/machinery/chem_heater = 2, /obj/machinery/chem_mass_spec = 3 ) required_stock_part = /obj/item/stock_parts/micro_laser/ultra /datum/experiment/scanning/random/mecha_damage_scan name = "Exosuit Materials: Stress Failure Test" 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" total_requirement = 2 possible_types = list(/obj/vehicle/sealed/mecha) ///Damage percent that each mech needs to be at for a scan to work. var/damage_percent /datum/experiment/scanning/random/mecha_equipped_scan name = "Exosuit Materials: Load Strain Test" description = "Exosuit equipment places unique strain upon the structure of the vehicle. Scan exosuits you have assembled from your exosuit fabricator and fully equipped to accelerate our structural stress simulations." possible_types = list(/obj/vehicle/sealed/mecha) total_requirement = 1 /// 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" description = "We need data on organic compatibility between species. Scan some samples of humanoid organisms with organs they don't usually have. \ Data on mechanical organs isn't of any use to us." performance_hint = "Unusual organs can be introduced manually by transplant, genetic infusion, or very rapidly via a Bioscrambler anomaly effect." required_traits_desc = "non-synthetic organs not typical for their species" /// Disallow prosthetic organs var/organic_only = TRUE /datum/experiment/scanning/people/novel_organs/is_valid_scan_target(mob/living/carbon/human/check) . = ..() if (!.) return // Organs which are valid for get_mutant_organ_type_for_slot var/static/list/vital_organ_slots = list( ORGAN_SLOT_BRAIN, ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_APPENDIX, ORGAN_SLOT_EYES, ORGAN_SLOT_EARS, ORGAN_SLOT_TONGUE, ORGAN_SLOT_LIVER, ORGAN_SLOT_STOMACH, ) for (var/obj/item/organ/organ as anything in check.organs) if (organic_only && !IS_ORGANIC_ORGAN(organ)) continue var/datum/species/target_species = check.dna.species if (organ.slot in vital_organ_slots) if (organ.type == target_species.get_mutant_organ_type_for_slot(organ.slot)) continue else if ((organ.type in target_species.mutant_organs)) continue return TRUE return FALSE /// 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 ((organ.slot in vital_organ_slots) && IS_ROBOTIC_ORGAN(organ)) 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/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 /// 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 (length(check.organs) < 6 || length(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 /datum/experiment/scanning/reagent/haloperidol name = "Pure Haloperidol Scan" description = "We require testing related to the long-term treatment of chronic psychiatric disorders. Produce Haloperidol with at least 98% purity and scan the beaker." performance_hint = "Exothermic and consumes hydrogen during reaction." required_reagent = /datum/reagent/medicine/haloperidol min_purity = 0.98 /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