diff options
author | Astatin <[email protected]> | 2025-06-03 14:51:59 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-06-03 14:51:59 +0200 |
commit | eca91612b60b5379f9e8d6ce6f51366db54aacc3 (patch) | |
tree | c5fad4dc000a5430958fa8b354f69b3ba6628fe6 /entity | |
parent | f3a70613f78023c25d9a075231cb55639a75ee99 (diff) |
Add loading from pregenerated collision map
Diffstat (limited to 'entity')
-rw-r--r-- | entity/init.gbasm | 179 |
1 files changed, 62 insertions, 117 deletions
diff --git a/entity/init.gbasm b/entity/init.gbasm index 38d3141..e0272be 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -1,8 +1,8 @@ Initialize_Entities: LD A, $mem_bunny_mana - LD C, A + LD E, A LD A, $mem_bunny_health - LD B, A + LD D, A LD HL, $mem_entities_list Clear_Entities.loop: XOR A @@ -10,58 +10,74 @@ Initialize_Entities: CP L JR NZ, =Clear_Entities.loop - LD A, B + LD A, D LD $mem_bunny_health, A - LD A, C + LD A, E LD $mem_bunny_mana, A - LD HL, $mem_entities_list - LD A, $01 - LD (HL+), A + CALL =Initialize_Bunny_Random_room - LD A, $mem_number_of_rooms - CALL =RNG_Bound + LD A, $00 + LD $mem_enemies_alive_count, A + + LD A, $mem_bunny_current_room_idx LD $tmp_var_1, A - SLA A - SLA A - ADD low($mem_room_list) - LD C, A + LD A, $ff + LD $mem_bunny_current_room_idx, A - LD B, high($mem_room_list) + LD A, $00 + LD $tmp_var_3, A + CALL =Initialize_Enemy + CALL =Initialize_Enemy + CALL =Initialize_Enemy + CALL =Initialize_Enemy + CALL =Initialize_Enemy + LD A, $tmp_var_1 + LD $mem_bunny_current_room_idx, A - LD A, (BC) - LD D, A - INC BC - LD A, (BC) - INC A - CALL =RNG_Bound - ADD D + CALL =Reset_Entities_Collision_Map - LD (HL+), A +Reset_viewport_thingies: + LD A, $mem_bunny_x + SUB $05 + LD $mem_viewport_x, A - INC BC + LD A, $mem_bunny_y + SUB $04 + LD $mem_viewport_y, A - LD A, (BC) - LD D, A - INC BC - LD A, (BC) - INC A - CALL =RNG_Bound - ADD D + LD A, $mem_viewport_x + SWAP A + AND $f0 + OR $08 + LD $mem_prepared_viewport_x, A - LD (HL), A + LD A, $mem_viewport_y + SWAP A + AND $f0 + OR $08 + LD $mem_prepared_viewport_y, A - PUSH BC - LD C, (HL) - DEC HL - LD B, (HL) + RET + +Initialize_Bunny_Random_room: + LD A, $ff + CALL =Pick_Random_Room_Avoid_A + LD $mem_bunny_current_room_idx, A + CALL =Pick_Room_position + +Initialize_Bunny: ; BC is XY position + LD HL, $mem_entities_list + LD A, $01 + LD (HL+), A + + LD (HL), B INC HL + LD (HL), C CALL =Carve_Entity_Collision_Map - POP BC - INC HL LD A, $enum_direction_down @@ -92,45 +108,6 @@ Initialize_Entities: AND $f0 ADD $10 LD L, A - - LD A, $00 - LD $mem_enemies_alive_count, A - - LD A, $ff - LD $mem_bunny_current_room_idx, A - - LD A, $00 - LD $tmp_var_3, A - CALL =Initialize_Enemy - CALL =Initialize_Enemy - CALL =Initialize_Enemy - CALL =Initialize_Enemy - CALL =Initialize_Enemy - LD A, $tmp_var_1 - LD $mem_bunny_current_room_idx, A - - CALL =Reset_Entities_Collision_Map - - LD A, $mem_bunny_x - SUB $05 - LD $mem_viewport_x, A - - LD A, $mem_bunny_y - SUB $04 - LD $mem_viewport_y, A - - LD A, $mem_viewport_x - SWAP A - AND $f0 - OR $08 - LD $mem_prepared_viewport_x, A - - LD A, $mem_viewport_y - SWAP A - AND $f0 - OR $08 - LD $mem_prepared_viewport_y, A - RET Initialize_Enemy: ; HL => pointer to entity struct @@ -147,58 +124,19 @@ Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 SLA A ADD B INC A - LD (HL+), A + LD (HL), A LD A, $mem_bunny_current_room_idx - CALL =Pick_Random_Room_Avoid_A - - SLA A - SLA A - ADD low($mem_room_list) - LD C, A - - LD B, high($mem_room_list) - - ; X - LD A, (BC) - LD D, A - INC BC - LD A, (BC) - INC A - CALL =RNG_Bound - ADD D - - LD (HL+), A - - INC BC - - ; Y - LD A, (BC) - LD D, A - INC BC - LD A, (BC) - INC A - CALL =RNG_Bound - ADD D - LD (HL), A + CALL =Pick_Room_position_Avoid_A ; Check if spawning on collisionable tile - PUSH BC - LD C, (HL) - DEC HL - LD B, (HL) - INC HL - CALL =Is_Collisionable CP $00 JR Z, =.no_collision XOR A - LD (HL-), A - LD (HL-), A LD (HL), A - POP BC LD A, $tmp_var_3 CP $01 @@ -209,6 +147,13 @@ Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 JP =Initialize_Entity .no_collision: + + INC HL + LD (HL), B + INC HL + LD (HL), C + INC HL + CALL =Carve_Entity_Collision_Map POP BC |