PA_Sprite.h File Reference

Everything concerning the sprite system. More...

Go to the source code of this file.

Data Structures

struct  PA_sizes
struct  mem_usage
struct  obj_inf
struct  spriteanim

Defines

#define EWRAM_DATA   __attribute__((section(".ewram")))
#define EWRAM_BSS   __attribute__((section(".sbss")))
#define PA_Cos(angle)   PA_SIN[((angle) + 128)&511]
#define PA_Sin(angle)   PA_SIN[((angle))&511]
#define MAX_DRAW   16
#define OBJ_SIZE_8X8   0,0
#define OBJ_SIZE_16X16   0,1
#define OBJ_SIZE_32X32   0,2
#define OBJ_SIZE_64X64   0,3
#define OBJ_SIZE_16X8   1,0
#define OBJ_SIZE_32X8   1,1
#define OBJ_SIZE_32X16   1,2
#define OBJ_SIZE_64X32   1,3
#define OBJ_SIZE_8X16   2,0
#define OBJ_SIZE_8X32   2,1
#define OBJ_SIZE_16X32   2,2
#define OBJ_SIZE_32X64   2,3
#define BITS_16   65535
#define ALL_BUT(ATR)   (BITS_16 - ATR)
#define OBJ_X   511
#define OBJ_Y   255
#define OBJ_ROT   256
#define ALL_BUT_ROTSET   49663
#define ALL_BUT_PAL   4095
#define DBLSIZE   512
#define N_COLORS   (1 << 13)
#define OBJ_MODE   3072
#define OBJ_MOSAIC   4096
#define OBJ_HFLIP   4096
#define OBJ_VFLIP   8192
#define OBJ_GFX   1023
#define OBJ_PRIO   3072
#define COLORS_256   1
#define COLORS_16   0
#define MEM_DECAL   5
#define NUMBER_DECAL   7
#define ANIM_LOOP   0
#define ANIM_UPDOWN   1
#define ANIM_ONESHOT   ANIM_LOOP, 1
#define ANIM_INFINITE   ANIM_LOOP, -1
#define OAM0   0x07000000
#define OAM1   0x07000400
#define PA_UpdateOAM0()   DMA_Copy((void*)PA_obj, (void*)OAM0, 256, DMA_32NOW)
 Update the sprite infos for screen 0 only. Do this in the VBL
#define PA_UpdateOAM1()   DMA_Copy((void*)PA_obj + 256, (void*)OAM1, 256, DMA_32NOW)
 Update the sprite infos for screen 1 only. Do this in the VBL
#define PA_UpdateSpriteGfx(screen, obj_number, obj_data)   PA_UpdateGfx(screen, PA_GetSpriteGfx(screen, obj_number), obj_data)
 Update the Gfx of a given sprite
#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);}
 Rotate and zoom a sprite
#define PA_SetSpriteRotDisable(screen, sprite)   {PA_obj[screen][sprite].atr0 &= ALL_BUT(OBJ_ROT); PA_obj[screen][sprite].atr1 &= ALL_BUT_ROTSET;}
 Stop rotating and zooming a sprite
#define PA_SetSpriteX(screen, obj, x)   PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_X)) + ((x) & OBJ_X)
 Set the X position of a sprite on screen
#define PA_GetSpriteX(screen, obj)   (PA_obj[screen][obj].atr1 & (OBJ_X))
 Get the X position of a sprite on screen
#define PA_SetSpriteY(screen, obj, y)   PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(OBJ_Y)) + ((y) & OBJ_Y)
 Set the Y position of a sprite on screen
#define PA_GetSpriteY(screen, obj)   (PA_obj[screen][obj].atr0 & OBJ_Y)
 Get the Y position of a sprite on screen
#define PA_SetSpritePal(screen, obj, pal)   PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT_PAL) + ((pal) << 12)
 Set the sprite's palette number
#define PA_GetSpritePal(screen, obj)   (PA_obj[screen][obj].atr2 >> 12)
 Get thepalette used by a sprite
#define PA_SetSpriteDblsize(screen, obj, dblsize)   PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(DBLSIZE)) + ((dblsize) << 9)
 Enable or disable double size for a given sprite
#define PA_GetSpriteDblsize(screen, obj)   ((PA_obj[screen][obj].atr0 & DBLSIZE) >> 9)
 Get the double size state for a given sprite
#define PA_SetSpriteColors(screen, sprite, n_colors)   PA_obj[screen][sprite].atr0 = (PA_obj[screen][sprite].atr0 & ALL_BUT(N_COLORS)) + ((n_colors) << 13)
 Change the sprite's color mode
#define PA_GetSpriteColors(screen, sprite)   ((PA_obj[screen][sprite].atr0 & N_COLORS) >> 13)
 Get a sprite's color mode
#define PA_SetSpriteMode(screen, sprite, obj_mode)   PA_obj[screen][sprite].atr0 = (PA_obj[screen][sprite].atr0 & ALL_BUT(OBJ_MODE)) + ((obj_mode) << 10)
 Set the sprite's mode : 0 for normal, 1 for alpha blending, 2 for window
#define PA_GetSpriteMode(screen, obj)   ((PA_obj[screen][obj].atr0 & OBJ_MODE) >> 10)
 Get the sprite's mode : 0 for normal, 1 for alpha blending, 2 for window
#define PA_SetSpriteMosaic(screen, obj, mosaic)   PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(OBJ_MOSAIC)) + ((mosaic) << 12)
 Enable or disable mosaic mode for a given sprite
#define PA_GetSpriteMosaic(screen, obj)   ((PA_obj[screen][obj].atr0 & OBJ_MOSAIC) >> 12)
 Get the mosaic mode for a given sprite
#define PA_SetSpriteHflip(screen, obj, hflip)   PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_HFLIP)) + ((hflip) << 12)
 Enable or disable horizontal flip for a given sprite
#define PA_GetSpriteHflip(screen, obj)   ((PA_obj[screen][obj].atr1 & OBJ_HFLIP) >> 12)
 Get the horizontal flip state for a given sprite
#define PA_SetSpriteVflip(screen, obj, vflip)   PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_VFLIP)) + ((vflip) << 13)
 Enable or disable vertical flip for a given sprite
#define PA_GetSpriteVflip(screen, obj)   ((PA_obj[screen][obj].atr1 & OBJ_VFLIP) >> 13)
 Get the vertical flip state for a given sprite
#define PA_SetSpriteGfx(screen, obj, gfx)   PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT(OBJ_GFX)) + ((gfx) & OBJ_GFX)
 Change the gfx used by a sprite
#define PA_GetSpriteGfx(screen, obj)   (PA_obj[screen][obj].atr2 & OBJ_GFX)
 Get the gfx used by a sprite
#define PA_SetSpritePrio(screen, obj, prio)   PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT(OBJ_PRIO)) + ((prio) << 10)
 Set a sprite's Background priority
#define PA_GetSpritePrio(screen, obj)   ((PA_obj[screen][obj].atr2 & OBJ_PRIO) >> 10)
 Get a sprite's Background priority
#define PA_GetSpriteLx(screen, sprite)   PA_size[PA_obj[screen][sprite].atr0 >> 14][PA_obj[screen][sprite].atr1 >> 14].lx
 Get a sprite's length
#define PA_GetSpriteLy(screen, sprite)   PA_size[PA_obj[screen][sprite].atr0 >> 14][PA_obj[screen][sprite].atr1 >> 14].ly
 Get a sprite's height
#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)];}
 Clone a sprite. Works only for sprites on the same screen

Functions

void PA_UpdateOAM (void)
 Update the sprite infos for both screens. Do this in the VBL
u16 PA_CreateGfx (bool screen, void *obj_data, u8 obj_shape, u8 obj_size, u8 color_mode)
 Load in mémory a gfx to use later on for a sprite. Returns the gfx's number in memory
void PA_ResetSpriteSys (void)
 Reset the sprite system, memory, etc...
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)
 Create a sprite with it's gfx. This is the simple version of the function
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)
 Create a sprite with it's gfx. This is the complex version of the function
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)
 Create a 16 bit sprite with it's gfx. This is the complex version of the function. Warning : a 16bit sprite MUST be 128 pixels large, even if you sprite only takes up a small part on the left...
void PA_Create16bitSpriteFromGfx (bool screen, u8 obj_number, u16 gfx, u8 obj_shape, u8 obj_size, s16 x, s16 y)
 Create a 16 bit sprite using a given gfx.
void PA_Create16bitSprite (bool screen, u8 obj_number, void *obj_data, u8 obj_shape, u8 obj_size, s16 x, s16 y)
 Create a 16 bit sprite with it's gfx. This is the simple version of the function. Warning : a 16bit sprite MUST be 128 pixels large, even if you sprite only takes up a small part on the left...
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)
 Create a sprite with it's gfx. This is the simple version of the function
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)
 Create a sprite with it's gfx. This is the complex version of the function
void PA_UpdateGfx (bool screen, u16 gfx_number, void *obj_data)
 Update a given Gfx
void PA_UpdateGfxAndMem (bool screen, u8 gfx_number, void *obj_data)
 Update the Gfx of a given sprite and updates the PAlib animation pointer... Only for advanced users
void PA_DeleteGfx (bool screen, u16 obj_gfx)
 Delete a given Gfx. If a sprite uses this gfx, it'll become invisible
void PA_DeleteSprite (bool screen, u8 obj_number)
 Delete a given sprite. If it is the only one to use it's gfx, it'll be deleted too.
void PA_SetRotset (bool screen, u8 rotset, s16 angle, u16 zoomx, u16 zoomy)
 Rotate and zoom a sprite
void PA_SetRotsetNoZoom (bool screen, u8 rotset, s16 angle)
 Rotate a sprite without zooming. It's a bit faster than the normal PA_SetRotset function
void PA_SetRotsetNoAngle (bool screen, u8 rotset, u16 zoomx, u16 zoomy)
 Zoom a sprite without rotating. It's a bit faster than the normal PA_SetRotset function
void PA_SetSpriteXY (bool screen, u8 sprite, s16 x, s16 y)
 Set the X and Y position of a sprite on screen
void PA_SetSpriteAnimEx (bool screen, u8 sprite, u8 lx, u8 ly, u8 ncolors, s16 animframe)
 Set the animation frame for a given sprite. This function is faster than the normal PA_SetSpriteAnim because it doesn't have to lookup the sprite dimensions...
void PA_SetSpriteAnim (bool screen, u8 sprite, s16 animframe)
 Set the animation frame for a given sprite. Same as PA_SetSpriteAnimEx, but a bit slower and easier to use...
void PA_StartSpriteAnimEx (bool screen, u8 sprite, s16 firstframe, s16 lastframe, s16 speed, u8 type, s16 ncycles)
 Start a sprite animation. Once started, it continues on and on by itself until you stop it !
void PA_StartSpriteAnim (bool screen, u8 sprite, s16 firstframe, s16 lastframe, s16 speed)
 Start a sprite animation. Once started, it continues on and on by itself until you stop it !
void PA_StopSpriteAnim (bool screen, u8 sprite)
 Stop a sprite animation
void PA_SetSpriteAnimFrame (bool screen, u8 sprite, u16 frame)
 Set the current animation frame number
u16 PA_GetSpriteAnimFrame (bool screen, u8 sprite)
 Returns the current animation frame number
void PA_SetSpriteAnimSpeed (bool screen, u8 sprite, s16 speed)
 Set the current animation speed
u16 PA_GetSpriteAnimSpeed (bool screen, u8 sprite)
 Returns the current animation speed
void PA_SetSpriteNCycles (bool screen, u8 sprite, s16 NCycles)
 Set the current animation cycles left (-1 for inifinite loop)
u16 PA_GetSpriteNCycles (bool screen, u8 sprite)
 Returns the current number of animation cycles left
void PA_SpriteAnimPause (bool screen, u8 sprite, bool pause)
 Pause or UnPause a sprite animation
void PA_SetSpritePixel (bool screen, u8 sprite, u8 x, u8 y, u8 color)
 Set a sprite's pixel to a given palette color. Like PA_SetSpritePixelEx, with less options, but a little slower
u8 PA_GetSpritePixel (bool screen, u8 sprite, u8 x, u8 y)
 Get a sprite's pixel color. Like PA_GetSpritePixelEx, with less options, but a little slower
void PA_InitSpriteDraw (bool screen, u8 sprite)
 Initialise a sprite to be able to draw on it !
void PA_InitAllSpriteDraw (void)
 Initialise all the onscreen sprites to draw on them
void PA_InitSpriteExtPrio (bool SpritePrio)
 Enable the PAlib sprite priority system. Slower than the normal priority system, but offering 256 levels of priority for the sprites (overrides the sprite number's priority)
void PA_SetSPriteExtPrio (bool screen, u8 sprite, u8 prio)
void PA_UpdateSpriteAnims (void)

Variables

const s16 PA_SIN [512]
const PA_sizes PA_size [3][4]
u16 n_free_mem [2]
u8 used_mem [2][1024]
u8 obj_per_gfx [2][1024]
mem_usage free_mem [2][1024]
u16 FirstGfx [2]
const u16 PA_obj_sizes [4][3]
obj_inf PA_obj [2][128]
u8 PA_SpritePrio [2][128]
unsigned char * PA_SpriteBuffer [MAX_DRAW]
u16 * PA_SpriteAnimP [2][1024]
s16 nspriteanims
spriteanim spriteanims [2][128]
bool PA_SpriteExtPrio


Detailed Description

Everything concerning the sprite system.

This file contains all macros, variables, and prototypes regarding the sprite system (OAM, Sprite mouvement, Gfx loading...)


Generated on Sun Feb 26 20:46:20 2006 for PAlib by  doxygen 1.3.9.1