diff --git a/code/__DEFINES/combat/block_parry.dm b/code/__DEFINES/combat/block_parry.dm index 87e9fed8ff..1ec5b8ebd9 100644 --- a/code/__DEFINES/combat/block_parry.dm +++ b/code/__DEFINES/combat/block_parry.dm @@ -23,6 +23,9 @@ GLOBAL_LIST_INIT(dir2blockdir, list( #define DIR2BLOCKDIR(d) (GLOB.dir2blockdir["[d]"]) +/// If this is the value of active_block_starting it signals we want to interrupt the start +#define ACTIVE_BLOCK_STARTING_INTERRUPT "INTERRUPT" + /// ""types"" of parry "items" #define UNARMED_PARRY "unarmed" #define MARTIAL_PARRY "martial" diff --git a/code/modules/mob/living/living_active_block.dm b/code/modules/mob/living/living_active_block.dm index a5845046ca..d4155bd6a7 100644 --- a/code/modules/mob/living/living_active_block.dm +++ b/code/modules/mob/living/living_active_block.dm @@ -54,6 +54,9 @@ 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/proc/continue_starting_active_block() + return active_block_starting != ACTIVE_BLOCK_STARTING_INTERRUPT + /mob/living/get_standard_pixel_x_offset() . = ..() if(active_blocking || active_block_starting) @@ -74,7 +77,7 @@ * Proc called by keybindings to toggle active blocking. */ /mob/living/proc/keybind_toggle_active_blocking() - if(active_blocking) + if(active_blocking || active_block_starting) return keybind_stop_active_blocking() else return keybind_start_active_blocking() @@ -99,9 +102,10 @@ 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) - if(!do_after_advanced(src, delay, src, DO_AFTER_REQUIRES_USER_ON_TURF|DO_AFTER_NO_COEFFICIENT|DO_AFTER_DISALLOW_ACTIVE_ITEM_CHANGE, null, MOBILITY_USE, COMBAT_FLAG_COMBAT_ACTIVE, null, I)) + if(!do_after_advanced(src, delay, src, DO_AFTER_REQUIRES_USER_ON_TURF|DO_AFTER_NO_COEFFICIENT|DO_AFTER_DISALLOW_ACTIVE_ITEM_CHANGE, CALLBACK(src, .proc/continue_starting_active_block), MOBILITY_USE, COMBAT_FLAG_COMBAT_ACTIVE, null, I)) to_chat(src, "You fail to raise [src].") animate(src, pixel_x = get_standard_pixel_x_offset(), pixel_y = get_standard_pixel_y_offset(), time = 2.5, FALSE, SINE_EASING | EASE_IN, ANIMATION_END_NOW) + active_block_starting = FALSE return active_block_starting = FALSE start_active_blocking(I) @@ -110,6 +114,8 @@ * Proc called by keybindings to stop active blocking. */ /mob/living/proc/keybind_stop_active_blocking() + if(active_block_starting) + active_block_starting = ACTIVE_BLOCK_STARTING_INTERRUPT stop_active_blocking(FALSE) return TRUE