* 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:
toaster 2018-06-30 16:01:03 +01:00
parent 9a9e1ad81e
commit ba779c6657
5 changed files with 411 additions and 350 deletions

View File

@ -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)

File diff suppressed because it is too large Load Diff

View File

@ -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\
}

View File

@ -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])

View File

@ -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);
}
/*