diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 47528bb4970..d5b33225936 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -143,7 +143,7 @@ if(1.25 to 2.75) bandage_condition = "badly worn" if(2.75 to 4) - bandage_condition = "slightly pus-stained" + bandage_condition = "slightly stained" if(4 to INFINITY) bandage_condition = "clean" @@ -155,7 +155,7 @@ if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL) condition += ", with growing clouds of infection." if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC) - condition += ", with streaks of rotten, pulsating infection!" + condition += ", with streaks of rotten infection!" if(WOUND_INFECTION_SEPTIC to INFINITY) return "[victim.p_their(TRUE)] [limb.name] is a mess of charred skin and infected rot!" else @@ -185,7 +185,7 @@ if(WOUND_INFECTION_SEPTIC to INFINITY) . += "Infection Level: LOSS IMMINENT\n" if(infestation > sanitization) - . += "\tSurgical debridement, antiobiotics/sterilizers, or regenerative mesh will rid infection. Paramedic UV penlights are also effective.\n" + . += "\tSurgical debridement, antibiotics/sterilizers, or regenerative mesh will rid infection. Paramedic UV penlights are also effective.\n" if(flesh_damage > 0) . += "Flesh damage detected: Application of ointment, regenerative mesh, Synthflesh, or ingestion of \"Miner's Salve\" will repair damaged flesh. Good nutrition, rest, and keeping the wound clean can also slowly repair flesh.\n" diff --git a/code/modules/surgery/burn_dressing.dm b/code/modules/surgery/burn_dressing.dm index 8856b5b0e9c..3bef6657b58 100644 --- a/code/modules/surgery/burn_dressing.dm +++ b/code/modules/surgery/burn_dressing.dm @@ -3,7 +3,7 @@ ///// Debride burnt flesh /datum/surgery/debride - name = "Debride infected flesh" + name = "Debride burnt flesh" steps = list(/datum/surgery_step/debride, /datum/surgery_step/dress) target_mobtypes = list(/mob/living/carbon/human) possible_locs = list(BODY_ZONE_R_ARM,BODY_ZONE_L_ARM,BODY_ZONE_R_LEG,BODY_ZONE_L_LEG,BODY_ZONE_CHEST,BODY_ZONE_HEAD) @@ -26,6 +26,29 @@ implements = list(TOOL_HEMOSTAT = 100, TOOL_SCALPEL = 85, TOOL_SAW = 60, TOOL_WIRECUTTER = 40) time = 30 repeatable = TRUE + /// How much sanitization is added per step + var/sanitization_added = 0.5 + /// How much infestation is removed per step (positive number) + var/infestation_removed = 0.5 + +/// To give the surgeon a heads up how much work they have ahead of them +/datum/surgery_step/debride/proc/get_progress(mob/user, mob/living/carbon/target, datum/wound/burn/burn_wound) + if(!burn_wound?.infestation || !infestation_removed) + return + var/estimated_remaining_steps = burn_wound.infestation / infestation_removed + var/progress_text + + switch(estimated_remaining_steps) + if(-INFINITY to 1) + return + if(1 to 2) + progress_text = ", preparing to remove the last remaining bits of infection" + if(2 to 4) + progress_text = ", steadily narrowing the remaining bits of infection" + if(5 to INFINITY) + progress_text = ", though there's still quite a lot to excise" + + return progress_text /datum/surgery_step/debride/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) if(surgery.operated_wound) @@ -44,13 +67,14 @@ /datum/surgery_step/debride/success(mob/living/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) var/datum/wound/burn/burn_wound = surgery.operated_wound if(burn_wound) - display_results(user, target, "You successfully excise some of the infected flesh from [target]'s [parse_zone(target_zone)].", + var/progress_text = get_progress(user, target, burn_wound) + display_results(user, target, "You successfully excise some of the infected flesh from [target]'s [parse_zone(target_zone)][progress_text].", "[user] successfully excises some of the infected flesh from [target]'s [parse_zone(target_zone)] with [tool]!", "[user] successfully excises some of the infected flesh from [target]'s [parse_zone(target_zone)]!") log_combat(user, target, "excised infected flesh in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") surgery.operated_bodypart.receive_damage(brute=3, wound_bonus=CANT_WOUND) - burn_wound.infestation -= 0.5 - burn_wound.sanitization += 0.5 + burn_wound.infestation -= infestation_removed + burn_wound.sanitization += sanitization_added if(burn_wound.infestation <= 0) repeatable = FALSE else @@ -77,6 +101,11 @@ name = "bandage burns" implements = list(/obj/item/stack/medical/gauze = 100, /obj/item/stack/sticky_tape/surgical = 100) time = 40 + /// How much sanitization is added + var/sanitization_added = 3 + /// How much flesh healing is added + var/flesh_healing_added = 5 + /datum/surgery_step/dress/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/datum/wound/burn/burn_wound = surgery.operated_wound @@ -94,8 +123,8 @@ "[user] successfully wraps [target]'s [parse_zone(target_zone)] with [tool]!", "[user] successfully wraps [target]'s [parse_zone(target_zone)]!") log_combat(user, target, "dressed burns in", addition="COMBAT MODE: [uppertext(user.combat_mode)]") - burn_wound.sanitization += 3 - burn_wound.flesh_healing += 5 + burn_wound.sanitization += sanitization_added + burn_wound.flesh_healing += flesh_healing_added var/obj/item/bodypart/the_part = target.get_bodypart(target_zone) the_part.apply_gauze(tool) else diff --git a/code/modules/surgery/healing.dm b/code/modules/surgery/healing.dm index 1db00850c25..4588f428386 100644 --- a/code/modules/surgery/healing.dm +++ b/code/modules/surgery/healing.dm @@ -40,6 +40,10 @@ 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) @@ -80,6 +84,8 @@ tmsg += " as best as [user.p_they()] can while [target.p_they()] [target.p_have()] clothing on" target.heal_bodypart_damage(brute_healed,burn_healed) + umsg += get_progress(user, target, brute_healed, burn_healed) + display_results(user, target, "[umsg].", "[tmsg].", "[tmsg].") @@ -124,6 +130,34 @@ 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.getBruteLoss() / brute_healed + var/progress_text + + if(locate(/obj/item/healthanalyzer) in user.held_items) + progress_text = ". Remaining brute: [target.getBruteLoss()]" + 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" brutehealing = 5 @@ -162,6 +196,33 @@ 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.getFireLoss() / burn_healed + var/progress_text + + if(locate(/obj/item/healthanalyzer) in user.held_items) + progress_text = ". Remaining brute: [target.getFireLoss()]" + 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" burnhealing = 5 @@ -200,6 +261,39 @@ 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.getBruteLoss() / brute_healed)) + if(burn_healed > 0) + estimated_remaining_steps = max(estimated_remaining_steps, (target.getFireLoss() / burn_healed)) // whichever is higher between brute or burn steps + + var/progress_text + + if(locate(/obj/item/healthanalyzer) in user.held_items) + if(target.getBruteLoss()) + progress_text = ". Remaining brute: [target.getBruteLoss()]" + if(target.getFireLoss()) + progress_text += ". Remaining burn: [target.getFireLoss()]" + 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" brutehealing = 3