diff options
Diffstat (limited to 'map/objects.gbasm')
-rw-r--r-- | map/objects.gbasm | 22 |
1 files changed, 19 insertions, 3 deletions
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 |