aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-05-02 15:28:14 +0200
committerAstatin <[email protected]>2025-05-02 15:28:14 +0200
commit4e618ff322cc0a6b1b7b8947983e4055b96e43d2 (patch)
treed28235e111fb147bfe3488a33a15dcd0d8012295
parentf137ecaba8297bb99b33559832e3131fda3646c2 (diff)
Make stairs avoid bunny room
-rw-r--r--entity/init.gbasm33
-rw-r--r--main.gbasm1
-rw-r--r--map/objects.gbasm22
-rw-r--r--map/utils.gbasm29
-rw-r--r--playerattacks/hop.gbasm1
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)
diff --git a/main.gbasm b/main.gbasm
index dc788d3..37605bc 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -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