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