diff --git a/code/__DEFINES/wounds.dm b/code/__DEFINES/wounds.dm index 0085531e892..0d49159ad94 100644 --- a/code/__DEFINES/wounds.dm +++ b/code/__DEFINES/wounds.dm @@ -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 diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 2e62ca63714..d2aa5d82f87 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -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 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 42e8ff3247c..3284e8cc904 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -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 diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 2c06320a25b..ca817640039 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -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 diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic.dm index 6c8dc9069c8..1416897e105 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic.dm @@ -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, "Alert: Critical damage taken! Cooling systems failing!") @@ -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, diff --git a/modular_skyrat/modules/more_wounds/code/readme.md b/modular_skyrat/modules/more_wounds/code/readme.md deleted file mode 100644 index f2f7ab63e36..00000000000 --- a/modular_skyrat/modules/more_wounds/code/readme.md +++ /dev/null @@ -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 diff --git a/modular_skyrat/modules/more_wounds/code/synthetic/burn.dm b/modular_skyrat/modules/more_wounds/code/synthetic/burn.dm deleted file mode 100644 index 38d4f3e0073..00000000000 --- a/modular_skyrat/modules/more_wounds/code/synthetic/burn.dm +++ /dev/null @@ -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("The heat damage on the remnants of [victim]'s melted [limb.name] arc violently and creak dangerously!", "You feel a sudden drain from your [limb.name]; causing a heavy sense of exhaustion to rush through your circuitry.", vision_distance = COMBAT_MESSAGE_RANGE) - return - - // here's the check to see if we're cleared up - if(flesh_damage <= 0) - to_chat(victim, "The burns on your [limb.name] have cleared up!") - 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, "The melted circuitry on your [limb.name] spark and zap weakly...") - if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL) - if(!disabling && prob(2)) - to_chat(victim, "Your [limb.name] completely locks up, as you struggle to regain control over your circuitry!") - set_disabling(TRUE) - else if(disabling && prob(8)) - to_chat(victim, "You regain sensation in your [limb.name], but it's still in terrible shape!") - 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, "You suddenly lose all sensation in your [limb.name]; the wiring far too damaged to sustain operation!") - set_disabling(TRUE) - else if(disabling && prob(3)) - to_chat(victim, "You can barely feel your [limb.name] again, and you have to strain your processing core to retain motor control!") - set_disabling(FALSE) - else if(prob(1)) - to_chat(victim, "You attempt diagnostics on your [limb.name]; and all it reports are dull errors...") - 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, "The metal and plastic sheathing on your [limb.name] is literally boiling off; you're in terrible shape!") - if(2) - to_chat(victim, "The arcing in your [limb.name] is audibly buzzing, you feel as if the malfunctions are ever so slightly getting worse.") - if(1) - to_chat(victim, "Your limb is all but unresponsive; [limb.name] is almost completely useless!") - if(0) - to_chat(victim, "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.") - 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 "[victim.p_their(TRUE)] [limb.name] has locked up completely and is non-functional." - - 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 += ", with small spots of flaked metal along the nearby support structure!" - if(WOUND_INFECTION_SEVERE to WOUND_INFECTION_CRITICAL) - condition += ", with growing lines of destroyed wiring." - if(WOUND_INFECTION_CRITICAL to WOUND_INFECTION_SEPTIC) - condition += ", with violent arcs of electricity!" - if(WOUND_INFECTION_SEPTIC to INFINITY) - return "[victim.p_their(TRUE)] [limb.name] is a mess of charred metal and slagged plastic!" - else - condition += "!" - - return "[condition.Join()]" - -/datum/wound/synthetic/burn/get_scanner_description(mob/user) - if(strikes_to_lose_limb == 0) - var/oopsie = "Type: [name]\nSeverity: [severity_text()]" - oopsie += "
Infection Level: The bodypart has suffered complete degredation and must be replaced. Amputate or augment limb immediately.
" - return oopsie - - . = ..() - . += "
" - - 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: CRITICAL\n" - if(WOUND_INFECTION_SEPTIC to INFINITY) - . += "Infection Level: LOSS IMMINENT\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" - . += "
" - -/* - 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("[user] begins applying [I] to [victim]'s [limb.name]...", "You begin applying [I] to [user == victim ? "your" : "[victim]'s"] [limb.name]...") - if(!do_after(user, (user == victim ? 10 : 5), extra_checks = CALLBACK(src, .proc/still_exists))) - return - user.visible_message("[user] applies [I] to [victim].", "You apply [I] to [user == victim ? "your" : "[victim]'s"] [limb.name].") - I.use(1) - sanitization += 1 - flesh_healing += 3 - - if((infestation <= 0 || sanitization >= infestation) && (flesh_damage <= 0 || flesh_healing > flesh_damage)) - to_chat(user, "You've done all you can with [I], now you must wait for the flesh on [victim]'s [limb.name] to recover.") - 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, "The burns on your [limb.name] have cleared up!") - 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" diff --git a/modular_skyrat/modules/more_wounds/code/synthetic/muscle.dm b/modular_skyrat/modules/more_wounds/code/synthetic/muscle.dm deleted file mode 100644 index 7185ac05fe3..00000000000 --- a/modular_skyrat/modules/more_wounds/code/synthetic/muscle.dm +++ /dev/null @@ -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("[victim] drops [I] as their limb malfunctions!", "The force on your [limb.name] causes you to drop [I]!", 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, "Your [limb.name] has repaired its hydraulics!") - 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, "The control circuits in your [limb.name] malfunction as you strike [target], electricity arcing violently!") - limb.receive_damage(brute=rand(1,5)) - else - victim.visible_message("[victim] weakly strikes [target] with [victim.p_their()] malfunctioning [limb.name], recoiling as it smokes and pops weakly!", \ - "You fail to strike [target] as the fractured hydraulics in your [limb.name] light up with multiple warnings: your internals failing!", 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 "[msg.Join()]" - -/* - 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 diff --git a/modular_skyrat/modules/more_wounds/code/synthetic/pierce.dm b/modular_skyrat/modules/more_wounds/code/synthetic/pierce.dm deleted file mode 100644 index 6d97aa124f2..00000000000 --- a/modular_skyrat/modules/more_wounds/code/synthetic/pierce.dm +++ /dev/null @@ -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("Oil droplets fly from the hole in [victim]'s [limb.name].", "You eject some of your oil; the blow to your [limb.name] jarring your systems!.", vision_distance=COMBAT_MESSAGE_RANGE) - victim.bleed(blood_bled, TRUE) - if(14 to 19) - victim.visible_message("A small stream of oil spurts from the hole in [victim]'s [limb.name]!", "You eject out a string of oil from the blow to your [limb.name]!", 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("A spray of oil streams from the gash in [victim]'s [limb.name]!", "You gush out a spray of oil from the blow to your [limb.name]!", 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, "You feel the [lowertext(name)] in your [limb.name] firming up from the cold!") - - 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("[user] begins taping over [victim]'s [limb.name] with [A]...", "You begin taping over [user == victim ? "your" : "[victim]'s"] [limb.name] with [A]...") - if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists))) - return - user.visible_message("[user] tapes up over some of the leaking on [victim].", "You tape up some of the leaking on [user == victim ? "yourself" : "[victim]"].") - 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, "You successfully close the hole in [user == victim ? "your" : "[victim]'s"] [limb.name].") - -/// 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("[user] begins welding shut [victim]'s [limb.name] with [I]...", "You begin welding shut [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...") - 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("[user] welds shut some of the leaking on [victim].", "You weld shut some of the leaking on [victim].") - 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) diff --git a/modular_skyrat/modules/more_wounds/code/synthetic/slash.dm b/modular_skyrat/modules/more_wounds/code/synthetic/slash.dm deleted file mode 100644 index 366091eef31..00000000000 --- a/modular_skyrat/modules/more_wounds/code/synthetic/slash.dm +++ /dev/null @@ -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 "[msg.Join()]" - -/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, "The destroyed hydraulics on your [limb.name] have stopped leaking!") - 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("[user] begins aiming [lasgun] directly at [victim]'s [limb.name]...", "You begin aiming [lasgun] directly at [user == victim ? "your" : "[victim]'s"] [limb.name]...") - 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("The leaking on [victim]'s [limb.name] slows, and then stops!") - -/// 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("[user] begins welding over [user == victim ? "[user.p_their()]" : "[victim]'s"] [limb.name] with [I]...", "You begin welding over [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...") - - 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("[user] welds over some of the leaking on [user == victim ? "[user.p_their()]" : "[victim]'s"] [limb.name].", "You weld over some of the leaking on [user == victim ? "[user.p_their()]" : "[victim]'s"] [limb.name].") - - 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, "You successfully lower the severity of [user == victim ? "your" : "[victim]'s"] leaking.") - -/// 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("[user] begins taping over [victim]'s [limb.name] with [B]...", "You begin taping over [user == victim ? "your" : "[victim]'s"] [limb.name] with [B]...") - - if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists))) - return - user.visible_message("[user] tapes up some of the leaking on [victim].", "You tape up some of the leaking on [user == victim ? "yourself" : "[victim]"].") - 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, "You successfully lower the severity of [user == victim ? "your" : "[victim]'s"] leaking.") - - -/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) diff --git a/tgstation.dme b/tgstation.dme index aec108001a1..55fe40f6bac 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -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"