13Fermer15
philip-lynxLe 27/10/2010 à 21:09
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 smile
beauregard (./5) :
je remet ici les fichiers joint d'images au cas où, plus 2 nouvelles:
tromb Fichier joint : sprite1.bmp
tromb Fichier joint : fond2.bmp

mise à jour et nouvelles images pour la version 0.2 du jeu Glob shoot:
tromb Fichier joint : fond1.bmp
tromb Fichier joint : fondlvl.bmp
tromb Fichier joint : sprite2.bmp
tromb Fichier joint : chiffres.bmp
tromb Fichier joint : jauge.bmp

exe version 0.2 (à tester sur votre émulateur préféré):
tromb Fichier joint : globshoot_02.o

code 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.