home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FMI Superhry 1
/
Superhry-I.bin
/
bonus
/
doom
/
programs
/
dmwbsp
/
source
/
funcs.c
< prev
next >
Wrap
Text File
|
1994-06-04
|
3KB
|
116 lines
/*
FUNCS.C - functions for reading the WAD file and writing the DWD file
*/
#include "wad_dwd.h"
void *ReadWAD(FILE *f, long num, size_t size)
{
int numread;
void *p;
p = (void *)SafeCalloc(num, size);
if ((numread=fread(p, size, num, f)) != num)
{
free(p);
Error("ReadWAD: read only %d of intended %d items\n",numread, num);
}
return p;
}
void *ReadStorage(FILE *f, lumpinfo_t *dir, long *num, size_t size)
{
fseek(f, dir->filepos, SEEK_SET);
*num = dir->size / size;
return ReadWAD(f, *num, size);
}
void WriteSideAndSector(FILE *f, mapsidedef_t *s, mapsector_t *sec)
{
char topt[9], bott[9], midt[9], fpic[9], cpic[9];
strncpy(topt, s->toptexture, 8);
topt[8] = '\0';
strncpy(bott, s->bottomtexture, 8);
bott[8] = '\0';
strncpy(midt, s->midtexture, 8);
midt[8] = '\0';
strncpy(fpic, sec->floorpic, 8);
fpic[8] = '\0';
strncpy(cpic, sec->ceilingpic, 8);
cpic[8] = '\0';
/*
fprintf(f, " %d (%d : %s / %s / %s )\n",
s->textureoffset, s->rowoffset, topt, bott, midt);
*/
fprintf(f, " %d (%d : %s / %s / %s )\n",
s->rowoffset, s->textureoffset, topt, bott, midt);
fprintf(f, " %d : %s %d : %s %d %d %d\n",
sec->floorheight, fpic, sec->ceilingheight,
cpic, sec->lightlevel, sec->special, sec->tag);
}
void WriteLines(FILE *f, long num, maplinedef_t *lines, mapvertex_t *vertexes,
mapsidedef_t *sides, mapsector_t *sectors)
{
int i;
mapsidedef_t *s;
maplinedef_t *l;
l = lines;
fprintf(f,"lines:%d\n",num);
for (i=0; i<num; i++, l++)
{
fprintf(f, "(%d,%d) to (%d,%d) : %d : %d : %d\n",
vertexes[l->v1].x, vertexes[l->v1].y,
vertexes[l->v2].x, vertexes[l->v2].y,
l->flags, l->special, l->tag);
s = &sides[l->sidenum[0]];
WriteSideAndSector(f, s, §ors[s->sector]);
if (l->flags & ML_TWOSIDED)
{
s = &sides[l->sidenum[1]];
WriteSideAndSector(f, s, §ors[s->sector]);
}
}
}
void WriteThings(FILE *f, long num, mapthing_t *t)
{
int i;
fprintf(f,"\nthings:%d\n",num);
for (i=0; i<num; i++, t++)
fprintf(f, "(%i,%i, %d) :%d, %d\n", t->x, t->y, t->angle, t->type, t->options);
}
void WriteHeader(FILE *f)
{
fprintf(f, "WorldServer version 4\n");
}
void ExtractResource(FILE *f, lumpinfo_t *l)
{
FILE *d;
char fname[12];
void *p;
long num;
memset(fname, 0, sizeof(fname));
strncpy(fname, l->name, 8);
strcat(fname, ".lmp");
if ((d=fopen(fname,"wb")) == NULL)
Error("Could not extract %s", fname);
p = (void *)ReadStorage(f, l, &num, l->size);
fwrite(p, l->size, 1, d);
fclose(d);
free(p);
}