//Définitions
typedef struct
{        //Structure d'un perso
        unsigned short type;                        //Type (identifieur) du sprite
        unsigned short x;                                //Position x (absolue)
        unsigned short y;                                //Position y (absolue)
        unsigned short cpt;                                //Compteur
        unsigned short etat;                        //Etat spécial
        unsigned short depX;                        //Position x de départ
        unsigned short depY;                        //Position y de départ
        short vitesse;                                        //Vitesse du sprite
        short gravite;                                        //Sa gravité
        short angle;                                        //Son angle
        unsigned short hauteur;                        //Sa hauteur
        unsigned short largeur;                        //Sa largeur
        unsigned short (*pFonction) (); //Handler du personnage en question
        unsigned int lParam, wParam;        //Paramètres
        unsigned short instructions;        //Instructions pour le handler standard. Cela peut lui demander par exemple de signaler s'il y a une collision avec le personnage ou le décor, etc. ou de désactiver ces fonctionnalités dans le cas d'objets statiques par exemple, car cela ne sert à rien à part gaspiller du CPU... Le plus utile est notamment si on a besoin de placer le personnage sur le décor en standard, (c'est très compliqué à faire à chaque fois) ce qui est impossible si le personnage se trouve en dehors de l'écran -> dans ce cas-là, on quitte immédiatement le handler, sans calculs inutiles.
} PERSO;

//Constantes
#define LIMITE_PERSOS        128

enum instructions
{
        INSTR_COLLISION_SONIC        = 0x0001,        //Demande de signaler s'il y a eu une collision avec Sonic. N'enverra de message que si Sonic a TUÉ l'ennemi! Dans le cas contraire, le message ne sera pas signalé au personnage en question, mais à Sonic (il va certainement perdre ses bagues).
        INSTR_COLLISION_DECOR        = 0x0002,        //Demande de placer le personnage sur le décor en utilisant les méthodes standard (comme Sonic)
};
enum messages
{
        MSG_COLLISION_SONIC                = 0x0001,        //Message envoyé en réponse à INSTR_COLLISION_SONIC -> le personnage va crever. On lui laisse une dernière chance, peut-être qu'il a plusieurs points de vie ;)
        MSG_AFFICHER                        = 0x0002,        //Message envoyé s'il faut afficher le personnage
};
enum persos { AUCUN = 0, ENNEMI_ROULANT };

//Variables
int posX, posY;
PERSO persos[LIMITE_PERSOS + 2] EWRAM_DATA;

//Fonctions
void IWRAM_CODE VerifieSIlYABesoinDePlacerUnSprite(short x, short y, ECRAN *ecr);
short IWRAM_CODE CollisionEntreDeuxSprites(SONIC *s1, PERSO *s2);
void IWRAM_CODE CreeObjetStandard
                        (
                                unsigned short tiles,
                                unsigned short palette,
                                unsigned short forme,
                                unsigned short taille
                        );
void IWRAM_CODE AfficheSonic(SONIC *perso, ECRAN *ecr);
void IWRAM_CODE InitSprites();