diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index 33c96483d5b..5e86f27a5d0 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -101,7 +101,13 @@ user.do_attack_animation(target) - target.apply_damage(force * fisto_setting, BRUTE) + var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected)) + if(!affecting) + affecting = target.get_organ("chest") + + var/armor_block = target.run_armor_check(affecting, MELEE) + target.apply_damage(force * fisto_setting, BRUTE, affecting, armor_block) + 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/game/objects/objs.dm b/code/game/objects/objs.dm index 3d11a5dff23..05f3bbb5d02 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -275,12 +275,19 @@ if(mob_hurt) //Density check probably not needed, one should only bump into something if it is dense, and blob tiles are not dense, because of course they are not. return C.visible_message("[C] slams into [src]!", "You slam into [src]!") - C.take_organ_damage(damage) if(!self_hurt) take_damage(damage, BRUTE) + if(issilicon(C)) C.Weaken(3 SECONDS) + C.adjustBruteLoss(damage) else + var/obj/item/organ/external/affecting = C.get_organ(ran_zone(throwingdatum.target_zone)) + if(affecting) + var/armor_block = C.run_armor_check(affecting, MELEE) + C.apply_damage(damage, BRUTE, affecting, armor_block) + else + C.take_organ_damage(damage) C.KnockDown(3 SECONDS) /obj/handle_ricochet(obj/item/projectile/P) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index ae668c0605d..45717aef732 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1126,8 +1126,15 @@ C.adjustBruteLoss(damage) C.Weaken(3 SECONDS) else - C.take_organ_damage(damage) + var/obj/item/organ/external/affecting = C.get_organ(ran_zone(throwingdatum.target_zone)) + if(affecting) + var/armor_block = C.run_armor_check(affecting, MELEE) + C.apply_damage(damage, BRUTE, affecting, armor_block) + else + C.take_organ_damage(damage) + C.KnockDown(3 SECONDS) + C.visible_message("[C] crashes into [src], knocking them both over!", "You violently crash into [src]!") /**