head 1.1; branch 1.1.1; access ; symbols start:1.1.1.1 PAlibDoc:1.1.1; locks ; strict; comment @# @; 1.1 date 2005.11.02.08.30.33; author jandujar; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2005.11.02.08.30.33; author jandujar; state Exp; branches ; next ; desc @@ 1.1 log @Initial revision @ text @
Aller au code source de ce fichier.
Structures de données | |
struct | PA_sizes |
struct | mem_usage |
struct | obj_inf |
struct | PA_DrawSprites |
Macros | |
#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 | OAM0 0x07000000 |
#define | OAM1 0x07000400 |
#define | PA_UpdateOAM() |
Mettre à jour les infos des sprites pour les 2 écrans. A faire dans le VBL | |
#define | PA_UpdateOAM0() DMA_Copy((void*)PA_obj, (void*)OAM0, 256, DMA_32NOW) |
Mettre à jour les infos des sprites pour l'écran 0 uniquement. A faire dans le VBL | |
#define | PA_UpdateOAM1() DMA_Copy((void*)PA_obj + 256, (void*)OAM1, 256, DMA_32NOW) |
Mettre à jour les infos des sprites pour l'écran 1 uniquement. A faire dans le VBL | |
#define | PA_UpdateSpriteGfx(screen, obj_number, obj_data) PA_UpdateGfx(screen, PA_GetSpriteGfx(screen, obj_number), obj_data) |
Mettre à jour les Gfx d'un sprite donné | |
#define | PA_UpdateGfx(screen, gfx_number, obj_data) {DMA_Copy(obj_data, (void*)(SPRITE_GFX1 + (0x200000 * screen) + (gfx_number << NUMBER_DECAL)), (used_mem[screen][gfx_number] << MEM_DECAL), DMA_32NOW);} |
Mettre à jour les Gfx d'un sprite donné | |
#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);} |
Faire tourner et zoomer un sprite | |
#define | PA_SetSpriteRotDisable(screen, sprite) {PA_obj[screen][sprite].atr0 &= ALL_BUT(OBJ_ROT); PA_obj[screen][sprite].atr1 &= ALL_BUT_ROTSET;} |
Arreter de faire tourner et zoomer un sprite | |
#define | PA_SetSpriteX(screen, obj, x) PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_X)) + ((x) & OBJ_X) |
Position X du sprite à l'écran | |
#define | PA_GetSpriteX(screen, obj) (PA_obj[screen][obj].atr1 & (OBJ_X)) |
Position X du sprite à l'écran | |
#define | PA_SetSpriteY(screen, obj, y) PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(OBJ_Y)) + ((y) & OBJ_Y) |
Position Y du sprite à l'écran | |
#define | PA_GetSpriteY(screen, obj) (PA_obj[screen][obj].atr0 & OBJ_Y) |
Position Y du sprite à l'écran | |
#define | PA_SetSpritePal(screen, obj, pal) PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT_PAL) + ((pal) << 12) |
Changer la palette de 16 couleurs d'un sprite | |
#define | PA_GetSpritePal(screen, obj) (PA_obj[screen][obj].atr2 >> 12) |
Palette de 16 couleurs d'un sprite | |
#define | PA_SetSpriteDblsize(screen, obj, dblsize) PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(DBLSIZE)) + ((dblsize) << 9) |
Activer ou désactiver le mode Doublesize pour un sprite | |
#define | PA_GetSpriteDblsize(screen, obj) ((PA_obj[screen][obj].atr0 & DBLSIZE) >> 9) |
Etat du mode Doublesize pour un 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) |
Changer le mode de couleur du sprite | |
#define | PA_GetSpriteColors(screen, sprite) ((PA_obj[screen][sprite].atr0 & N_COLORS) >> 13) |
Mode de couleur d'un sprite | |
#define | PA_SetSpriteMode(screen, sprite, obj_mode) PA_obj[screen][sprite].atr0 = (PA_obj[screen][sprite].atr0 & ALL_BUT(OBJ_MODE)) + ((obj_mode) << 10) |
Régler le mode d'un sprite : 0 pour normal, 1 pour transparent, 2 pour fenetre | |
#define | PA_GetSpriteMode(screen, obj) ((PA_obj[screen][obj].atr0 & OBJ_MODE) >> 10) |
Mode d'un sprite : 0 pour normal, 1 pour transparent, 2 pour fenetre | |
#define | PA_SetSpriteMosaic(screen, obj, mosaic) PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(OBJ_MOSAIC)) + ((mosaic) << 12) |
Mettre ou non un sprite en mode mosaic | |
#define | PA_GetSpriteMosaic(screen, obj) ((PA_obj[screen][obj].atr0 & OBJ_MOSAIC) >> 12) |
Si un sprite est en mode mosaic | |
#define | PA_SetSpriteHflip(screen, obj, hflip) PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_HFLIP)) + ((hflip) << 12) |
Utiliser ou non le flip horizontal pour un sprite | |
#define | PA_GetSpriteHflip(screen, obj) ((PA_obj[screen][obj].atr1 & OBJ_HFLIP) >> 12) |
S'il y a un flip horizontal pour un sprite | |
#define | PA_SetSpriteVflip(screen, obj, vflip) PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(OBJ_VFLIP)) + ((vflip) << 13) |
Utiliser ou non le flip vertical pour un sprite | |
#define | PA_GetSpriteVflip(screen, obj) ((PA_obj[screen][obj].atr1 & OBJ_VFLIP) >> 13) |
Si le flip vertical est utilisé ou non pour un sprite | |
#define | PA_SetSpriteGfx(screen, obj, gfx) PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT(OBJ_GFX)) + ((gfx) & OBJ_GFX) |
Modifier les graphismes utilisés par un sprite | |
#define | PA_GetSpriteGfx(screen, obj) (PA_obj[screen][obj].atr2 & OBJ_GFX) |
Récupérer le gfx utilisés par un sprite | |
#define | PA_SetSpritePrio(screen, obj, prio) PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT(OBJ_PRIO)) + ((prio) << 10) |
Régler la priorité d'un sprite par rapport au Bg. | |
#define | PA_GetSpritePrio(screen, obj) ((PA_obj[screen][obj].atr2 & OBJ_PRIO) >> 10) |
Récupérer la priorité d'un sprite par rapport au Bg. | |
#define | PA_GetSpriteLx(screen, sprite) PA_size[PA_obj[screen][sprite].atr0 >> 14][PA_obj[screen][sprite].atr1 >> 14].lx |
Récupérer la largeur d'un sprite | |
#define | PA_GetSpriteLy(screen, sprite) PA_size[PA_obj[screen][sprite].atr0 >> 14][PA_obj[screen][sprite].atr1 >> 14].ly |
Récupérer la hauteur d'un sprite | |
#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)];} |
Cloner un sprite. Marche uniquement pour les sprites sur un meme écran | |
#define | PA_SetSpritePixel(screen, sprite, x, y, color) PA_SetSpritePixelEx(screen, sprite, PA_GetSpriteLx(screen, sprite), PA_GetSpriteColors(screen, sprite), x, y, color) |
Mettre un pixel d'un sprite à une couleur donnée. Comme PA_SetSpritePixelEx, avec moins d'options, mais un peu plus lent | |
#define | PA_GetSpritePixel(screen, sprite, x, y) PA_GetSpritePixelEx(screen, sprite, PA_GetSpriteLx(screen, sprite), PA_GetSpriteColors(screen, sprite), x, y) |
Récupérer la couleur d'un pixel d'un sprite. Comme PA_GetSpritePixelEx, avec moins d'options, mais un peu plus lent | |
#define | PA_SpriteDrawNot(draw_number) PA_DrawSprite[draw_number].wasdrawing = 0 |
Doit etre mis si un sprite dessinable est initialisé et que l'on ne dessine pas dessus actuellement | |
Fonctions | |
u16 | PA_CreateGfx (bool screen, void *obj_data, u8 obj_shape, u8 obj_size, u8 color_mode) |
Charger en mémoire un gfx à utiliser plus tard pour un sprite. Renvoie le numéro en mémoire. | |
void | PA_ResetSpriteSys (void) |
Remise à 0 du système de sprite, de la mémoire... | |
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) |
Creer un sprite avec ses gfx... Ceci est la version simple de la fonction | |
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) |
Creer un sprite avec ses gfx... Ceci est la version complexe de la fonction | |
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) |
Creer un sprite de 16 bits avec ses gfx... Ceci est la version complexe de la fonction. Attention : un sprite de 16 bits DOIT etre large de 128 pixels, meme si ce sprite ne prend qu'une petite partie sur la gauche | |
void | PA_Create16bitSprite (bool screen, u8 obj_number, void *obj_data, u8 obj_shape, u8 obj_size, s16 x, s16 y) |
Creer un sprite de 16 bits avec ses gfx... Ceci est la version simple de la fonction. Attention : un sprite de 16 bits DOIT etre large de 128 pixels, meme si ce sprite ne prend qu'une petite partie sur la gauche | |
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) |
Creer un sprite avec ses gfx... Ceci est la version simple de la fonction | |
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) |
Creer un sprite avec ses gfx... Ceci est la version complexe de la fonction | |
void | PA_DeleteGfx (bool screen, u16 obj_gfx) |
Effacer un Gfx. Si un sprite l'utilisait, il deviendra invisible... | |
void | PA_DeleteSprite (bool screen, u8 obj_number) |
Effacer un sprite. S'il était le seul à utiliser un gfx, il sera effacé lui aussi | |
void | PA_SetRotset (bool screen, u8 rotset, s16 angle, u16 zoomx, u16 zoomy) |
Faire tourner et zoomer un sprite | |
void | PA_SetRotsetNoZoom (bool screen, u8 rotset, s16 angle) |
Faire tourner un sprite sans zoomer. C'est un peu plus rapide que la fonction PA_SetRotset | |
void | PA_SetRotsetNoAngle (bool screen, u8 rotset, u16 zoomx, u16 zoomy) |
Zoomer un sprite sans le faire tourner. C'est un peu plus rapide que la fonction PA_SetRotset | |
void | PA_SetSpriteXY (bool screen, u8 sprite, s16 x, s16 y) |
Position X et Y du sprite à l'écran | |
void | PA_SetSpriteAnimEx (bool screen, u8 sprite, u8 lx, u8 ly, u8 ncolors, s16 animframe) |
Régler l'image du sprite dans l'animation. Cette fonction est plus rapide que PA_SetSpriteAnim parce qu'elle n'a pas à rechercher les dimensions du sprite | |
void | PA_SetSpriteAnim (bool screen, u8 sprite, s16 animframe) |
Régler l'image du sprite dans l'animation. Identique à PA_SetSpriteAnimEx, mais plus simple à utiliser, par contre plus lent | |
void | PA_SetSpritePixelEx (bool screen, u8 sprite, u8 hsize, u8 n_colors, u8 x, u8 y, u8 color) |
Mettre un pixel d'un sprite à une couleur donnée | |
u8 | PA_GetSpritePixelEx (bool screen, u8 sprite, u8 hsize, u8 n_colors, u8 x, u8 y) |
Récupérer la couleur d'un pixel d'un sprite | |
void | PA_InitSpriteDraw (bool screen, u8 sprite, u8 draw_number, u8 drawsize) |
Initialise un sprite pour pouvoir dessiner dessus ! | |
void | PA_SpriteDraw (u8 draw_number, s16 x, s16 y, u16 color) |
Dessiner sur un sprite intialisé... Doit etre utilisé à tous les tours, sinon il faut faire PA_SpriteDrawNot si on ne dessine pas... | |
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] |
PA_DrawSprites | PA_DrawSprite [MAX_DRAW] |
unsigned char * | PA_SpriteBuffer [MAX_DRAW] |
u16 * | PA_SpriteAnimP [2][1024] |
This file contains all macros, variables, and prototypes regarding the sprite system (OAM, Sprite mouvement, Gfx loading...)