diff options
author | Astatin <[email protected]> | 2025-04-29 09:27:37 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-04-29 09:27:37 +0200 |
commit | fb689cdc68b8d1da3d988da43671bd0ddb063e88 (patch) | |
tree | 25a93ebea1809c814e3780bc9b3d8dd092522683 /entity | |
parent | a846ccc0cc20fe49b5ee07e252b370dc005b38cd (diff) |
add earcopter + freeze as learned items + fix collision after item pick up
Diffstat (limited to 'entity')
-rw-r--r-- | entity/actions.gbasm | 12 | ||||
-rw-r--r-- | entity/cat.gbasm | 41 | ||||
-rw-r--r-- | entity/fimsh.gbasm | 162 | ||||
-rw-r--r-- | entity/fox.gbasm | 7 | ||||
-rw-r--r-- | entity/init.gbasm | 1 | ||||
-rw-r--r-- | entity/list.gbasm | 8 | ||||
-rw-r--r-- | entity/penguin.gbasm | 9 | ||||
-rw-r--r-- | entity/utils.gbasm | 39 |
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 |