/* ============ EndBSPFile ============ */ void EndBSPFile( void ){ char path[1024]; #if 0 int len; byte *buf; #endif EmitBrushes(); EmitPlanes(); UnparseEntities(); // load the pop #if 0 sprintf( path, "%s/pics/pop.lmp", gamedir ); len = LoadFile( path, &buf ); memcpy( dpop, buf, sizeof( dpop ) ); free( buf ); #endif // write the map sprintf( path, "%s.bsp", source ); Sys_Printf( "Writing %s\n", path ); WriteBSPFile( path ); }
/** * @brief Finishes a new bsp and writes to disk * @sa BeginBSPFile */ void EndBSPFile (const char* filename) { EmitBrushes(); EmitPlanes(); UnparseEntities(); /* write the map */ Verb_Printf(VERB_LESS, "Writing %s\n", filename); WriteBSPFile(filename); }
/* ============ EndBSPFile ============ */ void EndBSPFile (void) { // Mark noshadow faces. MarkNoShadowFaces(); EmitBrushes (); EmitPlanes (); // stick flat normals at the verts SaveVertexNormals(); // Figure out lightmap extents for all faces. UpdateAllFaceLightmapExtents(); // Generate geometry and lightmap alpha for displacements. EmitDispLMAlphaAndNeighbors(); // Emit overlay data. Overlay_EmitOverlayFaces(); OverlayTransition_EmitOverlayFaces(); // phys collision needs dispinfo to operate (needs to generate phys collision for displacement surfs) EmitPhysCollision(); // We can't calculate this properly until vvis (since we need vis to do this), so we set // to zero everywhere by default. ClearDistToClosestWater(); // Emit static props found in the .vmf file EmitStaticProps(); // Place detail props found in .vmf and based on material properties EmitDetailObjects(); // Compute bounds after creating disp info because we need to reference it ComputeBoundsNoSkybox(); // Make sure that we have a water lod control eneity if we have water in the map. EnsurePresenceOfWaterLODControlEntity(); // Doing this here because stuff about may filter out entities UnparseEntities (); // remove unused texinfos CompactTexinfos(); // Figure out which faces want macro textures. DiscoverMacroTextures(); char fileName[1024]; V_strncpy( fileName, source, sizeof( fileName ) ); V_DefaultExtension( fileName, ".bsp", sizeof( fileName ) ); Msg ("Writing %s\n", fileName); WriteBSPFile (fileName); }
/* ============ EndBSPFile ============ */ void EndBSPFile( void ) { char path[1024]; EmitPlanes (); UnparseEntities (); // write the map sprintf (path, "%s.bsp", source); _printf ("Writing %s\n", path); WriteBSPFile (path); }
/* * @brief */ void EndBSPFile(void) { EmitBrushes(); EmitPlanes(); EmitAreaPortals(); UnparseEntities(); // now that the verts have been resolved, align the normals count d_bsp.num_normals = d_bsp.num_vertexes; // write the map Com_Verbose("Writing %s\n", bsp_name); WriteBSPFile(bsp_name); }
void EndBSPFile( void ){ char path[ 1024 ]; EmitPlanes(); numBSPEntities = numEntities; UnparseEntities(); /* write the surface extra file */ WriteSurfaceExtraFile( source ); /* write the bsp */ sprintf( path, "%s.bsp", source ); Sys_Printf( "Writing %s\n", path ); WriteBSPFile( path ); }
/* ============ EndBSPFile ============ */ void EndBSPFile( void ) { #if 0 char path[1024]; int len; byte *buf; #endif EmitBrushes(); EmitPlanes(); Q2_UnparseEntities(); // load the pop #if 0 sprintf( path, "%s/pics/pop.lmp", gamedir ); len = LoadFile( path, &buf ); memcpy( dpop, buf, sizeof( dpop ) ); FreeMemory( buf ); #endif }
void EndBSPFile( qboolean do_write ){ char path[ 1024 ]; Sys_FPrintf( SYS_VRB, "--- EndBSPFile ---\n" ); EmitPlanes(); numBSPEntities = numEntities; UnparseEntities(); if ( do_write ) { /* write the surface extra file */ WriteSurfaceExtraFile( source ); /* write the bsp */ sprintf( path, "%s.bsp", source ); Sys_Printf( "Writing %s\n", path ); WriteBSPFile( path ); } }
void EndBSPFile( void ){ char path[ 1024 ]; Sys_FPrintf( SYS_VRB, "--- EndBSPFile ---\n" ); EmitPlanes(); numBSPEntities = numEntities; UnparseEntities(); /* write the surface extra file */ WriteSurfaceExtraFile( source ); #ifdef SMOKINGUNS //only create tex file if it is the first compile WriteTexFile (source); #endif /* write the bsp */ sprintf( path, "%s.bsp", source ); Sys_Printf( "Writing %s\n", path ); WriteBSPFile( path ); }
/** * @brief Calculates the routing of a map * @sa CheckUnit * @sa CheckConnections * @sa ProcessWorldModel */ void DoRouting (void) { int i; byte* data; vec3_t mins, maxs; pos3_t pos; /* Turn on trace debugging if requested. */ if (config.generateDebugTrace) debugTrace = true; /* Record the current mapTiles[0] state so we can remove all CLIPS when done. */ PushInfo(); /* build tracing structure */ EmitBrushes(); EmitPlanes(); /** This is needed for tracing to work!!! */ /** @note LEVEL_TRACING is not an actual level */ MakeTracingNodes(LEVEL_ACTORCLIP + 1); /* Reset the whole block of map data to 0 */ Nmap.init(); /* get world bounds for optimizing */ RT_GetMapSize(&mapTiles, mins, maxs); /* Com_Printf("Vectors: (%f, %f, %f) to (%f, %f, %f)\n", mins[0], mins[1], mins[2], maxs[0], maxs[1], maxs[2]); */ VecToPos(mins, wpMins); VecToPos(maxs, wpMaxs); /* Verify the world extents are not lopsided. */ assert(wpMins[0] <= wpMaxs[0]); assert(wpMins[1] <= wpMaxs[1]); assert(wpMins[2] <= wpMaxs[2]); /* scan area heights */ RunSingleThreadOn(CheckUnitThread, PATHFINDING_WIDTH * PATHFINDING_WIDTH * ACTOR_MAX_SIZE, config.verbosity >= VERB_NORMAL, "UNITCHECK"); /* scan connections */ RunSingleThreadOn(CheckConnectionsThread, PATHFINDING_WIDTH * PATHFINDING_WIDTH * (CORE_DIRECTIONS / (1 + RT_IS_BIDIRECTIONAL)) * (ACTOR_MAX_SIZE), config.verbosity >= VERB_NORMAL, "CONNCHECK"); /* Try to shrink the world bounds along the x and y coordinates */ for (i = 0; i < 2; i++) { /* for x and y, but not z */ int j = i ^ 1; /* if i points to x, j points to y and vice versa */ /* Increase the mins */ while (wpMaxs[j] > wpMins[j]) { VectorSet(pos, wpMins[0], wpMins[1], wpMaxs[2]); for (pos[i] = wpMins[i]; pos[i] <= wpMaxs[i]; pos[i]++) { /* for all cells in an x or y row */ if (Nmap.getFloor(1, pos[0], pos[1], wpMaxs[2]) + wpMaxs[2] * CELL_HEIGHT != -1) /* no floor ? */ break; } if (pos[i] <= wpMaxs[i]) /* found a floor before the end of the row ? */ break; /* break while */ wpMins[j]++; /* if it was an x-row, increase y-value of mins and vice versa */ } /* Decrease the maxs */ while (wpMaxs[j] > wpMins[j]) { VectorCopy(wpMaxs, pos); for (pos[i] = wpMins[i]; pos[i] <= wpMaxs[i]; pos[i]++) { if (Nmap.getFloor(1, pos[0], pos[1], wpMaxs[2]) + wpMaxs[2] * CELL_HEIGHT != -1) break; } if (pos[i] <= wpMaxs[i]) break; wpMaxs[j]--; } } /* Output the floor trace file if set */ if (config.generateTraceFile) { RT_WriteCSVFiles(Nmap, baseFilename, wpMins, wpMaxs); } /* store the data */ data = curTile->routedata; for (i = 0; i < 3; i++) wpMins[i] = LittleLong(wpMins[i]); data = CompressRouting((byte*)wpMins, data, sizeof(wpMins)); for (i = 0; i < 3; i++) wpMaxs[i] = LittleLong(wpMaxs[i]); data = CompressRouting((byte*)wpMaxs, data, sizeof(wpMaxs)); data = CompressRouting((byte*)&Nmap, data, sizeof(Nmap)); curTile->routedatasize = data - curTile->routedata; /* Ensure that we did not exceed our allotment of memory for this data. */ assert(curTile->routedatasize <= MAX_MAP_ROUTING); /* Remove the CLIPS fom the tracing structure by resetting it. */ PopInfo(); }
int main (int argc, char **argv) { int i, j; int hull; entity_t *ent; char source[1024]; char name[1024]; double start, end; printf( "qcsg.exe v2.8 (%s)\n", __DATE__ ); printf ("---- qcsg ----\n" ); for (i=1 ; i<argc ; i++) { if (!strcmp(argv[i],"-threads")) { numthreads = atoi (argv[i+1]); i++; } else if (!strcmp(argv[i],"-glview")) { glview = true; } else if (!strcmp(argv[i], "-v")) { printf ("verbose = true\n"); verbose = true; } else if (!strcmp(argv[i], "-draw")) { printf ("drawflag = true\n"); drawflag = true; } else if (!strcmp(argv[i], "-noclip")) { printf ("noclip = true\n"); noclip = true; } else if (!strcmp(argv[i], "-onlyents")) { printf ("onlyents = true\n"); onlyents = true; } else if (!strcmp(argv[i], "-nowadtextures")) { printf ("wadtextures = false\n"); wadtextures = false; } else if (!strcmp(argv[i], "-wadinclude")) { pszWadInclude[nWadInclude++] = strdup( argv[i + 1] ); i++; } else if( !strcmp( argv[ i ], "-proj" ) ) { strcpy( qproject, argv[ i + 1 ] ); i++; } else if (!strcmp(argv[i], "-hullfile")) { hullfile = true; strcpy( qhullfile, argv[i + 1] ); i++; } else if (argv[i][0] == '-') Error ("Unknown option \"%s\"", argv[i]); else break; } if (i != argc - 1) Error ("usage: qcsg [-nowadtextures] [-wadinclude <name>] [-draw] [-glview] [-noclip] [-onlyents] [-proj <name>] [-threads #] [-v] [-hullfile <name>] mapfile"); SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL); start = I_FloatTime (); CheckHullFile( hullfile, qhullfile ); ThreadSetDefault (); SetQdirFromPath (argv[i]); strcpy (source, ExpandArg (argv[i])); COM_FixSlashes(source); StripExtension (source); strcpy (name, ExpandArg (argv[i])); DefaultExtension (name, ".map"); // might be .reg // // if onlyents, just grab the entites and resave // if (onlyents && !glview) { char out[1024]; int old_entities; sprintf (out, "%s.bsp", source); LoadBSPFile (out); // Get the new entity data from the map file LoadMapFile (name); // Write it all back out again. WriteBSP (source); end = I_FloatTime (); printf ("%5.0f seconds elapsed\n", end-start); return 0; } // // start from scratch // LoadMapFile (name); RunThreadsOnIndividual (nummapbrushes, true, CreateBrush); BoundWorld (); qprintf ("%5i map planes\n", nummapplanes); for (i=0 ; i<NUM_HULLS ; i++) { char name[1024]; if (glview) sprintf (name, "%s.gl%i",source, i); else sprintf (name, "%s.p%i",source, i); out[i] = fopen (name, "w"); if (!out[i]) Error ("Couldn't open %s",name); } ProcessModels (); qprintf ("%5i csg faces\n", c_csgfaces); qprintf ("%5i used faces\n", c_outfaces); qprintf ("%5i tiny faces\n", c_tiny); qprintf ("%5i tiny clips\n", c_tiny_clip); for (i=0 ; i<NUM_HULLS ; i++) fclose (out[i]); if (!glview) { EmitPlanes (); WriteBSP (source); } end = I_FloatTime (); printf ("%5.0f seconds elapsed\n", end-start); return 0; }