Rewrite the awayview reset for both Got_Teamchange and P_SpectatorJoinGame.

This commit is contained in:
toaster 2022-02-11 12:09:00 +00:00
parent 913610b1b7
commit 006b6f00ac
2 changed files with 21 additions and 26 deletions

View file

@ -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())

View file

@ -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;
}
}
}