diff --git a/polymer/eduke32/build/src/osd.c b/polymer/eduke32/build/src/osd.c index f80028a96..cf9081d9f 100644 --- a/polymer/eduke32/build/src/osd.c +++ b/polymer/eduke32/build/src/osd.c @@ -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; diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c index 9415c2ec6..1c5c5ad83 100644 --- a/polymer/eduke32/source/game.c +++ b/polymer/eduke32/source/game.c @@ -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); diff --git a/polymer/eduke32/source/game.h b/polymer/eduke32/source/game.h index 88caf352f..16772275c 100644 --- a/polymer/eduke32/source/game.h +++ b/polymer/eduke32/source/game.h @@ -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, }; diff --git a/polymer/eduke32/source/gamedef.c b/polymer/eduke32/source/gamedef.c index da7cd9d83..ef17c7f01 100644 --- a/polymer/eduke32/source/gamedef.c +++ b/polymer/eduke32/source/gamedef.c @@ -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)) { diff --git a/polymer/eduke32/source/gamedef.h b/polymer/eduke32/source/gamedef.h index d3cbb0814..ed9d5b8cd 100644 --- a/polymer/eduke32/source/gamedef.h +++ b/polymer/eduke32/source/gamedef.h @@ -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; diff --git a/polymer/eduke32/source/menus.c b/polymer/eduke32/source/menus.c index 2cb761ed9..9c7722a64 100644 --- a/polymer/eduke32/source/menus.c +++ b/polymer/eduke32/source/menus.c @@ -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<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<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); diff --git a/polymer/eduke32/source/menus.h b/polymer/eduke32/source/menus.h index b8a343e04..8433d2ae7 100644 --- a/polymer/eduke32/source/menus.h +++ b/polymer/eduke32/source/menus.h @@ -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, diff --git a/polymer/eduke32/source/osdcmds.c b/polymer/eduke32/source/osdcmds.c index f6997f7ca..6866e8752 100644 --- a/polymer/eduke32/source/osdcmds.c +++ b/polymer/eduke32/source/osdcmds.c @@ -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 }, diff --git a/polymer/eduke32/source/osdcmds.h b/polymer/eduke32/source/osdcmds.h index 89e9e1870..d47d6d171 100644 --- a/polymer/eduke32/source/osdcmds.h +++ b/polymer/eduke32/source/osdcmds.h @@ -48,6 +48,8 @@ typedef struct { extern const keydef_t ConsoleKeys[]; extern const char *const ConsoleButtons[]; +extern uint32_t cl_cheatmask; + #ifdef __cplusplus } #endif