mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-05-10 19:01:50 +00:00
Update menus to use the new input system all over...
This commit is contained in:
parent
3deba803ae
commit
aea066b70f
6 changed files with 420 additions and 335 deletions
|
|
@ -597,6 +597,10 @@ extern struct optionsmenu_s {
|
||||||
INT16 toptx;
|
INT16 toptx;
|
||||||
INT16 topty;
|
INT16 topty;
|
||||||
|
|
||||||
|
// profile garbage
|
||||||
|
boolean profilemenu; // In profile menu. (Used to know when to get the "PROFILE SETUP" button away....
|
||||||
|
profile_t *profile; // Pointer to the profile we're editing
|
||||||
|
|
||||||
// for video mode testing:
|
// for video mode testing:
|
||||||
INT32 vidm_testingmode;
|
INT32 vidm_testingmode;
|
||||||
INT32 vidm_previousmode;
|
INT32 vidm_previousmode;
|
||||||
|
|
@ -624,6 +628,7 @@ void M_HandleItemToggles(INT32 choice); // For item toggling
|
||||||
void M_EraseData(INT32 choice); // For data erasing
|
void M_EraseData(INT32 choice); // For data erasing
|
||||||
|
|
||||||
// profile selection menu
|
// profile selection menu
|
||||||
|
void M_ProfileSelectInit(INT32 choice);
|
||||||
void M_HandleProfileSelect(INT32 ch);
|
void M_HandleProfileSelect(INT32 ch);
|
||||||
|
|
||||||
// video modes menu (resolution)
|
// video modes menu (resolution)
|
||||||
|
|
|
||||||
|
|
@ -367,8 +367,8 @@ menu_t PLAY_MP_RoomSelectDef = {
|
||||||
menuitem_t OPTIONS_Main[] =
|
menuitem_t OPTIONS_Main[] =
|
||||||
{
|
{
|
||||||
|
|
||||||
{IT_STRING | IT_SUBMENU, "Profile Setup", "Remap keys & buttons to your likings.",
|
{IT_STRING | IT_CALL, "Profile Setup", "Remap keys & buttons to your likings.",
|
||||||
NULL, &OPTIONS_ProfilesDef, 0, 0},
|
NULL, M_ProfileSelectInit, 0, 0},
|
||||||
|
|
||||||
{IT_STRING | IT_SUBMENU, "Video Options", "Change video settings such as the resolution.",
|
{IT_STRING | IT_SUBMENU, "Video Options", "Change video settings such as the resolution.",
|
||||||
NULL, &OPTIONS_VideoDef, 0, 0},
|
NULL, &OPTIONS_VideoDef, 0, 0},
|
||||||
|
|
|
||||||
|
|
@ -754,6 +754,43 @@ static void M_DrawCharSelectCircle(setup_player_t *p, INT16 x, INT16 y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void M_DrawCharacterSprite(INT16 x, INT16 y, SINT8 skin, INT32 addflags, UINT8 *colormap)
|
||||||
|
{
|
||||||
|
UINT8 spr;
|
||||||
|
spritedef_t *sprdef;
|
||||||
|
spriteframe_t *sprframe;
|
||||||
|
patch_t *sprpatch;
|
||||||
|
|
||||||
|
UINT32 flags = 0;
|
||||||
|
UINT32 frame;
|
||||||
|
|
||||||
|
spr = P_GetSkinSprite2(&skins[skin], SPR2_FSTN, NULL);
|
||||||
|
sprdef = &skins[skin].sprites[spr];
|
||||||
|
|
||||||
|
if (!sprdef->numframes) // No frames ??
|
||||||
|
return; // Can't render!
|
||||||
|
|
||||||
|
frame = states[S_KART_FAST].frame & FF_FRAMEMASK;
|
||||||
|
if (frame >= sprdef->numframes) // Walking animation missing
|
||||||
|
frame = 0; // Try to use standing frame
|
||||||
|
|
||||||
|
sprframe = &sprdef->spriteframes[frame];
|
||||||
|
sprpatch = W_CachePatchNum(sprframe->lumppat[1], PU_CACHE);
|
||||||
|
|
||||||
|
if (sprframe->flip & 1) // Only for first sprite
|
||||||
|
flags |= V_FLIP; // This sprite is left/right flipped!
|
||||||
|
|
||||||
|
if (skins[skin].flags & SF_HIRES)
|
||||||
|
{
|
||||||
|
V_DrawFixedPatch(x<<FRACBITS,
|
||||||
|
y<<FRACBITS,
|
||||||
|
skins[skin].highresscale,
|
||||||
|
flags, sprpatch, colormap);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
V_DrawMappedPatch(x, y, addflags|flags, sprpatch, colormap);
|
||||||
|
}
|
||||||
|
|
||||||
static void M_DrawCharSelectSprite(UINT8 num, INT16 x, INT16 y)
|
static void M_DrawCharSelectSprite(UINT8 num, INT16 x, INT16 y)
|
||||||
{
|
{
|
||||||
setup_player_t *p = &setup_player[num];
|
setup_player_t *p = &setup_player[num];
|
||||||
|
|
@ -761,47 +798,13 @@ static void M_DrawCharSelectSprite(UINT8 num, INT16 x, INT16 y)
|
||||||
SINT8 skin = setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum];
|
SINT8 skin = setup_chargrid[p->gridx][p->gridy].skinlist[p->clonenum];
|
||||||
UINT8 color = p->color;
|
UINT8 color = p->color;
|
||||||
UINT8 *colormap = R_GetTranslationColormap(skin, color, GTC_MENUCACHE);
|
UINT8 *colormap = R_GetTranslationColormap(skin, color, GTC_MENUCACHE);
|
||||||
|
INT32 flags = 0;
|
||||||
|
|
||||||
if (skin != -1)
|
// Flip for left-side players
|
||||||
{
|
if (!(num & 1))
|
||||||
UINT8 spr;
|
flags ^= V_FLIP;
|
||||||
spritedef_t *sprdef;
|
|
||||||
spriteframe_t *sprframe;
|
|
||||||
patch_t *sprpatch;
|
|
||||||
|
|
||||||
UINT32 flags = 0;
|
M_DrawCharacterSprite(x, y, skin, flags, colormap);
|
||||||
UINT32 frame;
|
|
||||||
|
|
||||||
spr = P_GetSkinSprite2(&skins[skin], SPR2_FSTN, NULL);
|
|
||||||
sprdef = &skins[skin].sprites[spr];
|
|
||||||
|
|
||||||
if (!sprdef->numframes) // No frames ??
|
|
||||||
return; // Can't render!
|
|
||||||
|
|
||||||
frame = states[S_KART_FAST].frame & FF_FRAMEMASK;
|
|
||||||
if (frame >= sprdef->numframes) // Walking animation missing
|
|
||||||
frame = 0; // Try to use standing frame
|
|
||||||
|
|
||||||
sprframe = &sprdef->spriteframes[frame];
|
|
||||||
sprpatch = W_CachePatchNum(sprframe->lumppat[1], PU_CACHE);
|
|
||||||
|
|
||||||
if (sprframe->flip & 1) // Only for first sprite
|
|
||||||
flags |= V_FLIP; // This sprite is left/right flipped!
|
|
||||||
|
|
||||||
// Flip for left-side players
|
|
||||||
if (!(num & 1))
|
|
||||||
flags ^= V_FLIP;
|
|
||||||
|
|
||||||
if (skins[skin].flags & SF_HIRES)
|
|
||||||
{
|
|
||||||
V_DrawFixedPatch(x<<FRACBITS,
|
|
||||||
y<<FRACBITS,
|
|
||||||
skins[skin].highresscale,
|
|
||||||
flags, sprpatch, colormap);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
V_DrawMappedPatch(x, y, flags, sprpatch, colormap);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void M_DrawCharSelectPreview(UINT8 num)
|
static void M_DrawCharSelectPreview(UINT8 num)
|
||||||
|
|
@ -2016,6 +2019,7 @@ void M_DrawProfileSelect(void)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
patch_t *card = W_CachePatchName("PR_CARD", PU_CACHE);
|
patch_t *card = W_CachePatchName("PR_CARD", PU_CACHE);
|
||||||
|
patch_t *cardbot = W_CachePatchName("PR_CARDB", PU_CACHE);
|
||||||
|
|
||||||
INT32 x = 160;
|
INT32 x = 160;
|
||||||
INT32 y = 75 + menutransition.tics*16;
|
INT32 y = 75 + menutransition.tics*16;
|
||||||
|
|
@ -2028,18 +2032,26 @@ void M_DrawProfileSelect(void)
|
||||||
{
|
{
|
||||||
profile_t *p = PR_GetProfile(i);
|
profile_t *p = PR_GetProfile(i);
|
||||||
UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_BLACK, GTC_CACHE);
|
UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_BLACK, GTC_CACHE);
|
||||||
char pname[PROFILENAMELEN+1] = "EMPTY";
|
INT32 skinnum = -1;
|
||||||
|
char pname[PROFILENAMELEN+1] = "empty";
|
||||||
|
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
{
|
{
|
||||||
colormap = R_GetTranslationColormap(TC_DEFAULT, p->color, GTC_CACHE);
|
colormap = R_GetTranslationColormap(TC_DEFAULT, p->color, GTC_CACHE);
|
||||||
strcpy(pname, p->profilename);
|
strcpy(pname, p->profilename);
|
||||||
|
skinnum = R_SkinAvailable(p->skinname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Card
|
||||||
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, card, colormap);
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, card, colormap);
|
||||||
V_DrawCenteredGamemodeString(x, y+18, 0, 0, pname);
|
|
||||||
|
|
||||||
CONS_Printf("pname %s\n", pname);
|
if (skinnum > -1)
|
||||||
|
M_DrawCharacterSprite(x, y+104, skinnum, 0, colormap);
|
||||||
|
|
||||||
|
V_DrawCenteredGamemodeString(x, y+16, V_ALLOWLOWERCASE, 0, pname);
|
||||||
|
|
||||||
|
// Card bottom to overlay the skin preview
|
||||||
|
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, cardbot, colormap);
|
||||||
|
|
||||||
x += 96;
|
x += 96;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
632
src/k_menufunc.c
632
src/k_menufunc.c
|
|
@ -1146,6 +1146,11 @@ static void M_HandleMenuInput(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (menucmd[pid].delay > 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Handle menu-specific input handling. If this returns true, we skip regular input handling.
|
// Handle menu-specific input handling. If this returns true, we skip regular input handling.
|
||||||
if (currentMenu->inputroutine)
|
if (currentMenu->inputroutine)
|
||||||
{
|
{
|
||||||
|
|
@ -1154,12 +1159,6 @@ static void M_HandleMenuInput(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (menucmd[pid].delay > 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
routine = currentMenu->menuitems[itemOn].itemaction;
|
routine = currentMenu->menuitems[itemOn].itemaction;
|
||||||
|
|
||||||
// Handle menuitems which need a specific key handling
|
// Handle menuitems which need a specific key handling
|
||||||
|
|
@ -3101,6 +3100,9 @@ boolean M_OptionsQuit(void)
|
||||||
optionsmenu.toptx = 140-1;
|
optionsmenu.toptx = 140-1;
|
||||||
optionsmenu.topty = 70+1;
|
optionsmenu.topty = 70+1;
|
||||||
|
|
||||||
|
optionsmenu.profilemenu = false;
|
||||||
|
optionsmenu.profile = NULL;
|
||||||
|
|
||||||
return true; // Always allow quitting, duh.
|
return true; // Always allow quitting, duh.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3125,6 +3127,8 @@ void M_OptionsTick(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// I don't like this, it looks like shit but it needs to be done..........
|
||||||
|
|
||||||
optionsmenu.toptx = 160;
|
optionsmenu.toptx = 160;
|
||||||
optionsmenu.topty = 50;
|
optionsmenu.topty = 50;
|
||||||
}
|
}
|
||||||
|
|
@ -3142,47 +3146,56 @@ void M_OptionsTick(void)
|
||||||
boolean M_OptionsInputs(INT32 ch)
|
boolean M_OptionsInputs(INT32 ch)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (ch)
|
const UINT8 pid = 0;
|
||||||
|
(void)ch;
|
||||||
|
|
||||||
|
if (menucmd[pid].dpad_ud > 0)
|
||||||
{
|
{
|
||||||
case KEY_DOWNARROW:
|
M_SetMenuDelay(pid);
|
||||||
{
|
optionsmenu.offset += 48;
|
||||||
optionsmenu.offset += 48;
|
M_NextOpt();
|
||||||
M_NextOpt();
|
S_StartSound(NULL, sfx_menu1);
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
|
|
||||||
if (itemOn == 0)
|
if (itemOn == 0)
|
||||||
optionsmenu.offset -= currentMenu->numitems*48;
|
optionsmenu.offset -= currentMenu->numitems*48;
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case KEY_UPARROW:
|
|
||||||
{
|
|
||||||
optionsmenu.offset -= 48;
|
|
||||||
M_PrevOpt();
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
|
|
||||||
if (itemOn == currentMenu->numitems-1)
|
|
||||||
optionsmenu.offset += currentMenu->numitems*48;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case KEY_ENTER:
|
|
||||||
{
|
|
||||||
|
|
||||||
if (currentMenu->menuitems[itemOn].status & IT_TRANSTEXT)
|
|
||||||
return true; // No.
|
|
||||||
|
|
||||||
optionsmenu.optx = 140;
|
|
||||||
optionsmenu.opty = 70; // Default position for the currently selected option.
|
|
||||||
|
|
||||||
return false; // Don't eat.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (menucmd[pid].dpad_ud < 0)
|
||||||
|
{
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
|
optionsmenu.offset -= 48;
|
||||||
|
M_PrevOpt();
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
|
||||||
|
if (itemOn == currentMenu->numitems-1)
|
||||||
|
optionsmenu.offset += currentMenu->numitems*48;
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
|
{
|
||||||
|
|
||||||
|
if (currentMenu->menuitems[itemOn].status & IT_TRANSTEXT)
|
||||||
|
return true; // No.
|
||||||
|
|
||||||
|
optionsmenu.optx = 140;
|
||||||
|
optionsmenu.opty = 70; // Default position for the currently selected option.
|
||||||
|
return false; // Don't eat.
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void M_ProfileSelectInit(INT32 choice)
|
||||||
|
{
|
||||||
|
(void)choice;
|
||||||
|
optionsmenu.profilemenu = true;
|
||||||
|
|
||||||
|
M_SetupNextMenu(&OPTIONS_ProfilesDef, false);
|
||||||
|
}
|
||||||
|
|
||||||
// setup video mode menu
|
// setup video mode menu
|
||||||
void M_VideoModeMenu(INT32 choice)
|
void M_VideoModeMenu(INT32 choice)
|
||||||
{
|
{
|
||||||
|
|
@ -3272,52 +3285,72 @@ void M_HandleProfileSelect(INT32 ch)
|
||||||
// special menuitem key handler for video mode list
|
// special menuitem key handler for video mode list
|
||||||
void M_HandleVideoModes(INT32 ch)
|
void M_HandleVideoModes(INT32 ch)
|
||||||
{
|
{
|
||||||
if (optionsmenu.vidm_testingmode > 0) switch (ch)
|
|
||||||
|
const UINT8 pid = 0;
|
||||||
|
(void)ch;
|
||||||
|
|
||||||
|
if (optionsmenu.vidm_testingmode > 0)
|
||||||
{
|
{
|
||||||
// change back to the previous mode quickly
|
// change back to the previous mode quickly
|
||||||
case KEY_ESCAPE:
|
if (M_MenuButtonPressed(pid, MBT_B) || M_MenuButtonPressed(pid, MBT_Y))
|
||||||
|
{
|
||||||
setmodeneeded = optionsmenu.vidm_previousmode + 1;
|
setmodeneeded = optionsmenu.vidm_previousmode + 1;
|
||||||
optionsmenu.vidm_testingmode = 0;
|
optionsmenu.vidm_testingmode = 0;
|
||||||
break;
|
}
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
case KEY_ENTER:
|
{
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
optionsmenu.vidm_testingmode = 0; // stop testing
|
optionsmenu.vidm_testingmode = 0; // stop testing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else switch (ch)
|
else
|
||||||
{
|
{
|
||||||
case KEY_DOWNARROW:
|
if (menucmd[pid].dpad_ud < 0)
|
||||||
|
{
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
if (++optionsmenu.vidm_selected >= optionsmenu.vidm_nummodes)
|
if (++optionsmenu.vidm_selected >= optionsmenu.vidm_nummodes)
|
||||||
optionsmenu.vidm_selected = 0;
|
optionsmenu.vidm_selected = 0;
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_UPARROW:
|
M_SetMenuDelay(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (menucmd[pid].dpad_ud > 0)
|
||||||
|
{
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
if (--optionsmenu.vidm_selected < 0)
|
if (--optionsmenu.vidm_selected < 0)
|
||||||
optionsmenu.vidm_selected = optionsmenu.vidm_nummodes - 1;
|
optionsmenu.vidm_selected = optionsmenu.vidm_nummodes - 1;
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_LEFTARROW:
|
M_SetMenuDelay(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (menucmd[pid].dpad_lr < 0)
|
||||||
|
{
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
optionsmenu.vidm_selected -= optionsmenu.vidm_column_size;
|
optionsmenu.vidm_selected -= optionsmenu.vidm_column_size;
|
||||||
if (optionsmenu.vidm_selected < 0)
|
if (optionsmenu.vidm_selected < 0)
|
||||||
optionsmenu.vidm_selected = (optionsmenu.vidm_column_size*3) + optionsmenu.vidm_selected;
|
optionsmenu.vidm_selected = (optionsmenu.vidm_column_size*3) + optionsmenu.vidm_selected;
|
||||||
if (optionsmenu.vidm_selected >= optionsmenu.vidm_nummodes)
|
if (optionsmenu.vidm_selected >= optionsmenu.vidm_nummodes)
|
||||||
optionsmenu.vidm_selected = optionsmenu.vidm_nummodes - 1;
|
optionsmenu.vidm_selected = optionsmenu.vidm_nummodes - 1;
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_RIGHTARROW:
|
M_SetMenuDelay(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (menucmd[pid].dpad_lr > 0)
|
||||||
|
{
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
optionsmenu.vidm_selected += optionsmenu.vidm_column_size;
|
optionsmenu.vidm_selected += optionsmenu.vidm_column_size;
|
||||||
if (optionsmenu.vidm_selected >= (optionsmenu.vidm_column_size*3))
|
if (optionsmenu.vidm_selected >= (optionsmenu.vidm_column_size*3))
|
||||||
optionsmenu.vidm_selected %= optionsmenu.vidm_column_size;
|
optionsmenu.vidm_selected %= optionsmenu.vidm_column_size;
|
||||||
if (optionsmenu.vidm_selected >= optionsmenu.vidm_nummodes)
|
if (optionsmenu.vidm_selected >= optionsmenu.vidm_nummodes)
|
||||||
optionsmenu.vidm_selected = optionsmenu.vidm_nummodes - 1;
|
optionsmenu.vidm_selected = optionsmenu.vidm_nummodes - 1;
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_ENTER:
|
M_SetMenuDelay(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
|
{
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
if (vid.modenum == optionsmenu.modedescs[optionsmenu.vidm_selected].modenum)
|
if (vid.modenum == optionsmenu.modedescs[optionsmenu.vidm_selected].modenum)
|
||||||
SCR_SetDefaultMode();
|
SCR_SetDefaultMode();
|
||||||
|
|
@ -3328,17 +3361,16 @@ void M_HandleVideoModes(INT32 ch)
|
||||||
if (!setmodeneeded) // in case the previous setmode was not finished
|
if (!setmodeneeded) // in case the previous setmode was not finished
|
||||||
setmodeneeded = optionsmenu.modedescs[optionsmenu.vidm_selected].modenum + 1;
|
setmodeneeded = optionsmenu.modedescs[optionsmenu.vidm_selected].modenum + 1;
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
|
||||||
case KEY_ESCAPE: // this one same as M_Responder
|
else if (M_MenuButtonPressed(pid, MBT_B) || M_MenuButtonPressed(pid, MBT_Y))
|
||||||
|
{
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
if (currentMenu->prevMenu)
|
if (currentMenu->prevMenu)
|
||||||
M_SetupNextMenu(currentMenu->prevMenu, false);
|
M_SetupNextMenu(currentMenu->prevMenu, false);
|
||||||
else
|
else
|
||||||
M_ClearMenus(true);
|
M_ClearMenus(true);
|
||||||
break;
|
}
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3349,86 +3381,103 @@ void M_HandleItemToggles(INT32 choice)
|
||||||
INT16 next;
|
INT16 next;
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
boolean exitmenu = false;
|
boolean exitmenu = false;
|
||||||
|
const UINT8 pid = 0;
|
||||||
|
|
||||||
switch (choice)
|
(void) choice;
|
||||||
|
|
||||||
|
|
||||||
|
if (menucmd[pid].dpad_lr > 0)
|
||||||
{
|
{
|
||||||
case KEY_RIGHTARROW:
|
S_StartSound(NULL, sfx_menu1);
|
||||||
S_StartSound(NULL, sfx_menu1);
|
column++;
|
||||||
column++;
|
if (((column*height)+row) >= currentMenu->numitems)
|
||||||
if (((column*height)+row) >= currentMenu->numitems)
|
column = 0;
|
||||||
column = 0;
|
next = min(((column*height)+row), currentMenu->numitems-1);
|
||||||
next = min(((column*height)+row), currentMenu->numitems-1);
|
itemOn = next;
|
||||||
itemOn = next;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_LEFTARROW:
|
M_SetMenuDelay(pid);
|
||||||
S_StartSound(NULL, sfx_menu1);
|
}
|
||||||
|
|
||||||
|
else if (menucmd[pid].dpad_lr < 0)
|
||||||
|
{
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
column--;
|
||||||
|
if (column < 0)
|
||||||
|
column = width-1;
|
||||||
|
if (((column*height)+row) >= currentMenu->numitems)
|
||||||
column--;
|
column--;
|
||||||
if (column < 0)
|
next = max(((column*height)+row), 0);
|
||||||
column = width-1;
|
if (next >= currentMenu->numitems)
|
||||||
if (((column*height)+row) >= currentMenu->numitems)
|
next = currentMenu->numitems-1;
|
||||||
column--;
|
itemOn = next;
|
||||||
next = max(((column*height)+row), 0);
|
|
||||||
if (next >= currentMenu->numitems)
|
|
||||||
next = currentMenu->numitems-1;
|
|
||||||
itemOn = next;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_DOWNARROW:
|
M_SetMenuDelay(pid);
|
||||||
S_StartSound(NULL, sfx_menu1);
|
}
|
||||||
row = (row+1) % height;
|
|
||||||
if (((column*height)+row) >= currentMenu->numitems)
|
|
||||||
row = 0;
|
|
||||||
next = min(((column*height)+row), currentMenu->numitems-1);
|
|
||||||
itemOn = next;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_UPARROW:
|
else if (menucmd[pid].dpad_ud > 0)
|
||||||
S_StartSound(NULL, sfx_menu1);
|
{
|
||||||
row = (row-1) % height;
|
S_StartSound(NULL, sfx_menu1);
|
||||||
if (row < 0)
|
row = (row+1) % height;
|
||||||
row = height-1;
|
if (((column*height)+row) >= currentMenu->numitems)
|
||||||
if (((column*height)+row) >= currentMenu->numitems)
|
row = 0;
|
||||||
row--;
|
next = min(((column*height)+row), currentMenu->numitems-1);
|
||||||
next = max(((column*height)+row), 0);
|
itemOn = next;
|
||||||
if (next >= currentMenu->numitems)
|
|
||||||
next = currentMenu->numitems-1;
|
|
||||||
itemOn = next;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_ENTER:
|
M_SetMenuDelay(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (menucmd[pid].dpad_ud < 0)
|
||||||
|
{
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
row = (row-1) % height;
|
||||||
|
if (row < 0)
|
||||||
|
row = height-1;
|
||||||
|
if (((column*height)+row) >= currentMenu->numitems)
|
||||||
|
row--;
|
||||||
|
next = max(((column*height)+row), 0);
|
||||||
|
if (next >= currentMenu->numitems)
|
||||||
|
next = currentMenu->numitems-1;
|
||||||
|
itemOn = next;
|
||||||
|
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
|
{
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
#ifdef ITEMTOGGLEBOTTOMRIGHT
|
#ifdef ITEMTOGGLEBOTTOMRIGHT
|
||||||
if (currentMenu->menuitems[itemOn].mvar1 == 255)
|
if (currentMenu->menuitems[itemOn].mvar1 == 255)
|
||||||
|
{
|
||||||
|
//S_StartSound(NULL, sfx_s26d);
|
||||||
|
if (!shitsfree)
|
||||||
{
|
{
|
||||||
//S_StartSound(NULL, sfx_s26d);
|
shitsfree = TICRATE;
|
||||||
if (!shitsfree)
|
S_StartSound(NULL, sfx_itfree);
|
||||||
{
|
|
||||||
shitsfree = TICRATE;
|
|
||||||
S_StartSound(NULL, sfx_itfree);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
|
else
|
||||||
#endif
|
#endif
|
||||||
if (currentMenu->menuitems[itemOn].mvar1 == 0)
|
if (currentMenu->menuitems[itemOn].mvar1 == 0)
|
||||||
|
{
|
||||||
|
INT32 v = cv_sneaker.value;
|
||||||
|
S_StartSound(NULL, sfx_s1b4);
|
||||||
|
for (i = 0; i < NUMKARTRESULTS-1; i++)
|
||||||
{
|
{
|
||||||
INT32 v = cv_sneaker.value;
|
if (KartItemCVars[i]->value == v)
|
||||||
S_StartSound(NULL, sfx_s1b4);
|
CV_AddValue(KartItemCVars[i], 1);
|
||||||
for (i = 0; i < NUMKARTRESULTS-1; i++)
|
|
||||||
{
|
|
||||||
if (KartItemCVars[i]->value == v)
|
|
||||||
CV_AddValue(KartItemCVars[i], 1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
S_StartSound(NULL, sfx_s1ba);
|
{
|
||||||
CV_AddValue(KartItemCVars[currentMenu->menuitems[itemOn].mvar1-1], 1);
|
S_StartSound(NULL, sfx_s1ba);
|
||||||
}
|
CV_AddValue(KartItemCVars[currentMenu->menuitems[itemOn].mvar1-1], 1);
|
||||||
break;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case KEY_ESCAPE:
|
else if (M_MenuButtonPressed(pid, MBT_B) || M_MenuButtonPressed(pid, MBT_Y))
|
||||||
exitmenu = true;
|
{
|
||||||
break;
|
M_SetMenuDelay(pid);
|
||||||
|
exitmenu = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exitmenu)
|
if (exitmenu)
|
||||||
|
|
@ -3499,41 +3548,46 @@ void M_ExtrasTick(void)
|
||||||
boolean M_ExtrasInputs(INT32 ch)
|
boolean M_ExtrasInputs(INT32 ch)
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (ch)
|
const UINT8 pid = 0;
|
||||||
|
(void) ch;
|
||||||
|
|
||||||
|
if (menucmd[pid].dpad_ud > 0)
|
||||||
{
|
{
|
||||||
case KEY_DOWNARROW:
|
extrasmenu.offset += 48;
|
||||||
{
|
M_NextOpt();
|
||||||
extrasmenu.offset += 48;
|
S_StartSound(NULL, sfx_menu1);
|
||||||
M_NextOpt();
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
|
|
||||||
if (itemOn == 0)
|
if (itemOn == 0)
|
||||||
extrasmenu.offset -= currentMenu->numitems*48;
|
extrasmenu.offset -= currentMenu->numitems*48;
|
||||||
|
|
||||||
return true;
|
M_SetMenuDelay(pid);
|
||||||
}
|
return true;
|
||||||
case KEY_UPARROW:
|
}
|
||||||
{
|
|
||||||
extrasmenu.offset -= 48;
|
|
||||||
M_PrevOpt();
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
|
|
||||||
if (itemOn == currentMenu->numitems-1)
|
else if (menucmd[pid].dpad_ud < 0)
|
||||||
extrasmenu.offset += currentMenu->numitems*48;
|
{
|
||||||
|
extrasmenu.offset -= 48;
|
||||||
|
M_PrevOpt();
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
|
||||||
return true;
|
if (itemOn == currentMenu->numitems-1)
|
||||||
}
|
extrasmenu.offset += currentMenu->numitems*48;
|
||||||
case KEY_ENTER:
|
|
||||||
{
|
|
||||||
|
|
||||||
if (currentMenu->menuitems[itemOn].status & IT_TRANSTEXT)
|
M_SetMenuDelay(pid);
|
||||||
return true; // No.
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
extrasmenu.extx = 140;
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
extrasmenu.exty = 70; // Default position for the currently selected option.
|
{
|
||||||
|
|
||||||
return false; // Don't eat.
|
if (currentMenu->menuitems[itemOn].status & IT_TRANSTEXT)
|
||||||
}
|
return true; // No.
|
||||||
|
|
||||||
|
extrasmenu.extx = 140;
|
||||||
|
extrasmenu.exty = 70; // Default position for the currently selected option.
|
||||||
|
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
|
return false; // Don't eat.
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -3634,36 +3688,35 @@ void M_PauseTick(void)
|
||||||
boolean M_PauseInputs(INT32 ch)
|
boolean M_PauseInputs(INT32 ch)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
const UINT8 pid = 0;
|
||||||
|
(void) ch;
|
||||||
|
|
||||||
if (pausemenu.closing)
|
if (pausemenu.closing)
|
||||||
return true; // Don't allow inputs.
|
return true; // Don't allow inputs.
|
||||||
|
|
||||||
switch (ch)
|
if (menucmd[pid].dpad_ud < 0)
|
||||||
{
|
{
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
case KEY_UPARROW:
|
pausemenu.offset -= 50; // Each item is spaced by 50 px
|
||||||
{
|
S_StartSound(NULL, sfx_menu1);
|
||||||
pausemenu.offset -= 50; // Each item is spaced by 50 px
|
M_PrevOpt();
|
||||||
S_StartSound(NULL, sfx_menu1);
|
return true;
|
||||||
M_PrevOpt();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case KEY_DOWNARROW:
|
|
||||||
{
|
|
||||||
pausemenu.offset += 50; // Each item is spaced by 50 px
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
M_NextOpt();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case KEY_ESCAPE:
|
|
||||||
{
|
|
||||||
M_QuitPauseMenu();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (menucmd[pid].dpad_ud > 0)
|
||||||
|
{
|
||||||
|
pausemenu.offset += 50; // Each item is spaced by 50 px
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
M_NextOpt();
|
||||||
|
M_SetMenuDelay(pid);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_B) || M_MenuButtonPressed(pid, MBT_Y))
|
||||||
|
{
|
||||||
|
M_QuitPauseMenu();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3914,9 +3967,12 @@ void M_ReplayHut(INT32 choice)
|
||||||
// key handler
|
// key handler
|
||||||
void M_HandleReplayHutList(INT32 choice)
|
void M_HandleReplayHutList(INT32 choice)
|
||||||
{
|
{
|
||||||
switch (choice)
|
|
||||||
|
const UINT8 pid = 0;
|
||||||
|
(void) choice;
|
||||||
|
|
||||||
|
if (menucmd[pid].dpad_ud > 0)
|
||||||
{
|
{
|
||||||
case KEY_UPARROW:
|
|
||||||
if (dir_on[menudepthleft])
|
if (dir_on[menudepthleft])
|
||||||
dir_on[menudepthleft]--;
|
dir_on[menudepthleft]--;
|
||||||
else
|
else
|
||||||
|
|
@ -3925,9 +3981,10 @@ void M_HandleReplayHutList(INT32 choice)
|
||||||
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
extrasmenu.replayScrollTitle = 0; extrasmenu.replayScrollDelay = TICRATE; extrasmenu.replayScrollDir = 1;
|
extrasmenu.replayScrollTitle = 0; extrasmenu.replayScrollDelay = TICRATE; extrasmenu.replayScrollDir = 1;
|
||||||
break;
|
}
|
||||||
|
|
||||||
case KEY_DOWNARROW:
|
else if (menucmd[pid].dpad_ud < 0)
|
||||||
|
{
|
||||||
if (dir_on[menudepthleft] < sizedirmenu-1)
|
if (dir_on[menudepthleft] < sizedirmenu-1)
|
||||||
dir_on[menudepthleft]++;
|
dir_on[menudepthleft]++;
|
||||||
else
|
else
|
||||||
|
|
@ -3936,13 +3993,15 @@ void M_HandleReplayHutList(INT32 choice)
|
||||||
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
extrasmenu.replayScrollTitle = 0; extrasmenu.replayScrollDelay = TICRATE; extrasmenu.replayScrollDir = 1;
|
extrasmenu.replayScrollTitle = 0; extrasmenu.replayScrollDelay = TICRATE; extrasmenu.replayScrollDir = 1;
|
||||||
break;
|
}
|
||||||
|
|
||||||
case KEY_ESCAPE:
|
else if (M_MenuButtonPressed(pid, MBT_B) || M_MenuButtonPressed(pid, MBT_Y))
|
||||||
|
{
|
||||||
M_QuitReplayHut();
|
M_QuitReplayHut();
|
||||||
break;
|
}
|
||||||
|
|
||||||
case KEY_ENTER:
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
|
{
|
||||||
switch (dirmenu[dir_on[menudepthleft]][DIR_TYPE])
|
switch (dirmenu[dir_on[menudepthleft]][DIR_TYPE])
|
||||||
{
|
{
|
||||||
case EXT_FOLDER:
|
case EXT_FOLDER:
|
||||||
|
|
@ -4028,8 +4087,6 @@ void M_HandleReplayHutList(INT32 choice)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -4252,8 +4309,11 @@ static boolean M_ChangeStringAddons(INT32 choice)
|
||||||
|
|
||||||
void M_HandleAddons(INT32 choice)
|
void M_HandleAddons(INT32 choice)
|
||||||
{
|
{
|
||||||
|
const UINT8 pid = 0;
|
||||||
boolean exitmenu = false; // exit to previous menu
|
boolean exitmenu = false; // exit to previous menu
|
||||||
|
|
||||||
|
(void) choice;
|
||||||
|
|
||||||
if (M_ChangeStringAddons(choice))
|
if (M_ChangeStringAddons(choice))
|
||||||
{
|
{
|
||||||
char *tempname = NULL;
|
char *tempname = NULL;
|
||||||
|
|
@ -4270,116 +4330,122 @@ void M_HandleAddons(INT32 choice)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (choice)
|
if (menucmd[pid].dpad_ud < 0)
|
||||||
{
|
{
|
||||||
case KEY_DOWNARROW:
|
if (dir_on[menudepthleft] < sizedirmenu-1)
|
||||||
if (dir_on[menudepthleft] < sizedirmenu-1)
|
dir_on[menudepthleft]++;
|
||||||
dir_on[menudepthleft]++;
|
S_StartSound(NULL, sfx_menu1);
|
||||||
S_StartSound(NULL, sfx_menu1);
|
}
|
||||||
break;
|
else if (menucmd[pid].dpad_ud > 0)
|
||||||
case KEY_UPARROW:
|
{
|
||||||
if (dir_on[menudepthleft])
|
if (dir_on[menudepthleft])
|
||||||
dir_on[menudepthleft]--;
|
dir_on[menudepthleft]--;
|
||||||
S_StartSound(NULL, sfx_menu1);
|
S_StartSound(NULL, sfx_menu1);
|
||||||
break;
|
}
|
||||||
case KEY_PGDN:
|
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_L))
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
for (i = numaddonsshown; i && (dir_on[menudepthleft] < sizedirmenu-1); i--)
|
||||||
|
dir_on[menudepthleft]++;
|
||||||
|
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_R))
|
||||||
|
{
|
||||||
|
UINT8 i;
|
||||||
|
for (i = numaddonsshown; i && (dir_on[menudepthleft]); i--)
|
||||||
|
dir_on[menudepthleft]--;
|
||||||
|
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_A) || M_MenuButtonPressed(pid, MBT_X))
|
||||||
|
{
|
||||||
|
boolean refresh = true;
|
||||||
|
if (!dirmenu[dir_on[menudepthleft]])
|
||||||
|
S_StartSound(NULL, sfx_s26d);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (dirmenu[dir_on[menudepthleft]][DIR_TYPE])
|
||||||
{
|
{
|
||||||
UINT8 i;
|
case EXT_FOLDER:
|
||||||
for (i = numaddonsshown; i && (dir_on[menudepthleft] < sizedirmenu-1); i--)
|
strcpy(&menupath[menupathindex[menudepthleft]],dirmenu[dir_on[menudepthleft]]+DIR_STRING);
|
||||||
dir_on[menudepthleft]++;
|
if (menudepthleft)
|
||||||
}
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
break;
|
|
||||||
case KEY_PGUP:
|
|
||||||
{
|
|
||||||
UINT8 i;
|
|
||||||
for (i = numaddonsshown; i && (dir_on[menudepthleft]); i--)
|
|
||||||
dir_on[menudepthleft]--;
|
|
||||||
}
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
break;
|
|
||||||
case KEY_ENTER:
|
|
||||||
{
|
|
||||||
boolean refresh = true;
|
|
||||||
if (!dirmenu[dir_on[menudepthleft]])
|
|
||||||
S_StartSound(NULL, sfx_s26d);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
switch (dirmenu[dir_on[menudepthleft]][DIR_TYPE])
|
|
||||||
{
|
{
|
||||||
case EXT_FOLDER:
|
menupathindex[--menudepthleft] = strlen(menupath);
|
||||||
strcpy(&menupath[menupathindex[menudepthleft]],dirmenu[dir_on[menudepthleft]]+DIR_STRING);
|
menupath[menupathindex[menudepthleft]] = 0;
|
||||||
if (menudepthleft)
|
|
||||||
{
|
|
||||||
menupathindex[--menudepthleft] = strlen(menupath);
|
|
||||||
menupath[menupathindex[menudepthleft]] = 0;
|
|
||||||
|
|
||||||
if (!preparefilemenu(false, false))
|
if (!preparefilemenu(false, false))
|
||||||
{
|
{
|
||||||
S_StartSound(NULL, sfx_s224);
|
S_StartSound(NULL, sfx_s224);
|
||||||
M_StartMessage(va("%c%s\x80\nThis folder is empty.\n\n(Press a key)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), M_AddonsHeaderPath()),NULL,MM_NOTHING);
|
M_StartMessage(va("%c%s\x80\nThis folder is empty.\n\n(Press a key)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), M_AddonsHeaderPath()),NULL,MM_NOTHING);
|
||||||
menupath[menupathindex[++menudepthleft]] = 0;
|
|
||||||
|
|
||||||
if (!preparefilemenu(true, false))
|
|
||||||
{
|
|
||||||
UNEXIST;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
dir_on[menudepthleft] = 1;
|
|
||||||
}
|
|
||||||
refresh = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
S_StartSound(NULL, sfx_s26d);
|
|
||||||
M_StartMessage(va("%c%s\x80\nThis folder is too deep to navigate to!\n\n(Press a key)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), M_AddonsHeaderPath()),NULL,MM_NOTHING);
|
|
||||||
menupath[menupathindex[menudepthleft]] = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case EXT_UP:
|
|
||||||
S_StartSound(NULL, sfx_menu1);
|
|
||||||
menupath[menupathindex[++menudepthleft]] = 0;
|
menupath[menupathindex[++menudepthleft]] = 0;
|
||||||
if (!preparefilemenu(false, false))
|
|
||||||
|
if (!preparefilemenu(true, false))
|
||||||
{
|
{
|
||||||
UNEXIST;
|
UNEXIST;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
case EXT_TXT:
|
else
|
||||||
M_StartMessage(va("%c%s\x80\nThis file may not be a console script.\nAttempt to run anyways? \n\n(Press 'Y' to confirm)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), dirmenu[dir_on[menudepthleft]]+DIR_STRING),M_AddonExec,MM_YESNO);
|
{
|
||||||
break;
|
S_StartSound(NULL, sfx_menu1);
|
||||||
case EXT_CFG:
|
dir_on[menudepthleft] = 1;
|
||||||
M_AddonExec(KEY_ENTER);
|
}
|
||||||
break;
|
refresh = false;
|
||||||
case EXT_LUA:
|
|
||||||
case EXT_SOC:
|
|
||||||
case EXT_WAD:
|
|
||||||
#ifdef USE_KART
|
|
||||||
case EXT_KART:
|
|
||||||
#endif
|
|
||||||
case EXT_PK3:
|
|
||||||
COM_BufAddText(va("addfile \"%s%s\"", menupath, dirmenu[dir_on[menudepthleft]]+DIR_STRING));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
S_StartSound(NULL, sfx_s26d);
|
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
if (refresh)
|
{
|
||||||
refreshdirmenu |= REFRESHDIR_NORMAL;
|
S_StartSound(NULL, sfx_s26d);
|
||||||
|
M_StartMessage(va("%c%s\x80\nThis folder is too deep to navigate to!\n\n(Press a key)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), M_AddonsHeaderPath()),NULL,MM_NOTHING);
|
||||||
|
menupath[menupathindex[menudepthleft]] = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXT_UP:
|
||||||
|
S_StartSound(NULL, sfx_menu1);
|
||||||
|
menupath[menupathindex[++menudepthleft]] = 0;
|
||||||
|
if (!preparefilemenu(false, false))
|
||||||
|
{
|
||||||
|
UNEXIST;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXT_TXT:
|
||||||
|
M_StartMessage(va("%c%s\x80\nThis file may not be a console script.\nAttempt to run anyways? \n\n(Press 'Y' to confirm)\n", ('\x80' + (highlightflags>>V_CHARCOLORSHIFT)), dirmenu[dir_on[menudepthleft]]+DIR_STRING),M_AddonExec,MM_YESNO);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXT_CFG:
|
||||||
|
M_AddonExec(KEY_ENTER);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EXT_LUA:
|
||||||
|
case EXT_SOC:
|
||||||
|
case EXT_WAD:
|
||||||
|
#ifdef USE_KART
|
||||||
|
case EXT_KART:
|
||||||
|
#endif
|
||||||
|
case EXT_PK3:
|
||||||
|
COM_BufAddText(va("addfile \"%s%s\"", menupath, dirmenu[dir_on[menudepthleft]]+DIR_STRING));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
S_StartSound(NULL, sfx_s26d);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case KEY_ESCAPE:
|
if (refresh)
|
||||||
exitmenu = true;
|
refreshdirmenu |= REFRESHDIR_NORMAL;
|
||||||
break;
|
}
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
else if (M_MenuButtonPressed(pid, MBT_B) || M_MenuButtonPressed(pid, MBT_Y))
|
||||||
|
{
|
||||||
|
exitmenu = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (exitmenu)
|
if (exitmenu)
|
||||||
{
|
{
|
||||||
closefilemenu(true);
|
closefilemenu(true);
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,15 @@
|
||||||
static profile_t profilesList[MAXPROFILES+1]; // +1 because we're gonna add a default "GUEST' profile.
|
static profile_t profilesList[MAXPROFILES+1]; // +1 because we're gonna add a default "GUEST' profile.
|
||||||
static UINT8 numprofiles = 0; // # of loaded profiles
|
static UINT8 numprofiles = 0; // # of loaded profiles
|
||||||
|
|
||||||
profile_t PR_MakeProfile(const char *prname, const char *pname, const UINT16 col, const char *fname, UINT16 fcol, INT32 controlarray[num_gamecontrols][MAXINPUTMAPPING])
|
profile_t PR_MakeProfile(const char *prname, const char *pname, const char *sname, const UINT16 col, const char *fname, UINT16 fcol, INT32 controlarray[num_gamecontrols][MAXINPUTMAPPING])
|
||||||
{
|
{
|
||||||
profile_t new;
|
profile_t new;
|
||||||
|
|
||||||
new.version = PROFILEVER;
|
new.version = PROFILEVER;
|
||||||
|
|
||||||
strcpy(new.profilename, prname);
|
strcpy(new.profilename, prname);
|
||||||
|
|
||||||
|
strcpy(new.skinname, sname);
|
||||||
strcpy(new.playername, pname);
|
strcpy(new.playername, pname);
|
||||||
new.color = col;
|
new.color = col;
|
||||||
|
|
||||||
|
|
@ -36,10 +37,10 @@ profile_t PR_MakeProfile(const char *prname, const char *pname, const UINT16 col
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
profile_t PR_MakeProfileFromPlayer(const char *prname, const char *pname, const UINT16 col, const char *fname, UINT16 fcol, UINT8 pnum)
|
profile_t PR_MakeProfileFromPlayer(const char *prname, const char *pname, const char *sname, const UINT16 col, const char *fname, UINT16 fcol, UINT8 pnum)
|
||||||
{
|
{
|
||||||
// Generate profile using the player's gamecontrol, as we set them directly when making profiles from menus.
|
// Generate profile using the player's gamecontrol, as we set them directly when making profiles from menus.
|
||||||
profile_t new = PR_MakeProfile(prname, pname, col, fname, fcol, gamecontrol[pnum]);
|
profile_t new = PR_MakeProfile(prname, pname, sname, col, fname, fcol, gamecontrol[pnum]);
|
||||||
|
|
||||||
// Player bound cvars:
|
// Player bound cvars:
|
||||||
new.kickstartaccel = cv_kickstartaccel[pnum].value;
|
new.kickstartaccel = cv_kickstartaccel[pnum].value;
|
||||||
|
|
@ -85,7 +86,7 @@ void PR_SaveProfiles(void)
|
||||||
void PR_LoadProfiles(void)
|
void PR_LoadProfiles(void)
|
||||||
{
|
{
|
||||||
//FILE *f = NULL;
|
//FILE *f = NULL;
|
||||||
profile_t dprofile = PR_MakeProfile(PROFILEDEFAULTNAME, PROFILEDEFAULTPNAME, PROFILEDEFAULTCOLOR, PROFILEDEFAULTFOLLOWER, PROFILEDEFAULTFOLLOWERCOLOR, gamecontroldefault);
|
profile_t dprofile = PR_MakeProfile(PROFILEDEFAULTNAME, PROFILEDEFAULTPNAME, PROFILEDEFAULTSKIN, PROFILEDEFAULTCOLOR, PROFILEDEFAULTFOLLOWER, PROFILEDEFAULTFOLLOWERCOLOR, gamecontroldefault);
|
||||||
PR_AddProfile(dprofile);
|
PR_AddProfile(dprofile);
|
||||||
|
|
||||||
/*f = fopen(PROFILESFILE, "r");
|
/*f = fopen(PROFILESFILE, "r");
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
#define MAXPROFILES 16
|
#define MAXPROFILES 16
|
||||||
#define PROFILESFILE "kartprofiles.cfg"
|
#define PROFILESFILE "kartprofiles.cfg"
|
||||||
|
|
||||||
#define PROFILEDEFAULTNAME "GUEST"
|
#define PROFILEDEFAULTNAME "guest"
|
||||||
#define PROFILEDEFAULTPNAME "Player"
|
#define PROFILEDEFAULTPNAME "Player"
|
||||||
#define PROFILEDEFAULTSKIN "sonic"
|
#define PROFILEDEFAULTSKIN "sonic"
|
||||||
#define PROFILEDEFAULTCOLOR SKINCOLOR_SAPPHIRE
|
#define PROFILEDEFAULTCOLOR SKINCOLOR_SAPPHIRE
|
||||||
|
|
@ -52,6 +52,7 @@ typedef struct profile_s
|
||||||
|
|
||||||
// Player data
|
// Player data
|
||||||
char playername[MAXPLAYERNAME+1]; // Player name
|
char playername[MAXPLAYERNAME+1]; // Player name
|
||||||
|
char skinname[SKINNAMESIZE+1]; // Default Skin
|
||||||
UINT16 color; // Default player coloUr. ...But for consistency we'll name it color.
|
UINT16 color; // Default player coloUr. ...But for consistency we'll name it color.
|
||||||
char follower[SKINNAMESIZE+1]; // Follower
|
char follower[SKINNAMESIZE+1]; // Follower
|
||||||
UINT16 followercolor; // Follower color
|
UINT16 followercolor; // Follower color
|
||||||
|
|
@ -70,12 +71,12 @@ typedef struct profile_s
|
||||||
// PR_MakeProfile
|
// PR_MakeProfile
|
||||||
// Makes a profile from the supplied profile name, player name, colour, follower, followercolour and controls.
|
// Makes a profile from the supplied profile name, player name, colour, follower, followercolour and controls.
|
||||||
// The consvar values are left untouched.
|
// The consvar values are left untouched.
|
||||||
profile_t PR_MakeProfile(const char *prname, const char *pname, const UINT16 col, const char *fname, UINT16 fcol, INT32 controlarray[num_gamecontrols][MAXINPUTMAPPING]);
|
profile_t PR_MakeProfile(const char *prname, const char *pname, const char *sname, const UINT16 col, const char *fname, UINT16 fcol, INT32 controlarray[num_gamecontrols][MAXINPUTMAPPING]);
|
||||||
|
|
||||||
// PR_MakeProfileFromPlayer
|
// PR_MakeProfileFromPlayer
|
||||||
// Makes a profile_t from the supplied profile name, player name, colour, follower and followercolour.
|
// Makes a profile_t from the supplied profile name, player name, colour, follower and followercolour.
|
||||||
// The last argument is a player number to read cvars from; as for convenience, cvars will be set directly when making a profile (since loading another one will overwrite them, this will be inconsequential)
|
// The last argument is a player number to read cvars from; as for convenience, cvars will be set directly when making a profile (since loading another one will overwrite them, this will be inconsequential)
|
||||||
profile_t PR_MakeProfileFromPlayer(const char *prname, const char *pname, const UINT16 col, const char *fname, UINT16 fcol, UINT8 pnum);
|
profile_t PR_MakeProfileFromPlayer(const char *prname, const char *pname, const char *sname, const UINT16 col, const char *fname, UINT16 fcol, UINT8 pnum);
|
||||||
|
|
||||||
// PR_AddProfile(profile_t p)
|
// PR_AddProfile(profile_t p)
|
||||||
// Adds a profile to profilesList and increments numprofiles.
|
// Adds a profile to profilesList and increments numprofiles.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue