diff options
| -rw-r--r-- | .nasm/segments.txt | 2 | ||||
| -rw-r--r-- | src/bullets.s | 38 | ||||
| -rw-r--r-- | src/enemies.s | 10 |
3 files changed, 26 insertions, 24 deletions
diff --git a/.nasm/segments.txt b/.nasm/segments.txt index 5bd1c28..f09170c 100644 --- a/.nasm/segments.txt +++ b/.nasm/segments.txt @@ -1,4 +1,4 @@ - HEADER: 16/16 (100%) -- ROM0: 6551/32762 (20.00%) +- ROM0: 6538/32762 (19.96%) - ROMV: 6/6 (100%) - ROM2: 8192/8192 (100%) 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. |
