From: Lukas Krickl Date: Sun, 14 Sep 2025 03:40:57 +0000 (+0200) Subject: animations: Added new attack animations to all unit types X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=6e4c54b1ee2ab43314b16703b3c5958b23a57411;p=gbrg%2F.git animations: Added new attack animations to all unit types Currently there seems to be an issue where the animations play longer than the timer. --- diff --git a/src/animation.s b/src/animation.s index d90224a..54f6ebe 100644 --- a/src/animation.s +++ b/src/animation.s @@ -1,3 +1,5 @@ +#define ATTACK_ANIM_LEN 32 + player_anim_table: anim_header 32, player_anim_table_f2 anim_ent 0, 8, 0x8C, OAM_FXFLIP @@ -11,25 +13,25 @@ player_anim_table_f2: anim_ent 0, 0, 0x00, 0 player_anim_table_attack_up: - anim_header 32, player_anim_table + anim_header ATTACK_ANIM_LEN, player_anim_table anim_ent 1, 8, 0x8C, OAM_FXFLIP anim_ent 1, 0, 0x8E, OAM_FXFLIP anim_ent -12, 0, ACTION_ATTACK_SPRITE1, 0 player_anim_table_attack_down: - anim_header 32, player_anim_table + anim_header ATTACK_ANIM_LEN, player_anim_table anim_ent 1, 8, 0x8C, OAM_FXFLIP anim_ent 1, 0, 0x8E, OAM_FXFLIP anim_ent 12, 0, ACTION_ATTACK_SPRITE1, 0 player_anim_table_attack_left: - anim_header 32, player_anim_table + anim_header ATTACK_ANIM_LEN, player_anim_table anim_ent 1, 8, 0x8C, OAM_FXFLIP anim_ent 1, 0, 0x8E, OAM_FXFLIP anim_ent 0, -12, ACTION_ATTACK_SPRITE1, 0 player_anim_table_attack_right: - anim_header 32, player_anim_table + anim_header ATTACK_ANIM_LEN, player_anim_table anim_ent 1, 8, 0x8C, OAM_FXFLIP anim_ent 1, 0, 0x8E, OAM_FXFLIP anim_ent 0, 12, ACTION_ATTACK_SPRITE1, 0 @@ -60,37 +62,37 @@ anim_list_guard: ; IDLE NEUTRAL dw unit_demo_guard_anim_table ; ATTACK LEFT - dw unit_demo_guard_anim_table + dw unit_demo_guard_attack_left ; ATTACK RIGHT - dw unit_demo_guard_anim_table + dw unit_demo_guard_attack_right ; ATTACK UP - dw unit_demo_guard_anim_table + dw unit_demo_guard_attack_up ; ATTACK DOWN - dw unit_demo_guard_anim_table + dw unit_demo_guard_attack_down anim_list_dog: ; idle neutral dw unit_demo_dog_anim_table ; attack left - dw unit_demo_dog_anim_table + dw unit_demo_dog_attack_left ; attack right - dw unit_demo_dog_anim_table + dw unit_demo_dog_attack_right ; attack up - dw unit_demo_dog_anim_table + dw unit_demo_dog_attack_up ; attack down - dw unit_demo_dog_anim_table + dw unit_demo_dog_attack_down anim_list_hazmat: ; idle dw unit_demo_hazmat_anim_table ; attack left - dw unit_demo_hazmat_anim_table + dw unit_demo_hazmat_attack_left ; attack right - dw unit_demo_hazmat_anim_table + dw unit_demo_hazmat_attack_right ; attack up - dw unit_demo_hazmat_anim_table + dw unit_demo_hazmat_attack_up ; attack down - dw unit_demo_hazmat_anim_table + dw unit_demo_hazmat_attack_down ; translates tile to screen diff --git a/src/attack.s b/src/attack.s index 8dd23ad..292f1dd 100644 --- a/src/attack.s +++ b/src/attack.s @@ -69,34 +69,14 @@ unit_action_attack_decide_animation: ; de: unit ; returns: ; bc: next action -unit_action_attack: - push de - call unit_action_attack_decide_animation - pop de - - push de +unit_action_attack_finish: - ; check anim length - pop de - ld hl, act_rt_action_dat2 ; dat2 = animation frame count - add hl, de - ld a, [hl] - inc a - ld [hl], a - cp a, UNIT_ACTION_ATTACK_ANIM_LEN - jr z, @done REL - - ; otherwsie keep going - ldnull bc - ret -@done: ; unset flag ld a, [gpf_attack_ongoing] dec a ld [gpf_attack_ongoing], a - - ; set animation timer and delay - ld bc, st_unit_delay_to_active_template + + ldnull bc ret ; performs damage calculations based on the attacked location @@ -105,6 +85,10 @@ unit_action_attack: ; returns: ; bc: new state unit_action_attack_damage_calc: + ; play animation + push de + call unit_action_attack_decide_animation + pop de ; set flag ld a, [gpf_attack_ongoing] @@ -150,6 +134,6 @@ st_action_attack_init: st_action_attack_pick_direction: st_def 0x00, unit_action_attack_pick_direction, st_action_attack_pick_direction st_action_attack_direction_picked: - st_def 0x00, unit_action_attack, st_action_attack_direction_picked + st_def ATTACK_ANIM_LEN, unit_action_attack_finish, st_unit_delay_to_active_fast st_action_attack_damage_actor: st_def 0x00, unit_action_attack_damage_calc, st_action_attack_direction_picked diff --git a/src/unit_demo.s b/src/unit_demo.s index d301171..593a96d 100644 --- a/src/unit_demo.s +++ b/src/unit_demo.s @@ -4,18 +4,92 @@ unit_demo_guard_anim_table: anim_ent 0, 8, 0x8A, 0 anim_ent 0, 0, 0x00, 0 +unit_demo_guard_attack_up: + anim_header ATTACK_ANIM_LEN, unit_demo_guard_anim_table + anim_ent 0, 0, 0x88, 0 + anim_ent 0, 8, 0x8A, 0 + anim_ent -12, 0, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_guard_attack_down: + anim_header ATTACK_ANIM_LEN, unit_demo_guard_anim_table + anim_ent 0, 0, 0x88, 0 + anim_ent 0, 8, 0x8A, 0 + anim_ent 12, 0, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_guard_attack_left: + anim_header ATTACK_ANIM_LEN, unit_demo_guard_anim_table + anim_ent 0, 0, 0x88, 0 + anim_ent 0, 8, 0x8A, 0 + anim_ent 0, -12, ACTION_ATTACK_SPRITE1, 0 + + +unit_demo_guard_attack_right: + anim_header ATTACK_ANIM_LEN, unit_demo_guard_anim_table + anim_ent 0, 0, 0x88, 0 + anim_ent 0, 8, 0x8A, 0 + anim_ent 0, 12, ACTION_ATTACK_SPRITE1, 0 + unit_demo_dog_anim_table: anim_header 0, unit_demo_dog_anim_table anim_ent 0, 0, 0x90, 0 anim_ent 0, 8, 0x92, 0 anim_ent 0, 0, 0x00, 0 +unit_demo_dog_attack_up: + anim_header ATTACK_ANIM_LEN, unit_demo_dog_anim_table + anim_ent 0, 0, 0x90, 0 + anim_ent 0, 8, 0x92, 0 + anim_ent -12, 0, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_dog_attack_down: + anim_header ATTACK_ANIM_LEN, unit_demo_dog_anim_table + anim_ent 0, 0, 0x90, 0 + anim_ent 0, 8, 0x92, 0 + anim_ent 12, 0, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_dog_attack_left: + anim_header ATTACK_ANIM_LEN, unit_demo_dog_anim_table + anim_ent 0, 0, 0x90, 0 + anim_ent 0, 8, 0x92, 0 + anim_ent 0, -12, ACTION_ATTACK_SPRITE1, 0 + + +unit_demo_dog_attack_right: + anim_header ATTACK_ANIM_LEN, unit_demo_dog_anim_table + anim_ent 0, 0, 0x90, 0 + anim_ent 0, 8, 0x92, 0 + anim_ent 0, 12, ACTION_ATTACK_SPRITE1, 0 + unit_demo_hazmat_anim_table: anim_header 0, unit_demo_hazmat_anim_table anim_ent 0, 0, 0x94, 0 anim_ent 0, 8, 0x96, 0 anim_ent 0, 0, 0x00, 0 +unit_demo_hazmat_attack_up: + anim_header ATTACK_ANIM_LEN, unit_demo_hazmat_anim_table + anim_ent 0, 0, 0x94, 0 + anim_ent 0, 8, 0x96, 0 + anim_ent -12, 0, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_hazmat_attack_down: + anim_header ATTACK_ANIM_LEN, unit_demo_hazmat_anim_table + anim_ent 0, 0, 0x94, 0 + anim_ent 0, 8, 0x96, 0 + anim_ent 12, 0, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_hazmat_attack_left: + anim_header ATTACK_ANIM_LEN, unit_demo_hazmat_anim_table + anim_ent 0, 0, 0x94, 0 + anim_ent 0, 8, 0x96, 0 + anim_ent 0, -12, ACTION_ATTACK_SPRITE1, 0 + +unit_demo_hazmat_attack_right: + anim_header ATTACK_ANIM_LEN, unit_demo_hazmat_anim_table + anim_ent 0, 0, 0x94, 0 + anim_ent 0, 8, 0x96, 0 + anim_ent 0, 12, ACTION_ATTACK_SPRITE1, 0 + unit_demo_1_init: ldnull bc ret