Split cl_nolerp into cl_nolerp and cl_nolerp_netquake. This means that netquake can have a different default. This allows it to be smoother without arcane tweeking.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3084 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2008-12-03 02:42:05 +00:00
parent f01514060e
commit 4e1f6daf9f
5 changed files with 54 additions and 11 deletions

View file

@ -33,6 +33,7 @@ extern cvar_t cl_r2g;
extern cvar_t r_powerupglow;
extern cvar_t v_powerupshell;
extern cvar_t cl_nolerp;
extern cvar_t cl_nolerp_netquake;
extern cvar_t cl_gibfilter, cl_deadbodyfilter;
extern int cl_playerindex;
@ -1538,6 +1539,21 @@ packet_entities_t *CL_ProcessPacketEntities(float *servertime, qboolean nolerp)
return packnew;
}
qboolean CL_MayLerp(void)
{
//force lerping when playing low-framerate demos.
if (cls.demoplayback == DPB_MVD || cls.demoplayback == DPB_EZTV)
return true;
#ifdef NQPROT
if (cls.demoplayback == DPB_NETQUAKE)
return true;
if (cls.protocol == CP_NETQUAKE) //this includes DP protocols.
return !cl_nolerp_netquake.value;
#endif
return !cl_nolerp.value;
}
void CL_LinkPacketEntities (void)
{
entity_t *ent;
@ -1560,7 +1576,7 @@ void CL_LinkPacketEntities (void)
CL_CalcClientTime();
servertime = cl.servertime;
nolerp = !!cl_nolerp.value && cls.demoplayback != DPB_MVD && cls.demoplayback != DPB_EZTV;
nolerp = !CL_MayLerp() && cls.demoplayback != DPB_MVD && cls.demoplayback != DPB_EZTV;
#ifdef NQPROT
nolerp = nolerp && cls.demoplayback != DPB_NETQUAKE;
#endif
@ -1882,9 +1898,7 @@ void CL_LinkPacketEntities (void)
ent->forcedshader = NULL;
#endif
if (cl_nolerp.value)
f = 1;
else
if (CL_MayLerp())
{
//figure out the lerp factor
if (cl.lerpents[s1->number].lerprate<=0)
@ -1896,6 +1910,8 @@ void CL_LinkPacketEntities (void)
if (f>1)
f=1;
}
else
f = 1;
ent->lerpfrac = 1-(cl.servertime-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate;
if (ent->lerpfrac<0)

View file

@ -51,6 +51,7 @@ cvar_t cl_maxfps = SCVARF("cl_maxfps", "1000", CVAR_ARCHIVE);
cvar_t cl_nopext = SCVARF("cl_nopext", "0", CVAR_ARCHIVE);
cvar_t cl_pext_mask = SCVAR("cl_pext_mask", "0xffffffff");
cvar_t cl_nolerp = SCVAR("cl_nolerp", "1");
cvar_t cl_nolerp_netquake = SCVAR("cl_nolerp_netquake", "0");
cvar_t hud_tracking_show = SCVAR("hud_tracking_show", "1");
cvar_t cfg_save_name = SCVARF("cfg_save_name", "fte", CVAR_ARCHIVE);
@ -2180,6 +2181,7 @@ void CL_ConnectionlessPacket (void)
Con_Printf ("accept\n");
Validation_Apply_Ruleset();
Netchan_Setup(NS_CLIENT, &cls.netchan, net_from, cls.qport);
CL_ParseEstablished();
Con_DPrintf ("CL_EstablishConnection: connected to %s\n", cls.servername);
@ -2222,6 +2224,7 @@ client_connect: //fixme: make function
}
compress = cls.netchan.compress;
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
CL_ParseEstablished();
cls.netchan.compress = compress;
#ifdef Q3CLIENT
if (cls.protocol != CP_QUAKE3)
@ -2339,6 +2342,7 @@ void CLNQ_ConnectionlessPacket(void)
Con_TPrintf (TLC_DUPCONNECTION);
return;
}
//this is the port that we're meant to respond to.
net_from.port = htons((short)MSG_ReadLong());
if (MSG_ReadByte() == 1) //a proquake server adds a little extra info
@ -2348,6 +2352,7 @@ void CLNQ_ConnectionlessPacket(void)
if (MSG_ReadByte() == 1)
{
//its a 'pure' server.
Con_Printf("ProQuake sucks\nGo play on a decent server.\n");
return;
}
@ -2356,6 +2361,7 @@ void CLNQ_ConnectionlessPacket(void)
Validation_Apply_Ruleset();
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
CL_ParseEstablished();
cls.netchan.isnqprotocol = true;
cls.netchan.compress = 0;
cls.protocol = CP_NETQUAKE;
@ -2869,6 +2875,7 @@ void CL_Init (void)
Cvar_Register (&cl_deadbodyfilter, "Item effects");
Cvar_Register (&cl_nolerp, "Item effects");
Cvar_Register (&cl_nolerp_netquake, "Item effects");
Cvar_Register (&r_drawflame, "Item effects");

View file

@ -33,6 +33,7 @@ int msgflags;
char cl_dp_csqc_progsname[128];
int cl_dp_csqc_progssize;
int cl_dp_csqc_progscrc;
int cl_dp_serverextension_download;
char *svc_strings[] =
@ -298,6 +299,12 @@ qboolean CL_EnqueDownload(char *filename, char *localname, unsigned int flags)
if (!(flags & DLLF_IGNOREFAILED))
{
#ifdef NQPROT
if (cls.protocol == CP_NETQUAKE)
if (!cl_dp_serverextension_download)
return false;
#endif
for (dl = cl.faileddownloads; dl; dl = dl->next) //yeah, so it failed... Ignore it.
{
if (!strcmp(dl->name, filename))
@ -2213,6 +2220,15 @@ void CLQ2_ParseServerData (void)
void CL_ParseEstablished(void)
{
#ifdef NQPROT
cl_dp_serverextension_download = false;
cl_dp_csqc_progscrc = 0;
cl_dp_csqc_progssize = 0;
#endif
}
#ifdef NQPROT
//FIXME: move to header
void CL_KeepaliveMessage(void){}
@ -2312,7 +2328,8 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution.
return;
}
strcpy (cl.model_name[nummodels], str);
CL_CheckOrEnqueDownloadFile(str, NULL, 0);
if (*str != '*') //not inline models!
CL_CheckOrEnqueDownloadFile(str, NULL, 0);
Mod_TouchModel (str);
}
@ -2328,6 +2345,10 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution.
return;
}
strcpy (cl.sound_name[numsounds], str);
#pragma message("the logic that we should have here is rather long")
//CL_CheckOrEnqueDownloadFile(str, NULL, 0);
S_TouchSound (str);
}
@ -5301,6 +5322,7 @@ void CLNQ_ParseServerMessage (void)
Con_DPrintf ("stufftext: %s\n", s);
if (!strncmp(s, "cl_serverextension_download ", 14))
{
cl_dp_serverextension_download = true;
}
else if (!strncmp(s, "\ncl_downloadbegin ", 17))
CLDP_ParseDownloadBegin(s);

View file

@ -544,7 +544,7 @@ static void CL_LerpMove (int pnum, float msgtime)
int i;
int from, to;
if (cl_nolerp.value || cls.demoplayback == DPB_MVD || cls.demoplayback == DPB_EZTV)
if (!CL_MayLerp() || cls.demoplayback == DPB_MVD || cls.demoplayback == DPB_EZTV)
return;
#ifdef NQPROT
@ -837,11 +837,7 @@ fixedorg:
to = &cl.frames[cl.ackedinputsequence & UPDATE_MASK];
#ifdef NQPROT
if (Cam_TrackNum(pnum)>=0 && !cl_nolerp.value && cls.demoplayback != DPB_MVD && cls.demoplayback != DPB_EZTV && cls.demoplayback != DPB_NETQUAKE)
#else
if (Cam_TrackNum(pnum)>=0 && !cl_nolerp.value && cls.demoplayback != DPB_MVD && cls.demoplayback != DPB_EZTV)
#endif
if (Cam_TrackNum(pnum)>=0 && CL_MayLerp())
{
float f;

View file

@ -806,6 +806,7 @@ extern int packet_latency[NET_TIMINGS];
int CL_CalcNet (void);
void CL_ParseServerMessage (void);
void CL_DumpPacket(void);
void CL_ParseEstablished(void);
void CLNQ_ParseServerMessage (void);
#ifdef Q2CLIENT
void CLQ2_ParseServerMessage (void);
@ -878,6 +879,7 @@ void CL_LinkViewModel(void);
void CL_LinkPlayers (void);
void CL_LinkPacketEntities (void);
void CL_LinkProjectiles (void);
qboolean CL_MayLerp(void);
//
//clq3_parse.c