From 1a7e812d55ab521cb520429c05d3ac6488a70ebc Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Tue, 24 Mar 2020 19:51:23 -0700 Subject: [PATCH] wip --- .../mob/living/living_blocking_parrying.dm | 45 ++++++++++++++++--- tgstation.dme | 2 + 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/living_blocking_parrying.dm b/code/modules/mob/living/living_blocking_parrying.dm index 5f69ed289c..d95a4d7028 100644 --- a/code/modules/mob/living/living_blocking_parrying.dm +++ b/code/modules/mob/living/living_blocking_parrying.dm @@ -5,17 +5,52 @@ var/parrying = FALSE var/parry_frame = 0 + +GLOBAL_LIST_EMPTY(block_parry_data) + +/proc/get_block_parry_data(type_or_id) + if(ispath(type_or_id)) + . = GLOB.block_parry_data["[type_or_id]"] + if(!.) + . = GLOB.block_parry_data["[type_or_id]"] = new type_or_id + else //text id + return GLOB.block_parry_data["[type_or_id]"] + +/proc/set_block_parry_data(id, datum/block_parry_data/data) + if(ispath(id)) + CRASH("Path-fetching of block parry data is only to grab static data, do not attempt to modify global caches of paths. Use string IDs.") + GLOB.block_parry_data["[id]"] = data + +/// Carries data like list data that would be a waste of memory if we initialized the list on every /item as we can cache datums easier. /datum/block_parry_data + /////////// BLOCKING //////////// + /// See defines. + var/can_block_directions = BLOCK_DIR_NORTH | BLOCK_DIR_NORTHEAST | BLOCK_DIR_NORTHWEST + /// See defines. + var/block_flags = BLOCK_FLAGS_DEFAULT + /// Our slowdown added while blocking + var/block_slowdown = 2 + /// Clickdelay added to user after block ends + var/block_end_click_cd_add = 4 + /// Default damage-to-stamina coefficient, higher is better. + var/block_efficiency = 2 + /// Override damage-to-stamina coefficient, higher is better, this should be list(ATTACK_TYPE_DEFINE = coefficient_number) + var/list/attack_type_block_efficiency + + + /////////// PARRYING //////////// + /obj/item - /// See defines. - var/can_block_directions = BLOCK_DIR_NORTH | BLOCK_DIR_NORTHEAST | BLOCK_DIR_NORTHWEST - /// Defense flags, see __DEFINES/flags.dm + /// Defense flags, see defines. var/defense_flags = NONE + /// Our block parry data. Should be set in init, or something. + var/datum/block_parry_data/block_parry_data + /obj/item/Initialize(mapload) - + block_parry_data = get_block_parry_data(/datum/block_parry_data) return ..() /// This item can be used to parry. Only a basic check used to determine if we should proceed with parry chain at all. @@ -29,7 +64,7 @@ * Gets the list of directions we can block. Include DOWN to block attacks from our same tile. */ /obj/item/proc/blockable_directions() - return can_block_directions + return block_parry_data.can_block_directions /** * Checks if we can block from a specific direction from our direction. diff --git a/tgstation.dme b/tgstation.dme index 2c3b192290..593a6b3141 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -117,6 +117,7 @@ #include "code\__DEFINES\vv.dm" #include "code\__DEFINES\wall_dents.dm" #include "code\__DEFINES\wires.dm" +#include "code\__DEFINES\combat\block_parry.dm" #include "code\__DEFINES\dcs\flags.dm" #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\signals.dm" @@ -2205,6 +2206,7 @@ #include "code\modules\mob\living\life.dm" #include "code\modules\mob\living\living.dm" #include "code\modules\mob\living\living_block.dm" +#include "code\modules\mob\living\living_blocking_parrying.dm" #include "code\modules\mob\living\living_combat.dm" #include "code\modules\mob\living\living_defense.dm" #include "code\modules\mob\living\living_defines.dm"