home *** CD-ROM | disk | FTP | other *** search
/ 4-Ever Doomed / 4-everdoomedcypresssoftware1994.iso / utils / d1 / idbspwat / funcs.c < prev    next >
Text File  |  1994-06-04  |  3KB  |  116 lines

  1. /*
  2.                 FUNCS.C - functions for reading the WAD file and writing the DWD file
  3. */
  4. #include "wad_dwd.h"
  5.  
  6. void *ReadWAD(FILE *f, long num, size_t size)
  7. {
  8.     int numread;
  9.     void *p;
  10.  
  11.     p = (void *)SafeCalloc(num, size);
  12.     if ((numread=fread(p, size, num, f)) != num)
  13.         {
  14.         free(p);
  15.         Error("ReadWAD: read only %d of intended %d items\n",numread, num);
  16.         }
  17.  
  18.     return p;
  19. }
  20.  
  21. void *ReadStorage(FILE *f, lumpinfo_t *dir, long *num, size_t size)
  22. {
  23.     fseek(f, dir->filepos, SEEK_SET);
  24.     *num = dir->size / size;
  25.  
  26.     return ReadWAD(f, *num, size);
  27. }
  28.  
  29. void WriteSideAndSector(FILE *f, mapsidedef_t *s, mapsector_t *sec)
  30. {
  31.     char topt[9], bott[9], midt[9], fpic[9], cpic[9];
  32.  
  33.     strncpy(topt, s->toptexture, 8);
  34.     topt[8] = '\0';
  35.     strncpy(bott, s->bottomtexture, 8);
  36.     bott[8] = '\0';
  37.     strncpy(midt, s->midtexture, 8);
  38.     midt[8] = '\0';
  39.     strncpy(fpic, sec->floorpic, 8);
  40.     fpic[8] = '\0';
  41.     strncpy(cpic, sec->ceilingpic, 8);
  42.     cpic[8] = '\0';
  43. /*
  44.     fprintf(f, "    %d (%d : %s / %s / %s )\n",
  45.                     s->textureoffset, s->rowoffset, topt, bott, midt);
  46. */
  47.     fprintf(f, "    %d (%d : %s / %s / %s )\n",
  48.                     s->rowoffset, s->textureoffset, topt, bott, midt);
  49.  
  50.     fprintf(f, "    %d : %s %d : %s %d %d %d\n",
  51.                     sec->floorheight, fpic, sec->ceilingheight,
  52.                     cpic, sec->lightlevel, sec->special, sec->tag);
  53. }
  54.  
  55. void WriteLines(FILE *f, long num, maplinedef_t *lines, mapvertex_t *vertexes,
  56.                                 mapsidedef_t *sides, mapsector_t *sectors)
  57. {
  58.     int i;
  59.     mapsidedef_t *s;
  60.     maplinedef_t *l;
  61.  
  62.     l = lines;
  63.     fprintf(f,"lines:%d\n",num);
  64.  
  65.     for (i=0; i<num; i++, l++)
  66.         {
  67.         fprintf(f, "(%d,%d) to (%d,%d) : %d : %d : %d\n",
  68.                         vertexes[l->v1].x, vertexes[l->v1].y,
  69.                         vertexes[l->v2].x, vertexes[l->v2].y,
  70.                         l->flags, l->special, l->tag);
  71.         s = &sides[l->sidenum[0]];
  72.         WriteSideAndSector(f, s, §ors[s->sector]);
  73.         if (l->flags & ML_TWOSIDED)
  74.             {
  75.             s = &sides[l->sidenum[1]];
  76.             WriteSideAndSector(f, s, §ors[s->sector]);
  77.             }
  78.         }
  79. }
  80.  
  81.  
  82. void WriteThings(FILE *f, long num, mapthing_t *t)
  83. {
  84.     int i;
  85.  
  86.     fprintf(f,"\nthings:%d\n",num);
  87.     for (i=0; i<num; i++, t++)
  88.         fprintf(f, "(%i,%i, %d) :%d, %d\n", t->x, t->y, t->angle, t->type, t->options);
  89. }
  90.  
  91. void WriteHeader(FILE *f)
  92. {
  93.     fprintf(f, "WorldServer version 4\n");
  94. }
  95.  
  96. void ExtractResource(FILE *f, lumpinfo_t *l)
  97. {
  98.     FILE *d;
  99.     char fname[12];
  100.     void *p;
  101.     long num;
  102.  
  103.     memset(fname, 0, sizeof(fname));
  104.     strncpy(fname, l->name, 8);
  105.     strcat(fname, ".lmp");
  106.  
  107.     if ((d=fopen(fname,"wb")) == NULL)
  108.         Error("Could not extract %s", fname);
  109.  
  110.     p = (void *)ReadStorage(f, l, &num, l->size);
  111.  
  112.     fwrite(p, l->size, 1, d);
  113.     fclose(d);
  114.     free(p);
  115. }
  116.