diff options
author | Astatin <[email protected]> | 2025-05-02 15:28:14 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-05-02 15:28:14 +0200 |
commit | 4e618ff322cc0a6b1b7b8947983e4055b96e43d2 (patch) | |
tree | d28235e111fb147bfe3488a33a15dcd0d8012295 | |
parent | f137ecaba8297bb99b33559832e3131fda3646c2 (diff) |
Make stairs avoid bunny room
-rw-r--r-- | entity/init.gbasm | 33 | ||||
-rw-r--r-- | main.gbasm | 1 | ||||
-rw-r--r-- | map/objects.gbasm | 22 | ||||
-rw-r--r-- | map/utils.gbasm | 29 | ||||
-rw-r--r-- | playerattacks/hop.gbasm | 1 |
5 files changed, 56 insertions, 30 deletions
diff --git a/entity/init.gbasm b/entity/init.gbasm index 8267ee0..afbd9f3 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -22,6 +22,7 @@ Initialize_Entities: LD A, $mem_number_of_rooms CALL =RNG_Bound + LD $tmp_var_1, A SLA A SLA A ADD low($mem_room_list) @@ -102,6 +103,9 @@ Initialize_Entities: 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 Fix_Bunny_screen: @@ -144,33 +148,8 @@ Initialize_Entity: ; HL => pointer to entity struct, A => entity loaded index, 1 LD (HL+), A LD A, $mem_bunny_current_room_idx - LD $tmp_var_6, A - CP $FF - JR Z, =Initialize_Enemy.All_rooms_allowed - LD B, A - Initialize_Enemy.Skip_bunny_room: - LD A, $mem_number_of_rooms - CP $01 - JR Z, =Initialize_Enemy.All_rooms_allowed - - DEC A - CALL =RNG_Bound - LD $tmp_var_5, A - INC A - LD C, A - LD A, B - CP C - LD A, C - JR C, =Initialize_Enemy.Room_restriction.end - DEC A - - JR =Initialize_Enemy.Room_restriction.end - - Initialize_Enemy.All_rooms_allowed: - LD A, $mem_number_of_rooms - CALL =RNG_Bound - Initialize_Enemy.Room_restriction.end: - LD $tmp_var_4, A + CALL =Pick_Random_Room_Avoid_A + SLA A SLA A ADD low($mem_room_list) @@ -128,6 +128,7 @@ Entrypoint: .INCLUDE "utils.gbasm" .INCLUDE "dialogues/utils.gbasm" .INCLUDE "buttons.gbasm" +.INCLUDE "map/utils.gbasm" .INCLUDE "map/loading.gbasm" .INCLUDE "map/generation.gbasm" .INCLUDE "map/objects.gbasm" diff --git a/map/objects.gbasm b/map/objects.gbasm index bb3a35a..a79a954 100644 --- a/map/objects.gbasm +++ b/map/objects.gbasm @@ -27,12 +27,27 @@ Find_Free_Object_slot: ; Return free object slot in HL ($80 if none is found) RET +Spawn_object_in_random_room_avoid_bunny: ; Object tile in A, Object jump table id in E, Object pointer in HL + LD (HL+), A + + .retry: + CALL =.retry.entrypoint + JR =.retry + .retry.entrypoint: + LD A, $mem_bunny_current_room_idx + CALL =Pick_Random_Room_Avoid_A + JR =Spawn_object_in_random_room.place_object_in_room_A + Spawn_object_in_random_room: ; Object tile in A, Object jump table id in E, Object pointer in HL LD (HL+), A - .place_in_random_room: + .retry: + CALL =.retry.entrypoint + JR =.retry + .retry.entrypoint: LD A, $mem_number_of_rooms CALL =RNG_Bound + .place_object_in_room_A: SLA A SLA A ADD low($mem_room_list) @@ -69,7 +84,8 @@ Spawn_object_in_random_room: ; Object tile in A, Object jump table id in E, Obje CALL =Is_Collisionable CP $00 - JR NZ, =.place_in_random_room + RET NZ + ADD SP, $02 CALL =Check_other_object_collision CP $00 @@ -139,7 +155,7 @@ Check_other_object_collision: ; Object in HL (with only sprite x & y set), will Spawn_stairs: LD A, $60 LD E, $01 - JP =Spawn_object_in_random_room + JP =Spawn_object_in_random_room_avoid_bunny Spawn_carrot: LD A, $64 diff --git a/map/utils.gbasm b/map/utils.gbasm new file mode 100644 index 0000000..cf2c4ce --- /dev/null +++ b/map/utils.gbasm @@ -0,0 +1,29 @@ +Pick_Random_Room_Avoid_A: ; input A = room to avoid (or FF if none), output A = chosen room idx + PUSH BC + CP $FF + JR Z, =.All_rooms_allowed + LD B, A + .Skip_bunny_room: + LD A, $mem_number_of_rooms + CP $01 + JR Z, =.All_rooms_allowed + + DEC A + CALL =RNG_Bound + INC A + LD C, A + LD A, B + CP C + LD A, C + JR C, =.Room_restriction.end + DEC A + + JR =.Room_restriction.end + + .All_rooms_allowed: + LD A, $mem_number_of_rooms + CALL =RNG_Bound + .Room_restriction.end: + POP BC + RET + diff --git a/playerattacks/hop.gbasm b/playerattacks/hop.gbasm index ac89acd..6f51382 100644 --- a/playerattacks/hop.gbasm +++ b/playerattacks/hop.gbasm @@ -158,6 +158,7 @@ Hop_Attack_Loading_Regular: RET Hop_Attack: + CALL =Stairs_Action LD A, $mem_bunny_direction AND $07 LD D, A |