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 @ PA_lib: Référence du fichier PA_Sprite.h

Référence du fichier PA_Sprite.h

Everything concerning the sprite system. Plus de détails...

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]


Description détaillée

Everything concerning the sprite system.

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


Généré le Fri Oct 28 23:18:13 2005 pour PA_lib par  doxygen 1.3.9.1
@ 1.1.1.1 log @Initial import of PalibDoc, begin on PAlib0.64b @ text @@