From 95b2d62e4fb079963388fac6be845f9082db157d Mon Sep 17 00:00:00 2001
From: Paul <90473506+pwbokie@users.noreply.github.com>
Date: Wed, 9 Oct 2024 06:54:03 -0400
Subject: [PATCH] Captain's saber help intent slaps with flat of blade (#26869)
* help intent with the saber slaps
* fix if statements to make papa linter happy
* misc code improvements suggested by contrabang
---------
Signed-off-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
Co-authored-by: DGamerL <108773801+DGamerL@users.noreply.github.com>
---
.../objects/items/weapons/melee/melee_misc.dm | 26 +++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/code/game/objects/items/weapons/melee/melee_misc.dm b/code/game/objects/items/weapons/melee/melee_misc.dm
index 9e6d3d54376..c374a870e6b 100644
--- a/code/game/objects/items/weapons/melee/melee_misc.dm
+++ b/code/game/objects/items/weapons/melee/melee_misc.dm
@@ -39,6 +39,9 @@
hitsound = 'sound/weapons/rapierhit.ogg'
materials = list(MAT_METAL = 1000)
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF // Theft targets should be hard to destroy
+ // values for slapping
+ var/slap_sound = 'sound/effects/woodhit.ogg'
+ COOLDOWN_DECLARE(slap_cooldown)
/obj/item/melee/saber/examine(mob/user)
. = ..()
@@ -58,6 +61,29 @@
AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS)
RegisterSignal(src, COMSIG_PARENT_QDELETING, PROC_REF(alert_admins_on_destroy))
+/obj/item/melee/saber/attack(mob/living/target, mob/living/user)
+ if(user.a_intent != INTENT_HELP || !ishuman(target))
+ return ..()
+ if(!COOLDOWN_FINISHED(src, slap_cooldown))
+ return
+ var/mob/living/carbon/human/H = target
+ if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50))
+ user.visible_message("[user] accidentally slaps [user.p_themselves()] with [src]!", \
+ "You accidentally slap yourself with [src]!")
+ slap(user, user)
+ else
+ user.visible_message("[user] slaps [H] with the flat of the blade!", \
+ "You slap [H] with the flat of the blade!")
+ slap(target, user)
+
+/obj/item/melee/saber/proc/slap(mob/living/carbon/human/target, mob/living/user)
+ user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
+ playsound(loc, slap_sound, 50, TRUE, -1)
+ target.AdjustConfused(4 SECONDS, 0, 4 SECONDS)
+ target.apply_damage(10, STAMINA)
+ add_attack_logs(user, target, "Slapped by [src]", ATKLOG_ALL)
+ COOLDOWN_START(src, slap_cooldown, 4 SECONDS)
+
/obj/item/melee/saber/suicide_act(mob/user)
user.visible_message(pick("[user] is slitting [user.p_their()] stomach open with [src]! It looks like [user.p_theyre()] trying to commit seppuku!", \
"[user] is falling on [src]! It looks like [user.p_theyre()] trying to commit suicide!"))