viiii vala! C'est EXACTEMENT CA!!!

Je me doutait bien que le problème venait de là!

seulement je vois pas comment faire pour qu'un nouvel angle soit attribué à chaque tir!
En fait, j'avais une routine (que j'ai repompé en parti dans le code de jetfighter dans un sos de cid) qui fonctionne mais qui rame pas mal, mais j'arrive pas a reprendre le code de mollusk dessus (c'est pas la même logique) :
(c):
if (Pad.Newpress.L)
{
bullet[Index].posx = Player1.posx; // le shoot est créer au meme x que jet, 15 pixel a coté
bullet[Index].posy = Player1.posy;// le shoot est créer au meme x que jet, pixel a coté
bullet[Index].speedy =2;
// bullet[Index].Shoot_rotset = rotset;
bullet[Index].angle = angle;
bullet[Index].Shooting =TRUE;
PA_CreateSprite(0,Index + 20, (void*)laser2_Sprite, OBJ_SIZE_16X16, 1, 2, bullet[Index+1].posx, bullet[Index+1].posy);
PA_CreateSprite(0, Index + 40,(void*)explosion_Sprite, OBJ_SIZE_16X16,1, 1, 0,0);
// PA_SetSpriteRotEnable(0,Index + 20, bullet[Index].Shoot_rotset); on fait tourné le shoot type laser
Index++;
// rotset++; // un rotset par laser
if (Index >=BULLET) Index = 0;
// if (rotset >=BULLET) rotset = 1; // C'est le rotset du laser => le rotset 0 c'est le player : donc quand on a atteint BULLET (25) le rotset revient a 1
}
for (i =0; i < BULLET; i++)
{
if (bullet[i].Shooting)
{
bullet[i].posx+= bullet[i].speedy * PA_Cos(bullet[i].angle) >>8; //Player1.speedy;
bullet[i].posy -= bullet[i].speedy * PA_Sin(bullet[i].angle)>>8; // Player1.speedy;
PA_SetSpriteXY(0,i+20, bullet[i].posx, bullet[i].posy);
// PA_SetRotsetNoZoom(0, bullet[i].Shoot_rotset, bullet[i].angle); // Lazer qui prend l'orientation du joueur
// SHOOT_COLLISION
// arret du shoot quand il touche un mur
for (b=0;b<8;b++)
{
if (PA_EasyBgGetPixel (0, 3, bullet[i].posx+b, bullet[i].posy-1+8)==1) bullet[i].Shooting =FALSE;
if (PA_EasyBgGetPixel (0, 3, bullet[i].posx+b, bullet[i].posy+8+8)==1) bullet[i].Shooting =FALSE;
if (PA_EasyBgGetPixel (0, 3, bullet[i].posx-1, bullet[i].posy+i+8)==1) bullet[i].Shooting =FALSE;
if (PA_EasyBgGetPixel (0, 3, bullet[i].posx+8, bullet[i].posy+i+8)==1) bullet[i].Shooting =FALSE;
}
// rend le sprite shoot transparent et place le sprite explosion a la place
if ( bullet[i].Shooting==FALSE )// si l'animation s'arrete et que le sprite est dans l'écran
{
PA_SetSpriteAnim(0,i+20,1);
PA_SetSpriteXY(0,i+40,bullet[i].posx,bullet[i].posy);
PA_StartSpriteAnimEx(0,i+40, 0, 7, 20, ANIM_ONESHOT);
}
// si le sprite est en dehors de l'écran, il s'arrete et deviens transparant
if (bullet[i].posx>255||bullet[i].posx<0) PA_SetSpriteAnim(0,i+20,1);
if (bullet[i].posy>192||bullet[i].posy<0) PA_SetSpriteAnim(0,i+20,1);
}
}
Ce code fonctionne a peu près bien mais il rame, et sature la mémoire, c'est super nettement moin optimisé et adapté que le code de Momo

! Les rotsets sont en commentaires, mais il fonctionnent, pour chaque tire. Et les tires se dirige indépendament!
Et je sais pas si c'est une histoire de fixed point, mais le code de Momo est nettement plus précis : les shoots suivent beaucoup plus la trajectoire du stylet!
C'est pour ca que je voudrais partir sur le code de Momo : c'est mieux

Edit : dans ce code, le shoot repère la collision au mur pour mon alien breed, il arrête le shoot dans sa lancée, et lance une anime explosion

mine de rien, je vais même pouvoir faire rebondire des shoots!
