mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-22 03:41:05 +00:00
Some more intermission stuff.
* Combine three basically-identical functions into a generic framework function that takes a function pointer for the purposes of comparison! * Y_CalculateMatchData handles the (re)calculation of data.match whenever necessary. * Y_CompareRace handles time comparisons for Race. * Y_CompareBattle handles score comparisons for Battle. * Y_CompareRank handles rank comparisons for both gametypes. * Move the recalculation for the rankingsmode to a different, non-drawing function. * Re-organise Y_Ticker for sanity purposes. * Tweak the countdown timer on both intermission and vote screens.
This commit is contained in:
parent
fc2d12425e
commit
7af613a814
1 changed files with 143 additions and 248 deletions
391
src/y_inter.c
391
src/y_inter.c
|
@ -82,7 +82,6 @@ typedef union
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
UINT32 scores[MAXPLAYERS]; // Winner's score
|
|
||||||
UINT8 *color[MAXPLAYERS]; // Winner's color #
|
UINT8 *color[MAXPLAYERS]; // Winner's color #
|
||||||
INT32 *character[MAXPLAYERS]; // Winner's character #
|
INT32 *character[MAXPLAYERS]; // Winner's character #
|
||||||
INT32 num[MAXPLAYERS]; // Winner's player #
|
INT32 num[MAXPLAYERS]; // Winner's player #
|
||||||
|
@ -115,11 +114,6 @@ static INT32 sorttic = -1;
|
||||||
|
|
||||||
intertype_t intertype = int_none;
|
intertype_t intertype = int_none;
|
||||||
|
|
||||||
// SRB2kart
|
|
||||||
static void Y_CalculateTournamentPoints(void);
|
|
||||||
static void Y_CalculateMatchWinners(void);
|
|
||||||
static void Y_MakeRankingsTable(void);
|
|
||||||
|
|
||||||
static void Y_FollowIntermission(void);
|
static void Y_FollowIntermission(void);
|
||||||
static void Y_UnloadData(void);
|
static void Y_UnloadData(void);
|
||||||
|
|
||||||
|
@ -163,10 +157,106 @@ static patch_t *randomlvl = NULL;
|
||||||
|
|
||||||
static void Y_UnloadVoteData(void);
|
static void Y_UnloadVoteData(void);
|
||||||
|
|
||||||
|
//
|
||||||
|
// SRB2Kart - Y_CalculateMatchData and ancillary functions
|
||||||
|
//
|
||||||
|
static void Y_CompareRace(INT32 i)
|
||||||
|
{
|
||||||
|
UINT32 val = ((players[i].pflags & PF_TIMEOVER || players[i].realtime == UINT32_MAX)
|
||||||
|
? (UINT32_MAX-1) : players[i].realtime);
|
||||||
|
|
||||||
|
if (!(val < data.match.val[data.match.numplayers]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
data.match.val[data.match.numplayers] = val;
|
||||||
|
data.match.num[data.match.numplayers] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Y_CompareBattle(INT32 i)
|
||||||
|
{
|
||||||
|
UINT32 val = ((players[i].pflags & PF_TIMEOVER)
|
||||||
|
? (UINT32_MAX-1) : players[i].marescore);
|
||||||
|
|
||||||
|
if (!(data.match.val[data.match.numplayers] == UINT32_MAX
|
||||||
|
|| (!(players[i].pflags & PF_TIMEOVER) && val > data.match.val[data.match.numplayers])))
|
||||||
|
return;
|
||||||
|
|
||||||
|
data.match.val[data.match.numplayers] = val;
|
||||||
|
data.match.num[data.match.numplayers] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Y_CompareRank(INT32 i)
|
||||||
|
{
|
||||||
|
if (!(data.match.val[data.match.numplayers] == UINT32_MAX || players[i].score > data.match.val[data.match.numplayers]))
|
||||||
|
return;
|
||||||
|
|
||||||
|
data.match.val[data.match.numplayers] = players[i].score;
|
||||||
|
data.match.num[data.match.numplayers] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Y_CalculateMatchData(boolean rankingsmode, void (*comparison)(INT32))
|
||||||
|
{
|
||||||
|
INT32 i, j;
|
||||||
|
boolean completed[MAXPLAYERS];
|
||||||
|
INT32 numplayersingame = 0;
|
||||||
|
|
||||||
|
// Initialize variables
|
||||||
|
if ((data.match.rankingsmode = rankingsmode))
|
||||||
|
sprintf(data.match.levelstring, "* Total Rankings *");
|
||||||
|
else
|
||||||
|
memset(data.match.increase, 0, sizeof (data.match.increase));
|
||||||
|
for (j = 0; j < MAXPLAYERS; j++)
|
||||||
|
data.match.val[j] = UINT32_MAX;
|
||||||
|
memset(data.match.color, 0, sizeof (data.match.color));
|
||||||
|
memset(data.match.character, 0, sizeof (data.match.character));
|
||||||
|
memset(completed, 0, sizeof (completed));
|
||||||
|
data.match.numplayers = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (!playeringame[i] || players[i].spectator)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
numplayersingame++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = 0; j < numplayersingame; j++)
|
||||||
|
{
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (!playeringame[i] || players[i].spectator || completed[i])
|
||||||
|
continue;
|
||||||
|
|
||||||
|
comparison(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
i = data.match.num[data.match.numplayers];
|
||||||
|
|
||||||
|
completed[i] = true;
|
||||||
|
|
||||||
|
data.match.color[data.match.numplayers] = &players[i].skincolor;
|
||||||
|
data.match.character[data.match.numplayers] = &players[i].skin;
|
||||||
|
data.match.name[data.match.numplayers] = player_names[i];
|
||||||
|
|
||||||
|
if (data.match.numplayers && (data.match.val[data.match.numplayers] == data.match.val[data.match.numplayers-1]))
|
||||||
|
data.match.pos[data.match.numplayers] = data.match.pos[data.match.numplayers-1];
|
||||||
|
else
|
||||||
|
data.match.pos[data.match.numplayers] = data.match.numplayers+1;
|
||||||
|
|
||||||
|
if (!rankingsmode && !(players[i].pflags & PF_TIMEOVER))
|
||||||
|
{
|
||||||
|
data.match.increase[i] = numplayersingame - data.match.pos[data.match.numplayers];
|
||||||
|
players[i].score += data.match.increase[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
data.match.numplayers++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Y_IntermissionDrawer
|
// Y_IntermissionDrawer
|
||||||
//
|
//
|
||||||
// Called by D_Display. Nothing is modified here; all it does is draw.
|
// Called by D_Display. Nothing is modified here; all it does is draw. (SRB2Kart: er, about that...)
|
||||||
// Neat concept, huh?
|
// Neat concept, huh?
|
||||||
//
|
//
|
||||||
void Y_IntermissionDrawer(void)
|
void Y_IntermissionDrawer(void)
|
||||||
|
@ -222,15 +312,10 @@ void Y_IntermissionDrawer(void)
|
||||||
|
|
||||||
if (count < 8)
|
if (count < 8)
|
||||||
x -= ((count * vid.width) / (8 * vid.dupx));
|
x -= ((count * vid.width) / (8 * vid.dupx));
|
||||||
else
|
else if (count == 8)
|
||||||
{
|
goto dotimer;
|
||||||
if (!data.match.rankingsmode)
|
else if (count < 16)
|
||||||
Y_MakeRankingsTable();
|
x += (((16 - count) * vid.width) / (8 * vid.dupx));
|
||||||
if (count == 8)
|
|
||||||
goto dotimer;
|
|
||||||
else if (count < 16)
|
|
||||||
x += (((16 - count) * vid.width) / (8 * vid.dupx));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SRB2kart 290117 - compeltely replaced this block.
|
// SRB2kart 290117 - compeltely replaced this block.
|
||||||
|
@ -338,7 +423,7 @@ void Y_IntermissionDrawer(void)
|
||||||
else
|
else
|
||||||
V_DrawRightAlignedString(x+120+BASEVIDWIDTH/2, y, 0, strtime);
|
V_DrawRightAlignedString(x+120+BASEVIDWIDTH/2, y, 0, strtime);
|
||||||
|
|
||||||
snprintf(strtime, sizeof strtime, "%d", data.match.scores[i]-data.match.increase[data.match.num[i]]);
|
snprintf(strtime, sizeof strtime, "%d", data.match.val[i]-data.match.increase[data.match.num[i]]);
|
||||||
|
|
||||||
if (data.match.numplayers > 8)
|
if (data.match.numplayers > 8)
|
||||||
V_DrawRightAlignedString(x+152, y, 0, strtime);
|
V_DrawRightAlignedString(x+152, y, 0, strtime);
|
||||||
|
@ -378,7 +463,7 @@ void Y_IntermissionDrawer(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
data.match.num[i] = MAXPLAYERS;
|
data.match.num[i] = MAXPLAYERS; // this should be the only field setting in this function
|
||||||
|
|
||||||
y += 16;
|
y += 16;
|
||||||
|
|
||||||
|
@ -392,8 +477,11 @@ void Y_IntermissionDrawer(void)
|
||||||
|
|
||||||
dotimer:
|
dotimer:
|
||||||
if (timer)
|
if (timer)
|
||||||
|
{
|
||||||
|
INT32 tickdown = (timer+1)/TICRATE;
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol,
|
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol,
|
||||||
va("start in %d seconds", timer/TICRATE));
|
va("start in %d second%s", tickdown, (tickdown == 1 ? "" : "s")));
|
||||||
|
}
|
||||||
|
|
||||||
// Make it obvious that scrambling is happening next round.
|
// Make it obvious that scrambling is happening next round.
|
||||||
if (cv_scrambleonchange.value && cv_teamscramble.value && (intertic/TICRATE % 2 == 0))
|
if (cv_scrambleonchange.value && cv_teamscramble.value && (intertic/TICRATE % 2 == 0))
|
||||||
|
@ -444,43 +532,46 @@ void Y_Ticker(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (endtic != -1)
|
if (intertic < TICRATE || intertic & 1 || endtic != -1)
|
||||||
return; // tally is done
|
return;
|
||||||
|
|
||||||
else if (intertype == int_race || intertype == int_match)
|
if (intertype == int_race || intertype == int_match)
|
||||||
{
|
{
|
||||||
INT32 q=0,r=0;
|
|
||||||
boolean kaching = true;
|
|
||||||
|
|
||||||
if (intertic < TICRATE || intertic & 1)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (data.match.rankingsmode && intertic > sorttic+(2*TICRATE))
|
|
||||||
{
|
|
||||||
for (q = 0; q < data.match.numplayers; q++)
|
|
||||||
{
|
|
||||||
if (data.match.num[q] == MAXPLAYERS)
|
|
||||||
continue;
|
|
||||||
if (data.match.increase[data.match.num[q]]) {
|
|
||||||
data.match.increase[data.match.num[q]]--;
|
|
||||||
r++;
|
|
||||||
if (data.match.increase[data.match.num[q]])
|
|
||||||
kaching = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (r)
|
|
||||||
S_StartSound(NULL, (kaching ? sfx_chchng : sfx_ptally));
|
|
||||||
else
|
|
||||||
endtic = intertic + 3*TICRATE; // 3 second pause after end of tally
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modeattacking)
|
if (modeattacking)
|
||||||
endtic = intertic + 8*TICRATE; // 8 second pause after end of tally
|
endtic = intertic + 8*TICRATE; // 8 second pause after end of tally
|
||||||
else if (netgame || multiplayer)
|
else if (netgame || multiplayer)
|
||||||
{
|
{
|
||||||
if (sorttic == -1)
|
if (sorttic == -1)
|
||||||
sorttic = intertic + max((cv_inttime.value/2)-2, 2)*TICRATE; // 8 second pause after match results
|
sorttic = intertic + max((cv_inttime.value/2)-2, 2)*TICRATE; // 8 second pause after match results
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!data.match.rankingsmode && (intertic >= sorttic + 8))
|
||||||
|
Y_CalculateMatchData(true, Y_CompareRank);
|
||||||
|
|
||||||
|
if (data.match.rankingsmode && intertic > sorttic+(2*TICRATE))
|
||||||
|
{
|
||||||
|
INT32 q=0,r=0;
|
||||||
|
boolean kaching = true;
|
||||||
|
|
||||||
|
for (q = 0; q < data.match.numplayers; q++)
|
||||||
|
{
|
||||||
|
if (data.match.num[q] == MAXPLAYERS)
|
||||||
|
continue;
|
||||||
|
if (data.match.increase[data.match.num[q]])
|
||||||
|
{
|
||||||
|
data.match.increase[data.match.num[q]]--;
|
||||||
|
r++;
|
||||||
|
if (data.match.increase[data.match.num[q]])
|
||||||
|
kaching = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r)
|
||||||
|
S_StartSound(NULL, (kaching ? sfx_chchng : sfx_ptally));
|
||||||
|
else
|
||||||
|
endtic = intertic + 3*TICRATE; // 3 second pause after end of tally
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -617,7 +708,7 @@ void Y_StartIntermission(void)
|
||||||
case int_match:
|
case int_match:
|
||||||
{
|
{
|
||||||
// Calculate who won
|
// Calculate who won
|
||||||
Y_CalculateMatchWinners();
|
Y_CalculateMatchData(false, Y_CompareBattle);
|
||||||
S_ChangeMusicInternal("racent", true); // loop it
|
S_ChangeMusicInternal("racent", true); // loop it
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -639,7 +730,7 @@ void Y_StartIntermission(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate who won
|
// Calculate who won
|
||||||
Y_CalculateTournamentPoints();
|
Y_CalculateMatchData(false, Y_CompareRace);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,202 +777,6 @@ void Y_StartIntermission(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Y_CalculateTournamentPoints
|
|
||||||
//
|
|
||||||
static void Y_CalculateTournamentPoints(void)
|
|
||||||
{
|
|
||||||
INT32 i, j;
|
|
||||||
boolean completed[MAXPLAYERS];
|
|
||||||
INT32 numplayersingame = 0;
|
|
||||||
|
|
||||||
// Initialize variables
|
|
||||||
data.match.rankingsmode = false;
|
|
||||||
for (j = 0; j < MAXPLAYERS; j++)
|
|
||||||
data.match.val[j] = UINT32_MAX;
|
|
||||||
memset(data.match.color, 0, sizeof (data.match.color));
|
|
||||||
memset(data.match.character, 0, sizeof (data.match.character));
|
|
||||||
memset(data.match.increase, 0, sizeof (data.match.increase));
|
|
||||||
memset(completed, 0, sizeof (completed));
|
|
||||||
data.match.numplayers = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
{
|
|
||||||
if (!playeringame[i] || players[i].spectator)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
numplayersingame++;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; j < numplayersingame; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
{
|
|
||||||
UINT32 timeval;
|
|
||||||
|
|
||||||
if (!playeringame[i] || players[i].spectator || completed[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
timeval = ((players[i].pflags & PF_TIMEOVER || players[i].realtime == UINT32_MAX)
|
|
||||||
? (UINT32_MAX-1) : players[i].realtime);
|
|
||||||
|
|
||||||
if (timeval < data.match.val[data.match.numplayers])
|
|
||||||
{
|
|
||||||
data.match.val[data.match.numplayers] = timeval;
|
|
||||||
data.match.num[data.match.numplayers] = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i = data.match.num[data.match.numplayers];
|
|
||||||
|
|
||||||
completed[i] = true;
|
|
||||||
|
|
||||||
data.match.color[data.match.numplayers] = &players[i].skincolor;
|
|
||||||
data.match.character[data.match.numplayers] = &players[i].skin;
|
|
||||||
data.match.name[data.match.numplayers] = player_names[i];
|
|
||||||
|
|
||||||
if (data.match.numplayers && (data.match.val[data.match.numplayers] == data.match.val[data.match.numplayers-1]))
|
|
||||||
data.match.pos[data.match.numplayers] = data.match.pos[data.match.numplayers-1];
|
|
||||||
else
|
|
||||||
data.match.pos[data.match.numplayers] = data.match.numplayers+1;
|
|
||||||
|
|
||||||
if (!(players[i].pflags & PF_TIMEOVER))
|
|
||||||
data.match.increase[i] = numplayersingame - data.match.pos[data.match.numplayers];
|
|
||||||
players[i].score += data.match.increase[i];
|
|
||||||
|
|
||||||
data.match.numplayers++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Y_CalculateMatchWinners
|
|
||||||
//
|
|
||||||
static void Y_CalculateMatchWinners(void)
|
|
||||||
{
|
|
||||||
INT32 i, j;
|
|
||||||
boolean completed[MAXPLAYERS];
|
|
||||||
INT32 numplayersingame = 0;
|
|
||||||
|
|
||||||
// Initialize variables
|
|
||||||
data.match.rankingsmode = false;
|
|
||||||
for (j = 0; j < MAXPLAYERS; j++)
|
|
||||||
data.match.val[j] = UINT32_MAX;
|
|
||||||
memset(data.match.color, 0, sizeof (data.match.color));
|
|
||||||
memset(data.match.character, 0, sizeof (data.match.character));
|
|
||||||
memset(data.match.increase, 0, sizeof (data.match.increase));
|
|
||||||
memset(completed, 0, sizeof (completed));
|
|
||||||
data.match.numplayers = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
{
|
|
||||||
if (!playeringame[i] || players[i].spectator)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
numplayersingame++;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; j < numplayersingame; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
{
|
|
||||||
UINT32 marescoreval;
|
|
||||||
|
|
||||||
if (!playeringame[i] || players[i].spectator || completed[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
marescoreval = ((players[i].pflags & PF_TIMEOVER)
|
|
||||||
? (UINT32_MAX-1) : players[i].marescore);
|
|
||||||
|
|
||||||
if (data.match.val[data.match.numplayers] == UINT32_MAX
|
|
||||||
|| (!(players[i].pflags & PF_TIMEOVER) && marescoreval > data.match.val[data.match.numplayers]))
|
|
||||||
{
|
|
||||||
data.match.val[data.match.numplayers] = marescoreval;
|
|
||||||
data.match.num[data.match.numplayers] = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i = data.match.num[data.match.numplayers];
|
|
||||||
|
|
||||||
completed[i] = true;
|
|
||||||
|
|
||||||
data.match.color[data.match.numplayers] = &players[i].skincolor;
|
|
||||||
data.match.character[data.match.numplayers] = &players[i].skin;
|
|
||||||
data.match.name[data.match.numplayers] = player_names[i];
|
|
||||||
|
|
||||||
if (data.match.numplayers && (data.match.val[data.match.numplayers] == data.match.val[data.match.numplayers-1]))
|
|
||||||
data.match.pos[data.match.numplayers] = data.match.pos[data.match.numplayers-1];
|
|
||||||
else
|
|
||||||
data.match.pos[data.match.numplayers] = data.match.numplayers+1;
|
|
||||||
|
|
||||||
if (!(players[i].pflags & PF_TIMEOVER))
|
|
||||||
data.match.increase[i] = numplayersingame - data.match.pos[data.match.numplayers];
|
|
||||||
players[i].score += data.match.increase[i];
|
|
||||||
|
|
||||||
data.match.numplayers++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Y_MakeRankingsTable
|
|
||||||
//
|
|
||||||
static void Y_MakeRankingsTable(void)
|
|
||||||
{
|
|
||||||
INT32 i, j;
|
|
||||||
boolean completed[MAXPLAYERS];
|
|
||||||
INT32 numplayersingame = 0;
|
|
||||||
|
|
||||||
// Initialize variables
|
|
||||||
data.match.rankingsmode = true;
|
|
||||||
for (j = 0; j < MAXPLAYERS; j++)
|
|
||||||
data.match.scores[j] = UINT32_MAX;
|
|
||||||
memset(data.match.color, 0, sizeof (data.match.color));
|
|
||||||
memset(data.match.character, 0, sizeof (data.match.character));
|
|
||||||
memset(completed, 0, sizeof (completed));
|
|
||||||
data.match.numplayers = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
{
|
|
||||||
if (!playeringame[i] || players[i].spectator)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
numplayersingame++;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (j = 0; j < numplayersingame; j++)
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
{
|
|
||||||
if (!playeringame[i] || players[i].spectator || completed[i])
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (data.match.scores[data.match.numplayers] == UINT32_MAX || players[i].score > data.match.scores[data.match.numplayers])
|
|
||||||
{
|
|
||||||
data.match.scores[data.match.numplayers] = players[i].score;
|
|
||||||
data.match.num[data.match.numplayers] = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
i = data.match.num[data.match.numplayers];
|
|
||||||
|
|
||||||
completed[i] = true;
|
|
||||||
|
|
||||||
data.match.color[data.match.numplayers] = &players[i].skincolor;
|
|
||||||
data.match.character[data.match.numplayers] = &players[i].skin;
|
|
||||||
data.match.name[data.match.numplayers] = player_names[i];
|
|
||||||
|
|
||||||
if (data.match.numplayers && (data.match.scores[data.match.numplayers] == data.match.scores[data.match.numplayers-1]))
|
|
||||||
data.match.pos[data.match.numplayers] = data.match.pos[data.match.numplayers-1];
|
|
||||||
else
|
|
||||||
data.match.pos[data.match.numplayers] = data.match.numplayers+1;
|
|
||||||
|
|
||||||
data.match.numplayers++;
|
|
||||||
}
|
|
||||||
|
|
||||||
snprintf(data.match.levelstring,
|
|
||||||
sizeof data.match.levelstring,
|
|
||||||
"* Total Rankings *");
|
|
||||||
}
|
|
||||||
|
|
||||||
// ======
|
// ======
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1211,7 +1106,7 @@ void Y_VoteDrawer(void)
|
||||||
|
|
||||||
if (timer)
|
if (timer)
|
||||||
{
|
{
|
||||||
INT32 hilicol;
|
INT32 hilicol, tickdown = (timer+1)/TICRATE;
|
||||||
if (cons_menuhighlight.value)
|
if (cons_menuhighlight.value)
|
||||||
hilicol = cons_menuhighlight.value;
|
hilicol = cons_menuhighlight.value;
|
||||||
else if (gametype == GT_RACE)
|
else if (gametype == GT_RACE)
|
||||||
|
@ -1219,7 +1114,7 @@ void Y_VoteDrawer(void)
|
||||||
else //if (gametype == GT_MATCH)
|
else //if (gametype == GT_MATCH)
|
||||||
hilicol = V_REDMAP;
|
hilicol = V_REDMAP;
|
||||||
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol|V_SNAPTOBOTTOM,
|
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol|V_SNAPTOBOTTOM,
|
||||||
va("Vote ends in %d seconds", timer/TICRATE));
|
va("Vote ends in %d second%s", tickdown, (tickdown == 1 ? "" : "s")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue