summaryrefslogtreecommitdiff
path: root/sdl-test
diff options
context:
space:
mode:
authorDamien Appert <dappert>2010-10-25 11:19:41 +0000
committerDamien Appert <dappert>2010-10-25 11:19:41 +0000
commit652178959026bd6dfa45aa69ed21dbd845f004d0 (patch)
treee511222a91f695f7ca4a4396db861baca246e25b /sdl-test
parente05d163af641e0cac0139bf6aa4c7852a10cd9c7 (diff)
download2010-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.yy214
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;