MediaPack-aware mapformat (MAPVERSION 7)

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@4657 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
flowtron
2009-10-12 19:33:59 +00:00
parent d0e041bfa7
commit 5196e222ce
4 changed files with 185 additions and 178 deletions
+7 -2
View File
@@ -350,15 +350,20 @@ mapstats *loadmapstats(const char *filename, bool getlayout)
gzFile f = opengzfile(filename, "rb9");
if(!f) return NULL;
memset(&s.hdr, 0, sizeof(header));
if(gzread(f, &s.hdr, sizeof(header)-sizeof(int)*16)!=sizeof(header)-sizeof(int)*16 || (strncmp(s.hdr.head, "CUBE", 4) && strncmp(s.hdr.head, "ACMP",4))) { gzclose(f); return NULL; }
if(gzread(f, &s.hdr, sizeof(header)-sizeof(int)*16-sizeof(char)*128)!=sizeof(header)-sizeof(int)*16-sizeof(char)*128 || (strncmp(s.hdr.head, "CUBE", 4) && strncmp(s.hdr.head, "ACMP",4))) { gzclose(f); return NULL; }
endianswap(&s.hdr.version, sizeof(int), 4);
if(s.hdr.version>MAPVERSION || s.hdr.numents > MAXENTITIES || (s.hdr.version>=4 && gzread(f, &s.hdr.waterlevel, sizeof(int)*16)!=sizeof(int)*16)) { gzclose(f); return NULL; }
if(s.hdr.version>=7 && gzread(f, &s.hdr.mediareq, sizeof(char)*128)!=sizeof(char)*128) { gzclose(f); return NULL; }
if(s.hdr.version>=4)
{
endianswap(&s.hdr.waterlevel, sizeof(int), 1);
endianswap(&s.hdr.maprevision, sizeof(int), 1);
}
else s.hdr.waterlevel = -100000;
if(s.hdr.version<7)
{
s_strncpy(s.hdr.mediareq, "", 128);//s.hdr.mediareq[0] = '\0';
}
entity e;
enttypes = new uchar[s.hdr.numents];
entposs = new short[s.hdr.numents * 3];
@@ -703,7 +708,7 @@ bool glmatrixf::invert(const glmatrixf &m, float mindet)
{
float a1 = m.v[0], b1 = m.v[4], c1 = m.v[8], d1 = m.v[12];
adjoint(m);
float det = a1*v[0] + b1*v[1] + c1*v[2] + d1*v[3]; // float det = m.determinant();
float det = a1*v[0] + b1*v[1] + c1*v[2] + d1*v[3]; // float det = m.determinant();
if(fabs(det) < mindet) return false;
float invdet = 1/det;
loopi(16) v[i] *= invdet;