From 33f6facdb466dc032ce8008682ac6e927071341a Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 18 Mar 2016 09:14:35 -0700 Subject: [PATCH 1/4] Organs can now be made viable again with an application of mitocholide --- .../reagents/oldchem/reagents/reagents_med.dm | 5 +++++ code/modules/surgery/organs/organ.dm | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index ae6fd9bb8a3..63318122b4f 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -87,6 +87,11 @@ ..() return +/datum/reagent/mitocholide/reaction_obj(var/obj/O, var/volume) + if(istype(O, /obj/item/organ)) + var/obj/item/organ/Org = O + Org.rejuvenate() + /datum/reagent/cryoxadone name = "Cryoxadone" id = "cryoxadone" diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index e3b7f49abc4..c4ab2e26331 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -57,7 +57,7 @@ var/list/organ_cache = list() /obj/item/organ/proc/set_dna(var/datum/dna/new_dna) if(new_dna) dna = new_dna.Clone() - blood_DNA.Cut() + blood_DNA = list() blood_DNA[dna.unique_enzymes] = dna.b_type /obj/item/organ/proc/die() @@ -86,11 +86,11 @@ var/list/organ_cache = list() return if(!owner) - if(reagents && prob(40)) - reagents.remove_any(0.1) - for(var/datum/reagent/R in reagents.reagent_list) - R.reaction_turf(get_turf(src), 0.1) - + if(reagents) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + if(B && prob(40)) + reagents.remove_reagent("blood",0.1) + blood_splatter(src,B,1) // Maybe scale it down a bit, have it REALLY kick in once past the basic infection threshold // Another mercy for surgeons preparing transplant organs germ_level++ @@ -173,6 +173,9 @@ var/list/organ_cache = list() /obj/item/organ/proc/rejuvenate() damage = 0 germ_level = 0 + status &= ~ORGAN_DEAD + if(!owner) + processing_objects |= src /obj/item/organ/proc/is_damaged() return damage > 0 @@ -268,8 +271,8 @@ var/list/organ_cache = list() loc = get_turf(owner) processing_objects |= src var/datum/reagent/blood/organ_blood - if(reagents) organ_blood = reagents.get_reagent_from_id(owner.get_blood_name()) - if((!organ_blood || !organ_blood.data["blood_DNA"]) && (owner && !(owner.species.flags & NO_BLOOD))) + if(reagents) organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list + if(!organ_blood || !organ_blood.data["blood_DNA"]) owner.vessel.trans_to(src, 5, 1, 1) if(owner && vital && is_primary_organ()) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead From 3077a397de147d38c72658a505bcdc5a7ce90ce3 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 18 Mar 2016 11:14:13 -0700 Subject: [PATCH 2/4] Adds necrotic organ detection to the advanced med scanner --- code/game/machinery/adv_med.dm | 3 +++ code/modules/surgery/organs/organ.dm | 10 +++++----- nano/templates/adv_med.tmpl | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index f0df15af4fe..fe4c1088885 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -389,6 +389,8 @@ organStatus["splinted"] = 1 if(E.status & ORGAN_BLEEDING) organStatus["bleeding"] = 1 + if(E.status & ORGAN_DEAD) + organStatus["dead"] = 1 organData["status"] = organStatus @@ -415,6 +417,7 @@ organData["bruised"] = I.min_broken_damage organData["broken"] = I.min_bruised_damage organData["robotic"] = I.robotic + organData["dead"] = (I.status & ORGAN_DEAD) intOrganData.Add(list(organData)) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index c4ab2e26331..a4c7d0dd01b 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -86,11 +86,11 @@ var/list/organ_cache = list() return if(!owner) - if(reagents) - var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list - if(B && prob(40)) - reagents.remove_reagent("blood",0.1) - blood_splatter(src,B,1) + if(reagents && prob(40)) + reagents.remove_any(0.1) + for(var/datum/reagent/R in reagents.reagent_list) + R.reaction_turf(get_turf(src), 0.1) + // Maybe scale it down a bit, have it REALLY kick in once past the basic infection threshold // Another mercy for surgeons preparing transplant organs germ_level++ diff --git a/nano/templates/adv_med.tmpl b/nano/templates/adv_med.tmpl index 017abaad0cb..66650e62f86 100644 --- a/nano/templates/adv_med.tmpl +++ b/nano/templates/adv_med.tmpl @@ -174,6 +174,7 @@ Used In File(s): \code\game\machinery\adv_med.dm {{if value.status.splinted}} splinted
{{/if}} {{if value.status.robotic}} robotic
{{/if}} + {{if value.status.dead}} DEAD
@@ -220,6 +221,7 @@ Used In File(s): \code\game\machinery\adv_med.dm {{if value.robotic == 1}} robotic
{{/if}} {{if value.robotic == 2}} assisted
{{/if}} + {{if value.dead}} DEAD
{{/if}} {{/for}} From d41ab5251508eca320788e0b0bd4f32a90fb44e6 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 18 Mar 2016 11:16:21 -0700 Subject: [PATCH 3/4] Stop eating my changes --- code/modules/surgery/organs/organ.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index a4c7d0dd01b..911de71e071 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -271,8 +271,8 @@ var/list/organ_cache = list() loc = get_turf(owner) processing_objects |= src var/datum/reagent/blood/organ_blood - if(reagents) organ_blood = locate(/datum/reagent/blood) in reagents.reagent_list - if(!organ_blood || !organ_blood.data["blood_DNA"]) + if(reagents) organ_blood = reagents.get_reagent_from_id(owner.get_blood_name()) + if((!organ_blood || !organ_blood.data["blood_DNA"]) && (owner && !(owner.species.flags & NO_BLOOD))) owner.vessel.trans_to(src, 5, 1, 1) if(owner && vital && is_primary_organ()) // I'd do another check for species or whatever so that you couldn't "kill" an IPC by removing a human head from them, but it doesn't matter since they'll come right back from the dead From eb04645aeaaa1f52845a6bd2463754f4b59a1e38 Mon Sep 17 00:00:00 2001 From: Crazylemon64 Date: Fri, 18 Mar 2016 20:16:02 -0700 Subject: [PATCH 4/4] Fixes fox's thing --- code/modules/surgery/organs/organ.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/surgery/organs/organ.dm b/code/modules/surgery/organs/organ.dm index 911de71e071..395848f26e0 100644 --- a/code/modules/surgery/organs/organ.dm +++ b/code/modules/surgery/organs/organ.dm @@ -57,7 +57,10 @@ var/list/organ_cache = list() /obj/item/organ/proc/set_dna(var/datum/dna/new_dna) if(new_dna) dna = new_dna.Clone() - blood_DNA = list() + if(blood_DNA) + blood_DNA.Cut() + else + blood_DNA = list() blood_DNA[dna.unique_enzymes] = dna.b_type /obj/item/organ/proc/die()