diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm
index cc01e6aaee..11c8716bc2 100644
--- a/code/game/objects/items/stunbaton.dm
+++ b/code/game/objects/items/stunbaton.dm
@@ -19,6 +19,8 @@
var/stamforce = 35
var/turned_on = FALSE
var/knockdown = TRUE
+ /// block percent needed to prevent knockdown/disarm
+ var/block_percent_to_counter = 60
var/obj/item/stock_parts/cell/cell
var/hitcost = 750
var/throw_hit_chance = 35
@@ -180,6 +182,7 @@
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
return FALSE
var/stunpwr = stamforce
+ var/countered = return_list[BLOCK_RETURN_MITIGATION_PERCENT] > block_percent_to_counter
stunpwr = block_calculate_resultant_damage(stunpwr, return_list)
var/obj/item/stock_parts/cell/our_cell = get_cell()
if(!our_cell)
@@ -200,10 +203,10 @@
return FALSE
if(!disarming)
- if(knockdown)
+ if(knockdown && !countered)
L.DefaultCombatKnockdown(50, override_stamdmg = 0) //knockdown
L.adjustStaminaLoss(stunpwr)
- else
+ else if(!countered)
L.drop_all_held_items() //no knockdown/stamina damage, instead disarm.
L.apply_effect(EFFECT_STUTTER, stamforce)
@@ -211,9 +214,13 @@
if(user)
L.lastattacker = user.real_name
L.lastattackerckey = user.ckey
- L.visible_message("[user] has [disarming? "disarmed" : "stunned"] [L] with [src]!", \
+ if(!countered)
+ L.visible_message("[user] has [disarming? "disarmed" : "stunned"] [L] with [src]!", \
"[user] has [disarming? "disarmed" : "stunned"] you with [src]!")
- log_combat(user, L, disarming? "disarmed" : "stunned")
+ else
+ L.visible_message("[user] tries to [disarming? "disarm" : "stun"] [L] with [src], but is deflected!", \
+ "[user] tries to [disarming? "disarm" : "stun"] you with [src], but is deflected!")
+ log_combat(user, L, disarming? "disarmed" : "stunned" + countered? " (countered)" : "")
playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1)
@@ -306,7 +313,8 @@
w_class = WEIGHT_CLASS_BULKY
force = 3
throwforce = 5
- stamforce = 25
+ stamforce = 35
+ block_percent_to_counter = 45
hitcost = 1000
throw_hit_chance = 10
slot_flags = ITEM_SLOT_BACK