.nolistEn vous remerciant, d'avance.
#define end .end
#define END .end
#define equ .equ
#define EQU .equ
#include "ti83asm.inc"
#include "tokens.inc"
.list
#define warrior_x 8265h
#define warrior_y 8266h
.org 9327h
call _CLRLCDFULL
call _runIndicOff
call _GRBUFCLR
call _homeUp
call _Axes
ld a, 30
ld (warrior_x), a
ld a, 30
ld (warrior_y), a
ld l, 0
ld h, 1
push hl ;initialisation en phase 1 du cycle de course
getkey :
call putwarrior
ld a, 0ffh
out (1), a
ld a,0feh
out (1), a
in a, (1)
cp 254
jp z, up
cp 247
jp z, down
ld a, 0ffh
out (1), a
ld a, 0fdh
out (1), a
in a, (1)
cp 191
jp z, quit
call putwarrior
ld a, (warrior_x)
inc a
ld (warrior_x), a
pop hl
ld a, h
xor 1 ; permet d'inverser l'indicateur sur 0 ou 1 pour alterner les images warrior_run1 et warrior_run2
ld h, a
ld l, 0
push hl
jp getkey
down :
call putwarrior
ld a, (warrior_y)
cp 51
jp z, getkey
dec a
ld (warrior_y), a
jp getkey
up :
call putwarrior
ld a, (warrior_y)
or a
jp z, getkey
inc a
ld (warrior_y), a
jp getkey
putwarrior :
pop hl
ld a, h
or a ;on effectue le test pour savoir si l'on est dans la première ou la deuxième phase du cycle de course
call z, putwarrior_first ;si le résultat est nul c'est que l'on est en première phase du cycle de course
call nz, putwarrior_second ;sinon on est en deuxième phase..
ld h, a
ld l, 0
push hl
ld a, (warrior_y)
ld l, a
ld a, (warrior_x)
call sprite
call _GRBUFCPY_V
ret
putwarrior_first :
ld ix, warrior_run1
ld b, 13
ret
putwarrior_second :
ld ix, warrior_run2
ld b, 12
ret
quit :
pop hl
call _CLRLCDFULL
call _GRBUFCLR
call _dispDone
ret
warrior_run1 :
.db %01111100
.db %00000000
.db %00111000
.db %00111000
.db %00111001
.db %00010010
.db %01111100
.db %10010000
.db %10011110
.db %00010010
.db %00100000
.db %01000000
.db %10000000
warrior_run2 :
.db %01111100
.db %00000000
.db %00111000
.db %00111000
.db %00111010
.db %00010010
.db %01111100
.db %10010000
.db %10011110
.db %00010010
.db %11110010
.db %00000000
sprite:
ld e, l
ld h, 0
ld d, h
add hl,de
add hl,de
add hl,hl
add hl,hl
ld e, a
and 7
ld c, a
srl e
srl e
srl e
add hl,de
ld de,plotSScreen
add hl,de
putSpriteLoop1:
sl1: ld d, (ix)
ld e, 0
ld a, c
or a
jr z, putSpriteSkip1
putSpriteLoop2:
srl d
rr e
dec a
jr nz,putSpriteLoop2
putSpriteSkip1:
ld a, (hl)
xor d
ld (hl),a
inc hl
ld a,(hl)
xor e
ld (hl),a
ld de,11
add hl,de
inc ix
djnz putSpriteLoop1
ret
.end END
Mystery_Enigma