aboutsummaryrefslogtreecommitdiff
path: root/src/driver.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/driver.s')
-rw-r--r--src/driver.s28
1 files changed, 18 insertions, 10 deletions
diff --git a/src/driver.s b/src/driver.s
index 448efa2..f747c4b 100644
--- a/src/driver.s
+++ b/src/driver.s
@@ -161,15 +161,6 @@
dey
bne @bullets_reset_loop
- ;; Invalidate all items.
- ldx #0
- ldy #Items::POOL_CAPACITY
- @items_reset_loop:
- sta Items::zp_pool_base, x
- NEXT_ITEM_INDEX_X
- dey
- bne @items_reset_loop
-
;; Set that we have done this operation so it's not done in future
;; cycles.
lda Driver::zp_flags
@@ -324,7 +315,12 @@
lda Explosions::zp_active
bne @sprite_cycling
- ;; After all the explosions have been done, is any player alive?
+ ;; Are there still falling items?
+ lda Items::zp_state
+ and #$03
+ bne @sprite_cycling
+
+ ;; After all the explosions/items have been done, is any player alive?
lda Globals::zp_multiplayer
and #%00000110
bne @reset_timer
@@ -335,6 +331,18 @@
ora #%00000010
sta Globals::zp_flags
+ ;; Invalidate items, which were skipped on move_sprites_out() on purpose
+ ;; to keep them after each death. But since we are about to go to the
+ ;; title screen, now they are no longer useful.
+ lda #$FF
+ ldx #0
+ ldy #Items::POOL_CAPACITY
+ @items_reset_loop:
+ sta Items::zp_pool_base, x
+ NEXT_ITEM_INDEX_X
+ dey
+ bne @items_reset_loop
+
@reset_timer:
;; Reset the player's timer to enter the game screen again.
lda #PLAYER_TIMER_VALUE