mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-16 01:31:30 +00:00
Bunch of fixes for dying in MP special stages.
* Don't allow the stage to be reloaded in G_DoReborn. * If you do ANY spawn after the very beginning moment, you're forced to be a spectator. * Have the "%d player%s remaining" Co-op exiting count visible at the same time as spectator controls.
This commit is contained in:
parent
7177d76cfd
commit
0986195d21
4 changed files with 66 additions and 66 deletions
|
@ -2606,7 +2606,7 @@ void G_DoReborn(INT32 playernum)
|
|||
|
||||
if (countdowntimeup || (!(netgame || multiplayer) && gametype == GT_COOP))
|
||||
resetlevel = true;
|
||||
else if (gametype == GT_COOP && (netgame || multiplayer))
|
||||
else if (gametype == GT_COOP && (netgame || multiplayer) && !G_IsSpecialStage(gamemap))
|
||||
{
|
||||
boolean notgameover = true;
|
||||
|
||||
|
|
|
@ -10395,7 +10395,7 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
p->spectator = p->outofcoop =
|
||||
(((multiplayer || netgame) && gametype == GT_COOP) // only question status in coop
|
||||
&& ((leveltime > 0
|
||||
&& ((G_IsSpecialStage(gamemap) && (maptol & TOL_NIGHTS)) // late join special stage
|
||||
&& ((G_IsSpecialStage(gamemap)) // late join special stage
|
||||
|| (cv_coopstarposts.value == 2 && (p->jointime < 1 || p->outofcoop)))) // late join or die in new coop
|
||||
|| (!P_GetLives(p) && p->lives <= 0))); // game over and can't redistribute lives
|
||||
}
|
||||
|
|
|
@ -9173,7 +9173,7 @@ static void P_DeathThink(player_t *player)
|
|||
// Force respawn if idle for more than 30 seconds in shooter modes.
|
||||
if (player->deadtimer > 30*TICRATE && !G_PlatformGametype())
|
||||
player->playerstate = PST_REBORN;
|
||||
else if ((player->lives > 0 || j != MAXPLAYERS) && !(G_IsSpecialStage(gamemap))) // Don't allow "click to respawn" in special stages!
|
||||
else if ((player->lives > 0 || j != MAXPLAYERS) && !(!(netgame || multiplayer) && G_IsSpecialStage(gamemap))) // Don't allow "click to respawn" in special stages!
|
||||
{
|
||||
if (gametype == GT_COOP && (netgame || multiplayer) && cv_coopstarposts.value == 2)
|
||||
{
|
||||
|
|
126
src/st_stuff.c
126
src/st_stuff.c
|
@ -2039,7 +2039,68 @@ static void ST_drawTextHUD(void)
|
|||
textHUDdraw(va("Lap:""\x82 %u/%d", stplyr->laps+1, cv_numlaps.value))
|
||||
}
|
||||
|
||||
if (!stplyr->spectator && stplyr->exiting && cv_playersforexit.value && gametype == GT_COOP)
|
||||
if (gametype != GT_COOP && (stplyr->exiting || (G_GametypeUsesLives() && stplyr->lives <= 0 && countdown != 1)))
|
||||
{
|
||||
if (!splitscreen && !donef12)
|
||||
{
|
||||
textHUDdraw(M_GetText("\x82""VIEWPOINT:""\x80 Switch view"))
|
||||
donef12 = true;
|
||||
}
|
||||
}
|
||||
else if (!G_PlatformGametype() && stplyr->playerstate == PST_DEAD && stplyr->lives) // Death overrides spectator text.
|
||||
{
|
||||
INT32 respawntime = cv_respawntime.value - stplyr->deadtimer/TICRATE;
|
||||
|
||||
if (respawntime > 0 && !stplyr->spectator)
|
||||
textHUDdraw(va(M_GetText("Respawn in %d..."), respawntime))
|
||||
else
|
||||
textHUDdraw(M_GetText("\x82""JUMP:""\x80 Respawn"))
|
||||
}
|
||||
else if (stplyr->spectator && (gametype != GT_COOP || stplyr->playerstate == PST_LIVE))
|
||||
{
|
||||
if (!splitscreen && !donef12)
|
||||
{
|
||||
textHUDdraw(M_GetText("\x82""VIEWPOINT:""\x80 Switch view"))
|
||||
donef12 = true;
|
||||
}
|
||||
|
||||
textHUDdraw(M_GetText("\x82""JUMP:""\x80 Rise"))
|
||||
textHUDdraw(M_GetText("\x82""SPIN:""\x80 Lower"))
|
||||
|
||||
if (G_IsSpecialStage(gamemap))
|
||||
textHUDdraw(M_GetText("\x82""Wait for the stage to end..."))
|
||||
else if (gametype == GT_COOP)
|
||||
{
|
||||
if (stplyr->lives <= 0
|
||||
&& cv_cooplives.value == 2
|
||||
&& (netgame || multiplayer))
|
||||
{
|
||||
INT32 i;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i])
|
||||
continue;
|
||||
|
||||
if (&players[i] == stplyr)
|
||||
continue;
|
||||
|
||||
if (players[i].lives > 1)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i != MAXPLAYERS)
|
||||
textHUDdraw(M_GetText("You'll steal a life on respawn..."))
|
||||
else
|
||||
textHUDdraw(M_GetText("Wait to respawn..."))
|
||||
}
|
||||
else
|
||||
textHUDdraw(M_GetText("Wait to respawn..."))
|
||||
}
|
||||
else
|
||||
textHUDdraw(M_GetText("\x82""FIRE:""\x80 Enter game"))
|
||||
}
|
||||
|
||||
if (gametype == GT_COOP && (!stplyr->spectator || (!(maptol & TOL_NIGHTS) && G_IsSpecialStage(gamemap))) && stplyr->exiting && cv_playersforexit.value)
|
||||
{
|
||||
INT32 i, total = 0, exiting = 0;
|
||||
|
||||
|
@ -2074,68 +2135,7 @@ static void ST_drawTextHUD(void)
|
|||
textHUDdraw(va(M_GetText("%d player%s remaining"), total, ((total == 1) ? "" : "s")))
|
||||
}
|
||||
}
|
||||
else if (gametype != GT_COOP && (stplyr->exiting || (G_GametypeUsesLives() && stplyr->lives <= 0 && countdown != 1)))
|
||||
{
|
||||
if (!splitscreen && !donef12)
|
||||
{
|
||||
textHUDdraw(M_GetText("\x82""VIEWPOINT:""\x80 Switch view"))
|
||||
donef12 = true;
|
||||
}
|
||||
}
|
||||
else if (!G_PlatformGametype() && stplyr->playerstate == PST_DEAD && stplyr->lives) //Death overrides spectator text.
|
||||
{
|
||||
INT32 respawntime = cv_respawntime.value - stplyr->deadtimer/TICRATE;
|
||||
|
||||
if (respawntime > 0 && !stplyr->spectator)
|
||||
textHUDdraw(va(M_GetText("Respawn in %d..."), respawntime))
|
||||
else
|
||||
textHUDdraw(M_GetText("\x82""JUMP:""\x80 Respawn"))
|
||||
}
|
||||
else if (stplyr->spectator && (gametype != GT_COOP || stplyr->playerstate == PST_LIVE))
|
||||
{
|
||||
if (!splitscreen && !donef12)
|
||||
{
|
||||
textHUDdraw(M_GetText("\x82""VIEWPOINT:""\x80 Switch view"))
|
||||
donef12 = true;
|
||||
}
|
||||
|
||||
textHUDdraw(M_GetText("\x82""JUMP:""\x80 Rise"))
|
||||
textHUDdraw(M_GetText("\x82""SPIN:""\x80 Lower"))
|
||||
|
||||
if (G_IsSpecialStage(gamemap) && (maptol & TOL_NIGHTS))
|
||||
textHUDdraw(M_GetText("\x82""Wait for the stage to end..."))
|
||||
else if (gametype == GT_COOP)
|
||||
{
|
||||
if (stplyr->lives <= 0
|
||||
&& cv_cooplives.value == 2
|
||||
&& (netgame || multiplayer))
|
||||
{
|
||||
INT32 i;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i])
|
||||
continue;
|
||||
|
||||
if (&players[i] == stplyr)
|
||||
continue;
|
||||
|
||||
if (players[i].lives > 1)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i != MAXPLAYERS)
|
||||
textHUDdraw(M_GetText("You'll steal a life on respawn..."))
|
||||
else
|
||||
textHUDdraw(M_GetText("Wait to respawn..."))
|
||||
}
|
||||
else
|
||||
textHUDdraw(M_GetText("Wait to respawn..."))
|
||||
}
|
||||
else
|
||||
textHUDdraw(M_GetText("\x82""FIRE:""\x80 Enter game"))
|
||||
}
|
||||
|
||||
if ((gametype == GT_TAG || gametype == GT_HIDEANDSEEK) && (!stplyr->spectator))
|
||||
else if ((gametype == GT_TAG || gametype == GT_HIDEANDSEEK) && (!stplyr->spectator))
|
||||
{
|
||||
if (leveltime < hidetime * TICRATE)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue