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 /entity | |
parent | 507a9876b85f47ff81cc9150bea858eec064ba05 (diff) |
Refactoring the animations/directions + entities turn function with macros + finishing froge
Diffstat (limited to 'entity')
-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 |
12 files changed, 398 insertions, 832 deletions
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 |