diff --git a/quake/src/WinQuake/gl_rlight.cpp b/quake/src/WinQuake/gl_rlight.cpp
index 65da688..8a6fca2 100755
--- a/quake/src/WinQuake/gl_rlight.cpp
+++ b/quake/src/WinQuake/gl_rlight.cpp
@@ -8,7 +8,7 @@
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the GNU General Public License for more details.
 
@@ -32,7 +32,7 @@
 void R_AnimateLight (void)
 {
 	int			i,j,k;
-	
+
 //
 // light animations
 // 'm' is normal light, 'a' is no light, 'z' is double bright
@@ -48,7 +48,7 @@
 		k = cl_lightstyle[j].map[k] - 'a';
 		k = k*22;
 		d_lightstylevalue[j] = k;
-	}	
+	}
 }
 
 /*
@@ -92,21 +92,23 @@
     glEnableClientState(GL_COLOR_ARRAY);
 	glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 	glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer);
-	glColorPointer(3, GL_FLOAT, 0, gColorBuffer);
+	glColorPointer(4, GL_FLOAT, 0, gColorBuffer);
 
 	{
 	    float* pPos = gVertexBuffer;
 		float* pColor = gColorBuffer;
-		*pColor++ = 0.2;
-		*pColor++ = 0.1;
-		*pColor++ = 0.0;
+		*pColor++ = 0.2f;
+		*pColor++ = 0.1f;
+		*pColor++ = 0.0f;
+		*pColor++ = 1.0f;
 		for (i=0 ; i<3 ; i++)
 			*pPos++ = light->origin[i] - vpn[i]*rad;
 		for (i=16 ; i>=0 ; i--)
 		{
-			*pColor++ = 0.0;
-			*pColor++ = 0.0;
-			*pColor++ = 0.0;
+			*pColor++ = 0.0f;
+			*pColor++ = 0.0f;
+			*pColor++ = 0.0f;
+			*pColor++ = 0.0f;
 			a = i/16.0 * M_PI*2;
 			for (j=0 ; j<3 ; j++)
 				*pPos++ = light->origin[j] + vright[j]*cos(a)*rad
@@ -117,7 +119,7 @@
     glDisableClientState(GL_COLOR_ARRAY);
 	glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 	glColor3f(0,0,0); // Ensure the color ends up being zero just like the non-OpenGLES code
-	
+
 #else
 	glBegin (GL_TRIANGLE_FAN);
 	glColor3f (0.2,0.1,0.0);
@@ -193,13 +195,13 @@
 	float		dist;
 	msurface_t	*surf;
 	int			i;
-	
+
 	if (node->contents < 0)
 		return;
 
 	splitplane = node->plane;
 	dist = DotProduct (light->origin, splitplane->normal) - splitplane->dist;
-	
+
 	if (dist > light->radius)
 	{
 		R_MarkLights (light, bit, node->children[0]);
@@ -210,7 +212,7 @@
 		R_MarkLights (light, bit, node->children[1]);
 		return;
 	}
-		
+
 // mark the polygons
 	surf = cl.worldmodel->surfaces + node->firstsurface;
 	for (i=0 ; i<node->numsurfaces ; i++, surf++)
@@ -282,7 +284,7 @@
 
 	if (node->contents < 0)
 		return -1;		// didn't hit anything
-	
+
 // calculate mid point
 
 // FIXME: optimize for axial
@@ -290,23 +292,23 @@
 	front = DotProduct (start, plane->normal) - plane->dist;
 	back = DotProduct (end, plane->normal) - plane->dist;
 	side = front < 0;
-	
+
 	if ( (back < 0) == side)
 		return RecursiveLightPoint (node->children[side], start, end);
-	
+
 	frac = front / (front-back);
 	mid[0] = start[0] + (end[0] - start[0])*frac;
 	mid[1] = start[1] + (end[1] - start[1])*frac;
 	mid[2] = start[2] + (end[2] - start[2])*frac;
-	
-// go down front side	
+
+// go down front side
 	r = RecursiveLightPoint (node->children[side], start, mid);
 	if (r >= 0)
 		return r;		// hit something
-		
+
 	if ( (back < 0) == side )
 		return -1;		// didn't hit anuthing
-		
+
 // check for impact on this node
 	VectorCopy (mid, lightspot);
 	lightplane = plane;
@@ -318,17 +320,17 @@
 			continue;	// no lightmaps
 
 		tex = surf->texinfo;
-		
+
 		s = (int) (DotProduct (mid, tex->vecs[0]) + tex->vecs[0][3]);
 		t = (int) (DotProduct (mid, tex->vecs[1]) + tex->vecs[1][3]);
 
 		if (s < surf->texturemins[0] ||
 		t < surf->texturemins[1])
 			continue;
-		
+
 		ds = s - surf->texturemins[0];
 		dt = t - surf->texturemins[1];
-		
+
 		if ( ds > surf->extents[0] || dt > surf->extents[1] )
 			continue;
 
@@ -353,10 +355,10 @@
 				lightmap += ((surf->extents[0]>>4)+1) *
 						((surf->extents[1]>>4)+1);
 			}
-			
+
 			r >>= 8;
 		}
-		
+
 		return r;
 	}
 
@@ -368,16 +370,16 @@
 {
 	vec3_t		end;
 	int			r;
-	
+
 	if (!cl.worldmodel->lightdata)
 		return 255;
-	
+
 	end[0] = p[0];
 	end[1] = p[1];
 	end[2] = p[2] - 2048;
-	
+
 	r = RecursiveLightPoint (cl.worldmodel->nodes, p, end);
-	
+
 	if (r == -1)
 		r = 0;
 
diff --git a/quake/src/WinQuake/gl_rmain.cpp b/quake/src/WinQuake/gl_rmain.cpp
index 064deb4..03e7889 100755
--- a/quake/src/WinQuake/gl_rmain.cpp
+++ b/quake/src/WinQuake/gl_rmain.cpp
@@ -8,7 +8,7 @@
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the GNU General Public License for more details.
 
@@ -35,7 +35,7 @@
 
 int			c_brush_polys, c_alias_polys;
 
-qboolean	envmap;				// true during envmap command capture 
+qboolean	envmap;				// true during envmap command capture
 
 int			currenttexture = -1;		// to avoid unnecessary texture sets
 
@@ -237,7 +237,7 @@
 			1, 0,
 			1, 1
 		};
-		
+
 		VectorMA (e->origin, frame->down, up, point);
 		VectorMA (point, frame->left, right, pPoint);
 		pPoint += 3;
@@ -252,12 +252,12 @@
 
 		VectorMA (e->origin, frame->down, up, point);
 		VectorMA (point, frame->right, right, pPoint);
-		
+
 		glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer);
 		glTexCoordPointer(2, GL_FLOAT, 0, texCoords);
 		glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
 	}
-	
+
 #else
 	glBegin (GL_QUADS);
 
@@ -280,7 +280,7 @@
 	VectorMA (e->origin, frame->down, up, point);
 	VectorMA (point, frame->right, right, point);
 	glVertex3fv (point);
-	
+
 	glEnd ();
 #endif
 
@@ -349,7 +349,7 @@
 		count = *order++;
 		if (!count)
 			break;		// done
-			
+
 #ifdef USE_OPENGLES
 		{
 			int primType;
@@ -357,7 +357,7 @@
 			float* pColor;
 			float* pTexCoord;
 			float* pPos;
-			
+
 			if (count < 0)
 			{
 				count = -count;
@@ -365,12 +365,12 @@
 			}
 			else
 				primType = GL_TRIANGLE_STRIP;
-			
+
 			// texture coordinates come from the draw list
 			glTexCoordPointer(2, GL_FLOAT, 0, gTexCoordBuffer);
 			glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer);
-			glColorPointer(3, GL_FLOAT, 0, gColorBuffer);
-		
+			glColorPointer(4, GL_FLOAT, 0, gColorBuffer);
+
 			pColor = gColorBuffer;
 			pPos = gVertexBuffer;
 			pTexCoord = gTexCoordBuffer;
@@ -381,18 +381,19 @@
 				*pTexCoord++ = ((float *)order)[0];
 				*pTexCoord++ = ((float *)order)[1];
 				order += 2;
-				
+
 				// normals and vertexes come from the frame list
 				l = shadedots[verts->lightnormalindex] * shadelight;
 				*pColor++ = l;
 				*pColor++ = l;
 				*pColor++ = l;
+				*pColor++ = 1.0f;
 				*pPos++ = verts->v[0];
 				*pPos++ = verts->v[1];
 				*pPos++ = verts->v[2];
 				verts++;
 		    } while (--c);
-									
+
 			glDrawArrays(primType, 0, count);
 		}
 
@@ -464,14 +465,14 @@
 		count = *order++;
 		if (!count)
 			break;		// done
-			
+
 #ifdef USE_OPENGLES
 
 		{
 			int primType;
 			int c;
 			float* pVertex;
-			
+
 			if (count < 0)
 			{
 				count = -count;
@@ -479,7 +480,7 @@
 			}
 			else
 				primType = GL_TRIANGLE_STRIP;
-					
+
 			pVertex = gVertexBuffer;
 			for(c = 0; c < count; c++)
 			{
@@ -496,11 +497,11 @@
 				pVertex[1] -= shadevector[1]*(pVertex[2]+lheight);
 				pVertex[2] = height;
 	//			height -= 0.001;
-	
+
 				pVertex += 3;
 				verts++;
 			}
-			
+
 			glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer);
 			glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 			glDrawArrays(primType, 0, count);
@@ -538,10 +539,10 @@
 		} while (--count);
 
 		glEnd ();
-		
+
 #endif
 
-	}	
+	}
 }
 
 
@@ -655,7 +656,7 @@
 
 	shadedots = r_avertexnormal_dots[((int)(e->angles[1] * (SHADEDOT_QUANT / 360.0))) & (SHADEDOT_QUANT - 1)];
 	shadelight = shadelight / 200.0;
-	
+
 	an = e->angles[1]/180*M_PI;
 	shadevector[0] = cos(-an);
 	shadevector[1] = sin(-an);
@@ -826,7 +827,7 @@
 	ambientlight = j;
 	shadelight = j;
 
-// add dynamic lights		
+// add dynamic lights
 	for (lnum=0 ; lnum<MAX_DLIGHTS ; lnum++)
 	{
 		dl = &cl_dlights[lnum];
@@ -932,7 +933,7 @@
 {
 	int		i;
 
-	if (r_refdef.fov_x == 90) 
+	if (r_refdef.fov_x == 90)
 	{
 		// front side is visible
 
@@ -1130,7 +1131,7 @@
         float zx = z * x;
         float xs = x * s;
         float ys = y * s;
-        float zs = z * s;       
+        float zs = z * s;
         rm[rmOffset +  0] = x*x*nc +  c;
         rm[rmOffset +  4] =  xy*nc - zs;
         rm[rmOffset +  8] =  zx*nc + ys;
@@ -1215,7 +1216,7 @@
 		glCullFace(GL_FRONT);
 
 	glMatrixMode(GL_MODELVIEW);
-	
+
 #ifdef DO_OWN_MATRIX_MATH
 
 	float mv[16];
@@ -1229,7 +1230,7 @@
     translateM(mv, 0, -r_refdef.vieworg[0],  -r_refdef.vieworg[1],  -r_refdef.vieworg[2]);
 
     glLoadMatrixf(mv);
-    
+
     memcpy(r_world_matrix, mv, sizeof(r_world_matrix));
 
 #else
@@ -1523,6 +1524,6 @@
 	{
 //		glFinish ();
 		time2 = Sys_FloatTime ();
-		Con_Printf ("%3i ms  %4i wpoly %4i epoly\n", (int)((time2-time1)*1000), c_brush_polys, c_alias_polys); 
+		Con_Printf ("%3i ms  %4i wpoly %4i epoly\n", (int)((time2-time1)*1000), c_brush_polys, c_alias_polys);
 	}
 }
diff --git a/quake/src/WinQuake/r_part.cpp b/quake/src/WinQuake/r_part.cpp
index 3688c81..9ed4223 100755
--- a/quake/src/WinQuake/r_part.cpp
+++ b/quake/src/WinQuake/r_part.cpp
@@ -8,7 +8,7 @@
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 See the GNU General Public License for more details.
 
@@ -86,20 +86,20 @@
 				free_particles = p->next;
 				p->next = active_particles;
 				active_particles = p;
-		
+
 				p->die = cl.time + 0.2 + (rand()&7) * 0.02;
 				p->color = 150 + rand()%6;
 				p->type = pt_slowgrav;
-				
+
 				dir[0] = j*8;
 				dir[1] = i*8;
 				dir[2] = k*8;
-	
+
 				p->org[0] = org[0] + i + (rand()&3);
 				p->org[1] = org[1] + j + (rand()&3);
 				p->org[2] = org[2] + k + (rand()&3);
-	
-				VectorNormalize (dir);						
+
+				VectorNormalize (dir);
 				vel = 50 + (rand()&63);
 				VectorScale (dir, vel, p->vel);
 			}
@@ -130,7 +130,7 @@
 	float		sr, sp, sy, cr, cp, cy;
 	vec3_t		forward;
 	float		dist;
-	
+
 	dist = 64;
 	count = 50;
 
@@ -152,7 +152,7 @@
 		angle = cl.time * avelocities[i][2];
 		sr = sin(angle);
 		cr = cos(angle);
-	
+
 		forward[0] = cp*cy;
 		forward[1] = cp*sy;
 		forward[2] = -sp;
@@ -167,10 +167,10 @@
 		p->die = cl.time + 0.01;
 		p->color = 0x6f;
 		p->type = pt_explode;
-		
-		p->org[0] = ent->origin[0] + r_avertexnormals[i][0]*dist + forward[0]*beamlength;			
-		p->org[1] = ent->origin[1] + r_avertexnormals[i][1]*dist + forward[1]*beamlength;			
-		p->org[2] = ent->origin[2] + r_avertexnormals[i][2]*dist + forward[2]*beamlength;			
+
+		p->org[0] = ent->origin[0] + r_avertexnormals[i][0]*dist + forward[0]*beamlength;
+		p->org[1] = ent->origin[1] + r_avertexnormals[i][1]*dist + forward[1]*beamlength;
+		p->org[2] = ent->origin[2] + r_avertexnormals[i][2]*dist + forward[2]*beamlength;
 	}
 }
 
@@ -183,7 +183,7 @@
 void R_ClearParticles (void)
 {
 	int		i;
-	
+
 	free_particles = &particles[0];
 	active_particles = NULL;
 
@@ -201,7 +201,7 @@
 	int		c;
 	particle_t	*p;
 	char	name[MAX_OSPATH];
-	
+
 	sprintf (name,"maps/%s.pts", sv.name);
 
 	COM_FOpenFile (name, &f);
@@ -210,7 +210,7 @@
 		Con_Printf ("couldn't open %s\n", name);
 		return;
 	}
-	
+
 	Con_Printf ("Reading %s...\n", name);
 	c = 0;
 	for ( ;; )
@@ -219,7 +219,7 @@
 		if (r != 3)
 			break;
 		c++;
-		
+
 		if (!free_particles)
 		{
 			Con_Printf ("Not enough free particles\n");
@@ -229,7 +229,7 @@
 		free_particles = p->next;
 		p->next = active_particles;
 		active_particles = p;
-		
+
 		p->die = 99999;
 		p->color = (-c)&15;
 		p->type = pt_static;
@@ -252,7 +252,7 @@
 {
 	vec3_t		org, dir;
 	int			i, count, msgcount, color;
-	
+
 	for (i=0 ; i<3 ; i++)
 		org[i] = MSG_ReadCoord ();
 	for (i=0 ; i<3 ; i++)
@@ -264,10 +264,10 @@
 	count = 1024;
 else
 	count = msgcount;
-	
+
 	R_RunParticleEffect (org, dir, color, count);
 }
-	
+
 /*
 ===============
 R_ParticleExplosion
@@ -278,7 +278,7 @@
 {
 	int			i, j;
 	particle_t	*p;
-	
+
 	for (i=0 ; i<1024 ; i++)
 	{
 		if (!free_particles)
@@ -356,7 +356,7 @@
 {
 	int			i, j;
 	particle_t	*p;
-	
+
 	for (i=0 ; i<1024 ; i++)
 	{
 		if (!free_particles)
@@ -401,7 +401,7 @@
 {
 	int			i, j;
 	particle_t	*p;
-	
+
 	for (i=0 ; i<count ; i++)
 	{
 		if (!free_particles)
@@ -473,20 +473,20 @@
 				free_particles = p->next;
 				p->next = active_particles;
 				active_particles = p;
-		
+
 				p->die = cl.time + 2 + (rand()&31) * 0.02;
 				p->color = 224 + (rand()&7);
 				p->type = pt_slowgrav;
-				
+
 				dir[0] = j*8 + (rand()&7);
 				dir[1] = i*8 + (rand()&7);
 				dir[2] = 256;
-	
+
 				p->org[0] = org[0] + dir[0];
 				p->org[1] = org[1] + dir[1];
 				p->org[2] = org[2] + (rand()&63);
-	
-				VectorNormalize (dir);						
+
+				VectorNormalize (dir);
 				vel = 50 + (rand()&63);
 				VectorScale (dir, vel, p->vel);
 			}
@@ -515,20 +515,20 @@
 				free_particles = p->next;
 				p->next = active_particles;
 				active_particles = p;
-		
+
 				p->die = cl.time + 0.2 + (rand()&7) * 0.02;
 				p->color = 7 + (rand()&7);
 				p->type = pt_slowgrav;
-				
+
 				dir[0] = j*8;
 				dir[1] = i*8;
 				dir[2] = k*8;
-	
+
 				p->org[0] = org[0] + i + (rand()&3);
 				p->org[1] = org[1] + j + (rand()&3);
 				p->org[2] = org[2] + k + (rand()&3);
-	
-				VectorNormalize (dir);						
+
+				VectorNormalize (dir);
 				vel = 50 + (rand()&63);
 				VectorScale (dir, vel, p->vel);
 			}
@@ -563,7 +563,7 @@
 		free_particles = p->next;
 		p->next = active_particles;
 		active_particles = p;
-		
+
 		VectorCopy (vec3_origin, p->vel);
 		p->die = cl.time + 2;
 
@@ -600,7 +600,7 @@
 					p->color = 52 + ((tracercount&4)<<1);
 				else
 					p->color = 230 + ((tracercount&4)<<1);
-			
+
 				tracercount++;
 
 				VectorCopy (start, p->org);
@@ -632,7 +632,7 @@
 					p->org[j] = start[j] + ((rand()&15)-8);
 				break;
 		}
-		
+
 
 		VectorAdd (start, vec, start);
 	}
@@ -670,12 +670,12 @@
 
 	glEnable (GL_BLEND);
 	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-	
+
 #ifdef USE_OPENGLES
 	glEnableClientState(GL_COLOR_ARRAY);
     glVertexPointer(3, GL_FLOAT, 0, gVertexBuffer);
 	glTexCoordPointer(2, GL_BYTE, 0, gTexCoordBuffer);
-	glColorPointer(3, GL_UNSIGNED_BYTE, 0, gColorBuffer);
+	glColorPointer(4, GL_UNSIGNED_BYTE, 0, gColorBuffer);
 	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
 #else
 	glBegin (GL_TRIANGLES);
@@ -696,8 +696,8 @@
 	time1 = frametime * 5;
 	grav = frametime * sv_gravity.value * 0.05;
 	dvel = 4*frametime;
-	
-	for ( ;; ) 
+
+	for ( ;; )
 	{
 		kill = active_particles;
 		if (kill && kill->die < cl.time)
@@ -743,9 +743,10 @@
 			pColor = (unsigned char*) gColorBuffer;
 			pUV = (unsigned char*) gTexCoordBuffer;
 		}
-		
+
 		memcpy(pColor, (byte *)&d_8to24table[(int)p->color], 3);
-		pColor += 3;
+		pColor[3] = 1.0f;
+		pColor += 4;
 		*pUV++ = 0;
 		*pUV++ = 0;
 		*pPos++ = p->org[0];
@@ -753,7 +754,8 @@
 		*pPos++ = p->org[2];
 
 		memcpy(pColor, (byte *)&d_8to24table[(int)p->color], 3);
-		pColor += 3;
+		pColor[3] = 1.0f;
+		pColor += 4;
 		*pUV++ = 255;
 		*pUV++ = 0;
 		*pPos++ = p->org[0] + up[0]*scale;
@@ -761,15 +763,16 @@
 		*pPos++ = p->org[2] + up[2]*scale;
 
 		memcpy(pColor, (byte *)&d_8to24table[(int)p->color], 3);
-		pColor += 3;
+		pColor[3] = 1.0f;
+		pColor += 4;
 		*pUV++ = 0;
 		*pUV++ = 255;
 		*pPos++ = p->org[0] + right[0]*scale;
 		*pPos++ = p->org[1] + right[1]*scale;
 		*pPos++ = p->org[2] + right[2]*scale;
-		
+
 		particleIndex += 3;
-		
+
 #else
 		glColor3ubv ((byte *)&d_8to24table[(int)p->color]);
 		glTexCoord2f (0,0);
@@ -785,7 +788,7 @@
 		p->org[0] += p->vel[0]*frametime;
 		p->org[1] += p->vel[1]*frametime;
 		p->org[2] += p->vel[2]*frametime;
-		
+
 		switch (p->type)
 		{
 		case pt_static:
@@ -848,7 +851,7 @@
 
 #ifdef GLQUAKE
 #ifdef USE_OPENGLES
-	glDrawArrays(GL_TRIANGLES, 0, particleIndex); 
+	glDrawArrays(GL_TRIANGLES, 0, particleIndex);
 	glDisableClientState(GL_COLOR_ARRAY);
 	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
 #else
