mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Chengi's menu selectors
- Menu BG image is defined by menu option - Menu BG image slides in - Gamemode menu options are now like Chengi's mockup
This commit is contained in:
parent
521eff868c
commit
8289bf252f
7 changed files with 139 additions and 83 deletions
|
|
@ -268,10 +268,11 @@ void HU_Init(void)
|
|||
PR ("MKFNT");
|
||||
REG;
|
||||
|
||||
ADIM (AZ);
|
||||
ADIM (LT);
|
||||
PR ("GAMEM");
|
||||
REG;
|
||||
|
||||
ADIM (AZ);
|
||||
PR ("FILEF");
|
||||
REG;
|
||||
|
||||
|
|
|
|||
|
|
@ -365,6 +365,7 @@ void M_ReplayHut(INT32 choice);
|
|||
|
||||
// M_MENUDRAW.C
|
||||
|
||||
void M_UpdateMenuBGImage(boolean forceReset);
|
||||
void M_DrawMenuBackground(void);
|
||||
void M_DrawMenuForeground(void);
|
||||
void M_Drawer(void);
|
||||
|
|
|
|||
|
|
@ -18,17 +18,21 @@
|
|||
// ---------
|
||||
menuitem_t MainMenu[] =
|
||||
{
|
||||
{IT_STRING | IT_CALL, "Play", "Cut to the chase and start the race!",
|
||||
NULL, M_CharacterSelectInit, 0, 0},
|
||||
{IT_STRING | IT_CALL, "Play",
|
||||
"Cut to the chase and start the race!", NULL,
|
||||
M_CharacterSelectInit, 0, 0},
|
||||
|
||||
{IT_STRING, "Extra", "Check out some bonus features.",
|
||||
NULL, NULL, 0, 0},
|
||||
{IT_STRING, "Extra",
|
||||
"Check out some bonus features.", "MENUI001",
|
||||
NULL, 0, 0},
|
||||
|
||||
{IT_STRING, "Option", "Configure your controls, settings, and preferences.",
|
||||
NULL, NULL, 0, 0},
|
||||
{IT_STRING, "Option",
|
||||
"Configure your controls, settings, and preferences.", NULL,
|
||||
NULL, 0, 0},
|
||||
|
||||
{IT_STRING | IT_CALL, "Quit", "Exit SRB2Kart.",
|
||||
NULL, M_QuitSRB2, 0, 0},
|
||||
{IT_STRING | IT_CALL, "Quit",
|
||||
"Exit \"Dr. Robotnik's Ring Racers\".", NULL,
|
||||
M_QuitSRB2, 0, 0},
|
||||
};
|
||||
|
||||
menu_t MainDef = KARTGAMEMODEMENU(MainMenu, NULL);
|
||||
|
|
|
|||
108
src/k_menudraw.c
108
src/k_menudraw.c
|
|
@ -86,6 +86,32 @@ int snprintf(char *str, size_t n, const char *fmt, ...);
|
|||
#define SERVERS_PER_PAGE 11
|
||||
|
||||
static UINT32 bgTextScroll = 0;
|
||||
static UINT32 bgImageScroll = 0;
|
||||
static char bgImageName[9];
|
||||
|
||||
#define MENUBG_TEXTSCROLL 6
|
||||
#define MENUBG_IMAGESCROLL 32
|
||||
|
||||
void M_UpdateMenuBGImage(boolean forceReset)
|
||||
{
|
||||
char oldName[9];
|
||||
|
||||
memcpy(oldName, bgImageName, 9);
|
||||
|
||||
if (currentMenu->menuitems[itemOn].patch)
|
||||
{
|
||||
sprintf(bgImageName, "%s", currentMenu->menuitems[itemOn].patch);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(bgImageName, "MENUI000");
|
||||
}
|
||||
|
||||
if (forceReset == false && strcmp(bgImageName, oldName))
|
||||
{
|
||||
bgImageScroll = (BASEVIDWIDTH / 2) / MENUBG_IMAGESCROLL;
|
||||
}
|
||||
}
|
||||
|
||||
void M_DrawMenuBackground(void)
|
||||
{
|
||||
|
|
@ -95,14 +121,15 @@ void M_DrawMenuBackground(void)
|
|||
INT32 text1loop = SHORT(text1->height);
|
||||
INT32 text2loop = SHORT(text2->width);
|
||||
|
||||
fixed_t text1scroll = -(bgTextScroll % text1loop) * FRACUNIT;
|
||||
fixed_t text2scroll = -(bgTextScroll % text2loop) * FRACUNIT;
|
||||
fixed_t text1scroll = -((bgTextScroll * MENUBG_TEXTSCROLL) % text1loop) * FRACUNIT;
|
||||
fixed_t text2scroll = -((bgTextScroll * MENUBG_TEXTSCROLL) % text2loop) * FRACUNIT;
|
||||
|
||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUBG4", PU_CACHE), NULL);
|
||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUBG2", PU_CACHE), NULL);
|
||||
V_DrawFixedPatch(0, 0, FRACUNIT, 0, W_CachePatchName("MENUBG1", PU_CACHE), NULL);
|
||||
|
||||
V_DrawFixedPatch(0, BASEVIDHEIGHT * FRACUNIT, FRACUNIT, V_TRANSLUCENT, W_CachePatchName("MENUBG5", PU_CACHE), NULL);
|
||||
V_DrawFixedPatch(-(bgImageScroll * MENUBG_IMAGESCROLL) * FRACUNIT, 0, FRACUNIT, 0, W_CachePatchName("MENUBG1", PU_CACHE), NULL);
|
||||
V_DrawFixedPatch(-(bgImageScroll * MENUBG_IMAGESCROLL) * FRACUNIT, 0, FRACUNIT, 0, W_CachePatchName(bgImageName, PU_CACHE), NULL);
|
||||
|
||||
V_DrawFixedPatch(0, (BASEVIDHEIGHT + 16) * FRACUNIT, FRACUNIT, V_TRANSLUCENT, W_CachePatchName("MENUBG2", PU_CACHE), NULL);
|
||||
|
||||
V_DrawFixedPatch(text2scroll, (BASEVIDHEIGHT-8) * FRACUNIT,
|
||||
FRACUNIT, V_TRANSLUCENT, text2, NULL);
|
||||
|
|
@ -114,7 +141,12 @@ void M_DrawMenuBackground(void)
|
|||
V_DrawFixedPatch(8 * FRACUNIT, text1scroll + (text1loop * FRACUNIT),
|
||||
FRACUNIT, V_TRANSLUCENT, text1, NULL);
|
||||
|
||||
bgTextScroll += 8;
|
||||
bgTextScroll++;
|
||||
|
||||
if (bgImageScroll > 0)
|
||||
{
|
||||
bgImageScroll--;
|
||||
}
|
||||
}
|
||||
|
||||
void M_DrawMenuForeground(void)
|
||||
|
|
@ -214,26 +246,6 @@ static void M_DrawMenuTooltips(void)
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// M_DrawMenuPreviews
|
||||
//
|
||||
// Draw a box with a preview image of the current option
|
||||
//
|
||||
static void M_DrawMenuPreviews(void)
|
||||
{
|
||||
V_DrawFixedPatch(172<<FRACBITS, 29<<FRACBITS, FRACUNIT, 0, W_CachePatchName("MENUPREV", PU_CACHE), NULL);
|
||||
|
||||
if (currentMenu->menuitems[itemOn].patch == NULL)
|
||||
{
|
||||
patch_t *st = W_CachePatchName(va("MIMGST0%d", (skullAnimCounter % 4) + 1), PU_CACHE);
|
||||
V_DrawFixedPatch(181<<FRACBITS, 39<<FRACBITS, FRACUNIT, 0, st, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
V_DrawFixedPatch(181<<FRACBITS, 39<<FRACBITS, FRACUNIT, 0, W_CachePatchName(currentMenu->menuitems[itemOn].patch, PU_CACHE), NULL);
|
||||
}
|
||||
}
|
||||
|
||||
// Converts a string into question marks.
|
||||
// Used for the secrets menu, to hide yet-to-be-unlocked stuff.
|
||||
static const char *M_CreateSecretMenuOption(const char *str)
|
||||
|
|
@ -404,6 +416,11 @@ void M_DrawGenericMenu(void)
|
|||
}
|
||||
}
|
||||
|
||||
#define GM_STARTX 128
|
||||
#define GM_STARTY 80
|
||||
#define GM_XOFFSET 17
|
||||
#define GM_YOFFSET 34
|
||||
|
||||
//
|
||||
// M_DrawKartGamemodeMenu
|
||||
//
|
||||
|
|
@ -411,33 +428,52 @@ void M_DrawGenericMenu(void)
|
|||
//
|
||||
void M_DrawKartGamemodeMenu(void)
|
||||
{
|
||||
INT16 i, x = 170;
|
||||
UINT8 n = currentMenu->numitems-1;
|
||||
INT32 i, x = GM_STARTX - ((GM_XOFFSET / 2) * (n-1)), y = GM_STARTY - ((GM_YOFFSET / 2) * (n-1));
|
||||
|
||||
M_DrawMenuTooltips();
|
||||
M_DrawMenuPreviews();
|
||||
|
||||
if (menutransition.tics)
|
||||
x -= 24 * menutransition.tics;
|
||||
{
|
||||
x += 24 * menutransition.tics;
|
||||
}
|
||||
|
||||
for (i = 0; i < currentMenu->numitems; i++)
|
||||
{
|
||||
INT16 y;
|
||||
if (i >= n)
|
||||
{
|
||||
x = GM_STARTX + (GM_XOFFSET * 5 / 2);
|
||||
y = GM_STARTY + (GM_YOFFSET * 5 / 2);
|
||||
|
||||
if (i == n)
|
||||
y = 160;
|
||||
else
|
||||
y = 80 - (16 * (n-1)) + (32 * i);
|
||||
if (menutransition.tics)
|
||||
{
|
||||
x += 24 * menutransition.tics;
|
||||
}
|
||||
}
|
||||
|
||||
switch (currentMenu->menuitems[i].status & IT_DISPLAY)
|
||||
{
|
||||
case IT_STRING:
|
||||
{
|
||||
UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, (i == itemOn) ? SKINCOLOR_PLAGUE : SKINCOLOR_PIGEON, GTC_CACHE);
|
||||
V_DrawRightAlignedGamemodeString(x, y, 0, colormap, currentMenu->menuitems[i].text);
|
||||
UINT8 *colormap = NULL;
|
||||
|
||||
if (i == itemOn)
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_CACHE);
|
||||
}
|
||||
else
|
||||
{
|
||||
colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_MOSS, GTC_CACHE);
|
||||
}
|
||||
|
||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, W_CachePatchName("MENUPLTR", PU_CACHE), colormap);
|
||||
V_DrawGamemodeString(x + 16, y - 3, V_ALLOWLOWERCASE, colormap, currentMenu->menuitems[i].text);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
x += GM_XOFFSET;
|
||||
y += GM_YOFFSET;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -663,6 +663,8 @@ static void M_NextOpt(void)
|
|||
else
|
||||
itemOn++;
|
||||
} while (oldItemOn != itemOn && (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_SPACE);
|
||||
|
||||
M_UpdateMenuBGImage(false);
|
||||
}
|
||||
|
||||
static void M_PrevOpt(void)
|
||||
|
|
@ -679,6 +681,8 @@ static void M_PrevOpt(void)
|
|||
else
|
||||
itemOn--;
|
||||
} while (oldItemOn != itemOn && (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_SPACE);
|
||||
|
||||
M_UpdateMenuBGImage(false);
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -1411,6 +1415,8 @@ void M_SetupNextMenu(menu_t *menudef, boolean notransition)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
M_UpdateMenuBGImage(false);
|
||||
}
|
||||
|
||||
void M_GoBack(INT32 choice)
|
||||
|
|
@ -1542,6 +1548,8 @@ void M_Init(void)
|
|||
CV_RegisterVar(&cv_dummyscramble);
|
||||
CV_RegisterVar(&cv_dummystaff);
|
||||
|
||||
M_UpdateMenuBGImage(true);
|
||||
|
||||
#if 0
|
||||
#ifdef HWRENDER
|
||||
// Permanently hide some options based on render mode
|
||||
|
|
|
|||
|
|
@ -1973,6 +1973,8 @@ void V_DrawStringScaled(
|
|||
}
|
||||
break;
|
||||
case GM_FONT:
|
||||
spacew = 6;
|
||||
break;
|
||||
case FILE_FONT:
|
||||
spacew = 0;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -571,51 +571,53 @@ void Y_IntermissionDrawer(void)
|
|||
}
|
||||
|
||||
skiptallydrawer:
|
||||
if (!LUA_HudEnabled(hud_intermissionmessages))
|
||||
return;
|
||||
|
||||
if (timer && grandprixinfo.gp == false)
|
||||
if (LUA_HudEnabled(hud_intermissionmessages))
|
||||
{
|
||||
char *string;
|
||||
INT32 tickdown = (timer+1)/TICRATE;
|
||||
|
||||
if (multiplayer && demo.playback)
|
||||
string = va("Replay ends in %d", tickdown);
|
||||
else
|
||||
string = va("%s starts in %d", cv_advancemap.string, tickdown);
|
||||
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol,
|
||||
string);
|
||||
}
|
||||
|
||||
if ((demo.recording || demo.savemode == DSM_SAVED) && !demo.playback)
|
||||
switch (demo.savemode)
|
||||
if (timer && grandprixinfo.gp == false)
|
||||
{
|
||||
case DSM_NOTSAVING:
|
||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Look Backward: Save replay");
|
||||
break;
|
||||
char *string;
|
||||
INT32 tickdown = (timer+1)/TICRATE;
|
||||
|
||||
case DSM_SAVED:
|
||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Replay saved!");
|
||||
break;
|
||||
if (multiplayer && demo.playback)
|
||||
string = va("Replay ends in %d", tickdown);
|
||||
else
|
||||
string = va("%s starts in %d", cv_advancemap.string, tickdown);
|
||||
|
||||
case DSM_TITLEENTRY:
|
||||
ST_DrawDemoTitleEntry();
|
||||
break;
|
||||
|
||||
default: // Don't render any text here
|
||||
break;
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, 188, hilicol,
|
||||
string);
|
||||
}
|
||||
|
||||
//if ((intertic/TICRATE) & 1) // Make it obvious that scrambling is happening next round. (OR NOT, I GUESS)
|
||||
//{
|
||||
/*if (cv_scrambleonchange.value && cv_teamscramble.value)
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT/2, hilicol, M_GetText("Teams will be scrambled next round!"));*/
|
||||
if ((demo.recording || demo.savemode == DSM_SAVED) && !demo.playback)
|
||||
switch (demo.savemode)
|
||||
{
|
||||
case DSM_NOTSAVING:
|
||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Look Backward: Save replay");
|
||||
break;
|
||||
|
||||
if (speedscramble != -1 && speedscramble != gamespeed)
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24, hilicol|V_ALLOWLOWERCASE|V_SNAPTOBOTTOM,
|
||||
va(M_GetText("Next race will be %s Speed!"), kartspeed_cons_t[1+speedscramble].strvalue));
|
||||
//}
|
||||
case DSM_SAVED:
|
||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Replay saved!");
|
||||
break;
|
||||
|
||||
case DSM_TITLEENTRY:
|
||||
ST_DrawDemoTitleEntry();
|
||||
break;
|
||||
|
||||
default: // Don't render any text here
|
||||
break;
|
||||
}
|
||||
|
||||
//if ((intertic/TICRATE) & 1) // Make it obvious that scrambling is happening next round. (OR NOT, I GUESS)
|
||||
//{
|
||||
/*if (cv_scrambleonchange.value && cv_teamscramble.value)
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT/2, hilicol, M_GetText("Teams will be scrambled next round!"));*/
|
||||
|
||||
if (speedscramble != -1 && speedscramble != gamespeed)
|
||||
V_DrawCenteredString(BASEVIDWIDTH/2, BASEVIDHEIGHT-24, hilicol|V_ALLOWLOWERCASE|V_SNAPTOBOTTOM,
|
||||
va(M_GetText("Next race will be %s Speed!"), kartspeed_cons_t[1+speedscramble].strvalue));
|
||||
//}
|
||||
}
|
||||
|
||||
M_DrawMenuForeground();
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -1010,6 +1012,8 @@ void Y_StartIntermission(void)
|
|||
|
||||
bgpatch = W_CachePatchName("MENUBG", PU_STATIC);
|
||||
widebgpatch = W_CachePatchName("WEIRDRES", PU_STATIC);
|
||||
|
||||
M_UpdateMenuBGImage(true);
|
||||
}
|
||||
|
||||
// ======
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue