diff --git a/code/modules/mob/living/living_active_block.dm b/code/modules/mob/living/living_active_block.dm
index d96e6fb10a..c0d62f3a49 100644
--- a/code/modules/mob/living/living_active_block.dm
+++ b/code/modules/mob/living/living_active_block.dm
@@ -40,9 +40,13 @@
/// Visual effect setup for starting a directional block
/mob/living/proc/active_block_effect_start()
+ visible_message("[src] raises their [active_block_item], dropping into a defensive stance!")
+ animate(src, pixel_x = get_standard_pixel_x_offset(), pixel_y = get_standard_pixel_y_offset(), time = 2.5, FALSE, SINE_EASING | EASE_OUT)
/// Visual effect cleanup for starting a directional block
/mob/living/proc/active_block_effect_end()
+ visible_message("[src] lowers their [active_block_item].")
+ animate(src, pixel_x = get_standard_pixel_x_offset(), pixel_y = get_standard_pixel_y_offset(), time = 2.5, FALSE, SINE_EASING | EASE_IN)
/mob/living/get_standard_pixel_x_offset()
. = ..()
@@ -62,7 +66,7 @@
/// 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(I.block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data(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]
@@ -87,7 +91,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(I.block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
var/efficiency = data.block_stamina_efficiency_override[attack_type]
if(isnull(efficiency))
efficiency = data.block_stamina_efficiency
@@ -95,7 +99,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(I.block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
if(iscarbon(owner))
var/mob/living/carbon/C = owner
var/held_index = C.get_held_index_of_item(src)
@@ -121,6 +125,7 @@
var/incoming_direction = get_dir(get_turf(attacker) || get_turf(object), src)
if(!can_block_direction(owner.dir, incoming_direction))
return
+ var/datum/block_parry_data/data = get_block_parry_data(block_parry_data)
block_return[BLOCK_RETURN_ACTIVE_BLOCK] = TRUE
var/damage_mitigated = active_block_damage_mitigation(owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return)
var/final_damage = max(0, damage - damage_mitigated)
@@ -134,6 +139,8 @@
owner.visible_message("[owner] blocks \the [attack_text] with [src]!")
else
owner.visible_message("[owner] dampens \the [attack_text] with [src]!")
+ if(length(data.block_sounds))
+ 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))
@@ -148,7 +155,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(I.block_parry_data)
+ var/datum/block_parry_data/data = get_block_parry_data(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 9c9c72bfab..eb722973f0 100644
--- a/code/modules/mob/living/living_blocking_parrying.dm
+++ b/code/modules/mob/living/living_blocking_parrying.dm
@@ -79,6 +79,9 @@ GLOBAL_LIST_EMPTY(block_parry_data)
/// Stamina dealt directly via adjustStaminaLossBuffered() per SECOND of block.
var/block_stamina_cost_per_second = 1.5
+ /// Sounds for blocking
+ var/list/block_sounds = list('sound/block_parry/block_metal1.ogg' = 1, 'sound/block_parry/block_metal1.ogg' = 1)
+
/////////// PARRYING ////////////
/// Prioriry for [mob/do_run_block()] while we're being used to parry.
// None - Parry is always highest priority!
diff --git a/sound/block_parry/block_metal1.ogg b/sound/block_parry/block_metal1.ogg
new file mode 100644
index 0000000000..c0f98249cd
Binary files /dev/null and b/sound/block_parry/block_metal1.ogg differ
diff --git a/sound/block_parry/block_metal2.ogg b/sound/block_parry/block_metal2.ogg
new file mode 100644
index 0000000000..58c1233cea
Binary files /dev/null and b/sound/block_parry/block_metal2.ogg differ
diff --git a/sound/block_parry/sfx-parry.ogg b/sound/block_parry/sfx-parry.ogg
new file mode 100644
index 0000000000..3429031bd9
Binary files /dev/null and b/sound/block_parry/sfx-parry.ogg differ