diff options
author | Astatin <[email protected]> | 2024-12-17 18:42:11 +0900 |
---|---|---|
committer | Astatin <[email protected]> | 2024-12-17 18:42:11 +0900 |
commit | 2b0c6081d8a2c48c1f8412aefdcec6c2222e716c (patch) | |
tree | 9f1986c74b549856fcd566ea33c0de24b8483782 /entity/init.gbasm | |
parent | b4934d36f8a2f572c491a0d62f94b757221c6b68 (diff) |
Respawn enemies in other rooms when less than 5 enemies alive
Diffstat (limited to 'entity/init.gbasm')
-rw-r--r-- | entity/init.gbasm | 71 |
1 files changed, 69 insertions, 2 deletions
diff --git a/entity/init.gbasm b/entity/init.gbasm index f94cbd5..42248c8 100644 --- a/entity/init.gbasm +++ b/entity/init.gbasm @@ -60,6 +60,12 @@ Initialize_Entities: ADD $0a LD L, A + LD A, $00 + LD $mem_enemies_alive_count, A + + LD A, $ff + LD $mem_bunny_current_room_idx, A + CALL =Initialize_Fox CALL =Initialize_Fox CALL =Initialize_Fox @@ -90,10 +96,39 @@ Fix_Bunny_screen: RET Initialize_Fox: + LD A, $mem_enemies_alive_count + INC A + LD $mem_enemies_alive_count, A + LD A, $0d LD (HL+), A - LD A, $mem_number_of_rooms - CALL =RNG_Bound + LD A, $mem_bunny_current_room_idx + LD $tmp_var_6, A + CP $FF + JR Z, =Initialize_Fox.All_rooms_allowed + LD B, A + Initialize_Fox.Skip_bunny_room: + LD A, $mem_number_of_rooms + CP $01 + JR Z, =Initialize_Fox.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_Fox.Room_restriction.end + DEC A + JR =Initialize_Fox.Room_restriction.end + + Initialize_Fox.All_rooms_allowed: + LD A, $mem_number_of_rooms + CALL =RNG_Bound + Initialize_Fox.Room_restriction.end: + LD $tmp_var_4, A SLA A SLA A ADD $80 @@ -140,3 +175,35 @@ Initialize_Fox: LD L, A RET + +Respawn_Entities: + LD A, $mem_moving_animation_step + CP $04 + RET NZ + + LD A, $mem_enemies_alive_count + CP $05 + RET NC + + CALL =RNG_Step + AND $0f + CP $00 + RET NZ + + LD HL, $mem_entities_list + FindFreeEntity.loop: + ; This loop supposes that there is indeed enough space for a new entity + ; to be spawn (thus the previous mem_enemies_alive_count). + ; If entities are changed at some point to contain things that are not + ; counted in mem_enemies_alive_count, this could result in an infinite loop. + LD A, L + AND $f0 + ADD $10 + LD L, A + + LD A, $00 + CP (HL) + JR NZ, =FindFreeEntity.loop + + CALL =Initialize_Fox + RET |