/* ================= LoadMapFile loads a map file into a list of entities ================= */ void LoadMapFile( const char *filename, bool onlyLights ) { brush_t *b; int oldNumEntities, numMapBrushes; MsgDev( D_NOTE, "--- LoadMapFile ---\n" ); Msg( "Loading %s\n", filename ); mapfile = Com_OpenScript( filename, NULL, 0 ); if( !mapfile ) Sys_Break( "can't loading map file %s\n", filename ); if( onlyLights ) oldNumEntities = numEntities; else numEntities = 0; c_detail = 0; numMapDrawSurfs = 0; g_bBrushPrimit = BRUSH_UNKNOWN; // allocate a very large temporary brush for building the brushes as they are loaded buildBrush = AllocBrush( MAX_BUILD_SIDES ); while( ParseMapEntity( onlyLights )); Com_CloseScript( mapfile ); if( onlyLights ) { MsgDev( D_INFO, "%9d light entities\n", numEntities - oldNumEntities ); } else { ClearBounds( mapMins, mapMaxs ); for( b = entities[0].brushes; b; b = b->next ) { AddPointToBounds( b->mins, mapMins, mapMaxs ); AddPointToBounds( b->maxs, mapMins, mapMaxs ); } VectorSubtract( mapMaxs, mapMins, mapSize ); numMapBrushes = CountBrushList( entities[0].brushes ); if(( float )c_detail / (float) numMapBrushes < 0.10f && numMapBrushes > 500 ) MsgDev( D_WARN, "Over 90 percent structural map detected. Compile time may be adversely affected.\n" ); MsgDev( D_NOTE, "%9d total world brushes\n", numMapBrushes ); MsgDev( D_NOTE, "%9d detail brushes\n", c_detail ); MsgDev( D_NOTE, "%9d patches\n", numMapPatches ); MsgDev( D_NOTE, "%9d boxbevels\n", c_boxbevels ); MsgDev( D_NOTE, "%9d edgebevels\n", c_edgebevels ); MsgDev( D_NOTE, "%9d entities\n", numEntities ); MsgDev( D_NOTE, "%9d planes\n", nummapplanes ); MsgDev( D_NOTE, "%9d areaportals\n", c_areaportals ); MsgDev( D_INFO, "World size: %5.0f, %5.0f, %5.0f\n", mapSize[0], mapSize[1], mapSize[2] ); // write bogus map if( fakemap ) WriteBSPBrushMap( "fakemap.map", entities[0].brushes ); } }
/* * @brief */ void LoadMapFile(const char *file_name) { int32_t subdivide; int32_t i; Com_Verbose("--- LoadMapFile ---\n"); LoadScriptFile(file_name); memset(map_brushes, 0, sizeof(map_brush_t) * MAX_BSP_BRUSHES); num_map_brushes = 0; memset(map_brush_sides, 0, sizeof(side_t) * MAX_BSP_SIDES); num_map_brush_sides = 0; memset(map_brush_textures, 0, sizeof(map_brush_texture_t) * MAX_BSP_SIDES); memset(map_planes, 0, sizeof(map_plane_t) * MAX_BSP_PLANES); num_map_planes = 0; num_entities = 0; while (ParseMapEntity()) { } subdivide = atoi(ValueForKey(&entities[0], "subdivide")); if (subdivide >= 256 && subdivide <= 2048) { Com_Verbose("Using subdivide %d from worldspawn.\n", subdivide); subdivide_size = subdivide; } ClearBounds(map_mins, map_maxs); for (i = 0; i < entities[0].num_brushes; i++) { if (map_brushes[i].mins[0] > MAX_WORLD_COORD) continue; // no valid points AddPointToBounds(map_brushes[i].mins, map_mins, map_maxs); AddPointToBounds(map_brushes[i].maxs, map_mins, map_maxs); } Com_Verbose("%5i brushes\n", num_map_brushes); Com_Verbose("%5i clip brushes\n", c_clip_brushes); Com_Verbose("%5i total sides\n", num_map_brush_sides); Com_Verbose("%5i box bevels\n", c_box_bevels); Com_Verbose("%5i edge bevels\n", c_edge_bevels); Com_Verbose("%5i entities\n", num_entities); Com_Verbose("%5i planes\n", num_map_planes); Com_Verbose("%5i area portals\n", c_area_portals); Com_Verbose("size: %5.0f,%5.0f,%5.0f to %5.0f,%5.0f,%5.0f\n", map_mins[0], map_mins[1], map_mins[2], map_maxs[0], map_maxs[1], map_maxs[2]); }
/* ================ LoadMapFile ================ */ void LoadMapFile (char *filename) { int i; qprintf ("--- LoadMapFile ---\n"); LoadScriptFile (filename); nummapbrushsides = 0; num_entities = 0; while (ParseMapEntity ()) { } ClearBounds (map_mins, map_maxs); for (i=0 ; i<entities[0].numbrushes ; i++) { if (mapbrushes[i].mins[0] > 4096) continue; // no valid points AddPointToBounds (mapbrushes[i].mins, map_mins, map_maxs); AddPointToBounds (mapbrushes[i].maxs, map_mins, map_maxs); } qprintf ("%5i brushes\n", nummapbrushes); qprintf ("%5i clipbrushes\n", c_clipbrushes); qprintf ("%5i total sides\n", nummapbrushsides); qprintf ("%5i boxbevels\n", c_boxbevels); qprintf ("%5i edgebevels\n", c_edgebevels); qprintf ("%5i entities\n", num_entities); qprintf ("%5i planes\n", nummapplanes); qprintf ("%5i areaportals\n", c_areaportals); qprintf ("size: %5.0f,%5.0f,%5.0f to %5.0f,%5.0f,%5.0f\n", map_mins[0],map_mins[1],map_mins[2], map_maxs[0],map_maxs[1],map_maxs[2]); // TestExpandBrushes (); }
/** * @sa WriteMapFile * @sa ParseMapEntity */ void LoadMapFile (const char* filename) { Verb_Printf(VERB_EXTRA, "--- LoadMapFile ---\n"); LoadScriptFile(filename); OBJZERO(mapbrushes); nummapbrushes = 0; OBJZERO(brushsides); nummapbrushsides = 0; OBJZERO(side_brushtextures); OBJZERO(mapplanes); num_entities = 0; /* Create this shortcut to mapTiles[0] */ curTile = &mapTiles.mapTiles[0]; /* Set the number of tiles to 1. This is fix for ufo2map right now. */ mapTiles.numTiles = 1; char entityString[MAX_TOKEN_CHARS]; const char* ump = GetUMPName(filename); if (ump != nullptr) ParseUMP(ump, entityString, false); while (ParseMapEntity(filename, entityString)); int subdivide = atoi(ValueForKey(&entities[0], "subdivide")); if (subdivide >= 256 && subdivide <= 2048) { Verb_Printf(VERB_EXTRA, "Using subdivide %d from worldspawn.\n", subdivide); config.subdivideSize = subdivide; } if (footstepsCnt) Com_Printf("Generated footstep file with %i entries\n", footstepsCnt); if (materialsCnt) Com_Printf("Generated material file with %i entries\n", materialsCnt); vec3_t map_mins, map_maxs; ClearBounds(map_mins, map_maxs); for (int i = 0; i < entities[0].numbrushes; i++) { if (mapbrushes[i].mbBox.mins[0] > MAX_WORLD_WIDTH) continue; /* no valid points */ AddPointToBounds(mapbrushes[i].mbBox.mins, map_mins, map_maxs); AddPointToBounds(mapbrushes[i].mbBox.maxs, map_mins, map_maxs); } /* save a copy of the brushes */ memcpy(mapbrushes + nummapbrushes, mapbrushes, sizeof(mapbrush_t) * nummapbrushes); Verb_Printf(VERB_EXTRA, "%5i brushes\n", nummapbrushes); Verb_Printf(VERB_EXTRA, "%5i total sides\n", nummapbrushsides); Verb_Printf(VERB_EXTRA, "%5i boxbevels\n", c_boxbevels); Verb_Printf(VERB_EXTRA, "%5i edgebevels\n", c_edgebevels); Verb_Printf(VERB_EXTRA, "%5i entities\n", num_entities); Verb_Printf(VERB_EXTRA, "%5i planes\n", nummapplanes); Verb_Printf(VERB_EXTRA, "size: %5.0f,%5.0f,%5.0f to %5.0f,%5.0f,%5.0f\n", map_mins[0], map_mins[1], map_mins[2], map_maxs[0], map_maxs[1], map_maxs[2]); }