Advertisement
Guest User

Sprite demo

a guest
Oct 11th, 2015
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.25 KB | None | 0 0
  1. #define POOL_MODE
  2. #define LOTS
  3.  
  4. void sortSprites(aSprite *list[], int count) {
  5.     //insertion sort
  6.     int x,y;
  7.     aSprite *tmp;
  8.    
  9.     for(x=1;x<count;x++) {
  10.         y=x;
  11.         while(y>0 && (list[y]->posY < list[y-1]->posY)) {
  12.             tmp=list[y];
  13.             list[y]=list[y-1];
  14.             list[y-1]=tmp;
  15.             y--;
  16.         }
  17.     }
  18. }
  19.  
  20. void aSpriteDemo() {
  21.     int x=87;
  22.     int y=136;
  23.     int relX,relY;
  24.     short showdebug=false;
  25.     aSprite demoSpr,demoSpr2,demoSpr3;
  26.     #ifdef POOL_MODE
  27.         #ifdef LOTS
  28.         aSprite demoSpr4,demoSpr5,demoSpr6,demoSpr7,demoSpr8,demoSpr9,demoSprA;
  29.         #endif
  30.     #endif
  31.     Picture ptr,tleft,bright;
  32.     short way1=JOY_UP,way2=JOY_UP;
  33.     uint *drawTable[16];
  34.     uint *drawTablePtr;
  35.     int sortSize;
  36.    
  37.     spritePool testPool;
  38.  
  39.     clearFixLayer();
  40.     volMEMWORD(0x401ffe)=0x7bbb; //BG color
  41.     initGfx();
  42.     jobMeterSetup(true);
  43.  
  44.     aSpriteInit(&demoSpr,&bmary_spr,1,16,x,y,0,FLIP_NONE);
  45.     aSpriteInit(&demoSpr2,&bmary_spr,5,16,160-16,y,0,FLIP_NONE);
  46.     aSpriteInit(&demoSpr3,&bmary_spr,9,16,160+16,y,0,FLIP_NONE);
  47.     #ifdef LOTS
  48.     aSpriteInit(&demoSpr4,&bmary_spr,9,16,160+32,146,0,FLIP_NONE);
  49.     aSpriteInit(&demoSpr5,&bmary_spr,9,16,160-32,156,0,FLIP_NONE);
  50.     aSpriteInit(&demoSpr6,&bmary_spr,9,16,160+48,166,0,FLIP_NONE);
  51.     aSpriteInit(&demoSpr7,&bmary_spr,9,16,160-48,176,0,FLIP_NONE);
  52.     aSpriteInit(&demoSpr8,&bmary_spr,9,16,160+10,186,0,FLIP_NONE);
  53.     aSpriteInit(&demoSpr9,&bmary_spr,9,16,160-10,196,0,FLIP_NONE);
  54.     aSpriteInit(&demoSprA,&bmary_spr,9,16,87,206,0,FLIP_NONE);
  55.     #endif
  56.    
  57.     palJobPut(16,bmary_spr_Palettes.palCount,&bmary_spr_Palettes.data);
  58.  
  59.     pictureInit(&ptr,&pointer,200,200,0,224,FLIP_NONE);
  60.     palJobPut(200,pointer_Palettes.palCount,&pointer_Palettes.data);
  61.  
  62.     pictureInit(&tleft,&topleft,201,201,0,224,FLIP_NONE);
  63.     pictureInit(&bright,&topleft,202,201,0,224,FLIP_XY);
  64.     palJobPut(201,topleft_Palettes.palCount,&topleft_Palettes.data);
  65.  
  66.     fixPrint(2,3,0,0,"1P \x12\x13\x10\x11: move sprite");
  67.     fixPrint(2,4,0,0,"1P AB: set animation");
  68.     fixPrint(2,5,0,0,"1P C: toggle outline");
  69.     fixPrint(2,6,0,0,"2P ABCD: flip mode");
  70.    
  71.     #ifdef POOL_MODE
  72.     spritePoolInit(&testPool,10,100);
  73.     drawTablePtr=(int*)drawTable;
  74.     *drawTablePtr++=0;
  75.     *drawTablePtr++=(uint)&demoSpr;
  76.     *drawTablePtr++=(uint)&demoSpr2;
  77.     *drawTablePtr++=(uint)&demoSpr3;
  78.     sortSize=3;
  79.         #ifdef LOTS
  80.         *drawTablePtr++=(uint)&demoSpr4;
  81.         *drawTablePtr++=(uint)&demoSpr5;
  82.         *drawTablePtr++=(uint)&demoSpr6;
  83.         *drawTablePtr++=(uint)&demoSpr7;
  84.         *drawTablePtr++=(uint)&demoSpr8;
  85.         *drawTablePtr++=(uint)&demoSpr9;
  86.         *drawTablePtr++=(uint)&demoSprA;
  87.         sortSize=10;
  88.         #endif
  89.     *drawTablePtr=0;
  90.  
  91.     sortSprites((aSprite*)&drawTable[1],sortSize);
  92.     spritePoolDrawList(&testPool,&drawTable[1]);
  93.     spritePoolClose(&testPool,false);
  94.     #else
  95.     aSpriteAnimate(&demoSpr);
  96.     aSpriteAnimate(&demoSpr2);
  97.     aSpriteAnimate(&demoSpr3);
  98.     #endif
  99.    
  100.     SCClose();
  101.     while(1) {
  102.         wait_vblank();
  103.  
  104.         p1=volMEMBYTE(P1_CURRENT);
  105.         p1e=volMEMBYTE(P1_EDGE);
  106.         p2=volMEMBYTE(P2_EDGE);
  107.         ps=volMEMBYTE(PS_CURRENT);
  108.        
  109.         if((ps&P1_START)&&(ps&P2_START)) {
  110.             clearSprites(1, 150);
  111.             clearSprites(200, 3);
  112.             SCClose();
  113.             wait_vblank();
  114.             return;
  115.         }
  116.  
  117.         if(p1&JOY_UP)   y--;
  118.         if(p1&JOY_DOWN) y++;
  119.         if(p1&JOY_LEFT) x--;
  120.         if(p1&JOY_RIGHT)    x++;
  121.  
  122.         while((volMEMWORD(0x3c0006)>>7)!=0x120); //wait raster line 16
  123.         jobMeterColor(JOB_BLUE);
  124.  
  125.         if(p1e&JOY_A)   aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_IDLE);
  126.         if(p1e&JOY_B)   aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_WALK);
  127.         if(p1e&JOY_C) {
  128.             if(showdebug) {
  129.                 //move debug stuff offscreen
  130.                 pictureSetPos(&ptr,0,224);
  131.                 pictureSetPos(&tleft,0,224);
  132.                 pictureSetPos(&bright,0,224);
  133.             }
  134.             showdebug^=1;
  135.         }
  136.         if(p2&JOY_A)    aSpriteSetFlip(&demoSpr,FLIP_NONE);
  137.         if(p2&JOY_B)    aSpriteSetFlip(&demoSpr,FLIP_X);
  138.         if(p2&JOY_C)    aSpriteSetFlip(&demoSpr,FLIP_Y);
  139.         if(p2&JOY_D)    aSpriteSetFlip(&demoSpr,FLIP_XY);
  140.  
  141.         aSpriteSetPos(&demoSpr,x,y);
  142.  
  143.         if(way1==JOY_UP) {
  144.             aSpriteMove(&demoSpr2,0,2);
  145.             if(demoSpr2.posY>220) way1=JOY_DOWN;
  146.         } else {
  147.             aSpriteMove(&demoSpr2,0,-2);
  148.             if(demoSpr2.posY<90) way1=JOY_UP;
  149.         }
  150.         if(way2==JOY_UP) {
  151.             aSpriteMove(&demoSpr3,0,1);
  152.             if(demoSpr3.posY>220) way2=JOY_DOWN;
  153.         } else {
  154.             aSpriteMove(&demoSpr3,0,-1);
  155.             if(demoSpr3.posY<90) way2=JOY_UP;
  156.         }
  157.  
  158.         #ifdef POOL_MODE
  159.         if(testPool.way==WAY_UP) {
  160.             sortSprites(&drawTable[1],sortSize);
  161.             jobMeterColor(JOB_PINK);
  162.             spritePoolDrawList(&testPool,&drawTable[1]);
  163.         } else {
  164.             sortSprites(&drawTable[1],sortSize);
  165.             jobMeterColor(JOB_PINK);
  166.             spritePoolDrawList(&testPool,drawTablePtr);
  167.         }
  168.         #else
  169.         aSpriteAnimate(&demoSpr);
  170.         aSpriteAnimate(&demoSpr2);
  171.         aSpriteAnimate(&demoSpr3);
  172.         #endif
  173.        
  174.         //aSprite debug info
  175.         jobMeterColor(JOB_BLACK);
  176.         if(showdebug) {
  177.             pictureSetPos(&ptr,x,y);
  178.             if(demoSpr.currentFlip&0x0001) relX=x-((demoSpr.currentFrame->tileWidth<<4)+demoSpr.currentStep->shiftX);
  179.                 else relX=x+demoSpr.currentStep->shiftX;
  180.             if(demoSpr.currentFlip&0x0002) relY=y-((demoSpr.currentFrame->tileHeight<<4)+demoSpr.currentStep->shiftY);
  181.                 else relY=y+demoSpr.currentStep->shiftY;
  182.             pictureSetPos(&tleft,relX,relY);
  183.             pictureSetPos(&bright,relX+((demoSpr.currentFrame->tileWidth-1)<<4),relY+((demoSpr.currentFrame->tileHeight-1)<<4));
  184.         }
  185.  
  186.         jobMeterColor(JOB_GREEN);
  187.         #ifdef POOL_MODE
  188.         spritePoolClose(&testPool,false);
  189.         #endif
  190.         jobMeterColor(JOB_GREEN);
  191.         SCClose();
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement