mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-18 07:22:28 +00:00
* Renamed "steallives" to "lifedistribution".
* Gave lifedistribution a "Sharing" option to go along with its previous individual and stealing options. * Made the game over graphic and music only happen if everyone's out of lives if you're sharing or stealing lives. * Fixed a bug where game over wouldn't come to fruition because it kept on happening each tic of the countdown2. * Made spectator stuff display in Co-op splitscreen.
This commit is contained in:
parent
25a1ffe02a
commit
f3cad19184
8 changed files with 135 additions and 85 deletions
|
@ -85,7 +85,7 @@ static void NetTimeout_OnChange(void);
|
||||||
static void JoinTimeout_OnChange(void);
|
static void JoinTimeout_OnChange(void);
|
||||||
|
|
||||||
static void PlayStyle_OnChange(void);
|
static void PlayStyle_OnChange(void);
|
||||||
static void StealLives_OnChange(void);
|
static void LifeDistribution_OnChange(void);
|
||||||
|
|
||||||
static void Ringslinger_OnChange(void);
|
static void Ringslinger_OnChange(void);
|
||||||
static void Gravity_OnChange(void);
|
static void Gravity_OnChange(void);
|
||||||
|
@ -355,7 +355,8 @@ consvar_t cv_inttime = {"inttime", "10", CV_NETVAR, inttime_cons_t, NULL, 0, NUL
|
||||||
static CV_PossibleValue_t playstyle_cons_t[] = {{0, "Individual"}, {1, "Sharing"}, {2, "Together"}, {0, NULL}};
|
static CV_PossibleValue_t playstyle_cons_t[] = {{0, "Individual"}, {1, "Sharing"}, {2, "Together"}, {0, NULL}};
|
||||||
consvar_t cv_playstyle = {"playstyle", "Together", CV_NETVAR|CV_CALL|CV_CHEAT, playstyle_cons_t, PlayStyle_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_playstyle = {"playstyle", "Together", CV_NETVAR|CV_CALL|CV_CHEAT, playstyle_cons_t, PlayStyle_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
consvar_t cv_steallives = {"steallives", "Yes", CV_NETVAR|CV_CALL, CV_YesNo, StealLives_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
static CV_PossibleValue_t lifedistribution_cons_t[] = {{0, "Individual"}, {1, "Stealing"}, {2, "Sharing"}, {0, NULL}};
|
||||||
|
consvar_t cv_lifedistribution = {"lifedistribution", "Stealing", CV_NETVAR|CV_CALL, lifedistribution_cons_t, LifeDistribution_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
static CV_PossibleValue_t advancemap_cons_t[] = {{0, "Off"}, {1, "Next"}, {2, "Random"}, {0, NULL}};
|
static CV_PossibleValue_t advancemap_cons_t[] = {{0, "Off"}, {1, "Next"}, {2, "Random"}, {0, NULL}};
|
||||||
consvar_t cv_advancemap = {"advancemap", "Next", CV_NETVAR, advancemap_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_advancemap = {"advancemap", "Next", CV_NETVAR, advancemap_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
@ -516,7 +517,7 @@ void D_RegisterServerCommands(void)
|
||||||
CV_RegisterVar(&cv_downloading);
|
CV_RegisterVar(&cv_downloading);
|
||||||
|
|
||||||
CV_RegisterVar(&cv_playstyle);
|
CV_RegisterVar(&cv_playstyle);
|
||||||
CV_RegisterVar(&cv_steallives);
|
CV_RegisterVar(&cv_lifedistribution);
|
||||||
|
|
||||||
CV_RegisterVar(&cv_specialrings);
|
CV_RegisterVar(&cv_specialrings);
|
||||||
CV_RegisterVar(&cv_powerstones);
|
CV_RegisterVar(&cv_powerstones);
|
||||||
|
@ -3407,11 +3408,11 @@ static void JoinTimeout_OnChange(void)
|
||||||
|
|
||||||
static void PlayStyle_OnChange(void)
|
static void PlayStyle_OnChange(void)
|
||||||
{
|
{
|
||||||
if (!(netgame || multiplayer) || gametype != GT_COOP || G_IsSpecialStage(gamemap))
|
|
||||||
return;
|
|
||||||
if (cv_playstyle.value != 2)
|
|
||||||
{
|
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
|
||||||
|
if (!(netgame || multiplayer) || gametype != GT_COOP || cv_playstyle.value == 2 || G_IsSpecialStage(gamemap))
|
||||||
|
return;
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
{
|
{
|
||||||
if (!playeringame[i])
|
if (!playeringame[i])
|
||||||
|
@ -3420,19 +3421,18 @@ static void PlayStyle_OnChange(void)
|
||||||
if (!players[i].spectator)
|
if (!players[i].spectator)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (players[i].lives <= 0 && !cv_steallives.value)
|
if (players[i].lives <= 0 && !cv_lifedistribution.value)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
players[i].playerstate = PST_REBORN;
|
P_SpectatorJoinGame(&players[i]);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StealLives_OnChange(void)
|
static void LifeDistribution_OnChange(void)
|
||||||
{
|
{
|
||||||
if (!(netgame || multiplayer) || gametype != GT_COOP)
|
if (!(netgame || multiplayer) || gametype != GT_COOP || cv_playstyle.value == 2)
|
||||||
return;
|
return;
|
||||||
if (cv_playstyle.value != 2 && cv_steallives.value)
|
if (cv_lifedistribution.value)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -3446,7 +3446,7 @@ static void StealLives_OnChange(void)
|
||||||
if (players[i].lives > 0)
|
if (players[i].lives > 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
players[i].playerstate = PST_REBORN;
|
P_SpectatorJoinGame(&players[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,7 +89,7 @@ extern consvar_t cv_recycler;
|
||||||
|
|
||||||
extern consvar_t cv_itemfinder;
|
extern consvar_t cv_itemfinder;
|
||||||
|
|
||||||
extern consvar_t cv_inttime, cv_playstyle, cv_steallives, cv_advancemap, cv_playersforexit;
|
extern consvar_t cv_inttime, cv_playstyle, cv_lifedistribution, cv_advancemap, cv_playersforexit;
|
||||||
extern consvar_t cv_overtime;
|
extern consvar_t cv_overtime;
|
||||||
extern consvar_t cv_startinglives;
|
extern consvar_t cv_startinglives;
|
||||||
|
|
||||||
|
|
16
src/g_game.c
16
src/g_game.c
|
@ -2592,10 +2592,6 @@ void G_DoReborn(INT32 playernum)
|
||||||
// respawn at the start
|
// respawn at the start
|
||||||
mobj_t *oldmo = NULL;
|
mobj_t *oldmo = NULL;
|
||||||
|
|
||||||
// Return to level music
|
|
||||||
if (player->lives <= 0)
|
|
||||||
P_RestoreMultiMusic(player);
|
|
||||||
|
|
||||||
if (gametype == GT_COOP && (netgame || multiplayer))
|
if (gametype == GT_COOP && (netgame || multiplayer))
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
@ -2606,18 +2602,18 @@ void G_DoReborn(INT32 playernum)
|
||||||
{
|
{
|
||||||
if (!playeringame[i])
|
if (!playeringame[i])
|
||||||
continue;
|
continue;
|
||||||
if (players[i].exiting || players[i].lives)
|
if (players[i].exiting || players[i].lives > 0)
|
||||||
break;
|
break;
|
||||||
if (players[i].playerstate == PST_DEAD && players[i].deadtimer < deadtimercheck)
|
if (players[i].playerstate == PST_DEAD && players[i].deadtimer < deadtimercheck)
|
||||||
deadtimercheck = players[i].deadtimer;
|
deadtimercheck = players[i].deadtimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == MAXPLAYERS && deadtimercheck >= 8*TICRATE)
|
if (!countdown2 && i == MAXPLAYERS && deadtimercheck >= 8*TICRATE)
|
||||||
{
|
{
|
||||||
// They're dead, Jim.
|
// They're dead, Jim.
|
||||||
//nextmapoverride = spstage_start;
|
//nextmapoverride = spstage_start;
|
||||||
nextmapoverride = gamemap;
|
nextmapoverride = gamemap;
|
||||||
countdown2 = 1*TICRATE;
|
countdown2 = TICRATE;
|
||||||
skipstats = true;
|
skipstats = true;
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -2697,6 +2693,12 @@ void G_DoReborn(INT32 playernum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Not resetting map, so return to level music
|
||||||
|
if (!countdown2
|
||||||
|
&& player->lives <= 0
|
||||||
|
&& !cv_lifedistribution.value) // not allowed for life steal because no way to come back from zero group lives without addons, which should call this anyways
|
||||||
|
P_RestoreMultiMusic(player);
|
||||||
|
|
||||||
if (player->starposttime)
|
if (player->starposttime)
|
||||||
starpost = true;
|
starpost = true;
|
||||||
|
|
||||||
|
|
|
@ -1391,7 +1391,7 @@ static menuitem_t OP_ServerOptionsMenu[] =
|
||||||
{IT_HEADER, NULL, "Cooperative", NULL, 90},
|
{IT_HEADER, NULL, "Cooperative", NULL, 90},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Players required for exit", &cv_playersforexit, 96},
|
{IT_STRING | IT_CVAR, NULL, "Players required for exit", &cv_playersforexit, 96},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Play style", &cv_playstyle, 101},
|
{IT_STRING | IT_CVAR, NULL, "Play style", &cv_playstyle, 101},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Steal lives on game over", &cv_steallives, 106},
|
{IT_STRING | IT_CVAR, NULL, "Life distribution", &cv_lifedistribution, 106},
|
||||||
|
|
||||||
{IT_HEADER, NULL, "Race, Competition", NULL, 115},
|
{IT_HEADER, NULL, "Race, Competition", NULL, 115},
|
||||||
{IT_STRING | IT_CVAR, NULL, "Level completion countdown", &cv_countdowntime, 121},
|
{IT_STRING | IT_CVAR, NULL, "Level completion countdown", &cv_countdowntime, 121},
|
||||||
|
|
|
@ -1309,7 +1309,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
players[i].starpostangle = special->angle;
|
players[i].starpostangle = special->angle;
|
||||||
players[i].starpostnum = special->health;
|
players[i].starpostnum = special->health;
|
||||||
|
|
||||||
if (cv_playstyle.value == 2 && (P_GetLives(&players[i]) || players[i].lives > 0) && (players[i].playerstate == PST_DEAD || players[i].spectator))
|
if (cv_playstyle.value == 2 && (players[i].playerstate == PST_DEAD || players[i].spectator) && P_GetLives(&players[i]))
|
||||||
P_SpectatorJoinGame(&players[i]); //players[i].playerstate = PST_REBORN;
|
P_SpectatorJoinGame(&players[i]); //players[i].playerstate = PST_REBORN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2253,7 +2253,25 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
||||||
|
|
||||||
if (target->player->lives <= 0) // Tails 03-14-2000
|
if (target->player->lives <= 0) // Tails 03-14-2000
|
||||||
{
|
{
|
||||||
if (P_IsLocalPlayer(target->player)/* && target->player == &players[consoleplayer] */)
|
boolean gameovermus = false;
|
||||||
|
if ((netgame || multiplayer) && (gametype == GT_COOP) && cv_lifedistribution.value)
|
||||||
|
{
|
||||||
|
INT32 i;
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (!playeringame[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (players[i].lives > 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (i == MAXPLAYERS)
|
||||||
|
gameovermus = true;
|
||||||
|
}
|
||||||
|
else if (P_IsLocalPlayer(target->player))
|
||||||
|
gameovermus = true;
|
||||||
|
|
||||||
|
if (gameovermus)
|
||||||
{
|
{
|
||||||
S_StopMusic(); // Stop the Music! Tails 03-14-2000
|
S_StopMusic(); // Stop the Music! Tails 03-14-2000
|
||||||
S_ChangeMusicInternal("_gover", false); // Yousa dead now, Okieday? Tails 03-14-2000
|
S_ChangeMusicInternal("_gover", false); // Yousa dead now, Okieday? Tails 03-14-2000
|
||||||
|
|
|
@ -9084,10 +9084,10 @@ void P_SpawnPlayer(INT32 playernum)
|
||||||
// spawn as spectator determination
|
// spawn as spectator determination
|
||||||
if (!G_GametypeHasSpectators())
|
if (!G_GametypeHasSpectators())
|
||||||
{
|
{
|
||||||
if ( ((multiplayer || netgame) && gametype == GT_COOP && leveltime > 0)
|
if ( ( (multiplayer || netgame) && gametype == GT_COOP && leveltime > 0) // only question status in coop
|
||||||
&& ((G_IsSpecialStage(gamemap) && useNightsSS) // late join special stage
|
&& ( (G_IsSpecialStage(gamemap) && useNightsSS) // late join special stage
|
||||||
|| (cv_playstyle.value == 2 && (p->jointime < 1 || p->spectator)) // late join or die in new coop
|
|| (cv_playstyle.value == 2 && (p->jointime < 1 || p->spectator) ) // late join or die in new coop
|
||||||
|| (p->lives <= 0 && (!cv_steallives.value || !P_GetLives(p)))) ) // game over
|
|| ((!cv_lifedistribution.value || !P_GetLives(p)) && p->lives <= 0))) // game over and can't redistribute lives
|
||||||
p->spectator = true;
|
p->spectator = true;
|
||||||
else
|
else
|
||||||
p->spectator = false;
|
p->spectator = false;
|
||||||
|
|
24
src/p_user.c
24
src/p_user.c
|
@ -958,7 +958,7 @@ void P_GivePlayerLives(player_t *player, INT32 numlives)
|
||||||
|
|
||||||
void P_GiveCoopLives(player_t *player, INT32 numlives, boolean sound)
|
void P_GiveCoopLives(player_t *player, INT32 numlives, boolean sound)
|
||||||
{
|
{
|
||||||
if (!((netgame || multiplayer) && gametype == GT_COOP && cv_playstyle.value))
|
if (!((netgame || multiplayer) && gametype == GT_COOP))
|
||||||
{
|
{
|
||||||
P_GivePlayerLives(player, numlives);
|
P_GivePlayerLives(player, numlives);
|
||||||
if (sound)
|
if (sound)
|
||||||
|
@ -8109,12 +8109,12 @@ void P_FindEmerald(void)
|
||||||
boolean P_GetLives(player_t *player)
|
boolean P_GetLives(player_t *player)
|
||||||
{
|
{
|
||||||
INT32 i, maxlivesplayer = -1, livescheck = 1;
|
INT32 i, maxlivesplayer = -1, livescheck = 1;
|
||||||
if (!(cv_steallives.value
|
if (!(cv_lifedistribution.value
|
||||||
&& (gametype == GT_COOP)
|
&& (gametype == GT_COOP)
|
||||||
&& (netgame || multiplayer)))
|
&& (netgame || multiplayer)))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (player->lives > 0)
|
if (cv_lifedistribution.value == 1 && player->lives > 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -8128,17 +8128,17 @@ boolean P_GetLives(player_t *player)
|
||||||
livescheck = players[i].lives;
|
livescheck = players[i].lives;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (maxlivesplayer != -1)
|
if (maxlivesplayer != -1 && &players[maxlivesplayer] != player)
|
||||||
{
|
{
|
||||||
if (players[maxlivesplayer].mo)
|
if (cv_lifedistribution.value == 1 && P_IsLocalPlayer(&players[maxlivesplayer]))
|
||||||
S_StartSound(players[maxlivesplayer].mo, sfx_jshard); // placeholder
|
S_StartSound(NULL, sfx_jshard); // placeholder
|
||||||
players[maxlivesplayer].lives--;
|
players[maxlivesplayer].lives--;
|
||||||
player->lives++;
|
player->lives++;
|
||||||
if (player->lives < 1)
|
if (player->lives < 1)
|
||||||
player->lives = 1;
|
player->lives = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return (player->lives > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -8219,7 +8219,7 @@ static void P_DeathThink(player_t *player)
|
||||||
G_UseContinue(); // Even if we don't have one this handles ending the game
|
G_UseContinue(); // Even if we don't have one this handles ending the game
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cv_steallives.value
|
if (cv_lifedistribution.value
|
||||||
&& (gametype == GT_COOP)
|
&& (gametype == GT_COOP)
|
||||||
&& (netgame || multiplayer)
|
&& (netgame || multiplayer)
|
||||||
&& (player->lives <= 0))
|
&& (player->lives <= 0))
|
||||||
|
@ -8330,7 +8330,7 @@ static void P_DeathThink(player_t *player)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return to level music
|
// Return to level music
|
||||||
if (player->lives <= 0 && player->deadtimer == gameovertics)
|
if (gametype != GT_COOP && player->lives <= 0 && player->deadtimer == gameovertics)
|
||||||
P_RestoreMultiMusic(player);
|
P_RestoreMultiMusic(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9436,11 +9436,7 @@ void P_PlayerThink(player_t *player)
|
||||||
player->realtime = leveltime;
|
player->realtime = leveltime;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((netgame || splitscreen) && player->spectator && cmd->buttons & BT_ATTACK && !player->powers[pw_flashing]
|
if (player->spectator && cmd->buttons & BT_ATTACK && !player->powers[pw_flashing] && G_GametypeHasSpectators())
|
||||||
&& (G_GametypeHasSpectators()
|
|
||||||
|| !((G_IsSpecialStage(gamemap) && useNightsSS)
|
|
||||||
|| (gametype == GT_COOP && cv_playstyle.value == 2)
|
|
||||||
)))
|
|
||||||
{
|
{
|
||||||
if (P_SpectatorJoinGame(player))
|
if (P_SpectatorJoinGame(player))
|
||||||
return; // player->mo was removed.
|
return; // player->mo was removed.
|
||||||
|
|
|
@ -728,13 +728,31 @@ static void ST_drawLives(void)
|
||||||
// x
|
// x
|
||||||
V_DrawScaledPatch(hudinfo[HUD_LIVESX].x, hudinfo[HUD_LIVESX].y + (v_splitflag ? -4 : 0),
|
V_DrawScaledPatch(hudinfo[HUD_LIVESX].x, hudinfo[HUD_LIVESX].y + (v_splitflag ? -4 : 0),
|
||||||
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag, stlivex);
|
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag, stlivex);
|
||||||
// lives
|
|
||||||
V_DrawRightAlignedString(hudinfo[HUD_LIVESNUM].x, hudinfo[HUD_LIVESNUM].y + (v_splitflag ? -4 : 0),
|
|
||||||
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag, va("%d",stplyr->lives));
|
|
||||||
|
|
||||||
if (cv_steallives.value
|
// lives number
|
||||||
&& (gametype == GT_COOP)
|
if ((netgame || multiplayer) && gametype == GT_COOP)
|
||||||
&& (netgame || multiplayer))
|
{
|
||||||
|
switch (cv_lifedistribution.value)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
INT32 i, sum = 0;
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (!playeringame[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (players[i].lives < 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
sum += (players[i].lives);
|
||||||
|
}
|
||||||
|
V_DrawRightAlignedString(hudinfo[HUD_LIVESNUM].x, hudinfo[HUD_LIVESNUM].y + (v_splitflag ? -4 : 0),
|
||||||
|
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag,
|
||||||
|
va("%d",(sum)));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
{
|
{
|
||||||
INT32 i, sum = 0;
|
INT32 i, sum = 0;
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -753,6 +771,16 @@ static void ST_drawLives(void)
|
||||||
V_DrawString(hudinfo[HUD_LIVESNUM].x, hudinfo[HUD_LIVESNUM].y + (v_splitflag ? -4 : 0),
|
V_DrawString(hudinfo[HUD_LIVESNUM].x, hudinfo[HUD_LIVESNUM].y + (v_splitflag ? -4 : 0),
|
||||||
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANSHALF|v_splitflag, va("/%d",sum));
|
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANSHALF|v_splitflag, va("/%d",sum));
|
||||||
}
|
}
|
||||||
|
// intentional fallthrough
|
||||||
|
default:
|
||||||
|
// don't return so the SP one can be drawn below
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
V_DrawRightAlignedString(hudinfo[HUD_LIVESNUM].x, hudinfo[HUD_LIVESNUM].y + (v_splitflag ? -4 : 0),
|
||||||
|
V_SNAPTOLEFT|V_SNAPTOBOTTOM|V_HUDTRANS|v_splitflag,
|
||||||
|
va("%d",stplyr->lives));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ST_drawLevelTitle(void)
|
static void ST_drawLevelTitle(void)
|
||||||
|
@ -1847,11 +1875,8 @@ static void ST_overlayDrawer(void)
|
||||||
else
|
else
|
||||||
p = sboover;
|
p = sboover;
|
||||||
|
|
||||||
V_DrawScaledPatch((BASEVIDWIDTH - SHORT(p->width))/2, STRINGY(BASEVIDHEIGHT/2 - (SHORT(p->height)/2)), 0, p);
|
if (cv_lifedistribution.value
|
||||||
|
&& gametype == GT_COOP)
|
||||||
if (cv_steallives.value
|
|
||||||
&& (gametype == GT_COOP)
|
|
||||||
&& (netgame || multiplayer))
|
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -1862,15 +1887,18 @@ static void ST_overlayDrawer(void)
|
||||||
if (&players[i] == stplyr)
|
if (&players[i] == stplyr)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (players[i].lives > 1)
|
if (players[i].lives > 0)
|
||||||
|
{
|
||||||
|
p = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != MAXPLAYERS)
|
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(BASEVIDHEIGHT/2 + (SHORT(p->height)/2)) + 14, 0, M_GetText("You'll steal a life on respawn."));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (p)
|
||||||
|
V_DrawScaledPatch((BASEVIDWIDTH - SHORT(p->width))/2, STRINGY(BASEVIDHEIGHT/2 - (SHORT(p->height)/2)), (stplyr->spectator ? V_HUDTRANSHALF : V_HUDTRANS), p);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!hu_showscores) // hide the following if TAB is held
|
if (!hu_showscores) // hide the following if TAB is held
|
||||||
{
|
{
|
||||||
|
@ -1953,15 +1981,16 @@ static void ST_overlayDrawer(void)
|
||||||
)
|
)
|
||||||
ST_drawLevelTitle();
|
ST_drawLevelTitle();
|
||||||
|
|
||||||
if (!hu_showscores && !splitscreen && netgame && displayplayer == consoleplayer)
|
if (!hu_showscores && (netgame || multiplayer) && displayplayer == consoleplayer)
|
||||||
{
|
{
|
||||||
if (G_GametypeUsesLives() && stplyr->lives <= 0 && countdown != 1)
|
if (!splitscreen && G_GametypeUsesLives() && stplyr->lives <= 0 && countdown != 1)
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), 0, M_GetText("Press F12 to watch another player."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, 132, 0, M_GetText("Press F12 to watch another player."));
|
||||||
else if (gametype == GT_HIDEANDSEEK &&
|
else if (gametype == GT_HIDEANDSEEK &&
|
||||||
(!stplyr->spectator && !(stplyr->pflags & PF_TAGIT)) && (leveltime > hidetime * TICRATE))
|
(!stplyr->spectator && !(stplyr->pflags & PF_TAGIT)) && (leveltime > hidetime * TICRATE))
|
||||||
{
|
{
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(116), 0, M_GetText("You cannot move while hiding."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(116), 0, M_GetText("You cannot move while hiding."));
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), 0, M_GetText("Press F12 to watch another player."));
|
if (!splitscreen)
|
||||||
|
V_DrawCenteredString(BASEVIDWIDTH/2, 132, 0, M_GetText("Press F12 to watch another player."));
|
||||||
}
|
}
|
||||||
else if (!G_PlatformGametype() && stplyr->playerstate == PST_DEAD && stplyr->lives) //Death overrides spectator text.
|
else if (!G_PlatformGametype() && stplyr->playerstate == PST_DEAD && stplyr->lives) //Death overrides spectator text.
|
||||||
{
|
{
|
||||||
|
@ -1971,20 +2000,20 @@ static void ST_overlayDrawer(void)
|
||||||
else
|
else
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("Press Jump to respawn."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("Press Jump to respawn."));
|
||||||
}
|
}
|
||||||
else if (stplyr->spectator
|
else if (stplyr->spectator && (gametype != GT_COOP || stplyr->playerstate == PST_LIVE)
|
||||||
#ifdef HAVE_BLUA
|
#ifdef HAVE_BLUA
|
||||||
&& LUA_HudEnabled(hud_textspectator)
|
&& LUA_HudEnabled(hud_textspectator)
|
||||||
#endif
|
#endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(60), V_HUDTRANSHALF, M_GetText("You are a spectator."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(60)+(splitscreen ? 4 : 0), V_HUDTRANSHALF, M_GetText("You are a spectator."));
|
||||||
if (G_GametypeHasTeams())
|
if (G_GametypeHasTeams())
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("Press Fire to be assigned to a team."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("Press Fire to be assigned to a team."));
|
||||||
else if (G_IsSpecialStage(gamemap) && useNightsSS)
|
else if (G_IsSpecialStage(gamemap) && useNightsSS)
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("You cannot join the game until the stage has ended."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("You cannot join the game until the stage has ended."));
|
||||||
else if (gametype == GT_COOP)
|
else if (gametype == GT_COOP)
|
||||||
{
|
{
|
||||||
if (cv_steallives.value
|
if (cv_lifedistribution.value == 1
|
||||||
&& (netgame || multiplayer))
|
&& (netgame || multiplayer))
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
|
@ -2001,13 +2030,18 @@ static void ST_overlayDrawer(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i != MAXPLAYERS)
|
if (i != MAXPLAYERS)
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("You'll steal a life on respawn."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132)-(splitscreen ? 8 : 0), V_HUDTRANSHALF, M_GetText("You'll steal a life on respawn."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!gametype == GT_COOP)
|
else if (!gametype == GT_COOP)
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("Press Fire to enter the game."));
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(132), V_HUDTRANSHALF, M_GetText("Press Fire to enter the game."));
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(148), V_HUDTRANSHALF, M_GetText("Press F12 to watch another player."));
|
if (!splitscreen)
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(164), V_HUDTRANSHALF, M_GetText("Press Jump to float and Spin to sink."));
|
{
|
||||||
|
V_DrawCenteredString(BASEVIDWIDTH/2, 148, V_HUDTRANSHALF, M_GetText("Press F12 to watch another player."));
|
||||||
|
V_DrawCenteredString(BASEVIDWIDTH/2, 164, V_HUDTRANSHALF, M_GetText("Press Jump to float and Spin to sink."));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
V_DrawCenteredString(BASEVIDWIDTH/2, STRINGY(144), V_HUDTRANSHALF, M_GetText("Press Jump to float and Spin to sink."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue