Pourquoi ce loadSprite? Moi, je mettrais tout simplement:
typedef void (*spritefunc_t)(short x, short y, short height, const void *sprite, void *vm_addr, short mode);
typedef struct sprite {
void *data_d;
void *data_l;
void *data_m;
unsigned short h;
spritefunc_t drawfunc;
} sprite;
unsigned char smallmario_d[8]={1,2,3,4,5,6,7,8};
unsigned char smallmario_l[8]={1,2,3,4,5,6,7,8};
unsigned char smallmario_m[8]={1,2,3,4,5,6,7,8};
unsigned short bigmario_d[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
unsigned short bigmario_l[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
unsigned short bigmario_m[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
sprite sprites[]={{smallmario_d,smallmario_l,smallmario_m,8,(spritefunc_t)Sprite8},
{bigmario_d,bigmario_l,bigmario_m,16,(spritefunc_t)Sprite16}};
void DrawSprite(sprite *s, short x, short y)
{
s->drawfunc(x,y,s->h,s->data_m,GrayGetPlane(DARK_PLANE),SPRT_AND);
s->drawfunc(x,y,s->h,s->data_m,GrayGetPlane(LIGHT_PLANE),SPRT_AND);
s->drawfunc(x,y,s->h,s->data_d,GrayGetPlane(DARK_PLANE),SPRT_OR);
s->drawfunc(x,y,s->h,s->data_l,GrayGetPlane(LIGHT_PLANE),SPRT_OR);
}