mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 17:14:47 +01:00
baf3837ae8
# Conflicts: # _maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm # _maps/RandomRuins/SpaceRuins/garbagetruck2.dmm # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # _maps/map_files/tramstation/tramstation.dmm # code/_onclick/hud/new_player.dm # code/datums/components/squashable.dm # code/datums/diseases/advance/symptoms/heal.dm # code/datums/diseases/chronic_illness.dm # code/datums/status_effects/buffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/stamcrit.dm # code/game/machinery/computer/crew.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/wall_mounted.dm # code/game/turfs/closed/indestructible.dm # code/modules/admin/view_variables/filterrific.dm # code/modules/antagonists/heretic/influences.dm # code/modules/cargo/orderconsole.dm # code/modules/client/preferences.dm # code/modules/events/space_vines/vine_mutations.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/carbon/human/death.dm # code/modules/mob/living/carbon/human/species_types/jellypeople.dm # code/modules/mob/living/damage_procs.dm # code/modules/mob/living/living.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mob_spawn/mob_spawn.dm # code/modules/projectiles/ammunition/energy/laser.dm # code/modules/projectiles/guns/ballistic/launchers.dm # code/modules/projectiles/guns/energy/laser.dm # code/modules/reagents/chemistry/machinery/chem_dispenser.dm # code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/medicine_reagents.dm # code/modules/surgery/healing.dm # code/modules/unit_tests/designs.dm # icons/mob/inhands/items_lefthand.dmi # icons/mob/inhands/items_righthand.dmi # tgui/packages/tgui/interfaces/ChemDispenser.tsx
377 lines
15 KiB
Plaintext
377 lines
15 KiB
Plaintext
/datum/surgery/healing
|
|
target_mobtypes = list(/mob/living)
|
|
requires_bodypart_type = BODYTYPE_ORGANIC //SKYRAT EDIT CHANGE - ORIGINAL VALUE: requires_bodypart_type = FALSE
|
|
replaced_by = /datum/surgery
|
|
surgery_flags = SURGERY_IGNORE_CLOTHES | SURGERY_REQUIRE_RESTING
|
|
possible_locs = list(BODY_ZONE_CHEST)
|
|
steps = list(
|
|
/datum/surgery_step/incise,
|
|
/datum/surgery_step/retract_skin,
|
|
/datum/surgery_step/incise,
|
|
/datum/surgery_step/clamp_bleeders,
|
|
/datum/surgery_step/heal,
|
|
/datum/surgery_step/close,
|
|
)
|
|
|
|
var/healing_step_type
|
|
var/antispam = FALSE
|
|
|
|
/datum/surgery/healing/can_start(mob/user, mob/living/patient)
|
|
. = ..()
|
|
if(!.)
|
|
return .
|
|
if(!(patient.mob_biotypes & (MOB_ORGANIC|MOB_HUMANOID)))
|
|
return FALSE
|
|
return .
|
|
|
|
/datum/surgery/healing/New(surgery_target, surgery_location, surgery_bodypart)
|
|
..()
|
|
if(healing_step_type)
|
|
steps = list(
|
|
/datum/surgery_step/incise/nobleed,
|
|
healing_step_type, //hehe cheeky
|
|
/datum/surgery_step/close,
|
|
)
|
|
|
|
/datum/surgery_step/heal
|
|
name = "repair body (hemostat)"
|
|
implements = list(
|
|
TOOL_HEMOSTAT = 100,
|
|
TOOL_SCREWDRIVER = 65,
|
|
TOOL_WIRECUTTER = 60,
|
|
/obj/item/pen = 55)
|
|
repeatable = TRUE
|
|
time = 2.5 SECONDS
|
|
success_sound = 'sound/items/handling/surgery/retractor2.ogg'
|
|
failure_sound = 'sound/items/handling/surgery/organ2.ogg'
|
|
var/brutehealing = 0
|
|
var/burnhealing = 0
|
|
var/brute_multiplier = 0 //multiplies the damage that the patient has. if 0 the patient wont get any additional healing from the damage he has.
|
|
var/burn_multiplier = 0
|
|
|
|
/// Returns a string letting the surgeon know roughly how much longer the surgery is estimated to take at the going rate
|
|
/datum/surgery_step/heal/proc/get_progress(mob/user, mob/living/carbon/target, brute_healed, burn_healed)
|
|
return
|
|
|
|
/datum/surgery_step/heal/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
|
var/woundtype
|
|
if(brutehealing && burnhealing)
|
|
woundtype = "wounds"
|
|
else if(brutehealing)
|
|
woundtype = "bruises"
|
|
else //why are you trying to 0,0...?
|
|
woundtype = "burns"
|
|
if(istype(surgery,/datum/surgery/healing))
|
|
var/datum/surgery/healing/the_surgery = surgery
|
|
if(!the_surgery.antispam)
|
|
display_results(
|
|
user,
|
|
target,
|
|
span_notice("You attempt to patch some of [target]'s [woundtype]."),
|
|
span_notice("[user] attempts to patch some of [target]'s [woundtype]."),
|
|
span_notice("[user] attempts to patch some of [target]'s [woundtype]."),
|
|
)
|
|
display_pain(target, "Your [woundtype] sting like hell!")
|
|
|
|
/datum/surgery_step/heal/initiate(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, try_to_fail = FALSE)
|
|
if(!..())
|
|
return
|
|
while((brutehealing && target.get_brute_loss()) || (burnhealing && target.get_fire_loss()))
|
|
if(!..())
|
|
break
|
|
|
|
/datum/surgery_step/heal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE)
|
|
var/user_msg = "You succeed in fixing some of [target]'s wounds" //no period, add initial space to "addons"
|
|
var/target_msg = "[user] fixes some of [target]'s wounds" //see above
|
|
var/brute_healed = brutehealing
|
|
var/burn_healed = burnhealing
|
|
var/dead_patient = FALSE
|
|
var/status_msg = list() // BUBBER EDIT ADDITION
|
|
feedback_value = null // BUBBER EDIT ADDITION
|
|
if(target.stat == DEAD) //dead patients get way less additional heal from the damage they have.
|
|
// BUBBER EDIT CHANGE BEGIN - Husks get reduced bonus, but dead patients are full speed
|
|
//brute_healed += round((target.get_brute_loss() * (brute_multiplier * 0.2)),0.1)
|
|
//burn_healed += round((target.get_fire_loss() * (burn_multiplier * 0.2)),0.1)
|
|
dead_patient = TRUE
|
|
if(HAS_TRAIT(target, TRAIT_HUSK))
|
|
brute_healed += round((target.get_brute_loss() * (brute_multiplier * 0.7)),0.1)
|
|
burn_healed += round((target.get_fire_loss() * (burn_multiplier * 0.7)),0.1)
|
|
status_msg += "[target.p_are()] husked"
|
|
else
|
|
brute_healed += round((target.get_brute_loss() * brute_multiplier),0.1)
|
|
burn_healed += round((target.get_fire_loss() * burn_multiplier),0.1)
|
|
// BUBBER EDIT CHANGE END
|
|
else
|
|
brute_healed += round((target.get_brute_loss() * brute_multiplier),0.1)
|
|
burn_healed += round((target.get_fire_loss() * burn_multiplier),0.1)
|
|
dead_patient = FALSE
|
|
if(!get_location_accessible(target, target_zone))
|
|
brute_healed *= 0.55
|
|
burn_healed *= 0.55
|
|
status_msg += "[target.p_have()] clothing on"
|
|
//user_msg += " as best as you can while [target.p_they()] [target.p_have()] clothing on" // BUBBER EDIT REMOVAL
|
|
//target_msg += " as best as [user.p_they()] can while [target.p_they()] [target.p_have()] clothing on" // BUBBER EDIT REMOVAL
|
|
// BUBBER EDIT ADDITION BEGIN
|
|
if(length(status_msg) > 0)
|
|
user_msg += " as best as you can while [target.p_they()] [english_list(status_msg)]"
|
|
target_msg += " as best as [user.p_they()] can while [target.p_they()] [english_list(status_msg)]"
|
|
feedback_value = brute_healed + burn_healed
|
|
|
|
target.heal_bodypart_damage(brute_healed,burn_healed)
|
|
|
|
if(!get_feedback_message(user, target))
|
|
user_msg += get_progress(user, target, brute_healed, burn_healed)
|
|
// BUBBER EDIT ADDITION END
|
|
|
|
if(HAS_MIND_TRAIT(user, TRAIT_MORBID) && ishuman(user) && !dead_patient) //Morbid folk don't care about tending the dead as much as tending the living
|
|
var/mob/living/carbon/human/morbid_weirdo = user
|
|
morbid_weirdo.add_mood_event("morbid_tend_wounds", /datum/mood_event/morbid_tend_wounds)
|
|
|
|
display_results(
|
|
user,
|
|
target,
|
|
span_notice("[user_msg]."),
|
|
span_notice("[target_msg]."),
|
|
span_notice("[target_msg]."),
|
|
)
|
|
if(istype(surgery, /datum/surgery/healing))
|
|
var/datum/surgery/healing/the_surgery = surgery
|
|
the_surgery.antispam = TRUE
|
|
return ..()
|
|
|
|
/datum/surgery_step/heal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
|
display_results(
|
|
user,
|
|
target,
|
|
span_warning("You screwed up!"),
|
|
span_warning("[user] screws up!"),
|
|
span_notice("[user] fixes some of [target]'s wounds."),
|
|
target_detailed = TRUE,
|
|
)
|
|
var/brute_dealt = brutehealing * 0.8
|
|
var/burn_dealt = burnhealing * 0.8
|
|
brute_dealt += round((target.get_brute_loss() * (brute_multiplier * 0.5)),0.1)
|
|
burn_dealt += round((target.get_fire_loss() * (burn_multiplier * 0.5)),0.1)
|
|
target.take_bodypart_damage(brute_dealt, burn_dealt, wound_bonus=CANT_WOUND)
|
|
return FALSE
|
|
|
|
/***************************BRUTE***************************/
|
|
/datum/surgery/healing/brute
|
|
name = "Tend Wounds (Bruises)"
|
|
|
|
/datum/surgery/healing/brute/basic
|
|
name = "Tend Wounds (Bruises, Basic)"
|
|
replaced_by = /datum/surgery/healing/brute/upgraded
|
|
healing_step_type = /datum/surgery_step/heal/brute/basic
|
|
desc = "A surgical procedure that provides basic treatment for a patient's brute traumas. Heals slightly more when the patient is severely injured."
|
|
|
|
/datum/surgery/healing/brute/upgraded
|
|
name = "Tend Wounds (Bruises, Adv.)"
|
|
replaced_by = /datum/surgery/healing/brute/upgraded/femto
|
|
requires_tech = TRUE
|
|
healing_step_type = /datum/surgery_step/heal/brute/upgraded
|
|
desc = "A surgical procedure that provides advanced treatment for a patient's brute traumas. Heals more when the patient is severely injured."
|
|
|
|
/datum/surgery/healing/brute/upgraded/femto
|
|
name = "Tend Wounds (Bruises, Exp.)"
|
|
replaced_by = /datum/surgery/healing/combo/upgraded/femto
|
|
requires_tech = TRUE
|
|
healing_step_type = /datum/surgery_step/heal/brute/upgraded/femto
|
|
desc = "A surgical procedure that provides experimental treatment for a patient's brute traumas. Heals considerably more when the patient is severely injured."
|
|
|
|
/********************BRUTE STEPS********************/
|
|
/datum/surgery_step/heal/brute/get_progress(mob/user, mob/living/carbon/target, brute_healed, burn_healed)
|
|
if(!brute_healed)
|
|
return
|
|
|
|
var/estimated_remaining_steps = target.get_brute_loss() / brute_healed
|
|
var/progress_text
|
|
|
|
if(locate(/obj/item/healthanalyzer) in user.held_items)
|
|
progress_text = ". Remaining brute: <font color='#ff3333'>[target.get_brute_loss()]</font>"
|
|
else
|
|
switch(estimated_remaining_steps)
|
|
if(-INFINITY to 1)
|
|
return
|
|
if(1 to 3)
|
|
progress_text = ", stitching up the last few scrapes"
|
|
if(3 to 6)
|
|
progress_text = ", counting down the last few bruises left to treat"
|
|
if(6 to 9)
|
|
progress_text = ", continuing to plug away at [target.p_their()] extensive rupturing"
|
|
if(9 to 12)
|
|
progress_text = ", steadying yourself for the long surgery ahead"
|
|
if(12 to 15)
|
|
progress_text = ", though [target.p_they()] still look[target.p_s()] more like ground beef than a person"
|
|
if(15 to INFINITY)
|
|
progress_text = ", though you feel like you're barely making a dent in treating [target.p_their()] pulped body"
|
|
|
|
return progress_text
|
|
|
|
/datum/surgery_step/heal/brute/basic
|
|
name = "tend bruises (hemostat)"
|
|
brutehealing = 5
|
|
brute_multiplier = 0.07
|
|
|
|
/datum/surgery_step/heal/brute/upgraded
|
|
brutehealing = 5
|
|
brute_multiplier = 0.1
|
|
|
|
/datum/surgery_step/heal/brute/upgraded/femto
|
|
brutehealing = 5
|
|
brute_multiplier = 0.2
|
|
|
|
/***************************BURN***************************/
|
|
/datum/surgery/healing/burn
|
|
name = "Tend Wounds (Burn)"
|
|
|
|
/datum/surgery/healing/burn/basic
|
|
name = "Tend Wounds (Burn, Basic)"
|
|
replaced_by = /datum/surgery/healing/burn/upgraded
|
|
healing_step_type = /datum/surgery_step/heal/burn/basic
|
|
desc = "A surgical procedure that provides basic treatment for a patient's burns. Heals slightly more when the patient is severely injured."
|
|
|
|
/datum/surgery/healing/burn/upgraded
|
|
name = "Tend Wounds (Burn, Adv.)"
|
|
replaced_by = /datum/surgery/healing/burn/upgraded/femto
|
|
requires_tech = TRUE
|
|
healing_step_type = /datum/surgery_step/heal/burn/upgraded
|
|
desc = "A surgical procedure that provides advanced treatment for a patient's burns. Heals more when the patient is severely injured."
|
|
|
|
/datum/surgery/healing/burn/upgraded/femto
|
|
name = "Tend Wounds (Burn, Exp.)"
|
|
replaced_by = /datum/surgery/healing/combo/upgraded/femto
|
|
requires_tech = TRUE
|
|
healing_step_type = /datum/surgery_step/heal/burn/upgraded/femto
|
|
desc = "A surgical procedure that provides experimental treatment for a patient's burns. Heals considerably more when the patient is severely injured."
|
|
|
|
/********************BURN STEPS********************/
|
|
/datum/surgery_step/heal/burn/get_progress(mob/user, mob/living/carbon/target, brute_healed, burn_healed)
|
|
if(!burn_healed)
|
|
return
|
|
var/estimated_remaining_steps = target.get_fire_loss() / burn_healed
|
|
var/progress_text
|
|
|
|
if(locate(/obj/item/healthanalyzer) in user.held_items)
|
|
progress_text = ". Remaining burn: <font color='#ff9933'>[target.get_fire_loss()]</font>"
|
|
else
|
|
switch(estimated_remaining_steps)
|
|
if(-INFINITY to 1)
|
|
return
|
|
if(1 to 3)
|
|
progress_text = ", finishing up the last few singe marks"
|
|
if(3 to 6)
|
|
progress_text = ", counting down the last few blisters left to treat"
|
|
if(6 to 9)
|
|
progress_text = ", continuing to plug away at [target.p_their()] thorough roasting"
|
|
if(9 to 12)
|
|
progress_text = ", steadying yourself for the long surgery ahead"
|
|
if(12 to 15)
|
|
progress_text = ", though [target.p_they()] still look[target.p_s()] more like burnt steak than a person"
|
|
if(15 to INFINITY)
|
|
progress_text = ", though you feel like you're barely making a dent in treating [target.p_their()] charred body"
|
|
|
|
return progress_text
|
|
|
|
/datum/surgery_step/heal/burn/basic
|
|
name = "tend burn wounds (hemostat)"
|
|
burnhealing = 5
|
|
burn_multiplier = 0.07
|
|
|
|
/datum/surgery_step/heal/burn/upgraded
|
|
burnhealing = 5
|
|
burn_multiplier = 0.1
|
|
|
|
/datum/surgery_step/heal/burn/upgraded/femto
|
|
burnhealing = 5
|
|
burn_multiplier = 0.2
|
|
|
|
/***************************COMBO***************************/
|
|
/datum/surgery/healing/combo
|
|
|
|
|
|
/datum/surgery/healing/combo
|
|
name = "Tend Wounds (Mixture, Basic)"
|
|
replaced_by = /datum/surgery/healing/combo/upgraded
|
|
requires_tech = TRUE
|
|
healing_step_type = /datum/surgery_step/heal/combo
|
|
desc = "A surgical procedure that provides basic treatment for a patient's burns and brute traumas. Heals slightly more when the patient is severely injured."
|
|
|
|
/datum/surgery/healing/combo/upgraded
|
|
name = "Tend Wounds (Mixture, Adv.)"
|
|
replaced_by = /datum/surgery/healing/combo/upgraded/femto
|
|
healing_step_type = /datum/surgery_step/heal/combo/upgraded
|
|
desc = "A surgical procedure that provides advanced treatment for a patient's burns and brute traumas. Heals more when the patient is severely injured."
|
|
|
|
|
|
/datum/surgery/healing/combo/upgraded/femto //no real reason to type it like this except consistency, don't worry you're not missing anything
|
|
name = "Tend Wounds (Mixture, Exp.)"
|
|
replaced_by = null
|
|
healing_step_type = /datum/surgery_step/heal/combo/upgraded/femto
|
|
desc = "A surgical procedure that provides experimental treatment for a patient's burns and brute traumas. Heals considerably more when the patient is severely injured."
|
|
|
|
/********************COMBO STEPS********************/
|
|
/datum/surgery_step/heal/combo/get_progress(mob/user, mob/living/carbon/target, brute_healed, burn_healed)
|
|
var/estimated_remaining_steps = 0
|
|
if(brute_healed > 0)
|
|
estimated_remaining_steps = max(0, (target.get_brute_loss() / brute_healed))
|
|
if(burn_healed > 0)
|
|
estimated_remaining_steps = max(estimated_remaining_steps, (target.get_fire_loss() / burn_healed)) // whichever is higher between brute or burn steps
|
|
|
|
var/progress_text
|
|
|
|
if(locate(/obj/item/healthanalyzer) in user.held_items)
|
|
if(target.get_brute_loss())
|
|
progress_text = ". Remaining brute: <font color='#ff3333'>[target.get_brute_loss()]</font>"
|
|
if(target.get_fire_loss())
|
|
progress_text += ". Remaining burn: <font color='#ff9933'>[target.get_fire_loss()]</font>"
|
|
else
|
|
switch(estimated_remaining_steps)
|
|
if(-INFINITY to 1)
|
|
return
|
|
if(1 to 3)
|
|
progress_text = ", finishing up the last few signs of damage"
|
|
if(3 to 6)
|
|
progress_text = ", counting down the last few patches of trauma"
|
|
if(6 to 9)
|
|
progress_text = ", continuing to plug away at [target.p_their()] extensive injuries"
|
|
if(9 to 12)
|
|
progress_text = ", steadying yourself for the long surgery ahead"
|
|
if(12 to 15)
|
|
progress_text = ", though [target.p_they()] still look[target.p_s()] more like smooshed baby food than a person"
|
|
if(15 to INFINITY)
|
|
progress_text = ", though you feel like you're barely making a dent in treating [target.p_their()] broken body"
|
|
|
|
return progress_text
|
|
|
|
/datum/surgery_step/heal/combo
|
|
name = "tend physical wounds (hemostat)"
|
|
brutehealing = 3
|
|
burnhealing = 3
|
|
brute_multiplier = 0.07
|
|
burn_multiplier = 0.07
|
|
time = 1 SECONDS
|
|
|
|
/datum/surgery_step/heal/combo/upgraded
|
|
brutehealing = 3
|
|
burnhealing = 3
|
|
brute_multiplier = 0.1
|
|
burn_multiplier = 0.1
|
|
|
|
/datum/surgery_step/heal/combo/upgraded/femto
|
|
brutehealing = 1
|
|
burnhealing = 1
|
|
brute_multiplier = 0.4
|
|
burn_multiplier = 0.4
|
|
|
|
/datum/surgery_step/heal/combo/upgraded/femto/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
|
display_results(
|
|
user,
|
|
target,
|
|
span_warning("You screwed up!"),
|
|
span_warning("[user] screws up!"),
|
|
span_notice("[user] fixes some of [target]'s wounds."),
|
|
target_detailed = TRUE,
|
|
)
|
|
target.take_bodypart_damage(5,5)
|