
OUI OUI OUI! Je serais vraiment content d'avoir tes routines! (je sais pas si le smiley est vraiment le plus adapté...)
Et pour le clipping horizontal, je n'ai pas trop compris ton truc : si on veut afficher un sprite entre 0 et -15 on doit faire comment ?
Le fait est simplement que
je n'ai pas besoin de clipping horizontal! J'annule la fonction dans le cas où on dessinerait vraiment le sprite trop loin (du genre SpriteX(160,.. qui ne sert plus à rien.) sinon le clipping horizontal doit pas mal ralentir non?
Mais voilà déjà ma routine:
void SPRITE_16(short x,short y,short h,unsigned short* sprite,unsigned short* sprite1,unsigned short* sprite2,void* dest1, void *dest2) {
if (x<-15 || x>159) return;
if (y<1) {
sprite+=1-y;
sprite1+=1-y;
sprite2+=1-y;
h-=1-y;
y=1;
}
if (y+h>92) h-=(y+h-92);
if (x<0) {
x=240+x;
y--;
}
if (h<0) return;
register long addr1 = (long)dest1+(y<<5)-(y<<1)+((x>>3)&0x1e);
register long addr2 = (long)dest2+(y<<5)-(y<<1)+((x>>3)&0x1e);
register unsigned short cnt = 16-(x&15);
for (;h;h--,addr1+=30,addr2+=30) {
//MASQUE
*(long*)addr1&=~((long)~((*sprite) & 0xffff)<<cnt);
*(long*)addr2&=~((long)~((*sprite++) & 0xffff)<<cnt);
//AFFICHE
*(long*)addr1|=(long)((*sprite1++) & 0xffff)<<cnt;
*(long*)addr2|=(long)((*sprite2++) & 0xffff)<<cnt;
}
}
Cette routine fait TOUT en même temps; le masque, le sprite clair, le sprite foncé sur les deux plans définis. Mais voici une des fonctions de départ que j'avais réalisé pour mon Sonic (ah...) J'avais réalisé mes propres routines à l'époque... mais maintenant j'utilise simplement celles de extgraph. Ca marche bien et c'est rapide. J'ai juste ajouté mon code de clipping au départ:
void Sprite16_OR(short x,short y,short h,unsigned short* sprite,void* dest) {
if (x<-15 || x>159) return;
if (y<1) {
sprite+=1-y;
h-=1-y;
y=1;
}
if (y+h>92) h-=(y+h-92);
if (x<0) {
x=240+x;
y--;
}
if (h<0) return;
register long addr = (long)dest+(y<<5)-(y<<1)+((x>>3)&0x1e);
register unsigned short cnt = 16-(x&15);
for (;h;h--,addr+=30) *(long*)addr|=(long)((*sprite++) & 0xffff)<<cnt;
}
Tu peux me les envoyer à f.bron@isuisse.com ou bien la mettre sur ce forum. Ca aidera des gens peut-être... Merci en tous cas.