DRWSPR:
push hl ; Save sprite address
;ÛÛÛÛ Calculate the address in graphbuf ÛÛÛÛ
ld hl,0 ; Do y*12
ld d,l
add hl,de
add hl,de
add hl,de
add hl,hl
add hl,hl
rra
rra
rra
ld e,a
add hl,de
ld de,gbuf
add hl,de ; Add address to graphbuf
ALIGN: ; Blit an aligned sprite to graphbuf
pop de ; de->sprite
ld b,8
ALOP1: ld a,(de)
or (hl) ; xor=erase/blit
ld (hl),a
inc de
push bc
ld bc,12
add hl,bc
pop bc
djnz ALOP1
DONE1:
ret
;ÜÛÛÛÛÛÛÛÛÛÛÛÛß CLRSPR ßÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
;³ Clear 8x8 sprite þ a=x, e=y, hl=sprite address ³
;ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
CLRSPR:
push hl ; Save sprite address
;ÛÛÛÛ Calculate the address in graphbuf ÛÛÛÛ
ld hl,0 ; Do y*12
ld d,l
add hl,de
add hl,de
add hl,de
add hl,hl
add hl,hl
rra ; tous les sprites sont deja alignes
rra ; x/8
rra
ld e,a ; d=0
add hl,de
ld de,gbuf
add hl,de ; Add address to graphbuf
ALIGN2: ; Erase an aligned sprite in graphbuf
pop de ; de->sprite
ld b,8
ALOP2: ld a,(de)
cpl
and (hl)
ld (hl),a
inc de
push bc
ld bc,12
add hl,bc
pop bc
djnz ALOP2
DONE5:
ret
Chaque fois que tu affiches un sprite il est toujours aligné, pour ça tu peux effacer la partie qui s'agit des sprites non-alignés. (J'ai changé ton addresse pour gbuf pour être plus facile de compiler entre le 83/+).
Fichier joint : oilcap.zip
N'hésite pas à me demander si tu as des questions. Je ne me souviens pas de tout ce que j'ai fait, mais pour le moment jette un coup d'oeuil à:
move/select_scan_key
map_load
les algos pour afficher des sprites
le timer
Il faut aussi faire quelque chose pour que le timer n'aille pas si lentement quand on déplace le pointeur, mais je ne sais pas quoi.
Ah, et une dernière chose: tu peux utiliser saferam pour garder vos matrices et ainsi gagner de l'espace.