Revert "Synthetic wounds (#6369)" (#6669)

This reverts commit 34b8d43390.
This commit is contained in:
SpaceVampire
2021-07-26 15:56:38 +01:00
committed by GitHub
parent 1220cb11ea
commit 5b9cc828be
11 changed files with 11 additions and 991 deletions
-13
View File
@@ -65,19 +65,6 @@ GLOBAL_LIST_INIT(global_all_wound_types, list(/datum/wound/blunt/critical, /datu
/datum/wound/pierce/critical, /datum/wound/pierce/severe, /datum/wound/pierce/moderate,
/datum/wound/burn/critical, /datum/wound/burn/severe, /datum/wound/burn/moderate, /datum/wound/muscle/severe, /datum/wound/muscle/moderate))
//SKYRAT EDIT BEGIN
GLOBAL_LIST_INIT(global_wound_types_synth, list(WOUND_BLUNT = list(),
WOUND_SLASH = list(/datum/wound/synthetic/slash/critical, /datum/wound/synthetic/slash/severe, /datum/wound/synthetic/slash/moderate),
WOUND_PIERCE = list(/datum/wound/synthetic/pierce/critical, /datum/wound/synthetic/pierce/severe, /datum/wound/synthetic/pierce/moderate),
WOUND_BURN = list(/datum/wound/synthetic/burn/critical, /datum/wound/synthetic/burn/severe, /datum/wound/synthetic/burn/moderate),
WOUND_MUSCLE = list(/datum/wound/synthetic/muscle/severe, /datum/wound/synthetic/muscle/moderate)
))
// every single type of wound that can be rolled naturally, in case you need to pull a random one
GLOBAL_LIST_INIT(global_all_wound_types_synth, list(/datum/wound/synthetic/slash/critical, /datum/wound/synthetic/slash/severe, /datum/wound/synthetic/slash/moderate,
/datum/wound/synthetic/pierce/critical, /datum/wound/synthetic/pierce/severe, /datum/wound/synthetic/pierce/moderate,
/datum/wound/synthetic/burn/critical, /datum/wound/synthetic/burn/severe, /datum/wound/synthetic/burn/moderate,
/datum/wound/synthetic/muscle/severe, /datum/wound/synthetic/muscle/moderate))
//SKYRAT EDIT END
// ~burn wound infection defines
// Thresholds for infection for burn wounds, once infestation hits each threshold, things get steadily worse
+1 -1
View File
@@ -107,7 +107,7 @@
* * smited- If this is a smite, we don't care about this wound for stat tracking purposes (not yet implemented)
*/
/datum/wound/proc/apply_wound(obj/item/bodypart/L, silent = FALSE, datum/wound/old_wound = null, smited = FALSE)
if(!istype(L) || !L.owner || !(L.body_zone in viable_zones) || HAS_TRAIT(L.owner, TRAIT_NEVER_WOUNDED)) //SKYRAT EDIT
if(!istype(L) || !L.owner || !(L.body_zone in viable_zones) || !L.is_organic_limb() || HAS_TRAIT(L.owner, TRAIT_NEVER_WOUNDED))
qdel(src)
return
+2 -7
View File
@@ -1209,13 +1209,8 @@
else
wound_type = forced_type
else
//SKYRAT EDIT BEGIN
switch(scar_part.status)
if(BODYPART_ROBOTIC)
wound_type = pick(GLOB.global_all_wound_types_synth)
if(BODYPART_ORGANIC)
wound_type = pick(GLOB.global_all_wound_types)
//SKYRAT EDIT END
wound_type = pick(GLOB.global_all_wound_types)
var/datum/wound/phantom_wound = new wound_type
scaries.generate(scar_part, phantom_wound)
scaries.fake = TRUE
+3 -10
View File
@@ -448,14 +448,8 @@
var/base_roll = rand(1, round(damage ** WOUND_DAMAGE_EXPONENT))
var/injury_roll = base_roll
injury_roll += check_woundings_mods(woundtype, damage, wound_bonus, bare_wound_bonus)
//var/list/wounds_checking = GLOB.global_wound_types[woundtype] SKRYAT EDIT ORIGINAL
//SKYRAT EDIT CHANGE START
var/list/wounds_checking
if((owner.mob_biotypes & (MOB_ROBOTIC)) || src.status == BODYPART_ROBOTIC)
wounds_checking = GLOB.global_wound_types_synth[woundtype]
if((owner.mob_biotypes & MOB_ORGANIC) || !src.status == BODYPART_ROBOTIC)
wounds_checking = GLOB.global_wound_types[woundtype]
//SKYRAT EDIT END
var/list/wounds_checking = GLOB.global_wound_types[woundtype]
if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && prob(get_damage() / max_damage * 100))
var/datum/wound/loss/dismembering = new
dismembering.apply_dismember(src, woundtype, outright=TRUE)
@@ -1015,10 +1009,9 @@
/obj/item/bodypart/proc/get_bleed_rate()
if(HAS_TRAIT(owner, TRAIT_NOBLEED))
return
/* SKYRAT EDIT REMOVAL
if(status != BODYPART_ORGANIC) // maybe in the future we can bleed oil from aug parts, but not now
return
*/ //SKYRAT EDIT END
var/bleed_rate = 0
if(generic_bleedstacks > 0)
bleed_rate += 0.5
@@ -2,7 +2,6 @@
say_mod = "beeps"
default_color = "00FF00"
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
species_traits = list(HAS_FLESH)
inherent_traits = list(
TRAIT_CAN_STRIP,
TRAIT_ADVANCEDTOOLUSER,
@@ -20,10 +19,10 @@
mutant_bodyparts = list()
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT
reagent_flags = PROCESS_SYNTHETIC
burnmod = 1 // Every 0.1% is 10% above the base.
brutemod = 1
coldmod = 0.6 //Synths take less burn from cold.
heatmod = 1.4 //But slightly more from burn
burnmod = 1.5 // Every 0.1% is 10% above the base.
brutemod = 1.6
coldmod = 1.2
heatmod = 2
siemens_coeff = 1.4 //Not more because some shocks will outright crit you, which is very unfun
payday_modifier = 0.5 //Robots are cheep labor
species_language_holder = /datum/language_holder/machine
@@ -41,7 +40,7 @@
/datum/species/robotic/spec_life(mob/living/carbon/human/H)
if(H.stat == SOFT_CRIT || H.stat == HARD_CRIT)
H.adjustFireLoss(0.7)
H.adjustFireLoss(1) //Still deal some damage in case a cold environment would be preventing us from the sweet release to robot heaven
H.adjust_bodytemperature(13) //We're overheating!!
if(prob(10))
to_chat(H, "<span class='warning'>Alert: Critical damage taken! Cooling systems failing!</span>")
@@ -67,7 +66,6 @@
name = "I.P.C."
id = "ipc"
species_traits = list(
HAS_FLESH,
ROBOTIC_DNA_ORGANS,
MUTCOLORS_PARTSONLY,
EYECOLOR,
@@ -145,7 +143,6 @@
name = "Synthetic Lizardperson"
id = "synthliz"
species_traits = list(
HAS_FLESH,
ROBOTIC_DNA_ORGANS,
MUTCOLORS,EYECOLOR,
LIPS,
@@ -181,7 +178,6 @@
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
default_color = "4B4B4B"
species_traits = list(
HAS_FLESH,
ROBOTIC_DNA_ORGANS,
MUTCOLORS,EYECOLOR,
LIPS,HAIR,
@@ -266,7 +262,6 @@
say_mod = "states"
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
species_traits = list(
HAS_FLESH,
ROBOTIC_DNA_ORGANS,
EYECOLOR,
LIPS,
@@ -1,30 +0,0 @@
https://github.com/Skyrat-SS13/Skyrat-tg/pull/6359
## Title: Synthetic Wounds
MODULE ID: SYNTHETICWOUNDS
### Description:
Synthetic wounds.
### TG Proc Changes:
- TBD
### Defines:
- N/A
### Master file additions
- N/A
### Included files that are not contained in this module:
- N/A
### Credits:
- Yawet330, original code
- Gandalf, additional changes
- Tf4, more changes
@@ -1,241 +0,0 @@
/*
Burn wounds
*/
// TODO: well, a lot really, but specifically I want to add potential fusing of clothing/equipment on the affected area, and limb infections, though those may go in body part code
/datum/wound/synthetic/burn
name = "Burn Wound"
a_or_from = "from"
wound_type = WOUND_BURN
processes = TRUE
sound_effect = 'sound/effects/wounds/sizzle1.ogg'
wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE)
treatable_by = list(/obj/item/stack/cable_coil, /obj/item/stack/sticky_tape/surgical) // sterilizer and alcohol will require reagent treatments, coming soon
// Flesh damage vars
/// How much damage to our flesh we currently have. Once both this and infestation reach 0, the wound is considered healed
var/flesh_damage = 5
/// Our current counter for how much flesh regeneration we have stacked from regenerative mesh/synthflesh/whatever, decrements each tick and lowers flesh_damage
var/flesh_healing = 0
// Infestation vars (only for severe and critical)
/// How quickly infection breeds on this burn if we don't have disinfectant
var/infestation_rate = 0
/// Our current level of infection
var/infestation = 0
/// Our current level of sanitization/anti-infection, from disinfectants/alcohol/UV lights. While positive, totally pauses and slowly reverses infestation effects each tick
var/sanitization = 0
/// Once we reach infestation beyond WOUND_INFESTATION_SEPSIS, we get this many warnings before the limb is completely paralyzed (you'd have to ignore a really bad burn for a really long time for this to happen)
var/strikes_to_lose_limb = 3
/datum/wound/synthetic/burn/handle_process()
. = ..()
if(strikes_to_lose_limb == 0) // we've already hit sepsis, nothing more to do
if(prob(1))
victim.adjustStaminaLoss(10)
victim.visible_message("<span class='danger'>The heat damage on the remnants of [victim]'s melted [limb.name] arc violently and creak dangerously!</span>", "<span class='warning'>You feel a sudden drain from your [limb.name]; causing a heavy sense of exhaustion to rush through your circuitry.</span>", vision_distance = COMBAT_MESSAGE_RANGE)
return
// here's the check to see if we're cleared up
if(flesh_damage <= 0)
to_chat(victim, "<span class='green'>The burns on your [limb.name] have cleared up!</span>")
qdel(src)
return
infestation += infestation_rate //Infestation rate is indicative of burns getting worse due to short circuits
switch(infestation)
if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
if(prob(30))
victim.adjustStaminaLoss(2)
if(prob(6))
to_chat(victim, "<span class='warning'>The melted circuitry on your [limb.name] spark and zap weakly...</span>")
if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
if(!disabling && prob(2))
to_chat(victim, "<span class='warning'><b>Your [limb.name] completely locks up, as you struggle to regain control over your circuitry!</b></span>")
set_disabling(TRUE)
else if(disabling && prob(8))
to_chat(victim, "<span class='notice'>You regain sensation in your [limb.name], but it's still in terrible shape!</span>")
set_disabling(FALSE)
else if(prob(20))
victim.adjustStaminaLoss(3)
if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
if(!disabling && prob(3))
to_chat(victim, "<span class='warning'><b>You suddenly lose all sensation in your [limb.name]; the wiring far too damaged to sustain operation!</b></span>")
set_disabling(TRUE)
else if(disabling && prob(3))
to_chat(victim, "<span class='notice'>You can barely feel your [limb.name] again, and you have to strain your processing core to retain motor control!</span>")
set_disabling(FALSE)
else if(prob(1))
to_chat(victim, "<span class='warning'>You attempt diagnostics on your [limb.name]; and all it reports are dull errors...</span>")
victim.adjustStaminaLoss(5)
else if(prob(4))
victim.adjustStaminaLoss(4)
if(WOUND_INFECTION_SEPTIC to INFINITY)
if(prob(infestation))
switch(strikes_to_lose_limb)
if(3 to INFINITY)
to_chat(victim, "<span class='deadsay'>The metal and plastic sheathing on your [limb.name] is literally boiling off; you're in terrible shape!</span>")
if(2)
to_chat(victim, "<span class='deadsay'><b>The arcing in your [limb.name] is audibly buzzing, you feel as if the malfunctions are ever so slightly getting worse.</b></span>")
if(1)
to_chat(victim, "<span class='deadsay'><b>Your limb is all but unresponsive; [limb.name] is almost completely useless!</b></span>")
if(0)
to_chat(victim, "<span class='deadsay'><b>The last of the control circuits in your [limb.name] wither away beneath the heat, as the arcing and fire finally subsides; having destroyed all connection to the main housing.</b></span>")
threshold_penalty = 120 // piss easy to destroy
var/datum/brain_trauma/severe/paralysis/sepsis = new (limb.body_zone)
victim.gain_trauma(sepsis)
strikes_to_lose_limb--
/datum/wound/synthetic/burn/get_examine_description(mob/user)
if(strikes_to_lose_limb <= 0)
return "<span class='deadsay'><B>[victim.p_their(TRUE)] [limb.name] has locked up completely and is non-functional.</B></span>"
var/list/condition = list("[victim.p_their(TRUE)] [limb.name] [examine_desc]")
if(limb.current_gauze)
var/bandage_condition
switch(limb.current_gauze.absorption_capacity)
if(0 to 1.25)
bandage_condition = "nearly ruined"
if(1.25 to 2.75)
bandage_condition = "badly worn"
if(2.75 to 4)
bandage_condition = "slightly burnt"
if(4 to INFINITY)
bandage_condition = "clean"
condition += " underneath a dressing of [bandage_condition] [limb.current_gauze.name]"
else
switch(infestation)
if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
condition += ", <span class='deadsay'>with small spots of flaked metal along the nearby support structure!</span>"
if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
condition += ", <span class='deadsay'>with growing lines of destroyed wiring.</span>"
if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
condition += ", <span class='deadsay'>with violent arcs of electricity!</span>"
if(WOUND_INFECTION_SEPTIC to INFINITY)
return "<span class='deadsay'><B>[victim.p_their(TRUE)] [limb.name] is a mess of charred metal and slagged plastic!</B></span>"
else
condition += "!"
return "<B>[condition.Join()]</B>"
/datum/wound/synthetic/burn/get_scanner_description(mob/user)
if(strikes_to_lose_limb == 0)
var/oopsie = "Type: [name]\nSeverity: [severity_text()]"
oopsie += "<div class='ml-3'>Infection Level: <span class='deadsay'>The bodypart has suffered complete degredation and must be replaced. Amputate or augment limb immediately.</span></div>"
return oopsie
. = ..()
. += "<div class='ml-3'>"
if(infestation <= sanitization && flesh_damage <= flesh_healing)
. += "No further treatment required: Burns will automatically repair shortly."
else
switch(infestation)
if(WOUND_INFECTION_MODERATE to WOUND_INFECTION_SEVERE)
. += "Infection Level: Moderate\n"
if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL)
. += "Infection Level: Severe\n"
if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC)
. += "Infection Level: <span class='deadsay'>CRITICAL</span>\n"
if(WOUND_INFECTION_SEPTIC to INFINITY)
. += "Infection Level: <span class='deadsay'>LOSS IMMINENT</span>\n"
if(infestation > sanitization)
. += "\tCable coils, tape, or otherwise complete replacement of the limb will be effective.\n"
if(flesh_damage > 0)
. += "Limb damage detected: Application of cable coil and tape will encourage automated repair systems to handle further damage.\n"
. += "</div>"
/*
new burn common procs
*/
/// if someone is using ointment or mesh on our burns
/datum/wound/synthetic/burn/proc/cablecoil(obj/item/I, mob/user)
user.visible_message("<span class='notice'>[user] begins applying [I] to [victim]'s [limb.name]...</span>", "<span class='notice'>You begin applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]...</span>")
if(!do_after(user, (user == victim ? 10 : 5), extra_checks = CALLBACK(src, .proc/still_exists)))
return
user.visible_message("<span class='green'>[user] applies [I] to [victim].</span>", "<span class='green'>You apply [I] to [user == victim ? "your" : "[victim]'s"] [limb.name].</span>")
I.use(1)
sanitization += 1
flesh_healing += 3
if((infestation <= 0 || sanitization >= infestation) && (flesh_damage <= 0 || flesh_healing > flesh_damage))
to_chat(user, "<span class='notice'>You've done all you can with [I], now you must wait for the flesh on [victim]'s [limb.name] to recover.</span>")
else
try_treating(I, user)
/datum/wound/synthetic/burn/treat(obj/item/I, mob/user)
if(istype(I, /obj/item/stack/cable_coil))
cablecoil(I, user)
else if(istype(I, /obj/item/stack/sticky_tape/surgical))
var/obj/item/stack/sticky_tape/surgical = I
cablecoil(surgical, user)
// people complained about burns not healing on stasis beds, so in addition to checking if it's cured, they also get the special ability to very slowly heal on stasis beds if they have the healing effects stored
/datum/wound/synthetic/burn/on_stasis()
. = ..()
if(flesh_healing > 0)
flesh_damage = max(0, flesh_damage - 0.2)
if((flesh_damage <= 0) && (infestation <= WOUND_INFECTION_MODERATE))
to_chat(victim, "<span class='green'>The burns on your [limb.name] have cleared up!</span>")
qdel(src)
return
if(sanitization > 0)
infestation = max(0, infestation - WOUND_BURN_SANITIZATION_RATE * 0.2)
/datum/wound/synthetic/burn/on_synthflesh(amount)
flesh_healing += amount * 0.5 // 20u patch will heal 10 flesh standard
// we don't even care about first degree burns, straight to second
/datum/wound/synthetic/burn/moderate
name = "Minor Heatwarping"
desc = "Synthetic is suffering minor damage to the outer-shell of their limb, usually caused by high-intensity heating."
treat_text = "Recommended application of cable coil or tape to affected region."
examine_desc = "is somewhat charred; sparking beneath its covering"
occur_text = "sparks and smokes violently, small arcs coming from the surface"
severity = WOUND_SEVERITY_MODERATE
damage_mulitplier_penalty = 1.1
threshold_minimum = 40
threshold_penalty = 30 // burns cause significant decrease in limb integrity compared to other wounds
status_effect_type = /datum/status_effect/wound/burn/moderate
flesh_damage = 5
scar_keyword = "burnmoderate"
/datum/wound/synthetic/burn/severe
name = "Major Heatwarping"
desc = "Synthetic is suffering major damage caused by heat exposure to the limb, repairs are essential for continued operation."
treat_text = "Recommended immediate repair and replacement of damaged cables, followed by taping."
examine_desc = "appears seriously charred, many areas melted beyond recognition"
occur_text = "chars rapidly, several high-voltage arcs sparking from their limbs."
severity = WOUND_SEVERITY_SEVERE
damage_mulitplier_penalty = 1.2
threshold_minimum = 80
threshold_penalty = 40
status_effect_type = /datum/status_effect/wound/burn/severe
treatable_by = list(/obj/item/stack/cable_coil, /obj/item/stack/sticky_tape/surgical)
infestation_rate = 0.05 // appx 13 minutes to reach sepsis without any treatment
flesh_damage = 12.5
scar_keyword = "burnsevere"
/datum/wound/synthetic/burn/critical
name = "Catastrophic Heatwarping"
desc = "Synthetic has had their limb charred to the point of near-destruction, very little remains of the original design."
treat_text = "Immediate intervention, usually by entirely replacing the burnt segments of their limb, followed by intense monitoring to ensure further damage does not occur"
examine_desc = "is a horrifying mess of metal and plastic, the cabling having melted together"
occur_text = "vaporizes as metal, plastic and cabling melts into one amorphous mass"
severity = WOUND_SEVERITY_CRITICAL
damage_mulitplier_penalty = 1.3
sound_effect = 'sound/effects/wounds/sizzle2.ogg'
threshold_minimum = 140
threshold_penalty = 80
status_effect_type = /datum/status_effect/wound/burn/critical
treatable_by = list(/obj/item/stack/cable_coil, /obj/item/stack/sticky_tape/surgical)
infestation_rate = 0.15 // appx 4.33 minutes to reach sepsis without any treatment
flesh_damage = 20
scar_keyword = "burncritical"
@@ -1,206 +0,0 @@
/*
Muscle wounds. There is a chance to roll a muscle wound instead of others while doing brute damage
*/
/datum/wound/synthetic/muscle
name = "Muscle Wound"
sound_effect = 'sound/effects/wounds/blood1.ogg'
wound_type = WOUND_MUSCLE
wound_flags = (FLESH_WOUND | ACCEPTS_SPLINT)
viable_zones = list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)
processes = TRUE
/// How much do we need to regen. Will regen faster if we're splinted and or laying down
var/regen_ticks_needed
/// Our current counter for healing
var/regen_ticks_current = 0
/*
Overwriting of base procs
*/
/datum/wound/synthetic/muscle/wound_injury(datum/wound/old_wound = null)
// hook into gaining/losing gauze so crit muscle wounds can re-enable/disable depending if they're slung or not
RegisterSignal(limb, list(COMSIG_BODYPART_SPLINTED, COMSIG_BODYPART_SPLINT_DESTROYED), .proc/update_inefficiencies)
RegisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, .proc/attack_with_hurt_hand)
if(limb.held_index && victim.get_item_for_held_index(limb.held_index) && (disabling || prob(30 * severity)))
var/obj/item/I = victim.get_item_for_held_index(limb.held_index)
if(istype(I, /obj/item/offhand))
I = victim.get_inactive_held_item()
if(I && victim.dropItemToGround(I))
victim.visible_message("<span class='danger'>[victim] drops [I] as their limb malfunctions!</span>", "<span class='warning'><b>The force on your [limb.name] causes you to drop [I]!</b></span>", vision_distance=COMBAT_MESSAGE_RANGE)
update_inefficiencies()
/datum/wound/synthetic/muscle/remove_wound(ignore_limb, replaced)
limp_slowdown = 0
if(limb)
UnregisterSignal(limb, list(COMSIG_BODYPART_GAUZED, COMSIG_BODYPART_GAUZE_DESTROYED))
if(victim)
UnregisterSignal(victim, COMSIG_HUMAN_EARLY_UNARMED_ATTACK)
return ..()
/datum/wound/synthetic/muscle/handle_process()
. = ..()
regen_ticks_current++
if(victim.body_position == LYING_DOWN)
if(prob(50))
regen_ticks_current += 0.5
if(victim.IsSleeping())
regen_ticks_current += 0.5
if(limb.current_splint)
regen_ticks_current += (1-limb.current_splint.splint_factor)
if(regen_ticks_current > regen_ticks_needed)
if(!victim || !limb)
qdel(src)
return
to_chat(victim, "<span class='green'>Your [limb.name] has repaired its hydraulics!</span>")
remove_wound()
/// If we're a human who's punching something with a broken arm, we might hurt ourselves doing so
/datum/wound/synthetic/muscle/proc/attack_with_hurt_hand(mob/M, atom/target, proximity)
SIGNAL_HANDLER
if(victim.get_active_hand() != limb || !victim.combat_mode || !ismob(target) || severity <= WOUND_SEVERITY_MODERATE)
return
// 15% of 30% chance to proc pain on hit
if(prob(severity * 15))
// And you have a 70% or 50% chance to actually land the blow, respectively
if(prob(70 - 20 * severity))
to_chat(victim, "<span class='userdanger'>The control circuits in your [limb.name] malfunction as you strike [target], electricity arcing violently!</span>")
limb.receive_damage(brute=rand(1,5))
else
victim.visible_message("<span class='danger'>[victim] weakly strikes [target] with [victim.p_their()] malfunctioning [limb.name], recoiling as it smokes and pops weakly!</span>", \
"<span class='userdanger'>You fail to strike [target] as the fractured hydraulics in your [limb.name] light up with multiple warnings: your internals failing!</span>", vision_distance=COMBAT_MESSAGE_RANGE)
INVOKE_ASYNC(victim, /mob.proc/emote, "scream")
victim.Stun(0.5 SECONDS)
limb.receive_damage(brute=rand(3,7))
return COMPONENT_CANCEL_ATTACK_CHAIN
/datum/wound/synthetic/muscle/get_examine_description(mob/user)
if(!limb.current_splint)
return ..()
var/list/msg = list()
if(!limb.current_splint)
msg += "[victim.p_their(TRUE)] [limb.name] [examine_desc]"
else
var/sling_condition = ""
// how much life we have left in these bandages
switch(limb.current_splint.sling_condition)
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 with a [limb.current_splint.name]!"
return "<B>[msg.Join()]</B>"
/*
Common procs mostly copied from bone wounds, as their behaviour is very similar
*/
/datum/wound/synthetic/muscle/proc/update_inefficiencies()
SIGNAL_HANDLER
if(limb.body_zone in list(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG))
if(limb.current_splint)
limp_slowdown = initial(limp_slowdown) * limb.current_splint.splint_factor
else
limp_slowdown = initial(limp_slowdown)
victim.apply_status_effect(STATUS_EFFECT_LIMP)
else if(limb.body_zone in list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM))
if(limb.current_splint)
interaction_efficiency_penalty = 1 + ((interaction_efficiency_penalty - 1) * limb.current_splint.splint_factor)
else
interaction_efficiency_penalty = interaction_efficiency_penalty
if(initial(disabling))
if(limb.current_splint && limb.current_splint.helps_disabled)
set_disabling(FALSE)
else
set_disabling(TRUE)
limb.update_wounds()
/// Moderate (Muscle Tear)
/datum/wound/synthetic/muscle/moderate
name = "Hydraulic Damage"
desc = "Patient's hydraulics have been damaged, severely reducing limb functionality"
treat_text = "Splinting of the limb, allowing it to properly self-repair"
examine_desc = "appears to have been damaged, its hydraulics leaking fluid"
occur_text = "sparks, beginning to leak oil"
severity = WOUND_SEVERITY_MODERATE
interaction_efficiency_penalty = 1.5
limp_slowdown = 2
threshold_minimum = 35
threshold_penalty = 15
status_effect_type = /datum/status_effect/wound/synthetic/muscle/moderate
regen_ticks_needed = 90
/*
Severe (Ruptured Tendon)
*/
/datum/wound/synthetic/muscle/severe
name = "Shattered Hydraulics"
sound_effect = 'sound/effects/wounds/blood2.ogg'
desc = "Patient's Hydraulic Line has been severed, causing loss of pressure, and loss of use of the limb."
treat_text = "Splint and non-use of the limb"
examine_desc = "is limp, weakly sparking and leaking oil"
occur_text = "twists; violently screeching as several internal components twist in the wrong ways"
severity = WOUND_SEVERITY_SEVERE
interaction_efficiency_penalty = 2
limp_slowdown = 5
threshold_minimum = 80
threshold_penalty = 35
disabling = TRUE
status_effect_type = /datum/status_effect/wound/synthetic/muscle/severe
regen_ticks_needed = 150
/datum/status_effect/wound/synthetic/muscle
/datum/status_effect/wound/synthetic/muscle/on_apply()
. = ..()
RegisterSignal(owner, COMSIG_MOB_SWAP_HANDS, .proc/on_swap_hands)
on_swap_hands()
/datum/status_effect/wound/synthetic/muscle/on_remove()
. = ..()
UnregisterSignal(owner, COMSIG_MOB_SWAP_HANDS)
var/mob/living/carbon/wound_owner = owner
wound_owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/muscle_wound)
/datum/status_effect/wound/synthetic/muscle/proc/on_swap_hands()
SIGNAL_HANDLER
var/mob/living/carbon/wound_owner = owner
if(wound_owner.get_active_hand() == linked_limb)
wound_owner.add_actionspeed_modifier(/datum/actionspeed_modifier/muscle_wound, (linked_wound.interaction_efficiency_penalty - 1))
else
wound_owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/muscle_wound)
/datum/status_effect/wound/synthetic/muscle/nextmove_modifier()
var/mob/living/carbon/C = owner
if(C.get_active_hand() == linked_limb)
return linked_wound.interaction_efficiency_penalty
return 1
// muscle
/datum/status_effect/wound/synthetic/muscle/moderate
id = "torn muscle"
/datum/status_effect/wound/synthetic/muscle/severe
id = "ruptured tendon"
/datum/actionspeed_modifier/muscle_wound
variable = TRUE
@@ -1,196 +0,0 @@
/*
Piercing wounds
*/
/datum/wound/synthetic/pierce
name = "Piercing Wound"
sound_effect = 'sound/weapons/slice.ogg'
processes = TRUE
wound_type = WOUND_PIERCE
treatable_by = list(/obj/item/stack/sticky_tape/surgical)
treatable_tool = TOOL_CAUTERY
base_treat_time = 3 SECONDS
wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE)
/// How much blood we start losing when this wound is first applied
var/initial_flow
/// If gauzed, what percent of the internal bleeding actually clots of the total absorption rate
var/gauzed_clot_rate
/// When hit on this bodypart, we have this chance of losing some blood + the incoming damage
var/internal_bleeding_chance
/// If we let off blood when hit, the max blood lost is this * the incoming damage
var/internal_bleeding_coefficient
/datum/wound/synthetic/slash/show_wound_topic(mob/user)
return (user == victim && blood_flow)
/datum/wound/synthetic/slash/Topic(href, href_list)
. = ..()
if(href_list["wound_topic"])
if(!usr == victim)
return
victim.self_grasp_bleeding_limb(limb)
/datum/wound/synthetic/pierce/wound_injury(datum/wound/old_wound)
blood_flow = initial_flow
/datum/wound/synthetic/pierce/receive_damage(wounding_type, wounding_dmg, wound_bonus)
if(victim.stat == DEAD || wounding_dmg < 5)
return
if(victim.blood_volume && prob(internal_bleeding_chance + wounding_dmg))
if(limb.current_splint && limb.current_splint.splint_factor)
wounding_dmg *= (1 - limb.current_splint.splint_factor)
var/blood_bled = rand(1, wounding_dmg * internal_bleeding_coefficient) // 12 brute toolbox can cause up to 15/18/21 bloodloss on mod/sev/crit
switch(blood_bled)
if(-INFINITY to 6)
victim.bleed(blood_bled, TRUE)
if(7 to 13)
victim.visible_message("<span class='smalldanger'>Oil droplets fly from the hole in [victim]'s [limb.name].</span>", "<span class='danger'>You eject some of your oil; the blow to your [limb.name] jarring your systems!.</span>", vision_distance=COMBAT_MESSAGE_RANGE)
victim.bleed(blood_bled, TRUE)
if(14 to 19)
victim.visible_message("<span class='smalldanger'>A small stream of oil spurts from the hole in [victim]'s [limb.name]!</span>", "<span class='danger'>You eject out a string of oil from the blow to your [limb.name]!</span>", vision_distance=COMBAT_MESSAGE_RANGE)
new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
victim.bleed(blood_bled)
if(20 to INFINITY)
victim.visible_message("<span class='danger'>A spray of oil streams from the gash in [victim]'s [limb.name]!</span>", "<span class='danger'><b>You gush out a spray of oil from the blow to your [limb.name]!</b></span>", vision_distance=COMBAT_MESSAGE_RANGE)
victim.bleed(blood_bled)
new /obj/effect/temp_visual/dir_setting/bloodsplatter(victim.loc, victim.dir)
victim.add_splatter_floor(get_step(victim.loc, victim.dir))
else
return
/datum/wound/synthetic/pierce/get_bleed_rate_of_change()
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
return BLOOD_FLOW_INCREASING
if(limb.current_gauze)
return BLOOD_FLOW_DECREASING
return BLOOD_FLOW_STEADY
/datum/wound/synthetic/pierce/handle_process()
blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
if(victim.bodytemperature < (BODYTEMP_NORMAL - 10))
blood_flow -= 0.2
if(prob(5))
to_chat(victim, "<span class='notice'>You feel the [lowertext(name)] in your [limb.name] firming up from the cold!</span>")
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
blood_flow += 0.5 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
if(limb.current_gauze && limb.current_gauze.seep_gauze(limb.current_gauze.absorption_rate, GAUZE_STAIN_BLOOD))
blood_flow -= limb.current_gauze.absorption_rate * gauzed_clot_rate
if(blood_flow <= 0)
qdel(src)
/datum/wound/synthetic/pierce/on_stasis()
. = ..()
if(blood_flow <= 0)
qdel(src)
/datum/wound/synthetic/pierce/check_grab_treatments(obj/item/I, mob/user)
if(I.get_temperature()) // if we're using something hot but not a cautery, we need to be aggro grabbing them first, so we don't try treating someone we're eswording
return TRUE
/datum/wound/synthetic/pierce/treat(obj/item/I, mob/user)
if(istype(I, /obj/item/stack/sticky_tape/surgical))
tapepierce(I, user)
else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature())
tool_cauterize(I, user)
/datum/wound/synthetic/pierce/on_xadone(power)
. = ..()
blood_flow -= 0.03 * power // i think it's like a minimum of 3 power, so .09 blood_flow reduction per tick is pretty good for 0 effort
/datum/wound/synthetic/pierce/on_synthflesh(power)
. = ..()
blood_flow -= 0.05 * power // 20u * 0.05 = -1 blood flow, less than with slashes but still good considering smaller bleed rates
/// If someone is using a suture to close this puncture
/datum/wound/synthetic/pierce/proc/tapepierce(obj/item/stack/sticky_tape/surgical/A, mob/user)
var/self_penalty_mult = (user == victim ? 1.4 : 1)
user.visible_message("<span class='notice'>[user] begins taping over [victim]'s [limb.name] with [A]...</span>", "<span class='notice'>You begin taping over [user == victim ? "your" : "[victim]'s"] [limb.name] with [A]...</span>")
if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
return
user.visible_message("<span class='green'>[user] tapes up over some of the leaking on [victim].</span>", "<span class='green'>You tape up some of the leaking on [user == victim ? "yourself" : "[victim]"].</span>")
var/blood_sutured = 0.5 / self_penalty_mult
blood_flow -= blood_sutured
var/obj/item/stack/used_stack = A
used_stack.use(1)
if(blood_flow > 0)
try_treating(A, user)
else
to_chat(user, "<span class='green'>You successfully close the hole in [user == victim ? "your" : "[victim]'s"] [limb.name].</span>")
/// If someone is using either a cautery tool or something with heat to cauterize this pierce
/datum/wound/synthetic/pierce/proc/tool_cauterize(obj/item/I, mob/user)
var/improv_penalty_mult = (I.tool_behaviour == TOOL_CAUTERY ? 1 : 1.25) // 25% longer and less effective if you don't use a real cautery
var/self_penalty_mult = (user == victim ? 1.5 : 1) // 50% longer and less effective if you do it to yourself
user.visible_message("<span class='danger'>[user] begins welding shut [victim]'s [limb.name] with [I]...</span>", "<span class='warning'>You begin welding shut [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...</span>")
if(!do_after(user, base_treat_time * self_penalty_mult * improv_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
return
user.visible_message("<span class='green'>[user] welds shut some of the leaking on [victim].</span>", "<span class='green'>You weld shut some of the leaking on [victim].</span>")
limb.receive_damage(burn = 2 + severity, wound_bonus = CANT_WOUND)
if(prob(30))
victim.emote("scream")
var/blood_cauterized = (0.6 / (self_penalty_mult * improv_penalty_mult))
blood_flow -= blood_cauterized
if(blood_flow > 0)
try_treating(I, user)
/datum/wound/synthetic/pierce/moderate
name = "Minor Puncture"
desc = "Patient's hydraulic lines have been punctured, causing leaking."
treat_text = "Treat affected site with bandaging to help stem the flow before welding and taping." // space is cold in ss13, so it's like an ice pack!
examine_desc = "has a small, circular hole piercing a vital line, hydraulic fluid slowly leaking out"
occur_text = "spurts out a thin stream of oil"
sound_effect = 'sound/effects/wounds/pierce1.ogg'
severity = WOUND_SEVERITY_MODERATE
initial_flow = 1.5
gauzed_clot_rate = 0.8
internal_bleeding_chance = 30
internal_bleeding_coefficient = 1.25
threshold_minimum = 30
threshold_penalty = 20
status_effect_type = /datum/status_effect/wound/pierce/moderate
scar_keyword = "piercemoderate"
/datum/wound/synthetic/pierce/severe
name = "Open Puncture"
desc = "Patient's internal mechanics are heavily perforated causing sizeable internal leaking and reduced limb stability."
treat_text = "Repair punctures in hydraulic lines through welding. Exposure to extreme cold may work in a pinch."
examine_desc = "is pierced clear through, bits of mangled metal obscuring the open hole"
occur_text = "looses a violent spray of oil, a clear hole being revealed"
sound_effect = 'sound/effects/wounds/pierce2.ogg'
severity = WOUND_SEVERITY_SEVERE
initial_flow = 2.25
gauzed_clot_rate = 0.6
internal_bleeding_chance = 60
internal_bleeding_coefficient = 1.5
threshold_minimum = 50
threshold_penalty = 35
status_effect_type = /datum/status_effect/wound/pierce/severe
scar_keyword = "piercesevere"
/datum/wound/synthetic/pierce/critical
name = "Internal Cavity"
desc = "Patient's internal structure has been heavily compromised causing massive hydraulic fluid loss."
treat_text = "Heavy welding and potential mechanical intervention required to ensure limb operability"
examine_desc = "is torn through almost in twain, leaking oil and shuddering violently"
occur_text = "blasts apart, chunks of shrapnel flying in all directions"
sound_effect = 'sound/effects/wounds/pierce3.ogg'
severity = WOUND_SEVERITY_CRITICAL
initial_flow = 3
gauzed_clot_rate = 0.4
internal_bleeding_chance = 80
internal_bleeding_coefficient = 1.75
threshold_minimum = 100
threshold_penalty = 50
status_effect_type = /datum/status_effect/wound/pierce/critical
scar_keyword = "piercecritical"
wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE | MANGLES_FLESH)
@@ -1,273 +0,0 @@
/*
Slashing wounds
*/
/datum/wound/synthetic/slash
name = "Slashing (Cut) Wound"
sound_effect = 'sound/weapons/slice.ogg'
processes = TRUE
wound_type = WOUND_SLASH
treatable_by = list(/obj/item/stack/sticky_tape/surgical)
treatable_by_grabbed = list(/obj/item/gun/energy/laser)
treatable_tool = TOOL_CAUTERY
base_treat_time = 3 SECONDS
wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE)
/// How much blood we start losing when this wound is first applied
var/initial_flow
/// When we have less than this amount of flow, either from treatment or clotting, we demote to a lower cut or are healed of the wound
var/minimum_flow
/// How much our blood_flow will naturally decrease per tick, not only do larger cuts bleed more blood faster, they clot slower (higher number = clot quicker, negative = opening up)
var/clot_rate
/// Once the blood flow drops below minimum_flow, we demote it to this type of wound. If there's none, we're all better
var/demotes_to
/// The maximum flow we've had so far
var/highest_flow
/// A bad system I'm using to track the worst scar we earned (since we can demote, we want the biggest our wound has been, not what it was when it was cured (probably moderate))
var/datum/scar/highest_scar
/datum/wound/synthetic/slash/show_wound_topic(mob/living/user)
return (user == victim && blood_flow)
/datum/wound/synthetic/slash/Topic(href, href_list)
. = ..()
if(href_list["wound_topic"])
if(!usr == victim)
return
victim.self_grasp_bleeding_limb(limb)
/datum/wound/synthetic/slash/wound_injury(datum/wound/slash/old_wound = null)
blood_flow = initial_flow
if(!highest_scar)
highest_scar = new
highest_scar.generate(limb, src, add_to_scars=FALSE)
if(!old_wound)
return
blood_flow = max(old_wound.blood_flow, initial_flow)
if(old_wound.severity > severity && old_wound.highest_scar)
highest_scar = old_wound.highest_scar
old_wound.highest_scar = null
/datum/wound/synthetic/slash/remove_wound(ignore_limb, replaced)
if(!replaced && highest_scar)
already_scarred = TRUE
highest_scar.lazy_attach(limb)
return ..()
/datum/wound/synthetic/slash/get_examine_description(mob/living/user)
if(!limb.current_gauze)
return ..()
var/list/msg = list("The slashed hydraulics 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"
if(1.25 to 2.75)
msg += "badly worn"
if(2.75 to 4)
msg += "slightly stained"
if(4 to INFINITY)
msg += "clean"
msg += " [limb.current_gauze.name]!"
return "<B>[msg.Join()]</B>"
/datum/wound/synthetic/slash/receive_damage(wounding_type, wounding_dmg, wound_bonus)
if(victim.stat != DEAD && wound_bonus != CANT_WOUND && wounding_type == WOUND_SLASH) // can't stab dead bodies to make it bleed faster this way
blood_flow += 0.05 * wounding_dmg
/datum/wound/synthetic/slash/drag_bleed_amount()
// say we have 3 severe cuts with 3 blood flow each, pretty reasonable
// compare with being at 100 brute damage before, where you bled (brute/100 * 2), = 2 blood per tile
var/bleed_amount = min(blood_flow * 0.1, 1) // 3 * 3 * 0.1 = 0.9 blood total, less than before! the share here is .3 blood of course.
if(limb.current_gauze && limb.current_gauze.seep_gauze(bleed_amount * 0.33, GAUZE_STAIN_BLOOD)) // gauze stops all bleeding from dragging on this limb, but wears the gauze out quicker
return 0
return bleed_amount
/datum/wound/synthetic/slash/get_bleed_rate_of_change()
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
return BLOOD_FLOW_INCREASING
if(limb.current_gauze || clot_rate > 0)
return BLOOD_FLOW_DECREASING
if(clot_rate < 0)
return BLOOD_FLOW_INCREASING
/datum/wound/synthetic/slash/handle_process()
if(victim.stat == DEAD)
blood_flow -= max(clot_rate, WOUND_SLASH_DEAD_CLOT_MIN)
if(blood_flow < minimum_flow)
if(demotes_to)
replace_wound(demotes_to)
return
qdel(src)
return
blood_flow = min(blood_flow, WOUND_SLASH_MAX_BLOODFLOW)
if(HAS_TRAIT(victim, TRAIT_BLOODY_MESS))
blood_flow += 0.5 // old heparin used to just add +2 bleed stacks per tick, this adds 0.5 bleed flow to all open cuts which is probably even stronger as long as you can cut them first
if(limb.current_gauze)
if(clot_rate > 0)
blood_flow -= clot_rate
if(limb.current_gauze && limb.current_gauze.seep_gauze(limb.current_gauze.absorption_rate, GAUZE_STAIN_BLOOD))
blood_flow -= limb.current_gauze.absorption_rate
else
blood_flow -= clot_rate
if(blood_flow > highest_flow)
highest_flow = blood_flow
if(blood_flow < minimum_flow)
if(demotes_to)
replace_wound(demotes_to)
else
to_chat(victim, "<span class='green'>The destroyed hydraulics on your [limb.name] have stopped leaking!</span>")
qdel(src)
/datum/wound/synthetic/slash/on_stasis()
if(blood_flow >= minimum_flow)
return
if(demotes_to)
replace_wound(demotes_to)
return
qdel(src)
/* BEWARE, THE BELOW NONSENSE IS MADNESS. bones.dm looks more like what I have in mind and is sufficiently clean, don't pay attention to this messiness */
/datum/wound/synthetic/slash/check_grab_treatments(obj/item/I, mob/living/user)
if(istype(I, /obj/item/gun/energy/laser))
return TRUE
if(I.get_temperature()) // if we're using something hot but not a cautery, we need to be aggro grabbing them first, so we don't try treating someone we're eswording
return TRUE
/datum/wound/synthetic/slash/treat(obj/item/I, mob/living/user)
if(istype(I, /obj/item/gun/energy/laser))
las_cauterize(I, user)
else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature())
tool_cauterize(I, user)
else if(istype(I, /obj/item/stack/sticky_tape/surgical))
slashtape(I, user)
/datum/wound/synthetic/slash/on_xadone(power)
. = ..()
blood_flow -= 0.03 * power // i think it's like a minimum of 3 power, so .09 blood_flow reduction per tick is pretty good for 0 effort
/datum/wound/synthetic/slash/on_synthflesh(power)
. = ..()
blood_flow -= 0.075 * power // 20u * 0.075 = -1.5 blood flow, pretty good for how little effort it is
/// If someone's putting a laser gun up to our cut to cauterize it
/datum/wound/synthetic/slash/proc/las_cauterize(obj/item/gun/energy/laser/lasgun, mob/living/user)
var/self_penalty_mult = (user == victim ? 1.25 : 1)
user.visible_message("<span class='warning'>[user] begins aiming [lasgun] directly at [victim]'s [limb.name]...</span>", "<span class='userdanger'>You begin aiming [lasgun] directly at [user == victim ? "your" : "[victim]'s"] [limb.name]...</span>")
if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
return
var/damage = lasgun.chambered.loaded_projectile.damage
lasgun.chambered.loaded_projectile.wound_bonus -= 30
lasgun.chambered.loaded_projectile.damage *= self_penalty_mult
if(!lasgun.process_fire(victim, victim, TRUE, null, limb.body_zone))
return
victim.emote("scream")
blood_flow -= damage / (5 * self_penalty_mult) // 20 / 5 = 4 bloodflow removed, p good
victim.visible_message("<span class='warning'>The leaking on [victim]'s [limb.name] slows, and then stops!</span>")
/// If someone is using either a cautery tool or something with heat to cauterize this cut
/datum/wound/synthetic/slash/proc/tool_cauterize(obj/item/I, mob/living/user)
var/improv_penalty_mult = (I.tool_behaviour == TOOL_CAUTERY ? 1 : 1.25) // 25% longer and less effective if you don't use a real cautery
var/self_penalty_mult = (user == victim ? 1.5 : 1) // 50% longer and less effective if you do it to yourself
user.visible_message("<span class='danger'>[user] begins welding over [user == victim ? "[user.p_their()]" : "[victim]'s"] [limb.name] with [I]...</span>", "<span class='warning'>You begin welding over [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...</span>")
if(!do_after(user, base_treat_time * self_penalty_mult * improv_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
return
user.visible_message("<span class='green'>[user] welds over some of the leaking on [user == victim ? "[user.p_their()]" : "[victim]'s"] [limb.name].</span>", "<span class='green'>You weld over some of the leaking on [user == victim ? "[user.p_their()]" : "[victim]'s"] [limb.name].</span>")
limb.receive_damage(burn = 2 + severity, wound_bonus = CANT_WOUND)
if(prob(30))
victim.emote("scream")
var/blood_cauterized = (0.6 / (self_penalty_mult * improv_penalty_mult))
blood_flow -= blood_cauterized
if(blood_flow > minimum_flow)
try_treating(I, user)
else if(demotes_to)
to_chat(user, "<span class='green'>You successfully lower the severity of [user == victim ? "your" : "[victim]'s"] leaking.</span>")
/// If someone is using a suture to close this cut
/datum/wound/synthetic/slash/proc/slashtape(obj/item/stack/sticky_tape/surgical/B, mob/living/user)
var/self_penalty_mult = (user == victim ? 1.4 : 1)
user.visible_message("<span class='notice'>[user] begins taping over [victim]'s [limb.name] with [B]...</span>", "<span class='notice'>You begin taping over [user == victim ? "your" : "[victim]'s"] [limb.name] with [B]...</span>")
if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists)))
return
user.visible_message("<span class='green'>[user] tapes up some of the leaking on [victim].</span>", "<span class='green'>You tape up some of the leaking on [user == victim ? "yourself" : "[victim]"].</span>")
var/blood_sutured = 0.5/ self_penalty_mult
blood_flow -= blood_sutured
B.use(1)
if(blood_flow > minimum_flow)
try_treating(B, user)
else if(demotes_to)
to_chat(user, "<span class='green'>You successfully lower the severity of [user == victim ? "your" : "[victim]'s"] leaking.</span>")
/datum/wound/synthetic/slash/moderate
name = "Rough Shear"
desc = "Patient's metallic coating has been sheared, causing internal leaking."
treat_text = "Liberal application of surgical tape and welding"
examine_desc = "has a torn panel, oil leaking out slowly."
occur_text = "is sheared in twain, leaking oil"
sound_effect = 'sound/effects/wounds/blood1.ogg'
severity = WOUND_SEVERITY_MODERATE
initial_flow = 2
minimum_flow = 0.5
clot_rate = 0.12
threshold_minimum = 20
threshold_penalty = 10
status_effect_type = /datum/status_effect/wound/slash/moderate
scar_keyword = "slashmoderate"
/datum/wound/synthetic/slash/severe
name = "Destroyed Panel"
desc = "Patient's metallic outer coating has been entirely ripped open, exposing sensitive hydraulics."
treat_text = "Speedy application of surgical tape to stem the initial bleeding, followed by welding over the affected area"
examine_desc = "has severe damage to their limb, oil leaking heavily"
occur_text = "is ripped open, its panel sparking and its hydraulics leaking oil"
sound_effect = 'sound/effects/wounds/blood2.ogg'
severity = WOUND_SEVERITY_SEVERE
initial_flow = 3.25
minimum_flow = 2.75
clot_rate = 0.06
threshold_minimum = 50
threshold_penalty = 25
demotes_to = /datum/wound/synthetic/slash/moderate
status_effect_type = /datum/status_effect/wound/slash/severe
scar_keyword = "slashsevere"
/datum/wound/synthetic/slash/critical
name = "Destroyed Hydraulics"
desc = "Patient has experienced an extremely damaging incident, resulting in their internal hydraulics being entirely shredded. Deactivation will commence once their oil and reguating fluids have ran out."
treat_text = "Immediate patching with tape, followed by heavy welding"
examine_desc = "has been absolutely destroyed, sparking electronics protruding from their limb"
occur_text = "is torn open, multiple hydraulics falling out of place"
sound_effect = 'sound/effects/wounds/blood3.ogg'
severity = WOUND_SEVERITY_CRITICAL
initial_flow = 4.25
minimum_flow = 4
clot_rate = -0.05 // critical cuts actively get worse instead of better
threshold_minimum = 80
threshold_penalty = 40
demotes_to = /datum/wound/synthetic/slash/severe
status_effect_type = /datum/status_effect/wound/slash/critical
scar_keyword = "slashcritical"
wound_flags = (FLESH_WOUND | ACCEPTS_GAUZE | MANGLES_FLESH)
-4
View File
@@ -4363,10 +4363,6 @@
#include "modular_skyrat\modules\modular_weapons\code\modules\projectiles\guns\energy\energy.dm"
#include "modular_skyrat\modules\modular_weapons\code\modules\projectiles\projectile\bullets\modular_projectiles.dm"
#include "modular_skyrat\modules\modular_weapons\code\modules\research\designs\autolathe_designs.dm"
#include "modular_skyrat\modules\more_wounds\code\synthetic\burn.dm"
#include "modular_skyrat\modules\more_wounds\code\synthetic\muscle.dm"
#include "modular_skyrat\modules\more_wounds\code\synthetic\pierce.dm"
#include "modular_skyrat\modules\more_wounds\code\synthetic\slash.dm"
#include "modular_skyrat\modules\morenarcotics\chemistry\reagents\cocaine.dm"
#include "modular_skyrat\modules\morenarcotics\chemistry\reagents\opium.dm"
#include "modular_skyrat\modules\morenarcotics\chemistry\reagents\pcp.dm"