1

bah pareil quoi... #include <lynx.h> #include <lynxlib.h> #include <stdlib.h> // SPRDEMO3 // Démo pour montrer des sprites de 24*24 avec un centre à 12,12 // et tout ce petit monde partage la même palette // ---------------------------------------------------------------------- // // Créez les 9 sprites avec SPRPCK : // sprpck -t6 -S024024 -r009001 -p0 -a012012 mm.bmp // // -t6      --> BMP // -Swwwhhh --> 24*24 // -rxxxyyy --> 9images en 1 ligne // -p0      --> sortie en  .OBJ // yx.bmp   --> nom du fichier // // la palette est standard, 4 couleurs... // déclaration des 9 sprites: extern char mm000000[]; extern char mm000001[]; extern char mm000002[]; extern char mm000003[]; extern char mm000004[]; extern char mm000005[]; extern char mm000006[]; extern char mm000007[]; extern char mm000008[]; char *sprtab[9] = {mm000000, mm000001, mm000002, mm000003,                    mm000004, mm000005, mm000006, mm000007,                    mm000008}; extern char SCB1[]; #asm          _SCB1     dc.b $c0,$10,$20           dc.w 0,0           dc.w 0,0,$200,$200    ; zoom= x2           dc.b $01,$23,$45,$67,$89,$Ab,$cd,$ef #endasm // la palette #include "mm.pal" // Tableau des valeurs de retournement pour les sprites (on a 9 sprite pour 90° et 4 modificateur rotation/inversion qui permentent d'obtenir 36 positions soit une tous les 10°) hvflip[4] = {0xc0, 0xd0, 0xf0, 0xe0}; //définition des constantes des touches #define JOY_RIGHT  0x10 #define JOY_LEFT   0x20 #define JOY_UP     0x80 #define JOY_DOWN   0x40 #define BUTTON_OPTION1 0x08 #define BUTTON_OPTION2 0x04 #define BUTTON_LEFT    0x02 #define BUTTON_RIGHT   0x01 #define BUTTON_PAUSE   0x01 uchar VBLflag at 0xff; //incrémentation du flag, on boucle ensuite jusqu'à ce que l'IT le ramène à 0) #define VSYNC {++VBLflag;while( VBLflag );} VBL() interrupt {   IRQ_ENTRY();   VBLflag = 0; /* L'IT VBL vient d'intervenir, le flag est mis à 0 */   IRQ_EXIT(); } /*****************************/ /* Pause de durée variable   */ /*****************************/ WaitTicks(waitticks) uchar waitticks; {   uchar tick;   tick = 0;   while (tick < waitticks) //tant qu'on a pas atteint notre compteur de ticks      {      VSYNC;                //on attends une synchro verticale de l'écran      ++tick;               //on incrémente      } } /**********************************************/ /* idem à wait button sur les autres exemples */ /* sauf qu'il renvoie la touche               */ /**********************************************/ uchar GetButton() {    uchar key;    while ( !(key = joystick))       ;    return key; } /*********************/ /* main              */ /*********************/ main() { register uchar t, key;   InitIRQ();                        // initialisation des vecteurs d'irq   InstallIRQ(2,VBL);                // on init l'interruption VBL   EnableIRQ(2);                     // on autorise son fonctionnement   CLI;   SetBuffers(0x9000,0,0);           // déclaration du buffer d'écran   _SetRGB(pal);                     // Set the colour palette   DrawFBox(0, 0, 160, 102, 4);      // Colour 4 is dark gray   SCBX(SCB1) = 80;                  // milieu de l'écran X   SCBY(SCB1) = 51;                  //    "    "    "    Y   t=0;                    // t est la valeur courante de l'angle exprimée en dizaine de degrés (t=12 <=> angle= 120°)   for (;;)                      {      WaitTicks(5);           // Pause ( 5 VSYNCs )      SCB1[0] = hvflip[t/9];  // Determine le quart de 360° dans lequel on se trouve      if ((t/9) == 0 || (t/9) == 2)         SCBDATA(SCB1) = sprtab[t%9];      // ordre normal pour le quart 0 et 2      else         SCBDATA(SCB1) = sprtab[8-(t%9)];  // ordre inverse pour 1 et 3      DrawSprite(SCB1); affichage      // Get user input      key = GetButton();         // teste la touche      if (key == BUTTON_OPTION1) // si option1 est enfoncé         {         DrawFBox(0, 0, 160, 102, 4);      // Gris foncé         SCBHS(SCB1) = 0x100;              // zoomH= x1         SCBVS(SCB1) = 0x100;              // zoomV= x1         }      if (key == BUTTON_OPTION2) // si option2 est enfoncé         {         DrawFBox(0, 0, 160, 102, 4);         SCBHS(SCB1) = 0x200;              // zoomH= x2         SCBVS(SCB1) = 0x200;              // zoomV= x2         }      if (key & (BUTTON_LEFT | JOY_LEFT))         {         if (t==0) t = 4*9;    //si t=0 on met t on fait +2pi         --t;                  //on décrémente t         }      if (key & (BUTTON_RIGHT | JOY_RIGHT))         {         if (t==4*9-1) t = -1; // si t= 2pi-10°, on enlève 2pi         ++t;                  //on incrémente t         }      } // jusqu'à la ce que sinus(X) soit égal à 2 :) }
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2

au fait là encore si vous pigez pas, y'a moyen que je rentre plus dans le détail...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca