mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 08:52:00 +00:00
Menus: Add a Cheats menu to options.
It's old-school. git-svn-id: https://svn.eduke32.com/eduke32@5084 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
6d04da0b49
commit
ab58a33ec6
9 changed files with 342 additions and 12 deletions
|
@ -2131,14 +2131,14 @@ int32_t osdcmd_cvar_set(const osdfuncparm_t *parm)
|
|||
int32_t val;
|
||||
if (showval)
|
||||
{
|
||||
OSD_Printf("\"%s\" is \"%d\"\n%s: %s\n",osd->cvars[i].c.name,*(int32_t *)osd->cvars[i].c.vptr,osd->cvars[i].c.name,(char *)osd->cvars[i].c.desc);
|
||||
OSD_Printf((osd->cvars[i].c.type & CVAR_UINT) ? "\"%s\" is \"%u\"\n%s: %s\n" : "\"%s\" is \"%d\"\n%s: %s\n",osd->cvars[i].c.name,*(int32_t *)osd->cvars[i].c.vptr,osd->cvars[i].c.name,(char *)osd->cvars[i].c.desc);
|
||||
return OSDCMD_OK;
|
||||
}
|
||||
|
||||
val = Batoi(parm->parms[0]);
|
||||
if (osd->cvars[i].c.type & CVAR_BOOL) val = val != 0;
|
||||
|
||||
if (val < osd->cvars[i].c.min || val > osd->cvars[i].c.max)
|
||||
if (val < osd->cvars[i].c.min || ((osd->cvars[i].c.type & CVAR_UINT) ? ((unsigned) val > (unsigned) osd->cvars[i].c.max) : (val > osd->cvars[i].c.max)))
|
||||
{
|
||||
OSD_Printf("%s value out of range\n",osd->cvars[i].c.name);
|
||||
return OSDCMD_OK;
|
||||
|
@ -2221,10 +2221,12 @@ void OSD_WriteCvars(FILE *fp)
|
|||
fprintf(fp,"%s \"%f\"\n",osd->cvars[i].c.name,*(double *)osd->cvars[i].c.vptr);
|
||||
break;
|
||||
case CVAR_INT:
|
||||
case CVAR_UINT:
|
||||
case CVAR_BOOL:
|
||||
fprintf(fp,"%s \"%d\"\n",osd->cvars[i].c.name,*(int32_t *)osd->cvars[i].c.vptr);
|
||||
break;
|
||||
case CVAR_UINT:
|
||||
fprintf(fp,"%s \"%u\"\n",osd->cvars[i].c.name,*(uint32_t *)osd->cvars[i].c.vptr);
|
||||
break;
|
||||
case CVAR_STRING:
|
||||
fprintf(fp,"%s \"%s\"\n",osd->cvars[i].c.name,(char *)osd->cvars[i].c.vptr);
|
||||
break;
|
||||
|
|
|
@ -8131,6 +8131,64 @@ char CheatStrings[][MAXCHEATLEN] =
|
|||
"cgs", // 26
|
||||
};
|
||||
|
||||
const uint32_t CheatFunctionFlags[] =
|
||||
{
|
||||
1 << CHEATFUNC_GOD,
|
||||
1 << CHEATFUNC_GIVEEVERYTHING,
|
||||
1 << CHEATFUNC_WARP,
|
||||
1 << CHEATFUNC_COORDS,
|
||||
1 << CHEATFUNC_VIEW,
|
||||
0,
|
||||
1 << CHEATFUNC_UNLOCK,
|
||||
1 << CHEATFUNC_CASHMAN,
|
||||
1 << CHEATFUNC_GIVEALLITEMS,
|
||||
1 << CHEATFUNC_FRAMERATE,
|
||||
1 << CHEATFUNC_SKILL,
|
||||
1 << CHEATFUNC_QUOTEBETA,
|
||||
1 << CHEATFUNC_HYPER,
|
||||
1 << CHEATFUNC_MONSTERS,
|
||||
0,
|
||||
0,
|
||||
1 << CHEATFUNC_QUOTETODD,
|
||||
1 << CHEATFUNC_SHOWMAP,
|
||||
1 << CHEATFUNC_GOD,
|
||||
1 << CHEATFUNC_QUOTEALLEN,
|
||||
1 << CHEATFUNC_CLIP,
|
||||
1 << CHEATFUNC_GIVEWEAPONS,
|
||||
1 << CHEATFUNC_GIVEINVENTORY,
|
||||
1 << CHEATFUNC_GIVEKEYS,
|
||||
1 << CHEATFUNC_DEBUG,
|
||||
0,
|
||||
(1 << CHEATFUNC_GOD) | (1 << CHEATFUNC_GIVEEVERYTHING),
|
||||
};
|
||||
|
||||
// KEEPINSYNC game.h: enum CheatCodeFunctions
|
||||
// KEEPINSYNC menus.c: MenuEntry_t ME_CheatCodes[]
|
||||
const uint8_t CheatFunctionIDs[] =
|
||||
{
|
||||
CHEAT_CASHMAN,
|
||||
CHEAT_CORNHOLIO,
|
||||
CHEAT_STUFF,
|
||||
CHEAT_WEAPONS,
|
||||
CHEAT_ITEMS,
|
||||
CHEAT_INVENTORY,
|
||||
CHEAT_KEYS,
|
||||
CHEAT_HYPER,
|
||||
CHEAT_VIEW,
|
||||
CHEAT_SHOWMAP,
|
||||
CHEAT_UNLOCK,
|
||||
CHEAT_CLIP,
|
||||
CHEAT_SCOTTY,
|
||||
CHEAT_SKILL,
|
||||
CHEAT_MONSTERS,
|
||||
CHEAT_RATE,
|
||||
CHEAT_BETA,
|
||||
CHEAT_TODD,
|
||||
CHEAT_ALLEN,
|
||||
CHEAT_COORDS,
|
||||
CHEAT_DEBUG,
|
||||
};
|
||||
|
||||
static void doinvcheat(int32_t invidx, int32_t defaultnum, int32_t event)
|
||||
{
|
||||
defaultnum = VM_OnEventWithReturn(event, g_player[myconnectindex].ps->i, myconnectindex, defaultnum);
|
||||
|
@ -8167,15 +8225,19 @@ GAME_STATIC void G_DoCheats(void)
|
|||
|
||||
if (osdcmd_cheatsinfo_stat.cheatnum != -1)
|
||||
{
|
||||
if (ud.player_skill == 4)
|
||||
{
|
||||
P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps);
|
||||
osdcmd_cheatsinfo_stat.cheatnum = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
// JBF 20030914
|
||||
k = osdcmd_cheatsinfo_stat.cheatnum;
|
||||
osdcmd_cheatsinfo_stat.cheatnum = -1;
|
||||
consolecheat = 1;
|
||||
}
|
||||
|
||||
if (g_player[myconnectindex].ps->gm & (MODE_TYPE|MODE_MENU))
|
||||
return;
|
||||
|
||||
if (VOLUMEONE && !vol1inited)
|
||||
{
|
||||
Bstrcpy(CheatStrings[2],"scotty##");
|
||||
|
@ -8186,6 +8248,9 @@ GAME_STATIC void G_DoCheats(void)
|
|||
if (consolecheat && numplayers < 2 && ud.recstat == 0)
|
||||
goto FOUNDCHEAT;
|
||||
|
||||
if (g_player[myconnectindex].ps->gm & (MODE_TYPE|MODE_MENU))
|
||||
return;
|
||||
|
||||
if (g_player[myconnectindex].ps->cheat_phase == 1)
|
||||
{
|
||||
while (KB_KeyWaiting())
|
||||
|
@ -8417,8 +8482,15 @@ FOUNDCHEAT:
|
|||
}
|
||||
else
|
||||
{
|
||||
i = Bstrlen(CheatStrings[k])-1;
|
||||
ud.m_player_skill = ud.player_skill = cheatbuf[i] - '1';
|
||||
if (!consolecheat)
|
||||
{
|
||||
i = Bstrlen(CheatStrings[k])-1;
|
||||
ud.m_player_skill = ud.player_skill = cheatbuf[i] - '1';
|
||||
}
|
||||
else
|
||||
{
|
||||
ud.m_player_skill = ud.player_skill = osdcmd_cheatsinfo_stat.volume;
|
||||
}
|
||||
}
|
||||
/*if (numplayers > 1 && g_netServer)
|
||||
Net_NewGame(ud.m_volume_number,ud.m_level_number);
|
||||
|
|
|
@ -546,6 +546,35 @@ enum cheatindex_t
|
|||
CHEAT_DEBUG,
|
||||
CHEAT_RESERVED3, // 25
|
||||
CHEAT_COMEGETSOME,
|
||||
NUMCHEATS,
|
||||
};
|
||||
|
||||
// KEEPINSYNC game.c: uint8_t CheatFunctionIDs[]
|
||||
// KEEPINSYNC menus.c: MenuEntry_t ME_CheatCodes[]
|
||||
enum CheatCodeFunctions
|
||||
{
|
||||
CHEATFUNC_CASHMAN,
|
||||
CHEATFUNC_GOD,
|
||||
CHEATFUNC_GIVEEVERYTHING,
|
||||
CHEATFUNC_GIVEWEAPONS,
|
||||
CHEATFUNC_GIVEALLITEMS,
|
||||
CHEATFUNC_GIVEINVENTORY,
|
||||
CHEATFUNC_GIVEKEYS,
|
||||
CHEATFUNC_HYPER,
|
||||
CHEATFUNC_VIEW,
|
||||
CHEATFUNC_SHOWMAP,
|
||||
CHEATFUNC_UNLOCK,
|
||||
CHEATFUNC_CLIP,
|
||||
CHEATFUNC_WARP,
|
||||
CHEATFUNC_SKILL,
|
||||
CHEATFUNC_MONSTERS,
|
||||
CHEATFUNC_FRAMERATE,
|
||||
CHEATFUNC_QUOTEBETA,
|
||||
CHEATFUNC_QUOTETODD,
|
||||
CHEATFUNC_QUOTEALLEN,
|
||||
CHEATFUNC_COORDS,
|
||||
CHEATFUNC_DEBUG,
|
||||
NUMCHEATFUNCS,
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -5887,7 +5887,7 @@ repeatcase:
|
|||
textptr++;
|
||||
while (*textptr != 0x0a && *textptr != 0x0d && *textptr != 0 && *textptr != ' ')
|
||||
{
|
||||
CheatStrings[k][i] = *textptr;
|
||||
CheatStrings[k][i] = Btolower(*textptr);
|
||||
textptr++,i++;
|
||||
if (EDUKE32_PREDICT_FALSE(i >= (signed)sizeof(CheatStrings[k])-1))
|
||||
{
|
||||
|
|
|
@ -66,6 +66,8 @@ extern intptr_t *apScriptGameEvent[MAXGAMEEVENTS];
|
|||
|
||||
extern int32_t otherp;
|
||||
extern char CheatStrings[][MAXCHEATLEN];
|
||||
extern const uint32_t CheatFunctionFlags[];
|
||||
extern const uint8_t CheatFunctionIDs[];
|
||||
extern char g_szScriptFileName[BMAX_PATH];
|
||||
extern int32_t g_totalLines,g_lineNumber;
|
||||
extern int32_t g_numCompilerErrors,g_numCompilerWarnings,g_numQuoteRedefinitions;
|
||||
|
|
|
@ -173,7 +173,7 @@ static MenuMenuFormat_t MMF_Top_Skill = { { MENU_MARGIN_CENTER<<16,
|
|||
static MenuMenuFormat_t MMF_Top_Options = { { MENU_MARGIN_CENTER<<16, 38<<16, }, -190<<16 };
|
||||
static MenuMenuFormat_t MMF_Top_Joystick_Network = { { MENU_MARGIN_CENTER<<16, 70<<16, }, -190<<16 };
|
||||
static MenuMenuFormat_t MMF_BigOptions = { { MENU_MARGIN_WIDE<<16, 38<<16, }, -190<<16 };
|
||||
static MenuMenuFormat_t MMF_SmallOptions = { { MENU_MARGIN_WIDE<<16, 37<<16, }, 160<<16 };
|
||||
static MenuMenuFormat_t MMF_SmallOptions = { { MENU_MARGIN_WIDE<<16, 37<<16, }, 170<<16 };
|
||||
static MenuMenuFormat_t MMF_Macros = { { 26<<16, 40<<16, }, 160<<16 };
|
||||
static MenuMenuFormat_t MMF_SmallOptionsNarrow = { { MENU_MARGIN_REGULAR<<16, 38<<16, }, -190<<16 };
|
||||
static MenuMenuFormat_t MMF_KeyboardSetupFuncs = { { 70<<16, 34<<16, }, 151<<16 };
|
||||
|
@ -195,6 +195,8 @@ static MenuEntryFormat_t MEF_BigOptionsRt = { 4<<16, 0, -260<<16, 20<<
|
|||
#if defined USE_OPENGL || !defined DROIDMENU
|
||||
static MenuEntryFormat_t MEF_SmallOptions = { 1<<16, 0, 216<<16, 10<<16, 32768 };
|
||||
#endif
|
||||
static MenuEntryFormat_t MEF_BigCheats = { 3<<16, 0, -260<<16, 20<<16, 65536 };
|
||||
static MenuEntryFormat_t MEF_Cheats = { 2<<16, 0, -260<<16, 10<<16, 32768 };
|
||||
static MenuEntryFormat_t MEF_PlayerNarrow = { 1<<16, 0, 90<<16, 10<<16, 32768 };
|
||||
static MenuEntryFormat_t MEF_Macros = { 2<<16, -1, 268<<16, 10<<16, 32768 };
|
||||
static MenuEntryFormat_t MEF_VideoSetup = { 4<<16, 0, 168<<16, 20<<16, 65536 };
|
||||
|
@ -394,6 +396,7 @@ MAKE_MENU_TOP_ENTRYLINK( "Joystick Setup", MEF_CenterMenu, OPTIONS_JOYSTICKSETUP
|
|||
#ifdef DROIDMENU
|
||||
MAKE_MENU_TOP_ENTRYLINK( "Touch Setup", MEF_CenterMenu, OPTIONS_TOUCHSETUP, MENU_TOUCHSETUP );
|
||||
#endif
|
||||
MAKE_MENU_TOP_ENTRYLINK( "Cheats", MEF_CenterMenu, OPTIONS_CHEATS, MENU_CHEATS );
|
||||
|
||||
static int32_t newresolution, newrendermode, newfullscreen;
|
||||
|
||||
|
@ -540,6 +543,39 @@ static MenuLink_t MEO_DISPLAYSETUP_VIDEOSETUP = { MENU_VIDEOSETUP, MA_Advance, }
|
|||
static MenuEntry_t ME_DISPLAYSETUP_VIDEOSETUP = MAKE_MENUENTRY( "Video mode", &MF_Redfont, &MEF_BigOptionsRt, &MEO_DISPLAYSETUP_VIDEOSETUP, Link );
|
||||
#endif
|
||||
|
||||
|
||||
static MenuLink_t MEO_ENTERCHEAT = { MENU_CHEATENTRY, MA_None, };
|
||||
static MenuEntry_t ME_ENTERCHEAT = MAKE_MENUENTRY( "Enter Cheat Code", &MF_Redfont, &MEF_BigCheats, &MEO_ENTERCHEAT, Link );
|
||||
|
||||
static MenuLink_t MEO_CHEAT_WARP = { MENU_CHEAT_WARP, MA_None, };
|
||||
static MenuLink_t MEO_CHEAT_SKILL = { MENU_CHEAT_SKILL, MA_None, };
|
||||
// KEEPINSYNC game.h: enum CheatCodeFunctions
|
||||
// KEEPINSYNC game.c: uint8_t CheatFunctionIDs[]
|
||||
#define MAKE_MENUCHEAT( Name ) MAKE_MENUENTRY( Name, &MF_Bluefont, &MEF_Cheats, &MEO_NULL, Link )
|
||||
static MenuEntry_t ME_CheatCodes[] = {
|
||||
MAKE_MENUCHEAT( "Toggle Cashman" ),
|
||||
MAKE_MENUCHEAT( "Toggle God Mode" ),
|
||||
MAKE_MENUCHEAT( "Give Everything" ),
|
||||
MAKE_MENUCHEAT( "Give Weapons" ),
|
||||
MAKE_MENUCHEAT( "Give All Items" ),
|
||||
MAKE_MENUCHEAT( "Give Inventory" ),
|
||||
MAKE_MENUCHEAT( "Give Keys" ),
|
||||
MAKE_MENUCHEAT( "Toggle Hyper" ),
|
||||
MAKE_MENUCHEAT( "Toggle 3rd-Person View" ),
|
||||
MAKE_MENUCHEAT( "Toggle Show All Map" ),
|
||||
MAKE_MENUCHEAT( "Toggle All Locks" ),
|
||||
MAKE_MENUCHEAT( "Toggle Clipping" ),
|
||||
MAKE_MENUENTRY( "Level Warp", &MF_Bluefont, &MEF_Cheats, &MEO_CHEAT_WARP, Link ),
|
||||
MAKE_MENUENTRY( "Change Skill", &MF_Bluefont, &MEF_Cheats, &MEO_CHEAT_SKILL, Link ),
|
||||
MAKE_MENUCHEAT( "Toggle Monsters" ),
|
||||
MAKE_MENUCHEAT( "Toggle Framerate Display" ),
|
||||
MAKE_MENUCHEAT( NULL ),
|
||||
MAKE_MENUCHEAT( NULL ),
|
||||
MAKE_MENUCHEAT( NULL ),
|
||||
MAKE_MENUCHEAT( "Toggle Coordinate Display" ),
|
||||
MAKE_MENUCHEAT( "Toggle Debug Data Dump" ),
|
||||
};
|
||||
|
||||
static MenuEntry_t *MEL_OPTIONS[] = {
|
||||
&ME_OPTIONS_GAMESETUP,
|
||||
&ME_OPTIONS_SOUNDSETUP,
|
||||
|
@ -548,8 +584,9 @@ static MenuEntry_t *MEL_OPTIONS[] = {
|
|||
&ME_OPTIONS_PLAYERSETUP,
|
||||
&ME_OPTIONS_CONTROLS,
|
||||
#else
|
||||
&ME_OPTIONS_TOUCHSETUP
|
||||
&ME_OPTIONS_TOUCHSETUP,
|
||||
#endif
|
||||
&ME_OPTIONS_CHEATS
|
||||
};
|
||||
|
||||
static MenuEntry_t *MEL_CONTROLS[] = {
|
||||
|
@ -562,6 +599,9 @@ static MenuEntry_t *MEL_CONTROLS[] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static MenuEntry_t *MEL_CHEATS[ARRAY_SIZE(ME_CheatCodes)+1] = {
|
||||
&ME_ENTERCHEAT,
|
||||
};
|
||||
|
||||
static MenuEntry_t *MEL_VIDEOSETUP[] = {
|
||||
&ME_VIDEOSETUP_RESOLUTION,
|
||||
|
@ -1108,6 +1148,7 @@ static MenuMenu_t M_OPTIONS = MAKE_MENUMENU( "Options", &MMF_Top_Options, MEL_OP
|
|||
static MenuMenu_t M_VIDEOSETUP = MAKE_MENUMENU( "Video Mode", &MMF_BigOptions, MEL_VIDEOSETUP );
|
||||
static MenuMenu_t M_KEYBOARDSETUP = MAKE_MENUMENU( "Keyboard Setup", &MMF_Top_Options, MEL_KEYBOARDSETUP );
|
||||
static MenuMenu_t M_CONTROLS = MAKE_MENUMENU( "Control Setup", &MMF_Top_Options, MEL_CONTROLS );
|
||||
static MenuMenu_t M_CHEATS = MAKE_MENUMENU( "Cheats", &MMF_SmallOptions, MEL_CHEATS );
|
||||
static MenuMenu_t M_MOUSESETUP = MAKE_MENUMENU( "Mouse Setup", &MMF_BigOptions, MEL_MOUSESETUP );
|
||||
#ifdef DROIDMENU
|
||||
static MenuMenu_t M_TOUCHSETUP = MAKE_MENUMENU( "Touch Setup", &MMF_BigOptions, MEL_TOUCHSETUP );
|
||||
|
@ -1170,6 +1211,9 @@ static MenuMessage_t M_NETWAITVOTES = { CURSOR_BOTTOMRIGHT, MENU_NULL, MA_None,
|
|||
static MenuMessage_t M_BUYDUKE = { CURSOR_BOTTOMRIGHT, MENU_EPISODE, MA_Return, };
|
||||
|
||||
static MenuTextForm_t M_ADULTPASSWORD = { NULL, "Enter Password:", MAXPWLOCKOUT, MTF_Password };
|
||||
static MenuTextForm_t M_CHEATENTRY = { NULL, "Enter Cheat Code:", MAXCHEATLEN, 0 };
|
||||
static MenuTextForm_t M_CHEAT_WARP = { NULL, "Enter Warp #:", 3, 0 };
|
||||
static MenuTextForm_t M_CHEAT_SKILL = { NULL, "Enter Skill #:", 1, 0 };
|
||||
|
||||
#define MAKE_MENUFILESELECT(a, b, c) { a, { &MMF_FileSelectLeft, &MMF_FileSelectRight }, { &MF_Minifont, &MF_MinifontRed }, b, c, { NULL, NULL }, { 0, 0 }, { 3<<16, 3<<16 }, FNLIST_INITIALIZER, 0 }
|
||||
|
||||
|
@ -1218,6 +1262,10 @@ static Menu_t Menus[] = {
|
|||
{ &M_SOUND, MENU_SOUND, MENU_OPTIONS, MA_Return, Menu },
|
||||
{ &M_SOUND, MENU_SOUND_INGAME, MENU_CLOSE, MA_Return, Menu },
|
||||
{ &M_ADVSOUND, MENU_ADVSOUND, MENU_SOUND, MA_Return, Menu },
|
||||
{ &M_CHEATS, MENU_CHEATS, MENU_OPTIONS, MA_Return, Menu },
|
||||
{ &M_CHEATENTRY, MENU_CHEATENTRY, MENU_CHEATS, MA_None, TextForm },
|
||||
{ &M_CHEAT_WARP, MENU_CHEAT_WARP, MENU_CHEATS, MA_None, TextForm },
|
||||
{ &M_CHEAT_SKILL, MENU_CHEAT_SKILL, MENU_CHEATS, MA_None, TextForm },
|
||||
{ &M_CREDITS, MENU_CREDITS, MENU_MAIN, MA_Return, Panel },
|
||||
{ &M_CREDITS2, MENU_CREDITS2, MENU_MAIN, MA_Return, Panel },
|
||||
{ &M_CREDITS3, MENU_CREDITS3, MENU_MAIN, MA_Return, Panel },
|
||||
|
@ -1632,6 +1680,29 @@ static void M_PreMenu(MenuID_t cm)
|
|||
MEO_SAVE[i].font = (g_oldverSavegame[i] && MEO_SAVE[i].editfield == NULL) ? &MF_MinifontDarkGray : &MF_MinifontRed;
|
||||
break;
|
||||
|
||||
case MENU_CHEATS:
|
||||
case MENU_CHEATENTRY:
|
||||
case MENU_CHEAT_WARP:
|
||||
case MENU_CHEAT_SKILL:
|
||||
{
|
||||
const int32_t menucheatsdisabled = numplayers != 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME);
|
||||
|
||||
for (i = 0; i < NUMCHEATFUNCS; i++)
|
||||
{
|
||||
// only show cheats that have been typed in before
|
||||
MEL_CHEATS[i+1] = (cl_cheatmask & (1<<i)) ? &ME_CheatCodes[i] : NULL;
|
||||
|
||||
// disable outside of a single-player game
|
||||
MenuEntry_DisableOnCondition(&ME_CheatCodes[i], menucheatsdisabled);
|
||||
}
|
||||
|
||||
// fix display names of quote cheats
|
||||
ME_CheatCodes[CHEATFUNC_QUOTEBETA].name = ScriptQuotes[QUOTE_CHEAT_BETA];
|
||||
ME_CheatCodes[CHEATFUNC_QUOTETODD].name = ScriptQuotes[QUOTE_CHEAT_TODD];
|
||||
ME_CheatCodes[CHEATFUNC_QUOTEALLEN].name = ScriptQuotes[QUOTE_CHEAT_ALLEN];
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2332,6 +2403,60 @@ static void M_StartGameWithoutSkill(void)
|
|||
G_NewGame_EnterLevel();
|
||||
}
|
||||
|
||||
static void M_Cheat(int32_t cheatID)
|
||||
{
|
||||
if (numplayers != 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME))
|
||||
return;
|
||||
|
||||
osdcmd_cheatsinfo_stat.cheatnum = cheatID;
|
||||
}
|
||||
|
||||
static int32_t M_Cheat_Warp(char const * const numbers)
|
||||
{
|
||||
if (numplayers != 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME))
|
||||
return 0;
|
||||
|
||||
if (numbers == NULL || !numbers[0] || !numbers[1] || (VOLUMEALL && !numbers[2]))
|
||||
return 1;
|
||||
|
||||
if (VOLUMEALL)
|
||||
{
|
||||
osdcmd_cheatsinfo_stat.volume = numbers[0] - '0';
|
||||
osdcmd_cheatsinfo_stat.level = (numbers[1] - '0')*10+(numbers[2]-'0');
|
||||
}
|
||||
else
|
||||
{
|
||||
osdcmd_cheatsinfo_stat.volume = numbers[0] - '0';
|
||||
osdcmd_cheatsinfo_stat.level = numbers[1] - '0';
|
||||
}
|
||||
|
||||
osdcmd_cheatsinfo_stat.volume--;
|
||||
osdcmd_cheatsinfo_stat.level--;
|
||||
|
||||
if ((VOLUMEONE && osdcmd_cheatsinfo_stat.volume > 0) || osdcmd_cheatsinfo_stat.volume > g_numVolumes-1 ||
|
||||
osdcmd_cheatsinfo_stat.level >= MAXLEVELS || MapInfo[osdcmd_cheatsinfo_stat.volume *MAXLEVELS+osdcmd_cheatsinfo_stat.level].filename == NULL)
|
||||
return 1;
|
||||
|
||||
osdcmd_cheatsinfo_stat.cheatnum = CHEAT_SCOTTY;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int32_t M_Cheat_Skill(char const * const number)
|
||||
{
|
||||
if (numplayers != 1 || !(g_player[myconnectindex].ps->gm & MODE_GAME))
|
||||
return 0;
|
||||
|
||||
if (number == NULL || !number[0])
|
||||
return 1;
|
||||
|
||||
osdcmd_cheatsinfo_stat.volume = number[0] - '1';
|
||||
|
||||
osdcmd_cheatsinfo_stat.cheatnum = CHEAT_SKILL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
Functions where a "newValue" or similar is passed are run *before* the linked variable is actually changed.
|
||||
That way you can compare the new and old values and potentially block the change.
|
||||
|
@ -2399,6 +2524,22 @@ static void M_MenuEntryLinkActivate(MenuEntry_t *entry)
|
|||
MEO_JOYSTICKAXIS_DIGITALPOSITIVE.data = &ud.config.JoystickDigitalFunctions[M_JOYSTICKAXES.currentEntry][1];
|
||||
break;
|
||||
|
||||
case MENU_CHEATS:
|
||||
{
|
||||
const int32_t cheatFuncID = M_CHEATS.currentEntry - 1;
|
||||
switch (cheatFuncID)
|
||||
{
|
||||
case -1:
|
||||
case CHEATFUNC_WARP:
|
||||
case CHEATFUNC_SKILL:
|
||||
break;
|
||||
default:
|
||||
M_Cheat(CheatFunctionIDs[cheatFuncID]);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -2936,6 +3077,77 @@ static void M_MenuTextFormSubmit(char *input)
|
|||
M_ChangeMenu(MENU_GAMESETUP);
|
||||
break;
|
||||
|
||||
case MENU_CHEATENTRY:
|
||||
{
|
||||
const size_t inputlength = Bstrlen(input);
|
||||
Bstrcpy(tempbuf, input);
|
||||
const char *numberpos = NULL;
|
||||
for (size_t i = 0; i < inputlength; i++)
|
||||
{
|
||||
tempbuf[i] = Btolower(tempbuf[i]);
|
||||
if (Bisdigit(tempbuf[i]))
|
||||
{
|
||||
if (numberpos == NULL)
|
||||
numberpos = &input[i];
|
||||
tempbuf[i] = '#';
|
||||
}
|
||||
}
|
||||
|
||||
int8_t cheatID = -1;
|
||||
|
||||
if (inputlength > 2 && tempbuf[0] == scantoasc[CheatKeys[0]] && tempbuf[1] == scantoasc[CheatKeys[1]])
|
||||
{
|
||||
for (size_t i = 0; i < NUMCHEATS; i++)
|
||||
if (!Bstrcmp(tempbuf+2, CheatStrings[i]))
|
||||
{
|
||||
cheatID = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (cheatID)
|
||||
{
|
||||
case -1:
|
||||
S_PlaySound(KICK_HIT);
|
||||
break;
|
||||
case CHEAT_SCOTTY:
|
||||
M_Cheat_Warp(numberpos);
|
||||
if (g_player[myconnectindex].ps->gm&MODE_MENU)
|
||||
S_PlaySound(DUKE_GET);
|
||||
break;
|
||||
case CHEAT_SKILL:
|
||||
M_Cheat_Skill(numberpos);
|
||||
if (g_player[myconnectindex].ps->gm&MODE_MENU)
|
||||
S_PlaySound(DUKE_GET);
|
||||
break;
|
||||
default:
|
||||
M_Cheat(cheatID);
|
||||
S_PlaySound(DUKE_GET);
|
||||
break;
|
||||
}
|
||||
|
||||
if (cheatID >= 0)
|
||||
cl_cheatmask |= CheatFunctionFlags[cheatID];
|
||||
|
||||
if ((cl_cheatmask & (1<<CHEATFUNC_QUOTEBETA)) && (cl_cheatmask & (1<<CHEATFUNC_QUOTETODD)) && (cl_cheatmask & (1<<CHEATFUNC_QUOTEALLEN)))
|
||||
cl_cheatmask = ~0;
|
||||
|
||||
M_ChangeMenu(MENU_CHEATS);
|
||||
break;
|
||||
}
|
||||
|
||||
case MENU_CHEAT_WARP:
|
||||
if (M_Cheat_Warp(input))
|
||||
S_PlaySound(KICK_HIT);
|
||||
M_ChangeMenu(MENU_CHEATS);
|
||||
break;
|
||||
|
||||
case MENU_CHEAT_SKILL:
|
||||
if (M_Cheat_Skill(input))
|
||||
S_PlaySound(KICK_HIT);
|
||||
M_ChangeMenu(MENU_CHEATS);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -4338,6 +4550,9 @@ static void M_RunMenuRecurse(MenuID_t cm, const vec2_t origin)
|
|||
case MENU_LOADVERIFY:
|
||||
case MENU_SAVEVERIFY:
|
||||
case MENU_ADULTPASSWORD:
|
||||
case MENU_CHEATENTRY:
|
||||
case MENU_CHEAT_WARP:
|
||||
case MENU_CHEAT_SKILL:
|
||||
M_RunMenu(m_previousMenu, origin);
|
||||
break;
|
||||
default:
|
||||
|
@ -5656,7 +5871,7 @@ void M_DisplayMenus(void)
|
|||
M_RunMenuInput(m_currentMenu);
|
||||
|
||||
g_player[myconnectindex].ps->gm &= (0xff-MODE_TYPE);
|
||||
g_player[myconnectindex].ps->fta = 0;
|
||||
// g_player[myconnectindex].ps->fta = 0;
|
||||
|
||||
if (((g_player[myconnectindex].ps->gm&MODE_GAME) || ud.recstat==2) && M_BlackTranslucentBackgroundOK(g_currentMenu))
|
||||
fade_screen_black(1);
|
||||
|
|
|
@ -76,6 +76,10 @@ enum MenuIndex_t {
|
|||
MENU_SOUND = 700,
|
||||
MENU_SOUND_INGAME = 701,
|
||||
MENU_ADVSOUND = 702,
|
||||
MENU_CHEATS = 800,
|
||||
MENU_CHEATENTRY = 801,
|
||||
MENU_CHEAT_WARP = 802,
|
||||
MENU_CHEAT_SKILL = 803,
|
||||
MENU_CREDITS = 990,
|
||||
MENU_CREDITS2 = 991,
|
||||
MENU_CREDITS3 = 992,
|
||||
|
|
|
@ -58,6 +58,8 @@ extern int32_t demorec_diffs_cvar, demorec_force_cvar, demorec_seeds_cvar, demop
|
|||
extern int32_t demorec_difftics_cvar, demorec_diffcompress_cvar, demorec_synccompress_cvar;
|
||||
extern void G_CheckPlayerColor(int32_t *color,int32_t prev_color);
|
||||
|
||||
uint32_t cl_cheatmask;
|
||||
|
||||
static inline int32_t osdcmd_quit(const osdfuncparm_t *parm)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(parm);
|
||||
|
@ -1533,6 +1535,8 @@ int32_t registerosdcommands(void)
|
|||
{ "cl_autorun", "enable/disable autorun", (void *)&ud.auto_run, CVAR_BOOL, 0, 1 },
|
||||
{ "cl_autovote", "enable/disable automatic voting", (void *)&ud.autovote, CVAR_INT, 0, 2 },
|
||||
|
||||
{ "cl_cheatmask", "configure what cheats show in the cheats menu", (void *)&cl_cheatmask, CVAR_UINT, 0, ~0 },
|
||||
|
||||
{ "cl_obituaries", "enable/disable multiplayer death messages", (void *)&ud.obituaries, CVAR_BOOL, 0, 1 },
|
||||
{ "cl_democams", "enable/disable demo playback cameras", (void *)&ud.democams, CVAR_BOOL, 0, 1 },
|
||||
|
||||
|
|
|
@ -48,6 +48,8 @@ typedef struct {
|
|||
extern const keydef_t ConsoleKeys[];
|
||||
extern const char *const ConsoleButtons[];
|
||||
|
||||
extern uint32_t cl_cheatmask;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue