cvar_t cl_beams_instantaimhack = {CVAR_SAVE, "cl_beams_instantaimhack", "0", "makes your lightning gun aiming update instantly"};
cvar_t cl_beams_lightatend = {CVAR_SAVE, "cl_beams_lightatend", "0", "make a light at the end of the beam"};
+cvar_t cl_deathfade = {CVAR_SAVE, "cl_deathfade", "0", "fade screen to dark red when dead, value = how fast the fade is"};
+
cvar_t cl_noplayershadow = {CVAR_SAVE, "cl_noplayershadow", "0","hide player shadow"};
cvar_t cl_dlights_decayradius = {CVAR_SAVE, "cl_dlights_decayradius", "1", "reduces size of light flashes over time"};
render->shadertime = shadertime;
render->alpha = 1;
VectorSet(render->colormod, 1, 1, 1);
+ VectorSet(render->glowmod, 1, 1, 1);
return render;
}
}
}
+ if (!cl.lightstyle)
+ {
+ for (j = 0;j < cl.max_lightstyle;j++)
+ {
+ r_refdef.scene.rtlightstylevalue[j] = 1;
+ r_refdef.scene.lightstylevalue[j] = 256;
+ }
+ return;
+ }
+
// light animations
// 'm' is normal light, 'a' is no light, 'z' is double bright
f = cl.time * 10;
frac = f - i;
for (j = 0;j < cl.max_lightstyle;j++)
{
- if (!cl.lightstyle || !cl.lightstyle[j].length)
+ if (!cl.lightstyle[j].length)
{
r_refdef.scene.rtlightstylevalue[j] = 1;
r_refdef.scene.lightstylevalue[j] = 256;
continue;
}
+ // static lightstyle "=value"
+ if (cl.lightstyle[j].map[0] == '=')
+ {
+ r_refdef.scene.rtlightstylevalue[j] = atof(cl.lightstyle[j].map + 1);
+ if ( r_lerplightstyles.integer || ((int)f - f) < 0.01)
+ r_refdef.scene.lightstylevalue[j] = r_refdef.scene.rtlightstylevalue[j];
+ continue;
+ }
k = i % cl.lightstyle[j].length;
l = (i-1) % cl.lightstyle[j].length;
k = cl.lightstyle[j].map[k] - 'a';
flagrender->skinnum = skin;
flagrender->alpha = 1;
VectorSet(flagrender->colormod, 1, 1, 1);
+ VectorSet(flagrender->glowmod, 1, 1, 1);
// attach the flag to the player matrix
Matrix4x4_CreateFromQuakeEntity(&flagmatrix, -f, -22, 0, 0, 0, -45, 1);
Matrix4x4_Concat(&flagrender->matrix, &player->render.matrix, &flagmatrix);
const matrix4x4_t *matrix;
matrix4x4_t blendmatrix, tempmatrix, matrix2;
int j, k, l, frame;
- float origin[3], angles[3], delta[3], lerp, d;
+ float origin[3], angles[3], lerp, d;
entity_t *t;
dp_model_t *model;
//entity_persistent_t *p = &e->persistent;
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);
+ VectorScale(e->state_current.glowmod, (1.0f / 32.0f), e->render.glowmod);
if(e >= cl.entities && e < cl.entities + cl.num_entities)
e->render.entitynumber = e - cl.entities;
else
// interpolate the origin and angles
lerp = max(0, lerp);
VectorLerp(e->persistent.oldorigin, lerp, e->persistent.neworigin, origin);
+#if 0
+ // this fails at the singularity of euler angles
VectorSubtract(e->persistent.newangles, e->persistent.oldangles, delta);
if (delta[0] < -180) delta[0] += 360;else if (delta[0] >= 180) delta[0] -= 360;
if (delta[1] < -180) delta[1] += 360;else if (delta[1] >= 180) delta[1] -= 360;
if (delta[2] < -180) delta[2] += 360;else if (delta[2] >= 180) delta[2] -= 360;
VectorMA(e->persistent.oldangles, lerp, delta, angles);
+#else
+ {
+ vec3_t f0, u0, f1, u1;
+ AngleVectors(e->persistent.oldangles, f0, NULL, u0);
+ AngleVectors(e->persistent.newangles, f1, NULL, u1);
+ VectorMAM(1-lerp, f0, lerp, f1, f0);
+ VectorMAM(1-lerp, u0, lerp, u1, u0);
+ AnglesFromVectors(angles, f0, u0, false);
+ }
+#endif
}
else
{
if (e->render.model->type == mod_alias)
angles[0] = -angles[0];
if ((e->render.effects & EF_SELECTABLE) && cl.cmd.cursor_entitynumber == e->state_current.number)
+ {
VectorScale(e->render.colormod, 2, e->render.colormod);
+ VectorScale(e->render.glowmod, 2, e->render.glowmod);
+ }
}
// if model is alias or this is a tenebrae-like dlight, reverse pitch direction
else if (e->state_current.lightpflags & PFLAGS_FULLDYNAMIC)
angles[0] = -angles[0];
+ // NOTE: this must be synced to SV_GetPitchSign!
if ((e->render.effects & EF_ROTATE) && !(e->render.flags & RENDER_VIEWMODEL))
{
ent->state_previous = ent->state_current;
ent->state_current = defaultstate;
ent->state_current.time = cl.time;
- ent->state_current.number = -1;
+ ent->state_current.number = (unsigned short)-1;
ent->state_current.active = true;
ent->state_current.modelindex = cl.stats[STAT_WEAPON];
ent->state_current.frame = cl.stats[STAT_WEAPONFRAME];
trace_t trace;
matrix4x4_t tempmatrix;
Matrix4x4_Transform(&e->render.matrix, muzzleflashorigin, v2);
- trace = CL_Move(origin, vec3_origin, vec3_origin, v2, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY, true, false, NULL, false);
+ trace = CL_TraceLine(origin, v2, MOVE_NOMONSTERS, NULL, SUPERCONTENTS_SOLID | SUPERCONTENTS_SKY, true, false, NULL, false);
Matrix4x4_Normalize(&tempmatrix, &e->render.matrix);
Matrix4x4_SetOrigin(&tempmatrix, trace.endpos[0], trace.endpos[1], trace.endpos[2]);
Matrix4x4_Scale(&tempmatrix, 150, 1);
if (!r_fullbright.integer)
ent->render.flags |= RENDER_LIGHT;
VectorSet(ent->render.colormod, 1, 1, 1);
+ VectorSet(ent->render.glowmod, 1, 1, 1);
CL_UpdateRenderEntity(&ent->render);
r_refdef.scene.worldentity = &ent->render;
r_refdef.scene.worldmodel = cl.worldmodel;
if (!(e->render.effects & (EF_NOSHADOW | EF_ADDITIVE | EF_NODEPTHTEST)) && (e->render.alpha >= 1))
e->render.flags |= RENDER_SHADOW;
VectorSet(e->render.colormod, 1, 1, 1);
+ VectorSet(e->render.glowmod, 1, 1, 1);
R_LerpAnimation(&e->render);
CL_UpdateRenderEntity(&e->render);
r_refdef.scene.entities[r_refdef.scene.numentities++] = &e->render;
entrender->model = cl.csqc_model_precache[-(e->modelindex+1)];
entrender->alpha = 1;
VectorSet(entrender->colormod, 1, 1, 1);
+ VectorSet(entrender->glowmod, 1, 1, 1);
Matrix4x4_CreateFromQuakeEntity(&entrender->matrix, e->origin[0], e->origin[1], e->origin[2], 0, 0, 0, 1);
CL_UpdateRenderEntity(entrender);
entrender->model = cl.model_precache[cl.qw_modelindex_spike];
entrender->alpha = 1;
VectorSet(entrender->colormod, 1, 1, 1);
+ VectorSet(entrender->glowmod, 1, 1, 1);
Matrix4x4_CreateFromQuakeEntity(&entrender->matrix, v[0], v[1], v[2], v[3], v[4], v[5], 1);
CL_UpdateRenderEntity(entrender);
return;
}
}
- Con_Printf("CL_Locs_FreeNode: no such node! (%p)\n", node);
+ Con_Printf("CL_Locs_FreeNode: no such node! (%p)\n", (void *)node);
}
void CL_Locs_AddNode(vec3_t mins, vec3_t maxs, const char *name)
Cvar_RegisterVariable (&cl_anglespeedkey);
Cvar_RegisterVariable (&cl_shownet);
Cvar_RegisterVariable (&cl_nolerp);
+ Cvar_RegisterVariable (&cl_deathfade);
Cvar_RegisterVariable (&lookspring);
Cvar_RegisterVariable (&lookstrafe);
Cvar_RegisterVariable (&sensitivity);