diff options
author | Astatin <[email protected]> | 2025-01-24 18:08:33 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2025-01-24 18:08:33 +0900 |
commit | 1a6621e5b1da42ee4b6b9132790ec744efc009c2 (patch) | |
tree | 89aeb457555655d2e4ed74a0fe32bfca74851a26 /enemiesattacks | |
parent | 57326c9acf9cbb025d54093fb90fd70614659400 (diff) |
Add laser enemy attack
Diffstat (limited to 'enemiesattacks')
-rw-r--r-- | enemiesattacks/laser.gbasm | 113 | ||||
-rw-r--r-- | enemiesattacks/walk.gbasm | 8 |
2 files changed, 117 insertions, 4 deletions
diff --git a/enemiesattacks/laser.gbasm b/enemiesattacks/laser.gbasm new file mode 100644 index 0000000..63aad07 --- /dev/null +++ b/enemiesattacks/laser.gbasm @@ -0,0 +1,113 @@ +Laser_sight_check: ; BC = XY of the enemy. D is unchanged. Direction to face in E (or 0 if not) + LD E, $00 + + ; straight line + distance <= 4 + LD A, $mem_bunny_predicted_x + CP B + JR Z, =.vertical_distance_check + + LD A, $mem_bunny_predicted_y + CP C + RET NZ + + .horizontal_distance_check: + LD A, $mem_bunny_predicted_x + CP B + JR C, =.left + + .right: + SUB $05 + CP B + RET NC + LD E, $enum_direction_right + RET + + .left: + ADD $04 + CP B + RET C + LD E, $enum_direction_left + RET + + .vertical_distance_check: + LD A, $mem_bunny_predicted_y + CP C + JR C, =.up + + .down: + SUB $05 + CP C + RET NC + LD E, $enum_direction_down + RET + + .up: + ADD $04 + CP C + RET C + LD E, $enum_direction_up + RET + +Laser_Attack: ; Direction to face in E. Result in BC (XY), Direction in D + PUSH DE + PUSH BC + + LD A, E + DEC A + AND $03 + SWAP A + SLA A + SLA A + OR $03 ; Laser_Animation + LD D, A + + LD A, C + ADD B + LD B, A + + LD A, $mem_bunny_x + LD C, A + LD A, $mem_bunny_y + ADD C + SUB B + .ABS + SWAP A + LD E, A + + POP BC + LD A, D + CALL =Try_Launch_Animation + + LD A, $enum_animation_wait_mode + LD $mem_requested_mode, A + LD $mem_current_mode, A + LD A, E + SUB $f + LD E, A + LD A, $mem_animation_wait_frames + CP E + JR NC, =.skip_animation_wait_frames_update + + LD A, E + LD $mem_animation_wait_frames, A + + .skip_animation_wait_frames_update: + + LD A, $mem_animation_wait_frames + DBG + + POP DE + + 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: + + RET diff --git a/enemiesattacks/walk.gbasm b/enemiesattacks/walk.gbasm index aa66848..9b196e5 100644 --- a/enemiesattacks/walk.gbasm +++ b/enemiesattacks/walk.gbasm @@ -27,10 +27,10 @@ Walking: ; entity XY in BC, Breaks DE JP =.Check_Collision .Follow_bunny: - LD A, $mem_bunny_x + LD A, $mem_bunny_predicted_x LD $tmp_var_1, A - LD A, $mem_bunny_y + LD A, $mem_bunny_predicted_y LD $tmp_var_2, A CALL =RNG_Step @@ -40,10 +40,10 @@ Walking: ; entity XY in BC, Breaks DE CP $00 JR Z, =.skip_invert_axis - LD A, $mem_bunny_y + LD A, $mem_bunny_predicted_y LD $tmp_var_1, A - LD A, $mem_bunny_x + LD A, $mem_bunny_predicted_x LD $tmp_var_2, A LD E, B |