8Fermer10
philip-lynxLe 28/11/2010 à 14:29
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; } }