]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/bobtoolz/bsploader.cpp
more eol-style
[xonotic/netradiant.git] / contrib / bobtoolz / bsploader.cpp
index 5c2ee582d3dd192616e8d43aa7f9ac26a15755e2..2fc05afdc6cea2a68fedc14a0042802660ca17dc 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 "StdAfx.h"
+#include "./dialogs/dialogs-gtk.h"
+#include "bsploader.h"
+#include "../../libs/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;
+
+#define BSP_IDENT      (('P'<<24)+('S'<<16)+('B'<<8)+'I')
+#define Q3_BSP_VERSION                 46
+#define 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
+==============
+*/
+qboolean    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)
+{
+       return l;
+}
+
+float  LittleFloat (float l)
+{
+       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
+=============
+*/
+qboolean       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", MB_OK);
+               return false;
+       }
+       if ( (header->version != Q3_BSP_VERSION) &&
+                                                                                                                                                       (header->version != WOLF_BSP_VERSION) ) {
+               DoMessageBox( "File is incorrect version", "Error", MB_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;
+}