home *** CD-ROM | disk | FTP | other *** search
/ Doom 2 Explosion / Doom2Explosion.bin / doom2exp / programs / ibsp101s / funcs.c < prev    next >
C/C++ Source or Header  |  1994-07-10  |  3KB  |  120 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],
  32.                         bott[9],
  33.                         midt[9],
  34.                         fpic[9],
  35.                         cpic[9];
  36.  
  37.     strncpy(topt, s -> toptexture, 8);
  38.     topt[8] = '\0';
  39.     strncpy(bott, s -> bottomtexture, 8);
  40.     bott[8] = '\0';
  41.     strncpy(midt, s -> midtexture, 8);
  42.     midt[8] = '\0';
  43.     strncpy(fpic, sec -> floorpic, 8);
  44.     fpic[8] = '\0';
  45.     strncpy(cpic, sec -> ceilingpic, 8);
  46.     cpic[8] = '\0';
  47. /*
  48.    fprintf(f, "    %d (%d : %s / %s / %s )\n",
  49.    s->textureoffset, s->rowoffset, topt, bott, midt);
  50.  */
  51.     fprintf(f, "    %d (%d : %s / %s / %s )\n",
  52.         s -> rowoffset, s -> textureoffset, topt, bott, midt);
  53.  
  54.     fprintf(f, "    %d : %s %d : %s %d %d %d\n",
  55.         sec -> floorheight, fpic, sec -> ceilingheight,
  56.         cpic, sec -> lightlevel, sec -> special, sec -> tag);
  57. }
  58.  
  59. void                WriteLines(FILE * f, long num, maplinedef_t * lines, mapvertex_t * vertexes,
  60.     mapsidedef_t * sides, mapsector_t * sectors)
  61. {
  62.     int                 i;
  63.     mapsidedef_t       *s;
  64.     maplinedef_t       *l;
  65.  
  66.     l = lines;
  67.     fprintf(f, "lines:%d\n", num);
  68.  
  69.     for (i = 0; i < num; i++, l++)
  70.         {
  71.         fprintf(f, "(%d,%d) to (%d,%d) : %d : %d : %d\n",
  72.             vertexes[l -> v1].x, vertexes[l -> v1].y,
  73.             vertexes[l -> v2].x, vertexes[l -> v2].y,
  74.             l -> flags, l -> special, l -> tag);
  75.         s = &sides[l -> sidenum[0]];
  76.         WriteSideAndSector(f, s, §ors[s -> sector]);
  77.         if (l -> flags & ML_TWOSIDED)
  78.             {
  79.             s = &sides[l -> sidenum[1]];
  80.             WriteSideAndSector(f, s, §ors[s -> sector]);
  81.             }
  82.         }
  83. }
  84.  
  85.  
  86. void                WriteThings(FILE * f, long num, mapthing_t * t)
  87. {
  88.     int                 i;
  89.  
  90.     fprintf(f, "\nthings:%d\n", num);
  91.     for (i = 0; i < num; i++, t++)
  92.         fprintf(f, "(%i,%i, %d) :%d, %d\n", t -> x, t -> y, t -> angle, t -> type, t -> options);
  93. }
  94.  
  95. void                WriteHeader(FILE * f)
  96. {
  97.     fprintf(f, "WorldServer version 4\n");
  98. }
  99.  
  100. void                ExtractResource(FILE * f, lumpinfo_t * l)
  101. {
  102.     FILE               *d;
  103.     char                fname[13];
  104.     void               *p;
  105.     long                num;
  106.  
  107.     memset(fname, 0, sizeof(fname));
  108.     strncpy(fname, l -> name, 8);
  109.     strcat(fname, ".lmp");
  110.  
  111.     if ((d = fopen(fname, "wb")) == NULL)
  112.         Error("Could not extract %s", fname);
  113.  
  114.     p = (void *)ReadStorage(f, l, &num, l -> size);
  115.  
  116.     fwrite(p, l -> size, 1, d);
  117.     fclose(d);
  118.     free(p);
  119. }
  120.