anchor.diff:  	visible_message("<span class='danger'>[src] parries [attack_text][length(effect_text)? ", [english_list(effect_text)] [attacker]" : ""][length(effect_text) && knockdown_check? " and" : ""][knockdown_check? " knocking them to the ground" : ""]!</span>")
   
   /// 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(), parry_efficiency)
  +/mob/living/proc/run_parry_countereffects(atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/return_list = list(), parry_efficiency, datum/block_parry_data/data)
   	if(!isliving(attacker))
   		return
   	var/mob/living/L = attacker
  -	var/datum/block_parry_data/data = get_parry_data()
  +	if(!data)
  +		data = get_parry_data()
   	var/list/effect_text = list()
   	successful_parry_counterattacks |= attacker
   	// Always proc so items can override behavior easily
  
positive.code: 		// recurse back to original
  		return run_parry(object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list, FALSE)
  	else
  		// for single attack block
  		#warn single attack block
  		return FALSE
  
  /**
    * Gets the stage of our parry sequence we're currently in.
  
negative.code: 		return BLOCK_NONE
  	var/datum/block_parry_data/data = return_block_parry_datum(determined[2])
  	if(!data.parry_automatic_enabled || (last_autoparry > (world.time + data.autoparry_cooldown_absolute)))
  		return BLOCK_NONE
  	if(attack_type && !(attack_type & data.parry_attack_types))
  		return BLOCK_NONE
  	// before doing anything, check if the user moused over them properly
  	if(!client)
  