33Fermer35
philip-lynxLe 10/11/2010 à 20:57
mise à jour majeure (4 niveaux jouable)
version0.4
[URL=http://img507.imageshack.us/i/fofo3.jpg/][IMG]http://img507.imageshack.us/img507/6223/fofo3.jpg[/IMG][/URL]

exe:
tromb Fichier joint : globshoot_04.o

code source, 1er partie: /* Glob Shoot version 0.4 - LYNX - kit BLL (newcc65) 10/11/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton pause LYNX-image */ #include <lynx.h> #include <lynxlib.h> #include <stdlib.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 SWITCHES 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 gameover[]; // image game over, d'une taille de 20*32; extern char ipause[]; // image game over, d'une taille de 13*43; extern char pushup[]; // image game over, d'une taille de 48*35; 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 extern char fond2[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. extern char fond3[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. char SCBfond2[]; // à la 3ème ligna asm, j'ai remplacé 100 par 200 pour doubler la largeur du décor (nbre de colonne * 2) #asm _SCBfond2 dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$200,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ char SCBgsf1[]; // déclaration d'un nouveau controleur de sprite char SCBgsf2[]; // déclaration d'un nouveau controleur de sprite char SCBgsf3[]; // déclaration d'un nouveau controleur de sprite char SCBgsf4[]; // déclaration d'un nouveau controleur de sprite char SCBgsf5[]; // déclaration d'un nouveau controleur de sprite char SCBgsf6[]; // déclaration d'un nouveau controleur de sprite #asm _SCBgsf1 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 ; _SCBgsf2 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 ; _SCBgsf3 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 ; _SCBgsf4 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 ; _SCBgsf5 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 ; _SCBgsf6 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 // ------------------------------------ // 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}; char SCBsprite1[]; // déclaration d'un nouveau controleur de sprite, moteur à hélice 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 // $c0 couleur 0 pas transparente // $c7 couleur transparente // ------------------------------------ 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}; char SCBchiffres1[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres2[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres3[]; // déclaration d'un nouveau controleur de sprite #asm _SCBchiffres1 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 ; _SCBchiffres2 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 ; _SCBchiffres3 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}; char SCBjauge[]; // déclaration d'un nouveau controleur de sprite #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 // ------------------------------------ // ------------------------------------ char rhume[]; // // clip du sprite rhume, que le nanoship doit capturer. extern char rh000000[]; extern char rh000001[]; extern char rh000002[]; extern char rh000003[]; extern char rh000004[]; extern char rh000005[]; extern char rh000006[]; char *rhumetab[7] = {rh000000, rh000001, rh000002, rh000003, rh000004, rh000005, rh000006}; char SCBrhume[]; // déclaration d'un nouveau controleur de sprite #asm _SCBrhume 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 // ------------------------------------ c0 à la plce de c7 desactive la couleur 0 (transparente) // ------------------------------------ char roch[]; // // clip du sprite rhume, que le nanoship doit capturer. extern char ro000000[]; extern char ro000001[]; extern char ro000002[]; extern char ro000003[]; extern char ro000004[]; extern char ro000005[]; extern char ro000006[]; extern char ro000007[]; extern char ro000008[]; extern char ro000009[]; extern char ro000010[]; extern char ro000011[]; extern char ro000012[]; extern char ro000013[]; extern char ro000014[]; extern char ro000015[]; extern char ro000016[]; extern char ro000017[]; char *rochtab[18] = {ro000000, ro000001, ro000002, ro000003, ro000004, ro000005, ro000006, ro000007, ro000008, ro000009, ro000010, ro000011, ro000012, ro000013, ro000014, ro000015, ro000016, ro000017}; char SCBroch[]; // déclaration d'un nouveau controleur de sprite char SCBroch2[]; // déclaration d'un nouveau controleur de sprite #asm _SCBroch 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 _SCBroch2 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,xpush,ypush,xlvla,xlvlb,xlvlc,xlvld,xlvle,elvl; // int i,score,energ,nbrnext,nbrnexu; // nbrnext : nombre de fois où l'on repositionne le décor, afin de déterminer la longueur d'un level... int compteur,scrollx; char goship,t,tempa,tempb,tempc,tempd,tempe,etape,gspause,gslife,stopm,drap1,nodecor,boumgb,aaroch,nbboum,scboom,outship,gsblip; // de -128 à 127 char tyroch,chroch; char tyroch2,chroch2; char gshas,gshat; // hasard "aidé" (incrementation en attendant l'appuis sur D-pad haut) int govil,vil,vilx,tempvilx,speedvil,vily,avil,tempavil,hasa,hasam,hasar; int aroch,temparoch; int goroch,eroch,rochx,temprochx,rochy,rasa,rasam,rasar; int goroch2,eroch2,roch2x,temprochx2,roch2y,rbsa,rbsam,rbsar; int unite; int dizaine; int centaine; int tgovil,vroch; int atest; // variable utilisée pour tester des trucs et des machins (pas de debug, donc système D) // 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,cly,classe; { SCBDATA(SCBchiffres1) = chiffrestab[classe%12]; SCBX(SCBchiffres1) = clx; SCBY(SCBchiffres1) = cly; DrawSprite(SCBchiffres1); } /************************************************************************** ** ** ** ** **************************************************************************/ char main() //main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); // SCBX(SCB) = 0; // SCBY(SCB) = 0; // SCBDATA(SCB) = fond1; // SCBNEXT(SCB) = SCBromeo; // chainage de sprite // SCBX(SCBromeo) = 0; // SCBY(SCBromeo) = 0; // SCBDATA(SCBromeo) = romeotab[0%6]; /* 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; // SCBNEXT(SCB) = SCBfond2; // chainage de sprite // SCBX(SCBfond2) = 0; // SCBY(SCBfond2) = 0; // SCBDATA(SCBfond2) = fond2; // SCBNEXT(SCBfond2) = SCBsprite1; // chainage de sprite // SCBX(SCBsprite1) = 0; // SCBY(SCBsprite1) = 0; // SCBDATA(SCBsprite1) = sprite1; // SCBNEXT(SCBsprite1) = SCBsprite2; // chainage de sprite // SCBX(SCBsprite2) = 58; // SCBY(SCBsprite2) = 52; // SCBDATA(SCBsprite2) = sprite2; // 1er sprite chainé (fond + shiplayer) SCBX(SCBgsf1) = 0; SCBY(SCBgsf1) = 0; SCBDATA(SCBgsf1) = fond2; SCBNEXT(SCBgsf1) = SCBgsf2; // chainage de sprite 2ème image fond SCBX(SCBgsf2) = 32; SCBY(SCBgsf2) = 0; SCBDATA(SCBgsf2) = fond2; SCBNEXT(SCBgsf2) = SCBgsf3; // chainage de sprite 3ème image fond SCBX(SCBgsf3) = 64; SCBY(SCBgsf3) = 0; SCBDATA(SCBgsf3) = fond2; SCBNEXT(SCBgsf3) = SCBgsf4; // chainage de sprite 4ème image fond SCBX(SCBgsf4) = 96; SCBY(SCBgsf4) = 0; SCBDATA(SCBgsf4) = fond2; SCBNEXT(SCBgsf4) = SCBgsf5; // chainage de sprite 5ème image fond SCBX(SCBgsf5) = 128; SCBY(SCBgsf5) = 0; SCBDATA(SCBgsf5) = fond2; SCBNEXT(SCBgsf5) = SCBgsf6; // chainage de sprite 6ème image fond SCBX(SCBgsf6) = 160; SCBY(SCBgsf6) = 0; SCBDATA(SCBgsf6) = fond2; SCBNEXT(SCBgsf6) = SCBsprite1; // chainage de sprite shiplayer SCBX(SCBsprite1) = 0; SCBY(SCBsprite1) = 0; SCBDATA(SCBsprite1) = sprite1; // coordonnées X et Y du shiplayer, moteur à hélice : // SCBX(SCBsprite1) = 0; // SCBY(SCBsprite1) = 0; // SCBDATA(SCBsprite1) = sprite1; // coordonnées X et Y du shiplayer, coque : // SCBX(SCBsprite2) = 58; // SCBY(SCBsprite2) = 52; // SCBDATA(SCBsprite2) = sprite2; // 2ème sprite chainé (rocher et rhume) SCBX(SCBroch) = 0; SCBY(SCBroch) = 0; SCBDATA(SCBroch) = roch;//rochtab[0%18]; SCBNEXT(SCBroch) = SCBroch2; // chainage de sprite SCBX(SCBroch2) = 0; SCBY(SCBroch2) = 0; SCBDATA(SCBroch2) = roch;//rochtab[0%18]; SCBNEXT(SCBroch2) = SCBrhume; // chainage de sprite SCBX(SCBrhume) = 32; SCBY(SCBrhume) = 0; SCBDATA(SCBrhume) = rhume; // 3ème sprite chainé (jauge et score) // SCBX(SCBjauge) = 0; // SCBY(SCBjauge) = 0; // SCBDATA(SCBjauge) = jauge;//rochtab[0%18]; // SCBNEXT(SCBjauge) = chiffres; // chainage de sprite // SCBX(SCBchiffres) = 0; // SCBY(SCBchiffres) = 0; // SCBDATA(SCBchiffres) = chiffres; // 3ème sprite chainé (score) SCBX(SCBchiffres1) = 0; SCBY(SCBchiffres1) = 0; SCBDATA(SCBchiffres1) = chiffres; SCBNEXT(SCBchiffres1) = SCBchiffres2; // chainage de sprite SCBX(SCBchiffres2) = 0; SCBY(SCBchiffres2) = 0; SCBDATA(SCBchiffres2) = chiffres; SCBNEXT(SCBchiffres2) = SCBchiffres3; // chainage de sprite SCBX(SCBchiffres3) = 0; SCBY(SCBchiffres3) = 0; SCBDATA(SCBchiffres3) = chiffres; // coordonnées X et Y de la jauge : SCBX(SCBjauge) = 0; SCBY(SCBjauge) = 0; SCBDATA(SCBjauge) = jauge; // coordonnées X et Y des chiffres et des lettres : // SCBX(SCBchiffres) = 0; // SCBY(SCBchiffres) = 0; // SCBDATA(SCBchiffres) = chiffres; // posx = -40; // posy = -39; xpush=-48; ypush=34; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160; elvl=0; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for(;;) // boucle principale { // test affichage nombre de sprite: if (joystick & (BUTTON_RIGHT)) nodecor=1;//{nodecor=1;DrawFBox(0,0,160,102,0);} if (joystick & (BUTTON_LEFT)) nodecor=0; // ********************************************************************************************* if (etape==0) // écran titre { SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = fond1; DrawSprite(SCB); // affichage fond1 // SCBDATA(SCBchiffres1) = chiffrestab[0%12]; // 0 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 20; // DrawSprite(SCBchiffres1); Fchiffres(2,20,0); // 0 // SCBDATA(SCBchiffres1) = chiffrestab[10%12]; // . // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 25; // DrawSprite(SCBchiffres1); Fchiffres(2,25,10); //. // SCBDATA(SCBchiffres1) = chiffrestab[4%12]; // 4 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 30; // DrawSprite(SCBchiffres1); Fchiffres(2,30,4); //3 // SCBDATA(SCBchiffres1) = chiffrestab[2%12]; // 2 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 35; // DrawSprite(SCBchiffres1); // Fchiffres(2,35,2); //2 Fchiffres(88,75,2); // 2 Fchiffres(88,79,0); // 0 Fchiffres(88,83,1); // 1 Fchiffres(88,87,0); // 0 SCBDATA(SCB) = pushup; SCBX(SCB) = xpush;//48; SCBY(SCB) = ypush; DrawSprite(SCB); if (xpush<8) xpush=xpush+2; if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu. { xpush=7; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; if (joystick & JOY_RIGHT) { level=1;//3;//1; tempa=0;xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; etape=1; energ=10;score=0;drap1=0; // drap1 agit sur l'affichage du score. goship=0; posx=-40; posy=39;gslife=3; govil=0;goroch=0;tyroch=0;chroch=0; SCBDATA(SCB) = fondlvl; } } } // ********************************************************************************************* if (etape==1 | etape==8 | etape==9) // écran level OU ecran perd une vie/game over { if (elvl<4) DrawFBox(0,0,160,102,0); SCBDATA(SCB) = fondlvl; 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... //SCBX(SCB) = (compteur*32)+xlvl; // ...on incrémente la position X de chaque nouvelle image... // if (compteur==elvl) // { // xlvl=xlvl-4; // if (xlvl<1+(elvl*32)) {xlvl=0+(elvl*32);++elvl;} // SCBX(SCB) = (compteur*32)+xlvl; // if (compteur!=elvl) {xlvl=160;} // } if (compteur==0) { if (elvl==0) { xlvla=xlvla-8; if (xlvla<1) {xlvla=0;++elvl;} } SCBX(SCB) = xlvla; } if (compteur==1) { if (elvl==1) { xlvlb=xlvlb-8; if (xlvlb<33) {xlvlb=32;++elvl;} } SCBX(SCB) = xlvlb; } if (compteur==2) { if (elvl==2) { xlvlc=xlvlc-8; if (xlvlc<65) {xlvlc=64;++elvl;} } SCBX(SCB) = xlvlc; } if (compteur==3) { if (elvl==3) { xlvld=xlvld-8; if (xlvld<97) {xlvld=96;++elvl;} } SCBX(SCB) = xlvld; } if (compteur==4) { if (elvl==4) { xlvle=xlvle-8; if (xlvle<127) {xlvle=128;++elvl;} } SCBX(SCB) = xlvle; } SCBY(SCB) =0; 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. } } // ********************************************************************************************* if (etape==1) { if (level>4) level=1; // temporaire // SCBDATA(SCBchiffres) = chiffrestab[11%12]; // L // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44; // DrawSprite(SCBchiffres); Fchiffres(118,44,11); // SCBDATA(SCBchiffres) = chiffrestab[10%12]; // - // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44+5; // DrawSprite(SCBchiffres); Fchiffres(118,49,10); // SCBDATA(SCBchiffres) = chiffrestab[level%12]; // 1 // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44+10; // DrawSprite(SCBchiffres); Fchiffres(118,57,level); Fchiffres(86,57,gslife); // nbre de vie SCBDATA(SCBrhume) = rhumetab[5%7]; // coeur SCBX(SCBrhume) = 82; SCBY(SCBrhume) = 39; DrawSprite(SCBrhume); // if (tempa<80) ++tempa; // durée de l'écran de présentation : level et nbre de life // if (tempa>79) // { SCBDATA(SCB) = pushup; SCBX(SCB) = xpush;//48; SCBY(SCB) = ypush; DrawSprite(SCB); if (xpush<8 & elvl==5) xpush=xpush+2; if (xpush>7) { xpush=8; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; // SCBX(SCBroch) = 20; // SCBY(SCBroch) = 39; // SCBDATA(SCBroch) = rochtab[18%18]; // DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) ++gshas; if (gshas==3) gshas=1; // 1 ou 2 //if (joystick & (BUTTON_LEFT)) if (joystick & JOY_RIGHT) { gshat=1; // hasard "aidé" SCBX(SCBroch) = 200; tempa=0;xpush=-48;ypush=34;etape=2;SCBDATA(SCB) = fond2;drap1=1; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; govil=0; eroch=0;goroch=0;eroch2=0;goroch2=0; rochx=180;SCBX(SCBroch) = rochx; roch2x=180;SCBX(SCBroch2) = roch2x; boumgb=0;SCBX(SCBrhume) = -100; // level 1 : virus lent ; petit rocher lent // level 2 : virus rapide ; petit rocher lent ; gros rocher lent // level 3 : virus rapide ; petit rocher rapide ; gros rocher rapide // level 4 : virus rapide*2 ; petit rocher rapide ; gros rocher rapide // level 5 : virus rapide*2 ; petit rocher rapide *2; gros rocher rapide *2 // level 6 : virus rapide*3 ; petit rocher rapide *2; gros rocher rapide *2 // level 7 : virus rapide*3 ; petit rocher rapide *3; gros rocher rapide *3 // level 1,2,3,4,5 et 6: virus --> govil>31 // level 7 : virus lent ; petit rocher lent // level 8 : virus lent ; petit rocher lent ; gros rocher lent // level 9 : virus rapide ; petit rocher lent ; gros rocher lent // level 10 : virus rapide ; petit rocher rapide ; gros rocher rapide // level 11 : virus rapide ; petit rocher rapide *2; gros rocher rapide *2 // level 12 : virus rapide ; petit rocher rapide *4; gros rocher rapide *4 // level 7,8,9,10,11 et 12: virus --> govil>93 if (level>0 & level<8) {tgovil=32;} // vitesse de sortie des virus if (level>7 & level<11) {tgovil=96;} speedvil=0; // vitesse de déplacement des virus // if (level==1) speedvil=1; // if (level==2 | level==3) speedvil=2; // if (level==4 | level==5) speedvil=3; // if (level==6 | level==7) speedvil=4; //if (level==1) speedvil=1; if (level==1 | level==2 | level==3 | level==4) speedvil=1; //if (level==5) speedvil=1; if (level==6 | level==7 | level==8 | level==9) speedvil=0; //if (level==10) speedvil=1; //if (level==6 | level==7) speedvil=1; //speedvil=1; // vitesse des rochers : vroch=1; if (level==1) {eroch2=-1;} // interdit le 2ème rocher pour le 1er niveau if (level==3 | level==4) vroch=2; // //if (level==3) vroch=1,5; // //if (level==4) vroch=2; // //if (level==5 | level==6) vroch=3;// trop rapide //if (level==7) vroch=4;// trop rapide SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; tyroch=0;chroch=0; if (level>1) tyroch=1; SCBHS(SCBroch2) = 0x100;SCBVS(SCBroch2) = 0x100; tyroch2=0;chroch2=0; if (level>2) tyroch2=1; if (level==1 | level==6) { SCBDATA(SCBgsf1) = fond2; SCBDATA(SCBgsf2) = fond2; SCBDATA(SCBgsf3) = fond2; SCBDATA(SCBgsf4) = fond2; SCBDATA(SCBgsf5) = fond2; SCBDATA(SCBgsf6) = fond2; } if (level==2 | level==7) { SCBDATA(SCBgsf1) = fond3; SCBDATA(SCBgsf2) = fond3; SCBDATA(SCBgsf3) = fond3; SCBDATA(SCBgsf4) = fond3; SCBDATA(SCBgsf5) = fond3; SCBDATA(SCBgsf6) = fond3; } if (level==3 | level==8) { SCBDATA(SCBgsf1) = fond2; SCBDATA(SCBgsf2) = fond2; SCBDATA(SCBgsf3) = fond2; SCBDATA(SCBgsf4) = fond2; SCBDATA(SCBgsf5) = fond2; SCBDATA(SCBgsf6) = fond2; } if (level==4 | level==9) { SCBDATA(SCBgsf1) = fond3; SCBDATA(SCBgsf2) = fond3; SCBDATA(SCBgsf3) = fond3; SCBDATA(SCBgsf4) = fond3; SCBDATA(SCBgsf5) = fond3; SCBDATA(SCBgsf6) = fond3; } } } } // ********************************************************************************************* // Affichage de 4 images pour le décors, les 2 images du shiplayer, la jauge et les 2 images du score. if (etape==2) { ++gsblip; // economie ressource machine --> certaines des conditions n'ont pas besoin d'être lu par la LYNX à chaque boucle. if (gsblip==5) { gsblip=1; /* if (joystick & BUTTON_PAUSE) { if (gspause==0) gspause=1; } if (!(joystick & BUTTON_PAUSE)) { if (gspause==1) gspause=2; } if (joystick & BUTTON_PAUSE) { if (gspause==2) gspause=3; } if (!(joystick & BUTTON_PAUSE)) { if (gspause==3) gspause=0; } */ // /* probleme à resoudre : bouton pause if (switches & BUTTON_PAUSE) { if (gspause==0) gspause=1; } if (!(switches & BUTTON_PAUSE)) { if (gspause==1) gspause=2; } if (switches & BUTTON_PAUSE) { if (gspause==2) gspause=3; } if (!(switches & BUTTON_PAUSE)) { if (gspause==3) gspause=0; } // */ } // ********* decor : //scrollx=2 if (gspause==0) scrollx=2; // vitesse de défilement du décor if (gspause>0) { scrollx=0; // vitesse de défilement du décor // SCBX(SCBroch) = 70; // SCBY(SCBroch) = 39; // SCBDATA(SCBroch) = rochtab[19%18]; // DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) // SCBDATA(SCB) = ipause; // SCBX(SCB) = 70; // SCBY(SCB) = 39; // DrawSprite(SCB); } /*************************************************************************** ** Problème de ralentissement au bout de 20 secondes de jeu : ** ** problème résolu en chainant les sprites. ** ***************************************************************************/ if (SCBX(SCBgsf1)<=-32) { SCBX(SCBgsf1) = 0; SCBX(SCBgsf2) = 32; SCBX(SCBgsf3) = 64; SCBX(SCBgsf4) = 96; SCBX(SCBgsf5) = 128; SCBX(SCBgsf6) = 160; if (nbrnexu==0) { ++nbrnext ; if (nbrnexu==0) { if (stopm==0 & boumgb==0 & gspause==0) { if (nbrnext>(60*level)) // longueur d'un level //if (nbrnext>30) // longueur d'un level { nbrnexu=1; } } } } } SCBX(SCBgsf1)=SCBX(SCBgsf1)-scrollx; SCBX(SCBgsf2)=SCBX(SCBgsf2)-scrollx; SCBX(SCBgsf3)=SCBX(SCBgsf3)-scrollx; SCBX(SCBgsf4)=SCBX(SCBgsf4)-scrollx; SCBX(SCBgsf5)=SCBX(SCBgsf5)-scrollx; SCBX(SCBgsf6)=SCBX(SCBgsf6)-scrollx; // ********* shiplayer : if (gspause==0) { if (nbrnexu==2) { ++posx; // le shiplayer quitte le niveau en automatique if (posx>160) {nbrnexu=3;} } if (goship==0 & posx<20) { posx=posx+1; if (posx>=20) {posx=20; goship=1;} } if (goship==1 & stopm==0 & nbrnexu<2) { 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>80) posy=80; } // 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+stopm) { tempa=0; ++t; if (stopm>0 & stopm<32) ++stopm; // Arrêt progressif du moteur à hélice... } if (stopm>1) // ...et le shiplayer sort progressivement de l'écran. { ++tempe; if (tempe>=4) {tempe=0;--posx;++outship;} // } // 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); DrawSprite(SCBgsf1); // Affichage sprites chainés (décor + shiplayer)