diff -crB openarena-engine-0.8.1/code/renderer/tr_flares.c OORefFlare/renderer/tr_flares.c
*** openarena-engine-0.8.1/code/renderer/tr_flares.c	2008-08-09 18:28:18.000000000 +0200
--- OORefFlare/renderer/tr_flares.c	2009-12-08 13:11:23.000000000 +0100
***************
*** 314,319 ****
--- 314,320 ----
  	int				iColor[3];
  	float distance, intensity, factor;
  	byte fogFactors[3] = {255, 255, 255};
+ 	int ind=0;
  
  	backEnd.pc.c_flareRenders++;
  
***************
*** 413,425 ****
  	tess.vertexColors[tess.numVertexes][2] = iColor[2];
  	tess.vertexColors[tess.numVertexes][3] = 255;
  	tess.numVertexes++;
! 
  	tess.indexes[tess.numIndexes++] = 0;
  	tess.indexes[tess.numIndexes++] = 1;
  	tess.indexes[tess.numIndexes++] = 2;
  	tess.indexes[tess.numIndexes++] = 0;
  	tess.indexes[tess.numIndexes++] = 2;
  	tess.indexes[tess.numIndexes++] = 3;
  
  	RB_EndSurface();
  }
--- 414,614 ----
  	tess.vertexColors[tess.numVertexes][2] = iColor[2];
  	tess.vertexColors[tess.numVertexes][3] = 255;
  	tess.numVertexes++;
! 	
  	tess.indexes[tess.numIndexes++] = 0;
  	tess.indexes[tess.numIndexes++] = 1;
  	tess.indexes[tess.numIndexes++] = 2;
  	tess.indexes[tess.numIndexes++] = 0;
  	tess.indexes[tess.numIndexes++] = 2;
  	tess.indexes[tess.numIndexes++] = 3;
+ 	
+ 	ind+=4;
+ 	
+ 	// reflections -- tcpparena
+ 	
+ 	if(r_lensReflection1->integer){
+ 		
+ 		// renders sharp lens flare.
+ 		
+ 		float cx, cy;
+ 		float dx, dy;
+ 		float size2;
+ 		const float poses[]=	{-.15f, 0.6f, -.1f, -.6f, -1.8f};
+ 		const float sizes[]=	{0.14f, 0.2f, 0.1f, 0.2f, 1.0f};
+ 		int brightness1[]=	{8,25, 40, 26, 10};		// red
+ 		int brightness2[]=	{15,23, 25, 30, 5};		// green
+ 		int brightness3[]=	{12,20, 30, 28, 10};	// blue
+ 		const float r3_2=0.866025403784439f;
+ 		int n;
+ 		cx=backEnd.viewParms.viewportX+(backEnd.viewParms.viewportWidth>>1);
+ 		cy=backEnd.viewParms.viewportY+(backEnd.viewParms.viewportHeight>>1);
+ 		for(n=0;n<5;n++){
+ 			dx=(f->windowX-cx)*poses[n]+cx;
+ 			dy=(f->windowY-cy)*poses[n]+cy;
+ 			size2=sizes[n]*backEnd.viewParms.viewportWidth*.25f;
+ 			
+ 			brightness1[n]=(int)(brightness1[n]*r_lensReflectionBrightness->value);
+ 			brightness2[n]=(int)(brightness2[n]*r_lensReflectionBrightness->value);
+ 			brightness3[n]=(int)(brightness3[n]*r_lensReflectionBrightness->value);
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx-size2;
+ 			tess.xyz[tess.numVertexes][1] = dy;
+ 			tess.texCoords[tess.numVertexes][0][0] = .5f;
+ 			tess.texCoords[tess.numVertexes][0][1] = .5f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx-size2*.5f;
+ 			tess.xyz[tess.numVertexes][1] = dy-size2*r3_2;
+ 			tess.texCoords[tess.numVertexes][0][0] = .5f;
+ 			tess.texCoords[tess.numVertexes][0][1] = .5f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx+size2*.5f;
+ 			tess.xyz[tess.numVertexes][1] = dy-size2*r3_2;
+ 			tess.texCoords[tess.numVertexes][0][0] = .5f;
+ 			tess.texCoords[tess.numVertexes][0][1] = .5f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx+size2;
+ 			tess.xyz[tess.numVertexes][1] = dy;
+ 			tess.texCoords[tess.numVertexes][0][0] = .5f;
+ 			tess.texCoords[tess.numVertexes][0][1] = .5f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx+size2*.5f;
+ 			tess.xyz[tess.numVertexes][1] = dy+size2*r3_2;
+ 			tess.texCoords[tess.numVertexes][0][0] = .5f;
+ 			tess.texCoords[tess.numVertexes][0][1] = .5f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx-size2*.5f;
+ 			tess.xyz[tess.numVertexes][1] = dy+size2*r3_2;
+ 			tess.texCoords[tess.numVertexes][0][0] = .5f;
+ 			tess.texCoords[tess.numVertexes][0][1] = .5f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.indexes[tess.numIndexes++] = 2+ind;
+ 			tess.indexes[tess.numIndexes++] = 1+ind;
+ 			tess.indexes[tess.numIndexes++] = 0+ind;
+ 			tess.indexes[tess.numIndexes++] = 3+ind;
+ 			tess.indexes[tess.numIndexes++] = 2+ind;
+ 			tess.indexes[tess.numIndexes++] = 0+ind;
+ 			tess.indexes[tess.numIndexes++] = 4+ind;
+ 			tess.indexes[tess.numIndexes++] = 3+ind;
+ 			tess.indexes[tess.numIndexes++] = 0+ind;
+ 			tess.indexes[tess.numIndexes++] = 5+ind;
+ 			tess.indexes[tess.numIndexes++] = 4+ind;
+ 			tess.indexes[tess.numIndexes++] = 0+ind;
+ 			
+ 			ind+=6;
+ 			
+ 		}
+ 	}
+ 	
+ 	if(r_lensReflection2->integer){
+ 		
+ 		// renders fuzzy lens flare.
+ 		
+ 		float cx, cy;
+ 		float dx, dy;
+ 		float size2;
+ 		const float poses[]=	{1.7f, -0.2f};
+ 		const float sizes[]=	{1.2f, 0.2f};
+ 		int brightness1[]=	{25, 40};	// red
+ 		int brightness2[]=	{35, 10};	// green
+ 		int brightness3[]=	{30, 15};	// blue
+ 		int n;
+ 		cx=backEnd.viewParms.viewportX+(backEnd.viewParms.viewportWidth>>1);
+ 		cy=backEnd.viewParms.viewportY+(backEnd.viewParms.viewportHeight>>1);
+ 		
+ 		
+ 		for(n=0;n<2;n++){
+ 			dx=(f->windowX-cx)*poses[n]+cx;
+ 			dy=(f->windowY-cy)*poses[n]+cy;
+ 			size2=sizes[n]*backEnd.viewParms.viewportWidth*.25f;
+ 			
+ 			brightness1[n]=(int)(brightness1[n]*r_lensReflectionBrightness->value);
+ 			brightness2[n]=(int)(brightness2[n]*r_lensReflectionBrightness->value);
+ 			brightness3[n]=(int)(brightness3[n]*r_lensReflectionBrightness->value);
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx-size2;
+ 			tess.xyz[tess.numVertexes][1] = dy-size2;
+ 			tess.texCoords[tess.numVertexes][0][0] = 0.f;
+ 			tess.texCoords[tess.numVertexes][0][1] = 0.f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx-size2;
+ 			tess.xyz[tess.numVertexes][1] = dy+size2;
+ 			tess.texCoords[tess.numVertexes][0][0] = 0.f;
+ 			tess.texCoords[tess.numVertexes][0][1] = 1.f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx+size2;
+ 			tess.xyz[tess.numVertexes][1] = dy+size2;
+ 			tess.texCoords[tess.numVertexes][0][0] = 1.f;
+ 			tess.texCoords[tess.numVertexes][0][1] = 1.f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 			
+ 			tess.xyz[tess.numVertexes][0] = dx+size2;
+ 			tess.xyz[tess.numVertexes][1] = dy-size2;
+ 			tess.texCoords[tess.numVertexes][0][0] = 1.f;
+ 			tess.texCoords[tess.numVertexes][0][1] = 0.f;
+ 			tess.vertexColors[tess.numVertexes][0] = (iColor[0]*brightness1[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][1] = (iColor[1]*brightness2[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][2] = (iColor[2]*brightness3[n])>>8;
+ 			tess.vertexColors[tess.numVertexes][3] = 255;
+ 			tess.numVertexes++;
+ 		
+ 			tess.indexes[tess.numIndexes++] = 0+ind;
+ 			tess.indexes[tess.numIndexes++] = 1+ind;
+ 			tess.indexes[tess.numIndexes++] = 2+ind;
+ 			tess.indexes[tess.numIndexes++] = 0+ind;
+ 			tess.indexes[tess.numIndexes++] = 2+ind;
+ 			tess.indexes[tess.numIndexes++] = 3+ind;
+ 			
+ 			ind+=4;
+ 		
+ 			
+ 		}
+ 	}
+ 
+ 	
  
  	RB_EndSurface();
  }
diff -crB openarena-engine-0.8.1/code/renderer/tr_init.c OORefFlare/renderer/tr_init.c
*** openarena-engine-0.8.1/code/renderer/tr_init.c	2008-08-09 22:22:37.000000000 +0200
--- OORefFlare/renderer/tr_init.c	2009-12-08 13:10:10.000000000 +0100
***************
*** 159,164 ****
--- 159,169 ----
  cvar_t	*r_maxpolyverts;
  int		max_polyverts;
  
+ // tcpp
+ cvar_t	*r_lensReflection1;
+ cvar_t	*r_lensReflection2;
+ cvar_t	*r_lensReflectionBrightness;
+ 
  /*
  ** InitOpenGL
  **
***************
*** 707,713 ****
  
  	if( cmd->motionJpeg )
  	{
! 		frameSize = SaveJPGToBuffer( cmd->encodeBuffer, 90,
  				cmd->width, cmd->height, cmd->captureBuffer );
  		ri.CL_WriteAVIVideoFrame( cmd->encodeBuffer, frameSize );
  	}
--- 712,718 ----
  
  	if( cmd->motionJpeg )
  	{
! 		frameSize = SaveJPGToBuffer( cmd->encodeBuffer, 50,
  				cmd->width, cmd->height, cmd->captureBuffer );
  		ri.CL_WriteAVIVideoFrame( cmd->encodeBuffer, frameSize );
  	}
***************
*** 1008,1014 ****
  
  	r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0);
  	r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0);
! 
  	// make sure all the commands added here are also
  	// removed in R_Shutdown
  	ri.Cmd_AddCommand( "imagelist", R_ImageList_f );
--- 1013,1023 ----
  
  	r_maxpolys = ri.Cvar_Get( "r_maxpolys", va("%d", MAX_POLYS), 0);
  	r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", va("%d", MAX_POLYVERTS), 0);
! 	
! 	r_lensReflection1 = ri.Cvar_Get( "r_lensReflection1", "1" , 0);	// sharp reflection
! 	r_lensReflection2 = ri.Cvar_Get( "r_lensReflection2", "0" , 0); // fuzzy reflection
! 	r_lensReflectionBrightness = ri.Cvar_Get( "r_lensReflectionBrightness", "0.5" , 0);
! 	
  	// make sure all the commands added here are also
  	// removed in R_Shutdown
  	ri.Cmd_AddCommand( "imagelist", R_ImageList_f );
diff -crB openarena-engine-0.8.1/code/renderer/tr_local.h OORefFlare/renderer/tr_local.h
*** openarena-engine-0.8.1/code/renderer/tr_local.h	2008-08-09 22:22:37.000000000 +0200
--- OORefFlare/renderer/tr_local.h	2009-08-11 12:36:40.000000000 +0200
***************
*** 1117,1122 ****
--- 1117,1126 ----
  
  extern	cvar_t	*r_GLlibCoolDownMsec;
  
+ extern	cvar_t	*r_lensReflection1;
+ extern	cvar_t	*r_lensReflection2;
+ extern	cvar_t	*r_lensReflectionBrightness;
+ 
  //====================================================================
  
  float R_NoiseGet4f( float x, float y, float z, float t );
