From 8993eab534a021168b8853deb97c0f56afe2c015 Mon Sep 17 00:00:00 2001 From: iloveloopers Date: Mon, 24 Jun 2024 12:42:55 -0400 Subject: [PATCH] refactor this --- code/datums/diseases/xeno_transformation.dm | 22 ++++------ .../chemical_research/Chemical-Research.dm | 2 - .../chemical_research/research-events.dm | 42 +++++++++++++++++++ colonialmarines.dme | 1 + 4 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 code/modules/reagents/chemical_research/research-events.dm diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 630d1080be81..2c0dd5e3ead2 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -51,22 +51,16 @@ var/turf/turf = get_turf(affected_mob) var/area/area = get_area(turf) gibs(turf) + var/mob/living/carbon/xenomorph/drone/xeno = new() + xeno.forceMove(turf) + xeno.set_hive_and_update(XENO_HIVE_FERAL) if(ismonkey(affected_mob)) - new /mob/living/simple_animal/hostile/alien/ravager(turf) - qdel(affected_mob) + xeno.free_for_ghosts(TRUE) else - var/mob/living/carbon/human/H = affected_mob - H.Alienize(XENO_T3_CASTES) + affected_mob.mind.transfer_to(xeno, TRUE) + src.cure() + qdel(affected_mob) if(istype(area, /area/almayer/medical/containment)) - if(!GLOB.chemical_data.DDI_experiment_done) - GLOB.chemical_data.DDI_experiment_done = TRUE - - ai_announcement("Notice: Unidentified lifesign detected at research containment, analyzing data...") - sleep(10 SECONDS) - GLOB.chemical_data.update_credits(20) - var/datum/techtree/tree = GET_TREE(TREE_MARINE) - tree.add_points(20) - ai_announcement("Notice: Lifesign concluded to be the product of DNA Disintegrating, research data logged. 20 tech points and research credits awarded.") - + GLOB.ddi_experiment.trigger(xeno) diff --git a/code/modules/reagents/chemical_research/Chemical-Research.dm b/code/modules/reagents/chemical_research/Chemical-Research.dm index 449a11dfc9ef..ed26d08c9ef5 100644 --- a/code/modules/reagents/chemical_research/Chemical-Research.dm +++ b/code/modules/reagents/chemical_research/Chemical-Research.dm @@ -5,7 +5,6 @@ GLOBAL_DATUM_INIT(chemical_data, /datum/chemical_data, new) var/clearance_level = 1 var/clearance_x_access = FALSE var/reached_x_access = FALSE - var/DDI_experiment_done = FALSE var/has_new_properties = FALSE var/research_allocation_amount = 5 var/list/research_documents = list() @@ -156,4 +155,3 @@ GLOBAL_DATUM_INIT(chemical_data, /datum/chemical_data, new) clue["text"] = chem.name return clue - diff --git a/code/modules/reagents/chemical_research/research-events.dm b/code/modules/reagents/chemical_research/research-events.dm new file mode 100644 index 000000000000..1fabe15d99fb --- /dev/null +++ b/code/modules/reagents/chemical_research/research-events.dm @@ -0,0 +1,42 @@ +GLOBAL_DATUM_INIT(ddi_experiment, /datum/research_event/ddi_experiment, new) + +/datum/research_event/ddi_experiment + var/DDI_experiment_triggered = FALSE + var/DDI_experiment_xeno = null + var/timer + var/total_points_given = 0 + +/datum/research_event/ddi_experiment/proc/trigger(xeno) + if(DDI_experiment_triggered) + return + DDI_experiment_triggered = TRUE + DDI_experiment_xeno = xeno + + ai_announcement("Notice: Unidentified lifesign detected at research containment created through DNA disintegration, analyzing data...") + sleep(5 SECONDS) + ai_announcement("Notice: Lifeform biostructural data can be analyzed further for tech point reward at a rate of 1 tech point per minute.") + + timer = world.time + START_PROCESSING(SSprocessing, src) + +/datum/research_event/ddi_experiment/process(delta_time) + if(total_points_given >= 20) + STOP_PROCESSING(SSprocessing, src) + ai_announcement("Notice: Lifeform biostructural data fully analyzed, 20 total tech points and research credits awarded. Recommend termination of lifeform.") + return + + var/mob/living/carbon/xenomorph/xeno = DDI_experiment_xeno + var/area/xeno_loc = get_area(xeno.loc) + + if(!xeno || xeno.stat == DEAD || !istype(xeno_loc, /area/almayer/medical/containment)) + if(total_points_given < 20) + ai_announcement("Notice: Lifeform terminated or missing, biostructrual data not fully analyzed. Only [total_points_given] out of [20] tech and research points awarded.") + STOP_PROCESSING(SSprocessing, src) + return + + if(world.time >= timer + 1 MINUTES) + timer = world.time + GLOB.chemical_data.update_credits(1) + var/datum/techtree/tree = GET_TREE(TREE_MARINE) + tree.add_points(1) + total_points_given++ diff --git a/colonialmarines.dme b/colonialmarines.dme index 5193cd3571cb..b11dea76c1d7 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -2264,6 +2264,7 @@ #include "code\modules\reagents\Chemistry-Vessel.dm" #include "code\modules\reagents\chemical_research\Chemical-Research.dm" #include "code\modules\reagents\chemical_research\generated_reagents.dm" +#include "code\modules\reagents\chemical_research\research-events.dm" #include "code\modules\reagents\chemistry_machinery\acid_harness.dm" #include "code\modules\reagents\chemistry_machinery\autodispenser.dm" #include "code\modules\reagents\chemistry_machinery\centrifuge.dm"