diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 84c7d3a7b2b8..7329bd78f25e 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -553,7 +553,7 @@ playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) return if(HAS_TRAIT(mob_occupant, TRAIT_BADDNA)) - scantemp = "Subject's DNA is damaged beyond any hope of recovery." + scantemp = "Subject's DNA is too damaged to initiate cloning procedure." playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) return if (!body_only && isnull(mob_occupant.mind)) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 49dd44009f4b..f61fc30ed731 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -622,6 +622,13 @@ surgery = /datum/surgery/advanced/revival research_icon_state = "surgery_head" +/datum/design/surgery/dna_recovery + name= "DNA Recovery" + desc= "A surgical procedure which involves using rezadone to salvage a single strand of DNA from the patient, allowing them to be cloned." + id = "surgery_dna_recovery" + surgery = /datum/surgery/advanced/dna_recovery + research_icon_state = "surgery_head" + /datum/design/surgery/brainwashing name = "Brainwashing" desc = "A surgical procedure which directly implants a directive into the patient's brain, making it their absolute priority. It can be cleared using a mindshield implant." diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 371c216a99a4..f442b4489bc6 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -93,7 +93,7 @@ display_name = "Advanced Surgery" description = "When simple medicine doesn't cut it." prereq_ids = list("imp_wt_surgery") - design_ids = list("surgery_lobotomy", "surgery_heal_brute_upgrade_femto","surgery_heal_burn_upgrade_femto","surgery_heal_combo", "surgery_revival") + design_ids = list("surgery_lobotomy", "surgery_heal_brute_upgrade_femto","surgery_heal_burn_upgrade_femto","surgery_heal_combo", "surgery_revival", "surgery_dna_recovery") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) export_price = 4000 diff --git a/code/modules/surgery/advanced/dna_recovery.dm b/code/modules/surgery/advanced/dna_recovery.dm new file mode 100644 index 000000000000..522cd323e9d9 --- /dev/null +++ b/code/modules/surgery/advanced/dna_recovery.dm @@ -0,0 +1,40 @@ +/datum/surgery/advanced/dna_recovery + name = "DNA recovery" + desc = "An experimental surgical procedure that could fix the DNA from dead bodies. Requires rezadone." + steps = list(/datum/surgery_step/incise, + /datum/surgery_step/retract_skin, + /datum/surgery_step/saw, + /datum/surgery_step/clamp_bleeders, + /datum/surgery_step/dna_recovery, + /datum/surgery_step/close) + + possible_locs = list(BODY_ZONE_HEAD) + + +/datum/surgery/advanced/dna_recovery/can_start(mob/user, mob/living/carbon/target) + if(!..()) + return FALSE + + if(!HAS_TRAIT_FROM(target, TRAIT_BADDNA, CHANGELING_DRAIN)) + return FALSE + else + return TRUE + +/datum/surgery_step/dna_recovery + name = "recover DNA" + implements = list(/obj/item/reagent_containers/syringe = 100, /obj/item/pen = 30) + time = 150 + chems_needed = list(/datum/reagent/medicine/rezadone) + require_all_chems = FALSE + +/datum/surgery_step/dna_recovery/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You begin to mend what's left of [target]'s DNA...", + "[user] begins to tinker with [target]'s brain...", + "[user] begins to perform surgery on [target]'s brain.") + +/datum/surgery_step/dna_recovery/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + display_results(user, target, "You succeed in fixing some of [target]'s DNA!", + "[user] successfully repairs some of [target]'s DNA", + "[user] completes the surgery on [target]'s brain.") + REMOVE_TRAIT(target, TRAIT_BADDNA, CHANGELING_DRAIN) + return TRUE \ No newline at end of file diff --git a/yogstation.dme b/yogstation.dme index 8751cf4dcf5b..76bbad00e5ba 100644 --- a/yogstation.dme +++ b/yogstation.dme @@ -2757,6 +2757,7 @@ #include "code\modules\surgery\surgery_step.dm" #include "code\modules\surgery\tools.dm" #include "code\modules\surgery\advanced\brainwashing.dm" +#include "code\modules\surgery\advanced\dna_recovery.dm" #include "code\modules\surgery\advanced\lobotomy.dm" #include "code\modules\surgery\advanced\necrotic_revival.dm" #include "code\modules\surgery\advanced\pacification.dm"