pie2wam: Add verbose mode. Fix parsing error in some multilevel files.

git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@6586 4a71c877-e1ca-e34f-864e-861f7616d084
master
Per Inge Mathisen 2009-02-04 23:12:05 +00:00
parent 0bd4f60a78
commit 86d734598f
1 changed files with 32 additions and 20 deletions

View File

@ -50,6 +50,7 @@ static bool reverseWinding = false;
static bool assumeAnimation = false;
static char *input = "";
static char output[PATH_MAX];
static bool verbose = false;
typedef struct {
int index[MAX_POLYGON_SIZE];
@ -78,6 +79,10 @@ static void parse_args(int argc, char **argv)
{
invertUV = true;
}
if (argv[i][1] == 'v')
{
verbose = true;
}
if (argv[i][1] == 'r')
{
reverseWinding = true;
@ -94,6 +99,7 @@ static void parse_args(int argc, char **argv)
fprintf(stderr, " -r Reverse winding of all polygons.\n");
fprintf(stderr, " -i Invert the vertical texture coordinates (for 3DS MAX etc.).\n");
fprintf(stderr, " -a Do not make a guess about team colour usage. Assume animation.\n");
fprintf(stderr, " -v Verbose mode.\n");
exit(1);
}
input = argv[i++];
@ -138,6 +144,7 @@ static void dump_to_wzm(FILE *ctl, FILE *fp)
exit(1);
}
fprintf(ctl, "MESHES %d\n", levels);
if (verbose) printf("PIE file %s with %d levels is being parsed\n", input, levels);
for (level = 0; level < levels; level++)
{
@ -145,12 +152,18 @@ static void dump_to_wzm(FILE *ctl, FILE *fp)
WZ_FACE *faceList;
WZ_POSITION *posList;
num = fscanf(fp, "LEVEL %d\n", &x);
if (num != 1 || level + 1 != x)
num = fscanf(fp, "\nLEVEL %d\n", &x);
if (num != 1)
{
fprintf(stderr, "Bad LEVEL directive in %s, was %d should be %d.\n", input, x, level + 1);
fprintf(stderr, "Bad LEVEL directive in %s.\n", input);
exit(1);
}
if (level + 1 != x)
{
fprintf(stderr, "LEVEL directive in %s was %d should be %d.\n", input, x, level + 1);
exit(1);
}
if (verbose) printf("Parsing level %d\n", x);
fprintf(ctl, "MESH %d\n", level);
num = fscanf(fp, "POINTS %d\n", &points);
@ -252,7 +265,7 @@ static void dump_to_wzm(FILE *ctl, FILE *fp)
}
if (faceList[j].frames <= 1)
{
fprintf(stderr, "Level %d, polygon %d has a single animation frame. That makes no sense.\n", level, j);
fprintf(stderr, "File %slevel %d, polygon %d has a single animation frame. That makes no sense.\n", input, level, j);
}
if (textureArrays < faceList[j].frames)
{
@ -387,25 +400,24 @@ static void dump_to_wzm(FILE *ctl, FILE *fp)
}
num = fscanf(fp, "\nCONNECTORS %d", &x);
if (num == 1 && x > 0)
if (num != 1)
{
fprintf(ctl, "\nCONNECTORS %d", x);
for (j = 0; j < x; ++j)
{
int a, b, c;
num = fscanf(fp, "\n%d %d %d", &a, &b, &c);
if (num != 3)
{
fprintf(stderr, "Bad CONNECTORS directive entry level %d, number %d\n", level, j);
exit(1);
}
fprintf(ctl, "\n\t%d %d %d 0", a, b, c);
}
fprintf(stderr, "Bad CONNNECTORS directive in %s, level %d\n", input, level);
exit(EXIT_FAILURE);
}
else
if (verbose) printf("Read %d connectors\n", x);
fprintf(ctl, "\nCONNECTORS %d", x);
for (j = 0; j < x; ++j)
{
fprintf(ctl, "\nCONNECTORS 0\n");
int a, b, c;
num = fscanf(fp, "\n%d %d %d", &a, &b, &c);
if (num != 3)
{
fprintf(stderr, "Bad CONNECTORS directive entry level %d, number %d\n", level, j);
exit(1);
}
fprintf(ctl, "\n\t%d %d %d 0", a, b, c);
}
free(faceList);