From 18bef15afce523417854a487be3f8898f5b39abe Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Fri, 29 May 2020 02:36:13 -0700 Subject: [PATCH] captain rapier --- code/game/objects/items/melee/misc.dm | 13 +++++++++++++ code/modules/mob/living/living_active_block.dm | 2 ++ code/modules/mob/living/living_active_parry.dm | 2 ++ code/modules/mob/living/living_blocking_parrying.dm | 4 ++++ 4 files changed, 21 insertions(+) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index a3ea433fda..374410c333 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -68,6 +68,19 @@ hitsound = 'sound/weapons/rapierhit.ogg' custom_materials = list(/datum/material/iron = 1000) total_mass = 3.4 + item_flags = NEEDS_PERMIT | ITEM_CAN_PARRY + block_parry_data = /datum/block_parry_data/captain_saber + +/datum/block_parry_data/captain_saber + parry_time_windup = 1 + parry_time_active = 3 + parry_time_spindown = 1 + parry_time_perfect = 2.5 + parry_time_perfect_leeway = 0.5 + parry_imperfect_falloff_percent = 20 + parry_efficiency_perfect = 100 + parry_failed_stagger_duration = 3 SECONDS + parry_failed_clickcd_duration = 2 SECONDS /obj/item/melee/sabre/Initialize() . = ..() diff --git a/code/modules/mob/living/living_active_block.dm b/code/modules/mob/living/living_active_block.dm index 9e6ee176f3..9200dd3ca4 100644 --- a/code/modules/mob/living/living_active_block.dm +++ b/code/modules/mob/living/living_active_block.dm @@ -184,6 +184,8 @@ if(!can_active_block()) return BLOCK_NONE var/datum/block_parry_data/data = get_block_parry_data() + if(attack_type && !(attack_type & data.can_block_attack_types)) + return BLOCK_NONE var/incoming_direction if(isnull(override_direction)) if(istype(object, /obj/item/projectile)) diff --git a/code/modules/mob/living/living_active_parry.dm b/code/modules/mob/living/living_active_parry.dm index 91d759e462..9ccb43ff45 100644 --- a/code/modules/mob/living/living_active_parry.dm +++ b/code/modules/mob/living/living_active_parry.dm @@ -174,6 +174,8 @@ if(stage == NOT_PARRYING) return BLOCK_NONE var/datum/block_parry_data/data = get_parry_data() + if(attack_type && !(attack_type & data.parry_attack_types)) + return BLOCK_NONE var/efficiency = get_parry_efficiency(attack_type) switch(parrying) if(ITEM_PARRY) diff --git a/code/modules/mob/living/living_blocking_parrying.dm b/code/modules/mob/living/living_blocking_parrying.dm index 57dc7e81c9..81f6208793 100644 --- a/code/modules/mob/living/living_blocking_parrying.dm +++ b/code/modules/mob/living/living_blocking_parrying.dm @@ -25,6 +25,8 @@ GLOBAL_LIST_EMPTY(block_parry_data) /// See defines. Point of reference is someone facing north. var/can_block_directions = BLOCK_DIR_NORTH | BLOCK_DIR_NORTHEAST | BLOCK_DIR_NORTHWEST + /// Attacks we can block + var/can_block_attack_types = ALL /// Our slowdown added while blocking var/block_slowdown = 2 /// Clickdelay added to user after block ends @@ -89,6 +91,8 @@ GLOBAL_LIST_EMPTY(block_parry_data) var/parry_respect_clickdelay = TRUE /// Parry stamina cost var/parry_stamina_cost = 5 + /// Attack types we can block + var/parry_attack_types = ALL /// Parry windup duration in deciseconds. 0 to this is windup, afterwards is main stage. var/parry_time_windup = 2