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.37; author jandujar; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 2005.11.02.08.30.37; author jandujar; state Exp; branches ; next ; desc @@ 1.1 log @Initial revision @ text @ PA_lib: Sprite system

Sprite system


Macros

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

Description détaillée

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

Documentation des macro

#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 de 16 couleurs 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_GetSpritePixel screen,
sprite,
x,
 )     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

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

#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 & (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 & 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 de 16 couleurs 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_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

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

#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(OBJ_X)) + ((x) & 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(OBJ_Y)) + ((y) & 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_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

Paramètres:
draw_number Numéro du sprite dessinable

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

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

 
#define PA_UpdateOAM  ) 
 

Valeur:

s16 i;\
       for (i = 0; i < 256; i++) {\
              OAM[(i << 2)] = PA_obj[0][i].atr0;\
              OAM[1+(i << 2)] = PA_obj[0][i].atr1;\
              OAM[2+(i << 2)] = PA_obj[0][i].atr2;\
              OAM[3+(i << 2)] = PA_obj[0][i].atr3;}
Mettre à jour les infos des sprites pour les 2 écrans. 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 bool  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 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
[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

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.

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 bool  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). Laisser à 0 si en mode 256 couleurs.
x Position X du sprite
y Position Y du sprite

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
[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). Laisser à 0 si en mode 256 couleurs.
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 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
[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). Laisser à 0 si en mode 256 couleurs.
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 bool  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). Laisser à 0 si en mode 256 couleurs.
x Position X du sprite
y Position Y du sprite

void PA_DeleteGfx bool  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 bool  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

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

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
hsize Taille horizontale (8, 16...)
n_colors 0 ou 1 pour 16 ou 256 couleurs
x Coordonnée X du pixel
y Coordonnée Y du pixel

void PA_InitSpriteDraw bool  screen,
u8  sprite,
u8  draw_number,
u8  drawsize
 

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
draw_number Numéro du sprite que l'on veut dans le systeme de dessin (0-15)
drawsize Taille du trait quand on dessine. 0 pour 1 pixel, 1 pour 2...

inline void PA_SetRotset bool  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 bool  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 bool  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 bool  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 bool  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...)

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

Paramètres:
screen Choix de l'écran (0 ou 1)
sprite Numéro du sprite dans le systeme de sprite
hsize Taille horizontale (8, 16...)
n_colors 0 ou 1 pour 16 ou 256 couleurs
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 bool  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

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

Paramètres:
draw_number Numéro du sprite dessinable
x Position X sur le sprite
y Position Y sur le sprite
color Couleur du trait de la palette


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