aboutsummaryrefslogtreecommitdiff
path: root/enemiesattacks
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-05-09 17:44:37 +0200
committerAstatin <[email protected]>2025-05-09 17:44:37 +0200
commitb0f9e2e6d53983faa9d213b40d2bd6a23473e134 (patch)
treee8bf5eedd762203972afa10c6be79692767a3d2f /enemiesattacks
parent507a9876b85f47ff81cc9150bea858eec064ba05 (diff)
Refactoring the animations/directions + entities turn function with macros + finishing froge
Diffstat (limited to 'enemiesattacks')
-rw-r--r--enemiesattacks/basic.gbasm18
-rw-r--r--enemiesattacks/freeze.gbasm40
-rw-r--r--enemiesattacks/grab.gbasm73
-rw-r--r--enemiesattacks/laser.gbasm75
-rw-r--r--enemiesattacks/walk.gbasm12
-rw-r--r--enemiesattacks/walkaway.gbasm8
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