Additional P_SetTarget mobj_t pointer fixes on player struct
2a87cfcdf1
This commit is contained in:
parent
dc25bafd27
commit
b65c9fd33d
4 changed files with 59 additions and 31 deletions
|
|
@ -2494,24 +2494,34 @@ void CL_ClearPlayer(INT32 playernum)
|
|||
{
|
||||
int i;
|
||||
|
||||
if (players[playernum].mo)
|
||||
if (gamestate == GS_LEVEL)
|
||||
{
|
||||
P_RemoveMobj(players[playernum].mo);
|
||||
if (players[playernum].mo)
|
||||
{
|
||||
P_RemoveMobj(players[playernum].mo);
|
||||
P_SetTarget(&players[playernum].mo, NULL);
|
||||
}
|
||||
|
||||
P_SetTarget(&players[playernum].skybox.viewpoint, NULL);
|
||||
P_SetTarget(&players[playernum].skybox.centerpoint, NULL);
|
||||
P_SetTarget(&players[playernum].awayviewmobj, NULL);
|
||||
P_SetTarget(&players[playernum].followmobj, NULL);
|
||||
}
|
||||
// Handle parties.
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
if (splitscreen_invitations[i] == playernum)
|
||||
splitscreen_invitations[i] = -1;
|
||||
}
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
if (splitscreen_invitations[i] == playernum)
|
||||
splitscreen_invitations[i] = -1;
|
||||
}
|
||||
splitscreen_party_size[playernum] = 0;
|
||||
splitscreen_original_party_size[playernum] = 0;
|
||||
|
||||
splitscreen_invitations[playernum] = -1;
|
||||
splitscreen_party_size[playernum] = 0;
|
||||
splitscreen_original_party_size[playernum] = 0;
|
||||
// Wipe the struct.
|
||||
memset(&players[playernum], 0, sizeof (player_t));
|
||||
|
||||
memset(&players[playernum], 0, sizeof (player_t));
|
||||
|
||||
RemoveAdminPlayer(playernum); // don't stay admin after you're gone
|
||||
// Handle post-cleanup.
|
||||
RemoveAdminPlayer(playernum); // don't stay admin after you're gone
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
|||
21
src/g_game.c
21
src/g_game.c
|
|
@ -2180,8 +2180,12 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
boolean followerready;
|
||||
INT32 followerskin;
|
||||
UINT16 followercolor;
|
||||
|
||||
mobj_t *follower; // old follower, will probably be removed by the time we're dead but you never know.
|
||||
mobj_t *skyboxviewpoint;
|
||||
mobj_t *skyboxcenterpoint;
|
||||
|
||||
|
||||
INT32 charflags;
|
||||
UINT32 followitem;
|
||||
|
||||
|
|
@ -2308,7 +2312,6 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
nextcheck = 0;
|
||||
xtralife = 0;
|
||||
|
||||
follower = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -2346,8 +2349,6 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
|
||||
exiting = players[player].exiting;
|
||||
khudcardanimation = (exiting > 0) ? players[player].karthud[khud_cardanimation] : 0;
|
||||
|
||||
follower = players[player].follower;
|
||||
|
||||
starpostx = players[player].starpostx;
|
||||
starposty = players[player].starposty;
|
||||
|
|
@ -2369,7 +2370,18 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
if (!betweenmaps)
|
||||
{
|
||||
// Obliterate follower from existence (if valid memory)
|
||||
follower = players[player].follower;
|
||||
P_SetTarget(&players[player].follower, NULL);
|
||||
P_SetTarget(&players[player].awayviewmobj, NULL);
|
||||
P_SetTarget(&players[player].followmobj, NULL);
|
||||
|
||||
skyboxviewpoint = players[player].skybox.viewpoint;
|
||||
skyboxcenterpoint = players[player].skybox.centerpoint;
|
||||
}
|
||||
else
|
||||
{
|
||||
follower = NULL;
|
||||
skyboxviewpoint = skyboxcenterpoint = NULL;
|
||||
}
|
||||
|
||||
spectatorreentry = players[player].spectatorreentry;
|
||||
|
|
@ -2447,6 +2459,9 @@ void G_PlayerReborn(INT32 player, boolean betweenmaps)
|
|||
|
||||
if (follower)
|
||||
P_RemoveMobj(follower);
|
||||
|
||||
p->skybox.viewpoint = skyboxviewpoint;
|
||||
p->skybox.centerpoint = skyboxcenterpoint;
|
||||
|
||||
p->followerready = followerready;
|
||||
p->followerskin = followerskin;
|
||||
|
|
|
|||
15
src/p_mobj.c
15
src/p_mobj.c
|
|
@ -10960,15 +10960,12 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
}
|
||||
|
||||
p->followitem = skins[p->skin].followitem;
|
||||
|
||||
//awayview stuff
|
||||
p->awayviewmobj = NULL;
|
||||
p->awayviewtics = 0;
|
||||
|
||||
p->skybox.viewpoint = skyboxviewpnts[0];
|
||||
p->skybox.centerpoint = skyboxcenterpnts[0];
|
||||
|
||||
P_SetTarget(&p->follower, NULL); // cleanse follower from existence
|
||||
|
||||
if (p->jointime <= 1 || leveltime <= 1)
|
||||
{
|
||||
P_SetTarget(&p->skybox.viewpoint, skyboxviewpnts[0]);
|
||||
P_SetTarget(&p->skybox.centerpoint, skyboxcenterpnts[0]);
|
||||
}
|
||||
|
||||
if (K_PlayerShrinkCheat(p) == true)
|
||||
{
|
||||
|
|
|
|||
18
src/p_spec.c
18
src/p_spec.c
|
|
@ -2293,12 +2293,12 @@ static void P_SwitchSkybox(INT32 args, player_t *player, skybox_t *skybox)
|
|||
|
||||
if (args != TMS_CENTERPOINT) // Only viewpoint, or both.
|
||||
{
|
||||
player->skybox.viewpoint = skybox->viewpoint;
|
||||
P_SetTarget(&player->skybox.viewpoint, skybox->viewpoint);
|
||||
}
|
||||
|
||||
if (args != TMS_VIEWPOINT) // Only centerpoint, or both.
|
||||
{
|
||||
player->skybox.centerpoint = skybox->centerpoint;
|
||||
P_SetTarget(&player->skybox.centerpoint, skybox->centerpoint);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -3446,23 +3446,29 @@ boolean P_ProcessSpecial(activator_t *activator, INT16 special, INT32 *args, cha
|
|||
|
||||
INT32 viewid = args[0];
|
||||
INT32 centerid = args[1];
|
||||
|
||||
mobj_t *set;
|
||||
|
||||
// set viewpoint mobj
|
||||
if (args[2] != TMS_CENTERPOINT)
|
||||
{
|
||||
if (viewid >= 0 && viewid < 16)
|
||||
skybox.viewpoint = skyboxviewpnts[viewid];
|
||||
set = skyboxviewpnts[viewid];
|
||||
else
|
||||
skybox.viewpoint = NULL;
|
||||
set = NULL;
|
||||
|
||||
P_SetTarget(&skybox.viewpoint, set);
|
||||
}
|
||||
|
||||
// set centerpoint mobj
|
||||
if (args[2] != TMS_VIEWPOINT)
|
||||
{
|
||||
if (centerid >= 0 && centerid < 16)
|
||||
skybox.centerpoint = skyboxcenterpnts[centerid];
|
||||
set = skyboxcenterpnts[centerid];
|
||||
else
|
||||
skybox.centerpoint = NULL;
|
||||
set = NULL;
|
||||
|
||||
P_SetTarget(&skybox.centerpoint, set);
|
||||
}
|
||||
|
||||
if (args[3]) // Applies to all players
|
||||
|
|
|
|||
Loading…
Reference in a new issue