From 5aa744b026bde7ed504cbe775c05734a87ec140a Mon Sep 17 00:00:00 2001 From: "Timothee \"TTimo\" Besset" Date: Sat, 7 Sep 2013 17:39:31 -0500 Subject: [PATCH] misc fixes, reviewed the urt q3map2 code --- radiant/qe3.h | 8 - tools/urt/tools/quake3/q3map2/bsp.c | 4 - tools/urt/tools/quake3/q3map2/patch.patch | 1891 ----------------- tools/urt/tools/quake3/q3map2/q3map2.dsp | 379 ---- tools/urt/tools/quake3/q3map2/q3map2.dsw | 137 -- tools/urt/tools/quake3/q3map2/q3map2.h | 1 - tools/urt/tools/quake3/q3map2/q3map2.h.rej | 19 - tools/urt/tools/quake3/q3map2/q3map2.opt | Bin 98304 -> 0 bytes tools/urt/tools/quake3/q3map2/q3map2.plg | 86 - tools/urt/tools/quake3/q3map2/q3map2.sln | 190 -- tools/urt/tools/quake3/q3map2/q3map2.suo | Bin 100864 -> 0 bytes .../urt/tools/quake3/q3map2/q3map2.vcproj.rej | 17 - tools/urt/tools/quake3/q3map2/version.h | 4 - 13 files changed, 2736 deletions(-) delete mode 100644 tools/urt/tools/quake3/q3map2/patch.patch delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.dsp delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.dsw delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.h.rej delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.opt delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.plg delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.sln delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.suo delete mode 100644 tools/urt/tools/quake3/q3map2/q3map2.vcproj.rej delete mode 100644 tools/urt/tools/quake3/q3map2/version.h diff --git a/radiant/qe3.h b/radiant/qe3.h index 62f1a0e5..ed755385 100644 --- a/radiant/qe3.h +++ b/radiant/qe3.h @@ -848,21 +848,13 @@ extern void RunScriptByName( char*, bool ); extern void DoNewColor( int* i1, int* i2, int* i3 ); extern void UpdateSurfaceDialog(); extern void CSG_SplitBrushByFace( brush_t *in, face_t *f, brush_t **front, brush_t **back ); -//extern void HandlePopup(CWnd* pWindow, unsigned int uId); extern z_t z; extern void Select_Scale( float x, float y, float z ); extern void TextureAxisFromPlane( plane_t *pln, vec3_t xv, vec3_t yv ); -//extern void VectorRotate (vec3_t va, vec3_t vb, vec3_t out); -//extern void VectorRotate (vec3_t vIn, vec3_t vRotation, vec3_t vOrigin, vec3_t out); extern qboolean QE_SaveProject( const char* pProjectFile ); -//extern void NewBSP(char* pCommandLine, HWND); -//extern void NewVIS(char* pCommandLine, HWND); -//extern void NewRAD(char* pCommandLine, HWND); extern void RunTools( char* pCommandLine, GtkWidget* hwnd, const char* pPAKFile ); extern void Clamp( float& f, int nClamp ); extern void MemFile_fprintf( MemStream* pMemFile, const char* pText, ... ); -//extern void SaveWindowPlacement(HWND hwnd, const char* pName); -//extern bool LoadWindowPlacement(HWND hwnd, const char* pName); extern qboolean ConfirmModified( void ); extern void DoPatchInspector(); extern void TogglePatchInspector(); diff --git a/tools/urt/tools/quake3/q3map2/bsp.c b/tools/urt/tools/quake3/q3map2/bsp.c index bd064757..24c49420 100644 --- a/tools/urt/tools/quake3/q3map2/bsp.c +++ b/tools/urt/tools/quake3/q3map2/bsp.c @@ -751,10 +751,6 @@ int BSPMain( int argc, char **argv ){ Sys_Printf( "Creating meta surfaces from brush faces\n" ); meta = qtrue; } - else if ( !strcmp( argv[ i ], "-newbsp" ) ) { - Sys_Printf( "Using New BSP Generation Method\n" ); - newbsp = qtrue; - } else if ( !strcmp( argv[ i ], "-patchmeta" ) ) { Sys_Printf( "Creating meta surfaces from patches\n" ); patchMeta = qtrue; diff --git a/tools/urt/tools/quake3/q3map2/patch.patch b/tools/urt/tools/quake3/q3map2/patch.patch deleted file mode 100644 index 277608e6..00000000 --- a/tools/urt/tools/quake3/q3map2/patch.patch +++ /dev/null @@ -1,1891 +0,0 @@ -Index: tools/quake3/q3map2/writebsp.c -=================================================================== ---- tools/quake3/q3map2/writebsp.c (revision 158) -+++ tools/quake3/q3map2/writebsp.c (working copy) -@@ -136,7 +136,6 @@ - bspLeaf_t *leaf_p; - brush_t *b; - drawSurfRef_t *dsr; -- int i = 0; - - - /* check limits */ -Index: tools/quake3/q3map2/facebsp.c -=================================================================== ---- tools/quake3/q3map2/facebsp.c (revision 158) -+++ tools/quake3/q3map2/facebsp.c (working copy) -@@ -180,7 +180,7 @@ - - - c = 0; -- for( list; list != NULL; list = list->next ) -+ for( ; list != NULL; list = list->next ) - c++; - return c; - } -Index: tools/quake3/q3map2/light_ydnar.c -=================================================================== ---- tools/quake3/q3map2/light_ydnar.c (revision 158) -+++ tools/quake3/q3map2/light_ydnar.c (working copy) -@@ -49,6 +49,7 @@ - int i; - float max, gamma; - vec3_t sample; -+ float inv, dif; - - - /* ydnar: scaling necessary for simulating r_overbrightBits on external lightmaps */ -@@ -72,16 +73,51 @@ - /* gamma */ - sample[ i ] = pow( sample[ i ] / 255.0f, gamma ) * 255.0f; - } -+ -+ if (lightmapExposure == 1) -+ { -+ /* clamp with color normalization */ -+ max = sample[ 0 ]; -+ if( sample[ 1 ] > max ) -+ max = sample[ 1 ]; -+ if( sample[ 2 ] > max ) -+ max = sample[ 2 ]; -+ if( max > 255.0f ) -+ VectorScale( sample, (255.0f / max), sample ); -+ } -+ else -+ { -+ if (lightmapExposure==0) -+ { -+ lightmapExposure=1.0f; -+ } -+ inv=1.f/lightmapExposure; -+ //Exposure -+ -+ max = sample[ 0 ]; -+ if( sample[ 1 ] > max ) -+ max = sample[ 1 ]; -+ if( sample[ 2 ] > max ) -+ max = sample[ 2 ]; -+ -+ dif = (1- exp(-max * inv) ) * 255; -+ -+ if (max >0) -+ { -+ dif = dif / max; -+ } -+ else -+ { -+ dif = 0; -+ } -+ -+ for (i=0;i<3;i++) -+ { -+ sample[i]*=dif; -+ } -+ } -+ - -- /* clamp with color normalization */ -- max = sample[ 0 ]; -- if( sample[ 1 ] > max ) -- max = sample[ 1 ]; -- if( sample[ 2 ] > max ) -- max = sample[ 2 ]; -- if( max > 255.0f ) -- VectorScale( sample, (255.0f / max), sample ); -- - /* compensate for ingame overbrighting/bitshifting */ - VectorScale( sample, (1.0f / lightmapCompensate), sample ); - -@@ -384,7 +420,7 @@ - #define NUDGE 0.5f - #define BOGUS_NUDGE -99999.0f - --static int MapSingleLuxel( rawLightmap_t *lm, surfaceInfo_t *info, bspDrawVert_t *dv, vec4_t plane, float pass, vec3_t stv[ 3 ], vec3_t ttv[ 3 ] ) -+static int MapSingleLuxel( rawLightmap_t *lm, surfaceInfo_t *info, bspDrawVert_t *dv, vec4_t plane, float pass, vec3_t stv[ 3 ], vec3_t ttv[ 3 ], vec3_t worldverts[ 3 ] ) - { - int i, x, y, numClusters, *clusters, pointCluster, *cluster; - float *luxel, *origin, *normal, d, lightmapSampleOffset; -@@ -392,6 +428,12 @@ - vec3_t pNormal; - vec3_t vecs[ 3 ]; - vec3_t nudged; -+ vec3_t cverts[ 3 ]; -+ vec3_t temp; -+ vec4_t sideplane, hostplane; -+ vec3_t origintwo; -+ int j, next; -+ float e; - float *nudge; - static float nudges[][ 2 ] = - { -@@ -485,6 +527,51 @@ - /* non axial lightmap projection (explicit xyz) */ - else - VectorCopy( dv->xyz, origin ); -+ -+ ////////////////////// -+ //27's test to make sure samples stay within the triangle boundaries -+ //1) Test the sample origin to see if it lays on the wrong side of any edge (x/y) -+ //2) if it does, nudge it onto the correct side. -+ -+ if (worldverts!=NULL) -+ { -+ for (j=0;j<3;j++) -+ { -+ VectorCopy(worldverts[j],cverts[j]); -+ } -+ PlaneFromPoints(hostplane,cverts[0],cverts[1],cverts[2]); -+ -+ for (j=0;j<3;j++) -+ { -+ for (i=0;i<3;i++) -+ { -+ //build plane using 2 edges and a normal -+ next=(i+1)%3; -+ -+ VectorCopy(cverts[next],temp); -+ VectorAdd(temp,hostplane,temp); -+ PlaneFromPoints(sideplane,cverts[i],cverts[ next ], temp); -+ -+ //planetest sample point -+ e=DotProduct(origin,sideplane); -+ e=e-sideplane[3]; -+ if (e>0) -+ { -+ //we're bad. -+ //VectorClear(origin); -+ //Move the sample point back inside triangle bounds -+ origin[0]-=sideplane[0]*(e+1); -+ origin[1]-=sideplane[1]*(e+1); -+ origin[2]-=sideplane[2]*(e+1); -+#ifdef DEBUG_27_1 -+ VectorClear(origin); -+#endif -+ } -+ } -+ } -+ } -+ -+ //////////////////////// - - /* planar surfaces have precalculated lightmap vectors for nudging */ - if( lm->plane != NULL ) -@@ -516,8 +603,13 @@ - else - origin[ lm->axisNum ] += lightmapSampleOffset; - -+ VectorCopy(origin,origintwo); -+ origintwo[0]+=vecs[2][0]; -+ origintwo[1]+=vecs[2][1]; -+ origintwo[2]+=vecs[2][2]; -+ - /* get cluster */ -- pointCluster = ClusterForPointExtFilter( origin, LUXEL_EPSILON, numClusters, clusters ); -+ pointCluster = ClusterForPointExtFilter( origintwo, LUXEL_EPSILON, numClusters, clusters ); - - /* another retarded hack, storing nudge count in luxel[ 1 ] */ - luxel[ 1 ] = 0.0f; -@@ -533,14 +625,14 @@ - for( i = 0; i < 3; i++ ) - { - /* set nudged point*/ -- nudged[ i ] = origin[ i ] + (nudge[ 0 ] * vecs[ 0 ][ i ]) + (nudge[ 1 ] * vecs[ 1 ][ i ]); -+ nudged[ i ] = origintwo[ i ] + (nudge[ 0 ] * vecs[ 0 ][ i ]) + (nudge[ 1 ] * vecs[ 1 ][ i ]); - } - nudge += 2; - - /* get pvs cluster */ - pointCluster = ClusterForPointExtFilter( nudged, LUXEL_EPSILON, numClusters, clusters ); //% + 0.625 ); -- if( pointCluster >= 0 ) -- VectorCopy( nudged, origin ); -+ //if( pointCluster >= 0 ) -+ // VectorCopy( nudged, origin ); - luxel[ 1 ] += 1.0f; - } - } -@@ -550,8 +642,8 @@ - { - VectorMA( dv->xyz, lightmapSampleOffset, dv->normal, nudged ); - pointCluster = ClusterForPointExtFilter( nudged, LUXEL_EPSILON, numClusters, clusters ); -- if( pointCluster >= 0 ) -- VectorCopy( nudged, origin ); -+ //if( pointCluster >= 0 ) -+ // VectorCopy( nudged, origin ); - luxel[ 1 ] += 1.0f; - } - -@@ -597,7 +689,7 @@ - than the distance between two luxels (thanks jc :) - */ - --static void MapTriangle_r( rawLightmap_t *lm, surfaceInfo_t *info, bspDrawVert_t *dv[ 3 ], vec4_t plane, vec3_t stv[ 3 ], vec3_t ttv[ 3 ] ) -+static void MapTriangle_r( rawLightmap_t *lm, surfaceInfo_t *info, bspDrawVert_t *dv[ 3 ], vec4_t plane, vec3_t stv[ 3 ], vec3_t ttv[ 3 ], vec3_t worldverts[ 3 ] ) - { - bspDrawVert_t mid, *dv2[ 3 ]; - int max; -@@ -645,7 +737,7 @@ - - /* split the longest edge and map it */ - LerpDrawVert( dv[ max ], dv[ (max + 1) % 3 ], &mid ); -- MapSingleLuxel( lm, info, &mid, plane, 1, stv, ttv ); -+ MapSingleLuxel( lm, info, &mid, plane, 1, stv, ttv, worldverts ); - - /* push the point up a little bit to account for fp creep (fixme: revisit this) */ - //% VectorMA( mid.xyz, 2.0f, mid.normal, mid.xyz ); -@@ -653,12 +745,12 @@ - /* recurse to first triangle */ - VectorCopy( dv, dv2 ); - dv2[ max ] = ∣ -- MapTriangle_r( lm, info, dv2, plane, stv, ttv ); -+ MapTriangle_r( lm, info, dv2, plane, stv, ttv, worldverts ); - - /* recurse to second triangle */ - VectorCopy( dv, dv2 ); - dv2[ (max + 1) % 3 ] = ∣ -- MapTriangle_r( lm, info, dv2, plane, stv, ttv ); -+ MapTriangle_r( lm, info, dv2, plane, stv, ttv, worldverts ); - } - - -@@ -674,6 +766,7 @@ - int i; - vec4_t plane; - vec3_t *stv, *ttv, stvStatic[ 3 ], ttvStatic[ 3 ]; -+ vec3_t worldverts[ 3 ]; - - - /* get plane if possible */ -@@ -699,16 +792,20 @@ - ttv = NULL; - } - -+ VectorCopy( dv[ 0 ]->xyz, worldverts[ 0 ] ); -+ VectorCopy( dv[ 1 ]->xyz, worldverts[ 1 ] ); -+ VectorCopy( dv[ 2 ]->xyz, worldverts[ 2 ] ); -+ - /* map the vertexes */ -- MapSingleLuxel( lm, info, dv[ 0 ], plane, 1, stv, ttv ); -- MapSingleLuxel( lm, info, dv[ 1 ], plane, 1, stv, ttv ); -- MapSingleLuxel( lm, info, dv[ 2 ], plane, 1, stv, ttv ); -+ MapSingleLuxel( lm, info, dv[ 0 ], plane, 1, stv, ttv, worldverts ); -+ MapSingleLuxel( lm, info, dv[ 1 ], plane, 1, stv, ttv, worldverts ); -+ MapSingleLuxel( lm, info, dv[ 2 ], plane, 1, stv, ttv, worldverts ); - - /* 2002-11-20: prefer axial triangle edges */ - if( mapNonAxial ) - { - /* subdivide the triangle */ -- MapTriangle_r( lm, info, dv, plane, stv, ttv ); -+ MapTriangle_r( lm, info, dv, plane, stv, ttv, worldverts ); - return qtrue; - } - -@@ -730,7 +827,7 @@ - dv2[ 2 ] = dv[ (i + 1) % 3 ]; - - /* map the degenerate triangle */ -- MapTriangle_r( lm, info, dv2, plane, stv, ttv ); -+ MapTriangle_r( lm, info, dv2, plane, stv, ttv, worldverts ); - } - } - -@@ -792,8 +889,8 @@ - LerpDrawVert( dv[ max + 2 ], dv[ (max + 3) % 4 ], &mid[ 1 ] ); - - /* map the vertexes */ -- MapSingleLuxel( lm, info, &mid[ 0 ], plane, 1, stv, ttv ); -- MapSingleLuxel( lm, info, &mid[ 1 ], plane, 1, stv, ttv ); -+ MapSingleLuxel( lm, info, &mid[ 0 ], plane, 1, stv, ttv, NULL ); -+ MapSingleLuxel( lm, info, &mid[ 1 ], plane, 1, stv, ttv, NULL ); - - /* 0 and 2 */ - if( max == 0 ) -@@ -878,10 +975,10 @@ - } - - /* map the vertexes */ -- MapSingleLuxel( lm, info, dv[ 0 ], plane, 1, stv, ttv ); -- MapSingleLuxel( lm, info, dv[ 1 ], plane, 1, stv, ttv ); -- MapSingleLuxel( lm, info, dv[ 2 ], plane, 1, stv, ttv ); -- MapSingleLuxel( lm, info, dv[ 3 ], plane, 1, stv, ttv ); -+ MapSingleLuxel( lm, info, dv[ 0 ], plane, 1, stv, ttv, NULL ); -+ MapSingleLuxel( lm, info, dv[ 1 ], plane, 1, stv, ttv, NULL ); -+ MapSingleLuxel( lm, info, dv[ 2 ], plane, 1, stv, ttv, NULL ); -+ MapSingleLuxel( lm, info, dv[ 3 ], plane, 1, stv, ttv, NULL ); - - /* subdivide the quad */ - MapQuad_r( lm, info, dv, plane, stv, ttv ); -@@ -1173,7 +1270,7 @@ - continue; - - /* map the fake vert */ -- MapSingleLuxel( lm, NULL, &fake, lm->plane, pass, NULL, NULL ); -+ MapSingleLuxel( lm, NULL, &fake, lm->plane, pass, NULL, NULL, NULL ); - } - } - } -@@ -1767,6 +1864,8 @@ - float tests[ 4 ][ 2 ] = { { 0.0f, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } }; - trace_t trace; - float stackLightLuxels[ STACK_LL_SIZE ]; -+ vec3_t flood; -+ float *floodlight; - - - /* bail if this number exceeds the number of raw lightmaps */ -@@ -1963,22 +2062,32 @@ - deluxel = SUPER_DELUXEL( x, y ); - origin = SUPER_ORIGIN( x, y ); - normal = SUPER_NORMAL( x, y ); -- -- /* set contribution count */ -- lightLuxel[ 3 ] = 1.0f; -- -- /* setup trace */ -- trace.cluster = *cluster; -- VectorCopy( origin, trace.origin ); -- VectorCopy( normal, trace.normal ); -- -- /* get light for this sample */ -- LightContributionToSample( &trace ); -- VectorCopy( trace.color, lightLuxel ); -- -- /* add to count */ -- if( trace.color[ 0 ] || trace.color[ 1 ] || trace.color[ 2 ] ) -+ -+ ////////// 27's temp hack for testing edge clipping //// -+ if( origin[0]==0 && origin[1]==0 && origin[2]==0 ) -+ { -+ lightLuxel[ 1 ] = 255; -+ lightLuxel[ 3 ] = 1.0f; - totalLighted++; -+ } -+ else -+ { -+ /* set contribution count */ -+ lightLuxel[ 3 ] = 1.0f; -+ -+ /* setup trace */ -+ trace.cluster = *cluster; -+ VectorCopy( origin, trace.origin ); -+ VectorCopy( normal, trace.normal ); -+ -+ /* get light for this sample */ -+ LightContributionToSample( &trace ); -+ VectorCopy( trace.color, lightLuxel ); -+ -+ /* add to count */ -+ if( trace.color[ 0 ] || trace.color[ 1 ] || trace.color[ 2 ] ) -+ totalLighted++; -+ } - - /* add to light direction map (fixme: use luxel normal as starting point for deluxel?) */ - if( deluxemap ) -@@ -2223,6 +2332,78 @@ - FreeTraceLights( &trace ); - - /* ----------------------------------------------------------------- -+ floodlight pass -+ ----------------------------------------------------------------- */ -+ -+ if( floodlighty ) -+ { -+ /* walk lightmaps */ -+ for( lightmapNum = 0; lightmapNum < MAX_LIGHTMAPS; lightmapNum++ ) -+ { -+ /* early out */ -+ if( lm->superLuxels[ lightmapNum ] == NULL ) -+ continue; -+ -+ /* apply floodlight to each luxel */ -+ for( y = 0; y < lm->sh; y++ ) -+ { -+ for( x = 0; x < lm->sw; x++ ) -+ { -+ /* get cluster */ -+ cluster = SUPER_CLUSTER( x, y ); -+ //% if( *cluster < 0 ) -+ //% continue; -+ -+ /* get particulars */ -+ luxel = SUPER_LUXEL( lightmapNum, x, y ); -+ floodlight = SUPER_FLOODLIGHT( x, y ); -+ -+ flood[0]=floodlightRGB[0]*floodlightIntensity; -+ flood[1]=floodlightRGB[1]*floodlightIntensity; -+ flood[2]=floodlightRGB[2]*floodlightIntensity; -+ -+ /* scale light value */ -+ VectorScale( flood, *floodlight, flood ); -+ luxel[0]+=flood[0]; -+ luxel[1]+=flood[1]; -+ luxel[2]+=flood[2]; -+ -+ if (luxel[3]==0) luxel[3]=1; -+ } -+ } -+ } -+ } -+ -+ if (debugnormals) -+ { -+ for( lightmapNum = 0; lightmapNum < MAX_LIGHTMAPS; lightmapNum++ ) -+ { -+ /* early out */ -+ if( lm->superLuxels[ lightmapNum ] == NULL ) -+ continue; -+ -+ for( y = 0; y < lm->sh; y++ ) -+ { -+ for( x = 0; x < lm->sw; x++ ) -+ { -+ /* get cluster */ -+ cluster = SUPER_CLUSTER( x, y ); -+ //% if( *cluster < 0 ) -+ //% continue; -+ -+ /* get particulars */ -+ luxel = SUPER_LUXEL( lightmapNum, x, y ); -+ normal = SUPER_NORMAL ( x, y ); -+ -+ luxel[0]=(normal[0]*127)+127; -+ luxel[1]=(normal[1]*127)+127; -+ luxel[2]=(normal[2]*127)+127; -+ } -+ } -+ } -+ } -+ -+ /* ----------------------------------------------------------------- - dirt pass - ----------------------------------------------------------------- */ - -@@ -3112,7 +3293,7 @@ - int i, x, y, z, x1, y1, z1; - light_t *light, *light2, **owner; - bspLeaf_t *leaf; -- vec3_t origin, dir, mins, maxs, nullVector = { 0, 0, 0 }; -+ vec3_t origin, dir, mins, maxs; - float radius, intensity; - light_t *buckets[ 256 ]; - -@@ -3587,7 +3768,320 @@ - CreateTraceLightsForBounds( mins, maxs, normal, info->numSurfaceClusters, &surfaceClusters[ info->firstSurfaceCluster ], LIGHT_SURFACES, trace ); - } - -+///////////////////////////////////////////////////////////// - -+#define FLOODLIGHT_CONE_ANGLE 88 /* degrees */ -+#define FLOODLIGHT_NUM_ANGLE_STEPS 16 -+#define FLOODLIGHT_NUM_ELEVATION_STEPS 4 -+#define FLOODLIGHT_NUM_VECTORS (FLOODLIGHT_NUM_ANGLE_STEPS * FLOODLIGHT_NUM_ELEVATION_STEPS) - -+static vec3_t floodVectors[ FLOODLIGHT_NUM_VECTORS ]; -+static int numFloodVectors = 0; - -+void SetupFloodLight( void ) -+{ -+ int i, j; -+ float angle, elevation, angleStep, elevationStep; -+ const char *value; -+ double v1,v2,v3,v4,v5; -+ -+ /* note it */ -+ Sys_FPrintf( SYS_VRB, "--- SetupFloodLight ---\n" ); -+ -+ /* calculate angular steps */ -+ angleStep = DEG2RAD( 360.0f / FLOODLIGHT_NUM_ANGLE_STEPS ); -+ elevationStep = DEG2RAD( FLOODLIGHT_CONE_ANGLE / FLOODLIGHT_NUM_ELEVATION_STEPS ); -+ -+ /* iterate angle */ -+ angle = 0.0f; -+ for( i = 0, angle = 0.0f; i < FLOODLIGHT_NUM_ANGLE_STEPS; i++, angle += angleStep ) -+ { -+ /* iterate elevation */ -+ for( j = 0, elevation = elevationStep * 0.5f; j < FLOODLIGHT_NUM_ELEVATION_STEPS; j++, elevation += elevationStep ) -+ { -+ floodVectors[ numFloodVectors ][ 0 ] = sin( elevation ) * cos( angle ); -+ floodVectors[ numFloodVectors ][ 1 ] = sin( elevation ) * sin( angle ); -+ floodVectors[ numFloodVectors ][ 2 ] = cos( elevation ); -+ numFloodVectors++; -+ } -+ } -+ -+ /* emit some statistics */ -+ Sys_FPrintf( SYS_VRB, "%9d numFloodVectors\n", numFloodVectors ); - -+ /* floodlight */ -+ value = ValueForKey( &entities[ 0 ], "_floodlight" ); -+ -+ if( value[ 0 ] != '\0' ) -+ { -+ v1=v2=v3=0; -+ v4=floodlightDistance; -+ v5=floodlightIntensity; -+ -+ sscanf( value, "%lf %lf %lf %lf %lf", &v1, &v2, &v3, &v4, &v5); -+ -+ floodlightRGB[0]=v1; -+ floodlightRGB[1]=v2; -+ floodlightRGB[2]=v3; -+ -+ if (VectorLength(floodlightRGB)==0) -+ { -+ VectorSet(floodlightRGB,240,240,255); -+ } -+ -+ if (v4<1) v4=1024; -+ if (v5<1) v5=128; -+ -+ floodlightDistance=v4; -+ floodlightIntensity=v5; -+ -+ floodlighty = qtrue; -+ Sys_Printf( "FloodLighting enabled via worldspawn _floodlight key.\n" ); -+ } -+ else -+ { -+ VectorSet(floodlightRGB,240,240,255); -+ //floodlighty = qtrue; -+ //Sys_Printf( "FloodLighting enabled via worldspawn _floodlight key.\n" ); -+ } -+ VectorNormalize(floodlightRGB,floodlightRGB); -+} -+ -+//27 - lighttracer style ambient occlusion light hack. -+//Kudos to the dirtmapping author for most of this source. -+void FloodLightRawLightmap( int rawLightmapNum ) -+{ -+ int i, x, y, sx, sy, *cluster; -+ float *origin, *normal, *floodlight, *floodlight2, average, samples; -+ rawLightmap_t *lm; -+ surfaceInfo_t *info; -+ trace_t trace; -+ -+ /* bail if this number exceeds the number of raw lightmaps */ -+ if( rawLightmapNum >= numRawLightmaps ) -+ return; -+ -+ /* get lightmap */ -+ lm = &rawLightmaps[ rawLightmapNum ]; -+ -+ memset(&trace,0,sizeof(trace_t)); -+ /* setup trace */ -+ trace.testOcclusion = qtrue; -+ trace.forceSunlight = qfalse; -+ trace.twoSided = qtrue; -+ trace.recvShadows = lm->recvShadows; -+ trace.numSurfaces = lm->numLightSurfaces; -+ trace.surfaces = &lightSurfaces[ lm->firstLightSurface ]; -+ trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS; -+ trace.testAll = qfalse; -+ trace.distance = 1024; -+ -+ /* twosided lighting (may or may not be a good idea for lightmapped stuff) */ -+ //trace.twoSided = qfalse; -+ for( i = 0; i < trace.numSurfaces; i++ ) -+ { -+ /* get surface */ -+ info = &surfaceInfos[ trace.surfaces[ i ] ]; -+ -+ /* check twosidedness */ -+ if( info->si->twoSided ) -+ { -+ trace.twoSided = qtrue; -+ break; -+ } -+ } -+ -+ /* gather dirt */ -+ for( y = 0; y < lm->sh; y++ ) -+ { -+ for( x = 0; x < lm->sw; x++ ) -+ { -+ /* get luxel */ -+ cluster = SUPER_CLUSTER( x, y ); -+ origin = SUPER_ORIGIN( x, y ); -+ normal = SUPER_NORMAL( x, y ); -+ floodlight = SUPER_FLOODLIGHT( x, y ); -+ -+ /* set default dirt */ -+ *floodlight = 0.0f; -+ -+ /* only look at mapped luxels */ -+ if( *cluster < 0 ) -+ continue; -+ -+ /* copy to trace */ -+ trace.cluster = *cluster; -+ VectorCopy( origin, trace.origin ); -+ VectorCopy( normal, trace.normal ); -+ -+ -+ -+ /* get dirt */ -+ *floodlight = FloodLightForSample( &trace ); -+ } -+ } -+ -+ /* testing no filtering */ -+ return; -+ -+ /* filter "dirt" */ -+ for( y = 0; y < lm->sh; y++ ) -+ { -+ for( x = 0; x < lm->sw; x++ ) -+ { -+ /* get luxel */ -+ cluster = SUPER_CLUSTER( x, y ); -+ floodlight = SUPER_FLOODLIGHT( x, y ); -+ -+ /* filter dirt by adjacency to unmapped luxels */ -+ average = *floodlight; -+ samples = 1.0f; -+ for( sy = (y - 1); sy <= (y + 1); sy++ ) -+ { -+ if( sy < 0 || sy >= lm->sh ) -+ continue; -+ -+ for( sx = (x - 1); sx <= (x + 1); sx++ ) -+ { -+ if( sx < 0 || sx >= lm->sw || (sx == x && sy == y) ) -+ continue; -+ -+ /* get neighboring luxel */ -+ cluster = SUPER_CLUSTER( sx, sy ); -+ floodlight2 = SUPER_FLOODLIGHT( sx, sy ); -+ if( *cluster < 0 || *floodlight2 <= 0.0f ) -+ continue; -+ -+ /* add it */ -+ average += *floodlight2; -+ samples += 1.0f; -+ } -+ -+ /* bail */ -+ if( samples <= 0.0f ) -+ break; -+ } -+ -+ /* bail */ -+ if( samples <= 0.0f ) -+ continue; -+ -+ /* scale dirt */ -+ *floodlight = average / samples; -+ } -+ } -+} -+ -+/* -+FloodLightForSample() -+calculates floodlight value for a given sample -+once again, kudos to the dirtmapping coder -+*/ -+float FloodLightForSample( trace_t *trace ) -+{ -+ int i; -+ float d; -+ float contribution; -+ int sub = 0; -+ float gatherLight, outLight; -+ vec3_t normal, worldUp, myUp, myRt, direction, displacement; -+ float dd; -+ int vecs = 0; -+ -+ gatherLight=0; -+ /* dummy check */ -+ //if( !dirty ) -+ // return 1.0f; -+ if( trace == NULL || trace->cluster < 0 ) -+ return 0.0f; -+ -+ -+ /* setup */ -+ dd = floodlightDistance; -+ VectorCopy( trace->normal, normal ); -+ -+ /* check if the normal is aligned to the world-up */ -+ if( normal[ 0 ] == 0.0f && normal[ 1 ] == 0.0f ) -+ { -+ if( normal[ 2 ] == 1.0f ) -+ { -+ VectorSet( myRt, 1.0f, 0.0f, 0.0f ); -+ VectorSet( myUp, 0.0f, 1.0f, 0.0f ); -+ } -+ else if( normal[ 2 ] == -1.0f ) -+ { -+ VectorSet( myRt, -1.0f, 0.0f, 0.0f ); -+ VectorSet( myUp, 0.0f, 1.0f, 0.0f ); -+ } -+ } -+ else -+ { -+ VectorSet( worldUp, 0.0f, 0.0f, 1.0f ); -+ CrossProduct( normal, worldUp, myRt ); -+ VectorNormalize( myRt, myRt ); -+ CrossProduct( myRt, normal, myUp ); -+ VectorNormalize( myUp, myUp ); -+ } -+ -+ /* iterate through ordered vectors */ -+ for( i = 0; i < numFloodVectors; i++ ) -+ { -+ if (floodlight_lowquality==qtrue) -+ { -+ if (rand()%10 != 0 ) continue; -+ } -+ -+ vecs++; -+ -+ /* transform vector into tangent space */ -+ direction[ 0 ] = myRt[ 0 ] * floodVectors[ i ][ 0 ] + myUp[ 0 ] * floodVectors[ i ][ 1 ] + normal[ 0 ] * floodVectors[ i ][ 2 ]; -+ direction[ 1 ] = myRt[ 1 ] * floodVectors[ i ][ 0 ] + myUp[ 1 ] * floodVectors[ i ][ 1 ] + normal[ 1 ] * floodVectors[ i ][ 2 ]; -+ direction[ 2 ] = myRt[ 2 ] * floodVectors[ i ][ 0 ] + myUp[ 2 ] * floodVectors[ i ][ 1 ] + normal[ 2 ] * floodVectors[ i ][ 2 ]; -+ -+ /* set endpoint */ -+ VectorMA( trace->origin, dd, direction, trace->end ); -+ -+ //VectorMA( trace->origin, 1, direction, trace->origin ); -+ -+ SetupTrace( trace ); -+ /* trace */ -+ TraceLine( trace ); -+ contribution=1; -+ -+ if (trace->compileFlags & C_SKY ) -+ { -+ contribution=1.0f; -+ } -+ else if ( trace->opaque ) -+ { -+ VectorSubtract( trace->hit, trace->origin, displacement ); -+ d=VectorLength( displacement ); -+ -+ // d=trace->distance; -+ //if (d>256) gatherDirt+=1; -+ contribution=d/dd; -+ if (contribution>1) contribution=1.0f; -+ -+ //gatherDirt += 1.0f - ooDepth * VectorLength( displacement ); -+ } -+ -+ gatherLight+=contribution; -+ } -+ -+ /* early out */ -+ if( gatherLight <= 0.0f ) -+ return 0.0f; -+ -+ sub=vecs; -+ -+ if (sub<1) sub=1; -+ gatherLight/=(sub); -+ -+ outLight=gatherLight; -+ if( outLight > 1.0f ) -+ outLight = 1.0f; -+ -+ /* return to sender */ -+ return outLight; -+} -+ -Index: tools/quake3/q3map2/light.c -=================================================================== ---- tools/quake3/q3map2/light.c (revision 158) -+++ tools/quake3/q3map2/light.c (working copy) -@@ -1378,6 +1378,56 @@ - break; - } - -+ /////// Floodlighting for point ////////////////// -+ //do our floodlight ambient occlusion loop, and add a single contribution based on the brightest dir -+ if (floodlighty) -+ { -+ int q; -+ float addSize,f; -+ vec3_t col,dir; -+ col[0]=col[1]=col[2]=floodlightIntensity; -+ dir[0]=dir[1]=0; -+ dir[2]=1; -+ -+ trace.testOcclusion = qtrue; -+ trace.forceSunlight = qfalse; -+ trace.inhibitRadius = DEFAULT_INHIBIT_RADIUS; -+ trace.testAll = qtrue; -+ -+ for (q=0;q<2;q++) -+ { -+ if (q==0) //upper hemisphere -+ { -+ trace.normal[0]=0; -+ trace.normal[1]=0; -+ trace.normal[2]=1; -+ } -+ else //lower hemisphere -+ { -+ trace.normal[0]=0; -+ trace.normal[1]=0; -+ trace.normal[2]=-1; -+ } -+ -+ f = FloodLightForSample(&trace); -+ -+ contributions[ numCon ].color[0]=col[0]*f; -+ contributions[ numCon ].color[1]=col[1]*f; -+ contributions[ numCon ].color[2]=col[2]*f; -+ -+ contributions[ numCon ].dir[0]=dir[0]; -+ contributions[ numCon ].dir[1]=dir[1]; -+ contributions[ numCon ].dir[2]=dir[2]; -+ -+ contributions[ numCon ].style = 0; -+ numCon++; -+ /* push average direction around */ -+ addSize = VectorLength( col ); -+ VectorMA( gp->dir, addSize, dir, gp->dir ); -+ } -+ } -+ ///////////////////// -+ - /* normalize to get primary light direction */ - VectorNormalize( gp->dir, gp->dir ); - -@@ -1420,6 +1470,9 @@ - - /* ambient light will be at 1/4 the value of directed light */ - /* (ydnar: nuke this in favor of more dramatic lighting?) */ -+ /* (PM: how about actually making it work? d=1 when it got here for single lights/sun :P */ -+// d = 0.25f; -+ /* (Hobbes: always setting it to .25 is hardly any better) */ - d = 0.25f * (1.0f - d); - VectorMA( gp->ambient[ j ], d, contributions[ i ].color, gp->ambient[ j ] ); - } -@@ -1661,6 +1714,12 @@ - RunThreadsOnIndividual( numRawLightmaps, qtrue, DirtyRawLightmap ); - } - -+ /* floodlight them up */ -+ if( floodlighty ) -+ { -+ Sys_Printf( "--- FloodlightRawLightmap ---\n" ); -+ RunThreadsOnIndividual( numRawLightmaps, qtrue, FloodLightRawLightmap ); -+ } - - /* ydnar: set up light envelopes */ - SetupEnvelopes( qfalse, fast ); -@@ -1836,6 +1895,14 @@ - i++; - } - -+ else if( !strcmp( argv[ i ], "-exposure" ) ) -+ { -+ f = atof( argv[ i + 1 ] ); -+ lightmapExposure = f; -+ Sys_Printf( "Lighting exposure set to %f\n", lightmapExposure ); -+ i++; -+ } -+ - else if( !strcmp( argv[ i ], "-compensate" ) ) - { - f = atof( argv[ i + 1 ] ); -@@ -2191,6 +2258,21 @@ - cpmaHack = qtrue; - Sys_Printf( "Enabling Challenge Pro Mode Asstacular Vertex Lighting Mode (tm)\n" ); - } -+ else if( !strcmp( argv[ i ], "-floodlight" ) ) -+ { -+ floodlighty = qtrue; -+ Sys_Printf( "FloodLighting enabled\n" ); -+ } -+ else if( !strcmp( argv[ i ], "-debugnormals" ) ) -+ { -+ debugnormals = qtrue; -+ Sys_Printf( "DebugNormals enabled\n" ); -+ } -+ else if( !strcmp( argv[ i ], "-lowquality" ) ) -+ { -+ floodlight_lowquality = qtrue; -+ Sys_Printf( "Low Quality FloodLighting enabled\n" ); -+ } - - /* r7: dirtmapping */ - else if( !strcmp( argv[ i ], "-dirty" ) ) -@@ -2279,6 +2361,7 @@ - /* ydnar: set up optimization */ - SetupBrushes(); - SetupDirt(); -+ SetupFloodLight(); - SetupSurfaceLightmaps(); - - /* initialize the surface facet tracing */ -Index: tools/quake3/q3map2/game_etut.h -=================================================================== ---- tools/quake3/q3map2/game_etut.h (revision 158) -+++ tools/quake3/q3map2/game_etut.h (working copy) -@@ -148,6 +148,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 2.2f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 47, /* bsp file version */ -Index: tools/quake3/q3map2/brush.c -=================================================================== ---- tools/quake3/q3map2/brush.c (revision 158) -+++ tools/quake3/q3map2/brush.c (working copy) -@@ -78,7 +78,7 @@ - - - /* count brushes */ -- for( brushes; brushes != NULL; brushes = brushes->next ) -+ for( ; brushes != NULL; brushes = brushes->next ) - c++; - return c; - } -@@ -122,7 +122,7 @@ - - - /* error check */ -- if( *((int*) b) == 0xFEFEFEFE ) -+ if( *((unsigned int*) b) == 0xFEFEFEFE ) - { - Sys_FPrintf( SYS_VRB, "WARNING: Attempt to free an already freed brush!\n" ); - return; -@@ -135,7 +135,7 @@ - - /* ydnar: overwrite it */ - memset( b, 0xFE, (int) &(((brush_t*) 0)->sides[ b->numsides ]) ); -- *((int*) b) = 0xFEFEFEFE; -+ *((unsigned int*) b) = 0xFEFEFEFE; - - /* free it */ - free( b ); -@@ -156,7 +156,7 @@ - - - /* walk brush list */ -- for( brushes; brushes != NULL; brushes = next ) -+ for( ; brushes != NULL; brushes = next ) - { - next = brushes->next; - FreeBrush( brushes ); -Index: tools/quake3/q3map2/game_jk2.h -=================================================================== ---- tools/quake3/q3map2/game_jk2.h (revision 158) -+++ tools/quake3/q3map2/game_jk2.h (working copy) -@@ -64,6 +64,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "RBSP", /* bsp file prefix */ - 1, /* bsp file version */ -Index: tools/quake3/q3map2/lightmaps_ydnar.c -=================================================================== ---- tools/quake3/q3map2/lightmaps_ydnar.c (revision 158) -+++ tools/quake3/q3map2/lightmaps_ydnar.c (working copy) -@@ -414,6 +414,12 @@ - lm->superNormals = safe_malloc( size ); - memset( lm->superNormals, 0, size ); - -+ /* allocate floodlight map storage */ -+ size = lm->sw * lm->sh * SUPER_FLOODLIGHT_SIZE * sizeof( float ); -+ if( lm->superFloodLight == NULL ) -+ lm->superFloodLight = safe_malloc( size ); -+ memset( lm->superFloodLight, 0, size ); -+ - /* allocate cluster map storage */ - size = lm->sw * lm->sh * sizeof( int ); - if( lm->superClusters == NULL ) -Index: tools/quake3/q3map2/game_ja.h -=================================================================== ---- tools/quake3/q3map2/game_ja.h (revision 158) -+++ tools/quake3/q3map2/game_ja.h (working copy) -@@ -67,6 +67,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "RBSP", /* bsp file prefix */ - 1, /* bsp file version */ -Index: tools/quake3/q3map2/game_tremulous.h -=================================================================== ---- tools/quake3/q3map2/game_tremulous.h (revision 158) -+++ tools/quake3/q3map2/game_tremulous.h (working copy) -@@ -70,6 +70,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 46, /* bsp file version */ -Index: tools/quake3/q3map2/game_wolfet.h -=================================================================== ---- tools/quake3/q3map2/game_wolfet.h (revision 158) -+++ tools/quake3/q3map2/game_wolfet.h (working copy) -@@ -66,6 +66,7 @@ - qtrue, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 47, /* bsp file version */ -Index: tools/quake3/q3map2/model.c -=================================================================== ---- tools/quake3/q3map2/model.c (revision 158) -+++ tools/quake3/q3map2/model.c (working copy) -@@ -266,7 +266,7 @@ - continue; - - /* fix the surface's normals */ -- PicoFixSurfaceNormals( surface ); -+ //PicoFixSurfaceNormals( surface ); - - /* allocate a surface (ydnar: gs mods) */ - ds = AllocDrawSurface( SURFACE_TRIANGLES ); -@@ -521,7 +521,15 @@ - else - free( buildBrush ); - } -+ else -+ { -+ Sys_Printf( "WARNING: Model %s unable to generate brush - Case 1.\n", name ); -+ } - } -+ else -+ { -+ Sys_Printf( "WARNING: Model %s unable to generate brush - Case 2.\n", name ); -+ } - } - } - } -Index: tools/quake3/q3map2/light_bounce.c -=================================================================== ---- tools/quake3/q3map2/light_bounce.c (revision 158) -+++ tools/quake3/q3map2/light_bounce.c (working copy) -@@ -510,7 +510,7 @@ - break; - - case MST_TRIANGLE_SOUP: -- numTriangleDiffuseLights; -+ numTriangleDiffuseLights++; - break; - - case MST_PATCH: -Index: tools/quake3/q3map2/game_wolf.h -=================================================================== ---- tools/quake3/q3map2/game_wolf.h (revision 158) -+++ tools/quake3/q3map2/game_wolf.h (working copy) -@@ -129,6 +129,7 @@ - qtrue, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 47, /* bsp file version */ -Index: tools/quake3/q3map2/game_sof2.h -=================================================================== ---- tools/quake3/q3map2/game_sof2.h (revision 158) -+++ tools/quake3/q3map2/game_sof2.h (working copy) -@@ -139,6 +139,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "RBSP", /* bsp file prefix */ - 1, /* bsp file version */ -Index: tools/quake3/q3map2/q3map2.h -=================================================================== ---- tools/quake3/q3map2/q3map2.h (revision 158) -+++ tools/quake3/q3map2/q3map2.h (working copy) -@@ -35,8 +35,8 @@ - - - /* version */ --#define Q3MAP_VERSION "2.5.17" --#define Q3MAP_MOTD "Last one turns the lights off" -+#define Q3MAP_VERSION "2.5.17 base - FS_20g" -+#define Q3MAP_MOTD "Sorry, it doesn't match my furniture." - - - -@@ -267,6 +267,7 @@ - #define SUPER_NORMAL_SIZE 4 - #define SUPER_DELUXEL_SIZE 3 - #define BSP_DELUXEL_SIZE 3 -+#define SUPER_FLOODLIGHT_SIZE 1 - - #define VERTEX_LUXEL( s, v ) (vertexLuxels[ s ] + ((v) * VERTEX_LUXEL_SIZE)) - #define RAD_VERTEX_LUXEL( s, v )(radVertexLuxels[ s ] + ((v) * VERTEX_LUXEL_SIZE)) -@@ -279,6 +280,7 @@ - #define SUPER_ORIGIN( x, y ) (lm->superOrigins + ((((y) * lm->sw) + (x)) * SUPER_ORIGIN_SIZE)) - #define SUPER_NORMAL( x, y ) (lm->superNormals + ((((y) * lm->sw) + (x)) * SUPER_NORMAL_SIZE)) - #define SUPER_DIRT( x, y ) (lm->superNormals + ((((y) * lm->sw) + (x)) * SUPER_NORMAL_SIZE) + 3) /* stash dirtyness in normal[ 3 ] */ -+#define SUPER_FLOODLIGHT( x, y ) (lm->superFloodLight + ((((y) * lm->sw) + (x)) * SUPER_FLOODLIGHT_SIZE) ) - - - -@@ -543,6 +545,7 @@ - qboolean wolfLight; /* when true, lights work like wolf q3map */ - int lightmapSize; /* bsp lightmap width/height */ - float lightmapGamma; /* default lightmap gamma */ -+ float lightmapExposure; /* default lightmap exposure */ - float lightmapCompensate; /* default lightmap compensate value */ - char *bspIdent; /* 4-letter bsp file prefix */ - int bspVersion; /* bsp version to use */ -@@ -1392,6 +1395,7 @@ - - float *superDeluxels; /* average light direction */ - float *bspDeluxels; -+ float *superFloodLight; - } - rawLightmap_t; - -@@ -1704,6 +1708,10 @@ - float DirtForSample( trace_t *trace ); - void DirtyRawLightmap( int num ); - -+void SetupFloodLight(); -+float FloodLightForSample( trace_t *trace ); -+void FloodLightRawLightmap( int num ); -+ - void IlluminateRawLightmap( int num ); - void IlluminateVertexes( int num ); - -@@ -2098,6 +2106,13 @@ - Q_EXTERN float dirtScale Q_ASSIGN( 1.0f ); - Q_EXTERN float dirtGain Q_ASSIGN( 1.0f ); - -+Q_EXTERN qboolean debugnormals Q_ASSIGN( qfalse ); -+Q_EXTERN qboolean floodlighty Q_ASSIGN( qfalse ); -+Q_EXTERN qboolean floodlight_lowquality Q_ASSIGN( qfalse ); -+Q_EXTERN vec3_t floodlightRGB; -+Q_EXTERN float floodlightIntensity Q_ASSIGN( 512 ); -+Q_EXTERN float floodlightDistance Q_ASSIGN( 1024 ); -+ - Q_EXTERN qboolean dump Q_ASSIGN( qfalse ); - Q_EXTERN qboolean debug Q_ASSIGN( qfalse ); - Q_EXTERN qboolean debugUnused Q_ASSIGN( qfalse ); -@@ -2117,6 +2132,7 @@ - - /* ydnar: lightmap gamma/compensation */ - Q_EXTERN float lightmapGamma Q_ASSIGN( 1.0f ); -+Q_EXTERN float lightmapExposure Q_ASSIGN( 1.0f ); - Q_EXTERN float lightmapCompensate Q_ASSIGN( 1.0f ); - - /* ydnar: for runtime tweaking of falloff tolerance */ -Index: tools/quake3/q3map2/path_init.c -=================================================================== ---- tools/quake3/q3map2/path_init.c (revision 158) -+++ tools/quake3/q3map2/path_init.c (working copy) -@@ -383,7 +383,7 @@ - /* remove processed arguments */ - for( i = 0, j = 0, k = 0; i < *argc && j < *argc; i++, j++ ) - { -- for( j; j < *argc && argv[ j ] == NULL; j++ ); -+ for( ; j < *argc && argv[ j ] == NULL; j++ ); - argv[ i ] = argv[ j ]; - if( argv[ i ] != NULL ) - k++; -Index: tools/quake3/q3map2/game_qfusion.h -=================================================================== ---- tools/quake3/q3map2/game_qfusion.h (revision 158) -+++ tools/quake3/q3map2/game_qfusion.h (working copy) -@@ -115,6 +115,7 @@ - qfalse, /* wolf lighting model? */ - 512, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "FBSP", /* bsp file prefix */ - 1, /* bsp file version */ -Index: tools/quake3/q3map2/game_tenebrae.h -=================================================================== ---- tools/quake3/q3map2/game_tenebrae.h (revision 158) -+++ tools/quake3/q3map2/game_tenebrae.h (working copy) -@@ -112,6 +112,7 @@ - qfalse, /* wolf lighting model? */ - 512, /* lightmap width/height */ - 2.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 46, /* bsp file version */ -Index: tools/quake3/q3map2/q3map2.vcproj -=================================================================== ---- tools/quake3/q3map2/q3map2.vcproj (revision 158) -+++ tools/quake3/q3map2/q3map2.vcproj (working copy) -@@ -180,7 +180,7 @@ - Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="glib-2.0.lib wsock32.lib libxml2.lib libpng.lib libmhash.lib" -- OutputFile=".\Release/q3map2.exe" -+ OutputFile=".\Release/q3map2_fs_20g.exe" - LinkIncremental="1" - SuppressStartupBanner="true" - AdditionalLibraryDirectories=""..\..\..\..\mhash-0.9\win32\libmhash\Release";"..\..\..\..\libxml2-2.6\lib";"..\..\..\..\gtk2-2.10\lib"" -Index: tools/quake3/q3map2/game_quake3.h -=================================================================== ---- tools/quake3/q3map2/game_quake3.h (revision 158) -+++ tools/quake3/q3map2/game_quake3.h (working copy) -@@ -112,6 +112,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 46, /* bsp file version */ -Index: tools/quake3/q3map2/game_ef.h -=================================================================== ---- tools/quake3/q3map2/game_ef.h (revision 158) -+++ tools/quake3/q3map2/game_ef.h (working copy) -@@ -113,6 +113,7 @@ - qfalse, /* wolf lighting model? */ - 128, /* lightmap width/height */ - 1.0f, /* lightmap gamma */ -+ 1.0f, /* lightmap exposure */ - 1.0f, /* lightmap compensate */ - "IBSP", /* bsp file prefix */ - 46, /* bsp file version */ -Index: tools/quake3/q3map2/surface.c -=================================================================== ---- tools/quake3/q3map2/surface.c (revision 158) -+++ tools/quake3/q3map2/surface.c (working copy) -@@ -304,7 +304,7 @@ - out = &mapDrawSurfs[ i ]; - - /* walk the surface list again until a proper surface is found */ -- for( j; j < numMapDrawSurfs; j++ ) -+ for( ; j < numMapDrawSurfs; j++ ) - { - /* get in surface */ - in = &mapDrawSurfs[ j ]; -@@ -484,7 +484,7 @@ - - - /* walk the list of surfaces */ -- for( numSurfs; numSurfs > 0; numSurfs--, ds++ ) -+ for( ; numSurfs > 0; numSurfs--, ds++ ) - { - /* ignore bogus (or flare) surfaces */ - if( ds->type == SURFACE_BAD || ds->numVerts <= 0 ) -Index: tools/quake3/q3map2/shaders.c -=================================================================== ---- tools/quake3/q3map2/shaders.c (revision 158) -+++ tools/quake3/q3map2/shaders.c (working copy) -@@ -793,8 +793,14 @@ - } - - if( VectorLength( si->color ) <= 0.0f ) -+ { - ColorNormalize( color, si->color ); -- VectorScale( color, (1.0f / count), si->averageColor ); -+ VectorScale( color, (1.0f / count), si->averageColor ); -+ } -+ else -+ { -+ VectorCopy( si->color, si->averageColor ); -+ } - } - - -@@ -1896,12 +1902,14 @@ - si->styleMarker = 2; - - /* ydnar: default to searching for q3map_ */ -- else -+#if 0 -+ else - { -- //% Sys_FPrintf( SYS_VRB, "Attempting to match %s with a known surfaceparm\n", token ); -+ Sys_FPrintf( SYS_VRB, "Attempting to match %s with a known surfaceparm\n", token ); - if( ApplySurfaceParm( &token[ 6 ], &si->contentFlags, &si->surfaceFlags, &si->compileFlags ) == qfalse ) -- ;//% Sys_Printf( "WARNING: Unknown q3map_* directive \"%s\"\n", token ); -+ Sys_Printf( "WARNING: Unknown q3map_* directive \"%s\"\n", token ); - } -+#endif - } - - -Index: tools/quake3/q3map2/mesh.c -=================================================================== ---- tools/quake3/q3map2/mesh.c (revision 158) -+++ tools/quake3/q3map2/mesh.c (working copy) -@@ -563,7 +563,7 @@ - } - - /* keep chopping */ -- for( iterations; iterations > 0; iterations-- ) -+ for( ; iterations > 0; iterations-- ) - { - /* horizontal subdivisions */ - for( j = 0; j + 2 < out.width; j += 4 ) -Index: libs/picomodel/pm_ase.c -=================================================================== ---- libs/picomodel/pm_ase.c (revision 158) -+++ libs/picomodel/pm_ase.c (working copy) -@@ -32,6 +32,7 @@ - - ----------------------------------------------------------------------------- */ - -+void Sys_Printf (const char *format, ...); - - /* marker */ - #define PM_ASE_C -@@ -253,7 +254,6 @@ - struct aseVertex_s - { - picoVec3_t xyz; -- picoVec3_t normal; - picoIndex_t id; - }; - -@@ -276,6 +276,8 @@ - picoIndex_t smoothingGroup; - picoIndex_t materialId; - picoIndex_t subMaterialId; -+ picoVec3_t facenormal; -+ picoVec3_t vertexnormal[3]; - }; - typedef aseFace_t* aseFacesIter_t; - -@@ -455,33 +457,157 @@ - - #endif - -+static int VectorCompareExtn( picoVec3_t n1, picoVec3_t n2, float epsilon ) -+{ -+ int i; -+ -+ -+ /* test */ -+ for( i= 0; i < 3; i++ ) -+ if( fabs( n1[ i ] - n2[ i ]) > epsilon ) -+ return -1; -+ return 1; -+} -+ -+#define CrossProductTemp(a,b,c) ((c)[0]=(a)[1]*(b)[2]-(a)[2]*(b)[1],(c)[1]=(a)[2]*(b)[0]-(a)[0]*(b)[2],(c)[2]=(a)[0]*(b)[1]-(a)[1]*(b)[0]) -+ - static void _ase_submit_triangles( picoModel_t* model , aseMaterial_t* materials , aseVertex_t* vertices, aseTexCoord_t* texcoords, aseColor_t* colors, aseFace_t* faces, int numFaces ) - { -- aseFacesIter_t i = faces, end = faces + numFaces; -- for(; i != end; ++i) -+ -+ picoVec3_t accum; -+ int index; -+ int counter; -+ aseFacesIter_t i = faces, end = faces + numFaces; -+ counter=0; -+ -+ //rebuild normals -+ for(i=faces; i != end; ++i) -+ { -+ -+ //&(*i).facenormal -+ //vec3_t v1, v2; -+ //VectorSubtract(va, vb, v1); -+ //VectorSubtract(vc, vb, v2); -+ //CrossProduct(v1, v2, out); -+ -+ picoVec3_t a,b,c; -+ picoVec3_t v1,v2,v3; -+ int j; -+ counter++; -+ for (j=0;j<3;j++) -+ { -+ a[j] = vertices[(*i).indices[0]].xyz[j]; -+ b[j] = vertices[(*i).indices[1]].xyz[j]; -+ c[j] = vertices[(*i).indices[2]].xyz[j]; -+ } -+ for (j=0;j<3;j++) -+ { -+ v1[j]=a[j]-b[j]; -+ v2[j]=c[j]-b[j]; -+ } -+ -+ CrossProductTemp(v1,v2,v3); -+ _pico_normalize_vec(v3); -+ (*i).facenormal[0]=v3[0]; -+ (*i).facenormal[1]=v3[1]; -+ (*i).facenormal[2]=v3[2]; -+ -+ -+ } -+ -+ -+ //if (counter>0) Sys_Printf( "Rebuilding %d Normals\n", counter * 3 ); -+ for(i=faces; i != end; ++i) - { -- /* look up the shader for the material/submaterial pair */ -+ /* look up the shader for the material/submaterial pair */ - aseSubMaterial_t* subMtl = _ase_get_submaterial_or_default( materials, (*i).materialId, (*i).subMaterialId ); -- if( subMtl == NULL ) -+ -+ if( subMtl == NULL ) - { - return; - } - - { - picoVec3_t* xyz[3]; -+ picoVec3_t *a[3]; - picoVec3_t* normal[3]; - picoVec2_t* st[3]; - picoColor_t* color[3]; - picoIndex_t smooth[3]; -- int j; -- /* we pull the data from the vertex, color and texcoord arrays using the face index data */ -- for ( j = 0 ; j < 3 ; j ++ ) -+ -+ int j,z; -+ -+ -+ -+ /* we pull the data from the vertex, color and texcoord arrays using the face index data */ -+ for ( j = 0 ; j < 3 ; j ++ ) - { -- xyz[j] = &vertices[(*i).indices[j]].xyz; -- normal[j] = &vertices[(*i).indices[j]].normal; -+ aseFacesIter_t q = faces; -+ aseFacesIter_t qend = faces + numFaces; -+ -+ xyz[j] = &vertices[(*i).indices[j]].xyz; -+ -+ // Use Face normal -+ normal[j] = &(*i).facenormal; -+ -+ -+ //Oooor we can use the smoothing group -+ -+ //Slow method, but testing -+ //Find All faces that use this vertex, average their facenormals. -+ // skip where smoothgroups both equal 0, or don't have any shared bits (x & y) -+ index=(*i).indices[j]; -+ -+// accum[0]=0; -+ // accum[1]=0; -+ // accum[2]=0; -+ accum[0]=(*i).facenormal[0]; -+ accum[1]=(*i).facenormal[1]; -+ accum[2]=(*i).facenormal[2]; -+ counter=1; -+ -+ -+ z=0; -+ for(; q != qend; ++q) -+ { -+ z++; -+ if (q==i) -+ continue; -+ // if ( (*q).indices[0]==index || (*q).indices[1]==index || (*q).indices[2]==index) -+ a[0]= &vertices[(*q).indices[0] ].xyz; -+ a[1]= &vertices[(*q).indices[1] ].xyz; -+ a[2]= &vertices[(*q).indices[2] ].xyz; -+ -+ if ( VectorCompareExtn(*a[0],*xyz[j],0.01f)>0 || -+ VectorCompareExtn(*a[1],*xyz[j],0.01f)>0 || -+ VectorCompareExtn(*a[2],*xyz[j],0.01f)>0 -+ ) -+ { -+ if ( (*i).smoothingGroup==0 && (*q).smoothingGroup ==0 ) -+ continue; -+ -+ if ( (*i).smoothingGroup & (*q).smoothingGroup ) -+ { -+ accum[0]+=(*q).facenormal[0]; -+ accum[1]+=(*q).facenormal[1]; -+ accum[2]+=(*q).facenormal[2]; -+ -+ counter++; -+ -+ } -+ } -+ } -+ _pico_normalize_vec(accum); -+ -+ (*i).vertexnormal[j][0]=accum[0]; -+ (*i).vertexnormal[j][1]=accum[1]; -+ (*i).vertexnormal[j][2]=accum[2]; -+ normal[j]=&(*i).vertexnormal[j]; -+ -+ - st[j] = &texcoords[(*i).indices[j + 3]].texcoord; -- -- if( colors != NULL && (*i).indices[j + 6] >= 0 ) -+ -+ if( colors != NULL && (*i).indices[j + 6] >= 0 ) - { - color[j] = &colors[(*i).indices[j + 6]].color; - } -@@ -490,30 +616,18 @@ - color[j] = &white; - } - -- smooth[j] = (vertices[(*i).indices[j]].id * (1 << 16)) + (*i).smoothingGroup; /* don't merge vertices */ -+ smooth[j] = 0;// (vertices[(*i).indices[j]].id * (1 << 16)) + (*i).smoothingGroup; /* don't merge vertices */ - - } - - /* submit the triangle to the model */ - PicoAddTriangleToModel ( model , xyz , normal , 1 , st , 1 , color , subMtl->shader, smooth ); - } -+ - } - } - --static void shadername_convert(char* shaderName) --{ -- /* unix-style path separators */ -- char* s = shaderName; -- for(; *s != '\0'; ++s) -- { -- if(*s == '\\') -- { -- *s = '/'; -- } -- } --} - -- - /* _ase_load: - * loads a 3dsmax ase model file. - */ -@@ -534,6 +648,9 @@ - int numColorVertices = 0; - int numColorVertexFaces = 0; - int vertexId = 0; -+ int currentVertexFace=0; -+ int currentVertexIndex=0; -+ int counter=0; - - aseMaterial_t* materials = NULL; - -@@ -610,10 +727,11 @@ - } - else if (!_pico_stricmp(p->token,"*mesh_numvertex")) - { -- if (!_pico_parse_int( p, &numVertices) ) -+ if (!_pico_parse_int( p, &numVertices) ) - _ase_error_return("Missing MESH_NUMVERTEX value"); - - vertices = _pico_calloc(numVertices, sizeof(aseVertex_t)); -+ currentVertexIndex=0; - } - else if (!_pico_stricmp(p->token,"*mesh_numfaces")) - { -@@ -621,6 +739,7 @@ - _ase_error_return("Missing MESH_NUMFACES value"); - - faces = _pico_calloc(numFaces, sizeof(aseFace_t)); -+ - } - else if (!_pico_stricmp(p->token,"*mesh_numtvertex")) - { -@@ -685,7 +804,20 @@ - - vertices[index].id = vertexId++; - } -- /* model mesh vertex normal */ -+ else if (!_pico_stricmp(p->token,"*mesh_facenormal")) -+ { -+ //Grab the faceindex for the next vertex normals. -+ if( numVertices == 0 ) -+ _ase_error_return("Vertex parse error (facenormals)"); -+ -+ if (!_pico_parse_int( p,¤tVertexFace )) -+ _ase_error_return("Vertex parse error"); -+ -+ if (!_pico_parse_vec( p,faces[currentVertexFace].facenormal )) -+ _ase_error_return("Vertex parse error"); -+ -+ } -+ /* model mesh vertex normal */ - else if (!_pico_stricmp(p->token,"*mesh_vertexnormal")) - { - int index; -@@ -696,10 +828,25 @@ - /* get vertex data (orig: index +y -x +z) */ - if (!_pico_parse_int( p,&index )) - _ase_error_return("Vertex parse error"); -- if (!_pico_parse_vec( p,vertices[index].normal )) -+ -+ //^^ Index is 'wrong' in .ase models. they reference the same vert index with multiple normals.. -+ // I've tried, this is a lost cause. Use the SG's -+ // -+ /* -+ -+ if (!_pico_parse_vec( p,vertices[counter].normal )) - _ase_error_return("Vertex parse error"); -+ vertices[counter].faceid=index; -+ counter++; -+ */ - } - /* model mesh face */ -+ else if (!_pico_stricmp(p->token,"*mesh_normals")) -+ { -+ // counter=0; //part of the above vertex normals fix -+ } -+ -+ /* model mesh face */ - else if (!_pico_stricmp(p->token,"*mesh_face")) - { - picoIndex_t indexes[3]; -@@ -736,8 +883,35 @@ - } - if (!_pico_stricmp (p->token,"*MESH_SMOOTHING" )) - { -- _pico_parse_int ( p , &faces[index].smoothingGroup ); -- } -+ int total=0; -+ char* point; -+ char* start; -+ _pico_parse(p,0); -+ -+ point=p->token; -+ start=point; -+ faces[index].smoothingGroup=0; -+ -+ //Super dodgy comma delimited string parse -+ while (*point<'A') -+ { -+ if (*point<=32 || *point==',') -+ { -+ total=atoi(start); -+ if (total!=0) -+ { -+ faces[index].smoothingGroup+=1<token,"*MESH_MTLID" )) - { - _pico_parse_int ( p , &faces[index].subMaterialId ); -@@ -755,19 +929,19 @@ - int index; - - if( numVertices == 0 ) -- _ase_error_return("Texture Vertex parse error"); -+ _ase_error_return("Vertex parse error"); - - /* get uv vertex index */ -- if (!_pico_parse_int( p,&index ) || index >= numTextureVertices) -- _ase_error_return("Texture vertex parse error"); -+ if (!_pico_parse_int( p,&index )) -+ _ase_error_return("UV vertex parse error"); - - /* get uv vertex s */ - if (!_pico_parse_float( p,&texcoords[index].texcoord[0] )) -- _ase_error_return("Texture vertex parse error"); -+ _ase_error_return("UV vertex parse error"); - - /* get uv vertex t */ - if (!_pico_parse_float( p,&texcoords[index].texcoord[1] )) -- _ase_error_return("Texture vertex parse error"); -+ _ase_error_return("UV vertex parse error"); - - /* ydnar: invert t */ - texcoords[index].texcoord[ 1 ] = 1.0f - texcoords[index].texcoord[ 1 ]; -@@ -831,6 +1005,13 @@ - - /* leave alpha alone since we don't get any data from the ASE format */ - colors[index].color[3] = 255; -+ -+ /* 27 hack, red as alpha */ -+ colors[index].color[3]=colors[index].color[0]; -+ colors[index].color[0]=255; -+ colors[index].color[1]=255; -+ colors[index].color[2]=255; -+ - } - /* model color face */ - else if (!_pico_stricmp(p->token,"*mesh_cface")) -@@ -900,7 +1081,6 @@ - { - /* set material name */ - _pico_first_token( materialName ); -- shadername_convert(materialName); - PicoSetShaderName( shader, materialName); - - /* set shader's transparency */ -@@ -1085,7 +1265,6 @@ - } - - /* set material name */ -- shadername_convert(materialName); - PicoSetShaderName( shader,materialName ); - - /* set shader's transparency */ -@@ -1115,8 +1294,18 @@ - char* p = mapname; - - /* convert to shader-name format */ -- shadername_convert(mapname); - { -+ /* unix-style path separators */ -+ char* s = mapname; -+ for(; *s != '\0'; ++s) -+ { -+ if(*s == '\\') -+ { -+ *s = '/'; -+ } -+ } -+ } -+ { - /* remove extension */ - char* last_period = strrchr(p, '.'); - if(last_period != NULL) -@@ -1125,14 +1314,32 @@ - } - } - -- /* find shader path */ -+ /* find game root */ - for(; *p != '\0'; ++p) - { -- if(_pico_strnicmp(p, "models/", 7) == 0 || _pico_strnicmp(p, "textures/", 9) == 0) -+ if(_pico_strnicmp(p, "quake", 5) == 0 || _pico_strnicmp(p, "doom", 4) == 0) - { - break; - } - } -+ /* root-relative */ -+ for(; *p != '\0'; ++p) -+ { -+ if(*p == '/') -+ { -+ ++p; -+ break; -+ } -+ } -+ /* game-relative */ -+ for(; *p != '\0'; ++p) -+ { -+ if(*p == '/') -+ { -+ ++p; -+ break; -+ } -+ } - - if(*p != '\0') - { -Index: libs/picomodel/picomodel.c -=================================================================== ---- libs/picomodel/picomodel.c (revision 158) -+++ libs/picomodel/picomodel.c (working copy) -@@ -295,10 +295,7 @@ - model = PicoModuleLoadModel(module, fileName, buffer, bufSize, frameNum); - } - -- if(model != 0) -- { -- _pico_free(buffer); -- } -+ _pico_free(buffer); - - /* return */ - return model; -@@ -1573,6 +1570,7 @@ - { - int i, j; - -+// Sys_Printf(" %f %f %f\n", normal[0] , normal[1] , normal[2] ); - - /* dummy check */ - if( surface == NULL || surface->numVertexes <= 0 ) -@@ -1861,13 +1859,10 @@ - typedef picoVec3_t* picoNormalIter_t; - typedef picoIndex_t* picoIndexIter_t; - --#define THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL 1 -- - void _pico_triangles_generate_weighted_normals(picoIndexIter_t first, picoIndexIter_t end, picoVec3_t* xyz, picoVec3_t* normals) - { - for(; first != end; first += 3) - { --#if (THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL) - picoVec3_t weightedNormal; - { - float* a = xyz[*(first + 0)]; -@@ -1878,24 +1873,11 @@ - _pico_subtract_vec( c, a, ca ); - _pico_cross_vec( ca, ba, weightedNormal ); - } --#endif - { - int j = 0; - for(; j < 3; ++j) - { - float* normal = normals[*(first + j)]; --#if (!THE_CROSSPRODUCTS_OF_ANY_PAIR_OF_EDGES_OF_A_GIVEN_TRIANGLE_ARE_EQUAL) -- picoVec3_t weightedNormal; -- { -- float* a = xyz[*(first + ((j + 0) % 3))]; -- float* b = xyz[*(first + ((j + 1) % 3))]; -- float* c = xyz[*(first + ((j + 2) % 3))]; -- picoVec3_t ba, ca; -- _pico_subtract_vec( b, a, ba ); -- _pico_subtract_vec( c, a, ca ); -- _pico_cross_vec( ca, ba, weightedNormal ); -- } --#endif - _pico_add_vec(weightedNormal, normal, normal); - } - } -@@ -1941,7 +1923,8 @@ - { - for(; first != last; ++first, ++generated) - { -- if(!_pico_normal_is_unit_length(*first) || !_pico_normal_within_tolerance(*first, *generated)) -+ //27 - fix for badly generated normals thing. -+ // if(!_pico_normal_is_unit_length(*first) || !_pico_normal_within_tolerance(*first, *generated)) - { - _pico_copy_vec(*generated, *first); - } -@@ -1954,10 +1937,11 @@ - - _pico_normals_zero(normals, normals + surface->numVertexes); - -+ //Just build standard no sg normals for now - _pico_triangles_generate_weighted_normals(surface->index, surface->index + surface->numIndexes, surface->xyz, normals); - _pico_vertices_combine_shared_normals(surface->xyz, surface->smoothingGroup, normals, surface->numVertexes); - -- _pico_normals_normalize(normals, normals + surface->numVertexes); -+ _pico_normals_normalize(normals, normals + surface->numVertexes); - - _pico_normals_assign_generated_normals(surface->normal, surface->normal + surface->numVertexes, normals); - -@@ -2261,7 +2245,7 @@ - int newVertIndex = PicoGetSurfaceNumIndexes ( workSurface ); - - /* get the index of the vertex that we're going to store at newVertIndex */ -- vertDataIndex = PicoFindSurfaceVertexNum ( workSurface , *xyz[i] , *normals[i] , numSTs , st[i] , numColors , colors[i], smoothingGroup[i]); -+ vertDataIndex = -1;// PicoFindSurfaceVertexNum ( workSurface , *xyz[i] , *normals[i] , numSTs , st[i] , numColors , colors[i], smoothingGroup[i]); - - /* the vertex wasn't found, so create a new vertex in the pool from the data we have */ - if ( vertDataIndex == -1 ) -@@ -2290,3 +2274,5 @@ - PicoSetSurfaceIndex ( workSurface , newVertIndex , vertDataIndex ); - } - } -+ -+ diff --git a/tools/urt/tools/quake3/q3map2/q3map2.dsp b/tools/urt/tools/quake3/q3map2/q3map2.dsp deleted file mode 100644 index 21b83ef0..00000000 --- a/tools/urt/tools/quake3/q3map2/q3map2.dsp +++ /dev/null @@ -1,379 +0,0 @@ -# Microsoft Developer Studio Project File - Name="q3map2" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=Q3MAP2 - WIN32 RELEASE -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "q3map2.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "q3map2.mak" CFG="Q3MAP2 - WIN32 RELEASE" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "q3map2 - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "q3map2 - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "q3map2" -# PROP Scc_LocalPath ".." -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "q3map2 - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -F90=df.exe -# ADD BASE F90 /include:"Release/" -# ADD F90 /include:"Release/" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /Zi /O2 /I "..\..\..\include" /I "..\common" /I "..\..\..\libs" /I "..\..\..\..\libxml2\include" /I "..\q3map2" /I "..\..\..\..\libpng" /I "..\..\..\..\zlib" /I "..\..\..\..\gtk2-win32\include\glib-2.0" /I "..\..\..\..\gtk2-win32\lib\glib-2.0\include" /I "c:\program files\subversion\mhash\lib" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /FD /c -# SUBTRACT CPP /WX /YX -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 glib-2.0.lib wsock32.lib jpeg6.lib l_net.lib mathlib.lib md5lib.lib picomodel.lib ddslib.lib zdll.lib libpng13.lib ddslib.lib libxml2.lib libmhash.lib /nologo /stack:0x400000 /subsystem:console /map /machine:I386 /libpath:"..\..\..\libs\ddslib\release" /libpath:"..\..\..\libs\md5lib\release" /libpath:"..\..\..\libs\mathlib\release" /libpath:"..\..\..\libs\pak\release" /libpath:"..\..\..\libs\jpeg6\release" /libpath:"..\..\..\libs\l_net\release" /libpath:"..\..\..\..\libxml2\win32\libxml2\release_so" /libpath:"..\..\..\..\libpng\projects\msvc\libpng___Win32_Release" /libpath:"..\..\..\..\libpng\projects\msvc\zlib___Win32_Release" /libpath:"../../../libs/picomodel/release" /libpath:"..\..\..\..\gtk2-win32\lib\\" /libpath:"..\common\glib\\" /libpath:"C:\projects\library\zlib\\" /libpath:"C:\Program Files\Subversion\zlib\lib\\" /libpath:"C:\Program Files\Subversion\libpng\lib" /libpath:"C:\Program Files\Subversion\libxml2\win32\lib\\" /libpath:"C:\Program Files\Subversion\mhash\win32\libmhash\Release\\" -# SUBTRACT LINK32 /pdb:none /debug -# Begin Special Build Tool -SOURCE="$(InputPath)" -PostBuild_Desc=Python post build -PostBuild_Cmds=cd ..\..\.. && run_python.bat win32_install.py release Q3Map2 -# End Special Build Tool - -!ELSEIF "$(CFG)" == "q3map2 - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -F90=df.exe -# ADD BASE F90 /include:"Debug/" -# ADD F90 /browser /include:"Debug/" -# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\..\include" /I "..\common" /I "..\..\..\libs" /I "..\..\..\..\libxml2\include" /I "..\..\..\..\libpng" /I "..\..\..\..\zlib" /I "..\..\..\..\gtk2-win32\include\glib-2.0" /I "..\..\..\..\gtk2-win32\lib\glib-2.0\include" /I "c:\program files\subversion\mhash\lib" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /FR /FD /c -# SUBTRACT CPP /YX -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glib-2.0.lib wsock32.lib jpeg6.lib l_net.lib mathlib.lib md5lib.lib zdll.lib libpng13.lib ddslib.lib libxml2.lib libmhash.lib picomodel.lib /nologo /stack:0x2000000 /subsystem:console /profile /map /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmtd" /out:"Debug/FS_q3map2_1.exe" /libpath:"..\..\..\libs\ddslib\Debug" /libpath:"..\..\..\libs\md5lib\Debug" /libpath:"..\..\..\libs\mathlib\Debug" /libpath:"..\..\..\libs\pak\Debug" /libpath:"..\..\..\libs\jpeg6\Debug" /libpath:"..\..\..\libs\l_net\Debug" /libpath:"..\..\..\..\libxml2\win32\libxml2\debug_so" /libpath:"..\..\..\..\lpng\projects\msvc\win32\libpng___Win32_Debug" /libpath:"..\..\..\libs\jpeg6\release" /libpath:"..\..\..\libs\l_net\release" /libpath:"..\..\..\..\libxml2\win32\libxml2\release_so" /libpath:"..\..\..\..\libpng\projects\msvc\libpng___Win32_Debug" /libpath:"..\..\..\..\libpng\projects\msvc\zlib___Win32_Debug" /libpath:"..\..\..\..\gtk2-win32\lib\\" /libpath:"c:\program files\subversion\mhash\lib" /libpath:"..\common\glib\\" /libpath:"c:\program files\subversion\zlib\lib" /libpath:"c:\program files\subversion\libpng\lib" /libpath:"C:\Program Files\Subversion\libxml2\win32\lib" /libpath:"C:\Program Files\Subversion\mhash\win32\libmhash\Debug" /libpath:"C:\Program Files\Subversion\GtkRadiant\libs\picomodel\Debug" -# SUBTRACT LINK32 /nodefaultlib -# Begin Special Build Tool -SOURCE="$(InputPath)" -PostBuild_Desc=Python post build -PostBuild_Cmds=cd ..\..\.. && run_python.bat win32_install.py Q3Map2 -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "q3map2 - Win32 Release" -# Name "q3map2 - Win32 Debug" -# Begin Group "src" - -# PROP Default_Filter "c;cpp;cxx;cc;C" -# Begin Group "common" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=..\common\cmdlib.c -# End Source File -# Begin Source File - -SOURCE=..\common\imagelib.c -# End Source File -# Begin Source File - -SOURCE=..\common\inout.c -# End Source File -# Begin Source File - -SOURCE=..\common\mutex.c -# End Source File -# Begin Source File - -SOURCE=..\common\polylib.c -# End Source File -# Begin Source File - -SOURCE=..\common\scriplib.c -# End Source File -# Begin Source File - -SOURCE=..\common\threads.c -# End Source File -# Begin Source File - -SOURCE=..\common\unzip.c -# End Source File -# Begin Source File - -SOURCE=..\common\vfs.c - -!IF "$(CFG)" == "q3map2 - Win32 Release" - -!ELSEIF "$(CFG)" == "q3map2 - Win32 Debug" - -# ADD CPP /I "..\..\..\..\src\glib" - -!ENDIF - -# End Source File -# End Group -# Begin Group "bsp" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=.\brush.c -# End Source File -# Begin Source File - -SOURCE=.\brush_primit.c -# End Source File -# Begin Source File - -SOURCE=.\bsp.c -# End Source File -# Begin Source File - -SOURCE=.\decals.c -# End Source File -# Begin Source File - -SOURCE=.\facebsp.c -# End Source File -# Begin Source File - -SOURCE=.\fog.c -# End Source File -# Begin Source File - -SOURCE=.\leakfile.c -# End Source File -# Begin Source File - -SOURCE=.\map.c -# End Source File -# Begin Source File - -SOURCE=.\patch.c -# End Source File -# Begin Source File - -SOURCE=.\portals.c -# End Source File -# Begin Source File - -SOURCE=.\prtfile.c -# End Source File -# Begin Source File - -SOURCE=.\surface.c -# End Source File -# Begin Source File - -SOURCE=.\surface_foliage.c -# End Source File -# Begin Source File - -SOURCE=.\surface_fur.c -# End Source File -# Begin Source File - -SOURCE=.\surface_meta.c -# End Source File -# Begin Source File - -SOURCE=.\tjunction.c -# End Source File -# Begin Source File - -SOURCE=.\tree.c -# End Source File -# Begin Source File - -SOURCE=.\writebsp.c -# End Source File -# End Group -# Begin Group "light" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=.\light.c -# End Source File -# Begin Source File - -SOURCE=.\light_bounce.c -# End Source File -# Begin Source File - -SOURCE=.\light_trace.c -# End Source File -# Begin Source File - -SOURCE=.\light_ydnar.c -# End Source File -# Begin Source File - -SOURCE=.\lightmaps_ydnar.c -# End Source File -# End Group -# Begin Group "vis" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=.\vis.c -# End Source File -# Begin Source File - -SOURCE=.\visflow.c -# End Source File -# End Group -# Begin Group "convert" - -# PROP Default_Filter ".c" -# Begin Source File - -SOURCE=.\convert_ase.c -# End Source File -# Begin Source File - -SOURCE=.\convert_map.c -# End Source File -# End Group -# Begin Source File - -SOURCE=.\bspfile_abstract.c -# End Source File -# Begin Source File - -SOURCE=.\bspfile_ibsp.c -# End Source File -# Begin Source File - -SOURCE=.\bspfile_rbsp.c -# End Source File -# Begin Source File - -SOURCE=.\image.c -# End Source File -# Begin Source File - -SOURCE=.\main.c -# End Source File -# Begin Source File - -SOURCE=.\mesh.c -# End Source File -# Begin Source File - -SOURCE=.\model.c -# End Source File -# Begin Source File - -SOURCE=.\path_init.c -# End Source File -# Begin Source File - -SOURCE=.\shaders.c -# End Source File -# Begin Source File - -SOURCE=.\surface_extra.c -# End Source File -# End Group -# Begin Group "include" - -# PROP Default_Filter "h" -# Begin Source File - -SOURCE=.\game_ef.h -# End Source File -# Begin Source File - -SOURCE=.\game_ja.h -# End Source File -# Begin Source File - -SOURCE=.\game_jk2.h -# End Source File -# Begin Source File - -SOURCE=.\game_quake3.h -# End Source File -# Begin Source File - -SOURCE=.\game_sof2.h -# End Source File -# Begin Source File - -SOURCE=.\game_wolf.h -# End Source File -# Begin Source File - -SOURCE=.\game_wolfet.h -# End Source File -# Begin Source File - -SOURCE=.\q3map2.h -# End Source File -# End Group -# Begin Group "doc" - -# PROP Default_Filter "*.txt" -# Begin Source File - -SOURCE=.\changelog.q3map2.txt -# End Source File -# End Group -# Begin Group "rc" - -# PROP Default_Filter ".rc;.ico" -# Begin Source File - -SOURCE=.\q3map2.ico -# End Source File -# Begin Source File - -SOURCE=.\q3map2.rc -# End Source File -# End Group -# End Target -# End Project diff --git a/tools/urt/tools/quake3/q3map2/q3map2.dsw b/tools/urt/tools/quake3/q3map2/q3map2.dsw deleted file mode 100644 index caa9575b..00000000 --- a/tools/urt/tools/quake3/q3map2/q3map2.dsw +++ /dev/null @@ -1,137 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ddslib"="..\..\..\libs\ddslib\ddslib.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "jpeg6"="..\..\..\libs\jpeg6\jpeg6.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "l_net"="..\..\..\libs\l_net\l_net.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "libpng"="..\..\..\..\libpng\projects\msvc\libpng.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "mathlib"="..\..\..\libs\mathlib\mathlib.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "md5lib"="..\..\..\libs\md5lib\md5lib.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "picomodel"="..\..\..\libs\picomodel\picomodel.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "q3map2"=".\q3map2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name libxml2 - End Project Dependency - Begin Project Dependency - Project_Dep_Name libpng - End Project Dependency - Begin Project Dependency - Project_Dep_Name picomodel - End Project Dependency - Begin Project Dependency - Project_Dep_Name jpeg6 - End Project Dependency - Begin Project Dependency - Project_Dep_Name l_net - End Project Dependency - Begin Project Dependency - Project_Dep_Name mathlib - End Project Dependency - Begin Project Dependency - Project_Dep_Name md5lib - End Project Dependency - Begin Project Dependency - Project_Dep_Name ddslib - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/tools/urt/tools/quake3/q3map2/q3map2.h b/tools/urt/tools/quake3/q3map2/q3map2.h index a41cb0df..fe21bd92 100644 --- a/tools/urt/tools/quake3/q3map2/q3map2.h +++ b/tools/urt/tools/quake3/q3map2/q3map2.h @@ -1922,7 +1922,6 @@ Q_EXTERN int bevelSnap Q_ASSIGN( 0 ); /* ydnar: be Q_EXTERN int texRange Q_ASSIGN( 0 ); Q_EXTERN qboolean flat Q_ASSIGN( qfalse ); Q_EXTERN qboolean meta Q_ASSIGN( qfalse ); -Q_EXTERN qboolean newbsp Q_ASSIGN( qfalse ); Q_EXTERN qboolean patchMeta Q_ASSIGN( qfalse ); Q_EXTERN qboolean emitFlares Q_ASSIGN( qfalse ); Q_EXTERN qboolean debugSurfaces Q_ASSIGN( qfalse ); diff --git a/tools/urt/tools/quake3/q3map2/q3map2.h.rej b/tools/urt/tools/quake3/q3map2/q3map2.h.rej deleted file mode 100644 index d32fc37d..00000000 --- a/tools/urt/tools/quake3/q3map2/q3map2.h.rej +++ /dev/null @@ -1,19 +0,0 @@ -*************** -*** 35,42 **** - - - /* version */ -- #define Q3MAP_VERSION "2.5.17" -- #define Q3MAP_MOTD "Last one turns the lights off" - - - ---- 35,42 ---- - - - /* version */ -+ #define Q3MAP_VERSION "2.5.17 base - FS_20g" -+ #define Q3MAP_MOTD "Sorry, it doesn't match my furniture." - - - diff --git a/tools/urt/tools/quake3/q3map2/q3map2.opt b/tools/urt/tools/quake3/q3map2/q3map2.opt deleted file mode 100644 index 395cbdf1857c8b326b7383ff7101e7a88e7ba219..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98304 zcmeHQdypJQd7r)0J$07#JjuqG@mWX)`%d?gEE!AI-QFEOTe2Q!B!kzS_jX68mG-5X zT|ID&&x!LQ2{9oUCy)S+!#lwaBp5qbJsG^ELL?GcAsvKM?V+_jg>zQw7 zdv|XicO$Q;`ugg-o}T%pAHVIM>G^f{*I)bUx{Dur_S$b5C2pV5YW(6-m(gByz6Hl2 z4zD$E{n8~0vQNj4KyX^zF9`xaM?OvbX04D_kTwYY<{gkuNEf6VvKm6a^HuQIK(2meH;8zGw@q_-LV7RWV_Yay?KTnBkIy0^gZhYUb=Kn5X0kYUIOWE4VryWrmn*$vqPxef9L$nB85kbMx++Yf&XG7bqt zCLoiLDaackcS1^icVaO54QOFF0bl(L3800wQKFFIPZ-Lwoi9jBJ zklrl(2O&|&93%#bLoCP%$UKDf67Ww!PD7HA6eJDFK(dfC5Yqb~{2U|?ISV-lIS;u2 zc^l**$ge;ihP)j@_t0;D6ftFRr-_oM;oIsCDAehCQDYE|a#Uxkxo19=c=uz^eK|yF zv)*x}ZliP#N)rVN7IHF!d_*CHMJ;CeeFtR@_8wq2Ba+C=qHbaFh7e6DTX8upGAr=~J7ew8_;IM=vRP>4)(9Q9Ex-&Ze#0 z8^X6m4%?Y|JDM`55=qO6%;e|JTDFtOq$6+4ojw|kC!*UEaya0&e<5{4EGhHNyT?InjiO;i0g4g z9jR#UBx1Uwk&=1$L_DA4>dGc!nN%ijCBu!xR=6utIN})FPGzn6T~)y<{qfWt5%r&A zX+JZPie`r=>&#RxlSw*}Gx_LgYb4^{>UkU?RWo)}JIdW);=7J}_KRqgUxCnjf_>KC zS7(m!`#3&0k!)%<>R1D@Z4Zr%?%uU)&+du-(LIyn{X;|Hss8b)(Ovz6gJWZZgQMZ0 z;mKh<80q~&j`HfZrc0Mz#=-X?^vorB4vqbGBtpIm?+D*~GlDI~M|*x+C~W-4 z#t{w-KJjb_ueBpRpD~W`lak8+_-a?5_1rl15U1ngMej=W94Ycyt8*Zdv#p>@ZlmP) zAzL>#x#ZtOF@NY4m3=Pxt;?z@11GmVG(0vreCycAME}sOQ#(;bCI z`o0Y2$<1}_oq+3cJh@-fWVmj_=hd4b)C*&u;aWQoaq{+wXv~^TS%Fm;N{M70O8*QV z2-i0m0s3Bg5JK)j_22*3H4vGz^UleD+R8X$CfVy1{nbq_x?j-pBfPd#R$wK61__Y7 zglbP6mg|~a@>%5J6oef6ZU`UVbv`AuM=Sc!DSVY=Gsz3+_yts7xSRL1_po?XlToA3 z_jh_QvCpWLcZ&}uVs^&KoXDBS5>7svG-q=8cp?)y7T&Wv5(U58}~sZIkhO7i!p3UM*vv^SG=RxL3Ve37G-b`YG)h1pqQqm6{0I+1di8Ir0zfOV9qo$tkK-1S`*6$S zIJ+Ll>~2Ar9Qv(Fr&v#2@cyyhsv3IqarFd*FeyzJrwWesDEV4?bQ7{(mmcX-oE2zI z;s5IUWYZpH!v6{X_X;te!vE333(k8ayMe-gpCT6iuMDJGkO}{%5Yl1NLtN4PdM5lI zW1{?8a0&k>{GV1~I3WCAt!W2Zms9w^GR{HxKjHrxe1Qx9$B*Bd{b^Dp-cR_y0%SO- z)!h;P?~3OCIzho5JaE?m{F0^on(%)ZR`ez|%KX2wIiOl+O!zFD zL)?ITyoCP~{_k=vxuV)8{9h^KSF1$||93_6f0fo>AIFO1H0VHD7hTKsVg2zMDDis9 zTKaVT2Kwi%Kc2=a`e|bpsl~AdJBgI%=xW`r7wL1_Z7^IN{TEpLnL;4|_^hkCZ>Mj2rlz@kSE2e&W3xB)9$*AKTOIYXH zZl64KbYJoRH7>zt#z@6-+)EWt_8hgGOx})Jl_Of~MPz$gUQ}0M(Y9G~u9H@v`>~kE zGxljGi?vbab~lpkx0$<5Z~6C4&g*(GL!Y8KK?~P=W>hBJRqQ=pqUuVkW5?Rv!Q<9B zC)=iGAa^9vv1C4O6_;7N%e_$HlzX8hukHf*()DZ}mn`eQss1VFcid$CxBep4L*;mF z#VHzyB*(rRg54Hb|6Py$3g3)EFe@)){ddDw6_}e7{#W>47;tfItgs)@l1{E;!v6~Y zEBr6_5sX)w`IhzH%Q5pK{IA{-)d(>zu z>eGex&W$rO<44i*RvY1aqxQU&o6cFOTKdG`g!rdCZF{pYU|uMao2I?@~Wt~ zitc~m|JZn^%aV%yM|xi}r!V#&*(8$Ke-!(VK4luLZ9d`ug#Q!%PZ>lK`;TJ(F$jaz zYz0f~KQ712x7dHI&n!B9#gP;Hj}5%Qc|=O=KUOul{}}2OiP(Q^#0vd55F=@UX+1Lj zC-xu3{$rIzFUm{S4ne|es>Y~S4o@ZEB>I3SQa|^nL5J3QgmRY zD2miu;}-Uw*=U3(tgMxeTj|(^a3-CLCeoIz@q)#qpCSr{|10`|0l)BnRIOY-T=>6I z=2Q4T;s1pHtGzc`iCqlY|E2B?sR4MB4<2GPg~zxWu{-xomMn%+3q^vDtgOe5&c!tvi_I0j+XtOW&dYtqi~mR z=WE&j#YMR0dIj141wiR*U-XcNqv0x4Z?Z;4eRpB{$d+6yCL=3AH0iVF0ucZGNQ13c(P#&kXyjGbRs&chV`a@Z^iWE z#?FRQHw?BvNjBK(P5-SG($B*3WegTKQ;<09Kqg724tL!$>|dUwcs=}?|J~#nPb{qe zK5)Q1Hs0-?Ev0}fE3Yq)f|%Y)Gd;JItGX-BU22%i-CIFzZ04Y@bX^4{MKhaas--zR zFg>ovRhlm-RLWQ7^6OD8v9`T53lj$pP-!d2NLMZs-@S&-bY32295ZrtR~mM&`mYJG z|EMFRhZsvAFR}kfnEa4|@%&rMw#1yt&z-f(_O8Ms!-@El8G{*l75k53|1q75$o$Wu zM!7fE`1BF6{|Fn`vneYV4QMK0FMbdbvHvLc9}8_$>_1W$YpG>E!v6~YEBr4Si15F{ z|Dqbuhv(y~mt(GdbVgDXyrRx%8a>= zB`CAXw^B#uGI3+enhScYgi2hZFv9=Q568~uvxNWSR^VczhsyC1{*N#b{*P-$!S|b# z%>M)^dOOlXjF}Ia%>Psf=`iV`a?oV{Cu5@gT5!qyPnrLzRTvJ){7;$x>DC4Rg(UmG z=#Nu9#4X3iOZIMRzi!bP+5e@{F17G~zZCr6##DSKX2t0A zU$=X*boyUK-QJQ2inzau`qY}1;K*v}2fP1E`35q=|GE3}xb`uZg@(-kqxyXrS3wK^ zNB9c=M<{5{@2?2|2VnHRuO4FDe8`0VQwZrW>7jDag#TkqlwS)j;s1pH(<%%Hg#Q!% z&#epo3rYAt{c);?xaIhG3IC@M(qYm=I%vZGF&-sdMLzA$KgOe^tH`JQxa~BU?5S>Xqv!PNO00rX_cGF7pm;p{hhbP+j2aI9j==(>Wt=li<2a7eu)>%@sFv$n zM*8n4N`C@r&KY@F-JHjfT`Re=>+6@1{vT2-9{#-kd!xJgbAhr|78JYPlcmgWMcv+# z2#Pr0iu$zlJG4NrCOUGBM7HDTM{Vn1Gb(S-MbkOUwlntVP=wBZzwO=qC!E>2sAFZL zxszreOucDZeP;hzlT_xTDa$nb&Wz-9qkX2?pG?f3%;8EhlZkuB*7#&pl~2cTV4a(DvgHY2cN@eA>r`1MGM70&fP+5D+4tHG*J*aH#59=NGDiU& znVOk(@tYkQu+Cd`t&6V+EAqoU`jVu0ySu4f6<)j*093i$reLh1(0VrERJq&{%cNnI zFIPpSZf3qUo{3e7r^T*zwF6V0&!>{ZA!EG}#y+*DtXR(9M&28bXm<^aR@Lb$40=>m zYf~GpS65N{UR71;@a!y9Rcd$VV^`OS#~l=|s?M^e|6We!TlimU<8alw^>khM-!hPD zK_>G*6+${pdWdQkIsdyz_+J+h?|&`0g#Q)(SF11_5dK&AU$-v!&sO1o^~b3m;+Es% zCH${KNQX%e>7WV!%Xrl6Pm`kXzop+D)hZVuCj9Re&Ho;2dz8qg*7KoOWAK|jbPN~l zjIB88NZzX_?7Qh0#?=E6MJCPWY*;-H$l&>Xh@B+T3Lgn?G@j)2l>bWGzJ3_6z6Y`a zsk6@+T0IcSX6#%v=>$~xal}lLK!STw_zg`i{9{yTue9uYLF3?Zh*OunjLc`|h^~vw z$C8T69SCL@58eTC0CnefK)Ali@O=YVeG7u@D1R+u2fqt-Cz^|$TtUrw6w&-DKkjEkKg8TvG-4N2FU-${gdm+^5{s=-F zqr4CDe#oCd{uJ^72dkCc~?$RY5|LHK=T{0Nh7%ok%juabB zM@%}?vBxdbp-+6P3+^BW4nqVkoho*8W@OmkQA@^uh9ffmgJG9)8!R&Zv-E%zH^r*s zHZuN`NLo%r_Wx23;OEg1EOujccDyh;ShP`E(Uxh!Y`0CFbdsmM&ejc0?rh2UkE$nn zWzj=ii+s*a#(x+S<=28s#(!k|N2@R#kntZG|8eVr|7?}6 z59y%E_z&YD<3An}!IJ+n{u2YP4?*yaqx@n97sDSkU3vCQo^~4yh{C=F36cB=^fgh~ zo2q|5cd^$LMS7LGXGoVe`mev*2QK->affr^S_svwJ!6&h5s{{_hX-)&E$mtb8%4r z{m%#C{~G*!ApC^?E2>MS)1&y3U&n<16aJ5Dh2{(YC;XpVA^eAh@P9garH8or_;?Bb z*We3W_&=^h!vA?l2>%x>0#`Ku*9}^d2spprS~_v>?uTw6TMJknKi|;%*`@d*up}@L z>$~M)b6|9MPqlOoBc0gt(}6jM6KV#zN^4|j4;J-f=C_**-K+)Wf);YL8KM1M;Y>Pb zXOjJ4I!m{7;_Ov?cHFk2r}+wSTG%uZ%|&w;vX*%;;Y2ZYJ)N@BFl6A~+h!PxYsX?S z%W=$OiA*w@OJve~5w;>0ubNJqhokeBIZ381_{ytsWy5qbY0XEI=5*T0+4)%UotSvL zxM|F`qZiEaOg9<`i&vQRqA_g&oV#xR{ei^9jWr| z`M`^7T%AKO@o*xUImhv1n(*Q}_tH!*8ar)GFgaf-DiQ?<9g|gT?4O1iY zmTgW{#068D7uT{%X`wLJd9nAfjT`anS@BB0-p`@3#w~H_-8)055)%gwnD=CI<`n(3 zT)1&uxrVMxr;%S^{WevX%&906DrmjkNG+~Cn2G06^s*=(!Nm<|wlOPCrcTPPgZ5us z!_eG`nv%4*rpKJr#mxs3F+1aAPUOt+%{P}LOS-F!4r2l>e8P^No5rtp-g558uVe#> z8Mi$;_n&%TfG$(mx!-=Ef8U9O?c|iUd9#_IyUYjHmE1J?Kzk;i%jR=Eai@P@I-fcQ zb0JQt*3bj3amQYr9PZ!et)XZ?PV?c1FhyA%4D-PVAB-BtI$-=lh=9gQf=t{>1~lwK z)7(j3#z4;th`z7Nu***=dFA3iHjZ#0*!Paue*nM?tqZmua?cf;G7$bxA*92khsr?{ z{*N(Hel56!{}cXCt1ui8{;#3$3vU@jL9-vD0U zg5Ys}IqW}7z{+(D_NP;@KAkplu!G&0+i0|euEs4Ox0N06dhY%ZDcxR=W_>!;foE6W z9l>gG+T;ftbA7R`B>i?&z?*0&WYzX2cND6XwR<2Ew_?HB$l=dCvXS!)UI5#gT=p$h z3cq$BGH2(Vle1YnkxJwO`q1T-*E1dhuWd2{Uqn8>0-+8z`wYsyIy={;i`7%JFcu#W zUR-0I^Saern~c|1fI}Z5}X! zU%2a<{K9<$Ui^I!>W{F`Mei7(jW`1$cW*(gBt(Xj$^5lVF8FoG%K(HrWaQHT8@us3 zJ7n5kqh6Cqq%o;JpxznJcK?poJG;8cnC-*wb_mi1pvb?L0fQf20cK}TkR9QGK;uya z-dtc!lR1o5(-x}x!{Ay1JxLE?7Jb%o?1a|aa&k0 z#*xR7ArhX+)zf6m-qVe(86ejnPvqaofWgNuCWQrffm9eCpZq)?FSM9ub(0JKKIGwJ zUWH+w%fC^z6naj~M(4124=d*adNDByTfB#Ccau>V00OsrD6r2c&^Wb|RVdiOJvivy zPx5sQ#pEdX$=d z24I7?nG_pBAuJrsA*ozdYgWlHU(*Ha1u*xev`&@d=RdN@d2h?Zec(;3HU)AKY ze+Om%iT4g*pYupVSkXi};78wC@9o#x$%wQ(OW*72x<$r(${`V zlM7CpYJCxcb@&AzhsvSnM|Ky2YwOHHJc9a8bMrz?F8nThQ67S4{b3_It-=_hTk-1!oqYTV;5`mmgugwjodNzt~}X6>a3C@qDp% z_2d23FV}Z^Yv-u=}K~p*B6kl_HTC>*BjmVt|hXsPPcz4y^`N|DYc5{xBTOF zuilR$PqF{*fI-i0V~26rs8+uaRXa`mic_2>{R_nHFN)DQ$0UERoco8Y; zHO(UBMh?rWy?%4a(?`FE&;sY{ACRXj$#K5^75Uowy$&GN0>s*k{Z%sg^-zeGZWQ+a z1+Npddyw-LMxH+MdW%}X%Vhe&C>VLU|6)Uvi((^sVg?aIg(#y*UUo_skRlTT72;*N&nO`j}|#!A4Z-&_dl)P@A&dE zqYLP^7cbqx`TFY5JB%AptNK*b^pUnAr(R?$h#|}Qx(#_sztpO}OWm*26~wyoTlaIm z9!0($Z0YoR&>PBPZV-U4mB&yPWwjH9`jtnXKHl2t4Pfl3a8F}R^y2bb4yRjak6%Kb zzO<^-*siY7z;Bsr?2)~2Ygq&hoGAQ`KSiF_c6MSP8FFs!8i+@!W*fa>Y5hXI-+??G z>FP9Ir*tFqe{GBQxd!5BDMvrC*B786W7jQu%sz)3@(Xy)baxuZ##X6;GT7y4D3V5$ z>#PjBxjp8Pua_WeR3bEtSJ5pL^I8=(icg*|4m5IX7V7;kkf*mMSK+Ic+|EWKAzklR zZ1lFJ^cSvYygsnH)A%vO#j9#ERWIr(?bd^JhkU#`dpeE(TGwg3L*4stb;n@rDOde} DP?W)E diff --git a/tools/urt/tools/quake3/q3map2/q3map2.plg b/tools/urt/tools/quake3/q3map2/q3map2.plg deleted file mode 100644 index ce91829b..00000000 --- a/tools/urt/tools/quake3/q3map2/q3map2.plg +++ /dev/null @@ -1,86 +0,0 @@ - - -
-

Build Log

-

---------------------Configuration: q3map2 - Win32 Debug-------------------- -

-

Command Lines

-Creating temporary file "C:\DOCUME~1\TWENTY~1\LOCALS~1\Temp\RSP13E.tmp" with contents -[ -glib-2.0.lib wsock32.lib jpeg6.lib l_net.lib mathlib.lib md5lib.lib zdll.lib libpng13.lib ddslib.lib libxml2.lib libmhash.lib picomodel.lib /nologo /stack:0x2000000 /subsystem:console /profile /map:"Debug/FS_q3map2_1.map" /debug /machine:I386 /nodefaultlib:"libcd" /nodefaultlib:"libcmtd" /out:"Debug/FS_q3map2_1.exe" /libpath:"..\..\..\libs\ddslib\Debug" /libpath:"..\..\..\libs\md5lib\Debug" /libpath:"..\..\..\libs\mathlib\Debug" /libpath:"..\..\..\libs\pak\Debug" /libpath:"..\..\..\libs\jpeg6\Debug" /libpath:"..\..\..\libs\l_net\Debug" /libpath:"..\..\..\..\libxml2\win32\libxml2\debug_so" /libpath:"..\..\..\..\lpng\projects\msvc\win32\libpng___Win32_Debug" /libpath:"..\..\..\libs\jpeg6\release" /libpath:"..\..\..\libs\l_net\release" /libpath:"..\..\..\..\libxml2\win32\libxml2\release_so" /libpath:"..\..\..\..\libpng\projects\msvc\libpng___Win32_Debug" /libpath:"..\..\..\..\libpng\projects\msvc\zlib___Win32_Debug" /libpath:"..\..\..\..\gtk2-win32\lib\\" /libpath:"c:\program files\subversion\mhash\lib" /libpath:"..\common\glib\\" /libpath:"c:\program files\subversion\zlib\lib" /libpath:"c:\program files\subversion\libpng\lib" /libpath:"C:\Program Files\Subversion\libxml2\win32\lib" /libpath:"C:\Program Files\Subversion\mhash\win32\libmhash\Debug" /libpath:"C:\Program Files\Subversion\GtkRadiant\libs\picomodel\Debug" -".\Debug\cmdlib.obj" -".\Debug\imagelib.obj" -".\Debug\inout.obj" -".\Debug\mutex.obj" -".\Debug\polylib.obj" -".\Debug\scriplib.obj" -".\Debug\threads.obj" -".\Debug\unzip.obj" -".\Debug\vfs.obj" -".\Debug\brush.obj" -".\Debug\brush_primit.obj" -".\Debug\bsp.obj" -".\Debug\decals.obj" -".\Debug\facebsp.obj" -".\Debug\fog.obj" -".\Debug\leakfile.obj" -".\Debug\map.obj" -".\Debug\patch.obj" -".\Debug\portals.obj" -".\Debug\prtfile.obj" -".\Debug\surface.obj" -".\Debug\surface_foliage.obj" -".\Debug\surface_fur.obj" -".\Debug\surface_meta.obj" -".\Debug\tjunction.obj" -".\Debug\tree.obj" -".\Debug\writebsp.obj" -".\Debug\light.obj" -".\Debug\light_bounce.obj" -".\Debug\light_trace.obj" -".\Debug\light_ydnar.obj" -".\Debug\lightmaps_ydnar.obj" -".\Debug\vis.obj" -".\Debug\visflow.obj" -".\Debug\convert_ase.obj" -".\Debug\convert_map.obj" -".\Debug\bspfile_abstract.obj" -".\Debug\bspfile_ibsp.obj" -".\Debug\bspfile_rbsp.obj" -".\Debug\image.obj" -".\Debug\main.obj" -".\Debug\mesh.obj" -".\Debug\model.obj" -".\Debug\path_init.obj" -".\Debug\shaders.obj" -".\Debug\surface_extra.obj" -".\Debug\q3map2.res" -"\Program Files\Subversion\GtkRadiant\libs\picomodel\Debug\picomodel.lib" -"\Program Files\Subversion\GtkRadiant\libs\jpeg6\Debug\jpeg6.lib" -"\Program Files\Subversion\GtkRadiant\libs\l_net\Debug\l_net.lib" -"\Program Files\Subversion\GtkRadiant\libs\mathlib\Debug\mathlib.lib" -"\Program Files\Subversion\GtkRadiant\libs\md5lib\Debug\md5lib.lib" -"\Program Files\Subversion\GtkRadiant\libs\ddslib\Debug\ddslib.lib" -] -Creating command line "link.exe @C:\DOCUME~1\TWENTY~1\LOCALS~1\Temp\RSP13E.tmp" -

Output Window

-Linking... -Creating temporary file "C:\DOCUME~1\TWENTY~1\LOCALS~1\Temp\RSP140.bat" with contents -[ -@echo off -cd ..\..\.. && run_python.bat win32_install.py Q3Map2 -] -Creating command line "C:\DOCUME~1\TWENTY~1\LOCALS~1\Temp\RSP140.bat" -Python post build -'python.exe' is not recognized as an internal or external command, -operable program or batch file. -please install python and add python.exe to the path (http://www.python.org) - - - -

Results

-FS_q3map2_1.exe - 0 error(s), 0 warning(s) -
- - diff --git a/tools/urt/tools/quake3/q3map2/q3map2.sln b/tools/urt/tools/quake3/q3map2/q3map2.sln deleted file mode 100644 index 4def4fe7..00000000 --- a/tools/urt/tools/quake3/q3map2/q3map2.sln +++ /dev/null @@ -1,190 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddslib", "..\..\..\libs\ddslib\ddslib.vcproj", "{7FD1FB6D-9969-43E1-857D-1B70B85DB89D}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "jpeg6", "..\..\..\libs\jpeg6\jpeg6.vcproj", "{F6FEEEDB-8B57-411E-924D-2C49AA55A03B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "l_net", "..\..\..\libs\l_net\l_net.vcproj", "{C64EA14E-82DD-4E6A-825F-BD9745137CCB}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mathlib", "..\..\..\libs\mathlib\mathlib.vcproj", "{608341F6-3E13-498C-B16B-8CFB737F311E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "md5lib", "..\..\..\libs\md5lib\md5lib.vcproj", "{0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "picomodel", "..\..\..\libs\picomodel\picomodel.vcproj", "{D50B2D31-7046-4E77-AB0F-4211BE70834C}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "q3map2", "q3map2.vcproj", "{7AF7537E-94C3-4680-8F5E-C1CE30DC2041}" - ProjectSection(ProjectDependencies) = postProject - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70} = {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70} - {D50B2D31-7046-4E77-AB0F-4211BE70834C} = {D50B2D31-7046-4E77-AB0F-4211BE70834C} - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D} = {7FD1FB6D-9969-43E1-857D-1B70B85DB89D} - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B} = {F6FEEEDB-8B57-411E-924D-2C49AA55A03B} - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A} = {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A} - {608341F6-3E13-498C-B16B-8CFB737F311E} = {608341F6-3E13-498C-B16B-8CFB737F311E} - {C64EA14E-82DD-4E6A-825F-BD9745137CCB} = {C64EA14E-82DD-4E6A-825F-BD9745137CCB} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpng", "..\..\..\..\..\..\q3map2\Q3map2FS\libpng-1.2\projects\msvc\libpng.vcproj", "{DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - DLL ASM|Win32 = DLL ASM|Win32 - DLL Debug ASM|Win32 = DLL Debug ASM|Win32 - DLL Debug|Win32 = DLL Debug|Win32 - DLL VB|Win32 = DLL VB|Win32 - DLL|Win32 = DLL|Win32 - LIB Debug|Win32 = LIB Debug|Win32 - LIB|Win32 = LIB|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.Debug|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.Debug|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL ASM|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL Debug|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL VB|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.DLL|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.LIB Debug|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.LIB|Win32.ActiveCfg = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.LIB|Win32.Build.0 = Debug|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.Release|Win32.ActiveCfg = Release|Win32 - {7FD1FB6D-9969-43E1-857D-1B70B85DB89D}.Release|Win32.Build.0 = Release|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.Debug|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.Debug|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL ASM|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL Debug|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL VB|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.DLL|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.LIB Debug|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.LIB|Win32.ActiveCfg = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.LIB|Win32.Build.0 = Debug|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.Release|Win32.ActiveCfg = Release|Win32 - {F6FEEEDB-8B57-411E-924D-2C49AA55A03B}.Release|Win32.Build.0 = Release|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.Debug|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.Debug|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL ASM|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL Debug|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL VB|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.DLL|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.LIB Debug|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.LIB|Win32.ActiveCfg = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.LIB|Win32.Build.0 = Debug|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.Release|Win32.ActiveCfg = Release|Win32 - {C64EA14E-82DD-4E6A-825F-BD9745137CCB}.Release|Win32.Build.0 = Release|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.Debug|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.Debug|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL ASM|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL Debug|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL VB|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.DLL|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.LIB Debug|Win32.Build.0 = Debug|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.LIB|Win32.ActiveCfg = Release|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.LIB|Win32.Build.0 = Release|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.Release|Win32.ActiveCfg = Release|Win32 - {608341F6-3E13-498C-B16B-8CFB737F311E}.Release|Win32.Build.0 = Release|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.Debug|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.Debug|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL ASM|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL Debug|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL VB|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.DLL|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.LIB Debug|Win32.Build.0 = Debug|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.LIB|Win32.ActiveCfg = Release|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.LIB|Win32.Build.0 = Release|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.Release|Win32.ActiveCfg = Release|Win32 - {0B6C0AED-1BF5-4794-8CD0-2686A3EF852A}.Release|Win32.Build.0 = Release|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.Debug|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.Debug|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL ASM|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL Debug|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL VB|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.DLL|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.LIB Debug|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.LIB|Win32.ActiveCfg = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.LIB|Win32.Build.0 = Debug|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.Release|Win32.ActiveCfg = Release|Win32 - {D50B2D31-7046-4E77-AB0F-4211BE70834C}.Release|Win32.Build.0 = Release|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.Debug|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.Debug|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL ASM|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL ASM|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL Debug ASM|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL Debug ASM|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL Debug|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL Debug|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL VB|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL VB|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.DLL|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.LIB Debug|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.LIB Debug|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.LIB|Win32.ActiveCfg = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.LIB|Win32.Build.0 = Debug|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.Release|Win32.ActiveCfg = Release|Win32 - {7AF7537E-94C3-4680-8F5E-C1CE30DC2041}.Release|Win32.Build.0 = Release|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.Debug|Win32.ActiveCfg = DLL Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.Debug|Win32.Build.0 = DLL Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL ASM|Win32.ActiveCfg = DLL ASM|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL ASM|Win32.Build.0 = DLL ASM|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL Debug ASM|Win32.ActiveCfg = DLL Debug ASM|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL Debug ASM|Win32.Build.0 = DLL Debug ASM|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL Debug|Win32.ActiveCfg = DLL Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL Debug|Win32.Build.0 = DLL Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL VB|Win32.ActiveCfg = DLL VB|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL VB|Win32.Build.0 = DLL VB|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL|Win32.ActiveCfg = DLL|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.DLL|Win32.Build.0 = DLL|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.LIB Debug|Win32.ActiveCfg = LIB Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.LIB Debug|Win32.Build.0 = LIB Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.LIB|Win32.ActiveCfg = LIB|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.LIB|Win32.Build.0 = LIB|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.Release|Win32.ActiveCfg = DLL Debug|Win32 - {DF2E2A3A-51C9-414F-BEE9-261C2E88CF70}.Release|Win32.Build.0 = DLL Debug|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/tools/urt/tools/quake3/q3map2/q3map2.suo b/tools/urt/tools/quake3/q3map2/q3map2.suo deleted file mode 100644 index 438c7b336e3cc181cb7984de15d765045ae63b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100864 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

-W%UNYZ*H$IGn=M{IOi7_sz=vl|Rmxy@Z>>9Y^Ns4L1Q-&RaGW-E$Am zaaRO)b#U7H4p`5(U`(47(T zTLbo2_l_{qdr+YY=W<+0-$7g%J$(o9 z!#LODzSmUwM{sMQe;VB445QO^Ea8wEX&9XK=rX~z&e^pIu0wFfuVZjsa&{XB*DW|_ z&AJD-UCwU%;06TO6uTXR8$OmO!*3}*b7Q`ZQD4u1FoDor+;w!1n19vgFCQr z;cs;P!?NcGd=k>lMgDiWtP1hzWON#=0WdU{gZr5eE-sbc>dP+ zzIqiCIe%=SjAxUIZ-CYJvG_BE5Nmt>wDkIyGySDyUe@25lYHrY(xt=iSUPZyy8hM@ zw+y5^gj!PUr}`X$QaXI+-Ajw%x4@(msB8FpbN%DO+fw0oE**4sw2bhb-CqjSHGKQc zy`v7A+vneE+c&-3n|BW}GI%?SSo-Bm8`~>oOOWjPX3X#VrcH*XB#P-`UUD5o`F-E? z@B60B2es{+PCM|n^2Hz)8PE+P6TI& zb`H)yZC4KC>)bI$*_lTcZ_BPxYcLpdwr zxh}`g4(`+7Jm<6Ez7DPx+&97bG;yfe?5p;}gVR5s)>3ZG+1(c0eZf_7{QltH$=SUd z+y}uq8{-TscPi#p+?VxT%#GAzP9w!+0d%Fd?+8088_wPwpGB%5ucdDTEO1$$MxK-W zP*<4#$+$AyO+xP;E>1R=;W zOTeYzGH^L?cgB_ADsVNp2Dnq>I&eL>0k~V^55ReS=ksp??%cQy+z##lcY?cs^Zd^5 z-vivqaUZxJJOJFyVI2R2`!IM8JPIBIUjo+yTnG3waF@r^;2H2N@Vw`7UkKgZA1{Ir z!OP$k@G5u>ybj&~Z-Tdg=e~pcE_e_84ZIIN0KG}Kk8nQ*p8(e%9J5*yECHW`FM!YC ze}(H>gme6s3QNPk!MET$@E`C!_yPO~rh^&4s%IjOs&Wu;2InLoXI?uEDCdD>cRspy zHwUNPT|l`XB)bRDwR!j90*KVcYjLUlH#>Hn+wUhI0A95Xn)4wuwrCV_7-O=^Wch0ACN1=PJ z?~PBK&!@^w%5m2RcT;ety|rH#+y{a~&E5)Px;z}5@p}wi|I&Jt=e`Zs71!F*aNVi+ z7P|6&aGtvo71GAIE8}YCwG9rtO@o8VzG&dJ4anK0_cRR2*$qY4ZlB=v^I&x4xSZYb zVRvP4#>KY@dmX;7A;slJbS1s{SN%yi!${A&YHOXC&N0u_hdV#VU4U-7SjX`{gY|~q zTW`pzTc({SvA&UWj^46rYi)T=Tr<+hb)mH)EmuW9(1VEY+z2)M-ho`#;N-VJAC0?Z zaI2x0nty6DbJhmK*@*LBO*v){gX(O?Y|Lh%59inG#6c+?zO(+N#qbR`Nonii(XB{~ zGy`2ad|UL=GB4r(6ED+qXQjh$TRL!#8h*3Pt$X^P&Goxxq*#wAXGWe-KP$K^gWDAD zs^Icqc;k>%W~&l9^AFTnIo2(R7@!iHn5UHHp2Zp(kQL5%e%&IJ(tqRy4mlxE9oud>TAWdxJux+VU=mP zmPOP)_4ebHEv;FGZ&&Ef-woJU&8nlvQvGTcVE{ub+^ zn+~bZV)pZ!IkscAHQFo#wnkqW*M0Tr+yUsO<4(a1MEBhnEpSf>4k!CwU=!T)gY$gf zW3dMA4Z&TFexC=B)IU+TUQ$y3gsfS30nT-m{C=6~aAk1yxH)=r3HWoIyJT=s*`65P zRF74mr#fr*oZTRFWq5E$pjQNUPtNY%;2sWcXY3vcuC{$JKZKoe^h*Pl?^L&0MhC!o zjk`s;lpBK1|Cw)Lma~46yM#abC48H`{fe7&+|$85pW{~GCTnM%ykGZlYGG*DS&;pf zwQ@@CT)+OOoEe)1DWz=*w`Ht=Ga%?niX@x74F^>v`Ua!RVH; zA;IAkPUnwx&)GT7?=IWcT@ak-`|NLT+)lXu_Ez}KWY6_`$%z{u+{EDI4@CFegL8H# zhuvv8yGzlR$L`ADtZVyo9ZG%rD*B}?68)AXgOe{qw~vy(Yi#`9gtJ|GD`)52%$jgN z2B-JE==iUXo8FM!1br!vE5kUJ!X1vTObpI6uL|yloZXGV-4fhd*xef33pu;L1ov`q z)}yZk=Q~hSxV{Hf`7t=-H$Aw87+55`g&kxd4T9SU-R}S^E9dN13C?$^dTvv&W^m;> zyY+)>7o2rX`{3N?lENJu+@8VhirvKEj?UQ~6P)jw@Z8hENx{96vwJnTcY@mryLW^8 zIA`}sa9;&y5!#=@=DN6t;TneAk?3UQ!g0ZQ&#yz@0r$q>%rEz#+sC>$$32HW0q*(W zs0It~qnqzP3eI!>8F49N5k93$V;AI+=E2FgMYrARkmLHGn|J5+`wN^}xGwxtzaCw= zDLC`N&A~mNvwI=9*Mqa(SdB@JzPPL78ehkUZ-iar;Ghak(7o=a!D+iGx?|Cb@rq!Q<^S)N0D{tWz`;D%%8cfOT@kw4XUi+nO9 zxb@)X_xHo*_Bqs2KU!&dgqz+c>ey1@x5;`qrTt?3n}uuG zN@?rj(MdS=5tLHl&w2EnUH@E%e+}U}C##eWf6g&T^AF|tRoCl(iLhH+2$2cwG%N1> zJN1z(%VZ*As+lzAubjExyKEt}HIQ49mBHeQ&Vy$!FaqKyXRjZeXA5O3kV4ryW7wk{ zTvyzF!Py^9cDn@UI7Uu?2L-opaQ@scxPyYT4Y(P2xeo;Axd#K~DWHGdz|%l^1IQ_F z7M;SoxN>4){;Y%RIL_bt-2`P_+~&dArnpvMd+2%r|7XtWbw~FkIrE`os&=?5tifNL4tt?2Io#cze`pW@uF;j<9dgSbS2De3Uwhy19+dh05Txawx z!)|%nto-$q4&NAl8mWSseO+BQt)+KEPw!yyeJk24Y27@H2I;tF-^lY0O$s|x-tS;q z)2EqfW1U8g_vie309|=JIK%k>-B#?w;L6aQkyeV|>Dm8RUVnF8*YA}SOMR!T99E}E zF=oZmY5W_3RO&mTr?g8gi@g)M)j=1a^aRPSSH{pg3eFzJ7NKt&F3!xit)^N;|Exvy zXUA}HvbR?1rkcgxd8%1HLQmm-tP%1lkTVB;29&iRlHJ;&tQVa3s#S2#vW8kXClpr$ zRD~;u&2U`}@VB+cg(}EDf>U?JPf05S{_I75oq+2qp}&Q*D_wE74X!b|D}&0>aK#cK zVITN%Dkv=u{FU=h^}Jg#2W@-s#yyBeb_KdgQoCVh-x64#raLM(4A}3m(eawr1}Uc< z7aUIZOq%Y=K)aFP6rj8e1k2tp;e0?_jI>)5r1l`)4XBx^?0TzqWx#b; zWpvyP^)Y&ij1SISIw81=a&{L7=RB9*h&Ry9EpG<58~Sx&M~!bqgN(z~xFzk(R;ricZF8^usmo28iEIaTweafk9-~5hu`z^h1H+?{N&v3 zUv{7Tq?x(cGhYq|&A=!iXFF@{rA!0q z+#}FE_n6?C;vNeW(>B>XjIQ0|!8OKx0w`aDWcLlacK-=ZyYGS00Hb7QpGCW+f-~Hu zEE8e@o@%%&Wd(Q@Orzg`#bq||w-kHq3_bcVI-@nwBTBJ2I z#N}Z_nHu@(&8A{?{pqjtg}9nea`;shpTU^**^S!2v{m;#bNg}yqnP)1pWQg>zDh#z z+ZO{_$1EPP4_`AB<5~T!vg#*V7J^UD9lNK(7V8Z-^XgOAv|sk~>7UJzucFfR+lDLF z;Q2XI^7b=Hl*DJNJgw-;wxMBf&8kl~)_>aYw^f$V-K>3T?hu^y9Z5d9Qhd5)bOf*{ z&$CR-S^$ZL@oOOI<8w6C(kWYX>Pb*-Sb*Aq0K2m`(SeBQcE&w`J2j3xF%XRBUnM>m z8^7RItQl*@Z3IV#k@ETX|3Ce9_pIoWWHZGw))vS)kJ1h(8-rxG3A%ROgR?!beo<`m zv~w+GE1;ydPTh7)83VKvQ-St}$8Vg%qkvmj_z-Ag9rbTuFVrzh;##2Cp4y|4Gmor; z;=NxtxZ&uPKyr zgPh%m=)aFUf8MyWx}Njy|8`&VvDQpwt5~y}Q+JBmeSX)J#UA~@d1^cAR^t~-{K507 zcU`RGt(zv$0@QtXcCr6fs*mOVi>csHa2PloOatys{9XRR=79 zCMW}qK@-pvGy}~+3$PYg8?*%LfOWxopcNx0&y4cHpA1MPufb;R8ObOM`!4Z%jh z?-}g~HUXQ0uAm#}4tju|pcm*3DnK8ge_Mo$I#afR+ZJpGwg>&d4xm49ue#^$gu64? z1-NH@AlMDKSIj+PgTW9m6bu8yf#;3D9SQaTqrhk|22_HvU>wkH0`8t*GN=NRfcz9( zR~_~St~%@s_5=Ha1HggcAaF2nY~{BF>f_#l%aE$j6!?wdO>yrHt_=Nt^v!S|49;`? zwt(k86dY>dQFO;|&jjbJ_#^0!chh@wTA=%_0w>f)zhxPo*=$6n`f?F1SHFWJ(&v9#_m%)_<*BE^rbj#3s z!Rb$5bY)awaQf#Hf!f^}oY!#+ zdI#LQgG0@piP7$%oSjb&I!BZC!E5K9Q|+F~**%W#^*$S%;r=D;UJ0%#oZmAwKffEC z_t1T-`uARNp8H{NUj}EKKR`DPz75WN{sX#ezvF|J$x5T7o9c zr*^b@ylmfGUyDp}=C}HHv7L0@?bq*@{b{Uwr3L75$$<-06y}A7mf2I4Ud7!fr9w`Kp*-CS;>fXI&hP7ITZGXWzN@ueQE& z-DjQiBWY`{`S;a}Z2M1siv8EF1oE%ADh`PDFYM1Yo=!}Qx8rZyfKQINIMX(p&UZDT z4VoQWC-#f02`=6A&Y0rUCOxq}faGe!O!IPl60FGrG;=d%)LWoXZ~tqfVWVl-@7j8g z@jHl_JSS$-iRV~0V8z1jv(K_@K!>^&lL+l;;M<|KCuW_pICR3MLw2+WvFm}>4!$Rv zF>eod0N0iuVw7hu=1R*OzjoSJ4{yxczeKvXYu|x=AM>8}UH;Fe{ZA*!eu?xiru_@` zW}ENlZuKi)57}!to(w;yr?r~)IXqs#c}_$Yq4%2vs*esHd5I`>gVQL61d zb-pLTIYDc9S96_D7)z#|Q1G1+L-1`Z@hQvV^xHg9mS#ByF<>b$NcVTd7bvFzyy_9nk_+q!W?i0Rg zt4HZgAjKT)UW?*Biw?xYr)}*`bs%>3S9)cA5&JOR&!HBW3JwK_fuq4Ra0ECQ90d*m z$AHtoao`HzxWA^H3V#ha9h?Eq1ZRP>!MWf9a2_}xTnKIf7lDhxCE!wU6}TMy0aOC# zv#t*JUfk=z_233@Be)gZ1l*!?7q}AK25tv;fGI#f{)l@wxF>$!hkHMG06YjD0uw>a zYx=+bdqL&_>T%u96FAqqIj-})a?U5zM|Ur#bH9mm?zb_V^S*L8*_^K}opZc$O@Z^g z&I6SNSBBmMy$h~$y~#i4j6K)6UpdFY&i!tH>%6aAFW|hd^J32ZCax{Ids&?0l~do2 zu8I1_!J%gJx+~y1x9c(G2z34zj>&Q72X|p`O*np0=vU?Jt`EDLgEP+ep&Q0S!MW$> z5p>h>iQrnGKZV{8_vzpqQ9g^_1NXV$Pz!%Y=YQdg;2in=3*9-XuY)T`pN{UF&y3)_ zUkfZ$oReA**XuPdi=vx;O9a;neQw|0R{OZve$Lw9=e~`2c5lOKfZxCNn7cTCP#p7{ zqVsReJ$HTXd_0yU9#iJ}p4C40P`s0~+fy=u{oz@V()idV*KCrjzDXO3*$OUt#0;XOfr$?oxtDL!c_HwZiv+*i2C?w`SZADp~zuUQNC1YCb#41NGg zdZUecdZSJLS*ve2VMUJl)UD@=5!?l@$EPLzy#u&N1xZg%s;8$UCx+dTa8>BaxxuNs zBB@*woL=37?h4zzIqnH`dvd;EMw`RHrRa*g8zKr>Z&%J9uG~t%T@K2`oSiHGN_xJq zDY`5E%DuS7TrrB;wYGl8+|?Fse|8J_)9HSmv^@6l(~WJqa&^UCm)vHcHBgQP$?mv} zseWIjJ`o8v?BJSn+%`dl%h%@Ii1^pN^;c<2JxGejF++gKn*|e2!ZKy(3(c9M>7$ zzQaa2?riijxbt(|ljzo@F9f$Ry5H*>fV%^(;mVC)r07n@O>x;5-FtOlaE<{T*D8kx zr#=l`IXXDY(J{e2owIu`xL1O+7JD_gMkGkFrg4|w?4O^ho+U3@{c=0}UpnN=#l0$1 zBQLA-BXR4XoAFFxId@w03w=bmIN4h>*TOwI$63Rem>1+YXPoRQry2w`n{hG>Ylsx? zYv^(wBd41aE~ z-yWJJR4E<4HD+ls{0%WNrRsY9m)G(7-TE*mF?{<;=G3}|@BX*cM<{juZL_{>=@=Nk zGb-sGl(sG&b>CfYpp*)~-ORB@(YCg~gg-Ovx?aC~^HQI%bog}}f7x%crmSoDPZR!| zaWSRCw`7%;dAa_R2!D%6e{=YM!+U2+U*+tN{n4f6e+-j(aG^(?3hkdX(?D@)5?@UW2pCwm8cGYaY3!fc@^Jf%6P<9(OdV zYy#x+(v=@|y?)R0+Xnh!IkIh1%E+I|-^P(wn+Ioo*CIH_DaEkn^yGGa?}|Ow;(Wd{ zRZ3Y&l!BbnaEbxuZI9 zcLw)xj(aS)_j8=@VdDQR^B}G1smXP~P5$|0hn!DGB+e%zE^0k#u>}b0M*u?;mir{*nj|k4EZR*kQn%fnz?{8bxNuQb5 zrLNRAE;SCu#c}C&p$`uiC);0U+Kma$T6rH}ExvDXtKe3KzF)XF+1FmyqR#!fYg*MK zde>-*tA0)J|JVF7t^@tw?g`5Ld`I#68xx=3x@C8^YVPAu+xlJI_o-K}l@(XV8WD#x z=hJ%i{9j|W7#{p9$8Ofm-+K^)<-o7K@wtN5Q8=N(rHMq5p^NT&u zH^c22+*asa(LJ|UaL)H`fo_enWsch#-C8=;`sU0&aGtwu*tJ0KhrT7Q@3A-BreIg} zp1A3q_S>NE4ClG2#gH2Uw<+#OT+j8K(db*_jtNe`eM6dVYFX56S+tuRc9z~_!tR9N zytaMOm6L)qjZQ^({>iyp!}U7OL)X9b=Cxkv7sEN5VT+}mt=Hw~rsH+N>5p$_bAHV4 zg=n`L@LM0&{=#FW|2G<;YBD%eleS$OH{2qeG_6^Q!I{@8$ zFf};u_2KB} z)1NEQy{A_NXP&(l-FtacaGrB3dJo*&bKG6%-ru`}GauiF?)5wnoPPfa-Td-saF&lJ z(6_~XDmcS^7Tq{MADq|w61sKytHG^<{#SI<@vY#zAMc_Y?%#s*_=o7NaQ_~h{(XV& zz5FV;=IEcH*T?;5aHxfE(T&r0!I^&Fpxd+jJ~+dej@}!00X(owD?QN{#O<5o`Ukgr zjvE@>h#WT|xQRJ#zu-;}&g(b>-ME|`oN2l*I{ypj1czEUAKkcInB%Sp?%Eu8cW@5{ z=ly>e-Fy0I&hCk@^V=EedS4Fi_24WspQ3y3zY5N|sISqTXZSWa@5A@#8{qR^UIULdHhXu@5|dc?mcwt zwfBSb+>g;4;eHxi8T#kwmdk$yr+*)za~lg^2j{upp2(Ao$I=b$HtSfqdJ@;EU z&s``u&s`MVwra7Q-6H6=A4}%!mO;0^TrN2E-|Ii?()qUocd zP}v@3LEHhsSuS=$x6F?W&T_T~dJEjWfBmcKWwi z=*xx+Rai0XRt>HR+-jjW3)glGW~t`!_=VI6eCNVAyU%Yks4;qI2RbGMguNM(+j z5M0{f)raHm`s$7APA}u^{hfl|6L+8BPzwj5>)&BHyZzBkzyF2zU(C9H;U;2jD&7LT zYULSV59v9OxWAxtk=Z-Z6ZchcJs}e3m+Q1kB^$LcCb%bZcIIa7%mJvGc<1Fd$#LC- zOLtkre!=aUvl|?ocQ*OA7rNJWNRB%^?2gWHCj^&vF&W1B!M%~QdpEd$=D2TyTY!L4 zxb@MYXFe^Xe?IXdm!6i9YaEA(p)0zzV7K6wMeh^(=HV^|*9>@0;+8_UmRGjK zF3qp+VO5D#;%eV&;!WXPS|f%9LLDnPuLYG z`kVY2j&2H#39c9JSfCsLlHGym+8q*{;T{TE9wKjyV<$t{3{ZKv^<4^`+2F=VgOyjNS-cSvk0#=&J^|ZgBPk)(?H7 zaE-%ywQ#n6_CwRYUgPJ!-j#8;414|S9r~bf^=~-3=T-#gxg*exQ)*33gG#t{aL0z7 z{tXR%Lb&=j8D0OT1gC%Yt&Pjx!8r!o54|a_{c8Sa{hq4O?N`g`-w`PKcVuw-cNDt* z9UYu;IXv{#H}+in$DVsh9P`{u(LMLF;5_%j&{N;pb8mw4Tz5h8KfC9*pm^@B!FleD zp{KsF=l%uGbN?F04A(xh=e`u2{mU0Z{~}z^wcl%v_)T!0Yrog~@ojM44|igEKV}4H zTv9)}9#t-MmVWk$jZ6LD^luS#{aZ9R{aXrM|CSEUxY+;o+|*n0+?C+Gj+Mi%IeMee z*ACZn*F|rOyMA!i7hR1M(l$8tcIcM3j=`BO_QV##?HOEW^iJr?=E14Ex5#t13eNoG z9&^RsS_D_h zX=_8J8%QbN9o-w!yX5{mUu-ldnV0=%ZOI&0hR3D$zqQXwTHo1HA*I7_UodMAI&K}*SK-mSztprl9ZDerP zc%y(a325g`$Yh`#0_2=AoeGqbft+GaQO*EzEx?&TF$dTC)ps3KudvsAbq#Ie#+`38 zW-0dSiuqH{zGTnP?YAYn&C!)DK(gC1^lie$$>wNvQ$N}EX?x%~JBEw%ldr6qYtmgZ zN2PEFqbox|3U_Geqr=6?`rEok0qtxLj|Pf;+2r3%8B^@b$~6YJ2lrRpWcOlluLftk z{#tMgVwCLcUn;3DX>HmdxDGkHj=^mh+(y{hH&lk??Ch5*_SsaeneDeJX9lN!R&W;t zHv;a$;8H(8yM`9cO!nrlKlTS2n(q$)%Ap`mE*zFI^vZ%WC8q^bL2%kO9LJ?`Tf z<)pW|PhpQwdT;qAl}oqyWxt{E&0+Uu%~vsAO^KoTOc@Nks{i%*>jk+6pRe;;?9(}C zsXjPd%dERG^Bh!RIGpE>h+`|FPeQj@IUqP|wS$5?GC2E+N1wb#4C^CgSTE5u{Z3?dIb7qi*Ue*4h2o^=i1Qs;eAdJ%qaYGq$r*_}AFLTkrwUpZBL z(Nue$k}es37Or6{MPEz*wG~U@o3FeTX&(Fd$R}Ok_6XhQ1+-fW46DI;?y1408B_gt z##Ff?j;UW6+;zd}-wnatmgDXS&i5)Cu5$tp1ov2QUEzF=!{aZ7Yq*cs!o3csydB5Z zM1L>1kApKk{()|f*Imf^Yj5LUVb_p6Bew`x#)5}9iz~M__&n@Z3eNG;-)nHo!>t*| zn}pjGF3kcb&a(Uo=hnwk9P~MS8(MMdIwVLIxWuC&Y274nBeT492?vNIlBjgdn!14JFZhG zujlOE2=1NWtXba;&PF+@j{X%#{&Kd_j{cRkb9OC*YZaU=KzVSTb9NgB*EKl(>lWO> zIlDuGbFIU0Ep^j^J2_`}N^oZc*9$xM_bWcJm9FEa;8KaTAAWmq>753i^Hgxp#kr29 zo)69vnf!B2MR_MUXBFNJ&JvmIES1Wa!P$fTD!7Fx3dzpaMe%KBa`x^P3vTtCoo^>o zEMeM>2ELU{>5W?~b$%PL__e{>-#@B#qll3uXZeUx>)<@zCb$m4^@Vd@MX}yZF}JN& z4h>HJ9(3!!dxP5$-L*!gO~hQ?F}32iFVa=}4GhKS-cuMp389=E+-B%L{h(|>C7A3w zMFY_#I7_E1JIYZxyQ70UJ~*TH5c)E>j|FGF>^@3mAsUPnhN}?D(!t5MLf;yfu15u24{bLso=_UcIyY%E;!GhhHm|Q zOmO|t+lSq0!9f+=hoz*wS0?c@a7*K+eNkoT?!!`E%$@sEaIXc|gyZg;Qr^QY=1gB( zI`%hxE824x9rUtsO6jVubO&K<2^Fh| zjk0}_z7E|!Ya9M{r^nAtG?T7uNvWQL)gyNREN4TzvgeK zJ?X;_NytmEp6*!?tez#$$WpQ3;A~+MAoWI5)T- zcfj#Oum9KH*@ebcL~(qZXsxwkHNlT6HnuU;hlDoSY!X}1WD`re0ofFd%{i<_no$m#maoC_*3^{XL?ZBqOgSrB@ z0!4kQZHcV8KB8X4bEMI$r$RmEKJ~oa8UcIN2PqHFrX!*%?KN0=b#9vV(R20F=ld65 zqOvr471jA=xK?GTm!I=;`j@==WTk-qho|Cl9sZ43>6$%ynP7QBD3?FuqEaCLElQ-H zOr8HGCFY$RD{$XF#QM!@e#hrcT+MYpEgAsNV|d=dV>HtrmT;*O`E=+a2pxv47VYgP z)&%Kpv2?wL@pYsAbu0EZ5M0}5>8325pu|3b_<&&~!M1?5Mq=mtr8-^|0egHbz|fs9 z6ZVE-iV{0nuKm_9=wCz+EB?(e?)Oj8yj_{g*I%L^>lP!2KGoZtBIO_Cqymz-kvVo& zBHUpZIP>91msuZSj~Cj(<#%^LPuknVHCP8&9*bYB>T^y_~Q%R@qk zVI*O7JfhgNVMxcFmhLUX1m%t!_KsnU#CHt~SFnF)*!PwWPWcDJI+T$w3zme06^5-5 z&5Cn^Ujqoe)v)_49q*>?hJ}`W2Mn9GbgPx_kYTK$^Z8<(NAT8p)WK3U@+!rbD<&Pq z?G#Pf{n{_mtq_L1%^EP$_2^(N9^rn&pm&HSJZKo2j-7@T)G>WohUlaU>kZ@Sy1_8y zN;iI;msGdwGpn=llX79-=-BDptlybdOg?0LNCa~UhYjQWh3wzChWlr?28!~LVz8Au zJ`l~ld~BG=rt^Q-uAAq68Ix#?HYrA1i@4QYI+#{JcTpK%L4mKB z_P4iA{kZtdmCt^XoB8sJo}W4!>N6v@t2h*Vk4g~4?^sbx4PjVQ^qKy`t-Oe zIX0|^H=O~!nbY^vpgI$BVfRz_Qm99*W~tM=)lZw#Kc3q%s=TpM{MMi?IxfDZZ7CeV zqUwAV;;m6-?Y!7k{g()bslOR zvuI+o>LJ5&WYxqL#E!wfq5noh+$)+H3FoYJMCXdau=y$IKRVf>(&69@EiCpoPH&!8 zCyt!HU%wSE*V=2q&6LC}OKrWv%}!ubRZ#7&)k|q2(S*Yy<0KcI_>frUywyJr>zJLu zl`ficS`7AkP}ped*$LMYF>}q@5;4n?r6tBylaz%S3Ho=hY9E)xj1FcehV((y!3K@l z34EV03J_;V>BdtrbxXK@7&F(}?%wr?nB}OwN4PN&k5x`LV~5279(I{unLDqG_pUpW zkx5UO&^V=Eu%c3e=ls+BGre2+`3JP4 zJTK)f73DsAJn@ZQ zl;H$x9(adbrnodB!n>py^y@~?TFiaCCt82GlZIhq z_Ni!WBu^Q}dY99pS1SI>upZHP$JwU%Ys1h7ej~c5_>5s9b3cpLU+!1Ku(`x!-|1u1Ftv2bm?o!;Yn0uov_-kcN*fPVg_iOn-X!$?DW|AEi>6>S*Z(w)Y z@_*oLUp1^+{tr|KE&m5C{|AhPQ<^*Cow7nl%m0D)+P}o@f70@QuyFhzz>_W4;x=Yj zuU1Td2D?r)@4o8;>_*Y-LC_Uoy`npXtqrgN(H+7H0X8DKC~QN3-7Xqgb1c9nMBgK9 zV}NZI4G%XNVB1B*-|Yyn2SmdM?hLSpM8lIl9ALXdcME$gz@8AzEbE>C+bf!SnF_Fd zqRC@_fE^T#Wb;gb9TvSo*b&1-=8lTyx$#_(?s?IyEqNipUJ?yY`f`B1Dw_6qEx=|( j-z4nK06Q+aOW3Sot3{s>J*N15!{BpHie~EjL&N?C4REG* diff --git a/tools/urt/tools/quake3/q3map2/q3map2.vcproj.rej b/tools/urt/tools/quake3/q3map2/q3map2.vcproj.rej deleted file mode 100644 index 448f46cc..00000000 --- a/tools/urt/tools/quake3/q3map2/q3map2.vcproj.rej +++ /dev/null @@ -1,17 +0,0 @@ -*************** -*** 180,186 **** - Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="glib-2.0.lib wsock32.lib libxml2.lib libpng.lib libmhash.lib" -- OutputFile=".\Release/q3map2.exe" - LinkIncremental="1" - SuppressStartupBanner="true" - AdditionalLibraryDirectories=""..\..\..\..\mhash-0.9\win32\libmhash\Release";"..\..\..\..\libxml2-2.6\lib";"..\..\..\..\gtk2-2.10\lib"" ---- 180,186 ---- - Name="VCLinkerTool" - AdditionalOptions="/MACHINE:I386" - AdditionalDependencies="glib-2.0.lib wsock32.lib libxml2.lib libpng.lib libmhash.lib" -+ OutputFile=".\Release/q3map2_fs_20g.exe" - LinkIncremental="1" - SuppressStartupBanner="true" - AdditionalLibraryDirectories=""..\..\..\..\mhash-0.9\win32\libmhash\Release";"..\..\..\..\libxml2-2.6\lib";"..\..\..\..\gtk2-2.10\lib"" diff --git a/tools/urt/tools/quake3/q3map2/version.h b/tools/urt/tools/quake3/q3map2/version.h deleted file mode 100644 index 91f5e433..00000000 --- a/tools/urt/tools/quake3/q3map2/version.h +++ /dev/null @@ -1,4 +0,0 @@ -// generated header, see makeversion.py -#define RADIANT_VERSION "1.6.0" -#define RADIANT_MINOR_VERSION "0" -#define RADIANT_MAJOR_VERSION "6"