diff --git a/tools/quake3/q3map2/map.cpp b/tools/quake3/q3map2/map.cpp index 15e2793a..756b34fb 100644 --- a/tools/quake3/q3map2/map.cpp +++ b/tools/quake3/q3map2/map.cpp @@ -787,11 +787,11 @@ static void FinishBrush( bool noCollapseGroups, entity_t& mapEnt ){ after the entire entity is parsed, the planenums and texinfos will be adjusted for the origin brush */ if ( buildBrush.compileFlags & C_ORIGIN ) { Sys_Printf( "Entity %i (%s), Brush %i: origin brush detected\n", - mapEnt.mapEntityNum, mapEnt.classname(), entitySourceBrushes ); + mapEnt.mapEntityNum, mapEnt.classname(), buildBrush.brushNum ); if ( entities.size() == 1 ) { Sys_FPrintf( SYS_WRN, "Entity %i, Brush %i: origin brushes not allowed in world\n", - mapEnt.mapEntityNum, entitySourceBrushes ); + mapEnt.mapEntityNum, buildBrush.brushNum ); return; } @@ -804,7 +804,7 @@ static void FinishBrush( bool noCollapseGroups, entity_t& mapEnt ){ /* determine if the brush is an area portal */ if ( buildBrush.compileFlags & C_AREAPORTAL ) { if ( entities.size() != 1 ) { - Sys_FPrintf( SYS_WRN, "Entity %i (%s), Brush %i: areaportals only allowed in world\n", mapEnt.mapEntityNum, mapEnt.classname(), entitySourceBrushes ); + Sys_FPrintf( SYS_WRN, "Entity %i (%s), Brush %i: areaportals only allowed in world\n", mapEnt.mapEntityNum, mapEnt.classname(), buildBrush.brushNum ); return; } } @@ -1159,7 +1159,7 @@ static bool RemoveDuplicateBrushPlanes( brush_t& b ){ parses a brush out of a map file and sets it up */ -static void ParseBrush( bool onlyLights, bool noCollapseGroups, entity_t& mapEnt ){ +static void ParseBrush( bool onlyLights, bool noCollapseGroups, entity_t& mapEnt, int mapPrimitiveNum ){ /* parse the brush out of the map */ ParseRawBrush( onlyLights ); @@ -1173,7 +1173,7 @@ static void ParseBrush( bool onlyLights, bool noCollapseGroups, entity_t& mapEnt buildBrush.portalareas[ 1 ] = -1; /* set map entity and brush numbering */ buildBrush.entityNum = mapEnt.mapEntityNum; - buildBrush.brushNum = entitySourceBrushes; + buildBrush.brushNum = mapPrimitiveNum; /* if there are mirrored planes, the entire brush is invalid */ if ( !RemoveDuplicateBrushPlanes( buildBrush ) ) { @@ -1466,7 +1466,7 @@ static void LoadEntityIndexMap( entity_t& e ){ parses a single entity out of a map file */ -static bool ParseMapEntity( bool onlyLights, bool noCollapseGroups ){ +static bool ParseMapEntity( bool onlyLights, bool noCollapseGroups, int mapEntityNum ){ /* eof check */ if ( !GetToken( true ) ) { return false; @@ -1481,11 +1481,11 @@ static bool ParseMapEntity( bool onlyLights, bool noCollapseGroups ){ } /* setup */ - entitySourceBrushes = 0; entity_t& mapEnt = entities.emplace_back(); + int mapPrimitiveNum = 0; /* track .map file numbering of primitives inside an entity */ /* ydnar: true entity numbering */ - mapEnt.mapEntityNum = numMapEntities++; + mapEnt.mapEntityNum = mapEntityNum; /* loop */ while ( 1 ) @@ -1510,7 +1510,7 @@ static bool ParseMapEntity( bool onlyLights, bool noCollapseGroups ){ /* check */ if ( strEqual( token, "patchDef2" ) ) { ++c_patches; - ParsePatch( onlyLights, mapEnt ); + ParsePatch( onlyLights, mapEnt, mapPrimitiveNum ); } else if ( strEqual( token, "terrainDef" ) ) { //% ParseTerrain(); @@ -1521,15 +1521,15 @@ static bool ParseMapEntity( bool onlyLights, bool noCollapseGroups ){ Sys_FPrintf( SYS_VRB, "detected brushType = BRUSH PRIMITIVES\n" ); g_brushType = EBrushType::Bp; } - ParseBrush( onlyLights, noCollapseGroups, mapEnt ); + ParseBrush( onlyLights, noCollapseGroups, mapEnt, mapPrimitiveNum ); } else { /* AP or 220 */ UnGetToken(); // ( - ParseBrush( onlyLights, noCollapseGroups, mapEnt ); + ParseBrush( onlyLights, noCollapseGroups, mapEnt, mapPrimitiveNum ); } - entitySourceBrushes++; + ++mapPrimitiveNum; } else { @@ -1680,7 +1680,8 @@ void LoadMapFile( const char *filename, bool onlyLights, bool noCollapseGroups ) buildBrush.sides.reserve( MAX_BUILD_SIDES ); /* parse the map file */ - while ( ParseMapEntity( onlyLights, noCollapseGroups ) ){}; + int mapEntityNum = 0; /* track .map file entities numbering */ + while ( ParseMapEntity( onlyLights, noCollapseGroups, mapEntityNum++ ) ){}; /* light loading */ if ( onlyLights ) { diff --git a/tools/quake3/q3map2/patch.cpp b/tools/quake3/q3map2/patch.cpp index ef60c699..0f32967a 100644 --- a/tools/quake3/q3map2/patch.cpp +++ b/tools/quake3/q3map2/patch.cpp @@ -194,7 +194,7 @@ static void ExpandMaxIterations( int *maxIterations, int maxError, const Vector3 creates a mapDrawSurface_t from the patch text */ -void ParsePatch( bool onlyLights, entity_t& mapEnt ){ +void ParsePatch( bool onlyLights, entity_t& mapEnt, int mapPrimitiveNum ){ float info[ 5 ]; mesh_t m; bspDrawVert_t *verts; @@ -292,7 +292,7 @@ void ParsePatch( bool onlyLights, entity_t& mapEnt ){ /* warn and select degenerate patch */ if ( degenerate ) { - xml_Select( "degenerate patch", mapEnt.mapEntityNum, entitySourceBrushes, false ); + xml_Select( "degenerate patch", mapEnt.mapEntityNum, mapPrimitiveNum, false ); free( m.verts ); return; } @@ -316,7 +316,7 @@ void ParsePatch( bool onlyLights, entity_t& mapEnt ){ /* ydnar: add entity/brush numbering */ pm->entityNum = mapEnt.mapEntityNum; - pm->brushNum = entitySourceBrushes; + pm->brushNum = mapPrimitiveNum; /* set shader */ pm->shaderInfo = ShaderInfoForShader( shader ); diff --git a/tools/quake3/q3map2/q3map2.h b/tools/quake3/q3map2/q3map2.h index eb53e9b4..0a6f579c 100644 --- a/tools/quake3/q3map2/q3map2.h +++ b/tools/quake3/q3map2/q3map2.h @@ -873,7 +873,8 @@ struct entity_t brushlist_t brushes; std::vector colorModBrushes; parseMesh_t *patches; - int mapEntityNum, firstDrawSurf; + int mapEntityNum; /* .map file entities numbering */ + int firstDrawSurf; int firstBrush, numBrushes; /* only valid during BSP compile */ std::list epairs; Vector3 originbrush_origin{ 0 }; @@ -1498,7 +1499,7 @@ inline node_t *AllocNode(){ return new node_t(); } /* patch.c */ -void ParsePatch( bool onlyLights, entity_t& mapEnt ); +void ParsePatch( bool onlyLights, entity_t& mapEnt, int mapPrimitiveNum ); void PatchMapDrawSurfs( entity_t *e ); @@ -1788,8 +1789,6 @@ inline double distanceEpsilon = 0.01; /* bsp */ -inline int numMapEntities; - inline int blockSize[ 3 ] = { 1024, 1024, 1024 }; /* should be the same as in radiant */ inline CopiedString g_enginePath; @@ -1802,8 +1801,6 @@ inline int sampleScale; /* vort inline std::size_t mapEntityNum; -inline int entitySourceBrushes; - inline std::vector mapplanes; /* mapplanes[ num ^ 1 ] will always be the mirror or mapplanes[ num ] */ /* nummapplanes will always be even */ inline MinMax g_mapMinmax;