home *** CD-ROM | disk | FTP | other *** search
/ Quake++ for Quake / Quake++.iso / quake / qkview / qbsp.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-09  |  2.5 KB  |  106 lines

  1. #include <stdio.h>
  2. #include <iostream.h>
  3. #include <stdlib.h>
  4. #include <filedial.h>
  5.  
  6. #include "quake.h"
  7. #include "array.h"
  8.  
  9. ARRAY<plane_t> planes;
  10. ARRAY<dsurface_t> surfaces;
  11.  
  12. ARRAY<vertex_t> vertices;
  13. ARRAY<edge_t> edges;
  14.  
  15. long numplanes,numsurfaces,numedges,numvertices;
  16.  
  17.  
  18. const char Pack[5] = "PACK";
  19. #define DirEntrySize 32
  20.  
  21. // *** Error Functions ***
  22.  
  23. void InterError(int error)
  24. {
  25.     cout << "Internal error. Please report error number " << error
  26.           << "\nto Jens Hykkelbjerg (Email: jensh@cybernet.dk)";
  27. }
  28.  
  29. void TooShort(char *filename)
  30. {
  31.     cout << "Error: the file is too short\nIn level data file: " << filename;
  32. }
  33.  
  34. // *** Utility functions ***
  35.  
  36. BOOL CompStr(char *s1, char *s2, int length)
  37. {
  38.     for(int i=0;i<length;i++) { if (s1[i] != s2[i]) return FALSE; }
  39.  
  40.     return TRUE;
  41. }
  42.  
  43.  
  44. void PrintStr(char *s, int length)
  45. {
  46.     for(int i=0;i<length;i++) {
  47.         if (s[i]) cout << s[i];
  48.         else return;
  49.     }
  50. }
  51.  
  52.  
  53. void LoadQuake(char *filename)
  54. {
  55.     long i;
  56.  
  57.     FILE *qwad=fopen(filename,"rb");
  58.     if (qwad == NULL) {
  59.         cout << "error: Can't open file: " << filename;;
  60.     }
  61.     dheader_t Header;
  62.  
  63.     fread(&Header,sizeof(Header), 1, qwad);
  64.  
  65.  
  66.     numplanes = Header.planes.size / sizeof(plane_t);
  67.  
  68. //    cout << "Planes position: " << Header.planes.offset << "\n";
  69. //    cout << "Planes size:     " << Header.planes.size << "\n";
  70.     fseek(qwad, Header.planes.offset, SEEK_SET);
  71.     for(i=0;i<numplanes;i++) fread(&planes[i],sizeof(plane_t),1,qwad);
  72.  
  73. //    cout << "Planes loaded\n\n";
  74.  
  75.     numsurfaces = Header.surfaces.size / sizeof(dsurface_t);
  76.  
  77. //    cout << "Surfaces position: " << Header.surfaces.offset << "\n";
  78. //    cout << "Surfaces size:     " << Header.surfaces.size << "\n\n";
  79.  
  80.     fseek(qwad, Header.surfaces.offset, SEEK_SET);
  81.     for(i=0;i<numsurfaces;i++) fread(&surfaces[i],sizeof(dsurface_t),1,qwad);
  82.  
  83. //    cout << "surfaces loaded\n\n";
  84.  
  85.     numedges = Header.edges.size / sizeof(edge_t);
  86.  
  87. //    cout << "Edges position: " << Header.edges.offset << "\n";
  88. //    cout << "Edges size:     " << Header.edges.size << "\n\n";
  89.  
  90.     fseek(qwad, Header.edges.offset, SEEK_SET);
  91.     for(i=0;i<numedges;i++) fread(&edges[i],sizeof(edge_t),1,qwad);
  92.  
  93. //    cout << edges[numedges-1].startvertex;
  94. //    cout << "Edges loaded\n\n";
  95.  
  96.     numvertices = Header.vertices.size / sizeof(vertex_t);
  97.  
  98. //    cout << "vertices position: " << Header.vertices.offset << "\n";
  99. //    cout << "vertices size:     " << Header.vertices.size << "\n\n";
  100.  
  101.     fseek(qwad, Header.vertices.offset, SEEK_SET);
  102.     for(i=0;i<numvertices;i++) fread(&vertices[i],sizeof(vertex_t),1,qwad);
  103.  
  104. //    cout << "vertices loaded\n\n";
  105. }
  106.