aboutsummaryrefslogtreecommitdiff
path: root/entity
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-01-16 18:13:21 +0900
committerAstatin <[email protected]>2025-01-16 18:13:21 +0900
commit02038990a93c0b4cf58269b5456327ea64b998b7 (patch)
tree8f23c7270bc705d17d9d380d3a927f12f20ca1fa /entity
parentdc5a9431bf4438000dcd028aa6b9c17c9ca492d8 (diff)
Move basic enemy attack & walker AI to enemiesattacks
Diffstat (limited to 'entity')
-rw-r--r--entity/actions.gbasm200
-rw-r--r--entity/bunny.gbasm41
-rw-r--r--entity/collisions.gbasm2
-rw-r--r--entity/init.gbasm8
4 files changed, 52 insertions, 199 deletions
diff --git a/entity/actions.gbasm b/entity/actions.gbasm
index 944ab43..520eb0a 100644
--- a/entity/actions.gbasm
+++ b/entity/actions.gbasm
@@ -276,204 +276,16 @@ Fox_Turn:
CP $00
JP NZ, =.Start_action_or_movement.end
- ; Is bunny right next to fox
- .Check_next_to_vertical:
-
- LD A, $mem_bunny_x
- CP B
- JR NZ, =.Check_next_to_horizontal
-
- ; up
- LD E, $14
- LD A, $mem_bunny_y
- SUB $01
- CP C
- JR Z, =.Start_Attack
-
- ; down
- LD E, $13
- ADD $02
- CP C
- JR Z, =.Start_Attack
-
- JR =.Check_next_to.end
-
- .Check_next_to_horizontal:
-
- LD A, $mem_bunny_y
- CP C
- JR NZ, =.Check_next_to.end
-
- ; left
- LD E, $12
- LD A, $mem_bunny_x
- SUB $01
- CP B
- JR Z, =.Start_Attack
-
- ; right
- LD E, $11
- ADD $02
- CP B
- JR Z, =.Start_Attack
-
- JR NZ, =.Check_next_to.end
-
- .Start_Attack:
- LD D, E
-
- 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:
-
- JP =.Check_Collision
-
- .Check_next_to.end:
-
- ; 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_x
- LD $tmp_var_1, A
-
- LD A, $mem_bunny_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_y
- LD $tmp_var_1, A
-
- LD A, $mem_bunny_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_right
- JR =.Check_Horizontal_Collision
- .Go_Left:
- LD A, $enum_direction_left
-
- .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
- LD A, C
- CALL =Is_Collisionable
- POP BC
- CP $00
+ CALL =Check_player_next_to
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_down
- JR =.Direction_check_end
- .Go_Up:
- LD A, $enum_direction_up
-
- .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:
+ JR Z, =.nyo_basic_attack
- .Check_Collision:
- LD A, D
- PUSH BC
- CALL =Get_Position_After_Move
- LD A, C
- CALL =Is_Collisionable
- CALL =Carve_Entity_Collision_Map
- POP BC
- CP $00
- JR Z, =.Start_action_or_movement.not_collision
- RES 3, D
- .Start_action_or_movement.not_collision:
+ CALL =Basic_Attack
+ JR =.Start_action_or_movement.end
+ .nyo_basic_attack:
+ CALL =Walking
.Start_action_or_movement.end:
.End_movement:
diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm
index 7f274ff..042f94b 100644
--- a/entity/bunny.gbasm
+++ b/entity/bunny.gbasm
@@ -16,6 +16,47 @@ Move_Bunny:
LD E, $02
.Normal_speed:
+ .Freeze_shiver:
+ LD A, $mem_moving_animation_step
+ CP $00
+ JP NZ, =.Freeze_shiver.end
+ LD A, $mem_bunny_status
+ CP $01
+ JR NZ, =.Freeze_shiver.end
+ LD A, $mem_bunny_direction
+ AND $07
+ LD $mem_bunny_direction, A
+ CALL =RNG_Step
+ CP $55
+ JP NC, =.Skip_turn
+ LD A, $mem_bunny_direction
+ OR $40
+ LD $mem_bunny_direction, A
+
+ CALL =RNG_Step
+ CP $55
+ JP NC, =.Skip_turn
+
+ LD A, $00
+ LD $mem_bunny_status, A
+ LD A, $mem_bunny_flags
+ RES 1, A
+ LD $mem_bunny_flags, A
+ JP =.Skip_turn
+ .Freeze_shiver.end:
+
+ .Should_turn_be_skipped:
+ LD A, $mem_bunny_status
+ BIT 0, A
+ JR Z, =.no_skip
+ .Skip_turn:
+ LD A, $mem_map_loading_flags
+ SET 3, A
+ LD $mem_map_loading_flags, A
+ RET
+
+ .no_skip:
+
.Start_action_or_movement:
LD A, $mem_map_loading_flags
BIT 3, A
diff --git a/entity/collisions.gbasm b/entity/collisions.gbasm
index 022f1ef..13120a6 100644
--- a/entity/collisions.gbasm
+++ b/entity/collisions.gbasm
@@ -61,7 +61,7 @@ Is_Collisionable: ; X in A, Y in B, Result A
LD L, A
LD C, B
- LD B, $mem_dungeon_map_high
+ LD B, high($mem_dungeon_map)
LD A, (BC)
PUSH AF
LD A, C
diff --git a/entity/init.gbasm b/entity/init.gbasm
index 1b2c90b..4924a5b 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -19,10 +19,10 @@ Initialize_Entities:
CALL =RNG_Bound
SLA A
SLA A
- ADD $80
+ ADD low($mem_room_list)
LD C, A
- LD B, $c8
+ LD B, high($mem_room_list)
LD A, (BC)
LD D, A
@@ -142,10 +142,10 @@ Initialize_Enemy: ; HL => pointer to entity struct
LD $tmp_var_4, A
SLA A
SLA A
- ADD $80
+ ADD low($mem_room_list)
LD C, A
- LD B, $c8
+ LD B, high($mem_room_list)
LD A, (BC)
LD D, A