PA_Sprite.h

Aller à la documentation de ce fichier.
00001 #ifndef _PA_Sprite
00002 #define _PA_Sprite
00003 
00004 
00005 
00012 //#include "../PA.h"
00013 
00014 
00015 #define EWRAM_DATA   __attribute__((section(".ewram")))
00016 #define EWRAM_BSS    __attribute__((section(".sbss")))
00017 #define PA_Cos(angle) PA_SIN[((angle) + 128)&511]
00018 #define PA_Sin(angle) PA_SIN[((angle))&511]
00019 extern const s16 PA_SIN[512]; 
00020 
00021 #define MAX_DRAW 16  // Maximum 16 sprites dessinables...
00022 
00023 
00025 // Système de sprites
00027 
00028 
00029 #define OBJ_SIZE_8X8      0,0
00030 #define OBJ_SIZE_16X16    0,1
00031 #define OBJ_SIZE_32X32    0,2
00032 #define OBJ_SIZE_64X64    0,3
00033 #define OBJ_SIZE_16X8     1,0
00034 #define OBJ_SIZE_32X8     1,1
00035 #define OBJ_SIZE_32X16    1,2
00036 #define OBJ_SIZE_64X32    1,3
00037 #define OBJ_SIZE_8X16     2,0
00038 #define OBJ_SIZE_8X32     2,1
00039 #define OBJ_SIZE_16X32    2,2
00040 #define OBJ_SIZE_32X64    2,3
00041 
00042 typedef struct {
00043        u8 lx, ly;
00044 } PA_sizes;
00045 
00046 extern const PA_sizes PA_size[3][4];
00047 
00048 
00049 #define BITS_16 65535
00050 #define ALL_BUT(ATR) (BITS_16 - ATR)
00051 
00052 #define OBJ_X 511 //511, debugging...
00053 #define OBJ_Y 255
00054 #define OBJ_ROT 256
00055 #define ALL_BUT_ROTSET 49663  // Numéro du rotset
00056 #define ALL_BUT_PAL 4095
00057 
00058 #define DBLSIZE 512
00059 #define N_COLORS (1 << 13)
00060 #define OBJ_MODE 3072
00061 #define OBJ_MOSAIC 4096
00062 #define OBJ_HFLIP 4096
00063 #define OBJ_VFLIP 8192
00064 
00065 #define OBJ_GFX 1023
00066 #define OBJ_PRIO 3072
00067 
00068 #define COLORS_256 1
00069 #define COLORS_16 0
00070 
00071 
00072 
00073 #define MEM_DECAL 5
00074 #define NUMBER_DECAL 7
00075 
00076 
00077 
00078 // Mémoire gfx
00079 typedef struct {
00080    u16 mem_block;  // Emplacement en mémoire, de 0 à 1023
00081    u16 free; // Doonées libres en ce point
00082 } mem_usage;
00083 
00084 extern u16 n_free_mem[2]; // nombre d'emplacements libres
00085 extern u8 used_mem[2][1024]; // Note la quantité de mémoire utilisée en chaque point de la mémoire pour pouvoir effacer les gfx...
00086 extern u8 obj_per_gfx[2][1024]; // Nombre de sprites utilisant un gfx donné...
00087 extern mem_usage free_mem[2][1024];
00088 
00089 extern u16 FirstGfx[2];
00090 
00091 extern const u16 PA_obj_sizes[4][3];
00092 
00093 typedef struct {
00094    u16 atr0, atr1, atr2, atr3;
00095 }obj_inf;
00096 extern obj_inf PA_obj[2][128];  // Les 128 premiers pour l'écran du haut, et encore 128 pour l'écran du bas...
00097 
00098 
00099 // Infos pour dessiner sur les sprites
00100 /*
00101 typedef struct {
00102        bool screen; // Ecran
00103        u8 sprite;           // Numéro du sprite
00104        bool wasdrawing; // Si on dessinait dessus ou pas avant
00105        s8 x, y;  // Position x et y d'avant
00106        u8 hsize, vsize; // Tailles
00107        u8 n_colors; // Nombre de couleurs
00108        u8 drawsize;
00109        u32 *gfxpointer; // Pour dessiner à l'écran directement
00110 } PA_DrawSprites;
00111 */
00112 
00113 
00114 //extern PA_DrawSprites PA_DrawSprite[MAX_DRAW];
00115 
00116 // Pour le dessin sur sprite
00117 extern unsigned char *PA_SpriteBuffer[MAX_DRAW]; // Pointeurs vers les buffers  que l'on créera à la volée
00118 
00119 extern u16 *PA_SpriteAnimP[2][1024];
00120 
00121 
00122 #define ANIM_LOOP 0 // loop around
00123 #define ANIM_UPDOWN 1 // back and forth animation
00124 
00125 #define ANIM_ONESHOT ANIM_LOOP, 1
00126 #define ANIM_INFINITE ANIM_LOOP, -1
00127 
00128 
00129 
00130 extern s16 nspriteanims; // Number of animated sprites currently...
00131 typedef struct{
00132        s32 firstframe, lastframe, currentframe; // frames...
00133        s8 framechange; // 1 by default, -1 to go back...
00134        s32 time; // Time...
00135        u8 lx, ly; // Sprite sizes
00136        bool colors; 
00137        s16 speed;
00138        bool play;
00139        u16 *gfx; // gfx pointer
00140        u8 type;
00141        s32 ncycles;
00142 } spriteanim;
00143 extern spriteanim spriteanims[2][128]; // Init the array on PAlib init...
00144 
00145 //#define spriteanimsize 40
00146 
00147 
00148 
00149 
00150 
00151 
00152 
00153 
00154 
00155 
00156 #define OAM0 0x07000000
00157 #define OAM1 0x07000400
00158 
00159 
00171 //#define PA_UpdateOAM() DMA_Copy((void*)PA_obj, (void*)OAM0, 512, DMA_32NOW)
00172 #define PA_UpdateOAM()s16 i;\
00173        for (i = 0; i < 256; i++) {\
00174               OAM[(i << 2)] = PA_obj[0][i].atr0;\
00175               OAM[1+(i << 2)] = PA_obj[0][i].atr1;\
00176               OAM[2+(i << 2)] = PA_obj[0][i].atr2;\
00177               OAM[3+(i << 2)] = PA_obj[0][i].atr3;}
00178 
00179 
00185 #define PA_UpdateOAM0() DMA_Copy((void*)PA_obj, (void*)OAM0, 256, DMA_32NOW)
00186 
00192 #define PA_UpdateOAM1() DMA_Copy((void*)PA_obj + 256, (void*)OAM1, 256, DMA_32NOW)
00193 
00194 
00216 u16 PA_CreateGfx(bool screen, void* obj_data, u8 obj_shape, u8 obj_size, u8 color_mode);
00217 
00223 void PA_ResetSpriteSys(void);
00224 
00225 
00226 
00259 extern inline void PA_CreateSprite(bool screen, u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, s16 x, s16 y) {
00260    PA_obj[screen][obj_number].atr2 = PA_CreateGfx(screen, obj_data, obj_shape, obj_size, color_mode) + (palette << 12);
00261    PA_obj[screen][obj_number].atr0 = (y&OBJ_Y) + (color_mode << 13) + (obj_shape << 14);
00262    PA_obj[screen][obj_number].atr1 = (x & OBJ_X) + (obj_size << 14);
00263 };
00264 
00315 extern inline void PA_CreateSpriteEx(bool screen, u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, u8 obj_mode, bool mosaic, bool hflip, bool vflip, u8 prio, bool dblsize, s16 x, s16 y) {
00316    PA_obj[screen][obj_number].atr2 = PA_CreateGfx(screen, obj_data, obj_shape, obj_size, color_mode) + (prio << 10) + (palette << 12);
00317    PA_obj[screen][obj_number].atr0 = (y&OBJ_Y) + (dblsize << 9) + (obj_mode << 10) + (mosaic << 12) + ((color_mode) << 13) + (obj_shape << 14);
00318    PA_obj[screen][obj_number].atr1 = (x & OBJ_X) + (hflip << 12) + (vflip << 13) + (obj_size << 14);
00319 };
00320 
00321 
00322 
00323 
00324 
00366 extern inline void PA_Create16bitSpriteEx(bool screen, u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, bool mosaic, bool hflip, bool vflip, u8 prio, bool dblsize, s16 x, s16 y){
00367    PA_obj[screen][obj_number].atr2 = PA_CreateGfx(screen, obj_data, obj_shape, obj_size, 2) + (prio << 10) + (15 << 12);
00368    PA_obj[screen][obj_number].atr0 = (y&OBJ_Y) + (dblsize << 9) + (3 << 10) + (mosaic << 12) + (0 << 13) + (obj_shape << 14);
00369    PA_obj[screen][obj_number].atr1 = (x & OBJ_X) + (hflip << 12) + (vflip << 13) + (obj_size << 14);
00370 }
00371 
00372 
00373 
00400 extern inline void PA_Create16bitSprite(bool screen, u8 obj_number, void* obj_data, u8 obj_shape, u8 obj_size, s16 x, s16 y){
00401 PA_Create16bitSpriteEx(screen, obj_number, obj_data, obj_shape, obj_size, 0, 0, 0, 0, 0, x, y);
00402 }
00403 
00404 
00405 
00406 
00439 extern inline void PA_CreateSpriteFromGfx(bool screen, u8 obj_number, u16 obj_gfx, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, s16 x, s16 y) {
00440    PA_obj[screen][obj_number].atr2 = obj_gfx + (palette << 12);
00441    PA_obj[screen][obj_number].atr0 = (y&OBJ_Y) + (color_mode << 13) + (obj_shape << 14);
00442    PA_obj[screen][obj_number].atr1 = (x & OBJ_X) + (obj_size << 14);
00443    ++obj_per_gfx[screen][obj_gfx];
00444 };
00445 
00496 extern inline void PA_CreateSpriteExFromGfx(bool screen, u8 obj_number, u16 obj_gfx, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, u8 obj_mode, bool mosaic, bool hflip, bool vflip, u8 prio, bool dblsize, s16 x, s16 y) {
00497    PA_obj[screen][obj_number].atr2 = obj_gfx + (prio << 10) + (palette << 12);
00498    PA_obj[screen][obj_number].atr0 = (y&OBJ_Y) + (dblsize << 9) + (obj_mode << 10) + (mosaic << 12) + (color_mode << 13) + (obj_shape << 14);
00499    PA_obj[screen][obj_number].atr1 = (x & OBJ_X) + (hflip << 12) + (vflip << 13) + (obj_size << 14);
00500    ++obj_per_gfx[screen][obj_gfx];
00501 };
00502 
00503 
00518 #define PA_UpdateSpriteGfx(screen, obj_number, obj_data) PA_UpdateGfx(screen, PA_GetSpriteGfx(screen, obj_number), obj_data)
00519 
00534 #include "PA_Text.h"
00535 #include "PA_Math.h"
00536 
00537 extern inline void PA_UpdateGfx(bool screen, u16 gfx_number, void *obj_data) {
00538        DMA_Copy((obj_data), (void*)(SPRITE_GFX1 + (0x200000 *  (screen)) + ((gfx_number) << NUMBER_DECAL)), (used_mem[screen][gfx_number] << MEM_DECAL), DMA_32NOW);
00539 //     PA_OutputText(1, 25, PA_Rand()&15, "%dgfx   ", gfx_number);
00540 }
00541 
00542 
00558 extern inline void PA_UpdateGfxAndMem(bool screen, u8 gfx_number, void *obj_data){
00559        DMA_Copy((obj_data), (void*)(SPRITE_GFX1 + (0x200000 *  (screen)) + ((gfx_number) << NUMBER_DECAL)), (used_mem[screen][gfx_number] << MEM_DECAL), DMA_32NOW);
00560        PA_SpriteAnimP[screen][gfx_number] = (u16*)obj_data; // mémorise la source de l'image...
00561 }
00562 
00563 
00564 
00565 
00577 void PA_DeleteGfx(bool screen, u16 obj_gfx);
00578 
00579 
00591 void PA_DeleteSprite(bool screen, u8 obj_number);
00592 
00593 
00609 #define PA_SetSpriteRotEnable(screen, sprite, rotset) {PA_obj[screen][sprite].atr0 |= OBJ_ROT;  PA_obj[screen][sprite].atr1 = (PA_obj[screen][sprite].atr1 & ALL_BUT_ROTSET) + ((rotset) << 9);}
00610 
00622 #define PA_SetSpriteRotDisable(screen, sprite) {PA_obj[screen][sprite].atr0 &= ALL_BUT(OBJ_ROT);  PA_obj[screen][sprite].atr1 &= ALL_BUT_ROTSET;}
00623 
00624 
00646 extern inline void PA_SetRotset(bool screen, u8 rotset, s16 angle, u16 zoomx, u16 zoomy) {
00647 u8 obj_num = (rotset << 2);
00648        PA_obj[screen][obj_num].atr3 = (PA_Cos(angle) * zoomx) >> 8;
00649        PA_obj[screen][obj_num + 1].atr3 = (-PA_Sin(angle) * zoomy) >> 8;
00650        PA_obj[screen][obj_num + 2].atr3 = (PA_Sin(angle) * zoomx) >> 8;
00651        PA_obj[screen][obj_num + 3].atr3 = (PA_Cos(angle) * zoomy) >> 8;
00652 }
00653 
00668 extern inline void PA_SetRotsetNoZoom(bool screen, u8 rotset, s16 angle)   {
00669 u8 obj_num = (rotset << 2);
00670        PA_obj[screen][obj_num].atr3 = PA_Cos(angle);
00671        PA_obj[screen][obj_num + 1].atr3 = -PA_Sin(angle);
00672        PA_obj[screen][obj_num + 2].atr3 = PA_Sin(angle);
00673        PA_obj[screen][obj_num + 3].atr3 = PA_Cos(angle);
00674 }
00675 
00693 extern inline void PA_SetRotsetNoAngle(bool screen, u8 rotset, u16 zoomx, u16 zoomy) {
00694 u8 obj_num = (rotset << 2);
00695        PA_obj[screen][obj_num].atr3 = zoomx;
00696        PA_obj[screen][obj_num + 1].atr3 = 0;
00697        PA_obj[screen][obj_num + 2].atr3 = 0;
00698        PA_obj[screen][obj_num + 3].atr3 = zoomy;
00699 }
00700 
00701 
00702 
00703 
00704 
00705 
00706 
00723 #define PA_SetSpriteX(screen, obj, x) PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_X)) + ((x) & OBJ_X)
00724 
00737 #define PA_GetSpriteX(screen, obj) (PA_obj[screen][obj].atr1 & (OBJ_X))
00738 
00739 
00754 #define PA_SetSpriteY(screen, obj, y) PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(OBJ_Y)) + ((y) & OBJ_Y)
00755 
00768 #define PA_GetSpriteY(screen, obj) (PA_obj[screen][obj].atr0 & OBJ_Y)
00769 
00770 
00771 
00789 extern inline void PA_SetSpriteXY(bool screen, u8 sprite, s16 x, s16 y) {
00790        PA_SetSpriteX(screen, sprite, x); 
00791        PA_SetSpriteY(screen, sprite, y);
00792 }
00793 
00794 
00795 
00810 #define PA_SetSpritePal(screen, obj, pal) PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT_PAL) + ((pal) << 12)
00811 
00823 #define PA_GetSpritePal(screen, obj) (PA_obj[screen][obj].atr2 >> 12)
00824 
00825 
00840 #define PA_SetSpriteDblsize(screen, obj, dblsize) PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(DBLSIZE)) + ((dblsize) << 9)
00841 
00853 #define PA_GetSpriteDblsize(screen, obj) ((PA_obj[screen][obj].atr0 & DBLSIZE) >> 9)
00854 
00855 
00870 #define PA_SetSpriteColors(screen, sprite, n_colors) PA_obj[screen][sprite].atr0 = (PA_obj[screen][sprite].atr0 & ALL_BUT(N_COLORS)) + ((n_colors) << 13)
00871 
00883 #define PA_GetSpriteColors(screen, sprite) ((PA_obj[screen][sprite].atr0 & N_COLORS) >> 13)
00884 
00885 
00886 
00901 #define PA_SetSpriteMode(screen, sprite, obj_mode) PA_obj[screen][sprite].atr0 = (PA_obj[screen][sprite].atr0 & ALL_BUT(OBJ_MODE)) + ((obj_mode) << 10)
00902 
00914 #define PA_GetSpriteMode(screen, obj) ((PA_obj[screen][obj].atr0 & OBJ_MODE) >> 10)
00915 
00916 
00931 #define PA_SetSpriteMosaic(screen, obj, mosaic) PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(OBJ_MOSAIC)) + ((mosaic) << 12)
00932 
00944 #define PA_GetSpriteMosaic(screen, obj) ((PA_obj[screen][obj].atr0 & OBJ_MOSAIC) >> 12)
00945 
00946 
00947 
00962 #define PA_SetSpriteHflip(screen, obj, hflip) PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_HFLIP)) + ((hflip) << 12)
00963 
00975 #define PA_GetSpriteHflip(screen, obj) ((PA_obj[screen][obj].atr1 & OBJ_HFLIP) >> 12)
00976 
00977 
00992 #define PA_SetSpriteVflip(screen, obj, vflip) PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_VFLIP)) + ((vflip) << 13)
00993 
01005 #define PA_GetSpriteVflip(screen, obj) ((PA_obj[screen][obj].atr1 & OBJ_VFLIP) >> 13)
01006 
01007 
01022 #define PA_SetSpriteGfx(screen, obj, gfx) PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT(OBJ_GFX)) + ((gfx) & OBJ_GFX)
01023 
01035 #define PA_GetSpriteGfx(screen, obj) (PA_obj[screen][obj].atr2 & OBJ_GFX)
01036 
01037 
01038 
01053 #define PA_SetSpritePrio(screen, obj, prio) PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT(OBJ_PRIO)) + ((prio) << 10)
01054 
01066 #define PA_GetSpritePrio(screen, obj) ((PA_obj[screen][obj].atr2 & OBJ_PRIO) >> 10)
01067 
01068 
01080 #define PA_GetSpriteLx(screen, sprite) PA_size[PA_obj[screen][sprite].atr0 >> 14][PA_obj[screen][sprite].atr1 >> 14].lx
01081 
01082 
01094 #define PA_GetSpriteLy(screen, sprite)PA_size[PA_obj[screen][sprite].atr0 >> 14][PA_obj[screen][sprite].atr1 >> 14].ly
01095 
01096 
01111 #define PA_CloneSprite(screen, obj, target) {PA_obj[screen][obj].atr0 = PA_obj[screen][target].atr0; PA_obj[screen][obj].atr1 = PA_obj[screen][target].atr1; PA_obj[screen][obj].atr2 = PA_obj[screen][target].atr2; ++obj_per_gfx[screen][PA_GetSpriteGfx(screen, target)];}
01112 
01113 
01114 
01115 
01116 
01117 
01118 
01119 
01143 extern inline void PA_SetSpriteAnimEx(bool screen, u8 sprite, u8 lx, u8 ly, u8 ncolors, s16 animframe){
01144        u16 gfx = PA_GetSpriteGfx(screen, sprite);
01145        //PA_OutputText(1, 0, PA_Rand()&15, "%03d - %03d   ", gfx, sprite);
01146        PA_UpdateGfx(screen, gfx, (void*)(PA_SpriteAnimP[screen][gfx] + (animframe * (lx * ly) >> (2 - ncolors))));
01147 }
01148 
01163 extern inline void PA_SetSpriteAnim(bool screen, u8 sprite, s16 animframe){
01164        PA_SetSpriteAnimEx(screen, sprite, PA_GetSpriteLx(screen, sprite), PA_GetSpriteLy(screen, sprite), PA_GetSpriteColors(screen, sprite), animframe);
01165 }
01166 
01167 
01168 
01195 void PA_StartSpriteAnimEx(bool screen, u8 sprite, s16 firstframe, s16 lastframe, s16 speed, u8 type, s16 ncycles);
01196 
01197 
01198 
01199 
01220 extern inline void PA_StartSpriteAnim(bool screen, u8 sprite, s16 firstframe, s16 lastframe, s16 speed){
01221        PA_StartSpriteAnimEx(screen, sprite, firstframe, lastframe, speed, ANIM_INFINITE);
01222 }
01223 
01224 
01225 
01226 
01238 extern inline void PA_StopSpriteAnim(bool screen, u8 sprite)
01239 {
01240        if (spriteanims[screen][sprite].play) nspriteanims--;
01241        spriteanims[screen][sprite].play = 0;
01242 }
01243 
01258 extern inline void PA_SetSpriteAnimFrame(bool screen, u8 sprite, u16 frame)
01259 {
01260        if(spriteanims[screen][sprite].currentframe != frame){
01261               PA_SetSpriteAnimEx(screen, sprite, spriteanims[screen][sprite].lx, spriteanims[screen][sprite].ly, spriteanims[screen][sprite].colors, spriteanims[screen][sprite].currentframe);
01262               spriteanims[screen][sprite].currentframe = frame;
01263        }
01264 }
01265 
01266 
01278 extern inline u16 PA_GetSpriteAnimFrame(bool screen, u8 sprite)
01279 {
01280        return spriteanims[screen][sprite].currentframe;
01281 }
01282 
01283 
01284 
01299 extern inline void PA_SetSpriteAnimSpeed(bool screen, u8 sprite, s16 speed)
01300 {
01301        spriteanims[screen][sprite].speed = speed;
01302 }
01303 
01315 extern inline u16 PA_GetSpriteAnimSpeed(bool screen, u8 sprite)
01316 {
01317        return spriteanims[screen][sprite].speed;
01318 }
01319 
01320 
01321 
01322 
01323 
01324 
01325 
01326 
01327 
01328 
01343 extern inline void PA_SpriteAnimPause(bool screen, u8 sprite, bool pause)
01344 {
01345        if (pause&&spriteanims[screen][sprite].play) nspriteanims--;
01346        else if ((!pause)&&(!spriteanims[screen][sprite].play)) nspriteanims++;
01347        spriteanims[screen][sprite].play = !pause;
01348 }
01349 
01350 
01351 
01352 
01353 
01354 
01375 extern inline void PA_SetSpritePixel(bool screen, u8 sprite, u8 x, u8 y, u8 color){
01376 u8 hsize = spriteanims[screen][sprite].lx>>3;
01377 
01378        s32 pos = (x >> 3) + ((y >> 3) * hsize);
01379        x&=7; y&=7;
01380        
01381        pos = (pos << 5) + (x >> 1) + (y << 2);
01382        
01383        u16 pixel = spriteanims[screen][sprite].gfx[pos];
01384        
01385        if (x&1){
01386               spriteanims[screen][sprite].gfx[pos] = (color << 8) | (pixel&0x00FF);               
01387        }
01388        else {
01389               spriteanims[screen][sprite].gfx[pos] = color | (pixel&0xFF00); 
01390        }
01391 }
01392 
01393 
01411 extern inline u8 PA_GetSpritePixel(bool screen, u8 sprite, u8 x, u8 y) {
01412 u8 hsize = spriteanims[screen][sprite].lx>>3;
01413 
01414        s32 pos = (x >> 3) + ((y >> 3) * hsize);
01415        x&=7; y&=7;
01416        
01417        pos = (pos << 5) + (x >> 1) + (y << 2);
01418        
01419        u16 pixel = spriteanims[screen][sprite].gfx[pos];
01420        
01421        if (x&1){
01422               return ((pixel>>8)&255);                  
01423        }
01424        else {
01425               return (pixel&255);
01426        }
01427 }
01428 
01429 
01441 void PA_InitSpriteDraw(bool screen, u8 sprite);
01442 
01443 
01444 
01450 extern inline void PA_InitAllSpriteDraw(void){
01451 u8 i, j;
01452 for (j = 0; j < 2; j++)
01453        for (i = 0; i < 128; i++)
01454               PA_InitSpriteDraw(j, i);
01455 }
01456 
01457 
01458 
01459 
01460 
01461 
01462 
01463 
01464 
01465 
01466 
01467  // end of Sprite
01469 
01470 
01471 
01472 
01473 
01474 void PA_UpdateSpriteAnims(void);
01475 
01476 
01477 
01478 
01479 
01480 
01481 
01482 
01483 
01484 
01485 
01486 #endif
01487 
01488 

Généré le Thu Feb 9 15:38:26 2006 pour PAlib par  doxygen 1.3.9.1