Example #1
0
/*
   =============
   LoadBSPFileTexinfo

   Only loads the texinfo lump, so qdata can scan for textures
   =============
 */
void    LoadBSPFileTexinfo( char *filename ){
	int i;
	FILE        *f;
	int length, ofs;

	header = malloc( sizeof( dheader_t ) );

	f = fopen( filename, "rb" );
	fread( header, sizeof( dheader_t ), 1, f );

// swap the header
	for ( i = 0 ; i < sizeof( dheader_t ) / 4 ; i++ )
		( (int *)header )[i] = LittleLong( ( (int *)header )[i] );

	if ( header->ident != IDBSPHEADER ) {
		Error( "%s is not a IBSP file", filename );
	}
	if ( header->version != BSPVERSION ) {
		Error( "%s is version %i, not %i", filename, header->version, BSPVERSION );
	}


	length = header->lumps[LUMP_TEXINFO].filelen;
	ofs = header->lumps[LUMP_TEXINFO].fileofs;

	fseek( f, ofs, SEEK_SET );
	fread( texinfo, length, 1, f );
	fclose( f );

	numtexinfo = length / sizeof( texinfo_t );

	free( header );      // everything has been copied out

	SwapBSPFile( false );
}
Example #2
0
/*
=============
WriteBSPFile

Swaps the bsp file in place, so it should not be referenced again
=============
*/
void	WriteBSPFile (char *filename)
{		
	header = &outheader;
	memset (header, 0, sizeof(dheader_t));
	
	SwapBSPFile (true);

	header->version = LittleLong (BSPVERSION);
	
	wadfile = SafeOpenWrite (filename);
	SafeWrite (wadfile, header, sizeof(dheader_t));	// overwritten later

	AddLump (LUMP_PLANES, dplanes, numplanes*sizeof(dplane_t));
	AddLump (LUMP_LEAFS, dleafs, numleafs*sizeof(dleaf_t));
	AddLump (LUMP_VERTEXES, dvertexes, numvertexes*sizeof(dvertex_t));
	AddLump (LUMP_NODES, dnodes, numnodes*sizeof(dnode_t));
	AddLump (LUMP_TEXINFO, texinfo, numtexinfo*sizeof(texinfo_t));
	AddLump (LUMP_FACES, dfaces, numfaces*sizeof(dface_t));
	AddLump (LUMP_CLIPNODES, dclipnodes, numclipnodes*sizeof(dclipnode_t));
	AddLump (LUMP_MARKSURFACES, dmarksurfaces, nummarksurfaces*sizeof(dmarksurfaces[0]));
	AddLump (LUMP_SURFEDGES, dsurfedges, numsurfedges*sizeof(dsurfedges[0]));
	AddLump (LUMP_EDGES, dedges, numedges*sizeof(dedge_t));
	AddLump (LUMP_MODELS, dmodels, nummodels*sizeof(dmodel_t));

	AddLump (LUMP_LIGHTING, dlightdata, lightdatasize);
	AddLump (LUMP_VISIBILITY, dvisdata, visdatasize);
	AddLump (LUMP_ENTITIES, dentdata, entdatasize);
	AddLump (LUMP_TEXTURES, dtexdata, texdatasize);
	
	fseek (wadfile, 0, SEEK_SET);
	SafeWrite (wadfile, header, sizeof(dheader_t));
	fclose (wadfile);	
}
Example #3
0
/**
 * @sa WriteBSPFile
 */
dMapTile_t* LoadBSPFile (const char* filename)
{
    dBspHeader_t* header;

    /* Create this shortcut to mapTiles[0] */
    curTile = &mapTiles.mapTiles[0];
    /* Set the number of tiles to 1. */
    mapTiles.numTiles = 1;

    /* load the file header */
    int size = FS_LoadFile(filename, (byte**)&header);
    if (size == -1)
        Sys_Error("'%s' doesn't exist", filename);

    /* swap the header */
    BSP_SwapHeader(header, filename);

    if (header->ident != IDBSPHEADER)
        Sys_Error("%s is not a IBSP file", filename);
    if (header->version != BSPVERSION)
        Sys_Error("%s is version %i, not %i", filename, header->version, BSPVERSION);

    curTile->nummodels = CopyLump(header, LUMP_MODELS, curTile->models, sizeof(dBspModel_t));
    curTile->numvertexes = CopyLump(header, LUMP_VERTEXES, curTile->vertexes, sizeof(dBspVertex_t));
    curTile->numplanes = CopyLump(header, LUMP_PLANES, curTile->planes, sizeof(dBspPlane_t));
    curTile->numleafs = CopyLump(header, LUMP_LEAFS, curTile->leafs, sizeof(dBspLeaf_t));
    curTile->numnormals = CopyLump(header, LUMP_NORMALS, curTile->normals, sizeof(dBspNormal_t));
    curTile->numnodes = CopyLump(header, LUMP_NODES, curTile->nodes, sizeof(dBspNode_t));
    curTile->numtexinfo = CopyLump(header, LUMP_TEXINFO, curTile->texinfo, sizeof(dBspTexinfo_t));
    curTile->numfaces = CopyLump(header, LUMP_FACES, curTile->faces, sizeof(dBspSurface_t));
    curTile->numleafbrushes = CopyLump(header, LUMP_LEAFBRUSHES, curTile->leafbrushes, sizeof(curTile->leafbrushes[0]));
    curTile->numsurfedges = CopyLump(header, LUMP_SURFEDGES, curTile->surfedges, sizeof(curTile->surfedges[0]));
    curTile->numedges = CopyLump(header, LUMP_EDGES, curTile->edges, sizeof(dBspEdge_t));
    curTile->numbrushes = CopyLump(header, LUMP_BRUSHES, curTile->dbrushes, sizeof(dBspBrush_t));
    curTile->numbrushsides = CopyLump(header, LUMP_BRUSHSIDES, curTile->brushsides, sizeof(dBspBrushSide_t));
    curTile->routedatasize = CopyLump(header, LUMP_ROUTING, curTile->routedata, 1);
    curTile->lightdatasize[LIGHTMAP_NIGHT] = CopyLump(header, LUMP_LIGHTING_NIGHT, curTile->lightdata[LIGHTMAP_NIGHT], 1);
    curTile->lightdatasize[LIGHTMAP_DAY] = CopyLump(header, LUMP_LIGHTING_DAY, curTile->lightdata[LIGHTMAP_DAY], 1);
    curTile->entdatasize = CopyLump(header, LUMP_ENTITIES, curTile->entdata, 1);

    /* Because the tracing functions use cBspBrush_t and not dBspBrush_t,
     * copy data from curTile->dbrushes into curTile->cbrushes */
    OBJZERO(curTile->brushes);
    for (int i = 0; i < curTile->numbrushes; i++) {
        dBspBrush_t* dbrush = &curTile->dbrushes[i];
        cBspBrush_t* brush = &curTile->brushes[i];
        brush->firstbrushside = dbrush->firstbrushside;
        brush->numsides = dbrush->numsides;
        brush->brushContentFlags = dbrush->brushContentFlags;
    }

    /* everything has been copied out */
    FS_FreeFile(header);

    /* swap everything */
    SwapBSPFile();

    return curTile;
}
Example #4
0
/*
=============
LoadBSPFile
=============
*/
void	LoadBSPFile (char *filename)
{
	int			i;
	
//
// load the file header
//
	LoadFile (filename, (void **)&header);

// swap the header
	for (i=0 ; i< sizeof(dheader_t)/4 ; i++)
		((int *)header)[i] = LittleLong ( ((int *)header)[i]);

	if (header->version != BSPVERSION)
		Error ("%s is version %i, not %i", filename, header->version, BSPVERSION);

	nummodels = CopyLump (LUMP_MODELS, dmodels, sizeof(dmodel_t));
	numvertexes = CopyLump (LUMP_VERTEXES, dvertexes, sizeof(dvertex_t));
	numplanes = CopyLump (LUMP_PLANES, dplanes, sizeof(dplane_t));
	numleafs = CopyLump (LUMP_LEAFS, dleafs, sizeof(dleaf_t));
	numnodes = CopyLump (LUMP_NODES, dnodes, sizeof(dnode_t));
	numtexinfo = CopyLump (LUMP_TEXINFO, texinfo, sizeof(texinfo_t));
	numclipnodes = CopyLump (LUMP_CLIPNODES, dclipnodes, sizeof(dclipnode_t));
	numfaces = CopyLump (LUMP_FACES, dfaces, sizeof(dface_t));
	nummarksurfaces = CopyLump (LUMP_MARKSURFACES, dmarksurfaces, sizeof(dmarksurfaces[0]));
	numsurfedges = CopyLump (LUMP_SURFEDGES, dsurfedges, sizeof(dsurfedges[0]));
	numedges = CopyLump (LUMP_EDGES, dedges, sizeof(dedge_t));

	texdatasize = CopyLump (LUMP_TEXTURES, dtexdata, 1);
	visdatasize = CopyLump (LUMP_VISIBILITY, dvisdata, 1);
	lightdatasize = CopyLump (LUMP_LIGHTING, dlightdata, 1);
	entdatasize = CopyLump (LUMP_ENTITIES, dentdata, 1);

	free (header);		// everything has been copied out
		
//
// swap everything
//	
	SwapBSPFile (false);

	dmodels_checksum = FastChecksum( dmodels, nummodels*sizeof(dmodels[0]) );
    dvertexes_checksum = FastChecksum( dvertexes, numvertexes*sizeof(dvertexes[0]) );
	dplanes_checksum = FastChecksum( dplanes, numplanes*sizeof(dplanes[0]) );
	dleafs_checksum = FastChecksum( dleafs, numleafs*sizeof(dleafs[0]) );
	dnodes_checksum = FastChecksum( dnodes, numnodes*sizeof(dnodes[0]) );
	texinfo_checksum = FastChecksum( texinfo, numtexinfo*sizeof(texinfo[0]) );
	dclipnodes_checksum = FastChecksum( dclipnodes, numclipnodes*sizeof(dclipnodes[0]) );
	dfaces_checksum = FastChecksum( dfaces, numfaces*sizeof(dfaces[0]) );
	dmarksurfaces_checksum = FastChecksum( dmarksurfaces, nummarksurfaces*sizeof(dmarksurfaces[0]) );
	dsurfedges_checksum = FastChecksum( dsurfedges, numsurfedges*sizeof(dsurfedges[0]) );
	dedges_checksum = FastChecksum( dedges, numedges*sizeof(dedges[0]) );
	dtexdata_checksum = FastChecksum( dtexdata, numedges*sizeof(dtexdata[0]) );
	dvisdata_checksum = FastChecksum( dvisdata, visdatasize*sizeof(dvisdata[0]) );
	dlightdata_checksum = FastChecksum( dlightdata, lightdatasize*sizeof(dlightdata[0]) );
	dentdata_checksum = FastChecksum( dentdata, entdatasize*sizeof(dentdata[0]) );

}
Example #5
0
/**
 * @brief Swaps the bsp file in place, so it should not be referenced again
 * @sa LoadBSPFile
 */
long WriteBSPFile (const char* filename)
{
    dBspHeader_t outheader;
    long size;

    OBJZERO(outheader);

    SwapBSPFile();

    outheader.ident = LittleLong(IDBSPHEADER);
    outheader.version = LittleLong(BSPVERSION);

    ScopedFile bspfile;
    FS_OpenFile(filename, &bspfile, FILE_WRITE);
    if (!bspfile)
        Sys_Error("Could not write bsp file");
    FS_Write(&outheader, sizeof(outheader), &bspfile);	/* overwritten later */

    AddLump(&bspfile, &outheader, LUMP_PLANES, curTile->planes, curTile->numplanes * sizeof(dBspPlane_t));
    AddLump(&bspfile, &outheader, LUMP_LEAFS, curTile->leafs, curTile->numleafs * sizeof(dBspLeaf_t));
    AddLump(&bspfile, &outheader, LUMP_VERTEXES, curTile->vertexes, curTile->numvertexes * sizeof(dBspVertex_t));
    AddLump(&bspfile, &outheader, LUMP_NORMALS, curTile->normals, curTile->numnormals * sizeof(dBspNormal_t));
    AddLump(&bspfile, &outheader, LUMP_NODES, curTile->nodes, curTile->numnodes * sizeof(dBspNode_t));
    AddLump(&bspfile, &outheader, LUMP_TEXINFO, curTile->texinfo, curTile->numtexinfo * sizeof(dBspTexinfo_t));
    AddLump(&bspfile, &outheader, LUMP_FACES, curTile->faces, curTile->numfaces * sizeof(dBspSurface_t));
    AddLump(&bspfile, &outheader, LUMP_BRUSHES, curTile->dbrushes, curTile->numbrushes * sizeof(dBspBrush_t));
    AddLump(&bspfile, &outheader, LUMP_BRUSHSIDES, curTile->brushsides, curTile->numbrushsides * sizeof(dBspBrushSide_t));
    AddLump(&bspfile, &outheader, LUMP_LEAFBRUSHES, curTile->leafbrushes, curTile->numleafbrushes * sizeof(curTile->leafbrushes[0]));
    AddLump(&bspfile, &outheader, LUMP_SURFEDGES, curTile->surfedges, curTile->numsurfedges * sizeof(curTile->surfedges[0]));
    AddLump(&bspfile, &outheader, LUMP_EDGES, curTile->edges, curTile->numedges * sizeof(dBspEdge_t));
    AddLump(&bspfile, &outheader, LUMP_MODELS, curTile->models, curTile->nummodels * sizeof(dBspModel_t));
    AddLump(&bspfile, &outheader, LUMP_LIGHTING_NIGHT, curTile->lightdata[0], curTile->lightdatasize[0]);
    AddLump(&bspfile, &outheader, LUMP_LIGHTING_DAY, curTile->lightdata[1], curTile->lightdatasize[1]);
    AddLump(&bspfile, &outheader, LUMP_ROUTING, curTile->routedata, curTile->routedatasize);
    AddLump(&bspfile, &outheader, LUMP_ENTITIES, curTile->entdata, curTile->entdatasize);
    size = ftell(bspfile.getFile());

    fseek(bspfile.getFile(), 0L, SEEK_SET);
    FS_Write(&outheader, sizeof(outheader), &bspfile);

    SwapBSPFile();

    return size;
}
Example #6
0
void LoadBSPFile(const char *filename)
{
	/* dummy check */
	if(game == NULL || game->load == NULL)
		Error("LoadBSPFile: unsupported BSP file format");

	/* load it, then byte swap the in-memory version */
	game->load(filename);
	SwapBSPFile();
}
Example #7
0
/*
=============
LoadBSPFile
=============
*/
void	LoadBSPFile( const char *filename ) {
	dheader_t	*header;

	// load the file header
	LoadFile (filename, (void **)&header);

	// swap the header
	SwapBlock( (int *)header, sizeof(*header) );

	if ( header->ident != BSP_IDENT ) {
		Error( "%s is not a IBSP file", filename );
	}
	if ( header->version != BSP_VERSION ) {
		Error( "%s is version %i, not %i", filename, header->version, BSP_VERSION );
	}

	numShaders = CopyLump( header, LUMP_SHADERS, dshaders, sizeof(dshader_t) );
	nummodels = CopyLump( header, LUMP_MODELS, dmodels, sizeof(dmodel_t) );
	numplanes = CopyLump( header, LUMP_PLANES, dplanes, sizeof(dplane_t) );
	numleafs = CopyLump( header, LUMP_LEAFS, dleafs, sizeof(dleaf_t) );
	numnodes = CopyLump( header, LUMP_NODES, dnodes, sizeof(dnode_t) );
	numleafsurfaces = CopyLump( header, LUMP_LEAFSURFACES, dleafsurfaces, sizeof(dleafsurfaces[0]) );
	numleafbrushes = CopyLump( header, LUMP_LEAFBRUSHES, dleafbrushes, sizeof(dleafbrushes[0]) );
	numbrushes = CopyLump( header, LUMP_BRUSHES, dbrushes, sizeof(dbrush_t) );
	numbrushsides = CopyLump( header, LUMP_BRUSHSIDES, dbrushsides, sizeof(dbrushside_t) );
	numDrawVerts = CopyLump( header, LUMP_DRAWVERTS, drawVerts, sizeof(drawVert_t) );
	numDrawSurfaces = CopyLump( header, LUMP_SURFACES, drawSurfaces, sizeof(dsurface_t) );
	//numFogs = CopyLump( header, LUMP_FOGS, dfogs, sizeof(dfog_t) );
	numDrawIndexes = CopyLump( header, LUMP_DRAWINDEXES, drawIndexes, sizeof(drawIndexes[0]) );

	numVisBytes = CopyLump( header, LUMP_VISIBILITY, visBytes, 1 );
	numLightBytes = CopyLump( header, LUMP_LIGHTMAPS, lightBytes, 1 );
	entdatasize = CopyLump( header, LUMP_ENTITIES, dentdata, 1);

//	numGridPoints = CopyLump( header, LUMP_LIGHTGRID, gridData, 8 );

	// su44: MoHAA lumps
	numStaticModels = CopyLump( header, LUMP_STATICMODELDEF, staticModels, sizeof(staticModels[0]));
	numLeafStaticModels = CopyLump( header, LUMP_STATICMODELINDEXES, dleafStaticModels, sizeof(dleafStaticModels[0]));
	numStaticModelVertColors = CopyLump( header, LUMP_STATICMODELDATA, staticModelVertColors, 3);
	numTerraPatches = CopyLump( header, LUMP_TERRAIN, terraPatches, sizeof(terraPatches[0]));
	numSideEquations = CopyLump( header, LUMP_SIDEEQUATIONS, sideEquations, sizeof(sideEquations[0]));
	numSphereLights = CopyLump( header, LUMP_SPHERELIGHTS, sphereLights, sizeof(sphereLights[0]));
	numLightDefs = CopyLump( header, LUMP_LIGHTDEFS, lightDefs, sizeof(lightDefs[0]));
		

	free( header );		// everything has been copied out
		
	// swap everything
	SwapBSPFile();
}
Example #8
0
void WriteBSPFile(const char *filename)
{
	char            tempname[1024];
	time_t          tm;


	/* dummy check */
	if(game == NULL || game->write == NULL)
		Error("WriteBSPFile: unsupported BSP file format");

	/* make fake temp name so existing bsp file isn't damaged in case write process fails */
	time(&tm);
	sprintf(tempname, "%s.%08X", filename, (int)tm);

	/* byteswap, write the bsp, then swap back so it can be manipulated further */
	SwapBSPFile();
	game->write(tempname);
	SwapBSPFile();

	/* replace existing bsp file */
	remove(filename);
	rename(tempname, filename);
}
Example #9
0
/*
   =============
   LoadBSPFile
   =============
 */
void    LoadBSPFile( char *filename ){
	int i;

//
// load the file header
//
	LoadFile( filename, (void **)&header );

// swap the header
	for ( i = 0 ; i < sizeof( dheader_t ) / 4 ; i++ )
		( (int *)header )[i] = LittleLong( ( (int *)header )[i] );

	if ( header->ident != IDBSPHEADER ) {
		Error( "%s is not a IBSP file", filename );
	}
	if ( header->version != BSPVERSION ) {
		Error( "%s is version %i, not %i", filename, header->version, BSPVERSION );
	}

	nummodels = CopyLump( LUMP_MODELS, dmodels, sizeof( dmodel_t ) );
	numvertexes = CopyLump( LUMP_VERTEXES, dvertexes, sizeof( dvertex_t ) );
	numplanes = CopyLump( LUMP_PLANES, dplanes, sizeof( dplane_t ) );
	numleafs = CopyLump( LUMP_LEAFS, dleafs, sizeof( dleaf_t ) );
	numnodes = CopyLump( LUMP_NODES, dnodes, sizeof( dnode_t ) );
	numtexinfo = CopyLump( LUMP_TEXINFO, texinfo, sizeof( texinfo_t ) );
	numfaces = CopyLump( LUMP_FACES, dfaces, sizeof( dface_t ) );
	numleaffaces = CopyLump( LUMP_LEAFFACES, dleaffaces, sizeof( dleaffaces[0] ) );
	numleafbrushes = CopyLump( LUMP_LEAFBRUSHES, dleafbrushes, sizeof( dleafbrushes[0] ) );
	numsurfedges = CopyLump( LUMP_SURFEDGES, dsurfedges, sizeof( dsurfedges[0] ) );
	numedges = CopyLump( LUMP_EDGES, dedges, sizeof( dedge_t ) );
	numbrushes = CopyLump( LUMP_BRUSHES, dbrushes, sizeof( dbrush_t ) );
	numbrushsides = CopyLump( LUMP_BRUSHSIDES, dbrushsides, sizeof( dbrushside_t ) );
	numareas = CopyLump( LUMP_AREAS, dareas, sizeof( darea_t ) );
	numareaportals = CopyLump( LUMP_AREAPORTALS, dareaportals, sizeof( dareaportal_t ) );

	visdatasize = CopyLump( LUMP_VISIBILITY, dvisdata, 1 );
	lightdatasize = CopyLump( LUMP_LIGHTING, dlightdata, 1 );
	entdatasize = CopyLump( LUMP_ENTITIES, dentdata, 1 );

	CopyLump( LUMP_POP, dpop, 1 );

	free( header );      // everything has been copied out

//
// swap everything
//
	SwapBSPFile( false );
}
Example #10
0
/*
=============
WriteBSPFile

Swaps the bsp file in place, so it should not be referenced again
=============
*/
void	WriteBSPFile( const char *filename ) {		
	dheader_t	outheader, *header;
	FILE		*bspfile;

	header = &outheader;
	memset( header, 0, sizeof(dheader_t) );
	
	SwapBSPFile();

	header->ident = LittleLong( BSP_IDENT );
	header->version = LittleLong( BSP_VERSION );
	
	bspfile = SafeOpenWrite( filename );
	SafeWrite( bspfile, header, sizeof(dheader_t) );	// overwritten later

	AddLump( bspfile, header, LUMP_SHADERS, dshaders, numShaders*sizeof(dshader_t) );
	AddLump( bspfile, header, LUMP_PLANES, dplanes, numplanes*sizeof(dplane_t) );
	AddLump( bspfile, header, LUMP_LEAFS, dleafs, numleafs*sizeof(dleaf_t) );
	AddLump( bspfile, header, LUMP_NODES, dnodes, numnodes*sizeof(dnode_t) );
	AddLump( bspfile, header, LUMP_BRUSHES, dbrushes, numbrushes*sizeof(dbrush_t) );
	AddLump( bspfile, header, LUMP_BRUSHSIDES, dbrushsides, numbrushsides*sizeof(dbrushside_t) );
	AddLump( bspfile, header, LUMP_LEAFSURFACES, dleafsurfaces, numleafsurfaces*sizeof(dleafsurfaces[0]) );
	AddLump( bspfile, header, LUMP_LEAFBRUSHES, dleafbrushes, numleafbrushes*sizeof(dleafbrushes[0]) );
	AddLump( bspfile, header, LUMP_MODELS, dmodels, nummodels*sizeof(dmodel_t) );
	AddLump( bspfile, header, LUMP_DRAWVERTS, drawVerts, numDrawVerts*sizeof(drawVert_t) );
	AddLump( bspfile, header, LUMP_SURFACES, drawSurfaces, numDrawSurfaces*sizeof(dsurface_t) );
	AddLump( bspfile, header, LUMP_VISIBILITY, visBytes, numVisBytes );
	AddLump( bspfile, header, LUMP_LIGHTMAPS, lightBytes, numLightBytes );
//	AddLump( bspfile, header, LUMP_LIGHTGRID, gridData, 8 * numGridPoints );
	AddLump( bspfile, header, LUMP_ENTITIES, dentdata, entdatasize );
//	AddLump( bspfile, header, LUMP_FOGS, dfogs, numFogs * sizeof(dfog_t) );
	AddLump( bspfile, header, LUMP_DRAWINDEXES, drawIndexes, numDrawIndexes * sizeof(drawIndexes[0]) );
	
	// su44: MoHAA lumps
	AddLump( bspfile, header, LUMP_STATICMODELDEF, staticModels, numStaticModels * sizeof(staticModels[0]) );
	AddLump( bspfile, header, LUMP_STATICMODELINDEXES, staticModels, numLeafStaticModels * sizeof(dleafStaticModels[0]) );
	AddLump( bspfile, header, LUMP_STATICMODELDATA, staticModelVertColors, numStaticModelVertColors * 3 );
	AddLump( bspfile, header, LUMP_TERRAIN, terraPatches, numTerraPatches * sizeof(terraPatches[0]) );
	AddLump( bspfile, header, LUMP_SIDEEQUATIONS, sideEquations, numSideEquations * sizeof(sideEquations[0]) );
	AddLump( bspfile, header, LUMP_SPHERELIGHTS, sphereLights, numSphereLights * sizeof(sphereLights[0]) );
	AddLump( bspfile, header, LUMP_LIGHTDEFS, lightDefs, numLightDefs * sizeof(lightDefs[0]) );	

	fseek (bspfile, 0, SEEK_SET);
	SafeWrite (bspfile, header, sizeof(dheader_t));
	fclose (bspfile);	
}
Example #11
0
/*
 * =============
 * LoadBSPFile
 * =============
 */
int
LoadBSPFile(const char *filename)
{
    int i, bsp_version;

    /* load the file header */
    LoadFile(filename, (void *)&header);

    /* swap the header */
    for (i = 0; i < sizeof(dheader_t) / 4; i++)
	((int *)header)[i] = LittleLong(((int *)header)[i]);

    bsp_version = (int)header->version;
    logprint("BSP is version %i\n", bsp_version);

    if (bsp_version != 29 && bsp_version != 30)
	Error("Sorry, only bsp versions 29 & 30 supported.");

    nummodels = CopyLump(LUMP_MODELS, dmodels, sizeof(dmodel_t));
    numvertexes = CopyLump(LUMP_VERTEXES, dvertexes, sizeof(dvertex_t));
    numplanes = CopyLump(LUMP_PLANES, dplanes, sizeof(dplane_t));
    numleafs = CopyLump(LUMP_LEAFS, dleafs, sizeof(dleaf_t));
    numnodes = CopyLump(LUMP_NODES, dnodes, sizeof(dnode_t));
    numtexinfo = CopyLump(LUMP_TEXINFO, texinfo, sizeof(texinfo_t));
    numclipnodes = CopyLump(LUMP_CLIPNODES, dclipnodes, sizeof(dclipnode_t));
    numfaces = CopyLump(LUMP_FACES, dfaces, sizeof(dface_t));
    nummarksurfaces = CopyLump(LUMP_MARKSURFACES, dmarksurfaces,
			       sizeof(dmarksurfaces[0]));
    numsurfedges = CopyLump(LUMP_SURFEDGES, dsurfedges,
			    sizeof(dsurfedges[0]));
    numedges = CopyLump(LUMP_EDGES, dedges, sizeof(dedge_t));

    texdatasize = CopyLump(LUMP_TEXTURES, dtexdata, 1);
    visdatasize = CopyLump(LUMP_VISIBILITY, dvisdata, 1);
    lightdatasize = CopyLump(LUMP_LIGHTING, dlightdata, 1);
    entdatasize = CopyLump(LUMP_ENTITIES, dentdata, 1);

    free(header);		/* everything has been copied out */

    /* swap everything */
    SwapBSPFile(false);

    /* Return the version */
    return bsp_version;
}
Example #12
0
/*
=============
LoadBSPFile
=============
*/
bool	LoadBSPFile( const char *filename ) {
	dheader_t	*header;

	// load the file header
	if(!LoadFile (filename, (byte **)&header))
		return false;

	// swap the header
	SwapBlock( (int *)header, sizeof(*header) );

	if ( header->ident != BSP_IDENT ) {
		DoMessageBox( "Cant find a valid IBSP file", "Error", eMB_OK);
		return false;
	}
	if ( (header->version != Q3_BSP_VERSION) &&
																			(header->version != WOLF_BSP_VERSION) ) {
		DoMessageBox( "File is incorrect version", "Error", eMB_OK);
		return false;
	}

	numbrushsides =		CopyLump( header, LUMP_BRUSHES,			(void**)&dbrushsides,	sizeof(dbrushside_t) );
	numbrushes =		CopyLump( header, LUMP_BRUSHES,			(void**)&dbrushes,		sizeof(dbrush_t) );
	numplanes =			CopyLump( header, LUMP_PLANES,			(void**)&dplanes,		sizeof(dplane_t) );
	numleafs =			CopyLump( header, LUMP_LEAFS,			(void**)&dleafs,		sizeof(dleaf_t) );
	numnodes =			CopyLump( header, LUMP_NODES,			(void**)&dnodes,		sizeof(dnode_t) );
	numDrawVerts =		CopyLump( header, LUMP_DRAWVERTS,		(void**)&drawVerts,		sizeof(qdrawVert_t) );
	numDrawSurfaces =	CopyLump( header, LUMP_SURFACES,		(void**)&drawSurfaces,	sizeof(dsurface_t) );
	numleafsurfaces =	CopyLump( header, LUMP_LEAFSURFACES,	(void**)&dleafsurfaces, sizeof(int) );
	numVisBytes =		CopyLump( header, LUMP_VISIBILITY,		(void**)&visBytes,		1 );
	numleafbrushes =	CopyLump( header, LUMP_LEAFBRUSHES,		(void**)&dleafbrushes,	sizeof(int) );

	delete header;		// everything has been copied out
		
	// swap everything
	SwapBSPFile();

	return true;
}
Example #13
0
/*
=============
WriteBSPFile

Swaps the bsp file in place, so it should not be referenced again
=============
*/
void WriteBSPFile(char *filename)
{
  header = &outheader;
  memset(header, 0, sizeof(dheader_t));

  SwapBSPFile(true);

  header->ident = LittleLong(IDBSPHEADER);
  header->version = LittleLong(BSPVERSION);

  wadfile = SafeOpenWrite(filename);
  SafeWrite(wadfile, header, sizeof(dheader_t)); // overwritten later

  AddLump(LUMP_PLANES, dplanes, numplanes * sizeof(dplane_t));
  AddLump(LUMP_LEAFS, dleafs, numleafs * sizeof(dleaf_t));
  AddLump(LUMP_VERTEXES, dvertexes, numvertexes * sizeof(dvertex_t));
  AddLump(LUMP_NODES, dnodes, numnodes * sizeof(dnode_t));
  AddLump(LUMP_TEXINFO, texinfo, numtexinfo * sizeof(texinfo_t));
  AddLump(LUMP_FACES, dfaces, numfaces * sizeof(dface_t));
  AddLump(LUMP_BRUSHES, dbrushes, numbrushes * sizeof(dbrush_t));
  AddLump(LUMP_BRUSHSIDES, dbrushsides, numbrushsides * sizeof(dbrushside_t));
  AddLump(LUMP_LEAFFACES, dleaffaces, numleaffaces * sizeof(dleaffaces[0]));
  AddLump(LUMP_LEAFBRUSHES, dleafbrushes, numleafbrushes * sizeof(dleafbrushes[0]));
  AddLump(LUMP_SURFEDGES, dsurfedges, numsurfedges * sizeof(dsurfedges[0]));
  AddLump(LUMP_EDGES, dedges, numedges * sizeof(dedge_t));
  AddLump(LUMP_MODELS, dmodels, nummodels * sizeof(dmodel_t));
  AddLump(LUMP_AREAS, dareas, numareas * sizeof(darea_t));
  AddLump(LUMP_AREAPORTALS, dareaportals, numareaportals * sizeof(dareaportal_t));

  AddLump(LUMP_LIGHTING, dlightdata, lightdatasize);
  AddLump(LUMP_VISIBILITY, dvisdata, visdatasize);
  AddLump(LUMP_ENTITIES, dentdata, entdatasize);
  AddLump(LUMP_POP, dpop, sizeof(dpop));

  fseek(wadfile, 0, SEEK_SET);
  SafeWrite(wadfile, header, sizeof(dheader_t));
  fclose(wadfile);
}