mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-24 05:30:05 +01:00
Moves the SAD code for applying prefs, while keeping damage, to it's own separate proc. (#20868)
wew
This commit is contained in:
@@ -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(..())
|
||||
|
||||
Reference in New Issue
Block a user