diff options
author | Damien Appert <dappert> | 2010-10-25 11:19:41 +0000 |
---|---|---|
committer | Damien Appert <dappert> | 2010-10-25 11:19:41 +0000 |
commit | 652178959026bd6dfa45aa69ed21dbd845f004d0 (patch) | |
tree | e511222a91f695f7ca4a4396db861baca246e25b /sdl-test | |
parent | e05d163af641e0cac0139bf6aa4c7852a10cd9c7 (diff) | |
download | 2010-netlemmings-652178959026bd6dfa45aa69ed21dbd845f004d0.tar.gz 2010-netlemmings-652178959026bd6dfa45aa69ed21dbd845f004d0.tar.bz2 2010-netlemmings-652178959026bd6dfa45aa69ed21dbd845f004d0.zip |
++
git-svn-id: file:///var/svn/2010-netlemmings/trunk@117 077b3477-7977-48bd-8428-443f22f7bfda
Diffstat (limited to 'sdl-test')
-rw-r--r-- | sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy | 214 |
1 files changed, 140 insertions, 74 deletions
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy index fa3fef6..5f3c2a4 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 150 +#define FPS 20 /** redraw animated level obejcts every 3rd frame (about 100ms) */ #define ANIM_STEP_FPS 3 @@ -369,7 +369,7 @@ int cptFall2;// count number of pixel when lemming falling;default = 0; int cptJump; // count number of pixel when lemming jumping;default = 0; int cptBrick; // count number of brick ;default = 0; - int CptBoom; // count number of boom ;default = 404; + int cptBoom; // count number of boom ;default = 404; int cptState; // count number of frame for an animation at once, default=0; }; @@ -515,6 +515,8 @@ int print_alpha(SDL_Surface *dst, SDL_Surface *src, int x, int y, char* msg); + int paint_bomber(int x,int y,int xMax,SDL_Surface *cooldown,SDL_Surface *dst,int cpt); + int testAlpha(SDL_Surface *dst, SDL_Surface *src,SDL_Surface *src2, int x, int y); int legende (struct gameInit *gInit); @@ -1213,19 +1215,19 @@ int checkPixelUP(int nbr, int x, int y, int size ){ err=get_pixel32(x,y-res,pStencil); if(err==ccc_error){return 114;} + + if((err&0xbb)==0xbb){//it'an object + return res; + } if((err&0xcb)==0xcb){// it's a blocker return res; } - if(((err&0xbb)==0xbb)||// it's an object - ((err&ccc_lWalk_on)==ccc_lWalk_on)// it's an walk Lem - ){continue;} - if(err==ccc_bgStencil){ return res; } - } - return res; } + return res; +} //return Position inside lemming which is used for collisions int midY(int y, int size) { return y - size; @@ -1254,14 +1256,12 @@ int checkPixelUP(int nbr, int x, int y, int size ){ err=get_pixel32(x,y,pStencil); if(err==ccc_error){return 115;} + if((err&0xbb)==0xbb){//it'an object + return 1; + } if((err&0xcb)==0xcb){// it's a blocker return 0; } - - if(((err&0xbb)==0xbb)||// it's an object - ((err&ccc_lWalk_on)==ccc_lWalk_on)// it's an walk Lem - ){return 0;} - if(err==ccc_bgStencil){ return 1; } @@ -1348,7 +1348,6 @@ int checkPixelUP(int nbr, int x, int y, int size ){ k=gInit->l.ll; while(k != NULL){ if((k->ID<LEM_JOB)||(k->ID>19)){ - switch(k->ID){ case 20: newID=10;break; case 21: newID=6;break; @@ -1372,10 +1371,14 @@ int checkPixelUP(int nbr, int x, int y, int size ){ newType=k->ID; // cooldown before lemming boom - switch(k->data.pl->CptBoom){ + boom=0; + switch(k->data.pl->cptBoom){ case 0: boom=1;break; case 404: break; - default: --k->data.pl->CptBoom; + default: { + --k->data.pl->cptBoom; + if(paint_bomber(k->x,k->y,lw,gInit->mapI.map.tabGif[2],pSpr_Lem,(k->data.pl->cptBoom/FPS +1))!=0){return 99;} + } } //flipDirBorder @@ -1427,7 +1430,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ k->ID=5;//SPLAT } else { k->ID=0;//WALKER - //k->y-=2; + k->y-=2; k->data.pl->cptFall=0; } } @@ -1806,6 +1809,10 @@ int checkPixelUP(int nbr, int x, int y, int size ){ case 10: // BOMBER printf("BOMBER ->"); + if(k->data.pl->cptBoom==0){ + k->data.pl->cptBoom=404; + k->data.pl->cptState=gInit->mapI.lemmingDATA[10].state; + } free=checkPixelDOWN(FLOATER_STEP, k->x+fx,k->y+fy); if(free==113){return 113;} if(free==FALL_DISTANCE_FORCE_FALL) @@ -1826,38 +1833,43 @@ int checkPixelUP(int nbr, int x, int y, int size ){ } break; }//FIN SWITCH + + // trap - err=get_pixel32(k->x+fx,k->y,pStencil); - if(err==ccc_error){return 12;} - //printf("k->ID => %d get_pixel32(k->x %d+fx %d => %d,k->y %d,pStencil) == %p \n",k->ID,k->x,fx,k->x+fx,k->y,err); - if(err==ccc_oTrapDrown){ - k->ID=7; - k->data.pl->cptState=gInit->mapI.lemmingDATA[k->ID].state; - } - if(err==ccc_oTrapAndLem){ - k->ID=8; - k->data.pl->cptState=gInit->mapI.lemmingDATA[k->ID].state; - } - if(err==ccc_oTrapAndNoLem){ - k->ID=17; - o=gInit->o.lo; - while(o!=NULL){ - if((gInit->mapI.map.tabDataSprO[o->ID].type==6)&& - (o->x<=(k->x+fx))&& - (gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+o->ID*2+o->data.po->UD+ADD_OBJ]->w>=(k->x+fx))&& - (o->y<=(k->y))&& - (gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+k->ID*2+k->data.po->UD+ADD_OBJ]->h>=(k->y))){ - err=gInit->mapI.map.tabDataSprO[o->ID].state; - break; + if(k->ID != 7 && k->ID != 8 && k->ID != 9 && k->ID != 17){ + err=get_pixel32(k->x+fx,k->y,pStencil); + if(err==ccc_error){return 12;} + //printf("k->ID => %d get_pixel32(k->x %d+fx %d => %d,k->y %d,pStencil) == %p \n",k->ID,k->x,fx,k->x+fx,k->y,err); + if(err==ccc_oTrapDrown){ + k->ID=7; + k->data.pl->cptState=gInit->mapI.lemmingDATA[k->ID].state; + } + if(err==ccc_oTrapAndLem){ + k->ID=8; + k->data.pl->cptState=gInit->mapI.lemmingDATA[k->ID].state; + } + if(err==ccc_oTrapAndNoLem){ + k->ID=17; + k->data.pl->cptState=0; + o=gInit->o.lo; + while(o!=NULL){ + //printf("gInit->mapI.map.tabDataSprO[%d].type=>%d\n(o->x%d<=(k->x+fx)%d)\n object->w %d >= (k->x+fx) %d\n o->y %d <= (k->y) %d\n",o->ID,gInit->mapI.map.tabDataSprO[o->ID].type,(o->x),(k->x+fx),gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+o->ID*2+o->data.po->UD+ADD_OBJ]->w,(k->x+fx),o->y,(k->y)); + if((gInit->mapI.map.tabDataSprO[o->ID].type==6)&& + (o->x<=(k->x+fx))&& + (gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+o->ID*2+o->data.po->UD+ADD_OBJ]->w+o->x >= (k->x+fx))&& + (o->y<=(k->y))&& + (gInit->mapI.map.tabGif[gInit->mapI.map.tiles*2+k->ID*2+k->data.po->UD+ADD_OBJ]->h+o->y >= (k->y))){ + o->data.po->cptState=gInit->mapI.map.tabDataSprO[o->ID].state; + break; + } + o=o->next; } - o=o->next; + } + if(err==ccc_oExit){ + k->ID=9; + k->data.pl->cptState=gInit->mapI.lemmingDATA[k->ID].state; } - o->data.po->cptState=err; - } - if(err==ccc_oExit){ - k->ID=9; - k->data.pl->cptState=gInit->mapI.lemmingDATA[k->ID].state; } printf("\n"); } @@ -1904,6 +1916,22 @@ int checkPixelUP(int nbr, int x, int y, int size ){ } return 0; } + +int paint_bomber(int x,int y,int xMax,SDL_Surface *cooldown,SDL_Surface *dst,int cpt){ + + SDL_Rect rect,to; + + to.x=x;//+xMax/2; + rect.x=0; + rect.h=cooldown->h/5; + rect.y= rect.h * (cpt-1); + to.y=y-rect.h; + rect.w=cooldown->w; + + test_blit(cooldown, &rect, dst, &to); + + return 0; + } int testAlpha(SDL_Surface *dst, SDL_Surface *src,SDL_Surface *src2, int x, int y){ @@ -2065,7 +2093,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ loadedImage = IMG_Load( filename ); //Si l'image est chargée -/* if( loadedImage != NULL ) + if( loadedImage != NULL ) { //Création de l'image optimisée optimizedImage = SDL_DisplayFormat( loadedImage ); @@ -2091,7 +2119,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ //On retourne l'image optimisée return optimizedImage; -*/ + return loadedImage; } @@ -2194,7 +2222,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ return(21); } //2: countdown.gif - gInit->mapI.map.tabGif[2]= load_image("../../../misc/countdown.gif",gInit->mapI.map.cmap.bgColor); + gInit->mapI.map.tabGif[2]= load_image("../../../misc/countdown.gif",ccc_lemming); if ( gInit->mapI.map.tabGif[2] == NULL ) { printf("ERREUR load_file countdown.gif: %s\n", "../../../misc/countdown.gif"); return(22); @@ -2561,7 +2589,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ //DEBUT TEST CREATION UN LEMMING // DEBUT DEBUG: LEMMING COLLISION - gInit->mapI.paraMap[1]=10; + //gInit->mapI.paraMap[1]=2; // FIN DEBUG: LEMMING COLLISION nbLem=gInit->mapI.paraMap[1]; @@ -2612,7 +2640,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ gInit->l.ll->data.pl->cptJump=0; gInit->l.ll->data.pl->nuke=0; gInit->l.ll->data.pl->cptState=0; - gInit->l.ll->data.pl->CptBoom=404; + gInit->l.ll->data.pl->cptBoom=404; gInit->l.ll->data.pl->cptFall2=0; gInit->l.ll->data.pl->cptBrick=0; @@ -2649,7 +2677,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ gInit->l.ll->data.pl->cptJump=0; gInit->l.ll->data.pl->nuke=0; gInit->l.ll->data.pl->cptState=0; - gInit->l.ll->data.pl->CptBoom=404; + gInit->l.ll->data.pl->cptBoom=404; gInit->l.ll->data.pl->cptFall2=0; gInit->l.ll->data.pl->cptBrick=0; if(gInit->mapI.nbrEntry==1){i=0;} @@ -3121,10 +3149,17 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ )*(objetAnim.h); objetAnim.w = sf->w; - rStencil.x=k->x ; - rStencil.y=k->y ; - rStencil.h=objetAnim.h; - rStencil.w=objetAnim.w; + if(type==6||type==8){ + rStencil.w=objetAnim.w/3; + rStencil.x=k->x+objetAnim.w/2-rStencil.w/2 ; + rStencil.y=k->y ; + rStencil.h=objetAnim.h; + } else { + rStencil.x=k->x; + rStencil.y=k->y; + rStencil.w=objetAnim.w; + rStencil.h=objetAnim.h; + } mode=k->data.po->paintMode; @@ -3140,8 +3175,9 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ // fin check if(type!=4&&type!=3){ if(type==5){ - rStencil.y=k->y+rStencil.h/3; - rStencil.h=(rStencil.h/3 + (rStencil.h/3)%3)*2; + rStencil.y=k->y+(rStencil.h/6); + //rStencil.h=(rStencil.h/6 + (rStencil.h/6)%6)*5; + rStencil.h=4; } switch(type){ case 0://passive @@ -3223,16 +3259,17 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ k=gInit->l.ll; while ( k !=NULL ) { - + // printf("ID= %d k->data.pl->cptState== %d\n",k->ID,k->data.pl->cptState); // 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 + if(k->data.pl->cptState <= 0 ){ + //printf("id ? %d \n",k->ID); + switch(k->ID){ + case 8 : + case 5 : k->ID=17;break;// decret de décès + case 9 : k->ID=19;break;// decret de survivant + default:break; + + } } //8 + (99 - releaseRate) if((gInit->cptGame[15]==0)&&(gInit->cptGame[16]==gInit->mapI.nbrEntry)){ @@ -3241,6 +3278,7 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ if( (k->ID==18)&& (gInit->cptGame[16]==gInit->mapI.nbrEntry)&& + (!gInit->mapI.nuke)&& ((gInit->l.nbrInput-(gInit->l.nbr + gInit->l.nbrDied + gInit->l.nbrSafe))>0)&& (cptFps==(gInit->cptGame[15]+(8 + 99 - gInit->mapI.paraMap[0]))) ){ @@ -3307,7 +3345,18 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ int giveSkill (struct gameInit *gInit, struct listeSimplementChainee* k, int skill ){ - + /* + struct listeSimplementChainee *l=NULL; + if(skill==20){ + gInit->mapI.nuke=1; + l=gInit->l.ll; + while(l!=NULL){ + giveSkill (gInit,l,10); + l=l->next; + } + return 0; + }*/ + switch(skill){ //climber case 2 : if((gInit->mapI.paraMap[4]>0)&& @@ -3324,15 +3373,17 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ } break; //bomber - case 10 : if((gInit->mapI.paraMap[6]>0)&& - (k->data.pl->bomber==404)){ - --gInit->mapI.paraMap[6]; - k->data.pl->bomber=5; + case 10 : + if((gInit->mapI.paraMap[6]>0)&& + (k->data.pl->cptBoom==404)){ + if(!gInit->mapI.nuke) + {--gInit->mapI.paraMap[6];} + k->data.pl->cptBoom=5*FPS; if( k->data.pl->blocker==1){ k->ID=21; - } else { + } /*else { k->ID=10; - } + }*/ } break; //blocker @@ -3462,7 +3513,9 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ 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 - + + //case 11 : err=giveSkill(gInit,k,20);break;//nuke + default: break; } if(err!=0){return err;} @@ -3629,6 +3682,7 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ int i,numB; SDL_Surface *sf; + struct listeSimplementChainee *l=NULL; // size cursor sf=gInit->mapI.map.tabGif[3]; x+=sf->w/2; @@ -3662,6 +3716,18 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ } } gInit->cptGame[numB]=0; } else { + //NUKE + if(numB==11){ + gInit->mapI.nuke=1; + l=gInit->l.ll; + while(l!=NULL){ + if(l->ID!=17&&l->ID!=8&&l->ID!=9&&l->ID!=10&&l->ID!=21){ + giveSkill (gInit,l,10); + } + l=l->next; + } + } + for(i=0;i<NBR_BUTTON_LEMMING;++i){ if(i != numB){ gInit->cptGame[i]=0; |