diff --git a/code/server/server.h b/code/server/server.h index d096f685f..c35374a30 100644 --- a/code/server/server.h +++ b/code/server/server.h @@ -191,7 +191,8 @@ typedef struct client_s { qboolean downloadEOF; // We have sent the EOF block int downloadSendTime; // time we last got an ack from the client - int deltaMessage; // frame last client usercmd message + qboolean deltaActive; // delta snapshots enabled + int deltaMessage; // message to create delta snapshot from int lastPacketTime; // svs.time when packet was last received int lastConnectTime; // svs.time when connection started int lastDisconnectTime; diff --git a/code/server/sv_client.c b/code/server/sv_client.c index 5e8458cd7..0c0e3afba 100644 --- a/code/server/sv_client.c +++ b/code/server/sv_client.c @@ -1167,7 +1167,7 @@ void SV_ClientEnterWorld( client_t *client ) { ent->s.number = clientNum; client->gentity = ent; - client->deltaMessage = client->netchan.outgoingSequence - (PACKET_BACKUP + 1); // force delta reset + client->deltaActive = qfalse; client->lastSnapshotTime = svs.time - 9999; // generate a snapshot immediately // call the game begin function @@ -2135,11 +2135,8 @@ static void SV_UserMove( client_t *cl, msg_t *msg, qboolean delta ) { usercmd_t cmds[MAX_PACKET_USERCMDS], *cmd; const usercmd_t *oldcmd; - if ( delta ) { - cl->deltaMessage = cl->messageAcknowledge; - } else { - cl->deltaMessage = cl->netchan.outgoingSequence - ( PACKET_BACKUP + 1 ); // force delta reset - } + cl->deltaActive = delta; + cl->deltaMessage = cl->messageAcknowledge; cmdCount = MSG_ReadByte( msg ); @@ -2194,7 +2191,7 @@ static void SV_UserMove( client_t *cl, msg_t *msg, qboolean delta ) { } if ( cl->state != CS_ACTIVE ) { - cl->deltaMessage = cl->netchan.outgoingSequence - ( PACKET_BACKUP + 1 ); // force delta reset + cl->deltaActive = qfalse; return; } diff --git a/code/server/sv_snapshot.c b/code/server/sv_snapshot.c index e790ab259..3b5a054a1 100644 --- a/code/server/sv_snapshot.c +++ b/code/server/sv_snapshot.c @@ -129,17 +129,12 @@ static void SV_WriteSnapshotToClient( const client_t *client, msg_t *msg ) { frame = &client->frames[ client->netchan.outgoingSequence & PACKET_MASK ]; // try to use a previous frame as the source for delta compressing the snapshot - if ( /* client->deltaMessage <= 0 || */ client->state != CS_ACTIVE ) { - // client is asking for a retransmit + if ( !client->deltaActive || client->state != CS_ACTIVE ) { oldframe = NULL; lastframe = 0; } else if ( client->netchan.outgoingSequence - client->deltaMessage >= (PACKET_BACKUP - 3) ) { // client hasn't gotten a good message through in a long time - if ( com_developer->integer ) { - if ( client->deltaMessage != client->netchan.outgoingSequence - ( PACKET_BACKUP + 1 ) ) { - Com_Printf( "%s: Delta request from out of date packet.\n", client->name ); - } - } + Com_DPrintf( "%s: Delta request from out of date packet.\n", client->name ); oldframe = NULL; lastframe = 0; } else {