/* 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; iv1].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; ix, 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); }