diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 474306704..2bdc8d66e 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -3459,15 +3459,20 @@ static void Got_Teamchange(UINT8 **cp, INT32 playernum) else if (NetPacket.packet.newteam == 0) HU_AddChatText(va("\x82*%s became a spectator.", player_names[playernum]), false); // "entered the game" text was moved to P_SpectatorJoinGame - //reset view if you are changed, or viewing someone who was changed. - if (playernum == consoleplayer || displayplayers[0] == playernum) + // Reset away view (some code referenced from P_SpectatorJoinGame) { - // Call ViewpointSwitch hooks here. - // The viewpoint was forcibly changed. - if (displayplayers[0] != consoleplayer) // You're already viewing yourself. No big deal. - LUAh_ViewpointSwitch(&players[consoleplayer], &players[consoleplayer], true); + UINT8 i = 0; + INT32 *localplayertable = (splitscreen_partied[consoleplayer] ? splitscreen_party[consoleplayer] : g_localplayers); - displayplayers[0] = consoleplayer; + for (i = 0; i < r_splitscreen; i++) + { + if (localplayertable[i] == playernum) + { + LUAh_ViewpointSwitch(players+playernum, players+playernum, true); + displayplayers[i] = playernum; + break; + } + } } /*if (G_GametypeHasTeams()) diff --git a/src/p_user.c b/src/p_user.c index 30ad2b8d4..7a36121dd 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3620,29 +3620,19 @@ boolean P_SpectatorJoinGame(player_t *player) player->ctfteam = changeto; player->playerstate = PST_REBORN; - // Reset away view (some code referenced from P_IsLocalPlayer) + // Reset away view (some code referenced from Got_Teamchange) { UINT8 i = 0; - if (splitscreen_partied[consoleplayer]) - { - for (i = splitscreen_party_size[consoleplayer]; i > 0; i--) - { - if (splitscreen_party[consoleplayer][i-1] == (player-players)) - break; - } - } + INT32 *localplayertable = (splitscreen_partied[consoleplayer] ? splitscreen_party[consoleplayer] : g_localplayers); - if (i == 0) - for (i = r_splitscreen; i > 0; i--) - { - if (g_localplayers[i-1] == (player-players)) - break; - } - - if (i && displayplayers[i-1] != (player-players)) + for (i = 0; i < r_splitscreen; i++) { - LUAh_ViewpointSwitch(player, player, true); - displayplayers[i-1] = (player-players); + if (localplayertable[i] == (player-players)) + { + LUAh_ViewpointSwitch(player, player, true); + displayplayers[i] = (player-players); + break; + } } }