X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fbobtoolz%2Fbsploader.cpp;h=020cf4d8d774bdb846e192b351f7ab3c72066bde;hb=9dfae1c9b270ee369c6362903a9205b30751b95f;hp=6c8b09e90f185431e78c748a932e51eaf6e23527;hpb=e4287c28bb2dafedc81c66e63951d947cfbeb225;p=xonotic%2Fnetradiant.git diff --git a/contrib/bobtoolz/bsploader.cpp b/contrib/bobtoolz/bsploader.cpp index 6c8b09e9..020cf4d8 100644 --- a/contrib/bobtoolz/bsploader.cpp +++ b/contrib/bobtoolz/bsploader.cpp @@ -1,3 +1,4 @@ +#include #include "bsploader.h" #include "dialogs/dialogs-gtk.h" #include "cmdlib.h" @@ -13,36 +14,37 @@ int numbrushes; int numbrushsides; int numleafbrushes; -byte *visBytes = NULL; -dnode_t *dnodes = NULL; -dplane_t *dplanes = NULL; -dleaf_t *dleafs = NULL; -qdrawVert_t *drawVerts = NULL; -dsurface_t *drawSurfaces = NULL; -int *dleafsurfaces = NULL; -dbrush_t *dbrushes = NULL; -dbrushside_t *dbrushsides = NULL; -int *dleafbrushes = NULL; - -#define BSP_IDENT ( ( 'P' << 24 ) + ( 'S' << 16 ) + ( 'B' << 8 ) + 'I' ) -#define Q3_BSP_VERSION 46 -#define WOLF_BSP_VERSION 47 +byte *visBytes = NULL; +dnode_t *dnodes = NULL; +dplane_t *dplanes = NULL; +dleaf_t *dleafs = NULL; +qdrawVert_t *drawVerts = NULL; +dsurface_t *drawSurfaces = NULL; +int *dleafsurfaces = NULL; +dbrush_t *dbrushes = NULL; +dbrushside_t *dbrushsides = NULL; +int *dleafbrushes = NULL; + +const int BSP_IDENT = (('P' << 24) + ('S' << 16) + ('B' << 8) + 'I'); +const int Q3_BSP_VERSION = 46; +const int WOLF_BSP_VERSION = 47; /* ================ FileLength ================ */ -int FileLength( FILE *f ){ - int pos; - int end; +int FileLength(FILE *f) +{ + int pos; + int end; - pos = ftell( f ); - fseek( f, 0, SEEK_END ); - end = ftell( f ); - fseek( f, pos, SEEK_SET ); + pos = ftell(f); + fseek(f, 0, SEEK_END); + end = ftell(f); + fseek(f, pos, SEEK_SET); - return end; + return end; } /* @@ -50,38 +52,41 @@ int FileLength( FILE *f ){ LoadFile ============== */ -bool LoadFile( const char *filename, byte **bufferptr ){ - FILE *f; - int length; - byte *buffer; - - f = fopen( filename, "rb" ); - if ( !f ) { - return false; - } - - length = FileLength( f ); - buffer = new byte[length + 1]; - buffer[length] = 0; - fread( buffer, 1, length, f ); - fclose( f ); - - *bufferptr = buffer; - return true; +bool LoadFile(const char *filename, byte **bufferptr) +{ + FILE *f; + int length; + byte *buffer; + + f = fopen(filename, "rb"); + if (!f) { + return false; + } + + length = FileLength(f); + buffer = new byte[length + 1]; + buffer[length] = 0; + fread(buffer, 1, length, f); + fclose(f); + + *bufferptr = buffer; + return true; } -int LittleLong( int l ){ -#if defined( __BIG_ENDIAN__ ) - std::reverse( reinterpret_cast( &l ), reinterpret_cast( &l ) + sizeof( int ) ); -#endif - return l; +int LittleLong(int l) +{ + if (GDEF_ARCH_ENDIAN_BIG) { + std::reverse(reinterpret_cast( &l ), reinterpret_cast( &l ) + sizeof(int)); + } + return l; } -float LittleFloat( float l ){ -#if defined( __BIG_ENDIAN__ ) - std::reverse( reinterpret_cast( &l ), reinterpret_cast( &l ) + sizeof( float ) ); -#endif - return l; +float LittleFloat(float l) +{ + if (GDEF_ARCH_ENDIAN_BIG) { + std::reverse(reinterpret_cast( &l ), reinterpret_cast( &l ) + sizeof(float)); + } + return l; } /* @@ -91,13 +96,14 @@ float LittleFloat( float l ){ If all values are 32 bits, this can be used to swap everything ============= */ -void SwapBlock( int *block, int sizeOfBlock ) { - int i; - - sizeOfBlock >>= 2; - for ( i = 0 ; i < sizeOfBlock ; i++ ) { - block[i] = LittleLong( block[i] ); - } +void SwapBlock(int *block, int sizeOfBlock) +{ + int i; + + sizeOfBlock >>= 2; + for (i = 0; i < sizeOfBlock; i++) { + block[i] = LittleLong(block[i]); + } } /* @@ -107,64 +113,65 @@ void SwapBlock( int *block, int sizeOfBlock ) { Byte swaps all data in a bsp file. ============= */ -void SwapBSPFile( void ) { - int i; +void SwapBSPFile(void) +{ + int i; - // models + // models // SwapBlock( (int *)dmodels, nummodels * sizeof( dmodels[0] ) ); - // shaders (don't swap the name) + // shaders (don't swap the name) // for ( i = 0 ; i < numShaders ; i++ ) { // dshaders[i].contentFlags = LittleLong( dshaders[i].contentFlags ); // dshaders[i].surfaceFlags = LittleLong( dshaders[i].surfaceFlags ); // } - // planes - SwapBlock( (int *)dplanes, numplanes * sizeof( dplanes[0] ) ); + // planes + SwapBlock((int *) dplanes, numplanes * sizeof(dplanes[0])); - // nodes - SwapBlock( (int *)dnodes, numnodes * sizeof( dnodes[0] ) ); + // nodes + SwapBlock((int *) dnodes, numnodes * sizeof(dnodes[0])); - // leafs - SwapBlock( (int *)dleafs, numleafs * sizeof( dleafs[0] ) ); + // leafs + SwapBlock((int *) dleafs, numleafs * sizeof(dleafs[0])); - // leaffaces - SwapBlock( (int *)dleafsurfaces, numleafsurfaces * sizeof( dleafsurfaces[0] ) ); + // leaffaces + SwapBlock((int *) dleafsurfaces, numleafsurfaces * sizeof(dleafsurfaces[0])); - // leafbrushes - SwapBlock( (int *)dleafbrushes, numleafbrushes * sizeof( dleafbrushes[0] ) ); + // leafbrushes + SwapBlock((int *) dleafbrushes, numleafbrushes * sizeof(dleafbrushes[0])); - // brushes - SwapBlock( (int *)dbrushes, numbrushes * sizeof( dbrushes[0] ) ); + // brushes + SwapBlock((int *) dbrushes, numbrushes * sizeof(dbrushes[0])); - // brushsides - SwapBlock( (int *)dbrushsides, numbrushsides * sizeof( dbrushsides[0] ) ); + // brushsides + SwapBlock((int *) dbrushsides, numbrushsides * sizeof(dbrushsides[0])); - // vis - ( (int *)&visBytes )[0] = LittleLong( ( (int *)&visBytes )[0] ); - ( (int *)&visBytes )[1] = LittleLong( ( (int *)&visBytes )[1] ); + // vis + ((int *) &visBytes)[0] = LittleLong(((int *) &visBytes)[0]); + ((int *) &visBytes)[1] = LittleLong(((int *) &visBytes)[1]); - // drawverts (don't swap colors ) - for ( i = 0 ; i < numDrawVerts ; i++ ) { - drawVerts[i].lightmap[0] = LittleFloat( drawVerts[i].lightmap[0] ); - drawVerts[i].lightmap[1] = LittleFloat( drawVerts[i].lightmap[1] ); - drawVerts[i].st[0] = LittleFloat( drawVerts[i].st[0] ); - drawVerts[i].st[1] = LittleFloat( drawVerts[i].st[1] ); - drawVerts[i].xyz[0] = LittleFloat( drawVerts[i].xyz[0] ); - drawVerts[i].xyz[1] = LittleFloat( drawVerts[i].xyz[1] ); - drawVerts[i].xyz[2] = LittleFloat( drawVerts[i].xyz[2] ); - drawVerts[i].normal[0] = LittleFloat( drawVerts[i].normal[0] ); - drawVerts[i].normal[1] = LittleFloat( drawVerts[i].normal[1] ); - drawVerts[i].normal[2] = LittleFloat( drawVerts[i].normal[2] ); - } + // drawverts (don't swap colors ) + for (i = 0; i < numDrawVerts; i++) { + drawVerts[i].lightmap[0] = LittleFloat(drawVerts[i].lightmap[0]); + drawVerts[i].lightmap[1] = LittleFloat(drawVerts[i].lightmap[1]); + drawVerts[i].st[0] = LittleFloat(drawVerts[i].st[0]); + drawVerts[i].st[1] = LittleFloat(drawVerts[i].st[1]); + drawVerts[i].xyz[0] = LittleFloat(drawVerts[i].xyz[0]); + drawVerts[i].xyz[1] = LittleFloat(drawVerts[i].xyz[1]); + drawVerts[i].xyz[2] = LittleFloat(drawVerts[i].xyz[2]); + drawVerts[i].normal[0] = LittleFloat(drawVerts[i].normal[0]); + drawVerts[i].normal[1] = LittleFloat(drawVerts[i].normal[1]); + drawVerts[i].normal[2] = LittleFloat(drawVerts[i].normal[2]); + } - // drawindexes + // drawindexes // SwapBlock( (int *)drawIndexes, numDrawIndexes * sizeof( drawIndexes[0] ) ); - // drawsurfs - SwapBlock( (int *)drawSurfaces, numDrawSurfaces * sizeof( drawSurfaces[0] ) ); + // drawsurfs + SwapBlock((int *) drawSurfaces, numDrawSurfaces * sizeof(drawSurfaces[0])); - // fogs + // fogs // for ( i = 0 ; i < numFogs ; i++ ) { // dfogs[i].brushNum = LittleLong( dfogs[i].brushNum ); // dfogs[i].visibleSide = LittleLong( dfogs[i].visibleSide ); @@ -176,20 +183,21 @@ void SwapBSPFile( void ) { CopyLump ============= */ -int CopyLump( dheader_t *header, int lump, void **dest, int size ) { - int length, ofs; +int CopyLump(dheader_t *header, int lump, void **dest, int size) +{ + int length, ofs; - length = header->lumps[lump].filelen; - ofs = header->lumps[lump].fileofs; + length = header->lumps[lump].filelen; + ofs = header->lumps[lump].fileofs; - if ( length == 0 ) { - return 0; - } + if (length == 0) { + return 0; + } - *dest = new byte[length]; - memcpy( *dest, (byte *)header + ofs, length ); + *dest = new byte[length]; + memcpy(*dest, (byte *) header + ofs, length); - return length / size; + return length / size; } /* @@ -197,75 +205,77 @@ int CopyLump( dheader_t *header, int lump, void **dest, int size ) { 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; +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; } -void FreeBSPData(){ - if ( visBytes ) { - delete visBytes; - } - if ( dnodes ) { - delete dnodes; - } - if ( dplanes ) { - delete dplanes; - } - if ( dleafs ) { - delete dleafs; - } - if ( drawVerts ) { - delete drawVerts; - } - if ( drawSurfaces ) { - delete drawSurfaces; - } - if ( dleafsurfaces ) { - delete dleafsurfaces; - } - if ( dleafbrushes ) { - delete dleafbrushes; - } - if ( dbrushes ) { - delete dbrushes; - } - if ( dbrushsides ) { - delete dbrushsides; - } +void FreeBSPData() +{ + if (visBytes) { + delete visBytes; + } + if (dnodes) { + delete dnodes; + } + if (dplanes) { + delete dplanes; + } + if (dleafs) { + delete dleafs; + } + if (drawVerts) { + delete drawVerts; + } + if (drawSurfaces) { + delete drawSurfaces; + } + if (dleafsurfaces) { + delete dleafsurfaces; + } + if (dleafbrushes) { + delete dleafbrushes; + } + if (dbrushes) { + delete dbrushes; + } + if (dbrushsides) { + delete dbrushsides; + } }