39Fermer41
philip-lynxLe 28/11/2010 à 13:09
source 1er partie:
/* Glob Shoot version 0.5 - LYNX - kit BLL (newcc65) 27/11/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton pause LYNX - video game */ #include <lynx.h> #include <lynxlib.h> #include <stdlib.h> //#include "inc\fond1.pal" // Ceci sert à inclure le fichier palette généré par sprpck //{ extern void silence(); extern void abcmusic(); extern void update_music(); char abcmusic0[]; char abcmusic1[]; char abcmusic2[]; char abcmusic3[]; char abcmenu1[]; char abcmenu2[]; char abcbric[]; char abcaptvir[]; char abcboum[]; char abcpanne[]; char abces[]; #asm xref _abcmenu1 xref _abcmenu2 xref _abcbric xref _abcaptvir xref _abcboum xref _abcpanne xref _abces xref _abcmusic0 xref _abcmusic1 xref _abcmusic2 xref _abcmusic3 _abcmenu1 dc.b "O2X7I1V32T20R54H7K8" dc.b "|:C4" dc.b 0 _abcmenu2 dc.b "O3X7I1V16T20R54H7K12" dc.b "|:c2" dc.b 0 _abcbric dc.b "O4X7I1V16T20R54H7K12" dc.b "|:C1" dc.b 0 _abcaptvir dc.b "O2X15I1V32T1R14H6K30" dc.b "|:C4D4C4E4D4C4D4" dc.b 0 _abcboum dc.b "O2X248I1V16T50R80H2K2" dc.b "|:C2" dc.b 0 _abcpanne dc.b "O4X6I1V127T6R5H6K6" dc.b "|:C4D4C4E4D4C4D4E4C4" dc.b 0 _abces dc.b "O4X6I1V127T6R16H2K3" dc.b "|:C2D2C2E2D2C2D2E2C2" dc.b 0 _abcmusic0 dc.b "O2X3I1V70T20R54H2K1" dc.b "|:C4O3T2C4" dc.b 0 _abcmusic1 dc.b "O2X7I0V45T20R80H8K1" dc.b "|:C4D4E4F4" dc.b "C4D4E4F4" dc.b "c4B4A4E4" dc.b "c4B4A4E4" dc.b "E4F4G4A4" dc.b "E4F4G4A4" dc.b "C4D4E4F4" dc.b "C4D4E4F4:" dc.b 0 _abcmusic2 dc.b "O1X7I0V45T20R40H2K3" dc.b "zzzzzzzz" dc.b "|:CDEEDEFFEFGEFDGG" dc.b "I1CDEEDEFFEFGEFDCC" dc.b "I0cBAABAGGAGFFEDEE" dc.b "cBAABAGGAGFFEDCC" dc.b "ECDDFDEEGEFGABcc" dc.b "ECDDFDEEGEFGABcc" dc.b "CDEEDEFFEFGEFDGG" dc.b "CDEEDEFFEFGEFDCC:" dc.b 0 _abcmusic3 dc.b "O2X7I0V45T20R80H8K1" dc.b "z4z4z2" dc.b "|:C4D4E4F4" dc.b "C4D4E4F4" dc.b "c4B4A4E4" dc.b "c4B4A4E4" dc.b "E4F4G4A4" dc.b "E4F4G4A4" dc.b "C4D4E4F4" dc.b "C4D4E4F4:" dc.b 0 #endasm //} /* 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 SCBSTRETC H(a) (*(uint *)((a)+15)) // déformation, macro //#define SCBTILT(a) (*(uint *)((a)+17)) // déformation, macro char SCREEN[8160] at (MEMTOP-16320); char RENDER[8160] at (MEMTOP-8160); //char redir[]={0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}; char pal[]={ 0x00,0x0F,0x0B,0x08,0x03,0x04,0x06,0x0A,0x00,0x00,0x07,0x07,0x03,0x00,0x05,0x03, 0x00,0x0F,0x0B,0x06,0x00,0x30,0x54,0xAA,0x08,0x05,0x0E,0xAF,0x5F,0x0F,0xC0,0x61}; // ------------------------------------ extern char pushup[]; // image appuyez sur haut, d'une taille de 48*35; char SCBp[]; #asm _SCBp 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 // ------------------------------------ extern char fond1[]; // ecran titre char SCBl[]; #asm _SCBl 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 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 pause, d'une taille de 13*43; 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 // ------------------------------------ // clip du sprite 1 --> 6 images, de 0 à 5, du moteur à élice : 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 #asm _SCBsprite1 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 // ------------------------------------ extern char sprite2[]; // coque (taille: 30*24) char SCBsprite2[]; // déclaration d'un nouveau controleur de sprite, coque #asm _SCBsprite2 dc.b $c7,$10,$20 dc.w 0, 0 ;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 // ------------------------------------ // 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 char SCBscore1[]; // déclaration d'un nouveau controleur de sprite (score unité) char SCBscore2[]; // déclaration d'un nouveau controleur de sprite (score dizaine) char SCBscore3[]; // déclaration d'un nouveau controleur de sprite (score centaine) #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 ; _SCBscore1 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 ; _SCBscore2 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 ; _SCBscore3 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) char bruitm; 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); xpush=-48;ypush=34; /* set the palette */ SetRGB(pal); // Ceci sert à changer la palette de la Lynx (16 couleurs). //DrawFBox(0,0,160,102,0); //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 pause, d'une taille de 13*43; SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = fond1; // 1er sprite chainé (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup + jauge) SCBX(SCBl) = 0; SCBY(SCBl) = 0; SCBDATA(SCBl) = fond1; SCBNEXT(SCBl) = SCBgsf1; // chainage de sprite 2ème image fond SCBX(SCBgsf1) = 0; SCBY(SCBgsf1) = -102; SCBDATA(SCBgsf1) = fond2; SCBNEXT(SCBgsf1) = SCBgsf2; // chainage de sprite 2ème image fond SCBX(SCBgsf2) = 32; SCBY(SCBgsf2) = -102; SCBDATA(SCBgsf2) = fond2; SCBNEXT(SCBgsf2) = SCBgsf3; // chainage de sprite 3ème image fond SCBX(SCBgsf3) = 64; SCBY(SCBgsf3) = -102; SCBDATA(SCBgsf3) = fond2; SCBNEXT(SCBgsf3) = SCBgsf4; // chainage de sprite 4ème image fond SCBX(SCBgsf4) = 96; SCBY(SCBgsf4) = -102; SCBDATA(SCBgsf4) = fond2; SCBNEXT(SCBgsf4) = SCBgsf5; // chainage de sprite 5ème image fond SCBX(SCBgsf5) = 128; SCBY(SCBgsf5) = -102; SCBDATA(SCBgsf5) = fond2; SCBNEXT(SCBgsf5) = SCBgsf6; // chainage de sprite 6ème image fond SCBX(SCBgsf6) = 160; SCBY(SCBgsf6) = -102; SCBDATA(SCBgsf6) = fond2; SCBNEXT(SCBgsf6) = SCBsprite1; // chainage du moteur à élice du shiplayer SCBX(SCBsprite1) = 0; SCBY(SCBsprite1) = -200; SCBDATA(SCBsprite1) = sprtab[t%6]; SCBNEXT(SCBsprite1) = SCBsprite2; // chainage de la coque du shiplayer SCBX(SCBsprite2) = 0; SCBY(SCBsprite2) = -200; SCBDATA(SCBsprite2) = sprite2; SCBNEXT(SCBsprite2) = SCBroch; // chainage de sprite rocher 1 SCBX(SCBroch) = 0; SCBY(SCBroch) = -200; SCBDATA(SCBroch) = rochtab[0%18];//roch;//rochtab[0%18]; SCBNEXT(SCBroch) = SCBroch2; // chainage de sprite rocher 2 SCBX(SCBroch2) = 0; SCBY(SCBroch2) = -200; SCBDATA(SCBroch2) = rochtab[0%18];//roch;//rochtab[0%18]; SCBNEXT(SCBroch2) = SCBrhume; // chainage de sprite vilainrhume SCBX(SCBrhume) = 32; SCBY(SCBrhume) = 0; SCBDATA(SCBrhume) = rhume; SCBNEXT(SCBrhume) = SCBp; // chainage de sprite info commande SCBX(SCBp) = xpush; SCBY(SCBp) = ypush; SCBDATA(SCBp) = pushup; SCBNEXT(SCBp) = SCBjauge; // chainage du sprite jauge SCBX(SCBjauge) = 0;SCBY(SCBjauge) = -200; // coordonnées X et Y de la jauge SCBDATA(SCBjauge) = jauge; SCBNEXT(SCBjauge) = SCBscore1; // chainage score unité SCBX(SCBscore1) = 4;SCBY(SCBscore1) = -200; SCBDATA(SCBscore1) = chiffrestab[0%14]; // SCBNEXT(SCBscore1) = SCBscore2; // chainage score dizaine SCBX(SCBscore2) = 4;SCBY(SCBscore2) = -200; SCBDATA(SCBscore2) = chiffrestab[0%14]; // SCBNEXT(SCBscore2) = SCBscore3; // chainage score centaine SCBX(SCBscore3) = 4;SCBY(SCBscore3) = -200; SCBDATA(SCBscore3) = chiffrestab[0%14]; // // 2ème sprite chainé (test) 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 des chiffres et des lettres : // SCBX(SCBchiffres) = 0; // SCBY(SCBchiffres) = 0; // SCBDATA(SCBchiffres) = chiffres; // posx = -40; // posy = -39; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160; elvl=0; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for(;;) // boucle principale { update_music(); // petite subtilité de la gestion sonore /* // 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 (joystick & BUTTON_OPTION1) // test sonore { if (atest==0){ ++atest; silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); } } */ // ********************************************************************************************* if (etape==0) // écran titre { SCBX(SCBp) = xpush;SCBY(SCBp) = ypush; DrawSprite(SCBl); // Affichage sprites chainés (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup) // 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,5); //5 // 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 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; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); SCBY(SCBl) = -200; // fond intro mis hors de l'écran // // bruitage panne sèche : // silence(); // abcmusic(3,abcpanne); } } } // ********************************************************************************************* 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;} // } // bruitage boum : if (compteur==0) { if (elvl==0) { xlvla=xlvla-8; if (xlvla<1) {xlvla=0;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvla; } if (compteur==1) { if (elvl==1) { xlvlb=xlvlb-8; if (xlvlb<33) {xlvlb=32;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvlb; } if (compteur==2) { if (elvl==2) { xlvlc=xlvlc-8; if (xlvlc<65) {xlvlc=64;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvlc; } if (compteur==3) { if (elvl==3) { xlvld=xlvld-8; if (xlvld<97) {xlvld=96;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvld; } if (compteur==4) { if (elvl==4) { xlvle=xlvle-8; if (xlvle<127) {xlvle=128;++elvl;silence();abcmusic(2,abcbric);} } 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 SCBX(SCBp) = xpush;SCBY(SCBp) = ypush; DrawSprite(SCBl); // Affichage sprites chainés (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup) // 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;SCBX(SCBp) = xpush;etape=2;drap1=1; SCBX(SCBjauge) = 55;SCBY(SCBjauge) = 4; 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; SCBY(SCBgsf1) = 0;SCBY(SCBgsf2) = 0;SCBY(SCBgsf3) = 0;SCBY(SCBgsf4) = 0;SCBY(SCBgsf5) = 0;SCBY(SCBgsf6) = 0; // 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; } // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); } } } // ********************************************************************************************* // 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 (switches & BUTTON_PAUSE) { if (gspause==0) {gspause=1;silence();abcmusic(0,abcaptvir);} } 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 }