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; const UINT8 *colormap;
//this function is designed for 9 or less score lines only //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! 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(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. 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++) for (i = 0; i < scorelines; i++)
{ {
char strtime[MAXPLAYERNAME+1];
if (players[tab[i].num].spectator || !players[tab[i].num].mo) if (players[tab[i].num].spectator || !players[tab[i].num].mo)
continue; //ignore them. 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); 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, V_DrawString(x + 20, y,
((tab[i].num == whiteplayer) ((tab[i].num == whiteplayer)
? hilicol|V_ALLOWLOWERCASE ? hilicol|V_ALLOWLOWERCASE
: V_ALLOWLOWERCASE), : V_ALLOWLOWERCASE),
tab[i].name); strtime);
if (players[tab[i].num].mo->color) 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)); V_DrawRightAlignedString(x+rightoffset, y, 0, va("%u", tab[i].count));
y += 16; y += 16;
if (i == 9) if (i == 7)
{ {
y = 32; y = 32;
x += BASEVIDWIDTH/2; x += BASEVIDWIDTH/2;
@ -2680,15 +2687,17 @@ static void HU_DrawRankings(void)
tab[scorelines].count = players[i].marescore; tab[scorelines].count = players[i].marescore;
scorelines++; scorelines++;
}
if (scorelines > 20) #if MAXPLAYERS > 16
scorelines = 20; //dont draw past bottom of screen, show the best only if (scorelines > 16)
break; //dont draw past bottom of screen, show the best only
#endif
}
/*if (G_GametypeHasTeams()) /*if (G_GametypeHasTeams())
HU_DrawTeamTabRankings(tab, whiteplayer); //separate function for Spazzo's silly request -- gotta fix this up later HU_DrawTeamTabRankings(tab, whiteplayer); //separate function for Spazzo's silly request -- gotta fix this up later
else if (scorelines > 10)*/ 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 /*else
HU_DrawDualTabRankings(32, 32, tab, scorelines, whiteplayer);*/ HU_DrawDualTabRankings(32, 32, tab, scorelines, whiteplayer);*/

View file

@ -7006,7 +7006,7 @@ void P_MobjThinker(mobj_t *mobj)
else else
mobj->tracer->flags2 &= ~MF2_DONTDRAW; 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); P_SetMobjState(mobj, S_PLAYERARROW_BOX);

View file

@ -396,7 +396,6 @@ void Y_IntermissionDrawer(void)
else*/ if (intertype == int_race || intertype == int_match) else*/ if (intertype == int_race || intertype == int_match)
{ {
INT32 y = 48; INT32 y = 48;
char name[MAXPLAYERNAME+1];
const char *timeheader; const char *timeheader;
if (data.match.rankingsmode) if (data.match.rankingsmode)
@ -410,7 +409,7 @@ void Y_IntermissionDrawer(void)
if (data.match.numplayers > 8) 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_DrawCenteredString(x+6+(BASEVIDWIDTH/2), 32, hilicol, "#");
V_DrawString(x+36+(BASEVIDWIDTH/2), 32, hilicol, "NAME"); 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) 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])); 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); V_DrawSmallMappedPatch(x+16, y-4, 0,faceprefix[*data.match.character[i]], colormap);
} }
if (data.match.numplayers > 9) if (data.match.numplayers > 8)
strlcpy(name, data.match.name[i], 6); strlcpy(strtime, data.match.name[i], 6);
else else
STRBUFCPY(name, data.match.name[i]); STRBUFCPY(strtime, data.match.name[i]);
V_DrawString(x+36, y, V_DrawString(x+36, y,
((data.match.num[i] == whiteplayer) ((data.match.num[i] == whiteplayer)
? hilicol|V_ALLOWLOWERCASE ? hilicol|V_ALLOWLOWERCASE
: V_ALLOWLOWERCASE), : V_ALLOWLOWERCASE),
name); strtime);
if (data.match.rankingsmode) if (data.match.rankingsmode)
{ {
@ -507,11 +506,14 @@ void Y_IntermissionDrawer(void)
} }
} }
else else
{
data.match.increase[data.match.num[i]] = 0;
data.match.num[i] = MAXPLAYERS; // this should be the only field setting in this function data.match.num[i] = MAXPLAYERS; // this should be the only field setting in this function
}
y += 16; y += 16;
if (y > 176) if (i == 7)
{ {
y = 48; y = 48;
x += BASEVIDWIDTH/2; x += BASEVIDWIDTH/2;