mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
M_HandleStaffReplay, M_DrawTimeAttack: Re-support selecting staff replays from the menu
This commit is contained in:
parent
a2fadd2ff4
commit
6dd32deecb
4 changed files with 70 additions and 57 deletions
|
|
@ -469,7 +469,6 @@ void Moviemode_option_Onchange(void);
|
||||||
extern menu_t *currentMenu;
|
extern menu_t *currentMenu;
|
||||||
extern menu_t *restoreMenu;
|
extern menu_t *restoreMenu;
|
||||||
|
|
||||||
extern char dummystaffname[22];
|
|
||||||
extern consvar_t cv_dummystaff;
|
extern consvar_t cv_dummystaff;
|
||||||
|
|
||||||
extern INT16 itemOn; // menu item skull is on, Hack by Tails 09-18-2002
|
extern INT16 itemOn; // menu item skull is on, Hack by Tails 09-18-2002
|
||||||
|
|
|
||||||
|
|
@ -2240,7 +2240,6 @@ void M_DrawTimeAttack(void)
|
||||||
INT32 w;
|
INT32 w;
|
||||||
patch_t *minimap = NULL;
|
patch_t *minimap = NULL;
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
consvar_t *cv;
|
|
||||||
|
|
||||||
M_DrawLevelSelectBlock(0, 2, map, true, false);
|
M_DrawLevelSelectBlock(0, 2, map, true, false);
|
||||||
|
|
||||||
|
|
@ -2303,19 +2302,56 @@ void M_DrawTimeAttack(void)
|
||||||
opty += 10;
|
opty += 10;
|
||||||
|
|
||||||
// Cvar specific handling
|
// Cvar specific handling
|
||||||
|
|
||||||
if (currentMenu->menuitems[i].status & IT_CVAR)
|
|
||||||
{
|
{
|
||||||
cv = currentMenu->menuitems[i].itemaction.cvar;
|
const char *str = NULL;
|
||||||
|
INT32 optflags = f;
|
||||||
|
boolean drawarrows = (i == itemOn);
|
||||||
|
|
||||||
w = V_StringWidth(cv->string, 0);
|
if ((currentMenu->menuitems[i].status & IT_TYPE) == IT_ARROWS)
|
||||||
V_DrawString(leftedge, opty, f, cv->string);
|
|
||||||
if (i == itemOn)
|
|
||||||
{
|
{
|
||||||
V_DrawCharacter(leftedge - 10 - (skullAnimCounter/5), opty, '\x1C' | f, false); // left arrow
|
// Currently assumes M_HandleStaffReplay
|
||||||
V_DrawCharacter(leftedge + w + 2+ (skullAnimCounter/5), opty, '\x1D' | f, false); // right arrow
|
if (mapheaderinfo[levellist.choosemap]->ghostCount <= 1)
|
||||||
|
drawarrows = false;
|
||||||
|
|
||||||
|
optflags |= V_ALLOWLOWERCASE;
|
||||||
|
if (mapheaderinfo[levellist.choosemap] == NULL)
|
||||||
|
str = "Invalid map";
|
||||||
|
else if (cv_dummystaff.value > mapheaderinfo[levellist.choosemap]->ghostCount)
|
||||||
|
str = va("%u - Invalid ID", cv_dummystaff.value+1);
|
||||||
|
else if (mapheaderinfo[levellist.choosemap]->ghostBrief[cv_dummystaff.value] == NULL)
|
||||||
|
str = va("%u - Invalid brief", cv_dummystaff.value+1);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const char *th = "th";
|
||||||
|
if (cv_dummystaff.value+1 == 1)
|
||||||
|
th = "st";
|
||||||
|
else if (cv_dummystaff.value+1 == 2)
|
||||||
|
th = "nd";
|
||||||
|
else if (cv_dummystaff.value+1 == 3)
|
||||||
|
th = "rd";
|
||||||
|
str = va("%u%s - %s",
|
||||||
|
cv_dummystaff.value+1,
|
||||||
|
th,
|
||||||
|
mapheaderinfo[levellist.choosemap]->ghostBrief[cv_dummystaff.value]->name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((currentMenu->menuitems[i].status & IT_TYPE) == IT_CVAR)
|
||||||
|
{
|
||||||
|
str = currentMenu->menuitems[i].itemaction.cvar->string;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (str)
|
||||||
|
{
|
||||||
|
w = V_StringWidth(str, optflags);
|
||||||
|
V_DrawString(leftedge+12, opty, optflags, str);
|
||||||
|
if (drawarrows)
|
||||||
|
{
|
||||||
|
V_DrawCharacter(leftedge+12 - 10 - (skullAnimCounter/5), opty, '\x1C' | f, false); // left arrow
|
||||||
|
V_DrawCharacter(leftedge+12 + w + 2+ (skullAnimCounter/5), opty, '\x1D' | f, false); // right arrow
|
||||||
|
}
|
||||||
|
opty += 10;
|
||||||
}
|
}
|
||||||
opty += 10;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,6 @@ boolean fromlevelselect = false;
|
||||||
menu_t *currentMenu = &MAIN_ProfilesDef;
|
menu_t *currentMenu = &MAIN_ProfilesDef;
|
||||||
menu_t *restoreMenu = NULL;
|
menu_t *restoreMenu = NULL;
|
||||||
|
|
||||||
char dummystaffname[22];
|
|
||||||
|
|
||||||
INT16 itemOn = 0; // menu item skull is on, Hack by Tails 09-18-2002
|
INT16 itemOn = 0; // menu item skull is on, Hack by Tails 09-18-2002
|
||||||
INT16 skullAnimCounter = 8; // skull animation counter
|
INT16 skullAnimCounter = 8; // skull animation counter
|
||||||
struct menutransition_s menutransition; // Menu transition properties
|
struct menutransition_s menutransition; // Menu transition properties
|
||||||
|
|
@ -77,7 +75,7 @@ consvar_t cv_tutorialprompt = CVAR_INIT ("tutorialprompt", "On", CV_SAVE, CV_OnO
|
||||||
static CV_PossibleValue_t dummyteam_cons_t[] = {{0, "Spectator"}, {1, "Red"}, {2, "Blue"}, {0, NULL}};
|
static CV_PossibleValue_t dummyteam_cons_t[] = {{0, "Spectator"}, {1, "Red"}, {2, "Blue"}, {0, NULL}};
|
||||||
static CV_PossibleValue_t dummyspectate_cons_t[] = {{0, "Spectator"}, {1, "Playing"}, {0, NULL}};
|
static CV_PossibleValue_t dummyspectate_cons_t[] = {{0, "Spectator"}, {1, "Playing"}, {0, NULL}};
|
||||||
static CV_PossibleValue_t dummyscramble_cons_t[] = {{0, "Random"}, {1, "Points"}, {0, NULL}};
|
static CV_PossibleValue_t dummyscramble_cons_t[] = {{0, "Random"}, {1, "Points"}, {0, NULL}};
|
||||||
static CV_PossibleValue_t dummystaff_cons_t[] = {{0, "MIN"}, {100, "MAX"}, {0, NULL}};
|
static CV_PossibleValue_t dummystaff_cons_t[] = {{0, "MIN"}, {MAXSTAFF-1, "MAX"}, {0, NULL}};
|
||||||
|
|
||||||
static consvar_t cv_dummyteam = CVAR_INIT ("dummyteam", "Spectator", CV_HIDDEN, dummyteam_cons_t, NULL);
|
static consvar_t cv_dummyteam = CVAR_INIT ("dummyteam", "Spectator", CV_HIDDEN, dummyteam_cons_t, NULL);
|
||||||
//static cv_dummyspectate = CVAR_INITconsvar_t ("dummyspectate", "Spectator", CV_HIDDEN, dummyspectate_cons_t, NULL);
|
//static cv_dummyspectate = CVAR_INITconsvar_t ("dummyspectate", "Spectator", CV_HIDDEN, dummyspectate_cons_t, NULL);
|
||||||
|
|
@ -92,39 +90,15 @@ consvar_t cv_dummyspectate = CVAR_INIT ("dummyspectate", "Spectator", CV_HIDDEN,
|
||||||
|
|
||||||
static void Dummystaff_OnChange(void)
|
static void Dummystaff_OnChange(void)
|
||||||
{
|
{
|
||||||
#ifdef STAFFGHOSTS
|
if (mapheaderinfo[levellist.choosemap] == NULL || mapheaderinfo[levellist.choosemap]->ghostCount <= 0)
|
||||||
lumpnum_t l;
|
return;
|
||||||
|
|
||||||
dummystaffname[0] = '\0';
|
dummystaff_cons_t[1].value = mapheaderinfo[levellist.choosemap]->ghostCount-1;
|
||||||
|
if (cv_dummystaff.value > dummystaff_cons_t[1].value)
|
||||||
if ((l = W_CheckNumForName(va("%sS01",G_BuildMapName(cv_nextmap.value)))) == LUMPERROR)
|
|
||||||
{
|
{
|
||||||
CV_StealthSetValue(&cv_dummystaff, 0);
|
CV_StealthSetValue(&cv_dummystaff, 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
char *temp = dummystaffname;
|
|
||||||
UINT8 numstaff = 1;
|
|
||||||
while (numstaff < 99 && (l = W_CheckNumForName(va("%sS%02u",G_BuildMapName(cv_nextmap.value),numstaff+1))) != LUMPERROR)
|
|
||||||
numstaff++;
|
|
||||||
|
|
||||||
if (cv_dummystaff.value < 1)
|
|
||||||
CV_StealthSetValue(&cv_dummystaff, numstaff);
|
|
||||||
else if (cv_dummystaff.value > numstaff)
|
|
||||||
CV_StealthSetValue(&cv_dummystaff, 1);
|
|
||||||
|
|
||||||
if ((l = W_CheckNumForName(va("%sS%02u",G_BuildMapName(cv_nextmap.value), cv_dummystaff.value))) == LUMPERROR)
|
|
||||||
return; // shouldn't happen but might as well check...
|
|
||||||
|
|
||||||
G_UpdateStaffGhostName(l);
|
|
||||||
|
|
||||||
while (*temp)
|
|
||||||
temp++;
|
|
||||||
|
|
||||||
sprintf(temp, " - %d", cv_dummystaff.value);
|
|
||||||
}
|
|
||||||
#endif //#ifdef STAFFGHOSTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -968,19 +942,17 @@ static void M_HandleMenuInput(void)
|
||||||
if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS
|
if (routine && ((currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_ARROWS
|
||||||
|| (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR))
|
|| (currentMenu->menuitems[itemOn].status & IT_TYPE) == IT_CVAR))
|
||||||
{
|
{
|
||||||
consvar_t *cv = currentMenu->menuitems[itemOn].itemaction.cvar;
|
/*consvar_t *cv = currentMenu->menuitems[itemOn].itemaction.cvar;
|
||||||
|
|
||||||
// Make these CVar options?
|
// Make these CVar options?
|
||||||
if (cv == &cv_chooseskin
|
if (cv == &cv_chooseskin
|
||||||
|| cv == &cv_dummystaff
|
|| cv == &cv_dummystaff
|
||||||
/*
|
|
||||||
|| cv == &cv_nextmap
|
|| cv == &cv_nextmap
|
||||||
|| cv == &cv_newgametype
|
|| cv == &cv_newgametype
|
||||||
*/
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
S_StartSound(NULL, sfx_s3k5b);
|
S_StartSound(NULL, sfx_s3k5b);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ menuitem_t PLAY_TAReplay[] =
|
||||||
{IT_HEADERTEXT|IT_HEADER, "", NULL, NULL, {NULL}, 0, 0},
|
{IT_HEADERTEXT|IT_HEADER, "", NULL, NULL, {NULL}, 0, 0},
|
||||||
{IT_STRING | IT_CALL, "Replay Last", NULL, NULL, {.routine = M_ReplayTimeAttack}, 0, 0},
|
{IT_STRING | IT_CALL, "Replay Last", NULL, NULL, {.routine = M_ReplayTimeAttack}, 0, 0},
|
||||||
{IT_STRING | IT_CALL, "Replay Guest", NULL, NULL, {.routine = M_ReplayTimeAttack}, 0, 0},
|
{IT_STRING | IT_CALL, "Replay Guest", NULL, NULL, {.routine = M_ReplayTimeAttack}, 0, 0},
|
||||||
{IT_STRING | IT_CALL, "Replay Staff", NULL, NULL, {.routine = M_HandleStaffReplay}, 0, 0},
|
{IT_STRING | IT_ARROWS, "Replay Staff", NULL, NULL, {.routine = M_HandleStaffReplay}, 0, 0},
|
||||||
{IT_HEADERTEXT|IT_HEADER, "", NULL, NULL, {NULL}, 0, 0},
|
{IT_HEADERTEXT|IT_HEADER, "", NULL, NULL, {NULL}, 0, 0},
|
||||||
|
|
||||||
{IT_STRING | IT_SUBMENU, "Back", NULL, NULL, {.submenu = &PLAY_TimeAttackDef}, 0, 0},
|
{IT_STRING | IT_SUBMENU, "Back", NULL, NULL, {.submenu = &PLAY_TimeAttackDef}, 0, 0},
|
||||||
|
|
@ -197,8 +197,6 @@ void M_PrepareTimeAttack(INT32 choice)
|
||||||
if (!gpath)
|
if (!gpath)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CV_StealthSetValue(&cv_dummystaff, 0);
|
|
||||||
|
|
||||||
active = false;
|
active = false;
|
||||||
PLAY_TimeAttack[ta_guest].status = IT_DISABLED;
|
PLAY_TimeAttack[ta_guest].status = IT_DISABLED;
|
||||||
PLAY_TimeAttack[ta_replay].status = IT_DISABLED;
|
PLAY_TimeAttack[ta_replay].status = IT_DISABLED;
|
||||||
|
|
@ -257,16 +255,13 @@ void M_PrepareTimeAttack(INT32 choice)
|
||||||
|
|
||||||
PLAY_TAReplay[tareplay_staff].status =
|
PLAY_TAReplay[tareplay_staff].status =
|
||||||
PLAY_TAGhosts[taghost_staff].status = IT_DISABLED;
|
PLAY_TAGhosts[taghost_staff].status = IT_DISABLED;
|
||||||
#ifdef STAFFGHOSTS
|
if (mapheaderinfo[levellist.choosemap]->ghostCount > 0)
|
||||||
CV_SetValue(&cv_dummystaff, 1);
|
|
||||||
if (cv_dummystaff.value)
|
|
||||||
{
|
{
|
||||||
PLAY_TAReplay[tareplay_staff].status = IT_STRING|IT_KEYHANDLER;
|
PLAY_TAReplay[tareplay_staff].status = IT_STRING|IT_ARROWS;
|
||||||
PLAY_TAGhosts[taghost_staff].status = IT_STRING|IT_CVAR;
|
PLAY_TAGhosts[taghost_staff].status = IT_STRING|IT_CVAR;
|
||||||
CV_StealthSetValue(&cv_dummystaff, 1);
|
CV_SetValue(&cv_dummystaff, 0);
|
||||||
active |= 1|4;
|
active |= 1|4;
|
||||||
}
|
}
|
||||||
#endif //#ifdef STAFFGHOSTS
|
|
||||||
|
|
||||||
if (active & 1)
|
if (active & 1)
|
||||||
PLAY_TimeAttack[ta_replay].status = IT_STRING|IT_SUBMENU;
|
PLAY_TimeAttack[ta_replay].status = IT_STRING|IT_SUBMENU;
|
||||||
|
|
@ -287,8 +282,19 @@ void M_PrepareTimeAttack(INT32 choice)
|
||||||
|
|
||||||
void M_HandleStaffReplay(INT32 choice)
|
void M_HandleStaffReplay(INT32 choice)
|
||||||
{
|
{
|
||||||
// @TODO:
|
if (choice == 2)
|
||||||
(void) choice;
|
{
|
||||||
|
restoreMenu = &PLAY_TimeAttackDef;
|
||||||
|
|
||||||
|
M_ClearMenus(true);
|
||||||
|
demo.loadfiles = false;
|
||||||
|
demo.ignorefiles = true; // Just assume that record attack replays have the files needed
|
||||||
|
|
||||||
|
G_DoPlayDemo(va("%s/GHOST_%u", mapheaderinfo[levellist.choosemap]->lumpname, cv_dummystaff.value+1));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
M_ChangeCvarDirect(choice, &cv_dummystaff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void M_ReplayTimeAttack(INT32 choice)
|
void M_ReplayTimeAttack(INT32 choice)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue