PAlib: Sprite system

Page principale | Modules | Liste des fichiers | Portée globale | Rechercher

# 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(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 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 (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_Create16bitSpriteFromGfx (bool 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 (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_UpdateGfx (bool screen, u16 gfx_number, void *obj_data)
| Mettre à jour les Gfx donnés
void | PA_UpdateGfxAndMem (bool 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 (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_StartSpriteAnimEx (bool 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 (bool 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 (bool screen, u8 sprite)
| Arrêter une animation de sprite
void | PA_SetSpriteAnimFrame (bool screen, u8 sprite, u16 frame)
| Changer le numéro actuel de la frame d'animation
u16 | PA_GetSpriteAnimFrame (bool screen, u8 sprite)
| Renvoie le numéro actuel de la frame d'animation
void | PA_SetSpriteAnimSpeed (bool screen, u8 sprite, s16 speed)
| Changer la vitesse de l'animation
u16 | PA_GetSpriteAnimSpeed (bool screen, u8 sprite)
| Renvoie la vitesse de l'animation
void | PA_SetSpriteNCycles (bool screen, u8 sprite, s16 NCycles)
| Changer le nombre de cycles d'animation restant (-1 pour inifini)
u16 | PA_GetSpriteNCycles (bool screen, u8 sprite)
| Renvoie le nombre de cycles d'animation restants
void | PA_SpriteAnimPause (bool screen, u8 sprite, bool pause)
| Mettre en Pause en remettre en lecture une animation de sprite
void | PA_SetSpritePixel (bool 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 (bool 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
void | PA_InitSpriteDraw (bool 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 (bool 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 (bool screen, u8 sprite, u8 prio)

## 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 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 & (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 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,
|  | x |  | ) | 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,
|  | y |  | ) | 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_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

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

inline u16 PA_GetSpriteAnimFrame | ( | bool | 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 | ( | bool | 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 u16 PA_GetSpriteNCycles | ( | bool | 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 | ( | bool | 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

void PA_InitSpriteDraw | ( | bool | 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 | ( | bool | 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...

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

inline void PA_SetSpriteAnimFrame | ( | bool | 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 | ( | bool | 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...

inline void PA_SetSpriteNCycles | ( | bool | screen,
|  | u8 | sprite,
|  | s16 | 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 | ( | bool | 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 | ( | 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

inline u16 PA_SpriteAnimPause | ( | bool | screen,
|  | u8 | sprite,
|  | bool | 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 | ( | bool | 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 | ( | bool | 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 | ( | bool | 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 | ( | bool | 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 | ( | bool | 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