From 964adb782853abc000cbadfbd14b60e7b014efa8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 17 Nov 2020 00:50:36 +0100 Subject: [PATCH] [MIRROR] Fixes disabled limbs from compound fractures, only robotic limbs can be disabled by pure damage now (#1709) * Fixes disabled limbs from compound fractures, only robotic limbs can be disabled by pure damage now (#54922) * Fixes disabled limbs from compound fractures, only robotic limbs can be disabled by pure damage now Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com> --- code/__DEFINES/dcs/signals.dm | 2 + code/__DEFINES/traits.dm | 4 +- code/_globalvars/traits.dm | 4 +- code/datums/martial/sleeping_carp.dm | 4 +- code/datums/traits/negative.dm | 2 +- code/datums/wounds/_wounds.dm | 3 + code/datums/wounds/bones.dm | 23 +++--- code/datums/wounds/burns.dm | 8 +- code/datums/wounds/slash.dm | 12 +-- code/game/objects/items/storage/backpack.dm | 1 + .../carbon/human/species_types/plasmamen.dm | 2 +- .../carbon/human/species_types/zombies.dm | 4 +- .../chemistry/reagents/drug_reagents.dm | 4 +- .../bioware/ligament_reinforcement.dm | 4 +- code/modules/surgery/bodyparts/_bodyparts.dm | 74 +++++++------------ .../surgery/bodyparts/robot_bodyparts.dm | 4 + 16 files changed, 75 insertions(+), 80 deletions(-) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 69441d93b9d..91ecd95b5dd 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -433,6 +433,8 @@ #define COMSIG_CARBON_ATTACH_LIMB "carbon_attach_limb" #define COMPONENT_NO_ATTACH (1<<0) #define COMSIG_CARBON_REMOVE_LIMB "carbon_remove_limb" //from base of /obj/item/bodypart/proc/drop_limb(special, dismembered) +#define COMSIG_BODYPART_GAUZED "bodypart_gauzed" // from /obj/item/bodypart/proc/apply_gauze(/obj/item/stack/gauze) +#define COMSIG_BODYPART_GAUZE_DESTROYED "bodypart_degauzed" // from [/obj/item/bodypart/proc/seep_gauze] when it runs out of absorption ///from base of mob/living/carbon/soundbang_act(): (list(intensity)) #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 840f6a4d239..b10b4a6b819 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -145,8 +145,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_EASYDISMEMBER "easy_dismember" #define TRAIT_LIMBATTACHMENT "limb_attach" #define TRAIT_NOLIMBDISABLE "no_limb_disable" -#define TRAIT_EASYLIMBWOUND "easy_limb_wound" -#define TRAIT_HARDLIMBWOUND "hard_limb_wound" +#define TRAIT_EASILY_WOUNDED "easy_limb_wound" +#define TRAIT_HARDLY_WOUNDED "hard_limb_wound" #define TRAIT_TOXINLOVER "toxinlover" #define TRAIT_NOBREATH "no_breath" #define TRAIT_ANTIMAGIC "anti_magic" diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 11e89d087a0..021965dbccd 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -62,8 +62,8 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, - "TRAIT_EASYLIMBWOUND" = TRAIT_EASYLIMBWOUND, - "TRAIT_HARDLIMBWOUND" = TRAIT_HARDLIMBWOUND, + "TRAIT_EASILY_WOUNDED" = TRAIT_EASILY_WOUNDED, + "TRAIT_HARDLY_WOUNDED" = TRAIT_HARDLY_WOUNDED, "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, "TRAIT_NOBREATH" = TRAIT_NOBREATH, "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 22d446ea53e..64f19fd30d0 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -120,14 +120,14 @@ if(!.) return ADD_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT) - ADD_TRAIT(H, TRAIT_HARDLIMBWOUND, SLEEPING_CARP_TRAIT) + ADD_TRAIT(H, TRAIT_HARDLY_WOUNDED, SLEEPING_CARP_TRAIT) ADD_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) H.faction |= "carp" //:D /datum/martial_art/the_sleeping_carp/on_remove(mob/living/carbon/human/H) . = ..() REMOVE_TRAIT(H, TRAIT_NOGUNS, SLEEPING_CARP_TRAIT) - REMOVE_TRAIT(H, TRAIT_HARDLIMBWOUND, SLEEPING_CARP_TRAIT) + REMOVE_TRAIT(H, TRAIT_HARDLY_WOUNDED, SLEEPING_CARP_TRAIT) REMOVE_TRAIT(H, TRAIT_NODISMEMBER, SLEEPING_CARP_TRAIT) H.faction -= "carp" //:( diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index 0ef2f0c619d..6cb99a58e17 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -257,7 +257,7 @@ name = "Frail" desc = "You have skin of paper and bones of glass! You suffer wounds much more easily than most." value = -2 - mob_trait = TRAIT_EASYLIMBWOUND + mob_trait = TRAIT_EASILY_WOUNDED gain_text = "You feel frail." lose_text = "You feel sturdy again." medical_record_text = "Patient is absurdly easy to injure. Please take all due dilligence to avoid possible malpractice suits." diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index cc76a5119e5..a1ebe18a98b 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -165,6 +165,7 @@ /// Remove the wound from whatever it's afflicting, and cleans up whateverstatus effects it had or modifiers it had on interaction times. ignore_limb is used for detachments where we only want to forget the victim /datum/wound/proc/remove_wound(ignore_limb, replaced = FALSE) //TODO: have better way to tell if we're getting removed without replacement (full heal) scar stuff + set_disabling(FALSE) if(limb && !already_scarred && !replaced) already_scarred = TRUE var/datum/scar/new_scar = new @@ -229,6 +230,8 @@ else if(. && limb) //Lost disabling. REMOVE_TRAIT(limb, TRAIT_PARALYSIS, src) REMOVE_TRAIT(limb, TRAIT_DISABLED_BY_WOUND, src) + if(limb?.can_be_disabled) + limb.update_disabled() /// Additional beneficial effects when the wound is gained, in case you want to give a temporary boost to allow the victim to try an escape or last stand diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index e1ccff34cec..9090aac93d0 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -33,6 +33,9 @@ Overwriting of base procs */ /datum/wound/blunt/wound_injury(datum/wound/old_wound = null) + // hook into gaining/losing gauze so crit bone wounds can re-enable/disable depending if they're slung or not + RegisterSignal(limb, list(COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_GAUZE_DESTROYED), .proc/update_inefficiencies) + if(limb.body_zone == BODY_ZONE_HEAD && brain_trauma_group) processes = TRUE active_trauma = victim.gain_trauma_type(brain_trauma_group, TRAUMA_RESILIENCE_WOUND) @@ -52,6 +55,8 @@ /datum/wound/blunt/remove_wound(ignore_limb, replaced) limp_slowdown = 0 QDEL_NULL(active_trauma) + if(limb) + UnregisterSignal(limb, list(COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_GAUZE_DESTROYED)) if(victim) UnregisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK) return ..() @@ -146,15 +151,15 @@ else var/sling_condition = "" // how much life we have left in these bandages - switch(limb.current_gauze.obj_integrity / limb.current_gauze.max_integrity * 100) - if(0 to 25) - sling_condition = "just barely " - if(25 to 50) - sling_condition = "loosely " - if(50 to 75) - sling_condition = "mostly " - if(75 to INFINITY) - sling_condition = "tightly " + switch(limb.current_gauze.absorption_capacity) + if(0 to 1.25) + sling_condition = "just barely" + if(1.25 to 2.75) + sling_condition = "loosely" + if(2.75 to 4) + sling_condition = "mostly" + if(4 to INFINITY) + sling_condition = "tightly" msg += "[victim.p_their(TRUE)] [limb.name] is [sling_condition] fastened in a sling of [limb.current_gauze.name]" diff --git a/code/datums/wounds/burns.dm b/code/datums/wounds/burns.dm index 8e88d7c584a..9525ef0bd0e 100644 --- a/code/datums/wounds/burns.dm +++ b/code/datums/wounds/burns.dm @@ -125,13 +125,13 @@ var/bandage_condition switch(limb.current_gauze.absorption_capacity) if(0 to 1.25) - bandage_condition = "nearly ruined " + bandage_condition = "nearly ruined" if(1.25 to 2.75) - bandage_condition = "badly worn " + bandage_condition = "badly worn" if(2.75 to 4) - bandage_condition = "slightly pus-stained " + bandage_condition = "slightly pus-stained" if(4 to INFINITY) - bandage_condition = "clean " + bandage_condition = "clean" condition += " underneath a dressing of [bandage_condition] [limb.current_gauze.name]" else diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 26f4978e8ee..d24facedc2a 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -54,18 +54,18 @@ if(!limb.current_gauze) return ..() - var/list/msg = list("The cuts on [victim.p_their()] [limb.name] are wrapped with") + var/list/msg = list("The cuts on [victim.p_their()] [limb.name] are wrapped with ") // how much life we have left in these bandages switch(limb.current_gauze.absorption_capacity) if(0 to 1.25) - msg += "nearly ruined " + msg += "nearly ruined" if(1.25 to 2.75) - msg += "badly worn " + msg += "badly worn" if(2.75 to 4) - msg += "slightly bloodied " + msg += "slightly bloodied" if(4 to INFINITY) - msg += "clean " - msg += "[limb.current_gauze.name]!" + msg += "clean" + msg += " [limb.current_gauze.name]!" return "[msg.Join()]" diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 270fab38b12..d2a235d2b5b 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -489,6 +489,7 @@ new /obj/item/clothing/mask/muzzle(src) new /obj/item/mmi/syndie(src) new /obj/item/blood_filter(src) + new /obj/item/stack/medical/bone_gel(src) /obj/item/storage/backpack/duffelbag/syndie/ammo name = "ammunition duffel bag" diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 74ac041063d..04c3a992520 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -6,7 +6,7 @@ meat = /obj/item/stack/sheet/mineral/plasma species_traits = list(NOBLOOD,NOTRANSSTING, HAS_BONE) // plasmemes get hard to wound since they only need a severe bone wound to dismember, but unlike skellies, they can't pop their bones back into place - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN, TRAIT_HARDLIMBWOUND) + inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_NOHUNGER,TRAIT_ALWAYS_CLEAN, TRAIT_HARDLY_WOUNDED) inherent_biotypes = MOB_HUMANOID|MOB_MINERAL mutantlungs = /obj/item/organ/lungs/plasmaman mutanttongue = /obj/item/organ/tongue/bone/plasmaman diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 0f88afa8877..a156440dd86 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -8,7 +8,7 @@ sexes = 0 meat = /obj/item/food/meat/slab/human/mutant/zombie species_traits = list(NOBLOOD,NOZOMBIE,NOTRANSSTING, HAS_FLESH, HAS_BONE) - inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_EASYLIMBWOUND,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS) + inherent_traits = list(TRAIT_NOMETABOLISM,TRAIT_TOXIMMUNE,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_RADIMMUNE,TRAIT_EASYDISMEMBER,TRAIT_EASILY_WOUNDED,TRAIT_LIMBATTACHMENT,TRAIT_NOBREATH,TRAIT_NODEATH,TRAIT_FAKEDEATH,TRAIT_NOCLONELOSS) inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID mutanttongue = /obj/item/organ/tongue/zombie var/static/list/spooks = list('sound/hallucinations/growl1.ogg','sound/hallucinations/growl2.ogg','sound/hallucinations/growl3.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/wail.ogg') @@ -100,6 +100,6 @@ mutanttongue = /obj/item/organ/tongue/zombie changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN species_traits = list(HAS_FLESH, HAS_BONE) - inherent_traits = list(TRAIT_EASYLIMBWOUND) + inherent_traits = list(TRAIT_EASILY_WOUNDED) #undef REGENERATION_DELAY diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index e0bf63862ab..0137d78c981 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -565,7 +565,7 @@ /datum/reagent/drug/maint/sludge/on_mob_metabolize(mob/living/L) . = ..() - ADD_TRAIT(L,TRAIT_HARDLIMBWOUND,type) + ADD_TRAIT(L,TRAIT_HARDLY_WOUNDED,type) /datum/reagent/drug/maint/sludge/on_mob_life(mob/living/carbon/M) . = ..() @@ -573,7 +573,7 @@ /datum/reagent/drug/maint/sludge/on_mob_end_metabolize(mob/living/M) . = ..() - REMOVE_TRAIT(M,TRAIT_HARDLIMBWOUND,type) + REMOVE_TRAIT(M,TRAIT_HARDLY_WOUNDED,type) /datum/reagent/drug/maint/sludge/overdose_process(mob/living/M) . = ..() diff --git a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm index 94146badd12..d4ada121625 100644 --- a/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm +++ b/code/modules/surgery/advanced/bioware/ligament_reinforcement.dm @@ -37,9 +37,9 @@ /datum/bioware/reinforced_ligaments/on_gain() ..() ADD_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments") - ADD_TRAIT(owner, TRAIT_EASYLIMBWOUND, "reinforced_ligaments") + ADD_TRAIT(owner, TRAIT_EASILY_WOUNDED, "reinforced_ligaments") /datum/bioware/reinforced_ligaments/on_lose() ..() REMOVE_TRAIT(owner, TRAIT_NODISMEMBER, "reinforced_ligaments") - REMOVE_TRAIT(owner, TRAIT_EASYLIMBWOUND, "reinforced_ligaments") + REMOVE_TRAIT(owner, TRAIT_EASILY_WOUNDED, "reinforced_ligaments") diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index fed97512801..aba59b705b8 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -24,8 +24,8 @@ ///If disabled, limb is as good as missing. var/bodypart_disabled = FALSE - ///Multiplied by max_damage it returns the threshold which defines a limb being disabled or not. From 0 to 1. - var/disable_threshold = 1 + ///Multiplied by max_damage it returns the threshold which defines a limb being disabled or not. From 0 to 1. 0 means no disable thru damage + var/disable_threshold = 0 ///Controls whether bodypart_disabled makes sense or not for this limb. var/can_be_disabled = FALSE var/body_damage_coeff = 1 //Multiplier of the limb's damage that gets applied to the mob @@ -181,8 +181,7 @@ var/turf/T = get_turf(src) if(status != BODYPART_ROBOTIC) playsound(T, 'sound/misc/splort.ogg', 50, TRUE, -1) - if(current_gauze) - QDEL_NULL(current_gauze) + seep_gauze(9999) // destroy any existing gauze if any exists for(var/obj/item/organ/drop_organ in get_organs()) drop_organ.transfer_to_limb(src, owner) for(var/obj/item/I in src) @@ -377,12 +376,12 @@ */ /obj/item/bodypart/proc/check_wounding(woundtype, damage, wound_bonus, bare_wound_bonus) // note that these are fed into an exponent, so these are magnified - if(HAS_TRAIT(owner, TRAIT_EASYLIMBWOUND)) + if(HAS_TRAIT(owner, TRAIT_EASILY_WOUNDED)) damage *= 1.5 else damage = min(damage, WOUND_MAX_CONSIDERED_DAMAGE) - if(HAS_TRAIT(owner,TRAIT_HARDLIMBWOUND)) + if(HAS_TRAIT(owner,TRAIT_HARDLY_WOUNDED)) damage *= 0.85 if(HAS_TRAIT(owner, TRAIT_EASYDISMEMBER)) @@ -570,7 +569,19 @@ var/total_damage = max(brute_dam + burn_dam, stamina_dam) - if(total_damage >= max_damage * disable_threshold) //Easy limb disable disables the limb at 40% health instead of 0% + // this block of checks is for limbs that can be disabled, but not through pure damage (AKA limbs that suffer wounds, human/monkey parts and such) + if(!disable_threshold) + if(total_damage < max_damage) + last_maxed = FALSE + else + if(!last_maxed && owner.stat < UNCONSCIOUS) + INVOKE_ASYNC(owner, /mob.proc/emote, "scream") + last_maxed = TRUE + set_disabled(FALSE) // we only care about the paralysis trait + return + + // we're now dealing solely with limbs that can be disabled through pure damage, AKA robot parts + if(total_damage >= max_damage * disable_threshold) if(!last_maxed) if(owner.stat < UNCONSCIOUS) INVOKE_ASYNC(owner, /mob.proc/emote, "scream") @@ -578,7 +589,7 @@ set_disabled(TRUE) return - if(bodypart_disabled && total_damage <= max_damage * 0.8) // reenabled at 80% now instead of 50% as of wounds update + if(bodypart_disabled && total_damage <= max_damage * 0.5) // reenable the limb at 50% health last_maxed = FALSE set_disabled(FALSE) @@ -605,14 +616,6 @@ var/needs_update_disabled = FALSE //Only really relevant if there's an owner if(.) var/mob/living/carbon/old_owner = . - if(can_be_disabled) - if(HAS_TRAIT(old_owner, TRAIT_EASYLIMBWOUND)) - disable_threshold = initial(disable_threshold) - needs_update_disabled = TRUE - UnregisterSignal(old_owner, list( - SIGNAL_REMOVETRAIT(TRAIT_EASYLIMBWOUND), - SIGNAL_ADDTRAIT(TRAIT_EASYLIMBWOUND), - )) if(initial(can_be_disabled)) if(HAS_TRAIT(old_owner, TRAIT_NOLIMBDISABLE)) if(!owner || !HAS_TRAIT(owner, TRAIT_NOLIMBDISABLE)) @@ -623,12 +626,6 @@ SIGNAL_ADDTRAIT(TRAIT_NOLIMBDISABLE), )) if(owner) - if(can_be_disabled) - if(HAS_TRAIT(owner, TRAIT_EASYLIMBWOUND)) - disable_threshold = 0.6 - needs_update_disabled = TRUE - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_EASYLIMBWOUND), .proc/on_owner_easylimbwound_trait_loss) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_EASYLIMBWOUND), .proc/on_owner_easylimbwound_trait_gain) if(initial(can_be_disabled)) if(HAS_TRAIT(owner, TRAIT_NOLIMBDISABLE)) set_can_be_disabled(FALSE) @@ -651,18 +648,12 @@ CRASH("set_can_be_disabled to TRUE with for limb whose owner has TRAIT_NOLIMBDISABLE") RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_PARALYSIS), .proc/on_paralysis_trait_gain) RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS), .proc/on_paralysis_trait_loss) - if(HAS_TRAIT(owner, TRAIT_EASYLIMBWOUND)) - disable_threshold = 0.6 - RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_EASYLIMBWOUND), .proc/on_owner_easylimbwound_trait_loss) - RegisterSignal(owner, SIGNAL_ADDTRAIT(TRAIT_EASYLIMBWOUND), .proc/on_owner_easylimbwound_trait_gain) update_disabled() else if(.) if(owner) UnregisterSignal(owner, list( SIGNAL_ADDTRAIT(TRAIT_PARALYSIS), SIGNAL_REMOVETRAIT(TRAIT_PARALYSIS), - SIGNAL_REMOVETRAIT(TRAIT_EASYLIMBWOUND), - SIGNAL_ADDTRAIT(TRAIT_EASYLIMBWOUND), )) set_disabled(FALSE) @@ -692,23 +683,6 @@ SIGNAL_HANDLER set_can_be_disabled(initial(can_be_disabled)) - -///Called when TRAIT_EASYLIMBWOUND is added to the owner. -/obj/item/bodypart/proc/on_owner_easylimbwound_trait_gain(mob/living/carbon/source) - SIGNAL_HANDLER - disable_threshold = 0.6 - if(can_be_disabled) - update_disabled() - - -///Called when TRAIT_EASYLIMBWOUND is removed from the owner. -/obj/item/bodypart/proc/on_owner_easylimbwound_trait_loss(mob/living/carbon/source) - SIGNAL_HANDLER - disable_threshold = initial(disable_threshold) - if(can_be_disabled) - update_disabled() - - //Updates an organ's brute/burn states for use by update_damage_overlays() //Returns 1 if we need to update overlays. 0 otherwise. /obj/item/bodypart/proc/update_bodypart_damage_state() @@ -933,7 +907,7 @@ var/datum/wound/iter_wound = i dam_mul *= iter_wound.damage_mulitplier_penalty - if(!LAZYLEN(wounds) && current_gauze && !replaced) + if(!LAZYLEN(wounds) && current_gauze && !replaced) // no more wounds = no need for the gauze anymore owner.visible_message("\The [current_gauze] on [owner]'s [name] fall away.", "The [current_gauze] on your [name] fall away.") QDEL_NULL(current_gauze) @@ -983,9 +957,14 @@ /obj/item/bodypart/proc/apply_gauze(obj/item/stack/gauze) if(!istype(gauze) || !gauze.absorption_capacity) return + var/newly_gauzed = FALSE + if(!current_gauze) + newly_gauzed = TRUE QDEL_NULL(current_gauze) current_gauze = new gauze.type(src, 1) gauze.use(1) + if(newly_gauzed) + SEND_SIGNAL(src, COMSIG_BODYPART_GAUZED, gauze) /** * seep_gauze() is for when a gauze wrapping absorbs blood or pus from wounds, lowering its absorption capacity. @@ -999,6 +978,7 @@ if(!current_gauze) return current_gauze.absorption_capacity -= seep_amt - if(current_gauze.absorption_capacity < 0) + if(current_gauze.absorption_capacity <= 0) owner.visible_message("\The [current_gauze] on [owner]'s [name] fall away in rags.", "\The [current_gauze] on your [name] fall away in rags.", vision_distance=COMBAT_MESSAGE_RANGE) QDEL_NULL(current_gauze) + SEND_SIGNAL(src, COMSIG_BODYPART_GAUZE_DESTROYED) diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index 9b89d09ea2e..a1fcb6fde36 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -20,6 +20,7 @@ flags_1 = CONDUCT_1 icon_state = "borg_l_arm" status = BODYPART_ROBOTIC + disable_threshold = 1 brute_reduction = 5 burn_reduction = 4 @@ -42,6 +43,7 @@ flags_1 = CONDUCT_1 icon_state = "borg_r_arm" status = BODYPART_ROBOTIC + disable_threshold = 1 brute_reduction = 5 burn_reduction = 4 @@ -64,6 +66,7 @@ flags_1 = CONDUCT_1 icon_state = "borg_l_leg" status = BODYPART_ROBOTIC + disable_threshold = 1 brute_reduction = 5 burn_reduction = 4 @@ -86,6 +89,7 @@ flags_1 = CONDUCT_1 icon_state = "borg_r_leg" status = BODYPART_ROBOTIC + disable_threshold = 1 brute_reduction = 5 burn_reduction = 4