/* Copyright (C) 1999-2006 Id Software, Inc. and contributors. For a list of contributors, see the accompanying CONTRIBUTORS file. This file is part of GtkRadiant. GtkRadiant is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. GtkRadiant is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GtkRadiant; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ /* marker */ #define MAIN_C /* dependencies */ #include "q2map.h" #define qtrue true #define qfalse false char *mapname; char game[64]; extern qboolean verbose; /// BSP extern qboolean drawflag; extern qboolean noprune; extern qboolean glview; extern qboolean nodetail; extern qboolean fulldetail; extern qboolean onlyents; extern qboolean nomerge; extern qboolean nowater; extern qboolean nofill; extern qboolean nocsg; extern qboolean noweld; extern qboolean noshare; extern qboolean nosubdiv; extern qboolean notjunc; extern qboolean noopt; extern qboolean leaktest; extern qboolean verboseentities; extern char outbase[32]; extern int block_xl, block_xh, block_yl, block_yh; extern vec_t microvolume; extern float subdivide_size; // VIS extern char inbase[32]; extern qboolean fastvis; extern qboolean nosort; extern int testlevel; // RAD extern qboolean dumppatches; extern int numbounce; extern qboolean extrasamples; extern float subdiv; extern float lightscale; extern float direct_scale; extern float entity_scale; extern qboolean nopvs; extern float ambient; extern float maxlight; void InitPaths( int *argc, char **argv ); /* Random() returns a pseudorandom number between 0 and 1 */ /* vec_t Random( void ) { return (vec_t) rand() / RAND_MAX; } */ /* ExitQ2Map() cleanup routine */ /* static void ExitQ2Map( void ) { BSPFilesCleanup(); if( mapDrawSurfs != NULL ) free( mapDrawSurfs ); } */ /* BSPInfo() emits statistics about the bsp file */ int BSPInfo() { char source[ 1024 ], ext[ 64 ]; int size; FILE *f; Sys_Printf ("\n----- INFO ----\n\n"); /* dummy check */ if( mapname == NULL ) { Sys_Printf( "No files to dump info for.\n"); return -1; } /* enable info mode */ //infoMode = qtrue; /* mangle filename and get size */ strcpy( source, mapname ); ExtractFileExtension( source, ext ); if( !Q_stricmp( ext, "map" ) ) StripExtension( source ); DefaultExtension( source, ".bsp" ); f = fopen( source, "rb" ); if( f ) { size = Q_filelength (f); fclose( f ); } else size = 0; /* load the bsp file and print lump sizes */ Sys_Printf( "Map: %s\n\n", source ); Sys_Printf( "-----------------------------------------------------\n" ); LoadBSPFile( source ); PrintBSPFileSizes(); Sys_Printf( "-----------------------------------------------------\n" ); /* print sizes */ Sys_Printf( "Total: %d B = %.3f kB = %.3f MB\n", size, size / 1024.0, size / (1024.0 * 1024.0) ); Sys_Printf( "-----------------------------------------------------\n" ); /* return count */ return 0; } /* ScaleBSPMain() amaze and confuse your enemies with wierd scaled maps! */ /* int ScaleBSPMain( int argc, char **argv ) { int i; float f, scale; vec3_t vec; char str[ 1024 ]; // arg checking if( argc < 2 ) { Sys_Printf( "Usage: q3map -scale [-v] \n" ); return 0; } // get scale scale = atof( argv[ argc - 2 ] ); if( scale == 0.0f ) { Sys_Printf( "Usage: q3map -scale [-v] \n" ); Sys_Printf( "Non-zero scale value required.\n" ); return 0; } // do some path mangling strcpy( source, ExpandArg( argv[ argc - 1 ] ) ); StripExtension( source ); DefaultExtension( source, ".bsp" ); // load the bsp Sys_Printf( "Loading %s\n", source ); LoadBSPFile( source ); ParseEntities(); // note it Sys_Printf( "--- ScaleBSP ---\n" ); Sys_FPrintf( SYS_VRB, "%9d entities\n", numEntities ); // scale entity keys for( i = 0; i < numBSPEntities && i < numEntities; i++ ) { // scale origin GetVectorForKey( &entities[ i ], "origin", vec ); if( (vec[ 0 ] + vec[ 1 ] + vec[ 2 ]) ) { VectorScale( vec, scale, vec ); sprintf( str, "%f %f %f", vec[ 0 ], vec[ 1 ], vec[ 2 ] ); SetKeyValue( &entities[ i ], "origin", str ); } // scale door lip f = FloatForKey( &entities[ i ], "lip" ); if( f ) { f *= scale; sprintf( str, "%f", f ); SetKeyValue( &entities[ i ], "lip", str ); } } // scale models for( i = 0; i < numBSPModels; i++ ) { VectorScale( bspModels[ i ].mins, scale, bspModels[ i ].mins ); VectorScale( bspModels[ i ].maxs, scale, bspModels[ i ].maxs ); } // scale nodes for( i = 0; i < numBSPNodes; i++ ) { VectorScale( bspNodes[ i ].mins, scale, bspNodes[ i ].mins ); VectorScale( bspNodes[ i ].maxs, scale, bspNodes[ i ].maxs ); } // scale leafs for( i = 0; i < numBSPLeafs; i++ ) { VectorScale( bspLeafs[ i ].mins, scale, bspLeafs[ i ].mins ); VectorScale( bspLeafs[ i ].maxs, scale, bspLeafs[ i ].maxs ); } // scale drawverts for( i = 0; i < numBSPDrawVerts; i++ ) VectorScale( bspDrawVerts[ i ].xyz, scale, bspDrawVerts[ i ].xyz ); // scale planes for( i = 0; i < numBSPPlanes; i++ ) bspPlanes[ i ].dist *= scale; // scale gridsize GetVectorForKey( &entities[ 0 ], "gridsize", vec ); if( (vec[ 0 ] + vec[ 1 ] + vec[ 2 ]) == 0.0f ) VectorCopy( gridSize, vec ); VectorScale( vec, scale, vec ); sprintf( str, "%f %f %f", vec[ 0 ], vec[ 1 ], vec[ 2 ] ); SetKeyValue( &entities[ 0 ], "gridsize", str ); // write the bsp UnparseEntities(); StripExtension( source ); DefaultExtension( source, "_s.bsp" ); Sys_Printf( "Writing %s\n", source ); WriteBSPFile( source ); // return to sender return 0; } */ /* ConvertBSPMain() main argument processing function for bsp conversion */ /* int ConvertBSPMain( int argc, char **argv ) { int i; int (*convertFunc)( char * ); // set default convertFunc = ConvertBSPToASE; // arg checking if( argc < 1 ) { Sys_Printf( "Usage: q3map -scale [-v] \n" ); return 0; } // process arguments for( i = 1; i < (argc - 1); i++ ) { // -format map|ase|... if( !strcmp( argv[ i ], "-format" ) ) { i++; if( !Q_stricmp( argv[ i ], "ase" ) ) convertFunc = ConvertBSPToASE; else if( !Q_stricmp( argv[ i ], "map" ) ) convertFunc = ConvertBSPToMap; else Sys_Printf( "Unknown conversion format \"%s\". Defaulting to ASE.\n", argv[ i ] ); } } // clean up map name strcpy( source, ExpandArg( argv[ i ] ) ); StripExtension( source ); DefaultExtension( source, ".bsp" ); LoadShaderInfo(); Sys_Printf( "Loading %s\n", source ); // ydnar: load surface file //% LoadSurfaceExtraFile( source ); LoadBSPFile( source ); // parse bsp entities ParseEntities(); // convert return convertFunc( source ); } */ int Check_BSP_Options( int argc, char **argv ) { int i; for (i=1 ; i 59 ) Sys_Printf("%d Minutes ", total_time/60 ); Sys_Printf( "%d Seconds\n", total_time%60 ); /* shut down connection */ Broadcast_Shutdown(); /* return any error code */ return r; }