From 18af44d701e80e0696fce9ec803730ae48f63a60 Mon Sep 17 00:00:00 2001 From: TobyThorne <45202681+TobyThorne@users.noreply.github.com> Date: Mon, 18 Dec 2023 03:43:32 +0600 Subject: [PATCH 1/4] bwoink --- code/datums/surgery/steps/implant.dm | 3 +- code/game/objects/items/stacks/medical.dm | 2 + .../mob/living/carbon/human/body_build.dm | 13 +++- .../mob/living/carbon/human/examine.dm | 4 +- .../mob/living/carbon/human/human_organs.dm | 2 +- .../mob/living/carbon/human/update_icons.dm | 18 ++++++ code/modules/mob/mob.dm | 2 +- code/modules/mob/organs/external/_external.dm | 34 +++++----- .../mob/organs/external/_external_damage.dm | 7 ++- .../mob/organs/external/_external_icons.dm | 14 +++++ .../mob/organs/external/wounds/wound.dm | 58 +++++++++++------- icons/mob/human_races/bandages/mob.dmi | Bin 0 -> 1810 bytes icons/mob/human_races/bandages/mob_fat.dmi | Bin 0 -> 1871 bytes icons/mob/human_races/bandages/mob_slim.dmi | Bin 0 -> 1759 bytes .../mob/human_races/bandages/mob_slim_alt.dmi | Bin 0 -> 1740 bytes icons/mob/human_races/bandages/mob_slim_m.dmi | Bin 0 -> 1727 bytes 16 files changed, 107 insertions(+), 50 deletions(-) create mode 100644 icons/mob/human_races/bandages/mob.dmi create mode 100644 icons/mob/human_races/bandages/mob_fat.dmi create mode 100644 icons/mob/human_races/bandages/mob_slim.dmi create mode 100644 icons/mob/human_races/bandages/mob_slim_alt.dmi create mode 100644 icons/mob/human_races/bandages/mob_slim_m.dmi diff --git a/code/datums/surgery/steps/implant.dm b/code/datums/surgery/steps/implant.dm index e8ae13e869e..31d202d125c 100644 --- a/code/datums/surgery/steps/implant.dm +++ b/code/datums/surgery/steps/implant.dm @@ -208,7 +208,8 @@ loot = parent_organ.implants else for(var/datum/wound/W in parent_organ.wounds) - loot |= W.embedded_objects + if(LAZYLEN(W.embedded_objects)) + loot |= W.embedded_objects find_prob += 50 if(!length(loot)) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 1debc7ec351..fdc12e18314 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -157,6 +157,7 @@ else to_chat(user, SPAN("warning", "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")) use(used) + H.update_bandages(1) /obj/item/stack/medical/ointment name = "ointment" @@ -276,6 +277,7 @@ else to_chat(user, SPAN("warning", "\The [src] is used up, but there are more wounds to treat on \the [affecting.name].")) use(used) + H.update_bandages(1) /obj/item/stack/medical/advanced/ointment name = "burn gel" diff --git a/code/modules/mob/living/carbon/human/body_build.dm b/code/modules/mob/living/carbon/human/body_build.dm index 2955c9e747e..baa885be3f9 100644 --- a/code/modules/mob/living/carbon/human/body_build.dm +++ b/code/modules/mob/living/carbon/human/body_build.dm @@ -28,9 +28,10 @@ var/global/datum/body_build/default_body_build = new "slot_r_hand" = 'icons/mob/onmob/items/righthand.dmi' ) - var/rig_back = 'icons/inv_slots/rig/mob.dmi' - var/blood_icon = 'icons/mob/human_races/masks/blood_human.dmi' - var/dam_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi' + var/rig_back = 'icons/inv_slots/rig/mob.dmi' + var/blood_icon = 'icons/mob/human_races/masks/blood_human.dmi' + var/dam_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi' + var/bandages_icon = 'icons/mob/human_races/bandages/mob.dmi' var/slowdown = 0 // Movement slowdown var/equipment_modifier = 0 // Positive values allow to partially ignore equipment_slowdown, negative values apply additional slowdown if any slowing-down equipment is being worn @@ -80,6 +81,7 @@ var/global/datum/body_build/default_body_build = new rig_back = 'icons/inv_slots/rig/mob_slim.dmi' blood_icon = 'icons/mob/human_races/masks/blood_human_slim.dmi' dam_mask = 'icons/mob/human_races/masks/dam_mask_human_slim.dmi' + bandages_icon = 'icons/mob/human_races/bandages/mob_slim.dmi' stomach_capacity = STOMACH_CAPACITY_LOW poise_pool = HUMAN_LOW_POISE @@ -110,6 +112,7 @@ var/global/datum/body_build/default_body_build = new ) blood_icon = 'icons/mob/human_races/masks/blood_human_slim_alt.dmi' dam_mask = 'icons/mob/human_races/masks/dam_mask_human_slim_alt.dmi' + bandages_icon = 'icons/mob/human_races/bandages/mob_slim_alt.dmi' /datum/body_build/slim/male name = "Slim" @@ -165,6 +168,7 @@ var/global/datum/body_build/default_body_build = new rig_back = 'icons/inv_slots/rig/mob_fat.dmi' blood_icon = 'icons/mob/human_races/masks/blood_human.dmi' dam_mask = 'icons/mob/human_races/masks/dam_mask_human.dmi' + bandages_icon = 'icons/mob/human_races/bandages/mob_fat.dmi' stomach_capacity = STOMACH_CAPACITY_HIGH slowdown = 0.5 @@ -249,6 +253,7 @@ var/global/datum/body_build/default_body_build = new "slot_r_hand" = 'icons/mob/onmob/items/righthand.dmi' ) rig_back = 'icons/inv_slots/rig/mob_fat.dmi' + bandages_icon = 'icons/mob/human_races/bandages/mob_fat.dmi' slowdown = 0.5 equipment_modifier = 0.5 @@ -327,6 +332,7 @@ var/global/datum/body_build/default_body_build = new ) blood_icon = 'icons/mob/human_races/masks/blood_monkey.dmi' dam_mask = 'icons/mob/human_races/masks/dam_mask_monkey.dmi' + bandages_icon = null stomach_capacity = STOMACH_CAPACITY_LOW @@ -337,5 +343,6 @@ var/global/datum/body_build/default_body_build = new genders = list(MALE, FEMALE, NEUTER) blood_icon = null // Fuck it, I ain't gonna spend all day showering if I'm an apex predator dam_mask = 'icons/mob/human_races/masks/dam_mask_xenos.dmi' + bandages_icon = null poise_pool = HUMAN_MAX_POISE diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 4e7126e10e8..20c55c09dbb 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -245,7 +245,7 @@ else if(E.is_stump()) wound_flavor_text[E.name] += "[T.He] [T.has] a stump where [T.his] [organ_descriptor] should be.\n" - if(E.wounds.len && E.parent) + if(LAZYLEN(E.wounds) && E.parent) wound_flavor_text[E.name] += "[T.He] [T.has] [E.get_wounds_desc()] on [T.his] [E.parent.name].
" else if(!is_synth && BP_IS_ROBOTIC(E) && (E.parent && !BP_IS_ROBOTIC(E.parent) && !BP_IS_ASSISTED(E.parent))) @@ -261,7 +261,7 @@ for(var/datum/wound/wound in E.wounds) var/list/embedlist = wound.embedded_objects - if(embedlist.len) + if(LAZYLEN(embedlist)) shown_objects += embedlist var/parsedembed[0] for(var/obj/embedded in embedlist) diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index f57b97713d0..33fe0d57800 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -121,7 +121,7 @@ Stun(2) //Moving makes open wounds get infected much faster - if(E.wounds.len) + if(LAZYLEN(E.wounds)) for(var/datum/wound/W in E.wounds) if(W.infection_check()) W.germ_level += 1 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index de24789ef33..f7381ed2f10 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -249,10 +249,28 @@ var/global/list/damage_icon_parts = list() standing_image.AddOverlays(DI) overlays_standing[HO_DAMAGE_LAYER] = standing_image + update_bandages(update_icons) if(update_icons) queue_icon_update() +/mob/living/carbon/human/proc/update_bandages(update_icons = TRUE) + var/bandage_icon = body_build.bandages_icon + if(!bandage_icon) + return + var/image/standing_image = overlays_standing[HO_DAMAGE_LAYER] + if(standing_image) + for(var/obj/item/organ/external/O in organs) + if(O.is_stump()) + continue + var/bandage_level = O.bandage_level() + if(bandage_level) + standing_image.AddOverlays(image(bandage_icon, "[O.icon_name][bandage_level]")) + + overlays_standing[HO_DAMAGE_LAYER] = standing_image + if(update_icons) + queue_icon_update() + //BASE MOB SPRITE /mob/living/carbon/human/proc/update_body(update_icons = TRUE) //Update all limbs and visible organs one by one diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d403795d37a..af645c9862d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -960,7 +960,7 @@ affected.implants -= selection for(var/datum/wound/wound in affected.wounds) - wound.embedded_objects -= selection + LAZYREMOVE(wound.embedded_objects, selection) H.shock_stage+=20 affected.take_external_damage((selection.w_class * 3), 0, DAM_EDGE, "Embedded object extraction") diff --git a/code/modules/mob/organs/external/_external.dm b/code/modules/mob/organs/external/_external.dm index 1633299fdf3..8474ec8c3f0 100644 --- a/code/modules/mob/organs/external/_external.dm +++ b/code/modules/mob/organs/external/_external.dm @@ -58,7 +58,7 @@ // Wound and structural data. var/wound_update_accuracy = 2 // how often wounds should be updated, a higher number means less often - var/list/wounds = list() // wound datum list. + var/list/wounds // wound datum list. var/number_wounds = 0 // number of wounds, which is NOT wounds.len! var/obj/item/organ/external/parent // Master-limb. var/list/children // Sub-limbs. @@ -133,8 +133,7 @@ if(wounds) for(var/datum/wound/wound in wounds) - wound.embedded_objects.Cut() - QDEL_NULL_LIST(wounds) + qdel(wound) if(parent?.children) parent.children -= src @@ -395,7 +394,6 @@ parent.children.Add(src) //Remove all stump wounds since limb is not missing anymore for(var/datum/wound/lost_limb/W in parent.wounds) - parent.wounds -= W qdel(W) break parent.update_damages() @@ -461,8 +459,7 @@ This function completely restores a damaged organ to perfect condition. remove_all_pain() genetic_degradation = 0 for(var/datum/wound/wound in wounds) - wound.embedded_objects.Cut() - wounds.Cut() + qdel(wound) number_wounds = 0 // handle internal organs @@ -527,7 +524,7 @@ This function completely restores a damaged organ to perfect condition. owner.remove_blood(fluid_loss) // first check whether we can widen an existing wound - if(!surgical && wounds && wounds.len > 0 && prob(max(50+(number_wounds-1)*10,90))) + if(!surgical && LAZYLEN(wounds) && prob(max(50+(number_wounds-1)*10,90))) if((type == CUT || type == BRUISE) && damage >= 5) //we need to make sure that the wound we are going to worsen is compatible with the type of damage... var/list/compatible_wounds = list() @@ -553,7 +550,7 @@ This function completely restores a damaged organ to perfect condition. var/wound_type = get_wound_type(type, damage) if(wound_type) - var/datum/wound/W = new wound_type(damage) + var/datum/wound/W = new wound_type(damage, src) //Check whether we can add the wound to an existing wound if(surgical) @@ -563,7 +560,7 @@ This function completely restores a damaged organ to perfect condition. if(other.can_merge(W)) other.merge_wound(W) return - wounds += W + LAZYADD(wounds, W) return W /**************************************************** @@ -715,13 +712,13 @@ Note that amputating the affected organ does in fact remove the infection from t if(BP_IS_ROBOTIC(src)) //Robotic limbs don't heal or get worse. for(var/datum/wound/W in wounds) //Repaired wounds disappear though if(W.damage <= 0) //and they disappear right away - wounds -= W //TODO: robot wounds for robot limbs + qdel(W) //TODO: robot wounds for robot limbs return for(var/datum/wound/W in wounds) // wounds can disappear after 10 minutes at the earliest if(W.damage <= 0 && W.created + (10 MINUTES) <= world.time) - wounds -= W + qdel(W) continue // let the GC handle the deletion of the wound @@ -736,7 +733,7 @@ Note that amputating the affected organ does in fact remove the infection from t //configurable regen speed woo, no-regen hardcore or instaheal hugbox, choose your destiny heal_amt = heal_amt * config.health.organ_regeneration_multiplier // amount of healing is spread over all the wounds - heal_amt = heal_amt / (wounds.len + 1) + heal_amt = heal_amt / (LAZYLEN(wounds) + 1) // making it look prettier on scanners heal_amt = round(heal_amt,0.1) var/dam_type = BRUTE @@ -884,7 +881,7 @@ Note that amputating the affected organ does in fact remove the infection from t var/datum/wound/lost_limb/W = new (src, disintegrate, clean) if(clean) W.parent_organ = parent_organ - parent_organ.wounds |= W + LAZYADD(parent_organ.wounds, W) parent_organ.update_damages() else var/obj/item/organ/external/stump/stump = new (victim, src) @@ -892,7 +889,8 @@ Note that amputating the affected organ does in fact remove the infection from t stump.artery_name = "mangled [artery_name]" stump.arterial_bleed_severity = arterial_bleed_severity stump.adjust_pain(max_damage) - stump.wounds |= W + W.parent_organ = stump + LAZYADD(stump.wounds, W) victim.organs |= stump stump.movement_tally = stumped_tally * damage_multiplier if(disintegrate != DROPLIMB_BURN) @@ -1208,7 +1206,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(!supplied_wound || (W in supplied_wound.embedded_objects)) // Just in case. return - supplied_wound.embedded_objects += W + LAZYADD(supplied_wound.embedded_objects, W) implants += W owner.embedded_flag = 1 owner.verbs += /mob/proc/yank_out_object @@ -1479,12 +1477,12 @@ Note that amputating the affected organ does in fact remove the infection from t return user.visible_message("[user] starts inspecting [owner]'s [name] carefully.") - if(wounds.len) + if(LAZYLEN(wounds)) to_chat(user, "You find [get_wounds_desc()]") var/list/stuff = list() for(var/datum/wound/wound in wounds) - if(wound.embedded_objects) - stuff += wound.embedded_objects + if(LAZYLEN(wound.embedded_objects)) + stuff |= wound.embedded_objects if(stuff.len) to_chat(user, "There's [english_list(stuff)] sticking out of [owner]'s [name].") else diff --git a/code/modules/mob/organs/external/_external_damage.dm b/code/modules/mob/organs/external/_external_damage.dm index 6a20c97350b..c2fb7064a91 100644 --- a/code/modules/mob/organs/external/_external_damage.dm +++ b/code/modules/mob/organs/external/_external_damage.dm @@ -37,11 +37,11 @@ obj/item/organ/external/take_general_damage(amount, silent = FALSE) if(!is_damageable(brute + burn)) spillover = brute_dam + burn_dam + brute - max_damage if(spillover > 0) - brute -= spillover + brute = max(brute - spillover, 0) else spillover = brute_dam + burn_dam + brute + burn - max_damage if(spillover > 0) - burn -= spillover + burn = max(burn - spillover, 0) if(owner && loc == owner) owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called @@ -165,6 +165,9 @@ obj/item/organ/external/take_general_damage(amount, silent = FALSE) update_damages() if(owner) owner.updatehealth() + if(status & ORGAN_BLEEDING) + owner.update_bandages() + if(update_damstate()) owner.UpdateDamageIcon() diff --git a/code/modules/mob/organs/external/_external_icons.dm b/code/modules/mob/organs/external/_external_icons.dm index 6ecc01c30b1..307fb3e2ee5 100644 --- a/code/modules/mob/organs/external/_external_icons.dm +++ b/code/modules/mob/organs/external/_external_icons.dm @@ -307,3 +307,17 @@ var/list/robot_hud_colours = list("#ffffff","#cccccc","#aaaaaa","#888888","#6666 applying.Blend(rgb(s_col[1], s_col[2], s_col[3]), s_col_blend) return applying + +/obj/item/organ/external/proc/bandage_level() + if(damage_state_text() == "00") + return 0 + if(!is_bandaged()) + return 0 + if(burn_dam + brute_dam == 0) + . = 0 + else if (burn_dam + brute_dam < (max_damage * 0.25 / 2)) + . = 1 + else if (burn_dam + brute_dam < (max_damage * 0.75 / 2)) + . = 2 + else + . = 3 diff --git a/code/modules/mob/organs/external/wounds/wound.dm b/code/modules/mob/organs/external/wounds/wound.dm index 3b106c30af3..bc6ad3de184 100644 --- a/code/modules/mob/organs/external/wounds/wound.dm +++ b/code/modules/mob/organs/external/wounds/wound.dm @@ -25,11 +25,11 @@ var/autoheal_cutoff = 15 // the maximum amount of damage that this wound can have and still autoheal // helper lists - var/tmp/list/embedded_objects = list() + var/tmp/list/embedded_objects var/tmp/list/desc_list = list() var/tmp/list/damage_list = list() -/datum/wound/New(damage) +/datum/wound/New(damage, obj/item/organ/external/organ) created = world.time @@ -46,6 +46,16 @@ bleed_timer += damage + if(istype(organ)) + parent_organ = organ + +/datum/wound/Destroy() + if(parent_organ) + LAZYREMOVE(parent_organ.wounds, src) + parent_organ = null + LAZYCLEARLIST(embedded_objects) + return ..() + // returns 1 if there's a next stage, 0 otherwise /datum/wound/proc/init_stage(initial_damage) current_stage = stages.len @@ -61,39 +71,43 @@ return src.damage / src.amount /datum/wound/proc/can_autoheal() - if(embedded_objects.len) - return 0 - return (wound_damage() <= autoheal_cutoff) ? 1 : is_treated() + if(LAZYLEN(embedded_objects)) + return FALSE + return (wound_damage() <= autoheal_cutoff) ? TRUE : is_treated() // checks whether the wound has been appropriately treated /datum/wound/proc/is_treated() - if(!embedded_objects.len) - switch(damage_type) - if(BRUISE, CUT, PIERCE) - return bandaged - if(BURN) - return salved + if(LAZYLEN(embedded_objects)) + return FALSE + switch(damage_type) + if(BRUISE, CUT, PIERCE) + return bandaged + if(BURN) + return salved // Checks whether other other can be merged into src. /datum/wound/proc/can_merge(datum/wound/other) - if (other.type != src.type) return 0 - if (other.current_stage != src.current_stage) return 0 - if (other.damage_type != src.damage_type) return 0 - if (!(other.can_autoheal()) != !(src.can_autoheal())) return 0 - if (other.is_surgical() != src.is_surgical()) return 0 - if (!(other.bandaged) != !(src.bandaged)) return 0 - if (!(other.clamped) != !(src.clamped)) return 0 - if (!(other.salved) != !(src.salved)) return 0 - if (!(other.disinfected) != !(src.disinfected)) return 0 - return 1 + if(other.type != src.type) return FALSE + if(other.current_stage != src.current_stage) return FALSE + if(other.damage_type != src.damage_type) return FALSE + if(other.bandaged != src.bandaged) return FALSE + if(other.clamped != src.clamped) return FALSE + if(other.salved != src.salved) return FALSE + if(other.disinfected != src.disinfected) return FALSE + if(other.parent_organ != parent_organ) return FALSE + if(other.can_autoheal() != src.can_autoheal()) return FALSE + if(other.is_surgical() != src.is_surgical()) return FALSE + return TRUE /datum/wound/proc/merge_wound(datum/wound/other) - src.embedded_objects |= other.embedded_objects + if(LAZYLEN(other.embedded_objects)) + LAZYDISTINCTADD(src.embedded_objects, other.embedded_objects) src.damage += other.damage src.amount += other.amount src.bleed_timer += other.bleed_timer src.germ_level = max(src.germ_level, other.germ_level) src.created = max(src.created, other.created) //take the newer created time + qdel(other) // checks if wound is considered open for external infections // untreated cuts (and bleeding bruises) and burns are possibly infectable, chance higher if wound is bigger diff --git a/icons/mob/human_races/bandages/mob.dmi b/icons/mob/human_races/bandages/mob.dmi new file mode 100644 index 0000000000000000000000000000000000000000..bab279f6c1d1b3db92911cfdba4509c986985966 GIT binary patch literal 1810 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 HM`r#D9HEp8 literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/bandages/mob_slim.dmi b/icons/mob/human_races/bandages/mob_slim.dmi new file mode 100644 index 0000000000000000000000000000000000000000..d9077e570433d67b768776d92a3ccabd4e588292 GIT binary patch literal 1759 zcmV<51|a!~P)d^00001bW%=J06^y0W&i*H-+EM7bVOxyV{&P5 zbZKvH004NLjg+wp!Y~v?=jJPd-9@ddizw2;{z3^fHi6o}P0-&riIa=(ZZB}c;k-av zeZJoML0|5@dRastR(;aP?M^jsKP8tB-9a_Z`q`!LAtsY-9yiXKX}?j;OfJQNTq-nWM#!@qHPW_Fx0X2ls}q>m61V=Ww`EgZ9CDi&NUxLA;}AY<`Aw$<0+ zQa{iSL+W~YW^{AM000GwNkl<$LfqnZ4r-D zJe08+j>HJFENlDXBFl0+j#d2G;+KE_S@G)b-j1WrH@(Vypc-y|Z?wyX-2>wMaFXq~ zIIueuxwA^48ivhw*|0kR0000000000&S3LlP^-TY@m4K2eP{i)({h|-Y6p{G|JF$M zzg^o4mu_9uz{@| z^=?I)H|}<~3wwOS@z|cx!yMg-i)cCdQ*M43x}uVC>RbHBUw?1xcs?GBIO^`j9+t0i zb3X@NnVC;jCcenT33!;PH1SgBy&X^9zxs#iSj^Dk?oQ6w^HjviPM+YWp4|R=znAMT z_F{Rw7m57C29NwtX|_sp5qFOTQBp=p}7 zeX;Xof&1(M0000000000S1*y_Y$fvnI=+A;+{LD{hE6f4ibMHZTsRVQfbczJ)p$NB>Oc^Nu}O!mZ}t$iVrO^%p&d7nR@^L00000Tu8g} z=LMC|kDLB4tZvGCcda^i+0s)Vr724qZt4s`-^;XWP+E2FbM8()O${%BXWglMAbnTo zC3Y)kC-e7~PF`aJC)eG){d%o)0*;-5I9M{#)a~Z&SDmr7*5N)ERu*A|OOk5-p zx?aF~!M$1e_g`HvFu&MESY0nr))Smy2F_a&QGGYNyxV;^#7$L?t5IDqV1LxXKA10w zVgUdE000000KmyrKJ49~h~R^74?G5Y{I9xRpng`Rx?Z5HCy1hF{|21bUH!*co9%c{ zM>xacf1y!jy@0Vlnw>6v`~N6?U=3?l-NU=S5r^g03zVws1nnC_c@u*9smFU z00000004kX=5xN_+mDtTJK8-3y8q^UhQ^3IRcQSvQ5!I05#NS#TB?5(&tyie2(6#x zs-+`RrNNw9qCVpu--!**zXjG;{i9gTz)N8L)+ARg4QC)y#ev7pfLUzp@YP9+<|=-< zvOkl!5Ch7bODI=yp&PDU{@DWn000000002s>ICxxin+G@K=Txnlc5n=rRtXlT8vY> zw)QS{2B7vI_e4W4I0IYf07OH$@Jz3t*rk&#|NBKFw=yx7S-H%efn0{&Q|HLc;G-bi z{UDa(nK>Uy(g$F!EXfA|00000@F^J>Iqcn8ad02IAk;QAAnOYpy~s3xq#-}%vCpgRp<)MfG!u%j-3Ig zUO?3on1xy%`^R%}PCh{83u0&adB<~pU;Y39000000000unp+M~h?Iv)7hE6rjZ+Kp zAt4h=F}d{uN!u6d{a0krWY)^~2Vl0jYAM8rcT6uZ18%*533ael)C(l?Q%v%^My_tI z8W!RbGAfC8>I6+iy?|=!gw9~D8e|25t`;Z{;2(jQk@K9JI4uAG002ovPDHLkV1lx& BPEG&- literal 0 HcmV?d00001 diff --git a/icons/mob/human_races/bandages/mob_slim_alt.dmi b/icons/mob/human_races/bandages/mob_slim_alt.dmi new file mode 100644 index 0000000000000000000000000000000000000000..b4d6185f5d83a3eb5fe497c3cfb3a2a83eb509e9 GIT binary patch literal 1740 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 OF Date: Mon, 18 Dec 2023 05:49:02 +0600 Subject: [PATCH 2/4] yes yes yes?? --- .../mob/living/carbon/human/human_damage.dm | 7 ++- .../mob/living/carbon/human/human_organs.dm | 10 +++- .../mob/living/carbon/human/update_icons.dm | 55 +++++++++--------- code/modules/mob/organs/external/_external.dm | 25 ++++---- .../mob/organs/external/_external_damage.dm | 13 +++-- .../mob/organs/external/wounds/wound.dm | 1 + icons/mob/human_races/bandages/mob.dmi | Bin 1810 -> 1890 bytes icons/mob/human_races/bandages/mob_fat.dmi | Bin 1871 -> 1946 bytes icons/mob/human_races/bandages/mob_slim.dmi | Bin 1759 -> 1845 bytes .../mob/human_races/bandages/mob_slim_alt.dmi | Bin 1740 -> 1822 bytes icons/mob/human_races/bandages/mob_slim_m.dmi | Bin 1727 -> 1811 bytes 11 files changed, 67 insertions(+), 44 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index a8c8b9d9b98..4535338b290 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -379,6 +379,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t //Heal MANY external organs, in random order /mob/living/carbon/human/heal_overall_damage(brute, burn) var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) + var/should_update_damage_icon = FALSE while(parts.len && (brute>0 || burn>0) ) var/obj/item/organ/external/picked = pick(parts) @@ -386,13 +387,17 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t var/brute_was = picked.brute_dam var/burn_was = picked.burn_dam - picked.heal_damage(brute,burn) + if(picked.heal_damage(brute,burn, update_damage_icon = FALSE)) + should_update_damage_icon = TRUE brute -= (brute_was-picked.brute_dam) burn -= (burn_was-picked.burn_dam) parts -= picked updatehealth() + if(should_update_damage_icon) + UpdateDamageIcon() + BITSET(hud_updateflag, HEALTH_HUD) // damage MANY external organs, in random order diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 33fe0d57800..91755764ad0 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -98,17 +98,22 @@ handle_stance() handle_grasp() - if(!force_process && !bad_external_organs.len) + if(!force_process && !LAZYLEN(bad_external_organs)) return + var/should_update_damage_icon = FALSE + for(var/obj/item/organ/external/E in bad_external_organs) if(!E) continue if(!E.need_process()) bad_external_organs -= E + should_update_damage_icon = TRUE continue else E.think() + if(E.should_update_damage_icons_this_tick) + should_update_damage_icon = TRUE if(!lying && !buckled && world.time - l_move_time < 15) //Moving around with fractured ribs won't do you any good @@ -126,6 +131,9 @@ if(W.infection_check()) W.germ_level += 1 + if(should_update_damage_icon) + UpdateDamageIcon() + /mob/living/carbon/human/proc/handle_stance() // Don't need to process any of this if they aren't standing anyways // unless their stance is damaged, and we want to check if they should stay down diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index f7381ed2f10..fad7e1f5aa6 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -126,30 +126,31 @@ Please contact me on #coderbus IRC. ~Carn x #define HO_SURGERY_LAYER 5 #define HO_UNDERWEAR_LAYER 6 #define HO_UNIFORM_LAYER 7 -#define HO_ID_LAYER 8 -#define HO_SHOES_LAYER 9 -#define HO_GLOVES_LAYER 10 -#define HO_BELT_LAYER 11 -#define HO_SUIT_LAYER 12 -#define HO_TAIL_LAYER 13 //bs12 specific. this hack is probably gonna come back to haunt me -#define HO_GLASSES_LAYER 14 -#define HO_BELT_LAYER_ALT 15 -#define HO_SUIT_STORE_LAYER 16 -#define HO_BACK_LAYER 17 -#define HO_DEFORM_LAYER 18 -#define HO_HAIR_LAYER 19 -#define HO_GOGGLES_LAYER 20 -#define HO_EARS_LAYER 21 -#define HO_FACEMASK_LAYER 22 -#define HO_HEAD_LAYER 23 -#define HO_COLLAR_LAYER 24 -#define HO_HANDCUFF_LAYER 25 -#define HO_L_HAND_LAYER 26 -#define HO_R_HAND_LAYER 27 -#define HO_FIRE_LAYER 28 //If you're on fire -#define HO_MODIFIER_EFFECTS_LAYER 29 -#define HO_TARGETED_LAYER 30 //BS12: Layer for the target overlay from weapon targeting system -#define HO_TOTAL_LAYERS 30 +#define HO_BANDAGE_LAYER 8 +#define HO_ID_LAYER 9 +#define HO_SHOES_LAYER 10 +#define HO_GLOVES_LAYER 11 +#define HO_BELT_LAYER 12 +#define HO_SUIT_LAYER 13 +#define HO_TAIL_LAYER 14 //bs12 specific. this hack is probably gonna come back to haunt me +#define HO_GLASSES_LAYER 15 +#define HO_BELT_LAYER_ALT 16 +#define HO_SUIT_STORE_LAYER 17 +#define HO_BACK_LAYER 18 +#define HO_DEFORM_LAYER 19 +#define HO_HAIR_LAYER 20 +#define HO_GOGGLES_LAYER 21 +#define HO_EARS_LAYER 22 +#define HO_FACEMASK_LAYER 23 +#define HO_HEAD_LAYER 24 +#define HO_COLLAR_LAYER 25 +#define HO_HANDCUFF_LAYER 26 +#define HO_L_HAND_LAYER 27 +#define HO_R_HAND_LAYER 28 +#define HO_FIRE_LAYER 29 //If you're on fire +#define HO_MODIFIER_EFFECTS_LAYER 30 +#define HO_TARGETED_LAYER 31 //BS12: Layer for the target overlay from weapon targeting system +#define HO_TOTAL_LAYERS 31 ////////////////////////////////// /mob/living/carbon/human @@ -258,8 +259,8 @@ var/global/list/damage_icon_parts = list() var/bandage_icon = body_build.bandages_icon if(!bandage_icon) return - var/image/standing_image = overlays_standing[HO_DAMAGE_LAYER] - if(standing_image) + var/image/standing_image = image(bandage_icon, icon_state = "0") + if(overlays_standing[HO_DAMAGE_LAYER]) for(var/obj/item/organ/external/O in organs) if(O.is_stump()) continue @@ -267,7 +268,7 @@ var/global/list/damage_icon_parts = list() if(bandage_level) standing_image.AddOverlays(image(bandage_icon, "[O.icon_name][bandage_level]")) - overlays_standing[HO_DAMAGE_LAYER] = standing_image + overlays_standing[HO_BANDAGE_LAYER] = standing_image if(update_icons) queue_icon_update() diff --git a/code/modules/mob/organs/external/_external.dm b/code/modules/mob/organs/external/_external.dm index 8474ec8c3f0..007255cfb33 100644 --- a/code/modules/mob/organs/external/_external.dm +++ b/code/modules/mob/organs/external/_external.dm @@ -588,11 +588,13 @@ This function completely restores a damaged organ to perfect condition. return 1 return 0 +/obj/item/organ/external/var/should_update_damage_icons_this_tick = FALSE + /obj/item/organ/external/think() if(owner) // Process wounds, doing healing etc. Only do this every few ticks to save processing power if(owner.life_tick % wound_update_accuracy == 0) - update_wounds() + should_update_damage_icons_this_tick = update_wounds() //Infections update_germs() @@ -719,13 +721,20 @@ Note that amputating the affected organ does in fact remove the infection from t // wounds can disappear after 10 minutes at the earliest if(W.damage <= 0 && W.created + (10 MINUTES) <= world.time) qdel(W) + . = TRUE continue // let the GC handle the deletion of the wound + var/dam_type = BRUTE + if(W.damage_type == BURN) + dam_type = BURN + if(!owner.can_autoheal(dam_type)) + continue + // slow healing var/heal_amt = 0 // if damage >= 50 AFTER treatment then it's probably too severe to heal within the timeframe of a round. - if (!owner.chem_effects[CE_TOXIN] && W.can_autoheal() && W.wound_damage() && brute_ratio < 0.5 && burn_ratio < 0.5) + if (!owner.chem_effects[CE_TOXIN] && W.wound_damage() && brute_ratio < 0.5 && burn_ratio < 0.5) heal_amt += 0.5 //we only update wounds once in [wound_update_accuracy] ticks so have to emulate realtime @@ -736,16 +745,12 @@ Note that amputating the affected organ does in fact remove the infection from t heal_amt = heal_amt / (LAZYLEN(wounds) + 1) // making it look prettier on scanners heal_amt = round(heal_amt,0.1) - var/dam_type = BRUTE - if(W.damage_type == BURN) - dam_type = BURN - if(owner.can_autoheal(dam_type)) - W.heal_damage(heal_amt) + + W.heal_damage(heal_amt) // sync the organ's damage with its wounds - src.update_damages() - if (update_damstate()) - owner.UpdateDamageIcon(1) + update_damages() + . = update_damstate() //Updates brute_damn and burn_damn from wound damages. Updates BLEEDING status. /obj/item/organ/external/proc/update_damages() diff --git a/code/modules/mob/organs/external/_external_damage.dm b/code/modules/mob/organs/external/_external_damage.dm index c2fb7064a91..8150c067c33 100644 --- a/code/modules/mob/organs/external/_external_damage.dm +++ b/code/modules/mob/organs/external/_external_damage.dm @@ -165,15 +165,14 @@ obj/item/organ/external/take_general_damage(amount, silent = FALSE) update_damages() if(owner) owner.updatehealth() - if(status & ORGAN_BLEEDING) - owner.update_bandages() - if(update_damstate()) owner.UpdateDamageIcon() + else if(status & ORGAN_BLEEDING) + owner.update_bandages() return created_wound -/obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0) +/obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0, update_damage_icon = TRUE) if(BP_IS_ROBOTIC(src) && !robo_repair) return @@ -195,7 +194,11 @@ obj/item/organ/external/take_general_damage(amount, silent = FALSE) src.update_damages() owner.updatehealth() - return update_damstate() + var/should_update_damstate = update_damstate() + if(owner && update_damage_icon && should_update_damstate) + owner.UpdateDamageIcon() + + return should_update_damstate // Brute/burn /obj/item/organ/external/proc/get_brute_damage() diff --git a/code/modules/mob/organs/external/wounds/wound.dm b/code/modules/mob/organs/external/wounds/wound.dm index bc6ad3de184..3447f641c05 100644 --- a/code/modules/mob/organs/external/wounds/wound.dm +++ b/code/modules/mob/organs/external/wounds/wound.dm @@ -170,6 +170,7 @@ /datum/wound/proc/open_wound(damage) src.damage += damage bleed_timer += damage + bandaged = FALSE while(src.current_stage > 1 && src.damage_list[current_stage-1] <= src.damage / src.amount) src.current_stage-- diff --git a/icons/mob/human_races/bandages/mob.dmi b/icons/mob/human_races/bandages/mob.dmi index bab279f6c1d1b3db92911cfdba4509c986985966..ef85a6d0da9040c24c6256b47a0c2c2a3c882973 100644 GIT binary patch delta 1888 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 diff --git a/icons/mob/human_races/bandages/mob_fat.dmi b/icons/mob/human_races/bandages/mob_fat.dmi index bc2b6f4703f31c49a30ba2b08e2815410cb6865d..4a4e55d68318d35f191f4a1542771e89e3419602 100644 GIT binary patch literal 1946 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 Bnh^j1 diff --git a/icons/mob/human_races/bandages/mob_slim.dmi b/icons/mob/human_races/bandages/mob_slim.dmi index d9077e570433d67b768776d92a3ccabd4e588292..a47a47d93f79e9ef0fb73c96a92c9f42829e3494 100644 GIT binary patch literal 1845 zcmXYy2{ap67ssOngO*e)mZG2W*|%E1grY^!skL@ys3^shA|aMm=;^c_d+mzS*3Kvu zdx#|+TUtd#Lu9O35L-(!k@}+TJ@>x%?!EtWe($_@&U;Ut9c@pG$cg{}fYbJN)~)~m zAL=9o_<0o%dTlyyl5@V{W`o6I8_Tk%uy1H2{If@i*yf5ETnBTF%&Uuu-4El*_~5RN zHvyLGbHTi1Ey2wTZhboj79DyI9vT?|03b^<@~(&s>PgrT@#?9}Dm1wplm@T#%(jF{ z)}B5R#Po%VbWgE+WRN>Z$q^65`ItCD%`Y|OQg6j`&1u1&^~-A<+LY_I`%E;S7Z7S)#u(i)lDH72EWMGY27s;1{GT0KceEJ<$- zUb3wY{HBuOsg7YC-I(${Fh{WH(?i>%II15203_O5UvWd0Zjl{g7{=#Nx75+z{Cu^pjj<)Wa{851CK)<+miS$5cw1fLPXaH*8zMm#It@N5f%IV>fm z7>!8&+@o(mY5jV$2r8(2N=p|Z?;{)A9wG@K>`VmisR1n5bR2xhnxGs{xiAN=ISPYOeqR2Cg4eLtu7 z)vIo^c!!mnto(v>&)sY13;O1!DMoLlj}aR>dHecJ?4Z!r#4M9~L(LRdFO4C(>pK4? z>!_5}H$!CTX@=9zJ@kpvve5JG3#sfxW(79p`6dad=r4@DF)1;$YH|J87BX-ndZ~Y< zDd2y1z11}|7j+?tS>M^tryaJ(HOHD2iQ=kBe$<$_jB#Q(3z}VMxFA2xm#8ycdnNQ- zDb*}DwFc|d<6?fR@A8&P><9nw-$PWJDqb`H-6#BQBzO^$sJ_DGt=r2b(ea>by~_4= zg`x+m8qi&p?;OkXXa2woA=-79i|{DF}h<^5y>Hn{b39EGF>1Dz~J=s>iPH%!*2X5xD+%`|(;6Snow> zr7DvXa^4j9Ik$NLoQy$5@hf1&A}Rj5J4xu=Nq^mJqGahU0Uh77OE2*6LwXK-I%6r~ zSqyjf25{mrw8(USoHgjbxxWWLctF!>C@i6}er%!QpckA7?mTsbeJk|aEA0onM9~W` z+PrqvtE;3a=U|>B7qlo z`;~nzcS3_5sc>h~af_tE`m5t9O2hTDCAjZ{`3uq9g4}SO~8{Qw(88ZYh=IZ?=3_hh9MxPwS`Ng zSE*r$4F;SOh delta 1756 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 literal 1740 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 JW^?)a{{W^pOE&-j From de432699f79ebf8f4df18e5cc0312fc425cc970c Mon Sep 17 00:00:00 2001 From: TobyThorne <45202681+TobyThorne@users.noreply.github.com> Date: Mon, 18 Dec 2023 05:53:23 +0600 Subject: [PATCH 3/4] Update _external_damage.dm --- code/modules/mob/organs/external/_external_damage.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/organs/external/_external_damage.dm b/code/modules/mob/organs/external/_external_damage.dm index 8150c067c33..fffb148701b 100644 --- a/code/modules/mob/organs/external/_external_damage.dm +++ b/code/modules/mob/organs/external/_external_damage.dm @@ -158,7 +158,7 @@ obj/item/organ/external/take_general_damage(amount, silent = FALSE) adjust_pain(0.6*burn + 0.4*brute) //If there are still hurties to dispense - if (spillover) + if(owner && spillover) owner.shock_stage += spillover * config.health.organ_damage_spillover_multiplier // sync the organ's damage with its wounds From 147d0c4750e22a3dda416e4f842a3a78cc7551bc Mon Sep 17 00:00:00 2001 From: TobyThorne <45202681+TobyThorne@users.noreply.github.com> Date: Mon, 18 Dec 2023 06:02:19 +0600 Subject: [PATCH 4/4] Update medical.dm --- code/game/objects/items/stacks/medical.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index fdc12e18314..e900d7de7b0 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -151,6 +151,8 @@ W.heal_damage(heal_brute) used++ affecting.update_damages() + if(affecting.update_damstate()) + H.UpdateDamageIcon() if(used == get_amount()) if(affecting.is_bandaged()) to_chat(user, SPAN("warning", "\The [src] is used up.")) @@ -271,6 +273,8 @@ W.heal_damage(heal_brute) used++ affecting.update_damages() + if(affecting.update_damstate()) + H.UpdateDamageIcon() if(used == get_amount()) if(affecting.is_bandaged()) to_chat(user, SPAN("warning", "\The [src] is used up.")) @@ -431,6 +435,8 @@ W.bandage() used++ affecting.update_damages() + if(affecting.update_damstate()) + H.UpdateDamageIcon() if(used == get_amount()) if(affecting.is_bandaged()) to_chat(user, SPAN("warning", "\The [src] is used up."))