]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/bobtoolz/bsploader.cpp
Revert partially (auto) "reformat code! now the code is only ugly on the *inside*"
[xonotic/netradiant.git] / contrib / bobtoolz / bsploader.cpp
index 5c2ee582d3dd192616e8d43aa7f9ac26a15755e2..0c442e16ce0f2258abac3775b662a62e1c235027 100644 (file)
-#include "StdAfx.h"\r
-#include "./dialogs/dialogs-gtk.h"\r
-#include "bsploader.h"\r
-#include "../../libs/cmdlib.h"\r
-\r
-int                    numnodes;\r
-int                    numplanes;\r
-int                    numleafs;\r
-int                    numleafsurfaces;\r
-int                    numVisBytes;\r
-int                    numDrawVerts;\r
-int                    numDrawSurfaces;\r
-int                    numbrushes;\r
-int                    numbrushsides;\r
-int                    numleafbrushes;\r
-\r
-byte                       *visBytes =                   NULL;\r
-dnode_t                          *dnodes =                         NULL;\r
-dplane_t                 *dplanes =                      NULL;\r
-dleaf_t                          *dleafs =                         NULL;\r
-qdrawVert_t      *drawVerts =            NULL;\r
-dsurface_t       *drawSurfaces =               NULL;\r
-int                                *dleafsurfaces =    NULL;\r
-dbrush_t                 *dbrushes =                     NULL;\r
-dbrushside_t   *dbrushsides =          NULL;\r
-int                                *dleafbrushes =             NULL;\r
-\r
-#define BSP_IDENT      (('P'<<24)+('S'<<16)+('B'<<8)+'I')\r
-#define Q3_BSP_VERSION                 46\r
-#define WOLF_BSP_VERSION                       47\r
-\r
-/*\r
-================\r
-FileLength\r
-================\r
-*/\r
-int FileLength (FILE *f)\r
-{\r
-       int             pos;\r
-       int             end;\r
-\r
-       pos = ftell (f);\r
-       fseek (f, 0, SEEK_END);\r
-       end = ftell (f);\r
-       fseek (f, pos, SEEK_SET);\r
-\r
-       return end;\r
-}\r
-\r
-/*\r
-==============\r
-LoadFile\r
-==============\r
-*/\r
-qboolean    LoadFile( const char *filename, byte **bufferptr)\r
-{\r
-       FILE    *f;\r
-       int             length;\r
-       byte    *buffer;\r
-\r
-       f = fopen(filename, "rb");\r
-       if(!f)\r
-               return false;\r
-\r
-       length = FileLength (f);\r
-       buffer = new byte[length+1];\r
-       buffer[length] = 0;\r
-       fread(buffer, 1, length, f);\r
-       fclose (f);\r
-\r
-       *bufferptr = buffer;\r
-       return true;\r
-}\r
-\r
-/*int    LittleLong (int l)\r
-{\r
-       return l;\r
-}\r
-\r
-float  LittleFloat (float l)\r
-{\r
-       return l;\r
-}*/\r
-\r
-/*\r
-=============\r
-SwapBlock\r
-\r
-If all values are 32 bits, this can be used to swap everything\r
-=============\r
-*/\r
-void SwapBlock( int *block, int sizeOfBlock ) {\r
-       int             i;\r
-\r
-       sizeOfBlock >>= 2;\r
-       for ( i = 0 ; i < sizeOfBlock ; i++ ) {\r
-               block[i] = LittleLong( block[i] );\r
-       }\r
-}\r
-\r
-/*\r
-=============\r
-SwapBSPFile\r
-\r
-Byte swaps all data in a bsp file.\r
-=============\r
-*/\r
-void SwapBSPFile( void ) {\r
-       int                             i;\r
-       \r
-       // models       \r
-//     SwapBlock( (int *)dmodels, nummodels * sizeof( dmodels[0] ) );\r
-\r
-       // shaders (don't swap the name)\r
-//     for ( i = 0 ; i < numShaders ; i++ ) {\r
-//             dshaders[i].contentFlags = LittleLong( dshaders[i].contentFlags );\r
-//             dshaders[i].surfaceFlags = LittleLong( dshaders[i].surfaceFlags );\r
-//     }\r
-\r
-       // planes\r
-       SwapBlock( (int *)dplanes, numplanes * sizeof( dplanes[0] ) );\r
-       \r
-       // nodes\r
-       SwapBlock( (int *)dnodes, numnodes * sizeof( dnodes[0] ) );\r
-\r
-       // leafs\r
-       SwapBlock( (int *)dleafs, numleafs * sizeof( dleafs[0] ) );\r
-\r
-       // leaffaces\r
-       SwapBlock( (int *)dleafsurfaces, numleafsurfaces * sizeof( dleafsurfaces[0] ) );\r
-\r
-       // leafbrushes\r
-       SwapBlock( (int *)dleafbrushes, numleafbrushes * sizeof( dleafbrushes[0] ) );\r
-\r
-       // brushes\r
-       SwapBlock( (int *)dbrushes, numbrushes * sizeof( dbrushes[0] ) );\r
-\r
-       // brushsides\r
-       SwapBlock( (int *)dbrushsides, numbrushsides * sizeof( dbrushsides[0] ) );\r
-\r
-       // vis\r
-       ((int *)&visBytes)[0] = LittleLong( ((int *)&visBytes)[0] );\r
-       ((int *)&visBytes)[1] = LittleLong( ((int *)&visBytes)[1] );\r
-\r
-       // drawverts (don't swap colors )\r
-       for ( i = 0 ; i < numDrawVerts ; i++ ) {\r
-               drawVerts[i].lightmap[0] = LittleFloat( drawVerts[i].lightmap[0] );\r
-               drawVerts[i].lightmap[1] = LittleFloat( drawVerts[i].lightmap[1] );\r
-               drawVerts[i].st[0] = LittleFloat( drawVerts[i].st[0] );\r
-               drawVerts[i].st[1] = LittleFloat( drawVerts[i].st[1] );\r
-               drawVerts[i].xyz[0] = LittleFloat( drawVerts[i].xyz[0] );\r
-               drawVerts[i].xyz[1] = LittleFloat( drawVerts[i].xyz[1] );\r
-               drawVerts[i].xyz[2] = LittleFloat( drawVerts[i].xyz[2] );\r
-               drawVerts[i].normal[0] = LittleFloat( drawVerts[i].normal[0] );\r
-               drawVerts[i].normal[1] = LittleFloat( drawVerts[i].normal[1] );\r
-               drawVerts[i].normal[2] = LittleFloat( drawVerts[i].normal[2] );\r
-       }\r
-\r
-       // drawindexes\r
-//     SwapBlock( (int *)drawIndexes, numDrawIndexes * sizeof( drawIndexes[0] ) );\r
-\r
-       // drawsurfs\r
-       SwapBlock( (int *)drawSurfaces, numDrawSurfaces * sizeof( drawSurfaces[0] ) );\r
-\r
-       // fogs\r
-//     for ( i = 0 ; i < numFogs ; i++ ) {\r
-//             dfogs[i].brushNum = LittleLong( dfogs[i].brushNum );\r
-//             dfogs[i].visibleSide = LittleLong( dfogs[i].visibleSide );\r
-//     }\r
-}\r
-\r
-/*\r
-=============\r
-CopyLump\r
-=============\r
-*/\r
-int CopyLump( dheader_t        *header, int lump, void **dest, int size ) {\r
-       int             length, ofs;\r
-\r
-       length = header->lumps[lump].filelen;\r
-       ofs = header->lumps[lump].fileofs;\r
-       \r
-       if(length == 0)\r
-               return 0;\r
-       \r
-       *dest = new byte[length];\r
-       memcpy( *dest, (byte *)header + ofs, length );\r
-\r
-       return length / size;\r
-}\r
-\r
-/*\r
-=============\r
-LoadBSPFile\r
-=============\r
-*/\r
-qboolean       LoadBSPFile( const char *filename ) {\r
-       dheader_t       *header;\r
-\r
-       // load the file header\r
-       if(!LoadFile (filename, (byte **)&header))\r
-               return false;\r
-\r
-       // swap the header\r
-       SwapBlock( (int *)header, sizeof(*header) );\r
-\r
-       if ( header->ident != BSP_IDENT ) {\r
-               DoMessageBox( "Cant find a valid IBSP file", "Error", MB_OK);\r
-               return false;\r
-       }\r
-       if ( (header->version != Q3_BSP_VERSION) &&\r
-                                                                                                                                                       (header->version != WOLF_BSP_VERSION) ) {\r
-               DoMessageBox( "File is incorrect version", "Error", MB_OK);\r
-               return false;\r
-       }\r
-\r
-       numbrushsides =         CopyLump( header, LUMP_BRUSHES,                 (void**)&dbrushsides,   sizeof(dbrushside_t) );\r
-       numbrushes =            CopyLump( header, LUMP_BRUSHES,                 (void**)&dbrushes,              sizeof(dbrush_t) );\r
-       numplanes =                     CopyLump( header, LUMP_PLANES,                  (void**)&dplanes,               sizeof(dplane_t) );\r
-       numleafs =                      CopyLump( header, LUMP_LEAFS,                   (void**)&dleafs,                sizeof(dleaf_t) );\r
-       numnodes =                      CopyLump( header, LUMP_NODES,                   (void**)&dnodes,                sizeof(dnode_t) );\r
-       numDrawVerts =          CopyLump( header, LUMP_DRAWVERTS,               (void**)&drawVerts,             sizeof(qdrawVert_t) );\r
-       numDrawSurfaces =       CopyLump( header, LUMP_SURFACES,                (void**)&drawSurfaces,  sizeof(dsurface_t) );\r
-       numleafsurfaces =       CopyLump( header, LUMP_LEAFSURFACES,    (void**)&dleafsurfaces, sizeof(int) );\r
-       numVisBytes =           CopyLump( header, LUMP_VISIBILITY,              (void**)&visBytes,              1 );\r
-       numleafbrushes =        CopyLump( header, LUMP_LEAFBRUSHES,             (void**)&dleafbrushes,  sizeof(int) );\r
-\r
-       delete header;          // everything has been copied out\r
-               \r
-       // swap everything\r
-       SwapBSPFile();\r
-\r
-       return true;\r
-}\r
-\r
-void FreeBSPData()\r
-{\r
-       if(visBytes)\r
-               delete visBytes;\r
-       if(dnodes)\r
-               delete dnodes;\r
-       if(dplanes)\r
-               delete dplanes;\r
-       if(dleafs)\r
-               delete dleafs;\r
-       if(drawVerts)\r
-               delete drawVerts;\r
-       if(drawSurfaces)\r
-               delete drawSurfaces;\r
-       if(dleafsurfaces)\r
-               delete dleafsurfaces;\r
-       if(dleafbrushes)\r
-               delete dleafbrushes;\r
-       if(dbrushes)\r
-               delete dbrushes;\r
-       if(dbrushsides)\r
-               delete dbrushsides;\r
-}\r
+#include <globaldefs.h>
+#include "bsploader.h"
+#include "dialogs/dialogs-gtk.h"
+#include "cmdlib.h"
+
+int numnodes;
+int numplanes;
+int numleafs;
+int numleafsurfaces;
+int numVisBytes;
+int numDrawVerts;
+int numDrawSurfaces;
+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;
+
+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;
+
+       pos = ftell( f );
+       fseek( f, 0, SEEK_END );
+       end = ftell( f );
+       fseek( f, pos, SEEK_SET );
+
+       return end;
+}
+
+/*
+   ==============
+   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;
+}
+
+int    LittleLong( int l ){
+       if (GDEF_ARCH_ENDIAN_BIG) {
+               std::reverse(reinterpret_cast<unsigned char *>( &l ), reinterpret_cast<unsigned char *>( &l ) + sizeof(int));
+       }
+       return l;
+}
+
+float   LittleFloat( float l ){
+       if (GDEF_ARCH_ENDIAN_BIG) {
+               std::reverse( reinterpret_cast<unsigned char*>( &l ), reinterpret_cast<unsigned char*>( &l ) + sizeof( float ) );
+       }
+       return l;
+}
+
+/*
+   =============
+   SwapBlock
+
+   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] );
+       }
+}
+
+/*
+   =============
+   SwapBSPFile
+
+   Byte swaps all data in a bsp file.
+   =============
+ */
+void SwapBSPFile( void ) {
+       int i;
+
+       // models
+//     SwapBlock( (int *)dmodels, nummodels * sizeof( dmodels[0] ) );
+
+       // 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] ) );
+
+       // nodes
+       SwapBlock( (int *)dnodes, numnodes * sizeof( dnodes[0] ) );
+
+       // leafs
+       SwapBlock( (int *)dleafs, numleafs * sizeof( dleafs[0] ) );
+
+       // leaffaces
+       SwapBlock( (int *)dleafsurfaces, numleafsurfaces * sizeof( dleafsurfaces[0] ) );
+
+       // leafbrushes
+       SwapBlock( (int *)dleafbrushes, numleafbrushes * sizeof( dleafbrushes[0] ) );
+
+       // brushes
+       SwapBlock( (int *)dbrushes, numbrushes * sizeof( dbrushes[0] ) );
+
+       // brushsides
+       SwapBlock( (int *)dbrushsides, numbrushsides * sizeof( dbrushsides[0] ) );
+
+       // 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] );
+       }
+
+       // drawindexes
+//     SwapBlock( (int *)drawIndexes, numDrawIndexes * sizeof( drawIndexes[0] ) );
+
+       // drawsurfs
+       SwapBlock( (int *)drawSurfaces, numDrawSurfaces * sizeof( drawSurfaces[0] ) );
+
+       // fogs
+//     for ( i = 0 ; i < numFogs ; i++ ) {
+//             dfogs[i].brushNum = LittleLong( dfogs[i].brushNum );
+//             dfogs[i].visibleSide = LittleLong( dfogs[i].visibleSide );
+//     }
+}
+
+/*
+   =============
+   CopyLump
+   =============
+ */
+int CopyLump( dheader_t *header, int lump, void **dest, int size ) {
+       int length, ofs;
+
+       length = header->lumps[lump].filelen;
+       ofs = header->lumps[lump].fileofs;
+
+       if ( length == 0 ) {
+               return 0;
+       }
+
+       *dest = new byte[length];
+       memcpy( *dest, (byte *)header + ofs, length );
+
+       return length / 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;
+}
+
+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;
+       }
+}