vince Le 01/07/2003 à 14:07 }
}
} // jusqu'à la fin des piles de la lynx...
}
bon bah la même chose que pour l'autre sauf que je vous le fait on the fly...#include <lynx.h>
#include <lynxlib.h>
#include <stdlib.h>
//je me permets de virer les commentaires ne relevant pas du code pour clarifier le tout
// SPRDEMO2
// Montre comment on utilise SPRPCK pour créer 8 sprites...(2 lignes, 4 colonnes)
// Contrairement à SPRDEMO1, les sprites seront seulement sur 2 bits de profondeur de couleur (3 couleurs max par sprite : noir, cyan et la couleur de fond)
//par conséquent, une palette par SCB
// ----------------------------------------------------------------------
//
// Création des sprites
// sprpck -t6 -S040051 -r004002 -p0 -c -z -v yx.bmp > sprites2.txt
//
// -t6 --> BMP
// -Swwwhhh --> 040*051
// -rxxxyyy --> divisé en 4 image sur deux lignes
// -p0 --> créée un .OBJ
// -c --> compresse indexes la palette
// -z --> choix automatique de la profondeur de pixel (nous donnera 2)
// -v --> mode verbose (infos à l'écran)
// yx.bmp --> nom du fichier
// > sprites2.txt --> sauvegarder la console dans un .TXT
//
// The created sprites will have a 2bit colour depth
// Here is a part of sprites2.txt:
// (You have to insert the linefeeds for the correct display of the Pixel-table)
/******************
Tile nr: 1
0| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11| 12| 13| 14| 15|
----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
212|1470| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 358| 0|
Pixel sum: 2040
Colors used: 3
Index table:
01------------2-
Written: yx000000.obj
******************/
// Il faut comparer la table d'index de chaque image pour créer la table sprndx
//
// 3 couleurs par image, dans cet exemple les couleurs 0 et 2 sont les mêmes 1 est
// celle spécifique à l'image et 3 n'est pas utilisée
char sprndx[2*4][2] = {{0x01,0xe0},{0x03,0xe0},{0x02,0xe0},{0x04,0xe0},
{0x09,0xe0},{0x0b,0xe0},{0x0a,0xe0},{0x0c,0xe0}};
// Déclarations des externes:
// Première ligne
extern char yx000000[];
extern char yx000001[];
extern char yx000002[];
extern char yx000003[];
// 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[]; // la définition du sprite
#asm
_SCB1 dc.b $40,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef ; la compression de pallette nous interdit d'utiliser la même palette d'un sprite sur l'autre
#endasm
// The colour palette
#include "yx.pal"
/*********************/
/* wait for a button */
/*********************/
uchar WaitButton()
{
uchar key;
while ( !(key = joystick))
;
/* on attends que le bouton soit relâché... */
while ( joystick )
;
return key;
}
/*********************/
/* main */
/*********************/
main()
{
register uchar x,y;
CLI; //on autorise les interruptions
SetBuffers(0x9000,0,0); // on définit les buffers vidéo
_SetRGB(pal); // On charge la palette
for (;; ) //(boucle infinie)
{
/*******************************************************
affiche les sprites 2bit avec la même palette globale :
*******************************************************/
// Affecte les couleurs par défaut aux entrées de palette:
SCB1[15] = 0x01;
SCB1[16] = 0x23;
DrawFBox(0, 0, 160, 102, 15); // écran blanc...
for (y=0; y<2; ++y) // 2 lignes
{
for (x=0; x<4; ++x) // 4 colonnes
{
SCBX(SCB1) = 40*x; // position = largeur * numéro de sprite sur la ligne
SCBY(SCB1) = 51*y; // longeur * numéro de ligne
SCBDATA(SCB1) = sprtab[y][x];// sélectionne le sprite à afficher
DrawSprite(SCB1); // affiche
WaitButton(); // attends un bouton
}
}
/*******************************************************************
pareil mais avec leur propres palettes
*******************************************************************/
// "Clear" screen:
DrawFBox(0, 0, 160, 102, 15); // écran blanc...
for (y=0; y<2; ++y) // 2 lignes
{
for (x=0; x<4; ++x) // 4 colonnes
{
// On va chercher les couleurs de sprndx pour les affecter à SCB1 (offset 15 et 16 qui corresmpondent à la couleur bit 0 et bit1)
SCB1[15] = sprndx[4*y+x][0];
SCB1[16] = sprndx[4*y+x][1];
SCBX(SCB1) = 40*x; // position = largeur * numéro de sprite sur la ligne
SCBY(SCB1) = 51*y; // longeur * numéro de ligne
SCBDATA(SCB1) = sprtab[y][x];// sélectionne le sprite à afficher
DrawSprite(SCB1); // affiche
WaitButton(); // attends un bouton
