A86: re: moving sprites
[Prev][Next][Index][Thread]
A86: re: moving sprites
This is probably an easy thing to do, but I am totally lost. I am trying to
display an 8x8 sprite on the screen and move it from one side to about
halfway across and back again. I tried using the PutSprite routine used in
Duckhunt, but instead of moving it across, it placed the sprites at
semi-random places. here's the routine if anyone wants to help.
;------------------
;This Routine was converted by AVD from Movax's 83
;Special thanks to ScaBBy for making it XOR Routine!
;------------------
;hl = image
;a = x coord
;e = y coord
PutSprite:
push hl ; Save sprite address
; Calculate the address in graphbuf
ld hl,0 ; Do y*12
ld d,0
ex de,hl
add hl,hl
add hl,hl
add hl,hl
add hl,hl
ld d,0 ; Do x/8
ld e,a
srl e
srl e
srl e
add hl,de
ld de,$FC00
add hl,de ; Add address to graphbuf
ld b,00000111b ; Get the remainder of x/8
and b
cp 0 ; Is this sprite aligned to 8*n,y?
jp z,ALIGN
; Non aligned sprite blit starts here
pop ix ; ix->sprite
ld d,a ; d=how many bits to shift each line
ld e,8 ; Line loop
LILOP: ld b,(ix+0) ; Get sprite data
ld c,0 ; Shift loop
push de
SHLOP: srl b
rr c
dec d
jp nz,SHLOP
pop de
ld a,b ; Write line to graphbuf
xor (hl)
ld (hl),a
inc hl
ld a,c
xor (hl)
ld (hl),a
ld bc,15 ; Calculate next line address
add hl,bc
inc ix ; Inc spritepointer
dec e
jp nz,LILOP ; Next line
jp DONE1
; Aligned sprite blit starts here
ALIGN: ; Blit an aligned sprite to graphbuf
pop de ; de->sprite
ld b,8
ALOP1: ld a,(de)
xor (hl) ; xor=erase/blit
ld (hl),a
inc de
push bc
ld bc,16
add hl,bc
pop bc
djnz ALOP1
DONE1:
ret
thanks for any help,
Jeff Zimmerman
gramdon@mail2.theonramp.net
Follow-Ups: