Kevin Kofler a écrit :
Euh, tu connais ENABLE_ERROR_RETURN et ER_throw? Ça serait mieux que tes error. Et ça prendrait aussi moins de place parce qu'il n'y aurait pas besoin de messages (ils sont déjà dans AMS).
void move_leader(void)
{
move=0;
j = gl_read_joypad();
if (!j.up_key) {dir=0; if(y_hero>30)y_hero-=2; else P->ys--; time++; if(time>=7){action++;time=0;} if (action==7) action=1; move=1;}
if (!j.down_key) {dir=7; if(y_hero<scroll_max_y)y_hero+=2; else P->ys++; if(move==0 ){time++;if(time>=7){action++;time=0;}} if (action==7) action=1; move=1;}
if (!j.left_key) {dir=14; if(x_hero>30)x_hero-=2; else P->xs--; if(move==0){time++;if(time>=7){action++;time=0;}} if (action==7) action=1; move=1;}
if (!j.right_key){dir=21; if(x_hero<scroll_max_x)x_hero+=2; else P->xs++; if(move==0 ){time++;if(time>=7){action++;time=0;}} if (action==7) action=1; move=1;}
if(move==0) {action=0;leaderm++;}
else leaderm=0;
if (leaderm>100) {
if (dir==14 || dir==7)ani1=anime_perso(hawk,x_hero,y_hero,28,2,ani1);
else ani1=anime_perso(hawk,x_hero,y_hero,30,2,ani1);
}
else gl_put_big_sprite(x_hero,y_hero,hawk[dir+action]);
}
//**************************************************Recursive zone detection
short make_zone(short x,short y, short y_min)
{
map2[x+y*size_x].user=0; // id sert juste à savoir le n° du spr qu'on enregistre ds zones
tiles[id_tile*4+0]=x*16;
tiles[id_tile*4+1]=y*16;
tiles[id_tile*4+2]=id_zone;
tiles[id_tile*4+3]=map2[x+y*size_x].fliph+map2[x+y*size_x].flipv*2;
if (y*16+15>y_min) y_min=y*16+15; // y_min servira en tant que coordonnée de pieds pour l'affichage
id_tile++;
if (x!=0 && map2[x-1+(y)*size_x].user!=0) make_zone(x-1,y,y_min);
if (y!=0 && map2[x+(y-1)*size_x].user!=0) make_zone(x,y-1,y_min);
if (x!=size_x-1 && map2[x+1+(y)*size_x].user!=0) make_zone(x+1,y,y_min);
if (y!=size_y-1 && map2[x+(y+1)*size_x].user!=0) make_zone(x,y+1,y_min);
return y_min;
}
//**************************************************collisions avec les autres
char collision_autres(short perso, short x, short y, short xx, short yy)
{
short a;
for(a=0;a<nbre_autres;a++){
if(a!=perso && x>=data_autres[A_spr(a)][1]+A_x(a)
&& x<=data_autres[A_spr(a)][2]+A_x(a)
&& y<=data_autres[A_spr(a)][3]+A_y(a)
&& y>=data_autres[A_spr(a)][4]+A_y(a) )
return 0;
if(a!=perso && xx>=data_autres[A_spr(a)][1]+A_x(a)
&& xx<=data_autres[A_spr(a)][2]+A_x(a)
&& yy<=data_autres[A_spr(a)][3]+A_y(a)
&& yy>=data_autres[A_spr(a)][4]+A_y(a) )
return 0;}
if (perso!=100 && x<=(leader.x_pos+data_leaders[leader.spr][1])
&& x>=(leader.x_pos+data_leaders[leader.spr][0])
&& y<=(leader.y_pos+data_leaders[leader.spr][2])
&& y>=(leader.y_pos+data_leaders[leader.spr][3]) ) return 0;
if (perso!=100 && xx<=(leader.x_pos+data_leaders[leader.spr][1])
&& xx>=(leader.x_pos+data_leaders[leader.spr][0])
&& yy<=(leader.y_pos+data_leaders[leader.spr][2])
&& yy>=(leader.y_pos+data_leaders[leader.spr][3]) ) return 0;
return 1;
}
//****************************************************deplacements du leader
void move_leader(void)
{
short xx=0,yy=0,follow_h=0,follow_v=0;
move=0;
leader.max_animation=0;
j = gl_read_joypad();
if(!j.ka_key)
{
if(!j.up_key) yy-=8;
if(!j.down_key) yy+=8;
if(!j.left_key) xx-=8;
if(!j.right_key) xx+=8;
Start_Dlg((dialogue_autres(leader.x_pos+data_leaders[leader.spr][0]+xx,leader.y_pos+data_leaders[leader.spr][3]+yy,leader.x_pos+data_leaders[leader.spr][1]+xx,leader.y_pos+data_leaders[leader.spr][3]+yy)) );
}
if (!j.up_key ){leader.animation=STAND_UP; if(!detect_mur(leader.x_pos+data_leaders[leader.spr][0],leader.y_pos+data_leaders[leader.spr][3]-4,leader.x_pos+data_leaders[leader.spr][1],leader.y_pos+data_leaders[leader.spr][3]-4) && collision_autres(100,leader.x_pos+data_leaders[leader.spr][0],leader.y_pos+data_leaders[leader.spr][3]-4,leader.x_pos+data_leaders[leader.spr][1],leader.y_pos+data_leaders[leader.spr][3]-4)==1) {if(leader.leader!=0) follow_v-=4; if(leader.y_pos-follow.y_pos>-20){ follow_v=0; } if(leader.y_pos-P->ys<=50 && P->ys!=0 ) P->ys-=4; leader.y_pos-=4;} timer_hero_inc();}
if (!j.down_key ){leader.animation=STAND_DOWN; if(!detect_mur(leader.x_pos+data_leaders[leader.spr][0],leader.y_pos+data_leaders[leader.spr][2]+4,leader.x_pos+data_leaders[leader.spr][1],leader.y_pos+data_leaders[leader.spr][2]+4) && collision_autres(100,leader.x_pos+data_leaders[leader.spr][0],leader.y_pos+data_leaders[leader.spr][2]+4,leader.x_pos+data_leaders[leader.spr][1],leader.y_pos+data_leaders[leader.spr][2]+4)==1) {if(leader.leader!=0) follow_v+=4; if(leader.y_pos-follow.y_pos<20){ follow_v-=4;} if(leader.y_pos-P->ys>=scroll_max_y && P->ys!=size_y*16-(max_map_y)) P->ys+=4; leader.y_pos+=4;} timer_hero_inc();}
if (!j.left_key ){leader.animation=STAND_LEFT; if(!detect_mur(leader.x_pos+data_leaders[leader.spr][0]-4,leader.y_pos+data_leaders[leader.spr][2],leader.x_pos+data_leaders[leader.spr][0]-4,leader.y_pos+data_leaders[leader.spr][3]) && collision_autres(100,leader.x_pos+data_leaders[leader.spr][0]-4,leader.y_pos+data_leaders[leader.spr][2],leader.x_pos+data_leaders[leader.spr][0]-4,leader.y_pos+data_leaders[leader.spr][3])==1) {if(leader.leader!=0) follow_h-=4; if(leader.x_pos-follow.x_pos>-20){ follow_h=0; } if(leader.x_pos-P->xs<=70 && P->xs!=0 ) P->xs-=4; leader.x_pos-=4;} timer_hero_inc();}
if (!j.right_key){leader.animation=STAND_RIGHT;if(!detect_mur(leader.x_pos+data_leaders[leader.spr][1]+4,leader.y_pos+data_leaders[leader.spr][2],leader.x_pos+data_leaders[leader.spr][1]+4,leader.y_pos+data_leaders[leader.spr][3]) && collision_autres(100,leader.x_pos+data_leaders[leader.spr][1]+4,leader.y_pos+data_leaders[leader.spr][3],leader.x_pos+data_leaders[leader.spr][1]+4,leader.y_pos+data_leaders[leader.spr][2])==1) {if(leader.leader!=0) follow_h+=4; if(leader.x_pos-follow.x_pos<20){ follow_h-=4; } if(leader.x_pos-P->xs>=scroll_max_x && P->xs!=size_x*16-(max_map_x)) P->xs+=4; leader.x_pos+=4;} timer_hero_inc();}
if(move==0 ) { if (timer_anime!=100) leader.pos_animation=0; timer_anime++;}
if(leader.leader!=0) { follow_tab_inc(); follow_tab[3][0]=follow_v; follow_tab[2][0]=follow_h; follow.animation=follow_tab[0][9]; /*REGLER çA--->*/follow_tab[0][0]=leader.animation; follow.pos_animation=follow_tab[1][9]; follow_tab[1][0]=(follow_h==0 && follow_v==0?0:leader.pos_animation); follow.x_pos+=follow_tab[2][9]; follow.y_pos+=follow_tab[3][9];}
}
//****************************************************detections pour les autres
char go_up(void)
{
if (!detect_mur(A_x(move)+data_autres[A_spr(move)][1],data_autres[A_spr(move)][4]+A_y(move)-2,A_x(move)+data_autres[A_spr(move)][2],A_y(move)+data_autres[A_spr(move)][4]-2)
&& collision_autres(move,A_x(move)+data_autres[A_spr(move)][1],A_y(move)+data_autres[A_spr(move)][3]-2,A_x(move)+data_autres[A_spr(move)][2],A_y(move)+data_autres[A_spr(move)][3]-2)==1)
return 1;
return 0;
}
char go_down(void)
{
if (!detect_mur(A_x(move)+data_autres[A_spr(move)][1],data_autres[A_spr(move)][3]+A_y(move)+2,A_x(move)+data_autres[A_spr(move)][2],A_y(move)+data_autres[A_spr(move)][3]+2)
&& collision_autres(move,A_x(move)+data_autres[A_spr(move)][2],A_y(move)+data_autres[A_spr(move)][4]+2,A_x(move)+data_autres[A_spr(move)][1],A_y(move)+data_autres[A_spr(move)][4]+2)==1)
return 1;
return 0;
}
char go_left(void)
{
if (!detect_mur(A_x(move)+data_autres[A_spr(move)][1]-2,data_autres[A_spr(move)][3]+A_y(move),A_x(move)+data_autres[A_spr(move)][1]-2,A_y(move)+data_autres[A_spr(move)][4])
&& collision_autres(move,A_x(move)+data_autres[A_spr(move)][1]-2,A_y(move)+data_autres[A_spr(move)][3],A_x(move)+data_autres[A_spr(move)][1]-2,A_y(move)+data_autres[A_spr(move)][4])==1)
return 1;
return 0;
}
char go_right(void)
{
if(!detect_mur(A_x(move)+data_autres[A_spr(move)][1]+2,data_autres[A_spr(move)][3]+A_y(move),A_x(move)+data_autres[A_spr(move)][2]+2,A_y(move)+data_autres[A_spr(move)][4])
&& collision_autres(move,A_x(move)+data_autres[A_spr(move)][2]+2,A_y(move)+data_autres[A_spr(move)][3],A_x(move)+data_autres[A_spr(move)][2]+2,A_y(move)+data_autres[A_spr(move)][4])==1)
return 1;
return 0;
}
//****************************************************deplacements calculés des autres
void move_autres_square(void)
{
if (A_psens(move)==0)//0 ->, 1 bas, 2 <-, 3 haut
{
A_anim(move)=STAND_RIGHT;
module_autres();
if (go_right()==1)
A_x(move)+=2;
else {A_psens(move)=2; A_sens(move)^=1; }
if(A_hv(move)>=A_mouvx(move)) {A_hv(move)=0; A_psens(move)=(A_sens(move)==0?1:3);}
}
else
if (A_psens(move)==2)//0 ->, 1 bas, 2 <-, 3 haut
{
A_anim(move)=STAND_LEFT;
module_autres();
if(go_left()==1)
A_x(move)-=2;
else {A_psens(move)=0; A_sens(move)^=1; }
if(A_hv(move)>=A_mouvx(move)) {A_hv(move)=0; A_psens(move)=(A_sens(move)==0?3:1);}
}
else
if (A_psens(move)==1)//0 ->, 1 bas, 2 <-, 3 haut
{
A_anim(move)=STAND_DOWN;
module_autres();
if(go_down()==1)
A_y(move)+=2;
else {A_psens(move)=3; A_sens(move)^=1; }
if(A_hv(move)>=A_mouvy(move)) {A_hv(move)=0; A_psens(move)=(A_sens(move)==0?2:0);}
}
else
if (A_psens(move)==3)//0 ->, 1 bas, 2 <-, 3 haut
{
A_anim(move)=STAND_UP;
module_autres();
if(go_up()==1)
A_y(move)-=2;
else {A_psens(move)=1; A_sens(move)^=1; }
if(A_hv(move)>=A_mouvy(move)) {A_hv(move)=0; A_psens(move)=(A_sens(move)==0?0:2);}
}
}
//*************************************************deplacements autres aléatoires
void move_autres_random(void)
{
if(A_timm(move)==0)
{
A_hv(move)=random(2);
A_mouvx(move)=(random(81)-40)*4;
A_mouvy(move)=(random(81)-40)*4;
A_timm(move)=random(9)+20;
if(A_hv(move)==1){A_anim(move)=(A_mouvx(move)<0?STAND_LEFT:STAND_RIGHT); A_mouvy(move)=0;}
else {A_anim(move)=(A_mouvy(move)<0?STAND_UP:STAND_DOWN); A_mouvx(move)=0;}
A_timer(move)=0; A_panim(move)=1;
}
if (A_anim(move)==STAND_UP && A_mouvy(move)!=0)
{
module_autres();
if(go_up()==1)
A_y(move)-=2;
else A_mouvy(move)=-2;
A_mouvy(move)+=2;
}
if (A_anim(move)==STAND_DOWN && A_mouvy(move)!=0)
{
module_autres();
if(go_down()==1)
A_y(move)+=2;
else A_mouvy(move)=2;
A_mouvy(move)-=2;
}
if (A_anim(move)==STAND_LEFT && A_mouvx(move)!=0)
{
module_autres();
if(go_left()==1)
A_x(move)-=2;
else A_mouvx(move)=-2;
A_mouvx(move)+=2;
}
if (A_anim(move)==STAND_RIGHT && A_mouvx(move)!=0)
{
module_autres();
if(go_right()==1)
A_x(move)+=2;
else A_mouvx(move)=2;
A_mouvx(move)-=2;
}
if(A_mouvx(move)==0 && A_mouvy(move)==0){A_panim(move)=0; A_timm(move)--;}
}