diff options
author | Astatin <[email protected]> | 2025-02-04 16:11:08 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2025-02-04 16:11:08 +0900 |
commit | 3b67c86b61b5d8640860dd5e8b016790ee4814c3 (patch) | |
tree | ff32913f93af19bd3a86e0ec2f129a2f3de065ad /enemiesattacks | |
parent | aa7b1f0505f8b0e9cebe7d1444075abb8d756d9e (diff) |
Add penguins that can freeze the bunny and run away when it's already frozen
Diffstat (limited to 'enemiesattacks')
-rw-r--r-- | enemiesattacks/basic.gbasm | 2 | ||||
-rw-r--r-- | enemiesattacks/freeze.gbasm | 17 | ||||
-rw-r--r-- | enemiesattacks/laser.gbasm | 2 | ||||
-rw-r--r-- | enemiesattacks/walkaway.gbasm | 135 |
4 files changed, 154 insertions, 2 deletions
diff --git a/enemiesattacks/basic.gbasm b/enemiesattacks/basic.gbasm index 64805eb..ed2a633 100644 --- a/enemiesattacks/basic.gbasm +++ b/enemiesattacks/basic.gbasm @@ -1,4 +1,4 @@ -Basic_Attack: ; Direction to face in E. Result in BC (XY), Direction in D +Basic_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D LD A, E OR $10 LD D, A diff --git a/enemiesattacks/freeze.gbasm b/enemiesattacks/freeze.gbasm new file mode 100644 index 0000000..321e924 --- /dev/null +++ b/enemiesattacks/freeze.gbasm @@ -0,0 +1,17 @@ +Freeze_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D + LD A, E + OR $10 + LD D, A + + LD A, $01 + LD $mem_bunny_status, A + LD A, $02 + LD $mem_bunny_flags, A + LD A, $mem_bunny_direction + AND $07 + LD $mem_bunny_direction, A + CALL =Fix_Bunny_screen + LD A, $04 + LD $mem_bunny_status_clear_turn_counter, A + + RET diff --git a/enemiesattacks/laser.gbasm b/enemiesattacks/laser.gbasm index b351141..4a0d029 100644 --- a/enemiesattacks/laser.gbasm +++ b/enemiesattacks/laser.gbasm @@ -48,7 +48,7 @@ Laser_sight_check: ; BC = XY of the enemy. D is unchanged. Direction to face in LD E, $enum_direction_up RET -Laser_Attack: ; Direction to face in E. Result in BC (XY), Direction in D +Laser_Enemy_Attack: ; Direction to face in E. Result in BC (XY), Direction in D PUSH DE PUSH BC diff --git a/enemiesattacks/walkaway.gbasm b/enemiesattacks/walkaway.gbasm new file mode 100644 index 0000000..2fc21fe --- /dev/null +++ b/enemiesattacks/walkaway.gbasm @@ -0,0 +1,135 @@ +Walking_Away: ; entity XY in BC, Breaks DE + ; 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_predicted_x + LD $tmp_var_1, A + + LD A, $mem_bunny_predicted_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_predicted_y + LD $tmp_var_1, A + + LD A, $mem_bunny_predicted_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_left + JR =.Check_Horizontal_Collision + .Go_Left: + LD A, $enum_direction_right + + .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 + CALL =Is_Collisionable + POP BC + CP $00 + 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_up + JR =.Direction_check_end + .Go_Up: + LD A, $enum_direction_down + + .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: + + .Check_Collision: + PUSH BC + LD A, D + CALL =Get_Position_After_Move + CALL =Is_Collisionable + CALL =Carve_Entity_Collision_Map + POP BC + CP $00 + RET Z + RES 3, D + + RET |