From 27b22fee94c247e85328fa66dd40a076aea5c2a4 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy Date: Fri, 17 Oct 2025 21:39:22 +0200 Subject: [PATCH] I have a better idea... --- src/d_clisrv.c | 14 ++++++-------- src/d_clisrv.h | 17 ++--------------- src/doomdef.h | 5 ++--- src/i_net.h | 4 ++-- src/m_menu.c | 2 +- src/p_enemy.c | 4 ++-- src/p_mobj.c | 4 ++-- src/typedef.h | 1 - 8 files changed, 17 insertions(+), 34 deletions(-) diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 36b474201..fc945fc7c 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -85,6 +85,8 @@ #define MAX_REASONLENGTH 30 #define FORCECLOSE 0x8000 +I_StaticAssert(sizeof(doomdata_t) < MAXPACKETLENGTH); // can't send a packet larger than the max packet length! + boolean server = true; // true or false but !server == client #define client (!server) boolean nodownload = false; @@ -93,7 +95,7 @@ INT32 serverplayer = 0; char motd[254], server_context[8]; // Message of the Day, Unique Context (even without Mumble support) UINT8 playerconsole[MAXPLAYERS]; -plrinfo playerinfo[MAXPLAYERS]; +plrinfo playerinfo[MAXPLAYERINFO]; // Server specific vars UINT8 playernode[MAXPLAYERS]; @@ -1067,7 +1069,7 @@ static void SV_SendPlayerInfo(INT32 node) doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); netbuffer->packettype = PT_PLAYERINFO; - for (i = 0; i < MSCOMPAT_MAXPLAYERS; i++) + for (i = 0; i < MAXPLAYERINFO; i++) { if (i >= MAXPLAYERS || playernode[i] == UINT8_MAX || !playeringame[i]) { @@ -1081,10 +1083,6 @@ static void SV_SendPlayerInfo(INT32 node) netbuffer->u.playerinfo[i].name[MAXPLAYERNAME] = '\0'; - //fetch IP address - //No, don't do that, you fuckface. - memset(netbuffer->u.playerinfo[i].address, 0, 4); - if (G_GametypeHasTeams()) { if (!players[i].ctfteam) @@ -1108,7 +1106,7 @@ static void SV_SendPlayerInfo(INT32 node) netbuffer->u.playerinfo[i].data = 0; //players[i].skincolor; } - HSendPacket(node, false, 0, sizeof(plrinfo) * MSCOMPAT_MAXPLAYERS); + HSendPacket(node, false, 0, sizeof(plrinfo) * MAXPLAYERINFO); } /** Sends a PT_SERVERCFG packet @@ -4495,7 +4493,7 @@ static void HandlePlayerInfo(SINT8 node) { (void)node; doomdata_t *netbuffer = DOOMCOM_DATA(doomcom); - for (INT32 i = 0; i < MSCOMPAT_MAXPLAYERS; i++) + for (INT32 i = 0; i < MAXPLAYERINFO; i++) { playerinfo[i] = netbuffer->u.playerinfo[i]; } diff --git a/src/d_clisrv.h b/src/d_clisrv.h index f1c876dff..e138b3dba 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -327,7 +327,6 @@ struct plrinfo { UINT8 num; char name[MAXPLAYERNAME+1]; - UINT8 address[4]; // sending another string would run us up against MAXPACKETLENGTH UINT8 team; UINT16 skin; UINT8 data; // Color is first four bits, hasflag, isit and issuper have one bit each, the last is unused. @@ -335,17 +334,6 @@ struct plrinfo UINT16 timeinserver; // In seconds. } ATTRPACK; -// Shortest player information for join during intermission. -struct plrconfig -{ - char name[MAXPLAYERNAME+1]; - UINT16 skin; - UINT16 color; - UINT32 pflags; - UINT32 score; - UINT8 ctfteam; -} ATTRPACK; - struct filesneededconfig_pak { INT32 first; @@ -392,8 +380,7 @@ struct doomdata_t serverinfoupdate_pak serverinfoupdate; askinfo_pak askinfo; msaskinfo_pak msaskinfo; - plrinfo playerinfo[MSCOMPAT_MAXPLAYERS]; - plrconfig playerconfig[MAXPLAYERS]; + plrinfo playerinfo[MAXPLAYERINFO]; INT32 filesneedednum; filesneededconfig_pak filesneededcfg; netinfo_pak netinfo; @@ -580,7 +567,7 @@ extern char motd[254], server_context[8]; extern UINT8 playernode[MAXPLAYERS]; /* consoleplayer of this player (splitscreen) */ extern UINT8 playerconsole[MAXPLAYERS]; -extern plrinfo playerinfo[MAXPLAYERS]; +extern plrinfo playerinfo[MAXPLAYERINFO]; extern SINT8 joinnode; #define SERVMUS_1 "SRVMS1" diff --git a/src/doomdef.h b/src/doomdef.h index 84e5327de..ee9e6c2d9 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -190,7 +190,6 @@ extern char logfilename[1024]; // NOTE: it needs more than this to increase the number of players... #define MAXPLAYERS 43 // 42 + host slot -#define PLAYERSMASK (MAXPLAYERS-1) #define MAXPLAYERNAME 21 #define MAXSPLITSCREENPLAYERS 4 // Max number of players on a single computer #define MAXGAMEPADS (MAXSPLITSCREENPLAYERS * 2) // Number of gamepads we'll be allowing @@ -206,8 +205,8 @@ extern char logfilename[1024]; #define FADECOLOR 0 // 120 #define ENCOREFADECOLOR 209 // 122 -// Master Server compatibility ONLY -#define MSCOMPAT_MAXPLAYERS (32) +// the highest number of playerinfo entries we can fit into a single packet +#define MAXPLAYERINFO 42 // State updates, number of tics / second. // NOTE: used to setup the timer rate, see I_StartupTimer(). diff --git a/src/i_net.h b/src/i_net.h index aeb2ffc69..1d85d860a 100644 --- a/src/i_net.h +++ b/src/i_net.h @@ -22,10 +22,10 @@ /// \def MAXPACKETLENGTH /// For use in a LAN -#define MAXPACKETLENGTH 2048 +#define MAXPACKETLENGTH 1450 /// \def INETPACKETLENGTH /// For use on the internet -#define INETPACKETLENGTH 1450 +#define INETPACKETLENGTH 1024 #define NO_BAN_TIME (time_t)(-1) diff --git a/src/m_menu.c b/src/m_menu.c index ad10169a9..7bd5751ee 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -8790,7 +8790,7 @@ void MD_DrawViewServer(void) if (playeramount > 0) { - for (i = 0; i < MAXPLAYERS; i++) + for (i = 0; i < MAXPLAYERINFO; i++) { if (playerinfo[i].num < 255) { diff --git a/src/p_enemy.c b/src/p_enemy.c index f7bfe41cd..36ce44d69 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -449,9 +449,9 @@ boolean P_LookForPlayers(mobj_t *actor, boolean allaround, boolean tracer, fixed actor->lastlook %= MAXPLAYERS; - stop = (actor->lastlook - 1) & PLAYERSMASK; + stop = (actor->lastlook - 1) % MAXPLAYERS; - for (; ; actor->lastlook = (actor->lastlook + 1) & PLAYERSMASK) + for (; ; actor->lastlook = (actor->lastlook + 1) % MAXPLAYERS) { // done looking if (actor->lastlook == stop) diff --git a/src/p_mobj.c b/src/p_mobj.c index 0649e71ef..3af1c872b 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -4296,9 +4296,9 @@ boolean P_BossTargetPlayer(mobj_t *actor, boolean closest) // first time init, this allow minimum lastlook changes if (actor->lastlook < 0) actor->lastlook = P_RandomByte(); - actor->lastlook &= PLAYERSMASK; + actor->lastlook %= MAXPLAYERS; - for( ; ; actor->lastlook = (actor->lastlook+1) & PLAYERSMASK) + for( ; ; actor->lastlook = (actor->lastlook+1) % MAXPLAYERS) { // save the first look so we stop next time. if (stop < 0) diff --git a/src/typedef.h b/src/typedef.h index 9db93cd6a..9db777746 100644 --- a/src/typedef.h +++ b/src/typedef.h @@ -66,7 +66,6 @@ TYPEDEF (serverinfoupdate_pak); TYPEDEF (askinfo_pak); TYPEDEF (msaskinfo_pak); TYPEDEF (plrinfo); -TYPEDEF (plrconfig); TYPEDEF (filesneededconfig_pak); TYPEDEF (doomdata_t); TYPEDEF (serverelem_t);