diff options
author | Damien Appert <dappert> | 2010-10-22 18:11:18 +0000 |
---|---|---|
committer | Damien Appert <dappert> | 2010-10-22 18:11:18 +0000 |
commit | 1906f73f9efd23c3ed3c568f7ea88b05142356d4 (patch) | |
tree | 90712f7f8fed6b609f753bc7411bbd7be1737d21 /sdl-test | |
parent | f6d4ed9a006a69677ce3f82a7a1a6bb1050b366d (diff) | |
download | 2010-netlemmings-1906f73f9efd23c3ed3c568f7ea88b05142356d4.tar.gz 2010-netlemmings-1906f73f9efd23c3ed3c568f7ea88b05142356d4.tar.bz2 2010-netlemmings-1906f73f9efd23c3ed3c568f7ea88b05142356d4.zip |
up
git-svn-id: file:///var/svn/2010-netlemmings/trunk@107 077b3477-7977-48bd-8428-443f22f7bfda
Diffstat (limited to 'sdl-test')
-rw-r--r-- | sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy | 155 |
1 files changed, 137 insertions, 18 deletions
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy index 62186f7..37e5bac 100644 --- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy +++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy @@ -117,6 +117,11 @@ Uint32 ccc_lStopperRight = 0xffcccb; + //MINIMAP +#define MINIMAP_X0 636 +#define MINIMAP_Y0 325 +#define MINIMAP_MX 464 +#define MINIMAP_MY 100 // Config Cam @@ -520,6 +525,8 @@ int lancement(); int test_blit(SDL_Surface *spr,SDL_Rect* from,SDL_Surface *t,SDL_Rect* to); + + int miniMap (SDL_Surface *s, int x0, int y0, float coefX, float coefY); int paint_stencil=0; @@ -1128,7 +1135,7 @@ int checkPixelDOWN(int nbr, int x, int y){ err=get_pixel32(x,yb+res,pStencil); if(err==ccc_error){return 113;} - printf("res %d\n",res); + //printf("res %d\n",res); if((err&0xbb)!=0xbb){// it's not an object if(err!=ccc_bgStencil){ @@ -1202,14 +1209,16 @@ 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's not an object - if((err&ccc_lWalk_on)!=ccc_lWalk_on){// it's not an walk Lem - if((err&0xcb)!=0xcb){// it's not a blocker - if(err==ccc_bgStencil){ - return res; - } - } else {return 0;}//WALKER_OBSTACLE_HEIGHT;} - } + + 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; @@ -1241,12 +1250,27 @@ int checkPixelUP(int nbr, int x, int y, int size ){ err=get_pixel32(x,y,pStencil); if(err==ccc_error){return 115;} + + 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; + } + /* + if((err&0xbb)!=0xbb){ //if(err!=(ccc_lWalk_on & ccc_bgStencil)){ if((err|ccc_lWalk_on)!=ccc_bgStencil){ return 1; } } + */ return 0; } @@ -1277,7 +1301,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ if(err==ccc_error){return 116;} if(err==ccc_lWalk_on){return 2;} - printf("err %p\n",err); + //printf("err %p\n",err); if (err == ccc_lStopperLeft && dir==1) {//Right //LEFT; @@ -1330,6 +1354,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ fx=gInit->mapI.lemmingDATA[newID].footX; fy=gInit->mapI.lemmingDATA[newID].footY; + //k->y-=gInit->mapI.lemmingDATA[0].footY-fy; fs=gInit->mapI.lemmingDATA[newID].footSize; lState=gInit->mapI.lemmingDATA[newID].state; @@ -1364,13 +1389,12 @@ int checkPixelUP(int nbr, int x, int y, int size ){ switch(k->ID){ case 3 : // climber_to_walker - {printf("climber_to_walker ->"); + printf("climber_to_walker ->"); if(boom){ explode (k->x+fx,k->y+fy,fs); k->ID=10;//BOMBER break; } - } break; case 1 : // faller {printf("faller ->"); if(boom){ @@ -1399,7 +1423,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; } } @@ -1548,7 +1572,6 @@ int checkPixelUP(int nbr, int x, int y, int size ){ k->ID=17; } break; - case 2 : // CLIMBER printf("CLIMBER ->"); if(boom){ @@ -1559,7 +1582,8 @@ int checkPixelUP(int nbr, int x, int y, int size ){ if ( (++(k->data.pl->cptFall) & 1) == 1) // only every other step {k->y -= CLIMBER_STEP;} - err=checkPixelUP(2,k->x+fx,k->y+fy,fs); + err=(k->data.pl->dir==1) ? -3 : 3 ; + err=checkPixelUP(2,k->x+fx+err,k->y+fy,fs); if(err==113){return 127;} if (midY(k->y+fy,fs) < 0 || err<2) { k->data.pl->dir = (k->data.pl->dir==1) ? 0 : 1 ; @@ -1663,6 +1687,9 @@ int checkPixelUP(int nbr, int x, int y, int size ){ } k->data.pl->cptBrick=0; k->data.pl->cptState=0; + // k->y+=5; + k->ID=0; + break; case 11: // BUILDER @@ -1683,6 +1710,8 @@ int checkPixelUP(int nbr, int x, int y, int size ){ k->data.pl->dir=err; break; } + /* if((k->data.pl->cptState==0)&& + (k->data.pl->cptBrick==0)){k->y-=5;}*/ k->data.pl->cptState++; if(k->data.pl->cptState >= lState){ @@ -1703,6 +1732,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ if(err==113){return 113;} fa=err; if(fa<8|| levitation > 0){ + // k->y+=5; k->ID=0;//WALKER // a lemming can jump through the ceiling like in Mayhem2-Boiler Room if (levitation >= WALKER_OBSTACLE_HEIGHT) { @@ -2525,7 +2555,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){ //DEBUT TEST CREATION UN LEMMING // DEBUT DEBUG: LEMMING COLLISION - //gInit->mapI.paraMap[1]=1; + gInit->mapI.paraMap[1]=1; // FIN DEBUG: LEMMING COLLISION nbLem=gInit->mapI.paraMap[1]; @@ -2794,6 +2824,82 @@ int checkPixelUP(int nbr, int x, int y, int size ){ return 0; } + +int miniMap (SDL_Surface *s, int x0, int y0, float coefX, float coefY){ + + + int i,j,stepX,stepY,sizeX,sizeY,w0,h0; + SDL_Rect rect; + Uint32 err; + + if((x0 < 0)|| + (y0 < 0)|| + (coefX < 0.)|| + (coefY < 0.)|| + (s->pixels == NULL) + ){ + printf("Bug Error x0 %d y0 %d coefX %f coefY %f s->pixels %p \n",x0,y0,coefX,coefY,s->pixels); + return 189; + } + + + //printf("x0 %d y0 %d w0 %d h0 %d coefX %f coefY %f s->pixels %p \n",x0,y0,w0,h0,coefX,coefY,s->pixels); + + // if coef >= 1 then zoom++ else zoom--; + stepX=((((int)(1./coefX))==0)? 1 : ((int)(1./coefX))); + stepY=((((int)(1./coefY))==0)? 1 : ((int)(1./coefY))); + + sizeX=((((int)(1./coefX))==0)? (int)coefX : 1); + sizeY=((((int)(1./coefY))==0)? (int)coefY : 1); + + /*if(stepX==0){stepX=1;} + if(stepY==0){stepY=1;} + if(sizeX==0){sizeX=1;} + if(sizeY==0){sizeY=1;} + */ + + rect.w=sizeX; + rect.h=sizeY; + + //printf("sx %d sy %d w %d h %d \n",stepX,stepY,sizeX,sizeY); + //printf("h0 %d -> stepY %d, w0 %d -> stepX %d x0 %d y0 %d \n",stepX,stepY,sizeX,sizeY); + + w0=MINIMAP_MX/stepX; + h0=MINIMAP_MY/stepY; + + + if(w0 + x0 >LEVEL_WIDTH){ + w0=LEVEL_WIDTH-x0; + } + if(h0 + y0 > LEVEL_HEIGHT){ + h0=LEVEL_HEIGHT-y0; + } + + if((w0 + x0 >LEVEL_WIDTH)||(h0 + y0 > LEVEL_HEIGHT)){return 0;} + + + for(j=0;j<h0;j+=stepY){ + for(i=0;i<w0;i+=stepX){ + err=get_pixel32(x0+i,y0+j,s); + if(err==ccc_error){return 123;} + + rect.x=MINIMAP_X0+(i/stepX)*sizeX; + rect.y=MINIMAP_Y0+(j/stepY)*sizeY; + + if(rect.x>MINIMAP_X0+MINIMAP_MX){continue;} + if(rect.y>MINIMAP_Y0+MINIMAP_MY){continue;} + if(rect.w+rect.x>MINIMAP_X0+MINIMAP_MX){continue;} + if(rect.h+rect.y>MINIMAP_Y0+MINIMAP_MY){continue;} + + SDL_FillRect(s, &rect, err); + + } + } + + + return 0; +} + int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ return SDL_BlitSurface(spr,from, t,to); @@ -3163,7 +3269,7 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ // offset.h = objetAnim.h; switch(newID){ case 0: {// WALK_ON - putPixel(pStencil,k->x+fx+fs,k->y+fy,ccc_lWalk_on); + //putPixel(pStencil,k->x+fx+fs,k->y+fy,ccc_lWalk_on); //SDL_FillRect(pStencil, &offset, ccc_lWalk_on); break; } @@ -3230,7 +3336,16 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ k->ID=6; } break; - case 11 : ;break;//builder + //builder + case 11 : if(((k->ID==0)||((k->ID>9)&&(k->ID<17)))&& + (gInit->mapI.paraMap[7]>0) + /*&&(k->data.pl->blocker==0)*/ + ){ + --gInit->mapI.paraMap[8]; + //k->data.pl->cptBrick=12; + k->ID=11; + } + break; case 14 : ;break;//basher case 15 : ;break;//miner case 13 : ;break;//digger @@ -3791,11 +3906,15 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){ //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){ test_blit(pSpr_Lem, &camera, screen, NULL); } else { test_blit(pStencil, &camera, screen, NULL); } + err=miniMap (screen,mouseX,mouseY,4,4); + if( err != 0){ return err;} + /* FPS counter */ //printf("(tick %ld > fps_start %d +500)\n",tick,fps_start); |