From: divverent Date: Sun, 20 Dec 2009 09:54:44 +0000 (+0000) Subject: - fix specular stuff on Q1BSP X-Git-Tag: xonotic-v0.1.0preview~1048 X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=commitdiff_plain;h=947a3490696c20875ce9e191cf8dbc5a3b45d0f8 - fix specular stuff on Q1BSP - cl_lerpanim_maxdelta_server, cl_lerpanim_maxdelta_framegroups to customize lerping deltas git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9599 d7cf8633-e32d-0410-b094-e92efae38249 --- diff --git a/cl_main.c b/cl_main.c index 34c715fb..504d687c 100644 --- a/cl_main.c +++ b/cl_main.c @@ -38,6 +38,8 @@ cvar_t csqc_progsize = {CVAR_READONLY, "csqc_progsize","-1","file size of csprog cvar_t cl_shownet = {0, "cl_shownet","0","1 = print packet size, 2 = print packet message list"}; cvar_t cl_nolerp = {0, "cl_nolerp", "0","network update smoothing"}; +cvar_t cl_lerpanim_maxdelta_server = {0, "cl_lerpanim_maxdelta_server", "0.1","maximum frame delta for smoothing between server-controlled animation frames (when 0, one network frame)"}; +cvar_t cl_lerpanim_maxdelta_framegroups = {0, "cl_lerpanim_maxdelta_framegroups", "0.1","maximum frame delta for smoothing between framegroups (when 0, one network frame)"}; cvar_t cl_itembobheight = {0, "cl_itembobheight", "0","how much items bob up and down (try 8)"}; cvar_t cl_itembobspeed = {0, "cl_itembobspeed", "0.5","how frequently items bob up and down"}; @@ -1056,7 +1058,13 @@ void CL_UpdateNetworkEntity(entity_t *e, int recursionlimit, qboolean interpolat // make sure frame lerp won't last longer than 100ms // (this mainly helps with models that use framegroups and // switch between them infrequently) - e->render.framegroupblend[0].lerp = (cl.time - e->render.framegroupblend[0].start) / min(e->render.framegroupblend[0].start - e->render.framegroupblend[1].start, 0.1); + float maxdelta = cl_lerpanim_maxdelta_server.value; + if(e->render.model) + if(e->render.model->animscenes) + if(e->render.model->animscenes[e->render.framegroupblend[0].frame].framecount > 1 || e->render.model->animscenes[e->render.framegroupblend[1].frame].framecount > 1) + maxdelta = cl_lerpanim_maxdelta_framegroups.value; + maxdelta = max(maxdelta, cl.mtime[0] - cl.mtime[1]); + e->render.framegroupblend[0].lerp = (cl.time - e->render.framegroupblend[0].start) / min(e->render.framegroupblend[0].start - e->render.framegroupblend[1].start, maxdelta); e->render.framegroupblend[0].lerp = bound(0, e->render.framegroupblend[0].lerp, 1); e->render.framegroupblend[1].lerp = 1 - e->render.framegroupblend[0].lerp; } @@ -2319,6 +2327,8 @@ void CL_Init (void) Cvar_RegisterVariable (&cl_anglespeedkey); Cvar_RegisterVariable (&cl_shownet); Cvar_RegisterVariable (&cl_nolerp); + Cvar_RegisterVariable (&cl_lerpanim_maxdelta_server); + Cvar_RegisterVariable (&cl_lerpanim_maxdelta_framegroups); Cvar_RegisterVariable (&cl_deathfade); Cvar_RegisterVariable (&lookspring); Cvar_RegisterVariable (&lookstrafe); diff --git a/model_brush.c b/model_brush.c index f58d7a94..7af9d0e7 100644 --- a/model_brush.c +++ b/model_brush.c @@ -1646,6 +1646,8 @@ static void Mod_Q1BSP_LoadTextures(lump_t *l) // start out with no animation tx->currentframe = tx; tx->currentskinframe = tx->skinframes[0]; + tx->specularscalemod = 1; // not supported here + tx->specularpowermod = 1; // not supported here } } diff --git a/model_shared.c b/model_shared.c index 771aa39b..b9b140e0 100644 --- a/model_shared.c +++ b/model_shared.c @@ -2068,6 +2068,9 @@ qboolean Mod_LoadTextureFromQ3Shader(texture_t *texture, const char *name, qbool texflagsmask &= ~TEXF_COMPRESS; texture->specularscalemod = 1; // unless later loaded from the shader texture->specularpowermod = 1; // unless later loaded from the shader + // WHEN ADDING DEFAULTS HERE, REMEMBER TO SYNC TO SHADER LOADING ABOVE + // HERE, AND Q1BSP LOADING + // JUST GREP FOR "specularscalemod = 1". if (shader) { diff --git a/model_sprite.c b/model_sprite.c index a08cb8c3..41c70fe3 100644 --- a/model_sprite.c +++ b/model_sprite.c @@ -47,6 +47,8 @@ static void Mod_SpriteSetupTexture(texture_t *texture, skinframe_t *skinframe, q { if (!skinframe) skinframe = R_SkinFrame_LoadMissing(); + texture->specularscalemod = 1; + texture->specularpowermod = 1; texture->basematerialflags = MATERIALFLAG_WALL; if (fullbright) texture->basematerialflags |= MATERIALFLAG_FULLBRIGHT;