diff options
author | Astatin <[email protected]> | 2025-01-16 18:13:21 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2025-01-16 18:13:21 +0900 |
commit | 02038990a93c0b4cf58269b5456327ea64b998b7 (patch) | |
tree | 8f23c7270bc705d17d9d380d3a927f12f20ca1fa /entity | |
parent | dc5a9431bf4438000dcd028aa6b9c17c9ca492d8 (diff) |
Move basic enemy attack & walker AI to enemiesattacks
Diffstat (limited to 'entity')
-rw-r--r-- | entity/actions.gbasm | 200 | ||||
-rw-r--r-- | entity/bunny.gbasm | 41 | ||||
-rw-r--r-- | entity/collisions.gbasm | 2 | ||||
-rw-r--r-- | entity/init.gbasm | 8 |
4 files changed, 52 insertions, 199 deletions
diff --git a/entity/actions.gbasm b/entity/actions.gbasm index 944ab43..520eb0a 100644 --- a/entity/actions.gbasm +++ b/entity/actions.gbasm @@ -276,204 +276,16 @@ Fox_Turn: CP $00 JP NZ, =.Start_action_or_movement.end - ; Is bunny right next to fox - .Check_next_to_vertical: - - LD A, $mem_bunny_x - CP B - JR NZ, =.Check_next_to_horizontal - - ; up - LD E, $14 - LD A, $mem_bunny_y - SUB $01 - CP C - JR Z, =.Start_Attack - - ; down - LD E, $13 - ADD $02 - CP C - JR Z, =.Start_Attack - - JR =.Check_next_to.end - - .Check_next_to_horizontal: - - LD A, $mem_bunny_y - CP C - JR NZ, =.Check_next_to.end - - ; left - LD E, $12 - LD A, $mem_bunny_x - SUB $01 - CP B - JR Z, =.Start_Attack - - ; right - LD E, $11 - ADD $02 - CP B - JR Z, =.Start_Attack - - JR NZ, =.Check_next_to.end - - .Start_Attack: - LD D, E - - LD A, $mem_bunny_health - SUB $01 - JR C, =.health_underflow_fix - DAA - LD $mem_bunny_health, A - JR =.Skip_health_underflow_fix - - .health_underflow_fix: - LD A, $00 - LD $mem_bunny_health, A - .Skip_health_underflow_fix: - - JP =.Check_Collision - - .Check_next_to.end: - - ; Is Bunny close enough to follow - LD A, $mem_bunny_x - SUB B - .ABS - CP $08 - JR NC, =.Random_walker - - LD A, $mem_bunny_y - SUB C - .ABS - CP $08 - JR NC, =.Random_walker - - JR =.Follow_bunny - - .Random_walker: - CALL =RNG_Step - LD E, $00 - RR A - RR E - SWAP E - AND $03 - INC A - OR E - LD D, A - JP =.Check_Collision - - .Follow_bunny: - LD A, $mem_bunny_x - LD $tmp_var_1, A - - LD A, $mem_bunny_y - LD $tmp_var_2, A - - CALL =RNG_Step - AND $02 - LD $tmp_var_3, A - - CP $00 - JR Z, =.skip_invert_axis - - LD A, $mem_bunny_y - LD $tmp_var_1, A - - LD A, $mem_bunny_x - LD $tmp_var_2, A - - LD E, B - LD B, C - LD C, E - - .skip_invert_axis: - - ; Choose direction - LD A, B - ADD $80 - LD E, A - LD A, $tmp_var_1 - ADD $80 - CP E - JR Z =.Vertical - JR C =.Go_Left - - .Go_Right: - LD A, $enum_direction_right - JR =.Check_Horizontal_Collision - .Go_Left: - LD A, $enum_direction_left - - .Check_Horizontal_Collision: - LD E, A - DEC E - LD A, $tmp_var_3 - XOR E - INC E - INC A - OR $08 - PUSH BC - CALL =Get_Position_After_Move - LD A, C - CALL =Is_Collisionable - POP BC - CP $00 + CALL =Check_player_next_to LD A, E - JR Z, =.Direction_check_end - - .Vertical: - LD A, C - ADD $80 - LD E, A - LD A, $tmp_var_2 - ADD $80 - CP E - - JR Z =.No_movement - JR C =.Go_Up - .Go_Down: - LD A, $enum_direction_down - JR =.Direction_check_end - .Go_Up: - LD A, $enum_direction_up - - .Direction_check_end: - - DEC A - LD E, A - LD A, $tmp_var_3 - XOR E - INC A - OR $08 - LD D, A - - ; Check collision - - .No_movement: - LD A, $tmp_var_3 CP $00 - JR Z, =.skip_invert_axis2 - LD E, B - LD B, C - LD C, E - .skip_invert_axis2: + JR Z, =.nyo_basic_attack - .Check_Collision: - LD A, D - PUSH BC - CALL =Get_Position_After_Move - LD A, C - CALL =Is_Collisionable - CALL =Carve_Entity_Collision_Map - POP BC - CP $00 - JR Z, =.Start_action_or_movement.not_collision - RES 3, D - .Start_action_or_movement.not_collision: + CALL =Basic_Attack + JR =.Start_action_or_movement.end + .nyo_basic_attack: + CALL =Walking .Start_action_or_movement.end: .End_movement: diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm index 7f274ff..042f94b 100644 --- a/entity/bunny.gbasm +++ b/entity/bunny.gbasm @@ -16,6 +16,47 @@ Move_Bunny: LD E, $02 .Normal_speed: + .Freeze_shiver: + LD A, $mem_moving_animation_step + CP $00 + JP NZ, =.Freeze_shiver.end + LD A, $mem_bunny_status + CP $01 + JR NZ, =.Freeze_shiver.end + LD A, $mem_bunny_direction + AND $07 + LD $mem_bunny_direction, A + CALL =RNG_Step + CP $55 + JP NC, =.Skip_turn + LD A, $mem_bunny_direction + OR $40 + LD $mem_bunny_direction, A + + CALL =RNG_Step + CP $55 + JP NC, =.Skip_turn + + LD A, $00 + LD $mem_bunny_status, A + LD A, $mem_bunny_flags + RES 1, A + LD $mem_bunny_flags, A + JP =.Skip_turn + .Freeze_shiver.end: + + .Should_turn_be_skipped: + LD A, $mem_bunny_status + BIT 0, A + JR Z, =.no_skip + .Skip_turn: + LD A, $mem_map_loading_flags + SET 3, A + LD $mem_map_loading_flags, A + RET + + .no_skip: + .Start_action_or_movement: LD A, $mem_map_loading_flags BIT 3, A diff --git a/entity/collisions.gbasm b/entity/collisions.gbasm index 022f1ef..13120a6 100644 --- a/entity/collisions.gbasm +++ b/entity/collisions.gbasm @@ -61,7 +61,7 @@ Is_Collisionable: ; X in A, Y in B, Result A LD L, A LD C, B - LD B, $mem_dungeon_map_high + LD B, high($mem_dungeon_map) LD A, (BC) PUSH AF LD A, C diff --git a/entity/init.gbasm b/entity/init.gbasm index 1b2c90b..4924a5b 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -19,10 +19,10 @@ Initialize_Entities: CALL =RNG_Bound SLA A SLA A - ADD $80 + ADD low($mem_room_list) LD C, A - LD B, $c8 + LD B, high($mem_room_list) LD A, (BC) LD D, A @@ -142,10 +142,10 @@ Initialize_Enemy: ; HL => pointer to entity struct LD $tmp_var_4, A SLA A SLA A - ADD $80 + ADD low($mem_room_list) LD C, A - LD B, $c8 + LD B, high($mem_room_list) LD A, (BC) LD D, A |