Sprite system


Macros

#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_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(PA_OBJ_X)) + ((x) & PA_OBJ_X)
 Position X du sprite à l'écran.
#define PA_GetSpriteX(screen, obj)   (PA_obj[screen][obj].atr1 & (PA_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(PA_OBJ_Y)) + ((y) & PA_OBJ_Y)
 Position Y du sprite à l'écran.
#define PA_GetSpriteY(screen, obj)   (PA_obj[screen][obj].atr0 & PA_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 d'un sprite.
#define PA_GetSpritePal(screen, obj)   (PA_obj[screen][obj].atr2 >> 12)
 Palette 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.

Fonctions

void PA_UpdateOAM (void)
 Mettre à jour les infos des sprites pour les 2 écrans. A faire dans le VBL.
u16 PA_CreateGfx (u8 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_ResetSpriteSysScreen (u8 screen)
void PA_ResetSpriteSys (void)
 Remise à 0 du système de sprite, de la mémoire...
void PA_CreateSprite (u8 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 (u8 screen, u8 obj_number, void *obj_data, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, u8 obj_mode, u8 mosaic, u8 hflip, u8 vflip, u8 prio, u8 dblsize, s16 x, s16 y)
 Creer un sprite avec ses gfx... Ceci est la version complexe de la fonction.
void PA_Create16bitSpriteEx (u8 screen, u8 obj_number, void *obj_data, u8 obj_shape, u8 obj_size, u8 mosaic, u8 hflip, u8 vflip, u8 prio, u8 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_Create16bitSpriteFromGfx (u8 screen, u8 obj_number, u16 gfx, u8 obj_shape, u8 obj_size, s16 x, s16 y)
 Creer un sprite de 16 bits à partir de gfx...
void PA_Create16bitSprite (u8 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 (u8 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 (u8 screen, u8 obj_number, u16 obj_gfx, u8 obj_shape, u8 obj_size, u8 color_mode, u8 palette, u8 obj_mode, u8 mosaic, u8 hflip, u8 vflip, u8 prio, u8 dblsize, s16 x, s16 y)
 Creer un sprite avec ses gfx... Ceci est la version complexe de la fonction.
void PA_UpdateGfx (u8 screen, u16 gfx_number, void *obj_data)
 Mettre à jour les Gfx donnés.
void PA_UpdateGfxAndMem (u8 screen, u8 gfx_number, void *obj_data)
 Mettre à jour les Gfx donnés et le pointer d'animation dans PAlib... Uniquement pour utilisateurs avertis.
void PA_DeleteGfx (u8 screen, u16 obj_gfx)
 Effacer un Gfx. Si un sprite l'utilisait, il deviendra invisible...
void PA_DeleteSprite (u8 screen, u8 obj_number)
 Effacer un sprite. S'il était le seul à utiliser un gfx, il sera effacé lui aussi.
void PA_SetRotset (u8 screen, u8 rotset, s16 angle, u16 zoomx, u16 zoomy)
 Faire tourner et zoomer un sprite.
void PA_SetRotsetNoZoom (u8 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 (u8 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 (u8 screen, u8 sprite, s16 x, s16 y)
 Position X et Y du sprite à l'écran.
void PA_Set16bitSpriteAlpha (u8 screen, u8 sprite, u8 alpha)
 Position X du sprite à l'écran.
void PA_SetSpriteAnimEx (u8 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 (u8 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_StartSpriteAnimEx (u8 screen, u8 sprite, s16 firstframe, s16 lastframe, s16 speed, u8 type, s16 ncycles)
 Démarre une animation de sprite. Une fois démarrée, elle continue tant qu'on ne l'arrête pas !
void PA_StartSpriteAnim (u8 screen, u8 sprite, s16 firstframe, s16 lastframe, s16 speed)
 Démarre une animation de sprite. Une fois démarrée, elle continue tant qu'on ne l'arrête pas !
void PA_StopSpriteAnim (u8 screen, u8 sprite)
 Arrêter une animation de sprite.
void PA_SetSpriteAnimFrame (u8 screen, u8 sprite, u16 frame)
 Changer le numéro actuel de la frame d'animation.
u16 PA_GetSpriteAnimFrame (u8 screen, u8 sprite)
 Renvoie le numéro actuel de la frame d'animation.
void PA_SetSpriteAnimSpeed (u8 screen, u8 sprite, s16 speed)
 Changer la vitesse de l'animation.
u16 PA_GetSpriteAnimSpeed (u8 screen, u8 sprite)
 Renvoie la vitesse de l'animation.
void PA_SetSpriteNCycles (u8 screen, u8 sprite, s32 NCycles)
 Changer le nombre de cycles d'animation restant (-1 pour inifini).
s32 PA_GetSpriteNCycles (u8 screen, u8 sprite)
 Renvoie le nombre de cycles d'animation restants.
void PA_SpriteAnimPause (u8 screen, u8 sprite, u8 pause)
 Mettre en Pause en remettre en lecture une animation de sprite.
void PA_SetSpritePixel (u8 screen, u8 sprite, u8 x, u8 y, u8 color)
 Mettre un pixel d'un sprite à une couleur donnée. Comme PA_SetSpritePixelEx, avec moins d'options, mais un peu plus lent.
u8 PA_GetSpritePixel (u8 screen, u8 sprite, u8 x, u8 y)
 Récupérer la couleur d'un pixel d'un sprite. Comme PA_GetSpritePixelEx, avec moins d'options, mais un peu plus lent.
u8 PA_GetSprite16cPixel (u8 screen, u8 sprite, u8 x, u8 y)
 Récupérer la couleur d'un pixel d'un sprite de 16 couleurs.
void PA_InitSpriteDraw (u8 screen, u8 sprite)
 Initialise un sprite pour pouvoir dessiner dessus !
void PA_InitAllSpriteDraw (void)
 Initialise tous les sprites à l'écran pour dessiner dessus.
void PA_InitSpriteExtPrio (u8 SpritePrio)
 Activer le systeme de priorité de sprites PAlib. Plus lent que le systeme normal, il permet d'avoir 256 niveaux de priorité (supplante la priorité par numéro de sprites).
void PA_SetSpriteExtPrio (u8 screen, u8 sprite, u8 prio)

Description détaillée

Load Sprite, move them around, rotate them...

Documentation des macros

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
target Numéro de la cible à cloner

#define PA_GetSpriteColors ( screen,
sprite   )     ((PA_obj[screen][sprite].atr0 & N_COLORS) >> 13)

Mode de couleur d'un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro de l'objet dans le systeme de sprite

#define PA_GetSpriteDblsize ( screen,
obj   )     ((PA_obj[screen][obj].atr0 & DBLSIZE) >> 9)

Etat du mode Doublesize pour un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#define PA_GetSpriteGfx ( screen,
obj   )     (PA_obj[screen][obj].atr2 & OBJ_GFX)

Récupérer le gfx utilisés par un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#define PA_GetSpriteHflip ( screen,
obj   )     ((PA_obj[screen][obj].atr1 & OBJ_HFLIP) >> 12)

S'il y a un flip horizontal pour un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro de l'objet dans le systeme de 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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro de l'objet dans le systeme de sprite

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#define PA_GetSpriteMosaic ( screen,
obj   )     ((PA_obj[screen][obj].atr0 & OBJ_MOSAIC) >> 12)

Si un sprite est en mode mosaic.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#define PA_GetSpritePal ( screen,
obj   )     (PA_obj[screen][obj].atr2 >> 12)

Palette d'un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de 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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#define PA_GetSpriteX ( screen,
obj   )     (PA_obj[screen][obj].atr1 & (PA_OBJ_X))

Position X du sprite à l'écran.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite

#define PA_GetSpriteY ( screen,
obj   )     (PA_obj[screen][obj].atr0 & PA_OBJ_Y)

Position Y du sprite à l'écran.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de 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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro de l'objet dans le systeme de sprite
n_colors 0 pour 16 couleurs, 1 pour 256

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
dblsize 1 pour l'activer, 0 pour l'inactiver

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
gfx Numéro du gfx en mémoire ; on peut obtenir un numéro avec PA_CreateGfx ou PA_GetSpriteGfx(obj_number);

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
hflip Flip horizontal, 1 pour oui, 0 pour non...

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro de l'objet dans le systeme de sprite
obj_mode Mode : 0 pour normal, 1 pour transparent, 2 pour fenetre ; ne marche pas encore

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
mosaic Mode mosaic activé (1) ou désactivé (0)

#define PA_SetSpritePal ( screen,
obj,
pal   )     PA_obj[screen][obj].atr2 = (PA_obj[screen][obj].atr2 & ALL_BUT_PAL) + ((pal) << 12)

Changer la palette d'un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
pal Numéro de la palette (de 0 à 15)

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
prio Priorité du sprite : 0 est au-dessus du fond 0, 1 au-dessus du 1, etc... (0-3)

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Sprite que l'on veut faire tourner

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Sprite que l'on veut faire tourner
rotset Rotset que l'on veut pour un sprite donné (0-31). On peut a priori utiliser un rotset pour plusieurs sprites, s'ils sont zoomés/tournés pareil...

#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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
vflip Flip vertical, 1 pour oui, 0 pour non...

#define PA_SetSpriteX ( screen,
obj,
 )     PA_obj[screen][obj].atr1 = (PA_obj[screen][obj].atr1 & ALL_BUT(PA_OBJ_X)) + ((x) & PA_OBJ_X)

Position X du sprite à l'écran.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
x Position X

#define PA_SetSpriteY ( screen,
obj,
 )     PA_obj[screen][obj].atr0 = (PA_obj[screen][obj].atr0 & ALL_BUT(PA_OBJ_Y)) + ((y) & PA_OBJ_Y)

Position Y du sprite à l'écran.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj Numéro de l'objet dans le systeme de sprite
y Position Y

 
#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é.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro de l'objet dans le systeme de sprite
obj_data Graphisme à charger


Documentation des fonctions

inline void PA_Create16bitSprite ( u8  screen,
u8  obj_number,
void *  obj_data,
u8  obj_shape,
u8  obj_size,
s16  x,
s16  y 
) [inline]

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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
obj_data Gfx à charger
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
x Position X du sprite
y Position Y du sprite

inline void PA_Create16bitSpriteEx ( u8  screen,
u8  obj_number,
void *  obj_data,
u8  obj_shape,
u8  obj_size,
u8  mosaic,
u8  hflip,
u8  vflip,
u8  prio,
u8  dblsize,
s16  x,
s16  y 
) [inline]

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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
obj_data Gfx à charger
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
mosaic Activer le mode mosaique pour ce sprite. Pas encore au point...
hflip Flip horizontal activé ou non.
vflip Flip vertical...
prio Priorité du sprite vis-à-vis des fonds : devant quel fond l'afficher... (0-3)
dblsize Doubler la taille possible du sprite. A activer uniquement si on compte grossir et faire tourner le sprite
x Position X du sprite
y Position Y du sprite

inline void PA_Create16bitSpriteFromGfx ( u8  screen,
u8  obj_number,
u16  gfx,
u8  obj_shape,
u8  obj_size,
s16  x,
s16  y 
) [inline]

Creer un sprite de 16 bits à partir de gfx...

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
gfx Gfx à utiliser
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
x Position X du sprite
y Position Y du sprite

u16 PA_CreateGfx ( u8  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.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_data Gfx à charger
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
color_mode Mode 256 ou 16 couleurs (1 ou 0), ou 2 pour 16 bits

inline void PA_CreateSprite ( u8  screen,
u8  obj_number,
void *  obj_data,
u8  obj_shape,
u8  obj_size,
u8  color_mode,
u8  palette,
s16  x,
s16  y 
) [inline]

Creer un sprite avec ses gfx... Ceci est la version simple de la fonction.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
obj_data Gfx à charger
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
color_mode Mode 256 ou 16 couleurs (1 ou 0).
palette Palette à utiliser (0-15).
x Position X du sprite
y Position Y du sprite

inline void PA_CreateSpriteEx ( u8  screen,
u8  obj_number,
void *  obj_data,
u8  obj_shape,
u8  obj_size,
u8  color_mode,
u8  palette,
u8  obj_mode,
u8  mosaic,
u8  hflip,
u8  vflip,
u8  prio,
u8  dblsize,
s16  x,
s16  y 
) [inline]

Creer un sprite avec ses gfx... Ceci est la version complexe de la fonction.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
obj_data Gfx à charger
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
color_mode Mode 256 ou 16 couleurs (1 ou 0).
palette Palette à utiliser (0-15).
obj_mode Mode du sprite (normal, transparent, fenetre). Pas encore opérationnel, laisser à 0...
mosaic Activer le mode mosaique pour ce sprite. Pas encore au point...
hflip Flip horizontal activé ou non.
vflip Flip vertical...
prio Priorité du sprite vis-à-vis des fonds : devant quel fond l'afficher... (0-3)
dblsize Doubler la taille possible du sprite. A activer uniquement si on compte grossir et faire tourner le sprite
x Position X du sprite
y Position Y du sprite

inline void PA_CreateSpriteExFromGfx ( u8  screen,
u8  obj_number,
u16  obj_gfx,
u8  obj_shape,
u8  obj_size,
u8  color_mode,
u8  palette,
u8  obj_mode,
u8  mosaic,
u8  hflip,
u8  vflip,
u8  prio,
u8  dblsize,
s16  x,
s16  y 
) [inline]

Creer un sprite avec ses gfx... Ceci est la version complexe de la fonction.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
obj_gfx Gfx en mémoire à utiliser. On peut en avoir avec PA_GetSpriteGfx ou PA_CreateGfx
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
color_mode Mode 256 ou 16 couleurs (1 ou 0).
palette Palette à utiliser (0-15).
obj_mode Mode du sprite (normal, transparent, fenetre). Pas encore opérationnel, laisser à 0...
mosaic Activer le mode mosaique pour ce sprite. Pas encore au point...
hflip Flip horizontal activé ou non.
vflip Flip vertical...
prio Priorité du sprite vis-à-vis des fonds : devant quel fond l'afficher... (0-3)
dblsize Doubler la taille possible du sprite. A activer uniquement si on compte grossir et faire tourner le sprite
x Position X du sprite
y Position Y du sprite

inline void PA_CreateSpriteFromGfx ( u8  screen,
u8  obj_number,
u16  obj_gfx,
u8  obj_shape,
u8  obj_size,
u8  color_mode,
u8  palette,
s16  x,
s16  y 
) [inline]

Creer un sprite avec ses gfx... Ceci est la version simple de la fonction.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite que vous voulez utiliser (de 0 à 127 pour chaque écran séparemment).
obj_gfx Gfx en mémoire à utiliser. On peut en avoir avec PA_GetSpriteGfx ou PA_CreateGfx
obj_shape Forme du sprite à charger, de 0 à 2. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
obj_size Taille du sprite. Utiliser la macro OBJ_SIZE_32X32 (...) pour charger la forme et la taille...
color_mode Mode 256 ou 16 couleurs (1 ou 0).
palette Palette à utiliser (0-15).
x Position X du sprite
y Position Y du sprite

void PA_DeleteGfx ( u8  screen,
u16  obj_gfx 
)

Effacer un Gfx. Si un sprite l'utilisait, il deviendra invisible...

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_gfx Numéro du Gfx en mémoire

void PA_DeleteSprite ( u8  screen,
u8  obj_number 
)

Effacer un sprite. S'il était le seul à utiliser un gfx, il sera effacé lui aussi.

Paramètres:
screen Choix de l'écran (0 ou 1)
obj_number Numéro du sprite

inline u8 PA_GetSprite16cPixel ( u8  screen,
u8  sprite,
u8  x,
u8  y 
) [inline]

Récupérer la couleur d'un pixel d'un sprite de 16 couleurs.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
x Coordonnée X du pixel
y Coordonnée Y du pixel

inline u16 PA_GetSpriteAnimFrame ( u8  screen,
u8  sprite 
) [inline]

Renvoie le numéro actuel de la frame d'animation.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite

inline u16 PA_GetSpriteAnimSpeed ( u8  screen,
u8  sprite 
) [inline]

Renvoie la vitesse de l'animation.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite

inline s32 PA_GetSpriteNCycles ( u8  screen,
u8  sprite 
) [inline]

Renvoie le nombre de cycles d'animation restants.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite

inline u8 PA_GetSpritePixel ( u8  screen,
u8  sprite,
u8  x,
u8  y 
) [inline]

Récupérer la couleur d'un pixel d'un sprite. Comme PA_GetSpritePixelEx, avec moins d'options, mais un peu plus lent.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
x Coordonnée X du pixel
y Coordonnée Y du pixel

inline void PA_InitAllSpriteDraw ( void   )  [inline]

Initialise tous les sprites à l'écran pour dessiner dessus.

void PA_InitSpriteDraw ( u8  screen,
u8  sprite 
)

Initialise un sprite pour pouvoir dessiner dessus !

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite

void PA_InitSpriteExtPrio ( u8  SpritePrio  ) 

Activer le systeme de priorité de sprites PAlib. Plus lent que le systeme normal, il permet d'avoir 256 niveaux de priorité (supplante la priorité par numéro de sprites).

Paramètres:
SpritePrio 1 pour on, 0 pour off...

void PA_ResetSpriteSys ( void   ) 

Remise à 0 du système de sprite, de la mémoire...

Paramètres:
screen Choix de l'écran (0 ou 1)

void PA_ResetSpriteSysScreen ( u8  screen  ) 

inline void PA_Set16bitSpriteAlpha ( u8  screen,
u8  sprite,
u8  alpha 
) [inline]

Position X du sprite à l'écran.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro de l'objet dans le systeme de sprite, uniquement pour les sprites 16bit
alpha Paramèter alpha, 0-15

inline void PA_SetRotset ( u8  screen,
u8  rotset,
s16  angle,
u16  zoomx,
u16  zoomy 
) [inline]

Faire tourner et zoomer un sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
rotset Rotset que l'on veut changer. Pour attribuer un rotset à un sprite, utiliser PA_SetSpriteRotEnable
angle Angle, entre 0 et 512 (et non 360, attention !)
zoomx Zoom horizontal. 256 est pas de zoom, 512 2 fois plus petit, et 128 2 fois plus grand... Ajuster au mieux ! :p
zoomy Zoom vertical. 256 est pas de zoom, 512 2 fois plus petit, et 128 2 fois plus grand... Ajuster au mieux ! :p

inline void PA_SetRotsetNoAngle ( u8  screen,
u8  rotset,
u16  zoomx,
u16  zoomy 
) [inline]

Zoomer un sprite sans le faire tourner. C'est un peu plus rapide que la fonction PA_SetRotset.

Paramètres:
screen Choix de l'écran (0 ou 1)
rotset Rotset que l'on veut changer. Pour attribuer un rotset à un sprite, utiliser PA_SetSpriteRotEnable
zoomx Zoom horizontal. 256 est pas de zoom, 512 2 fois plus petit, et 128 2 fois plus grand... Ajuster au mieux ! :p
zoomy Zoom vertical. 256 est pas de zoom, 512 2 fois plus petit, et 128 2 fois plus grand... Ajuster au mieux ! :p

inline void PA_SetRotsetNoZoom ( u8  screen,
u8  rotset,
s16  angle 
) [inline]

Faire tourner un sprite sans zoomer. C'est un peu plus rapide que la fonction PA_SetRotset.

Paramètres:
screen Choix de l'écran (0 ou 1)
rotset Rotset que l'on veut changer. Pour attribuer un rotset à un sprite, utiliser PA_SetSpriteRotEnable
angle Angle, entre 0 et 512 (et non 360, attention !)

inline void PA_SetSpriteAnim ( u8  screen,
u8  sprite,
s16  animframe 
) [inline]

Régler l'image du sprite dans l'animation. Identique à PA_SetSpriteAnimEx, mais plus simple à utiliser, par contre plus lent.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
animframe Frame de l'animation du sprite (0, 1, 2, etc...)

inline void PA_SetSpriteAnimEx ( u8  screen,
u8  sprite,
u8  lx,
u8  ly,
u8  ncolors,
s16  animframe 
) [inline]

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.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
lx Largeur du sprite (8, 16, 32, 64)
ly Hauteur du sprite (8, 16, 32, 64)
ncolors Mode couleur du sprite (0 pour 16 couleurs, 1 pour 256)
animframe Frame de l'animation du sprite (0, 1, 2, etc...)

inline void PA_SetSpriteAnimFrame ( u8  screen,
u8  sprite,
u16  frame 
) [inline]

Changer le numéro actuel de la frame d'animation.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
frame Numéro de frame...

inline void PA_SetSpriteAnimSpeed ( u8  screen,
u8  sprite,
s16  speed 
) [inline]

Changer la vitesse de l'animation.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
speed Vitesse, en fps...

void PA_SetSpriteExtPrio ( u8  screen,
u8  sprite,
u8  prio 
) [inline]

inline void PA_SetSpriteNCycles ( u8  screen,
u8  sprite,
s32  NCycles 
) [inline]

Changer le nombre de cycles d'animation restant (-1 pour inifini).

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
NCycles Nombre de cycles

inline void PA_SetSpritePixel ( u8  screen,
u8  sprite,
u8  x,
u8  y,
u8  color 
) [inline]

Mettre un pixel d'un sprite à une couleur donnée. Comme PA_SetSpritePixelEx, avec moins d'options, mais un peu plus lent.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
x Coordonnée X du pixel à changer
y Coordonnée Y du pixel à changer
color Nouvelle couleur de la palette à metrre

inline void PA_SetSpriteXY ( u8  screen,
u8  sprite,
s16  x,
s16  y 
) [inline]

Position X et Y du sprite à l'écran.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
x Position Y
y Position Y

inline u16 PA_SpriteAnimPause ( u8  screen,
u8  sprite,
u8  pause 
) [inline]

Mettre en Pause en remettre en lecture une animation de sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
pause 1 pour pause, 0 pour reprendre la lecture...

inline void PA_StartSpriteAnim ( u8  screen,
u8  sprite,
s16  firstframe,
s16  lastframe,
s16  speed 
) [inline]

Démarre une animation de sprite. Une fois démarrée, elle continue tant qu'on ne l'arrête pas !

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
firstframe Premières image de l'animation, généralement 0....
lastframe Dernière image à afficher. Une fois atteinte, ca retourne à la première
speed Vitesse, en frames par seconde (fps). 1 signifie donc 1 image par seconde...

void PA_StartSpriteAnimEx ( u8  screen,
u8  sprite,
s16  firstframe,
s16  lastframe,
s16  speed,
u8  type,
s16  ncycles 
)

Démarre une animation de sprite. Une fois démarrée, elle continue tant qu'on ne l'arrête pas !

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
firstframe Premières image de l'animation, généralement 0....
lastframe Dernière image à afficher. Une fois atteinte, ca retourne à la première
speed Vitesse, en frames par seconde (fps). 1 signifie donc 1 image par seconde...
type Défini de quelle manière on veut boucler. ANIM_LOOP (0) pour normal, et ANIM_UPDOWN (1) pour d'avant en arrière
ncycles Nombres de cycles d'animations avant l'arrêt. Si on utilise ANIM_UPDOWN, il faut 2 cycles pour que l'animation revienne à l'image de base

inline void PA_StopSpriteAnim ( u8  screen,
u8  sprite 
) [inline]

Arrêter une animation de sprite.

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite

inline void PA_UpdateGfx ( u8  screen,
u16  gfx_number,
void *  obj_data 
) [inline]

Mettre à jour les Gfx donnés.

Paramètres:
screen Choix de l'écran (0 ou 1)
gfx_number Numéro du Gfx en mémoire
obj_data Graphisme à charger

inline void PA_UpdateGfxAndMem ( u8  screen,
u8  gfx_number,
void *  obj_data 
) [inline]

Mettre à jour les Gfx donnés et le pointer d'animation dans PAlib... Uniquement pour utilisateurs avertis.

Paramètres:
screen Choix de l'écran (0 ou 1)
gfx_number Numéro du Gfx en mémoire
obj_data Graphisme à charger

void PA_UpdateOAM ( void   ) 

Mettre à jour les infos des sprites pour les 2 écrans. A faire dans le VBL.


Généré le Sat Jun 13 12:57:00 2009 pour PAlib - Programmer's Arsenal par  doxygen 1.5.8