r3980 - in trunk/misc/gtkradiant: . singlepatches

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Jul 29 12:57:07 EDT 2008


Author: div0
Date: 2008-07-29 12:57:03 -0400 (Tue, 29 Jul 2008)
New Revision: 3980

Added:
   trunk/misc/gtkradiant/singlepatches/
   trunk/misc/gtkradiant/singlepatches/both-obj.diff
Removed:
   trunk/misc/gtkradiant/singlepatches-radiant15/
   trunk/misc/gtkradiant/singlepatches/both-UTpicomodelase.diff
   trunk/misc/gtkradiant/singlepatches/both-UTpicomodelnormals.diff
   trunk/misc/gtkradiant/singlepatches/both-obj.diff
   trunk/misc/gtkradiant/singlepatches/gtkradiant-modelnormals.diff
   trunk/misc/gtkradiant/singlepatches/gtkradiant-nexuizfixes.diff
Modified:
   trunk/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff
   trunk/misc/gtkradiant/mergepatches.sh
Log:
patchset fixed for current svn


Modified: trunk/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff
===================================================================
--- trunk/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff	2008-07-29 16:44:36 UTC (rev 3979)
+++ trunk/misc/gtkradiant/gtkradiant-nexuiz-patchset.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -113,9 +113,9 @@
  	}
 Index: tools/quake3/q3map2/convert_map.c
 ===================================================================
---- tools/quake3/q3map2/convert_map.c	(revision 290)
+--- tools/quake3/q3map2/convert_map.c	(revision 191)
 +++ tools/quake3/q3map2/convert_map.c	(working copy)
-@@ -45,6 +45,105 @@
+@@ -46,6 +46,105 @@
  #define	SNAP_FLOAT_TO_INT	4
  #define	SNAP_INT_TO_FLOAT	(1.0 / SNAP_FLOAT_TO_INT)
  
@@ -221,7 +221,7 @@
  static void ConvertBrush( FILE *f, int num, bspBrush_t *brush, vec3_t origin )
  {
  	int				i, j;
-@@ -53,12 +152,17 @@
+@@ -54,12 +153,17 @@
  	bspShader_t		*shader;
  	char			*texture;
  	bspPlane_t		*plane;
@@ -239,7 +239,7 @@
  	
  	/* clear out build brush */
  	for( i = 0; i < buildBrush->numsides; i++ )
-@@ -108,9 +212,88 @@
+@@ -109,9 +213,88 @@
  		/* get build side */
  		buildSide = &buildBrush->sides[ i ];
  		
@@ -328,7 +328,7 @@
  		
  		/* get texture name */
  		if( !Q_strncasecmp( buildSide->shaderInfo->shader, "textures/", 9 ) )
-@@ -129,14 +312,21 @@
+@@ -130,14 +313,21 @@
  		
  		/* print brush side */
  		/* ( 640 24 -224 ) ( 448 24 -224 ) ( 448 -232 -224 ) common/caulk 0 48 0 0.500000 0.500000 0 0 0 */
@@ -354,11 +354,11 @@
  
 Index: tools/quake3/q3map2/main.c
 ===================================================================
---- tools/quake3/q3map2/main.c	(revision 290)
+--- tools/quake3/q3map2/main.c	(revision 191)
 +++ tools/quake3/q3map2/main.c	(working copy)
-@@ -276,6 +276,18 @@
- 			else
- 				Sys_Printf( "Unknown conversion format \"%s\". Defaulting to ASE.\n", argv[ i ] );
+@@ -541,6 +541,18 @@
+ 					Sys_Printf( "Unknown conversion format \"%s\". Defaulting to ASE.\n", argv[ i ] );
+ 			}
   		}
 +		else if( !strcmp( argv[ i ],  "-ne" ) )
 + 		{
@@ -377,9 +377,9 @@
  	/* clean up map name */
 Index: tools/quake3/q3map2/model.c
 ===================================================================
---- tools/quake3/q3map2/model.c	(revision 290)
+--- tools/quake3/q3map2/model.c	(revision 193)
 +++ tools/quake3/q3map2/model.c	(working copy)
-@@ -221,6 +221,8 @@
+@@ -222,6 +222,8 @@
  	byte				*color;
  	picoIndex_t			*indexes;
  	remap_t				*rm, *glob;
@@ -388,7 +388,7 @@
  	
  	
  	/* get model */
-@@ -399,9 +401,8 @@
+@@ -398,9 +400,8 @@
  		/* ydnar: giant hack land: generate clipping brushes for model triangles */
  		if( si->clipModel || (spawnFlags & 2) )	/* 2nd bit */
  		{
@@ -601,27 +601,32 @@
  		}
 Index: tools/quake3/q3map2/map.c
 ===================================================================
---- tools/quake3/q3map2/map.c	(revision 290)
+--- tools/quake3/q3map2/map.c	(revision 193)
 +++ tools/quake3/q3map2/map.c	(working copy)
-@@ -183,9 +183,15 @@
+@@ -184,7 +184,7 @@
  snaps a plane to normal/distance epsilons
  */
  
 -void SnapPlane( vec3_t normal, vec_t *dist )
 +void SnapPlane( vec3_t normal, vec_t *dist, vec3_t center )
  {
--	SnapNormal( normal );
+ // SnapPlane disabled by LordHavoc because it often messes up collision
+ // brushes made from triangles of embedded models, and it has little effect
+@@ -193,7 +193,13 @@
+   SnapPlane reenabled by namespace because of multiple reports of
+   q3map2-crashes which were triggered by this patch.
+ */
 +	// div0: ensure the point "center" stays on the plane (actually, this
 +	// rotates the plane around the point center).
 +	// if center lies on the plane, it is guaranteed to stay on the plane by
 +	// this fix.
 +	vec_t centerDist = DotProduct(normal, center);
-+  	SnapNormal( normal );
+ 	SnapNormal( normal );
 +	*dist += (DotProduct(normal, center) - centerDist);
  
  	if( fabs( *dist - Q_rint( *dist ) ) < distanceEpsilon )
  		*dist = Q_rint( *dist );
-@@ -199,7 +205,7 @@
+@@ -207,7 +213,7 @@
  must be within an epsilon distance of the plane
  */
  
@@ -630,7 +635,7 @@
  
  #ifdef USE_HASHING
  
-@@ -207,10 +213,14 @@
+@@ -215,10 +221,14 @@
  	int		i, j, hash, h;
  	plane_t	*p;
  	vec_t	d;
@@ -647,7 +652,7 @@
  	hash = (PLANE_HASHES - 1) & (int) fabs( dist );
  	
  	/* search the border bins as well */
-@@ -251,7 +261,13 @@
+@@ -259,7 +269,13 @@
  	plane_t	*p;
  	
  
@@ -664,9 +669,9 @@
  		if( PlaneEqual( p, normal, dist ) )
 Index: tools/quake3/q3map2/shaders.c
 ===================================================================
---- tools/quake3/q3map2/shaders.c	(revision 290)
+--- tools/quake3/q3map2/shaders.c	(revision 191)
 +++ tools/quake3/q3map2/shaders.c	(working copy)
-@@ -747,8 +747,14 @@
+@@ -793,8 +793,14 @@
  	}
  	
  	if( VectorLength( si->color ) <= 0.0f )
@@ -684,22 +689,21 @@
  
 Index: tools/quake3/q3map2/light_ydnar.c
 ===================================================================
---- tools/quake3/q3map2/light_ydnar.c	(revision 290)
+--- tools/quake3/q3map2/light_ydnar.c	(revision 191)
 +++ tools/quake3/q3map2/light_ydnar.c	(working copy)
-@@ -1449,6 +1449,8 @@
- 	vec3_t				color, averageColor, averageDir, total, temp, temp2;
+@@ -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 */
-@@ -1871,6 +1873,78 @@
- 	/* free light list */
+@@ -2223,6 +2332,78 @@
  	FreeTraceLights( &trace );
  	
-+  	/*	-----------------------------------------------------------------
+ 	/*	-----------------------------------------------------------------
 +		floodlight pass
 +		----------------------------------------------------------------- */
 +
@@ -771,10 +775,11 @@
 +		}
 +	}
 +	
- 	/* -----------------------------------------------------------------
- 	   filter pass
- 	   ----------------------------------------------------------------- */
-@@ -3123,7 +3197,320 @@
++	/*	-----------------------------------------------------------------
+ 		dirt pass
+ 		----------------------------------------------------------------- */
+ 	
+@@ -3587,7 +3768,320 @@
  	CreateTraceLightsForBounds( mins, maxs, normal, info->numSurfaceClusters, &surfaceClusters[ info->firstSurfaceCluster ], LIGHT_SURFACES, trace );
  }
  
@@ -1097,9 +1102,9 @@
 +
 Index: tools/quake3/q3map2/light.c
 ===================================================================
---- tools/quake3/q3map2/light.c	(revision 290)
+--- tools/quake3/q3map2/light.c	(revision 191)
 +++ tools/quake3/q3map2/light.c	(working copy)
-@@ -1363,6 +1363,56 @@
+@@ -1378,6 +1378,56 @@
  			break;
  	}
  	
@@ -1156,9 +1161,9 @@
  	/* normalize to get primary light direction */
  	VectorNormalize( gp->dir, gp->dir );
  	
-@@ -1544,6 +1594,12 @@
- 	qboolean	minVertex, minGrid;
- 	const char	*value;
+@@ -1661,6 +1711,12 @@
+ 		RunThreadsOnIndividual( numRawLightmaps, qtrue, DirtyRawLightmap );
+ 	}
  	
 +	/* floodlight them up */
 +	if( floodlighty )
@@ -1167,19 +1172,19 @@
 +		RunThreadsOnIndividual( numRawLightmaps, qtrue, FloodLightRawLightmap );
 +	}
  
- 	/* ydnar: smooth normals */
- 	if( shade )
-@@ -1675,6 +1731,7 @@
+ 	/* ydnar: set up light envelopes */
+ 	SetupEnvelopes( qfalse, fast );
+@@ -1703,6 +1759,7 @@
  		/* flag bouncing */
  		bouncing = qtrue;
  		VectorClear( ambientColor );
-+		floodlighty = qfalse;
++		floodlighty = false;
  		
  		/* generate diffuse lights */
  		RadFreeLights();
-@@ -2114,6 +2171,21 @@
- 			loMem = qtrue;
- 			Sys_Printf( "Enabling low-memory (potentially slower) lighting mode\n" );
+@@ -2191,6 +2256,21 @@
+ 			cpmaHack = qtrue;
+ 			Sys_Printf( "Enabling Challenge Pro Mode Asstacular Vertex Lighting Mode (tm)\n" );
  		}
 +		else if( !strcmp( argv[ i ], "-floodlight" ) )
 +		{
@@ -1197,21 +1202,21 @@
 +			Sys_Printf( "Low Quality FloodLighting enabled\n" );
 +		}
  		
- 		else
- 			Sys_Printf( "WARNING: Unknown option \"%s\"\n", argv[ i ] );
-@@ -2156,6 +2228,7 @@
- 	
+ 		/* r7: dirtmapping */
+ 		else if( !strcmp( argv[ i ], "-dirty" ) )
+@@ -2279,6 +2359,7 @@
  	/* ydnar: set up optimization */
  	SetupBrushes();
+ 	SetupDirt();
 +	SetupFloodLight();
  	SetupSurfaceLightmaps();
  	
  	/* initialize the surface facet tracing */
 Index: tools/quake3/q3map2/lightmaps_ydnar.c
 ===================================================================
---- tools/quake3/q3map2/lightmaps_ydnar.c	(revision 290)
+--- tools/quake3/q3map2/lightmaps_ydnar.c	(revision 191)
 +++ tools/quake3/q3map2/lightmaps_ydnar.c	(working copy)
-@@ -413,6 +413,12 @@
+@@ -414,6 +414,12 @@
  		lm->superNormals = safe_malloc( size );
  	memset( lm->superNormals, 0, size );
  	
@@ -1226,25 +1231,25 @@
  	if( lm->superClusters == NULL )
 Index: tools/quake3/q3map2/q3map2.h
 ===================================================================
---- tools/quake3/q3map2/q3map2.h	(revision 290)
+--- tools/quake3/q3map2/q3map2.h	(revision 191)
 +++ tools/quake3/q3map2/q3map2.h	(working copy)
-@@ -265,6 +265,7 @@
- #define SUPER_NORMAL_SIZE		3
+@@ -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))
-@@ -273,6 +274,7 @@
- #define SUPER_LUXEL( s, x, y )	(lm->superLuxels[ s ] + ((((y) * lm->sw) + (x)) * SUPER_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) )	
- #define SUPER_CLUSTER( x, y )	(lm->superClusters + (((y) * lm->sw) + (x)))
- #define SUPER_DELUXEL( x, y )	(lm->superDeluxels + ((((y) * lm->sw) + (x)) * SUPER_DELUXEL_SIZE))
- #define BSP_DELUXEL( x, y )		(lm->bspDeluxels + ((((y) * lm->w) + (x)) * BSP_DELUXEL_SIZE))
-@@ -1364,6 +1366,7 @@
+ 
+ 
+ 
+@@ -1392,6 +1395,7 @@
  	
  	float					*superDeluxels;	/* average light direction */
  	float					*bspDeluxels;
@@ -1252,66 +1257,280 @@
  }
  rawLightmap_t;
  
-@@ -1670,6 +1673,9 @@
- void						SmoothNormals( void );
+@@ -1704,6 +1708,10 @@
+ float						DirtForSample( trace_t *trace );
+ void						DirtyRawLightmap( int num );
  
- void						MapRawLightmap( int num );
 +void						SetupFloodLight();
 +float						FloodLightForSample( trace_t *trace );
 +void						FloodLightRawLightmap( int num );
++
  void						IlluminateRawLightmap( int num );
  void						IlluminateVertexes( int num );
  
-@@ -2037,6 +2043,12 @@
- Q_EXTERN qboolean			sunOnly;
- Q_EXTERN int				approximateTolerance Q_ASSIGN( 0 );
- Q_EXTERN qboolean			noCollapse;
+@@ -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			debug;
- Q_EXTERN qboolean			debugSurfaces;
- Q_EXTERN qboolean			debugUnused;
++
+ Q_EXTERN qboolean			dump Q_ASSIGN( qfalse );
+ Q_EXTERN qboolean			debug Q_ASSIGN( qfalse );
+ Q_EXTERN qboolean			debugUnused Q_ASSIGN( qfalse );
+Index: tools/quake3/q3map2/game_ja.h
+===================================================================
+--- tools/quake3/q3map2/game_ja.h	(revision 191)
++++ 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 191)
++++ 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 191)
++++ 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/game_wolf.h
+===================================================================
+--- tools/quake3/q3map2/game_wolf.h	(revision 191)
++++ 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 191)
++++ 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/game_etut.h
+===================================================================
+--- tools/quake3/q3map2/game_etut.h	(revision 191)
++++ 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/game_jk2.h
+===================================================================
+--- tools/quake3/q3map2/game_jk2.h	(revision 191)
++++ 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/game_qfusion.h
+===================================================================
+--- tools/quake3/q3map2/game_qfusion.h	(revision 191)
++++ 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 191)
++++ 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/game_quake3.h
+===================================================================
+--- tools/quake3/q3map2/game_quake3.h	(revision 191)
++++ 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 191)
++++ 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/light_ydnar.c
+===================================================================
+--- tools/quake3/q3map2/light_ydnar.c	(revision 191)
++++ 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 );
+ 	
+Index: tools/quake3/q3map2/light.c
+===================================================================
+--- tools/quake3/q3map2/light.c (revision 191)
++++ tools/quake3/q3map2/light.c (working copy)
+@@ -1836,6 +1893,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 ] );
 Index: tools/quake3/q3map2/q3map2.h
 ===================================================================
---- tools/quake3/q3map2/q3map2.h	(revision 290)
+--- tools/quake3/q3map2/q3map2.h	(revision 191)
 +++ tools/quake3/q3map2/q3map2.h	(working copy)
-@@ -1274,6 +1274,7 @@
- 	vec3_t				color;			/* starts out at full color, may be reduced if transparent surfaces are crossed */
- 	
- 	/* output */
-+	vec3_t				hit;
- 	int					compileFlags;	/* for determining surface compile flags traced through */
- 	qboolean			passSolid;
- 	qboolean			opaque;
-Index: tools/quake3/q3map2/light_trace.c
-===================================================================
---- tools/quake3/q3map2/light_trace.c	(revision 290)
-+++ tools/quake3/q3map2/light_trace.c	(working copy)
-@@ -1596,6 +1596,7 @@
- 	/* bogus node number means solid, end tracing unless testing all */
- 	if( nodeNum < 0 )
- 	{
-+		VectorCopy( origin, trace->hit );
- 		trace->passSolid = qtrue;
- 		return qtrue;
- 	}
-@@ -1606,6 +1607,7 @@
- 	/* solid? */
- 	if( node->type == TRACE_LEAF_SOLID )
- 	{
-+		VectorCopy( origin, trace->hit );
- 		trace->passSolid = qtrue;
- 		return qtrue;
- 	}
+@@ -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 */
+@@ -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/light_ydnar.c
 ===================================================================
---- tools/quake3/q3map2/light_ydnar.c	(revision 290)
+--- tools/quake3/q3map2/light_ydnar.c	(revision 191)
 +++ tools/quake3/q3map2/light_ydnar.c	(working copy)
-@@ -372,7 +372,7 @@
+@@ -384,7 +420,7 @@
  #define NUDGE			0.5f
  #define BOGUS_NUDGE		-99999.0f
  
@@ -1320,7 +1539,7 @@
  {
  	int				i, x, y, numClusters, *clusters, pointCluster, *cluster;
  	float			*luxel, *origin, *normal, d, lightmapSampleOffset;
-@@ -380,6 +380,12 @@
+@@ -392,6 +428,12 @@
  	vec3_t			pNormal;
  	vec3_t			vecs[ 3 ];
  	vec3_t			nudged;
@@ -1333,7 +1552,7 @@
  	float			*nudge;
  	static float	nudges[][ 2 ] =
  					{
-@@ -473,6 +479,51 @@
+@@ -485,6 +527,51 @@
  	/* non axial lightmap projection (explicit xyz) */
  	else
  		VectorCopy( dv->xyz, origin );
@@ -1385,7 +1604,7 @@
  	
  	/* planar surfaces have precalculated lightmap vectors for nudging */
  	if( lm->plane != NULL )
-@@ -504,8 +555,13 @@
+@@ -516,8 +603,13 @@
  	else
  		origin[ lm->axisNum ] += lightmapSampleOffset;
  	
@@ -1400,7 +1619,7 @@
  	
  	/* another retarded hack, storing nudge count in luxel[ 1 ] */
  	luxel[ 1 ] = 0.0f;	
-@@ -521,14 +577,14 @@
+@@ -533,14 +625,14 @@
  			for( i = 0; i < 3; i++ )
  			{
  				/* set nudged point*/
@@ -1418,7 +1637,7 @@
  			luxel[ 1 ] += 1.0f;
  		}
  	}
-@@ -538,8 +594,8 @@
+@@ -550,8 +642,8 @@
  	{
  		VectorMA( dv->xyz, lightmapSampleOffset, dv->normal, nudged );
  		pointCluster = ClusterForPointExtFilter( nudged, LUXEL_EPSILON, numClusters, clusters );
@@ -1429,7 +1648,7 @@
  		luxel[ 1 ] += 1.0f;
  	}
  	
-@@ -585,7 +641,7 @@
+@@ -597,7 +689,7 @@
  than the distance between two luxels (thanks jc :)
  */
  
@@ -1438,7 +1657,7 @@
  {
  	bspDrawVert_t	mid, *dv2[ 3 ];
  	int				max;
-@@ -633,7 +689,7 @@
+@@ -645,7 +737,7 @@
  	
  	/* split the longest edge and map it */
  	LerpDrawVert( dv[ max ], dv[ (max + 1) % 3 ], &mid );
@@ -1447,7 +1666,7 @@
  	
  	/* push the point up a little bit to account for fp creep (fixme: revisit this) */
  	//%	VectorMA( mid.xyz, 2.0f, mid.normal, mid.xyz );
-@@ -641,12 +697,12 @@
+@@ -653,12 +745,12 @@
  	/* recurse to first triangle */
  	VectorCopy( dv, dv2 );
  	dv2[ max ] = &mid;
@@ -1462,7 +1681,7 @@
  }
  
  
-@@ -662,6 +718,7 @@
+@@ -674,6 +766,7 @@
  	int				i;
  	vec4_t			plane;
  	vec3_t			*stv, *ttv, stvStatic[ 3 ], ttvStatic[ 3 ];
@@ -1470,7 +1689,7 @@
  	
  	
  	/* get plane if possible */
-@@ -687,16 +744,20 @@
+@@ -699,16 +792,20 @@
  		ttv = NULL;
  	}
  	
@@ -1495,7 +1714,7 @@
  		return qtrue;
  	}
  	
-@@ -718,7 +779,7 @@
+@@ -730,7 +827,7 @@
  			dv2[ 2 ] = dv[ (i + 1) % 3 ];
  			
  			/* map the degenerate triangle */
@@ -1504,7 +1723,7 @@
  		}
  	}
  	
-@@ -780,8 +841,8 @@
+@@ -792,8 +889,8 @@
  	LerpDrawVert( dv[ max + 2 ], dv[ (max + 3) % 4 ], &mid[ 1 ] );
  	
  	/* map the vertexes */
@@ -1515,7 +1734,7 @@
  	
  	/* 0 and 2 */
  	if( max == 0 )
-@@ -866,10 +927,10 @@
+@@ -878,10 +975,10 @@
  	}
  	
  	/* map the vertexes */
@@ -1530,7 +1749,7 @@
  	
  	/* subdivide the quad */
  	MapQuad_r( lm, info, dv, plane, stv, ttv );
-@@ -1161,7 +1222,7 @@
+@@ -1173,7 +1270,7 @@
  					continue;
  				
  				/* map the fake vert */
@@ -1539,7 +1758,7 @@
  			}
  		}
  	}
-@@ -1636,22 +1697,32 @@
+@@ -1963,22 +2062,32 @@
  					deluxel = SUPER_DELUXEL( x, y );
  					origin = SUPER_ORIGIN( x, y );
  					normal = SUPER_NORMAL( x, y );
@@ -1589,16 +1808,16 @@
  					if( deluxemap )
 Index: tools/quake3/q3map2/q3map2.h
 ===================================================================
---- tools/quake3/q3map2/q3map2.h	(revision 290)
+--- tools/quake3/q3map2/q3map2.h	(revision 303)
 +++ tools/quake3/q3map2/q3map2.h	(working copy)
-@@ -34,8 +34,8 @@
+@@ -35,8 +35,8 @@
  
  
  /* version */
--#define Q3MAP_VERSION	"2.5.11"
--#define Q3MAP_MOTD		"A well-oiled toaster oven"
-+#define Q3MAP_VERSION	"2.5.11-div0-obj-decomptexcoords-snapplane-UTavgcolorfix-UTfloodlight-UTtrianglecheck"
-+#define Q3MAP_MOTD		"Blackhole Box gives the light back"
+-#define Q3MAP_VERSION	"2.5.17"
+-#define Q3MAP_MOTD		"Last one turns the lights off"
++#define Q3MAP_VERSION	"2.5.17-div0-obj-decomptexcoords-snapplane-UTavgcolorfix-UTfloodlight-UTlmexposure-UTtrianglecheck"
++#define Q3MAP_MOTD		"Light some candles, put them on a wooden table, take a photo, and paste it on the lightmaps!"
  
  
  

Modified: trunk/misc/gtkradiant/mergepatches.sh
===================================================================
--- trunk/misc/gtkradiant/mergepatches.sh	2008-07-29 16:44:36 UTC (rev 3979)
+++ trunk/misc/gtkradiant/mergepatches.sh	2008-07-29 16:57:03 UTC (rev 3980)
@@ -37,16 +37,16 @@
 cat <<EOF
 Index: tools/quake3/q3map2/q3map2.h
 ===================================================================
---- tools/quake3/q3map2/q3map2.h	(revision 290)
+--- tools/quake3/q3map2/q3map2.h	(revision 303)
 +++ tools/quake3/q3map2/q3map2.h	(working copy)
-@@ -34,8 +34,8 @@
+@@ -35,8 +35,8 @@
  
  
  /* version */
--#define Q3MAP_VERSION	"2.5.11"
--#define Q3MAP_MOTD		"A well-oiled toaster oven"
-+#define Q3MAP_VERSION	"2.5.11-div0$pq"
-+#define Q3MAP_MOTD		"Blackhole Box gives the light back"
+-#define Q3MAP_VERSION	"2.5.17"
+-#define Q3MAP_MOTD		"Last one turns the lights off"
++#define Q3MAP_VERSION	"2.5.17-div0$pq"
++#define Q3MAP_MOTD		"Light some candles, put them on a wooden table, take a photo, and paste it on the lightmaps!"
  
  
  

Copied: trunk/misc/gtkradiant/singlepatches (from rev 3955, trunk/misc/gtkradiant/singlepatches-radiant15)

Deleted: trunk/misc/gtkradiant/singlepatches/both-UTpicomodelase.diff
===================================================================
--- trunk/misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelase.diff	2008-07-28 05:50:56 UTC (rev 3955)
+++ trunk/misc/gtkradiant/singlepatches/both-UTpicomodelase.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -1,459 +0,0 @@
-Index: libs/picomodel/pm_ase.c
-===================================================================
---- libs/picomodel/pm_ase.c	(revision 191)
-+++ 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,&currentVertexFace ))
-+				_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<<total;
-+                     }
-+                     start=point+1;
-+                  }
-+                  
-+                  point++;
-+               }
-+               
-+               
-+			      
-+               
-+            }
- 				if (!_pico_stricmp (p->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')
-           {

Deleted: trunk/misc/gtkradiant/singlepatches/both-UTpicomodelnormals.diff
===================================================================
--- trunk/misc/gtkradiant/singlepatches-radiant15/both-UTpicomodelnormals.diff	2008-07-28 05:50:56 UTC (rev 3955)
+++ trunk/misc/gtkradiant/singlepatches/both-UTpicomodelnormals.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -1,101 +0,0 @@
-Index: libs/picomodel/picomodel.c
-===================================================================
---- libs/picomodel/picomodel.c	(revision 191)
-+++ 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 );
- 	}
- }
-+
-+

Deleted: trunk/misc/gtkradiant/singlepatches/both-obj.diff
===================================================================
--- trunk/misc/gtkradiant/singlepatches-radiant15/both-obj.diff	2008-07-28 05:50:56 UTC (rev 3955)
+++ trunk/misc/gtkradiant/singlepatches/both-obj.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -1,83 +0,0 @@
-Index: libs/picomodel/pm_obj.c
-===================================================================
---- libs/picomodel/pm_obj.c	(revision 193)
-+++ libs/picomodel/pm_obj.c	(working copy)
-@@ -265,7 +265,7 @@
- 		/* get next token in material file */
- 		if (_pico_parse( p,1 ) == NULL)
- 			break;
--#if 0
-+#if 1
- 
- 		/* skip empty lines */
- 		if (p->token == NULL || !strlen( p->token ))
-@@ -307,6 +307,7 @@
- 		else if (!_pico_stricmp(p->token,"map_kd"))
- 		{
- 			char *mapName;
-+			picoShader_t *shader;
- 
- 			/* pointer to current shader must be valid */
- 			if (curShader == NULL)
-@@ -321,6 +322,10 @@
- 				_pico_printf( PICO_ERROR,"Missing material map name in MTL, line %d.",p->curLine);
- 				_obj_mtl_error_return;
- 			}
-+			/* create a new pico shader */
-+			shader = PicoNewShader( model );
-+			if (shader == NULL)
-+				_obj_mtl_error_return;
- 			/* set shader map name */
- 			PicoSetShaderMapName( shader,mapName );
- 		}
-@@ -521,7 +526,7 @@
- 	PicoSetModelFileName( model,fileName );
- 
- 	/* try loading the materials; we don't handle the result */
--#if 0
-+#if 1
- 	_obj_mtl_load( model );
- #endif
- 
-@@ -830,6 +835,41 @@
- 				curVertex += max;
- 			}
- 		}
-+		else if (!_pico_stricmp(p->token,"usemtl"))
-+		{
-+			picoShader_t *shader;
-+			char *name;
-+
-+			/* get material name */
-+			name = _pico_parse( p,0 );
-+
-+			/* validate material name */
-+			if (name == NULL || !strlen(name))
-+			{
-+				_pico_printf( PICO_ERROR,"Missing material name in OBJ, line %d.",p->curLine);
-+			}
-+			else
-+			{
-+				shader = PicoFindShader( model, name, 1 );
-+				if (shader == NULL)
-+				{
-+					_pico_printf( PICO_ERROR,"Undefined material name in OBJ, line %d. Making a default shader.",p->curLine);
-+
-+					/* create a new pico shader */
-+					shader = PicoNewShader( model );
-+					if (shader != NULL)
-+					{
-+						PicoSetShaderName( shader,name );
-+						PicoSetShaderMapName( shader,name );
-+						PicoSetSurfaceShader( curSurface, shader );
-+					}
-+				}
-+				else
-+				{
-+					PicoSetSurfaceShader( curSurface, shader );
-+				}
-+			}
-+		}
- 		/* skip unparsed rest of line and continue */
- 		_pico_parse_skip_rest( p );
- 	}

Added: trunk/misc/gtkradiant/singlepatches/both-obj.diff
===================================================================
--- trunk/misc/gtkradiant/singlepatches/both-obj.diff	                        (rev 0)
+++ trunk/misc/gtkradiant/singlepatches/both-obj.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -0,0 +1,103 @@
+Index: libs/picomodel/pm_obj.c
+===================================================================
+--- libs/picomodel/pm_obj.c	(revision 290)
++++ libs/picomodel/pm_obj.c	(working copy)
+@@ -215,10 +215,9 @@
+ 	}
+ }
+ 
+-#if 0
+ static int _obj_mtl_load( picoModel_t *model )
+ {
+-	//picoShader_t *curShader = NULL;
++	picoShader_t *curShader = NULL;
+ 	picoParser_t *p;
+ 	picoByte_t   *mtlBuffer;
+ 	int			  mtlBufSize;
+@@ -266,7 +265,7 @@
+ 		/* get next token in material file */
+ 		if (_pico_parse( p,1 ) == NULL)
+ 			break;
+-#if 0
++#if 1
+ 
+ 		/* skip empty lines */
+ 		if (p->token == NULL || !strlen( p->token ))
+@@ -308,6 +307,7 @@
+ 		else if (!_pico_stricmp(p->token,"map_kd"))
+ 		{
+ 			char *mapName;
++			picoShader_t *shader;
+ 
+ 			/* pointer to current shader must be valid */
+ 			if (curShader == NULL)
+@@ -322,6 +322,10 @@
+ 				_pico_printf( PICO_ERROR,"Missing material map name in MTL, line %d.",p->curLine);
+ 				_obj_mtl_error_return;
+ 			}
++			/* create a new pico shader */
++			shader = PicoNewShader( model );
++			if (shader == NULL)
++				_obj_mtl_error_return;
+ 			/* set shader map name */
+ 			PicoSetShaderMapName( shader,mapName );
+ 		}
+@@ -478,7 +482,6 @@
+ 	/* return with success */
+ 	return 1;
+ }
+-#endif
+ 
+ /* _obj_load:
+  *  loads a wavefront obj model file.
+@@ -523,7 +526,7 @@
+ 	PicoSetModelFileName( model,fileName );
+ 
+ 	/* try loading the materials; we don't handle the result */
+-#if 0
++#if 1
+ 	_obj_mtl_load( model );
+ #endif
+ 
+@@ -832,6 +835,41 @@
+ 				curVertex += max;
+ 			}
+ 		}
++		else if (!_pico_stricmp(p->token,"usemtl"))
++		{
++			picoShader_t *shader;
++			char *name;
++
++			/* get material name */
++			name = _pico_parse( p,0 );
++
++			/* validate material name */
++			if (name == NULL || !strlen(name))
++			{
++				_pico_printf( PICO_ERROR,"Missing material name in OBJ, line %d.",p->curLine);
++			}
++			else
++			{
++				shader = PicoFindShader( model, name, 1 );
++				if (shader == NULL)
++				{
++					_pico_printf( PICO_ERROR,"Undefined material name in OBJ, line %d. Making a default shader.",p->curLine);
++
++					/* create a new pico shader */
++					shader = PicoNewShader( model );
++					if (shader != NULL)
++					{
++						PicoSetShaderName( shader,name );
++						PicoSetShaderMapName( shader,name );
++						PicoSetSurfaceShader( curSurface, shader );
++					}
++				}
++				else
++				{
++					PicoSetSurfaceShader( curSurface, shader );
++				}
++			}
++		}
+ 		/* skip unparsed rest of line and continue */
+ 		_pico_parse_skip_rest( p );
+ 	}

Deleted: trunk/misc/gtkradiant/singlepatches/gtkradiant-modelnormals.diff
===================================================================
--- trunk/misc/gtkradiant/singlepatches-radiant15/gtkradiant-modelnormals.diff	2008-07-28 05:50:56 UTC (rev 3955)
+++ trunk/misc/gtkradiant/singlepatches/gtkradiant-modelnormals.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -1,34 +0,0 @@
-Index: plugins/model/model.cpp
-===================================================================
---- plugins/model/model.cpp	(revision 193)
-+++ plugins/model/model.cpp	(working copy)
-@@ -123,14 +123,27 @@
-     }
-     glVertexPointer(3, GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->vertex);
-     glDrawElements(GL_TRIANGLES, GLsizei(m_indices.size()), RenderIndexTypeID, m_indices.data());
-+
- #if defined(_DEBUG)
-+	GLfloat modelview[16];
-+	glGetFloatv(GL_MODELVIEW_MATRIX, modelview); // I know this is slow as hell, but hey - we're in _DEBUG
-+	Matrix4 modelview_inv(
-+		modelview[0], modelview[1], modelview[2], modelview[3],
-+		modelview[4], modelview[5], modelview[6], modelview[7],
-+		modelview[8], modelview[9], modelview[10], modelview[11],
-+		modelview[12], modelview[13], modelview[14], modelview[15]);
-+	matrix4_full_invert(modelview_inv);
-+	Matrix4 modelview_inv_transposed = matrix4_transposed(modelview_inv);
-+
-     glBegin(GL_LINES);
- 
-     for(Array<ArbitraryMeshVertex>::const_iterator i = m_vertices.begin(); i != m_vertices.end(); ++i)
-     {
--      Vector3 normal = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal3f_to_vector3((*i).normal), 8));
-+	  Vector3 normal = normal3f_to_vector3((*i).normal);
-+	  normal = matrix4_transformed_direction(modelview_inv, vector3_normalised(matrix4_transformed_direction(modelview_inv_transposed, normal))); // do some magic
-+      Vector3 normalTransformed = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal, 8));
-       glVertex3fv(vertex3f_to_array((*i).vertex));
--      glVertex3fv(vector3_to_array(normal));
-+      glVertex3fv(vector3_to_array(normalTransformed));
-     }
-     glEnd();
- #endif

Deleted: trunk/misc/gtkradiant/singlepatches/gtkradiant-nexuizfixes.diff
===================================================================
--- trunk/misc/gtkradiant/singlepatches-radiant15/gtkradiant-nexuizfixes.diff	2008-07-28 05:50:56 UTC (rev 3955)
+++ trunk/misc/gtkradiant/singlepatches/gtkradiant-nexuizfixes.diff	2008-07-29 16:57:03 UTC (rev 3980)
@@ -1,13 +0,0 @@
-Index: games/NexuizPack/games/nexuiz.game
-===================================================================
---- games/NexuizPack/games/nexuiz.game	(revision 26)
-+++ games/NexuizPack/games/nexuiz.game	(working copy)
-@@ -17,7 +17,7 @@
-   shaderpath="scripts"
-   archivetypes="pk3"
-   texturetypes="tga jpg png"
--  modeltypes="md3 mdl md2 ase"
-+  modeltypes="md3 mdl md2 ase obj"
-   maptypes="mapq3"
-   shaders="quake3"
-   entityclass="quake3"




More information about the nexuiz-commits mailing list