From c1f5ad310b7d3b9d29afca63437d2b6eb0b47d73 Mon Sep 17 00:00:00 2001
From: kevinz000 <2003111+kevinz000@users.noreply.github.com>
Date: Sat, 11 Apr 2020 09:01:51 -0700
Subject: [PATCH] wew
---
.../modules/mob/living/living_active_block.dm | 34 +++++++++++++------
.../mob/living/living_blocking_parrying.dm | 6 +---
2 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/code/modules/mob/living/living_active_block.dm b/code/modules/mob/living/living_active_block.dm
index d4155bd6a7..db9717a87c 100644
--- a/code/modules/mob/living/living_active_block.dm
+++ b/code/modules/mob/living/living_active_block.dm
@@ -23,7 +23,7 @@
active_block_item = null
REMOVE_TRAIT(src, TRAIT_MOBILITY_NOUSE, ACTIVE_BLOCK_TRAIT)
remove_movespeed_modifier(MOVESPEED_ID_ACTIVE_BLOCK)
- var/datum/block_parry_data/data = get_block_parry_data(I.block_parry_data)
+ var/datum/block_parry_data/data = I.get_block_parry_data()
if(timeToNextMove() < data.block_end_click_cd_add)
changeNext_move(data.block_end_click_cd_add)
return TRUE
@@ -33,7 +33,7 @@
return FALSE
if(!(I in held_items))
return FALSE
- var/datum/block_parry_data/data = get_block_parry_data(I.block_parry_data)
+ var/datum/block_parry_data/data = I.get_block_parry_data()
if(!istype(data)) //Typecheck because if an admin/coder screws up varediting or something we do not want someone being broken forever, the CRASH logs feedback so we know what happened.
CRASH("start_active_blocking called with an item with no valid data: [I] --> [I.block_parry_data]!")
active_blocking = TRUE
@@ -95,10 +95,10 @@
if(!I)
to_chat(src, "You can't block with your bare hands!")
return
- if(!(I.item_flags & ITEM_CAN_BLOCK))
+ if(!(I.can_active_block())
to_chat(src, "[I] is not capable of actively being used to block!")
return
- var/datum/block_parry_data/data = get_block_parry_data(I.block_parry_data)
+ var/datum/block_parry_data/data = I.get_block_parry_data()
var/delay = data.block_start_delay
active_block_starting = TRUE
animate(src, pixel_x = get_standard_pixel_x_offset(), pixel_y = get_standard_pixel_y_offset(), time = delay, FALSE, SINE_EASING | EASE_IN)
@@ -119,9 +119,21 @@
stop_active_blocking(FALSE)
return TRUE
+/**
+ * Gets our datum/block_parry_data
+ */
+/obj/item/proc/get_block_parry_data()
+ return get_block_parray_data(block_parry_data)
+
+/**
+ * Returns if we can actively block.
+ */
+/obj/item/proc/can_active_block()
+ return item_flags & ITEM_CAN_BLOCK
+
/// The amount of damage that is blocked.
/obj/item/proc/active_block_damage_mitigation(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data()
var/absorption = data.block_damage_absorption_override["[attack_type]"]
var/efficiency = data.block_damage_multiplier_override["[attack_type]"]
var/limit = data.block_damage_limit_override["[attack_type]"]
@@ -146,7 +158,7 @@
/// Amount of stamina from damage blocked. Note that the damage argument is damage_blocked.
/obj/item/proc/active_block_stamina_cost(mob/living/owner, atom/object, damage_blocked, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data()
var/efficiency = data.block_stamina_efficiency_override["[attack_type]"]
if(isnull(efficiency))
efficiency = data.block_stamina_efficiency
@@ -159,7 +171,7 @@
/// Apply the stamina damage to our user, notice how damage argument is stamina_amount.
/obj/item/proc/active_block_do_stamina_damage(mob/living/owner, atom/object, stamina_amount, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data()
if(iscarbon(owner))
var/mob/living/carbon/C = owner
var/held_index = C.get_held_index_of_item(src)
@@ -178,9 +190,9 @@
owner.adjustStaminaLossBuffered(stamina_amount)
/obj/item/proc/active_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- if(!CHECK_BITFIELD(item_flags, ITEM_CAN_BLOCK))
+ if(!can_active_block())
return BLOCK_NONE
- var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data()
var/incoming_direction = get_dir(get_turf(attacker) || get_turf(object), src)
if(!CHECK_MOBILITY(owner, MOBILITY_STAND) && !(data.block_resting_attack_types_anydir & attack_type) && (!(data.block_resting_attack_types_directional & attack_type) || !can_block_direction(owner.dir, incoming_direction)))
return BLOCK_NONE
@@ -203,7 +215,7 @@
playsound(loc, pickweight(data.block_sounds), 75, TRUE)
/obj/item/proc/check_active_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return)
- if(!CHECK_BITFIELD(item_flags, ITEM_CAN_BLOCK))
+ if(!can_active_block())
return
var/incoming_direction = get_dir(get_turf(attacker) || get_turf(object), src)
if(!can_block_direction(owner.dir, incoming_direction))
@@ -215,7 +227,7 @@
* Gets the list of directions we can block. Include DOWN to block attacks from our same tile.
*/
/obj/item/proc/blockable_directions()
- var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data()
return data.can_block_directions
/**
diff --git a/code/modules/mob/living/living_blocking_parrying.dm b/code/modules/mob/living/living_blocking_parrying.dm
index 83de7d65c7..4d79eb8c93 100644
--- a/code/modules/mob/living/living_blocking_parrying.dm
+++ b/code/modules/mob/living/living_blocking_parrying.dm
@@ -133,7 +133,6 @@ GLOBAL_LIST_EMPTY(block_parry_data)
return
/// Yadda yadda WIP access block/parry data...
-/*
/mob/living/proc/get_parry_stage()
if(!parrying)
return NOT_PARRYING
@@ -169,12 +168,10 @@ GLOBAL_LIST_EMPTY(block_parry_data)
/mob/living/proc/get_parry_time()
return world.time - parry_start_time
-*/
/// same return values as normal blocking, called with absolute highest priority in the block "chain".
/mob/living/proc/run_parry(atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/return_list = list())
-/*
/// Run counterattack if any
/mob/living/proc/run_parry_countereffects(atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/return_list = list())
var/datum/block_parry_data/data = get_parry_data()
@@ -201,10 +198,9 @@ GLOBAL_LIST_EMPTY(block_parry_data)
/// Gets the datum/block_parry_data we're going to use to parry.
/mob/living/proc/get_parry_data()
if(parrying == ITEM_PARRY)
- return get_block_parry_data(active_parry_item.block_parry_data)
+ return active_parry_item.get_block_parry_data()
else if(parrying == UNARMED_PARRY)
return get_block_parry_data(block_parry_data)
else if(parrying == MARTIAL_PARRY)
return get_block_parry_data(mind.martial_art.block_parry_data)
-*/