aboutsummaryrefslogtreecommitdiff
path: root/map/objects.gbasm
diff options
context:
space:
mode:
Diffstat (limited to 'map/objects.gbasm')
-rw-r--r--map/objects.gbasm22
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