diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 3ec83cbf535..833631aa3cb 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -228,8 +228,10 @@ var/allowed = FALSE - // check if we have a valid treatable tool (or, if cauteries are allowed, if we have something hot) - if((I.tool_behaviour == treatable_tool) || (treatable_tool == TOOL_CAUTERY && I.get_temperature())) + // check if we have a valid treatable tool + if(I.tool_behaviour == treatable_tool) + allowed = TRUE + else if(treatable_tool == TOOL_CAUTERY && I.get_temperature() && user == victim) // allow improvised cauterization on yourself without an aggro grab allowed = TRUE // failing that, see if we're aggro grabbing them and if we have an item that works for aggro grabs only else if(user.pulling == victim && user.grab_state >= GRAB_AGGRESSIVE && check_grab_treatments(I, user)) diff --git a/code/datums/wounds/pierce.dm b/code/datums/wounds/pierce.dm index 6ef74bee556..d589c9f199b 100644 --- a/code/datums/wounds/pierce.dm +++ b/code/datums/wounds/pierce.dm @@ -72,10 +72,14 @@ if(blood_flow <= 0) qdel(src) +/datum/wound/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/pierce/treat(obj/item/I, mob/user) if(istype(I, /obj/item/stack/medical/suture)) suture(I, user) - else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature() > 300) + else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature()) tool_cauterize(I, user) /datum/wound/pierce/on_xadone(power) @@ -86,14 +90,14 @@ . = ..() 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 cut +/// If someone is using a suture to close this puncture /datum/wound/pierce/proc/suture(obj/item/stack/medical/suture/I, mob/user) var/self_penalty_mult = (user == victim ? 1.4 : 1) user.visible_message("[user] begins stitching [victim]'s [limb.name] with [I]...", "You begin stitching [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...") if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists))) return user.visible_message("[user] stitches up some of the bleeding on [victim].", "You stitch up some of the bleeding on [user == victim ? "yourself" : "[victim]"].") - var/blood_sutured = I.stop_bleeding / self_penalty_mult * 0.5 + var/blood_sutured = I.stop_bleeding / self_penalty_mult blood_flow -= blood_sutured limb.heal_damage(I.heal_brute, I.heal_burn) I.use(1) @@ -105,16 +109,18 @@ /// If someone is using either a cautery tool or something with heat to cauterize this pierce /datum/wound/pierce/proc/tool_cauterize(obj/item/I, mob/user) - var/self_penalty_mult = (user == victim ? 1.5 : 1) - user.visible_message("[user] begins cauterizing [victim]'s [limb.name] with [I]...", "You begin cauterizing [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...") - if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists))) + 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 cauterizing [victim]'s [limb.name] with [I]...", "You begin cauterizing [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] cauterizes some of the bleeding on [victim].", "You cauterize some of the bleeding 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) * 0.5 + var/blood_cauterized = (0.6 / (self_penalty_mult * improv_penalty_mult)) blood_flow -= blood_cauterized if(blood_flow > 0) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index 039d4e393b9..20a3220e42e 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -131,11 +131,13 @@ /datum/wound/slash/check_grab_treatments(obj/item/I, mob/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/slash/treat(obj/item/I, mob/user) if(istype(I, /obj/item/gun/energy/laser)) las_cauterize(I, user) - else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature() > 300) + else if(I.tool_behaviour == TOOL_CAUTERY || I.get_temperature()) tool_cauterize(I, user) else if(istype(I, /obj/item/stack/medical/suture)) suture(I, user) @@ -201,16 +203,18 @@ /// If someone is using either a cautery tool or something with heat to cauterize this cut /datum/wound/slash/proc/tool_cauterize(obj/item/I, mob/user) - var/self_penalty_mult = (user == victim ? 1.5 : 1) - user.visible_message("[user] begins cauterizing [victim]'s [limb.name] with [I]...", "You begin cauterizing [user == victim ? "your" : "[victim]'s"] [limb.name] with [I]...") - if(!do_after(user, base_treat_time * self_penalty_mult, target=victim, extra_checks = CALLBACK(src, .proc/still_exists))) + 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 cauterizing [victim]'s [limb.name] with [I]...", "You begin cauterizing [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] cauterizes some of the bleeding on [victim].", "You cauterize some of the bleeding 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) + var/blood_cauterized = (0.6 / (self_penalty_mult * improv_penalty_mult)) blood_flow -= blood_cauterized if(blood_flow > minimum_flow) diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index 6df92f87367..c72bf2811e9 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -26,7 +26,7 @@ max_integrity = 200 armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) resistance_flags = FIRE_PROOF - wound_bonus = -110 + wound_bonus = -10 bare_wound_bonus = 20 var/w_class_on = WEIGHT_CLASS_BULKY var/saber_color = "green" diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm index 17640b3ef59..72e5e4d0979 100644 --- a/code/game/objects/items/melee/transforming.dm +++ b/code/game/objects/items/melee/transforming.dm @@ -1,5 +1,6 @@ /obj/item/melee/transforming sharpness = SHARP_EDGED + bare_wound_bonus = 20 var/active = FALSE var/force_on = 30 //force when active var/faction_bonus_force = 0 //Bonus force dealt against certain factions @@ -13,8 +14,6 @@ var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects var/w_class_on = WEIGHT_CLASS_BULKY var/clumsy_check = TRUE - wound_bonus = -30 - bare_wound_bonus = 40 /obj/item/melee/transforming/Initialize() . = ..() diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/powerfist.dm index bfe8af29a33..0d3b54867bf 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/powerfist.dm @@ -97,7 +97,8 @@ target.visible_message("[user]'s powerfist lets out a weak hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \ "[user]'s punch strikes with force!") return - target.apply_damage(force * fisto_setting, BRUTE, wound_bonus = -25*fisto_setting**2) + + target.apply_damage(force * fisto_setting, BRUTE, wound_bonus = CANT_WOUND) target.visible_message("[user]'s powerfist lets out a loud hiss as [user.p_they()] punch[user.p_es()] [target.name]!", \ "You cry out in pain as [user]'s punch flings you backwards!") new /obj/effect/temp_visual/kinetic_blast(target.loc) diff --git a/code/modules/antagonists/changeling/powers/mutations.dm b/code/modules/antagonists/changeling/powers/mutations.dm index b69a2a5b286..97be416f04f 100644 --- a/code/modules/antagonists/changeling/powers/mutations.dm +++ b/code/modules/antagonists/changeling/powers/mutations.dm @@ -163,7 +163,7 @@ attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") sharpness = SHARP_EDGED - wound_bonus = -60 + wound_bonus = -20 bare_wound_bonus = 20 var/can_drop = FALSE var/fake = FALSE diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index d7ff7ad1411..c6945877265 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -19,8 +19,8 @@ w_class = WEIGHT_CLASS_SMALL force = 15 throwforce = 25 - wound_bonus = -30 - bare_wound_bonus = 30 + wound_bonus = -10 + bare_wound_bonus = 20 armour_penetration = 35 actions_types = list(/datum/action/item_action/cult_dagger) var/drawing_rune = FALSE @@ -43,8 +43,8 @@ w_class = WEIGHT_CLASS_BULKY force = 30 // whoever balanced this got beat in the head by a bible too many times good lord throwforce = 10 - wound_bonus = -80 - bare_wound_bonus = 30 + wound_bonus = -50 + bare_wound_bonus = 20 hitsound = 'sound/weapons/bladeslice.ogg' attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends") attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "rend") diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 652176caa70..2232ddb2a5d 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -463,7 +463,7 @@ throwforce = 15 block_chance = 55 armour_penetration = 80 - wound_bonus = -70 + wound_bonus = -50 attack_verb_continuous = list("slaps", "slathers") attack_verb_simple = list("slap", "slather") w_class = WEIGHT_CLASS_BULKY diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 6bc7ea0cd90..44fa6b96a54 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -73,7 +73,10 @@ if(user == src) affecting = get_bodypart(check_zone(user.zone_selected)) //we're self-mutilating! yay! else - affecting = get_bodypart(ran_zone(user.zone_selected)) + var/zone_hit_chance = 80 + if(!(mobility_flags & MOBILITY_STAND)) // half as likely to hit a different zone if they're on the ground + zone_hit_chance += 10 + affecting = get_bodypart(ran_zone(user.zone_selected, zone_hit_chance)) if(!affecting) //missing limb? we select the first bodypart (you can never have zero, because of chest) affecting = bodyparts[1] SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5cbc75c2467..951558b3e6d 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -173,7 +173,10 @@ if(user == src) affecting = get_bodypart(check_zone(user.zone_selected)) //stabbing yourself always hits the right target else - affecting = get_bodypart(ran_zone(user.zone_selected)) + var/zone_hit_chance = 80 + if(!(mobility_flags & MOBILITY_STAND)) // half as likely to hit a different zone if they're on the ground + zone_hit_chance += 10 + affecting = get_bodypart(ran_zone(user.zone_selected, zone_hit_chance)) var/target_area = parse_zone(check_zone(user.zone_selected)) //our intended target SEND_SIGNAL(I, COMSIG_ITEM_ATTACK_ZONE, src, user, affecting) diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index da5b764730a..931fe4eb369 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -173,7 +173,7 @@ item_flags = ABSTRACT | DROPDEL w_class = WEIGHT_CLASS_HUGE sharpness = SHARP_EDGED - wound_bonus = -60 + wound_bonus = -30 bare_wound_bonus = 20 /obj/item/light_eater/Initialize() diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index a2b3d7e2dbe..38633d2e3a8 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -99,5 +99,7 @@ meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/zombie mutanttongue = /obj/item/organ/tongue/zombie changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN + species_traits = list(HAS_FLESH, HAS_BONE) + inherent_traits = list(TRAIT_EASYLIMBWOUND) #undef REGENERATION_DELAY diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 4fa2479164d..d5907ce04b6 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -228,11 +228,8 @@ var/bio_state = owner.get_biological_state() var/easy_dismember = HAS_TRAIT(owner, TRAIT_EASYDISMEMBER) // if we have easydismember, we don't reduce damage when redirecting damage to different types (slashing weapons on mangled/skinless limbs attack at 100% instead of 50%) - if(wounding_type == WOUND_BLUNT) - if(sharpness == SHARP_EDGED) - wounding_type = WOUND_SLASH - else if(sharpness == SHARP_POINTY) - wounding_type = WOUND_PIERCE + if(wounding_type == WOUND_BLUNT && sharpness) + wounding_type = (sharpness == SHARP_EDGED ? WOUND_SLASH : WOUND_PIERCE) //Handling for bone only/flesh only(none right now)/flesh and bone targets switch(bio_state) @@ -240,7 +237,7 @@ if(BIO_JUST_BONE) if(wounding_type == WOUND_SLASH) wounding_type = WOUND_BLUNT - wounding_dmg *= (easy_dismember ? 1 : 0.5) + wounding_dmg *= (easy_dismember ? 1 : 0.6) else if(wounding_type == WOUND_PIERCE) wounding_type = WOUND_BLUNT wounding_dmg *= (easy_dismember ? 1 : 0.75) @@ -254,7 +251,7 @@ if(mangled_state == BODYPART_MANGLED_FLESH && sharpness) playsound(src, "sound/effects/wounds/crackandbleed.ogg", 100) if(wounding_type == WOUND_SLASH && !easy_dismember) - wounding_dmg *= 0.5 // edged weapons pass along 50% of their wounding damage to the bone since the power is spread out over a larger area + wounding_dmg *= 0.6 // edged weapons pass along 60% of their wounding damage to the bone since the power is spread out over a larger area if(wounding_type == WOUND_PIERCE && !easy_dismember) wounding_dmg *= 0.75 // piercing weapons pass along 75% of their wounding damage to the bone since it's more concentrated wounding_type = WOUND_BLUNT @@ -308,11 +305,8 @@ var/bio_state = owner.get_biological_state() var/easy_dismember = HAS_TRAIT(owner, TRAIT_EASYDISMEMBER) // if we have easydismember, we don't reduce damage when redirecting damage to different types (slashing weapons on mangled/skinless limbs attack at 100% instead of 50%) - if(wounding_type == WOUND_BLUNT) - if(sharpness == SHARP_EDGED) - wounding_type = WOUND_SLASH - else if(sharpness == SHARP_POINTY) - wounding_type = WOUND_PIERCE + if(wounding_type == WOUND_BLUNT && sharpness) + wounding_type = (sharpness == SHARP_EDGED ? WOUND_SLASH : WOUND_PIERCE) //Handling for bone only/flesh only(none right now)/flesh and bone targets switch(bio_state) @@ -320,7 +314,7 @@ if(BIO_JUST_BONE) if(wounding_type == WOUND_SLASH) wounding_type = WOUND_BLUNT - phantom_wounding_dmg *= (easy_dismember ? 1 : 0.5) + phantom_wounding_dmg *= (easy_dismember ? 1 : 0.6) else if(wounding_type == WOUND_PIERCE) wounding_type = WOUND_BLUNT phantom_wounding_dmg *= (easy_dismember ? 1 : 0.75) @@ -334,7 +328,7 @@ if(mangled_state == BODYPART_MANGLED_FLESH && sharpness) playsound(src, "sound/effects/wounds/crackandbleed.ogg", 100) if(wounding_type == WOUND_SLASH && !easy_dismember) - phantom_wounding_dmg *= 0.5 // edged weapons pass along 50% of their wounding damage to the bone since the power is spread out over a larger area + phantom_wounding_dmg *= 0.6 // edged weapons pass along 60% of their wounding damage to the bone since the power is spread out over a larger area if(wounding_type == WOUND_PIERCE && !easy_dismember) phantom_wounding_dmg *= 0.75 // piercing weapons pass along 75% of their wounding damage to the bone since it's more concentrated wounding_type = WOUND_BLUNT @@ -356,23 +350,24 @@ * * bare_wound_bonus- The bare_wound_bonus of an attack */ /obj/item/bodypart/proc/check_wounding(woundtype, damage, wound_bonus, bare_wound_bonus) - // actually roll wounds if applicable + // note that these are fed into an exponent, so these are magnified if(HAS_TRAIT(owner, TRAIT_EASYLIMBWOUND)) damage *= 1.5 else damage = min(damage, WOUND_MAX_CONSIDERED_DAMAGE) + if(HAS_TRAIT(owner,TRAIT_HARDLIMBWOUND)) - damage *= 0.9 + damage *= 0.85 if(HAS_TRAIT(owner, TRAIT_EASYDISMEMBER)) - damage *= 1.25 + damage *= 1.1 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] - if(injury_roll > WOUND_DISMEMBER_OUTRIGHT_THRESH && (get_damage() / max_damage * 50)) + 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) return @@ -446,9 +441,9 @@ // unlike normal armor checks, we tabluate these piece-by-piece manually so we can also pass on appropriate damage the clothing's limbs if necessary armor_ablation += C.armor.getRating(WOUND) if(wounding_type == WOUND_SLASH) - C.take_damage_zone(body_zone, damage, BRUTE, armour_penetration) + C.take_damage_zone(body_zone, damage, BRUTE) else if(wounding_type == WOUND_BURN && damage >= 10) // lazy way to block freezing from shredding clothes without adding another var onto apply_damage() - C.take_damage_zone(body_zone, damage, BURN, armour_penetration) + C.take_damage_zone(body_zone, damage, BURN) if(!armor_ablation) injury_mod += bare_wound_bonus diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 37668288362..07b5bff1253 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -59,7 +59,6 @@ if(HAS_TRAIT(C, TRAIT_NODISMEMBER)) return FALSE . = list() - var/organ_spilled = 0 var/turf/T = get_turf(C) C.add_splatter_floor(T) playsound(get_turf(C), 'sound/misc/splort.ogg', 80, TRUE) @@ -70,16 +69,11 @@ continue O.Remove(C) O.forceMove(T) - organ_spilled = 1 . += X if(cavity_item) cavity_item.forceMove(T) . += cavity_item cavity_item = null - organ_spilled = 1 - - if(organ_spilled) - C.visible_message("[C]'s internal organs spill out onto the floor!") @@ -177,7 +171,7 @@ /** * try_dismember() is used, once we've confirmed that a flesh and bone bodypart has both the skin and bone mangled, to actually roll for it * - * Mangling is described in the above proc, [/obj/item/bodypart/proc/get_mangled_state()]. This simply makes the roll for whether we actually dismember or not + * Mangling is described in the above proc, [/obj/item/bodypart/proc/get_mangled_state]. This simply makes the roll for whether we actually dismember or not * using how damaged the limb already is, and how much damage this blow was for. If we have a critical bone wound instead of just a severe, we add +10% to the roll. * Lastly, we choose which kind of dismember we want based on the wounding type we hit with. Note we don't care about all the normal mods or armor for this * @@ -191,17 +185,16 @@ if(wounding_dmg < DISMEMBER_MINIMUM_DAMAGE) return - var/base_chance = wounding_dmg + (get_damage() / max_damage * 50) // how much damage we dealt with this blow, + 50% of the damage percentage we already had on this bodypart - if(locate(/datum/wound/blunt/critical) in wounds) // we only require a severe bone break, but if there's a critical bone break, we'll add 10% more - base_chance += 10 + var/base_chance = wounding_dmg + base_chance += (get_damage() / max_damage * 50) // how much damage we dealt with this blow, + 50% of the damage percentage we already had on this bodypart - if(!prob(base_chance)) - return + if(locate(/datum/wound/blunt/critical) in wounds) // we only require a severe bone break, but if there's a critical bone break, we'll add 15% more + base_chance += 15 - var/datum/wound/loss/dismembering = new - dismembering.apply_dismember(src, wounding_type) - - return TRUE + if(prob(base_chance)) + var/datum/wound/loss/dismembering = new + dismembering.apply_dismember(src, wounding_type) + return TRUE //when a limb is dropped, the internal organs are removed from the mob and put into the limb /obj/item/organ/proc/transfer_to_limb(obj/item/bodypart/LB, mob/living/carbon/C) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index aa35dd70646..a9d377f0d8d 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -94,7 +94,7 @@ /obj/item/bodypart/head/can_dismember(obj/item/I) - if(owner && owner.stat <= HARD_CRIT) + if(owner.stat < HARD_CRIT) return FALSE return ..() diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index a84cb1a2c2f..40cf4b50b16 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -14,7 +14,7 @@ wound_resistance = 10 /obj/item/bodypart/chest/can_dismember(obj/item/I) - if(owner.stat <= HARD_CRIT || !get_organs()) + if(owner.stat < HARD_CRIT || !get_organs()) return FALSE return ..() diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index bd58c70c3f9..2a32e3b1887 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -105,6 +105,9 @@ attack_verb_simple = list("drill") tool_behaviour = TOOL_DRILL toolspeed = 1 + sharpness = SHARP_POINTY + wound_bonus = 10 + bare_wound_bonus = 10 /obj/item/surgicaldrill/suicide_act(mob/user) user.visible_message("[user] rams [src] into [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide!") @@ -143,7 +146,8 @@ sharpness = SHARP_EDGED tool_behaviour = TOOL_SCALPEL toolspeed = 1 - bare_wound_bonus = 20 + wound_bonus = 15 + bare_wound_bonus = 15 /obj/item/scalpel/Initialize() . = ..() @@ -180,8 +184,8 @@ sharpness = SHARP_EDGED tool_behaviour = TOOL_SAW toolspeed = 1 - wound_bonus = 10 - bare_wound_bonus = 15 + wound_bonus = 15 + bare_wound_bonus = 10 /obj/item/circular_saw/Initialize() . = ..()