From 7663d9b8ddf2db4229e33bca1fcbcd79c24b11a7 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Sun, 20 Nov 2022 09:14:38 -0600 Subject: [PATCH] Fixes regenerate organs carrying over organ damage (#71336) Full heals now properly heal all organ damage. Also, due to a previous copy paste error, heals fix Oxygen damage again if set to. --- code/modules/mob/living/living.dm | 2 +- code/modules/surgery/organs/_organ.dm | 71 +++++++++++++++------------ 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 15d03a9b61a..ff02720b67c 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -832,7 +832,7 @@ if(heal_flags & HEAL_TOX) setToxLoss(0, FALSE, TRUE) if(heal_flags & HEAL_OXY) - setToxLoss(0, FALSE, TRUE) + setOxyLoss(0, FALSE, TRUE) if(heal_flags & HEAL_CLONE) setCloneLoss(0, FALSE, TRUE) if(heal_flags & HEAL_BRUTE) diff --git a/code/modules/surgery/organs/_organ.dm b/code/modules/surgery/organs/_organ.dm index 410475d14c1..eb1510beb46 100644 --- a/code/modules/surgery/organs/_organ.dm +++ b/code/modules/surgery/organs/_organ.dm @@ -221,46 +221,53 @@ INITIALIZE_IMMEDIATE(/obj/item/organ) //Looking for brains? //Try code/modules/mob/living/carbon/brain/brain_item.dm -/mob/living/proc/regenerate_organs() - return FALSE - -/mob/living/carbon/regenerate_organs() +/** + * Recreates all of this mob's organs, and heals them to full. + */ +/mob/living/carbon/proc/regenerate_organs() + // Delegate to species if possible. if(dna?.species) dna.species.regenerate_organs(src) + // Species regenerate organs doesn't handling healing the organs here, + // it's more concerned with just putting the necessary organs back in. + for(var/obj/item/organ/organ as anything in internal_organs) + organ.setOrganDamage(0) + set_heartattack(FALSE) return + // Default organ fixing handling + // May result in kinda cursed stuff for mobs which don't need these organs + var/obj/item/organ/internal/lungs/lungs = getorganslot(ORGAN_SLOT_LUNGS) + if(!lungs) + lungs = new() + lungs.Insert(src) + lungs.setOrganDamage(0) + + var/obj/item/organ/internal/heart/heart = getorganslot(ORGAN_SLOT_HEART) + if(heart) + set_heartattack(FALSE) else - var/obj/item/organ/internal/lungs/lungs = getorganslot(ORGAN_SLOT_LUNGS) - if(!lungs) - lungs = new() - lungs.Insert(src) - lungs.setOrganDamage(0) + heart = new() + heart.Insert(src) + heart.setOrganDamage(0) - var/obj/item/organ/internal/heart/heart = getorganslot(ORGAN_SLOT_HEART) - if(heart) - set_heartattack(FALSE) - else - heart = new() - heart.Insert(src) - heart.setOrganDamage(0) + var/obj/item/organ/internal/tongue/tongue = getorganslot(ORGAN_SLOT_TONGUE) + if(!tongue) + tongue = new() + tongue.Insert(src) + tongue.setOrganDamage(0) - var/obj/item/organ/internal/tongue/tongue = getorganslot(ORGAN_SLOT_TONGUE) - if(!tongue) - tongue = new() - tongue.Insert(src) - tongue.setOrganDamage(0) + var/obj/item/organ/internal/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) + if(!eyes) + eyes = new() + eyes.Insert(src) + eyes.setOrganDamage(0) - var/obj/item/organ/internal/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) - if(!eyes) - eyes = new() - eyes.Insert(src) - eyes.setOrganDamage(0) - - var/obj/item/organ/internal/ears/ears = getorganslot(ORGAN_SLOT_EARS) - if(!ears) - ears = new() - ears.Insert(src) - ears.setOrganDamage(0) + var/obj/item/organ/internal/ears/ears = getorganslot(ORGAN_SLOT_EARS) + if(!ears) + ears = new() + ears.Insert(src) + ears.setOrganDamage(0) /obj/item/organ/proc/handle_failing_organs(delta_time) return