diff options
| author | Miquel Sabaté Solà <mssola@mssola.com> | 2026-02-28 22:05:53 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mssola@mssola.com> | 2026-02-28 22:05:53 +0100 |
| commit | 86c919b3de3ae993eae4334ff9f1e06b550d575f (patch) | |
| tree | 28ad544c2ab3a56a7ca01601bb5ce6352df028f5 | |
| parent | c87cad0b873c2f1c45c420dd96f828f35de6a4ba (diff) | |
| download | jetpac.nes-86c919b3de3ae993eae4334ff9f1e06b550d575f.tar.gz jetpac.nes-86c919b3de3ae993eae4334ff9f1e06b550d575f.zip | |
Remove the usage to zp_enemy_arg in most places
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à <mssola@mssola.com>
| -rw-r--r-- | .nasm/segments.txt | 2 | ||||
| -rw-r--r-- | 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 |
