mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-18 07:22:03 +00:00
A bunch of little things.
* Fix both cv_timelimit and cv_pointlimit as "hidden options" for people to play with if they know about them via the console. * Show GAME SPEED on the tab screen. * Fix Invincibility and Grow's music changes being broken. (I didn't test them properly when making them P_RestoreMusic calls, sorry.) * Stop showing the First Person Kart view in spectator mode, per Sal's request.
This commit is contained in:
parent
2b7298e959
commit
a036e9cdc8
5 changed files with 74 additions and 62 deletions
|
@ -1121,16 +1121,6 @@ static void HU_DrawCEcho(void)
|
|||
--cechotimer;
|
||||
}
|
||||
|
||||
static void HU_drawGametype(void)
|
||||
{
|
||||
INT32 flags;
|
||||
if (gametype == GT_MATCH)
|
||||
flags = V_REDMAP;
|
||||
else
|
||||
flags = V_SKYMAP;
|
||||
V_DrawString(4, 188, flags, gametype_cons_t[gametype].strvalue);
|
||||
}
|
||||
|
||||
//
|
||||
// demo info stuff
|
||||
//
|
||||
|
@ -1315,9 +1305,9 @@ void HU_Erase(void)
|
|||
//
|
||||
// HU_DrawTabRankings
|
||||
//
|
||||
void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer)
|
||||
void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol)
|
||||
{
|
||||
INT32 i, j, hilicol, rightoffset = 240;
|
||||
INT32 i, j, rightoffset = 240;
|
||||
const UINT8 *colormap;
|
||||
|
||||
//this function is designed for 9 or less score lines only
|
||||
|
@ -1331,13 +1321,6 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I
|
|||
rightoffset = 156;
|
||||
}
|
||||
|
||||
if (cons_menuhighlight.value)
|
||||
hilicol = cons_menuhighlight.value;
|
||||
else if (modeattacking)
|
||||
hilicol = V_ORANGEMAP;
|
||||
else
|
||||
hilicol = ((gametype == GT_RACE) ? V_SKYMAP : V_REDMAP);
|
||||
|
||||
for (i = 0; i < scorelines; i++)
|
||||
{
|
||||
if (players[tab[i].num].spectator || !players[tab[i].num].mo)
|
||||
|
@ -1664,12 +1647,22 @@ static void HU_DrawRankings(void)
|
|||
{
|
||||
patch_t *p;
|
||||
playersort_t tab[MAXPLAYERS];
|
||||
INT32 i, j, scorelines, numplayersingame = 0, lowestposition = 2;
|
||||
INT32 i, j, scorelines, hilicol, numplayersingame = 0, lowestposition = 2;
|
||||
boolean completed[MAXPLAYERS];
|
||||
UINT32 whiteplayer = MAXPLAYERS;
|
||||
|
||||
if (cons_menuhighlight.value)
|
||||
hilicol = cons_menuhighlight.value;
|
||||
else if (modeattacking)
|
||||
hilicol = V_ORANGEMAP;
|
||||
else
|
||||
hilicol = ((gametype == GT_RACE) ? V_SKYMAP : V_REDMAP);
|
||||
|
||||
// draw the current gametype in the lower right
|
||||
HU_drawGametype();
|
||||
if (modeattacking)
|
||||
V_DrawString(4, 188, hilicol, "Record Attack");
|
||||
else
|
||||
V_DrawString(4, 188, hilicol, gametype_cons_t[gametype].strvalue);
|
||||
|
||||
if (G_GametypeHasTeams())
|
||||
{
|
||||
|
@ -1694,29 +1687,32 @@ static void HU_DrawRankings(void)
|
|||
{
|
||||
if (cv_timelimit.value && timelimitintics > 0)
|
||||
{
|
||||
INT32 timeval = (timelimitintics+1-leveltime)/TICRATE;
|
||||
UINT32 timeval = (timelimitintics + starttime + 1 - leveltime);
|
||||
if (timeval > timelimitintics+1)
|
||||
timeval = timelimitintics;
|
||||
timeval /= TICRATE;
|
||||
|
||||
if (leveltime <= timelimitintics)
|
||||
{
|
||||
V_DrawCenteredString(64, 8, 0, "TIME LEFT");
|
||||
V_DrawCenteredString(64, 16, 0, va("%u", timeval));
|
||||
V_DrawCenteredString(64, 16, hilicol, va("%u", timeval));
|
||||
}
|
||||
|
||||
// overtime
|
||||
if ((leveltime > (timelimitintics + TICRATE/2)) && cv_overtime.value)
|
||||
if (!players[consoleplayer].exiting && (leveltime > (timelimitintics + starttime + TICRATE/2)) && cv_overtime.value)
|
||||
{
|
||||
V_DrawCenteredString(64, 8, 0, "TIME LEFT");
|
||||
V_DrawCenteredString(64, 16, 0, "OVERTIME");
|
||||
V_DrawCenteredString(64, 16, hilicol, "OVERTIME");
|
||||
}
|
||||
}
|
||||
|
||||
if (cv_pointlimit.value > 0)
|
||||
{
|
||||
V_DrawCenteredString(256, 8, 0, "POINT LIMIT");
|
||||
V_DrawCenteredString(256, 16, 0, va("%d", cv_pointlimit.value));
|
||||
V_DrawCenteredString(256, 16, hilicol, va("%d", cv_pointlimit.value));
|
||||
}
|
||||
}
|
||||
else if (gametype == GT_COOP)
|
||||
/*else if (gametype == GT_COOP)
|
||||
{
|
||||
INT32 totalscore = 0;
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
|
@ -1727,14 +1723,17 @@ static void HU_DrawRankings(void)
|
|||
|
||||
V_DrawCenteredString(256, 8, 0, "TOTAL SCORE");
|
||||
V_DrawCenteredString(256, 16, 0, va("%u", totalscore));
|
||||
}
|
||||
}*/
|
||||
else
|
||||
{
|
||||
if (circuitmap)
|
||||
{
|
||||
V_DrawCenteredString(64, 8, 0, "NUMBER OF LAPS");
|
||||
V_DrawCenteredString(64, 16, 0, va("%d", cv_numlaps.value));
|
||||
V_DrawCenteredString(64, 8, 0, "LAP COUNT");
|
||||
V_DrawCenteredString(64, 16, hilicol, va("%d", cv_numlaps.value));
|
||||
}
|
||||
|
||||
V_DrawCenteredString(256, 8, 0, "GAME SPEED");
|
||||
V_DrawCenteredString(256, 16, hilicol, cv_kartspeed.string);
|
||||
}
|
||||
|
||||
// When you play, you quickly see your score because your name is displayed in white.
|
||||
|
@ -1799,7 +1798,7 @@ static void HU_DrawRankings(void)
|
|||
/*if (G_GametypeHasTeams())
|
||||
HU_DrawTeamTabRankings(tab, whiteplayer); //separate function for Spazzo's silly request -- gotta fix this up later
|
||||
else if (scorelines > 10)*/
|
||||
HU_DrawTabRankings(((scorelines > 9) ? 32 : 40), 32, tab, scorelines, whiteplayer);
|
||||
HU_DrawTabRankings(((scorelines > 9) ? 32 : 40), 32, tab, scorelines, whiteplayer, hilicol);
|
||||
/*else
|
||||
HU_DrawDualTabRankings(32, 32, tab, scorelines, whiteplayer);*/
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ void HU_Drawer(void);
|
|||
char HU_dequeueChatChar(void);
|
||||
void HU_Erase(void);
|
||||
void HU_clearChatChars(void);
|
||||
void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer);
|
||||
void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol);
|
||||
//void HU_DrawTeamTabRankings(playersort_t *tab, INT32 whiteplayer);
|
||||
//void HU_DrawDualTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer);
|
||||
void HU_DrawEmeralds(INT32 x, INT32 y, INT32 pemeralds);
|
||||
|
|
18
src/k_kart.c
18
src/k_kart.c
|
@ -3393,9 +3393,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
case KITEM_INVINCIBILITY:
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO) // Doesn't hold your item slot hostage normally, so you're free to waste it if you have multiple
|
||||
{
|
||||
P_RestoreMusic(player);
|
||||
if (!cv_kartinvinsfx.value && !P_IsLocalPlayer(player))
|
||||
S_StartSound(player->mo, sfx_kinvnc);
|
||||
if (!player->kartstuff[k_invincibilitytimer])
|
||||
{
|
||||
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_INVULNFLASH);
|
||||
|
@ -3404,6 +3401,9 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
P_SetScale(overlay, player->mo->scale);
|
||||
}
|
||||
player->kartstuff[k_invincibilitytimer] = itemtime+(2*TICRATE); // 10 seconds
|
||||
P_RestoreMusic(player);
|
||||
if (!cv_kartinvinsfx.value && !P_IsLocalPlayer(player))
|
||||
S_StartSound(player->mo, sfx_kinvnc);
|
||||
K_PlayTauntSound(player->mo);
|
||||
player->kartstuff[k_itemamount]--;
|
||||
player->pflags |= PF_ATTACKDOWN;
|
||||
|
@ -3623,15 +3623,15 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO
|
||||
&& player->kartstuff[k_growshrinktimer] <= 0) // Grow holds the item box hostage
|
||||
{
|
||||
P_RestoreMusic(player);
|
||||
if (!cv_kartinvinsfx.value && !P_IsLocalPlayer(player))
|
||||
S_StartSound(player->mo, sfx_kgrow);
|
||||
K_PlayTauntSound(player->mo);
|
||||
player->mo->scalespeed = FRACUNIT/TICRATE;
|
||||
player->mo->destscale = 3*(mapheaderinfo[gamemap-1]->mobj_scale)/2;
|
||||
if (cv_kartdebugshrink.value && !player->bot)
|
||||
player->mo->destscale = 6*player->mo->destscale/8;
|
||||
player->kartstuff[k_growshrinktimer] = itemtime+(4*TICRATE); // 12 seconds
|
||||
P_RestoreMusic(player);
|
||||
if (!cv_kartinvinsfx.value && !P_IsLocalPlayer(player))
|
||||
S_StartSound(player->mo, sfx_kgrow);
|
||||
S_StartSound(player->mo, sfx_kc5a);
|
||||
player->pflags |= PF_ATTACKDOWN;
|
||||
player->kartstuff[k_itemamount]--;
|
||||
|
@ -5429,7 +5429,7 @@ static void K_drawKartFirstPerson(void)
|
|||
UINT8 *colmap = NULL;
|
||||
ticcmd_t *cmd = &stplyr->cmd;
|
||||
|
||||
if (stplyr->mo && stplyr->mo->flags2 & MF2_DONTDRAW)
|
||||
if (stplyr->spectator || !stplyr->mo || (stplyr->mo->flags2 & MF2_DONTDRAW))
|
||||
return;
|
||||
|
||||
if (stplyr == &players[secondarydisplayplayer] && splitscreen)
|
||||
|
@ -5448,12 +5448,10 @@ static void K_drawKartFirstPerson(void)
|
|||
x >>= 1;
|
||||
}
|
||||
|
||||
if (stplyr->spectator || !stplyr->mo)
|
||||
splitflags |= FF_TRANS50; // this isn't EXPLICITLY right, it just gets the result we want, but i'm too lazy to look up the right way to do it
|
||||
else
|
||||
{
|
||||
if (stplyr->speed < FixedMul(stplyr->runspeed, stplyr->mo->scale) && (leveltime & 1) && !splitscreen)
|
||||
y++;
|
||||
// this isn't EXPLICITLY right, it just gets the result we want, but i'm too lazy to look up the right way to do it
|
||||
if (stplyr->mo->frame & FF_TRANSMASK)
|
||||
splitflags |= (stplyr->mo->frame & FF_TRANSMASK); // ditto
|
||||
}
|
||||
|
|
|
@ -1797,7 +1797,7 @@ static void P_HitDeathMessages(player_t *player, mobj_t *inflictor, mobj_t *sour
|
|||
*/
|
||||
void P_CheckTimeLimit(void)
|
||||
{
|
||||
INT32 i;
|
||||
INT32 i, k;
|
||||
|
||||
if (!cv_timelimit.value)
|
||||
return;
|
||||
|
@ -1808,7 +1808,7 @@ void P_CheckTimeLimit(void)
|
|||
if (G_RaceGametype())
|
||||
return;
|
||||
|
||||
if (leveltime < timelimitintics)
|
||||
if (leveltime < (timelimitintics + starttime))
|
||||
return;
|
||||
|
||||
if (gameaction == ga_completed)
|
||||
|
@ -1830,13 +1830,10 @@ void P_CheckTimeLimit(void)
|
|||
P_AddPlayerScore(&players[i], players[i].score);
|
||||
}
|
||||
}
|
||||
|
||||
if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
}
|
||||
|
||||
//Optional tie-breaker for Match/CTF
|
||||
/*else if (cv_overtime.value)
|
||||
else if (cv_overtime.value)
|
||||
{
|
||||
INT32 playerarray[MAXPLAYERS];
|
||||
INT32 tempplayer = 0;
|
||||
|
@ -1846,6 +1843,8 @@ void P_CheckTimeLimit(void)
|
|||
//Figure out if we have enough participating players to care.
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (players[i].exiting)
|
||||
return;
|
||||
if (playeringame[i] && players[i].spectator)
|
||||
spectators++;
|
||||
}
|
||||
|
@ -1874,7 +1873,7 @@ void P_CheckTimeLimit(void)
|
|||
{
|
||||
for (k = i; k < playercount; k++)
|
||||
{
|
||||
if (players[playerarray[i-1]].score < players[playerarray[k]].score)
|
||||
if (players[playerarray[i-1]].marescore < players[playerarray[k]].marescore)
|
||||
{
|
||||
tempplayer = playerarray[i-1];
|
||||
playerarray[i-1] = playerarray[k];
|
||||
|
@ -1884,7 +1883,7 @@ void P_CheckTimeLimit(void)
|
|||
}
|
||||
|
||||
//End the round if the top players aren't tied.
|
||||
if (players[playerarray[0]].score == players[playerarray[1]].score)
|
||||
if (players[playerarray[0]].marescore == players[playerarray[1]].marescore)
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
@ -1894,12 +1893,19 @@ void P_CheckTimeLimit(void)
|
|||
return;
|
||||
}
|
||||
}
|
||||
if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
}*/
|
||||
}
|
||||
|
||||
if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i] || players[i].spectator)
|
||||
continue;
|
||||
if (players[i].exiting)
|
||||
return;
|
||||
P_DoPlayerExit(&players[i]);
|
||||
}
|
||||
|
||||
/*if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);*/
|
||||
}
|
||||
|
||||
/** Checks if a player's score is over the pointlimit and the round should end.
|
||||
|
@ -1922,7 +1928,7 @@ void P_CheckPointLimit(void)
|
|||
return;
|
||||
|
||||
// pointlimit is nonzero, check if it's been reached by this player
|
||||
if (G_GametypeHasTeams())
|
||||
/*if (G_GametypeHasTeams())
|
||||
{
|
||||
// Just check both teams
|
||||
if ((UINT32)cv_pointlimit.value <= redscore || (UINT32)cv_pointlimit.value <= bluescore)
|
||||
|
@ -1931,18 +1937,27 @@ void P_CheckPointLimit(void)
|
|||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
else*/
|
||||
{
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (!playeringame[i] || players[i].spectator)
|
||||
continue;
|
||||
|
||||
if ((UINT32)cv_pointlimit.value <= players[i].score)
|
||||
if ((UINT32)cv_pointlimit.value <= players[i].marescore)
|
||||
{
|
||||
if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);
|
||||
return;
|
||||
for (i = 0; i < MAXPLAYERS; i++) // AAAAA nested loop using the same iteration variable ;;
|
||||
{
|
||||
if (!playeringame[i] || players[i].spectator)
|
||||
continue;
|
||||
if (players[i].exiting)
|
||||
return;
|
||||
P_DoPlayerExit(&players[i]);
|
||||
}
|
||||
|
||||
/*if (server)
|
||||
SendNetXCmd(XD_EXITLEVEL, NULL, 0);*/
|
||||
return; // good thing we're leaving the function immediately instead of letting the loop get mangled!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1190,7 +1190,7 @@ void P_RestoreMusic(player_t *player)
|
|||
S_ChangeMusicInternal("kgrow", true);
|
||||
// Item - Invincibility
|
||||
else if (player->kartstuff[k_invincibilitytimer] > 1 && player->playerstate == PST_LIVE)
|
||||
S_ChangeMusicInternal("kinvnc", false);
|
||||
S_ChangeMusicInternal("kinvnc", true);
|
||||
else
|
||||
{
|
||||
// Event - Final Lap
|
||||
|
|
Loading…
Reference in a new issue