X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=cl_main.c;h=5e31b36841e3cafa74a5ddbe818f685764ea4271;hb=bdf10b0763064b348dd4a0d387fcbbbc153cf109;hp=926c65a947d500b662b1d0d1c542a26b179e1f42;hpb=51616b3baeaf8c2e8b5f4ba4d64fed6f7f1303e5;p=xonotic%2Fdarkplaces.git diff --git a/cl_main.c b/cl_main.c index 926c65a9..5e31b368 100644 --- a/cl_main.c +++ b/cl_main.c @@ -595,6 +595,7 @@ entity_render_t *CL_NewTempEntity(double shadertime) render->shadertime = shadertime; render->alpha = 1; VectorSet(render->colormod, 1, 1, 1); + VectorSet(render->glowmod, 1, 1, 1); return render; } @@ -740,6 +741,16 @@ void CL_RelinkLightFlashes(void) } } + 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; @@ -747,12 +758,20 @@ void CL_RelinkLightFlashes(void) 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'; @@ -814,6 +833,7 @@ void CL_AddQWCTFFlagModel(entity_t *player, int skin) 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); @@ -852,7 +872,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat 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; @@ -867,6 +887,7 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat 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 @@ -947,11 +968,23 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat // 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 { @@ -980,11 +1013,15 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat 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)) { @@ -1344,7 +1381,7 @@ void CL_LinkNetworkEntity(entity_t *e) 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); @@ -1437,6 +1474,7 @@ void CL_RelinkWorld(void) 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; @@ -1459,6 +1497,7 @@ static void CL_RelinkStaticEntities(void) 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; @@ -1545,6 +1584,7 @@ static void CL_RelinkEffects(void) 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); @@ -1691,6 +1731,7 @@ static void CL_RelinkQWNails(void) 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);