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:
parent
f01514060e
commit
4e1f6daf9f
5 changed files with 54 additions and 11 deletions
|
@ -33,6 +33,7 @@ extern cvar_t cl_r2g;
|
||||||
extern cvar_t r_powerupglow;
|
extern cvar_t r_powerupglow;
|
||||||
extern cvar_t v_powerupshell;
|
extern cvar_t v_powerupshell;
|
||||||
extern cvar_t cl_nolerp;
|
extern cvar_t cl_nolerp;
|
||||||
|
extern cvar_t cl_nolerp_netquake;
|
||||||
|
|
||||||
extern cvar_t cl_gibfilter, cl_deadbodyfilter;
|
extern cvar_t cl_gibfilter, cl_deadbodyfilter;
|
||||||
extern int cl_playerindex;
|
extern int cl_playerindex;
|
||||||
|
@ -1538,6 +1539,21 @@ packet_entities_t *CL_ProcessPacketEntities(float *servertime, qboolean nolerp)
|
||||||
return packnew;
|
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)
|
void CL_LinkPacketEntities (void)
|
||||||
{
|
{
|
||||||
entity_t *ent;
|
entity_t *ent;
|
||||||
|
@ -1560,7 +1576,7 @@ void CL_LinkPacketEntities (void)
|
||||||
CL_CalcClientTime();
|
CL_CalcClientTime();
|
||||||
servertime = cl.servertime;
|
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
|
#ifdef NQPROT
|
||||||
nolerp = nolerp && cls.demoplayback != DPB_NETQUAKE;
|
nolerp = nolerp && cls.demoplayback != DPB_NETQUAKE;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1882,9 +1898,7 @@ void CL_LinkPacketEntities (void)
|
||||||
ent->forcedshader = NULL;
|
ent->forcedshader = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cl_nolerp.value)
|
if (CL_MayLerp())
|
||||||
f = 1;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
//figure out the lerp factor
|
//figure out the lerp factor
|
||||||
if (cl.lerpents[s1->number].lerprate<=0)
|
if (cl.lerpents[s1->number].lerprate<=0)
|
||||||
|
@ -1896,6 +1910,8 @@ void CL_LinkPacketEntities (void)
|
||||||
if (f>1)
|
if (f>1)
|
||||||
f=1;
|
f=1;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
f = 1;
|
||||||
|
|
||||||
ent->lerpfrac = 1-(cl.servertime-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate;
|
ent->lerpfrac = 1-(cl.servertime-cl.lerpents[s1->number].lerptime)/cl.lerpents[s1->number].lerprate;
|
||||||
if (ent->lerpfrac<0)
|
if (ent->lerpfrac<0)
|
||||||
|
|
|
@ -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_nopext = SCVARF("cl_nopext", "0", CVAR_ARCHIVE);
|
||||||
cvar_t cl_pext_mask = SCVAR("cl_pext_mask", "0xffffffff");
|
cvar_t cl_pext_mask = SCVAR("cl_pext_mask", "0xffffffff");
|
||||||
cvar_t cl_nolerp = SCVAR("cl_nolerp", "1");
|
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 hud_tracking_show = SCVAR("hud_tracking_show", "1");
|
||||||
|
|
||||||
cvar_t cfg_save_name = SCVARF("cfg_save_name", "fte", CVAR_ARCHIVE);
|
cvar_t cfg_save_name = SCVARF("cfg_save_name", "fte", CVAR_ARCHIVE);
|
||||||
|
@ -2180,6 +2181,7 @@ void CL_ConnectionlessPacket (void)
|
||||||
Con_Printf ("accept\n");
|
Con_Printf ("accept\n");
|
||||||
Validation_Apply_Ruleset();
|
Validation_Apply_Ruleset();
|
||||||
Netchan_Setup(NS_CLIENT, &cls.netchan, net_from, cls.qport);
|
Netchan_Setup(NS_CLIENT, &cls.netchan, net_from, cls.qport);
|
||||||
|
CL_ParseEstablished();
|
||||||
Con_DPrintf ("CL_EstablishConnection: connected to %s\n", cls.servername);
|
Con_DPrintf ("CL_EstablishConnection: connected to %s\n", cls.servername);
|
||||||
|
|
||||||
|
|
||||||
|
@ -2222,6 +2224,7 @@ client_connect: //fixme: make function
|
||||||
}
|
}
|
||||||
compress = cls.netchan.compress;
|
compress = cls.netchan.compress;
|
||||||
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
|
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
|
||||||
|
CL_ParseEstablished();
|
||||||
cls.netchan.compress = compress;
|
cls.netchan.compress = compress;
|
||||||
#ifdef Q3CLIENT
|
#ifdef Q3CLIENT
|
||||||
if (cls.protocol != CP_QUAKE3)
|
if (cls.protocol != CP_QUAKE3)
|
||||||
|
@ -2339,6 +2342,7 @@ void CLNQ_ConnectionlessPacket(void)
|
||||||
Con_TPrintf (TLC_DUPCONNECTION);
|
Con_TPrintf (TLC_DUPCONNECTION);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
//this is the port that we're meant to respond to.
|
||||||
net_from.port = htons((short)MSG_ReadLong());
|
net_from.port = htons((short)MSG_ReadLong());
|
||||||
|
|
||||||
if (MSG_ReadByte() == 1) //a proquake server adds a little extra info
|
if (MSG_ReadByte() == 1) //a proquake server adds a little extra info
|
||||||
|
@ -2348,6 +2352,7 @@ void CLNQ_ConnectionlessPacket(void)
|
||||||
|
|
||||||
if (MSG_ReadByte() == 1)
|
if (MSG_ReadByte() == 1)
|
||||||
{
|
{
|
||||||
|
//its a 'pure' server.
|
||||||
Con_Printf("ProQuake sucks\nGo play on a decent server.\n");
|
Con_Printf("ProQuake sucks\nGo play on a decent server.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2356,6 +2361,7 @@ void CLNQ_ConnectionlessPacket(void)
|
||||||
Validation_Apply_Ruleset();
|
Validation_Apply_Ruleset();
|
||||||
|
|
||||||
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
|
Netchan_Setup (NS_CLIENT, &cls.netchan, net_from, cls.qport);
|
||||||
|
CL_ParseEstablished();
|
||||||
cls.netchan.isnqprotocol = true;
|
cls.netchan.isnqprotocol = true;
|
||||||
cls.netchan.compress = 0;
|
cls.netchan.compress = 0;
|
||||||
cls.protocol = CP_NETQUAKE;
|
cls.protocol = CP_NETQUAKE;
|
||||||
|
@ -2869,6 +2875,7 @@ void CL_Init (void)
|
||||||
Cvar_Register (&cl_deadbodyfilter, "Item effects");
|
Cvar_Register (&cl_deadbodyfilter, "Item effects");
|
||||||
|
|
||||||
Cvar_Register (&cl_nolerp, "Item effects");
|
Cvar_Register (&cl_nolerp, "Item effects");
|
||||||
|
Cvar_Register (&cl_nolerp_netquake, "Item effects");
|
||||||
|
|
||||||
Cvar_Register (&r_drawflame, "Item effects");
|
Cvar_Register (&r_drawflame, "Item effects");
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ int msgflags;
|
||||||
char cl_dp_csqc_progsname[128];
|
char cl_dp_csqc_progsname[128];
|
||||||
int cl_dp_csqc_progssize;
|
int cl_dp_csqc_progssize;
|
||||||
int cl_dp_csqc_progscrc;
|
int cl_dp_csqc_progscrc;
|
||||||
|
int cl_dp_serverextension_download;
|
||||||
|
|
||||||
|
|
||||||
char *svc_strings[] =
|
char *svc_strings[] =
|
||||||
|
@ -298,6 +299,12 @@ qboolean CL_EnqueDownload(char *filename, char *localname, unsigned int flags)
|
||||||
|
|
||||||
if (!(flags & DLLF_IGNOREFAILED))
|
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.
|
for (dl = cl.faileddownloads; dl; dl = dl->next) //yeah, so it failed... Ignore it.
|
||||||
{
|
{
|
||||||
if (!strcmp(dl->name, filename))
|
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
|
#ifdef NQPROT
|
||||||
//FIXME: move to header
|
//FIXME: move to header
|
||||||
void CL_KeepaliveMessage(void){}
|
void CL_KeepaliveMessage(void){}
|
||||||
|
@ -2312,7 +2328,8 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strcpy (cl.model_name[nummodels], str);
|
strcpy (cl.model_name[nummodels], str);
|
||||||
CL_CheckOrEnqueDownloadFile(str, NULL, 0);
|
if (*str != '*') //not inline models!
|
||||||
|
CL_CheckOrEnqueDownloadFile(str, NULL, 0);
|
||||||
Mod_TouchModel (str);
|
Mod_TouchModel (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2328,6 +2345,10 @@ void CLNQ_ParseServerData(void) //Doesn't change gamedir - use with caution.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
strcpy (cl.sound_name[numsounds], str);
|
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);
|
S_TouchSound (str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5301,6 +5322,7 @@ void CLNQ_ParseServerMessage (void)
|
||||||
Con_DPrintf ("stufftext: %s\n", s);
|
Con_DPrintf ("stufftext: %s\n", s);
|
||||||
if (!strncmp(s, "cl_serverextension_download ", 14))
|
if (!strncmp(s, "cl_serverextension_download ", 14))
|
||||||
{
|
{
|
||||||
|
cl_dp_serverextension_download = true;
|
||||||
}
|
}
|
||||||
else if (!strncmp(s, "\ncl_downloadbegin ", 17))
|
else if (!strncmp(s, "\ncl_downloadbegin ", 17))
|
||||||
CLDP_ParseDownloadBegin(s);
|
CLDP_ParseDownloadBegin(s);
|
||||||
|
|
|
@ -544,7 +544,7 @@ static void CL_LerpMove (int pnum, float msgtime)
|
||||||
int i;
|
int i;
|
||||||
int from, to;
|
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;
|
return;
|
||||||
|
|
||||||
#ifdef NQPROT
|
#ifdef NQPROT
|
||||||
|
@ -837,11 +837,7 @@ fixedorg:
|
||||||
|
|
||||||
to = &cl.frames[cl.ackedinputsequence & UPDATE_MASK];
|
to = &cl.frames[cl.ackedinputsequence & UPDATE_MASK];
|
||||||
|
|
||||||
#ifdef NQPROT
|
if (Cam_TrackNum(pnum)>=0 && CL_MayLerp())
|
||||||
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
|
|
||||||
{
|
{
|
||||||
float f;
|
float f;
|
||||||
|
|
||||||
|
|
|
@ -806,6 +806,7 @@ extern int packet_latency[NET_TIMINGS];
|
||||||
int CL_CalcNet (void);
|
int CL_CalcNet (void);
|
||||||
void CL_ParseServerMessage (void);
|
void CL_ParseServerMessage (void);
|
||||||
void CL_DumpPacket(void);
|
void CL_DumpPacket(void);
|
||||||
|
void CL_ParseEstablished(void);
|
||||||
void CLNQ_ParseServerMessage (void);
|
void CLNQ_ParseServerMessage (void);
|
||||||
#ifdef Q2CLIENT
|
#ifdef Q2CLIENT
|
||||||
void CLQ2_ParseServerMessage (void);
|
void CLQ2_ParseServerMessage (void);
|
||||||
|
@ -878,6 +879,7 @@ void CL_LinkViewModel(void);
|
||||||
void CL_LinkPlayers (void);
|
void CL_LinkPlayers (void);
|
||||||
void CL_LinkPacketEntities (void);
|
void CL_LinkPacketEntities (void);
|
||||||
void CL_LinkProjectiles (void);
|
void CL_LinkProjectiles (void);
|
||||||
|
qboolean CL_MayLerp(void);
|
||||||
|
|
||||||
//
|
//
|
||||||
//clq3_parse.c
|
//clq3_parse.c
|
||||||
|
|
Loading…
Reference in a new issue