From 86c919b3de3ae993eae4334ff9f1e06b550d575f Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Sat, 28 Feb 2026 22:05:53 +0100 Subject: Remove the usage to zp_enemy_arg in most places MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Everywhere except the 'basic' algorithm don't really need this argument. In the beginning I was using it to define some custom velocities, but in the end tweaking the inner timer on the 'extra' value for all enemies turned out to be more productive. Hence, remove this usage almost everywhere and make the code simpler as a side-effect. The usage on 'basic' is still under revision, just to check if 'homing' really needs to set a special argument whenever the 'homing' attack needs this sort of behavior. Signed-off-by: Miquel Sabaté Solà --- .nasm/segments.txt | 2 +- src/enemies.s | 103 ++++++++++++++++------------------------------------- 2 files changed, 31 insertions(+), 74 deletions(-) diff --git a/.nasm/segments.txt b/.nasm/segments.txt index 15c5d79..91d9ea5 100644 --- a/.nasm/segments.txt +++ b/.nasm/segments.txt @@ -1,4 +1,4 @@ - HEADER: 16/16 (100%) -- ROM0: 5300/32762 (16.18%) +- ROM0: 5235/32762 (15.98%) - ROMV: 6/6 (100%) - ROM2: 8192/8192 (100%) diff --git a/src/enemies.s b/src/enemies.s index c93f1c2..07578b7 100644 --- a/src/enemies.s +++ b/src/enemies.s @@ -559,19 +559,12 @@ lda Enemies::zp_enemies_pool_base, x and #$80 beq @move_left - lda Enemies::zp_enemies_pool_base + 2, x - clc - adc Enemies::zp_enemy_arg + inc Enemies::zp_enemies_pool_base + 2, x jmp @do_vertical @move_left: - lda Enemies::zp_enemies_pool_base + 2, x - sec - sbc Enemies::zp_enemy_arg + dec Enemies::zp_enemies_pool_base + 2, x @do_vertical: - ;; Set the previous computation regardless of the branch. - sta Enemies::zp_enemies_pool_base + 2, x - ;; The vertical movement works the same way, but taking into account its ;; direction via the 'extra' state. Note that we mask it, which is not ;; needed for the main enemies which use this algorithm, but it is for @@ -579,21 +572,13 @@ lda Enemies::zp_enemies_pool_base + 3, x and #$01 beq @move_up - lda Enemies::zp_enemies_pool_base + 1, x - clc - adc Enemies::zp_enemy_arg + inc Enemies::zp_enemies_pool_base + 1, x jmp @check_collision @move_up: - lda Enemies::zp_enemies_pool_base + 1, x - sec - sbc Enemies::zp_enemy_arg - - @check_collision: - ;; Set the previous computation regardless of the branch. - sta Enemies::zp_enemies_pool_base + 1, x + dec Enemies::zp_enemies_pool_base + 1, x ;; Collision checking. - + @check_collision: ;; Translate the Y axis into tile coordinates. lda Enemies::zp_enemies_pool_base + 1, x lsr @@ -633,10 +618,7 @@ ;; Move downwards once, which cancels the movement set at the beginning ;; of the function. - lda Enemies::zp_enemies_pool_base + 1, x - clc - adc Enemies::zp_enemy_arg - sta Enemies::zp_enemies_pool_base + 1, x + inc Enemies::zp_enemies_pool_base + 1, x rts @@ -682,16 +664,10 @@ ;; stucked or other weird situations. and #$80 beq @bounce_left - lda Enemies::zp_enemies_pool_base + 2, x - clc - adc Enemies::zp_enemy_arg - jmp @set_bounce + inc Enemies::zp_enemies_pool_base + 2, x + rts @bounce_left: - lda Enemies::zp_enemies_pool_base + 2, x - sec - sbc Enemies::zp_enemy_arg - @set_bounce: - sta Enemies::zp_enemies_pool_base + 2, x + dec Enemies::zp_enemies_pool_base + 2, x rts ;; Last but not least, let's see if the enemy collides on its bottom @@ -729,10 +705,7 @@ sta Enemies::zp_enemies_pool_base + 3, x ;; Make it bounce up. - lda Enemies::zp_enemies_pool_base + 1, x - sec - sbc Enemies::zp_enemy_arg - sta Enemies::zp_enemies_pool_base + 1, x + dec Enemies::zp_enemies_pool_base + 1, x rts .endproc @@ -789,7 +762,7 @@ clc adc Globals::zp_tmp0 sta Enemies::zp_enemies_pool_base + 3, x - jmp @end + rts @do: ;; Blindly increase the timer as overflows will be covered when entering @@ -801,9 +774,13 @@ ;; Now switch what to do depending on the algorithm. and #%00000110 - beq @end + bne @next_algo_1 + rts + @next_algo_1: cmp #%00000110 - beq @end + bne @next_algo_2 + rts + @next_algo_2: and #%00000100 beq @horizontal @@ -824,17 +801,12 @@ beq @move_left iny iny - lda Enemies::zp_enemies_pool_base + 2, x - clc - adc Enemies::zp_enemy_arg - jmp @set_horizontal + inc Enemies::zp_enemies_pool_base + 2, x + jmp @after_horizontal @move_left: - lda Enemies::zp_enemies_pool_base + 2, x - sec - sbc Enemies::zp_enemy_arg - @set_horizontal: - sta Enemies::zp_enemies_pool_base + 2, x + dec Enemies::zp_enemies_pool_base + 2, x + @after_horizontal: ;; We store in a temporary value how much the X tile coordinates will ;; have to be increased in order to point to the right face. sty Globals::zp_tmp0 @@ -870,7 +842,8 @@ ;; Bottom. inc Globals::zp_arg0 jsr Background::collides - beq @end + bne @horizontal_collision + rts @horizontal_collision: ;; Restore the 'x' register from a previous 'Background::collides' call. @@ -885,18 +858,10 @@ ;; stucked or other weird situations. and #$80 beq @bounce_left - lda Enemies::zp_enemies_pool_base + 2, x - clc - adc Enemies::zp_enemy_arg - jmp @set_bounce + inc Enemies::zp_enemies_pool_base + 2, x + rts @bounce_left: - lda Enemies::zp_enemies_pool_base + 2, x - sec - sbc Enemies::zp_enemy_arg - @set_bounce: - sta Enemies::zp_enemies_pool_base + 2, x - - @end: + dec Enemies::zp_enemies_pool_base + 2, x rts .endproc @@ -969,20 +934,12 @@ and #$01 beq @go_down - lda Enemies::zp_enemies_pool_base + 1, x - clc - adc Enemies::zp_enemy_arg - jmp @set_vertical + inc Enemies::zp_enemies_pool_base + 1, x + jmp @increase_timer @go_down: - lda Enemies::zp_enemies_pool_base + 1, x - sec - sbc Enemies::zp_enemy_arg - - @set_vertical: - ;; Set the new Y position. - sta Enemies::zp_enemies_pool_base + 1, x + dec Enemies::zp_enemies_pool_base + 1, x - ;; And increase the timer. + @increase_timer: tya clc adc #$10 -- cgit v1.2.3