From 181d282848b6ff78cb6577db376607a810dc1fcf Mon Sep 17 00:00:00 2001
From: hal9000PR <69320440+hal9000PR@users.noreply.github.com>
Date: Sun, 14 Mar 2021 13:03:30 +0000
Subject: [PATCH] Adds a cancel combo button for krav maga (#15543)
* pew pew
* uhhh yes
* tumblr moment
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
---
.../combos/krav_maga/leg_sweep.dm | 1 +
.../combos/krav_maga/lung_punch.dm | 1 +
.../combos/krav_maga/neck_chop.dm | 3 ++-
code/modules/martial_arts/krav_maga.dm | 20 ++++++++++++++++++-
code/modules/martial_arts/martial.dm | 1 +
5 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/code/modules/martial_arts/combos/krav_maga/leg_sweep.dm b/code/modules/martial_arts/combos/krav_maga/leg_sweep.dm
index 0defb3e9eff..596da4533f6 100644
--- a/code/modules/martial_arts/combos/krav_maga/leg_sweep.dm
+++ b/code/modules/martial_arts/combos/krav_maga/leg_sweep.dm
@@ -11,4 +11,5 @@
target.apply_damage(5, BRUTE)
target.Weaken(2)
add_attack_logs(user, target, "Melee attacked with martial-art [src] : Leg Sweep", ATKLOG_ALL)
+ user.mind.martial_art.in_stance = FALSE
return MARTIAL_COMBO_DONE_CLEAR_COMBOS
diff --git a/code/modules/martial_arts/combos/krav_maga/lung_punch.dm b/code/modules/martial_arts/combos/krav_maga/lung_punch.dm
index e71289f9174..8f91e82c253 100644
--- a/code/modules/martial_arts/combos/krav_maga/lung_punch.dm
+++ b/code/modules/martial_arts/combos/krav_maga/lung_punch.dm
@@ -9,4 +9,5 @@
target.AdjustLoseBreath(5)
target.adjustOxyLoss(10)
add_attack_logs(user, target, "Melee attacked with martial-art [src] : Lung Punch", ATKLOG_ALL)
+ user.mind.martial_art.in_stance = FALSE
return MARTIAL_COMBO_DONE_CLEAR_COMBOS
diff --git a/code/modules/martial_arts/combos/krav_maga/neck_chop.dm b/code/modules/martial_arts/combos/krav_maga/neck_chop.dm
index c0e2f71b6a5..343222bd6a6 100644
--- a/code/modules/martial_arts/combos/krav_maga/neck_chop.dm
+++ b/code/modules/martial_arts/combos/krav_maga/neck_chop.dm
@@ -6,7 +6,8 @@
target.visible_message("[user] karate chops [target]'s neck!", \
"[user] karate chops your neck, rendering you unable to speak for a short time!")
playsound(get_turf(user), 'sound/effects/hit_punch.ogg', 50, 1, -1)
- target.apply_damage(5, BRUTE)
+ target.apply_damage(5, BRUTE, BODY_ZONE_HEAD)
target.AdjustSilence(10)
add_attack_logs(user, target, "Melee attacked with martial-art [src] : Neck Chop", ATKLOG_ALL)
+ user.mind.martial_art.in_stance = FALSE
return MARTIAL_COMBO_DONE_CLEAR_COMBOS
diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm
index c84d89715e5..2388a2d24a4 100644
--- a/code/modules/martial_arts/krav_maga.dm
+++ b/code/modules/martial_arts/krav_maga.dm
@@ -3,6 +3,20 @@
var/datum/action/neck_chop/neckchop = new/datum/action/neck_chop()
var/datum/action/leg_sweep/legsweep = new/datum/action/leg_sweep()
var/datum/action/lung_punch/lungpunch = new/datum/action/lung_punch()
+ var/datum/action/neutral_stance/neutral = new/datum/action/neutral_stance()
+
+/datum/action/neutral_stance
+ name = "Neutral Stance - You relax, cancelling your last Krav Maga stance attack."
+ button_icon_state = "neutralstance"
+
+/datum/action/neutral_stance/Trigger()
+ var/mob/living/carbon/human/H = owner
+ if(!H.mind.martial_art.in_stance)
+ to_chat(owner, "You cannot cancel an attack you haven't prepared!")
+ return
+ to_chat(owner, "You cancel your prepared attack.")
+ owner.visible_message(" [owner] relaxes [owner.p_their()] stance.")
+ H.mind.martial_art.combos.Cut()
/datum/action/neck_chop
name = "Neck Chop - Injures the neck, stopping the victim from speaking for a while."
@@ -18,7 +32,7 @@
H.mind.martial_art.combos.Cut()
H.mind.martial_art.combos.Add(/datum/martial_combo/krav_maga/neck_chop)
H.mind.martial_art.reset_combos()
-
+ H.mind.martial_art.in_stance = TRUE
/datum/action/leg_sweep
name = "Leg Sweep - Trips the victim, rendering them prone and unable to move for a short time."
button_icon_state = "legsweep"
@@ -33,6 +47,7 @@
H.mind.martial_art.combos.Cut()
H.mind.martial_art.combos.Add(/datum/martial_combo/krav_maga/leg_sweep)
H.mind.martial_art.reset_combos()
+ H.mind.martial_art.in_stance = TRUE
/datum/action/lung_punch//referred to internally as 'quick choke'
name = "Lung Punch - Delivers a strong punch just above the victim's abdomen, constraining the lungs. The victim will be unable to breathe for a short time."
@@ -48,11 +63,13 @@
H.mind.martial_art.combos.Cut()
H.mind.martial_art.combos.Add(/datum/martial_combo/krav_maga/lung_punch)
H.mind.martial_art.reset_combos()
+ H.mind.martial_art.in_stance = TRUE
/datum/martial_art/krav_maga/teach(mob/living/carbon/human/H, make_temporary=0)
..()
to_chat(H, "You know the arts of Krav Maga!")
to_chat(H, "Place your cursor over a move at the top of the screen to see what it does.")
+ neutral.Grant(H)
neckchop.Grant(H)
legsweep.Grant(H)
lungpunch.Grant(H)
@@ -60,6 +77,7 @@
/datum/martial_art/krav_maga/remove(mob/living/carbon/human/H)
..()
to_chat(H, "You suddenly forget the arts of Krav Maga...")
+ neutral.Remove(H)
neckchop.Remove(H)
legsweep.Remove(H)
lungpunch.Remove(H)
diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm
index d84ca1cd78b..15f4b7ac837 100644
--- a/code/modules/martial_arts/martial.dm
+++ b/code/modules/martial_arts/martial.dm
@@ -18,6 +18,7 @@
var/list/combos = list() // What combos can the user do? List of combo types
var/list/datum/martial_art/current_combos = list() // What combos are currently (possibly) being performed
var/last_hit = 0 // When the last hit happened
+ var/in_stance = FALSE // If the user is preparing a martial arts stance
/datum/martial_art/New()
. = ..()