aboutsummaryrefslogtreecommitdiff
path: root/entity
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 /entity
parent507a9876b85f47ff81cc9150bea858eec064ba05 (diff)
Refactoring the animations/directions + entities turn function with macros + finishing froge
Diffstat (limited to 'entity')
-rw-r--r--entity/actions.gbasm5
-rw-r--r--entity/bunny.gbasm35
-rw-r--r--entity/cat.gbasm159
-rw-r--r--entity/display.gbasm48
-rw-r--r--entity/fimsh.gbasm91
-rw-r--r--entity/fox.gbasm228
-rw-r--r--entity/frog.gbasm163
-rw-r--r--entity/init.gbasm19
-rw-r--r--entity/mouse.gbasm169
-rw-r--r--entity/penguin.gbasm192
-rw-r--r--entity/questgoal.gbasm5
-rw-r--r--entity/utils.gbasm116
12 files changed, 398 insertions, 832 deletions
diff --git a/entity/actions.gbasm b/entity/actions.gbasm
index 58ae380..92c2c5f 100644
--- a/entity/actions.gbasm
+++ b/entity/actions.gbasm
@@ -121,9 +121,10 @@ Enemy_Interaction:
AND $f0
LD $mem_entity_being_attacked_low, A
LD A, $mem_bunny_direction
- AND $07
- OR $10
+ RES 3, A
LD $mem_bunny_direction, A
+ LD A, $01
+ LD $mem_bunny_animation, A
LD A, $mem_map_loading_flags
SET 4, A
diff --git a/entity/bunny.gbasm b/entity/bunny.gbasm
index c58a645..dc04535 100644
--- a/entity/bunny.gbasm
+++ b/entity/bunny.gbasm
@@ -25,8 +25,10 @@ Move_Bunny:
CP $01
JR NZ, =.Freeze_shiver.end
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_status_clear_turn_counter
DEC A
@@ -37,9 +39,8 @@ Move_Bunny:
CALL =RNG_Step
CP $55
JP NC, =.Skip_turn
- LD A, $mem_bunny_direction
- OR $40
- LD $mem_bunny_direction, A
+ LD A, $04
+ LD $mem_bunny_animation, A
CALL =RNG_Step
CP $55
@@ -75,11 +76,21 @@ Move_Bunny:
BIT 3, A
JP NZ, =.Start_action_or_movement.end
+ LD A, $mem_bunny_direction
+ AND $70
+ LD D, A
+ SWAP A
+ OR D
+ LD $mem_bunny_direction, A
+
.Start_action_or_movement.test_movement:
LD A, $mem_button_direction
CP $00
JP Z, =.Start_action_or_movement.end
+ LD D, A
+ SWAP A
+ OR D
SET 3, A
LD D, A
@@ -176,9 +187,11 @@ Move_Bunny:
JP NZ, =.End_movement.end
LD A, $mem_bunny_direction
LD D, A
- AND $07
+ RES 3, A
BIT 3, D
LD $mem_bunny_direction, A
+ LD A, $00
+ LD $mem_bunny_animation, A
JP Z, =.End_movement.end
LD A, $mem_bunny_x
@@ -291,7 +304,7 @@ Move_Bunny:
LD A, $mem_bunny_y
LD C, A
LD A, $mem_bunny_direction
- OR $08
+ SET 3, A
AND $0f
LD D, A
LD A, $01
@@ -337,9 +350,10 @@ Move_Bunny:
.Interaction.for_else:
LD A, $mem_bunny_direction
- AND $07
- OR $10
+ RES 3, A
LD $mem_bunny_direction, A
+ LD A, $01
+ LD $mem_bunny_animation, A
LD A, $mem_map_loading_flags
SET 4, A
@@ -347,9 +361,8 @@ Move_Bunny:
.Interaction.end:
.Check_End_Action:
- LD A, $mem_bunny_direction
- AND $f0
- CP $10
+ LD A, $mem_bunny_animation
+ CP $01
JR NZ, =.Check_End_Action.end
.Check_End_Action.end:
diff --git a/entity/cat.gbasm b/entity/cat.gbasm
index 655fd1b..13f7be3 100644
--- a/entity/cat.gbasm
+++ b/entity/cat.gbasm
@@ -1,3 +1,31 @@
+Cat_Drop:
+ PUSH DE
+ LD E, $02
+ CALL =Check_attack_already_learnt
+ CP $01
+ JR Z, =.drops.hp_regen_item
+
+ .drops.attack_item:
+ LD D, $6C
+ LD E, $04
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+ JR =.drops.end
+
+ .drops.hp_regen_item:
+ LD D, $64
+ LD E, $02
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+
+ .drops.end:
+ POP DE
+ RET
+
Cat_Turn:
LD A, $mem_map_loading_flags
BIT 3, A
@@ -14,132 +42,17 @@ Cat_Turn:
LD A, (HL+)
LD D, A
- .Health_check:
- LD A, L
- AND $f0
- ADD $06
- LD L, A
-
- LD A, (HL)
- CP $00
- JR NZ, =.Health_check.end
-
- LD A, L
- AND $f0
- LD L, A
-
- LD (HL), $00
- LD A, $mem_enemies_alive_count
- DEC A
- LD $mem_enemies_alive_count, A
-
- ; Drop when deadged
- PUSH DE
- LD E, $02
- CALL =Check_attack_already_learnt
- CP $01
- JR Z, =.drops.hp_regen_item
-
- .drops.attack_item:
- LD D, $6C
- LD E, $04
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
- JR =.drops.end
-
- .drops.hp_regen_item:
- LD D, $64
- LD E, $02
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
-
- .drops.end:
- POP DE
-
- JP =.Skip_turn
- .Health_check.end:
-
- .Freeze_shiver:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Freeze_shiver.end
- LD A, L
- AND $f0
- ADD $08
- LD L, A
- LD A, $01
- CP (HL)
- JR NZ, =.Freeze_shiver.end
- LD A, D
- AND $07
- LD D, A
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
- LD A, D
- OR $40
- LD D, A
-
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
-
- LD A, $00
- LD (HL-), A
- RES 1, (HL)
- JP =.Skip_turn
- .Freeze_shiver.end:
-
- .Should_turn_be_skipped:
- LD A, L
- AND $f0
- ADD $08
- LD L, A
-
- BIT 0, (HL)
- JP NZ, =.Skip_turn
-
- .Start_action_or_movement:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Start_action_or_movement.end
-
- LD A, L
- AND $f0
- OR $07
- LD L, A
- RES 3, (HL)
-
- .Try_Basic_Attack:
- CALL =Check_player_next_to
- LD A, E
- CP $00
- JR Z, =.Try_Walking
- CALL =Basic_Enemy_Attack
-
- JR =.Start_action_or_movement.end
+ .ENTITY_HEALTH_CHECK =.Skip_turn =Cat_Drop
+ .ENTITY_FREEZE_SHIVER =.Skip_turn
+ .ENTITY_STATUS_SKIP_TURN =.Skip_turn
- .Try_Walking:
- CALL =Walking
- .Start_action_or_movement.end:
+ .RESET_BLINKING_MODE
- .End_movement:
- LD A, $mem_moving_animation_step
- CP $0f
- JP NZ, =.End_movement.end
+ .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end
+ CALL =Walking
+ .attack_end:
- LD A, D
- AND $07
- BIT 3, D
- LD D, A
- JR Z, =.End_movement.end
- LD A, $01
- .ADD_A_TO_DIRECTION_BC
- .End_movement.end:
+ CALL =Entity_End_movement
.Skip_Turn:
LD A, L
diff --git a/entity/display.gbasm b/entity/display.gbasm
index 42f4740..6477ca2 100644
--- a/entity/display.gbasm
+++ b/entity/display.gbasm
@@ -118,9 +118,12 @@ Display_Entity:
.Action_Animation:
- LD A, D
+ LD A, L
AND $f0
- CP $10
+ OR $0a
+ LD L, A
+ LD A, $01
+ CP (HL)
JR NZ, =.Action_Animation.end
LD A, $mem_moving_animation_step
@@ -147,9 +150,12 @@ Display_Entity:
.Action_Animation.end:
.SuperJump_Animation:
- LD A, D
+ LD A, L
AND $f0
- CP $30
+ OR $0a
+ LD L, A
+ LD A, $03
+ CP (HL)
JR NZ, =.SuperJump_Animation.end
LD A, $mem_moving_animation_step
@@ -170,9 +176,12 @@ Display_Entity:
.SuperJump_Animation.end:
.Shaking_Animation:
- LD A, D
+ LD A, L
AND $f0
- CP $40
+ OR $0a
+ LD L, A
+ LD A, $04
+ CP (HL)
JR NZ, =.Shaking_Animation.end
LD A, $mem_moving_animation_step
@@ -192,9 +201,12 @@ Display_Entity:
.Shaking_Animation.end:
.Moving_2x:
- LD A, D
+ LD A, L
AND $f0
- CP $50
+ OR $0a
+ LD L, A
+ LD A, $05
+ CP (HL)
JR NZ, =.Moving_2x.end
LD A, $mem_moving_animation_step
@@ -225,9 +237,15 @@ Display_Entity:
.Moving_2x.end:
.Moving_Hops:
- LD A, D
- AND $f8
- CP $08
+ BIT 3, D
+ JR Z, =.Moving_Hops.end
+ LD A, L
+ AND $f0
+ OR $0a
+ LD L, A
+ LD A, (HL)
+ LD A, $00
+ CP (HL)
JR NZ, =.Moving_Hops.end
LD A, $mem_moving_animation_step
@@ -245,6 +263,7 @@ Display_Entity:
.Moving_Hops.end:
LD A, D
+ SWAP A
AND $07
CP $enum_direction_left
@@ -328,9 +347,12 @@ Display_Entity:
RET
Flags_From_Animation: ; Expect entity in HL (offset doesn't matter) + breaks D (but result in A)
- LD A, D
+ LD A, L
AND $f0
- CP $20
+ OR $0a
+ LD L, A
+ LD A, $02
+ CP (HL)
LD D, $00
JR NZ, =Flags_From_Animation.Shadow_Palette
LD D, $40
diff --git a/entity/fimsh.gbasm b/entity/fimsh.gbasm
index 49c4f53..e5f6190 100644
--- a/entity/fimsh.gbasm
+++ b/entity/fimsh.gbasm
@@ -1,3 +1,11 @@
+Fimsh_Drop:
+ PUSH DE
+ LD D, $6C
+ LD E, $07
+ CALL =Spawn_object
+ POP DE
+ RET
+
Fimsh_Turn:
LD A, $mem_map_loading_flags
BIT 3, A
@@ -14,86 +22,13 @@ Fimsh_Turn:
LD A, (HL+)
LD D, A
- .Health_check:
- LD A, L
- AND $f0
- ADD $06
- LD L, A
-
- LD A, (HL)
- CP $00
- JR NZ, =.Health_check.end
-
- LD A, L
- AND $f0
- LD L, A
-
- LD (HL), $00
- LD A, $mem_enemies_alive_count
- DEC A
- LD $mem_enemies_alive_count, A
-
- PUSH DE
- LD D, $6C
- LD E, $07
- CALL =Spawn_object
- POP DE
-
- JP =.Skip_turn
- .Health_check.end:
-
- .Freeze_shiver:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Freeze_shiver.end
- LD A, L
- AND $f0
- ADD $08
- LD L, A
- LD A, $01
- CP (HL)
- JR NZ, =.Freeze_shiver.end
- LD A, D
- AND $07
- LD D, A
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
- LD A, D
- OR $40
- LD D, A
-
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
-
- LD A, $00
- LD (HL-), A
- RES 1, (HL)
- JP =.Skip_turn
- .Freeze_shiver.end:
-
- .Should_turn_be_skipped:
- LD A, L
- AND $f0
- ADD $08
- LD L, A
+ .ENTITY_HEALTH_CHECK =.Skip_turn =Fimsh_Drop
+ .ENTITY_FREEZE_SHIVER =.Skip_turn
+ .ENTITY_STATUS_SKIP_TURN =.Skip_turn
- BIT 0, (HL)
- JP NZ, =.Skip_turn
+ .RESET_BLINKING_MODE
- .End_movement:
- LD A, $mem_moving_animation_step
- CP $0f
- JP NZ, =.End_movement.end
- LD A, D
- AND $07
- BIT 3, D
- LD D, A
- JR Z, =.End_movement.end
- LD A, $01
- .ADD_A_TO_DIRECTION_BC
- .End_movement.end:
+ CALL =Entity_End_movement
.Skip_Turn:
LD A, L
diff --git a/entity/fox.gbasm b/entity/fox.gbasm
index 8e72ab4..4d5bd02 100644
--- a/entity/fox.gbasm
+++ b/entity/fox.gbasm
@@ -1,3 +1,31 @@
+Fox_Drop:
+ PUSH DE
+ LD E, $04
+ CALL =Check_attack_already_learnt
+ CP $01
+ JR Z, =.drops.ep_regen_item
+
+ .drops.attack_item:
+ LD D, $6C
+ LD E, $06
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+ JR =.drops.end
+
+ .drops.ep_regen_item:
+ LD D, $68
+ LD E, $03
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+
+ .drops.end:
+ POP DE
+ RET
+
Fox_Turn:
LD A, $mem_map_loading_flags
BIT 3, A
@@ -14,200 +42,20 @@ Fox_Turn:
LD A, (HL+)
LD D, A
- .Health_check:
- LD A, L
- AND $f0
- ADD $06
- LD L, A
-
- LD A, (HL)
- CP $00
- JR NZ, =.Health_check.end
-
- LD A, L
- AND $f0
- LD L, A
-
- LD (HL), $00
- LD A, $mem_enemies_alive_count
- DEC A
- LD $mem_enemies_alive_count, A
-
- ; Drop when deadged
- PUSH DE
- LD E, $04
- CALL =Check_attack_already_learnt
- CP $01
- JR Z, =.drops.ep_regen_item
-
- .drops.attack_item:
- LD D, $6C
- LD E, $06
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
- JR =.drops.end
-
- .drops.ep_regen_item:
- LD D, $68
- LD E, $03
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
-
- .drops.end:
- POP DE
-
- JP NZ, =.Skip_turn
- .Health_check.end:
-
- .Freeze_shiver:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Freeze_shiver.end
- LD A, L
- AND $f0
- ADD $08
- LD L, A
- LD A, $01
- CP (HL)
- JR NZ, =.Freeze_shiver.end
- LD A, D
- AND $07
- LD D, A
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
- LD A, D
- OR $40
- LD D, A
-
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
-
- LD A, $00
- LD (HL-), A
- RES 1, (HL)
- JP =.Skip_turn
- .Freeze_shiver.end:
-
- .Should_turn_be_skipped:
- LD A, L
- AND $f0
- ADD $08
- LD L, A
-
- BIT 0, (HL)
- JP NZ, =.Skip_turn
-
- .Start_action_or_movement:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Start_action_or_movement.end
-
- LD A, L
- AND $f0
- OR $07
- LD L, A
- RES 3, (HL)
-
- LD A, L
- AND $f0
- ADD $09
- LD L, A
- XOR A
- CP (HL)
- JR Z, =.Try_Basic_Attack
-
- CALL =Laser_sight_check
- LD A, E
- CP $00
- JR Z, =.Try_Basic_Attack
-
- 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
- JR =.Start_action_or_movement.end
-
- .attack:
- LD D, E
- LD A, L
- AND $f0
- ADD $07
- LD L, A
-
- SET 2, (HL)
-
- JR =.Start_action_or_movement.end
-
- .Try_Basic_Attack:
-
- CALL =Check_player_next_to
- LD A, E
- CP $00
- JR Z, =.Try_Walking
-
- CALL =Basic_Enemy_Attack
-
- JR =.Start_action_or_movement.end
-
- .Try_Walking:
-
- CALL =Walking
- .Start_action_or_movement.end:
-
- .End_movement:
- LD A, $mem_moving_animation_step
- CP $0f
- JP NZ, =.End_movement.end
- LD A, D
- AND $07
- BIT 3, D
- LD D, A
- JR Z, =.End_movement.check_end_of_turn_mode_attack
- LD A, $01
- .ADD_A_TO_DIRECTION_BC
-
- .End_movement.check_end_of_turn_mode_attack:
-
- LD A, L
- AND $f0
- ADD $07
- LD L, A
-
- BIT 2, (HL)
- RES 2, (HL)
- JR Z, =.End_movement.end
-
- CALL =Laser_sight_check
- LD A, D
- AND $07
- CP E
- JR NZ, =.laser_sight_check_fail
-
- CALL =Laser_Enemy_Attack
+ .ENTITY_HEALTH_CHECK =.Skip_turn =Fox_Drop
+ .ENTITY_FREEZE_SHIVER =.Skip_turn
+ .ENTITY_STATUS_SKIP_TURN =.Skip_turn
- LD A, L
- AND $f0
- ADD $09
- LD L, A
+ .RESET_BLINKING_MODE
- DEC (HL)
+ .ENTITY_TRY_ATTACK =Laser_sight_check =Laser_Prepare_Attack =.attack_end
+ .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end
+ CALL =Walking
+ .attack_end:
- .laser_sight_check_fail:
+ CALL =Entity_End_movement
- .End_movement.end:
+ CALL =Apply_Prepared_Laser_Enemy_Attack
.Skip_Turn:
LD A, L
diff --git a/entity/frog.gbasm b/entity/frog.gbasm
index c08d68f..268e473 100644
--- a/entity/frog.gbasm
+++ b/entity/frog.gbasm
@@ -1,3 +1,22 @@
+Frog_Drops: ; XY in (BC)
+ PUSH DE
+ LD E, $02
+ CALL =Check_attack_already_learnt
+ CP $01
+ JR Z, =.drops.hp_regen_item
+
+ .drops.hp_regen_item:
+ LD D, $64
+ LD E, $02
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+
+ .drops.end:
+ POP DE
+ RET
+
Frog_Turn:
LD A, $mem_map_loading_flags
BIT 3, A
@@ -14,144 +33,18 @@ Frog_Turn:
LD A, (HL+)
LD D, A
- .Health_check:
- LD A, L
- AND $f0
- ADD $06
- LD L, A
-
- LD A, (HL)
- CP $00
- JR NZ, =.Health_check.end
-
- LD A, L
- AND $f0
- LD L, A
-
- LD (HL), $00
- LD A, $mem_enemies_alive_count
- DEC A
- LD $mem_enemies_alive_count, A
-
- ; Drop when deadged
- PUSH DE
- LD E, $02
- CALL =Check_attack_already_learnt
- CP $01
- JR Z, =.drops.hp_regen_item
-
- .drops.hp_regen_item:
- LD D, $64
- LD E, $02
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
-
- .drops.end:
- POP DE
-
- JP =.Skip_turn
- .Health_check.end:
-
- .Freeze_shiver:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Freeze_shiver.end
- LD A, L
- AND $f0
- ADD $08
- LD L, A
- LD A, $01
- CP (HL)
- JR NZ, =.Freeze_shiver.end
- LD A, D
- AND $07
- LD D, A
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
- LD A, D
- OR $40
- LD D, A
-
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
-
- LD A, $00
- LD (HL-), A
- RES 1, (HL)
- JP =.Skip_turn
- .Freeze_shiver.end:
-
- .Should_turn_be_skipped:
- LD A, L
- AND $f0
- ADD $08
- LD L, A
-
- BIT 0, (HL)
- JP NZ, =.Skip_turn
-
- .Start_action_or_movement:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Start_action_or_movement.end
-
- LD A, L
- AND $f0
- OR $07
- LD L, A
- RES 3, (HL)
-
- LD A, L
- AND $f0
- ADD $09
- LD L, A
- XOR A
- CP (HL)
- JR Z, =.Try_Basic_Attack
-
- CALL =Grab_sight_check
- LD A, E
- CP $00
- JR Z, =.Try_Basic_Attack
-
- CALL =Grab_Enemy_Attack
-
- JR =.Start_action_or_movement.end
-
- .Try_Basic_Attack:
-
- CALL =Check_player_next_to
- LD A, E
- CP $00
- JR Z, =.Try_Walking
-
- CALL =Basic_Enemy_Attack
-
- JR =.Start_action_or_movement.end
-
- .Try_Walking:
-
- CALL =Walking
+ .ENTITY_HEALTH_CHECK =.Skip_turn =Frog_Drops
+ .ENTITY_FREEZE_SHIVER =.Skip_turn
+ .ENTITY_STATUS_SKIP_TURN =.Skip_turn
- .Start_action_or_movement.end:
+ .RESET_BLINKING_MODE
- .End_movement:
- LD A, $mem_moving_animation_step
- CP $0f
- JP NZ, =.End_movement.end
+ .ENTITY_TRY_ATTACK =Grab_sight_check =Grab_Enemy_Attack =.attack_end
+ .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end
+ CALL =Walking
+ .attack_end:
- LD A, D
- AND $07
- BIT 3, D
- LD D, A
- JR Z, =.End_movement.end
- LD A, $01
- .ADD_A_TO_DIRECTION_BC
- .End_movement.end:
+ CALL =Entity_End_movement
.Skip_Turn:
LD A, L
diff --git a/entity/init.gbasm b/entity/init.gbasm
index 80e3848..38d3141 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -65,6 +65,9 @@ Initialize_Entities:
INC HL
LD A, $enum_direction_down
+ LD (HL), A
+ SWAP A
+ OR (HL)
LD (HL+), A
; Turn
@@ -128,22 +131,6 @@ Initialize_Entities:
OR $08
LD $mem_prepared_viewport_y, A
- LD A, $mem_bunny_direction
- BIT 3, A
- RET Z
-
- LD A, $mem_bunny_direction
- DEC A
- XOR $01
- INC A
- LD D, A
- LD A, $mem_viewport_x
- LD B, A
- LD A, $mem_viewport_y
- LD C, A
- LD A, $mem_moving_animation_step
- .ADD_A_TO_DIRECTION_BC
-
RET
Initialize_Enemy: ; HL => pointer to entity struct
diff --git a/entity/mouse.gbasm b/entity/mouse.gbasm
index ebf54ff..75f84ab 100644
--- a/entity/mouse.gbasm
+++ b/entity/mouse.gbasm
@@ -1,3 +1,14 @@
+Mouse_Drop:
+ PUSH DE
+ LD D, $64
+ LD E, $02
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+ POP DE
+ RET
+
Mouse_Turn:
LD A, $mem_map_loading_flags
BIT 3, A
@@ -14,146 +25,72 @@ Mouse_Turn:
LD A, (HL+)
LD D, A
- .Health_check:
- LD A, L
- AND $f0
- ADD $06
- LD L, A
+ .ENTITY_HEALTH_CHECK =.Skip_turn =Mouse_Drop
+ .ENTITY_FREEZE_SHIVER =.Skip_turn
+ .ENTITY_STATUS_SKIP_TURN =.Skip_turn
- LD A, (HL)
- CP $00
- JR NZ, =.Health_check.end
+ .RESET_BLINKING_MODE
- LD A, L
- AND $f0
- LD L, A
-
- LD (HL), $00
- LD A, $mem_enemies_alive_count
- DEC A
- LD $mem_enemies_alive_count, A
-
- PUSH DE
- LD D, $64
- LD E, $02
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
- POP DE
-
- JP =.Skip_turn
- .Health_check.end:
+ .ENTITY_TRY_ATTACK =Check_player_next_to =Basic_Enemy_Attack =.attack_end
+ CALL =Walking
+ BIT 3, D
+ JR Z, =.attack_end
+ LD A, L
+ AND $f0
+ OR $0a
+ LD L, A
+ LD (HL), $05
+ LD A, (HL)
+ DBG
+ .attack_end:
- .Freeze_shiver:
+ .Mid_movement:
LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Freeze_shiver.end
- LD A, L
- AND $f0
- ADD $08
- LD L, A
- LD A, $01
- CP (HL)
- JR NZ, =.Freeze_shiver.end
- LD A, D
- AND $07
- LD D, A
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
- LD A, D
- OR $40
- LD D, A
-
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
+ CP $07
+ JR NZ, =.Mid_movement.end
- LD A, $00
- LD (HL-), A
- RES 1, (HL)
- JP =.Skip_turn
- .Freeze_shiver.end:
+ BIT 3, D
+ JR Z, =.Mid_movement.end
- .Should_turn_be_skipped:
LD A, L
AND $f0
- ADD $08
+ OR $0a
LD L, A
-
- BIT 0, (HL)
- JP NZ, =.Skip_turn
-
- .Start_action_or_movement:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Start_action_or_movement.end
+ LD A, $05
+ CP (HL)
+ LD A, (HL)
+ JR NZ, =.Mid_movement.end
LD A, L
AND $f0
- OR $07
+ OR $0a
LD L, A
- RES 3, (HL)
-
- .Try_Basic_Attack:
- CALL =Check_player_next_to
- LD A, E
- CP $00
- JR Z, =.Try_Walking
- CALL =Basic_Enemy_Attack
-
- JR =.Start_action_or_movement.end
-
- .Try_Walking:
- CALL =Walking
- BIT 3, D
- JR Z, =.Start_action_or_movement.end
- LD A, D
- OR $50
- LD D, A
- .Start_action_or_movement.end:
-
- .Mid_movement:
- LD A, $mem_moving_animation_step
- CP $07
- JR NZ, =.Mid_movement.end
-
- LD A, D
- AND $f0
- CP $50
- JR NZ, =.Mid_movement.end
+ LD (HL), $00
LD A, D
- AND $07
- BIT 3, D
+ RES 3, A
LD D, A
- JR Z, =.Mid_movement.end
LD A, $01
.ADD_A_TO_DIRECTION_BC
.Mid_movement.Try_Walking:
+ PUSH DE
CALL =Walking
BIT 3, D
- JR Z, =.Mid_movement.end
- LD A, D
- OR $50
- LD D, A
+ JR Z, =.Mid_movement.Walk_cancelled
+ LD A, L
+ AND $f0
+ OR $0a
+ LD L, A
+ LD (HL), $05
+ ADD SP, $02
+ JR =.Mid_movement.end
+ .Mid_movement.Walk_cancelled:
+ POP DE
+ RES 3, D
.Mid_movement.end:
- .End_movement:
- LD A, $mem_moving_animation_step
- CP $0f
- JR NZ, =.End_movement.end
-
- LD A, D
- AND $07
- BIT 3, D
- LD D, A
- JR Z, =.End_movement.end
- LD A, $01
- .ADD_A_TO_DIRECTION_BC
- .End_movement.end:
+ CALL =Entity_End_movement
.Skip_Turn:
LD A, L
diff --git a/entity/penguin.gbasm b/entity/penguin.gbasm
index 353af8e..a3b4937 100644
--- a/entity/penguin.gbasm
+++ b/entity/penguin.gbasm
@@ -1,3 +1,31 @@
+Penguin_Drop:
+ PUSH DE
+ LD E, $03
+ CALL =Check_attack_already_learnt
+ CP $01
+ JR Z, =.drops.ep_regen_item
+
+ .drops.attack_item:
+ LD D, $6C
+ LD E, $05
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+ JR =.drops.end
+
+ .drops.ep_regen_item:
+ LD D, $68
+ LD E, $03
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ CALL Z, =Spawn_object
+
+ .drops.end:
+ POP DE
+ RET
+
Penguin_Turn:
LD A, $mem_map_loading_flags
BIT 3, A
@@ -14,157 +42,31 @@ Penguin_Turn:
LD A, (HL+)
LD D, A
- .Health_check:
- LD A, L
- AND $f0
- ADD $06
- LD L, A
-
- LD A, (HL)
- CP $00
- JR NZ, =.Health_check.end
-
- LD A, L
- AND $f0
- LD L, A
-
- LD (HL), $00
- LD A, $mem_enemies_alive_count
- DEC A
- LD $mem_enemies_alive_count, A
-
- ; Drop when deadged
- PUSH DE
- LD E, $03
- CALL =Check_attack_already_learnt
- CP $01
- JR Z, =.drops.ep_regen_item
-
- .drops.attack_item:
- LD D, $6C
- LD E, $05
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
- JR =.drops.end
-
- .drops.ep_regen_item:
- LD D, $68
- LD E, $03
- CALL =RNG_Step
- AND $03
- CP $00
- CALL Z, =Spawn_object
-
- .drops.end:
- POP DE
-
- JP =.Skip_turn
- .Health_check.end:
-
- .Freeze_shiver:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Freeze_shiver.end
- LD A, L
- AND $f0
- ADD $08
- LD L, A
- LD A, $01
- CP (HL)
- JR NZ, =.Freeze_shiver.end
- LD A, D
- AND $07
- LD D, A
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
- LD A, D
- OR $40
- LD D, A
-
- CALL =RNG_Step
- CP $55
- JP NC, =.Skip_turn
-
- LD A, $00
- LD (HL-), A
- RES 1, (HL)
- JP =.Skip_turn
- .Freeze_shiver.end:
-
- .Should_turn_be_skipped:
- LD A, L
- AND $f0
- ADD $08
- LD L, A
-
- BIT 0, (HL)
- JP NZ, =.Skip_turn
-
- .Start_action_or_movement:
- LD A, $mem_moving_animation_step
- CP $00
- JP NZ, =.Start_action_or_movement.end
-
- LD A, L
- AND $f0
- OR $07
- LD L, A
- RES 3, (HL)
-
- LD A, $mem_bunny_status
- CP $01
- JR Z, =.Run_away
- CP $04
- JR Z, =.Run_away
-
- .Try_Freeze_Attack:
- LD A, L
- AND $f0
- ADD $09
- LD L, A
- XOR A
- CP (HL)
- JR Z, =.Try_Walking
-
- CALL =Check_player_next_to
- LD A, E
- CP $00
- JR Z, =.Try_Walking
- CALL =Freeze_Enemy_Attack
-
- LD A, L
- AND $f0
- ADD $09
- LD L, A
+ .ENTITY_HEALTH_CHECK =.Skip_turn =Cat_Drop
+ .ENTITY_FREEZE_SHIVER =.Skip_turn
+ .ENTITY_STATUS_SKIP_TURN =.Skip_turn
- DEC (HL)
+ .RESET_BLINKING_MODE
- JR =.Start_action_or_movement.end
+ LD A, $mem_moving_animation_step
+ CP $00
+ JR NZ, =.attack_end
+ LD A, $mem_bunny_status
+ CP $01
+ JR Z, =.Run_away
+ CP $04
+ JR Z, =.Run_away
- .Run_away:
- CALL =Walking_Away
+ .ENTITY_TRY_ATTACK =Freeze_sight_check =Freeze_Enemy_Attack =.attack_end
+ CALL =Walking
+ JR =.attack_end
- JR =.Start_action_or_movement.end
+ .Run_away:
+ CALL =Walking_Away
- .Try_Walking:
- CALL =Walking
- .Start_action_or_movement.end:
+ .attack_end:
- .End_movement:
- LD A, $mem_moving_animation_step
- CP $0f
- JP NZ, =.End_movement.end
- LD A, D
- AND $07
- BIT 3, D
- LD D, A
- JR Z, =.End_movement.end
- LD A, $01
- .ADD_A_TO_DIRECTION_BC
- .End_movement.end:
+ CALL =Entity_End_movement
.Skip_Turn:
LD A, L
diff --git a/entity/questgoal.gbasm b/entity/questgoal.gbasm
index 9885cea..445f56c 100644
--- a/entity/questgoal.gbasm
+++ b/entity/questgoal.gbasm
@@ -41,9 +41,8 @@ Open_Dialogue:
.START_SCRIPT =Demo_quest_bunny
- LD A, $mem_bunny_direction
- AND $0f
- LD $mem_bunny_direction, A
+ LD A, $00
+ LD $mem_bunny_animation, A
LD A, $enum_dungeon_dialogue_mode
LD $mem_requested_mode, A
diff --git a/entity/utils.gbasm b/entity/utils.gbasm
index 944faa8..8dea589 100644
--- a/entity/utils.gbasm
+++ b/entity/utils.gbasm
@@ -141,3 +141,119 @@ Spawn_object: ; Texture in D, XY in BC, jump table thingy in E
POP HL
.skip_spawn_loot:
RET
+
+.MACRODEF ENTITY_HEALTH_CHECK Skip_turn Drop_Function
+ LD A, L
+ AND $f0
+ ADD $06
+ LD L, A
+
+ LD A, (HL)
+ CP $00
+ JR NZ, =$end
+
+ LD A, L
+ AND $f0
+ LD L, A
+
+ LD (HL), $00
+ LD A, $mem_enemies_alive_count
+ DEC A
+ LD $mem_enemies_alive_count, A
+
+ CALL $Drop_Function
+
+ JP $Skip_turn
+ $end:
+.END
+
+.MACRODEF ENTITY_FREEZE_SHIVER Skip_turn
+ LD A, $mem_moving_animation_step
+ CP $00
+ JP NZ, =$end
+ LD A, L
+ AND $f0
+ ADD $08
+ LD L, A
+ LD A, $01
+ CP (HL)
+ JR NZ, =$end
+ RES 3, D
+ CALL =RNG_Step
+ CP $55
+ JP NC, $Skip_turn
+ LD A, L
+ AND $f0
+ OR $0a
+ LD L, A
+ LD (HL), $04
+
+ CALL =RNG_Step
+ CP $55
+ JP NC, $Skip_turn
+
+ LD A, $00
+ LD (HL-), A
+ RES 1, (HL)
+ JP $Skip_turn
+ $end:
+.END
+
+.MACRODEF ENTITY_STATUS_SKIP_TURN Skip_Turn
+ LD A, L
+ AND $f0
+ ADD $08
+ LD L, A
+
+ BIT 0, (HL)
+ JP NZ, $Skip_turn
+.END
+
+Entity_End_movement:
+ LD A, $mem_moving_animation_step
+ CP $0f
+ RET NZ
+
+ LD A, L
+ AND $f0
+ OR $0a
+ LD L, A
+ LD (HL), $00
+ LD A, D
+ RES 3, A
+ BIT 3, D
+ LD D, A
+ RET Z
+ LD A, $01
+ .ADD_A_TO_DIRECTION_BC
+ RET
+
+.MACRODEF RESET_BLINKING_MODE
+ LD A, $mem_moving_animation_step
+ CP $00
+ JP NZ, =$end
+
+ LD A, L
+ AND $f0
+ OR $07
+ LD L, A
+ RES 3, (HL)
+
+ $end:
+.END
+
+.MACRODEF ENTITY_TRY_ATTACK Sight_check Attack_Function Attack_end
+ LD A, $mem_moving_animation_step
+ CP $00
+ JP NZ, $Attack_end
+
+ CALL $Sight_check
+ LD A, $00
+ CP E
+ JR Z, =$next
+
+ CALL $Attack_Function
+ JP $Attack_end
+
+ $next:
+.END