mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-31 05:20:51 +00:00
* Completely revamp a bunch of menu stuff!
* Improve control menus significantly - a more layout-neutral, gameplay importance based order, with spacing, and less depth to get to the important stuff. * Port over the improved MP main menu from internal, including flattening the IP connect onto its level. * Allow for selecting the number of splitscreen players using a menu option, rather than three seperate menu choices. * Improve the layout of all of the level/gametype select menus slightly. * (unrelated) Make fourth player area in 3p splitscreen use the tiling background instead of a pure black area. * (unrelated) Tweak minimap ordering slightly.
This commit is contained in:
parent
9a9e1ad81e
commit
ba779c6657
5 changed files with 411 additions and 350 deletions
49
src/k_kart.c
49
src/k_kart.c
|
@ -4885,6 +4885,7 @@ static void K_drawKartMinimap(void)
|
|||
INT32 i = 0;
|
||||
INT32 x, y;
|
||||
INT32 minimaptrans, splitflags = (splitscreen ? 0 : V_SNAPTORIGHT);
|
||||
boolean dop1later = false;
|
||||
|
||||
// Draw the HUD only when playing in a level.
|
||||
// hu_stuff needs this, unlike st_stuff.
|
||||
|
@ -4936,37 +4937,39 @@ static void K_drawKartMinimap(void)
|
|||
x -= SHORT(AutomapPic->leftoffset);
|
||||
y -= SHORT(AutomapPic->topoffset);
|
||||
|
||||
// Player's tiny icons on the Automap.
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
// Player's tiny icons on the Automap. (drawn opposite direction so player 1 is drawn last in splitscreen)
|
||||
for (i = MAXPLAYERS-1; i >= 0; i--)
|
||||
{
|
||||
if (i == displayplayer && !splitscreen)
|
||||
continue; // Do displayplayer later
|
||||
if (players[i].mo && !players[i].spectator)
|
||||
if (!playeringame[i])
|
||||
continue;
|
||||
if (!players[i].mo || players[i].spectator)
|
||||
continue;
|
||||
|
||||
if (!splitscreen && i == displayplayer)
|
||||
{
|
||||
if (G_BattleGametype() && players[i].kartstuff[k_balloon] <= 0)
|
||||
continue;
|
||||
|
||||
if (players[i].kartstuff[k_hyudorotimer] > 0)
|
||||
{
|
||||
if ((players[i].kartstuff[k_hyudorotimer] < 1*TICRATE/2
|
||||
|| players[i].kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2))
|
||||
&& !(leveltime & 1))
|
||||
;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
|
||||
K_drawKartMinimapHead(&players[i], x, y, splitflags, AutomapPic);
|
||||
dop1later = true; // Do displayplayer later
|
||||
continue;
|
||||
}
|
||||
|
||||
if (G_BattleGametype() && players[i].kartstuff[k_balloon] <= 0)
|
||||
continue;
|
||||
if (players[i].kartstuff[k_hyudorotimer] > 0)
|
||||
{
|
||||
if (!((players[i].kartstuff[k_hyudorotimer] < 1*TICRATE/2
|
||||
|| players[i].kartstuff[k_hyudorotimer] > hyudorotime-(1*TICRATE/2))
|
||||
&& !(leveltime & 1)))
|
||||
continue;
|
||||
}
|
||||
|
||||
K_drawKartMinimapHead(&players[i], x, y, splitflags, AutomapPic);
|
||||
}
|
||||
|
||||
if (splitscreen)
|
||||
return; // Don't need this for splits
|
||||
if (!dop1later)
|
||||
return; // Don't need this
|
||||
|
||||
splitflags &= ~V_HUDTRANSHALF;
|
||||
splitflags |= V_HUDTRANS;
|
||||
if (stplyr->mo && !stplyr->spectator)
|
||||
K_drawKartMinimapHead(stplyr, x, y, splitflags, AutomapPic);
|
||||
K_drawKartMinimapHead(stplyr, x, y, splitflags, AutomapPic);
|
||||
}
|
||||
|
||||
static void K_drawBattleFullscreen(void)
|
||||
|
|
657
src/m_menu.c
657
src/m_menu.c
File diff suppressed because it is too large
Load diff
|
@ -267,7 +267,7 @@ void Screenshot_option_Onchange(void);
|
|||
prev,\
|
||||
source,\
|
||||
M_DrawServerMenu,\
|
||||
27,40,\
|
||||
42,40,\
|
||||
0,\
|
||||
NULL\
|
||||
}
|
||||
|
@ -279,7 +279,7 @@ void Screenshot_option_Onchange(void);
|
|||
prev,\
|
||||
source,\
|
||||
M_DrawControl,\
|
||||
24, 40,\
|
||||
26, 40,\
|
||||
0,\
|
||||
NULL\
|
||||
}
|
||||
|
|
21
src/r_main.c
21
src/r_main.c
|
@ -1346,15 +1346,32 @@ void R_RenderPlayerView(player_t *player)
|
|||
else
|
||||
viewnumber = 0;
|
||||
|
||||
if (cv_homremoval.value && player == &players[displayplayer]) // if this is display player 1
|
||||
// if this is display player 1
|
||||
if (cv_homremoval.value && player == &players[displayplayer])
|
||||
{
|
||||
if (cv_homremoval.value == 1)
|
||||
V_DrawFill(0, 0, vid.width, vid.height, 31); // No HOM effect!
|
||||
else //'development' HOM removal -- makes it blindingly obvious if HOM is spotted.
|
||||
V_DrawFill(0, 0, vid.width, vid.height, 128+(timeinmap&15));
|
||||
}
|
||||
// Draw over the fourth screen so you don't have to stare at a HOM :V
|
||||
else if (splitscreen == 2 && player == &players[thirddisplayplayer])
|
||||
V_DrawFill(viewwidth, viewheight, viewwidth, viewheight, 31|V_NOSCALESTART); // Draw over the fourth screen so you don't have to stare at a HOM :V
|
||||
#if 1
|
||||
{
|
||||
// V_DrawPatchFill, but for the fourth screen only
|
||||
patch_t *pat = W_CachePatchName("SRB2BACK", PU_CACHE);
|
||||
INT32 dupz = (vid.dupx < vid.dupy ? vid.dupx : vid.dupy);
|
||||
INT32 x, y, pw = SHORT(pat->width) * dupz, ph = SHORT(pat->height) * dupz;
|
||||
|
||||
for (x = vid.width>>1; x < vid.width; x += pw)
|
||||
{
|
||||
for (y = vid.height>>1; y < vid.height; y += ph)
|
||||
V_DrawScaledPatch(x, y, V_NOSCALESTART, pat);
|
||||
}
|
||||
}
|
||||
#else
|
||||
V_DrawFill(viewwidth, viewheight, viewwidth, viewheight, 31|V_NOSCALESTART);
|
||||
#endif
|
||||
|
||||
// load previous saved value of skyVisible for the player
|
||||
if (splitscreen > 2 && player == &players[fourthdisplayplayer])
|
||||
|
|
|
@ -760,8 +760,9 @@ static void ST_drawLevelTitle(void)
|
|||
INT32 dupcalc = (vid.width/vid.dupx);
|
||||
UINT8 gtc = G_GetGametypeColor(gametype);
|
||||
INT32 sub = 0;
|
||||
INT32 lvlttly = 145;
|
||||
INT32 zoney = 169;
|
||||
INT32 bary = (splitscreen)
|
||||
? BASEVIDHEIGHT/2
|
||||
: 163;
|
||||
INT32 lvlw;
|
||||
|
||||
if (timeinmap > 113)
|
||||
|
@ -797,30 +798,29 @@ static void ST_drawLevelTitle(void)
|
|||
|
||||
{
|
||||
dupcalc = (dupcalc - BASEVIDWIDTH)>>1;
|
||||
INT32 h = lvlttly + V_LevelNameHeight(lvlttl) + 2;
|
||||
V_DrawFill(sub - dupcalc, h+9, ttlnumxpos+dupcalc + 1, 2, 31);
|
||||
V_DrawDiag(sub + ttlnumxpos + 1, h, 11, 31);
|
||||
V_DrawFill(sub - dupcalc, h, ttlnumxpos+dupcalc, 10, gtc);
|
||||
V_DrawDiag(sub + ttlnumxpos, h, 10, gtc);
|
||||
V_DrawFill(sub - dupcalc, bary+9, ttlnumxpos+dupcalc + 1, 2, 31);
|
||||
V_DrawDiag(sub + ttlnumxpos + 1, bary, 11, 31);
|
||||
V_DrawFill(sub - dupcalc, bary, ttlnumxpos+dupcalc, 10, gtc);
|
||||
V_DrawDiag(sub + ttlnumxpos, bary, 10, gtc);
|
||||
if (subttl[0])
|
||||
V_DrawRightAlignedString(sub + zonexpos - 8, h+1, V_ALLOWLOWERCASE, va("%s - %s", gametype_cons_t[gametype].strvalue, subttl));
|
||||
V_DrawRightAlignedString(sub + zonexpos - 8, bary+1, V_ALLOWLOWERCASE, subttl);
|
||||
else
|
||||
V_DrawRightAlignedString(sub + zonexpos - 8, h+1, V_ALLOWLOWERCASE, gametype_cons_t[gametype].strvalue);
|
||||
V_DrawRightAlignedString(sub + zonexpos - 8, bary+1, V_ALLOWLOWERCASE, va("%s Mode", gametype_cons_t[gametype].strvalue));
|
||||
}
|
||||
|
||||
ttlnumxpos += sub;
|
||||
lvlttlxpos += sub;
|
||||
zonexpos += sub;
|
||||
|
||||
if (strlen(actnum) > 0)
|
||||
V_DrawLevelTitle(ttlnumxpos+12, zoney, 0, actnum);
|
||||
|
||||
V_DrawLevelTitle(lvlttlxpos, lvlttly, 0, lvlttl);
|
||||
V_DrawLevelTitle(lvlttlxpos, bary-18, 0, lvlttl);
|
||||
|
||||
if (strlen(zonttl) > 0)
|
||||
V_DrawLevelTitle(zonexpos, zoney, 0, zonttl);
|
||||
V_DrawLevelTitle(zonexpos, bary+6, 0, zonttl);
|
||||
else if (!(mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
|
||||
V_DrawLevelTitle(zonexpos, zoney, 0, M_GetText("ZONE"));
|
||||
V_DrawLevelTitle(zonexpos, bary+6, 0, M_GetText("ZONE"));
|
||||
|
||||
if (strlen(actnum) > 0)
|
||||
V_DrawLevelTitle(ttlnumxpos+12, bary+6, 0, actnum);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Reference in a new issue