From 50ccfd2f4e5a520b92a2073b335155ad4fb94c01 Mon Sep 17 00:00:00 2001 From: Alberyk Date: Sun, 22 Dec 2019 10:10:44 -0300 Subject: [PATCH] Changes how dismemberment is handled a bit (#7735) -fixes heads and groin never being cut off at all -removed the brute and burn armor check, the damage that is take in consideration here is already reduced by the armor in the basic attack procs -removed the maim mallus from the head and groin -gives more hp to hands and feet to make sure they can survive the armor bonus loss --- code/modules/organs/organ_external.dm | 48 ++++++++++-------------- code/modules/organs/subtypes/standard.dm | 6 +-- html/changelogs/alberyk-limbgib.yml | 7 ++++ 3 files changed, 29 insertions(+), 32 deletions(-) create mode 100644 html/changelogs/alberyk-limbgib.yml diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index b69bbb185cb..1ecdfd86408 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -378,39 +378,31 @@ /obj/item/organ/external/proc/handle_limb_gibbing(var/used_weapon,var/brute,var/burn) //If limb took enough damage, try to cut or tear it off if(owner && loc == owner && !is_stump()) - if(!cannot_amputate && config.limbs_can_break && (brute_dam + burn_dam) >= (max_damage * config.organ_health_multiplier)) + if(!cannot_amputate && config.limbs_can_break) - var/brute_armor_value = 0 - var/burn_armor_value = 0 - var/edge_eligible = 0 - var/maim_bonus = 0 + if((brute_dam + burn_dam) >= (max_damage * config.organ_health_multiplier)) - var/mob/living/carbon/human/H - if(istype(owner,/mob/living/carbon/human)) - H = owner - brute_armor_value = H.getarmor_organ(src, "melee") - burn_armor_value = H.getarmor_organ(src, "burn") + var/edge_eligible = 0 + var/maim_bonus = 0 - if(istype(used_weapon,/obj/item)) - var/obj/item/W = used_weapon - if(isprojectile(W)) - var/obj/item/projectile/P = W - brute_armor_value = H.getarmor_organ(src, "bullet") - maim_bonus += P.maim_rate - else if(W.w_class >= w_class && edge) + if(istype(used_weapon,/obj/item)) + var/obj/item/W = used_weapon + if(isprojectile(W)) + var/obj/item/projectile/P = W + maim_bonus += P.maim_rate + else if(W.w_class >= w_class && edge) + edge_eligible = 1 + else if(edge) edge_eligible = 1 - else if(edge) - edge_eligible = 1 - - if(edge_eligible && brute >= max_damage / (DROPLIMB_THRESHOLD_EDGE + maim_bonus) && brute >= brute_armor_value) - droplimb(0, DROPLIMB_EDGE) - else if(burn >= max_damage / (DROPLIMB_THRESHOLD_DESTROY + maim_bonus) && burn >= burn_armor_value) - droplimb(0, DROPLIMB_BURN) - else if(brute >= max_damage / (DROPLIMB_THRESHOLD_DESTROY + maim_bonus) && brute >= brute_armor_value) - droplimb(0, DROPLIMB_BLUNT) - else if(brute >= max_damage / (DROPLIMB_THRESHOLD_TEAROFF + maim_bonus) && brute >= brute_armor_value) - droplimb(0, DROPLIMB_EDGE) + if(edge_eligible && brute >= max_damage / (DROPLIMB_THRESHOLD_EDGE + maim_bonus)) + droplimb(0, DROPLIMB_EDGE) + else if(burn >= max_damage / (DROPLIMB_THRESHOLD_DESTROY + maim_bonus)) + droplimb(0, DROPLIMB_BURN) + else if(brute >= max_damage / (DROPLIMB_THRESHOLD_DESTROY + maim_bonus)) + droplimb(0, DROPLIMB_BLUNT) + else if(brute >= max_damage / (DROPLIMB_THRESHOLD_TEAROFF + maim_bonus)) + droplimb(0, DROPLIMB_EDGE) /obj/item/organ/external/heal_damage(brute, burn, internal = 0, robo_repair = 0) if(status & ORGAN_ROBOT && !robo_repair) diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 171e891f729..9d1d960c1c0 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -36,7 +36,6 @@ artery_name = "iliac artery" dislocated = -1 gendered_icon = 1 - maim_bonus = 0.25 /obj/item/organ/external/arm limb_name = "l_arm" @@ -95,7 +94,7 @@ limb_name = "l_foot" name = "left foot" icon_name = "l_foot" - max_damage = 30 + max_damage = 35 min_broken_damage = 15 w_class = 2 body_part = FOOT_LEFT @@ -125,7 +124,7 @@ limb_name = "l_hand" name = "left hand" icon_name = "l_hand" - max_damage = 30 + max_damage = 35 min_broken_damage = 15 w_class = 2 body_part = HAND_LEFT @@ -170,7 +169,6 @@ gendered_icon = 1 encased = "skull" var/can_intake_reagents = 1 - maim_bonus = 0.33 /obj/item/organ/external/head/removed() if(owner) diff --git a/html/changelogs/alberyk-limbgib.yml b/html/changelogs/alberyk-limbgib.yml new file mode 100644 index 00000000000..294bea5aa2e --- /dev/null +++ b/html/changelogs/alberyk-limbgib.yml @@ -0,0 +1,7 @@ +author: Alberyk + +delete-after: True + +changes: + - bugfix: "Fixed heads and groins being nearly impossible to dismember." + - tweak: "Hands and feet can take more punishment before being dismembered."