home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <iostream.h>
- #include <stdlib.h>
- #include <filedial.h>
-
- #include "quake.h"
- #include "array.h"
-
- ARRAY<plane_t> planes;
- ARRAY<dsurface_t> surfaces;
-
- ARRAY<vertex_t> vertices;
- ARRAY<edge_t> edges;
-
- long numplanes,numsurfaces,numedges,numvertices;
-
-
- const char Pack[5] = "PACK";
- #define DirEntrySize 32
-
- // *** Error Functions ***
-
- void InterError(int error)
- {
- cout << "Internal error. Please report error number " << error
- << "\nto Jens Hykkelbjerg (Email: jensh@cybernet.dk)";
- }
-
- void TooShort(char *filename)
- {
- cout << "Error: the file is too short\nIn level data file: " << filename;
- }
-
- // *** Utility functions ***
-
- BOOL CompStr(char *s1, char *s2, int length)
- {
- for(int i=0;i<length;i++) { if (s1[i] != s2[i]) return FALSE; }
-
- return TRUE;
- }
-
-
- void PrintStr(char *s, int length)
- {
- for(int i=0;i<length;i++) {
- if (s[i]) cout << s[i];
- else return;
- }
- }
-
-
- void LoadQuake(char *filename)
- {
- long i;
-
- FILE *qwad=fopen(filename,"rb");
- if (qwad == NULL) {
- cout << "error: Can't open file: " << filename;;
- }
- dheader_t Header;
-
- fread(&Header,sizeof(Header), 1, qwad);
-
-
- numplanes = Header.planes.size / sizeof(plane_t);
-
- // cout << "Planes position: " << Header.planes.offset << "\n";
- // cout << "Planes size: " << Header.planes.size << "\n";
- fseek(qwad, Header.planes.offset, SEEK_SET);
- for(i=0;i<numplanes;i++) fread(&planes[i],sizeof(plane_t),1,qwad);
-
- // cout << "Planes loaded\n\n";
-
- numsurfaces = Header.surfaces.size / sizeof(dsurface_t);
-
- // cout << "Surfaces position: " << Header.surfaces.offset << "\n";
- // cout << "Surfaces size: " << Header.surfaces.size << "\n\n";
-
- fseek(qwad, Header.surfaces.offset, SEEK_SET);
- for(i=0;i<numsurfaces;i++) fread(&surfaces[i],sizeof(dsurface_t),1,qwad);
-
- // cout << "surfaces loaded\n\n";
-
- numedges = Header.edges.size / sizeof(edge_t);
-
- // cout << "Edges position: " << Header.edges.offset << "\n";
- // cout << "Edges size: " << Header.edges.size << "\n\n";
-
- fseek(qwad, Header.edges.offset, SEEK_SET);
- for(i=0;i<numedges;i++) fread(&edges[i],sizeof(edge_t),1,qwad);
-
- // cout << edges[numedges-1].startvertex;
- // cout << "Edges loaded\n\n";
-
- numvertices = Header.vertices.size / sizeof(vertex_t);
-
- // cout << "vertices position: " << Header.vertices.offset << "\n";
- // cout << "vertices size: " << Header.vertices.size << "\n\n";
-
- fseek(qwad, Header.vertices.offset, SEEK_SET);
- for(i=0;i<numvertices;i++) fread(&vertices[i],sizeof(vertex_t),1,qwad);
-
- // cout << "vertices loaded\n\n";
- }
-