if (!allowmodel && (!strcasecmp(key, "pmodel") || !strcasecmp(key, "emodel")))
fail = true;
for (i = 0;key[i];i++)
- if (key[i] <= ' ' || key[i] == '\"')
+ if (ISWHITESPACE(key[i]) || key[i] == '\"')
fail = true;
for (i = 0;value[i];i++)
if (value[i] == '\r' || value[i] == '\n' || value[i] == '\"')
r_refdef.scene.numtempentities = 0;
}
-entity_render_t *CL_NewTempEntity(void)
+entity_render_t *CL_NewTempEntity(double shadertime)
{
entity_render_t *render;
memset (render, 0, sizeof(*render));
r_refdef.scene.entities[r_refdef.scene.numentities++] = render;
+ render->shadertime = shadertime;
render->alpha = 1;
VectorSet(render->colormod, 1, 1, 1);
return render;
{
tempmatrix = dl->matrix;
Matrix4x4_Scale(&tempmatrix, dl->radius, 1);
- R_RTLight_Update(&r_refdef.scene.lights[r_refdef.scene.numlights++], false, &tempmatrix, dl->color, dl->style, dl->cubemapname, dl->shadow, dl->corona, dl->coronasizescale, dl->ambientscale, dl->diffusescale, dl->specularscale, dl->flags);
+ // we need the corona fading to be persistent
+ R_RTLight_Update(&dl->rtlight, false, &tempmatrix, dl->color, dl->style, dl->cubemapname, dl->shadow, dl->corona, dl->coronasizescale, dl->ambientscale, dl->diffusescale, dl->specularscale, dl->flags);
+ r_refdef.scene.lights[r_refdef.scene.numlights++] = &dl->rtlight;
}
}
}
}
// end of code taken from QuakeWorld
- flagrender = CL_NewTempEntity();
+ flagrender = CL_NewTempEntity(player->render.shadertime);
if (!flagrender)
return;
e->render.flags = e->state_current.flags;
e->render.effects = e->state_current.effects;
VectorScale(e->state_current.colormod, (1.0f / 32.0f), e->render.colormod);
- e->render.entitynumber = e - cl.entities;
+ if(e >= cl.entities && e < cl.entities + cl.num_entities)
+ e->render.entitynumber = e - cl.entities;
+ else
+ e->render.entitynumber = 0;
if (e->state_current.flags & RENDER_COLORMAPPED)
CL_SetEntityColormapColors(&e->render, e->state_current.colormap);
else if (e->state_current.colormap > 0 && e->state_current.colormap <= cl.maxclients && cl.scores != NULL)
e->render.flags |= RENDER_SHADOW;
if (e->render.flags & RENDER_VIEWMODEL)
e->render.flags |= RENDER_NOSELFSHADOW;
+ if (e->render.effects & EF_NOSELFSHADOW)
+ e->render.flags |= RENDER_NOSELFSHADOW;
// make the other useful stuff
CL_UpdateRenderEntity(&e->render);
Matrix4x4_SetOrigin(&tempmatrix, trace.endpos[0], trace.endpos[1], trace.endpos[2]);
Matrix4x4_Scale(&tempmatrix, 150, 1);
VectorSet(color, e->persistent.muzzleflash * 4.0f, e->persistent.muzzleflash * 4.0f, e->persistent.muzzleflash * 4.0f);
- R_RTLight_Update(&r_refdef.scene.lights[r_refdef.scene.numlights++], false, &tempmatrix, color, -1, NULL, true, 0, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ R_RTLight_Update(&r_refdef.scene.templights[r_refdef.scene.numlights], false, &tempmatrix, color, -1, NULL, true, 0, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ r_refdef.scene.lights[r_refdef.scene.numlights] = &r_refdef.scene.templights[r_refdef.scene.numlights++];
}
// LordHavoc: if the model has no flags, don't check each
if (e->render.model && e->render.effects && !(e->render.flags & RENDER_VIEWMODEL))
dlightradius = max(dlightradius, e->state_current.glowsize * 4);
VectorMA(dlightcolor, (1.0f / 255.0f), palette_rgb[e->state_current.glowcolor], dlightcolor);
}
- // make the glow dlight
- if (dlightradius > 0 && (dlightcolor[0] || dlightcolor[1] || dlightcolor[2]) && !(e->render.flags & RENDER_VIEWMODEL) && r_refdef.scene.numlights < MAX_DLIGHTS)
- {
- matrix4x4_t dlightmatrix;
- Matrix4x4_Normalize(&dlightmatrix, &e->render.matrix);
- // hack to make glowing player light shine on their gun
- //if (e->state_current.number == cl.viewentity/* && !chase_active.integer*/)
- // Matrix4x4_AdjustOrigin(&dlightmatrix, 0, 0, 30);
- Matrix4x4_Scale(&dlightmatrix, dlightradius, 1);
- R_RTLight_Update(&r_refdef.scene.lights[r_refdef.scene.numlights++], false, &dlightmatrix, dlightcolor, -1, NULL, true, 1, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
- }
// custom rtlight
if ((e->state_current.lightpflags & PFLAGS_FULLDYNAMIC) && r_refdef.scene.numlights < MAX_DLIGHTS)
{
// FIXME: add ambient/diffuse/specular scales as an extension ontop of TENEBRAE_GFX_DLIGHTS?
Matrix4x4_Normalize(&dlightmatrix, &e->render.matrix);
Matrix4x4_Scale(&dlightmatrix, light[3], 1);
- R_RTLight_Update(&r_refdef.scene.lights[r_refdef.scene.numlights++], false, &dlightmatrix, light, e->state_current.lightstyle, e->state_current.skin > 0 ? va("cubemaps/%i", e->state_current.skin) : NULL, !(e->state_current.lightpflags & PFLAGS_NOSHADOW), (e->state_current.lightpflags & PFLAGS_CORONA) != 0, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ R_RTLight_Update(&r_refdef.scene.templights[r_refdef.scene.numlights], false, &dlightmatrix, light, e->state_current.lightstyle, e->state_current.skin > 0 ? va("cubemaps/%i", e->state_current.skin) : NULL, !(e->state_current.lightpflags & PFLAGS_NOSHADOW), (e->state_current.lightpflags & PFLAGS_CORONA) != 0, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ r_refdef.scene.lights[r_refdef.scene.numlights] = &r_refdef.scene.templights[r_refdef.scene.numlights++];
+ }
+ // make the glow dlight
+ else if (dlightradius > 0 && (dlightcolor[0] || dlightcolor[1] || dlightcolor[2]) && !(e->render.flags & RENDER_VIEWMODEL) && r_refdef.scene.numlights < MAX_DLIGHTS)
+ {
+ matrix4x4_t dlightmatrix;
+ Matrix4x4_Normalize(&dlightmatrix, &e->render.matrix);
+ // hack to make glowing player light shine on their gun
+ //if (e->state_current.number == cl.viewentity/* && !chase_active.integer*/)
+ // Matrix4x4_AdjustOrigin(&dlightmatrix, 0, 0, 30);
+ Matrix4x4_Scale(&dlightmatrix, dlightradius, 1);
+ R_RTLight_Update(&r_refdef.scene.templights[r_refdef.scene.numlights], false, &dlightmatrix, dlightcolor, -1, NULL, true, 1, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ r_refdef.scene.lights[r_refdef.scene.numlights] = &r_refdef.scene.templights[r_refdef.scene.numlights++];
}
// do trail light
if (e->render.flags & RENDER_GLOWTRAIL)
// if we're drawing effects, get a new temp entity
// (NewTempEntity adds it to the render entities list for us)
- if (r_draweffects.integer && (entrender = CL_NewTempEntity()))
+ if (r_draweffects.integer && (entrender = CL_NewTempEntity(e->starttime)))
{
// interpolation stuff
entrender->frame1 = intframe;
vec3_t dlightcolor;
VectorSet(dlightcolor, 0.3, 0.7, 1);
Matrix4x4_CreateFromQuakeEntity(&tempmatrix, end[0], end[1], end[2], 0, 0, 0, 200);
- R_RTLight_Update(&r_refdef.scene.lights[r_refdef.scene.numlights++], false, &tempmatrix, dlightcolor, -1, NULL, true, 1, 0.25, 1, 0, 0, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ R_RTLight_Update(&r_refdef.scene.templights[r_refdef.scene.numlights], false, &tempmatrix, dlightcolor, -1, NULL, true, 1, 0.25, 1, 0, 0, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE);
+ r_refdef.scene.lights[r_refdef.scene.numlights] = &r_refdef.scene.templights[r_refdef.scene.numlights++];
}
if (cl_beams_polygons.integer)
continue;
d = VectorNormalizeLength(dist);
while (d > 0)
{
- entrender = CL_NewTempEntity ();
+ entrender = CL_NewTempEntity (0);
if (!entrender)
return;
//VectorCopy (org, ent->render.origin);
// if we're drawing effects, get a new temp entity
// (NewTempEntity adds it to the render entities list for us)
- if (!(entrender = CL_NewTempEntity()))
+ if (!(entrender = CL_NewTempEntity(0)))
continue;
// normal stuff
if (!name)
name = "";
namelen = strlen(name);
- node = Mem_Alloc(cls.levelmempool, sizeof(cl_locnode_t) + namelen + 1);
+ node = (cl_locnode_t *) Mem_Alloc(cls.levelmempool, sizeof(cl_locnode_t) + namelen + 1);
VectorSet(node->mins, min(mins[0], maxs[0]), min(mins[1], maxs[1]), min(mins[2], maxs[2]));
VectorSet(node->maxs, max(mins[0], maxs[0]), max(mins[1], maxs[1]), max(mins[2], maxs[2]));
node->name = (char *)(node + 1);
FS_StripExtension(cl.worldmodel->name, locfilename, sizeof(locfilename));
strlcat(locfilename, ".loc", sizeof(locfilename));
- outfile = FS_Open(locfilename, "w", false, false);
+ outfile = FS_OpenRealFile(locfilename, "w", false);
if (!outfile)
return;
// if any boxes are used then this is a proquake-format loc file, which
if (text < textend)
text++;
// trim trailing whitespace
- while (lineend > linestart && lineend[-1] <= ' ')
+ while (lineend > linestart && ISWHITESPACE(lineend[-1]))
lineend--;
// trim leading whitespace
- while (linestart < lineend && *linestart <= ' ')
+ while (linestart < lineend && ISWHITESPACE(*linestart))
linestart++;
// check if this is a comment
if (linestart + 2 <= lineend && !strncmp(linestart, "//", 2))
else
maxs[i - 3] = atof(linetext);
// now advance past the number
- while (linetext < lineend && *linetext > ' ' && *linetext != ',')
+ while (linetext < lineend && !ISWHITESPACE(*linetext) && *linetext != ',')
linetext++;
// advance through whitespace
if (linetext < lineend)
limit = 6;
// note: comma can be followed by whitespace
}
- if (*linetext <= ' ')
+ if (ISWHITESPACE(*linetext))
{
// skip whitespace
- while (linetext < lineend && *linetext <= ' ')
+ while (linetext < lineend && ISWHITESPACE(*linetext))
linetext++;
}
}