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