Bonsoir,
je souhaite adapter un jeu que j'ai fais avec The game factory il y a quelques années, Glob shoot, sur console:
Pour afficher l'animation de l'hélice du shiplayer, j'ai fait une petite planche de sprite, 6 images de l'hélice en mouvement, chacune d'une taille de 8*22:
Fichier joint : sprite1.bmp
Fichier joint : sprite2.bmp
Mais j'ai désactivé les ligné inspiré d'un source sprdemo3.c car je n'y arrive pas :
source sur ce site :
http://www.mdgames.de/lynx_eng.htm
/*
Glob Shoot - LYNX
14/10/2010
clip d'une image
LYNX-image */
#include <stdlib.h>
#include <lynx.h>
#include <lynxlib.h>
#include "inc\fond1.pal" // Ceci sert à inclure le fichier palette généré par sprpck
/* LYNX-specific #defines: */
#define JOY_RIGHT 0x10
#define JOY_LEFT 0x20
#define JOY_DOWN 0x40
#define JOY_UP 0x80
#define BUTTON_OPTION1 0x08
#define BUTTON_OPTION2 0x04
#define BUTTON_INNER 0x02
#define BUTTON_OUTER 0x01
#define BUTTON_PAUSE 0x01
#define SC BSTRETC H(a) (*(uint *)((a)+15)) // déformation, macro
#define SC BTILT(a) (*(uint *)((a)+17)) // déformation, macro
char SCREEN[8160] at (MEMTOP-16320);
char RENDER[8160] at (MEMTOP-8160);
extern char fond1[]; // ecran titre
extern char SCB[];
#asm
_SCB dc.b $c0,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm
// déclaration des objets sprites qui seront linkés
extern char sprite1[]; // moteur à hélice (6 images d'une taille de 8*22 chacunes, placées de gauche à droite)
extern char sprite2[]; // coque (taille: 30*24)
// A partir du sprite1, je souhaite obtenir 6 images, de 0 à 5, du moteur à élice :
// clip du sprite 1 : lignes suivantes désactivées car bug
//extern char sprite1000000[];
//extern char sprite1000001[];
//extern char sprite1000002[];
//extern char sprite1000003[];
//extern char sprite1000004[];
//extern char sprite1000005[];
//char *sprtab[5] = {sprite1000000, sprite1000001, sprite1000002, sprite1000003,
// sprite1000004, sprite1000005};
extern char SCBsprite1[]; // déclaration d'un nouveau controleur de sprite, moteur à hélice
extern char SCBsprite2[]; // déclaration d'un nouveau controleur de sprite, coque
#asm
_SCBsprite1 dc.b $c7,$10,$20
dc.w _SCBsprite2,_sprite1
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
_SCBsprite2 dc.b $c7,$10,$20
dc.w 0, _sprite2
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm
// variavle (int = 2 octets ; char = 1 octet)
int posx,posy;
int i;
// assembler vertical retrace syncronisation routine
void Vsync()
{
#asm
vretrace:
lda $fd0a
bne vretrace
#endasm
}
/**************************************************************************
** **
** **
**************************************************************************/
char main()
{
InitIRQ();
CLI;
SetBuffers(SCREEN, RENDER ,0);
/* set the palette */
SetRGB(pal); // Ceci sert à changer la palette de la Lynx (16 couleurs).
DrawFBox(0,0,160,102,0);
SCBX(SCB) = 0;
SCBY(SCB) = 0;
SCBDATA(SCB) = fond1;
// coordonnées X et Y du shiplayer: moteur à hélice :
SCBX(SCBsprite1) = 0;
SCBY(SCBsprite1) = 0;
SCBDATA(SCBsprite1) = sprite1;
posx = 50;
posy = 50;
// coordonnées X et Y du shiplayer: coque :
SCBX(SCBsprite2) = 50+8;
SCBY(SCBsprite2) = 50+2;
SCBDATA(SCBsprite2) = sprite2;
// posx = 50;
// posy = 50;
for( ; ; )
{
DrawSprite(SCB); // affichage fond1
if (joystick & JOY_RIGHT) posx++; // direction Droite
if (posx>112) posx=112;
if (joystick & JOY_LEFT) posx--; // direction Gauche
if (posx<0) posx=0;
if (joystick & JOY_UP) posy--; // direction Haut
if (posy<0) posy=0;
if (joystick & JOY_DOWN) posy++; // direction Bas
if (posy>80) posy=80;
// shiplayer: moteur à hélice (6 images d'une taille de 8*22 chacunes)
SCBX(SCBsprite1) = posx;
SCBY(SCBsprite1) = posy;
// clip du sprite 1 : lignes suivantes désactivées
// SCBDATA(SCBsprite1) = sprtab[t%5]
// if (key == BUTTON_OPTION1)
// {
// if (t==0)
// t = 4*9;
// --t;
// }
// if (key == BUTTON_OPTION2)
// {
// if (t==4*9-1)
// t = -1;
// ++t;
// }
DrawSprite(SCBsprite1);
// shiplayer: coque
SCBX(SCBsprite2) = posx+8;
SCBY(SCBsprite2) = posy;
DrawSprite(SCBsprite2);
Vsync();
SwapBuffers();
}
}