mp = mapplanes;
for( i = 0; i < nummapplanes; i++, mp++ )
{
+ AUTOEXPAND_BY_REALLOC_BSP(Planes, 1024);
bp = &bspPlanes[ numBSPPlanes ];
VectorCopy( mp->normal, bp->normal );
bp->dist = mp->dist;
int EmitDrawNode_r( node_t *node )
{
bspNode_t *n;
- int i;
+ int i, n0;
/* check for leafnode */
/* emit a node */
AUTOEXPAND_BY_REALLOC_BSP(Nodes, 1024);
- n = &bspNodes[ numBSPNodes ];
+ n0 = numBSPNodes;
+ n = &bspNodes[ n0 ];
numBSPNodes++;
VectorCopy (node->mins, n->mins);
{
n->children[i] = numBSPNodes;
EmitDrawNode_r (node->children[i]);
+ // n may have become invalid here, so...
+ n = &bspNodes[ n0 ];
}
}
void SetLightStyles( void )
{
int i, j, style, numStyles;
- qboolean keepLights;
const char *t;
entity_t *e;
epair_t *ep, *next;
char value[ 10 ];
char lightTargets[ MAX_SWITCHED_LIGHTS ][ 64 ];
int lightStyles[ MAX_SWITCHED_LIGHTS ];
-
-
+
+ /* -keeplights option: force lights to be kept and ignore what the map file says */
+ if (keepLights)
+ SetKeyValue(&entities[0], "_keepLights", "1");
+
/* ydnar: determine if we keep lights in the bsp */
- t = ValueForKey( &entities[ 0 ], "_keepLights" );
- keepLights = (t[ 0 ] == '1') ? qtrue : qfalse;
+ if (KeyExists(&entities[ 0 ], "_keepLights") == qtrue)
+ {
+ t = ValueForKey( &entities[ 0 ], "_keepLights" );
+ keepLights = (t[ 0 ] == '1') ? qtrue : qfalse;
+ }
/* any light that is controlled (has a targetname) must have a unique style number generated for it */
numStyles = 0;
/* ydnar: gs mods: set the first 6 drawindexes to 0 1 2 2 1 3 for triangles and quads */
numBSPDrawIndexes = 6;
+ AUTOEXPAND_BY_REALLOC_BSP(DrawIndexes, 1024);
bspDrawIndexes[ 0 ] = 0;
bspDrawIndexes[ 1 ] = 1;
bspDrawIndexes[ 2 ] = 2;
finishes a new bsp and writes to disk
*/
-void EndBSPFile( void )
+void EndBSPFile(qboolean do_write)
{
char path[ 1024 ];
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 );
+ 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 );
+ }
}