]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - tools/quake3/q3map2/bsp.c
Merge commit 'e78f526d5fbbbf18699ec76297e4973565356c81' into master-merge
[xonotic/netradiant.git] / tools / quake3 / q3map2 / bsp.c
index 3ab6a2df9a54210e68b4cc515607de24a01ef64e..7e504a6a2f8fee3bba0f43d6a84622989716a2fc 100644 (file)
@@ -44,7 +44,6 @@
 
    ------------------------------------------------------------------------------- */
 
-
 /*
    ProcessAdvertisements()
    copies advertisement info into the BSP structures
@@ -320,6 +319,10 @@ void ProcessWorldModel( const char *portalFilePath, const char *lineFilePath ){
        /* check for patches with adjacent edges that need to lod together */
        PatchMapDrawSurfs( e );
 
+       if ( debugClip ) {
+               AddTriangleModels( e );
+       }
+
        /* build an initial bsp tree using all of the sides of all of the structural brushes */
        faces = MakeStructuralBSPFaceList( entities[ 0 ].brushes );
        tree = FaceBSP( faces );
@@ -388,7 +391,9 @@ void ProcessWorldModel( const char *portalFilePath, const char *lineFilePath ){
        FloodAreas( tree );
 
        /* create drawsurfs for triangle models */
-       AddTriangleModels( e );
+       if ( !debugClip ) {
+               AddTriangleModels( e );
+       }
 
        /* create drawsurfs for surface models */
        AddEntitySurfaceModels( e );
@@ -632,6 +637,8 @@ void ProcessModels( const char *portalFilePath, const char *lineFilePath ){
        /* restore -v setting */
        verbose = oldVerbose;
 
+       Sys_FPrintf( SYS_VRB, "%9i bspModels in total\n", numBSPModels );
+
        /* write fogs */
        EmitFogs();
 
@@ -709,13 +716,17 @@ int BSPMain( int argc, char **argv ){
        portalFilePath[0] = 0;
        surfaceFilePath[0] = 0;
 
+       if ( argc >= 2 && !strcmp( argv[ 1 ], "-bsp" ) ) {
+               argv++;
+               argc--;
+       }
 
        /* note it */
        Sys_Printf( "--- BSP ---\n" );
 
+       doingBSP = qtrue;
        SetDrawSurfacesBuffer();
-       mapDrawSurfs = safe_malloc( sizeof( mapDrawSurface_t ) * MAX_MAP_DRAW_SURFS );
-       memset( mapDrawSurfs, 0, sizeof( mapDrawSurface_t ) * MAX_MAP_DRAW_SURFS );
+       mapDrawSurfs = safe_malloc0( sizeof( mapDrawSurface_t ) * MAX_MAP_DRAW_SURFS );
        numMapDrawSurfs = 0;
 
        tempSource[ 0 ] = '\0';
@@ -823,7 +834,37 @@ int BSPMain( int argc, char **argv ){
                        i++;
                        Sys_Printf( "Distance epsilon set to %f\n", distanceEpsilon );
                }
-               else if ( !strcmp( argv[ i ],  "-mv" ) ) {
+               else if ( !strcmp( argv[ i ], "-fastmeta" ) ) {
+                       maxLMSurfaceVerts = 64;
+                       maxSurfaceVerts = 999;
+                       maxSurfaceIndexes = 6000;
+                       Sys_Printf( "Maximum per-surface vertex count set to %d\n", maxSurfaceVerts );
+                       Sys_Printf( "Maximum per-surface index count set to %d\n", maxSurfaceIndexes );
+                       Sys_Printf( "Maximum lightmapped surface vertex count set to %d\n", maxLMSurfaceVerts );
+               }
+               else if ( !strcmp( argv[ i ], "-maxsurfacevertices" ) ) {
+                       maxSurfaceVerts = atoi( argv[ i + 1 ] );
+                       if ( maxSurfaceVerts < 3 ) {
+                               maxSurfaceVerts = 3;
+                       }
+                       i++;
+                       Sys_Printf( "Maximum per-surface vertex count set to %d\n", maxSurfaceVerts );
+               }
+               else if ( !strcmp( argv[ i ], "-maxsurfaceindexes" ) || !strcmp( argv[ i ], "-mi" ) ) {
+                       maxSurfaceIndexes = atoi( argv[ i + 1 ] );
+                       if ( maxSurfaceIndexes < 3 ) {
+                               maxSurfaceIndexes = 3;
+                       }
+                       i++;
+
+                       if ( !strcmp( argv[ i ], "-mi" ) ) {
+                               Sys_Printf( "The -mi argument is deprecated, use \"-maxsurfaceindexes\" instead\n" );
+                       }
+                       else {
+                               Sys_Printf( "Maximum per-surface index count set to %d\n", maxSurfaceIndexes );
+                       }
+               }
+               else if ( !strcmp( argv[ i ], "-maxlightmapvertices" ) || !strcmp( argv[ i ], "-mv" ) ) {
                        maxLMSurfaceVerts = atoi( argv[ i + 1 ] );
                        if ( maxLMSurfaceVerts < 3 ) {
                                maxLMSurfaceVerts = 3;
@@ -832,15 +873,13 @@ int BSPMain( int argc, char **argv ){
                                maxSurfaceVerts = maxLMSurfaceVerts;
                        }
                        i++;
+
+                       if ( !strcmp( argv[ i ], "-mv" ) ) {
+                               Sys_Printf( "The -mv argument is deprecated, use \"-maxlightmapvertices\" instead\n" );
+                       }
+                       else {
                        Sys_Printf( "Maximum lightmapped surface vertex count set to %d\n", maxLMSurfaceVerts );
                }
-               else if ( !strcmp( argv[ i ],  "-mi" ) ) {
-                       maxSurfaceIndexes = atoi( argv[ i + 1 ] );
-                       if ( maxSurfaceIndexes < 3 ) {
-                               maxSurfaceIndexes = 3;
-                       }
-                       i++;
-                       Sys_Printf( "Maximum per-surface index count set to %d\n", maxSurfaceIndexes );
                }
                else if ( !strcmp( argv[ i ], "-np" ) ) {
                        npDegrees = atof( argv[ i + 1 ] );
@@ -950,6 +989,15 @@ int BSPMain( int argc, char **argv ){
                        Sys_Printf( "Debug portal surfaces enabled\n" );
                        debugPortals = qtrue;
                }
+               else if ( !strcmp( argv[ i ], "-debugclip" ) ) {
+                       Sys_Printf( "Debug model clip enabled\n" );
+                       debugClip = qtrue;
+               }
+               else if ( !strcmp( argv[ i ],  "-clipdepth" ) ) {
+                       clipDepthGlobal = atof( argv[ i + 1 ] );
+                       i++;
+                       Sys_Printf( "Model autoclip thickness set to %.3f\n", clipDepthGlobal );
+               }
                else if ( !strcmp( argv[ i ], "-sRGBtex" ) ) {
                        texturesRGB = qtrue;
                        Sys_Printf( "Textures are in sRGB\n" );
@@ -972,13 +1020,11 @@ int BSPMain( int argc, char **argv ){
                        colorsRGB = qfalse;
                        Sys_Printf( "Colors are linear\n" );
                }
-               else if ( !strcmp( argv[ i ], "-altsplit" ) )
-               {
+               else if ( !strcmp( argv[ i ], "-altsplit" ) ) {
                        Sys_Printf( "Alternate BSP splitting (by 27) enabled\n" );
                        bspAlternateSplitWeights = qtrue;
                }
-               else if ( !strcmp( argv[ i ], "-deep" ) )
-               {
+               else if ( !strcmp( argv[ i ], "-deep" ) ) {
                        Sys_Printf( "Deep BSP tree generation enabled\n" );
                        deepBSP = qtrue;
                }
@@ -989,32 +1035,42 @@ int BSPMain( int argc, char **argv ){
                else if ( !strcmp( argv[ i ], "-bspfile" ) )
                {
                        strcpy( BSPFilePath, argv[i + 1] );
+                       argv[ i ] = NULL;
                        i++;
+                       argv[ i ] = NULL;
                        Sys_Printf( "Use %s as bsp file\n", BSPFilePath );
                }
                else if ( !strcmp( argv[ i ], "-linfile" ) )
                {
                        strcpy( lineFilePath, argv[i + 1] );
+                       argv[ i ] = NULL;
                        i++;
+                       argv[ i ] = NULL;
                        Sys_Printf( "Use %s as line file\n", lineFilePath );
                }
                else if ( !strcmp( argv[ i ], "-prtfile" ) )
                {
                        strcpy( portalFilePath, argv[i + 1] );
+                       argv[ i ] = NULL;
                        i++;
+                       argv[ i ] = NULL;
                        Sys_Printf( "Use %s as portal file\n", portalFilePath );
                }
                else if ( !strcmp( argv[ i ], "-srffile" ) )
                {
                        strcpy( surfaceFilePath, argv[i + 1] );
+                       argv[ i ] = NULL;
                        i++;
+                       argv[ i ] = NULL;
                        Sys_Printf( "Use %s as surface file\n", surfaceFilePath );
                }
-               else if ( !strcmp( argv[ i ], "-bsp" ) ) {
-                       Sys_Printf( "-bsp argument unnecessary\n" );
+               else if ( !strcmp( argv[ i ], "-noob" ) ) {
+                       Sys_Printf( "No oBs!\n" );
+                       noob = qtrue;
                }
-               else{
-                       Sys_FPrintf( SYS_WRN, "WARNING: Unknown option \"%s\"\n", argv[ i ] );
+               else
+               {
+                       Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] );
                }
        }