1

Fission est un casse-brique, la 0.1 est la toute première version "jouable", donc pas encore de brique à l'écran. fatigue Et comme d'hab, console tenu à la verticale, bon test. smile

tromb Fichier joint : fission_01.o
Et là un peu de lecture : /* Fission (casse brique) 0.1 - LYNX - kit BLL (newcc65) 24/11/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton pause LYNX - video game */ #include <stdlib.h> #include <lynx.h> #include <lynxlib.h> //{ 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 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); char pali[]={ 0x00,0x0F,0x02,0x03,0x0A,0x04,0x05,0x06,0x07,0x0B,0x08,0x09,0x04,0x0B,0x0C,0x01, 0x00,0xFF,0x22,0x33,0xAA,0x44,0x55,0x66,0x77,0x00,0x88,0x99,0x53,0xBB,0xCC,0x11}; char palg[]={ 0x00,0x0F,0x0A,0x00,0x03,0x05,0x08,0x0A,0x0C,0x0E,0x0D,0x00,0x04,0x03,0x02,0x00, 0x00,0xFF,0xF0,0x0F,0x3F,0x5F,0x8F,0xAF,0xCF,0xEF,0x28,0xF8,0x53,0x63,0x52,0x21}; /***************************************************************************** ** Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp ** ** set image01=imole.bmp SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01% cmd ** ** Le point d'action de l'image imole est mis au centre de celle-ci, ** ** 72/2 = 36 (-a036036). Le but de la manoeuvre est de réaliser un zoom ** ** correctement. ** *****************************************************************************/ // Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp // set image01=imole.bmp // SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01% // cmd // ci-dessus, le point d'action de l'image imole est mis au centre de celle-ci, 72/2 = 36 (-a036036). extern char ipause[]; // image game over, d'une taille de 13*43; extern char ititre[]; // image titre, d'une taille de 15*49; extern char iname[]; // image nom/prénom de auteur, d'une taille de 93*9; extern char imole[]; // image molecule, d'une taille de 72*72; char SCB[]; #asm _SCB 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 fondg[]; // image fond game, d'une taille de 160*102; char SCBg[]; #asm _SCBg 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 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 raquet[]; // image raquette, d'une taille de 8*24; char SCBr[]; #asm _SCBr 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 chiffres[]; // // clip du sprite chiffres: 0123456789.LEV extern char bc000000[]; extern char bc000001[]; extern char bc000002[]; extern char bc000003[]; extern char bc000004[]; extern char bc000005[]; extern char bc000006[]; extern char bc000007[]; extern char bc000008[]; extern char bc000009[]; extern char bc000010[]; extern char bc000011[]; extern char bc000012[]; extern char bc000013[]; char *chiffrestab[14] = {bc000000, bc000001, bc000002, bc000003, bc000004, bc000005, bc000006, bc000007, bc000008, bc000009, bc000010, bc000011, bc000012, bc000013}; 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 fleche[]; // // clip du sprite fleches extern char fd000000[]; extern char fd000001[]; extern char fd000002[]; extern char fd000003[]; extern char fd000004[]; extern char fd000005[]; extern char fd000006[]; char *fdtab[7] = {fd000000, fd000001, fd000002, fd000003, fd000004, fd000005, fd000006}; char SCBfd[]; // déclaration d'un nouveau controleur de sprite #asm _SCBfd 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 fball[]; // image raquette, d'une taille de 8*24; char SCBball[]; #asm _SCBball 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 fbriq[]; // // clip du sprite brique, d'une taille de 6*14, normale, dure et incassable. extern char br000000[]; extern char br000001[]; extern char br000002[]; char *brtab[3] = {br000000, br000001, br000002}; char SCBbr[]; // déclaration d'un nouveau controleur de sprite #asm _SCBbr 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 // ------------------------------------ int posx,posy,level,score,compteur,xpush,ypush,relach; int i; char tempa,tempb,tempc,tempd,tempe,etape,filife,drap1,gspause,gsblip,mhaut,mbas; // de -128 à 127 int molescx,molescy,gmole; int atest,unite,dizaine,centaine; // ydirf --> déplacer légérement la flèche. // dirf --> direction fleche de 0 à 6, mais aussi direction Y de la balle (-3 -2 -1 0 +1 +2 +3) (ici gauche/droite car LYNX verticale). // bdirx --> direction X de la balle (ici haut/bas car le jeu se joue la LYNX tenu à la verticale). char ydirf,dirf,bdirx,speedX,oboucl,basar; int balldirX,balldirY; int yplayer; // 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%14]; SCBX(SCBchiffres1) = clx; SCBY(SCBchiffres1) = cly; DrawSprite(SCBchiffres1); } /************************************************************************** ** ** ** ** **************************************************************************/ char main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); posx=76; posy=47; xpush=-48; ypush=34; // SCBX(SCB) = 60; // SCBY(SCB) = 42; // SCBDATA(SCB) = ititre; // 1er sprite chainé (fond + raquette) SCBX(SCBg) = -200; SCBY(SCBg) = 0; SCBDATA(SCBg) = fondg; SCBNEXT(SCBg) = SCBp; // chainage de sprite info commande SCBX(SCBp) = xpush; SCBY(SCBp) = ypush; SCBDATA(SCBp) = pushup; //SCBCTL0(SCBp)= 0x001;//99; // pas glop SCBNEXT(SCBp) = SCBr; // chainage de sprite raquette SCBX(SCBr) = -200; SCBY(SCBr) = 0; SCBDATA(SCBr) = raquet; SCBNEXT(SCBr) = SCBball; // chainage de sprite balle SCBX(SCBball) = -200; SCBY(SCBball) = 0; SCBDATA(SCBball) = fball; SCBNEXT(SCBball) = SCBfd; // chainage de sprite fleche directionnelle SCBX(SCBfd) = 0; SCBY(SCBfd) = 0; SCBDATA(SCBfd) = fleche; SCBX(SCBbr) = -200; SCBY(SCBbr) = 0; SCBDATA(SCBbr) = fbriq; // 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; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for( ; ; ) { update_music(); // petite subtilité de la gestion sonore ++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; } } /************************************************************************** **************************************************************************/ if (etape>=0 & etape<=4) // écran titre { /* set the palette */ SetRGB(pali); // Ceci sert à changer la palette de la Lynx. DrawFBox(0,0,160,102,0); // couleur 0 (noire) SCBX(SCBr) = -200; // raquette mis hors de l'écran SCBX(SCBball) = -200; // balle mis hors de l'écran SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'écran //SCBX(SCB) = 78-(molescx/gmole);SCBY(SCB) = 42-(molescy/gmole) //SCBX(SCB) = SCBX(SCB) - (molescx/6); SCBY(SCB) = SCBY(SCB) - (molescy/6); SCBX(SCB) = 78; SCBY(SCB) = 52; SCBDATA(SCB) = imole; if (gspause==0) { if (etape==4) { if (molescx>256) molescx=molescx-4; if (molescy>128) molescy=molescy-8; if (molescx<257 & molescy<129) {molescx=256;molescy=128;etape=2;mhaut=4;} } if (etape==3) { if (molescx>128) molescx=molescx-8; if (molescy>256) molescy=molescy-4; if (molescx<129 & molescy<257) {molescx=128;molescy=256;etape=2;mbas=4;} } if (etape==2) { if (molescx<384) molescx=molescx+(4+mbas); if (molescy<384) molescy=molescy+(4+mhaut); if (molescx>383 & molescy>383) { molescx=384;molescy=384;++tempc;mhaut=0;mbas=0; if (tempc==3) tempc=1; if (tempc==1) etape=3; if (tempc==2) etape=4; } } if (etape==1) { ++tempb; if (tempb>64) { tempb=0;etape=2; } } if (etape==0) { if (molescx<256) { molescx=molescx+2;molescy=molescy+2; if (molescx>255) {molescx=256;molescy=256;etape=1;gmole=2;} } } } SCBHS(SCB) = molescx; SCBVS(SCB) = molescy; DrawSprite(SCB); // affichage molecule if (etape>0) {SCBHS(SCB) = 256;SCBVS(SCB) = 256;} // remise à 0 echelle des images SCB SCBX(SCB) = 34; SCBY(SCB) = 2; SCBDATA(SCB) = iname; DrawSprite(SCB); SCBX(SCB) = 74; SCBY(SCB) = 26; SCBDATA(SCB) = ititre; DrawSprite(SCB); Fchiffres(6,68,2); // 2 Fchiffres(6,76,0); // 0 Fchiffres(6,84,1); // 1 Fchiffres(6,92,0); // 0 SCBDATA(SCBp) = pushup; SCBX(SCBp) = xpush;//48; SCBY(SCBp) = ypush; SCBX(SCBg) = -200; // fond zone de jeu //SCBX(SCBp) = xpush; SCBX(SCBr) = -200; // raquette DrawSprite(SCBg); if (gspause==0 & etape>0) { if (xpush<8) xpush=xpush+2; // apparition de la bulle info "Push UP" if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu. { xpush=8; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=-100; if (joystick & JOY_RIGHT) { level=1;//3;//1; tempa=0;tempb=0;etape=10;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; xpush=-48;ypush=34; score=0;drap1=0; // drap1 agit sur l'affichage du score. filife=3; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); SetRGB(palg); // Ceci sert à changer la palette de la Lynx. SCBX(SCBg) = 0; // fond zone de jeu SCBX(SCBp) = xpush; relach=1; } } } } /************************************************************************** **************************************************************************/ if (etape==10) // ecran level { SCBDATA(SCBp) = pushup; SCBX(SCBp) = xpush;//48; SCBY(SCBp) = ypush; SCBX(SCBr) = -200; // Coordonnée X de la raquette (ici mis hors de l'écran). DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle Fchiffres(120,18,11); //L Fchiffres(120,18+8,12); //E Fchiffres(120,18+16,13); //V Fchiffres(120,18+24,12); //E Fchiffres(120,18+32,11); //L unite = level % 10; dizaine = level / 10 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%14]; SCBX(SCBchiffres1) = 120; SCBY(SCBchiffres1) = 50+24; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14]; SCBX(SCBchiffres2) = 120; SCBY(SCBchiffres2) = 50+16; DrawSprite(SCBchiffres1); // Affichage valeur testé if (relach==1) { if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour vérifier si le joueur n'appui plus sur D-pad haut } if (gspause==0 & xpush<8) xpush=xpush+2; if (gspause==0 & 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 (relach==0) { if (joystick & JOY_RIGHT) { //level=1;//3;//1; tempa=0;tempb=0;etape=20,yplayer=39;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; xpush=-48;ypush=34; dirf=3;ydirf=6; //score=0;drap1=0; // drap1 agit sur l'affichage du score. //goship=0; posx=-40; posy=39; //filife=3; //govil=0;goroch=0;tyroch=0;chroch=0; //SCBDATA(SCB) = fondlvl; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); // // bruitage panne sèche : // silence(); // abcmusic(3,abcpanne); //SetRGB(palg); // Ceci sert à changer la palette de la Lynx. //SCBX(SCBg) = 0; // fond zone de jeu SCBX(SCBp) = xpush; //SCBX(SCBr) = 200; // raquette relach=1; // utile pour vérifier si le joueur n'appui plus sur D-pad haut Vsync(); SwapBuffers(); } } } } /************************************************************************** **************************************************************************/ if (etape==20) // écran jeu 1 (fleche directionnelle) { // raquette : SCBDATA(SCBr) = raquet; SCBX(SCBr) = 32; SCBY(SCBr) = yplayer; // balle : SCBX(SCBball) = 40; SCBY(SCBball) = 48; // fleche directionnelle : SCBDATA(SCBfd) = fdtab[dirf%7]; SCBX(SCBfd) = 39+8; SCBY(SCBfd) = (42-6)+ydirf; if (gspause==0) { if (tempa>0) {--tempa;} if (joystick & JOY_DOWN) { if (tempa==0 & dirf<6) {++dirf;tempa=16;++ydirf;++ydirf;} } if (joystick & JOY_UP) { if (tempa==0 & dirf>0) {--dirf;tempa=16;--ydirf;--ydirf;} } if (relach==1) { if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour vérifier si le joueur n'appui plus sur D-pad haut } if (joystick & JOY_RIGHT) { if (relach==0) { SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'écran dirf=dirf-3;bdirx=1; tempa=0;etape=30; balldirX=SCBX(SCBball); balldirY=SCBY(SCBball); } } } DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle } /************************************************************************** **************************************************************************/ if (etape==30) // écran jeu 2 { if (gspause==0) { if (dirf<0) // Si la balle se dirige vers la gauche, alors... { balldirY=balldirY-1; if (dirf==-3) {speedX=3;} if (dirf==-2) {speedX=2;} if (dirf==-1) {speedX=1;} if (balldirY<3) {balldirY=3;dirf=-dirf;} // cadre gauche } if (dirf==0) // Si la balle se dirige droit devant, alors... { speedX=0; } if (dirf>0) // Si la balle se dirige vers la droite, alors... { balldirY=balldirY+1; if (dirf==1) {speedX=1;} if (dirf==2) {speedX=2;} if (dirf==3) {speedX=3;} if (balldirY>93) {balldirY=93;dirf=-dirf;} // cadre droite (102-6 = 96-3 = 93) } ++tempa; if (tempa>speedX) { tempa=0; if (bdirx==1) { balldirX=balldirX+2; // ball monte if (balldirX>154) {// collision haut du cadre: changement de direction balldirX=154;bdirx=-bdirx; // inverse la direction de la balle if (dirf==0) { basar=random()%3; // de 0 à 2 --basar;dirf=basar; // -1 ou 0 ou 1 } } } if (bdirx==-1) { balldirX=balldirX-2;// ball descend if (balldirX>32 & balldirX<40)// collision ball/raquette: changement de direction { if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+24) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+24)) { balldirX=40;bdirx=-bdirx; //gauche de la raquette : if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+4) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+4)) { if (dirf==-1) {dirf=-3;oboucl=1;}//break; if (dirf==-2) {dirf=-3;oboucl=1;} if (dirf==1) {dirf=-2;oboucl=1;} if (dirf==2) {dirf=-3;oboucl=1;} if (dirf==3) {dirf=-3;oboucl=1;} if (dirf==0) {dirf=-2;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //gauche de la raquette : if ((balldirY+1>yplayer+3 & balldirY+1<yplayer+9) | (balldirY+3>yplayer+4 & balldirY+4<yplayer+9)) { if (dirf==-1) {dirf=-2;oboucl=1;} if (dirf==-3) {dirf=-2;oboucl=1;} if (dirf==1) {dirf=-1;oboucl=1;} if (dirf==2) {dirf=-2;oboucl=1;} if (dirf==3) {dirf=-2;oboucl=1;} if (dirf==0) {dirf=-1;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //centre de la raquette : if ((balldirY+1>yplayer+8 & balldirY+1<yplayer+15) | (balldirY+4>yplayer+8 & balldirY+4<yplayer+15)) { if (dirf==1) {dirf=0;oboucl=1;} if (dirf==2) {dirf=1;oboucl=1;} if (dirf==3) {dirf=2;oboucl=1;} if (dirf==-1) {dirf=0;oboucl=1;} if (dirf==-2) {dirf=-1;oboucl=1;} if (dirf==-3) {dirf=-2;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //droite de la raquette : if ((balldirY+1>yplayer+14 & balldirY+1<yplayer+20) | (balldirY+4>yplayer+14 & balldirY+4<yplayer+20)) { if (dirf==1) {dirf=2;oboucl=1;} if (dirf==3) {dirf=2;oboucl=1;} if (dirf==-1) {dirf=1;oboucl=1;} if (dirf==-2) {dirf=2;oboucl=1;} if (dirf==-3) {dirf=2;oboucl=1;} if (dirf==0) {dirf=1;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //droite de la raquette : if ((balldirY+1>yplayer+19 & balldirY+1<yplayer+24) | (balldirY+4>yplayer+19 & balldirY+4<yplayer+24)) { if (dirf==1) {dirf=3;oboucl=1;} if (dirf==2) {dirf=3;oboucl=1;} if (dirf==-1) {dirf=2;oboucl=1;} if (dirf==-2) {dirf=3;oboucl=1;} if (dirf==-3) {dirf=3;oboucl=1;} if (dirf==0) {dirf=2;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} } } } } test_finish: if (joystick & JOY_DOWN) { yplayer=yplayer+2; if (yplayer>75) {yplayer=75;} // (102-24 = 78-3 = 75) ; 24 = largeur de la raquette } if (joystick & JOY_UP) { yplayer=yplayer-2; if (yplayer<3) {yplayer=3;} } } SCBX(SCBball)=balldirX;SCBY(SCBball)=balldirY; // appliquer les variables balldirX et balldirY aux coordonnées de la balle. SCBY(SCBr) = yplayer; // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle : DrawSprite(SCBg); } /************************************************************************** **************************************************************************/ /* test */ //atest=balldirX;//yplayer;//speedX;//dirf;//etape; atest=etape;//SCBCTL0(SCBbr); unite = atest % 10; dizaine = atest / 10 % 10; centaine = score / 100 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%14]; SCBX(SCBchiffres1) = 100; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14]; SCBX(SCBchiffres2) = 100; SCBY(SCBchiffres2) = 53-8; // centaine: SCBDATA(SCBchiffres3) = chiffrestab[centaine%12]; // 0 SCBX(SCBchiffres3) = 100; SCBY(SCBchiffres3) = 53-16; DrawSprite(SCBchiffres1); // Affichage valeur testé //if (etape==2 & gspause>0) if (gspause>0) { SCBDATA(SCB) = ipause; SCBHS(SCB) = 256;SCBVS(SCB) = 256; SCBX(SCB) = 73;SCBY(SCB) = 30; DrawSprite(SCB); } Vsync(); SwapBuffers(); } /************************************************************************** ** FIN de la BOUCLE PRINCIPALE ** **************************************************************************/ }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

2

Je suis entrain de finir une mini borne d'arcade avec une lynx à l'intérieur et j'hésitais à en faire aussi une avec l'écran en position vertical car je trouvais qu'il n'y avait pas assez de jeux qui utilisait cette mise en page mais vu tes réalisations je pense que cette petite borne verticale verra bien le jour smile
Mon site sur la LYNX :ZoneLynx

3

c'est obligé d'écrire dans votre compilateur:
void Fchiffres(clx,cly,classe)
int clx,cly,classe;
{
blabla
}

parce que c'est quand même plus facile de faire

void Fchiffres(int clx, int cly, int classe)
{
blabla
}

non? grin

4

C K&R powered (ie pre ISO)
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

je sais oui, mais je demande si c'est nécessaire ici grin

6

De mémoire justement, ça marchait pas...
Sinon, on peut tout faire avec des variables globales aussi embarrassed
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2024 ?
https://yastuna-games.com

7

8

Godzil (./4) :
C K&R powered (ie pre ISO)
une âme charitable pour traduire/décrypter ? alien
squalyl (./3) :
c'est obligé d'écrire dans votre compilateur:
void Fchiffres(clx,cly,classe)
int clx,cly,classe;
{
blabla
}

parce que c'est quand même plus facile de faire

void Fchiffres(int clx, int cly, int classe)
{
blabla
}

non? grin
de mémoire ça ne marchais pas comme ça. Mais à utiliser que pour tester la valeur des variables (je n'utilise pas encore mednafen), ou alors en dehors de l'écran de jeu (l'intro par exemple), car le chainage des sprites est primordial. cyborg
RYGAR (./2) :
Je suis entrain de finir une mini borne d'arcade avec une lynx à l'intérieur et j'hésitais à en faire aussi une avec l'écran en position vertical car je trouvais qu'il n'y avait pas assez de jeux qui utilisait cette mise en page mais vu tes réalisations je pense que cette petite borne verticale verra bien le jour smile
J'ai déjà envie de voir ça grin , et l'ancien joueur de salle d'arcade de mon état aimerait bien y poser ses paluches ! skate

exe version 0.2 : tromb Fichier joint : fission_02.otromb

Fichier joint : BcV1 (fofo_fission02.jpg)

chainage de sprites + point d'action de la balle mis au centre de celle-ci + correction interacton balle/raquette + bruitages

source:
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

9

source, 1er partie: /* Fission (casse brique) 0.2 - 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 <stdlib.h> #include <lynx.h> #include <lynxlib.h> //{ extern void silence(); extern void abcmusic(); extern void update_music(); char abcmusic0[]; char abcmusic1[]; char abcmusic2[]; char abcmusic3[]; char abcmenu1[]; char abcmenu2[]; char abcball1[]; char abcball2[]; char abcbric[]; char abcaptvir[]; char abcboum[]; char abcpanne[]; char abces[]; #asm xref _abcmenu1 xref _abcmenu2 xref _abcball1 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 ; ball : _abcball1 dc.b "O4X3I1V70T20R32H2K1" dc.b "|:C4" _abcball2 dc.b "O4X3I1V70T20R32H2K1" dc.b "|:D4" _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 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); char pali[]={ 0x00,0x0F,0x02,0x03,0x0A,0x04,0x05,0x06,0x07,0x0B,0x08,0x09,0x04,0x0B,0x0C,0x01, 0x00,0xFF,0x22,0x33,0xAA,0x44,0x55,0x66,0x77,0x00,0x88,0x99,0x53,0xBB,0xCC,0x11}; char palg[]={ 0x00,0x0F,0x0A,0x00,0x03,0x05,0x08,0x0A,0x0C,0x0E,0x0D,0x00,0x04,0x03,0x02,0x00, 0x00,0xFF,0xF0,0x0F,0x3F,0x5F,0x8F,0xAF,0xCF,0xEF,0x28,0xF8,0x53,0x63,0x52,0x21}; /***************************************************************************** ** Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp ** ** set image01=imole.bmp SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01% cmd ** ** Le point d'action de l'image imole est mis au centre de celle-ci, ** ** 72/2 = 36 (-a036036). Le but de la manoeuvre est de réaliser un zoom ** ** correctement. ** *****************************************************************************/ extern char ipause[]; // image game over, d'une taille de 13*43; extern char ititre[]; // image titre, d'une taille de 15*49; extern char iname[]; // image nom/prénom de auteur, d'une taille de 93*9; extern char imole[]; // image molecule, d'une taille de 72*72; char SCB[]; #asm _SCB 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 fondg[]; // image fond game, d'une taille de 160*102; char SCBg[]; #asm _SCBg 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 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 raquet[]; // image raquette, d'une taille de 8*24; char SCBr[]; #asm _SCBr 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 chiffres, chacun d'une taille de 8*8: 0123456789.LEV extern char bc000000[]; extern char bc000001[]; extern char bc000002[]; extern char bc000003[]; extern char bc000004[]; extern char bc000005[]; extern char bc000006[]; extern char bc000007[]; extern char bc000008[]; extern char bc000009[]; extern char bc000010[]; extern char bc000011[]; extern char bc000012[]; extern char bc000013[]; char *chiffrestab[14] = {bc000000, bc000001, bc000002, bc000003, bc000004, bc000005, bc000006, bc000007, bc000008, bc000009, bc000010, bc000011, bc000012, bc000013}; char SCBchiffres1[]; // déclaration d'un nouveau controleur de sprite (test) char SCBchiffres2[]; // déclaration d'un nouveau controleur de sprite (test) char SCBchiffres3[]; // déclaration d'un nouveau controleur de sprite (test) 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) char SCBscore4[]; // déclaration d'un nouveau controleur de sprite (score millier) #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 ; _SCBscore4 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 fleche[]; // // clip du sprite fleches extern char fd000000[]; extern char fd000001[]; extern char fd000002[]; extern char fd000003[]; extern char fd000004[]; extern char fd000005[]; extern char fd000006[]; char *fdtab[7] = {fd000000, fd000001, fd000002, fd000003, fd000004, fd000005, fd000006}; char SCBfd[]; // déclaration d'un nouveau controleur de sprite #asm _SCBfd 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 // ------------------------------------ /***************************************************************************** ** Ci-dessous, le contenu du fichier batchfile pour l'image fball.bmp ** ** set image01=fball.bmp SPRPCK -t6 -S005005 -r001001 -a002002 -p0 %image01% cmd ** ** Le point d'action de l'image fball est mis au centre de celle-ci, ** ** 0 1 2 3 4 --> la valeur 2 correspond exactement au centre (-a002002) ** *****************************************************************************/ extern char fball[]; // image balle, d'une taille de 5*5; char SCBball[]; #asm _SCBball 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 fbriq[]; // // clip du sprite brique, d'une taille de 6*14, normale, dure et incassable. extern char br000000[]; extern char br000001[]; extern char br000002[]; char *brtab[3] = {br000000, br000001, br000002}; // nombreuses déclarations des nouveaux controleurs de sprite pour les briques. char SCBbr01[]; char SCBbr02[]; char SCBbr03[]; char SCBbr04[]; char SCBbr05[]; char SCBbr06[]; char SCBbr07[]; char SCBbr08[]; char SCBbr09[]; char SCBbr10[]; char SCBbr11[]; char SCBbr12[]; char SCBbr13[]; char SCBbr14[]; char SCBbr15[]; char SCBbr16[]; char SCBbr17[]; char SCBbr18[]; char SCBbr19[]; char SCBbr20[]; char SCBbr21[]; char SCBbr22[]; char SCBbr23[]; char SCBbr24[]; char SCBbr25[]; #asm _SCBbr01 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 ; _SCBbr02 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 ; _SCBbr03 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 ; _SCBbr04 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 ; _SCBbr05 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 ; _SCBbr06 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 ; _SCBbr07 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 ; _SCBbr08 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 ; _SCBbr09 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 ; _SCBbr10 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 ; _SCBbr11 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 ; _SCBbr12 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 ; _SCBbr13 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 ; _SCBbr14 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 ; _SCBbr15 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 ; _SCBbr16 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 ; _SCBbr17 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 ; _SCBbr18 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 ; _SCBbr19 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 ; _SCBbr20 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 ; _SCBbr21 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 ; _SCBbr22 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 ; _SCBbr23 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 ; _SCBbr24 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 ; _SCBbr25 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 // ------------------------------------ ouf ! int posx,posy,level,score,xpush,ypush,relach; int i; char tempa,tempb,tempc,tempd,tempe,etape,filife,drap1,gspause,gsblip,mhaut,mbas; // de -128 à 127 int molescx,molescy,gmole; int atest,unite,dizaine,centaine,horszone; // ydirf --> déplacer légérement la flèche. // dirf --> direction fleche de 0 à 6, mais aussi direction Y de la balle (-3 -2 -1 0 +1 +2 +3) (ici gauche/droite car LYNX verticale). // bdirx --> direction X de la balle (ici haut/bas car le jeu se joue la LYNX tenu à la verticale). char ydirf,dirf,bdirx,speedX,oboucl,basar; int balldirX,balldirY; int yplayer; char odirx,Xtemp,Ytemp; char compteurx, compteury; int nbrbriqx, nbrbriqy, brix[5], briy[5], brie[3]; // brique : coordonnées X et Y, et l'état. // 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%14]; SCBX(SCBchiffres1) = clx; SCBY(SCBchiffres1) = cly; DrawSprite(SCBchiffres1); } /* test */ ShowScreen() { //horszone=0;// mettre les briques hors de l'écran visible. Sprite brique d'une taille de 6*14, 0=normale 1=dure 2=incassable. if (etape==10 & horszone>0) { horszone=horszone-4; if (horszone<1) horszone=0; } SCBX(SCBbr01) = 85-horszone; SCBY(SCBbr01) = 16; SCBDATA(SCBbr01) = brtab[0%3]; // SCBX(SCBbr02) = 85-horszone; SCBY(SCBbr02) = 16+14; SCBDATA(SCBbr02) = brtab[0%3]; // SCBX(SCBbr03) = 85-horszone; SCBY(SCBbr03) = 16+28; SCBDATA(SCBbr03) = brtab[0%3]; // SCBX(SCBbr04) = 85-horszone; SCBY(SCBbr04) = 16+42; SCBDATA(SCBbr04) = brtab[0%3]; // SCBX(SCBbr05) = 85-horszone; SCBY(SCBbr05) = 16+56; SCBDATA(SCBbr05) = brtab[0%3]; // SCBX(SCBbr06) = 91-horszone; SCBY(SCBbr06) = 16; SCBDATA(SCBbr06) = brtab[0%3]; // SCBX(SCBbr07) = 91-horszone; SCBY(SCBbr07) = 16+14; SCBDATA(SCBbr07) = brtab[0%3]; // SCBX(SCBbr08) = 91-horszone; SCBY(SCBbr08) = 16+28; SCBDATA(SCBbr08) = brtab[0%3]; // SCBX(SCBbr09) = 91-horszone; SCBY(SCBbr09) = 16+42; SCBDATA(SCBbr09) = brtab[0%3]; // SCBX(SCBbr10) = 91-horszone; SCBY(SCBbr10) = 16+56; SCBDATA(SCBbr10) = brtab[0%3]; // SCBX(SCBbr11) = 97-horszone; SCBY(SCBbr11) = 16; SCBDATA(SCBbr11) = brtab[0%3]; // SCBX(SCBbr12) = 97-horszone; SCBY(SCBbr12) = 16+14; SCBDATA(SCBbr12) = brtab[0%3]; // SCBX(SCBbr13) = 97-horszone; SCBY(SCBbr13) = 16+28; SCBDATA(SCBbr13) = brtab[0%3]; // SCBX(SCBbr14) = 97-horszone; SCBY(SCBbr14) = 16+42; SCBDATA(SCBbr14) = brtab[0%3]; // SCBX(SCBbr15) = 97-horszone; SCBY(SCBbr15) = 16+56; SCBDATA(SCBbr15) = brtab[0%3]; // SCBX(SCBbr16) = 103-horszone; SCBY(SCBbr16) = 16; SCBDATA(SCBbr16) = brtab[0%3]; // SCBX(SCBbr17) = 103-horszone; SCBY(SCBbr17) = 16+14; SCBDATA(SCBbr17) = brtab[0%3]; // SCBX(SCBbr18) = 103-horszone; SCBY(SCBbr18) = 16+28; SCBDATA(SCBbr18) = brtab[0%3]; // SCBX(SCBbr19) = 103-horszone; SCBY(SCBbr19) = 16+42; SCBDATA(SCBbr19) = brtab[0%3]; // SCBX(SCBbr20) = 103-horszone; SCBY(SCBbr20) = 16+56; SCBDATA(SCBbr20) = brtab[0%3]; // SCBX(SCBbr21) = 109-horszone; SCBY(SCBbr21) = 16; SCBDATA(SCBbr21) = brtab[0%3]; // SCBX(SCBbr22) = 109-horszone; SCBY(SCBbr22) = 16+14; SCBDATA(SCBbr22) = brtab[0%3]; // SCBX(SCBbr23) = 109-horszone; SCBY(SCBbr23) = 16+28; SCBDATA(SCBbr23) = brtab[0%3]; // SCBX(SCBbr24) = 109-horszone; SCBY(SCBbr24) = 16+42; SCBDATA(SCBbr24) = brtab[0%3]; // SCBX(SCBbr25) = 109-horszone; SCBY(SCBbr25) = 16+56; SCBDATA(SCBbr25) = brtab[0%3]; // if (etape==30 & horszone==0) { // horszone=horszone-4; // if (horszone<1) horszone=0; } }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

10

beauregard (./8) :
une âme charitable pour traduire/décrypter ? alien.gif
Ben la norme C K & R est la première norme du C, telle que définie par les auteurs du langage (Kernigan & Ritchie)
Il y a eu des petites modifications ensuite.

11

source, 2eme partie: /************************************************************************** ** ** ** ** **************************************************************************/ char main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); posx=76; posy=47; xpush=-48; ypush=34; // SCBX(SCB) = 60; // SCBY(SCB) = 42; // SCBDATA(SCB) = ititre; // 1er sprite chainé (fond + raquette) SCBX(SCBg) = -200; SCBY(SCBg) = 0; SCBDATA(SCBg) = fondg; SCBNEXT(SCBg) = SCBp; // chainage de sprite info commande SCBX(SCBp) = xpush; SCBY(SCBp) = ypush; SCBDATA(SCBp) = pushup; //SCBCTL0(SCBp)= 0x001;//99; // pas glop SCBNEXT(SCBp) = SCBr; // chainage de sprite raquette SCBX(SCBr) = -200; SCBY(SCBr) = 0; SCBDATA(SCBr) = raquet; SCBNEXT(SCBr) = SCBball; // chainage de sprite balle SCBX(SCBball) = -200; SCBY(SCBball) = 0; SCBDATA(SCBball) = fball; SCBNEXT(SCBball) = SCBfd; // chainage de sprite fleche directionnelle SCBX(SCBfd) = 0; SCBY(SCBfd) = 0; SCBDATA(SCBfd) = fdtab[dirf%7];//fleche; horszone=150;// mettre les briques hors de l'écran visible. Sprite brique d'une taille de 6*14, 0=normale 1=dure 2=incassable. SCBNEXT(SCBfd) = SCBbr01; // chainage de la brique 01 SCBX(SCBbr01) = 85-horszone; SCBY(SCBbr01) = 16; SCBDATA(SCBbr01) = brtab[0%3]; // SCBNEXT(SCBbr01) = SCBbr02; // chainage de la brique 02 SCBX(SCBbr02) = 85-horszone; SCBY(SCBbr02) = 16+14; SCBDATA(SCBbr02) = brtab[0%3]; // SCBNEXT(SCBbr02) = SCBbr03; // chainage de la brique 03 SCBX(SCBbr03) = 85-horszone; SCBY(SCBbr03) = 16+28; SCBDATA(SCBbr03) = brtab[0%3]; // SCBNEXT(SCBbr03) = SCBbr04; // chainage de la brique 04 SCBX(SCBbr04) = 85-horszone; SCBY(SCBbr04) = 16+42; SCBDATA(SCBbr04) = brtab[0%3]; // SCBNEXT(SCBbr04) = SCBbr05; // chainage de la brique 05 SCBX(SCBbr05) = 85-horszone; SCBY(SCBbr05) = 16+56; SCBDATA(SCBbr05) = brtab[0%3]; // SCBNEXT(SCBbr05) = SCBbr06; // chainage de la brique 06 SCBX(SCBbr06) = 91-horszone; SCBY(SCBbr06) = 16; SCBDATA(SCBbr06) = brtab[0%3]; // SCBNEXT(SCBbr06) = SCBbr07; // chainage de la brique 07 SCBX(SCBbr07) = 91-horszone; SCBY(SCBbr07) = 16+14; SCBDATA(SCBbr07) = brtab[0%3]; // SCBNEXT(SCBbr07) = SCBbr08; // chainage de la brique 08 SCBX(SCBbr08) = 91-horszone; SCBY(SCBbr08) = 16+28; SCBDATA(SCBbr08) = brtab[0%3]; // SCBNEXT(SCBbr08) = SCBbr09; // chainage de la brique 09 SCBX(SCBbr09) = 91-horszone; SCBY(SCBbr09) = 16+42; SCBDATA(SCBbr09) = brtab[0%3]; // SCBNEXT(SCBbr09) = SCBbr10; // chainage de la brique 10 SCBX(SCBbr10) = 91-horszone; SCBY(SCBbr10) = 16+56; SCBDATA(SCBbr10) = brtab[0%3]; // SCBNEXT(SCBbr10) = SCBbr11; // chainage de la brique 11 SCBX(SCBbr11) = 97-horszone; SCBY(SCBbr11) = 16; SCBDATA(SCBbr11) = brtab[0%3]; // SCBNEXT(SCBbr11) = SCBbr12; // chainage de la brique 12 SCBX(SCBbr12) = 97-horszone; SCBY(SCBbr12) = 16+14; SCBDATA(SCBbr12) = brtab[0%3]; // SCBNEXT(SCBbr12) = SCBbr13; // chainage de la brique 13 SCBX(SCBbr13) = 97-horszone; SCBY(SCBbr13) = 16+28; SCBDATA(SCBbr13) = brtab[0%3]; // SCBNEXT(SCBbr13) = SCBbr14; // chainage de la brique 14 SCBX(SCBbr14) = 97-horszone; SCBY(SCBbr14) = 16+42; SCBDATA(SCBbr14) = brtab[0%3]; // SCBNEXT(SCBbr14) = SCBbr15; // chainage de la brique 15 SCBX(SCBbr15) = 97-horszone; SCBY(SCBbr15) = 16+56; SCBDATA(SCBbr15) = brtab[0%3]; // SCBNEXT(SCBbr15) = SCBbr16; // chainage de la brique 16 SCBX(SCBbr16) = 103-horszone; SCBY(SCBbr16) = 16; SCBDATA(SCBbr16) = brtab[0%3]; // SCBNEXT(SCBbr16) = SCBbr17; // chainage de la brique 17 SCBX(SCBbr17) = 103-horszone; SCBY(SCBbr17) = 16+14; SCBDATA(SCBbr17) = brtab[0%3]; // SCBNEXT(SCBbr17) = SCBbr18; // chainage de la brique 18 SCBX(SCBbr18) = 103-horszone; SCBY(SCBbr18) = 16+28; SCBDATA(SCBbr18) = brtab[0%3]; // SCBNEXT(SCBbr18) = SCBbr19; // chainage de la brique 19 SCBX(SCBbr19) = 103-horszone; SCBY(SCBbr19) = 16+42; SCBDATA(SCBbr19) = brtab[0%3]; // SCBNEXT(SCBbr19) = SCBbr20; // chainage de la brique 15 SCBX(SCBbr20) = 103-horszone; SCBY(SCBbr20) = 16+56; SCBDATA(SCBbr20) = brtab[0%3]; // SCBNEXT(SCBbr20) = SCBbr21; // chainage de la brique 21 SCBX(SCBbr21) = 109-horszone; SCBY(SCBbr21) = 16; SCBDATA(SCBbr21) = brtab[0%3]; // SCBNEXT(SCBbr21) = SCBbr22; // chainage de la brique 22 SCBX(SCBbr22) = 109-horszone; SCBY(SCBbr22) = 16+14; SCBDATA(SCBbr22) = brtab[0%3]; // SCBNEXT(SCBbr22) = SCBbr23; // chainage de la brique 23 SCBX(SCBbr23) = 109-horszone; SCBY(SCBbr23) = 16+28; SCBDATA(SCBbr23) = brtab[0%3]; // SCBNEXT(SCBbr23) = SCBbr24; // chainage de la brique 24 SCBX(SCBbr24) = 109-horszone; SCBY(SCBbr24) = 16+42; SCBDATA(SCBbr24) = brtab[0%3]; // SCBNEXT(SCBbr24) = SCBbr25; // chainage de la brique 25 SCBX(SCBbr25) = 109-horszone; SCBY(SCBbr25) = 16+56; SCBDATA(SCBbr25) = brtab[0%3]; // SCBNEXT(SCBbr25) = SCBscore1; // chainage score unité SCBX(SCBscore1) = 4; SCBY(SCBscore1) = 99-8; SCBDATA(SCBscore1) = chiffrestab[0%14]; // SCBNEXT(SCBscore1) = SCBscore2; // chainage score dizaine SCBX(SCBscore2) = 4; SCBY(SCBscore2) = 99-16; SCBDATA(SCBscore2) = chiffrestab[0%14]; // SCBNEXT(SCBscore2) = SCBscore3; // chainage score centaine SCBX(SCBscore3) = 4; SCBY(SCBscore3) = 99-24; SCBDATA(SCBscore3) = chiffrestab[0%14]; // SCBNEXT(SCBscore3) = SCBscore4; // chainage score millier SCBX(SCBscore4) = 4; SCBY(SCBscore4) = 99-32; SCBDATA(SCBscore4) = chiffrestab[0%14]; // SCBX(SCBscore1) = -10;SCBX(SCBscore2) = -10;SCBX(SCBscore3) = -10;SCBX(SCBscore4) = -10; // score placés hors de l'écran // 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; etape=10;SetRGB(palg); // provisoire level=1;//3;//1; tempa=0;tempb=0;etape=10;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; xpush=-48;ypush=34; score=0;drap1=0; // drap1 agit sur l'affichage du score. filife=3; silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); SetRGB(palg); // Ceci sert à changer la palette de la Lynx. SCBX(SCBg) = 0; // fond zone de jeu SCBX(SCBp) = xpush; //SCBX(SCBr) = 200; // raquette relach=1; */ /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for( ; ; ) { Vsync(); SwapBuffers(); update_music(); // petite subtilité de la gestion sonore ++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; } } /************************************************************************** **************************************************************************/ if (etape>=0 & etape<=4) // écran titre { /* set the palette */ SetRGB(pali); // Ceci sert à changer la palette de la Lynx. DrawFBox(0,0,160,102,0); // couleur 0 (noire) SCBX(SCBr) = -200; // raquette mis hors de l'écran SCBX(SCBball) = -200; // balle mis hors de l'écran SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'écran SCBX(SCB) = 78; SCBY(SCB) = 52; SCBDATA(SCB) = imole; if (gspause==0) { if (etape==4) { if (molescx>256) molescx=molescx-4; if (molescy>128) molescy=molescy-8; if (molescx<257 & molescy<129) {molescx=256;molescy=128;etape=2;mhaut=4;} } if (etape==3) { if (molescx>128) molescx=molescx-8; if (molescy>256) molescy=molescy-4; if (molescx<129 & molescy<257) {molescx=128;molescy=256;etape=2;mbas=4;} } if (etape==2) { if (molescx<384) molescx=molescx+(4+mbas); if (molescy<384) molescy=molescy+(4+mhaut); if (molescx>383 & molescy>383) { molescx=384;molescy=384;++tempc;mhaut=0;mbas=0; if (tempc==3) tempc=1; if (tempc==1) etape=3; if (tempc==2) etape=4; } } if (etape==1) { ++tempb; if (tempb>64) { tempb=0;etape=2; } } if (etape==0) { if (molescx<256) { molescx=molescx+2;molescy=molescy+2; if (molescx>255) {molescx=256;molescy=256;etape=1;gmole=2;} } } } SCBHS(SCB) = molescx; SCBVS(SCB) = molescy; DrawSprite(SCB); // affichage molecule if (etape>0) {SCBHS(SCB) = 256;SCBVS(SCB) = 256;} // remise à 0 echelle des images SCB SCBX(SCB) = 34; SCBY(SCB) = 2; SCBDATA(SCB) = iname; DrawSprite(SCB); SCBX(SCB) = 74; SCBY(SCB) = 26; SCBDATA(SCB) = ititre; DrawSprite(SCB); // SCBX(SCBscore1) = 4;SCBX(SCBscore2) = 4;SCBX(SCBscore3) = 4;SCBX(SCBscore4) = 4; SCBDATA(SCBscore1) = chiffrestab[0%14]; SCBDATA(SCBscore2) = chiffrestab[1%14]; SCBDATA(SCBscore3) = chiffrestab[0%14]; SCBDATA(SCBscore4) = chiffrestab[2%14]; //Fchiffres(6,68,2); // 2 //Fchiffres(6,76,0); // 0 //Fchiffres(6,84,1); // 1 //Fchiffres(6,92,0); // 0 SCBDATA(SCBp) = pushup; SCBX(SCBp) = xpush;//48; SCBY(SCBp) = ypush; SCBX(SCBg) = -200; // fond zone de jeu //SCBX(SCBp) = xpush; SCBX(SCBr) = -200; // raquette DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score if (gspause==0 & etape>0) { if (xpush<8) xpush=xpush+2; // apparition de la bulle info "Push UP" if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu. { xpush=8; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=-100; if (joystick & JOY_RIGHT) { level=1;//3;//1; tempa=0;tempb=0;etape=10;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; xpush=-48;ypush=34; score=0;drap1=0; // drap1 agit sur l'affichage du score. filife=3; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); // // bruitage panne sèche : // silence(); // abcmusic(3,abcpanne); SetRGB(palg); // Ceci sert à changer la palette de la Lynx. SCBX(SCBg) = 0; // fond zone de jeu SCBX(SCBp) = xpush; relach=1; SCBDATA(SCBscore1) = chiffrestab[0%14]; SCBDATA(SCBscore2) = chiffrestab[0%14]; SCBDATA(SCBscore3) = chiffrestab[0%14]; SCBDATA(SCBscore4) = chiffrestab[0%14]; } } } //TextOut(24, 2, 2, 0, "Philippe Haouli present"); // lettre grise 32,32,32 //TextOut(24, 2, 1, 0, "Philippe Haouli"); // lettre blanche } /************************************************************************** **************************************************************************/ if (etape==10) // ecran level { ShowScreen(); // Coordonnées de toutes les briques (voir au début de ce joyeux code). //DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score SCBDATA(SCBp) = pushup; SCBX(SCBp) = xpush;//48; SCBY(SCBp) = ypush; SCBX(SCBr) = -200; // Coordonnée X de la raquette (ici mis hors de l'écran). DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + score Fchiffres(120,18,11); //L Fchiffres(120,18+8,12); //E Fchiffres(120,18+16,13); //V Fchiffres(120,18+24,12); //E Fchiffres(120,18+32,11); //L unite = level % 10; dizaine = level / 10 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%14]; SCBX(SCBchiffres1) = 120; SCBY(SCBchiffres1) = 50+24; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14]; SCBX(SCBchiffres2) = 120; SCBY(SCBchiffres2) = 50+16; DrawSprite(SCBchiffres1); // Affichage valeur testé if (relach==1) { if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour vérifier si le joueur n'appui plus sur D-pad haut } if (gspause==0 & xpush<8 & horszone==0) xpush=xpush+2; if (gspause==0 & 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 (relach==0 & horszone==0) { if (joystick & JOY_RIGHT) { //level=1;//3;//1; tempa=0;tempb=0;etape=20,yplayer=39;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; xpush=-48;ypush=34; dirf=3;ydirf=6; //score=0;drap1=0; // drap1 agit sur l'affichage du score. //goship=0; posx=-40; posy=39; //filife=3; //govil=0;goroch=0;tyroch=0;chroch=0; //SCBDATA(SCB) = fondlvl; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); // // bruitage panne sèche : // silence(); // abcmusic(3,abcpanne); //SetRGB(palg); // Ceci sert à changer la palette de la Lynx. //SCBX(SCBg) = 0; // fond zone de jeu SCBX(SCBp) = xpush; //SCBX(SCBr) = 200; // raquette relach=1; // utile pour vérifier si le joueur n'appui plus sur D-pad haut Vsync(); SwapBuffers(); } } } } /************************************************************************** **************************************************************************/ if (etape==20) // écran jeu 1 (fleche directionnelle) { // raquette : SCBDATA(SCBr) = raquet; SCBX(SCBr) = 32; SCBY(SCBr) = yplayer; // balle : SCBX(SCBball) = 42; SCBY(SCBball) = 50; // fleche directionnelle : SCBDATA(SCBfd) = fdtab[dirf%7]; SCBX(SCBfd) = 39+8; SCBY(SCBfd) = (42-6)+ydirf; if (gspause==0) { if (tempa>0) {--tempa;} if (joystick & JOY_DOWN) { if (tempa==0 & dirf<6) {++dirf;tempa=16;++ydirf;++ydirf;} } if (joystick & JOY_UP) { if (tempa==0 & dirf>0) {--dirf;tempa=16;--ydirf;--ydirf;} } if (relach==1) { if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour vérifier si le joueur n'appui plus sur D-pad haut } if (joystick & JOY_RIGHT) { if (relach==0) { SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'écran dirf=dirf-3;bdirx=1; tempa=0;etape=30; balldirX=SCBX(SCBball); balldirY=SCBY(SCBball); } } } DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score } /************************************************************************** **************************************************************************/ if (etape==30) // écran jeu 2 { if (gspause==0) { if (dirf<0) // Si la balle se dirige vers la gauche, alors... { if (balldirY<3) { balldirY=3;dirf=-dirf; // cadre gauche // bruitage balle cadre: silence(); abcmusic(1,abcball2); } if (dirf==-3) { ++Ytemp; if (Ytemp>1) {Ytemp=0;balldirY=balldirY-3;odirx=3;} // vitesse Y réelle --> -1,5 } if (dirf==-2) {balldirY=balldirY-1;odirx=2;} // vitesse Y --> -1 if (dirf==-1) { ++Ytemp;odirx=1; if (Ytemp>1) {Ytemp=0;balldirY=balldirY-1;} // vitesse Y réelle --> -0,5 } } if (dirf==0) {odirx=0;} // vitesse X --> +2 balle se dirige droit devant. if (dirf>0) // Si la balle se dirige vers la droite, alors... { if (dirf==1) { ++Ytemp;odirx=1; if (Ytemp>1) {Ytemp=0;balldirY=balldirY+1;} // vitesse Y réelle --> +0,5 } if (dirf==2) {balldirY=balldirY+1;odirx=2;} // vitesse Y --> +1 if (dirf==3) { ++Ytemp; if (Ytemp>1) {Ytemp=0;balldirY=balldirY+3;odirx=3;} // vitesse Y réelle --> +1,5 } if (balldirY>93) { balldirY=93;dirf=-dirf;// cadre droite (102-6 = 96-3 = 93) // bruitage balle cadre: silence(); abcmusic(1,abcball2); } } if (odirx==0) { ++Xtemp; if (Xtemp>1) { Xtemp=0; if (bdirx==1) balldirX=balldirX+3; // vitesse X réelle --> +1,5 if (bdirx==-1) balldirX=balldirX-3; // vitesse X réelle --> -1,5 } } if (odirx==1) { ++Xtemp; if (Xtemp>1) { Xtemp=0; if (bdirx==1) balldirX=balldirX+3; // vitesse X réelle --> +1,5 if (bdirx==-1) balldirX=balldirX-3; // vitesse X réelle --> -1,5 } } if (odirx==2) { if (bdirx==1) balldirX=balldirX+1; // vitesse X --> +1 if (bdirx==-1) balldirX=balldirX-1; // vitesse X --> -1 } if (odirx==3) { ++Xtemp; if (Xtemp>1) { Xtemp=0; if (bdirx==1) balldirX=balldirX+1; // vitesse X réelle --> +0,5 if (bdirx==-1) balldirX=balldirX-1; // vitesse X réelle --> -0,5 } } if (bdirx==1) { // Si la balle monte if (balldirX>154) {// collision haut du cadre: changement de direction balldirX=154;bdirx=-bdirx; // inverse la direction de la balle if (dirf==0) { basar=random()%3; // de 0 à 2 --basar;dirf=basar; // -1 ou 0 ou 1 } // bruitage balle cadre: silence(); abcmusic(1,abcball2); } else { // ici peut être test collision balle/brique } } if (bdirx==-1) { // Si la balle descend if (balldirX<18) // provisoire {// collision bas du cadre: changement de direction balldirX=18;bdirx=-bdirx; // inverse la direction de la balle } if (balldirX>34 & balldirX<42)// collision ball/raquette: changement de direction { //if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+24) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+24)) if (balldirY>yplayer-1 & balldirY<yplayer+24) { balldirX=42;bdirx=-bdirx; // bruitage balle raquette: silence(); abcmusic(0,abcball1); //centre de la raquette : //if ((balldirY+1>yplayer+7 & balldirY+1<yplayer+16) | (balldirY+4>yplayer+7 & balldirY+4<yplayer+16)) if (balldirY>yplayer+7 & balldirY<yplayer+16) { if (dirf==1) {dirf=0;oboucl=1;} if (dirf==2) {dirf=1;oboucl=1;} if (dirf==3) {dirf=2;oboucl=1;} if (dirf==-1) {dirf=0;oboucl=1;} if (dirf==-2) {dirf=-1;oboucl=1;} if (dirf==-3) {dirf=-2;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //gauche de la raquette : //if ((balldirY+1>yplayer+2 & balldirY+1<yplayer+8) | (balldirY+4>yplayer+2 & balldirY+4<yplayer+8)) if (balldirY>yplayer+2 & balldirY<yplayer+8) { //if (dirf==-1) {dirf=-2;oboucl=1;} if (dirf==-1) {dirf=-1;oboucl=1;} if (dirf==-3) {dirf=-2;oboucl=1;} if (dirf==1) {dirf=-1;oboucl=1;} if (dirf==2) {dirf=-2;oboucl=1;} if (dirf==3) {dirf=-2;oboucl=1;} if (dirf==0) {dirf=-1;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //droite de la raquette : //if ((balldirY+1>yplayer+15 & balldirY+1<yplayer+21) | (balldirY+4>yplayer+15 & balldirY+4<yplayer+21)) if (balldirY>yplayer+15 & balldirY<yplayer+21) { //if (dirf==1) {dirf=2;oboucl=1;} if (dirf==1) {dirf=1;oboucl=1;} if (dirf==3) {dirf=2;oboucl=1;} if (dirf==-1) {dirf=1;oboucl=1;} if (dirf==-2) {dirf=2;oboucl=1;} if (dirf==-3) {dirf=2;oboucl=1;} if (dirf==0) {dirf=1;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //exgauche de la raquette : //if ((balldirY+1>yplayer-1 & balldirY+1<yplayer+3) | (balldirY+4>yplayer-1 & balldirY+4<yplayer+3)) if (balldirY>yplayer-1 & balldirY<yplayer+3) { if (dirf==-1) {dirf=-2;oboucl=1;}//break; if (dirf==-2) {dirf=-3;oboucl=1;} if (dirf==1) {dirf=-2;oboucl=1;} if (dirf==2) {dirf=-3;oboucl=1;} if (dirf==3) {dirf=-3;oboucl=1;} if (dirf==0) {dirf=-2;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} //exdroite de la raquette : //if ((balldirY+1>yplayer+20 & balldirY+1<yplayer+24) | (balldirY+4>yplayer+20 & balldirY+4<yplayer+24)) if (balldirY>yplayer+20 & balldirY<yplayer+24) { if (dirf==1) {dirf=2;oboucl=1;} if (dirf==2) {dirf=3;oboucl=1;} if (dirf==-1) {dirf=2;oboucl=1;} if (dirf==-2) {dirf=3;oboucl=1;} if (dirf==-3) {dirf=3;oboucl=1;} if (dirf==0) {dirf=2;oboucl=1;} } if (oboucl==1) {oboucl=0;goto test_finish;} } } else { // ici peut être test collision balle/brique } } //} test_finish: if (joystick & JOY_DOWN) { yplayer=yplayer+2; if (yplayer>75) {yplayer=75;} // (102-24 = 78-3 = 75) ; 24 = largeur de la raquette } if (joystick & JOY_UP) { yplayer=yplayer-2; if (yplayer<3) {yplayer=3;} } } SCBX(SCBball)=balldirX;SCBY(SCBball)=balldirY; // appliquer les variables balldirX et balldirY aux coordonnées de la balle. SCBY(SCBr) = yplayer; ShowScreen(); // Coordonnées de toutes les briques (voir au début de ce joyeux code). // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques : DrawSprite(SCBg); } /************************************************************************** **************************************************************************/ /* test //atest=balldirX;//yplayer;//speedX;//dirf;//etape; atest=etape;//SCBCTL0(SCBbr); unite = atest % 10; dizaine = atest / 10 % 10; centaine = atest / 100 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%14]; SCBX(SCBchiffres1) = 100; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14]; SCBX(SCBchiffres2) = 100; SCBY(SCBchiffres2) = 53-8; // centaine: SCBDATA(SCBchiffres3) = chiffrestab[centaine%12]; // 0 SCBX(SCBchiffres3) = 100; SCBY(SCBchiffres3) = 53-16; */ //SCBDATA(SCBchiffres1) = chiffrestab[10%14]; //SCBX(SCBchiffres1) = 40; //SCBY(SCBchiffres1) = yplayer; //SCBY(SCBchiffres1) = yplayer+23; /*** Tests important des coordonnées des images ***/ // SCBDATA(SCBchiffres1) = chiffrestab[10%14]; // SCBX(SCBchiffres1) = SCBX(SCBball); // SCBY(SCBchiffres1) = SCBY(SCBball); /*** fin de ces tests de coordonnée ***/ // DrawSprite(SCBchiffres1); // Affichage valeur testé //if (etape==2 & gspause>0) if (gspause>0) { SCBDATA(SCB) = ipause; SCBHS(SCB) = 256;SCBVS(SCB) = 256; SCBX(SCB) = 73;SCBY(SCB) = 30; DrawSprite(SCB); } //Vsync(); //SwapBuffers(); } /************************************************************************** ** FIN de la BOUCLE PRINCIPALE ** **************************************************************************/ }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

12

Pen^2 (./10) :
Ben la norme C K & R est la première norme du C, telle que définie par les auteurs du langage (Kernigan & Ritchie)Il y a eu des petites modifications ensuite.
merci smile
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

13

Petites ? J'aurais dit grosse perso grin
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

14

tongue

15

beauregard (./8) :
exe version 0.2 : tromb.gif Fichier joint : fission_02.o tromb.gif


Tu aurais pu prévenir que les briques c'était juste pour faire joli j'ai passé des heures à essayer de le briser moi picol



Mon site sur la LYNX :ZoneLynx

16

RYGAR (./15) :
beauregard (./8) :
exe version 0.2 : tromb.gif Fichier joint : fission_02.o tromb.gif


Tu aurais pu prévenir que les briques c'était juste pour faire joli j'ai passé des heures à essayer de le briser moi picol
Une 0.2 est rarement jouable. Tu n'as pas noté pencil de bug et ça c'est cool. smile Tu peux déjà étudier l'interaction balle/raquette. loupe
Quand aux interactions balle/briques, après avoir étudié de près le code Moon Patrol (mon jeu préféré sur VCS2600 soit dis en passant) j'ai enfin trouvé la soluce dans la soirée, joie ! smile
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

17

beauregard (./16) :
Une 0.2 est rarement jouable. Tu n'as pas noté crayon.gif de bug et ça c'est cool. smile.gif Tu peux déjà étudier l'interaction balle/raquette. loupe.gif


J'ai pas "encore" noté de bug mais j'ai néanmoins une petite question :
Parfois si on ne bouge pas la raquette la balle se met à rebondir de manière verticale raquette/haut du tableau, la balle effectue environs 3/4 aller retours puis d'un coup l'angle se modifie et au lieu de repartir en ligne droite, la balle part à nouveau en diagonale et la partie reprend.
Le problème c'est que je n'arrive pas à trouver dans ton code la commande qui définie cette instruction...?
Mon site sur la LYNX :ZoneLynx

18

RYGAR (./17) :
beauregard (./16) :
Une 0.2 est rarement jouable. Tu n'as pas noté crayon.gif de bug et ça c'est cool. smile.gif Tu peux déjà étudier l'interaction balle/raquette. loupe.gif


J'ai pas "encore" noté de bug mais j'ai néanmoins une petite question :
Parfois si on ne bouge pas la raquette la balle se met à rebondir de manière verticale raquette/haut du tableau, la balle effectue environs 3/4 aller retours puis d'un coup l'angle se modifie et au lieu de repartir en ligne droite, la balle part à nouveau en diagonale et la partie reprend.
Le problème c'est que je n'arrive pas à trouver dans ton code la commande qui définie cette instruction...?

Quand la balle touche le plafond, j'utilise la commande random pour définir sa prochaine direction :

608 if (bdirx==1) { // Si la balle monte
609 if (balldirX>154)
610 {// collision haut du cadre: changement de direction
611 balldirX=154;bdirx=-bdirx; // inverse la direction de la balle
612 if (dirf==0) {
613 basar=random()%3; // de 0 à 2
614 --basar;dirf=basar; // -1 ou 0 ou 1
615 }
616 // bruitage balle cadre:
617 silence();
618 abcmusic(1,abcball2);
619 }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

19

Fission version 0.31
12 tableaux jouable les amis smile

exe: http://www.mirari.fr/A0CK

source:
http://www.mirari.fr/cY3U

source extension .h :
http://www.mirari.fr/VEpb

info brique
ZRhD
(n'oubliez pas que le jeu se joue la console tenu à la verticale)
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

20

Alors alors, Passons sur les félicitations pour ton boulot rapide et impressionnant et ma joie de pouvoir enfin jouer à un arkanoide sur lynx pour ce concentrer sur les défauts tongue

Tout d'abord, le problème que je détaillais plus haut concernant le rebond mur/raquette en ligne droite devient omniprésent dans ta dernière mise a jour, autant quand il n'y avait pas de brique la balle ne faisait que deux ou trois aller retour en ligne droite autant là il suffit de lancer la balle avec un angle verticale et de ne pas bouger la raquette pour se faire toute les briques placées sur la même trajectoire. Ensuite lorsqu'il n'y a plus de brique et si on ne bouge toujours pas la raquette la balle fera pas loin de 5/6 aller retour mur/raquette avant de brusquement changer de direction.

Ensuite il y a parfois de gros problème de collisions, la balle qui passe à travers trois briques sans rebondir (mais en les détruisant tout de même) ou bien des rebonds qui se font non pas sur le bord d'une brique mais sur son centre notamment dans les niveaux avec des briques indestructibles, les rebonds de la balle sur ces briques sont presque toujours aberrant.

Sur ce je retourne essayer de passer le 10em tableaux.

Et je ne résiste quand même pas, Wahou !!! Quel boulot impressionnant tu fais et quel plaisir de voir de nouveaux homebrew pour la Lynx !!!
Mon site sur la LYNX :ZoneLynx

21

oui, après réflexion, je pense que j'ai peut être pris le problème à l'envers concernant la collision balle/brique.
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

22

nouvelle version 0.5
http://www.mirari.fr/pIM7
explication X:
F5MZ
explication Y:
pBR5

source .c
http://www.mirari.fr/hz7b

source .h
http://www.mirari.fr/HZ0P

jaquette face:
oeR5
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

23

Ça commence à prendre vraiment forme là tongue

J'ai pu aller jusqu'au niveau 11 ou je suis resté bloqué à cause d'un bug.

Je vais essayer d'expliquer le problème :
Dans ce niveau tu as une ligne de 5 briques destructibles enfermées entre deux lignes de briques indestructibles, pour les briques destructibles citées aux extrémités gauche et droite pas de souci dés que la balle les touche elles disparaissent par contre pour les trois briques situées au centre lorsque la balle commence à rebondir entre les deux lignes indestructible l'écran nous affiche deux balles fixes l'une sur l'autre qui avance sans rebondir (ou si on ce fit au son on dirait que la balle rebondi tellement vite que l'affichage ne suit plus) et passent à travers les trois briques normalement destructibles sans leur faire de mal.
zq0Q
Mon site sur la LYNX :ZoneLynx

24

RYGAR (./23) :
Ça commence à prendre vraiment forme là tongue

J'ai pu aller jusqu'au niveau 11 ou je suis resté bloqué à cause d'un bug.

Je vais essayer d'expliquer le problème :
Dans ce niveau tu as une ligne de 5 briques destructibles enfermées entre deux lignes de briques indestructibles, pour les briques destructibles citées aux extrémités gauche et droite pas de souci dés que la balle les touche elles disparaissent par contre pour les trois briques situées au centre lorsque la balle commence à rebondir entre les deux lignes indestructible l'écran nous affiche deux balles fixes l'une sur l'autre qui avance sans rebondir (ou si on ce fit au son on dirait que la balle rebondi tellement vite que l'affichage ne suit plus) et passent à travers les trois briques normalement destructibles sans leur faire de mal.
zq0Q
hier j'ai testé le 11ème tableau, et effectivement, la balle traverse même des briques normalement destructibles. Je pense trouver la soluce, mais aujourd'hui mon PC de dev a rendu l'âme: plusieurs bip horrible à son démarrage, hier et avant hier déjà il fallait redémarrer plusieurs fois la machine, mais là, couic. couic
J'ai enlevé les barrettes de mémoire, la cartes graphique, mais rien y fait, faut que je passe de nouveau à la caisse, grml.
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

25

t'as pas perdu ton code en cours de dev, quand même ?! sad

26

beauregard (./24) :
mais aujourd'hui mon PC de dev a rendu l'âme: plusieurs bip horrible à son démarrage, hier et avant hier déjà il fallait redémarrer plusieurs fois la machine, mais là, couic. couic.gif


C'est moche ça sad
Comme squalyl j'espère que tu avais ailleurs des sauvegardes de tes programmes ou que le disque dur est réutilisable.

Mon site sur la LYNX :ZoneLynx

27

Laisse le reposer un peu, on sais jamais, et backup si il veux revenir a la vie !
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

28

Essaie aussi de changer l'alim, c'est un problème assez courant pour ce genre de symptômes.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

29

Je sauvegarde systématiquement sur clé USB.

Le problème ne vient pas du DD, des barrettes mémoires ou encore de la carte graphique.

Ce matin, je me suis dis: "le problème doit venir d'une barrette mémoire, comme j'ai pu le lire deci delà sur le web, pas bien grave." J'en enlève 1, "bip, bip", 2, "bip, bip", 3, "bip, bip" et enfin la 4ème "bip, bip", aie. J'enlève aussi la carte graphique "bip,bip", le disque dur, "bip,bip" (trop de bip dans une même phrase, hein ?).

J'ai changé l'alim l'an dernier, mais je peux toujours remettre l'ancienne pour voir.

merci pour votre soutient. smile

ps: pour le nombre de bip, il y en a 5, peut être qu'il s'agit là d'un problème particulier bien définie ??

après recherche: 5 bips courts = Erreur de processeur

avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

30

nouvelle version, la 0.6 :
http://www.mirari.fr/tA95
2hIl
source .c
http://www.mirari.fr/aP8L
source .h
http://www.mirari.fr/RjQB

bon jeu ! smile
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx