From c365d761fe76d4f39c140581fa3053a2ab1ba9e5 Mon Sep 17 00:00:00 2001 From: Geeves Date: Thu, 26 Mar 2020 22:42:49 +0200 Subject: [PATCH] Unarmed attack fixes (#8509) --- .../mob/living/carbon/human/unarmed_attack.dm | 53 +++++++++---------- .../geeves-unarmed_attack_fixes.yml | 6 +++ 2 files changed, 32 insertions(+), 27 deletions(-) create mode 100644 html/changelogs/geeves-unarmed_attack_fixes.yml diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm index de7a2ffacd8..b6f7d9596fd 100644 --- a/code/modules/mob/living/carbon/human/unarmed_attack.dm +++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm @@ -26,19 +26,19 @@ var/global/list/sparring_attack_cache = list() return sparring_attack_cache[sparring_variant_type] /datum/unarmed_attack/proc/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if(user.restrained()) - return 0 + if(user.restrained() || user.incapacitated()) + return FALSE // Check if they have a functioning hand. var/obj/item/organ/external/E = user.organs_by_name[BP_L_HAND] if(E && !E.is_stump()) - return 1 + return TRUE E = user.organs_by_name[BP_R_HAND] if(E && !E.is_stump()) - return 1 + return TRUE - return 0 + return FALSE /datum/unarmed_attack/proc/get_unarmed_damage() return damage @@ -125,12 +125,13 @@ var/global/list/sparring_attack_cache = list() attack_name = "bite" /datum/unarmed_attack/bite/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - - if (user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) - return 0 - if (user == target && (zone == BP_HEAD || zone == BP_EYES || zone == BP_MOUTH)) - return 0 - return 1 + if(user.incapacitated()) + return FALSE + if(user.wear_mask && istype(user.wear_mask, /obj/item/clothing/mask/muzzle)) + return FALSE + if(user == target && (zone == BP_HEAD || zone == BP_EYES || zone == BP_MOUTH)) + return FALSE + return TRUE /datum/unarmed_attack/punch attack_verb = list("punched") @@ -194,21 +195,21 @@ var/global/list/sparring_attack_cache = list() attack_name = "kick" /datum/unarmed_attack/kick/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - if (user.legcuffed) - return 0 + if(user.legcuffed || user.incapacitated()) + return FALSE if(!(zone in list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT, BP_GROIN))) - return 0 + return FALSE var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT] if(E && !E.is_stump()) - return 1 + return TRUE E = user.organs_by_name[BP_R_FOOT] if(E && !E.is_stump()) - return 1 + return TRUE - return 0 + return FALSE /datum/unarmed_attack/kick/get_unarmed_damage(var/mob/living/carbon/human/user) var/obj/item/clothing/shoes = user.shoes @@ -239,25 +240,23 @@ var/global/list/sparring_attack_cache = list() attack_name = "stomp" /datum/unarmed_attack/stomp/is_usable(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone) - - if (user.legcuffed) - return 0 - + if(user.legcuffed || user.incapacitated()) + return FALSE if(!istype(target)) - return 0 + return FALSE - if (!user.lying && (target.lying || (zone in list(BP_L_FOOT, BP_R_FOOT)))) + if(!user.lying && (target.lying || (zone in list(BP_L_FOOT, BP_R_FOOT)))) if(target.grabbed_by == user && target.lying) - return 0 + return FALSE var/obj/item/organ/external/E = user.organs_by_name[BP_L_FOOT] if(E && !E.is_stump()) - return 1 + return TRUE E = user.organs_by_name[BP_R_FOOT] if(E && !E.is_stump()) - return 1 + return TRUE - return 0 + return FALSE /datum/unarmed_attack/stomp/get_unarmed_damage(var/mob/living/carbon/human/user) var/obj/item/clothing/shoes = user.shoes diff --git a/html/changelogs/geeves-unarmed_attack_fixes.yml b/html/changelogs/geeves-unarmed_attack_fixes.yml new file mode 100644 index 00000000000..a67a27f02be --- /dev/null +++ b/html/changelogs/geeves-unarmed_attack_fixes.yml @@ -0,0 +1,6 @@ +author: Geeves + +delete-after: True + +changes: + - bugfix: "It is now impossible to attack people with unarmed attacks while incapacitated." \ No newline at end of file