Fix up the bugs from last night's hell netgame.

* The tab and intermissions rankings...
	* ...now have parity in behaviour!
	* ...now properly handle player counts over 8, and no longer supports player counts over 16!
* The Item Arrow in Battle...
	* No longer develops any extremely stupid bugs due to Orbinaut sprites that makes all objects in state S_INVISIBLE develop <!>'s! (Ask me about this if you're curious as to how it affected everything else too.)
This commit is contained in:
toaster 2018-08-24 13:36:03 +01:00
parent c895f45d96
commit e5566df4c2
3 changed files with 28 additions and 17 deletions

View file

@ -2186,10 +2186,10 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I
const UINT8 *colormap;
//this function is designed for 9 or less score lines only
I_Assert(scorelines <= 9);
//I_Assert(scorelines <= 9); -- not today bitch, kart fixed it up
V_DrawFill(1, 26, 318, 1, 0); // Draw a horizontal line because it looks nice!
if (scorelines > 9)
if (scorelines > 8)
{
V_DrawFill(160, 26, 1, 154, 0); // Draw a vertical line to separate the two sides.
V_DrawFill(1, 180, 318, 1, 0); // And a horizontal line near the bottom.
@ -2198,6 +2198,8 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I
for (i = 0; i < scorelines; i++)
{
char strtime[MAXPLAYERNAME+1];
if (players[tab[i].num].spectator || !players[tab[i].num].mo)
continue; //ignore them.
@ -2207,11 +2209,16 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I
HU_drawPing(x+ 253, y+2, playerpingtable[tab[i].num], false);
}
if (scorelines > 8)
strlcpy(strtime, tab[i].name, 6);
else
STRBUFCPY(strtime, tab[i].name);
V_DrawString(x + 20, y,
((tab[i].num == whiteplayer)
? hilicol|V_ALLOWLOWERCASE
: V_ALLOWLOWERCASE),
tab[i].name);
strtime);
if (players[tab[i].num].mo->color)
{
@ -2260,7 +2267,7 @@ void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, I
V_DrawRightAlignedString(x+rightoffset, y, 0, va("%u", tab[i].count));
y += 16;
if (i == 9)
if (i == 7)
{
y = 32;
x += BASEVIDWIDTH/2;
@ -2680,15 +2687,17 @@ static void HU_DrawRankings(void)
tab[scorelines].count = players[i].marescore;
scorelines++;
}
if (scorelines > 20)
scorelines = 20; //dont draw past bottom of screen, show the best only
#if MAXPLAYERS > 16
if (scorelines > 16)
break; //dont draw past bottom of screen, show the best only
#endif
}
/*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, hilicol);
HU_DrawTabRankings(((scorelines > 8) ? 32 : 40), 32, tab, scorelines, whiteplayer, hilicol);
/*else
HU_DrawDualTabRankings(32, 32, tab, scorelines, whiteplayer);*/

View file

@ -7006,7 +7006,7 @@ void P_MobjThinker(mobj_t *mobj)
else
mobj->tracer->flags2 &= ~MF2_DONTDRAW;
}
else if (mobj->target->player->kartstuff[k_itemtype])
else if (mobj->target->player->kartstuff[k_itemtype] && mobj->target->player->kartstuff[k_itemamount] > 0)
{
P_SetMobjState(mobj, S_PLAYERARROW_BOX);

View file

@ -396,7 +396,6 @@ void Y_IntermissionDrawer(void)
else*/ if (intertype == int_race || intertype == int_match)
{
INT32 y = 48;
char name[MAXPLAYERNAME+1];
const char *timeheader;
if (data.match.rankingsmode)
@ -410,7 +409,7 @@ void Y_IntermissionDrawer(void)
if (data.match.numplayers > 8)
{
V_DrawFill(160, 32, 1, 152, 0);
V_DrawFill(x+156, 32, 1, 152, 0);
V_DrawCenteredString(x+6+(BASEVIDWIDTH/2), 32, hilicol, "#");
V_DrawString(x+36+(BASEVIDWIDTH/2), 32, hilicol, "NAME");
@ -427,7 +426,7 @@ void Y_IntermissionDrawer(void)
{
if (data.match.num[i] != MAXPLAYERS && playeringame[data.match.num[i]] && !players[data.match.num[i]].spectator)
{
char strtime[10];
char strtime[MAXPLAYERNAME+1];
V_DrawCenteredString(x+6, y, 0, va("%d", data.match.pos[i]));
@ -439,16 +438,16 @@ void Y_IntermissionDrawer(void)
V_DrawSmallMappedPatch(x+16, y-4, 0,faceprefix[*data.match.character[i]], colormap);
}
if (data.match.numplayers > 9)
strlcpy(name, data.match.name[i], 6);
if (data.match.numplayers > 8)
strlcpy(strtime, data.match.name[i], 6);
else
STRBUFCPY(name, data.match.name[i]);
STRBUFCPY(strtime, data.match.name[i]);
V_DrawString(x+36, y,
((data.match.num[i] == whiteplayer)
? hilicol|V_ALLOWLOWERCASE
: V_ALLOWLOWERCASE),
name);
strtime);
if (data.match.rankingsmode)
{
@ -507,11 +506,14 @@ void Y_IntermissionDrawer(void)
}
}
else
{
data.match.increase[data.match.num[i]] = 0;
data.match.num[i] = MAXPLAYERS; // this should be the only field setting in this function
}
y += 16;
if (y > 176)
if (i == 7)
{
y = 48;
x += BASEVIDWIDTH/2;