summaryrefslogtreecommitdiff
path: root/sdl-test
diff options
context:
space:
mode:
authorDamien Appert <dappert>2010-10-22 11:30:51 +0000
committerDamien Appert <dappert>2010-10-22 11:30:51 +0000
commitf6d4ed9a006a69677ce3f82a7a1a6bb1050b366d (patch)
tree4e132bb1eb4f92b987deccd22a9018d0058ac31f /sdl-test
parenteb6c3e70bf4144dedb31686821c94c943f13a71b (diff)
download2010-netlemmings-f6d4ed9a006a69677ce3f82a7a1a6bb1050b366d.tar.gz
2010-netlemmings-f6d4ed9a006a69677ce3f82a7a1a6bb1050b366d.tar.bz2
2010-netlemmings-f6d4ed9a006a69677ce3f82a7a1a6bb1050b366d.zip
up automate
git-svn-id: file:///var/svn/2010-netlemmings/trunk@106 077b3477-7977-48bd-8428-443f22f7bfda
Diffstat (limited to 'sdl-test')
-rw-r--r--sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy162
1 files changed, 95 insertions, 67 deletions
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy
index 6bc63c6..62186f7 100644
--- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy
+++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy
@@ -54,9 +54,6 @@
#define NBR_BUTTON_LEMMING 13
const int ADD_OBJ = NBR_ADD_OBJ + NBR_BUTTON_LEMMING;
- //vide == black
- Uint32 ccc_vide = 0x000000;
-
//cyan pixel color
Uint32 ccc_cyan= 0x00ffff;
//yellow pixel color
@@ -67,18 +64,13 @@
Uint32 ccc_green= 0x00ff00;
// erase surface;
Uint32 ccc_black= 0x000000;
+
//Blanc cursor
Uint32 ccc_cursor = 0xffffff;
- //Noir Objet
- Uint32 ccc_objet = 0xff000000;
- //Noir Terrain
- Uint32 ccc_terrain = 0xff000000;
- // Noir Steel
- Uint32 ccc_steel = 0xff000000;
+ //Noir colorKeyGif
+ Uint32 ccc_keyGif = 0x000000;
// lemming color
Uint32 ccc_lemming = 0x001a82;
- // icon_color
- Uint32 ccc_icon = 0x000000;
// object color
// terrain
@@ -87,9 +79,15 @@
Uint32 ccc_tFull = 0xff38b0de; // Ciel d'été
Uint32 ccc_tNoOverwrite = 0xff0000ff; // bleu
Uint32 ccc_tHidden = 0xff236b8e; // Bleu Acier
- // new formule
- Uint32 ccc_tBrick = 0xff00edaa;//0x00ed4f; // vert
- Uint32 ccc_bgStencil = 0x00000000;
+
+ // after conversion
+ // destructible => brick
+ Uint32 ccc_tBrick = 0x00edaa;//0x00ed4f; // vert
+ // empty => bgStencil
+ Uint32 ccc_bgStencil = 0x000000;
+ // steel
+ // indestructible => steel
+ Uint32 ccc_s = 0xff00aa;//0xff00ff;//rose bonbon
// object
Uint32 ccc_oPassive = 0x6b8ebb;//0x6b8e23; // Vert olive clair
@@ -106,21 +104,17 @@
Uint32 ccc_oUnknow = 0xffffbb;//0xffffff; // Blanc
- // steel
-
- Uint32 ccc_s = 0xffff00aa;//0xff00ff;//rose bonbon
// error
-
- Uint32 ccc_error = 0xff666669;
+ Uint32 ccc_error = 0x666669;
// lemming
- Uint32 ccc_lWalk_on = 0xff00edaa;
+ Uint32 ccc_lWalk_on = 0xffddcc;
- Uint32 ccc_lStopper = 0xffffaacc;
+ Uint32 ccc_lStopper = 0xffffcb;
- Uint32 ccc_lStopperLeft = 0xffffbbcc;
- Uint32 ccc_lStopperRight = 0xffffcccc;
+ Uint32 ccc_lStopperLeft = 0xffbbcb;
+ Uint32 ccc_lStopperRight = 0xffcccb;
@@ -471,9 +465,9 @@
int reachedPlateau(int x, int y, int size, int dir);
- int stencilMid(int x, int y, int size);
+ int stencilMid(int x, int y);
- int turnedByStopper(int x, int y, int size, int dir);
+ int turnedByStopper(int x, int y, int dir);
int explode(int x, int y, int size);
@@ -1123,19 +1117,22 @@ int checkPixelDOWN(int nbr, int x, int y){
{return 0;}
yb = y + 1;
+
for(res=0;res<nbr;++res){
if(yb+res >= LEVEL_HEIGHT){
return FALL_DISTANCE_FORCE_FALL;
}
+
putPixel(pSpr_Lem,x,yb+res,ccc_red);
err=get_pixel32(x,yb+res,pStencil);
if(err==ccc_error){return 113;}
+
+ printf("res %d\n",res);
- if((err&0xbb)!=0xbb){
- //if((err&ccc_lWalk_on)!=ccc_bgStencil){
- if((err&ccc_lWalk_on)!=ccc_bgStencil){
- return res;
+ if((err&0xbb)!=0xbb){// it's not an object
+ if(err!=ccc_bgStencil){
+ return res;//return ((res == 0)? 0 : res-1);//res;
}
}
}
@@ -1163,9 +1160,9 @@ int checkPixelUP(int nbr, int x, int y, int size ){
err=get_pixel32(x,ym-res,pStencil);
if(err==ccc_error){return 113;}
- if((err&0xbb)!=0xbb){
- if((err|ccc_lWalk_on)!=ccc_bgStencil){
- return res;
+ if((err&0xbb)!=0xbb){// it's not an object
+ if(err!=ccc_bgStencil){
+ return res;//return ((res == 0)? 0 : res-1);//res;
}
}
}
@@ -1194,6 +1191,8 @@ int checkPixelUP(int nbr, int x, int y, int size ){
if (y >= LEVEL_HEIGHT)
return LEVEL_HEIGHT-1;
+ //y+=1;
+
for(res=0;res<WALKER_OBSTACLE_HEIGHT;++res){
if(y-res<0){
return WALKER_OBSTACLE_HEIGHT +1;// forbid leaving level to the top
@@ -1203,12 +1202,14 @@ 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){
- //if(err!=(ccc_lWalk_on & ccc_bgStencil)){
- if((err|ccc_lWalk_on)!=ccc_bgStencil){
+ 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;}
+ }
}
}
return res;
@@ -1255,13 +1256,12 @@ int checkPixelUP(int nbr, int x, int y, int size ){
}
//return stencil value from the middle of the lemming
- int stencilMid(int x, int y, int size) {
+ int stencilMid(int x, int y) {
Uint32 err;
- int ym = midY(y,size);
- if (x>0 && x<LEVEL_WIDTH && ym > 0 && ym < LEVEL_HEIGHT){
+ if (x>0 && x<LEVEL_WIDTH && y > 0 && y < LEVEL_HEIGHT){
putPixel(pSpr_Lem,x,y,0xff00ff);
- err=get_pixel32(x,ym,pStencil);
+ err=get_pixel32(x,y,pStencil);
}
else {
err = ccc_bgStencil;
@@ -1271,18 +1271,19 @@ int checkPixelUP(int nbr, int x, int y, int size ){
// Check if a Lemming is to be turned by a stopper/blocker
// return true if Lemming is to be turned, false otherwise
- int turnedByStopper(int x, int y, int size, int dir) {
- int s ;
+ int turnedByStopper(int x, int y, int dir) {
Uint32 err;
- err=stencilMid(x,y,size);
+ err=stencilMid(x,y);
if(err==ccc_error){return 116;}
- s=err&ccc_lStopper;
+ if(err==ccc_lWalk_on){return 2;}
+
+ printf("err %p\n",err);
- if (s == ccc_lStopperLeft && dir==1) {//Right
+ if (err == ccc_lStopperLeft && dir==1) {//Right
//LEFT;
return 0;
}
- if (s == ccc_lStopperRight && dir==0) {//Left
+ if (err == ccc_lStopperRight && dir==0) {//Left
//RIGHT
return 1;
}
@@ -1377,13 +1378,13 @@ int checkPixelUP(int nbr, int x, int y, int size ){
k->ID=10;//BOMBER
break;
}
+ //printf("x =%d y =%d x+fx= %d, y+fy =%d \n",k->x,k->y,k->x+fx,k->y+fy);
free=checkPixelDOWN(FALLER_STEP, k->x+fx,k->y+fy);
if(free==113){return 113;}
if(free==FALL_DISTANCE_FORCE_FALL)
{k->y += FALLER_STEP;}
else
{k->y += free;} // max: FALLER_STEP
-
err=outOfLowerMap(k->y+fy);
if(err==114){return 114;}
if(err==0){
@@ -1398,6 +1399,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
k->ID=5;//SPLAT
} else {
k->ID=0;//WALKER
+ k->y-=2;
k->data.pl->cptFall=0;
}
}
@@ -1417,7 +1419,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
break;
}
// check collision with stopper
- err=turnedByStopper(k->x+fx,k->y+fy,fs,k->data.pl->dir);
+ err=turnedByStopper(k->x+lw/2,k->y+fy,k->data.pl->dir);
if(err==116){return 116;}
if(err!=2){
k->data.pl->dir=err;
@@ -1446,7 +1448,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
break;
}
// check collision with stopper
- err=turnedByStopper(k->x+fx,k->y+fy,fs,k->data.pl->dir);
+ err=turnedByStopper(k->x+lw/2,k->y+fy,k->data.pl->dir);
if(err==116){return 116;}
if(err!=2){
k->data.pl->dir=err;
@@ -1607,7 +1609,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
}
break;
}
- err=turnedByStopper(k->x+fx,k->y+fy,fs,k->data.pl->dir);
+ err=turnedByStopper(k->x+lw/2,k->y+fy,k->data.pl->dir);
if(err==116){return 116;}
if(err!=2){
k->data.pl->dir=err;
@@ -1675,7 +1677,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
break;
}
// check collision with stopper
- err=turnedByStopper(k->x+fx,k->y+fy,fs,k->data.pl->dir);
+ err=turnedByStopper(k->x+lw/2,k->y+fy,k->data.pl->dir);
if(err==116){return 116;}
if(err!=2){
k->data.pl->dir=err;
@@ -1794,7 +1796,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
// 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);
+ //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;
@@ -2083,8 +2085,8 @@ int checkPixelUP(int nbr, int x, int y, int size ){
for(i=0; i < gInit->mapI.map.tiles*2 ; i+=2) {
sprintf(filepath, "%s/%s%s%d.gif", folder,temp,"_", i/2);
- gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_terrain);
- gInit->mapI.map.tabGif[i+1+cpt] = flipSurfaceUD_LR(load_image(filepath,ccc_terrain),UD,ccc_terrain);
+ gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_keyGif);
+ gInit->mapI.map.tabGif[i+1+cpt] = flipSurfaceUD_LR(load_image(filepath,ccc_keyGif),UD,ccc_keyGif);
if((gInit->mapI.map.tabGif[i+cpt] == NULL)||(gInit->mapI.map.tabGif[i+1+cpt] == NULL)) {
printf("ERREUR load_file Objet: %s\n", filepath);
return(16);
@@ -2100,8 +2102,8 @@ int checkPixelUP(int nbr, int x, int y, int size ){
for(i=0; i < gInit->mapI.map.tilesObjet*2 ; i+=2) {
sprintf(filepath, "%s/%s%s%d.gif", folder,temp,"o_", i/2);
- gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_objet);
- gInit->mapI.map.tabGif[i+1+cpt] = flipSurfaceUD_LR(load_image(filepath,ccc_objet),UD,ccc_objet);
+ gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_keyGif);
+ gInit->mapI.map.tabGif[i+1+cpt] = flipSurfaceUD_LR(load_image(filepath,ccc_keyGif),UD,ccc_keyGif);
if((gInit->mapI.map.tabGif[i+cpt] == NULL)||(gInit->mapI.map.tabGif[i+1+cpt] == NULL)) {
printf("ERREUR load_file Objet: %s\n", filepath);
return(17);
@@ -2117,7 +2119,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
for(i=0; i < gInit->mapI.map.tilesSteel ; ++i) {
sprintf(filepath, "%s/%s%s%d.gif", folder,temp,"om_", tabNum[i]);
- gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_steel);
+ gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_keyGif);
if(gInit->mapI.map.tabGif[i+cpt] == NULL) {
printf("ERREUR load_file steel: %s\n", filepath);
return(18);
@@ -2212,7 +2214,7 @@ int checkPixelUP(int nbr, int x, int y, int size ){
//if(i<7){sprintf(filepath, "%s/%s%d.gif", folderLem,"icon_",i);}
//if(i==7){sprintf(filepath, "%s/%s.gif", folderLem,"icon_6_alt");}
//if(i>7){sprintf(filepath, "%s/%s%d.gif", folderLem,"icon_",i-1);}
- gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_icon);
+ gInit->mapI.map.tabGif[i+cpt] = load_image(filepath,ccc_black);
if(gInit->mapI.map.tabGif[i+cpt] == NULL) {
printf("ERREUR load_file icon: %s\n", filepath);
return(30);
@@ -2959,7 +2961,7 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){
// fin check
rStencil.x=0 ;
rStencil.y=objetAnim.y ;
- if((err=paint_manip(sf,rStencil,pSpr_Lem,offset,gInit->mapI.map.cmap.bgColor,ccc_objet,mode))!=0){
+ if((err=paint_manip(sf,rStencil,pSpr_Lem,offset,gInit->mapI.map.cmap.bgColor,ccc_keyGif,mode))!=0){
return err;
}
k=k->next;
@@ -3101,6 +3103,7 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){
int err=0;
int cpt=0;
int newID;
+ int fx,fy,fs,la,ls;//lt;
k=gInit->l.ll;
@@ -3144,15 +3147,32 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){
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+(newID)*2+k->data.pl->dir+ADD_OBJ];
+
+ fx=gInit->mapI.lemmingDATA[newID].footX;
+ fy=gInit->mapI.lemmingDATA[newID].footY;
+ fs=gInit->mapI.lemmingDATA[newID].footSize;
+ la=gInit->mapI.lemmingDATA[newID].anim;
+ //lt=gInit->mapI.lemmingDATA[newID].type;
+ ls=gInit->mapI.lemmingDATA[newID].state;
+
objetAnim.x = 0;
- objetAnim.h = sf->h/(gInit->mapI.lemmingDATA[newID].state);
- objetAnim.y = (anim_objet((gInit->mapI.lemmingDATA[newID].anim+90),0,cptFps,gInit->mapI.lemmingDATA[newID].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.h = sf->h/ls;
+ objetAnim.y = (anim_objet((la+90),0,cptFps,ls,&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;
+// offset.w = objetAnim.w;
+// offset.h = objetAnim.h;
switch(newID){
- case 0: SDL_FillRect(pStencil, &offset, ccc_lWalk_on);break;
- case 6: SDL_FillRect(pStencil, &offset, ccc_lStopper);break;
+ case 0: {// WALK_ON
+ putPixel(pStencil,k->x+fx+fs,k->y+fy,ccc_lWalk_on);
+ //SDL_FillRect(pStencil, &offset, ccc_lWalk_on);
+ break;
+ }
+ case 6: {//BLOCKER
+ putPixel(pStencil,k->x+sf->w-fx-fs,k->y+fy,ccc_lStopperLeft);
+ putPixel(pStencil,k->x+fx+fs,k->y+fy,ccc_lStopperRight);
+ //SDL_FillRect(pStencil, &offset, ccc_lStopper);
+ break;
+ }
default:break;
}
if ((res=test_blit(sf, &objetAnim, pSpr_Lem, &offset)) != 0){
@@ -3193,13 +3213,21 @@ int test_blit(SDL_Surface *spr,SDL_Rect *from,SDL_Surface *t,SDL_Rect *to){
(k->data.pl->bomber==404)){
--gInit->mapI.paraMap[6];
k->data.pl->bomber=5;
+ if( k->data.pl->blocker==1){
+ k->ID=21;
+ } else {
+ k->ID=10;
+ }
}
break;
//blocker
- case 6 : if((gInit->mapI.paraMap[7]>0)&&
- (k->data.pl->blocker==0)){
+ case 6 : if(((k->ID==0)||((k->ID>9)&&(k->ID<17)))&&
+ (gInit->mapI.paraMap[7]>0)
+ /*&&(k->data.pl->blocker==0)*/
+ ){
--gInit->mapI.paraMap[7];
k->data.pl->blocker=1;
+ k->ID=6;
}
break;
case 11 : ;break;//builder