aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mssola@mssola.com>2026-02-28 22:05:53 +0100
committerMiquel Sabaté Solà <mssola@mssola.com>2026-02-28 22:05:53 +0100
commit86c919b3de3ae993eae4334ff9f1e06b550d575f (patch)
tree28ad544c2ab3a56a7ca01601bb5ce6352df028f5 /src
parentc87cad0b873c2f1c45c420dd96f828f35de6a4ba (diff)
downloadjetpac.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>
Diffstat (limited to 'src')
-rw-r--r--src/enemies.s103
1 files changed, 30 insertions, 73 deletions
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