diff options
author | Astatin <[email protected]> | 2025-05-09 17:44:37 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-05-09 17:44:37 +0200 |
commit | b0f9e2e6d53983faa9d213b40d2bd6a23473e134 (patch) | |
tree | e8bf5eedd762203972afa10c6be79692767a3d2f | |
parent | 507a9876b85f47ff81cc9150bea858eec064ba05 (diff) |
Refactoring the animations/directions + entities turn function with macros + finishing froge
-rw-r--r-- | definitions.gbasm | 23 | ||||
-rw-r--r-- | enemiesattacks/basic.gbasm | 18 | ||||
-rw-r--r-- | enemiesattacks/freeze.gbasm | 40 | ||||
-rw-r--r-- | enemiesattacks/grab.gbasm | 73 | ||||
-rw-r--r-- | enemiesattacks/laser.gbasm | 75 | ||||
-rw-r--r-- | enemiesattacks/walk.gbasm | 12 | ||||
-rw-r--r-- | enemiesattacks/walkaway.gbasm | 8 | ||||
-rw-r--r-- | entity/actions.gbasm | 5 | ||||
-rw-r--r-- | entity/bunny.gbasm | 35 | ||||
-rw-r--r-- | entity/cat.gbasm | 159 | ||||
-rw-r--r-- | entity/display.gbasm | 48 | ||||
-rw-r--r-- | entity/fimsh.gbasm | 91 | ||||
-rw-r--r-- | entity/fox.gbasm | 228 | ||||
-rw-r--r-- | entity/frog.gbasm | 163 | ||||
-rw-r--r-- | entity/init.gbasm | 19 | ||||
-rw-r--r-- | entity/mouse.gbasm | 169 | ||||
-rw-r--r-- | entity/penguin.gbasm | 192 | ||||
-rw-r--r-- | entity/questgoal.gbasm | 5 | ||||
-rw-r--r-- | entity/utils.gbasm | 116 | ||||
-rw-r--r-- | map/objects.gbasm | 16 | ||||
-rw-r--r-- | modes/dungeon.gbasm | 4 | ||||
-rw-r--r-- | playerattacks.gbasm | 5 | ||||
-rw-r--r-- | playerattacks/hop.gbasm | 15 |
23 files changed, 653 insertions, 866 deletions
diff --git a/definitions.gbasm b/definitions.gbasm index afec299..e8fdd5f 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -40,6 +40,7 @@ .DEFINE mem_bunny_flags ($cb07) .DEFINE mem_bunny_status ($cb08) .DEFINE mem_bunny_mana ($cb09) +.DEFINE mem_bunny_animation ($cb0a) .DEFINE mem_viewport_x ($c008) .DEFINE mem_viewport_y ($c009) @@ -243,15 +244,8 @@ ; sprite: u8, ; x: u8, ; y: u8, -; direction: u8 (animation = bit 7-4, bit 3 = is_moving, bit 2-0: direction), -; aaaamddd: a = animation, m = is_moving, d = direction -; animations: -; nothing = 0 -; action = 1 -; death = 2 -; superjump = 3 -; shaking = 4 -; doubleseed = 5 +; direction: u8 (facing = bit 6-4, bit 3 = is_moving, bit 2-0: direction moving), +; 0aaamddd: f = facing direction, m = is_moving, d = moving direction ; turn_function_jump_table_index: u8 ; action_function_jump_table_index: u8 ; health: u8 (DAA decimal !!) @@ -267,7 +261,16 @@ ; ; 02: invincible ; ; 04: end of freeze ; mana: u8 -; _padding: u48 +; animation: u8 +; animations: +; nothing = 0 +; action = 1 +; death = 2 +; superjump = 3 +; shaking = 4 +; doubleseed = 5 +; slide (forcing no hops on move) = 6 +; _padding: u40 ; ; # SANTA CHRISTMAS LIST PLEASE # ; health, max health, list of possible attacks, maybe remaining attacks ? AI status (blind, scared, slow, etc..) diff --git a/enemiesattacks/basic.gbasm b/enemiesattacks/basic.gbasm index 103ebc5..984029c 100644 --- a/enemiesattacks/basic.gbasm +++ b/enemiesattacks/basic.gbasm @@ -1,4 +1,8 @@ Basic_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D + LD A, D + AND $f0 + SWAP A + LD D, A LD A, E DEC A DEC D @@ -10,12 +14,24 @@ Basic_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D JR NZ, =.attack LD D, E + LD A, D + SWAP A + AND $70 + OR D + LD D, A RET .attack: LD A, E - OR $10 + SWAP A + AND $70 + OR E LD D, A + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $01 PUSH BC LD A, $mem_bunny_direction diff --git a/enemiesattacks/freeze.gbasm b/enemiesattacks/freeze.gbasm index b5b6319..e5ce309 100644 --- a/enemiesattacks/freeze.gbasm +++ b/enemiesattacks/freeze.gbasm @@ -1,4 +1,20 @@ +Freeze_sight_check: ; BC = XY of the enemy. D = direction (must be unchanged). Direction to face in E (or 0 if not) + LD E, $00 + + LD A, L + AND $f0 + ADD $09 + LD L, A + LD A, $00 + CP (HL) + RET Z + JP =Check_player_next_to + Freeze_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D + LD A, D + AND $f0 + SWAP A + LD D, A LD A, E DEC A DEC D @@ -10,12 +26,24 @@ Freeze_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D JR NZ, =.attack LD D, E + LD A, D + SWAP A + AND $70 + OR D + LD D, A RET .attack: LD A, E - OR $10 + SWAP A + AND $70 + OR E LD D, A + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $01 PUSH BC LD A, $mem_bunny_direction @@ -33,8 +61,10 @@ Freeze_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D LD A, $02 LD $mem_bunny_flags, A LD A, $mem_bunny_direction - AND $07 + RES 3, A LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $mem_bunny_x LD $mem_bunny_predicted_x, A LD A, $mem_bunny_y @@ -48,4 +78,10 @@ Freeze_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D LD A, $enum_dungeon_mode LD $mem_requested_mode, A + LD A, L + AND $f0 + ADD $09 + LD L, A + DEC (HL) + RET diff --git a/enemiesattacks/grab.gbasm b/enemiesattacks/grab.gbasm index e69334e..8ad2d57 100644 --- a/enemiesattacks/grab.gbasm +++ b/enemiesattacks/grab.gbasm @@ -1,4 +1,14 @@ Grab_sight_check: ; BC = XY of the enemy. D = direction (must be unchanged). Direction to face in E (or 0 if not) + LD E, $00 + + LD A, L + AND $f0 + ADD $09 + LD L, A + LD A, $00 + CP (HL) + JR Z, =.end + .vertical: LD A, $mem_bunny_x CP B @@ -9,41 +19,64 @@ Grab_sight_check: ; BC = XY of the enemy. D = direction (must be unchanged). Dir SUB $02 CP C LD E, $enum_direction_down - RET Z + JR Z, =.end ; down ADD $04 CP C LD E, $enum_direction_up - RET Z + JR Z, =.end LD E, $00 - RET + JR =.end .horizontal: LD A, $mem_bunny_y CP C LD E, $00 - RET NZ + JR NZ, =.end ; left LD A, $mem_bunny_x SUB $02 CP B LD E, $enum_direction_right - RET Z + JR Z, =.end ; right ADD $04 CP B LD E, $enum_direction_left + JR Z, =.end + + LD E, $00 + + LD A, E + CP $00 + RET Z + + .end: + PUSH BC + PUSH DE + LD D, E + LD A, $01 + .ADD_A_TO_DIRECTION_BC + CALL =Is_Collisionable + POP DE + POP BC + + CP $00 RET Z LD E, $00 RET -Grab_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D +Grab_Enemy_Attack: ; Entity in HL (whatever alignment), Direction to face in E. Result in BC (XY), Direction in D + LD A, D + AND $f0 + SWAP A + LD D, A LD A, E DEC A DEC D @@ -55,12 +88,24 @@ Grab_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D JR NZ, =.attack LD D, E + LD A, D + SWAP A + AND $70 + OR D + LD D, A RET .attack: LD A, E - OR $10 + SWAP A + AND $70 + OR E LD D, A + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $01 PUSH BC LD A, $mem_bunny_direction @@ -82,8 +127,22 @@ Grab_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D XOR $01 INC A OR $08 + AND $0f + LD B, A + LD A, $mem_bunny_direction + AND $f0 + OR B LD $mem_bunny_direction, A + LD A, $06 + LD $mem_bunny_animation, A POP BC POP DE + + LD A, L + AND $f0 + ADD $09 + LD L, A + DEC (HL) + RET diff --git a/enemiesattacks/laser.gbasm b/enemiesattacks/laser.gbasm index 648c5f7..18ce73e 100644 --- a/enemiesattacks/laser.gbasm +++ b/enemiesattacks/laser.gbasm @@ -1,6 +1,14 @@ Laser_sight_check: ; BC = XY of the enemy. D = direction (must be unchanged). Direction to face in E (or 0 if not) LD E, $00 + LD A, L + AND $f0 + ADD $09 + LD L, A + LD A, $00 + CP (HL) + RET Z + ; straight line + distance <= 4 LD A, $mem_bunny_predicted_x CP B @@ -48,7 +56,64 @@ Laser_sight_check: ; BC = XY of the enemy. D = direction (must be unchanged). Di LD E, $enum_direction_up RET -Laser_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D +Laser_Prepare_Attack: + LD A, D + AND $f0 + SWAP A + LD D, A + LD A, E + DEC A + DEC D + XOR D + INC D + CP $00 + JR Z, =.attack + BIT 1, A + JR NZ, =.attack + + LD D, E + LD A, D + SWAP A + AND $70 + OR D + LD D, A + RET + + .attack: + LD A, E + SWAP A + AND $70 + OR E + LD D, A + LD A, L + AND $f0 + ADD $07 + LD L, A + + SET 2, (HL) + + RET + +Apply_Prepared_Laser_Enemy_Attack: ; Entity (whatever alignment) in HL Direction to face in E. Result in BC (XY), Direction in D + LD A, $mem_moving_animation_step + CP $0f + RET NZ + + LD A, L + AND $f0 + ADD $07 + LD L, A + BIT 2, (HL) + RES 2, (HL) + RET Z + + CALL =Laser_sight_check + LD A, D + AND $70 + SWAP A + CP E + RET NZ + PUSH DE PUSH BC @@ -111,4 +176,12 @@ Laser_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D LD $mem_bunny_health, A .Skip_health_underflow_fix: + ; Mana + LD A, L + AND $f0 + ADD $09 + LD L, A + + DEC (HL) + RET diff --git a/enemiesattacks/walk.gbasm b/enemiesattacks/walk.gbasm index 5de471f..a11b32f 100644 --- a/enemiesattacks/walk.gbasm +++ b/enemiesattacks/walk.gbasm @@ -1,4 +1,4 @@ -Walking: ; entity XY in BC, Breaks DE +Walking: ; entity XY in BC, Breaks E, Direction result in D ; Is Bunny close enough to follow LD A, $mem_bunny_x SUB B @@ -24,6 +24,10 @@ Walking: ; entity XY in BC, Breaks DE INC A OR E LD D, A + AND $07 + SWAP A + OR D + LD D, A JP =.Check_Collision .Follow_bunny: @@ -123,6 +127,12 @@ Walking: ; entity XY in BC, Breaks DE LD C, E .skip_invert_axis2: + LD A, D + AND $07 + SWAP A + OR D + LD D, A + .Check_Collision: PUSH BC LD A, $01 diff --git a/enemiesattacks/walkaway.gbasm b/enemiesattacks/walkaway.gbasm index 2fc21fe..60851a4 100644 --- a/enemiesattacks/walkaway.gbasm +++ b/enemiesattacks/walkaway.gbasm @@ -24,6 +24,10 @@ Walking_Away: ; entity XY in BC, Breaks DE INC A OR E LD D, A + AND $07 + SWAP A + OR D + LD D, A JP =.Check_Collision .Follow_bunny: @@ -109,6 +113,10 @@ Walking_Away: ; entity XY in BC, Breaks DE INC A OR $08 LD D, A + AND $07 + SWAP A + OR D + LD D, A ; Check collision diff --git a/entity/actions.gbasm b/entity/actions.gbasm index 58ae380..92c2c5f 100644 --- a/entity/actions.gbasm +++ b/entity/actions.gbasm @@ -121,9 +121,10 @@ Enemy_Interaction: AND $f0 LD $mem_entity_being_attacked_low, A LD A, $mem_bunny_direction - AND $07 - OR $10 + RES 3, A LD $mem_bunny_direction, A + LD A, $01 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 4, A diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm index c58a645..dc04535 100644 --- a/entity/bunny.gbasm +++ b/entity/bunny.gbasm @@ -25,8 +25,10 @@ Move_Bunny: CP $01 JR NZ, =.Freeze_shiver.end LD A, $mem_bunny_direction - AND $07 + RES 3, A LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $mem_bunny_status_clear_turn_counter DEC A @@ -37,9 +39,8 @@ Move_Bunny: CALL =RNG_Step CP $55 JP NC, =.Skip_turn - LD A, $mem_bunny_direction - OR $40 - LD $mem_bunny_direction, A + LD A, $04 + LD $mem_bunny_animation, A CALL =RNG_Step CP $55 @@ -75,11 +76,21 @@ Move_Bunny: BIT 3, A JP NZ, =.Start_action_or_movement.end + LD A, $mem_bunny_direction + AND $70 + LD D, A + SWAP A + OR D + LD $mem_bunny_direction, A + .Start_action_or_movement.test_movement: LD A, $mem_button_direction CP $00 JP Z, =.Start_action_or_movement.end + LD D, A + SWAP A + OR D SET 3, A LD D, A @@ -176,9 +187,11 @@ Move_Bunny: JP NZ, =.End_movement.end LD A, $mem_bunny_direction LD D, A - AND $07 + RES 3, A BIT 3, D LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A JP Z, =.End_movement.end LD A, $mem_bunny_x @@ -291,7 +304,7 @@ Move_Bunny: LD A, $mem_bunny_y LD C, A LD A, $mem_bunny_direction - OR $08 + SET 3, A AND $0f LD D, A LD A, $01 @@ -337,9 +350,10 @@ Move_Bunny: .Interaction.for_else: LD A, $mem_bunny_direction - AND $07 - OR $10 + RES 3, A LD $mem_bunny_direction, A + LD A, $01 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 4, A @@ -347,9 +361,8 @@ Move_Bunny: .Interaction.end: .Check_End_Action: - LD A, $mem_bunny_direction - AND $f0 - CP $10 + LD A, $mem_bunny_animation + CP $01 JR NZ, =.Check_End_Action.end .Check_End_Action.end: diff --git a/entity/cat.gbasm b/entity/cat.gbasm index 655fd1b..13f7be3 100644 --- a/entity/cat.gbasm +++ b/entity/cat.gbasm @@ -1,3 +1,31 @@ +Cat_Drop: + PUSH DE + LD E, $02 + CALL =Check_attack_already_learnt + CP $01 + JR Z, =.drops.hp_regen_item + + .drops.attack_item: + LD D, $6C + LD E, $04 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + JR =.drops.end + + .drops.hp_regen_item: + LD D, $64 + LD E, $02 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + + .drops.end: + POP DE + RET + Cat_Turn: LD A, $mem_map_loading_flags BIT 3, A @@ -14,132 +42,17 @@ Cat_Turn: LD A, (HL+) LD D, A - .Health_check: - LD A, L - AND $f0 - ADD $06 - LD L, A - - LD A, (HL) - CP $00 - JR NZ, =.Health_check.end - - LD A, L - AND $f0 - LD L, A - - LD (HL), $00 - LD A, $mem_enemies_alive_count - DEC A - LD $mem_enemies_alive_count, A - - ; Drop when deadged - PUSH DE - LD E, $02 - CALL =Check_attack_already_learnt - CP $01 - JR Z, =.drops.hp_regen_item - - .drops.attack_item: - LD D, $6C - LD E, $04 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - JR =.drops.end - - .drops.hp_regen_item: - LD D, $64 - LD E, $02 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - - .drops.end: - POP DE - - JP =.Skip_turn - .Health_check.end: - - .Freeze_shiver: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Freeze_shiver.end - LD A, L - AND $f0 - ADD $08 - LD L, A - LD A, $01 - CP (HL) - JR NZ, =.Freeze_shiver.end - LD A, D - AND $07 - LD D, A - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - LD A, D - OR $40 - LD D, A - - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - - LD A, $00 - LD (HL-), A - RES 1, (HL) - JP =.Skip_turn - .Freeze_shiver.end: - - .Should_turn_be_skipped: - LD A, L - AND $f0 - ADD $08 - LD L, A - - BIT 0, (HL) - JP NZ, =.Skip_turn - - .Start_action_or_movement: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Start_action_or_movement.end - - LD A, L - AND $f0 - OR $07 - LD L, A - RES 3, (HL) - - .Try_Basic_Attack: - CALL =Check_player_next_to - LD A, E - CP $00 - JR Z, =.Try_Walking - CALL =Basic_Enemy_Attack - - JR =.Start_action_or_movement.end + .ENTITY_HEALTH_CHECK =.Skip_turn =Cat_Drop + .ENTITY_FREEZE_SHIVER =.Skip_turn + .ENTITY_STATUS_SKIP_TURN =.Skip_turn - .Try_Walking: - CALL =Walking - .Start_action_or_movement.end: + .RESET_BLINKING_MODE - .End_movement: - LD A, $mem_moving_animation_step - CP $0f - JP NZ, =.End_movement.end + .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end + CALL =Walking + .attack_end: - LD A, D - AND $07 - BIT 3, D - LD D, A - JR Z, =.End_movement.end - LD A, $01 - .ADD_A_TO_DIRECTION_BC - .End_movement.end: + CALL =Entity_End_movement .Skip_Turn: LD A, L diff --git a/entity/display.gbasm b/entity/display.gbasm index 42f4740..6477ca2 100644 --- a/entity/display.gbasm +++ b/entity/display.gbasm @@ -118,9 +118,12 @@ Display_Entity: .Action_Animation: - LD A, D + LD A, L AND $f0 - CP $10 + OR $0a + LD L, A + LD A, $01 + CP (HL) JR NZ, =.Action_Animation.end LD A, $mem_moving_animation_step @@ -147,9 +150,12 @@ Display_Entity: .Action_Animation.end: .SuperJump_Animation: - LD A, D + LD A, L AND $f0 - CP $30 + OR $0a + LD L, A + LD A, $03 + CP (HL) JR NZ, =.SuperJump_Animation.end LD A, $mem_moving_animation_step @@ -170,9 +176,12 @@ Display_Entity: .SuperJump_Animation.end: .Shaking_Animation: - LD A, D + LD A, L AND $f0 - CP $40 + OR $0a + LD L, A + LD A, $04 + CP (HL) JR NZ, =.Shaking_Animation.end LD A, $mem_moving_animation_step @@ -192,9 +201,12 @@ Display_Entity: .Shaking_Animation.end: .Moving_2x: - LD A, D + LD A, L AND $f0 - CP $50 + OR $0a + LD L, A + LD A, $05 + CP (HL) JR NZ, =.Moving_2x.end LD A, $mem_moving_animation_step @@ -225,9 +237,15 @@ Display_Entity: .Moving_2x.end: .Moving_Hops: - LD A, D - AND $f8 - CP $08 + BIT 3, D + JR Z, =.Moving_Hops.end + LD A, L + AND $f0 + OR $0a + LD L, A + LD A, (HL) + LD A, $00 + CP (HL) JR NZ, =.Moving_Hops.end LD A, $mem_moving_animation_step @@ -245,6 +263,7 @@ Display_Entity: .Moving_Hops.end: LD A, D + SWAP A AND $07 CP $enum_direction_left @@ -328,9 +347,12 @@ Display_Entity: RET Flags_From_Animation: ; Expect entity in HL (offset doesn't matter) + breaks D (but result in A) - LD A, D + LD A, L AND $f0 - CP $20 + OR $0a + LD L, A + LD A, $02 + CP (HL) LD D, $00 JR NZ, =Flags_From_Animation.Shadow_Palette LD D, $40 diff --git a/entity/fimsh.gbasm b/entity/fimsh.gbasm index 49c4f53..e5f6190 100644 --- a/entity/fimsh.gbasm +++ b/entity/fimsh.gbasm @@ -1,3 +1,11 @@ +Fimsh_Drop: + PUSH DE + LD D, $6C + LD E, $07 + CALL =Spawn_object + POP DE + RET + Fimsh_Turn: LD A, $mem_map_loading_flags BIT 3, A @@ -14,86 +22,13 @@ Fimsh_Turn: LD A, (HL+) LD D, A - .Health_check: - LD A, L - AND $f0 - ADD $06 - LD L, A - - LD A, (HL) - CP $00 - JR NZ, =.Health_check.end - - LD A, L - AND $f0 - LD L, A - - LD (HL), $00 - LD A, $mem_enemies_alive_count - DEC A - LD $mem_enemies_alive_count, A - - PUSH DE - LD D, $6C - LD E, $07 - CALL =Spawn_object - POP DE - - JP =.Skip_turn - .Health_check.end: - - .Freeze_shiver: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Freeze_shiver.end - LD A, L - AND $f0 - ADD $08 - LD L, A - LD A, $01 - CP (HL) - JR NZ, =.Freeze_shiver.end - LD A, D - AND $07 - LD D, A - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - LD A, D - OR $40 - LD D, A - - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - - LD A, $00 - LD (HL-), A - RES 1, (HL) - JP =.Skip_turn - .Freeze_shiver.end: - - .Should_turn_be_skipped: - LD A, L - AND $f0 - ADD $08 - LD L, A + .ENTITY_HEALTH_CHECK =.Skip_turn =Fimsh_Drop + .ENTITY_FREEZE_SHIVER =.Skip_turn + .ENTITY_STATUS_SKIP_TURN =.Skip_turn - BIT 0, (HL) - JP NZ, =.Skip_turn + .RESET_BLINKING_MODE - .End_movement: - LD A, $mem_moving_animation_step - CP $0f - JP NZ, =.End_movement.end - LD A, D - AND $07 - BIT 3, D - LD D, A - JR Z, =.End_movement.end - LD A, $01 - .ADD_A_TO_DIRECTION_BC - .End_movement.end: + CALL =Entity_End_movement .Skip_Turn: LD A, L diff --git a/entity/fox.gbasm b/entity/fox.gbasm index 8e72ab4..4d5bd02 100644 --- a/entity/fox.gbasm +++ b/entity/fox.gbasm @@ -1,3 +1,31 @@ +Fox_Drop: + PUSH DE + LD E, $04 + CALL =Check_attack_already_learnt + CP $01 + JR Z, =.drops.ep_regen_item + + .drops.attack_item: + LD D, $6C + LD E, $06 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + JR =.drops.end + + .drops.ep_regen_item: + LD D, $68 + LD E, $03 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + + .drops.end: + POP DE + RET + Fox_Turn: LD A, $mem_map_loading_flags BIT 3, A @@ -14,200 +42,20 @@ Fox_Turn: LD A, (HL+) LD D, A - .Health_check: - LD A, L - AND $f0 - ADD $06 - LD L, A - - LD A, (HL) - CP $00 - JR NZ, =.Health_check.end - - LD A, L - AND $f0 - LD L, A - - LD (HL), $00 - LD A, $mem_enemies_alive_count - DEC A - LD $mem_enemies_alive_count, A - - ; Drop when deadged - PUSH DE - LD E, $04 - CALL =Check_attack_already_learnt - CP $01 - JR Z, =.drops.ep_regen_item - - .drops.attack_item: - LD D, $6C - LD E, $06 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - JR =.drops.end - - .drops.ep_regen_item: - LD D, $68 - LD E, $03 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - - .drops.end: - POP DE - - JP NZ, =.Skip_turn - .Health_check.end: - - .Freeze_shiver: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Freeze_shiver.end - LD A, L - AND $f0 - ADD $08 - LD L, A - LD A, $01 - CP (HL) - JR NZ, =.Freeze_shiver.end - LD A, D - AND $07 - LD D, A - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - LD A, D - OR $40 - LD D, A - - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - - LD A, $00 - LD (HL-), A - RES 1, (HL) - JP =.Skip_turn - .Freeze_shiver.end: - - .Should_turn_be_skipped: - LD A, L - AND $f0 - ADD $08 - LD L, A - - BIT 0, (HL) - JP NZ, =.Skip_turn - - .Start_action_or_movement: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Start_action_or_movement.end - - LD A, L - AND $f0 - OR $07 - LD L, A - RES 3, (HL) - - LD A, L - AND $f0 - ADD $09 - LD L, A - XOR A - CP (HL) - JR Z, =.Try_Basic_Attack - - CALL =Laser_sight_check - LD A, E - CP $00 - JR Z, =.Try_Basic_Attack - - LD A, E - DEC A - DEC D - XOR D - INC D - CP $00 - JR Z, =.attack - BIT 1, A - JR NZ, =.attack - - LD D, E - JR =.Start_action_or_movement.end - - .attack: - LD D, E - LD A, L - AND $f0 - ADD $07 - LD L, A - - SET 2, (HL) - - JR =.Start_action_or_movement.end - - .Try_Basic_Attack: - - CALL =Check_player_next_to - LD A, E - CP $00 - JR Z, =.Try_Walking - - CALL =Basic_Enemy_Attack - - JR =.Start_action_or_movement.end - - .Try_Walking: - - CALL =Walking - .Start_action_or_movement.end: - - .End_movement: - LD A, $mem_moving_animation_step - CP $0f - JP NZ, =.End_movement.end - LD A, D - AND $07 - BIT 3, D - LD D, A - JR Z, =.End_movement.check_end_of_turn_mode_attack - LD A, $01 - .ADD_A_TO_DIRECTION_BC - - .End_movement.check_end_of_turn_mode_attack: - - LD A, L - AND $f0 - ADD $07 - LD L, A - - BIT 2, (HL) - RES 2, (HL) - JR Z, =.End_movement.end - - CALL =Laser_sight_check - LD A, D - AND $07 - CP E - JR NZ, =.laser_sight_check_fail - - CALL =Laser_Enemy_Attack + .ENTITY_HEALTH_CHECK =.Skip_turn =Fox_Drop + .ENTITY_FREEZE_SHIVER =.Skip_turn + .ENTITY_STATUS_SKIP_TURN =.Skip_turn - LD A, L - AND $f0 - ADD $09 - LD L, A + .RESET_BLINKING_MODE - DEC (HL) + .ENTITY_TRY_ATTACK =Laser_sight_check =Laser_Prepare_Attack =.attack_end + .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end + CALL =Walking + .attack_end: - .laser_sight_check_fail: + CALL =Entity_End_movement - .End_movement.end: + CALL =Apply_Prepared_Laser_Enemy_Attack .Skip_Turn: LD A, L diff --git a/entity/frog.gbasm b/entity/frog.gbasm index c08d68f..268e473 100644 --- a/entity/frog.gbasm +++ b/entity/frog.gbasm @@ -1,3 +1,22 @@ +Frog_Drops: ; XY in (BC) + PUSH DE + LD E, $02 + CALL =Check_attack_already_learnt + CP $01 + JR Z, =.drops.hp_regen_item + + .drops.hp_regen_item: + LD D, $64 + LD E, $02 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + + .drops.end: + POP DE + RET + Frog_Turn: LD A, $mem_map_loading_flags BIT 3, A @@ -14,144 +33,18 @@ Frog_Turn: LD A, (HL+) LD D, A - .Health_check: - LD A, L - AND $f0 - ADD $06 - LD L, A - - LD A, (HL) - CP $00 - JR NZ, =.Health_check.end - - LD A, L - AND $f0 - LD L, A - - LD (HL), $00 - LD A, $mem_enemies_alive_count - DEC A - LD $mem_enemies_alive_count, A - - ; Drop when deadged - PUSH DE - LD E, $02 - CALL =Check_attack_already_learnt - CP $01 - JR Z, =.drops.hp_regen_item - - .drops.hp_regen_item: - LD D, $64 - LD E, $02 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - - .drops.end: - POP DE - - JP =.Skip_turn - .Health_check.end: - - .Freeze_shiver: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Freeze_shiver.end - LD A, L - AND $f0 - ADD $08 - LD L, A - LD A, $01 - CP (HL) - JR NZ, =.Freeze_shiver.end - LD A, D - AND $07 - LD D, A - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - LD A, D - OR $40 - LD D, A - - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - - LD A, $00 - LD (HL-), A - RES 1, (HL) - JP =.Skip_turn - .Freeze_shiver.end: - - .Should_turn_be_skipped: - LD A, L - AND $f0 - ADD $08 - LD L, A - - BIT 0, (HL) - JP NZ, =.Skip_turn - - .Start_action_or_movement: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Start_action_or_movement.end - - LD A, L - AND $f0 - OR $07 - LD L, A - RES 3, (HL) - - LD A, L - AND $f0 - ADD $09 - LD L, A - XOR A - CP (HL) - JR Z, =.Try_Basic_Attack - - CALL =Grab_sight_check - LD A, E - CP $00 - JR Z, =.Try_Basic_Attack - - CALL =Grab_Enemy_Attack - - JR =.Start_action_or_movement.end - - .Try_Basic_Attack: - - CALL =Check_player_next_to - LD A, E - CP $00 - JR Z, =.Try_Walking - - CALL =Basic_Enemy_Attack - - JR =.Start_action_or_movement.end - - .Try_Walking: - - CALL =Walking + .ENTITY_HEALTH_CHECK =.Skip_turn =Frog_Drops + .ENTITY_FREEZE_SHIVER =.Skip_turn + .ENTITY_STATUS_SKIP_TURN =.Skip_turn - .Start_action_or_movement.end: + .RESET_BLINKING_MODE - .End_movement: - LD A, $mem_moving_animation_step - CP $0f - JP NZ, =.End_movement.end + .ENTITY_TRY_ATTACK =Grab_sight_check =Grab_Enemy_Attack =.attack_end + .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end + CALL =Walking + .attack_end: - LD A, D - AND $07 - BIT 3, D - LD D, A - JR Z, =.End_movement.end - LD A, $01 - .ADD_A_TO_DIRECTION_BC - .End_movement.end: + CALL =Entity_End_movement .Skip_Turn: LD A, L diff --git a/entity/init.gbasm b/entity/init.gbasm index 80e3848..38d3141 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -65,6 +65,9 @@ Initialize_Entities: INC HL LD A, $enum_direction_down + LD (HL), A + SWAP A + OR (HL) LD (HL+), A ; Turn @@ -128,22 +131,6 @@ Initialize_Entities: OR $08 LD $mem_prepared_viewport_y, A - LD A, $mem_bunny_direction - BIT 3, A - RET Z - - LD A, $mem_bunny_direction - DEC A - XOR $01 - INC A - LD D, A - LD A, $mem_viewport_x - LD B, A - LD A, $mem_viewport_y - LD C, A - LD A, $mem_moving_animation_step - .ADD_A_TO_DIRECTION_BC - RET Initialize_Enemy: ; HL => pointer to entity struct diff --git a/entity/mouse.gbasm b/entity/mouse.gbasm index ebf54ff..75f84ab 100644 --- a/entity/mouse.gbasm +++ b/entity/mouse.gbasm @@ -1,3 +1,14 @@ +Mouse_Drop: + PUSH DE + LD D, $64 + LD E, $02 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + POP DE + RET + Mouse_Turn: LD A, $mem_map_loading_flags BIT 3, A @@ -14,146 +25,72 @@ Mouse_Turn: LD A, (HL+) LD D, A - .Health_check: - LD A, L - AND $f0 - ADD $06 - LD L, A + .ENTITY_HEALTH_CHECK =.Skip_turn =Mouse_Drop + .ENTITY_FREEZE_SHIVER =.Skip_turn + .ENTITY_STATUS_SKIP_TURN =.Skip_turn - LD A, (HL) - CP $00 - JR NZ, =.Health_check.end + .RESET_BLINKING_MODE - LD A, L - AND $f0 - LD L, A - - LD (HL), $00 - LD A, $mem_enemies_alive_count - DEC A - LD $mem_enemies_alive_count, A - - PUSH DE - LD D, $64 - LD E, $02 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - POP DE - - JP =.Skip_turn - .Health_check.end: + .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end + CALL =Walking + BIT 3, D + JR Z, =.attack_end + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $05 + LD A, (HL) + DBG + .attack_end: - .Freeze_shiver: + .Mid_movement: LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Freeze_shiver.end - LD A, L - AND $f0 - ADD $08 - LD L, A - LD A, $01 - CP (HL) - JR NZ, =.Freeze_shiver.end - LD A, D - AND $07 - LD D, A - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - LD A, D - OR $40 - LD D, A - - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn + CP $07 + JR NZ, =.Mid_movement.end - LD A, $00 - LD (HL-), A - RES 1, (HL) - JP =.Skip_turn - .Freeze_shiver.end: + BIT 3, D + JR Z, =.Mid_movement.end - .Should_turn_be_skipped: LD A, L AND $f0 - ADD $08 + OR $0a LD L, A - - BIT 0, (HL) - JP NZ, =.Skip_turn - - .Start_action_or_movement: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Start_action_or_movement.end + LD A, $05 + CP (HL) + LD A, (HL) + JR NZ, =.Mid_movement.end LD A, L AND $f0 - OR $07 + OR $0a LD L, A - RES 3, (HL) - - .Try_Basic_Attack: - CALL =Check_player_next_to - LD A, E - CP $00 - JR Z, =.Try_Walking - CALL =Basic_Enemy_Attack - - JR =.Start_action_or_movement.end - - .Try_Walking: - CALL =Walking - BIT 3, D - JR Z, =.Start_action_or_movement.end - LD A, D - OR $50 - LD D, A - .Start_action_or_movement.end: - - .Mid_movement: - LD A, $mem_moving_animation_step - CP $07 - JR NZ, =.Mid_movement.end - - LD A, D - AND $f0 - CP $50 - JR NZ, =.Mid_movement.end + LD (HL), $00 LD A, D - AND $07 - BIT 3, D + RES 3, A LD D, A - JR Z, =.Mid_movement.end LD A, $01 .ADD_A_TO_DIRECTION_BC .Mid_movement.Try_Walking: + PUSH DE CALL =Walking BIT 3, D - JR Z, =.Mid_movement.end - LD A, D - OR $50 - LD D, A + JR Z, =.Mid_movement.Walk_cancelled + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $05 + ADD SP, $02 + JR =.Mid_movement.end + .Mid_movement.Walk_cancelled: + POP DE + RES 3, D .Mid_movement.end: - .End_movement: - LD A, $mem_moving_animation_step - CP $0f - JR NZ, =.End_movement.end - - LD A, D - AND $07 - BIT 3, D - LD D, A - JR Z, =.End_movement.end - LD A, $01 - .ADD_A_TO_DIRECTION_BC - .End_movement.end: + CALL =Entity_End_movement .Skip_Turn: LD A, L diff --git a/entity/penguin.gbasm b/entity/penguin.gbasm index 353af8e..a3b4937 100644 --- a/entity/penguin.gbasm +++ b/entity/penguin.gbasm @@ -1,3 +1,31 @@ +Penguin_Drop: + PUSH DE + LD E, $03 + CALL =Check_attack_already_learnt + CP $01 + JR Z, =.drops.ep_regen_item + + .drops.attack_item: + LD D, $6C + LD E, $05 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + JR =.drops.end + + .drops.ep_regen_item: + LD D, $68 + LD E, $03 + CALL =RNG_Step + AND $03 + CP $00 + CALL Z, =Spawn_object + + .drops.end: + POP DE + RET + Penguin_Turn: LD A, $mem_map_loading_flags BIT 3, A @@ -14,157 +42,31 @@ Penguin_Turn: LD A, (HL+) LD D, A - .Health_check: - LD A, L - AND $f0 - ADD $06 - LD L, A - - LD A, (HL) - CP $00 - JR NZ, =.Health_check.end - - LD A, L - AND $f0 - LD L, A - - LD (HL), $00 - LD A, $mem_enemies_alive_count - DEC A - LD $mem_enemies_alive_count, A - - ; Drop when deadged - PUSH DE - LD E, $03 - CALL =Check_attack_already_learnt - CP $01 - JR Z, =.drops.ep_regen_item - - .drops.attack_item: - LD D, $6C - LD E, $05 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - JR =.drops.end - - .drops.ep_regen_item: - LD D, $68 - LD E, $03 - CALL =RNG_Step - AND $03 - CP $00 - CALL Z, =Spawn_object - - .drops.end: - POP DE - - JP =.Skip_turn - .Health_check.end: - - .Freeze_shiver: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Freeze_shiver.end - LD A, L - AND $f0 - ADD $08 - LD L, A - LD A, $01 - CP (HL) - JR NZ, =.Freeze_shiver.end - LD A, D - AND $07 - LD D, A - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - LD A, D - OR $40 - LD D, A - - CALL =RNG_Step - CP $55 - JP NC, =.Skip_turn - - LD A, $00 - LD (HL-), A - RES 1, (HL) - JP =.Skip_turn - .Freeze_shiver.end: - - .Should_turn_be_skipped: - LD A, L - AND $f0 - ADD $08 - LD L, A - - BIT 0, (HL) - JP NZ, =.Skip_turn - - .Start_action_or_movement: - LD A, $mem_moving_animation_step - CP $00 - JP NZ, =.Start_action_or_movement.end - - LD A, L - AND $f0 - OR $07 - LD L, A - RES 3, (HL) - - LD A, $mem_bunny_status - CP $01 - JR Z, =.Run_away - CP $04 - JR Z, =.Run_away - - .Try_Freeze_Attack: - LD A, L - AND $f0 - ADD $09 - LD L, A - XOR A - CP (HL) - JR Z, =.Try_Walking - - CALL =Check_player_next_to - LD A, E - CP $00 - JR Z, =.Try_Walking - CALL =Freeze_Enemy_Attack - - LD A, L - AND $f0 - ADD $09 - LD L, A + .ENTITY_HEALTH_CHECK =.Skip_turn =Cat_Drop + .ENTITY_FREEZE_SHIVER =.Skip_turn + .ENTITY_STATUS_SKIP_TURN =.Skip_turn - DEC (HL) + .RESET_BLINKING_MODE - JR =.Start_action_or_movement.end + LD A, $mem_moving_animation_step + CP $00 + JR NZ, =.attack_end + LD A, $mem_bunny_status + CP $01 + JR Z, =.Run_away + CP $04 + JR Z, =.Run_away - .Run_away: - CALL =Walking_Away + .ENTITY_TRY_ATTACK =Freeze_sight_check =Freeze_Enemy_Attack =.attack_end + CALL =Walking + JR =.attack_end - JR =.Start_action_or_movement.end + .Run_away: + CALL =Walking_Away - .Try_Walking: - CALL =Walking - .Start_action_or_movement.end: + .attack_end: - .End_movement: - LD A, $mem_moving_animation_step - CP $0f - JP NZ, =.End_movement.end - LD A, D - AND $07 - BIT 3, D - LD D, A - JR Z, =.End_movement.end - LD A, $01 - .ADD_A_TO_DIRECTION_BC - .End_movement.end: + CALL =Entity_End_movement .Skip_Turn: LD A, L diff --git a/entity/questgoal.gbasm b/entity/questgoal.gbasm index 9885cea..445f56c 100644 --- a/entity/questgoal.gbasm +++ b/entity/questgoal.gbasm @@ -41,9 +41,8 @@ Open_Dialogue: .START_SCRIPT =Demo_quest_bunny - LD A, $mem_bunny_direction - AND $0f - LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $enum_dungeon_dialogue_mode LD $mem_requested_mode, A diff --git a/entity/utils.gbasm b/entity/utils.gbasm index 944faa8..8dea589 100644 --- a/entity/utils.gbasm +++ b/entity/utils.gbasm @@ -141,3 +141,119 @@ Spawn_object: ; Texture in D, XY in BC, jump table thingy in E POP HL .skip_spawn_loot: RET + +.MACRODEF ENTITY_HEALTH_CHECK Skip_turn Drop_Function + LD A, L + AND $f0 + ADD $06 + LD L, A + + LD A, (HL) + CP $00 + JR NZ, =$end + + LD A, L + AND $f0 + LD L, A + + LD (HL), $00 + LD A, $mem_enemies_alive_count + DEC A + LD $mem_enemies_alive_count, A + + CALL $Drop_Function + + JP $Skip_turn + $end: +.END + +.MACRODEF ENTITY_FREEZE_SHIVER Skip_turn + LD A, $mem_moving_animation_step + CP $00 + JP NZ, =$end + LD A, L + AND $f0 + ADD $08 + LD L, A + LD A, $01 + CP (HL) + JR NZ, =$end + RES 3, D + CALL =RNG_Step + CP $55 + JP NC, $Skip_turn + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $04 + + CALL =RNG_Step + CP $55 + JP NC, $Skip_turn + + LD A, $00 + LD (HL-), A + RES 1, (HL) + JP $Skip_turn + $end: +.END + +.MACRODEF ENTITY_STATUS_SKIP_TURN Skip_Turn + LD A, L + AND $f0 + ADD $08 + LD L, A + + BIT 0, (HL) + JP NZ, $Skip_turn +.END + +Entity_End_movement: + LD A, $mem_moving_animation_step + CP $0f + RET NZ + + LD A, L + AND $f0 + OR $0a + LD L, A + LD (HL), $00 + LD A, D + RES 3, A + BIT 3, D + LD D, A + RET Z + LD A, $01 + .ADD_A_TO_DIRECTION_BC + RET + +.MACRODEF RESET_BLINKING_MODE + LD A, $mem_moving_animation_step + CP $00 + JP NZ, =$end + + LD A, L + AND $f0 + OR $07 + LD L, A + RES 3, (HL) + + $end: +.END + +.MACRODEF ENTITY_TRY_ATTACK Sight_check Attack_Function Attack_end + LD A, $mem_moving_animation_step + CP $00 + JP NZ, $Attack_end + + CALL $Sight_check + LD A, $00 + CP E + JR Z, =$next + + CALL $Attack_Function + JP $Attack_end + + $next: +.END diff --git a/map/objects.gbasm b/map/objects.gbasm index 7cdd5c4..a89a88d 100644 --- a/map/objects.gbasm +++ b/map/objects.gbasm @@ -258,8 +258,10 @@ Heal_Attack_Box_Action: LD $mem_requested_mode, A LD $mem_current_mode, A LD A, $mem_bunny_direction - AND $07 + RES 3, A LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 5, A RES 3, A @@ -280,8 +282,10 @@ Freeze_Attack_Box_Action: LD $mem_requested_mode, A LD $mem_current_mode, A LD A, $mem_bunny_direction - AND $07 + RES 3, A LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 5, A RES 3, A @@ -302,8 +306,10 @@ Earcopter_Attack_Box_Action: LD $mem_requested_mode, A LD $mem_current_mode, A LD A, $mem_bunny_direction - AND $07 + RES 3, A LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 5, A RES 3, A @@ -324,8 +330,10 @@ Fimsh_Attack_Box_Action: LD $mem_requested_mode, A LD $mem_current_mode, A LD A, $mem_bunny_direction - AND $07 + RES 3, A LD $mem_bunny_direction, A + LD A, $00 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 5, A RES 3, A diff --git a/modes/dungeon.gbasm b/modes/dungeon.gbasm index cbe1110..3d5b609 100644 --- a/modes/dungeon.gbasm +++ b/modes/dungeon.gbasm @@ -50,8 +50,10 @@ Update_Animation_Steps: .Dead_mode: - LD A, $20 + LD A, $00 LD $mem_bunny_direction, A + LD A, $02 + LD $mem_bunny_animation, A LD A, $enum_dead_mode LD $mem_current_mode, A diff --git a/playerattacks.gbasm b/playerattacks.gbasm index 598dbb8..1d937b9 100644 --- a/playerattacks.gbasm +++ b/playerattacks.gbasm @@ -68,9 +68,8 @@ Canceled_Attack: SET 3, A LD $mem_map_loading_flags, A - LD A, $mem_bunny_direction - OR $40 - LD $mem_bunny_direction, A + LD A, $04 + LD $mem_bunny_animation, A LD A, $mem_bunny_mana LD B, A diff --git a/playerattacks/hop.gbasm b/playerattacks/hop.gbasm index 111fb72..d8b280d 100644 --- a/playerattacks/hop.gbasm +++ b/playerattacks/hop.gbasm @@ -52,6 +52,7 @@ Hop_Attack_Loading_VBlank: CALL =Display_Main_Prepared_Block LD A, $mem_bunny_direction + SWAP A AND $07 LD D, A LD A, $mem_viewport_x @@ -68,6 +69,7 @@ Hop_Attack_Loading_VBlank: CALL =Display_Object LD A, $mem_bunny_direction + SWAP A AND $07 LD D, A LD A, $mem_viewport_x @@ -100,8 +102,10 @@ Hop_Attack_Loading_Regular: LD $mem_requested_mode, A CALL =Update_VBlank_Handler LD A, $mem_bunny_direction - OR $38 + OR $08 LD $mem_bunny_direction, A + LD A, $03 + LD $mem_bunny_animation, A LD A, $mem_map_loading_flags SET 3, A LD $mem_map_loading_flags, A @@ -125,6 +129,7 @@ Hop_Attack_Loading_Regular: LD $mem_prepared_loading_block_position_2, A LD A, $mem_bunny_direction + SWAP A AND $07 LD D, A LD A, $mem_viewport_x @@ -141,6 +146,7 @@ Hop_Attack_Loading_Regular: CALL =Preload_Map_Hop LD A, $mem_bunny_direction + SWAP A AND $07 LD D, A LD A, $mem_viewport_x @@ -158,7 +164,10 @@ Hop_Attack_Loading_Regular: Hop_Attack: LD A, $mem_bunny_direction - AND $07 + AND $70 + LD D, A + SWAP A + OR D LD D, A LD A, $mem_bunny_x @@ -192,5 +201,3 @@ Hop_Attack: LD A, $00 LD $mem_loading_step, A RET - - |