Assorted RR party changes
This commit is contained in:
parent
b04b8a097a
commit
d72f4e8917
3 changed files with 63 additions and 34 deletions
|
|
@ -2527,7 +2527,6 @@ void CL_ClearPlayer(INT32 playernum)
|
||||||
splitscreen_invitations[playernum] = -1;
|
splitscreen_invitations[playernum] = -1;
|
||||||
|
|
||||||
playerconsole[playernum] = playernum;
|
playerconsole[playernum] = playernum;
|
||||||
G_DestroyParty(playernum);
|
|
||||||
|
|
||||||
// Wipe the struct.
|
// Wipe the struct.
|
||||||
memset(&players[playernum], 0, sizeof (player_t));
|
memset(&players[playernum], 0, sizeof (player_t));
|
||||||
|
|
@ -2569,15 +2568,6 @@ void CL_RemovePlayer(INT32 playernum, kickreason_t reason)
|
||||||
|
|
||||||
LUA_HookPlayerQuit(&players[playernum], reason); // Lua hook for player quitting
|
LUA_HookPlayerQuit(&players[playernum], reason); // Lua hook for player quitting
|
||||||
|
|
||||||
// don't look through someone's view who isn't there
|
|
||||||
if (playernum == displayplayers[0] && !demo.playback)
|
|
||||||
{
|
|
||||||
// Call ViewpointSwitch hooks here.
|
|
||||||
// The viewpoint was forcibly changed.
|
|
||||||
LUA_HookViewpointSwitch(&players[consoleplayer], &players[consoleplayer], true);
|
|
||||||
displayplayers[0] = consoleplayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
G_LeaveParty(playernum);
|
G_LeaveParty(playernum);
|
||||||
|
|
||||||
// Reset player data
|
// Reset player data
|
||||||
|
|
@ -2597,6 +2587,9 @@ void CL_RemovePlayer(INT32 playernum, kickreason_t reason)
|
||||||
|
|
||||||
LUA_InvalidatePlayer(&players[playernum]);
|
LUA_InvalidatePlayer(&players[playernum]);
|
||||||
|
|
||||||
|
// don't look through someone's view who isn't there
|
||||||
|
G_ResetViews();
|
||||||
|
|
||||||
K_CheckBumpers();
|
K_CheckBumpers();
|
||||||
P_CheckRacers();
|
P_CheckRacers();
|
||||||
|
|
||||||
|
|
|
||||||
69
src/g_game.c
69
src/g_game.c
|
|
@ -1981,8 +1981,8 @@ void G_ResetViews(void)
|
||||||
/* Demote splits */
|
/* Demote splits */
|
||||||
if (playersviewable < splits)
|
if (playersviewable < splits)
|
||||||
{
|
{
|
||||||
splits = playersviewable;
|
splits = max(playersviewable, G_PartySize(consoleplayer)); // don't delete local players
|
||||||
r_splitscreen = max(splits-1, 0);
|
r_splitscreen = splits - 1;
|
||||||
R_ExecuteSetViewSize();
|
R_ExecuteSetViewSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2011,25 +2011,69 @@ void G_Ticker(boolean run)
|
||||||
marathontime++;
|
marathontime++;
|
||||||
|
|
||||||
P_MapStart();
|
P_MapStart();
|
||||||
// do player reborns if needed
|
|
||||||
if (gamestate == GS_LEVEL)
|
|
||||||
{
|
|
||||||
boolean changed = false;
|
|
||||||
// Or, alternatively, retry.
|
|
||||||
if (G_GetRetryFlag())
|
|
||||||
{
|
|
||||||
G_ClearRetryFlag();
|
|
||||||
|
|
||||||
|
if (gamestate == GS_LEVEL && G_GetRetryFlag())
|
||||||
|
{
|
||||||
|
if (demo.playback == true)
|
||||||
|
{
|
||||||
|
// Stop playback!!
|
||||||
|
G_ClearRetryFlag();
|
||||||
|
// G_CheckDemoStatus() called here fails an I_Assert in g_party.cpp Console()!?
|
||||||
|
// I'm sure there's a completely logical explanation and an elegant solution
|
||||||
|
// where we can defer some sort of state change. However I'm tired, I've been
|
||||||
|
// looking after my niece, my arm hurts a bit when using mouse/keyboard, and
|
||||||
|
// we are ALMOST DONE. So I'm going to bodge this for the sake of release.
|
||||||
|
// The minimal set of calls to dump you back to the menu as soon as possible
|
||||||
|
// will have to do, so that everybody can have fun racing as rings. ~toast 050424
|
||||||
|
G_StopDemo();
|
||||||
|
Command_ExitGame_f();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Or, alternatively, retry.
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
if (playeringame[i])
|
if (playeringame[i])
|
||||||
{
|
{
|
||||||
K_PlayerLoseLife(&players[i]);
|
if (players[i].bot == true
|
||||||
|
&& grandprixinfo.gp == true
|
||||||
|
&& grandprixinfo.masterbots == false)
|
||||||
|
{
|
||||||
|
UINT8 bot_level_decrease = 3;
|
||||||
|
|
||||||
|
if (grandprixinfo.gamespeed == KARTSPEED_EASY)
|
||||||
|
{
|
||||||
|
bot_level_decrease++;
|
||||||
|
}
|
||||||
|
else if (grandprixinfo.gamespeed == KARTSPEED_HARD)
|
||||||
|
{
|
||||||
|
bot_level_decrease--;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (players[i].botvars.difficulty <= bot_level_decrease)
|
||||||
|
{
|
||||||
|
players[i].botvars.difficulty = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
players[i].botvars.difficulty -= bot_level_decrease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
K_PlayerLoseLife(&players[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
D_MapChange(gamemap, gametype, encoremode, false, 1, false, false);
|
D_MapChange(gamemap, gametype, encoremode, false, 1, false, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// do player reborns if needed
|
||||||
|
if (G_GamestateUsesLevel() == true)
|
||||||
|
{
|
||||||
|
boolean changed = false;
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
|
|
@ -2039,12 +2083,13 @@ void G_Ticker(boolean run)
|
||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed == true)
|
if (changed == true)
|
||||||
{
|
{
|
||||||
K_UpdateAllPlayerPositions();
|
K_UpdateAllPlayerPositions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
P_MapEnd();
|
P_MapEnd();
|
||||||
|
|
||||||
// do things to change the game state
|
// do things to change the game state
|
||||||
|
|
|
||||||
15
src/p_user.c
15
src/p_user.c
|
|
@ -3328,19 +3328,10 @@ boolean P_SpectatorJoinGame(player_t *player)
|
||||||
player->enteredGame = true;
|
player->enteredGame = true;
|
||||||
|
|
||||||
// Reset away view (some code referenced from Got_Teamchange)
|
// Reset away view (some code referenced from Got_Teamchange)
|
||||||
|
if (G_IsPartyLocal(player - players))
|
||||||
{
|
{
|
||||||
UINT8 i = 0;
|
LUA_HookViewpointSwitch(player, player, true);
|
||||||
const UINT8 *localplayertable = G_PartyArray(consoleplayer);
|
displayplayers[G_PartyPosition(player - players)] = (player-players);
|
||||||
|
|
||||||
for (i = 0; i < r_splitscreen; i++)
|
|
||||||
{
|
|
||||||
if (localplayertable[i] == (player-players))
|
|
||||||
{
|
|
||||||
LUA_HookViewpointSwitch(player, player, true);
|
|
||||||
displayplayers[i] = (player-players);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// a surprise tool that will help us later...
|
// a surprise tool that will help us later...
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue