- fix specular stuff on Q1BSP
authordivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 20 Dec 2009 09:54:44 +0000 (09:54 +0000)
committerdivverent <divverent@d7cf8633-e32d-0410-b094-e92efae38249>
Sun, 20 Dec 2009 09:54:44 +0000 (09:54 +0000)
- 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

cl_main.c
model_brush.c
model_shared.c
model_sprite.c

index 34c715f..504d687 100644 (file)
--- 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);
index f58d7a9..7af9d0e 100644 (file)
@@ -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
                }
        }
 
index 771aa39..b9b140e 100644 (file)
@@ -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)
        {
index a08cb8c..41c70fe 100644 (file)
@@ -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;