aboutsummaryrefslogtreecommitdiff
path: root/entity
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-04-29 09:27:37 +0200
committerAstatin <[email protected]>2025-04-29 09:27:37 +0200
commitfb689cdc68b8d1da3d988da43671bd0ddb063e88 (patch)
tree25a93ebea1809c814e3780bc9b3d8dd092522683 /entity
parenta846ccc0cc20fe49b5ee07e252b370dc005b38cd (diff)
add earcopter + freeze as learned items + fix collision after item pick up
Diffstat (limited to 'entity')
-rw-r--r--entity/actions.gbasm12
-rw-r--r--entity/cat.gbasm41
-rw-r--r--entity/fimsh.gbasm162
-rw-r--r--entity/fox.gbasm7
-rw-r--r--entity/init.gbasm1
-rw-r--r--entity/list.gbasm8
-rw-r--r--entity/penguin.gbasm9
-rw-r--r--entity/utils.gbasm39
8 files changed, 237 insertions, 42 deletions
diff --git a/entity/actions.gbasm b/entity/actions.gbasm
index 57b9e78..083aed3 100644
--- a/entity/actions.gbasm
+++ b/entity/actions.gbasm
@@ -1,7 +1,13 @@
Entities_Actions:
LD A, $mem_moving_animation_step
CP $09
- JR NZ, =.Action_Functions
+ JR Z, =.Reset_Entities_Collision_Map
+ LD A, $mem_map_loading_flags
+ BIT 5, A
+
+ JR Z, =.Action_Functions
+
+ .Reset_Entities_Collision_Map:
CALL =Reset_Entities_Collision_Map
.Action_Functions:
@@ -81,6 +87,10 @@ Turn_Jump_table:
JP =QuestGoal_Turn
NOP
+ ; 06
+ JP =Fimsh_Turn
+ NOP
+
Interaction_Jump_table:
; 00
RET
diff --git a/entity/cat.gbasm b/entity/cat.gbasm
index 1ddaac0..23d1510 100644
--- a/entity/cat.gbasm
+++ b/entity/cat.gbasm
@@ -33,42 +33,13 @@ Cat_Turn:
DEC A
LD $mem_enemies_alive_count, A
- CALL =RNG_Step
- AND $07
- CP $00
- JR NZ, =.skip_spawn_loot
- PUSH HL
- CALL =Find_Free_Object_slot
- LD A, $80
- CP L
- JR Z, =.skip_spawn_loot_pop_hl
-
- LD A, $6C
- LD (HL+), A
- LD A, B
- LD (HL+), A
- LD A, C
- LD (HL+), A
- CALL =Check_other_object_collision
- CP $00
- JR NZ, =.skip_spawn_loot_pop_hl
- LD A, L
- AND $f8
- ADD $03
- LD L, A
- LD (HL), $04
- LD A, L
- SRA A
- SRA A
- SRA A
- SUB $01
- LD $mem_object_load_counter, A
-
- .skip_spawn_loot_pop_hl:
- POP HL
- .skip_spawn_loot:
+ PUSH DE
+ LD D, $6C
+ LD E, $04
+ CALL =Spawn_object
+ POP DE
- JP NZ, =.Skip_turn
+ JP =.Skip_turn
.Health_check.end:
.Freeze_shiver:
diff --git a/entity/fimsh.gbasm b/entity/fimsh.gbasm
new file mode 100644
index 0000000..9368c2b
--- /dev/null
+++ b/entity/fimsh.gbasm
@@ -0,0 +1,162 @@
+Fimsh_Turn:
+ LD A, $mem_map_loading_flags
+ BIT 3, A
+ RET Z
+
+ PUSH HL
+ PUSH BC
+ PUSH DE
+ INC HL
+ LD A, (HL+)
+ LD B, A
+ LD A, (HL+)
+ LD C, A
+ 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, $05
+ 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
+
+ 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
+
+ DEC (HL)
+
+ JR =.Start_action_or_movement.end
+
+ .Run_away:
+ CALL =Walking_Away
+
+ 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.end
+ LD A, $01
+ .ADD_A_TO_DIRECTION_BC
+ .End_movement.end:
+
+ .Skip_Turn:
+ LD A, L
+ AND $f0
+ LD L, A
+ INC HL
+ LD A, B
+ LD (HL+), A
+ LD A, C
+ LD (HL+), A
+ LD A, D
+ LD (HL+), A
+ POP DE
+ POP BC
+ POP HL
+ RET
diff --git a/entity/fox.gbasm b/entity/fox.gbasm
index 89df17e..6f12b3d 100644
--- a/entity/fox.gbasm
+++ b/entity/fox.gbasm
@@ -32,6 +32,13 @@ Fox_Turn:
LD A, $mem_enemies_alive_count
DEC A
LD $mem_enemies_alive_count, A
+
+ PUSH DE
+ LD D, $6C
+ LD E, $06
+ CALL =Spawn_object
+ POP DE
+
JP NZ, =.Skip_turn
.Health_check.end:
diff --git a/entity/init.gbasm b/entity/init.gbasm
index 09ca315..5a42dfb 100644
--- a/entity/init.gbasm
+++ b/entity/init.gbasm
@@ -415,7 +415,6 @@ Update_Enemies_Spawning_Pattern:
OR E
LD $mem_entity_spawning_pattern, A
- DBG
POP DE
POP BC
diff --git a/entity/list.gbasm b/entity/list.gbasm
index 762f43f..ff70248 100644
--- a/entity/list.gbasm
+++ b/entity/list.gbasm
@@ -91,7 +91,7 @@ Entity_list:
.DB $05
; Spawning rate (2 lsb)
- .DB 0b01
+ .DB 0b11
.PADTO =.Penguin+8
@@ -124,7 +124,7 @@ Entity_list:
.DB =OBJ_Tile_Image_Data.Fimsh
; Turn Jump Table index
- .DB $00
+ .DB $06
; Interaction Jump Table index
.DB $02
@@ -139,7 +139,7 @@ Entity_list:
.DB $00
; Spawning rate (2 lsb)
- .DB 0b00
+ .DB 0b11
.PADTO =.Fimsh+8
@@ -151,7 +151,7 @@ Entity_list:
.DB $05
; Interaction Jump Table index
- .DB $02
+ .DB $01
; Starting health
.DB $00
diff --git a/entity/penguin.gbasm b/entity/penguin.gbasm
index 75bba8c..a317301 100644
--- a/entity/penguin.gbasm
+++ b/entity/penguin.gbasm
@@ -32,7 +32,14 @@ Penguin_Turn:
LD A, $mem_enemies_alive_count
DEC A
LD $mem_enemies_alive_count, A
- JP NZ, =.Skip_turn
+
+ PUSH DE
+ LD D, $6C
+ LD E, $05
+ CALL =Spawn_object
+ POP DE
+
+ JP =.Skip_turn
.Health_check.end:
.Freeze_shiver:
diff --git a/entity/utils.gbasm b/entity/utils.gbasm
index 8394f9f..592b473 100644
--- a/entity/utils.gbasm
+++ b/entity/utils.gbasm
@@ -106,3 +106,42 @@ Entity_idx_to_entity_list_ptr: ; loaded idx in A, return in BC
POP DE
RET
+
+Spawn_object: ; Texture in D, XY in BC, jump table thingy in E
+ CALL =RNG_Step
+ AND $03
+ CP $00
+ JR NZ, =.skip_spawn_loot
+ PUSH HL
+ CALL =Find_Free_Object_slot
+ LD A, $80
+ CP L
+ JR Z, =.skip_spawn_loot_pop_hl
+
+ LD A, D
+ LD (HL+), A
+ LD A, B
+ LD (HL+), A
+ LD A, C
+ LD (HL+), A
+ CALL =Check_other_object_collision
+ CP $00
+ JR NZ, =.skip_spawn_loot_pop_hl
+ LD A, L
+ AND $f8
+ ADD $03
+ LD L, A
+ LD (HL), E
+
+ ; set the object load counter to the object so it doesn't take 16 frames to load it
+ LD A, L
+ SRA A
+ SRA A
+ SRA A
+ SUB $01
+ LD $mem_object_load_counter, A
+
+ .skip_spawn_loot_pop_hl:
+ POP HL
+ .skip_spawn_loot:
+ RET