0001: /*
0002: Fission (casse brique) 0.31 - LYNX - kit BLL (newcc65)
0003: 08/12/2010
0004: console tenu � la verticale
0005: Handy/Option/Rotate Screen(Right)
0006: D-pad et bouton pause
0007: LYNX - video game */
0008:
0009: #include <stdlib.h>
0010: #include <lynx.h>
0011: #include <lynxlib.h>
0012: //{
0013: extern void silence();
0014: extern void abcmusic();
0015: extern void update_music();
0016:
0017: char abcmusic0[];
0018: char abcmusic1[];
0019: char abcmenu1[];
0020: char abcmenu2[];
0021: char abcball1[];
0022: char abcball2[];
0023: char abcball3[];
0024: char abcaptvir[];
0025: char abcbric[];
0026:
0027: #asm
0028: xref _abcmenu1
0029: xref _abcmenu2
0030: xref _abcball1
0031: xref _abcbric
0032: xref _abcaptvir
0033: xref _abcboum
0034: xref _abcpanne
0035: xref _abces
0036: xref _abcmusic0
0037: xref _abcmusic1
0038: _abcmenu1
0039: dc.b "O2X7I1V32T20R54H7K8"
0040: dc.b "|:C4"
0041: dc.b 0
0042: _abcmenu2
0043: dc.b "O3X7I1V16T20R54H7K12"
0044: dc.b "|:c2"
0045: dc.b 0
0046: ; ball :
0047: _abcball1
0048: dc.b "O4X3I1V70T20R32H2K1"
0049: dc.b "|:C4"
0050: _abcball2
0051: dc.b "O4X3I1V70T20R32H2K1"
0052: dc.b "|:D4"
0053: _abcball3
0054: dc.b "O4X3I1V70T20R32H2K1"
0055: dc.b "|:F4"
0056: _abcaptvir
0057: dc.b "O2X15I1V32T1R14H6K30"
0058: dc.b "|:C4D4C4E4D4C4D4"
0059: dc.b 0
0060: _abcbric
0061: dc.b "O4X7I1V16T20R54H7K12"
0062: dc.b "|:C1"
0063: dc.b 0
0064: _abcmusic0
0065: dc.b "O2X3I1V70T20R54H2K1"
0066: dc.b "|:C4O3T2C4"
0067: dc.b 0
0068: _abcmusic1
0069: dc.b "O2X7I0V45T20R80H8K1"
0070: dc.b "|:C4D4E4F4"
0071: dc.b "C4D4E4F4"
0072: dc.b "c4B4A4E4"
0073: dc.b "c4B4A4E4"
0074: dc.b "E4F4G4A4"
0075: dc.b "E4F4G4A4"
0076: dc.b "C4D4E4F4"
0077: dc.b "C4D4E4F4:"
0078: dc.b 0
0079: #endasm
0080: //}
0081:
0082: /* LYNX-specific #defines: */
0083: #define JOY_RIGHT 0x10
0084: #define JOY_LEFT 0x20
0085: #define JOY_DOWN 0x40
0086: #define JOY_UP 0x80
0087:
0088: #define BUTTON_OPTION1 0x08
0089: #define BUTTON_OPTION2 0x04
0090: #define BUTTON_LEFT 0x02
0091: #define BUTTON_RIGHT 0x01
0092:
0093: #define BUTTON_PAUSE 0x01
0094:
0095: #define SC BSTRETC H(a) (*(uint *)((a)+15)) // d�formation, macro
0096: #define SC BTILT(a) (*(uint *)((a)+17)) // d�formation, macro
0097:
0098: uchar SCREEN[8160] at (MEMTOP-16320);
0099: uchar RENDER[8160] at (MEMTOP-8160);
0100:
0101: uchar pali[]={
0102: 0x00,0x0F,0x02,0x03,0x0A,0x04,0x05,0x06,0x07,0x0B,0x08,0x09,0x04,0x0B,0x0C,0x01,
0103: 0x00,0xFF,0x22,0x33,0xAA,0x44,0x55,0x66,0x77,0x00,0x88,0x99,0x53,0xBB,0xCC,0x11};
0104: uchar palg[]={
0105: 0x00,0x0F,0x0A,0x00,0x03,0x05,0x08,0x0A,0x0C,0x0E,0x0D,0x00,0x04,0x03,0x02,0x00,
0106: 0x00,0xFF,0xF0,0x0F,0x3F,0x5F,0x8F,0xAF,0xCF,0xEF,0x28,0xF8,0x53,0x63,0x52,0x21};
0107:
0108:
0109: uchar palr[]={
0110: 0x00,0x0F,0x0A,0x00,0x03,0x05,0x08,0x0A,0x0C,0x0E,0x0D,0x00,0x04,0x00,0x02,0x00,
0111: 0x00,0xFF,0xF0,0x0F,0x3F,0x5F,0x8F,0xAF,0xCF,0xEF,0x28,0xF8,0x53,0x0F,0x52,0x21};
0112: /*****************************************************************************
0113: ** Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp **
0114: **
0115: set image01=imole.bmp
0116: SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01%
0117: cmd
0118: **
0119: ** Le point d'action de l'image imole est mis au centre de celle-ci, **
0120: ** 72/2 = 36 (-a036036). Le but de la manoeuvre est de r�aliser un zoom **
0121: ** correctement. **
0122: *****************************************************************************/
0123:
0124: extern uchar ititre[]; // image titre, d'une taille de 15*49;
0125: extern uchar iname[]; // image nom/pr�nom de auteur, d'une taille de 93*9;
0126: extern uchar imole[]; // image molecule, d'une taille de 72*72;
0127: uchar SCB[];
0128: #asm
0129: _SCB dc.b $c7,$10,$20
0130: dc.w 0,0
0131: dc.w 0,0,$100,$100
0132: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0133: #endasm
0134: // ------------------------------------
0135: extern uchar fondg[]; // image fond game, d'une taille de 160*102;
0136: uchar SCBg[];
0137:
0138: #asm
0139: _SCBg dc.b $c0,$10,$20
0140: dc.w 0,0
0141: dc.w 0,0,$100,$100
0142: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0143: ;
0144: #endasm
0145: // ------------------------------------
0146: extern uchar pushup[]; // image appuyez sur haut, d'une taille de 48*35;
0147: uchar SCBp[];
0148: #asm
0149: _SCBp dc.b $c7,$10,$20
0150: dc.w 0,0
0151: dc.w 0,0,$100,$100
0152: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0153: #endasm
0154: // ------------------------------------
0155: /*****************************************************************************
0156: ** Ci-dessous, le contenu du fichier batchfile pour l'image raquet.bmp **
0157: set image01=raquet.bmp
0158: SPRPCK -t6 -S008025 -a000012 -p0 %image01%
0159: cmd
0160: *****************************************************************************/
0161: extern uchar raquet[]; // image raquette, d'une taille de 8*24;
0162: uchar SCBr[];
0163: #asm
0164: _SCBr dc.b $c7,$10,$20
0165: dc.w 0,0
0166: dc.w 0,0,$100,$100
0167: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0168: #endasm
0169: // ------------------------------------
0170: // clip du sprite chiffres, chacun d'une taille de 8*8: 0123456789.LEV
0171: extern uchar bc000000[];
0172: extern uchar bc000001[];
0173: extern uchar bc000002[];
0174: extern uchar bc000003[];
0175: extern uchar bc000004[];
0176: extern uchar bc000005[];
0177: extern uchar bc000006[];
0178: extern uchar bc000007[];
0179: extern uchar bc000008[];
0180: extern uchar bc000009[];
0181: extern uchar bc000010[];
0182: extern uchar bc000011[];
0183: extern uchar bc000012[];
0184: extern uchar bc000013[];
0185:
0186: uchar *chiffrestab[14] = {bc000000, bc000001, bc000002, bc000003, bc000004,
0187: bc000005, bc000006, bc000007, bc000008, bc000009,
0188: bc000010, bc000011, bc000012, bc000013};
0189: uchar SCBchiffres1[]; // d�claration d'un nouveau controleur de sprite (test)
0190: uchar SCBchiffres2[]; // d�claration d'un nouveau controleur de sprite (test)
0191: uchar SCBchiffres3[]; // d�claration d'un nouveau controleur de sprite (test)
0192: uchar SCBchiffres4[]; // d�claration d'un nouveau controleur de sprite (test)
0193: uchar SCBchiffres5[]; // d�claration d'un nouveau controleur de sprite (test)
0194:
0195: uchar SCBscore1[]; // d�claration d'un nouveau controleur de sprite (score unit�)
0196: uchar SCBscore2[]; // d�claration d'un nouveau controleur de sprite (score dizaine)
0197: uchar SCBscore3[]; // d�claration d'un nouveau controleur de sprite (score centaine)
0198: uchar SCBscore4[]; // d�claration d'un nouveau controleur de sprite (score millier)
0199:
0200: uchar SCBtexte1[]; // d�claration d'un nouveau controleur de sprite (level)
0201: uchar SCBtexte2[]; // d�claration d'un nouveau controleur de sprite (level)
0202: uchar SCBtexte3[]; // d�claration d'un nouveau controleur de sprite (level)
0203: uchar SCBtexte4[]; // d�claration d'un nouveau controleur de sprite (level)
0204: uchar SCBtexte5[]; // d�claration d'un nouveau controleur de sprite (level)
0205:
0206: uchar SCBlife[]; // d�claration d'un nouveau controleur de sprite (score unit�)
0207:
0208: #asm
0209: _SCBchiffres1 dc.b $c7,$10,$20
0210: dc.w 0,0
0211: dc.w 0,0,$100,$100
0212: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0213: ;
0214: _SCBchiffres2 dc.b $c7,$10,$20
0215: dc.w 0,0
0216: dc.w 0,0,$100,$100
0217: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0218: ;
0219: _SCBchiffres3 dc.b $c7,$10,$20
0220: dc.w 0,0
0221: dc.w 0,0,$100,$100
0222: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0223: ;
0224: _SCBchiffres4 dc.b $c7,$10,$20
0225: dc.w 0,0
0226: dc.w 0,0,$100,$100
0227: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0228: ;
0229: _SCBchiffres5 dc.b $c7,$10,$20
0230: dc.w 0,0
0231: dc.w 0,0,$100,$100
0232: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0233: ;
0234: _SCBscore1 dc.b $c7,$10,$20
0235: dc.w 0,0
0236: dc.w 0,0,$100,$100
0237: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0238: ;
0239: _SCBscore2 dc.b $c7,$10,$20
0240: dc.w 0,0
0241: dc.w 0,0,$100,$100
0242: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0243: ;
0244: _SCBscore3 dc.b $c7,$10,$20
0245: dc.w 0,0
0246: dc.w 0,0,$100,$100
0247: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0248: ;
0249: _SCBscore4 dc.b $c7,$10,$20
0250: dc.w 0,0
0251: dc.w 0,0,$100,$100
0252: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0253: ;
0254: _SCBtexte1 dc.b $c7,$10,$20
0255: dc.w 0,0
0256: dc.w 0,0,$100,$100
0257: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0258: ;
0259: _SCBtexte2 dc.b $c7,$10,$20
0260: dc.w 0,0
0261: dc.w 0,0,$100,$100
0262: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0263: ;
0264: _SCBtexte3 dc.b $c7,$10,$20
0265: dc.w 0,0
0266: dc.w 0,0,$100,$100
0267: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0268: ;
0269: _SCBtexte4 dc.b $c7,$10,$20
0270: dc.w 0,0
0271: dc.w 0,0,$100,$100
0272: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0273: ;
0274: _SCBtexte5 dc.b $c7,$10,$20
0275: dc.w 0,0
0276: dc.w 0,0,$100,$100
0277: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0278: ;
0279: _SCBlife dc.b $c7,$10,$20
0280: dc.w 0,0
0281: dc.w 0,0,$100,$100
0282: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0283: #endasm
0284: // ------------------------------------
0285: // set image01=fdir.bmp
0286: // SPRPCK -t6 -S018015 -r007001 -o000000 -i126015 -p0 %image01% fd
0287: // cmd
0288: // clip du sprite fleches (7 images d'une taille de 18*15).
0289: extern uchar fd000000[];
0290: extern uchar fd000001[];
0291: extern uchar fd000002[];
0292: extern uchar fd000003[];
0293: extern uchar fd000004[];
0294: extern uchar fd000005[];
0295: extern uchar fd000006[];
0296:
0297: uchar *fdtab[7] = {fd000000, fd000001, fd000002, fd000003, fd000004,
0298: fd000005, fd000006};
0299: uchar SCBfd[]; // d�claration d'un nouveau controleur de sprite
0300: #asm
0301: _SCBfd dc.b $c7,$10,$20
0302: dc.w 0,0
0303: dc.w 0,0,$100,$100
0304: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0305: #endasm
0306: // ------------------------------------
0307: /*****************************************************************************
0308: ** Ci-dessous, le contenu du fichier batchfile pour l'image fball.bmp **
0309: **
0310: set image01=fball.bmp
0311: SPRPCK -t6 -S005005 -r001001 -a002002 -p0 %image01%
0312: cmd
0313: **
0314: ** Le point d'action de l'image fball est mis au centre de celle-ci, **
0315: ** 0 1 2 3 4 --> la valeur 2 correspond exactement au centre (-a002002) **
0316: *****************************************************************************/
0317:
0318: extern uchar fball[]; // image balle, d'une taille de 5*5;
0319: uchar SCBball[];
0320: #asm
0321: _SCBball dc.b $c7,$10,$20
0322: dc.w 0,0
0323: dc.w 0,0,$100,$100
0324: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0325: #endasm
0326: // ------------------------------------
0327: // ------------------------------------
0328: //char fbriq[]; //
0329:
0330: // clip du sprite brique, d'une taille de 10*14 : 0(d�truite), 1(normale), 2(dure) et 3(incassable).
0331: extern uchar br000000[];
0332: extern uchar br000001[];
0333: extern uchar br000002[];
0334: extern uchar br000003[];
0335:
0336: uchar *brtab[4] = {br000000, br000001, br000002, br000003};
0337:
0338: // nombreuses d�clarations des nouveaux controleurs de sprite pour les briques.
0339: uchar SCBbr01[];
0340: uchar SCBbr02[];
0341: uchar SCBbr03[];
0342: uchar SCBbr04[];
0343: uchar SCBbr05[];
0344: uchar SCBbr06[];
0345: uchar SCBbr07[];
0346: uchar SCBbr08[];
0347: uchar SCBbr09[];
0348: uchar SCBbr10[];
0349: uchar SCBbr11[];
0350: uchar SCBbr12[];
0351: uchar SCBbr13[];
0352: uchar SCBbr14[];
0353: uchar SCBbr15[];
0354: uchar SCBbr16[];
0355: uchar SCBbr17[];
0356: uchar SCBbr18[];
0357: uchar SCBbr19[];
0358: uchar SCBbr20[];
0359: uchar SCBbr21[];
0360: uchar SCBbr22[];
0361: uchar SCBbr23[];
0362: uchar SCBbr24[];
0363: uchar SCBbr25[];
0364: #asm
0365: _SCBbr01 dc.b $c7,$10,$20
0366: dc.w 0,0
0367: dc.w 0,0,$100,$100
0368: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0369: ;
0370: _SCBbr02 dc.b $c7,$10,$20
0371: dc.w 0,0
0372: dc.w 0,0,$100,$100
0373: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0374: ;
0375: _SCBbr03 dc.b $c7,$10,$20
0376: dc.w 0,0
0377: dc.w 0,0,$100,$100
0378: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0379: ;
0380: _SCBbr04 dc.b $c7,$10,$20
0381: dc.w 0,0
0382: dc.w 0,0,$100,$100
0383: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0384: ;
0385: _SCBbr05 dc.b $c7,$10,$20
0386: dc.w 0,0
0387: dc.w 0,0,$100,$100
0388: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0389: ;
0390: _SCBbr06 dc.b $c7,$10,$20
0391: dc.w 0,0
0392: dc.w 0,0,$100,$100
0393: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0394: ;
0395: _SCBbr07 dc.b $c7,$10,$20
0396: dc.w 0,0
0397: dc.w 0,0,$100,$100
0398: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0399: ;
0400: _SCBbr08 dc.b $c7,$10,$20
0401: dc.w 0,0
0402: dc.w 0,0,$100,$100
0403: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0404: ;
0405: _SCBbr09 dc.b $c7,$10,$20
0406: dc.w 0,0
0407: dc.w 0,0,$100,$100
0408: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0409: ;
0410: _SCBbr10 dc.b $c7,$10,$20
0411: dc.w 0,0
0412: dc.w 0,0,$100,$100
0413: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0414: ;
0415: _SCBbr11 dc.b $c7,$10,$20
0416: dc.w 0,0
0417: dc.w 0,0,$100,$100
0418: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0419: ;
0420: _SCBbr12 dc.b $c7,$10,$20
0421: dc.w 0,0
0422: dc.w 0,0,$100,$100
0423: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0424: ;
0425: _SCBbr13 dc.b $c7,$10,$20
0426: dc.w 0,0
0427: dc.w 0,0,$100,$100
0428: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0429: ;
0430: _SCBbr14 dc.b $c7,$10,$20
0431: dc.w 0,0
0432: dc.w 0,0,$100,$100
0433: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0434: ;
0435: _SCBbr15 dc.b $c7,$10,$20
0436: dc.w 0,0
0437: dc.w 0,0,$100,$100
0438: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0439: ;
0440: _SCBbr16 dc.b $c7,$10,$20
0441: dc.w 0,0
0442: dc.w 0,0,$100,$100
0443: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0444: ;
0445: _SCBbr17 dc.b $c7,$10,$20
0446: dc.w 0,0
0447: dc.w 0,0,$100,$100
0448: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0449: ;
0450: _SCBbr18 dc.b $c7,$10,$20
0451: dc.w 0,0
0452: dc.w 0,0,$100,$100
0453: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0454: ;
0455: _SCBbr19 dc.b $c7,$10,$20
0456: dc.w 0,0
0457: dc.w 0,0,$100,$100
0458: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0459: ;
0460: _SCBbr20 dc.b $c7,$10,$20
0461: dc.w 0,0
0462: dc.w 0,0,$100,$100
0463: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0464: ;
0465: _SCBbr21 dc.b $c7,$10,$20
0466: dc.w 0,0
0467: dc.w 0,0,$100,$100
0468: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0469: ;
0470: _SCBbr22 dc.b $c7,$10,$20
0471: dc.w 0,0
0472: dc.w 0,0,$100,$100
0473: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0474: ;
0475: _SCBbr23 dc.b $c7,$10,$20
0476: dc.w 0,0
0477: dc.w 0,0,$100,$100
0478: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0479: ;
0480: _SCBbr24 dc.b $c7,$10,$20
0481: dc.w 0,0
0482: dc.w 0,0,$100,$100
0483: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0484: ;
0485: _SCBbr25 dc.b $c7,$10,$20
0486: dc.w 0,0
0487: dc.w 0,0,$100,$100
0488: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0489: #endasm
0490: // ------------------------------------ ouf !
0491:
0492: // ------------------------------------
0493: extern char ipause[]; // image pause, d'une taille de 13*43;
0494: char SCBip[];
0495: #asm
0496: _SCBip dc.b $c7,$10,$20
0497: dc.w 0,0
0498: dc.w 0,0,$100,$100
0499: dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
0500: #endasm
0501: // ------------------------------------
0502:
0503:
0504:
0505:
0506: int posx,posy,level,score,xpush,ypush,relach;
0507: int i;
0508: char tempa,tempb,tempc,tempd,tempe,etape,filife,gspause,gsblip,mhaut,mbas; // de -128 � 127
0509: int molescx,molescy;
0510: int atest,unite,dizaine,centaine,millier,dmillier,horszone;
0511:
0512: // ydirf --> d�placer l�g�rement la fl�che.
0513: // 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).
0514: // bdirx --> direction X de la balle (ici haut/bas car le jeu se joue la LYNX tenu � la verticale).
0515: char ydirf,dirf,bdirx,speedX,oboucl,basar,odirx,Xtemp,Ytemp,fsaut,upbri;
0516: int balldirX,balldirY,yplayer;
0517:
0518: int compti, comptx, compty;
0519: int tligne,nbrbriqx, nbrbriqy;
0520:
0521: // assembler vertical retrace syncronisation routine
0522: void Vsync()
0523: {
0524: #asm
0525: vretrace:
0526: lda $fd0a
0527: bne vretrace
0528: #endasm
0529: }
0530:
0531: // Hors de l'assembleur, point de salut...
0532: // L'utilisation de la procedure suivante, lors de l'�cran d'action,
0533: // fait ramer le jeu.
0534:
0535: void Fchiffres(clx,cly,classe)
0536: int clx,cly,classe;
0537: {
0538: SCBDATA(SCBchiffres1) = chiffrestab[classe%14];
0539: SCBX(SCBchiffres1) = clx;
0540: SCBY(SCBchiffres1) = cly;
0541: DrawSprite(SCBchiffres1);
0542: }
0543:
0544:
0545: // brique : �tat + coordonn�es X et Y. brsco[25], bricol[5],
0546: int cible, bbcontact, rebcot, brnbr, brie[25], brif[25], brix[5]; // 5 car il y a 5 rang�es de briques sur la m�me ligne (ligne car ecran vertical).
0547: //int briy[25];
0548: uchar *brdata[25];//25 briques test en ligne
0549: // uchar *brdatb[25];//25 briques test en colonne
0550: uchar *brsco[25];
0551:
0552:
0553: ShowScreen()
0554: {
0555:
0556:
0557: brix[0] = 85-horszone;
0558: SCBX(SCBbr01) = brix[0];
0559:
0560: SCBX(SCBbr02) = brix[0];
0561:
0562: SCBX(SCBbr03) = brix[0];
0563:
0564: SCBX(SCBbr04) = brix[0];
0565:
0566: SCBX(SCBbr05) = brix[0];
0567:
0568:
0569: brix[1] = 95-horszone;
0570: SCBX(SCBbr06) = brix[1];
0571:
0572: SCBX(SCBbr07) = brix[1];
0573:
0574: SCBX(SCBbr08) = brix[1];
0575:
0576: SCBX(SCBbr09) = brix[1];
0577:
0578: SCBX(SCBbr10) = brix[1];
0579:
0580:
0581: brix[2] = 105-horszone;
0582: SCBX(SCBbr11) = brix[2];
0583:
0584: SCBX(SCBbr12) = brix[2];
0585:
0586: SCBX(SCBbr13) = brix[2];
0587:
0588: SCBX(SCBbr14) = brix[2];
0589:
0590: SCBX(SCBbr15) = brix[2];
0591:
0592:
0593: brix[3] = 115-horszone;
0594: SCBX(SCBbr16) = brix[3];
0595:
0596: SCBX(SCBbr17) = brix[3];
0597:
0598: SCBX(SCBbr18) = brix[3];
0599:
0600: SCBX(SCBbr19) = brix[3];
0601:
0602: SCBX(SCBbr20) = brix[3];
0603:
0604:
0605: brix[4] = 125-horszone;
0606: SCBX(SCBbr21) = brix[4];
0607:
0608: SCBX(SCBbr22) = brix[4];
0609:
0610: SCBX(SCBbr23) = brix[4];
0611:
0612: SCBX(SCBbr24) = brix[4];
0613:
0614: SCBX(SCBbr25) = brix[4];
0615:
0616:
0617: if (horszone>0)
0618: {
0619: horszone=horszone-4;
0620: if (horszone<1) horszone=0;
0621: }
0622:
0623: }
0624:
0625:
0626:
0627: /**************************************************************************
0628:
0629: ATTENTION : Ci-dessous des tableaux de valeurs : ces valeurs ne pourront pas �tre modifi� par la suite.
0630:
0631: La variable brie[25] sera donc utilis� pour modifier l'�tat des 25 briques.
0632: **************************************************************************/
0633:
0634: #include "fifi.h"
0635:
0636: /**************************************************************************
0637: ** **
0638: ** **
0639: **************************************************************************/
0640: char main()
0641: {
0642: InitIRQ();
0643: CLI;
0644:
0645: SetBuffers(SCREEN, RENDER ,0);
0646:
0647:
0648:
0649: posx=76;
0650: posy=47;
0651: xpush=-48;
0652: ypush=34;
0653: // SCBX(SCB) = 60;
0654: // SCBY(SCB) = 42;
0655: // SCBDATA(SCB) = ititre;
0656:
0657: // 1er sprite chain� (fond + raquette)
0658: SCBX(SCBg) = 0;
0659: SCBY(SCBg) = 0;
0660: SCBDATA(SCBg) = fondg;
0661:
0662: SCBNEXT(SCBg) = SCBp; // chainage de sprite info commande
0663: SCBX(SCBp) = xpush;
0664: SCBY(SCBp) = ypush;
0665: SCBDATA(SCBp) = pushup;
0666: //SCBCTL0(SCBp)= 0x001;//99; // pas glop
0667: SCBNEXT(SCBp) = SCBr; // chainage de sprite raquette
0668: SCBX(SCBr) = -200;
0669: SCBY(SCBr) = 0;
0670: SCBDATA(SCBr) = raquet;
0671:
0672: SCBNEXT(SCBr) = SCBfd; // chainage de sprite fleche directionnelle
0673: SCBX(SCBfd) = 0;
0674: SCBY(SCBfd) = 0;
0675: SCBDATA(SCBfd) = fdtab[dirf%7];//fleche;
0676:
0677: horszone=150;// mettre les briques hors de l'�cran visible. Sprite brique d'une taille de 6*14, 0=normale 1=dure 2=incassable.
0678: SCBNEXT(SCBfd) = SCBbr01; // chainage de la brique 01
0679: SCBX(SCBbr01) = 85-horszone;
0680: SCBY(SCBbr01) = 16;
0681: SCBDATA(SCBbr01) = brtab[0%4]; //
0682: SCBNEXT(SCBbr01) = SCBbr02; // chainage de la brique 02
0683: SCBX(SCBbr02) = 85-horszone;
0684: SCBY(SCBbr02) = 16+14;
0685: SCBDATA(SCBbr02) = brtab[0%4]; //
0686: SCBNEXT(SCBbr02) = SCBbr03; // chainage de la brique 03
0687: SCBX(SCBbr03) = 85-horszone;
0688: SCBY(SCBbr03) = 16+28;
0689: SCBDATA(SCBbr03) = brtab[0%4]; //
0690: SCBNEXT(SCBbr03) = SCBbr04; // chainage de la brique 04
0691: SCBX(SCBbr04) = 85-horszone;
0692: SCBY(SCBbr04) = 16+42;
0693: SCBDATA(SCBbr04) = brtab[0%4]; //
0694: SCBNEXT(SCBbr04) = SCBbr05; // chainage de la brique 05
0695: SCBX(SCBbr05) = 85-horszone;
0696: SCBY(SCBbr05) = 16+56;
0697: SCBDATA(SCBbr05) = brtab[0%4]; //
0698:
0699: SCBNEXT(SCBbr05) = SCBbr06; // chainage de la brique 06
0700: SCBX(SCBbr06) = 95-horszone;
0701: SCBY(SCBbr06) = 16;
0702: SCBDATA(SCBbr06) = brtab[0%4]; //
0703: SCBNEXT(SCBbr06) = SCBbr07; // chainage de la brique 07
0704: SCBX(SCBbr07) = 95-horszone;
0705: SCBY(SCBbr07) = 16+14;
0706: SCBDATA(SCBbr07) = brtab[0%4]; //
0707: SCBNEXT(SCBbr07) = SCBbr08; // chainage de la brique 08
0708: SCBX(SCBbr08) = 95-horszone;
0709: SCBY(SCBbr08) = 16+28;
0710: SCBDATA(SCBbr08) = brtab[0%4]; //
0711: SCBNEXT(SCBbr08) = SCBbr09; // chainage de la brique 09
0712: SCBX(SCBbr09) = 95-horszone;
0713: SCBY(SCBbr09) = 16+42;
0714: SCBDATA(SCBbr09) = brtab[0%4]; //
0715: SCBNEXT(SCBbr09) = SCBbr10; // chainage de la brique 10
0716: SCBX(SCBbr10) = 95-horszone;
0717: SCBY(SCBbr10) = 16+56;
0718: SCBDATA(SCBbr10) = brtab[0%4]; //
0719:
0720: SCBNEXT(SCBbr10) = SCBbr11; // chainage de la brique 11
0721: SCBX(SCBbr11) = 105-horszone;
0722: SCBY(SCBbr11) = 16;
0723: SCBDATA(SCBbr11) = brtab[0%4]; //
0724: SCBNEXT(SCBbr11) = SCBbr12; // chainage de la brique 12
0725: SCBX(SCBbr12) = 105-horszone;
0726: SCBY(SCBbr12) = 16+14;
0727: SCBDATA(SCBbr12) = brtab[0%4]; //
0728: SCBNEXT(SCBbr12) = SCBbr13; // chainage de la brique 13
0729: SCBX(SCBbr13) = 105-horszone;
0730: SCBY(SCBbr13) = 16+28;
0731: SCBDATA(SCBbr13) = brtab[0%4]; //
0732: SCBNEXT(SCBbr13) = SCBbr14; // chainage de la brique 14
0733: SCBX(SCBbr14) = 105-horszone;
0734: SCBY(SCBbr14) = 16+42;
0735: SCBDATA(SCBbr14) = brtab[0%4]; //
0736: SCBNEXT(SCBbr14) = SCBbr15; // chainage de la brique 15
0737: SCBX(SCBbr15) = 105-horszone;
0738: SCBY(SCBbr15) = 16+56;
0739: SCBDATA(SCBbr15) = brtab[0%4]; //
0740:
0741: SCBNEXT(SCBbr15) = SCBbr16; // chainage de la brique 16
0742: SCBX(SCBbr16) = 115-horszone;
0743: SCBY(SCBbr16) = 16;
0744: SCBDATA(SCBbr16) = brtab[0%4]; //
0745: SCBNEXT(SCBbr16) = SCBbr17; // chainage de la brique 17
0746: SCBX(SCBbr17) = 115-horszone;
0747: SCBY(SCBbr17) = 16+14;
0748: SCBDATA(SCBbr17) = brtab[0%4]; //
0749: SCBNEXT(SCBbr17) = SCBbr18; // chainage de la brique 18
0750: SCBX(SCBbr18) = 115-horszone;
0751: SCBY(SCBbr18) = 16+28;
0752: SCBDATA(SCBbr18) = brtab[0%4]; //
0753: SCBNEXT(SCBbr18) = SCBbr19; // chainage de la brique 19
0754: SCBX(SCBbr19) = 115-horszone;
0755: SCBY(SCBbr19) = 16+42;
0756: SCBDATA(SCBbr19) = brtab[0%4]; //
0757: SCBNEXT(SCBbr19) = SCBbr20; // chainage de la brique 15
0758: SCBX(SCBbr20) = 115-horszone;
0759: SCBY(SCBbr20) = 16+56;
0760: SCBDATA(SCBbr20) = brtab[0%4]; //
0761:
0762: SCBNEXT(SCBbr20) = SCBbr21; // chainage de la brique 21
0763: SCBX(SCBbr21) = 125-horszone;
0764: SCBY(SCBbr21) = 16;
0765: SCBDATA(SCBbr21) = brtab[0%4]; //
0766: SCBNEXT(SCBbr21) = SCBbr22; // chainage de la brique 22
0767: SCBX(SCBbr22) = 125-horszone;
0768: SCBY(SCBbr22) = 16+14;
0769: SCBDATA(SCBbr22) = brtab[0%4]; //
0770: SCBNEXT(SCBbr22) = SCBbr23; // chainage de la brique 23
0771: SCBX(SCBbr23) = 125-horszone;
0772: SCBY(SCBbr23) = 16+28;
0773: SCBDATA(SCBbr23) = brtab[0%4]; //
0774: SCBNEXT(SCBbr23) = SCBbr24; // chainage de la brique 24
0775: SCBX(SCBbr24) = 125-horszone;
0776: SCBY(SCBbr24) = 16+42;
0777: SCBDATA(SCBbr24) = brtab[0%4]; //
0778: SCBNEXT(SCBbr24) = SCBbr25; // chainage de la brique 25
0779: SCBX(SCBbr25) = 125-horszone;
0780: SCBY(SCBbr25) = 16+56;
0781: SCBDATA(SCBbr25) = brtab[0%4]; //
0782:
0783: SCBNEXT(SCBbr25) = SCBball; // chainage de sprite balle
0784: SCBX(SCBball) = -200;
0785: SCBY(SCBball) = 0;
0786: SCBDATA(SCBball) = fball;
0787:
0788: SCBNEXT(SCBball) = SCBscore1; // chainage score unit�
0789: SCBX(SCBscore1) = -10;
0790: SCBY(SCBscore1) = 99-8;
0791: SCBDATA(SCBscore1) = chiffrestab[0%14]; //
0792: SCBNEXT(SCBscore1) = SCBscore2; // chainage score dizaine
0793: SCBX(SCBscore2) = -10;
0794: SCBY(SCBscore2) = 99-16;
0795: SCBDATA(SCBscore2) = chiffrestab[0%14]; //
0796: SCBNEXT(SCBscore2) = SCBscore3; // chainage score centaine
0797: SCBX(SCBscore3) = -10;
0798: SCBY(SCBscore3) = 99-24;
0799: SCBDATA(SCBscore3) = chiffrestab[0%14]; //
0800: SCBNEXT(SCBscore3) = SCBscore4; // chainage score millier
0801: SCBX(SCBscore4) = -10;
0802: SCBY(SCBscore4) = 99-32;
0803: SCBDATA(SCBscore4) = chiffrestab[0%14]; //
0804:
0805: SCBNEXT(SCBscore4) = SCBlife; // chainage nombre de vie
0806: SCBY(SCBlife) = 9;
0807:
0808:
0809: //SCBX(SCBscore1) = -10;SCBX(SCBscore2) = -10;SCBX(SCBscore3) = -10;SCBX(SCBscore4) = -10; // score plac�s hors de l'�cran
0810:
0811: SCBNEXT(SCBlife) = SCBtexte1; // chainage texte 1
0812: SCBX(SCBtexte1) = 0;SCBY(SCBtexte1) = -200;
0813: SCBDATA(SCBtexte1) = chiffrestab[0%14]; //
0814:
0815: SCBNEXT(SCBtexte1) = SCBtexte2; // chainage texte 2
0816: SCBX(SCBtexte2) = 0;SCBY(SCBtexte2) = -200;
0817: SCBDATA(SCBtexte2) = chiffrestab[0%14]; //
0818:
0819: SCBNEXT(SCBtexte2) = SCBtexte3; // chainage texte 3
0820: SCBX(SCBtexte3) = 0;SCBY(SCBtexte3) = -200;
0821: SCBDATA(SCBtexte3) = chiffrestab[0%14]; //
0822:
0823: SCBNEXT(SCBtexte3) = SCBtexte4; // chainage texte 4
0824: SCBX(SCBtexte4) = 0;SCBY(SCBtexte4) = -200;
0825: SCBDATA(SCBtexte4) = chiffrestab[0%14]; //
0826:
0827: SCBNEXT(SCBtexte4) = SCBtexte5; // chainage texte 3
0828: SCBX(SCBtexte5) = 0;SCBY(SCBtexte5) = -200;
0829: SCBDATA(SCBtexte5) = chiffrestab[0%14]; //
0830:
0831:
0832:
0833:
0834: SCBNEXT(SCBtexte5) = SCBip; // chainage pause
0835: SCBX(SCBip) = 147;SCBY(SCBip) = -200;
0836: SCBDATA(SCBip) = ipause; //
0837:
0838:
0839:
0840:
0841:
0842: // 2�me sprite chain� (test)
0843: SCBX(SCBchiffres1) = 0;SCBY(SCBchiffres1) = 0;
0844: //SCBDATA(SCBchiffres1) = chiffres;
0845: SCBNEXT(SCBchiffres1) = SCBchiffres2; // chainage de sprite
0846: SCBX(SCBchiffres2) = 0;SCBY(SCBchiffres2) = 0;
0847: //SCBDATA(SCBchiffres2) = chiffres;
0848: SCBNEXT(SCBchiffres2) = SCBchiffres3; // chainage de sprite
0849: SCBX(SCBchiffres3) = 0;SCBY(SCBchiffres3) = 0;
0850: //SCBDATA(SCBchiffres3) = chiffres;
0851: SCBNEXT(SCBchiffres3) = SCBchiffres4; // chainage de sprite
0852: SCBX(SCBchiffres4) = 0;SCBY(SCBchiffres4) = 0;
0853: SCBNEXT(SCBchiffres4) = SCBchiffres5; // chainage de sprite
0854: SCBX(SCBchiffres5) = 0;SCBY(SCBchiffres5) = 0;
0855:
0856:
0857: // truc bien pratique : associer les briques des tableaux � une variable num�rot�.
0858: brdata[0] = SCBbr01;brdata[1] = SCBbr02;brdata[2] = SCBbr03;brdata[3] = SCBbr04;brdata[4] = SCBbr05;
0859: brdata[5] = SCBbr06;brdata[6] = SCBbr07;brdata[7] = SCBbr08;brdata[8] = SCBbr09;brdata[9] = SCBbr10;
0860: brdata[10] = SCBbr11;brdata[11] = SCBbr12;brdata[12] = SCBbr13;brdata[13] = SCBbr14;brdata[14] = SCBbr15;
0861: brdata[15] = SCBbr16;brdata[16] = SCBbr17;brdata[17] = SCBbr18;brdata[18] = SCBbr19;brdata[19] = SCBbr20;
0862: brdata[20] = SCBbr21;brdata[21] = SCBbr22;brdata[22] = SCBbr23;brdata[23] = SCBbr24;brdata[24] = SCBbr25;
0863:
0864:
0865:
0866: /**************************************************************************
0867: �a marche !
0868: comptx=0;
0869: SCBDATA(brdata[comptx]) = brtab[tbr01[0][0]%3];
0870: comptx=1;
0871: SCBDATA(brdata[comptx]) = brtab[tbr01[0][1]%3];
0872: comptx=2;
0873: SCBDATA(brdata[comptx]) = brtab[tbr01[0][2]%3];
0874: comptx=3;
0875: SCBDATA(brdata[comptx]) = brtab[tbr01[0][3]%3];
0876: comptx=4;
0877: SCBDATA(brdata[comptx]) = brtab[tbr01[0][4]%3];
0878: **************************************************************************/
0879:
0880: /**************************************************************************
0881: �a marche !
0882: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5. 1ere rang�e de brique
0883: {
0884: SCBDATA(brdata[comptx]) = brtab[tbr01[0][comptx]%3];
0885: }
0886: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5. 2eme rang�e de brique
0887: {
0888: SCBDATA(brdata[(comptx+5)]) = brtab[tbr01[1][comptx]%3];
0889: }
0890: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5. 3eme rang�e de brique
0891: {
0892: SCBDATA(brdata[(comptx+10)]) = brtab[tbr01[2][comptx]%3];
0893: }
0894: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5. 4eme rang�e de brique
0895: {
0896: SCBDATA(brdata[(comptx+15)]) = brtab[tbr01[3][comptx]%3];
0897: }
0898: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5. 5eme rang�e de brique
0899: {
0900: SCBDATA(brdata[(comptx+20)]) = brtab[tbr01[4][comptx]%3];
0901: }
0902: **/
0903:
0904: /**************************************************************************
0905: �a marche !
0906: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5. 1ere rang�e de brique
0907: {
0908: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
0909: {
0910: SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr01[compty][comptx]%3];
0911: }
0912: }
0913: **/
0914:
0915: /**************************************************************************
0916: ** BOUCLE PRINCIPALE **
0917: **************************************************************************/
0918: while(1)
0919: {
0920: // for( ; ; )
0921:
0922: Vsync();
0923: SwapBuffers();
0924: update_music(); // petite subtilit� de la gestion sonore
0925:
0926:
0927:
0928:
0929:
0930: ++gsblip; // economie ressource machine --> certaines des conditions n'ont pas besoin d'�tre lu par la LYNX � chaque boucle.
0931: if (gsblip==5)
0932: {
0933: gsblip=1;
0934:
0935: if (switches & BUTTON_PAUSE)
0936: {
0937: if (gspause==0) {gspause=1;silence();abcmusic(0,abcaptvir);}
0938: }
0939: if (!(switches & BUTTON_PAUSE))
0940: {
0941: if (gspause==1) gspause=2;
0942: }
0943:
0944: if (switches & BUTTON_PAUSE)
0945: {
0946: if (gspause==2) gspause=3;
0947: }
0948:
0949: if (!(switches & BUTTON_PAUSE))
0950: {
0951: if (gspause==3) gspause=0;
0952: }
0953: }
0954:
0955:
0956:
0957: /**************************************************************************
0958: **************************************************************************/
0959: if (etape>=0 & etape<=4) // �cran titre
0960: {
0961: /* set the palette */
0962: SetRGB(pali); // Ceci sert � changer la palette de la Lynx.
0963: DrawFBox(0,0,160,102,0); // couleur 0 (noire)
0964:
0965: SCBX(SCBlife) = -10;SCBDATA(SCBlife) = chiffrestab[3%14]; //
0966:
0967: SCBX(SCBr) = -200; // raquette mis hors de l'�cran
0968: SCBX(SCBball) = -200; // balle mis hors de l'�cran
0969: SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'�cran
0970:
0971:
0972: //SCBX(SCB) = 78-(molescx/gmole);SCBY(SCB) = 42-(molescy/gmole)
0973:
0974: //SCBX(SCB) = SCBX(SCB) - (molescx/6); SCBY(SCB) = SCBY(SCB) - (molescy/6);
0975: SCBX(SCB) = 78; SCBY(SCB) = 52;
0976: SCBDATA(SCB) = imole;
0977:
0978: // SCBY(SCBacteur) = yacteur-(actscy/4);
0979: // SCBY(SCBacteur) = SCBY(SCBacteur) + 16;
0980:
0981: //SCBHS(SCB) = 0x100;
0982: //SCBVS(SCB) = 0x100;
0983:
0984: if (gspause==0)
0985: {
0986:
0987: /**
0988: etape=1;molescx=256;molescy=256;
0989: **/
0990:
0991:
0992: /**
0993:
0994: if (etape==4) {
0995: if (molescx>256) molescx=molescx-4;
0996: if (molescy>128) molescy=molescy-8;
0997: if (molescx<257 & molescy<129) {molescx=256;molescy=128;etape=2;mhaut=4;}
0998: }
0999: if (etape==3) {
1000: if (molescx>128) molescx=molescx-8;
1001: if (molescy>256) molescy=molescy-4;
1002: if (molescx<129 & molescy<257) {molescx=128;molescy=256;etape=2;mbas=4;}
1003: }
1004: if (etape==2) {
1005: if (molescx<384) molescx=molescx+(4+mbas);
1006: if (molescy<384) molescy=molescy+(4+mhaut);
1007: if (molescx>383 & molescy>383)
1008: {
1009: molescx=384;molescy=384;++tempc;mhaut=0;mbas=0;
1010: if (tempc==3) tempc=1;
1011: if (tempc==1) etape=3;
1012: if (tempc==2) etape=4;
1013: }
1014: }
1015: if (etape==1) {
1016: ++tempb;
1017: if (tempb>64) {
1018: tempb=0;etape=2;
1019: }
1020: }
1021: if (etape==0) {
1022: if (molescx<256) {
1023: molescx=molescx+2;molescy=molescy+2;
1024: if (molescx>255) {molescx=256;molescy=256;etape=1;}
1025: }
1026: }
1027: **/
1028: switch (etape)
1029: {
1030: case 0:
1031: molescx=molescx+2;molescy=molescy+2;
1032: break;
1033: }
1034: if (molescx>255) {molescx=256;molescy=256;etape=1;}
1035:
1036:
1037:
1038: SCBY(SCBip) = -50;
1039: }// if (gspause==0)
1040: else
1041: {
1042: SCBY(SCBip) = 30; // coordonn�es image pause
1043: }
1044:
1045:
1046:
1047: SCBHS(SCB) = molescx;
1048: SCBVS(SCB) = molescy;
1049: DrawSprite(SCB); // affichage molecule
1050:
1051: if (etape>0) {SCBHS(SCB) = 256;SCBVS(SCB) = 256;} // remise � 0 echelle des images SCB
1052: SCBX(SCB) = 34; SCBY(SCB) = 2; SCBDATA(SCB) = iname; DrawSprite(SCB);
1053: SCBX(SCB) = 74; SCBY(SCB) = 26; SCBDATA(SCB) = ititre; DrawSprite(SCB);
1054:
1055: //
1056: SCBX(SCBscore1) = 4;SCBX(SCBscore2) = 4;SCBX(SCBscore3) = 4;SCBX(SCBscore4) = 4;SCBX(SCBscore1) = 4;
1057: SCBDATA(SCBscore1) = chiffrestab[0%14];
1058: SCBDATA(SCBscore2) = chiffrestab[1%14];
1059: SCBDATA(SCBscore3) = chiffrestab[0%14];
1060: SCBDATA(SCBscore4) = chiffrestab[2%14];
1061:
1062:
1063: SCBX(SCBp) = xpush;//48;
1064: SCBY(SCBp) = ypush;
1065:
1066: SCBY(SCBg) = -200; // fond zone de jeu
1067: SCBX(SCBr) = -200; // raquette
1068:
1069: DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score + texte + pause
1070:
1071: if (gspause==0 & etape>0)
1072: {
1073: if (xpush<8) xpush=xpush+2; // apparition de la bulle info "Push UP"
1074: if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu.
1075: {
1076: xpush=8;
1077: ++tempa; // bulle info clignote doucement
1078: if (tempa>63) tempa=1;
1079: if (tempa>0 & tempa<32) ypush=34;
1080: if (tempa>31) ypush=-100;
1081:
1082: if (joystick & JOY_RIGHT)
1083: {
1084: level=1;//3;//1;
1085: tempa=0;tempb=0;etape=9;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
1086: xpush=-48;ypush=34;
1087: score=0;
1088: filife=3;
1089: // bruitage menu :
1090: silence();
1091: abcmusic(0,abcmenu1);
1092: abcmusic(1,abcmenu2);
1093:
1094:
1095: // // bruitage panne s�che :
1096: // silence();
1097: // abcmusic(3,abcpanne);
1098:
1099: SetRGB(palg); // Ceci sert � changer la palette de la Lynx.
1100: SCBY(SCBg) = 0; // fond zone de jeu.
1101: SCBX(SCBp) = xpush;
1102: relach=1;
1103:
1104: SCBDATA(SCBscore1) = chiffrestab[0%14];
1105: SCBDATA(SCBscore2) = chiffrestab[0%14];
1106: SCBDATA(SCBscore3) = chiffrestab[0%14];
1107: SCBDATA(SCBscore4) = chiffrestab[0%14];
1108:
1109:
1110:
1111:
1112:
1113:
1114:
1115: }
1116: }
1117: }
1118: //TextOut(24, 2, 2, 0, "Philippe Haouli present"); // lettre grise 32,32,32
1119: //TextOut(24, 2, 1, 0, "Philippe Haouli"); // lettre blanche
1120:
1121: }
1122:
1123: /**************************************************************************
1124: **************************************************************************/
1125: if (etape==9) // coordonn�es affichage texte "LEVEL", et surtout application des choix de la nature des briques (voir tables de donn�es plus haut).
1126: {
1127: ++etape;
1128: SCBX(SCBtexte1) = 140; SCBY(SCBtexte1) = 18; SCBDATA(SCBtexte1) = chiffrestab[11%14]; // L
1129: SCBX(SCBtexte2) = 140; SCBY(SCBtexte2) = 26; SCBDATA(SCBtexte2) = chiffrestab[12%14]; // E
1130: SCBX(SCBtexte3) = 140; SCBY(SCBtexte3) = 34; SCBDATA(SCBtexte3) = chiffrestab[13%14]; // V
1131: SCBX(SCBtexte4) = 140; SCBY(SCBtexte4) = 42; SCBDATA(SCBtexte4) = chiffrestab[12%14]; // E
1132: SCBX(SCBtexte5) = 140; SCBY(SCBtexte5) = 50; SCBDATA(SCBtexte5) = chiffrestab[11%14]; // L
1133:
1134: if (level>0 & level<13)
1135: {
1136: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1137: {
1138: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1139: {
1140: if (level==1) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr01[compty][comptx]%4];
1141: if (level==2) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr02[compty][comptx]%4];
1142: if (level==3) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr03[compty][comptx]%4];
1143: if (level==4) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr04[compty][comptx]%4];
1144: if (level==5) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr05[compty][comptx]%4];
1145:
1146: if (level==6) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr06[compty][comptx]%4];
1147: if (level==7) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr07[compty][comptx]%4];
1148: if (level==8) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr08[compty][comptx]%4];
1149: if (level==9) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr09[compty][comptx]%4];
1150: if (level==10) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr10[compty][comptx]%4];
1151:
1152: if (level==11) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr11[compty][comptx]%4];
1153: if (level==12) SCBDATA(brdata[comptx+(compty*5)]) = brtab[tbr12[compty][comptx]%4];
1154: }
1155: }
1156: //brsco=25;// nombre initial de brique � casser
1157: brnbr=0; // �tat des briques, de 0 � 24.
1158: if (level==1)
1159: {
1160: /************************************************************************** ok
1161: **************************************************************************/
1162: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1163: {
1164: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1165: {
1166: brie[brnbr]=tbr01[comptx][compty];
1167: ++brnbr;
1168: //if (brie[brnbr]==0 | brie[brnbr]==3) --brsco; // nombre de brique � casser
1169: //if (brie[brnbr]==0) --brsco; // nombre de brique � casser
1170: //if (brie[brnbr]==3) --brsco; // nombre de brique � casser
1171: }
1172: }
1173: /**
1174: brnbr=0; // �tat des briques, de 0 � 24.
1175:
1176:
1177: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1178: {
1179: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1180: {
1181: brif[brnbr]=tbr01[comptx][compty];
1182: ++brnbr;
1183: }
1184: }
1185: **/
1186: /************************************************************************** ok
1187: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1188: {
1189: brif[compty]=tbr01[compty][0];
1190: }
1191:
1192: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1193: {
1194: brie[compty]=tbr01[0][compty];
1195: }
1196: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1197: {
1198: brie[compty+5]=tbr01[1][compty];
1199: }
1200: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1201: {
1202: brie[compty+10]=tbr01[2][compty];
1203: }
1204: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1205: {
1206: brie[compty+15]=tbr01[3][compty];
1207: }
1208: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1209: {
1210: brie[compty+20]=tbr01[4][compty];
1211: }
1212: **************************************************************************/
1213:
1214: /************************************************************************** ok
1215: brif[0]=tbr01[0][0];
1216: brif[1]=tbr01[1][0];
1217: brif[2]=tbr01[2][0];
1218: brif[3]=tbr01[3][0];
1219: brif[4]=tbr01[4][0];
1220:
1221: brif[5]=tbr01[1][1];
1222: brif[6]=tbr01[1][1];
1223: brif[7]=tbr01[1][2];
1224: brif[8]=tbr01[1][3];
1225: brif[9]=tbr01[1][4];
1226:
1227: brie[0]=tbr01[0][0];
1228: brie[1]=tbr01[0][1];
1229: brie[2]=tbr01[0][2];
1230: brie[3]=tbr01[0][3];
1231: brie[4]=tbr01[0][4];
1232:
1233: brie[5]=tbr01[1][1];
1234: brie[6]=tbr01[1][1];
1235: brie[7]=tbr01[1][2];
1236: brie[8]=tbr01[1][3];
1237: brie[9]=tbr01[1][4];
1238:
1239: brie[10]=tbr01[2][1];
1240: brie[11]=tbr01[2][1];
1241: brie[12]=tbr01[2][2];
1242: brie[13]=tbr01[2][3];
1243: brie[14]=tbr01[2][4];
1244:
1245: brie[15]=tbr01[3][1];
1246: brie[16]=tbr01[3][1];
1247: brie[17]=tbr01[3][2];
1248: brie[18]=tbr01[3][3];
1249: brie[19]=tbr01[3][4];
1250:
1251: brie[20]=tbr01[4][1];
1252: brie[21]=tbr01[4][1];
1253: brie[22]=tbr01[4][2];
1254: brie[23]=tbr01[4][3];
1255: brie[24]=tbr01[4][4];
1256: **************************************************************************/
1257: }
1258: brnbr=0; // �tat des briques, de 0 � 24.
1259: if (level==2)
1260: {
1261: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1262: {
1263: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1264: {
1265: brie[brnbr]=tbr02[comptx][compty];
1266: ++brnbr;
1267: }
1268: }
1269: }
1270: brnbr=0; // �tat des briques, de 0 � 24.
1271: if (level==3)
1272: {
1273: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1274: {
1275: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1276: {
1277: brie[brnbr]=tbr03[comptx][compty];
1278: ++brnbr;
1279: }
1280: }
1281: }
1282: brnbr=0; // �tat des briques, de 0 � 24.
1283: if (level==4)
1284: {
1285: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1286: {
1287: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1288: {
1289: brie[brnbr]=tbr04[comptx][compty];
1290: ++brnbr;
1291: }
1292: }
1293: }
1294: brnbr=0; // �tat des briques, de 0 � 24.
1295: if (level==5)
1296: {
1297: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1298: {
1299: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1300: {
1301: brie[brnbr]=tbr05[comptx][compty];
1302: ++brnbr;
1303: }
1304: }
1305: }
1306: brnbr=0; // �tat des briques, de 0 � 24.
1307: if (level==6)
1308: {
1309: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1310: {
1311: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1312: {
1313: brie[brnbr]=tbr06[comptx][compty];
1314: ++brnbr;
1315: }
1316: }
1317: }
1318: brnbr=0; // �tat des briques, de 0 � 24.
1319: if (level==7)
1320: {
1321: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1322: {
1323: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1324: {
1325: brie[brnbr]=tbr07[comptx][compty];
1326: ++brnbr;
1327: }
1328: }
1329: }
1330: brnbr=0; // �tat des briques, de 0 � 24.
1331: if (level==8)
1332: {
1333: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1334: {
1335: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1336: {
1337: brie[brnbr]=tbr08[comptx][compty];
1338: ++brnbr;
1339: }
1340: }
1341: }
1342: brnbr=0; // �tat des briques, de 0 � 24.
1343: if (level==9)
1344: {
1345: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1346: {
1347: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1348: {
1349: brie[brnbr]=tbr09[comptx][compty];
1350: ++brnbr;
1351: }
1352: }
1353: }
1354: brnbr=0; // �tat des briques, de 0 � 24.
1355: if (level==10)
1356: {
1357: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1358: {
1359: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1360: {
1361: brie[brnbr]=tbr10[comptx][compty];
1362: ++brnbr;
1363: }
1364: }
1365: }
1366: brnbr=0; // �tat des briques, de 0 � 24.
1367: if (level==11)
1368: {
1369: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1370: {
1371: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1372: {
1373: brie[brnbr]=tbr11[comptx][compty];
1374: ++brnbr;
1375: }
1376: }
1377: }
1378: brnbr=0; // �tat des briques, de 0 � 24.
1379: if (level==12)
1380: {
1381: for(comptx=0 ; comptx<5; comptx++) // de 0 � 4, ce qui fait 5.
1382: {
1383: for(compty=0 ; compty<5; compty++) // de 0 � 4, ce qui fait 5.
1384: {
1385: brie[brnbr]=tbr12[comptx][compty];
1386: ++brnbr;
1387: }
1388: }
1389: }
1390: brsco[0]=19; // nombre de brique � casser
1391: brsco[1]=19; // nombre de brique � casser
1392: brsco[2]=18; // nombre de brique � casser
1393: brsco[3]=8; // nombre de brique � casser
1394: brsco[4]=17; // nombre de brique � casser
1395: brsco[5]=15; // nombre de brique � casser
1396: brsco[6]=15; // nombre de brique � casser
1397: brsco[7]=16; // nombre de brique � casser
1398: brsco[8]=12; // nombre de brique � casser
1399: brsco[9]=13; // nombre de brique � casser
1400: brsco[10]=15; // nombre de brique � casser
1401: brsco[11]=12; // nombre de brique � casser
1402: }
1403:
1404:
1405: }
1406:
1407:
1408: /**************************************************************************
1409: **************************************************************************/
1410: if (etape==10) // ecran level
1411: {
1412:
1413: ShowScreen(); // Coordonn�es de toutes les briques (voir au d�but de ce joyeux code).
1414:
1415: SCBX(SCBp) = xpush;//48;
1416: SCBY(SCBp) = ypush;
1417:
1418: SCBX(SCBr) = -200; // Coordonn�e X de la raquette (ici mis hors de l'�cran).
1419: DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score + texte + pause
1420:
1421: unite = level % 10;
1422: dizaine = level / 10 % 10;
1423: // unit�:
1424: SCBDATA(SCBchiffres1) = chiffrestab[unite%14];
1425: SCBX(SCBchiffres1) = 140;
1426: SCBY(SCBchiffres1) = 50+24;
1427:
1428: // dizaine:
1429: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14];
1430: SCBX(SCBchiffres2) = 140;
1431: SCBY(SCBchiffres2) = 50+16;
1432:
1433: DrawSprite(SCBchiffres1); // Affichage valeur test�
1434:
1435:
1436: if (relach==1) {
1437: if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour v�rifier si le joueur n'appui plus sur D-pad haut
1438: }
1439: if (gspause==0)
1440: {
1441: if (xpush<8 & horszone==0) xpush=xpush+2;
1442: if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu.
1443: {
1444: xpush=8;
1445:
1446: ++tempa; // bulle info clignote doucement
1447: if (tempa>63) tempa=1;
1448: if (tempa>0 & tempa<32) ypush=34;
1449: if (tempa>31) ypush=200;
1450:
1451: if (relach==0 & horszone==0)
1452: {
1453: if (joystick & JOY_RIGHT) {
1454: //level=1;//3;//1;
1455: tempa=0;tempb=0;etape=20,yplayer=51;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
1456: xpush=-48;ypush=34;
1457: dirf=3;ydirf=6;
1458: SCBY(SCBtexte1) = -200;SCBY(SCBtexte2) = -200;SCBY(SCBtexte3) = -200;SCBY(SCBtexte4) = -200;SCBY(SCBtexte5) = -200;
1459: SCBX(SCBlife) = 4;
1460: score=0;
1461: // bruitage menu :
1462: silence();
1463: abcmusic(0,abcmenu1);
1464: abcmusic(1,abcmenu2);
1465:
1466:
1467: // // bruitage panne s�che :
1468: // silence();
1469: // abcmusic(3,abcpanne);
1470:
1471: //SetRGB(palg); // Ceci sert � changer la palette de la Lynx.
1472: //SCBX(SCBg) = 0; // fond zone de jeu
1473: SCBX(SCBp) = xpush;
1474: //SCBX(SCBr) = 200; // raquette
1475:
1476:
1477: relach=1; // utile pour v�rifier si le joueur n'appui plus sur D-pad haut
1478:
1479: //Vsync();
1480: //SwapBuffers();
1481: }
1482: }
1483: }
1484: SCBY(SCBip) = -50;
1485: }// if (gspause==0)
1486: else
1487: {
1488: SCBY(SCBip) = 30; // coordonn�es image pause
1489: }
1490:
1491:
1492:
1493:
1494:
1495: }
1496:
1497: /**************************************************************************
1498: **************************************************************************/
1499: if (etape==20) // �cran jeu 1 (fleche directionnelle)
1500: {
1501: // raquette :
1502: SCBX(SCBr) = 24;//32;
1503: SCBY(SCBr) = yplayer;
1504:
1505: // balle :
1506: SCBX(SCBball) = 34;//+110;//42
1507: SCBY(SCBball) = 51;
1508:
1509: // fleche directionnelle :
1510: SCBDATA(SCBfd) = fdtab[dirf%7];
1511: SCBX(SCBfd) = 39;
1512: SCBY(SCBfd) = 38+ydirf;
1513:
1514: if (gspause==0)
1515: {
1516: if (tempa>0) {--tempa;}
1517:
1518: if (joystick & JOY_DOWN)
1519: {
1520: if (tempa==0 & dirf<6) {++dirf;tempa=16;++ydirf;++ydirf;}
1521: }
1522: if (joystick & JOY_UP)
1523: {
1524: if (tempa==0 & dirf>0) {--dirf;tempa=16;--ydirf;--ydirf;}
1525: }
1526:
1527: if (relach==1)
1528: {
1529: if (!(joystick & JOY_RIGHT)) {relach=0;} // utile pour v�rifier si le joueur n'appui plus sur D-pad haut
1530: }
1531: if (joystick & JOY_RIGHT)
1532: {
1533: if (relach==0) {
1534: SCBX(SCBfd) = -200; // fleche directionnelle mis hors de l'�cran
1535: dirf=dirf-3;bdirx=1;
1536: tempa=0;etape=30;
1537: balldirX=SCBX(SCBball);
1538: balldirY=SCBY(SCBball);
1539: }
1540: }
1541:
1542:
1543: SCBY(SCBip) = -50;
1544: }// if (gspause==0)
1545: else
1546: {
1547: SCBY(SCBip) = 30; // coordonn�es image pause
1548: }
1549: //}
1550: DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score + texte + pause
1551: }
1552:
1553: /**************************************************************************
1554: **************************************************************************/
1555: if (etape==30) // �cran jeu 2
1556: {
1557: if (gspause==0)
1558: {
1559: if (dirf<0) // Si la balle se dirige vers la gauche, alors...
1560: {
1561: if (balldirY<3)
1562: {
1563: balldirY=3;dirf=-dirf; // cadre gauche
1564: // bruitage balle cadre:
1565: silence();
1566: abcmusic(1,abcball2);
1567: }
1568: if (dirf==-3) {
1569: ++Ytemp;
1570: if (Ytemp>1) {Ytemp=0;balldirY=balldirY-3;odirx=3;} // vitesse Y r�elle --> -1,5
1571: }
1572: if (dirf==-2) {balldirY=balldirY-1;odirx=2;} // vitesse Y --> -1
1573: if (dirf==-1) {
1574: ++Ytemp;odirx=1;
1575: if (Ytemp>1) {Ytemp=0;balldirY=balldirY-1;} // vitesse Y r�elle --> -0,5
1576: }
1577: }
1578:
1579: if (dirf==0) {odirx=0;} // vitesse X --> +2 balle se dirige droit devant.
1580:
1581: if (dirf>0) // Si la balle se dirige vers la droite, alors...
1582: {
1583: if (dirf==1) {
1584: ++Ytemp;odirx=1;
1585: if (Ytemp>1) {Ytemp=0;balldirY=balldirY+1;} // vitesse Y r�elle --> +0,5
1586: }
1587: if (dirf==2) {balldirY=balldirY+1;odirx=2;} // vitesse Y --> +1
1588: if (dirf==3) {
1589: ++Ytemp;
1590: if (Ytemp>1) {Ytemp=0;balldirY=balldirY+3;odirx=3;} // vitesse Y r�elle --> +1,5
1591: }
1592:
1593: if (balldirY>93)
1594: {
1595: balldirY=93;dirf=-dirf;// cadre droite (102-6 = 96-3 = 93)
1596: // bruitage balle cadre:
1597: silence();
1598: abcmusic(1,abcball2);
1599: }
1600: // balldirY=balldirY+2;
1601: //balldirY=balldirY+dirf;
1602:
1603: //if (dirf==1) {balldirY=balldirY+1;speedX=1;}
1604: //if (dirf==2) {balldirY=balldirY+2;speedX=3;}
1605: //if (dirf==3) {balldirY=balldirY+2;speedX=5;}
1606:
1607: }
1608:
1609:
1610:
1611: //If bille()\balldirY=0:bille()\bally-(3+bille()\speed):EndIf
1612: //If bille()\balldirY=1:bille()\bally+(3+bille()\speed):EndIf
1613: if (odirx==0)
1614: {
1615: //if (bdirx==1) balldirX=balldirX+2; // vitesse X --> +2
1616: //if (bdirx==-1) balldirX=balldirX-2; // vitesse X --> -2
1617:
1618: ++Xtemp;
1619: if (Xtemp>1)
1620: {
1621: Xtemp=0;
1622: if (bdirx==1) balldirX=balldirX+3; // vitesse X r�elle --> +1,5
1623: if (bdirx==-1) balldirX=balldirX-3; // vitesse X r�elle --> -1,5
1624: }
1625: }
1626: if (odirx==1)
1627: {
1628: ++Xtemp;
1629: if (Xtemp>1)
1630: {
1631: Xtemp=0;
1632: if (bdirx==1) balldirX=balldirX+3; // vitesse X r�elle --> +1,5
1633: if (bdirx==-1) balldirX=balldirX-3; // vitesse X r�elle --> -1,5
1634: }
1635: }
1636: if (odirx==2)
1637: {
1638: if (bdirx==1) balldirX=balldirX+1; // vitesse X --> +1
1639: if (bdirx==-1) balldirX=balldirX-1; // vitesse X --> -1
1640: }
1641: if (odirx==3)
1642: {
1643: ++Xtemp;
1644: if (Xtemp>1)
1645: {
1646: Xtemp=0;
1647: if (bdirx==1) balldirX=balldirX+1; // vitesse X r�elle --> +0,5
1648: if (bdirx==-1) balldirX=balldirX-1; // vitesse X r�elle --> -0,5
1649: }
1650: }
1651: if (bdirx==1) { // Si la balle monte
1652: if (balldirX>154)
1653: {// collision haut du cadre: changement de direction
1654: balldirX=154;bdirx=-bdirx; // inverse la direction de la balle
1655: if (dirf==0) {
1656: basar=random()%3; // de 0 � 2
1657: --basar;dirf=basar; // -1 ou 0 ou 1
1658: }
1659: // bruitage balle cadre:
1660: silence();
1661: abcmusic(1,abcball2);
1662: }
1663: }
1664: if (bdirx==-1) { // Si la balle descend
1665:
1666: if (balldirX<18) // provisoire
1667: {// collision bas du cadre: changement de direction
1668: //balldirX=18;bdirx=-bdirx; // inverse la direction de la balle
1669: etape=50;gsblip=1;--filife; // aie !
1670: }
1671:
1672: //if (balldirX>34 & balldirX<42)// collision ball/raquette: changement de direction
1673: if (balldirX>26 & balldirX<34)// collision ball/raquette: changement de direction
1674: {
1675: if (balldirY>yplayer-13 & balldirY<yplayer+13)
1676: {
1677: balldirX=34;bdirx=-bdirx;
1678: // bruitage balle raquette:
1679: silence();
1680: abcmusic(0,abcball1);
1681:
1682: //centre de la raquette :
1683: if (balldirY>yplayer-3 & balldirY<yplayer+3)
1684: {
1685: if (dirf==1) {dirf=0;oboucl=1;}
1686: if (dirf==2) {dirf=1;oboucl=1;}
1687: if (dirf==3) {dirf=2;oboucl=1;}
1688:
1689: if (dirf==-1) {dirf=0;oboucl=1;}
1690: if (dirf==-2) {dirf=-1;oboucl=1;}
1691: if (dirf==-3) {dirf=-2;oboucl=1;}
1692: }
1693: if (oboucl==1) {oboucl=0;goto test_finish;}
1694:
1695: //gauche de la raquette :
1696: if (balldirY>yplayer-8 & balldirY<yplayer-2)
1697: {
1698: //if (dirf==-1) {dirf=-2;oboucl=1;}
1699: if (dirf==-1) {dirf=-1;oboucl=1;}
1700: if (dirf==-3) {dirf=-2;oboucl=1;}
1701:
1702: if (dirf==1) {dirf=-1;oboucl=1;}
1703: if (dirf==2) {dirf=-2;oboucl=1;}
1704: if (dirf==3) {dirf=-2;oboucl=1;}
1705:
1706: if (dirf==0) {dirf=-1;oboucl=1;}
1707: }
1708: if (oboucl==1) {oboucl=0;goto test_finish;}
1709:
1710: //droite de la raquette :
1711: if (balldirY>yplayer+2 & balldirY<yplayer+8)
1712: {
1713: //if (dirf==1) {dirf=2;oboucl=1;}
1714: if (dirf==1) {dirf=1;oboucl=1;}
1715: if (dirf==3) {dirf=2;oboucl=1;}
1716:
1717: if (dirf==-1) {dirf=1;oboucl=1;}
1718: if (dirf==-2) {dirf=2;oboucl=1;}
1719: if (dirf==-3) {dirf=2;oboucl=1;}
1720:
1721: if (dirf==0) {dirf=1;oboucl=1;}
1722: }
1723: if (oboucl==1) {oboucl=0;goto test_finish;}
1724:
1725: //exgauche de la raquette :
1726: if (balldirY>yplayer-13 & balldirY<yplayer-7)
1727: {
1728: if (dirf==-1) {dirf=-2;oboucl=1;}//break;
1729: if (dirf==-2) {dirf=-3;oboucl=1;}
1730:
1731: if (dirf==1) {dirf=-2;oboucl=1;}
1732: if (dirf==2) {dirf=-3;oboucl=1;}
1733: if (dirf==3) {dirf=-3;oboucl=1;}
1734:
1735: if (dirf==0) {dirf=-2;oboucl=1;}
1736: }
1737: if (oboucl==1) {oboucl=0;goto test_finish;}
1738:
1739: //exdroite de la raquette :
1740: if (balldirY>yplayer+7 & balldirY<yplayer+13)
1741: {
1742: if (dirf==1) {dirf=2;oboucl=1;}
1743: if (dirf==2) {dirf=3;oboucl=1;}
1744:
1745: if (dirf==-1) {dirf=2;oboucl=1;}
1746: if (dirf==-2) {dirf=3;oboucl=1;}
1747: if (dirf==-3) {dirf=3;oboucl=1;}
1748:
1749: if (dirf==0) {dirf=2;oboucl=1;}
1750: }
1751: if (oboucl==1) {oboucl=0;goto test_finish;}
1752: }
1753: }
1754: }
1755:
1756: test_finish:
1757:
1758: if (joystick & JOY_DOWN) {
1759: yplayer=yplayer+2;
1760: if (yplayer>87) {yplayer=87;} // (102-24 = 78-3 = 75) ; 24 = largeur de la raquette
1761: }
1762: if (joystick & JOY_UP) {
1763: yplayer=yplayer-2;
1764: if (yplayer<15) {yplayer=15;}
1765: }
1766:
1767:
1768: SCBX(SCBball)=balldirX;SCBY(SCBball)=balldirY; // appliquer les variables balldirX et balldirY aux coordonn�es de la balle.
1769: SCBY(SCBr) = yplayer;
1770:
1771:
1772:
1773:
1774: ShowScreen(); // Coordonn�es de toutes les briques (voir au d�but de ce joyeux code).
1775:
1776: // test Balle/briques : la lutte est rude ;)
1777: //upbri=0;
1778: if (fsaut==0)
1779: {
1780: cible=0;bbcontact=0;
1781: if (balldirX<brix[0]-3 | balldirX>brix[4]+12) goto stop_test;//15
1782:
1783: if (balldirY>16-1 & balldirY<30) cible=1;
1784: if (balldirY>30-1 & balldirY<44) cible=2;
1785: if (balldirY>44-1 & balldirY<58) cible=3;
1786: if (balldirY>58-1 & balldirY<72) cible=4;
1787: if (balldirY>72-1 & balldirY<86) cible=5;
1788:
1789:
1790: if (cible>0)
1791: {
1792: // +10 ou +11 ou +12
1793: if (balldirX>brix[0]+9 & balldirX<brix[0]+13) upbri=1; // haut brique de 0 � 4
1794: if (balldirX>brix[1]+9 & balldirX<brix[1]+13) upbri=2; // haut brique de 5 � 9
1795: if (balldirX>brix[2]+9 & balldirX<brix[2]+13) upbri=3; // haut brique de 10 � 14
1796: //if (balldirX>brix[3]+9 & balldirX<brix[3]+13) upbri=4; // haut brique de 15 � 19
1797: //if (balldirX>brix[4]+9 & balldirX<brix[4]+13) upbri=5; // haut brique de 20 � 24
1798:
1799: if (balldirX>brix[1]-4) cible=cible+5;
1800: if (balldirX>brix[2]-4) cible=cible+5;
1801: if (balldirX>brix[3]-4) cible=cible+5;
1802: if (balldirX>brix[4]-4) cible=cible+5;
1803: --cible;
1804:
1805: /** La variable brie[25] sera donc utilis� pour modifier l'�tat des 25 briques. **/
1806: if (brie[cible] == 1)
1807: {
1808: brie[cible]=0;score+=10;SCBDATA(brdata[0 + cible]) = brtab[0%4];bbcontact=1;
1809: --level;--brsco[level];
1810: if (brsco[level]==0) etape=40; // toutes les briques destrutibles sont d�truites : passage au niveau suivant...
1811: ++level;
1812: silence();abcmusic(2,abcball3);
1813: }
1814: if (brie[cible] == 2) {brie[cible]=1;score+=10;SCBDATA(brdata[0 + cible]) = brtab[1%4];bbcontact=1;silence();abcmusic(2,abcball3);}
1815: if (brie[cible] == 3) {bbcontact=1;}
1816:
1817: if (bbcontact==1)
1818: {
1819: fsaut=1; // suite � une collision balle/brique, laisser un cycle avant d'autoriser � nouveaux les tests (ceci dit, je ne suis pas s�r de ce choix, hum).
1820: if (dirf>0) // Si la balle se dirige vers la droite, alors...
1821: {
1822: //if ((balldirY>15 & balldirY<19) | (balldirY>29 & balldirY<33) | (balldirY>43 & balldirY<47) | (balldirY>57 & balldirY<61) | (balldirY>71 & balldirY<75))
1823: if ( (balldirY>15-3 & balldirY<19) | (balldirY>29-3 & balldirY<33) | (balldirY>43-3 & balldirY<47) | (balldirY>57-3 & balldirY<61) | (balldirY>71-3 & balldirY<75))
1824: {
1825: if ((balldirX>85-1 & balldirX<85+10) | (balldirX>95-1 & balldirX<95+10) | (balldirX>105-1 & balldirX<105+10) | (balldirX>115-1 & balldirX<115+10) | (balldirX>125-1 & balldirX<125+10))
1826: {rebcot=1;goto stop_test;} // c�t� gauche
1827: }
1828: }
1829: if (dirf<0) // Si la balle se dirige vers la gauche, alors...
1830: {
1831: //if ((balldirY>26 & balldirY<30) | (balldirY>40 & balldirY<44) | (balldirY>54 & balldirY<58) | (balldirY>68 & balldirY<72) | (balldirY>82 & balldirY<86))
1832: if ((balldirY>26 & balldirY<30+3) | (balldirY>40 & balldirY<44+3) | (balldirY>54 & balldirY<58+3) | (balldirY>68 & balldirY<72+3) | (balldirY>82 & balldirY<86+3))
1833: {
1834: if ((balldirX>85-1 & balldirX<85+10) | (balldirX>95-1 & balldirX<95+10) | (balldirX>105-1 & balldirX<105+10) | (balldirX>115-1 & balldirX<115+10) | (balldirX>125-1 & balldirX<125+10))
1835: {rebcot=2;goto stop_test;} // c�t� droite
1836: }
1837: }
1838:
1839: if (cible>-1 & cible<5 ) // de 0 � 4
1840: { // brix[0] = 85-horszone; // & (balldirY>18 & balldirY<27)balldirX=balldirX-3;balldirX=balldirX+3;
1841: // si balle monte :
1842: if (bdirx==1 & (balldirX>brix[0]-4 & balldirX<brix[0])) // -3 ou -2 ou -1
1843: {bdirx=-bdirx;balldirX=brix[0]-4;goto stop_test;}//++atest;}
1844: // si balle descend :
1845: // if (bdirx==-1 & (balldirX>brix[0]+9 & balldirX<brix[0]+13)) // +10 ou +11 ou +12
1846: if (bdirx==-1 & upbri==1) // +10 ou +11 ou +12
1847: {++atest;bdirx=-bdirx;balldirX=brix[0]+13;goto stop_test;}
1848: }
1849: if (cible>4 & cible<10 ) // de 5 � 9
1850: { // brix[1] = 95-horszone; // & (balldirY>32 & balldirY<41)
1851: // si balle monte :
1852: if (bdirx==1 & (balldirX>brix[1]-4 & balldirX<brix[1])) // -3 ou -2 ou -1
1853: {bdirx=-bdirx;balldirX=brix[1]-4;goto stop_test;}
1854: // si balle descend :
1855: // if (bdirx==-1 & (balldirX>brix[1]+9 & balldirX<brix[1]+13)) // +10 ou +11 ou +12
1856: if (bdirx==-1 & upbri==2) // +10 ou +11 ou +12
1857: {++atest;bdirx=-bdirx;balldirX=brix[1]+13;goto stop_test;}
1858: }
1859: if (cible>9 & cible<15 ) // de 10 � 14
1860: { // brix[2] = 105-horszone; // & (balldirY>46 & balldirY<55)
1861: // si balle monte :
1862: if (bdirx==1 & (balldirX>brix[2]-4 & balldirX<brix[2])) // -3 ou -2 ou -1
1863: {bdirx=-bdirx;balldirX=brix[2]-4;goto stop_test;}
1864: // si balle descend :
1865: // if (bdirx==-1 & (balldirX>brix[2]+9 & balldirX<brix[2]+13)) // +10 ou +11 ou +12
1866: if (bdirx==-1 & upbri==3) // +10 ou +11 ou +12
1867: {++atest;bdirx=-bdirx;balldirX=brix[2]+13;goto stop_test;}
1868: }
1869: if (cible>14 & cible<20 ) // de 15 � 19
1870: { // brix[4] = 115-horszone; // & (balldirY>60 & balldirY<69)
1871: // si balle monte :
1872: if (bdirx==1 & (balldirX>brix[3]-4 & balldirX<brix[3])) // -3 ou -2 ou -1
1873: {bdirx=-bdirx;balldirX=brix[3]-4;goto stop_test;}
1874: // si balle descend :
1875: if (bdirx==-1 & (balldirX>brix[3]+9 & balldirX<brix[3]+13)) // +10 ou +11 ou +12
1876: // if (bdirx==-1 & upbri==4) // +10 ou +11 ou +12
1877: {++atest;bdirx=-bdirx;balldirX=brix[3]+13;goto stop_test;}
1878: }
1879: if (cible>19 & cible<25 ) // de 20 � 24
1880: { // brix[4] = 125-horszone; // & (balldirY>74 & balldirY<83)
1881: // si balle monte :
1882: if (bdirx==1 & (balldirX>brix[4]-4 & balldirX<brix[4])) // -3 ou -2 ou -1
1883: {bdirx=-bdirx;balldirX=brix[4]-4;goto stop_test;}
1884: // si balle descend :
1885: if (bdirx==-1 & (balldirX>brix[4]+9 & balldirX<brix[4]+13)) // +10 ou +11 ou +12
1886: // if (bdirx==-1 & upbri==5) // +10 ou +11 ou +12
1887: {++atest;bdirx=-bdirx;balldirX=brix[4]+13;goto stop_test;}
1888: }
1889:
1890: }
1891: }
1892: }
1893: else
1894: {
1895: fsaut=0;
1896: }
1897: stop_test:
1898: if (rebcot==1) {dirf=-dirf;balldirY=balldirY-3;}//
1899: if (rebcot==2) {dirf=-dirf;balldirY=balldirY+3;}//
1900: rebcot=0;
1901:
1902: //if (bdirx==-1) {++atest;} // descend
1903:
1904: /** affichage du score et nombre de vie:
1905: **/
1906: //if (gsblip==1) // test effectu� 1 fois 5, car la mise � jour du score n'est pas une priorit� absolu...
1907: switch (gsblip)
1908: {
1909: case 1:
1910:
1911: unite = score % 10;
1912: dizaine = score / 10 % 10;
1913: centaine = score / 100 % 10;
1914: millier = score / 1000 % 10;
1915: // unit�:
1916: SCBDATA(SCBscore1) = chiffrestab[unite%14];
1917: // dizaine:
1918: SCBDATA(SCBscore2) = chiffrestab[dizaine%14];
1919: // centaine:
1920: SCBDATA(SCBscore3) = chiffrestab[centaine%14];
1921: // millier:
1922: SCBDATA(SCBscore4) = chiffrestab[millier%14];
1923:
1924:
1925: unite = filife % 10;
1926: SCBDATA(SCBlife) = chiffrestab[unite%14];
1927: break;
1928: }
1929:
1930:
1931:
1932: SCBY(SCBip) = -50;
1933: }// if (gspause==0)
1934:
1935:
1936:
1937:
1938: else
1939: {
1940: //scrollx=0; // vitesse de d�filement du d�cor
1941: SCBY(SCBip) = 30; // coordonn�es image pause
1942: }
1943:
1944:
1945: DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score + texte + pause
1946:
1947:
1948: }
1949: /**************************************************************************
1950: **************************************************************************/
1951: if (etape==40) // passage au niveau suivant.
1952: {
1953: tempa=0;tempb=0;etape=9;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
1954: xpush=-48;ypush=34;
1955: ++level;
1956: if (level>12) level=1;
1957: // balle :
1958: SCBY(SCBball) = -20;
1959: horszone=150;// mettre les briques hors de l'�cran visible.
1960: }
1961: /**************************************************************************
1962: **************************************************************************/
1963:
1964: if (etape==50) // perd une raquette !
1965: {
1966: SetRGB(palr); // Ceci sert � changer la palette de la Lynx.
1967: DrawSprite(SCBg); // Affichage fond jeu + info commande + raquette + balle + fleche directionnelle + briques + score + texte + pause
1968:
1969: ++tempb;
1970: /**
1971: if (tempb>64)
1972: {
1973: tempb=0;
1974: SetRGB(palg); // Ceci sert � changer la palette de la Lynx.
1975:
1976: yplayer=51;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
1977: dirf=3;ydirf=6;
1978:
1979: etape=20;
1980: // raquette :
1981: SCBX(SCBr) = 24;//32;
1982: SCBY(SCBr) = yplayer;
1983:
1984: // balle :
1985: SCBX(SCBball) = 34;//42
1986: SCBY(SCBball) = 51;
1987:
1988: // fleche directionnelle :
1989: SCBDATA(SCBfd) = fdtab[dirf%7];
1990: SCBX(SCBfd) = 39;
1991: SCBY(SCBfd) = 38+ydirf;
1992:
1993:
1994:
1995: }
1996: **/
1997:
1998: switch (tempb)
1999: {
2000: case 70:
2001: tempb=0;
2002: SetRGB(palg); // Ceci sert � changer la palette de la Lynx.
2003:
2004: yplayer=51;//xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0;
2005: dirf=3;ydirf=6;
2006:
2007: etape=20;
2008: // raquette :
2009: SCBX(SCBr) = 24;//32;
2010: SCBY(SCBr) = yplayer;
2011:
2012: // balle :
2013: SCBX(SCBball) = 34;//42
2014: SCBY(SCBball) = 51;
2015:
2016: // fleche directionnelle :
2017: SCBDATA(SCBfd) = fdtab[dirf%7];
2018: SCBX(SCBfd) = 39;
2019: SCBY(SCBfd) = 38+ydirf;
2020: if (filife==0) {etape=0;horszone=150;ShowScreen();}
2021: break;
2022: }
2023:
2024: //if (filife==0) etape=0;
2025:
2026: // switch (filife)
2027: // {
2028: // case 0:
2029: // etape=0;
2030: /// break;
2031: // }
2032: }
2033: /**************************************************************************
2034: **************************************************************************/
2035: /** test
2036:
2037:
2038: atest=upbri;//etape;//brsco[0];//ttest;//9;//balldirX;//yplayer;//speedX;//dirf;//etape;
2039:
2040: //atest=horszone;//relach;//etape;//SCBCTL0(SCBbr);
2041: unite = atest % 10;
2042: dizaine = atest / 10 % 10;
2043: centaine = atest / 100 % 10;
2044: // millier = atest / 1000 % 10;
2045: // dmillier = atest / 10000 % 10;
2046: // unit�:
2047: SCBDATA(SCBchiffres1) = chiffrestab[unite%14];
2048: SCBX(SCBchiffres1) = 100;
2049: SCBY(SCBchiffres1) = 53;
2050:
2051: // dizaine:
2052: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%14];
2053: SCBX(SCBchiffres2) = 100;
2054: SCBY(SCBchiffres2) = 53-8;
2055:
2056: // centaine:
2057: SCBDATA(SCBchiffres3) = chiffrestab[centaine%14]; // 0
2058: SCBX(SCBchiffres3) = 100;
2059: SCBY(SCBchiffres3) = 53-16;
2060:
2061: // millier:
2062: // SCBDATA(SCBchiffres4) = chiffrestab[millier%14]; // 0
2063: // SCBX(SCBchiffres4) = 100;
2064: // SCBY(SCBchiffres4) = 53-24;
2065:
2066: // dizaine de millier:
2067: // SCBDATA(SCBchiffres5) = chiffrestab[dmillier%14]; // 0
2068: // SCBX(SCBchiffres5) = 100;
2069: // SCBY(SCBchiffres5) = 53-32;
2070:
2071: DrawSprite(SCBchiffres1); // Affichage valeur test�
2072:
2073: **/
2074:
2075:
2076:
2077: // SCBDATA(SCBchiffres1) = chiffrestab[10%14];
2078: // SCBX(SCBchiffres1) = 40;
2079: //SCBY(SCBchiffres1) = yplayer;
2080: // SCBY(SCBchiffres1) = yplayer;//yplayer+23;
2081:
2082: /*** Tests important des coordonn�es des images ***/
2083: // SCBDATA(SCBchiffres1) = chiffrestab[10%14];
2084: // SCBX(SCBchiffres1) = SCBX(SCBball);
2085: // SCBY(SCBchiffres1) = SCBY(SCBball);
2086: /*** fin de ces tests de coordonn�e ***/
2087:
2088: // DrawSprite(SCBchiffres1); // Affichage valeur test�
2089:
2090:
2091:
2092: //Vsync();
2093: //SwapBuffers();
2094:
2095: }
2096:
2097: /**************************************************************************
2098: ** FIN de la BOUCLE PRINCIPALE **
2099: **************************************************************************/
2100:
2101: }
2102:
2103:
2104:
2105:
2106:
2107:
2108:
2109: /*
2110:
2111: #asm
2112: vretrace:
2113: lda $fd0a
2114: bne vretrace
2115: #endasm
2116:
2117:
2118:
2119:
2120: LDA bally
2121: CMP #TOPWALL
2122: BCS MoveBallUpDone ;;if ball y > top wall, still on screen, skip next section
2123: LDA #$01
2124: STA balldown
2125: LDA #$00
2126: STA ballup ;;bounce, ball now moving down
2127: MoveBallUpDone:
2128:
2129:
2130: MoveBallDown:
2131: LDA balldown
2132: BEQ MoveBallDownDone ;;if ballup=0, skip this section
2133:
2134: LDA bally
2135: CLC
2136: ADC ballspeedy ;;bally position = bally + ballspeedy
2137: STA bally
2138:
2139: LDA bally
2140: CMP #BOTTOMWALL
2141: BCC MoveBallDownDone ;;if ball y < bottom wall, still on screen, skip next section
2142:
2143:
2144:
2145:
2146:
2147:
2148:
2149: LDA ballx
2150: SEC
2151: SBC ballspeedx ;;ballx position = ballx - ballspeedx
2152: STA ballx
2153:
2154:
2155:
2156: LDA ballright
2157: BEQ MoveBallRightDone // if ballright=0, skip this section
2158: */
2159: //#asm
2160: //lda oboucl
2161: //bne test_finish ;;// if oboucl=0, skip this section
2162: //#endasm
2163:
2164:
2165:
2166:
2167: //#asm
2168: //vretrace:
2169: // lda $fd0a
2170: // bne vretrace
2171: //#endasm