summaryrefslogtreecommitdiff
path: root/sdl-test
diff options
context:
space:
mode:
authorDamien Appert <dappert>2010-10-19 13:41:53 +0000
committerDamien Appert <dappert>2010-10-19 13:41:53 +0000
commita4ae58a9200752a643edd1813d204bfd2f1c73a0 (patch)
tree6e99fc769ca56b2ca35a2011d57f81871558246d /sdl-test
parent2dfe54acd379d6ac0496fe0fc47a1e7e568b3be1 (diff)
download2010-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.yy1676
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;
- }
+ }