1

http://rajah.atari.org/files -> GOTBALLS.LNX (256 Ko) ou .O (14 Ko)

Mon premier jet sur la Lynx. Ayant toujours rêvé de coder sur Lynx, voilà qui est fait. Et on va pas s'arrêter là smile
C'est une release preview... je ne me donne pas d'échéance, et c'est pour tester/explorer les fonctions.
Il faudra :
- mettre un peu de zizique
- essayer d'utiliser les calculs de matrice de Suzy (pour les vector balls qui sont très lentes)
- essayer d'utiliser qu'un plan au lieu de quatre pour les lettres
- etc
#include <lynx.h> #include <lynxlib.h> #include <stdlib.h> // Bug in cc65? Needs real code before C++ comments occur? extern char balldata[]; extern char BALL01[]; extern char BALL02[]; extern char BALL03[]; extern char BALL04[]; extern char BALL05[]; extern char BALL06[]; extern char BALL07[]; extern char BALL08[]; extern char BALL09[]; extern char BALL10[]; extern char BALL11[]; extern char BALL12[]; extern char BALL13[]; extern char BALL14[]; extern char BALL15[]; extern char BALL16[]; extern char BALL17[]; extern char BALL18[]; extern char BALL19[]; extern char BALL20[]; extern char ft000000[]; extern char ft000001[]; extern char ft000002[]; extern char ft000003[]; extern char ft000004[]; extern char ft000005[]; extern char ft000006[]; extern char ft000007[]; extern char ft000008[]; extern char ft000009[]; extern char ft000010[]; extern char ft000011[]; extern char ft000012[]; extern char ft000013[]; extern char ft000014[]; extern char ft000015[]; extern char ft000016[]; extern char ft000017[]; extern char ft000018[]; extern char ft000019[]; extern char ft000020[]; extern char ft000021[]; extern char ft000022[]; extern char ft000023[]; extern char ft000024[]; extern char ft000025[]; extern char ft000026[]; extern char LETTER01[]; extern char LETTER02[]; extern char LETTER03[]; extern char LETTER04[]; extern char LETTER05[]; extern char LETTER06[]; extern char LETTER07[]; extern char LETTER08[]; extern char LETTER09[]; extern char LETTER10[]; extern char LETTER11[]; extern char LETTER12[]; extern char LETTER13[]; extern char LETTER14[]; extern char LETTER15[]; extern char LETTER16[]; extern char LETTER17[]; extern char LETTER18[]; extern char LETTER19[]; extern char LETTER20[]; #asm _BALL01   dc.b $c4,$10,$20           dc.w _BALL02           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _BALL02   dc.b $c4,$10,$20           dc.w _BALL03           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL03   dc.b $c4,$10,$20           dc.w _BALL04           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL04   dc.b $c4,$10,$20           dc.w _BALL05           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL05   dc.b $c4,$10,$20           dc.w _BALL06           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL06   dc.b $c4,$10,$20           dc.w _BALL07           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL07   dc.b $c4,$10,$20           dc.w _BALL08           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL08   dc.b $c4,$10,$20           dc.w _BALL09           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL09   dc.b $c4,$10,$20           dc.w _BALL10           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL10   dc.b $c4,$10,$20           dc.w _BALL11           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL11   dc.b $c4,$10,$20           dc.w _BALL12           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL12   dc.b $c4,$10,$20           dc.w _BALL13           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL13   dc.b $c4,$10,$20           dc.w _BALL14           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL14   dc.b $c4,$10,$20           dc.w _BALL15           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL15   dc.b $c4,$10,$20           dc.w _BALL16           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL16   dc.b $c4,$10,$20           dc.w _BALL17           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL17   dc.b $c4,$10,$20           dc.w _BALL18           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL18   dc.b $c4,$10,$20           dc.w _BALL19           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL19   dc.b $c4,$10,$20           dc.w _BALL20           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _BALL20   dc.b $c4,$10,$20           dc.w 0           dc.w _balldata           dc.w 9,9           dc.w $100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER01 dc.b $c4,$10,$20           dc.w _LETTER02           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER02 dc.b $c4,$10,$20           dc.w _LETTER03           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER03 dc.b $c4,$10,$20           dc.w _LETTER04           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER04 dc.b $c4,$10,$20           dc.w _LETTER05           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER05 dc.b $c4,$10,$20           dc.w _LETTER06           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER06 dc.b $c4,$10,$20           dc.w _LETTER07           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER07 dc.b $c4,$10,$20           dc.w _LETTER08           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER08 dc.b $c4,$10,$20           dc.w _LETTER09           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER09 dc.b $c4,$10,$20           dc.w _LETTER10           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER10 dc.b $c4,$10,$20           dc.w _LETTER11           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER11 dc.b $c4,$10,$20           dc.w _LETTER12           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER12 dc.b $c4,$10,$20           dc.w _LETTER13           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER13 dc.b $c4,$10,$20           dc.w _LETTER14           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER14 dc.b $c4,$10,$20           dc.w _LETTER15           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER15 dc.b $c4,$10,$20           dc.w _LETTER16           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER16 dc.b $c4,$10,$20           dc.w _LETTER17           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER17 dc.b $c4,$10,$20           dc.w _LETTER18           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER18 dc.b $c4,$10,$20           dc.w _LETTER19           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER19 dc.b $c4,$10,$20           dc.w _LETTER20           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef _LETTER20 dc.b $c4,$10,$20           dc.w 0           dc.w 0,0,0,$100,$100           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef #endasm char *BALL[20] = {BALL01, BALL02, BALL03, BALL04, BALL05,                                              BALL06, BALL07, BALL08, BALL09, BALL10,                                              BALL11, BALL12, BALL13, BALL14, BALL15,                                              BALL16, BALL17, BALL18, BALL19, BALL20}; char *fontes[27] = {ft000000, ft000001, ft000002, ft000003, ft000004,                                                   ft000005, ft000006, ft000007, ft000008, ft000009,                                                   ft000010, ft000011, ft000012, ft000013, ft000014,                                                   ft000015, ft000016, ft000017, ft000018, ft000019,                                                   ft000020, ft000021, ft000022, ft000023, ft000024,                                                   ft000025, ft000026}; char *MESSAGE[20] = {LETTER01, LETTER02, LETTER03, LETTER04, LETTER05,                                                 LETTER06, LETTER07, LETTER08, LETTER09, LETTER10,                                                 LETTER11, LETTER12, LETTER13, LETTER14, LETTER15,                                                 LETTER16, LETTER17, LETTER18, LETTER19, LETTER20}; #include "sinus.h" #include "cosinus.h" #include "gotballs.pal" extern uchar VBLflag; #asm _VBLflag = $a0 #endasm #define VSYNC { ++VBLflag; while(VBLflag) {} } VBL() interrupt { VBLflag = 0; } #define NB_POINTS 20 struct Tball {   int  point_x,  point_y,  point_z;   int  target_x, target_y, target_z;   int  screen_x, screen_y, screen_z;   uchar order_set;      uchar order_val;      } ball[NB_POINTS]; uchar ball_order_val[NB_POINTS]; uchar ball_order_index = 0; register uchar joy; void WaitTicks(waitticks) uchar waitticks {      uchar tick;      tick = 0;      while (tick < waitticks) {        VSYNC;     ++tick;     }      } uchar WaitButton() {      uchar key;   while (!(key = joystick)) {}   while (joystick) {}   return key;      } void Point_add(pi, px, py, pz) uchar pi; int px; int py; int pz; {   if (pi < NB_POINTS) {           ball[pi].point_x = px;           ball[pi].point_y = py;           ball[pi].point_z = pz;           ball[pi].target_x = px;           ball[pi].target_y = py;           ball[pi].target_z = pz;           }      } int MUL(a, b) int a; int b; {      if (a == 0 || b == 0) { return 0; }      matha = a;      mathb = b;      while(PEEK(0xfc92) & 0x80) {}      return mathe;      } int mathacc at 0xfc6d; void ADD_Reset() { POKE(0xfc6c, 0); POKE(0xfc6e, 0); } void ADD_MUL(a, b) int a; int b; {      if (a == 0 || b == 0) { return 0; }      matha = a;      mathb = b;      while(PEEK(0xfc92) & 0x80) {}      } int ADD_Get() { return mathacc; } char mathe1 at 0xfc60; int  mathe2 at 0xfc61; char mathe3 at 0xfc63; uchar s; int MAT(e, c) int e; int c; {      if (e == 0 || c == 0) { return 0; }      s = 0;      if (c & 0x8000) { mathc = -c; s++; } else { mathc = c; }      mathe1 = 0x00;      if (e & 0x8000) { mathe2 = -e; s++; } else { mathe2 = e; }      mathe3 = 0x00;      while(PEEK(0xfc92) & 0x80) {}      if (s & 1) { return -matha; }      return matha;      } int DIV(e, c) int e; int c; {      if (e == 0 || c == 0) { return 0; }   s = 0;      if (c & 0x8000) { mathc = -c; s++; } else { mathc = c; }      if (e & 0x8000) { mathe = -e; s++; } else { mathe = e; }      mathe = e;      POKE(0xfc62, 0);      while(PEEK(0xfc92) & 0x80) {}      if (s & 1) { return -matha; }      return matha;      } uint univers_x_rot, univers_y_rot, univers_z_rot; void Vectors() {   uchar i, j, k;       int xx, yy, y2, zz, pp, mm;   // circle   Point_add( 0, 120,   0, 0);   Point_add( 1, 103, -59, 0);   Point_add( 2,  60,-103, 0);   Point_add( 3,   0,-120, 0);   Point_add( 4, -59,-103, 0);   Point_add( 5,-103, -60, 0);   Point_add( 6,-120,   0, 0);   Point_add( 7,-103,  59, 0);   Point_add( 8,-60, 103, 0);   Point_add( 9,  0, 120, 0);   Point_add(10,  59, 103, 0);   Point_add(11, 103,  60, 0);   // cube   Point_add(12, -20, -20, -10);   Point_add(13,  20, -20, -10);   Point_add(14,  20,  20, -10);   Point_add(15, -20,  20, -10);   Point_add(16, -20, -20,  10);   Point_add(17,  20, -20,  10);   Point_add(18,  20,  20,  10);   Point_add(19, -20,  20,  10);   for (;;) {     for (i = 0; i < NB_POINTS; ++i) {          xx = ball[i].point_x;          yy = ball[i].point_y;          zz = ball[i].point_z;          ADD_Reset();          ADD_MUL(cosinus[univers_z_rot],  yy);          ADD_MUL(sinus[univers_z_rot],   -xx);          y2 = ADD_Get();          ADD_Reset();          ADD_MUL(cosinus[univers_z_rot],  xx);          ADD_MUL(sinus[univers_z_rot],    yy);          xx = ADD_Get();          ADD_Reset();          ADD_MUL(cosinus[univers_x_rot],  y2);          ADD_MUL(sinus[univers_x_rot],    zz);          ball[i].target_y = ADD_Get();          ADD_Reset();          ADD_MUL(cosinus[univers_x_rot],  zz);          ADD_MUL(sinus[univers_x_rot],   -y2);          zz = ADD_Get();              ADD_Reset();          ADD_MUL(cosinus[univers_y_rot],  xx);          ADD_MUL(sinus[univers_y_rot],   -zz);          ball[i].target_x = ADD_Get();              ADD_Reset();          ADD_MUL(cosinus[univers_y_rot],  zz);          ADD_MUL(sinus[univers_y_rot],    xx);          ball[i].target_z = ADD_Get();          //              y2 = (MUL(cosinus[univers_z_rot], yy) - MUL(sinus[univers_z_rot], xx)) >> 8;          //              xx = (MUL(cosinus[univers_z_rot], xx) + MUL(sinus[univers_z_rot], yy)) >> 8;           //ball[i].target_y = (MUL(cosinus[univers_x_rot], y2) + MUL(sinus[univers_x_rot], zz)) >> 8;          //              zz = (MUL(cosinus[univers_x_rot], zz) - MUL(sinus[univers_x_rot], y2)) >> 8;          //ball[i].target_x = (MUL(cosinus[univers_y_rot], xx) - MUL(sinus[univers_y_rot], zz)) >> 8;          //ball[i].target_z = (MUL(cosinus[univers_y_rot], zz) + MUL(sinus[univers_y_rot], xx)) >> 8;              ball[i].screen_x = MAT(ball[i].target_x, ball[i].target_z + 256);          ball[i].screen_y = MAT(ball[i].target_y, ball[i].target_z + 256);          ball[i].screen_z = ball[i].target_z + 1000;       SCBX(BALL[i]) = 80 - (ball[i].screen_x << 1);       SCBY(BALL[i]) = 51 - (ball[i].screen_y << 1);       SCBNEXT(BALL[i]) = 0;       SCBHS(BALL[i]) = 256 + (ball[i].target_z << 1);       SCBVS(BALL[i]) = SCBHS(BALL[i]);          ball[i].order_set = 0;           ball_order_val[i] = 0;             if (joy = joystick) { break; }          }     ball_order_index = 0;     if (!joy) {          for (i = 0; i < NB_POINTS; ++i) {                      mm = -1;                  pp = 1500;                  for (k = 0; k < NB_POINTS; ++k) {                       if (ball[k].screen_z < pp && ball[k].order_set == 0) {                            pp = ball[k].screen_z;                            mm = k;                            }                       }                     if (mm > -1) {                          ball_order_val[ball_order_index] = mm;                          ball[mm].order_set = 1;                          if (ball_order_index < NB_POINTS) { ball_order_index++; }                          }               }          for (i = 0; i < NB_POINTS - 1; ++i) {                      SCBNEXT(BALL[ball_order_val[i]]) = BALL[ball_order_val[i + 1]];                }          DrawFBox(0, 0, 160, 102, 0);          DrawSprite(BALL[ball_order_val[0]]);          Text_display();                univers_x_rot += 1; if (univers_x_rot >= 255) { univers_x_rot -= 255; }                univers_y_rot += 3; if (univers_y_rot >= 255) { univers_y_rot -= 255; }                univers_z_rot += 5; if (univers_z_rot >= 255) { univers_z_rot -= 255; }                }     if (!joy) {          WaitTicks(1);          SwapBuffers();          }     else {          break;          }     }      } void Chaos() {   uchar i, j;   for (i = 0; i < NB_POINTS; ++i) {        Point_add(i, random() % 160, random() % 102, (NB_POINTS - i) >> 2);           ball[i].order_val = (random() % 4) + 1;     SCBHS(BALL[i]) = 256 - (ball[i].point_z << 5);     SCBVS(BALL[i]) = SCBHS(BALL[i]);        SCBNEXT(BALL[i]) = 0;        }   for (i = 0; i < NB_POINTS - 1; ++i) {            SCBNEXT(BALL[i]) = BALL[i + 1];           }   for (;;) {     for (i = 0; i < NB_POINTS; ++i) {       j = 5 - ball[i].point_z; if (j == 0) { j = 1; }       switch (ball[i].order_val) {            case 1:                 ball[i].point_x += j;                 ball[i].point_y += j;                          break;            case 2:                 ball[i].point_x -= j;                 ball[i].point_y -= j;                          break;            case 3:                 ball[i].point_x -= j;                 ball[i].point_y += j;                          break;            default:                 ball[i].point_x += j;                 ball[i].point_y -= j;                          break;            }          if (ball[i].point_y < 0 || ball[i].point_y > 102 || ball[i].point_x < 0 || ball[i].point_x > 160) {                  Point_add(i, random() % 160, random() % 102, ball[i].point_z);                     ball[i].order_val = (random() % 4) + 1;               }       SCBX(BALL[i]) = ball[i].point_x;                SCBY(BALL[i]) = ball[i].point_y;              if (joy = joystick) { break; }          }     if (!joy) {           DrawFBox(0, 0, 160, 102, 0);          DrawSprite(BALL[0]);          Text_display();       }     if (!joy) {          WaitTicks(1);          SwapBuffers();          }     else {          break;          }     }      } void Boing() {   uchar i;   int j;   for (i = 0; i < NB_POINTS; ++i) {        Point_add(i, random() % 160, 0, (random() % 256));     SCBHS(BALL[i]) = 256;     SCBVS(BALL[i]) = 256;        SCBNEXT(BALL[i]) = 0;        }   for (i = 0; i < NB_POINTS - 1; ++i) {            SCBNEXT(BALL[i]) = BALL[i + 1];           }   for (;;) {     for (i = 0; i < NB_POINTS; ++i) {       j = sinus[ball[i].point_z];       if (j < 0) { j = -j; }       ball[i].point_y = (102 - (MUL(j, 96) >> 7));                if (ball[i].point_y > 90) {               SCBHS(BALL[i]) = 256 + ((ball[i].point_y - 90) << 1);               SCBVS(BALL[i]) = 256 - ((ball[i].point_y - 90) << 4);                     }                else {               SCBHS(BALL[i]) = 256;               SCBVS(BALL[i]) = 256;                     }          ball[i].point_z += 3;          if (ball[i].point_z >= 255) {               ball[i].point_z -= 255;               }       SCBX(BALL[i]) = ball[i].point_x;                SCBY(BALL[i]) = ball[i].point_y;              if (joy = joystick) { break; }          }     if (!joy) {           DrawFBox(0, 0, 160, 102, 0);          DrawSprite(BALL[0]);          Text_display();       }     if (!joy) {          WaitTicks(1);          SwapBuffers();          }     else {          break;          }     }      } void Serpent() {   uchar i;   int j, k, l, m;   for (i = 0; i < NB_POINTS; ++i) {        Point_add(i, 0, 0, i << 2);     SCBHS(BALL[i]) = 120 + (i * 8);     if (i > 17) { SCBHS(BALL[i]) = 256; }     SCBVS(BALL[i]) = SCBHS(BALL[i]);        SCBNEXT(BALL[i]) = 0;        }   for (i = 0; i < NB_POINTS - 1; ++i) {            SCBNEXT(BALL[i]) = BALL[i + 1];           }   for (;;) {     for (i = 0; i < NB_POINTS; ++i) {       j = sinus[(ball[i].point_z * 2) % 256];       k = cosinus[(ball[i].point_z * 3) % 256];       ball[i].point_x = 80 - (MUL(j, 140) >> 8);       ball[i].point_y = 51 - (MUL(k, 80) >> 8);          ball[i].point_z += 5;          if (ball[i].point_z >= 255) {               ball[i].point_z -= 255;               }       SCBX(BALL[i]) = ball[i].point_x;                SCBY(BALL[i]) = ball[i].point_y;              if (joy = joystick) { break; }          }     if (!joy) {           DrawFBox(0, 0, 160, 102, 0);          DrawSprite(BALL[0]);          Text_display();       }     if (!joy) {          WaitTicks(1);          SwapBuffers();          }     else {          break;          }     }      } #define NB_LETTER 20 uchar text_line, text_all; uchar *text[13] = {      "GOTBALLS            ",       "BY RAJAH LONE       ",       "PRESS KEY TO CHANGE ",      "BALLS DISPLAY MODE  ",   "THANKS TO           ",      "COOPER OF PARADIZE  ",      "DBUG OF NEXT        ",      "KARRI VINCE FADEST  ",      "HELLO TO            ",      "FROST AND SECTOR ONE",      "MJJPRODS AND DUNE   ",      "MINZ SKWEEK ANATA   ",      "                    "}; void Text_set() {      uchar i, j;      text_all = 0;      for (i = 0; i < NB_LETTER; ++i) {           SCBX(MESSAGE[i]) = 2 + (i * 6);           SCBY(MESSAGE[i]) = -10 - (i * 10);           j = PEEK(text[text_line] + i);           if (j > 64 && j < 91) { j -= 64; } else { j = 0; }           SCBDATA(MESSAGE[i]) = fontes[j];           }      } void Text_display() {   uchar i;   int xt, yt;      for (i = 0; i < NB_LETTER; ++i) {        yt = SCBY(MESSAGE[i]);        if (yt < 70) { yt += 5; }        if (SCBY(LETTER20) == SCBY(LETTER01)) { text_all = 1; }     if (text_all == 1) { yt++; }        SCBY(MESSAGE[i]) = yt;     if (yt > 102) {          text_line++;          if (text_line > 12) { text_line = 0; }                Text_set();          }     }      DrawSprite(LETTER01);      } void main() {   joy = 0;       InitIRQ();       InstallIRQ(2, VBL);       EnableIRQ(2);   CLI;   _SetRGB(pal);   sprsys = _sprsys |= 0xc0;   SetBuffers(0xa000, 0xc000, 0);      text_line = 0;      Text_set();      univers_x_rot = 0;      univers_y_rot = 0;      univers_z_rot = 0;   while(1) {        Chaos();        while (joy = joystick) {}        Boing();        while (joy = joystick) {}        Serpent();        while (joy = joystick) {}     Vectors();        while (joy = joystick) {}     }   } est fourni pour apprentissage. A noter que la méthode du DrawFBox est plus secure pour effacer l'écran que la méthode du sprite 1 pixel zoomé à 160*102.

Grand merci au Jedi Coopy qui m'a aidé à tester tout ça, vu que j'ai pas encore codé le logiciel de transfert vers la cartouche de Karri. ça a été codé sur un pseudo ST (NoSTalgia et MagiC) et testé sur Handy MacOSX.

Voilà smile

2

Super, je teste ça dès que possible smile

Et moi qui allais te demander sur quoi tu bosses actuellement ^^

3

Excellent premier jet! top

Déja en news sur Lynxweb wink
Previously known as Damdam