aboutsummaryrefslogtreecommitdiff
path: root/enemiesattacks
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-02-04 16:11:08 +0900
committerAstatin <[email protected]>2025-02-04 16:11:08 +0900
commit3b67c86b61b5d8640860dd5e8b016790ee4814c3 (patch)
treeff32913f93af19bd3a86e0ec2f129a2f3de065ad /enemiesattacks
parentaa7b1f0505f8b0e9cebe7d1444075abb8d756d9e (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.gbasm2
-rw-r--r--enemiesattacks/freeze.gbasm17
-rw-r--r--enemiesattacks/laser.gbasm2
-rw-r--r--enemiesattacks/walkaway.gbasm135
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