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()
. = ..()