Aussi, il y a des choses qui ne sont pas claires pour moi :
- à quoi sert cette ligne : SetBuffers(0x9000,0,0);
- comment fonctionne ceci : _SetRGB(pal); ? Je l'ai bien trouvé dans lynxlib.h mais comme je ne m'y connais pas trop en programmation je n'ai pas été plus loin.
#include <lynx.h>
#include <lynxlib.h>
#include <stdlib.h>
// Bug dans cc65? Besoin d'instructions avant les commentaires?
// SPRDEMO1 de Matthias Domin (http://http://home.t-online.de/home/Matthias.Domin/lynx_eng.htm)
// 1er Avril 2000
// traduction et ajout de commentaires par D@md@m
// 13 Juin 2003
// Montre l'utilisation de SPRPCK pour créer 8 sprites (2 lignes et 4 colonnes)
// Tous les sprites partagent les mêmes index de palette de couleurs
//
// ----------------------------------------------------------------------
//
// Crée les 8 sprites en lançant SPRPCK avec ces paramètres :
// sprpck -t6 -S040051 -r004002 -p0 yx.bmp
//
// -t6 --> la source est un fichier MS Windows BMP
// -Swwwhhh --> grand S, définit la largeur et la taille du sprite créé (w: largeur ; h: hauteur)
// -rxxxyyy --> découpe l'image source en yyy*xxx sprites (de taille -Swwwhhh)
// -p0 --> crée des fichiers OBJ à partir des fichiers SPR
// yx.bmp --> le fichier source est un BMP de 160*102 pixels
//
// Les sprites ainsi créé auront une profondeur de couleur de 4 bits
// Accès aux 8 sprites créés:
// Les 4 sprites de la 1ère ligne
extern char yx000000[];
extern char yx000001[];
extern char yx000002[];
extern char yx000003[];
// Les 4 sprites de la seconde ligne
extern char yx001000[];
extern char yx001001[];
extern char yx001002[];
extern char yx001003[];
char *sprtab[2][4] = {{yx000000, yx000001, yx000002, yx000003},
{yx001000, yx001001, yx001002, yx001003}};
extern char SCB1[];
#asm
_SCB1 dc.b $c0,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
; Puisque nous n'avons pas employé -C en lançant SPRPCK
; nous pouvons employer les mêmes index de palette de couleurs pour tous les sprites
dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef
#endasm
// La palette de couleur
#include "yx.pal"
/***********************/
/* Attente d'un bouton */
/***********************/
uchar WaitButton()
{
uchar key;
while ( !(key = joystick))
;
/* attend que le bouton soit relaché */
while ( joystick )
;
return key;
}
/***********************/
/* programme principal */
/***********************/
main()
{
register uchar x,y; // demande au compilateur que les variables déclarées
// soient placées dans un registre du processeur
CLI; // autorise les interruptions
SetBuffers(0x9000,0,0);
_SetRGB(pal); // Définit la palette de couleurs
for (;;)
{
DrawFBox(0, 0, 160, 102, 15); // La couleur 15 est le blanc
for (y=0; y<2; ++y) // 2 lignes
{
for (x=0; x<4; ++x) // 4 colonnes
{
SCBX(SCB1) = 40*x; // coordonnées x du sprite à afficher
SCBY(SCB1) = 51*y; // coordonnées y du sprite à afficher
SCBDATA(SCB1) = sprtab[y][x]; // sprite
DrawSprite(SCB1); // affiche le sprite
WaitButton();
}
}
} // boucle infinie
}
Edit : j'ai remplacé les "tuiles" par sprites
