La version 0.2 vient d'arriver ! La conversion se passe bien, c'est encore une version ou je cherche mes repères, mais ça commence à prendre forme

beauregard (./5) :
je remet ici les fichiers joint d'images au cas où, plus 2 nouvelles:
Fichier joint : sprite1.bmp
Fichier joint : fond2.bmp
mise à jour et nouvelles images pour la version 0.2 du jeu Glob shoot:
Fichier joint : fond1.bmp
Fichier joint : fondlvl.bmp
Fichier joint : sprite2.bmp
Fichier joint : chiffres.bmp
Fichier joint : jauge.bmpexe version 0.2 (à tester sur votre émulateur préféré):
Fichier joint : globshoot_02.ocode source:
/*
Glob Shoot version 0.2 - LYNX
27/10/2010
console tenu à la verticale
Handy/Option/Rotate Screen(Right)
D-pad et bouton option 1
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_LEFT 0x02
#define BUTTON_RIGHT 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 fond2[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche.
extern char fondlvl[]; // image fond level, d'une taille de 32*102;
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
char sprite1[]; //
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
extern char sp000000[];
extern char sp000001[];
extern char sp000002[];
extern char sp000003[];
extern char sp000004[];
extern char sp000005[];
char *sprtab[6] = {sp000000, sp000001, sp000002, sp000003, sp000004, sp000005};
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,0
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
// ------------------------------------
char chiffres[]; //
// clip du sprite chiffres: 0123456789.L
extern char ch000000[];
extern char ch000001[];
extern char ch000002[];
extern char ch000003[];
extern char ch000004[];
extern char ch000005[];
extern char ch000006[];
extern char ch000007[];
extern char ch000008[];
extern char ch000009[];
extern char ch000010[];
extern char ch000011[];
char *chiffrestab[12] = {ch000000, ch000001, ch000002, ch000003, ch000004,
ch000005, ch000006, ch000007, ch000008,ch000009,
ch000010, ch000011};
extern char SCBchiffres[]; // déclaration d'un nouveau controleur de sprite, coque
#asm
_SCBchiffres dc.b $c7,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm
// ------------------------------------
// ------------------------------------
char jauge[]; //
// clip du sprite jauge d'énergie du shiplayer
extern char ja000000[];
extern char ja001000[];
extern char ja002000[];
extern char ja003000[];
extern char ja004000[];
extern char ja005000[];
extern char ja006000[];
extern char ja007000[];
extern char ja008000[];
extern char ja009000[];
char *jaugetab[10] = {ja000000, ja001000, ja002000, ja003000, ja004000,
ja005000, ja006000, ja007000, ja008000, ja009000};
extern char SCBjauge[]; // déclaration d'un nouveau controleur de sprite, coque
#asm
_SCBjauge dc.b $c7,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm
// ------------------------------------
// variable (int = 2 octets ; char = 1 octet)
int posx,posy,level; //
int i,score,energ,pchi,upchi;
int compteur,scrollx;
char goship,t,tempa,tempb,tempc,tempd,etape; // de -128 à 127
// assembler vertical retrace syncronisation routine
void Vsync()
{
#asm
vretrace:
lda $fd0a
bne vretrace
#endasm
}
// Hors de l'assembleur, point de salut...
// L'utilisation de la procedure suivante, lors de l'écran d'action,
// fait ramer le jeu.
void Fchiffres(clx,cly,classe)
int clx;
int cly;
int classe;
{
SCBDATA(SCBchiffres) = chiffrestab[classe%12];
SCBX(SCBchiffres) = clx;
SCBY(SCBchiffres) = cly;
DrawSprite(SCBchiffres);
}
/**************************************************************************
** **
** **
**************************************************************************/
char main()
//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 = -40;
posy = 39;
// coordonnées X et Y du shiplayer, coque :
SCBX(SCBsprite2) = 58;
SCBY(SCBsprite2) = 52;
SCBDATA(SCBsprite2) = sprite2;
// coordonnées X et Y des chiffres et des lettres :
SCBX(SCBchiffres) = 0;
SCBY(SCBchiffres) = 0;
SCBDATA(SCBchiffres) = chiffres;
// coordonnées X et Y de la jauge :
SCBX(SCBjauge) = 0;
SCBY(SCBjauge) = 0;
SCBDATA(SCBjauge) = jauge;
for(;;) // boucle principale
{
// *********************************************************************************************
if (etape==0) // écran titre
{
DrawSprite(SCB); // affichage fond1
Fchiffres(4,5,0); // 0
Fchiffres(4,10,10); //.
Fchiffres(4,15,2); //2
if (joystick & BUTTON_OPTION1)
{
etape=1; energ=10; level=1; goship=0; posx=-40; posy=39;
SCBDATA(SCB) = fondlvl;
}
}
// *********************************************************************************************
if (etape==1) // écran level
{
for (compteur = 0 ; compteur < 5 ; compteur++) // de 0 à 4, ce qui fait 5. Grâce à la boucle for...
{
SCBX(SCB) = compteur*32; // ...on incrémente la position X de chaque nouvelle image...
DrawSprite(SCB); // ... et ainsi on affiche fondlvl 5 fois la même image (taille: 32*102) l'une àprès l'autre, à un intervalle de 32.
}
// SCBDATA(SCBchiffres) = chiffrestab[11%12]; // L
// SCBX(SCBchiffres) = 80;
// SCBY(SCBchiffres) = 44;
// DrawSprite(SCBchiffres);
Fchiffres(80,44,11);
// SCBDATA(SCBchiffres) = chiffrestab[10%12]; // -
// SCBX(SCBchiffres) = 80;
// SCBY(SCBchiffres) = 44+5;
// DrawSprite(SCBchiffres);
Fchiffres(80,49,10);
// SCBDATA(SCBchiffres) = chiffrestab[level%12]; // 1
// SCBX(SCBchiffres) = 80;
// SCBY(SCBchiffres) = 44+10;
// DrawSprite(SCBchiffres);
Fchiffres(80,54,level);
++tempa; // vitesse animation de l'hélice
if (tempa>=79) {tempa=0; etape=2;SCBDATA(SCB) = fond2;}
}
// *********************************************************************************************
if (etape==2) // monde 1 : affichage de 6 images pour le décors, et les 2 images du shiplayer.
{
// ********* decor :
++tempb; // vitesse defilement du decor
if (tempb>=2)
{
tempb=0;
scrollx++;
}
if (scrollx==32) scrollx=0; // l'image fond2 : 32 pixels de large, donc remise à 0 si égale à 32.
for (compteur = 0 ; compteur < 6 ; compteur++) // de 0 à 5, ce qui fait 6. Grâce à la boucle for...
{
SCBX(SCB) = compteur*32; // ...on incrémente la position X de chaque nouvelle image...
SCBX(SCB)=SCBX(SCB)-scrollx;
DrawSprite(SCB); // ... et ainsi on affiche 6 fois la même image (taille: 32*102) l'une àprès l'autre, à un intervalle de 32.
}
// ********* shiplayer :
if (goship==0 & posx<20)
{
posx=posx+1;
if (posx>=20) {posx=20; goship=1;}
}
if (goship==1)
{
if (joystick & JOY_RIGHT) posx++; // direction Droite
if (posx>120) posx=120;
if (joystick & JOY_LEFT) posx--; // direction Gauche
if (posx<2) posx=2;
if (joystick & JOY_UP) posy--; // direction Haut
if (posy<2) posy=2;
if (joystick & JOY_DOWN) posy++; // direction Bas
if (posy>76) posy=76;
}
// sprite 1 du shiplayer: moteur à hélice (6 images d'une taille de 8*22 chacunes)
SCBX(SCBsprite1) = posx;
SCBY(SCBsprite1) = posy;
++tempa; // vitesse animation de l'hélice
if (tempa>=3)
{
tempa=0;
++t;
}
// clip du sprite 1
if (t>=5) t=0;
SCBDATA(SCBsprite1) = sprtab[t%6];
// rappel: Le sprite 2 (coque) est lié au sprite 1 (hélice).
SCBX(SCBsprite2) = posx+8;
SCBY(SCBsprite2) = posy-1;
DrawSprite(SCBsprite1);
// ********* chiffre & lettre :
++tempc; // test le score
if (tempc>=24)
{
tempc=0;
if (score<100) ++score;
if (score>99) score=0;
}
if (score<10)
{
//pchi=score;
// unité:
SCBDATA(SCBchiffres) = chiffrestab[score%12];
SCBX(SCBchiffres) = 150;
SCBY(SCBchiffres) = 51;
DrawSprite(SCBchiffres);
// Fchiffres(150,51,score);
// dizaine:
SCBDATA(SCBchiffres) = chiffrestab[0%12]; // 0
SCBX(SCBchiffres) = 150;
SCBY(SCBchiffres) = 51-4;
DrawSprite(SCBchiffres);
// Fchiffres(150,47,0);
}
if (score>9)
{
pchi=score;
if (score>9 & score<20) {pchi=pchi-10;upchi=1;}
if (score>19 & score<30) {pchi=pchi-20;upchi=2;}
if (score>29 & score<40) {pchi=pchi-30;upchi=3;}
if (score>39 & score<50) {pchi=pchi-40;upchi=4;}
if (score>49 & score<60) {pchi=pchi-50;upchi=5;}
if (score>59 & score<70) {pchi=pchi-60;upchi=6;}
if (score>69 & score<80) {pchi=pchi-70;upchi=7;}
if (score>79 & score<90) {pchi=pchi-80;upchi=8;}
if (score>89 & score<100) {pchi=pchi-90;upchi=9;}
// unité:
SCBDATA(SCBchiffres) = chiffrestab[pchi%12];
SCBX(SCBchiffres) = 150;
SCBY(SCBchiffres) = 51;
DrawSprite(SCBchiffres);
// Fchiffres(150,51,pchi);
// dizaine:
SCBDATA(SCBchiffres) = chiffrestab[upchi%12];
SCBX(SCBchiffres) = 150;
SCBY(SCBchiffres) = 51-4;
DrawSprite(SCBchiffres);
// Fchiffres(150,47,upchi);
}
// ********* jauge :
++tempd; // test la jauge
if (tempd>=19)
{
tempd=0;
--energ;
if (energ<1) energ=10;
}
//energ=1;
--energ; // energ de 1 à 10 --> mais de 0 à 9 pour le n° image
SCBDATA(SCBjauge) = jaugetab[energ%10];
SCBX(SCBjauge) = 55;
SCBY(SCBjauge) = 4;
DrawSprite(SCBjauge);
++energ;
}
// *********************************************************************************************
Vsync();
SwapBuffers();
}
}
//}
Pour la suite des aventures du petit nanoship, j'ai besoin de connaitre la méthode pour sortir un nombre au hasard entre 1 et 102.