diff options
author | Damien Appert <dappert> | 2010-10-19 13:41:53 +0000 |
---|---|---|
committer | Damien Appert <dappert> | 2010-10-19 13:41:53 +0000 |
commit | a4ae58a9200752a643edd1813d204bfd2f1c73a0 (patch) | |
tree | 6e99fc769ca56b2ca35a2011d57f81871558246d /sdl-test | |
parent | 2dfe54acd379d6ac0496fe0fc47a1e7e568b3be1 (diff) | |
download | 2010-netlemmings-a4ae58a9200752a643edd1813d204bfd2f1c73a0.tar.gz 2010-netlemmings-a4ae58a9200752a643edd1813d204bfd2f1c73a0.tar.bz2 2010-netlemmings-a4ae58a9200752a643edd1813d204bfd2f1c73a0.zip |
mieux pour les object
git-svn-id: file:///var/svn/2010-netlemmings/trunk@104 077b3477-7977-48bd-8428-443f22f7bfda
Diffstat (limited to 'sdl-test')
-rw-r--r-- | sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy | 1676 |
1 files changed, 832 insertions, 844 deletions
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy index ff5ad05..81ced89 100644 --- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy +++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy @@ -11,7 +11,7 @@ #include <stdlib.h> /** time per frame in microseconds - this is the timing everything else is based on */ -#define FPS 100 +#define FPS 30 /** redraw animated level obejcts every 3rd frame (about 100ms) */ #define ANIM_STEP_FPS 3 @@ -27,7 +27,7 @@ const int INTERFACE_HEIGHT = 150;//200; //Les attributs de l'écran (640 * 480) - const int SCREEN_WIDTH = 100; + const int SCREEN_WIDTH = 1280; const int SCREEN_HEIGHT = 480; //SCREEN_HEIGHT = LEVEL_HEIGHT + INTERFACE_HEIGHT + 10; const int SCREEN_BPP = 32; @@ -1037,16 +1037,16 @@ inline Uint32 get_pixel32( int x, int y, SDL_Surface *surface ) //Recupere le pixel demande /*printf("out get_pixel32 !! => (((y %d * surface->w %d ) + x %d) => %d >= surface->h %d *surface->w %d = %d)\n",y,surface->w,x,(y * surface->w ) + x,surface->h,surface->w,surface->h*surface->w);*/ - /* if ( surface==NULL ) { printf("ludo1\n"); return (ccc_error); } +/* if ( surface==NULL ) { printf("ludo1\n"); return (ccc_error); } if ( pixels==NULL ) { printf("ludo2\n"); return (ccc_error); } if((((y * surface->w ) + x) >= surface->h*surface->w)|| - (((y * surface->w ) + x) < 0)){*/ + (((y * surface->w ) + x) < 0)){ if(y==surface->h){printf("get C'EST PAS ASSEZ GROS POUR TOI !!!! y=surface->h\n"); return (ccc_error);} - /* printf("out get_pixel32 !! => (((y %d * surface->w %d ) + x %d) => %d >= surface->h %d *surface->w %d = %d)\n",y,surface->w,x,(y * surface->w ) + x,surface->h,surface->w,surface->h*surface->w); + printf("out get_pixel32 !! => (((y %d * surface->w %d ) + x %d) => %d >= surface->h %d *surface->w %d = %d)\n",y,surface->w,x,(y * surface->w ) + x,surface->h,surface->w,surface->h*surface->w); return (ccc_error); } */ @@ -1062,13 +1062,13 @@ inline int putPixel(SDL_Surface *surface,Uint16 x,Uint16 y,Uint32 colori) /* pointeur vers le pixel a remplacer */ /* if((((y * surface->w ) + x) >= surface->h*surface->w)|| - (((y * surface->w ) + x) < 0)){*/ + (((y * surface->w ) + x) < 0)){ + printf("out putPixel !! => (((y %d * surface->w %d ) + x %d) => %d >= surface->h %d *surface->w %d = %d)\n",y,surface->w,x,(y * surface->w ) + x,surface->h,surface->w,surface->h*surface->w); + return (101); + } +*/ if(y==surface->h){printf("put C'EST PAS ASSEZ GROS POUR TOI !!!! y=surface->h\n"); return (100);} - /* printf("out putPixel !! => (((y %d * surface->w %d ) + x %d) => %d >= surface->h %d *surface->w %d = %d)\n",y,surface->w,x,(y * surface->w ) + x,surface->h,surface->w,surface->h*surface->w); - return (101); - }*/ - Uint8 *p = ((Uint8 *)surface->pixels) + y * surface->pitch + x * bpp; /*printf("pixel R = %X G = %X B = %X A=%X bpp = %d, ccc=%X \n", @@ -1121,7 +1121,7 @@ int checkPixelDOWN(int nbr, int x, int y){ if(yb+res >= LEVEL_HEIGHT){ return FALL_DISTANCE_FORCE_FALL; } - putPixel(pSpr_Lem,x,yb+res,ccc_red); + putPixel(pSpr_Lem,x,yb+res,ccc_red); err=get_pixel32(x,yb+res,pStencil); if(err==ccc_error){return 113;} @@ -1150,9 +1150,9 @@ int checkPixelUP(int nbr, int x, int y, int size ){ if(ym-res <= 0){ return -1;//splat } - + putPixel(pSpr_Lem,x,ym-res,ccc_green); - + err=get_pixel32(x,ym-res,pStencil); if(err==ccc_error){return 113;} @@ -1191,9 +1191,9 @@ int aboveGround(int x, int y) { if(y-res<0){ return WALKER_OBSTACLE_HEIGHT +1;// forbid leaving level to the top } - + putPixel(pSpr_Lem,x,y-res,ccc_cyan); - + err=get_pixel32(x,y-res,pStencil); if(err==ccc_error){return 114;} @@ -1250,7 +1250,7 @@ int stencilMid(int x, int y, int size) { Uint32 err; int ym = midY(y,size); if (x>0 && x<LEVEL_WIDTH && ym > 0 && ym < LEVEL_HEIGHT){ - + putPixel(pSpr_Lem,x,y,0xff00ff); err=get_pixel32(x,ym,pStencil); } @@ -1479,7 +1479,7 @@ int stateLemming(struct gameInit *gInit){ break; } case 22: // FLOATER_START - printf("FLOATER_START ->"); + printf("FLOATER_START ->"); if(boom){ explode (k->x+fx,k->y+fy,fs); k->ID=10;//BOMBER @@ -1502,7 +1502,7 @@ int stateLemming(struct gameInit *gInit){ } case 4 : //FLOATER - printf("FLOATER ->"); + printf("FLOATER ->"); if(boom){ explode (k->x+fx,k->y+fy,fs); k->ID=10;//BOMBER @@ -1524,12 +1524,12 @@ int stateLemming(struct gameInit *gInit){ k->data.pl->cptFall=0; } } else { - k->ID=17; - } + k->ID=17; + } break; case 2 : // CLIMBER - printf("CLIMBER ->"); + printf("CLIMBER ->"); if(boom){ explode (k->x+fx,k->y+fy,fs); k->ID=10;//BOMBER @@ -1555,7 +1555,7 @@ int stateLemming(struct gameInit *gInit){ break; case 5: //SPLAT - printf("SPLAT ->"); + printf("SPLAT ->"); if(boom){ explode (k->x+fx,k->y+fy,fs); k->ID=10;//BOMBER @@ -1630,7 +1630,7 @@ int stateLemming(struct gameInit *gInit){ //ETC ... */ case 12: //BUILDER_END - printf("BUILDER_END ->"); + printf("BUILDER_END ->"); if(boom){ k->ID=10;//BOMBER if(!gInit->mapI.nuke){ @@ -1644,7 +1644,7 @@ int stateLemming(struct gameInit *gInit){ case 11: // BUILDER { - printf("BUILDER ->"); + printf("BUILDER ->"); if(boom){ k->ID=10;//BOMBER if(!gInit->mapI.nuke){ @@ -1737,7 +1737,7 @@ int stateLemming(struct gameInit *gInit){ break; } case 21: //BOMBER_STOPPER: - printf("BOMBER_STOPPER ->"); + printf("BOMBER_STOPPER ->"); free=checkPixelDOWN(FLOATER_STEP, k->x+fx,k->y+fy); if(free==113){return 113;} if(free>0){ @@ -1748,7 +1748,7 @@ int stateLemming(struct gameInit *gInit){ } else {break;} case 10: // BOMBER - printf("BOMBER ->"); + printf("BOMBER ->"); free=checkPixelDOWN(FLOATER_STEP, k->x+fx,k->y+fy); if(free==113){return 113;} if(free==FALL_DISTANCE_FORCE_FALL) @@ -1761,7 +1761,7 @@ int stateLemming(struct gameInit *gInit){ break; default: - printf("default ->"); + printf("default ->"); if(boom){ explode (k->x+fx,k->y+fy,fs); k->ID=10;//BOMBER @@ -2748,12 +2748,18 @@ int stateLemming(struct gameInit *gInit){ int ox,oy; int mode=0; Uint32 color,color2,color3; + int size; + void *temp_pixels = NULL; //DEBUT TEST: SPR k=gInit->o.lo; while ( k !=NULL ) { sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+k->ID*2+k->data.po->UD+ADD_OBJ]; + size=sf->h*sf->pitch; + temp_pixels=malloc(size); + //memcpy(temp_pixels,sf->pixels,size); + type=gInit->mapI.map.tabDataSprO[k->ID].type; @@ -2779,943 +2785,925 @@ int stateLemming(struct gameInit *gInit){ mode=k->data.po->paintMode; - //if((type!=3)&&(type!=4)){//&&(type!=5)){ - - /* switch(mode){ - case 0:break;// FULL - case 4:break;//No Overwrite - case 8: break;//Vis On Terrain - default:{printf("BUG: value is not 8 4 or 0 : %d \n",mode);return(36);} - }*/ - - - - switch(type){ - case 0://passive - SDL_FillRect(pStencil, &rStencil, ccc_oPassive);break; - case 3://no digging to the left - SDL_FillRect(pStencil, &rStencil, ccc_oNoDigLeft);break; - case 4://no digging to the right - SDL_FillRect(pStencil, &rStencil, ccc_oNoDigRight);break; - case 5://trap which makes lemmings drown (water/quick sand/mud) - SDL_FillRect(pStencil, &rStencil, ccc_oTrapDrown);break; - case 6://trap which replaces lemming with death animation - SDL_FillRect(pStencil, &rStencil, ccc_oTrapAndNoLem);break; - case 7://trap which triggers lemming death animation - SDL_FillRect(pStencil, &rStencil, ccc_oTrapAndLem);break; - case 8://exit - SDL_FillRect(pStencil, &rStencil, ccc_oExit);break; - case 32://entry - SDL_FillRect(pStencil, &rStencil, ccc_oEntry); - break; - default:SDL_FillRect(pStencil, &rStencil, ccc_oUnknow);break; - } - //if(k->data.po->paintMode==8){ - if ((res=SDL_BlitSurface(sf, &objetAnim, pSpr_Lem, &offset)) != 0) - { - printf("ERREUR [%d] SDL_BlitSurface : ",res); - } - - switch(mode){ - case 0:break;// FULL - case 4: {//No Overwrite - //SDL_SetColorKey(pStencilFixe, SDL_SRCCOLORKEY|SDL_RLEACCEL, ccc_black); - SDL_BlitSurface(pStencilFixe, &rStencil, pStencil, &rStencil); - //SDL_SetColorKey(pStencilFixe, SDL_SRCCOLORKEY|SDL_RLEACCEL, 0); - SDL_BlitSurface(pTerrain, &rStencil, pSpr_Lem, &rStencil); - break; - } - case 8: break;//Vis On Terrain - default:{printf("BUG: value is not 8 4 or 0 : %d \n",mode);return(36);} - } - /* - } else { - //if(1==0){ - for(oy=k->y;oy<rStencil.h+k->y;oy+=2){ - if(oy<0) {continue;} - if(oy>pSpr_Lem->h){continue;} - for(ox=k->x;ox<rStencil.w+k->x;ox+=2){ - if(ox<0) {continue;} - if(ox>pSpr_Lem->w){continue;} - - // printf("pixel R = %X G = %X B = %X ->", - // ((color>>16) & 0xff), - // ((color>>8) & 0xff), - // (color & 0xff) ); - if(oy>=LEVEL_HEIGHT) {continue;} - if(ox>=LEVEL_WIDTH) {continue;} - color = get_pixel32(ox,oy,pStencil); - color2 = get_pixel32(objetAnim.x+ox-k->x,objetAnim.y+oy-k->y,sf); - color3 = get_pixel32(ox,oy,pTerrain); - if(color==ccc_error){return 254;} - if(color2==ccc_error){return 253;} - if(color3==ccc_error){return 252;} - // pixel transparency in object.gif - if(color2!=ccc_vide){ - if(mode==0){ - err=putPixel(pSpr_Lem,ox,oy,color2); - if(err!=0){return err;} - } - if(mode==8){ - // VIS_ON_TERRAIN - if(color3==gInit->mapI.map.cmap.bgColor){ - continue; - } - err=putPixel(pSpr_Lem,ox,oy,color2); - if(err!=0){return err;} - } - if(mode==4){ - // NO_OVERWRITE - if(color3!=gInit->mapI.map.cmap.bgColor){ - continue; - } - err=putPixel(pSpr_Lem,ox,oy,color2); - if(err!=0){return err;} + // check combi impossible + if((mode!=8)&&((type==3)||(type==4))){ + printf("Construction impossible: mode!=%d(8) && type=%d(3 ou 4)\n",mode,type); + return 56; } - } else {// utile pour affiner les formes sur le pStencil - if((k->ID!=3)&&(k->ID!=4)){continue;} - } - if(((k->ID==3)||(k->ID==4))&& - (color==ccc_vide)){ - continue; + if((mode==8)&&(type==5)){ + printf("Construction impossible: mode==%d(8) && type=%d(5)\n",mode,type); + return 57; } + // fin check + if(type!=4&&type!=3){ - switch(type){ - case 0://passive - err=putPixel(pStencil, ox,oy, ccc_oPassive); - if(err!=0){return err;} break; - case 3://no digging to the left - err=putPixel(pStencil, ox,oy, ccc_oNoDigLeft); - if(err!=0){return err;} break; - case 4://no digging to the right - err=putPixel(pStencil, ox,oy, ccc_oNoDigRight); - if(err!=0){return err;}break; - case 5://trap which makes lemmings drown (water/quick sand/mud) - err=putPixel(pStencil, ox,oy, ccc_oTrapDrown); - if(err!=0){return err;} break; - case 6://trap which replaces lemming with death animation - err=putPixel(pStencil, ox,oy, ccc_oTrapAndNoLem); - if(err!=0){return err;} break; - case 7://trap which triggers lemming death animation - err=putPixel(pStencil, ox,oy, ccc_oTrapAndLem); - if(err!=0){return err;} break; - case 8://exit - err=putPixel(pStencil, ox,oy, ccc_oExit); - if(err!=0){return err;} break; - case 32://entry - err=putPixel(pStencil, ox,oy, ccc_oEntry); - if(err!=0){return err;} break; - default:err=putPixel(pStencil, ox,oy, ccc_oUnknow); - if(err!=0){return err;} break; - } - } - } - //} - }//FIN ELSE MODE - */ - k=k->next; - } - ///FIN TEST: SPR - return 0; - } - - int paint_lemming (struct gameInit *gInit, int cptFps){ + if((res=SDL_BlitSurface(sf, &objetAnim, pSpr_Lem, &offset)) != 0) + { + printf("ERREUR [%d] SDL_BlitSurface : ",res); + } - //DEBUT TEST: LEM - SDL_Rect offset,objetAnim; - SDL_Surface *sf; - struct listeSimplementChainee *k=NULL; - int res; - int err=0; - int cpt=0; - k=gInit->l.ll; - while ( k !=NULL ) { - - // DIED - if((k->data.pl->cptState == 0 ) && ((k->ID == 8) || (k->ID == 5) )) - { - k->ID=17; // decret de décès + if(type==5){ + rStencil.y=k->y+rStencil.h/3; + rStencil.h=(rStencil.h/3 + (rStencil.h/3)%3)*2; } - // SAFE - if((k->data.pl->cptState == 0 ) && (k->ID == 9)) - { - k->ID=19; // decret de survivant + + switch(type){ + case 0://passive + SDL_FillRect(pStencil, &rStencil, ccc_oPassive);break; + /* case 3://no digging to the left + SDL_FillRect(pStencil, &rStencil, ccc_oNoDigLeft);break; + case 4://no digging to the right + SDL_FillRect(pStencil, &rStencil, ccc_oNoDigRight);break;*/ + case 5://trap which makes lemmings drown (water/quick sand/mud) + SDL_FillRect(pStencil, &rStencil, ccc_oTrapDrown);break; + case 6://trap which replaces lemming with death animation + SDL_FillRect(pStencil, &rStencil, ccc_oTrapAndNoLem);break; + case 7://trap which triggers lemming death animation + SDL_FillRect(pStencil, &rStencil, ccc_oTrapAndLem);break; + case 8://exit + SDL_FillRect(pStencil, &rStencil, ccc_oExit);break; + case 32://entry + SDL_FillRect(pStencil, &rStencil, ccc_oEntry); + break; + default:SDL_FillRect(pStencil, &rStencil, ccc_oUnknow);break; } - //8 + (99 - releaseRate) - if((gInit->cptGame[15]==0)&&(gInit->cptGame[16]==gInit->mapI.nbrEntry)){ - gInit->cptGame[15]=cptFps; + + switch(mode){ + case 0:break;// FULL + case 4: {//No Overwrite + SDL_BlitSurface(pStencilFixe, &rStencil, pStencil, &rStencil); + SDL_BlitSurface(pTerrain, &rStencil, pSpr_Lem, &rStencil); + break; + } + case 8: break;//Vis On Terrain + default:{printf("BUG: value is not 8 4 or 0 : %d \n",mode);return(36);} } + } - if( (k->ID==18)&& - (gInit->cptGame[16]==gInit->mapI.nbrEntry)&& - ((gInit->l.nbrInput-(gInit->l.nbr + gInit->l.nbrDied + gInit->l.nbrSafe))>0)&& - (cptFps==(gInit->cptGame[15]+(8 + 99 - gInit->mapI.paraMap[0]))) - ){ - k->ID=1; - ++(gInit->l.nbr); - gInit->cptGame[15]=cptFps; + if((type==5&&mode!=8)||(mode==8&&(type==3||type==4))){ + if(type==5){ + rStencil.h=rStencil.y-k->y; + rStencil.y=k->y; } + for(oy=k->y;oy<rStencil.h+k->y;oy+=2){ + if(oy<0) {continue;} + if(oy>pSpr_Lem->h){continue;} + for(ox=k->x;ox<rStencil.w+k->x;ox+=2){ + if(ox<0) {continue;} + if(ox>pSpr_Lem->w){continue;} + + if(oy>=LEVEL_HEIGHT) {continue;} + if(ox>=LEVEL_WIDTH) {continue;} + + //if(temp_pixels==NULL){continue;} + if(sf->pixels==NULL){continue;} + //memcpy(sf->pixels,temp_pixels,size); + color2 = get_pixel32(objetAnim.x+ox-k->x,objetAnim.y+oy-k->y,sf); + if(color2==ccc_error){return 253;} + + if(type==5&&mode!=8){ + + if(color2==ccc_vide){continue;} + + } else { + // NO DIG + color = get_pixel32(ox,oy,pStencil); + if(color==ccc_error){return 254;} + if(color==ccc_Empty){continue;} + } + // pixel transparency in object.gif + if(type==5&&mode!=8){ + err=putPixel(pStencil,ox,oy,ccc_oTrapDrown); + if(err!=0){return err;} + } else { + if(type==3){ + err=putPixel(pStencil,ox,oy,ccc_oNoDigLeft); + if(err!=0){return err;} + } else { + err=putPixel(pStencil,ox,oy,ccc_oNoDigRight); + if(err!=0){return err;} + } + if(color2==ccc_vide){continue;} + err=putPixel(pSpr_Lem,ox,oy,color2); + if(err!=0){return err;} + } - // lemmings => spr de sa mort ou vivant - if((k->data.pl->cptState != 0 ) || (k->ID < LEM_JOB) || (k->ID>19) ){//FIXME il y a une faille dans la condition - printf("num = %d id=%d\n",cpt++,k->ID); - - offset.x = k->x; - offset.y = k->y; - sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+(gInit->mapI.map.tilesObjet*2)+gInit->mapI.map.tilesSteel+(k->ID)*2+k->data.pl->dir+ADD_OBJ]; - objetAnim.x = 0; - objetAnim.h = sf->h/(gInit->mapI.lemmingDATA[k->ID].state); - objetAnim.y = (anim_objet((gInit->mapI.lemmingDATA[k->ID].anim+90),0,cptFps,gInit->mapI.lemmingDATA[k->ID].state,&k->data.pl->cptState,gInit))*(objetAnim.h); // +3 : 0 == loop et dans anim_objet c'est 3 pas 0 (fichier de conf) FIXME - objetAnim.w = sf->w; - offset.w = objetAnim.w; - offset.h = objetAnim.h; - switch(k->ID){ - case 0: SDL_FillRect(pStencil, &offset, ccc_lWalk_on);break; - case 6: SDL_FillRect(pStencil, &offset, ccc_lStopper);break; - default:break; - } - if ((res=SDL_BlitSurface(sf, &objetAnim, pSpr_Lem, &offset)) != 0){ - printf("ERREUR [%d] SDL_BlitSurface : ",res); } } - k=k->next; - } - ///FIN TEST: LEM - err=stateLemming(gInit); - if(err!=0){return err;} + if(type==5&&mode==4){ + SDL_BlitSurface(pStencilFixe, &rStencil, pStencil, &rStencil); + SDL_BlitSurface(pTerrain, &rStencil, pSpr_Lem, &rStencil); + } - return 0; - } - int giveSkill (struct gameInit *gInit, struct listeSimplementChainee* k, int skill ){ + //} + }//FIN ELSE MODE - switch(skill){ - //climber - case 2 : if((gInit->mapI.paraMap[4]>0)&& - (k->data.pl->climber==0)){ - --gInit->mapI.paraMap[4]; - k->data.pl->climber=1; - } - break; - //floater - case 4 : if((gInit->mapI.paraMap[5]>0)&& - (k->data.pl->floater==0)){ - --gInit->mapI.paraMap[5]; - k->data.pl->floater=1; - } - break; - //bomber - case 10 : if((gInit->mapI.paraMap[6]>0)&& - (k->data.pl->bomber==404)){ - --gInit->mapI.paraMap[6]; - k->data.pl->bomber=5; - } - break; - //blocker - case 6 : if((gInit->mapI.paraMap[7]>0)&& - (k->data.pl->blocker==0)){ - --gInit->mapI.paraMap[7]; - k->data.pl->blocker=1; - } - break; - case 11 : ;break;//builder - case 14 : ;break;//basher - case 15 : ;break;//miner - case 13 : ;break;//digger + k=k->next; + } + ///FIN TEST: SPR + return 0; + } - default: break; - } + int paint_lemming (struct gameInit *gInit, int cptFps){ + //DEBUT TEST: LEM + SDL_Rect offset,objetAnim; + SDL_Surface *sf; + struct listeSimplementChainee *k=NULL; + int res; + int err=0; + int cpt=0; - return 0; + k=gInit->l.ll; + while ( k !=NULL ) { + // DIED + if((k->data.pl->cptState == 0 ) && ((k->ID == 8) || (k->ID == 5) )) + { + k->ID=17; // decret de décès + } + // SAFE + if((k->data.pl->cptState == 0 ) && (k->ID == 9)) + { + k->ID=19; // decret de survivant + } + //8 + (99 - releaseRate) + if((gInit->cptGame[15]==0)&&(gInit->cptGame[16]==gInit->mapI.nbrEntry)){ + gInit->cptGame[15]=cptFps; } - int findTerrain( struct gameInit *gInit,int x, int y, int x0){ - SDL_Rect to; - int i=0; - int cpt=0; - int err=0; - SDL_Surface *sf; - struct listeSimplementChainee *k=NULL; - k=gInit->t.lt; - to.x=5; - to.y=screen->h-10; - to.w=600; - to.h=10; - SDL_FillRect(screen, &to, ccc_black); - while(k != NULL){ - sf=gInit->mapI.map.tabGif[test_O_UD(k->data.pt->modif)+k->ID*2+ADD_OBJ]; - if( (x+15 <= k->x + sf->w)&& - (x+15 >= k->x)&& - (y+15 <= k->y + sf->h)&& - (y+15 > k->y)){//on the terrain - ++cpt; - print_num(screen, gInit->mapI.map.tabGif[1], 5 , screen->h-10, cpt); - print_num(screen, gInit->mapI.map.tabGif[1], 5 + cpt*40, screen->h-10, i); - to.x=k->x; - to.y=k->y; - to.w=sf->w; - to.h=1; - SDL_FillRect(pStencil, &to, ccc_red); - to.x=k->x; - to.y=k->y; - to.w=1; - to.h=sf->h; - SDL_FillRect(pStencil, &to, ccc_red); - to.x=k->x + sf->w; - to.y=k->y; - to.w=1; - to.h=sf->h; - SDL_FillRect(pStencil, &to, ccc_red); - to.x=k->x ; - to.y=k->y + sf->h; - to.w=sf->w; - to.h=1; - SDL_FillRect(pStencil, &to, ccc_red); - err=print_num(pStencil, gInit->mapI.map.tabGif[1], k->x + 2, k->y + 2, i); - if(err!=0){return err;} + if( (k->ID==18)&& + (gInit->cptGame[16]==gInit->mapI.nbrEntry)&& + ((gInit->l.nbrInput-(gInit->l.nbr + gInit->l.nbrDied + gInit->l.nbrSafe))>0)&& + (cptFps==(gInit->cptGame[15]+(8 + 99 - gInit->mapI.paraMap[0]))) + ){ + k->ID=1; + ++(gInit->l.nbr); + gInit->cptGame[15]=cptFps; + } - } - ++i; - k=k->next; + // lemmings => spr de sa mort ou vivant + if((k->data.pl->cptState != 0 ) || (k->ID < LEM_JOB) || (k->ID>19) ){//FIXME il y a une faille dans la condition + printf("num = %d id=%d\n",cpt++,k->ID); + offset.x = k->x; + offset.y = k->y; + sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+(gInit->mapI.map.tilesObjet*2)+gInit->mapI.map.tilesSteel+(k->ID)*2+k->data.pl->dir+ADD_OBJ]; + objetAnim.x = 0; + objetAnim.h = sf->h/(gInit->mapI.lemmingDATA[k->ID].state); + objetAnim.y = (anim_objet((gInit->mapI.lemmingDATA[k->ID].anim+90),0,cptFps,gInit->mapI.lemmingDATA[k->ID].state,&k->data.pl->cptState,gInit))*(objetAnim.h); // +3 : 0 == loop et dans anim_objet c'est 3 pas 0 (fichier de conf) FIXME + objetAnim.w = sf->w; + offset.w = objetAnim.w; + offset.h = objetAnim.h; + switch(k->ID){ + case 0: SDL_FillRect(pStencil, &offset, ccc_lWalk_on);break; + case 6: SDL_FillRect(pStencil, &offset, ccc_lStopper);break; + default:break; } - return 0; - } - - int paint_cursor(SDL_Surface *dst1,SDL_Surface *dst2, SDL_Surface *src, int x, int y, int x0, struct gameInit *gInit) - { - SDL_Rect from, to; - int f=0; - int err=0; - struct listeSimplementChainee *k=NULL; - - /* Render! */ - from.x = 0; - from.h = src->h/8; - from.y = gInit->cptGame[NBR_BUTTON_LEMMING] * (from.h); - from.w = src->w; - - to.x = (y>LEVEL_HEIGHT)? x0 : x; - to.y = y; - if (y>LEVEL_HEIGHT){// cursor in pSpr_Lem - SDL_BlitSurface(src, &from, dst2, &to); - } else { - k=gInit->l.ll; - while(k != NULL){ - if( (x+15 <= k->x + 32)&& - (x+15 >= k->x)&& - (y+15 <= k->y + 20)&& - (y+15 > k->y)){//on the lemming - to.x=k->x; - to.y=k->y; - from.y = 4 * (from.h); - f=1; - //begin giveSkill - if((gInit->cptGame[18]==1)&&(gInit->cptGame[17]!=404)){ - switch(gInit->cptGame[17]){ - - case 2 : err=giveSkill(gInit,k,2);break;//climber - case 3 : err=giveSkill(gInit,k,4);break;//floater - case 4 : err=giveSkill(gInit,k,10);break;//bomber - - case 5 : err=giveSkill(gInit,k,6);break;//stopper - - case 6 : err=giveSkill(gInit,k,11);break;//builder - case 7 : err=giveSkill(gInit,k,14);break;//basher - case 8 : err=giveSkill(gInit,k,15);break;//miner - case 9 : err=giveSkill(gInit,k,13);break;//digger - - default: break; - } - if(err!=0){return err;} - gInit->cptGame[18]=0; - } - //end giveSkill - break; - } - k=k->next; - } - to.y -= 4; - SDL_BlitSurface(src, &from, dst1, &to); - if(y+from.h>LEVEL_HEIGHT){ - to.x = (f==1)? k->x-x + x0:x0; - to.y = (f==1)? k->y -4 :y -4; - SDL_BlitSurface(src, &from, dst2, &to); - } else { - if(f==1){ - to.x = k->x-x + x0; - to.y = k->y -4 ; - SDL_BlitSurface(src, &from, dst2, &to); - } - } + if ((res=SDL_BlitSurface(sf, &objetAnim, pSpr_Lem, &offset)) != 0){ + printf("ERREUR [%d] SDL_BlitSurface : ",res); } - return 0; } + k=k->next; - int legende (struct gameInit *gInit){ - - SDL_Rect rStencil; - int decalY = 11; - int err=0; - //char* msg=NULL; - - rStencil.x= 400; - rStencil.y= LEVEL_HEIGHT + 1; - rStencil.w= 10; - rStencil.h= 10; - - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Terrain:"); - if(err!=0){return err;} - rStencil.y += decalY; - SDL_FillRect(screen, &rStencil, ccc_tRemove); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y ,"Remove"); - if(err!=0){return err;} - rStencil.y += decalY; - SDL_FillRect(screen, &rStencil, ccc_tRemoveNoOverwrite); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No Overwrite Remove"); - if(err!=0){return err;} - rStencil.y += decalY; - - SDL_FillRect(screen, &rStencil, ccc_tFull); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Full"); - if(err!=0){return err;} - rStencil.y += decalY; + } + ///FIN TEST: LEM + err=stateLemming(gInit); + if(err!=0){return err;} - SDL_FillRect(screen, &rStencil, ccc_tNoOverwrite); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No Overwrite"); - if(err!=0){return err;} - rStencil.y += decalY; + return 0; + } - SDL_FillRect(screen, &rStencil, ccc_tHidden); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Hidden"); - if(err!=0){return err;} - rStencil.y += decalY; + int giveSkill (struct gameInit *gInit, struct listeSimplementChainee* k, int skill ){ - // object - rStencil.x = 30; - rStencil.y = LEVEL_HEIGHT + 1; - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Objet:"); - if(err!=0){return err;} - rStencil.y += decalY; - SDL_FillRect(screen, &rStencil, ccc_oPassive); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Passive"); - if(err!=0){return err;} - rStencil.y += decalY; + switch(skill){ + //climber + case 2 : if((gInit->mapI.paraMap[4]>0)&& + (k->data.pl->climber==0)){ + --gInit->mapI.paraMap[4]; + k->data.pl->climber=1; + } + break; + //floater + case 4 : if((gInit->mapI.paraMap[5]>0)&& + (k->data.pl->floater==0)){ + --gInit->mapI.paraMap[5]; + k->data.pl->floater=1; + } + break; + //bomber + case 10 : if((gInit->mapI.paraMap[6]>0)&& + (k->data.pl->bomber==404)){ + --gInit->mapI.paraMap[6]; + k->data.pl->bomber=5; + } + break; + //blocker + case 6 : if((gInit->mapI.paraMap[7]>0)&& + (k->data.pl->blocker==0)){ + --gInit->mapI.paraMap[7]; + k->data.pl->blocker=1; + } + break; + case 11 : ;break;//builder + case 14 : ;break;//basher + case 15 : ;break;//miner + case 13 : ;break;//digger - SDL_FillRect(screen, &rStencil, ccc_oNoDigLeft); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No digging to the left"); - if(err!=0){return err;} - rStencil.y += decalY; + default: break; + } - SDL_FillRect(screen, &rStencil, ccc_oNoDigRight); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No digging to the right"); - if(err!=0){return err;} - rStencil.y += decalY; - SDL_FillRect(screen, &rStencil, ccc_oExit); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Exit"); - if(err!=0){return err;} - rStencil.y += decalY; + return 0; - SDL_FillRect(screen, &rStencil, ccc_oEntry); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Entry"); - if(err!=0){return err;} - rStencil.y += decalY; + } - SDL_FillRect(screen, &rStencil, ccc_oUnknow); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Unknow"); + int findTerrain( struct gameInit *gInit,int x, int y, int x0){ + SDL_Rect to; + int i=0; + int cpt=0; + int err=0; + SDL_Surface *sf; + struct listeSimplementChainee *k=NULL; + k=gInit->t.lt; + to.x=5; + to.y=screen->h-10; + to.w=600; + to.h=10; + SDL_FillRect(screen, &to, ccc_black); + while(k != NULL){ + sf=gInit->mapI.map.tabGif[test_O_UD(k->data.pt->modif)+k->ID*2+ADD_OBJ]; + if( (x+15 <= k->x + sf->w)&& + (x+15 >= k->x)&& + (y+15 <= k->y + sf->h)&& + (y+15 > k->y)){//on the terrain + ++cpt; + print_num(screen, gInit->mapI.map.tabGif[1], 5 , screen->h-10, cpt); + print_num(screen, gInit->mapI.map.tabGif[1], 5 + cpt*40, screen->h-10, i); + to.x=k->x; + to.y=k->y; + to.w=sf->w; + to.h=1; + SDL_FillRect(pStencil, &to, ccc_red); + to.x=k->x; + to.y=k->y; + to.w=1; + to.h=sf->h; + SDL_FillRect(pStencil, &to, ccc_red); + to.x=k->x + sf->w; + to.y=k->y; + to.w=1; + to.h=sf->h; + SDL_FillRect(pStencil, &to, ccc_red); + to.x=k->x ; + to.y=k->y + sf->h; + to.w=sf->w; + to.h=1; + SDL_FillRect(pStencil, &to, ccc_red); + err=print_num(pStencil, gInit->mapI.map.tabGif[1], k->x + 2, k->y + 2, i); if(err!=0){return err;} - rStencil.y += decalY; - SDL_FillRect(screen, &rStencil, ccc_oTrapDrown); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Trap which makes lemmings drown (water/quick sand/mud)"); - if(err!=0){return err;} - rStencil.y += decalY; + } + ++i; + k=k->next; - SDL_FillRect(screen, &rStencil, ccc_oTrapAndNoLem); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Trap which replaces lemming with death animation"); - if(err!=0){return err;} - rStencil.y += decalY; + } + return 0; + } - SDL_FillRect(screen, &rStencil, ccc_oTrapAndLem); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Trap which triggers lemming death animation"); - if(err!=0){return err;} + int paint_cursor(SDL_Surface *dst1,SDL_Surface *dst2, SDL_Surface *src, int x, int y, int x0, struct gameInit *gInit) + { + SDL_Rect from, to; + int f=0; + int err=0; + struct listeSimplementChainee *k=NULL; + + /* Render! */ + from.x = 0; + from.h = src->h/8; + from.y = gInit->cptGame[NBR_BUTTON_LEMMING] * (from.h); + from.w = src->w; + + to.x = (y>LEVEL_HEIGHT)? x0 : x; + to.y = y; + if (y>LEVEL_HEIGHT){// cursor in pSpr_Lem + SDL_BlitSurface(src, &from, dst2, &to); + } else { + k=gInit->l.ll; + while(k != NULL){ + if( (x+15 <= k->x + 32)&& + (x+15 >= k->x)&& + (y+15 <= k->y + 20)&& + (y+15 > k->y)){//on the lemming + to.x=k->x; + to.y=k->y; + from.y = 4 * (from.h); + f=1; + //begin giveSkill + if((gInit->cptGame[18]==1)&&(gInit->cptGame[17]!=404)){ + switch(gInit->cptGame[17]){ + + case 2 : err=giveSkill(gInit,k,2);break;//climber + case 3 : err=giveSkill(gInit,k,4);break;//floater + case 4 : err=giveSkill(gInit,k,10);break;//bomber + + case 5 : err=giveSkill(gInit,k,6);break;//stopper + + case 6 : err=giveSkill(gInit,k,11);break;//builder + case 7 : err=giveSkill(gInit,k,14);break;//basher + case 8 : err=giveSkill(gInit,k,15);break;//miner + case 9 : err=giveSkill(gInit,k,13);break;//digger + + default: break; + } + if(err!=0){return err;} + gInit->cptGame[18]=0; + } + //end giveSkill + break; + } + k=k->next; + } + to.y -= 4; + SDL_BlitSurface(src, &from, dst1, &to); + if(y+from.h>LEVEL_HEIGHT){ + to.x = (f==1)? k->x-x + x0:x0; + to.y = (f==1)? k->y -4 :y -4; + SDL_BlitSurface(src, &from, dst2, &to); + } else { + if(f==1){ + to.x = k->x-x + x0; + to.y = k->y -4 ; + SDL_BlitSurface(src, &from, dst2, &to); + } + } + } + return 0; + } - rStencil.y += decalY + 2; - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x +15 ,rStencil.y,"Steel:"); - if(err!=0){return err;} - rStencil.y += decalY; - SDL_FillRect(screen, &rStencil, ccc_s); - err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Indestructible terrain"); - if(err!=0){return err;} + int legende (struct gameInit *gInit){ + + SDL_Rect rStencil; + int decalY = 11; + int err=0; + //char* msg=NULL; + + rStencil.x= 400; + rStencil.y= LEVEL_HEIGHT + 1; + rStencil.w= 10; + rStencil.h= 10; + + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Terrain:"); + if(err!=0){return err;} + rStencil.y += decalY; + SDL_FillRect(screen, &rStencil, ccc_tRemove); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y ,"Remove"); + if(err!=0){return err;} + rStencil.y += decalY; + SDL_FillRect(screen, &rStencil, ccc_tRemoveNoOverwrite); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No Overwrite Remove"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_tFull); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Full"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_tNoOverwrite); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No Overwrite"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_tHidden); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Hidden"); + if(err!=0){return err;} + rStencil.y += decalY; + + // object + rStencil.x = 30; + rStencil.y = LEVEL_HEIGHT + 1; + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Objet:"); + if(err!=0){return err;} + rStencil.y += decalY; + SDL_FillRect(screen, &rStencil, ccc_oPassive); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Passive"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oNoDigLeft); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No digging to the left"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oNoDigRight); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"No digging to the right"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oExit); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Exit"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oEntry); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Entry"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oUnknow); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Unknow"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oTrapDrown); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Trap which makes lemmings drown (water/quick sand/mud)"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oTrapAndNoLem); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Trap which replaces lemming with death animation"); + if(err!=0){return err;} + rStencil.y += decalY; + + SDL_FillRect(screen, &rStencil, ccc_oTrapAndLem); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Trap which triggers lemming death animation"); + if(err!=0){return err;} + + rStencil.y += decalY + 2; + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x +15 ,rStencil.y,"Steel:"); + if(err!=0){return err;} + rStencil.y += decalY; + SDL_FillRect(screen, &rStencil, ccc_s); + err=print_alpha(screen, gInit->mapI.map.tabGif[9], rStencil.x + 15,rStencil.y,"Indestructible terrain"); + if(err!=0){return err;} - return 0; - } + return 0; + } - int paint_interface (struct gameInit *gInit){ - int i,n; - int err=0; - SDL_Rect to,from; - SDL_Surface *sf; + int paint_interface (struct gameInit *gInit){ + int i,n; + int err=0; + SDL_Rect to,from; + SDL_Surface *sf; - from.x = 0; - to.y = LEVEL_HEIGHT + INTER_BUTTON_Y; + from.x = 0; + to.y = LEVEL_HEIGHT + INTER_BUTTON_Y; - for(i=0;i<NBR_BUTTON_LEMMING;++i){ + for(i=0;i<NBR_BUTTON_LEMMING;++i){ - sf=gInit->mapI.map.tabGif[i+NBR_ADD_OBJ]; + sf=gInit->mapI.map.tabGif[i+NBR_ADD_OBJ]; - to.x = (i*(sf->w)) + INTER_BUTTON_X; - to.w = sf->w; - to.h = sf->h/2; + to.x = (i*(sf->w)) + INTER_BUTTON_X; + to.w = sf->w; + to.h = sf->h/2; - from.y = (to.h)*(gInit->cptGame[i]); - from.w = sf->w; - from.h = to.h; + from.y = (to.h)*(gInit->cptGame[i]); + from.w = sf->w; + from.h = to.h; - if(i+4 < 12){ - n=gInit->mapI.paraMap[i+4]; - err=print_num(screen, gInit->mapI.map.tabGif[1], (to.x+7+(((n/10)>0)?0:5))+(sf->w*(2)), to.y-12, - n); - if(err!=0){return err;} - } - SDL_BlitSurface(sf, &from, screen, &to); - } - n=gInit->mapI.paraMap[0]; - err=print_num(screen, gInit->mapI.map.tabGif[1],INTER_BUTTON_X + 20 + (((n/10)>0)?0:5), to.y-12, n); + if(i+4 < 12){ + n=gInit->mapI.paraMap[i+4]; + err=print_num(screen, gInit->mapI.map.tabGif[1], (to.x+7+(((n/10)>0)?0:5))+(sf->w*(2)), to.y-12, + n); if(err!=0){return err;} - return 0; } + SDL_BlitSurface(sf, &from, screen, &to); + } + n=gInit->mapI.paraMap[0]; + err=print_num(screen, gInit->mapI.map.tabGif[1],INTER_BUTTON_X + 20 + (((n/10)>0)?0:5), to.y-12, n); + if(err!=0){return err;} + return 0; + } - int mouse_action (struct gameInit *gInit, int x, int y, int camX, int camY ){ - - int i,numB; - SDL_Surface *sf; - // size cursor - sf=gInit->mapI.map.tabGif[3]; - x+=sf->w/2; - y+=sf->h/16;// (sf->h/8)/2; - sf=gInit->mapI.map.tabGif[NBR_ADD_OBJ]; - printf("action mouse ?\n"); - // test mouse on interface button - if( (x >= INTER_BUTTON_X)&& - (x <= sf->w*NBR_BUTTON_LEMMING)&& - (y >= INTER_BUTTON_Y + LEVEL_HEIGHT)&& - (y < INTER_BUTTON_Y + LEVEL_HEIGHT + (sf->h/2))) - {// mouse is on interface button - numB=((x-INTER_BUTTON_X)/sf->w); - if((gInit->cptGame[numB]==1)&&((numB==0)||(numB==1))){ - // incr or decr lemmingRate - if((numB==0)&&(gInit->mapI.paraMap[0]>13)){ - gInit->cptGame[15]-=5; - gInit->mapI.paraMap[0]-=5; - } else{ - if((numB==0)&&(gInit->mapI.paraMap[0]>8)){ - gInit->cptGame[15]-=1; - gInit->mapI.paraMap[0]-=1; - } } - if((numB==1)&&(gInit->mapI.paraMap[0]<91)){ - gInit->cptGame[15]+=5; - gInit->mapI.paraMap[0]+=5; - } else { - if((numB==1)&&(gInit->mapI.paraMap[0]<99)){ - gInit->cptGame[15]+=1; - gInit->mapI.paraMap[0]+=1; - } } - gInit->cptGame[numB]=0; + int mouse_action (struct gameInit *gInit, int x, int y, int camX, int camY ){ + + int i,numB; + SDL_Surface *sf; + // size cursor + sf=gInit->mapI.map.tabGif[3]; + x+=sf->w/2; + y+=sf->h/16;// (sf->h/8)/2; + sf=gInit->mapI.map.tabGif[NBR_ADD_OBJ]; + printf("action mouse ?\n"); + // test mouse on interface button + if( (x >= INTER_BUTTON_X)&& + (x <= sf->w*NBR_BUTTON_LEMMING)&& + (y >= INTER_BUTTON_Y + LEVEL_HEIGHT)&& + (y < INTER_BUTTON_Y + LEVEL_HEIGHT + (sf->h/2))) + {// mouse is on interface button + numB=((x-INTER_BUTTON_X)/sf->w); + if((gInit->cptGame[numB]==1)&&((numB==0)||(numB==1))){ + // incr or decr lemmingRate + if((numB==0)&&(gInit->mapI.paraMap[0]>13)){ + gInit->cptGame[15]-=5; + gInit->mapI.paraMap[0]-=5; + } else{ + if((numB==0)&&(gInit->mapI.paraMap[0]>8)){ + gInit->cptGame[15]-=1; + gInit->mapI.paraMap[0]-=1; + } } + if((numB==1)&&(gInit->mapI.paraMap[0]<91)){ + gInit->cptGame[15]+=5; + gInit->mapI.paraMap[0]+=5; + } else { + if((numB==1)&&(gInit->mapI.paraMap[0]<99)){ + gInit->cptGame[15]+=1; + gInit->mapI.paraMap[0]+=1; + } } + gInit->cptGame[numB]=0; + } else { + for(i=0;i<NBR_BUTTON_LEMMING;++i){ + if(i != numB){ + gInit->cptGame[i]=0; } else { - for(i=0;i<NBR_BUTTON_LEMMING;++i){ - if(i != numB){ - gInit->cptGame[i]=0; - } else { - if(gInit->cptGame[i] == 1){ - gInit->cptGame[i] = 0; - gInit->cptGame[17]=404; - } else { - gInit->cptGame[i] = 1; - gInit->cptGame[17]=i; - } - } + if(gInit->cptGame[i] == 1){ + gInit->cptGame[i] = 0; + gInit->cptGame[17]=404; + } else { + gInit->cptGame[i] = 1; + gInit->cptGame[17]=i; } } - gInit->cptGame[18]=0; - } else { - // mouse is on pSpr_Lem - //if .. - //gInit.cptGame[NBR_BUTTON_LEMMING] - gInit->cptGame[18]=1; } - return 0; } + gInit->cptGame[18]=0; + } else { + // mouse is on pSpr_Lem + //if .. + //gInit.cptGame[NBR_BUTTON_LEMMING] + gInit->cptGame[18]=1; + } + return 0; + } - int supprLem (struct gameInit *gInit, int cptFps){ - struct listeSimplementChainee *k=NULL; - // refresh liste all of 100 tick - if(cptFps % 100 == 0) - { - k=gInit->l.ll; - if((k != NULL)&&(gInit->l.nbr == 1)){ - if(k->ID == 17){++gInit->l.nbrDied; --gInit->l.nbr;} - if(k->ID == 19){++gInit->l.nbrSafe; --gInit->l.nbr;} - if((k->ID == 17)||(k->ID == 19)) {k=NULL;} - } else { - while(k != NULL){ - if(k->next != NULL){ - switch(k->next->ID){ - // DIED - case 17 : { - k->next=k->next->next; - ++gInit->l.nbrDied; - --gInit->l.nbr; - break; - } - // SAFE - case 19 : { - k->next=k->next->next; - ++gInit->l.nbrSafe; - --gInit->l.nbr; - break; - } - default: k=k->next; break; - } - } else { - k=k->next; - } + int supprLem (struct gameInit *gInit, int cptFps){ + struct listeSimplementChainee *k=NULL; + // refresh liste all of 100 tick + if(cptFps % 100 == 0) + { + k=gInit->l.ll; + if((k != NULL)&&(gInit->l.nbr == 1)){ + if(k->ID == 17){++gInit->l.nbrDied; --gInit->l.nbr;} + if(k->ID == 19){++gInit->l.nbrSafe; --gInit->l.nbr;} + if((k->ID == 17)||(k->ID == 19)) {k=NULL;} + } else { + while(k != NULL){ + if(k->next != NULL){ + switch(k->next->ID){ + // DIED + case 17 : { + k->next=k->next->next; + ++gInit->l.nbrDied; + --gInit->l.nbr; + break; + } + // SAFE + case 19 : { + k->next=k->next->next; + ++gInit->l.nbrSafe; + --gInit->l.nbr; + break; + } + default: k=k->next; break; } - } - printf("nbrInput = %d\nnbrInGame = %d\nnbrDied = %d\nnbrSafe = %d\n",gInit->l.nbrInput,gInit->l.nbr,gInit->l.nbrDied,gInit->l.nbrSafe); + } else { + k=k->next; + } } - return 0; } + printf("nbrInput = %d\nnbrInGame = %d\nnbrDied = %d\nnbrSafe = %d\n",gInit->l.nbrInput,gInit->l.nbr,gInit->l.nbrDied,gInit->l.nbrSafe); + } + return 0; + } - // Par défaut, c'est l'analyse LEXICALE qui est lancée ! - int lancement (){ + // Par défaut, c'est l'analyse LEXICALE qui est lancée ! + int lancement (){ - int res,cptFps/*,i*/; - int err=0; - //Ce qui va nous permettre de quitter - int quit = 0; - SDL_Rect camera,inter; - int mouseX,mouseY=0; - long tick,temps=0; - float fps = 0.0; - int fps_count = 0; - int fps_start = 0; - int decalFps = 0; + int res,cptFps/*,i*/; + int err=0; + //Ce qui va nous permettre de quitter + int quit = 0; + SDL_Rect camera,inter; + int mouseX,mouseY=0; + long tick,temps=0; + float fps = 0.0; + int fps_count = 0; + int fps_start = 0; + int decalFps = 0; - //La structure d'evenement - SDL_Event event; - event.type=0; + //La structure d'evenement + SDL_Event event; + event.type=0; - //paint_stencil=1; + //paint_stencil=1; - /* camera.x=160; - camera.y=120; - */ - camera.x=0; - camera.y=0; + /* camera.x=160; + camera.y=120; + */ + camera.x=0; + camera.y=0; - struct gameInit gInit; + struct gameInit gInit; - // constructor ... - err=initGame(&gInit); - if(err!=0){return err;} + // constructor ... + err=initGame(&gInit); + if(err!=0){return err;} - //Initialisation - err=init(); - if(err!=0){return err;} - //printf("DONE\n"); + //Initialisation + err=init(); + if(err!=0){return err;} + //printf("DONE\n"); - //printf("DEBUG3: load_file ... \n"); - //Chargement des fichiers - err=load_files(&gInit); - if(err!=0){return err;} + //printf("DEBUG3: load_file ... \n"); + //Chargement des fichiers + err=load_files(&gInit); + if(err!=0){return err;} - // paraMap - for(res=4;res<IDENT_COUNT;++res){ - gInit.mapI.paraMap[res]=99; - } + // paraMap + for(res=4;res<IDENT_COUNT;++res){ + gInit.mapI.paraMap[res]=99; + } - // CREATION OF SOME LEMMING - err=creationLemming(&gInit); - if(err!=0){return err;} + // CREATION OF SOME LEMMING + err=creationLemming(&gInit); + if(err!=0){return err;} - mouseX = gInit.mapI.xPos; - camera.x=gInit.mapI.xPos; - camera.w=screen->w; - camera.h=screen->h; - inter.x=0; - inter.y=LEVEL_HEIGHT; - inter.w=SCREEN_WIDTH; - inter.h=INTERFACE_HEIGHT; + mouseX = gInit.mapI.xPos; + camera.x=gInit.mapI.xPos; + camera.w=screen->w; + camera.h=screen->h; + inter.x=0; + inter.y=LEVEL_HEIGHT; + inter.w=SCREEN_WIDTH; + inter.h=INTERFACE_HEIGHT; - //printf("DEBUG ludo : camera.w==%i, camera.h==%i\n", camera.w, camera.h); + //printf("DEBUG ludo : camera.w==%i, camera.h==%i\n", camera.w, camera.h); - // init level map (upper part of screen) - SDL_FillRect( pTerrain, &pTerrain->clip_rect, - gInit.mapI.map.cmap.bgColor ); + // init level map (upper part of screen) + SDL_FillRect( pTerrain, &pTerrain->clip_rect, + gInit.mapI.map.cmap.bgColor ); - // init interface (downner part of screen) - SDL_FillRect( screen, &inter, ccc_black); - cptFps=0; - gInit.cptGame[15]=0; + // init interface (downner part of screen) + SDL_FillRect( screen, &inter, ccc_black); + cptFps=0; + gInit.cptGame[15]=0; - SDL_FillRect( pStencil, NULL, ccc_Empty); - //paint_terrain => pTerrain - err=paint_terrain(&gInit,0); - if(err!=0){return err;} + SDL_FillRect( pStencil, NULL, ccc_Empty); + //paint_terrain => pTerrain + err=paint_terrain(&gInit,0); + if(err!=0){return err;} - SDL_SetColorKey(pTerrain, SDL_SRCCOLORKEY|SDL_RLEACCEL, gInit.mapI.map.cmap.bgColor); + SDL_SetColorKey(pTerrain, SDL_SRCCOLORKEY|SDL_RLEACCEL, gInit.mapI.map.cmap.bgColor); - SDL_BlitSurface(pStencil, NULL, pStencilFixe, NULL); - SDL_SetColorKey(pStencilFixe, SDL_SRCCOLORKEY|SDL_RLEACCEL, ccc_Empty); + SDL_BlitSurface(pStencil, NULL, pStencilFixe, NULL); + SDL_SetColorKey(pStencilFixe, SDL_SRCCOLORKEY|SDL_RLEACCEL, ccc_Empty); - //Tant que l'utilisateur n'a pas quitter + //Tant que l'utilisateur n'a pas quitter - while( quit == 0 ) - { - /* Timing */ - tick = SDL_GetTicks(); + while( quit == 0 ) + { + /* Timing */ + tick = SDL_GetTicks(); - //Tant qu'il y a un événement - while( SDL_PollEvent( &event ) ) - { - switch(event.key.keysym.sym){ - case SDLK_HOME : decalFps = 0; break; - case SDLK_END : decalFps = FPS-11; break; - case SDLK_PAGEUP : if(decalFps>0){decalFps -=1;}break; - case SDLK_PAGEDOWN : if(decalFps<(FPS-1)){decalFps +=1;}break; - case SDLK_w : paint_stencil = (paint_stencil==0)? 1 : 0 ; break; - case SDLK_ESCAPE : quit = 1; break; - default:break; - } - // SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); - - switch (event.type) { - case SDL_MOUSEMOTION: { mouseX = event.motion.x; - mouseY = event.motion.y;break; } - case SDL_MOUSEBUTTONDOWN: { err=mouse_action (&gInit, mouseX, mouseY,camera.x,camera.y ); - if(err!=0){return err;} - break;} - case SDL_QUIT : { - //On quitte le programme - quit = 1; - } - default:break; - } - } + //Tant qu'il y a un événement + while( SDL_PollEvent( &event ) ) + { + switch(event.key.keysym.sym){ + case SDLK_HOME : decalFps = 0; break; + case SDLK_END : decalFps = FPS-11; break; + case SDLK_PAGEUP : if(decalFps>0){decalFps -=1;}break; + case SDLK_PAGEDOWN : if(decalFps<(FPS-1)){decalFps +=1;}break; + case SDLK_w : paint_stencil = (paint_stencil==0)? 1 : 0 ; break; + case SDLK_ESCAPE : quit = 1; break; + default:break; + } + // SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE); + + switch (event.type) { + case SDL_MOUSEMOTION: { mouseX = event.motion.x; + mouseY = event.motion.y;break; } + case SDL_MOUSEBUTTONDOWN: { err=mouse_action (&gInit, mouseX, mouseY,camera.x,camera.y ); + if(err!=0){return err;} + break;} + case SDL_QUIT : { + //On quitte le programme + quit = 1; + } + default:break; + } + } - if(mouseY <= LEVEL_HEIGHT){ - if (mouseX > (SCREEN_WIDTH - BOUND_SENSIBILITE)){ - if (camera.x < (LEVEL_WIDTH - SCREEN_WIDTH ) ) - {camera.x += CAM_VITESSE;} - } - if (mouseX < BOUND_SENSIBILITE){ - if (camera.x >= CAM_VITESSE ) - {camera.x -= CAM_VITESSE;} - } - } + if(mouseY <= LEVEL_HEIGHT){ + if (mouseX > (SCREEN_WIDTH - BOUND_SENSIBILITE)){ + if (camera.x < (LEVEL_WIDTH - SCREEN_WIDTH ) ) + {camera.x += CAM_VITESSE;} + } + if (mouseX < BOUND_SENSIBILITE){ + if (camera.x >= CAM_VITESSE ) + {camera.x -= CAM_VITESSE;} + } + } - SDL_FillRect( pSpr_Lem, NULL, gInit.mapI.map.cmap.bgColor); - SDL_BlitSurface(pTerrain, NULL, pSpr_Lem, NULL); + SDL_FillRect( pSpr_Lem, NULL, gInit.mapI.map.cmap.bgColor); + SDL_BlitSurface(pTerrain, NULL, pSpr_Lem, NULL); - SDL_FillRect( screen, &inter, ccc_black); + SDL_FillRect( screen, &inter, ccc_black); - //if(paint_stencil==1){ - SDL_FillRect( pStencil, NULL, ccc_Empty); - SDL_BlitSurface(pStencilFixe, NULL, pStencil, NULL); - //} + //if(paint_stencil==1){ + SDL_FillRect( pStencil, NULL, ccc_Empty); + SDL_BlitSurface(pStencilFixe, NULL, pStencil, NULL); + //} - // SPR => pSpr_Lem - err=paint_objet (&gInit,cptFps); - if(err!=0){return err;} + // SPR => pSpr_Lem + err=paint_objet (&gInit,cptFps); + if(err!=0){return err;} - // SUPPR LEM => gInit - err=supprLem(&gInit,cptFps); - if(err!=0){return err;} + // SUPPR LEM => gInit + err=supprLem(&gInit,cptFps); + if(err!=0){return err;} - // LEM => pSpr_Lem - //if(paint_stencil==0){ - err=paint_lemming (&gInit,cptFps); - if(err!=0){return err;} - //} + // LEM => pSpr_Lem + //if(paint_stencil==0){ + err=paint_lemming (&gInit,cptFps); + if(err!=0){return err;} + //} - // INTERFACE => screen - if(paint_stencil==0){ - err=paint_interface (&gInit); - if(err!=0){return err;} - } else { - //testAlpha(screen, gInit.mapI.map.tabGif[9],gInit.mapI.map.tabGif[1],2,330); - err=legende (&gInit); - if(err!=0){return err;} - } + // INTERFACE => screen + if(paint_stencil==0){ + err=paint_interface (&gInit); + if(err!=0){return err;} + } else { + //testAlpha(screen, gInit.mapI.map.tabGif[9],gInit.mapI.map.tabGif[1],2,330); + err=legende (&gInit); + if(err!=0){return err;} + } - // CURSOR => pSpr_Lem, screen - if(paint_stencil==0){ - err=paint_cursor (pSpr_Lem,screen, gInit.mapI.map.tabGif[3], mouseX+camera.x, mouseY+camera.y, mouseX, &gInit); - if(err!=0){return err;} - } else { - err=findTerrain(&gInit,mouseX+camera.x, mouseY+camera.y, mouseX); - if(err!=0){return err;} - err=paint_cursor (pStencil,screen, gInit.mapI.map.tabGif[3], mouseX+camera.x, mouseY+camera.y, mouseX, &gInit); - if(err!=0){return err;} - printf("x=%d y=%d\n",mouseX+camera.x,mouseY+camera.y); - } + // CURSOR => pSpr_Lem, screen + if(paint_stencil==0){ + err=paint_cursor (pSpr_Lem,screen, gInit.mapI.map.tabGif[3], mouseX+camera.x, mouseY+camera.y, mouseX, &gInit); + if(err!=0){return err;} + } else { + err=findTerrain(&gInit,mouseX+camera.x, mouseY+camera.y, mouseX); + if(err!=0){return err;} + err=paint_cursor (pStencil,screen, gInit.mapI.map.tabGif[3], mouseX+camera.x, mouseY+camera.y, mouseX, &gInit); + if(err!=0){return err;} + printf("x=%d y=%d\n",mouseX+camera.x,mouseY+camera.y); + } - //get_pixel32( event.motion.x + camera.x, event.motion.y, pTerrain ); - //get_pixel32( event.motion.x + camera.x, event.motion.y, pSpr_Lem ); - //get_pixel32( event.motion.x + camera.x , event.motion.y, screen ); + //get_pixel32( event.motion.x + camera.x, event.motion.y, pTerrain ); + //get_pixel32( event.motion.x + camera.x, event.motion.y, pSpr_Lem ); + //get_pixel32( event.motion.x + camera.x , event.motion.y, screen ); - if(paint_stencil==0){ - SDL_BlitSurface(pSpr_Lem, &camera, screen, NULL); - } else { - SDL_BlitSurface(pStencil, &camera, screen, NULL); - } + if(paint_stencil==0){ + SDL_BlitSurface(pSpr_Lem, &camera, screen, NULL); + } else { + SDL_BlitSurface(pStencil, &camera, screen, NULL); + } - /* FPS counter */ - //printf("(tick %ld > fps_start %d +500)\n",tick,fps_start); - // refresh fps all 500 ms - if(tick > fps_start + 500) - { - fps = (float)fps_count * 1000.0 / (tick - fps_start); - fps_count = 0; - fps_start = tick; - } + /* FPS counter */ + //printf("(tick %ld > fps_start %d +500)\n",tick,fps_start); + // refresh fps all 500 ms + if(tick > fps_start + 500) + { + fps = (float)fps_count * 1000.0 / (tick - fps_start); + fps_count = 0; + fps_start = tick; + } - ++fps_count; + ++fps_count; - //if (cptFps == 9999) { - if(SDL_GetTicks()==240000){ - //decalFps = 99; - quit=1; - } + if (cptFps == 9999) { + //if(SDL_GetTicks()==240000){ + //decalFps = 99; + quit=1; + } - // limte fps + // limte fps - if(FPS<=decalFps){printf("BUG: FPS < 0 : (FPS %d - decalFps %d) < 0",FPS,decalFps);return(42);} else { - while((FPS>decalFps)&&(((float)fps_count * 1000.0 / (SDL_GetTicks()-fps_start)) > FPS-decalFps) ){ - if((FPS-decalFps)<=120){// useless ? - SDL_Delay(3); - } - }} - - temps = SDL_GetTicks(); - //heure - err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-160, screen->h-40, temps/(1000*3600)); - if(err!=0){return err;} - //minute - err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-130, screen->h-40, (temps/(1000*60))%60); - if(err!=0){return err;} - //seconde - err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-100, screen->h-40, (temps/1000)%60); - if(err!=0){return err;} - - err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-100, screen->h-12, cptFps); - if(err!=0){return err;} - err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-37, screen->h-12, fps); - if(err!=0){return err;} - - //Mise à jour de l'écran - if( SDL_Flip( screen ) == -1 ) { - return 4; + if(FPS<=decalFps){printf("BUG: FPS < 0 : (FPS %d - decalFps %d) < 0",FPS,decalFps);return(42);} else { + while((FPS>decalFps)&&(((float)fps_count * 1000.0 / (SDL_GetTicks()-fps_start)) > FPS-decalFps) ){ + if((FPS-decalFps)<=120){// useless ? + SDL_Delay(3); } + }} + + temps = SDL_GetTicks(); + //heure + err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-160, screen->h-40, temps/(1000*3600)); + if(err!=0){return err;} + //minute + err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-130, screen->h-40, (temps/(1000*60))%60); + if(err!=0){return err;} + //seconde + err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-100, screen->h-40, (temps/1000)%60); + if(err!=0){return err;} - //SDL_Delay(1); + err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-100, screen->h-12, cptFps); + if(err!=0){return err;} + err=print_num(screen, gInit.mapI.map.tabGif[1], screen->w-37, screen->h-12, fps); + if(err!=0){return err;} - if(FPS<=decalFps){printf("BUG: FPS < 0 : (FPS %d - decalFps %d) < 0",FPS,decalFps);return(43);} else { - temps = SDL_GetTicks(); - //printf("cptFps = %d, time: %ld:%ld:%ld \n",cptFps,temps/(1000*3600),(temps/(1000*60))%60,(temps/1000)%60); - } - cptFps++; + //Mise à jour de l'écran + if( SDL_Flip( screen ) == -1 ) { + return 4; + } - //quit = 1; + //SDL_Delay(1); - } + if(FPS<=decalFps){printf("BUG: FPS < 0 : (FPS %d - decalFps %d) < 0",FPS,decalFps);return(43);} else { + temps = SDL_GetTicks(); + //printf("cptFps = %d, time: %ld:%ld:%ld \n",cptFps,temps/(1000*3600),(temps/(1000*60))%60,(temps/1000)%60); + } + cptFps++; - //On libère les images et on quitte SDL - err=clean_up(); - if(err!=0){return err;} + //quit = 1; - return 0; } + //On libère les images et on quitte SDL + err=clean_up(); + if(err!=0){return err;} - int main (int argc, char **argv) - { - int res,i,num,lt; - char *temp,*temp0; - //Uint32 ctest; - //int j,k; - //argc=3; - //argv[1]="1"; - //argv[2]="72"; - if (argc<2 || argc>3) { - fprintf(stderr, "Usage %s [Option] <Filename>\n",argv[0]); - fprintf(stderr,"\nOption:\n\t- 1: on se place dans le dossier 1_orig\n"); - fprintf(stderr,"\t- 2: on se place dans le dossier 2_ohno\n"); - fprintf(stderr,"Filename:\n\t- numero du lvl (ex: 1, 4, 13, 65b )\n"); - return(44); - } - if (argc==3) { - i=1; - num=atoi(argv[2]); - if (num >= 10) ++i; - if (num >= 100) ++i; - if (num >= 1000){ - fprintf(stderr,"Too many lvl (%d > 999)\n",num); - return(45); - } - temp0=malloc(sizeof(char)*(3-i));// => [00] [0] [] - switch(i){ - case 1 : temp0 = "00";break; - case 2 : temp0 = "0";break; - case 3 : temp0 = "";break; - default:fprintf(stderr,"BUG: i[=%d] > 3 ERREUR\n",i);return(46); - } + return 0; + } - lt = (strlen("../../../../trunk/level/1_orig/lvl.ini")+5);// + 4 : 4 chiffres lvl.ini, +1 : string - temp=malloc(sizeof(char)*lt); - switch(atoi(argv[1])){ - case 1 : sprintf(temp,"../../../../trunk/level/1_orig/lvl0%s%d.ini",temp0,num);break; - case 2 : sprintf(temp,"../../../../trunk/level/2_ohno/lvl1%s%d.ini",temp0,num);break; - default:fprintf(stderr,"ERREUR: dossier [%d] inconnu\n",atoi(argv[1]));return(47); - } - } else { - temp=malloc(sizeof(char)*(strlen(argv[1])+1)); - sprintf(temp,"%s",argv[1]); + + int main (int argc, char **argv) + { + int res,i,num,lt; + char *temp,*temp0; + //Uint32 ctest; + //int j,k; + //argc=3; + //argv[1]="1"; + //argv[2]="72"; + if (argc<2 || argc>3) { + fprintf(stderr, "Usage %s [Option] <Filename>\n",argv[0]); + fprintf(stderr,"\nOption:\n\t- 1: on se place dans le dossier 1_orig\n"); + fprintf(stderr,"\t- 2: on se place dans le dossier 2_ohno\n"); + fprintf(stderr,"Filename:\n\t- numero du lvl (ex: 1, 4, 13, 65b )\n"); + return(44); + } + if (argc==3) { + i=1; + num=atoi(argv[2]); + if (num >= 10) ++i; + if (num >= 100) ++i; + if (num >= 1000){ + fprintf(stderr,"Too many lvl (%d > 999)\n",num); + return(45); + } + temp0=malloc(sizeof(char)*(3-i));// => [00] [0] [] + switch(i){ + case 1 : temp0 = "00";break; + case 2 : temp0 = "0";break; + case 3 : temp0 = "";break; + default:fprintf(stderr,"BUG: i[=%d] > 3 ERREUR\n",i);return(46); } - yyin=fopen(temp, "r"); - //yyin=fopen("./lvlTest01.ini", "r"); - if (yyin==NULL) { - fprintf(stderr,"Filename INVALIDE: %s\n",temp); - perror("Impossible d'ouvrir le niveau"); return(48); } - /* - for(i=0;i<256;++i){ - for(j=0;j<256;++j){ - for(k=0;k<256;++k){ - ctest = ((i<<16 | j<<8 | k) & 0xffffff); - printf("[i]=%d, R = %X G = %X B = %X\n", - i, ((ctest>>16) & 0xff), - ((ctest>>8) & 0xff), - (ctest & 0xff) ); - }}}*/ + lt = (strlen("../../../../trunk/level/1_orig/lvl.ini")+5);// + 4 : 4 chiffres lvl.ini, +1 : string + temp=malloc(sizeof(char)*lt); + switch(atoi(argv[1])){ + case 1 : sprintf(temp,"../../../../trunk/level/1_orig/lvl0%s%d.ini",temp0,num);break; + case 2 : sprintf(temp,"../../../../trunk/level/2_ohno/lvl1%s%d.ini",temp0,num);break; + default:fprintf(stderr,"ERREUR: dossier [%d] inconnu\n",atoi(argv[1]));return(47); + } + } else { + temp=malloc(sizeof(char)*(strlen(argv[1])+1)); + sprintf(temp,"%s",argv[1]); + } + yyin=fopen(temp, "r"); + //yyin=fopen("./lvlTest01.ini", "r"); + if (yyin==NULL) { + fprintf(stderr,"Filename INVALIDE: %s\n",temp); + perror("Impossible d'ouvrir le niveau"); return(48); } - res=lancement(); - //fclose(yyin); fait dans lancement + /* + for(i=0;i<256;++i){ + for(j=0;j<256;++j){ + for(k=0;k<256;++k){ + ctest = ((i<<16 | j<<8 | k) & 0xffffff); + printf("[i]=%d, R = %X G = %X B = %X\n", + i, ((ctest>>16) & 0xff), + ((ctest>>8) & 0xff), + (ctest & 0xff) ); + }}}*/ + + res=lancement(); + //fclose(yyin); fait dans lancement - return res; + return res; - } + } |