-mplane_t *lightplane;
-vec3_t lightspot;
-
-extern cvar_t r_ambient;
-
-/*
-int RecursiveLightPoint (vec3_t color, mnode_t *node, vec3_t start, vec3_t end)
-{
- float front, back, frac;
- vec3_t mid;
-
-loc0:
- if (node->contents < 0)
- return false; // didn't hit anything
-
-// calculate mid point
- front = PlaneDiff (start, node->plane);
- back = PlaneDiff (end, node->plane);
-
- // LordHavoc: optimized recursion
- if ((back < 0) == (front < 0))
-// return RecursiveLightPoint (color, node->children[front < 0], start, end);
- {
- node = node->children[front < 0];
- goto loc0;
- }
-
- 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
- if (RecursiveLightPoint (color, node->children[front < 0], start, mid))
- return true; // hit something
- else
- {
- int i, ds, dt;
- msurface_t *surf;
- // check for impact on this node
- VectorCopy (mid, lightspot);
- lightplane = node->plane;
-
- surf = cl.worldmodel->surfaces + node->firstsurface;
- for (i = 0;i < node->numsurfaces;i++, surf++)
- {
- if (surf->flags & SURF_DRAWTILED)
- continue; // no lightmaps
-
- ds = (int) ((float) DotProduct (mid, surf->texinfo->vecs[0]) + surf->texinfo->vecs[0][3]);
- dt = (int) ((float) DotProduct (mid, surf->texinfo->vecs[1]) + surf->texinfo->vecs[1][3]);
-
- if (ds < surf->texturemins[0] || dt < surf->texturemins[1])
- continue;
-
- ds -= surf->texturemins[0];
- dt -= surf->texturemins[1];
-
- if (ds > surf->extents[0] || dt > surf->extents[1])
- continue;
-
- if (surf->samples)
- {
- byte *lightmap;
- int maps, line3, dsfrac = ds & 15, dtfrac = dt & 15, r00 = 0, g00 = 0, b00 = 0, r01 = 0, g01 = 0, b01 = 0, r10 = 0, g10 = 0, b10 = 0, r11 = 0, g11 = 0, b11 = 0;
- float scale;
- line3 = ((surf->extents[0]>>4)+1)*3;
-
- lightmap = surf->samples + ((dt>>4) * ((surf->extents[0]>>4)+1) + (ds>>4))*3; // LordHavoc: *3 for color
-
- for (maps = 0;maps < MAXLIGHTMAPS && surf->styles[maps] != 255;maps++)
- {
- scale = (float) d_lightstylevalue[surf->styles[maps]] * 1.0 / 256.0;
- r00 += (float) lightmap[ 0] * scale;g00 += (float) lightmap[ 1] * scale;b00 += (float) lightmap[2] * scale;
- r01 += (float) lightmap[ 3] * scale;g01 += (float) lightmap[ 4] * scale;b01 += (float) lightmap[5] * scale;
- r10 += (float) lightmap[line3+0] * scale;g10 += (float) lightmap[line3+1] * scale;b10 += (float) lightmap[line3+2] * scale;
- r11 += (float) lightmap[line3+3] * scale;g11 += (float) lightmap[line3+4] * scale;b11 += (float) lightmap[line3+5] * scale;
- lightmap += ((surf->extents[0]>>4)+1) * ((surf->extents[1]>>4)+1)*3; // LordHavoc: *3 for colored lighting
- }
-
- color[0] += (float) ((int) ((((((((r11-r10) * dsfrac) >> 4) + r10)-((((r01-r00) * dsfrac) >> 4) + r00)) * dtfrac) >> 4) + ((((r01-r00) * dsfrac) >> 4) + r00)));
- color[1] += (float) ((int) ((((((((g11-g10) * dsfrac) >> 4) + g10)-((((g01-g00) * dsfrac) >> 4) + g00)) * dtfrac) >> 4) + ((((g01-g00) * dsfrac) >> 4) + g00)));
- color[2] += (float) ((int) ((((((((b11-b10) * dsfrac) >> 4) + b10)-((((b01-b00) * dsfrac) >> 4) + b00)) * dtfrac) >> 4) + ((((b01-b00) * dsfrac) >> 4) + b00)));
- }
- return true; // success
- }
-
- // go down back side
- return RecursiveLightPoint (color, node->children[front >= 0], mid, end);
- }
-}
-
-void R_LightPoint (vec3_t color, vec3_t p)
-{
- vec3_t end;
-
- if (r_fullbright.value || !cl.worldmodel->lightdata)
- {
- color[0] = color[1] = color[2] = 255;
- return;
- }
-
- end[0] = p[0];
- end[1] = p[1];
- end[2] = p[2] - 2048;
-
- color[0] = color[1] = color[2] = r_ambient.value * 2.0f;
- RecursiveLightPoint (color, cl.worldmodel->nodes, p, end);
-}
-
-void SV_LightPoint (vec3_t color, vec3_t p)
-{
- vec3_t end;
-
- if (!sv.worldmodel->lightdata)
- {
- color[0] = color[1] = color[2] = 255;
- return;
- }
-
- end[0] = p[0];
- end[1] = p[1];
- end[2] = p[2] - 2048;
-
- color[0] = color[1] = color[2] = 0;
- RecursiveLightPoint (color, sv.worldmodel->nodes, p, end);
-}
-*/
-
-int RecursiveLightPoint (vec3_t color, mnode_t *node, float x, float y, float startz, float endz)