
very (./30) :
genre ça t'es souvent arrivé tellement les modos sont méchants et opressent le peuple dans une terrible dictature
.nolist
#include "ion.inc"
#define Var1 8265h
#define Compteur 8266h
#define balles 8267h
#define PosC 8268h
#define CoorX 8269h
#define CoorY 8270h
;Groupe1 : 0feh
kDown .equ 254
kLeft .equ 253
kRight .equ 251
kUp .equ 247
;Groupe2 : 0fdh
kEnter .equ 254
kClear .equ 191
;Groupe7 : 0bfh
k2nd .equ 223
.list
#ifdef TI83P
.org ProgStart-2
.db $bb,$6d
#else
.org ProgStart
#endif
ret
jr nc,Start
.db "GunZ - Deeph",0
Start:
bcall(_ClrScrnFull)
bcall(_grbufclr)
bcall(_indicatorOff)
call Deeph_Aff
bcall(_homeup)
ld hl,text1
bcall(_puts)
call getKey
bcall(_ClrScrnFull)
bcall(_grbufclr)
ld hl,0
ld (Compteur),hl
ld a,3 ; J'y met bien 3 balle pourtant...
ld (balles),a ; là normalement je met la valeur de l'accumulateur (donc 3) dans la variable 'balles'...
call AffMain
call Aff
Jeu:
ld hl,(Compteur)
inc hl
ld (Compteur),hl
ld de,700
bcall(_CpHLDE)
call z,Aff
ld a,0ffh
out (1),a
ld a,0bfh
out (1),a
in a,(1)
cp k2nd
jp z,Tire
ld a,0ffh
out (1),a
ld a,0fdh
out (1),a
in a,(1)
cp kClear
jr z,End
jr Jeu
End:
bcall(_ClrScrnFull)
bcall(_grbufclr)
bcall(_indicatorOn)
ret
Aff:
bcall(_grbufclr)
call AffMain
ld hl,0
ld (Compteur),hl
ld b,3
call ionRandom
cp 0
jr z,Pos1
cp 1
jr z,Pos2
cp 2
jr z,Pos3
Pos1:
ld a,1
ld (Var1),a
ld a,4
ld (PosC),a
jr AffC
Pos2:
ld a,2
ld (Var1),a
ld a,36
ld (PosC),a
jr AffC
Pos3:
ld a,3
ld (Var1),a
ld a,68
ld (PosC),a
jr AffC
AffC:
ld b,16
ld c,2
ld a,(PosC)
ld l,0
ld ix,cible
call ionLargeSprite
call ionFastCopy
ret
Tire:
bcall(_grbufclr)
ld b,32
ld c,4
ld a,29
ld l,30
ld ix,sprite2
call ionLargeSprite
call ionFastCopy
ld b,16
ld c,1
ld a,41
ld l,13
ld ix,Tire2
call ionLargeSprite
call ionFastCopy
bcall(_grbufclr)
call AffMain
ld a,(balles) ; ici je copie la valeur des balles dans l'accu
cp 0 ; j'la compare à zero
jr z,Perdu ; si c'est vrai on a perdu
dec a ; sinon je décrement l'accu
ld (balles),a ; et je copie la valeur de l'accu (donc 'balles'-1) dans la variable 'balles'
ld a,(Var1)
cp 2
jr z,Gagne
jp jeu
Perdu:
bcall(_grbufclr)
bcall(_clrLCDFull)
bcall(_homeup)
ld hl,text3
bcall(_puts)
call getKey
jp End
Gagne:
bcall(_grbufclr)
bcall(_clrLCDFull)
bcall(_homeup)
ld hl,text2
bcall(_puts)
call getKey
jp End
AffMain:
ld b,32
ld c,4
ld a,28
ld l,32
ld ix,sprite1
call ionLargeSprite
call ionFastCopy
ret
getKey:
ld a,0ffh
out (1),a
ld a,0fdh
out (1),a
in a,(1)
cp kEnter
jr z,ret
jr getKey
ret:
ret
text1:
.db "Appui sur ENTER "
.db "pour tirer avec "
.db "ton flingue...",0
text2:
.db "Bravo ! Tu as "
.db "reussis a tuer "
.db "la cible ! ",0
text3:
.db "Perdu ! Desoler "
.db "mais tu est un "
.db "peu trop nul...",0
#include "Deeph.z80"
sprite1:
[SPRITE]
sprite2:
[SPRITE]
cible:
[SPRITE]
balle:
[SPRITE]
Tire2:
[SPRITE]
.end END
.nolist
#include "ion.inc"
#define Vie 8267h
#define PosY 8268h
#define PosX 8269h
#define CoorX 8270h
#define CoorY 8271h
;Groupe1 : 0feh
kDown .equ 254
kLeft .equ 253
kRight .equ 251
kUp .equ 247
;Groupe2 : 0fdh
kEnter .equ 254
kClear .equ 191
.list
#ifdef TI83P
.org ProgStart-2
.db $bb,$6d
#else
.org ProgStart
#endif
ret
jr nc,Start
.db "Vaisseau Baston 1 - Deeph",0 ; super titre![]()
Start:
bcall(_ClrScrnFull)
bcall(_grbufclr)
bcall(_indicatorOff)
call Deeph_Aff
ld a,3
ld (Vie),a ; on commence avec trois vies
ld a,0
ld (PosY),a
ld a,44
ld (CoorX),a
ld a,54
ld (CoorY),a
getKey: ; routine getKey et affichage sprite/gestion collision, etc...
call Aff
call AffE
ld a,0ffh
out (1),a
ld a,0feh
out (1),a
in a,(1)
cp kLeft
call z,DecX
cp kRight
call z,IncX
ld a,0ffh
out (1),a
ld a,0fdh
out (1),a
in a,(1)
cp kClear ; si on appuie sur CLEAR
jr z,Fin ; (normalement) c'est terminer
ld a,(Vie)
cp 0 ; si on a plus que 0 vies
jr z,Fin ; c'est aussi (normalement) terminer
jr getKey
Fin:
ret ; ça doit ce finir (mais c'est pas le cas)
DecX: ; on déplace la sprite à gauche
ld a,(CoorX)
cp 0
jr z,Ret
dec a
dec a
ld (CoorX),a
ret
IncX: ; on déplace la sprite à droite
ld a,(CoorX)
cp 72
jr z,Ret
inc a
inc a
ld (CoorX),a
ret
Ret:
ret
Aff: ; affiche tout le bordel
bcall(_grbufclr)
ld a,(CoorY)
ld l,a
ld a,(CoorX)
ld b,8
ld ix,Vaissau
call ionPutSprite
ld a,0
ld l,a
ld a,80
ld b,62
ld c,2
ld ix,Cadre
call ionLargeSprite
ld a,(Vie)
cp 1
call z,TeteN
cp 2
call nc,TeteO
ld a,(Vie)
cp 1
call z,Vie1a
cp 2
call z,Vie2a
cp 3
call z,Vie3a
call ionFastCopy
ret
TeteN: ; affiche la petite tête déçus qu'est en haut quand on a 1 vie
ld a,2
ld l,a
ld a,83
ld b,11
ld c,2
ld ix,Tete2
call ionLargeSprite
ret
TeteO: ; affiche la petite tête contente qu'est en haut quand on a 2 ou 3 vies
ld a,2
ld l,a
ld a,83
ld b,11
ld c,2
ld ix,Tete1
call ionLargeSprite
ret
Vie1a: ; on a une vie
ld a,26
ld l,a
ld a,84
ld b,17
ld c,1
ld ix,Vie1
call ionLargeSprite
ret
Vie2a: ; on a deux vies
ld a,26
ld l,a
ld a,84
ld b,17
ld c,1
ld ix,Vie2
call ionLargeSprite
ret
Vie3a: ; on a trois vies
ld a,26
ld l,a
ld a,84
ld b,17
ld c,1
ld ix,Vie3
call ionLargeSprite
ret
AffE: ; scroll le missile selon ses coordonnées
ld a,(CoorY)
ld b,a
ld a,(PosY)
cp b
call z,Coll
cp 0
call z,AffEnnemi
cp 63
call z,FinBoucle
ld a,(PosY)
inc a
inc a
inc a
ld (PosY),a
ld l,a
ld b,8
ld a,(PosX)
ld ix,Ennemi
call ionPutSprite
call ionFastCopy
ret
Coll: ; test la collision
ld a,(CoorX)
ld c,a
ld a,(PosX)
ld b,8
Loop1:
cp c
call z,CollY
dec a
djnz Loop1
ld a,(CoorX)
ld c,a
ld a,(PosX)
ld b,8
Loop2:
cp c
call z,CollY
inc a
djnz Loop2
ret
CollY:
ld a,(Vie)
dec a
ld (Vie),a
ret
FinBoucle:
ld a,0
ld (PosY),a
call AffEnnemi
ret
AffEnnemi: ; affichage d'un nouveau missile en haut de l'écran
ld b,72 ; au coordonnées X = nombre compris entre 0 et 72 (après y'a le cadre qui gène donc on ne peut pas aller à 96)
call ionRandom
push af
ld a,(PosY)
ld l,a
pop af
ld (PosX),a
ld b,8
ld ix,Ennemi
call ionPutSprite
call ionFastCopy
ret
#include "Deeph.z80" ; routine qui affiche mon pseud au début.
Ennemi:
[sprite]
Vaissau:
[sprite]
Cadre:
[sprite]
Vie3:
[sprite]
Vie2:
[sprite]
Vie1:
[sprite]
Tete1:
[sprite]
Tete2:
[sprite]
.end END
#define Vie 8267h ; nombre de vie
#define PosY 8268h ; position du missile Y
#define PosX 8269h ; position du missile X
#define CoorX 8270h ; Coordonnée du vaisseau X #define CoorY 8271h ; Coordonnée du vaisseau Y
push af ; le score par exemple dans a
call _zerooop1 ; on utilise _chkfindsym pour trouver l'adresse du prog en memoire
ld de,op1
ld hl,prog
ld bc,13 ; le nombre d'octets a copier (le nombre de caractere du nom + 2)
ldir
call _chkfindsym
inc de ; on calcule l'emplacement de HighScore dans le prog.
inc de
ld hl,highscore-$9D95
add hl,de
pop af ; on rentre la valeur du score
ld (hl),a
HighScore: .db 0000h
prog: .db 5,"NOM DU PROG",0
[...]
#define ScoreActu Saferam1+5
[...]
Fin: ; Label de quand on perd
bcall(_grbufclr) ; Efface le graph buffer
bcall(_clrLCDFull) ; Efface l'écran
bcall(_homeUp) ; Met le pointeur en (0,0)
ld hl,Text ; Charge le texte à afficher dans le registre hl
bcall(_puts) ; Affiche le texte à l'écran
call getK ; Appel ma routine de getKey (direct input)
ld a,(ScoreActu) ; Charge le score actuel dans l'accumulateur
push af ; Met la valeur du registre a dans la pile
call _zeroop1 ; On utilise _chkfindsym pour trouver l'adresse du programme en mémoire
ld de,op1 ; On charge la valeur d'op1 dans le registre de
ld hl,Prog ; On met la valeur de Prog dans hl
ld bc,13 ; Le nombre d'octets a copier (le nombre de caractère du nom + 2)
ldir ; copie, incrémente et recommence
call _chkfindsym
inc de ; on calcule l'emplacement de Score dans le prog.
inc de
ld hl,Score-$9D95
add hl,de
pop af ; On rentre la valeur du score (la variable ScoreActu, donc)
ld (hl),a
ret ; fin du programme
Text:
.db " T'as perdu ! ",0
Score:
.db 0000h
Prog: .db 5,"NOM DU PROG",0
[...]
lbl1:
[...]
lbl2:
bcall(_grbufclr)
bcall(_clrLCDFull)
bcall(_homeUp)
ld hl,(Score)
bcall(_puts)
call getK jp lbl1