diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/dualsaber.dm index e5e97d2b2b..cf5c3d4fc5 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/dualsaber.dm @@ -51,6 +51,10 @@ // no attacking while blocking block_lock_attacking = TRUE block_projectile_mitigation = 75 + // more efficient vs projectiles + block_stamina_efficiency_override = list( + TEXT_ATTACK_TYPE_PROJECTILE = 4 + ) parry_time_windup = 0 parry_time_active = 8 @@ -65,14 +69,20 @@ parry_imperfect_falloff_percent = 10 parry_efficiency_to_counterattack = 100 parry_efficiency_considered_successful = 25 // VERY generous - parry_efficiency_perfect = 90 parry_failed_stagger_duration = 3 SECONDS parry_failed_clickcd_duration = CLICK_CD_MELEE - // more efficient vs projectiles - block_stamina_efficiency_override = list( - TEXT_ATTACK_TYPE_PROJECTILE = 4 - ) +/obj/item/dualsaber/active_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return, override_direction) + if((attack_type & ATTACK_TYPE_PROJECTILE) && is_energy_reflectable_projectile(object)) + block_return[BLOCK_RETURN_REDIRECT_METHOD] = REDIRECT_METHOD_RETURN_TO_SENDER + return BLOCK_SUCCESS | BLOCK_REDIRECTED | BLOCK_SHOULD_REDIRECT + return ..() + +/obj/item/dualsaber/on_active_parry(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/block_return, parry_efficiency, parry_time) + . = ..() + if(parry_efficiency >= 90) // perfect parry + block_return[BLOCK_RETURN_REDIRECT_METHOD] = REDIRECT_METHOD_RETURN_TO_SENDER + . |= BLOCK_SHOULD_REDIRECT /obj/item/dualsaber/Initialize() . = ..() diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index e7dc636cf3..b5f8612244 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -297,7 +297,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 parry_time_perfect = 1.5 parry_time_perfect_leeway = 1 parry_imperfect_falloff_percent = 7.5 - parry_efficiency_to_counterattack = 100 + parry_efficiency_to_counterattack = 120 parry_efficiency_considered_successful = 65 // VERY generous parry_efficiency_perfect = 120 parry_efficiency_perfect_override = list( @@ -306,13 +306,13 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 parry_failed_stagger_duration = 3 SECONDS parry_data = list( PARRY_COUNTERATTACK_MELEE_ATTACK_CHAIN = 2.5, // 7*2.5 = 17.5, 8*2.5 = 20, 9*2.5 = 22.5, 10*2.5 = 25 - ) + ) /datum/block_parry_data/bokken/quick_parry // emphasizing REALLY SHORT PARRIES parry_stamina_cost = 6 // still more costly than most parries, but less than a full bokken parry parry_time_active = 5 // REALLY small parry window parry_time_perfect = 2.5 // however... - parry_time_perfect_leeway = 2.5 // the entire time, the parry is perfect + parry_time_perfect_leeway = 2 // the entire time, the parry is perfect parry_failed_stagger_duration = 1 SECONDS parry_failed_clickcd_duration = 1 SECONDS // more forgiving punishments for missed parries // still, don't fucking miss your parries or you're down stamina and staggered to shit diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index a09d890f69..a6f456ce6f 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -183,7 +183,6 @@ attack_verb = list("stabbed", "diced", "sliced", "cleaved", "chopped", "lacerated", "cut", "jabbed", "punctured") icon_state = "crusher-glaive" item_state = "crusher0-glaive" - item_flags = ITEM_CAN_PARRY block_parry_data = /datum/block_parry_data/crusherglaive //ideas: altclick that lets you pummel people with the handguard/handle? //parrying functionality? @@ -217,6 +216,16 @@ if(owner.Adjacent(attacker) && (!attacker.anchored || ismegafauna(attacker))) // free backstab, if you perfect parry attacker.dir = get_dir(owner,attacker) +/// triggered on wield of two handed item +/obj/item/kinetic_crusher/glaive/on_wield(obj/item/source, mob/user) + wielded = TRUE + item_flags |= (ITEM_CAN_PARRY) + +/// triggered on unwield of two handed item +/obj/item/kinetic_crusher/glaive/on_unwield(obj/item/source, mob/user) + wielded = FALSE + item_flags &= ~(ITEM_CAN_PARRY) + /obj/item/kinetic_crusher/glaive/update_icon_state() item_state = "crusher[wielded]-glaive" // this is not icon_state and not supported by 2hcomponent