/* ============= Q3_LoadBSPFile ============= */ void Q3_LoadBSPFile(struct quakefile_s *qf) { dheader_t *header; // load the file header //LoadFile(filename, (void **)&header, offset, length); // LoadQuakeFile(qf, (void **)&header); // swap the header Q3_SwapBlock( (int *)header, sizeof(*header) ); if ( header->ident != BSP_IDENT ) { Error( "%s is not a 2015 file", qf->filename ); } if ( header->version != BSP_VERSION ) { Error( "%s is version %i, not %i", qf->filename, header->version, BSP_VERSION ); } q3_numShaders = Q3_CopyLump( header, LUMP_SHADERS, (void *) &dshaders, sizeof(dshader_t) ); q3_nummodels = Q3_CopyLump( header, LUMP_MODELS, (void *) &dmodels, sizeof(dmodel_t) ); q3_numplanes = Q3_CopyLump( header, LUMP_PLANES, (void *) &dplanes, sizeof(dplane_t) ); q3_numleafs = Q3_CopyLump( header, LUMP_LEAFS, (void *) &dleafs, sizeof(dleaf_t) ); q3_numnodes = Q3_CopyLump( header, LUMP_NODES, (void *) &dnodes, sizeof(dnode_t) ); q3_numleafsurfaces = Q3_CopyLump( header, LUMP_LEAFSURFACES, (void *) &dleafsurfaces, sizeof(dleafsurfaces[0]) ); q3_numleafbrushes = Q3_CopyLump( header, LUMP_LEAFBRUSHES, (void *) &dleafbrushes, sizeof(dleafbrushes[0]) ); q3_numbrushes = Q3_CopyLump( header, LUMP_BRUSHES, (void *) &dbrushes, sizeof(dbrush_t) ); q3_numbrushsides = Q3_CopyLump( header, LUMP_BRUSHSIDES, (void *) &dbrushsides, sizeof(dbrushside_t) ); q3_numDrawVerts = Q3_CopyLump( header, LUMP_DRAWVERTS, (void *) &drawVerts, sizeof(drawVert_t) ); q3_numDrawSurfaces = Q3_CopyLump( header, LUMP_SURFACES, (void *) &drawSurfaces, sizeof(dsurface_t) ); // q3_numFogs = Q3_CopyLump( header, LUMP_FOGS, (void *) &dfogs, sizeof(dfog_t) ); q3_numDrawIndexes = Q3_CopyLump( header, LUMP_DRAWINDEXES, (void *) &drawIndexes, sizeof(drawIndexes[0]) ); q3_numVisBytes = Q3_CopyLump( header, LUMP_VISIBILITY, (void *) &q3_visBytes, 1 ); q3_numLightBytes = Q3_CopyLump( header, LUMP_LIGHTMAPS, (void *) &q3_lightBytes, 1 ); q3_entdatasize = Q3_CopyLump( header, LUMP_ENTITIES, (void *) &dentdata, 1); // q3_numGridPoints = Q3_CopyLump( header, LUMP_LIGHTGRID, (void *) &q3_gridData, 8 ); CountTriangles(); FreeMemory( header ); // everything has been copied out // swap everything Q3_SwapBSPFile(); Q3_FindVisibleBrushSides(); //Q3_PrintBSPFileSizes(); }
bspFile_t *BSP_Load( const char *name ) { union { int *i; void *v; } buf; int i; int length; bspFile_t *bspFile = NULL; int freeSlot = -1; #ifndef BSPC if ( !name || !name[0] ) { Com_Error( ERR_DROP, "BSP_Load: NULL name" ); } #endif // check if already loaded for ( i = 0; i < MAX_BSP_FILES; i++ ) { if ( !bsp_loadedFiles[i] ) { if ( freeSlot == -1 ) { freeSlot = i; } continue; } if ( !Q_stricmp( bsp_loadedFiles[i]->name, name ) ) { bsp_loadedFiles[i]->references++; return bsp_loadedFiles[i]; } } if ( freeSlot == -1 ) { Com_Error( ERR_DROP, "No free slot to load BSP '%s'", name ); } // // load the file // #ifndef BSPC length = FS_ReadFile( name, &buf.v ); #else length = LoadQuakeFile((quakefile_t *) name, &buf.v); #endif if ( !buf.i ) { return NULL; } // // check formats // for ( i = 0; i < numBspFormats; i++ ) { bspFile = bspFormats[i]->loadFunction( bspFormats[i], name, buf.v, length ); if ( bspFile ) { break; } } if ( i == numBspFormats ) { int ident = LittleLong( buf.i[0] ); int version = LittleLong( buf.i[1] ); Com_Error( ERR_DROP, "Unsupported BSP %s: ident %c%c%c%c, version %d", name, ident & 0xff, ( ident >> 8 ) & 0xff, ( ident >> 16 ) & 0xff, ( ident >> 24 ) & 0xff, version ); }