hu_stuff & y_inter

This commit is contained in:
Sally Coolatta 2020-08-14 01:06:55 -04:00
parent 6ef0af4ba5
commit 1500d682d2
8 changed files with 153 additions and 293 deletions

View file

@ -216,7 +216,7 @@ void HWR_DrawStretchyFixedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t
}
}
if (pscale != FRACUNIT || (splitscreen && option & V_PERPLAYER))
if (pscale != FRACUNIT || (splitscreen && option & V_SPLITSCREEN))
{
fwidth = (float)SHORT(gpatch->width) * fscalew * dupx;
fheight = (float)SHORT(gpatch->height) * fscaleh * dupy;
@ -322,7 +322,7 @@ void HWR_DrawCroppedPatch(GLPatch_t *gpatch, fixed_t x, fixed_t y, fixed_t pscal
dupx = dupy = (dupx < dupy ? dupx : dupy);
fscale = FIXED_TO_FLOAT(pscale);
// fuck it, no GL support for croppedpatch v_perplayer right now. it's not like it's accessible to Lua or anything, and we only use it for menus...
// fuck it, no GL support for croppedpatch V_SPLITSCREEN right now. it's not like it's accessible to Lua or anything, and we only use it for menus...
cy -= (float)SHORT(gpatch->topoffset) * fscale;
cx -= (float)SHORT(gpatch->leftoffset) * fscale;
@ -603,7 +603,7 @@ void HWR_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT16 ac
// |/ |
// 0--1
if (splitscreen && (color & V_PERPLAYER))
if (splitscreen && (color & V_SPLITSCREEN))
{
fixed_t adjusty = ((color & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)/2.0f;
h >>= 1;
@ -1082,7 +1082,7 @@ void HWR_DrawConsoleFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color, UINT32
// |/ |
// 0--1
if (splitscreen && (color & V_PERPLAYER))
if (splitscreen && (color & V_SPLITSCREEN))
{
fixed_t adjusty = ((color & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)/2.0f;
h >>= 1;
@ -1231,7 +1231,7 @@ void HWR_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 color)
// |/ |
// 0--1
if (splitscreen && (color & V_PERPLAYER))
if (splitscreen && (color & V_SPLITSCREEN))
{
fixed_t adjusty = ((color & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)/2.0f;
h >>= 1;

View file

@ -54,6 +54,7 @@
#include "s_sound.h" // song credits
#include "k_kart.h"
#include "k_color.h"
#include "k_hud.h"
// coords are scaled
#define HU_INPUTX 0
@ -94,17 +95,12 @@ patch_t *tallinfin;
// coop hud
//-------------------------------------------
patch_t *emeraldpics[3][8]; // 0 = normal, 1 = tiny, 2 = coinbox
static patch_t *emblemicon;
patch_t *tokenicon;
static patch_t *exiticon;
//-------------------------------------------
// misc vars
//-------------------------------------------
// crosshair 0 = off, 1 = cross, 2 = angle, 3 = point, see m_menu.c
static patch_t *crosshair[HU_CROSSHAIRS]; // 3 precached crosshair graphics
// song credits
static patch_t *songcreditbg;
@ -190,43 +186,7 @@ void HU_LoadGraphics(void)
// minus for negative tallnums
tallminus = HU_CachePatch("STTMINUS");
// cache the crosshairs, don't bother to know which one is being used,
// just cache all 3, they're so small anyway.
for (i = 0; i < HU_CROSSHAIRS; i++)
{
crosshair[i] = HU_CachePatch("CROSHAI%c", '1'+i);
}
emblemicon = HU_CachePatch("EMBLICON");
tokenicon = HU_CachePatch("TOKNICON");
emeraldpics[0][0] = W_CachePatchName("CHAOS1", PU_HUDGFX);
emeraldpics[0][1] = W_CachePatchName("CHAOS2", PU_HUDGFX);
emeraldpics[0][2] = W_CachePatchName("CHAOS3", PU_HUDGFX);
emeraldpics[0][3] = W_CachePatchName("CHAOS4", PU_HUDGFX);
emeraldpics[0][4] = W_CachePatchName("CHAOS5", PU_HUDGFX);
emeraldpics[0][5] = W_CachePatchName("CHAOS6", PU_HUDGFX);
emeraldpics[0][6] = W_CachePatchName("CHAOS7", PU_HUDGFX);
emeraldpics[0][7] = W_CachePatchName("CHAOS8", PU_HUDGFX);
emeraldpics[1][0] = W_CachePatchName("TEMER1", PU_HUDGFX);
emeraldpics[1][1] = W_CachePatchName("TEMER2", PU_HUDGFX);
emeraldpics[1][2] = W_CachePatchName("TEMER3", PU_HUDGFX);
emeraldpics[1][3] = W_CachePatchName("TEMER4", PU_HUDGFX);
emeraldpics[1][4] = W_CachePatchName("TEMER5", PU_HUDGFX);
emeraldpics[1][5] = W_CachePatchName("TEMER6", PU_HUDGFX);
emeraldpics[1][6] = W_CachePatchName("TEMER7", PU_HUDGFX);
//emeraldpics[1][7] = W_CachePatchName("TEMER8", PU_HUDGFX); -- unused
emeraldpics[2][0] = W_CachePatchName("EMBOX1", PU_HUDGFX);
emeraldpics[2][1] = W_CachePatchName("EMBOX2", PU_HUDGFX);
emeraldpics[2][2] = W_CachePatchName("EMBOX3", PU_HUDGFX);
emeraldpics[2][3] = W_CachePatchName("EMBOX4", PU_HUDGFX);
emeraldpics[2][4] = W_CachePatchName("EMBOX5", PU_HUDGFX);
emeraldpics[2][5] = W_CachePatchName("EMBOX6", PU_HUDGFX);
emeraldpics[2][6] = W_CachePatchName("EMBOX7", PU_HUDGFX);
//emeraldpics[2][7] = W_CachePatchName("EMBOX8", PU_HUDGFX); -- unused
songcreditbg = HU_CachePatch("K_SONGCR");
// cache ping gfx:
@ -914,7 +874,7 @@ void HU_Ticker(void)
hu_tick++;
hu_tick &= 7; // currently only to blink chat input cursor
if (PLAYER1INPUTDOWN(gc_scores))
if (PlayerInputDown(1, gc_scores))
hu_showscores = !chat_on;
else
hu_showscores = false;
@ -1861,7 +1821,7 @@ static void HU_DrawCEcho(void)
INT32 y = (BASEVIDHEIGHT/2)-4;
INT32 pnumlines = 0;
UINT32 realflags = cechoflags|V_PERPLAYER; // requested as part of splitscreen's stuff
UINT32 realflags = cechoflags|V_SPLITSCREEN; // requested as part of splitscreen's stuff
INT32 realalpha = (INT32)((cechoflags & V_ALPHAMASK) >> V_ALPHASHIFT);
char *line;
@ -1913,21 +1873,6 @@ static void HU_DrawCEcho(void)
--cechotimer;
}
static void HU_drawGametype(void)
{
const char *strvalue = NULL;
if (gametype < 0 || gametype >= gametypecount)
return; // not a valid gametype???
strvalue = Gametype_Names[gametype];
if (splitscreen)
V_DrawString(4, 184, 0, strvalue);
else
V_DrawString(4, 192, 0, strvalue);
}
//
// demo info stuff
//
@ -2345,19 +2290,6 @@ static void HU_DrawRankings(void)
else
V_DrawString(4, 188, hilicol|V_SNAPTOBOTTOM|V_SNAPTOLEFT, gametype_cons_t[gametype].strvalue);
if (G_GametypeHasTeams())
{
p = bmatcico;
V_DrawSmallScaledPatch(128 - SHORT(p->width)/4, 4, 0, p);
V_DrawCenteredString(128, 16, 0, va("%u", bluescore));
p = rmatcico;
V_DrawSmallScaledPatch(192 - SHORT(p->width)/4, 4, 0, p);
V_DrawCenteredString(192, 16, 0, va("%u", redscore));
}
if (gametyperules & (GTR_TIMELIMIT|GTR_POINTLIMIT))
{
if ((gametyperules & GTR_TIMELIMIT) && cv_timelimit.value && timelimitintics > 0)
@ -2459,7 +2391,7 @@ static void HU_DrawRankings(void)
#endif
}
HU_DrawTabRankings(((scorelines > 8) ? 32 : 40), 33, tab, scorelines, whiteplayer, hilicol);
K_DrawTabRankings(((scorelines > 8) ? 32 : 40), 33, tab, scorelines, whiteplayer, hilicol);
// draw spectators in a ticker across the bottom
if (netgame && G_GametypeHasSpectators())

View file

@ -60,8 +60,6 @@ enum
};
#undef X
#define HU_CROSSHAIRS 3 // maximum of 9 - see HU_Init();
extern char *shiftxform; // english translation shift table
extern char english_shiftxform[];
@ -107,7 +105,6 @@ extern patch_t *bmatcico;
extern patch_t *tagico;
extern patch_t *tallminus;
extern patch_t *tallinfin;
extern patch_t *tokenicon;
// set true whenever the tab rankings are being shown for any reason
extern boolean hu_showscores;
@ -130,10 +127,8 @@ void HU_Drawer(void);
char HU_dequeueChatChar(void);
void HU_Erase(void);
void HU_clearChatChars(void);
void HU_drawPing(INT32 x, INT32 y, UINT32 ping, boolean notext, INT32 flags); // Lat': Ping drawer for scoreboard.
void HU_drawPing(INT32 x, INT32 y, UINT32 ping, INT32 flags); // Lat': Ping drawer for scoreboard.
void HU_drawMiniPing(INT32 x, INT32 y, UINT32 ping, INT32 flags);
void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer);
void HU_DrawEmeralds(INT32 x, INT32 y, INT32 pemeralds);
INT32 HU_CreateTeamScoresTbl(playersort_t *tab, UINT32 dmtotals[]);

View file

@ -1653,7 +1653,7 @@ static boolean K_drawKartPositionFaces(void)
//
// HU_DrawTabRankings -- moved here to take advantage of kart stuff!
//
void HU_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol)
void K_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol)
{
static tic_t alagles_timer = 9;
INT32 i, rightoffset = 240;

View file

@ -24,5 +24,6 @@ void K_LoadKartHUDGraphics(void);
void K_drawKartHUD(void);
void K_drawKartFreePlay(UINT32 flashtime);
void K_drawKartTimestamp(tic_t drawtime, INT32 TX, INT32 TY, INT16 emblemmap, UINT8 mode);
void K_DrawTabRankings(INT32 x, INT32 y, playersort_t *tab, INT32 scorelines, INT32 whiteplayer, INT32 hilicol);
#endif

View file

@ -791,13 +791,13 @@ void ST_drawTitleCard(void)
else
V_DrawMappedPatch(ttlnumxpos + ttlscroll, 104 - ttlscroll, 0, actpat, colormap);
}
V_DrawLevelActNum(ttlnumxpos + ttlscroll, 104, V_PERPLAYER, actnum);
V_DrawLevelActNum(ttlnumxpos + ttlscroll, 104, V_SPLITSCREEN, actnum);
}
V_DrawLevelTitle(lvlttlxpos - ttlscroll, 80, V_PERPLAYER, lvlttl);
V_DrawLevelTitle(lvlttlxpos - ttlscroll, 80, V_SPLITSCREEN, lvlttl);
if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
V_DrawLevelTitle(zonexpos + ttlscroll, 104, V_PERPLAYER, M_GetText("Zone"));
V_DrawCenteredString(subttlxpos - ttlscroll, 135, V_PERPLAYER|V_ALLOWLOWERCASE, subttl);
V_DrawLevelTitle(zonexpos + ttlscroll, 104, V_SPLITSCREEN, M_GetText("Zone"));
V_DrawCenteredString(subttlxpos - ttlscroll, 135, V_SPLITSCREEN|V_ALLOWLOWERCASE, subttl);
lt_lasttic = lt_ticker;

View file

@ -825,7 +825,7 @@ void V_DrawCroppedPatch(fixed_t x, fixed_t y, fixed_t pscale, INT32 scrn, patch_
y -= FixedMul(SHORT(patch->topoffset)<<FRACBITS, pscale);
x -= FixedMul(SHORT(patch->leftoffset)<<FRACBITS, pscale);
if (splitscreen && (scrn & V_PERPLAYER))
if (splitscreen && (scrn & V_SPLITSCREEN))
{
fixed_t adjusty = ((scrn & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)<<(FRACBITS-1);
fdup >>= 1;
@ -1060,7 +1060,7 @@ void V_DrawFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c)
}
#endif
if (splitscreen && (c & V_PERPLAYER))
if (splitscreen && (c & V_SPLITSCREEN))
{
fixed_t adjusty = ((c & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)>>1;
h >>= 1;
@ -1246,7 +1246,7 @@ void V_DrawFillConsoleMap(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c)
return; // invis
}
if (splitscreen && (c & V_PERPLAYER))
if (splitscreen && (c & V_SPLITSCREEN))
{
fixed_t adjusty = ((c & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)>>1;
h >>= 1;
@ -1511,7 +1511,7 @@ void V_DrawFadeFill(INT32 x, INT32 y, INT32 w, INT32 h, INT32 c, UINT16 color, U
}
#endif
if (splitscreen && (c & V_PERPLAYER))
if (splitscreen && (c & V_SPLITSCREEN))
{
fixed_t adjusty = ((c & V_NOSCALESTART) ? vid.height : BASEVIDHEIGHT)>>1;
h >>= 1;

View file

@ -40,11 +40,10 @@
#include "lua_hud.h"
#include "m_random.h" // M_RandomKey
#include "g_input.h" // PLAYER1INPUTDOWN
#include "g_input.h" // PlayerInputDown
#include "k_battle.h"
#include "k_pwrlv.h"
#include "console.h" // cons_menuhighlight
#include "lua_hook.h" // IntermissionThinker hook
#include "k_grandprix.h"
#ifdef HWRENDER
@ -60,34 +59,31 @@ typedef struct
typedef union
{
INT32 *character[MAXPLAYERS]; // Winner's character #
UINT16 *color[MAXPLAYERS]; // Winner's color #
SINT8 num[MAXPLAYERS]; // Winner's player #
char *name[MAXPLAYERS]; // Winner's name
struct
{
UINT8 *color[MAXPLAYERS]; // Winner's color #
} coop;
UINT8 numplayers; // Number of players being displayed
char levelstring[64]; // holds levelnames up to 64 characters
struct
{
INT32 *character[MAXPLAYERS]; // Winner's character #
INT32 num[MAXPLAYERS]; // Winner's player #
char *name[MAXPLAYERS]; // Winner's name
INT32 numplayers; // Number of players being displayed
char levelstring[64]; // holds levelnames up to 64 characters
// SRB2kart
INT16 increase[MAXPLAYERS]; // how much did the score increase by?
UINT8 jitter[MAXPLAYERS]; // wiggle
UINT32 val[MAXPLAYERS]; // Gametype-specific value
UINT8 pos[MAXPLAYERS]; // player positions. used for ties
boolean rankingsmode; // rankings mode
boolean encore; // encore mode
} match;
// SRB2kart
INT16 increase[MAXPLAYERS]; // how much did the score increase by?
UINT8 jitter[MAXPLAYERS]; // wiggle
UINT32 val[MAXPLAYERS]; // Gametype-specific value
UINT8 pos[MAXPLAYERS]; // player positions. used for ties
boolean rankingsmode; // rankings mode
boolean encore; // encore mode
} y_data;
static y_data data;
// graphics
static patch_t *bgpatch = NULL; // INTERSCR
static patch_t *widebgpatch = NULL;
static patch_t *bgtile = NULL; // SPECTILE/SRB2BACK
static patch_t *interpic = NULL; // custom picture defined in map header
static boolean usetile;
@ -111,7 +107,6 @@ static boolean safetorender = true;
static y_buffer_t *y_buffer;
static INT32 intertic;
static INT32 tallydonetic = -1;
static INT32 endtic = -1;
static INT32 sorttic = -1;
@ -175,11 +170,11 @@ static void Y_CompareTime(INT32 i)
UINT32 val = ((players[i].pflags & PF_GAMETYPEOVER || players[i].realtime == UINT32_MAX)
? (UINT32_MAX-1) : players[i].realtime);
if (!(val < data.match.val[data.match.numplayers]))
if (!(val < data.val[data.numplayers]))
return;
data.match.val[data.match.numplayers] = val;
data.match.num[data.match.numplayers] = i;
data.val[data.numplayers] = val;
data.num[data.numplayers] = i;
}
static void Y_CompareScore(INT32 i)
@ -187,17 +182,17 @@ static void Y_CompareScore(INT32 i)
UINT32 val = ((players[i].pflags & PF_GAMETYPEOVER)
? (UINT32_MAX-1) : players[i].marescore);
if (!(data.match.val[data.match.numplayers] == UINT32_MAX
|| (!(players[i].pflags & PF_GAMETYPEOVER) && val > data.match.val[data.match.numplayers])))
if (!(data.val[data.numplayers] == UINT32_MAX
|| (!(players[i].pflags & PF_GAMETYPEOVER) && val > data.val[data.numplayers])))
return;
data.match.val[data.match.numplayers] = val;
data.match.num[data.match.numplayers] = i;
data.val[data.numplayers] = val;
data.num[data.numplayers] = i;
}
static void Y_CompareRank(INT32 i)
{
INT16 increase = ((data.match.increase[i] == INT16_MIN) ? 0 : data.match.increase[i]);
INT16 increase = ((data.increase[i] == INT16_MIN) ? 0 : data.increase[i]);
UINT32 score = players[i].score;
if (powertype != PWRLV_DISABLED)
@ -205,11 +200,11 @@ static void Y_CompareRank(INT32 i)
score = clientpowerlevels[i][powertype];
}
if (!(data.match.val[data.match.numplayers] == UINT32_MAX || (score - increase) > data.match.val[data.match.numplayers]))
if (!(data.val[data.numplayers] == UINT32_MAX || (score - increase) > data.val[data.numplayers]))
return;
data.match.val[data.match.numplayers] = (score - increase);
data.match.num[data.match.numplayers] = i;
data.val[data.numplayers] = (score - increase);
data.num[data.numplayers] = i;
}
static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
@ -221,10 +216,10 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
// Initialize variables
if (rankingsmode > 1)
;
else if ((data.match.rankingsmode = (boolean)rankingsmode))
else if ((data.rankingsmode = (boolean)rankingsmode))
{
sprintf(data.match.levelstring, "* Total Rankings *");
data.match.encore = false;
sprintf(data.levelstring, "* Total Rankings *");
data.encore = false;
}
else
{
@ -232,13 +227,13 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
if (mapheaderinfo[prevmap]->levelflags & LF_NOZONE)
{
if (mapheaderinfo[prevmap]->actnum > 0)
snprintf(data.match.levelstring,
sizeof data.match.levelstring,
snprintf(data.levelstring,
sizeof data.levelstring,
"* %s %d *",
mapheaderinfo[prevmap]->lvlttl, mapheaderinfo[prevmap]->actnum);
else
snprintf(data.match.levelstring,
sizeof data.match.levelstring,
snprintf(data.levelstring,
sizeof data.levelstring,
"* %s *",
mapheaderinfo[prevmap]->lvlttl);
}
@ -246,47 +241,47 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
{
const char *zonttl = (mapheaderinfo[prevmap]->zonttl[0] ? mapheaderinfo[prevmap]->zonttl : "ZONE");
if (mapheaderinfo[prevmap]->actnum > 0)
snprintf(data.match.levelstring,
sizeof data.match.levelstring,
snprintf(data.levelstring,
sizeof data.levelstring,
"* %s %s %d *",
mapheaderinfo[prevmap]->lvlttl, zonttl, mapheaderinfo[prevmap]->actnum);
else
snprintf(data.match.levelstring,
sizeof data.match.levelstring,
snprintf(data.levelstring,
sizeof data.levelstring,
"* %s %s *",
mapheaderinfo[prevmap]->lvlttl, zonttl);
}
data.match.levelstring[sizeof data.match.levelstring - 1] = '\0';
data.levelstring[sizeof data.levelstring - 1] = '\0';
data.match.encore = encoremode;
data.encore = encoremode;
memset(data.match.jitter, 0, sizeof (data.match.jitter));
memset(data.jitter, 0, sizeof (data.jitter));
}
for (i = 0; i < MAXPLAYERS; i++)
{
data.match.val[i] = UINT32_MAX;
data.val[i] = UINT32_MAX;
if (nospectategrief[i] != -1)
numgriefers++;
if (!playeringame[i] || players[i].spectator)
{
data.match.increase[i] = INT16_MIN;
data.increase[i] = INT16_MIN;
continue;
}
if (!rankingsmode)
data.match.increase[i] = INT16_MIN;
data.increase[i] = INT16_MIN;
numplayersingame++;
}
memset(data.match.color, 0, sizeof (data.match.color));
memset(data.match.character, 0, sizeof (data.match.character));
memset(data.color, 0, sizeof (data.color));
memset(data.character, 0, sizeof (data.character));
memset(completed, 0, sizeof (completed));
data.match.numplayers = 0;
data.numplayers = 0;
for (j = 0; j < numplayersingame; j++)
{
@ -298,45 +293,45 @@ static void Y_CalculateMatchData(UINT8 rankingsmode, void (*comparison)(INT32))
comparison(i);
}
i = data.match.num[data.match.numplayers];
i = data.num[data.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];
data.color[data.numplayers] = &players[i].skincolor;
data.character[data.numplayers] = &players[i].skin;
data.name[data.numplayers] = player_names[i];
if (data.match.numplayers && (data.match.val[data.match.numplayers] == data.match.val[data.match.numplayers-1]))
if (data.numplayers && (data.val[data.numplayers] == data.val[data.numplayers-1]))
{
data.match.pos[data.match.numplayers] = data.match.pos[data.match.numplayers-1];
data.pos[data.numplayers] = data.pos[data.numplayers-1];
}
else
{
data.match.pos[data.match.numplayers] = data.match.numplayers+1;
data.pos[data.numplayers] = data.numplayers+1;
}
if ((powertype == PWRLV_DISABLED)
&& (!rankingsmode)
&& !(players[i].pflags & PF_GAMETYPEOVER)
&& (data.match.pos[data.match.numplayers] < (numplayersingame + numgriefers)))
&& (data.pos[data.numplayers] < (numplayersingame + numgriefers)))
{
// Online rank is handled further below in this file.
data.match.increase[i] = K_CalculateGPRankPoints(data.match.pos[data.match.numplayers], numplayersingame + numgriefers);
players[i].score += data.match.increase[i];
data.increase[i] = K_CalculateGPRankPoints(data.pos[data.numplayers], numplayersingame + numgriefers);
players[i].score += data.increase[i];
}
if (demo.recording && !rankingsmode)
{
G_WriteStanding(
data.match.pos[data.match.numplayers],
data.match.name[data.match.numplayers],
*data.match.character[data.match.numplayers],
*data.match.color[data.match.numplayers],
data.match.val[data.match.numplayers]
data.pos[data.numplayers],
data.name[data.numplayers],
*data.character[data.numplayers],
*data.color[data.numplayers],
data.val[data.numplayers]
);
}
data.match.numplayers++;
data.numplayers++;
}
}
@ -423,6 +418,7 @@ void Y_CleanupScreenBuffer(void)
Z_Free(y_buffer);
y_buffer = NULL;
}
//
// Y_IntermissionDrawer
@ -516,12 +512,12 @@ dontdrawbg:
if (intertype == int_race || intertype == int_battle)
{
#define NUMFORNEWCOLUMN 8
INT32 y = 41, gutter = ((data.match.numplayers > NUMFORNEWCOLUMN) ? 0 : (BASEVIDWIDTH/2));
INT32 y = 41, gutter = ((data.numplayers > NUMFORNEWCOLUMN) ? 0 : (BASEVIDWIDTH/2));
INT32 dupadjust = (vid.width/vid.dupx), duptweak = (dupadjust - BASEVIDWIDTH)/2;
const char *timeheader;
int y2;
if (data.match.rankingsmode)
if (data.rankingsmode)
{
if (powertype == PWRLV_DISABLED)
{
@ -554,13 +550,13 @@ dontdrawbg:
}
// draw the level name
V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 12, 0, data.match.levelstring);
V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 12, 0, data.levelstring);
V_DrawFill((x-3) - duptweak, 34, dupadjust-2, 1, 0);
if (data.match.encore)
if (data.encore)
V_DrawCenteredString(-4 + x + BASEVIDWIDTH/2, 12-8, hilicol, "ENCORE MODE");
if (data.match.numplayers > NUMFORNEWCOLUMN)
if (data.numplayers > NUMFORNEWCOLUMN)
{
V_DrawFill(x+156, 24, 1, 158, 0);
V_DrawFill((x-3) - duptweak, 182, dupadjust-2, 1, 0);
@ -576,37 +572,37 @@ dontdrawbg:
V_DrawRightAlignedString(x+(BASEVIDWIDTH/2)+152, 24, hilicol, timeheader);
for (i = 0; i < data.match.numplayers; i++)
for (i = 0; i < data.numplayers; i++)
{
boolean dojitter = data.match.jitter[data.match.num[i]];
data.match.jitter[data.match.num[i]] = 0;
boolean dojitter = data.jitter[data.num[i]];
data.jitter[data.num[i]] = 0;
if (data.match.num[i] != MAXPLAYERS && playeringame[data.match.num[i]] && !players[data.match.num[i]].spectator)
if (data.num[i] != MAXPLAYERS && playeringame[data.num[i]] && !players[data.num[i]].spectator)
{
char strtime[MAXPLAYERNAME+1];
if (dojitter)
y--;
V_DrawCenteredString(x+6, y, 0, va("%d", data.match.pos[i]));
V_DrawCenteredString(x+6, y, 0, va("%d", data.pos[i]));
if (data.match.color[i])
if (data.color[i])
{
UINT8 *colormap = R_GetTranslationColormap(*data.match.character[i], *data.match.color[i], GTC_CACHE);
V_DrawMappedPatch(x+16, y-4, 0, facerankprefix[*data.match.character[i]], colormap);
UINT8 *colormap = R_GetTranslationColormap(*data.character[i], *data.color[i], GTC_CACHE);
V_DrawMappedPatch(x+16, y-4, 0, facerankprefix[*data.character[i]], colormap);
}
if (data.match.num[i] == whiteplayer)
if (data.num[i] == whiteplayer)
{
UINT8 cursorframe = (intertic / 4) % 8;
V_DrawScaledPatch(x+16, y-4, 0, W_CachePatchName(va("K_CHILI%d", cursorframe+1), PU_CACHE));
}
STRBUFCPY(strtime, data.match.name[i]);
STRBUFCPY(strtime, data.name[i]);
y2 = y;
if (netgame && playerconsole[data.match.num[i]] == 0 && server_lagless && !players[data.match.num[i]].bot)
if (netgame && playerconsole[data.num[i]] == 0 && server_lagless && !players[data.num[i]].bot)
{
static int alagles_timer = 0;
patch_t *alagles;
@ -635,61 +631,61 @@ dontdrawbg:
y2 += SHORT (alagles->height) + 1;
}
if (data.match.numplayers > NUMFORNEWCOLUMN)
V_DrawThinString(x+36, y2-1, ((data.match.num[i] == whiteplayer) ? hilicol : 0)|V_ALLOWLOWERCASE|V_6WIDTHSPACE, strtime);
if (data.numplayers > NUMFORNEWCOLUMN)
V_DrawThinString(x+36, y2-1, ((data.num[i] == whiteplayer) ? hilicol : 0)|V_ALLOWLOWERCASE|V_6WIDTHSPACE, strtime);
else
V_DrawString(x+36, y2, ((data.match.num[i] == whiteplayer) ? hilicol : 0)|V_ALLOWLOWERCASE, strtime);
V_DrawString(x+36, y2, ((data.num[i] == whiteplayer) ? hilicol : 0)|V_ALLOWLOWERCASE, strtime);
if (data.match.rankingsmode)
if (data.rankingsmode)
{
if (powertype != PWRLV_DISABLED && !clientpowerlevels[data.match.num[i]][powertype])
if (powertype != PWRLV_DISABLED && !clientpowerlevels[data.num[i]][powertype])
{
// No power level (splitscreen guests)
STRBUFCPY(strtime, "----");
}
else
{
if (data.match.increase[data.match.num[i]] != INT16_MIN)
if (data.increase[data.num[i]] != INT16_MIN)
{
snprintf(strtime, sizeof strtime, "(%d)", data.match.increase[data.match.num[i]]);
snprintf(strtime, sizeof strtime, "(%d)", data.increase[data.num[i]]);
if (data.match.numplayers > NUMFORNEWCOLUMN)
if (data.numplayers > NUMFORNEWCOLUMN)
V_DrawRightAlignedThinString(x+133+gutter, y-1, V_6WIDTHSPACE, strtime);
else
V_DrawRightAlignedString(x+118+gutter, y, 0, strtime);
}
snprintf(strtime, sizeof strtime, "%d", data.match.val[i]);
snprintf(strtime, sizeof strtime, "%d", data.val[i]);
}
if (data.match.numplayers > NUMFORNEWCOLUMN)
if (data.numplayers > NUMFORNEWCOLUMN)
V_DrawRightAlignedThinString(x+152+gutter, y-1, V_6WIDTHSPACE, strtime);
else
V_DrawRightAlignedString(x+152+gutter, y, 0, strtime);
}
else
{
if (data.match.val[i] == (UINT32_MAX-1))
V_DrawRightAlignedThinString(x+152+gutter, y-1, (data.match.numplayers > NUMFORNEWCOLUMN ? V_6WIDTHSPACE : 0), "NO CONTEST.");
if (data.val[i] == (UINT32_MAX-1))
V_DrawRightAlignedThinString(x+152+gutter, y-1, (data.numplayers > NUMFORNEWCOLUMN ? V_6WIDTHSPACE : 0), "NO CONTEST.");
else
{
if (intertype == int_race || (intertype == int_battle && battlecapsules))
{
snprintf(strtime, sizeof strtime, "%i'%02i\"%02i", G_TicsToMinutes(data.match.val[i], true),
G_TicsToSeconds(data.match.val[i]), G_TicsToCentiseconds(data.match.val[i]));
snprintf(strtime, sizeof strtime, "%i'%02i\"%02i", G_TicsToMinutes(data.val[i], true),
G_TicsToSeconds(data.val[i]), G_TicsToCentiseconds(data.val[i]));
strtime[sizeof strtime - 1] = '\0';
if (data.match.numplayers > NUMFORNEWCOLUMN)
if (data.numplayers > NUMFORNEWCOLUMN)
V_DrawRightAlignedThinString(x+152+gutter, y-1, V_6WIDTHSPACE, strtime);
else
V_DrawRightAlignedString(x+152+gutter, y, 0, strtime);
}
else
{
if (data.match.numplayers > NUMFORNEWCOLUMN)
V_DrawRightAlignedThinString(x+152+gutter, y-1, V_6WIDTHSPACE, va("%i", data.match.val[i]));
if (data.numplayers > NUMFORNEWCOLUMN)
V_DrawRightAlignedThinString(x+152+gutter, y-1, V_6WIDTHSPACE, va("%i", data.val[i]));
else
V_DrawRightAlignedString(x+152+gutter, y, 0, va("%i", data.match.val[i]));
V_DrawRightAlignedString(x+152+gutter, y, 0, va("%i", data.val[i]));
}
}
}
@ -698,7 +694,7 @@ dontdrawbg:
y++;
}
else
data.match.num[i] = MAXPLAYERS; // this should be the only field setting in this function
data.num[i] = MAXPLAYERS; // this should be the only field setting in this function
y += 18;
@ -821,59 +817,59 @@ void Y_Ticker(void)
{
if (!(multiplayer && demo.playback)) // Don't advance to rankings in replays
{
if (!data.match.rankingsmode && (intertic >= sorttic + 8))
if (!data.rankingsmode && (intertic >= sorttic + 8))
{
Y_CalculateMatchData(1, Y_CompareRank);
}
if (data.match.rankingsmode && intertic > sorttic+16+(2*TICRATE))
if (data.rankingsmode && intertic > sorttic+16+(2*TICRATE))
{
INT32 q=0,r=0;
boolean kaching = true;
for (q = 0; q < data.match.numplayers; q++)
for (q = 0; q < data.numplayers; q++)
{
if (data.match.num[q] == MAXPLAYERS
|| !data.match.increase[data.match.num[q]]
|| data.match.increase[data.match.num[q]] == INT16_MIN)
if (data.num[q] == MAXPLAYERS
|| !data.increase[data.num[q]]
|| data.increase[data.num[q]] == INT16_MIN)
{
continue;
}
r++;
data.match.jitter[data.match.num[q]] = 1;
data.jitter[data.num[q]] = 1;
if (powertype != PWRLV_DISABLED)
{
// Power Levels
if (abs(data.match.increase[data.match.num[q]]) < 10)
if (abs(data.increase[data.num[q]]) < 10)
{
// Not a lot of point increase left, just set to 0 instantly
data.match.increase[data.match.num[q]] = 0;
data.increase[data.num[q]] = 0;
}
else
{
SINT8 remove = 0; // default (should not happen)
if (data.match.increase[data.match.num[q]] < 0)
if (data.increase[data.num[q]] < 0)
remove = -10;
else if (data.match.increase[data.match.num[q]] > 0)
else if (data.increase[data.num[q]] > 0)
remove = 10;
// Remove 10 points at a time
data.match.increase[data.match.num[q]] -= remove;
data.increase[data.num[q]] -= remove;
// Still not zero, no kaching yet
if (data.match.increase[data.match.num[q]] != 0)
if (data.increase[data.num[q]] != 0)
kaching = false;
}
}
else
{
// Basic bitch points
if (data.match.increase[data.match.num[q]])
if (data.increase[data.num[q]])
{
if (--data.match.increase[data.match.num[q]])
if (--data.increase[data.num[q]])
kaching = false;
}
}
@ -890,29 +886,6 @@ void Y_Ticker(void)
}
else if (!(intertic & 1))
S_StartSound(NULL, sfx_ptally); // tally sound effect
if (data.spec.gotlife > 0 && (skip == true || data.spec.score % 50000 < oldscore % 50000)) // just passed a 50000 point mark
{
// lives are already added since tally is fake, but play the music
P_PlayLivesJingle(NULL);
--data.spec.gotlife;
}
}
else if (intertype == int_battle || intertype == int_ctf || intertype == int_teammatch) // match
{
if (!intertic) // first time only
S_ChangeMusicInternal("_inter", true); // loop it
// If a player has left or joined, recalculate scores.
if (data.match.numplayers != D_NumPlayers())
Y_CalculateMatchWinners();
}
else if (intertype == int_race || intertype == int_comp) // race
{
if (!intertic) // first time only
S_ChangeMusicInternal("_inter", true); // loop it
// Don't bother recalcing for race. It doesn't make as much sense.
}
}
@ -946,7 +919,7 @@ static void K_UpdatePowerLevels(void)
UINT16 theirpower = PWRLVRECORD_DEF;
INT16 diff = 0; // Loser PWR.LV - Winner PWR.LV
INT16 inc = 0; // Total pt increment
UINT8 ipnum = data.match.num[i];
UINT8 ipnum = data.num[i];
UINT8 jpnum;
CONS_Debug(DBG_GAMELOGIC, "Power Level Gain for player %d:\n", ipnum);
@ -961,14 +934,14 @@ static void K_UpdatePowerLevels(void)
{
boolean won = false;
jpnum = data.match.num[j];
jpnum = data.num[j];
if (i == j || ipnum == jpnum) // Same person
continue;
CONS_Debug(DBG_GAMELOGIC, "Player %d VS Player %d:\n", ipnum, jpnum);
if (data.match.val[i] == data.match.val[j]) // Tie -- neither get any points for this match up.
if (data.val[i] == data.val[j]) // Tie -- neither get any points for this match up.
{
CONS_Debug(DBG_GAMELOGIC, "TIE, no change.\n");
continue;
@ -983,12 +956,12 @@ static void K_UpdatePowerLevels(void)
if ((gametyperules & GTR_CIRCUIT))
{
if (data.match.val[i] < data.match.val[j])
if (data.val[i] < data.val[j])
won = true;
}
else
{
if (data.match.val[i] > data.match.val[j])
if (data.val[i] > data.val[j])
won = true;
}
@ -1033,7 +1006,7 @@ static void K_UpdatePowerLevels(void)
if (inc == 0)
{
data.match.increase[ipnum] = INT16_MIN;
data.increase[ipnum] = INT16_MIN;
CONS_Debug(DBG_GAMELOGIC, "Total Result: No increment, no change.\n");
continue;
}
@ -1053,8 +1026,8 @@ static void K_UpdatePowerLevels(void)
if (increment[i] == 0)
continue;
data.match.increase[i] = increment[i];
clientpowerlevels[i][powertype] += data.match.increase[i];
data.increase[i] = increment[i];
clientpowerlevels[i][powertype] += data.increase[i];
if (i == consoleplayer)
{
@ -1107,21 +1080,6 @@ void Y_StartIntermission(void)
if (!multiplayer)
{
timer = 20*TICRATE;
if (!majormods && !multiplayer && !demo.playback) // move this once we have a proper time attack screen
{
// Update visitation flags
mapvisited[gamemap-1] |= MV_BEATEN;
if (ALL7EMERALDS(emeralds))
mapvisited[gamemap-1] |= MV_ALLEMERALDS;
/*if (ultimatemode)
mapvisited[gamemap-1] |= MV_ULTIMATE;
if (data.coop.gotperfbonus)
mapvisited[gamemap-1] |= MV_PERFECT;*/
if (modeattacking)
Y_UpdateRecordReplays();
}
}
else
{
@ -1222,6 +1180,7 @@ static void Y_FollowIntermission(void)
}
#define UNLOAD(x) Z_ChangeTag(x, PU_CACHE); x = NULL
#define CLEANUP(x) x = NULL;
//
// Y_UnloadData
@ -1238,34 +1197,15 @@ static void Y_UnloadData(void)
UNLOAD(widebgpatch);
UNLOAD(bgtile);
UNLOAD(interpic);
}
/*switch (intertype)
{
case int_coop:
// unload the coop and single player patches
UNLOAD(data.coop.ttlnum);
UNLOAD(data.coop.bonuspatches[3]);
UNLOAD(data.coop.bonuspatches[2]);
UNLOAD(data.coop.bonuspatches[1]);
UNLOAD(data.coop.bonuspatches[0]);
UNLOAD(data.coop.ptotal);
break;
case int_spec:
// unload the special stage patches
//UNLOAD(data.spec.cemerald);
//UNLOAD(data.spec.nowsuper);
UNLOAD(data.spec.bonuspatch);
UNLOAD(data.spec.pscore);
UNLOAD(data.spec.pcontinues);
break;
case int_battle:
case int_race:
default:
//without this default,
//int_none, int_tag, int_chaos, and int_classicrace
//are not handled
break;
}*/
static void Y_CleanupData(void)
{
// unload the background patches
CLEANUP(bgpatch);
CLEANUP(widebgpatch);
CLEANUP(bgtile);
CLEANUP(interpic);
}
// SRB2Kart: Voting!
@ -1700,7 +1640,7 @@ void Y_VoteTicker(void)
&& !voteclient.playerinfo[i].delay
&& pickedvote == -1 && votes[p] == -1)
{
if (PlayerInputDown(i+1, gc_aimforward) || PlayerJoyAxis(i+1. AXISAIM) < 0)
if (PlayerInputDown(i+1, gc_aimforward) || PlayerJoyAxis(i+1, AXISAIM) < 0)
{
voteclient.playerinfo[i].selection--;
pressed = true;
@ -1983,14 +1923,6 @@ void Y_SetupVoteFinish(SINT8 pick, SINT8 level)
else
S_ChangeMusicInternal("voteea", true);
}
}
static void Y_CleanupData(void)
{
// unload the background patches
CLEANUP(bgpatch);
CLEANUP(bgtile);
CLEANUP(interpic);
deferredlevel = level;
pickedvote = pick;