summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Appert <dappert>2010-09-30 09:35:58 +0000
committerDamien Appert <dappert>2010-09-30 09:35:58 +0000
commitfd4e67514e6154f717168fd02396847eddbb5885 (patch)
tree69e29cb00d68b9dd1b2590e123ed66d2b0e1ec69
parent58a98b39c6a091004951a2e37a3573f1bb047666 (diff)
download2010-netlemmings-fd4e67514e6154f717168fd02396847eddbb5885.tar.gz
2010-netlemmings-fd4e67514e6154f717168fd02396847eddbb5885.tar.bz2
2010-netlemmings-fd4e67514e6154f717168fd02396847eddbb5885.zip
modif pour la mémoire + diag classe + lvlTest01
git-svn-id: file:///var/svn/2010-netlemmings/trunk@75 077b3477-7977-48bd-8428-443f22f7bfda
-rwxr-xr-xLemmings.bmpbin0 -> 4806750 bytes
-rw-r--r--sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini40
-rw-r--r--sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy190
3 files changed, 147 insertions, 83 deletions
diff --git a/Lemmings.bmp b/Lemmings.bmp
new file mode 100755
index 0000000..fbc4f36
--- /dev/null
+++ b/Lemmings.bmp
Binary files differ
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini b/sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini
new file mode 100644
index 0000000..e97a799
--- /dev/null
+++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/lvlTest01.ini
@@ -0,0 +1,40 @@
+# LVL extracted by Lemmini #LVL1000.LVL
+releaseRate = 1
+numLemmings = 80
+numToRescue = 80
+timeLimit = 3
+numClimbers = 0
+numFloaters = 0
+numBombers = 0
+numBlockers = 0
+numBuilders = 12
+numBashers = 0
+numMiners = 0
+numDiggers = 0
+xPos = 500
+style = brick
+
+# Objects
+# id, xpos, ypos, paint mode (), upside down (0,1)
+# paint modes: 8=VIS_ON_TERRAIN, 4=NO_OVERWRITE, 0=FULL (only one value possible)
+object_2 = 1, 600, 0, 4, 0
+
+# Terrain
+# id, xpos, ypos, modifier
+# modifier: 8=NO_OVERWRITE, 4=UPSIDE_DOWN, 2=REMOVE (combining allowed, 0=FULL)
+terrain_0 = 26, 300, 150, 0
+terrain_1 = 26, 364, 151, 0
+terrain_2 = 26, 428, 152, 0
+terrain_3 = 26, 492, 153, 0
+terrain_4 = 26, 556, 154, 0
+terrain_5 = 26, 620, 155, 0
+terrain_6 = 26, 684, 156, 0
+terrain_7 = 26, 748, 157, 0
+terrain_8 = 46, 600, 0, 0
+
+
+#Steel
+# id, xpos, ypos, width, height
+
+#Name
+name = It's all a matter of timing
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy
index ce99d5a..9ec3d17 100644
--- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy
+++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/parse_ini.yy
@@ -113,21 +113,22 @@
// FIN: MAP_STRUCTURE
// DEBUT: LEMMINGS_STRUCTURE
- // LEMTYPE_COUNT - 2 == lemm_XX.gif
- #define LEMTYPE_COUNT 19
+ // LEMTYPE - OTHER_LEMTYPE == lemm_XX.gif
+ #define OTHER_LEMTYPE 3
+ #define LEMTYPE 20
enum eLemmingJob {
walker , faller , climber , climber_to_faller , floater ,
splat , stopper , drowning , trap_death , exIt , bomber,
builder , builder_end , digger , basher , miner , jumper ,
- died , enter
+ died , enter , safe
};
- char tabString_eLemmingJob[LEMTYPE_COUNT][20] = {
+ char tabString_eLemmingJob[LEMTYPE][20] = {
"walker" , "faller" , "climber" , "climber_to_faller" , "floater" ,
"splat" , "stopper" , "drowning" , "trap_death" , "exIt" , "bomber",
"builder" , "builder_end , digger" , "basher" , "miner" , "jumper",
- "died" , "enter"
+ "died" , "enter" , "safe"
};
struct lemmingMask {
@@ -244,8 +245,11 @@
};
struct lemming {
- int nbr; // number of lemming on this map; default=0;
- struct listeSimplementChainee *ll; // list of lemming; default=NULL;
+ int nbrInput; // number of lemming will be create; default=0;
+ int nbr; // number of lemming on this map; default=0;
+ int nbrDied; // number of lemming Died on this map; default=0;
+ int nbrSafe; // number of lemming Saved on this map; default=0;
+ struct listeSimplementChainee *ll; // list of lemming; default=NULL;
};
struct gameInit {
@@ -298,6 +302,8 @@
void paint_objet (struct gameInit *gInit, int cptFps);
+ void supprLem (struct gameInit *gInit, int cptFps);
+
void paint_lemming (struct gameInit *gInit, int cptFps);
int lancement();
@@ -441,16 +447,10 @@ decl: STYLE AFF val {
// init terrain
if(gInit->t.lt==NULL){
gInit->t.nbr=0;
- // gInit->t.lt=malloc(sizeof(struct listeSimplementChainee));
- // gInit->t.lt->next=NULL;
} else {
gInit->t.nbr+=1;
}
- /* gInit->t.lt->pt=malloc(sizeof(struct paraTerrain));
- gInit->t.lt->po=NULL;
- gInit->t.lt->ps=NULL;
- gInit->t.lt->pl=NULL;*/
listeItem=&gInit->t.lt;
}
@@ -459,16 +459,9 @@ decl: STYLE AFF val {
// init objet
if(gInit->o.lo==NULL){
gInit->o.nbr=0;
- // gInit->o.lo=malloc(sizeof(struct listeSimplementChainee));
- // gInit->o.lo->next=NULL;
} else {
gInit->o.nbr+=1;
}
- /* gInit->o.lo->pt=NULL;
- gInit->o.lo->po=malloc(sizeof(struct paraObjet));
- gInit->o.lo->po->cptState=0;
- gInit->o.lo->ps=NULL;
- gInit->o.lo->pl=NULL; */
listeItem=&gInit->o.lo;
}
@@ -477,16 +470,9 @@ decl: STYLE AFF val {
// init steel
if(gInit->s.ls==NULL){
gInit->s.nbr=0;
- // gInit->s.ls=malloc(sizeof(struct listeSimplementChainee));
- // gInit->s.ls->next=NULL;
-;
} else {
gInit->o.nbr+=1;
}
- /* gInit->s.ls->pt=NULL;
- gInit->s.ls->po=NULL;
- gInit->s.ls->ps=malloc(sizeof(struct paraSteel));
- gInit->s.ls->pl=NULL;*/
listeItem=&gInit->s.ls;
}
@@ -534,10 +520,9 @@ decl: STYLE AFF val {
// PREMIER CAS
if(gInit->mapI.lemmingDATA == NULL){
// 1ER CAS
- gInit->mapI.lemmingDATA=malloc((sizeof(struct lemmingJobAndSprite))*(LEMTYPE_COUNT - 2));
+ gInit->mapI.lemmingDATA=malloc((sizeof(struct lemmingJobAndSprite))*(LEMTYPE - OTHER_LEMTYPE));
gInit->mapI.cpt = -1;
}
- //gInit->mapI.lemmingDATA[gInit->mapI.cpt].state=$3->ptr.ints->val;
gInit->mapI.cpt +=1;
gInit->mapI.lemmingDATA[gInit->mapI.cpt].mask=NULL;
gInit->mapI.lemmingDATA[gInit->mapI.cpt].imask=NULL;
@@ -632,15 +617,9 @@ decl: STYLE AFF val {
if(state>2 && state<6){
k->next=*listeItem;
*listeItem=k;
- // on supprime *lemmings qui ne sert à rien
- // free(l);
}
- // fichier lemming.ini
-
-
+ //free(curr);
} else {
- // on supprime *lemmings qui ne sert à rien
- // free(l);
if(state == 0) {
printf("BUG: no parse for this token : %s \n",$1);
@@ -867,9 +846,9 @@ void stateLemming(struct gameInit *gInit, SDL_Surface *surf ){
}
while (unl != NULL){
- if(unl->ID < 17){
+ if(unl->ID < (LEMTYPE - OTHER_LEMTYPE)){
- sfT = gInit->mapI.map.tabGif[gInit->mapI.map.tiles + gInit->mapI.map.tilesObjet +gInit->mapI.map.tilesSteel +unl->ID + ADD_OBJ];
+ sfT = gInit->mapI.map.tabGif[gInit->mapI.map.tiles + gInit->mapI.map.tilesObjet*2 +gInit->mapI.map.tilesSteel +(unl->ID)*2+(unl->data.pl->dir) + ADD_OBJ];
weightLem=sfT->w;
heightLem=sfT->h/(gInit->mapI.lemmingDATA[unl->ID].state);
@@ -883,7 +862,7 @@ void stateLemming(struct gameInit *gInit, SDL_Surface *surf ){
k=gInit->o.lo;
while(k != NULL){
- sfT=gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID+ADD_OBJ];
+ sfT=gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID*2+k->data.po->UD+ADD_OBJ];
x0 = k->x;
weightGif = sfT->w;
y0 = k->y;
@@ -1175,7 +1154,7 @@ void load_fields(char *folder, struct gameInit *gInit ) {
exit(86);
}*/
- total=(LEMTYPE_COUNT - 2) + gInit->mapI.map.tiles + gInit->mapI.map.tilesSteel + gInit->mapI.map.tilesObjet;
+ total=((LEMTYPE - OTHER_LEMTYPE)*2) + gInit->mapI.map.tiles + gInit->mapI.map.tilesSteel + ((gInit->mapI.map.tilesObjet)*2);
gInit->mapI.map.tabGif=malloc((total + ADD_OBJ) * sizeof(SDL_Surface *));
@@ -1196,25 +1175,26 @@ void load_fields(char *folder, struct gameInit *gInit ) {
printf("load_file ok : %i -> '%s'\n", i+cpt, filepath);
}
}
-
+ free(filepath);
//stored objet
cpt=ADD_OBJ+gInit->mapI.map.tiles;
filepath = malloc(sizeof(char)*(strlen(folder)+lt+strlen("/o_.gif")+(sizeof(int)*10)));
- for(i=0; i < gInit->mapI.map.tilesObjet ; ++i) {
- sprintf(filepath, "%s/%s%s%d.gif", folder,temp,"o_", i);
+ 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);
- if(gInit->mapI.map.tabGif[i+cpt] == NULL) {
- printf("ERREUR load_file objet: %s\n", filepath);
+ gInit->mapI.map.tabGif[i+1+cpt] = flipSurfaceUD_LR(load_image(filepath),UD);
+ if((gInit->mapI.map.tabGif[i+cpt] == NULL)||(gInit->mapI.map.tabGif[i+1+cpt] == NULL)) {
+ printf("ERREUR load_file Objet: %s\n", filepath);
exit(17);
} else {
- printf("load_file ok : %i -> '%s'\n", i+cpt, filepath);
+ printf("load_file ok : %i -> '%s' + flip_LR\n", i+cpt, filepath);
}
}
-
+ free(filepath);
//stored steel
- cpt=ADD_OBJ+gInit->mapI.map.tiles+gInit->mapI.map.tilesObjet;
+ cpt=ADD_OBJ+gInit->mapI.map.tiles+(gInit->mapI.map.tilesObjet*2);
filepath = malloc(sizeof(char)*(strlen(folder)+lt+strlen("/om_.gif")+(sizeof(int)*10)));
@@ -1228,29 +1208,35 @@ void load_fields(char *folder, struct gameInit *gInit ) {
printf("load_file ok : %i -> '%s'\n", i+cpt, filepath);
}
}
-
+ free(filepath);
//stored lemmingsDATA
- cpt=ADD_OBJ+gInit->mapI.map.tilesObjet+gInit->mapI.map.tiles+gInit->mapI.map.tilesSteel;
+ cpt=ADD_OBJ+(gInit->mapI.map.tilesObjet*2)+gInit->mapI.map.tiles+gInit->mapI.map.tilesSteel;
filepath = malloc(sizeof(char)*(strlen(folderLem)+strlen("lemm")+strlen("/_.gif")+(sizeof(int)*10)));
- for(i=0; i < (LEMTYPE_COUNT - 2) ; ++i) {
- sprintf(filepath, "%s/%s%d.gif", folderLem,"lemm_",i);
- gInit->mapI.map.tabGif[i+cpt] = load_image(filepath);
- if(gInit->mapI.map.tabGif[i+cpt] == NULL) {
+ for(i=0; i < (LEMTYPE - OTHER_LEMTYPE)*2 ; i+=2) {
+ sprintf(filepath, "%s/%s%d.gif", folderLem,"lemm_",i/2);
+ gInit->mapI.map.tabGif[i+1+cpt] = load_image(filepath);
+ gInit->mapI.map.tabGif[i+cpt] = flipSurfaceUD_LR(load_image(filepath),LR);
+ if((gInit->mapI.map.tabGif[i+cpt] == NULL)||(gInit->mapI.map.tabGif[i+1+cpt] == NULL)) {
printf("ERREUR load_file lemmingsDATA: %s\n", filepath);
exit(17);
} else {
- printf("load_file ok : %i -> '%s'\n", i+cpt, filepath);
+ printf("load_file ok : %i -> '%s' + flip_LR\n", i+cpt, filepath);
}
}
+ free(filepath);
// bubble_3.gif
gInit->mapI.map.tabGif[0]= load_image("../../../styles/bubble/bubble_3.gif");
if ( gInit->mapI.map.tabGif[0] == NULL ) {
printf("ERREUR load_file bubble_3.gif: %s\n", "../../../styles/bubble/bubble_3.gif");
exit(17);
}
-
+
+ free(terrainGif);
+ free(objetGif);
+ free(steelGif);
+ free(folderLem);
}
@@ -1275,7 +1261,7 @@ void load_files(struct gameInit *gInit)
folder = malloc(sizeof(char)*(lt+ltt+1));
spriteINI = malloc(sizeof(char)*(lt+ltt*2+5));// *2:dossier/fichier, +4: .ini, +1: string
lemINI = malloc(sizeof(char)*ltlem+1);
-
+
//folder = "/home/jazzblue/Bureau/Projet-Lemmings/trunk/styles/dirt";
//printf("test segFault\n");
@@ -1311,14 +1297,11 @@ void load_files(struct gameInit *gInit)
gInit->s.ls=(struct listeSimplementChainee*)rev_listeO(gInit->s.ls);
afficher(gInit);
-
- // printf("\n--> %s\n", folder);
- // printf("test segFault DONE\n");
- //printf("TEST load_field am\n");
- //printf("TEST load_field pm\n");
-
-
- //Si tout s'est bien passé
+
+ //Si tout s'est bien passé
+ free(folder);
+ free(spriteINI);
+ free(lemINI);
}
@@ -1377,7 +1360,7 @@ void afficher(struct gameInit *gInit){
}
printf("LES LEMMINGS:\n");
- for(i=0;i<(LEMTYPE_COUNT - 2);++i){
+ for(i=0;i<(LEMTYPE - OTHER_LEMTYPE);++i){
printf("lem_%d:\n\tlemm_%d = %d, %d, %d\n\tpos_%d = %d, %d, %d\n",i,i,gInit->mapI.lemmingDATA[i].state,gInit->mapI.lemmingDATA[i].dir,gInit->mapI.lemmingDATA[i].anim,i,gInit->mapI.lemmingDATA[i].footX,gInit->mapI.lemmingDATA[i].footY,gInit->mapI.lemmingDATA[i].footSize);
if (gInit->mapI.lemmingDATA[i].mask != NULL){
@@ -1407,7 +1390,10 @@ void initGame(struct gameInit *gInit){
gInit->t.nbr=0;
gInit->o.nbr=0;
gInit->s.nbr=0;
+ gInit->l.nbrInput=0;
gInit->l.nbr=0;
+ gInit->l.nbrDied=0;
+ gInit->l.nbrSafe=0;
gInit->t.lt=NULL;
gInit->o.lo=NULL;
@@ -1452,7 +1438,7 @@ void creationLemming(struct gameInit *gInit){
//printf("nbLem %d\n",nbLem);
// PREMIER CAS
- gInit->l.nbr=1;
+ gInit->l.nbrInput=1;
gInit->l.ll = malloc(sizeof(struct listeSimplementChainee));
gInit->l.ll->ID=18;
@@ -1495,7 +1481,7 @@ void creationLemming(struct gameInit *gInit){
gInit->l.ll->next=kTemp;
- gInit->l.nbr += 1;
+ gInit->l.nbrInput += 1;
gInit->l.ll->ID=18;
gInit->l.ll->x=k->x+(sf->w/2)-16;
@@ -1504,7 +1490,7 @@ void creationLemming(struct gameInit *gInit){
gInit->l.ll->data.pl=malloc(sizeof(struct paraLemming));
gInit->l.ll->data.pl->dir=1;
gInit->l.ll->data.pl->cptState=0;
-
+
}
//FIN TEST CREATION UN LEMMING
}
@@ -1580,6 +1566,9 @@ void paint_terrain (struct gameInit *gInit){
//SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0x0, 0x0, 0x0 ) ); SDL_BlitSurface(background, &camera, screen, NULL); if( SDL_Flip( screen ) == -1 ) { return 1;} //scanf("%d",&pas);
}
}
+
+ printf("REVERSE l.ll\n");
+ gInit->l.ll=(struct listeSimplementChainee*)rev_listeO(gInit->l.ll);
}
@@ -1594,7 +1583,7 @@ void paint_objet (struct gameInit *gInit, int cptFps){
offset.x = k->x;
offset.y = k->y;
- sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID+ADD_OBJ];
+ sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+k->ID*2+k->data.po->UD+ADD_OBJ];
objetAnim.x = 0;
objetAnim.h = sf->h/gInit->mapI.map.tabDataSprO[k->ID].state;
@@ -1621,29 +1610,29 @@ void paint_lemming (struct gameInit *gInit, int cptFps){
SDL_Rect offset,objetAnim;
SDL_Surface *sf;
struct listeSimplementChainee *k=NULL;
- int res,nbLem=0;
+ int res;
+
k=gInit->l.ll;
while ( k !=NULL ) {
if((k->y >= LEVEL_HEIGHT)||((k->data.pl->cptState == 0 ) && (k->ID == 8)))
- {
+ {
k->ID=17; // decret de décès
}
-
- if((cptFps == gInit->mapI.paraMap[0] * nbLem) && (k->ID == 18)){
+
+ if((cptFps == gInit->mapI.paraMap[0] * (gInit->l.nbr + gInit->l.nbrDied + gInit->l.nbrSafe)) && (k->ID == 18)){
k->ID=1;
- nbLem++;
+ ++(gInit->l.nbr);
}
// lemmings => spr de sa mort ou vivant
- if((k->data.pl->cptState != 0 ) || (k->ID < 17)){
+ if((k->data.pl->cptState != 0 ) || (k->ID < (LEMTYPE - OTHER_LEMTYPE))){
offset.x = k->x;
offset.y = k->y;
- sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+gInit->mapI.map.tilesObjet+gInit->mapI.map.tilesSteel+k->ID+ADD_OBJ];
- if (k->data.pl->dir==0) {sf=flipSurfaceUD_LR(sf,LR);}
+ sf = gInit->mapI.map.tabGif[gInit->mapI.map.tiles+(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))*(objetAnim.h); // +3 : 0 == loop et dans anim_objet c'est 3 pas 0 (fichier de conf) FIXME
@@ -1652,12 +1641,45 @@ void paint_lemming (struct gameInit *gInit, int cptFps){
printf("ERREUR [%d] SDL_BlitSurface : ",res);
}
}
- k=k->next;
+ k=k->next;
}
///FIN TEST: LEM
stateLemming(gInit,background);
}
+void supprLem (struct gameInit *gInit, int cptFps){
+ struct listeSimplementChainee *k=NULL;
+ // refresh liste all of 100 tick
+ if(cptFps % 100 == 0)
+ {
+ k=gInit->l.ll;
+ 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;
+ }
+ }
+ printf("nbrInput = %d\nnbrInGame = %d\nnbrDied = %d\nnbrSafe = %d\n",gInit->l.nbrInput,gInit->l.nbr,gInit->l.nbrDied,gInit->l.nbrSafe);
+ }
+}
+
// Par défaut, c'est l'analyse LEXICALE qui est lancée !
int lancement (){
@@ -1666,7 +1688,6 @@ int lancement (){
int quit = 0;
SDL_Rect camera;
int mouseX;
- int nbLem;
//La structure d'evenement
SDL_Event event;
@@ -1713,9 +1734,8 @@ printf("DEBUG ludo : camera.w==%i, camera.h==%i\n", camera.w, camera.h);
SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format, 0, 0, 0 ) );
- nbLem=0;
cptFps=0;
-
+
//paint_terrain
paint_terrain(&gInit);
@@ -1763,6 +1783,9 @@ SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format
// SPR
paint_objet (&gInit,cptFps);
+
+ // SUPPR LEM
+ supprLem(&gInit,cptFps);
// LEM
paint_lemming (&gInit,cptFps);
@@ -1786,7 +1809,7 @@ SDL_FillRect( background, &background->clip_rect, SDL_MapRGB( background->format
printf("cptFps = %d, time: %d:%d:%d \n",cptFps,cptFps/(3600*(FPS)),(cptFps/(60*FPS))%60,(cptFps/(FPS))%60);
cptFps++;
//permission = 0;
- quit = 1;
+ // quit = 1;
}
@@ -1801,6 +1824,7 @@ int main (int argc, char **argv)
{
int res,i,num,lt;
char *temp,*temp0;
+
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");