radastan escribió:Repito, sólo nos hace faalta que el .h sea la matriz del mapa sin más añadidos. Sólo eso. Tanto para Mappy como para Tiled.
Cuando pueda le echo un vistazo al genérico de FASE.
He recortado el TmxCnv, espero que esto te valga:
Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char* argv[]){
unsigned char mem[0x10000];
char tmpstr[1000];
char *fou, *token;
FILE *fi, *fo;
int size= 0, scrw, scrh, mapw, maph, tmpi, elem, sum, tog= 0, i, j, k, l;
if( argc==1 )
printf("\nTmxCnvRadas v0.99, TMX to H generator by Antonio Villena, 1 May 2014\n\n"
" TmxCnvRadas <input_tmx> <output_map_h>\n\n"
" <input_tmx> Origin .TMX file\n"
" <output_map_h> Generated .H map output file\n\n"
"Example: TmxCnvRadas map\\mapa.tmx dev\\mapa.h\n"),
exit(0);
if( argc!=3 )
printf("\nInvalid number of parameters\n"),
exit(-1);
fi= fopen(argv[1], "r");
if( !fi )
printf("\nInput file not found: %s\n", argv[1]),
exit(-1);
fo= fopen(argv[2], "wb+");
if( !fo )
printf("\nCannot create output file: %s\n", argv[2]),
exit(-1);
while ( !feof(fi) && !strstr(tmpstr, "data e") ){
fgets(tmpstr, 1000, fi);
if( fou= (char *) strstr(tmpstr, " width") )
scrw= atoi(fou+8);
if( fou= (char *) strstr(tmpstr, " height") )
scrh= atoi(fou+9);
}
fgets(tmpstr, 1000, fi);
token= (char *) strtok(tmpstr, ",");
while ( token != NULL ){
if( tmpi= atoi(token) )
mem[size++]= tmpi-1;
token= (char *) strtok(NULL, ",");
}
mapw= scrw-size+1;
scrw= size/mapw;
fgets(tmpstr, 1000, fi);
while ( !strstr(tmpstr, "/layer") ){
token= (char *) strtok(tmpstr, ",");
while ( token != NULL ){
if( tmpi= atoi(token) )
mem[size++]= tmpi-1;
token= (char *) strtok(NULL, ",");
}
fgets(tmpstr, 1000, fi);
}
maph= scrh-size/mapw/scrw+1;
scrh= (scrh-maph+1)/maph;
tmpi= 0;
for ( i= 0; i<size; i++ )
if( mem[i]>tmpi )
tmpi= mem[i];
fprintf(fo, "unsigned char mapa [] = {");
if( tmpi>15 )
for ( i= 0; i<maph; i++ ){
fprintf(fo, "\n");
for ( j= 0; j<mapw; j++ ){
fprintf(fo, " ");
for ( k= 0; k<scrh; k++ )
for ( l= 0; l<scrw; l++ ){
elem= mem[i*mapw*scrh*scrw+j*scrw+k*mapw*scrw+l];
fprintf(fo, "%d, ", elem);
}
fprintf(fo, "\n");
}
}
else
for ( i= 0; i<maph; i++ ){
fprintf(fo, "\n");
for ( j= 0; j<mapw; j++ ){
fprintf(fo, " ");
for ( k= 0; k<scrh; k++ )
for ( l= 0; l<scrw; l++ ){
elem= mem[i*mapw*scrh*scrw+j*scrw+k*mapw*scrw+l];
if( tog^= 1 )
sum= elem;
else
fprintf(fo, "%d, ", sum<<4 | elem);
}
fprintf(fo, "\n");
}
}
fprintf(fo, "};\n");
fclose(fo);
fclose(fi);
printf("\nFile generated successfully\n");
}
Una vez tengamos este acabado hago lo mismo con el de Mappy.