1

Bon voila, je me suis mis au C il y a 1 semaine et j'ai enfin réussi a faire un petit scroll.
Mais seulment, les sprites qui devraient étre clippés, disparaissent du buffer dès qu'ils
ont scrollé hors de l'écran. Quelles fonctions dois je utiliser alors???
Source:
void _main(void) {      INT_HANDLER ai1,ai5;            short x,y;      ClrScr();            ai1=GetIntVec(AUTO_INT_1);   ai5=GetIntVec(AUTO_INT_5);   SetIntVec(AUTO_INT_1,DUMMY_HANDLER);   SetIntVec(AUTO_INT_5,DUMMY_HANDLER);                  GrayOn();      for(x=0;x<MAP_X;x++){           for(y=0;y<MAP_Y;y++)                GrayClipSprite16_OR_R(16*x,16*y,16,sprites[(map[y][x])][0],sprites[(map[y][x])][1],GetPlane(0),GetPlane(1));      }      x=0;      y=0;      do {           if (_keytest(RR_LEFT)){                     ScrollRight160(GetPlane(0),100);                     ScrollRight160(GetPlane(1),100);                     x--;           }           if (_keytest(RR_RIGHT)){                ScrollLeft160(GetPlane(0),100);                ScrollLeft160(GetPlane(1),100);                x++;           }           if (_keytest(RR_UP)){                ScrollDown160(GetPlane(0),100);                ScrollDown160(GetPlane(1),100);                y--;           }           if (_keytest(RR_DOWN)){                ScrollUp160(GetPlane(0),100);                ScrollUp160(GetPlane(1),100);                y++;           }      } while (!_keytest(RR_ESC));            GrayOff();            SetIntVec(AUTO_INT_1,ai1);   SetIntVec(AUTO_INT_5,ai5);       }
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

2

Les fonctions ScrollXXX160 font quoi exactement ?

[edit] Je demandais surtout ça parceque je ne sais pas à quoi sert le "100" en paramètre. Mais quoi qu'il en soit, tu ne fais que scroller l'écran, donc tout ce qui en sort est perdu : tu ne réaffiches jamais rien. Il faut penser à réafficher les sprites qui devraient "rentrer" par le coté opposé de l'écran.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Le 100, c'est la hauteur. TI-89 = 160×100. smile
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

oui mais je suis totalement perdu pour les repérer dans la matrice "map".
ScollXXX160 c'est pour scroller (c de ExtGraph2) lol.
Sinon c'est trop bien vertel mais c'est pour des programmes en basic... #include <tigcclib.h> #include <extgraph.h> #define MAP_Y 6 #define MAP_X 10 unsigned char map[12][20]={ {5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5}, }; static unsigned short bushL[]={0x0, 0xE70, 0x15A8, 0x766E, 0x8A51, 0xA5A5, 0xB5AD, 0xDE7B, 0x6BD6, 0x5A5A, 0x45A2, 0x7DBE, 0x366C, 0x1FF8, 0xE70, 0x3C0}; static unsigned short bushD[]={0x0, 0xE70, 0x1188, 0x724E, 0x8A51, 0x8421, 0x8421, 0xDE7B, 0x63C6, 0x4242, 0x4422, 0x7C3E, 0x366C, 0x1FF8, 0xE70, 0x3C0}; static unsigned short bush2L[]={0x0, 0x180, 0x6246, 0x55AA, 0x4DB2, 0x566A, 0x5BDA, 0x2BD4, 0x1E78, 0x2BD4, 0x5A5A, 0x45A2, 0x7DBE, 0x420, 0x3C0, 0x0}; static unsigned short bush2D[]={0x0, 0x180, 0x6246, 0x542A, 0x4DB2, 0x4662, 0x4242, 0x2244, 0x1E78, 0x23C4, 0x4242, 0x4422, 0x7C3E, 0x420, 0x3C0, 0x0}; static unsigned short flowerL[]={0x180, 0x1248, 0x2DB4, 0x55AA, 0x4BD2, 0x97E9, 0xAFF5, 0x9FF9, 0xCFF3, 0xBFFD, 0xA425, 0xDBDB, 0xA185, 0xADB5, 0x524A, 0x2184}; static unsigned short flowerD[]={0x180, 0x1248, 0x2C34, 0x4422, 0x4812, 0x9009, 0x8001, 0x8001, 0xC003, 0xBFFD, 0xA425, 0x83C1, 0x8001, 0x8C31, 0x524A, 0x2184}; static unsigned short grassL[]={0x0, 0x7100, 0xA00, 0xA40, 0xA48, 0x20A, 0xA, 0x8, 0x8000, 0x5000, 0x5040, 0x4020, 0x624, 0x124, 0x120, 0x0}; static unsigned short grassD[]={0x0, 0x7100, 0xA00, 0xA40, 0x208, 0xA, 0x8, 0x0, 0x8000, 0x5000, 0x4040, 0x20, 0x624, 0x120, 0x0, 0x0}; static unsigned short mushL[]={0x780, 0x1F60, 0x3F38, 0x7F3C, 0xFF3E, 0xFEDE, 0xBDFE, 0x43FC, 0x3FF8, 0xBE0, 0xBC0, 0xBA0, 0xBA0, 0x820, 0x7C0, 0x0}; static unsigned short mushD[]={0x780, 0x1860, 0x2018, 0x4004, 0x8002, 0x8002, 0x8002, 0x4004, 0x3C18, 0xBE0, 0x840, 0x820, 0x820, 0x820, 0x7C0, 0x0}; static unsigned short plantL[]={0x0, 0xC003, 0xB81D, 0xB5AD, 0xBA5D, 0x5E7A, 0x2FF4, 0xF99F, 0xAE75, 0xB3CD, 0x5DBA, 0x2664, 0x1DB8, 0x17E8, 0x2FF4, 0x3FFC}; static unsigned short plantD[]={0x0, 0xC003, 0xB81D, 0x85A1, 0x8241, 0x4242, 0x2244, 0xF81F, 0x8E71, 0x8241, 0x4002, 0x2664, 0x1C38, 0x1008, 0x2004, 0x3FFC}; static unsigned short treeL[]={0x180, 0x240, 0x5A0, 0xBD0, 0x17E8, 0x2FF4, 0x5FFA, 0x3BDC, 0x17E8, 0x2FF4, 0x5FFA, 0xAFF5, 0x9189, 0x6E76, 0x5A0, 0x7E0}; static unsigned short treeD[]={0x180, 0x240, 0x420, 0x810, 0x1008, 0x2004, 0x4002, 0x381C, 0x1008, 0x2004, 0x4002, 0x8001, 0x9189, 0x6E76, 0x420, 0x7E0}; static unsigned short tree2L[]={0x1BEC, 0x24BE, 0x7EC9, 0xD7FB, 0x6B3F, 0xBAAD, 0xBFE5, 0xFAB7, 0x2B5D, 0x2D54, 0x1AE8, 0x27F4, 0x5BDA, 0x45A4, 0x3A58, 0x180}; static unsigned short tree2D[]={0x1BEC, 0x2496, 0x7EC9, 0x957B, 0x633E, 0xBAA5, 0xAEE5, 0xDAB7, 0x2B1D, 0x2914, 0x1808, 0x2004, 0x4002, 0x4424, 0x3A58, 0x180}; short *sprites[8][2]={ {grassL,grassD}, {bushL,bushD}, {bush2L,bush2D}, {flowerL,flowerD}, {mushL,mushD}, {plantL,plantD}, {treeL,treeD}, {tree2L,tree2D}}; void _main(void) {      INT_HANDLER ai1,ai5;            short x,y;      ClrScr();            ai1=GetIntVec(AUTO_INT_1);   ai5=GetIntVec(AUTO_INT_5);   SetIntVec(AUTO_INT_1,DUMMY_HANDLER);   SetIntVec(AUTO_INT_5,DUMMY_HANDLER);                  GrayOn();      for(x=0;x<MAP_X;x++){           for(y=0;y<MAP_Y;y++)                GrayClipSprite16_OR_R(16*x,16*y,16,sprites[(map[y][x])][0],sprites[(map[y][x])][1],GetPlane(0),GetPlane(1));      }      x=0;      y=0;      do {           if (_keytest(RR_LEFT)){                     ScrollRight160(GetPlane(0),100);                     ScrollRight160(GetPlane(1),100);                     x--;           }           if (_keytest(RR_RIGHT)){                ScrollLeft160(GetPlane(0),100);                ScrollLeft160(GetPlane(1),100);                x++;           }           if (_keytest(RR_UP)){                ScrollDown160(GetPlane(0),100);                ScrollDown160(GetPlane(1),100);                y--;           }           if (_keytest(RR_DOWN)){                ScrollUp160(GetPlane(0),100);                ScrollUp160(GetPlane(1),100);                y++;           }      } while (!_keytest(RR_ESC));            GrayOff();            SetIntVec(AUTO_INT_1,ai1);   SetIntVec(AUTO_INT_5,ai5);       }
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

5

DoomAngel :
Mais seulment, les sprites qui devraient étre clippés, disparaissent du buffer dès qu'ils ont scrollé hors de l'écran.

C'est normal.
Quelles fonctions dois je utiliser alors???

Soit tu redessines les sprites du bord que tu rentres dans l'écran (donc si tu fais un scroll vers la gauche, les sprites du bord de droite et vice-versa), soit tu utilises un Tilemap Engine qui fait tout pour toi, par exemple le Tilemap Engine de Sasume (http://perso.wanadoo.fr/jackiechan68k) ou la version que j'ai modifiée (http://members.chello.at/gerhard.kofler/kevin/ti89prog/tilemap.zip).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Je ne sais pas trop ce que tu veux faire, mais a priori ton scrolling a un problème : tu incrémentes x / y d'1 à chaque fois (ce qui correspond à un décalage d'un tile complet chaque fois, c'est à dire 16 pixels), mais en même temps tu fais défiler l'écran d'un seul pixel avec les fonctions de Scrolling.

Si tu veux apprendre, je ne te conseille pas d'utiliser le Tilemap de Sasume : il fait tout pour toi, sans que tu saches comment ça marche. Par contre si tu veux uniquement avoir un truc utilisable rapidement, alors c'est la bonne solution.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

Ben c'est que j'ai déja essayé le Tilemap Engine mais ca ma pas du tout convaicu: ya un gros bug (si c'en est un)
Par exemple, dans l'exemple 3, la map doit faire du 16 sprites en hauteur et 32 sprites en longueur.
Or sur la ti je n'ai compté que 14 x 27. Ce qui fait que c'est bizarre.
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

8

Non, c'est normal. C'est 30×16 sprites 8×8 sur TI-92+ (écran 240×128) et 20×12,5 sprites 8×8 sur TI-89 (écran 160×100).
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

nan moi je parlais de la map totale en scrollant d'un bout à l'autre on n'a que 14x27 sprites de 16² alors que dans le code source
il ya a bien marqué 16x32.
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

10

Parce que sur TI-89, il y a une partie de l'écran qui n'est pas visible (80 pixels sur la droite et 28 pixels en bas ce qui empêche de voir 5 tiles à droite et 2 tiles en bas)
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

11

oooh ben comment on fait alors pour le tilemap engine sur ti89 si il manque toujours des sprites.
Sinon j'ai trouvé une solution pour du scrolling mais je suis obligé d'utiliser des fonctions en plus.
Donc je voulais savoir si il était possible de faire 2 PortSet en meme temps.
Ex:
void* virtual_LIGHT=malloc(LCD_SIZE);
void* virtual_DARK=malloc(LCD_SIZE);
PortSet(virtual_LIGHT,239,127);
PortSet(virtual_DARK,239,127); #include <tigcclib.h> #include <extgraph.h> #define MAP_Y 7 #define MAP_X 10 unsigned char map[12][20]={ {5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {7,1,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,4,5}, {5,1,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3,4,7}, {6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5,6,5}, }; static unsigned short bushL[]={0x0, 0xE70, 0x15A8, 0x766E, 0x8A51, 0xA5A5, 0xB5AD, 0xDE7B, 0x6BD6, 0x5A5A, 0x45A2, 0x7DBE, 0x366C, 0x1FF8, 0xE70, 0x3C0}; static unsigned short bushD[]={0x0, 0xE70, 0x1188, 0x724E, 0x8A51, 0x8421, 0x8421, 0xDE7B, 0x63C6, 0x4242, 0x4422, 0x7C3E, 0x366C, 0x1FF8, 0xE70, 0x3C0}; static unsigned short bush2L[]={0x0, 0x180, 0x6246, 0x55AA, 0x4DB2, 0x566A, 0x5BDA, 0x2BD4, 0x1E78, 0x2BD4, 0x5A5A, 0x45A2, 0x7DBE, 0x420, 0x3C0, 0x0}; static unsigned short bush2D[]={0x0, 0x180, 0x6246, 0x542A, 0x4DB2, 0x4662, 0x4242, 0x2244, 0x1E78, 0x23C4, 0x4242, 0x4422, 0x7C3E, 0x420, 0x3C0, 0x0}; static unsigned short flowerL[]={0x180, 0x1248, 0x2DB4, 0x55AA, 0x4BD2, 0x97E9, 0xAFF5, 0x9FF9, 0xCFF3, 0xBFFD, 0xA425, 0xDBDB, 0xA185, 0xADB5, 0x524A, 0x2184}; static unsigned short flowerD[]={0x180, 0x1248, 0x2C34, 0x4422, 0x4812, 0x9009, 0x8001, 0x8001, 0xC003, 0xBFFD, 0xA425, 0x83C1, 0x8001, 0x8C31, 0x524A, 0x2184}; static unsigned short grassL[]={0x0, 0x7100, 0xA00, 0xA40, 0xA48, 0x20A, 0xA, 0x8, 0x8000, 0x5000, 0x5040, 0x4020, 0x624, 0x124, 0x120, 0x0}; static unsigned short grassD[]={0x0, 0x7100, 0xA00, 0xA40, 0x208, 0xA, 0x8, 0x0, 0x8000, 0x5000, 0x4040, 0x20, 0x624, 0x120, 0x0, 0x0}; static unsigned short mushL[]={0x780, 0x1F60, 0x3F38, 0x7F3C, 0xFF3E, 0xFEDE, 0xBDFE, 0x43FC, 0x3FF8, 0xBE0, 0xBC0, 0xBA0, 0xBA0, 0x820, 0x7C0, 0x0}; static unsigned short mushD[]={0x780, 0x1860, 0x2018, 0x4004, 0x8002, 0x8002, 0x8002, 0x4004, 0x3C18, 0xBE0, 0x840, 0x820, 0x820, 0x820, 0x7C0, 0x0}; static unsigned short plantL[]={0x0, 0xC003, 0xB81D, 0xB5AD, 0xBA5D, 0x5E7A, 0x2FF4, 0xF99F, 0xAE75, 0xB3CD, 0x5DBA, 0x2664, 0x1DB8, 0x17E8, 0x2FF4, 0x3FFC}; static unsigned short plantD[]={0x0, 0xC003, 0xB81D, 0x85A1, 0x8241, 0x4242, 0x2244, 0xF81F, 0x8E71, 0x8241, 0x4002, 0x2664, 0x1C38, 0x1008, 0x2004, 0x3FFC}; static unsigned short treeL[]={0x180, 0x240, 0x5A0, 0xBD0, 0x17E8, 0x2FF4, 0x5FFA, 0x3BDC, 0x17E8, 0x2FF4, 0x5FFA, 0xAFF5, 0x9189, 0x6E76, 0x5A0, 0x7E0}; static unsigned short treeD[]={0x180, 0x240, 0x420, 0x810, 0x1008, 0x2004, 0x4002, 0x381C, 0x1008, 0x2004, 0x4002, 0x8001, 0x9189, 0x6E76, 0x420, 0x7E0}; static unsigned short tree2L[]={0x1BEC, 0x24BE, 0x7EC9, 0xD7FB, 0x6B3F, 0xBAAD, 0xBFE5, 0xFAB7, 0x2B5D, 0x2D54, 0x1AE8, 0x27F4, 0x5BDA, 0x45A4, 0x3A58, 0x180}; static unsigned short tree2D[]={0x1BEC, 0x2496, 0x7EC9, 0x957B, 0x633E, 0xBAA5, 0xAEE5, 0xDAB7, 0x2B1D, 0x2914, 0x1808, 0x2004, 0x4002, 0x4424, 0x3A58, 0x180}; short *sprites[8][2]={ {grassL,grassD}, {bushL,bushD}, {bush2L,bush2D}, {flowerL,flowerD}, {mushL,mushD}, {plantL,plantD}, {treeL,treeD}, {tree2L,tree2D}}; short mod16(short x); void DRAWMAP(short x, short y); void _main(void) {      INT_HANDLER ai1,ai5;            short x=0,y=0,realX,realY,tmpX=0,tmpY=0;      ClrScr();            ai1=GetIntVec(AUTO_INT_1);   ai5=GetIntVec(AUTO_INT_5);   SetIntVec(AUTO_INT_1,DUMMY_HANDLER);   SetIntVec(AUTO_INT_5,DUMMY_HANDLER);            GrayOn();            DRAWMAP(x,y);            do {           realX=mod16(x);           realY=mod16(y);                                if (x!=tmpX || y!=tmpY)                DRAWMAP(x,y);                      tmpX=x;           tmpY=y;                      if (_keytest(RR_LEFT) && x>0){                ScrollRight160(GetPlane(0),100);                ScrollRight160(GetPlane(1),100);                x--;                               }           if (_keytest(RR_RIGHT) && x<160){                ScrollLeft160(GetPlane(0),100);                ScrollLeft160(GetPlane(1),100);                x++;           }           if (_keytest(RR_UP) && y>0){                ScrollDown160(GetPlane(0),100);                ScrollDown160(GetPlane(1),100);                y--;           }           if (_keytest(RR_DOWN) && y<95){                ScrollUp160(GetPlane(0),100);                ScrollUp160(GetPlane(1),100);                y++;           }                                       } while (!_keytest(RR_ESC));            GrayOff();            SetIntVec(AUTO_INT_1,ai1);   SetIntVec(AUTO_INT_5,ai5);       } short mod16(short x) {           return (x-(x%16))/16; } void DRAWMAP(short x, short y) {           short i=0,j=0;            for( i = mod16(x); i < (mod16(x)+11); i++)             for( j = mod16(y); j < (mod16(y)+7); j++)                   GrayClipSprite16_OR_R((16*i)-x,(16*j)-y, 16, sprites[(map[j][i])][0], sprites[(map[j][i])][1],GetPlane(0),GetPlane(1)); }
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)

12

Sur TI-89, tu peux rajouter _89 au nom de la fonction pour n'afficher que sur la partie visible d'une TI-89 (en plus, elles sont bien plus rapides).
Sinon, au pire, tu peux permettre de scroller jusqu'au bout sur 89, mais ça veut dire que tu écriras n'importe quoi sur la partie invisible de l'écran (enfin, surtout si tu scrolles jusqu'en bas de la map), mais ce n'est pas si grave.
Et enfin, tu peux prévoir une bordure sur ta map, qui sera affichée sur la partie non visible de l'écran quand on sera au bout de la map.

Mais c'est vrai que c'est pas cool cet écran de TI-89...
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

13

./11> Non, tu ne peux pas faire 2 PortSet.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

14

merci pour les infos
Vive! la Ti-89!
(Mon anneau pylorique est complètement fermé. C'est le résultat de la proximité de cet individu.)