From dcddd99d5dad3afc217a0e2e823d5e07947d9fb8 Mon Sep 17 00:00:00 2001 From: Tk420634 Date: Wed, 15 Jan 2025 23:10:31 -0600 Subject: [PATCH] Tend to Heal Overhaul --- AAADevTool/AAA_DEVELOPMENT_CONFIG.json | 2 +- code/game/objects/hand_items.dm | 41 ++- code/game/objects/items/stacks/medical.dm | 349 ++++++++++++------- code/modules/surgery/bodyparts/_bodyparts.dm | 2 + icons/mob/screen_gen.dmi | Bin 131484 -> 131496 bytes 5 files changed, 269 insertions(+), 125 deletions(-) diff --git a/AAADevTool/AAA_DEVELOPMENT_CONFIG.json b/AAADevTool/AAA_DEVELOPMENT_CONFIG.json index 316412f2b18..d02253af778 100644 --- a/AAADevTool/AAA_DEVELOPMENT_CONFIG.json +++ b/AAADevTool/AAA_DEVELOPMENT_CONFIG.json @@ -1,3 +1,3 @@ { - "sanic speed" : false + "sanic speed" : true } diff --git a/code/game/objects/hand_items.dm b/code/game/objects/hand_items.dm index bf86e358704..60882d4f784 100644 --- a/code/game/objects/hand_items.dm +++ b/code/game/objects/hand_items.dm @@ -50,7 +50,46 @@ action_verb_s = "tends" action_verb_ing = "tending" can_taste = FALSE - + +/obj/item/hand_item/tactile/tender/Initialize(mapload, new_amount, merge) + . = ..() + START_PROCESSING(SSfastprocess, src) + +/obj/item/hand_item/tactile/tender/Destroy() + STOP_PROCESSING(SSfastprocess, src) + . = ..() + +/obj/item/hand_item/tactile/tender/process() + var/mob/living/holder = loc + if(!istype(holder)) + return + var/nut = "[round((max(holder.nutrition - NUTRITION_LEVEL_STARVING, 0)), 5)]" + var/res = "[round(holder.heal_reservoir)]" + switch(holder.nutrition) + if(-INFINITY to NUTRITION_LEVEL_STARVING) + nut = span_alert(nut) + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_FED) + if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) + nut = span_notice(nut) + if(NUTRITION_LEVEL_WELL_FED to (NUTRITION_LEVEL_FAT * 2)) + nut = span_green(nut) + if((NUTRITION_LEVEL_FAT * 2) to INFINITY) + nut = span_green(nut) + nut = "[nut]" + nut = "🍖[nut]" + switch(holder.heal_reservoir) + if(-INFINITY to 2) + res = span_alert(res) + if(2 to 5) + if(5 to 15) + res = span_green(res) + if(15 to INFINITY) + res = span_green(res) + res = "[res]" + res = "💧[res]" + maptext = "[nut]\n[res]" + maptext_width = 64 + /obj/item/hand_item/tactile/toucher/horny //being repurposed as a way to 'feel' the world around the player. Specifically other players though, lets be real. grope = /datum/grope_kiss_MERP diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 240e681ce95..c12b37cfab5 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -1,17 +1,30 @@ #define BODYPART_MISSING "LIMB GONE" #define BODYPART_INORGANIC "LIMB BAD" #define CARBON_ISNT "NOT CARBON" +#define NOTHING_TO_HEAL "NOTHING_TO_HEAL" #define UNABLE_TO_HEAL 0 #define BODYPART_FINE 0 -#define DO_HEAL_DAMAGE (1<<1) -#define DO_UNBLEED_WOUND (1<<2) -#define DO_UNBURN_WOUND (1<<3) -#define DO_APPLY_BANDAGE (1<<4) -#define DO_APPLY_SUTURE (1<<5) -#define DO_HURT_DAMAGE (1<<6) // only works with sutures for now +#define DO_HEAL_BURN (1<<1) +#define DO_HEAL_BRUTE (1<<2) +#define DO_UNBLEED_WOUND (1<<3) +#define DO_UNBURN_WOUND (1<<4) +#define DO_APPLY_BANDAGE (1<<5) +#define DO_APPLY_SUTURE (1<<6) +#define DO_HURT_DAMAGE (1<<7) // only works with sutures for now #define USER_HAS_THE_SKILLS 1 #define VICTIM_HAS_THE_SKILLS 2 #define NO_SKILLS_REQUIRED 3 +#define TEND_BRUTE_BASE 5 +#define TEND_BURN_BASE 5 +#define TEND_BLEED_BASE 1 +#define TEND_DELAY_SELF (5 SECONDS) +#define TEND_DELAY_OTHER (5 SECONDS) + +#define OP_TARGET_PART "OP_TARGET_PART" +#define OP_VALID_ACTIONS "OP_VALID_ACTIONS" +#define OP_ERROR "OP_ERROR" +#define OP_NUT_COST "OP_NUT_COST" +#define TOO_HUNGRY "TOO_HUNGY" /obj/item/stack/medical name = "medical pack" @@ -66,6 +79,8 @@ var/sanitization /// How much we add to flesh_healing for burn wounds on application var/flesh_regeneration + /// How much does it close wounds? + var/wound_closing /// Can this heal critters? var/can_heal_critters = TRUE /// How long this bandage should last on someone before falling apart @@ -122,32 +137,37 @@ if(!user.can_inject(C, TRUE)) user.show_message(span_alert("You can't get through [C]'s outer bits!")) return FALSE - - var/list/output_list = pick_a_bodypart(C, user) - if(!islist(output_list)) - to_chat(user, span_phobia("Uh oh! [src] didnt return a list! This is a bug, probably! Report this pls~ =3")) - return FALSE - if(!istype(output_list["bodypart"], /obj/item/bodypart)) - if(output_list["bodypart"] == UNABLE_TO_HEAL) - to_chat(user, span_warning("[C] wouldn't really benefit from \the [src]!")) - return FALSE - else - to_chat(user, span_phobia("Uh oh! [src] somehow returned something that wasnt a bodypart! This is a bug, probably! Report this pls~ =3")) - return FALSE - if(needs_reservoir && user && user.heal_reservoir < 1) - to_chat(user, span_warning("[too_dry]")) + var/is_me = C == user + + var/list/operations = list() + operations[OP_TARGET_PART] = UNABLE_TO_HEAL + operations[OP_VALID_ACTIONS] = UNABLE_TO_HEAL + operations[OP_ERROR] = NOTHING_TO_HEAL + pick_a_bodypart(C, user, operations) + if(!istype(operations[OP_TARGET_PART], /obj/item/bodypart)) + to_chat(user, span_warning("[C] wouldn't really benefit from \the [src]!")) return FALSE + if(needs_reservoir) + handle_tender(user, operations) + switch(operations[OP_ERROR]) + if(TOO_HUNGRY) + if(is_me) + to_chat(user, span_warning("You're far too hungry to keep on tending to your injuries! Try having a snack!")) + else + to_chat(user, span_warning("You're far too hungry to keep on tending to [C]'s' injuries! Try having a snack!")) + return FALSE + if(just_check) return TRUE - var/obj/item/bodypart/affected_bodypart = output_list["bodypart"] - var/heal_operations = output_list["operations"] + var/obj/item/bodypart/affected_bodypart = operations[OP_TARGET_PART] + var/heal_operations = operations[OP_VALID_ACTIONS] do_medical_message(user, C, affected_bodypart, "start") is_healing = TRUE var/covering_output = null //var/is_skilled = 1 if(start_sound) playsound(get_turf(user), start_sound, 50, 1, SOUND_DISTANCE(4)) - if(istype(src, /obj/item/stack/medical/bruise_pack/lick/)) + if(istype(src, /obj/item/stack/medical/bruise_pack/lick)) if(!do_after(user, get_delay_time(user, C, 1), TRUE, C, required_mobility_flags = NONE, allow_movement = TRUE,)) to_chat(user, span_warning("You were interrupted!")) is_healing = FALSE @@ -159,25 +179,33 @@ is_healing = FALSE /// now we start doing 'healy' things! if(needs_reservoir) - user.heal_reservoir -= 1 + user.adjust_nutrition(-operations[OP_NUT_COST]) if(heal_operations & DO_HURT_DAMAGE) // Needle pierce flesh, ow ow ow if(affected_bodypart.receive_damage(hurt_brute * 1, sharpness = SHARP_NONE, wound_bonus = CANT_WOUND, damage_coverings = FALSE)) // as funny as it is to wound people with a suture, its buggy as fuck and breaks everything if(prob(50)) C.emote("scream") // a C.update_damage_overlays() - if(heal_operations & DO_HEAL_DAMAGE) - if(affected_bodypart.heal_damage(heal_brute, heal_burn, (heal_brute + heal_burn), updating_health = TRUE)) + if(heal_operations & DO_HEAL_BURN) + if(affected_bodypart.heal_damage(0, heal_burn, (heal_brute + heal_burn), updating_health = TRUE)) C.update_damage_overlays() - /* if(heal_operations & DO_UNBLEED_WOUND) - for(var/datum/wound/wounds_to_unbleed in affected_bodypart.wounds) - if(wounds_to_unbleed.blood_flow) - wounds_to_unbleed.treat_bleed(src, user, (user == C), is_skilled ? 1 : unskilled_effectiveness_mult) - break */ - if(heal_operations & DO_UNBURN_WOUND) - for(var/datum/wound/burn/wounds_to_unburn in affected_bodypart.wounds) - if(wounds_to_unburn.flesh_damage || wounds_to_unburn.infestation) - wounds_to_unburn.treat_burn(src, user, (user == C)) - break + if(heal_operations & DO_HEAL_BRUTE) + if(affected_bodypart.heal_damage(heal_brute, 0, (heal_brute + heal_burn), updating_health = TRUE)) + C.update_damage_overlays() + if(heal_operations & DO_UNBLEED_WOUND) + affected_bodypart.heal_damage(bleed = wound_closing) + var/still_hazbleed = FALSE + for(var/datum/wound/bleed/bleedus in affected_bodypart.wounds) + still_hazbleed = TRUE + if(still_hazbleed) + to_chat(C, span_notice("The bleeding wounds on your [affected_bodypart] feel a bit better.")) + else + to_chat(C, span_green("You've stopped the bleeding on your [affected_bodypart]!")) + + // if(heal_operations & DO_UNBURN_WOUND) + // for(var/datum/wound/burn/wounds_to_unburn in affected_bodypart.wounds) + // if(wounds_to_unburn.flesh_damage || wounds_to_unburn.infestation) + // wounds_to_unburn.treat_burn(src, user, (user == C)) + // break if(heal_operations & DO_APPLY_BANDAGE) covering_output = affected_bodypart.apply_gauze(src, 1) if(heal_operations & DO_APPLY_SUTURE) @@ -189,70 +217,80 @@ /// Returns a bodypart and a bitfield in a list with the first valid bodypart we can work on /// Returns just a number (FALSE) if nothing is found -/obj/item/stack/medical/proc/pick_a_bodypart(mob/living/carbon/C, mob/user) - var/obj/item/bodypart/first_choice = C.get_bodypart(check_zone(user.zone_selected)) - var/do_these_things = check_bodypart(user, C, first_choice, TRUE) - var/list/output_heal_instructions = list("bodypart" = UNABLE_TO_HEAL, "operations" = UNABLE_TO_HEAL) - // shouldnt happen, but just in case - if(do_these_things == CARBON_ISNT) - to_chat(user, span_warning("That can't be healed with this!")) - return output_heal_instructions - - // limb is missing, output a message and move on - if(do_these_things == BODYPART_MISSING) - to_chat(user, span_warning("[C] doesn't have \a [parse_zone(user.zone_selected)]! Let's try another part...")) - - // limb is missing, output a message and move on - if(do_these_things == BODYPART_INORGANIC) - to_chat(user, span_warning("[C]'s [parse_zone(user.zone_selected)] is robotic! Let's try another part...")) - - // If our operations are a number, and that number corresponds to operations to do, good! output what we're working on and what to do - if(isnum(do_these_things) && do_these_things > BODYPART_FINE) - output_heal_instructions = list("bodypart" = first_choice, "operations" = do_these_things) - return output_heal_instructions - - // Part wasn't there, or needed no healing. Lets find one that does need healing! - var/obj/item/bodypart/affecting - for(var/limb_slot_to_check in GLOB.main_body_parts) - if(limb_slot_to_check == user.zone_selected) - continue // We already checked this, dont check again - affecting = C.get_bodypart(check_zone(limb_slot_to_check)) - do_these_things = check_bodypart(user, C, affecting) - if(isnum(do_these_things) && do_these_things > BODYPART_FINE) - return output_heal_instructions = list("bodypart" = affecting, "operations" = do_these_things) - return output_heal_instructions +/obj/item/stack/medical/proc/pick_a_bodypart(mob/living/carbon/C, mob/user, list/operations = list()) + if(!iscarbon(C)) + operations[OP_ERROR] = CARBON_ISNT + return + var/is_me = C == user + var/list/parts2check = list() + parts2check += check_zone(user.zone_selected) + parts2check |= GLOB.main_body_parts + var/selected = TRUE + for(var/limb_slot_to_check in parts2check) + var/obj/item/bodypart/affecting = C.get_bodypart(check_zone(limb_slot_to_check)) + check_bodypart(user, C, affecting, selected, operations) + if(operations[OP_ERROR]) + if(selected) + switch(operations[OP_ERROR]) + if(BODYPART_MISSING) + if(is_me) + to_chat(user, span_warning("You don't have \a [parse_zone(user.zone_selected)]! Let's try another part...")) + else + to_chat(user, span_warning("[C] doesn't have \a [parse_zone(user.zone_selected)]! Let's try another part...")) + if(BODYPART_INORGANIC) + if(is_me) + to_chat(user, span_warning("Your [parse_zone(user.zone_selected)] is robotic! Let's try another part...")) + else + to_chat(user, span_warning("[C]'s [parse_zone(user.zone_selected)] is robotic! Let's try another part...")) + if(operations[OP_VALID_ACTIONS] > BODYPART_FINE) + operations[OP_TARGET_PART] = affecting + return operations + operations[OP_ERROR] = NOTHING_TO_HEAL /// Checks the limb for things we can do to it /// Returns a string if the limb is certainly not suitable for healing /// Returns a bitfield if the limb can be healed /// Returns 0 if the limb just doesnt need healing -/obj/item/stack/medical/proc/check_bodypart(mob/living/carbon/user, mob/living/carbon/C, obj/item/bodypart/target_bodypart, output_message = FALSE) +/obj/item/stack/medical/proc/check_bodypart( + mob/living/carbon/user, + mob/living/carbon/C, + obj/item/bodypart/target_bodypart, + output_message = FALSE, + list/operations = list() + ) + if(!islist(operations)) + return // cant do much here if(!iscarbon(C)) - return output_message ? CARBON_ISNT : UNABLE_TO_HEAL + operations[OP_ERROR] = CARBON_ISNT + return if(!target_bodypart || !istype(target_bodypart, /obj/item/bodypart)) - return output_message ? BODYPART_MISSING : UNABLE_TO_HEAL + operations[OP_ERROR] = BODYPART_MISSING + return if(target_bodypart.status != BODYPART_ORGANIC) - return output_message ? BODYPART_INORGANIC : UNABLE_TO_HEAL + operations[OP_ERROR] = BODYPART_INORGANIC + return /// Okay we can reasonably assume this limb is okay to try and treat - . = BODYPART_FINE - if((heal_brute && target_bodypart.brute_dam) || (heal_burn && target_bodypart.burn_dam)) - . |= DO_HEAL_DAMAGE + operations[OP_VALID_ACTIONS] = BODYPART_FINE + if(heal_brute && target_bodypart.brute_dam) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_HEAL_BRUTE) + if(heal_burn && target_bodypart.burn_dam) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_HEAL_BURN) + if(wound_closing) + for(var/datum/wound/bleed/bleedus in target_bodypart.wounds) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_UNBLEED_WOUND) + break if(is_bandage) if(target_bodypart.is_damaged() && target_bodypart.apply_gauze(src, 1, TRUE)) // always apply the stuff if they dont have it - ENABLE_BITFIELD(., DO_APPLY_BANDAGE) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_APPLY_BANDAGE) /* else if(target_bodypart.bleed_dam || target_bodypart.burn_dam || target_bodypart.burn_dam) . |= DO_APPLY_BANDAGE */ if(is_suture) if(target_bodypart.is_damaged() && target_bodypart.apply_suture(src, 1, TRUE)) // always apply the stuff if they dont have it - ENABLE_BITFIELD(., DO_APPLY_SUTURE) - if(CHECK_BITFIELD(., DO_APPLY_SUTURE) && hurt_brute) - ENABLE_BITFIELD(., DO_HURT_DAMAGE) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_APPLY_SUTURE) + if(CHECK_BITFIELD(operations[OP_VALID_ACTIONS], DO_APPLY_SUTURE) && hurt_brute) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_HURT_DAMAGE) /* else if(target_bodypart.bleed_dam || target_bodypart.burn_dam || target_bodypart.burn_dam) . |= DO_APPLY_SUTURE */ - for(var/datum/wound/burn/burndies in target_bodypart.wounds) - if(sanitization || flesh_regeneration) - if(burndies.flesh_damage || burndies.infestation) - ENABLE_BITFIELD(., DO_UNBURN_WOUND) /// returns how long it should take to use this thing /obj/item/stack/medical/proc/get_delay_time(mob/user, mob/target, is_skilled = TRUE) @@ -274,23 +312,23 @@ user.visible_message( span_warning("[user] begins applying \a [src] to [target]'s [target_part]..."), span_warning("You begin applying \a [src] to [user == target ? "your" : "[target]'s"] [target_part]...")) -/* if(is_skilled && is_skilled != NO_SKILLS_REQUIRED) - switch(needed_trait) - if(TRAIT_SURGERY_LOW) - if(is_skilled == USER_HAS_THE_SKILLS) - user.show_message(span_green("Your first aid training helps you breeze through this!")) - else - user.show_message(span_green("[target]'s first aid training steadies your hand and helps you work!")) - if(TRAIT_SURGERY_MID) - if(is_skilled == USER_HAS_THE_SKILLS) - user.show_message(span_green("Your medical training makes this easy as could be!")) - else - user.show_message(span_green("[target]'s medical training inspires you to steady your hand!")) - if(TRAIT_SURGERY_HIGH) - if(is_skilled == USER_HAS_THE_SKILLS) - user.show_message(span_green("It's an advanced procedure, but well within your skillset!")) - else - user.show_message(span_green("[target] is a well versed surgeon, and that fact steadies your hand!")) */ + // if(is_skilled && is_skilled != NO_SKILLS_REQUIRED) + // switch(needed_trait) + // if(TRAIT_SURGERY_LOW) + // if(is_skilled == USER_HAS_THE_SKILLS) + // user.show_message(span_green("Your first aid training helps you breeze through this!")) + // else + // user.show_message(span_green("[target]'s first aid training steadies your hand and helps you work!")) + // if(TRAIT_SURGERY_MID) + // if(is_skilled == USER_HAS_THE_SKILLS) + // user.show_message(span_green("Your medical training makes this easy as could be!")) + // else + // user.show_message(span_green("[target]'s medical training inspires you to steady your hand!")) + // if(TRAIT_SURGERY_HIGH) + // if(is_skilled == USER_HAS_THE_SKILLS) + // user.show_message(span_green("It's an advanced procedure, but well within your skillset!")) + // else + // user.show_message(span_green("[target] is a well versed surgeon, and that fact steadies your hand!")) if("end") if(isnull(bandage_code)) @@ -379,34 +417,99 @@ /// Returns if the user is skilled enough to use this thing effectively (unused, currently) /obj/item/stack/medical/proc/is_skilled_enough(mob/user, mob/target) return NO_SKILLS_REQUIRED -/* if(!needed_trait) - return NO_SKILLS_REQUIRED - if(HAS_TRAIT(user, needed_trait)) - return USER_HAS_THE_SKILLS - if(HAS_TRAIT(target, needed_trait)) // doc's walking you through it - return VICTIM_HAS_THE_SKILLS - - switch(needed_trait) - if(TRAIT_SURGERY_LOW) - if(HAS_TRAIT(user, TRAIT_SURGERY_LOW) || HAS_TRAIT(user, TRAIT_SURGERY_MID) || HAS_TRAIT(user, TRAIT_SURGERY_HIGH)) - return USER_HAS_THE_SKILLS - if(HAS_TRAIT(target, TRAIT_SURGERY_LOW) || HAS_TRAIT(target, TRAIT_SURGERY_MID)|| HAS_TRAIT(target, TRAIT_SURGERY_HIGH)) - return VICTIM_HAS_THE_SKILLS - if(TRAIT_SURGERY_MID) - if(HAS_TRAIT(user, TRAIT_SURGERY_MID) || HAS_TRAIT(user, TRAIT_SURGERY_HIGH)) - return USER_HAS_THE_SKILLS - if(HAS_TRAIT(target, TRAIT_SURGERY_MID)|| HAS_TRAIT(target, TRAIT_SURGERY_HIGH)) - return VICTIM_HAS_THE_SKILLS - if(TRAIT_SURGERY_HIGH) - if(HAS_TRAIT(user, TRAIT_SURGERY_HIGH)) - return USER_HAS_THE_SKILLS - if(HAS_TRAIT(target, TRAIT_SURGERY_HIGH)) - return VICTIM_HAS_THE_SKILLS */ + // if(!needed_trait) + // return NO_SKILLS_REQUIRED + // if(HAS_TRAIT(user, needed_trait)) + // return USER_HAS_THE_SKILLS + // if(HAS_TRAIT(target, needed_trait)) // doc's walking you through it + // return VICTIM_HAS_THE_SKILLS + + // switch(needed_trait) + // if(TRAIT_SURGERY_LOW) + // if(HAS_TRAIT(user, TRAIT_SURGERY_LOW) || HAS_TRAIT(user, TRAIT_SURGERY_MID) || HAS_TRAIT(user, TRAIT_SURGERY_HIGH)) + // return USER_HAS_THE_SKILLS + // if(HAS_TRAIT(target, TRAIT_SURGERY_LOW) || HAS_TRAIT(target, TRAIT_SURGERY_MID)|| HAS_TRAIT(target, TRAIT_SURGERY_HIGH)) + // return VICTIM_HAS_THE_SKILLS + // if(TRAIT_SURGERY_MID) + // if(HAS_TRAIT(user, TRAIT_SURGERY_MID) || HAS_TRAIT(user, TRAIT_SURGERY_HIGH)) + // return USER_HAS_THE_SKILLS + // if(HAS_TRAIT(target, TRAIT_SURGERY_MID)|| HAS_TRAIT(target, TRAIT_SURGERY_HIGH)) + // return VICTIM_HAS_THE_SKILLS + // if(TRAIT_SURGERY_HIGH) + // if(HAS_TRAIT(user, TRAIT_SURGERY_HIGH)) + // return USER_HAS_THE_SKILLS + // if(HAS_TRAIT(target, TRAIT_SURGERY_HIGH)) + // return VICTIM_HAS_THE_SKILLS /obj/item/stack/medical/get_belt_overlay() return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "pouch") +/obj/item/stack/medical/proc/handle_tender(mob/living/carbon/user, list/operations = list()) + if(!iscarbon(user)) + operations[OP_ERROR] = CARBON_ISNT + return + var/obj/item/bodypart/BP = operations[OP_TARGET_PART] + self_delay = TEND_DELAY_SELF + other_delay = TEND_DELAY_OTHER + var/healmult = 1 + var/nut_per_dmg = 5 + switch(user.nutrition) + if(-INFINITY to NUTRITION_LEVEL_STARVING) + operations[OP_ERROR] = TOO_HUNGRY + return + if(NUTRITION_LEVEL_STARVING to NUTRITION_LEVEL_FED) + healmult = 1 + if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) + healmult = 1.5 + if(NUTRITION_LEVEL_WELL_FED to NUTRITION_LEVEL_FULL) + healmult = 2 + if(NUTRITION_LEVEL_FULL to NUTRITION_LEVEL_FAT) + healmult = 2.5 + if(NUTRITION_LEVEL_FAT to (NUTRITION_LEVEL_FAT * 2)) + healmult = 3 + if((NUTRITION_LEVEL_FAT * 2) to INFINITY) + healmult = 4 + switch(user.heal_reservoir) + if(-INFINITY to 1) + self_delay *= 1 + other_delay *= 1 + if(1 to 5) + self_delay *= 0.75 + other_delay *= 0.75 + nut_per_dmg *= 0.8 + if(5 to 10) + self_delay *= 0.5 + other_delay *= 0.5 + nut_per_dmg *= 0.8 + if(10 to 15) + self_delay *= 0.25 + other_delay *= 0.25 + nut_per_dmg *= 0.8 + if(15 to 20) + self_delay *= 0.2 + other_delay *= 0.2 + nut_per_dmg *= 0.5 + if(20 to INFINITY) + self_delay *= 0.1 + other_delay *= 0.1 + nut_per_dmg *= 0.5 + heal_brute = min(BP.brute_dam, (TEND_BRUTE_BASE * healmult)) + heal_burn = min(BP.burn_dam, (TEND_BURN_BASE * healmult)) + var/nut_cost = heal_brute + heal_burn + nut_cost *= nut_per_dmg + if(!heal_brute && !heal_burn) // full health! but bleeding maybe? + var/obj/item/bodypart/gluck = operations[OP_TARGET_PART] + for(var/datum/wound/bleed/bleedus in gluck.wounds) + ENABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_UNBLEED_WOUND) + var/nut_per_closure = (TEND_BLEED_BASE * healmult) + wound_closing = min(BP.bleed_dam, nut_per_closure) + nut_cost += wound_closing * nut_per_closure + break + else + DISABLE_BITFIELD(operations[OP_VALID_ACTIONS], DO_UNBLEED_WOUND) + operations[OP_NUT_COST] = nut_cost + ///Override this proc for special post heal effects. /obj/item/stack/medical/proc/post_heal_effects(amount_healed, mob/living/carbon/healed_mob, mob/user) return diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index c4d06608a4c..1f83359e6c2 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -1022,6 +1022,8 @@ return TRUE if(bleed_dam) return TRUE + if(LAZYLEN(wounds)) + return TRUE /** * update_wounds() is called whenever a wound is gained or lost on this bodypart, as well as if there's a change of some kind on a bone wound possibly changing disabled status diff --git a/icons/mob/screen_gen.dmi b/icons/mob/screen_gen.dmi index 2fd373ed59f670d35b3f3df379f87f0d4bc8c654..0f3bb5caa76144f296a89f289ef9ec9ba0449714 100644 GIT binary patch delta 21686 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 Q5g7EdKv|nmjNGFC2liLr5dZ)H delta 21629 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