From 6b692feff092039f36457b325acf9614ccece2e2 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Wed, 18 Jun 2014 10:28:23 -0400 Subject: [PATCH] Armour can turn sharp attacks into blunt ones Kind of messy, but I couldn't find another way to do it without reworking a lot of the mob defence procs. --- code/modules/mob/living/carbon/human/human_defense.dm | 8 +++++++- code/modules/mob/living/living_defense.dm | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 88ced1da73b..591a5d70092 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -256,10 +256,16 @@ emp_act visible_message("\red [src] has been attacked in the [hit_area] with [I.name] by [user]!") var/armor = run_armor_check(affecting, "melee", "Your armor has protected your [hit_area].", "Your armor has softened hit to your [hit_area].") + var/weapon_sharp = is_sharp(I) + var/weapon_edge = has_edge(I) + if ((weapon_sharp || weapon_edge) && prob(getarmor(def_zone, "melee"))) + weapon_sharp = 0 + weapon_edge = 0 + if(armor >= 2) return 0 if(!I.force) return 0 - apply_damage(I.force, I.damtype, affecting, armor , is_sharp(I), has_edge(I), I) + apply_damage(I.force, I.damtype, affecting, armor , sharp=weapon_sharp, edge=weapon_edge, I) var/bloody = 0 if(((I.damtype == BRUTE) || (I.damtype == HALLOSS)) && prob(25 + (I.force * 2))) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index d15c2cf6dc9..145eba0f381 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -54,8 +54,14 @@ signaler.signal() */ var/absorb = run_armor_check(def_zone, P.flag) + var/proj_sharp = is_sharp(P) + var/proj_edge = has_edge(P) + if ((proj_sharp || proj_edge) && prob(getarmor(def_zone, P.flag))) + proj_sharp = 0 + proj_edge = 0 + if(!P.nodamage) - apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=is_sharp(P), edge=has_edge(P)) + apply_damage(P.damage, P.damage_type, def_zone, absorb, 0, P, sharp=proj_sharp, edge=proj_edge) P.on_hit(src, absorb, def_zone) if(istype(P, /obj/item/projectile/beam/lightning)) if(P.damage >= 200)