diff options
author | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2010-12-09 22:14:58 +0000 |
---|---|---|
committer | Ludovic Pouzenc <ludovic@pouzenc.fr> | 2010-12-09 22:14:58 +0000 |
commit | a1a8ffa6a66367db634065a94a6eec2b36f63864 (patch) | |
tree | 6a44078de1ed72fa30cfb2b315110e5ecd39bcf8 /sdl-test | |
parent | f643ff055c5017833f17dc620c4f0a98b10940fa (diff) | |
download | 2010-netlemmings-a1a8ffa6a66367db634065a94a6eec2b36f63864.tar.gz 2010-netlemmings-a1a8ffa6a66367db634065a94a6eec2b36f63864.tar.bz2 2010-netlemmings-a1a8ffa6a66367db634065a94a6eec2b36f63864.zip |
Optimisation graphiques (options surfaces, 32bits plutôt que 24, code vraiment correct pour l'algo des dirty rectangles. Passage de non_integre à intregre de quelques fonctions du code de Dams.
git-svn-id: file:///var/svn/2010-netlemmings/trunk@188 077b3477-7977-48bd-8428-443f22f7bfda
Diffstat (limited to 'sdl-test')
-rw-r--r-- | sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_integrees.c | 910 | ||||
-rw-r--r-- | sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_non_integrees.c | 731 |
2 files changed, 911 insertions, 730 deletions
diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_integrees.c b/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_integrees.c index d40638b..0b9cc5b 100644 --- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_integrees.c +++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_integrees.c @@ -117,3 +117,913 @@ Uint32* tab_of_string_to_Uint32 (char* c, int taille){ } return tab; } + + int putBrickPx(int x,int y,SDL_Surface *s,Uint32 bgColor,Uint32 debrisColor){ + int err; + SDL_Rect from,to; + + from.x=0; + from.y=0; + from.w=s->w; + from.h=s->h; + + to.x=x; + to.y=y; + to.w=x+s->w; + to.h=y+s->h; + + if((err=paint_manip(s,from,pTerrain,to,bgColor,ccc_lemming,17,pStencilFixe))!=0){ + return err; + } + if((err=paint_manip(s,from,pStencilFixe,to,ccc_bgStencil,ccc_lemming,18,NULL))!=0){ + return err; + } + + return 0; + } + + int ereasePx(int x,int y,SDL_Surface *s,Uint32 bgColor){ + int err; + SDL_Rect from,to; + + from.x=0; + from.y=0; + from.w=s->w; + from.h=s->h; + + to.x=x; + to.y=y; + to.w=x+s->w; + to.h=y+s->h; + + if((err=paint_manip(s,from,pTerrain,to,bgColor,ccc_lemming,17,pStencil))!=0){ + return err; + } + + if((err=paint_manip(s,from,pSpr_Lem,to,bgColor,ccc_lemming,17,pStencil))!=0){ + return err; + } + + if((err=paint_manip(s,from,pSprLemBack,to,bgColor,ccc_lemming,17,pStencil))!=0){ + return err; + } + + if((err=paint_manip(s,from,pStencil,to,ccc_bgStencil,ccc_lemming,18,NULL))!=0){ + return err; + } + + + return 0; + } + + SDL_Surface* flipSurfaceUD_LR(SDL_Surface* src, enum sens sensO, Uint32 c) { + int i,j; + + SDL_Surface* copy_surface = NULL; + + // This only works for 32 bit pixel format + if( src->format->BitsPerPixel == 32 ) { + // This surface must be freed by the caller. + copy_surface = SDL_CreateRGBSurface(src->flags, src->w, src->h, + src->format->BitsPerPixel, + + src->format->Rmask, + src->format->Gmask, + src->format->Bmask, + src->format->Amask); + + SDL_SetColorKey( copy_surface, + SDL_RLEACCEL | SDL_SRCCOLORKEY, + //src->format->colorkey + SDL_MapRGB( copy_surface->format, + (c >> 16) & 0xff, + (c >> 8) & 0xff, + (c & 0xff)) + ); + + //FIXME : lock surface + Uint32 *source = src->pixels; + Uint32 *dest = copy_surface->pixels; + + for(i = 0; i < src->h; i++) { + for(j = 0; j < src->w; j++) { + if (sensO == UD){// Sens UD + dest[ (src->h-i-1)*src->w + j ] = source[ i*src->w + j]; + } + if (sensO == LR){// Sens LR + dest[ i*src->w + (src->w-j-1) ] = source[ i*src->w + j]; + } + } + } + } + + return copy_surface; + } + + SDL_Surface *load_image( char* filename, Uint32 cbg ) + { + //L'image qui est chargée + SDL_Surface* loadedImage = NULL; + + //L'image optimisée qu'on va utiliser + SDL_Surface* optimizedImage = NULL; + + //Chargement de l'image + loadedImage = IMG_Load( filename ); + + //Si l'image est chargée + if( loadedImage != NULL ) + { + //Création de l'image optimisée + optimizedImage = SDL_DisplayFormat( loadedImage ); + + + + //Si la création de l'image optimisée s'est bien passée + if( optimizedImage != NULL ) + { + SDL_SetColorKey( optimizedImage, + SDL_RLEACCEL | SDL_SRCCOLORKEY, + SDL_MapRGB( optimizedImage->format, + (cbg >> 16) & 0xff, + (cbg >> 8) & 0xff, + (cbg & 0xff) + ) + ); + } + //Libération de l'ancienne image + SDL_FreeSurface( loadedImage ); + } + + //On retourne l'image optimisée + return optimizedImage; + + //return loadedImage; + } + + + int load_files(struct gameInit *gInit) + { + int lt,ltt,ltlem; + int err=0; + int res, lterrain, lobjet, lsteel; + char *folder; + char *spriteINI; + char *lemINI; + char *terrainGif; + char *objetGif; + char *steelGif; + char *temp; + int tabNum[255]; + int i,tempi,max,j; + struct dirent *lecture; + DIR *rep; + + yyparse(gInit); + + fclose(yyin); + //-DEBUG-printf("CLOSE 1\n"); + + + lt = (strlen("../../../styles/")); + ltlem = (strlen("../../../misc/lemming.ini")); + ltt = (strlen(tabString_eMapStyle[gInit->mapI.map.style])); + + 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"; + //-DEBUG-printf("test segFault\n"); + sprintf(folder,"../../../styles/%s",tabString_eMapStyle[gInit->mapI.map.style]); + sprintf(spriteINI,"%s/%s.ini",folder,tabString_eMapStyle[gInit->mapI.map.style]); + sprintf(lemINI,"%s","../../../misc/lemming.ini"); + //-DEBUG-printf("test2\n"); + + temp = tabString_eMapStyle[gInit->mapI.map.style]; + lt = strlen(temp); + lterrain = lt+1; + lobjet = lt+2; + lsteel = lt+3; + terrainGif=malloc(sizeof(char)*(lterrain+1)); + objetGif=malloc(sizeof(char)*(lobjet+1)); + steelGif=malloc(sizeof(char)*(lsteel+1)); + sprintf(terrainGif,"%s_",temp); + sprintf(objetGif,"%so_",temp); + sprintf(steelGif,"%som_",temp); + + // Compter les textures de terrain + rep = opendir(folder); + if (rep==NULL) { + //-DEBUG-printf("Erreur opendir('%s')\n", folder); + return(31); + } + + while ((lecture = readdir(rep))) { + if( (res=strncmp(terrainGif, lecture->d_name,lterrain)) == 0 ){ + ++(gInit->mapI.map.tiles); + } else { + if( (res=strncmp(objetGif, lecture->d_name,lobjet)) == 0 ) { + ++(gInit->mapI.map.tilesObjet); + } else { + if ( (res=strncmp(steelGif, lecture->d_name,lsteel)) == 0 ) { + sscanf(lecture->d_name+lsteel, "%i", &(tabNum[gInit->mapI.map.tilesSteel])); + ++(gInit->mapI.map.tilesSteel); + + } else { + //-DEBUG-printf("BUG : type de fichier non reconnu [%s] \n", lecture->d_name); + } + } + } + } + closedir(rep); + + //tri tableau + for(j=0;j<2;++j){ + for(i=0;i<gInit->mapI.map.tilesSteel-1;++i){ + max=tabNum[i]; + tempi=tabNum[i+1]; + + if(max > tempi){ + tabNum[i]=tempi; + tabNum[i+1]=max; + i=0; + } + } + } + + yyin=fopen(spriteINI, "r"); + if (yyin==NULL) { fprintf(stderr,"Filename INVALIDE: %s\n",spriteINI); + perror("Impossible d'ouvrir le fichier de configuration des sprite"); return(32); + } + yyparse(gInit); + fclose(yyin); + //-DEBUG-printf("CLOSE 2\n"); + + yyin=fopen(lemINI, "r"); + if (yyin==NULL) { fprintf(stderr,"Filename INVALIDE: %s\n",lemINI); + perror("Impossible d'ouvrir le fichier de configuration des lemmings"); return(33); + } + yyparse(gInit); + fclose(yyin); + //-DEBUG-printf("CLOSE 3\n"); + + //-DEBUG-printf("REVERSE t.lt\n"); + gInit->t.lt=(struct listeSimplementChainee*)rev_listeO(gInit->t.lt); + //-DEBUG-printf("REVERSE o.lo\n"); + gInit->o.lo=(struct listeSimplementChainee*)rev_listeO(gInit->o.lo); + //-DEBUG-printf("REVERSE s.ls\n"); + gInit->s.ls=(struct listeSimplementChainee*)rev_listeO(gInit->s.ls); + + err=load_fields(folder, gInit, tabNum); + if(err!=0){return err;} + + + // AFFICHAGE DES INFOS DE LA MAP + //err=afficher(gInit); + //if(err!=0){return err;} + + //Si tout s'est bien passé + free(terrainGif); + free(objetGif); + free(steelGif); + free(folder); + free(spriteINI); + free(lemINI); + + return 0; + } + + + + int afficher(struct gameInit *gInit){ + + int i; + struct listeSimplementChainee *k; + + printf("AFFICHAGE DE GAME INIT\n"); + printf("LES PARAMETRES:\n"); + for(i=0;i<IDENT_COUNT;++i){ + printf("\t%s = %d\n",tabString_eParaMap[i],gInit->mapI.paraMap[i]); + } + printf("\txPos = %d\n",gInit->mapI.xPos); + printf("\tstyle = %s\n",tabString_eMapStyle[gInit->mapI.map.style]); + + printf("LE NOM DU NIVEAU:\n"); + printf("name = %s\n",gInit->mapI.name); + printf("LES COULEURS DU NIVEAU:\n"); + printf("bgColor R = %X G = %X B = %X\n", + ((gInit->mapI.map.cmap.bgColor>>16) & 0xff), + ((gInit->mapI.map.cmap.bgColor>>8) & 0xff), + (gInit->mapI.map.cmap.bgColor & 0xff) ); + printf("debrisColor R = %X G = %X B = %X\n", + ((gInit->mapI.map.cmap.debrisColor>>16) & 0xff), + ((gInit->mapI.map.cmap.debrisColor>>8) & 0xff), + (gInit->mapI.map.cmap.debrisColor & 0xff) ); + printf("debrisColor:\n"); + for(i=0;i<PARTICULE_COUNT;++i){ + printf("\tP%d: R = %X G = %X B = %X\n",i, + ((gInit->mapI.map.cmap.particleColor[i]>>16) & 0xff), + ((gInit->mapI.map.cmap.particleColor[i]>>8) & 0xff), + (gInit->mapI.map.cmap.particleColor[i] & 0xff) ); + + } + + printf("TERRAINS:\n"); + k=gInit->t.lt; + i=0; + while ( k !=NULL ) { + if(k->data.pt != NULL){//{printf("paraTerrain non initialiser\n");return(34);} + printf("\tterrain_%d = %d, %d, %d, %d\n",i,k->ID, k->x, k->y,k->data.pt->modif); + } + ++i; + k=k->next; + } + + printf("OBJETS:\n"); + + k=gInit->o.lo; + i=0; + while ( k !=NULL ) { + if(k->data.po != NULL){ //{printf("paraObjet non initialiser\n");return(35);} + printf("\tobject_%d = %d, %d, %d, %d, %d\n",i,k->ID, k->x, k->y, k->data.po->paintMode,k->data.po->UD); + } + ++i; + k=k->next; + } + + + printf("STEELS:\n"); + k=gInit->s.ls; + i=0; + while ( k !=NULL ) { + if(k->data.ps != NULL){//{printf("paraSteel non initialiser\n");return(36);} + printf("\tsteel_%d = %d, %d, %d, %d, %d\n",i,k->ID=i, k->x, k->y, k->data.ps->w,k->data.ps->h); // FIXME big fuck here with "=" + } + ++i; + k=k->next; + } + + printf("DATA SPRITES OBJET:\n"); + for(i=0;i<gInit->mapI.map.tilesObjet;++i){ + printf("spr_%d:\n\tframes_%d = %d\n\tanim_%d = %d\n\ttype_%d = %d\n\tsound_%d = %d\n",i,i,gInit->mapI.map.tabDataSprO[i].state,i,gInit->mapI.map.tabDataSprO[i].anim,i,gInit->mapI.map.tabDataSprO[i].type,i,gInit->mapI.map.tabDataSprO[i].sound); + } + + printf("DATA JOB LEMMINGS:\n"); + for(i=0;i<LEM_JOB;++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){ + printf("\tmask_%d = %d, %d, %d\n",i,gInit->mapI.lemmingDATA[i].mask->stateM,gInit->mapI.lemmingDATA[i].mask->dirM,gInit->mapI.lemmingDATA[i].mask->cooldown); + } + + if (gInit->mapI.lemmingDATA[i].imask != NULL){ + printf("\timask_%d = %d , %d\n",i,gInit->mapI.lemmingDATA[i].imask->stateI,gInit->mapI.lemmingDATA[i].imask->dirI); + } + } + return 0; + } + + int afficher(struct gameInit *gInit){ + + int i; + struct listeSimplementChainee *k; + + printf("AFFICHAGE DE GAME INIT\n"); + printf("LES PARAMETRES:\n"); + for(i=0;i<IDENT_COUNT;++i){ + printf("\t%s = %d\n",tabString_eParaMap[i],gInit->mapI.paraMap[i]); + } + printf("\txPos = %d\n",gInit->mapI.xPos); + printf("\tstyle = %s\n",tabString_eMapStyle[gInit->mapI.map.style]); + + printf("LE NOM DU NIVEAU:\n"); + printf("name = %s\n",gInit->mapI.name); + printf("LES COULEURS DU NIVEAU:\n"); + printf("bgColor R = %X G = %X B = %X\n", + ((gInit->mapI.map.cmap.bgColor>>16) & 0xff), + ((gInit->mapI.map.cmap.bgColor>>8) & 0xff), + (gInit->mapI.map.cmap.bgColor & 0xff) ); + printf("debrisColor R = %X G = %X B = %X\n", + ((gInit->mapI.map.cmap.debrisColor>>16) & 0xff), + ((gInit->mapI.map.cmap.debrisColor>>8) & 0xff), + (gInit->mapI.map.cmap.debrisColor & 0xff) ); + printf("debrisColor:\n"); + for(i=0;i<PARTICULE_COUNT;++i){ + printf("\tP%d: R = %X G = %X B = %X\n",i, + ((gInit->mapI.map.cmap.particleColor[i]>>16) & 0xff), + ((gInit->mapI.map.cmap.particleColor[i]>>8) & 0xff), + (gInit->mapI.map.cmap.particleColor[i] & 0xff) ); + + } + + printf("TERRAINS:\n"); + k=gInit->t.lt; + i=0; + while ( k !=NULL ) { + if(k->data.pt != NULL){//{printf("paraTerrain non initialiser\n");return(34);} + printf("\tterrain_%d = %d, %d, %d, %d\n",i,k->ID, k->x, k->y,k->data.pt->modif); + } + ++i; + k=k->next; + } + + printf("OBJETS:\n"); + + k=gInit->o.lo; + i=0; + while ( k !=NULL ) { + if(k->data.po != NULL){ //{printf("paraObjet non initialiser\n");return(35);} + printf("\tobject_%d = %d, %d, %d, %d, %d\n",i,k->ID, k->x, k->y, k->data.po->paintMode,k->data.po->UD); + } + ++i; + k=k->next; + } + + + printf("STEELS:\n"); + k=gInit->s.ls; + i=0; + while ( k !=NULL ) { + if(k->data.ps != NULL){//{printf("paraSteel non initialiser\n");return(36);} + printf("\tsteel_%d = %d, %d, %d, %d, %d\n",i,k->ID=i, k->x, k->y, k->data.ps->w,k->data.ps->h); // FIXME big fuck here with "=" + } + ++i; + k=k->next; + } + + printf("DATA SPRITES OBJET:\n"); + for(i=0;i<gInit->mapI.map.tilesObjet;++i){ + printf("spr_%d:\n\tframes_%d = %d\n\tanim_%d = %d\n\ttype_%d = %d\n\tsound_%d = %d\n",i,i,gInit->mapI.map.tabDataSprO[i].state,i,gInit->mapI.map.tabDataSprO[i].anim,i,gInit->mapI.map.tabDataSprO[i].type,i,gInit->mapI.map.tabDataSprO[i].sound); + } + + printf("DATA JOB LEMMINGS:\n"); + for(i=0;i<LEM_JOB;++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){ + printf("\tmask_%d = %d, %d, %d\n",i,gInit->mapI.lemmingDATA[i].mask->stateM,gInit->mapI.lemmingDATA[i].mask->dirM,gInit->mapI.lemmingDATA[i].mask->cooldown); + } + + if (gInit->mapI.lemmingDATA[i].imask != NULL){ + printf("\timask_%d = %d , %d\n",i,gInit->mapI.lemmingDATA[i].imask->stateI,gInit->mapI.lemmingDATA[i].imask->dirI); + } + } + return 0; + } + int afficher(struct gameInit *gInit){ + + int i; + struct listeSimplementChainee *k; + + printf("AFFICHAGE DE GAME INIT\n"); + printf("LES PARAMETRES:\n"); + for(i=0;i<IDENT_COUNT;++i){ + printf("\t%s = %d\n",tabString_eParaMap[i],gInit->mapI.paraMap[i]); + } + printf("\txPos = %d\n",gInit->mapI.xPos); + printf("\tstyle = %s\n",tabString_eMapStyle[gInit->mapI.map.style]); + + printf("LE NOM DU NIVEAU:\n"); + printf("name = %s\n",gInit->mapI.name); + printf("LES COULEURS DU NIVEAU:\n"); + printf("bgColor R = %X G = %X B = %X\n", + ((gInit->mapI.map.cmap.bgColor>>16) & 0xff), + ((gInit->mapI.map.cmap.bgColor>>8) & 0xff), + (gInit->mapI.map.cmap.bgColor & 0xff) ); + printf("debrisColor R = %X G = %X B = %X\n", + ((gInit->mapI.map.cmap.debrisColor>>16) & 0xff), + ((gInit->mapI.map.cmap.debrisColor>>8) & 0xff), + (gInit->mapI.map.cmap.debrisColor & 0xff) ); + printf("debrisColor:\n"); + for(i=0;i<PARTICULE_COUNT;++i){ + printf("\tP%d: R = %X G = %X B = %X\n",i, + ((gInit->mapI.map.cmap.particleColor[i]>>16) & 0xff), + ((gInit->mapI.map.cmap.particleColor[i]>>8) & 0xff), + (gInit->mapI.map.cmap.particleColor[i] & 0xff) ); + + } + + printf("TERRAINS:\n"); + k=gInit->t.lt; + i=0; + while ( k !=NULL ) { + if(k->data.pt != NULL){//{printf("paraTerrain non initialiser\n");return(34);} + printf("\tterrain_%d = %d, %d, %d, %d\n",i,k->ID, k->x, k->y,k->data.pt->modif); + } + ++i; + k=k->next; + } + + printf("OBJETS:\n"); + + k=gInit->o.lo; + i=0; + while ( k !=NULL ) { + if(k->data.po != NULL){ //{printf("paraObjet non initialiser\n");return(35);} + printf("\tobject_%d = %d, %d, %d, %d, %d\n",i,k->ID, k->x, k->y, k->data.po->paintMode,k->data.po->UD); + } + ++i; + k=k->next; + } + + + printf("STEELS:\n"); + k=gInit->s.ls; + i=0; + while ( k !=NULL ) { + if(k->data.ps != NULL){//{printf("paraSteel non initialiser\n");return(36);} + printf("\tsteel_%d = %d, %d, %d, %d, %d\n",i,k->ID=i, k->x, k->y, k->data.ps->w,k->data.ps->h); // FIXME big fuck here with "=" + } + ++i; + k=k->next; + } + + printf("DATA SPRITES OBJET:\n"); + for(i=0;i<gInit->mapI.map.tilesObjet;++i){ + printf("spr_%d:\n\tframes_%d = %d\n\tanim_%d = %d\n\ttype_%d = %d\n\tsound_%d = %d\n",i,i,gInit->mapI.map.tabDataSprO[i].state,i,gInit->mapI.map.tabDataSprO[i].anim,i,gInit->mapI.map.tabDataSprO[i].type,i,gInit->mapI.map.tabDataSprO[i].sound); + } + + printf("DATA JOB LEMMINGS:\n"); + for(i=0;i<LEM_JOB;++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){ + printf("\tmask_%d = %d, %d, %d\n",i,gInit->mapI.lemmingDATA[i].mask->stateM,gInit->mapI.lemmingDATA[i].mask->dirM,gInit->mapI.lemmingDATA[i].mask->cooldown); + } + + if (gInit->mapI.lemmingDATA[i].imask != NULL){ + printf("\timask_%d = %d , %d\n",i,gInit->mapI.lemmingDATA[i].imask->stateI,gInit->mapI.lemmingDATA[i].imask->dirI); + } + } + return 0; + } + + + int test_O_UD(int UD){ + + switch(UD){ + case 4 : return 1;break; + case 6 : return 1;break; + case 12 : return 1;break; + case 14 : return 1;break; + default: return 0;break; + } + return 0; + } + + int paint_terrain (struct gameInit *gInit, int choix){ + struct listeSimplementChainee *k=NULL; + SDL_Rect offset; + SDL_Surface *sf; + int err=0; + int overwrite=0; + int remove=0; + int paint=0; + int tx,ty=0; + int cpt=0; + int ok=0; + Uint32 color; + + // //-DEBUG-printf("LES TERRAINS : "); + k=gInit->t.lt; + while ( k !=NULL ) { + offset.x = k->x; + offset.y = k->y; + + sf = gInit->mapI.map.tabGif[test_O_UD(k->data.pt->modif)+k->ID*2+ADD_OBJ]; + + if((k->data.pt->modif != 0)&& + (k->data.pt->modif != 2)&& + (k->data.pt->modif != 4)&& + (k->data.pt->modif != 6)&& + (k->data.pt->modif != 8)&& + (k->data.pt->modif != 10)&& + (k->data.pt->modif != 12)&& + (k->data.pt->modif != 14)&& + (k->data.pt->modif != 15) + ) { + //-DEBUG-printf("WTF ... k->data.pt->modif == %d\n",k->data.pt->modif); + return(40); + } + for(ty=k->y;ty<sf->h+k->y;++ty){ + + if(ty<0) {ty=-1;continue;} + if(ty>=pTerrain->h){break;} + if(ty>=LEVEL_HEIGHT) {break;} + + for(tx=k->x;tx<sf->w+k->x;++tx){ + + if(tx<0) {tx=-1;continue;} + if(tx>=pTerrain->w){break;} + if(tx>=LEVEL_WIDTH) {break;} + +//FIXME : le bloc suivant ne dépends pas de x et y ! + overwrite = ((k->data.pt->modif & 8) == 8)? 0 : 1; + remove = ((k->data.pt->modif & 2) == 2)? 1 : 0; + if(k->data.pt->modif == 15){ + overwrite=0; + remove=0; + } + + + color = get_pixel32(tx-k->x,ty-k->y,sf); + if(color==ccc_error){return 250;} + if (color == ccc_black) + { //putPixel(pStencil,tx,ty , ccc_tEmpty ); + continue; + } + paint=0; + if(!overwrite){ + //FIXME : What the hell avec deux fois ce get_pixel ?!? + if((get_pixel32(tx,ty,pStencil)==ccc_error)){return 67;} + // don't overwrite -> only paint if background is transparent + if(((get_pixel32(tx,ty,pStencil)>>24) & 0xff ) == 0) + {// ccc_tEmpty){ + paint=1; + } + } else if(remove){ + // if(((get_pixel32(tx,ty,pStencil)) & ccc_tFull) != 0){ + err=putPixel(pTerrain,tx,ty , gInit->mapI.map.cmap.bgColor); + if(err!=0){return err;} + err=putPixel(pStencil,tx,ty , ccc_tRemove );//ccc_tEmpty); + if(err!=0){return err;} + // } + + } else { + paint=1; + } + + if(paint==1){ + if(!overwrite){ + if(!remove){ + err=putPixel(pTerrain,tx,ty ,color); + if(err!=0){return err;} + if(k->data.pt->modif==15){ + err=putPixel(pStencil,tx,ty , ccc_tHidden );//ccc_tBrick); + if(err!=0){return err;} + } else { + err=putPixel(pStencil,tx,ty , ccc_tNoOverwrite );//ccc_tBrick); + if(err!=0){return err;} + } + } else { + err=putPixel(pTerrain,tx,ty ,color); + if(err!=0){return err;} + err=putPixel(pStencil,tx,ty , ccc_tRemoveNoOverwrite );//ccc_tBrick); + if(err!=0){return err;} + } + } else { + err=putPixel(pTerrain,tx,ty ,color); + if(err!=0){return err;} + err=putPixel(pStencil,tx,ty , ccc_tFull );//ccc_tBrick); + if(err!=0){return err;} + } + } + }//fin tx + }//fin ty + k=k->next; + cpt++; + ok=0; + //test_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0x0, 0x0, 0x0 ) ); test_blit(pTerrain, &camera, screen, NULL); if( SDL_Flip( screen ) == -1 ) { return 1;} //scanf("%d",&pas); + } + // elimination des pixel remove + + + for(ty=0;ty<LEVEL_HEIGHT;++ty){ + for(tx=0;tx<LEVEL_WIDTH;++tx){ + color = get_pixel32(tx,ty,pStencil); + if(color==ccc_tRemove){ + err=putPixel(pStencil,tx,ty , ccc_bgStencil ); + if(err!=0){return err;} + } else { + if(color!=ccc_bgStencil){ + err=putPixel(pStencil,tx,ty , ccc_tBrick ); + if(err!=0){return err;} + } + } + } + } + + + // //-DEBUG-printf("LES STEEL : "); + k=gInit->s.ls; + while ( k !=NULL ) { + offset.x = k->x; + offset.y = k->y; + + sf = gInit->mapI.map.tabGif[ADD_OBJ+(gInit->mapI.map.tiles*2)+(gInit->mapI.map.tilesObjet*2)+k->ID]; + + offset.w = k->data.ps->w; + offset.h = k->data.ps->h; + //-DEBUG-printf("H=)> %d\n",offset.h); + + for(ty=k->y;ty<offset.h+k->y;++ty){ + + if(ty<0) {ty=-1;continue;} + if(ty>pTerrain->h){break;} + if(ty>=LEVEL_HEIGHT) {break;} + + for(tx=k->x;tx<offset.w+k->x;++tx){ + + if(tx<0) {tx=-1;continue;} + if(tx>pTerrain->w){break;} + if(tx>=LEVEL_WIDTH) {break;} + + color = get_pixel32(tx,ty,pStencil); + if(color==ccc_error){return 219;} + if (color == ccc_black){ + continue; + } else { + err=putPixel(pStencil,tx,ty , ccc_s ); + if(err!=0){return err;} + } + } + } + // test_FillRect(pStencil, &offset, ccc_s); + k=k->next; + } + //} + + return 0; + } + + int paint_manip(SDL_Surface *spr,SDL_Rect from,SDL_Surface *t,SDL_Rect to,Uint32 ccc_t, Uint32 ccc_spr, int mode, SDL_Surface *stencil){ + + int size,i,j,err; + void *temp_pixels = NULL; + Uint32 ccc_temp=0x00000000; + Uint32 ccc_temp2=0x00000000; + Uint32 ccc_temp3=0x00000000; + + //FULL + if(mode==0){ + err=test_blit(spr,&from, t,&to,0); + return err; + } + + //-DEBUG-printf("paint_manip(), from.x==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); + + if(from.y<0 || from.y > spr->h) { + //-DEBUG- + printf("paint_manip(1) rectFrom_Y out, from.x==%4i, FROM.Y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); + return 0; + } + + if(from.x<0 || from.x > spr->w) { + //-DEBUG- + printf("paint_manip(2) rectFrom_X out, FROM.X==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); + return 0; + } + + if(to.y<0 || to.y > t->h) { + //-DEBUG- + printf("paint_manip(3) rectTO_Y out, from.x==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, TO.Y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); + return 0; + } + + if(to.x<0 || to.x > t->w) { + //-DEBUG- + printf("paint_manip(4) rectTO_X out, from.x==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from TO.X==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); + return 0; + } + + if(from.y+from.h > spr->h) { + from.h=spr->h - from.y; + } + + if(from.x+from.w > spr->w) { + from.w=spr->w - from.x; + } + + if(to.y+from.h > t->h) { + from.h=t->h - to.y; + } + + if(to.x + from.w > t->w) { + from.w=t->w - to.x; + } + + size=spr->h*spr->pitch; + temp_pixels=malloc(size); + + SDL_LockSurface(spr); + SDL_LockSurface(t); + if(stencil!=NULL) SDL_LockSurface(stencil); + memcpy(temp_pixels,spr->pixels,size); + + // NO OVERWRITE + if(mode==4){ + + for(j=0;j<from.h;j++) { + for(i=0;i<from.w;i++) { + /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ + //-DEBUG-printf("out of bound1 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); + return 56; + //continue; + }*/ + ccc_temp=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + //-DEBUG-printf("ccc_temp1 = %p == %p t->format->colorkey\n",ccc_temp,t->format->colorkey); + if (ccc_temp!=ccc_t) { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp;//spr->format->colorkey; + } + } + } + } + // VIS ON TERRAIN + if(mode==8){ + for(j=0;j<from.h;j++) { + for(i=0;i<from.w;i++) { + /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ + //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); + return 57; + //continue; + }*/ + ccc_temp=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + //-DEBUG-printf("ccc_temp1 = %p == %p ccc_t\n",ccc_temp,ccc_t); + if (ccc_temp==ccc_t) { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; + + } + } + } + } + // erease pixel + if(mode==17){ + for(j=0;j<from.h;j++) { + for(i=0;i<from.w;i++) { + /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ + //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); + return 57; + //continue; + }*/ + ccc_temp=((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i];//((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + ccc_temp2=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + ccc_temp3=((Uint32 *)stencil->pixels)[(to.y+j)*stencil->w+(to.x+i)]; + //-DEBUG-printf("ccc_temp1 = %p == %p ccc_t\n",ccc_temp,ccc_t); + if ((ccc_temp!=ccc_spr)&&((ccc_tBrick==ccc_temp3)||((ccc_temp3 & 0xff)==0xcb))) { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; + } else { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp2; + } + } + } + } + // erease pixel + if(mode==18){ + for(j=0;j<from.h;j++) { + for(i=0;i<from.w;i++) { + /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ + //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); + return 57; + //continue; + }*/ + ccc_temp=((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i];//((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + ccc_temp2=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + //-DEBUG- + // printf("ccc_temp = %p != %p ccc_spr && ccc_tBrick %p == %p ccc_temp2\n",ccc_temp,ccc_spr,ccc_tBrick,ccc_temp2); + if ((ccc_temp!=ccc_spr)&&((ccc_tBrick==ccc_temp2)||((ccc_temp2 & 0xff)==0xcb))) { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; + } else { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp2; + } + } + } + } + // objet trap + if(mode==19){ + for(j=0;j<from.h;j++) { + for(i=0;i<from.w;i++) { + /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ + //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); + return 57; + //continue; + }*/ + ccc_temp=((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i];//((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + ccc_temp2=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; + //-DEBUG-printf("ccc_temp1 = %p == %p ccc_t\n",ccc_temp,ccc_t); + if (ccc_temp!=ccc_spr){ + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; + } else { + ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp2; + } + } + } + } + + + if(stencil!=NULL) SDL_UnlockSurface(stencil); + SDL_UnlockSurface(t); + SDL_UnlockSurface(spr); + test_blit(spr,&from, t,&to,0); + + SDL_LockSurface(spr); + memcpy(spr->pixels,temp_pixels,size); + SDL_UnlockSurface(spr); + + free(temp_pixels); + + return 0; + + } + diff --git a/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_non_integrees.c b/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_non_integrees.c index 6a2a328..df0e46d 100644 --- a/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_non_integrees.c +++ b/sdl-test/SDL_tuto/TestParserLemmingsLVL/fonctions_non_integrees.c @@ -329,7 +329,7 @@ int reachedPlateau(int x, int y, int size, int dir) { err=get_pixel32(x,y,pStencil); if(err==ccc_error){return 115;} - if((err==ccc_oNoDigLeft)||(err==ccc_oNoDigRight)){ + if( (err==ccc_oNoDigLeft) || (err==ccc_oNoDigRight) ){ return 0; } @@ -1008,63 +1008,6 @@ int stateLemming(struct gameInit *gInit){ return 0; } - int putBrickPx(int x,int y,SDL_Surface *s,Uint32 bgColor,Uint32 debrisColor){ - int err; - SDL_Rect from,to; - - from.x=0; - from.y=0; - from.w=s->w; - from.h=s->h; - - to.x=x; - to.y=y; - to.w=x+s->w; - to.h=y+s->h; - - if((err=paint_manip(s,from,pTerrain,to,bgColor,ccc_lemming,17,pStencilFixe))!=0){ - return err; - } - if((err=paint_manip(s,from,pStencilFixe,to,ccc_bgStencil,ccc_lemming,18,NULL))!=0){ - return err; - } - - return 0; - } - - int ereasePx(int x,int y,SDL_Surface *s,Uint32 bgColor){ - int err; - SDL_Rect from,to; - - from.x=0; - from.y=0; - from.w=s->w; - from.h=s->h; - - to.x=x; - to.y=y; - to.w=x+s->w; - to.h=y+s->h; - - if((err=paint_manip(s,from,pTerrain,to,bgColor,ccc_lemming,17,pStencil))!=0){ - return err; - } - - if((err=paint_manip(s,from,pSpr_Lem,to,bgColor,ccc_lemming,17,pStencil))!=0){ - return err; - } - - if((err=paint_manip(s,from,pSprLemBack,to,bgColor,ccc_lemming,17,pStencil))!=0){ - return err; - } - - if((err=paint_manip(s,from,pStencil,to,ccc_bgStencil,ccc_lemming,18,NULL))!=0){ - return err; - } - - - return 0; - } int print_num(SDL_Surface *dst, SDL_Surface *src, int x, int y, int value, int nbrMaxOfChiffre) { @@ -1180,92 +1123,6 @@ int stateLemming(struct gameInit *gInit){ } - SDL_Surface* flipSurfaceUD_LR(SDL_Surface* src, enum sens sensO, Uint32 c) { - int i,j; - - SDL_Surface* copy_surface = NULL; - - // This only works for 32 bit pixel format - if( src->format->BitsPerPixel == 32 ) { - // This surface must be freed by the caller. - copy_surface = SDL_CreateRGBSurface(src->flags, src->w, src->h, - src->format->BitsPerPixel, - - src->format->Rmask, - src->format->Gmask, - src->format->Bmask, - src->format->Amask); - - SDL_SetColorKey( copy_surface, - SDL_RLEACCEL | SDL_SRCCOLORKEY, - //src->format->colorkey - SDL_MapRGB( copy_surface->format, - (c >> 16) & 0xff, - (c >> 8) & 0xff, - (c & 0xff)) - ); - - //FIXME : lock surface - Uint32 *source = src->pixels; - Uint32 *dest = copy_surface->pixels; - - for(i = 0; i < src->h; i++) { - for(j = 0; j < src->w; j++) { - if (sensO == UD){// Sens UD - dest[ (src->h-i-1)*src->w + j ] = source[ i*src->w + j]; - } - if (sensO == LR){// Sens LR - dest[ i*src->w + (src->w-j-1) ] = source[ i*src->w + j]; - } - } - } - } - - return copy_surface; - } - - SDL_Surface *load_image( char* filename, Uint32 cbg ) - { - //L'image qui est chargée - SDL_Surface* loadedImage = NULL; - - //L'image optimisée qu'on va utiliser - SDL_Surface* optimizedImage = NULL; - - //Chargement de l'image - loadedImage = IMG_Load( filename ); - - //Si l'image est chargée - if( loadedImage != NULL ) - { - //Création de l'image optimisée - optimizedImage = SDL_DisplayFormat( loadedImage ); - - - - //Si la création de l'image optimisée s'est bien passée - if( optimizedImage != NULL ) - { - SDL_SetColorKey( optimizedImage, - SDL_RLEACCEL | SDL_SRCCOLORKEY, - SDL_MapRGB( optimizedImage->format, - (cbg >> 16) & 0xff, - (cbg >> 8) & 0xff, - (cbg & 0xff) - ) - ); - } - //Libération de l'ancienne image - SDL_FreeSurface( loadedImage ); - } - - //On retourne l'image optimisée - return optimizedImage; - - //return loadedImage; - } - - int load_fields(char *folder, struct gameInit *gInit, int tabNum[255] ) { int i, lt,total,cpt=-1,llem; char *temp; @@ -1508,227 +1365,6 @@ int stateLemming(struct gameInit *gInit){ } - int load_files(struct gameInit *gInit) - { - int lt,ltt,ltlem; - int err=0; - int res, lterrain, lobjet, lsteel; - char *folder; - char *spriteINI; - char *lemINI; - char *terrainGif; - char *objetGif; - char *steelGif; - char *temp; - int tabNum[255]; - int i,tempi,max,j; - struct dirent *lecture; - DIR *rep; - - yyparse(gInit); - - fclose(yyin); - //-DEBUG-printf("CLOSE 1\n"); - - - lt = (strlen("../../../styles/")); - ltlem = (strlen("../../../misc/lemming.ini")); - ltt = (strlen(tabString_eMapStyle[gInit->mapI.map.style])); - - 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"; - //-DEBUG-printf("test segFault\n"); - sprintf(folder,"../../../styles/%s",tabString_eMapStyle[gInit->mapI.map.style]); - sprintf(spriteINI,"%s/%s.ini",folder,tabString_eMapStyle[gInit->mapI.map.style]); - sprintf(lemINI,"%s","../../../misc/lemming.ini"); - //-DEBUG-printf("test2\n"); - - temp = tabString_eMapStyle[gInit->mapI.map.style]; - lt = strlen(temp); - lterrain = lt+1; - lobjet = lt+2; - lsteel = lt+3; - terrainGif=malloc(sizeof(char)*(lterrain+1)); - objetGif=malloc(sizeof(char)*(lobjet+1)); - steelGif=malloc(sizeof(char)*(lsteel+1)); - sprintf(terrainGif,"%s_",temp); - sprintf(objetGif,"%so_",temp); - sprintf(steelGif,"%som_",temp); - - // Compter les textures de terrain - rep = opendir(folder); - if (rep==NULL) { - //-DEBUG-printf("Erreur opendir('%s')\n", folder); - return(31); - } - - while ((lecture = readdir(rep))) { - if( (res=strncmp(terrainGif, lecture->d_name,lterrain)) == 0 ){ - ++(gInit->mapI.map.tiles); - } else { - if( (res=strncmp(objetGif, lecture->d_name,lobjet)) == 0 ) { - ++(gInit->mapI.map.tilesObjet); - } else { - if ( (res=strncmp(steelGif, lecture->d_name,lsteel)) == 0 ) { - sscanf(lecture->d_name+lsteel, "%i", &(tabNum[gInit->mapI.map.tilesSteel])); - ++(gInit->mapI.map.tilesSteel); - - } else { - //-DEBUG-printf("BUG : type de fichier non reconnu [%s] \n", lecture->d_name); - } - } - } - } - closedir(rep); - - //tri tableau - for(j=0;j<2;++j){ - for(i=0;i<gInit->mapI.map.tilesSteel-1;++i){ - max=tabNum[i]; - tempi=tabNum[i+1]; - - if(max > tempi){ - tabNum[i]=tempi; - tabNum[i+1]=max; - i=0; - } - } - } - - yyin=fopen(spriteINI, "r"); - if (yyin==NULL) { fprintf(stderr,"Filename INVALIDE: %s\n",spriteINI); - perror("Impossible d'ouvrir le fichier de configuration des sprite"); return(32); - } - yyparse(gInit); - fclose(yyin); - //-DEBUG-printf("CLOSE 2\n"); - - yyin=fopen(lemINI, "r"); - if (yyin==NULL) { fprintf(stderr,"Filename INVALIDE: %s\n",lemINI); - perror("Impossible d'ouvrir le fichier de configuration des lemmings"); return(33); - } - yyparse(gInit); - fclose(yyin); - //-DEBUG-printf("CLOSE 3\n"); - - //-DEBUG-printf("REVERSE t.lt\n"); - gInit->t.lt=(struct listeSimplementChainee*)rev_listeO(gInit->t.lt); - //-DEBUG-printf("REVERSE o.lo\n"); - gInit->o.lo=(struct listeSimplementChainee*)rev_listeO(gInit->o.lo); - //-DEBUG-printf("REVERSE s.ls\n"); - gInit->s.ls=(struct listeSimplementChainee*)rev_listeO(gInit->s.ls); - - err=load_fields(folder, gInit, tabNum); - if(err!=0){return err;} - - - // AFFICHAGE DES INFOS DE LA MAP - //err=afficher(gInit); - //if(err!=0){return err;} - - //Si tout s'est bien passé - free(terrainGif); - free(objetGif); - free(steelGif); - free(folder); - free(spriteINI); - free(lemINI); - - return 0; - } - - int afficher(struct gameInit *gInit){ - - int i; - struct listeSimplementChainee *k; - - printf("AFFICHAGE DE GAME INIT\n"); - printf("LES PARAMETRES:\n"); - for(i=0;i<IDENT_COUNT;++i){ - printf("\t%s = %d\n",tabString_eParaMap[i],gInit->mapI.paraMap[i]); - } - printf("\txPos = %d\n",gInit->mapI.xPos); - printf("\tstyle = %s\n",tabString_eMapStyle[gInit->mapI.map.style]); - - printf("LE NOM DU NIVEAU:\n"); - printf("name = %s\n",gInit->mapI.name); - printf("LES COULEURS DU NIVEAU:\n"); - printf("bgColor R = %X G = %X B = %X\n", - ((gInit->mapI.map.cmap.bgColor>>16) & 0xff), - ((gInit->mapI.map.cmap.bgColor>>8) & 0xff), - (gInit->mapI.map.cmap.bgColor & 0xff) ); - printf("debrisColor R = %X G = %X B = %X\n", - ((gInit->mapI.map.cmap.debrisColor>>16) & 0xff), - ((gInit->mapI.map.cmap.debrisColor>>8) & 0xff), - (gInit->mapI.map.cmap.debrisColor & 0xff) ); - printf("debrisColor:\n"); - for(i=0;i<PARTICULE_COUNT;++i){ - printf("\tP%d: R = %X G = %X B = %X\n",i, - ((gInit->mapI.map.cmap.particleColor[i]>>16) & 0xff), - ((gInit->mapI.map.cmap.particleColor[i]>>8) & 0xff), - (gInit->mapI.map.cmap.particleColor[i] & 0xff) ); - - } - - printf("TERRAINS:\n"); - k=gInit->t.lt; - i=0; - while ( k !=NULL ) { - if(k->data.pt != NULL){//{printf("paraTerrain non initialiser\n");return(34);} - printf("\tterrain_%d = %d, %d, %d, %d\n",i,k->ID, k->x, k->y,k->data.pt->modif); - } - ++i; - k=k->next; - } - - printf("OBJETS:\n"); - - k=gInit->o.lo; - i=0; - while ( k !=NULL ) { - if(k->data.po != NULL){ //{printf("paraObjet non initialiser\n");return(35);} - printf("\tobject_%d = %d, %d, %d, %d, %d\n",i,k->ID, k->x, k->y, k->data.po->paintMode,k->data.po->UD); - } - ++i; - k=k->next; - } - - - printf("STEELS:\n"); - k=gInit->s.ls; - i=0; - while ( k !=NULL ) { - if(k->data.ps != NULL){//{printf("paraSteel non initialiser\n");return(36);} - printf("\tsteel_%d = %d, %d, %d, %d, %d\n",i,k->ID=i, k->x, k->y, k->data.ps->w,k->data.ps->h); // FIXME big fuck here with "=" - } - ++i; - k=k->next; - } - - printf("DATA SPRITES OBJET:\n"); - for(i=0;i<gInit->mapI.map.tilesObjet;++i){ - printf("spr_%d:\n\tframes_%d = %d\n\tanim_%d = %d\n\ttype_%d = %d\n\tsound_%d = %d\n",i,i,gInit->mapI.map.tabDataSprO[i].state,i,gInit->mapI.map.tabDataSprO[i].anim,i,gInit->mapI.map.tabDataSprO[i].type,i,gInit->mapI.map.tabDataSprO[i].sound); - } - - printf("DATA JOB LEMMINGS:\n"); - for(i=0;i<LEM_JOB;++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){ - printf("\tmask_%d = %d, %d, %d\n",i,gInit->mapI.lemmingDATA[i].mask->stateM,gInit->mapI.lemmingDATA[i].mask->dirM,gInit->mapI.lemmingDATA[i].mask->cooldown); - } - - if (gInit->mapI.lemmingDATA[i].imask != NULL){ - printf("\timask_%d = %d , %d\n",i,gInit->mapI.lemmingDATA[i].imask->stateI,gInit->mapI.lemmingDATA[i].imask->dirI); - } - } - return 0; - } - int clean_up() { //On libère la feuille de sprites @@ -1813,18 +1449,6 @@ int stateLemming(struct gameInit *gInit){ return 0; } - int test_O_UD(int UD){ - - switch(UD){ - case 4 : return 1;break; - case 6 : return 1;break; - case 12 : return 1;break; - case 14 : return 1;break; - default: return 0;break; - } - return 0; - } - int creationLemming(struct gameInit *gInit){ int nbLem; struct listeSimplementChainee *k=NULL; @@ -1952,180 +1576,6 @@ int stateLemming(struct gameInit *gInit){ return 0; } - int paint_terrain (struct gameInit *gInit, int choix){ - struct listeSimplementChainee *k=NULL; - SDL_Rect offset; - SDL_Surface *sf; - int err=0; - int overwrite=0; - int remove=0; - int paint=0; - int tx,ty=0; - int cpt=0; - int ok=0; - Uint32 color; - - // //-DEBUG-printf("LES TERRAINS : "); - k=gInit->t.lt; - while ( k !=NULL ) { - offset.x = k->x; - offset.y = k->y; - - sf = gInit->mapI.map.tabGif[test_O_UD(k->data.pt->modif)+k->ID*2+ADD_OBJ]; - - if((k->data.pt->modif != 0)&& - (k->data.pt->modif != 2)&& - (k->data.pt->modif != 4)&& - (k->data.pt->modif != 6)&& - (k->data.pt->modif != 8)&& - (k->data.pt->modif != 10)&& - (k->data.pt->modif != 12)&& - (k->data.pt->modif != 14)&& - (k->data.pt->modif != 15) - ) { - //-DEBUG-printf("WTF ... k->data.pt->modif == %d\n",k->data.pt->modif); - return(40); - } - for(ty=k->y;ty<sf->h+k->y;++ty){ - - if(ty<0) {ty=-1;continue;} - if(ty>=pTerrain->h){break;} - if(ty>=LEVEL_HEIGHT) {break;} - - for(tx=k->x;tx<sf->w+k->x;++tx){ - - if(tx<0) {tx=-1;continue;} - if(tx>=pTerrain->w){break;} - if(tx>=LEVEL_WIDTH) {break;} - -//FIXME : le bloc suivant ne dépends pas de x et y ! - overwrite = ((k->data.pt->modif & 8) == 8)? 0 : 1; - remove = ((k->data.pt->modif & 2) == 2)? 1 : 0; - if(k->data.pt->modif == 15){ - overwrite=0; - remove=0; - } - - - color = get_pixel32(tx-k->x,ty-k->y,sf); - if(color==ccc_error){return 250;} - if (color == ccc_black) - { //putPixel(pStencil,tx,ty , ccc_tEmpty ); - continue; - } - paint=0; - if(!overwrite){ - //FIXME : What the hell avec deux fois ce get_pixel ?!? - if((get_pixel32(tx,ty,pStencil)==ccc_error)){return 67;} - // don't overwrite -> only paint if background is transparent - if(((get_pixel32(tx,ty,pStencil)>>24) & 0xff ) == 0) - {// ccc_tEmpty){ - paint=1; - } - } else if(remove){ - // if(((get_pixel32(tx,ty,pStencil)) & ccc_tFull) != 0){ - err=putPixel(pTerrain,tx,ty , gInit->mapI.map.cmap.bgColor); - if(err!=0){return err;} - err=putPixel(pStencil,tx,ty , ccc_tRemove );//ccc_tEmpty); - if(err!=0){return err;} - // } - - } else { - paint=1; - } - - if(paint==1){ - if(!overwrite){ - if(!remove){ - err=putPixel(pTerrain,tx,ty ,color); - if(err!=0){return err;} - if(k->data.pt->modif==15){ - err=putPixel(pStencil,tx,ty , ccc_tHidden );//ccc_tBrick); - if(err!=0){return err;} - } else { - err=putPixel(pStencil,tx,ty , ccc_tNoOverwrite );//ccc_tBrick); - if(err!=0){return err;} - } - } else { - err=putPixel(pTerrain,tx,ty ,color); - if(err!=0){return err;} - err=putPixel(pStencil,tx,ty , ccc_tRemoveNoOverwrite );//ccc_tBrick); - if(err!=0){return err;} - } - } else { - err=putPixel(pTerrain,tx,ty ,color); - if(err!=0){return err;} - err=putPixel(pStencil,tx,ty , ccc_tFull );//ccc_tBrick); - if(err!=0){return err;} - } - } - }//fin tx - }//fin ty - k=k->next; - cpt++; - ok=0; - //test_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0x0, 0x0, 0x0 ) ); test_blit(pTerrain, &camera, screen, NULL); if( SDL_Flip( screen ) == -1 ) { return 1;} //scanf("%d",&pas); - } - // elimination des pixel remove - - - for(ty=0;ty<LEVEL_HEIGHT;++ty){ - for(tx=0;tx<LEVEL_WIDTH;++tx){ - color = get_pixel32(tx,ty,pStencil); - if(color==ccc_tRemove){ - err=putPixel(pStencil,tx,ty , ccc_bgStencil ); - if(err!=0){return err;} - } else { - if(color!=ccc_bgStencil){ - err=putPixel(pStencil,tx,ty , ccc_tBrick ); - if(err!=0){return err;} - } - } - } - } - - - // //-DEBUG-printf("LES STEEL : "); - k=gInit->s.ls; - while ( k !=NULL ) { - offset.x = k->x; - offset.y = k->y; - - sf = gInit->mapI.map.tabGif[ADD_OBJ+(gInit->mapI.map.tiles*2)+(gInit->mapI.map.tilesObjet*2)+k->ID]; - - offset.w = k->data.ps->w; - offset.h = k->data.ps->h; - //-DEBUG-printf("H=)> %d\n",offset.h); - - for(ty=k->y;ty<offset.h+k->y;++ty){ - - if(ty<0) {ty=-1;continue;} - if(ty>pTerrain->h){break;} - if(ty>=LEVEL_HEIGHT) {break;} - - for(tx=k->x;tx<offset.w+k->x;++tx){ - - if(tx<0) {tx=-1;continue;} - if(tx>pTerrain->w){break;} - if(tx>=LEVEL_WIDTH) {break;} - - color = get_pixel32(tx,ty,pStencil); - if(color==ccc_error){return 219;} - if (color == ccc_black){ - continue; - } else { - err=putPixel(pStencil,tx,ty , ccc_s ); - if(err!=0){return err;} - } - } - } - // test_FillRect(pStencil, &offset, ccc_s); - k=k->next; - } - //} - - return 0; - } int miniMapLemming (struct gameInit *gInit){ @@ -2316,185 +1766,6 @@ int stateLemming(struct gameInit *gInit){ } - int paint_manip(SDL_Surface *spr,SDL_Rect from,SDL_Surface *t,SDL_Rect to,Uint32 ccc_t, Uint32 ccc_spr, int mode, SDL_Surface *stencil){ - - int size,i,j,err; - void *temp_pixels = NULL; - Uint32 ccc_temp=0x00000000; - Uint32 ccc_temp2=0x00000000; - Uint32 ccc_temp3=0x00000000; - - //FULL - if(mode==0){ - err=test_blit(spr,&from, t,&to,0); - return err; - } - - //-DEBUG-printf("paint_manip(), from.x==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); - - if(from.y<0 || from.y > spr->h) { - //-DEBUG- - printf("paint_manip(1) rectFrom_Y out, from.x==%4i, FROM.Y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); - return 0; - } - - if(from.x<0 || from.x > spr->w) { - //-DEBUG- - printf("paint_manip(2) rectFrom_X out, FROM.X==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); - return 0; - } - - if(to.y<0 || to.y > t->h) { - //-DEBUG- - printf("paint_manip(3) rectTO_Y out, from.x==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from to.x==%4i, TO.Y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); - return 0; - } - - if(to.x<0 || to.x > t->w) { - //-DEBUG- - printf("paint_manip(4) rectTO_X out, from.x==%4i, from.y==%4i, from.h==%4i, from.w==%4i, from TO.X==%4i, to.y==%4i\n", from.x, from.y, from.h, from.w, to.x, to.y); - return 0; - } - - if(from.y+from.h > spr->h) { - from.h=spr->h - from.y; - } - - if(from.x+from.w > spr->w) { - from.w=spr->w - from.x; - } - - if(to.y+from.h > t->h) { - from.h=t->h - to.y; - } - - if(to.x + from.w > t->w) { - from.w=t->w - to.x; - } - - size=spr->h*spr->pitch; - temp_pixels=malloc(size); - - SDL_LockSurface(spr); - SDL_LockSurface(t); - if(stencil!=NULL) SDL_LockSurface(stencil); - memcpy(temp_pixels,spr->pixels,size); - - // NO OVERWRITE - if(mode==4){ - - for(j=0;j<from.h;j++) { - for(i=0;i<from.w;i++) { - /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ - //-DEBUG-printf("out of bound1 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); - return 56; - //continue; - }*/ - ccc_temp=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - //-DEBUG-printf("ccc_temp1 = %p == %p t->format->colorkey\n",ccc_temp,t->format->colorkey); - if (ccc_temp!=ccc_t) { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp;//spr->format->colorkey; - } - } - } - } - // VIS ON TERRAIN - if(mode==8){ - for(j=0;j<from.h;j++) { - for(i=0;i<from.w;i++) { - /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ - //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); - return 57; - //continue; - }*/ - ccc_temp=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - //-DEBUG-printf("ccc_temp1 = %p == %p ccc_t\n",ccc_temp,ccc_t); - if (ccc_temp==ccc_t) { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; - - } - } - } - } - // erease pixel - if(mode==17){ - for(j=0;j<from.h;j++) { - for(i=0;i<from.w;i++) { - /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ - //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); - return 57; - //continue; - }*/ - ccc_temp=((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i];//((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - ccc_temp2=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - ccc_temp3=((Uint32 *)stencil->pixels)[(to.y+j)*stencil->w+(to.x+i)]; - //-DEBUG-printf("ccc_temp1 = %p == %p ccc_t\n",ccc_temp,ccc_t); - if ((ccc_temp!=ccc_spr)&&((ccc_tBrick==ccc_temp3)||((ccc_temp3 & 0xff)==0xcb))) { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; - } else { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp2; - } - } - } - } - // erease pixel - if(mode==18){ - for(j=0;j<from.h;j++) { - for(i=0;i<from.w;i++) { - /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ - //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); - return 57; - //continue; - }*/ - ccc_temp=((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i];//((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - ccc_temp2=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - //-DEBUG- - // printf("ccc_temp = %p != %p ccc_spr && ccc_tBrick %p == %p ccc_temp2\n",ccc_temp,ccc_spr,ccc_tBrick,ccc_temp2); - if ((ccc_temp!=ccc_spr)&&((ccc_tBrick==ccc_temp2)||((ccc_temp2 & 0xff)==0xcb))) { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; - } else { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp2; - } - } - } - } - // objet trap - if(mode==19){ - for(j=0;j<from.h;j++) { - for(i=0;i<from.w;i++) { - /* if((to.y+j)*t->w+(to.x+i)>=(t->w*t->h)){ - //-DEBUG-printf("out of bound2 x=%d + i=%d, y=%d + j=%d * t->w %d == %d >= %d (t->h %d, from.h %d) \n",to.x,i,to.y,j,t->w,(to.y+j)*t->w+(to.x+i),(t->w*t->h),t->h,from.h); - return 57; - //continue; - }*/ - ccc_temp=((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i];//((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - ccc_temp2=((Uint32 *)t->pixels)[(to.y+j)*t->w+(to.x+i)]; - //-DEBUG-printf("ccc_temp1 = %p == %p ccc_t\n",ccc_temp,ccc_t); - if (ccc_temp!=ccc_spr){ - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_t;//spr->format->colorkey; - } else { - ((Uint32 *)spr->pixels)[(from.y+j)*spr->w+from.x+i]=ccc_temp2; - } - } - } - } - - - if(stencil!=NULL) SDL_UnlockSurface(stencil); - SDL_UnlockSurface(t); - SDL_UnlockSurface(spr); - test_blit(spr,&from, t,&to,0); - - SDL_LockSurface(spr); - memcpy(spr->pixels,temp_pixels,size); - SDL_UnlockSurface(spr); - - free(temp_pixels); - - return 0; - - } - int paint_objet (struct gameInit *gInit, int cptFps){ SDL_Rect offset,objetAnim,rStencil; SDL_Surface *sf; |