mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-01-31 04:20:34 +00:00
New extratic method
- Extratic changed to server var, that can be changed at any time (net_extratic) - Added net_extratic 2 which resends all unconfirmed tics - Corrected bad variable typo in delay reporting
This commit is contained in:
parent
97586c317e
commit
ded3bc73be
3 changed files with 29 additions and 19 deletions
|
@ -117,7 +117,7 @@ int playerfornode[MAXNETNODES];
|
||||||
|
|
||||||
int maketic;
|
int maketic;
|
||||||
int skiptics;
|
int skiptics;
|
||||||
int ticdup;
|
int ticdup;
|
||||||
|
|
||||||
void D_ProcessEvents (void);
|
void D_ProcessEvents (void);
|
||||||
void G_BuildTiccmd (ticcmd_t *cmd);
|
void G_BuildTiccmd (ticcmd_t *cmd);
|
||||||
|
@ -153,6 +153,17 @@ CUSTOM_CVAR (Bool, cl_capfps, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
}
|
}
|
||||||
|
|
||||||
CVAR(Bool, net_ticbalance, false, CVAR_SERVERINFO)
|
CVAR(Bool, net_ticbalance, false, CVAR_SERVERINFO)
|
||||||
|
CUSTOM_CVAR(Int, net_extratic, 0, CVAR_SERVERINFO)
|
||||||
|
{
|
||||||
|
if (self < 0)
|
||||||
|
{
|
||||||
|
self = 0;
|
||||||
|
}
|
||||||
|
else if (self > 3)
|
||||||
|
{
|
||||||
|
I_SetFPSLimit(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// [RH] Special "ticcmds" get stored in here
|
// [RH] Special "ticcmds" get stored in here
|
||||||
static struct TicSpecial
|
static struct TicSpecial
|
||||||
|
@ -1166,7 +1177,15 @@ void NetUpdate (void)
|
||||||
if (numtics > BACKUPTICS)
|
if (numtics > BACKUPTICS)
|
||||||
I_Error ("NetUpdate: Node %d missed too many tics", i);
|
I_Error ("NetUpdate: Node %d missed too many tics", i);
|
||||||
|
|
||||||
resendto[i] = MAX (0, lowtic - doomcom.extratics);
|
switch (net_extratic)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
default:
|
||||||
|
resendto[i] = MAX(0, lowtic); break;
|
||||||
|
case 1: resendto[i] = MAX(0, lowtic - 1); break;
|
||||||
|
case 2: resendto[i] = MAX(0, lowtic - (lowtic - nettics[i])); break;
|
||||||
|
case 3: resendto[i] = MAX(0, lowtic - (BACKUPTICS / 2 - 1)); break;
|
||||||
|
}
|
||||||
|
|
||||||
if (numtics == 0 && resendOnly && !remoteresend[i] && nettics[i])
|
if (numtics == 0 && resendOnly && !remoteresend[i] && nettics[i])
|
||||||
{
|
{
|
||||||
|
@ -1204,7 +1223,7 @@ void NetUpdate (void)
|
||||||
|
|
||||||
// Send current network delay
|
// Send current network delay
|
||||||
// The number of tics we just made should be removed from the count.
|
// The number of tics we just made should be removed from the count.
|
||||||
netbuffer[k++] = ((maketic - numtics - gametic) / ticdup);
|
netbuffer[k++] = ((maketic - newtics - gametic) / ticdup);
|
||||||
|
|
||||||
if (numtics > 0)
|
if (numtics > 0)
|
||||||
{
|
{
|
||||||
|
@ -1319,7 +1338,7 @@ void NetUpdate (void)
|
||||||
if (NetMode == NET_PeerToPeer)
|
if (NetMode == NET_PeerToPeer)
|
||||||
{
|
{
|
||||||
// Try to guess ahead the time it takes to send responses to the arbitrator
|
// Try to guess ahead the time it takes to send responses to the arbitrator
|
||||||
// [ED850] It seems that there is a bias based on network adaption (which the netwrok arbitrator doesn't do),
|
// [ED850] It seems that there is a bias based on network adaption (which the arbitrator doesn't do),
|
||||||
// so I have set this up to assume one less tic, which appears to balance it out.
|
// so I have set this up to assume one less tic, which appears to balance it out.
|
||||||
if (net_ticbalance)
|
if (net_ticbalance)
|
||||||
average = ((netdelay[0] + ARBITRATOR_DELAY) / 2) - 1;
|
average = ((netdelay[0] + ARBITRATOR_DELAY) / 2) - 1;
|
||||||
|
@ -1368,9 +1387,8 @@ void NetUpdate (void)
|
||||||
//
|
//
|
||||||
// 0 One byte set to NCMD_SETUP+2
|
// 0 One byte set to NCMD_SETUP+2
|
||||||
// 1 One byte for ticdup setting
|
// 1 One byte for ticdup setting
|
||||||
// 2 One byte for extratics setting
|
// 2 One byte for NetMode setting
|
||||||
// 3 One byte for NetMode setting
|
// 3 String with starting map's name
|
||||||
// 4 String with starting map's name
|
|
||||||
// . Four bytes for the RNG seed
|
// . Four bytes for the RNG seed
|
||||||
// . Stream containing remaining game info
|
// . Stream containing remaining game info
|
||||||
//
|
//
|
||||||
|
@ -1451,10 +1469,9 @@ bool DoArbitrate (void *userdata)
|
||||||
data->gotsetup[0] = 0x80;
|
data->gotsetup[0] = 0x80;
|
||||||
|
|
||||||
ticdup = doomcom.ticdup = netbuffer[1];
|
ticdup = doomcom.ticdup = netbuffer[1];
|
||||||
doomcom.extratics = netbuffer[2];
|
NetMode = netbuffer[2];
|
||||||
NetMode = netbuffer[3];
|
|
||||||
|
|
||||||
stream = &netbuffer[4];
|
stream = &netbuffer[3];
|
||||||
s = ReadString (&stream);
|
s = ReadString (&stream);
|
||||||
startmap = s;
|
startmap = s;
|
||||||
delete[] s;
|
delete[] s;
|
||||||
|
@ -1519,9 +1536,8 @@ bool DoArbitrate (void *userdata)
|
||||||
{
|
{
|
||||||
netbuffer[0] = NCMD_SETUP+2;
|
netbuffer[0] = NCMD_SETUP+2;
|
||||||
netbuffer[1] = (BYTE)doomcom.ticdup;
|
netbuffer[1] = (BYTE)doomcom.ticdup;
|
||||||
netbuffer[2] = (BYTE)doomcom.extratics;
|
netbuffer[2] = NetMode;
|
||||||
netbuffer[3] = NetMode;
|
stream = &netbuffer[3];
|
||||||
stream = &netbuffer[4];
|
|
||||||
WriteString (startmap, &stream);
|
WriteString (startmap, &stream);
|
||||||
WriteLong (rngseed, &stream);
|
WriteLong (rngseed, &stream);
|
||||||
C_WriteCVars (&stream, CVAR_SERVERINFO, true);
|
C_WriteCVars (&stream, CVAR_SERVERINFO, true);
|
||||||
|
|
|
@ -70,7 +70,6 @@ struct doomcom_t
|
||||||
// info common to all nodes
|
// info common to all nodes
|
||||||
SWORD numnodes; // console is always node 0.
|
SWORD numnodes; // console is always node 0.
|
||||||
SWORD ticdup; // 1 = no duplication, 2-5 = dup for slow nets
|
SWORD ticdup; // 1 = no duplication, 2-5 = dup for slow nets
|
||||||
SWORD extratics; // 1 = send a backup tic in every packet
|
|
||||||
#ifdef DJGPP
|
#ifdef DJGPP
|
||||||
SWORD pad[5]; // keep things aligned for DOS drivers
|
SWORD pad[5]; // keep things aligned for DOS drivers
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -938,11 +938,6 @@ bool I_InitNetwork (void)
|
||||||
doomcom.ticdup = 1;
|
doomcom.ticdup = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Args->CheckParm ("-extratic"))
|
|
||||||
doomcom.extratics = 1;
|
|
||||||
else
|
|
||||||
doomcom.extratics = 0;
|
|
||||||
|
|
||||||
v = Args->CheckValue ("-port");
|
v = Args->CheckValue ("-port");
|
||||||
if (v)
|
if (v)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue