diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2574c11415c..7c61b5d152f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -575,10 +575,16 @@ obj/item/proc/item_action_slot_check(slot, mob/user) /obj/item/proc/is_sharp() return sharpness -/obj/item/proc/can_dismember() - if((sharpness || damtype == BURN) && w_class >= 3) - return 1 - return 0 +/obj/item/proc/get_dismemberment_chance(obj/item/bodypart/affecting) + if(affecting.can_dismember(src)) + if((sharpness || damtype == BURN) && w_class >= 3) + . = force*(w_class-1) + +/obj/item/proc/get_dismember_sound() + if(damtype == BURN) + . = 'sound/weapons/sear.ogg' + else + . = pick('sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg') /obj/item/proc/open_flame() var/turf/location = loc diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 7be9a8efa30..6cc8b76cb8a 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -390,9 +390,9 @@ var/datum/action/A = X A.UpdateButtonIcon() -/obj/item/weapon/twohanded/required/chainsaw/can_dismember() - return wielded - +/obj/item/weapon/twohanded/required/chainsaw/get_dismemberment_chance() + if(wielded) + . = ..() //GREY TIDE /obj/item/weapon/twohanded/spear/grey_tide diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 2976c5809a8..ec8ae177cfa 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1035,20 +1035,10 @@ return 0 //item force is zero //dismemberment - if(affecting.get_damage() >= (affecting.max_damage - I.armour_penetration/2)) - if(I.can_dismember() && prob(I.force*(I.w_class-1))) - if(affecting.dismember(I.damtype)) - I.add_blood(H) - switch(I.damtype) - if(BURN) - playsound(get_turf(H), 'sound/weapons/sear.ogg', 80, 1) - else - playsound(get_turf(H), pick('sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg'), 80, 1) - affecting.add_blood(H) - var/turf/location = H.loc - if(istype(location)) - location.add_blood(H) - return + if(prob(I.get_dismemberment_chance(affecting))) + if(affecting.dismember(I.damtype)) + I.add_blood(H) + playsound(get_turf(H), I.get_dismember_sound(), 80, 1) var/bloody = 0 if(((I.damtype == BRUTE) && I.force && prob(25 + (I.force * 2)))) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 8bb62fdc933..0a19f15eed6 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -1,4 +1,6 @@ +/obj/item/bodypart/proc/can_dismember(obj/item/I) + . = (get_damage() >= (max_damage - I.armour_penetration/2)) //Dismember a limb /obj/item/bodypart/proc/dismember(dam_type = BRUTE) @@ -15,6 +17,10 @@ if(dam_type == BURN) burn() return 1 + add_blood(H) + var/turf/location = H.loc + if(istype(location)) + location.add_blood(H) var/direction = pick(cardinal) var/t_range = rand(2,max(throw_range/2, 2)) var/turf/target_turf = get_turf(src)