From b3cd76aa703beaaf5081c5dd94fd2d391b5abf1c Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Mon, 19 Feb 2024 19:17:27 +0100 Subject: [PATCH] Engine: fix bug in networking code caused by incorrect constants Mixed MAX_BACKUP_COMMANDS with MAX_NEW_COMMANDS, added proper (confirmed) defines. Also fixed MAX_BACKUP_COMMANDS_PROCESS, which was 60 but was supposed to be 64, so we were 4 backup commands short in CPlayer::ProcessUsercmds(). --- src/common/protocol.h | 15 +++++++++++---- src/engine/client/cl_main.cpp | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/common/protocol.h b/src/common/protocol.h index eeb5c6ee..3095821d 100644 --- a/src/common/protocol.h +++ b/src/common/protocol.h @@ -4,13 +4,20 @@ * _protocol.h *-----------------------------------------------------------------------------*/ + // Largest # of commands to send in a packet +#define NUM_NEW_COMMAND_BITS 4 +#define MAX_NEW_COMMANDS ((1 << NUM_NEW_COMMAND_BITS)-1) + // Max number of history commands to send ( 2 by default ) in case of dropped packets -#define NUM_BACKUP_COMMAND_BITS 4 // Originally 3 bits. -#define MAX_BACKUP_COMMANDS ((1 << NUM_BACKUP_COMMAND_BITS)-1) // 15 in R5; see 'CL_Move'. +#define NUM_BACKUP_COMMAND_BITS 3 +#define MAX_BACKUP_COMMANDS ((1 << NUM_BACKUP_COMMAND_BITS)-1) // Maximum amount of backup commands to process on the server. -#define MAX_BACKUP_COMMANDS_PROCESS (MAX_BACKUP_COMMANDS+1) * NUM_BACKUP_COMMAND_BITS -#define MAX_QUEUED_COMMANDS_PROCESS 0x1B0 +#define MAX_BACKUP_COMMANDS_PROCESS 64 +#define MAX_QUEUED_COMMANDS_PROCESS 432 + +// The size of the snapshot scratch buffer, which also applies to data block packets +#define SNAPSHOT_SCRATCH_BUFFER_SIZE 786432 enum class SIGNONSTATE : int { diff --git a/src/engine/client/cl_main.cpp b/src/engine/client/cl_main.cpp index c7935d19..aceb5d30 100644 --- a/src/engine/client/cl_main.cpp +++ b/src/engine/client/cl_main.cpp @@ -50,7 +50,7 @@ void CL_MoveEx() if (cl->m_flNextCmdTime <= (maxFrameTime * 0.5f) + netTime) sendPacket = chan->CanPacket(); - else if (cl->m_nOutgoingCommandNr - (commandTick+1) < MAX_BACKUP_COMMANDS || isTimeScaleDefault) + else if (cl->m_nOutgoingCommandNr - (commandTick+1) < MAX_NEW_COMMANDS || isTimeScaleDefault) sendPacket = false; const bool isActive = cl->IsActive();