aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bullets.s38
-rw-r--r--src/enemies.s10
2 files changed, 25 insertions, 23 deletions
diff --git a/src/bullets.s b/src/bullets.s
index 8b93bac..8bbbeaa 100644
--- a/src/bullets.s
+++ b/src/bullets.s
@@ -287,29 +287,33 @@
inx
jmp @move_loop
- ;; Enemy collision for this bullet. It's actually easier/faster to just
- ;; unroll the loop.
+ ;; Enemy collision for this bullet.
@check_enemy_collision:
- lda #Enemies::ENEMY_0_IDX
- sta Enemies::zp_pool_index
- jsr Enemies::collides
- beq @enemy_1
- jsr Enemies::bite_the_dust
- jmp @save_bullet_move
- @enemy_1:
- lda #Enemies::ENEMY_1_IDX
+ ldx #0
sta Enemies::zp_pool_index
+
+ @enemy_collision_loop:
+ ;; Does it collide?
jsr Enemies::collides
- beq @enemy_2
+ beq @next_enemy_collision
+
+ ;; Yes! Kill the enemy and break the loop.
jsr Enemies::bite_the_dust
jmp @save_bullet_move
- @enemy_2:
- lda #Enemies::ENEMY_2_IDX
- sta Enemies::zp_pool_index
- jsr Enemies::collides
+
+ @next_enemy_collision:
+ ;; Advance by the size of each pool item.
+ lda Enemies::zp_pool_index
+ clc
+ adc #Enemies::SIZEOF_POOL_ITEM
+
+ ;; Are we at the end of the enemies' pool?
+ cmp #Enemies::ENEMIES_POOL_CAPACITY_BYTES
beq @save_bullet_move
- jsr Enemies::bite_the_dust
- __fallthrough__ @save_bullet_move
+
+ ;; Nope! Save the index and fetch the next enemy.
+ sta Enemies::zp_pool_index
+ jmp @enemy_collision_loop
@save_bullet_move:
;; Restore back the old value from the 'x' register.
diff --git a/src/enemies.s b/src/enemies.s
index b6005fc..33b4c33 100644
--- a/src/enemies.s
+++ b/src/enemies.s
@@ -17,13 +17,11 @@
;; change it there.
ENEMIES_POOL_CAPACITY = 3
- ;; The capacity of the enemies pool in bytes.
- ENEMIES_POOL_CAPACITY_BYTES = ENEMIES_POOL_CAPACITY * 4
+ ;; The amount of bytes each pool item takes.
+ SIZEOF_POOL_ITEM = 4
- ;; Indeces where each enemy definition starts on the pool.
- ENEMY_0_IDX = 0
- ENEMY_1_IDX = 4
- ENEMY_2_IDX = 8
+ ;; The capacity of the enemies pool in bytes.
+ ENEMIES_POOL_CAPACITY_BYTES = ENEMIES_POOL_CAPACITY * SIZEOF_POOL_ITEM
;; Initial X coordinates for enemies depending on if they appear on the
;; left/right edge of the screen.