dos33fsprogs/games/sb/move_ducks.s

51 lines
668 B
ArmAsm

move_ducks:
ldx #1 ; start with duck2
move_duck_loop:
clc
lda D1_XPOS,X
adc D1_XSPEED,X
sta D1_XPOS,X
; check out of bounds
; duck XPOS is middle of duck (which is 12 wide)
;
; to stay in pond want XPOS to be between and 8 and 34?
lda D1_XPOS,X
cmp #8
bcc duck_too_far_left ; blt
cmp #34
bcs duck_too_far_right ; bge
jmp duck_good
duck_too_far_left:
lda #$1 ; move right
sta D1_XSPEED,X
lda D1_STATE,X ; face right
ora #DUCK_RIGHT
sta D1_STATE,X
jmp duck_good
duck_too_far_right:
lda #$ff ; move left
sta D1_XSPEED,X
lda D1_STATE,X ; face left
and #<~DUCK_RIGHT
sta D1_STATE,X
duck_good:
dex
bpl move_duck_loop
rts