aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dla.s12
-rw-r--r--drunkwalk.s21
2 files changed, 18 insertions, 15 deletions
diff --git a/dla.s b/dla.s
index a18a23b..bae1b39 100644
--- a/dla.s
+++ b/dla.s
@@ -181,17 +181,7 @@ wl:
jsr drawseed
next_particle:
- ldy RANDOM ; spawn a new particle
- lda (spawn_x),y
- sta cursor_x
- lda (spawn_y),y
- sta cursor_y
- jsr drunkwalk ; walk it around
- beq next_particle ; if it went out of bounds, try again
-
- ; particle stuck to an existing pixel, draw it
- jsr plot
-
+ jsr drunkwalk ; spawn, walk around, plot (all in one)
inc particles
bne ph_ok
inc particles+1
diff --git a/drunkwalk.s b/drunkwalk.s
index ca017c0..02ab67d 100644
--- a/drunkwalk.s
+++ b/drunkwalk.s
@@ -6,12 +6,16 @@
;;; possible.
; Y and X are backwards: Y holds the X coordinate, and X holds the Y coordinate.
; Has to be, because there's no (zpind),x addressing mode.
-oob:
- rts
drunkwalk:
- ldy cursor_x ; 3
- ldx cursor_y ; 3
+oob:
+ ldy RANDOM ; spawn a new particle
+ lda (spawn_x),y
+ sta cursor_x
+ lda (spawn_y),y
+ sta cursor_y
+ tax
+ ldy cursor_x
lda lineaddrs_l,x ; 5
sta pixptr ; 3
@@ -132,4 +136,13 @@ check_lrd:
jmp move_pixel
stick:
+ ; pixel stuck next to an existing pixel, draw it and return.
+ ldx cursor_y
+ lda lineaddrs_l,x
+ sta pixptr
+ lda lineaddrs_h,x
+ sta pixptr+1
+ ldy cursor_x
+ lda #1
+ sta (pixptr),y
rts