From 935fec1e1519ee3e1706fb5991fb9dc6e92f6de5 Mon Sep 17 00:00:00 2001
From: Sryder <sryder13@gmail.com>
Date: Mon, 17 Jun 2019 20:57:31 +0100
Subject: [PATCH] Fix compatibility with the MS (Specifically Doomseeker) Send
 back 32 players worth of playerinfo regardless of MAXPLAYERS. Fill the extra
 with unconnected nodes.

---
 src/d_clisrv.c | 10 ++++++++--
 src/d_clisrv.h |  2 +-
 src/doomdef.h  |  3 +++
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/d_clisrv.c b/src/d_clisrv.c
index 1dc2c1420..213f5dde0 100644
--- a/src/d_clisrv.c
+++ b/src/d_clisrv.c
@@ -1428,8 +1428,14 @@ static void SV_SendPlayerInfo(INT32 node)
 	UINT8 i;
 	netbuffer->packettype = PT_PLAYERINFO;
 
-	for (i = 0; i < MAXPLAYERS; i++)
+	for (i = 0; i < MSCOMPAT_MAXPLAYERS; i++)
 	{
+		if (i >= MAXPLAYERS)
+		{
+			netbuffer->u.playerinfo[i].node = 255;
+			continue;
+		}
+
 		if (!playeringame[i])
 		{
 			netbuffer->u.playerinfo[i].node = 255; // This slot is empty.
@@ -1477,7 +1483,7 @@ static void SV_SendPlayerInfo(INT32 node)
 			netbuffer->u.playerinfo[i].data |= 0x80;
 	}
 
-	HSendPacket(node, false, 0, sizeof(plrinfo) * MAXPLAYERS);
+	HSendPacket(node, false, 0, sizeof(plrinfo) * MSCOMPAT_MAXPLAYERS);
 }
 
 /** Sends a PT_SERVERCFG packet
diff --git a/src/d_clisrv.h b/src/d_clisrv.h
index e7879d582..66d9e73ea 100644
--- a/src/d_clisrv.h
+++ b/src/d_clisrv.h
@@ -468,7 +468,7 @@ typedef struct
 		serverrefuse_pak serverrefuse;      //       65025 bytes (somehow I feel like those values are garbage...)
 		askinfo_pak askinfo;                //          61 bytes
 		msaskinfo_pak msaskinfo;            //          22 bytes
-		plrinfo playerinfo[MAXPLAYERS];     //         576 bytes(?)
+		plrinfo playerinfo[MSCOMPAT_MAXPLAYERS];//         576 bytes(?)
 		plrconfig playerconfig[MAXPLAYERS]; // (up to) 528 bytes(?)
 		INT32 filesneedednum;               //           4 bytes
 		filesneededconfig_pak filesneededcfg; //       ??? bytes
diff --git a/src/doomdef.h b/src/doomdef.h
index 4ab40853a..24b52e8d2 100644
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -252,6 +252,9 @@ extern FILE *logstream;
 #define PLAYERSMASK (MAXPLAYERS-1)
 #define MAXPLAYERNAME 21
 
+// Master Server compatibility ONLY
+#define MSCOMPAT_MAXPLAYERS (32)
+
 typedef enum
 {
 	SKINCOLOR_NONE = 0,
-- 
GitLab