From 6f2771401152e70441f33b4162f71d5c1ac7c70d Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 1 Feb 2024 02:49:40 -0800 Subject: [PATCH 1/2] invite, leaveparty commands: use party API to check party size Use G_PartySize/G_LocalSplitscreenPartySize instead of r_splitscreen/splitscreen. This should be less error-prone in case r_splitscreen fails to be updated somehow. --- src/d_netcmd.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 34c42718b..fddf66fbf 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1854,7 +1854,7 @@ Command_Invite_f (void) return; } - if (r_splitscreen >= MAXSPLITSCREENPLAYERS) + if (G_PartySize(consoleplayer) >= MAXSPLITSCREENPLAYERS) { CONS_Alert(CONS_WARNING, "Your party is full!\n"); return; @@ -1981,7 +1981,7 @@ Command_RejectInvite_f (void) static void Command_LeaveParty_f (void) { - if (r_splitscreen > splitscreen) + if (G_PartySize(consoleplayer) > G_LocalSplitscreenPartySize(consoleplayer)) { CONS_Printf("\x85Leaving party...\n"); From da2150ee7a2e993077096ce92fdadd7aaf16ca2c Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 1 Feb 2024 02:58:54 -0800 Subject: [PATCH 2/2] Party::rebuild_displayplayers: let displayplayers be reconfigured outside of level context - This lets party changes take effect during GS_INTERMISSION or GS_VOTING - displayplayers must always be updated, in order for splitscreen viewports to appear when the level starts - Only G_FixCamera is not called, because it may rely on player_t.mo and I'm scared of that --- src/g_party.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/g_party.cpp b/src/g_party.cpp index 0caad76b7..bb55c36d8 100644 --- a/src/g_party.cpp +++ b/src/g_party.cpp @@ -128,16 +128,15 @@ public: return; } - // Rendering stuff is not valid outside of levels. - if (!G_GamestateUsesLevel()) - { - return; - } - for (std::size_t i = 0; i < size(); ++i) { displayplayers[i] = at(i); - G_FixCamera(1 + i); + + // Camera is not valid outside of levels. + if (G_GamestateUsesLevel()) + { + G_FixCamera(1 + i); + } } r_splitscreen = size() - 1;