Moves the SAD code for applying prefs, while keeping damage, to it's own separate proc. (#20868)

wew
This commit is contained in:
Pinta
2023-05-02 23:33:24 -07:00
committed by GitHub
parent 41c68fe7ef
commit b5dc900cf7
2 changed files with 51 additions and 48 deletions
@@ -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
@@ -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(..())