From b5dc900cf7e3947bc08cd3a039418c29943cdbf2 Mon Sep 17 00:00:00 2001 From: Pinta <68373373+softcerv@users.noreply.github.com> Date: Wed, 3 May 2023 02:33:24 -0400 Subject: [PATCH] Moves the SAD code for applying prefs, while keeping damage, to it's own separate proc. (#20868) wew --- .../code/modules/client/preferences.dm | 50 +++++++++++++++++++ .../code/self_actualization_device.dm | 49 +----------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/modular_skyrat/master_files/code/modules/client/preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences.dm index 5264a08f207..c749bfbc1c6 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences.dm @@ -162,3 +162,53 @@ else return FALSE +/// This proc saves the damage currently on `character` and reapplies it after `safe_transfer_prefs()` is applied to the `character`. +/datum/preferences/proc/safe_transfer_prefs_to_with_damage(mob/living/carbon/human/character, icon_updates = TRUE, is_antag = FALSE) + if(!istype(character)) + return FALSE + + //Organ damage saving code. + var/heart_damage = character.check_organ_damage(/obj/item/organ/internal/heart) + var/liver_damage = character.check_organ_damage(/obj/item/organ/internal/liver) + var/lung_damage = character.check_organ_damage(/obj/item/organ/internal/lungs) + var/stomach_damage = character.check_organ_damage(/obj/item/organ/internal/stomach) + var/brain_damage = character.check_organ_damage(/obj/item/organ/internal/brain) + var/eye_damage = character.check_organ_damage(/obj/item/organ/internal/eyes) + var/ear_damage = character.check_organ_damage(/obj/item/organ/internal/ears) + + var/list/trauma_list = list() + if(character.get_traumas()) + for(var/datum/brain_trauma/trauma as anything in character.get_traumas()) + trauma_list += trauma + + var/brute_damage = character.getBruteLoss() + var/burn_damage = character.getFireLoss() + + safe_transfer_prefs_to(character, icon_updates, is_antag) + + // Apply organ damage + character.setOrganLoss(ORGAN_SLOT_HEART, heart_damage) + character.setOrganLoss(ORGAN_SLOT_LIVER, liver_damage) + character.setOrganLoss(ORGAN_SLOT_LUNGS, lung_damage) + character.setOrganLoss(ORGAN_SLOT_STOMACH, stomach_damage) + character.setOrganLoss(ORGAN_SLOT_EYES, eye_damage) + character.setOrganLoss(ORGAN_SLOT_EARS, ear_damage) + character.setOrganLoss(ORGAN_SLOT_BRAIN, brain_damage) + + //Re-Applies Trauma + var/obj/item/organ/internal/brain/character_brain = character.get_organ_by_type(/obj/item/organ/internal/brain) + + if(length(trauma_list)) + character_brain.traumas = trauma_list + + //Re-Applies Damage + character.setBruteLoss(brute_damage) + character.setFireLoss(burn_damage) + +/// Returns the damage of the `organ_to_check`, if the organ isn't there, the proc returns `100`. +/mob/living/carbon/human/proc/check_organ_damage(obj/item/organ/organ_to_check) + var/obj/item/organ/organ_to_track = get_organ_by_type(organ_to_check) + if(!organ_to_track) + return 100 //If the organ is missing, return max damage. + + return organ_to_track.damage diff --git a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm index 2f961d94659..1af51a6f4da 100644 --- a/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm +++ b/modular_skyrat/modules/self_actualization_device/code/self_actualization_device.dm @@ -136,24 +136,7 @@ var/mob/living/carbon/human/patient = occupant var/original_name = patient.dna.real_name - //Organ damage saving code. - var/heart_damage = check_organ(patient, /obj/item/organ/internal/heart) - var/liver_damage = check_organ(patient, /obj/item/organ/internal/liver) - var/lung_damage = check_organ(patient, /obj/item/organ/internal/lungs) - var/stomach_damage = check_organ(patient, /obj/item/organ/internal/stomach) - var/brain_damage = check_organ(patient, /obj/item/organ/internal/brain) - var/eye_damage = check_organ(patient, /obj/item/organ/internal/eyes) - var/ear_damage = check_organ(patient, /obj/item/organ/internal/ears) - - var/list/trauma_list = list() - if(patient.get_traumas()) - for(var/datum/brain_trauma/trauma as anything in patient.get_traumas()) - trauma_list += trauma - - var/brute_damage = patient.getBruteLoss() - var/burn_damage = patient.getFireLoss() - - patient.client?.prefs?.safe_transfer_prefs_to(patient) + patient.client?.prefs?.safe_transfer_prefs_to_with_damage(patient) patient.dna.update_dna_identity() log_game("[key_name(patient)] used a Self-Actualization Device at [loc_name(src)].") @@ -162,39 +145,9 @@ Original Name: [original_name], New Name: [patient.dna.real_name]. \ This may be a false positive from changing from a humanized monkey into a character, so be careful.") - // Apply organ damage - patient.setOrganLoss(ORGAN_SLOT_HEART, heart_damage) - patient.setOrganLoss(ORGAN_SLOT_LIVER, liver_damage) - patient.setOrganLoss(ORGAN_SLOT_LUNGS, lung_damage) - patient.setOrganLoss(ORGAN_SLOT_STOMACH, stomach_damage) - // Head organ damage. - patient.setOrganLoss(ORGAN_SLOT_EYES, eye_damage) - patient.setOrganLoss(ORGAN_SLOT_EARS, ear_damage) - patient.setOrganLoss(ORGAN_SLOT_BRAIN, brain_damage) - - //Re-Applies Trauma - var/obj/item/organ/internal/brain/patient_brain = patient.get_organ_by_type(/obj/item/organ/internal/brain) - - if(length(trauma_list)) - patient_brain.traumas = trauma_list - - //Re-Applies Damage - patient.setBruteLoss(brute_damage) - patient.setFireLoss(burn_damage) - open_machine() playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE) -/// Checks the damage on the inputed organ and stores it. -/obj/machinery/self_actualization_device/proc/check_organ(mob/living/carbon/human/patient, obj/item/organ/organ_to_check) - var/obj/item/organ/organ_to_track = patient.get_organ_by_type(organ_to_check) - - // If the organ is missing, the organ damage is automatically set to 100. - if(!organ_to_track) - return 100 //If the organ is missing, return max damage. - - return organ_to_track.damage - /obj/machinery/self_actualization_device/screwdriver_act(mob/living/user, obj/item/used_item) . = TRUE if(..())