diff --git a/src/cvars.cpp b/src/cvars.cpp index 2b439d89e..88847ce6f 100644 --- a/src/cvars.cpp +++ b/src/cvars.cpp @@ -903,6 +903,7 @@ extern CV_PossibleValue_t renderhitbox_cons_t[]; consvar_t cv_renderhitbox = PlayerCheat("renderhitbox", "Off").values(renderhitbox_cons_t).description("Show hitboxes around objects"); consvar_t cv_mentalsonic = PlayerCheat("mentalsonic", "Off").values(CV_OnOff).flags(CV_HIDDEN).description("Works out at the library"); +consvar_t cv_4thgear = PlayerCheat("4thgear", "Off").values(CV_OnOff).flags(CV_HIDDEN).description("Surpassing your limits!"); // // Dummy variables used solely in the menu system. diff --git a/src/d_netcmd.h b/src/d_netcmd.h index d1d0fa643..2d0a19c52 100644 --- a/src/d_netcmd.h +++ b/src/d_netcmd.h @@ -98,7 +98,7 @@ extern consvar_t cv_kartdebugstart; extern consvar_t cv_debugrank; extern consvar_t cv_battletest; -extern consvar_t cv_mentalsonic; +extern consvar_t cv_mentalsonic, cv_4thgear; typedef enum { CV_CAPSULETEST_OFF, diff --git a/src/k_kart.c b/src/k_kart.c index 0444d3c11..8ae672d86 100644 --- a/src/k_kart.c +++ b/src/k_kart.c @@ -422,6 +422,10 @@ fixed_t K_GetKartGameSpeedScalar(SINT8 value) // Normal = 100% // Hard = 118.75% // Nightmare = 137.5% ?!?! + + if (cv_4thgear.value && !netgame && (!demo.playback || !demo.netgame) && !modeattacking) + value = 3; + return ((13 + (3*value)) << FRACBITS) / 16; } diff --git a/src/m_cheat.c b/src/m_cheat.c index 4564fe9bb..1ad272ab0 100644 --- a/src/m_cheat.c +++ b/src/m_cheat.c @@ -177,6 +177,22 @@ static UINT8 cheatf_mentalsonic(void) return 1; } +static UINT8 cheatf_4thgear(void) +{ + cv_4thgear.value = !(cv_4thgear.value); + if (cv_4thgear.value) + { + M_StartMessage("Restraint device compromised!", "Local play sped up to ""\x85""4th Gear!""\x80""\nLet's see what you're made of!\n\n""\x86""No effect in netplay and attack modes.", NULL, MM_NOTHING, NULL, NULL); + S_StartSound(NULL, sfx_gshc4); + } + else + { + S_StartSound(NULL, sfx_kc46); + } + + return 1; +} + #ifdef DEVELOP static UINT8 cheatf_devmode(void) { @@ -254,6 +270,13 @@ static cheatseq_t cheat_mentalsonic = { NULL, cheatf_mentalsonic, (UINT8[]){ SCRAMBLE('m'), SCRAMBLE('e'), SCRAMBLE('n'), SCRAMBLE('t'), SCRAMBLE('a'), SCRAMBLE('l'), SCRAMBLE(' '), SCRAMBLE('s'), SCRAMBLE('o'), SCRAMBLE('n'), SCRAMBLE('i'), SCRAMBLE('c'), 0xff } }; +static cheatseq_t cheat_4thgear = { + NULL, cheatf_4thgear, + (UINT8[]){ SCRAMBLE('l'), SCRAMBLE('e'), SCRAMBLE('t'), SCRAMBLE('\''), SCRAMBLE('s'), SCRAMBLE(' '), + SCRAMBLE('g'), SCRAMBLE('e'), SCRAMBLE('t'), SCRAMBLE(' '), + SCRAMBLE('f'), SCRAMBLE('i'), SCRAMBLE('r'), SCRAMBLE('e'), SCRAMBLE('d'), SCRAMBLE(' '), + SCRAMBLE('u'), SCRAMBLE('p'), SCRAMBLE('!'), 0xff } +}; #ifdef DEVELOP @@ -275,6 +298,7 @@ cheatseq_t *cheatseqlist[] = &cheat_savetheanimals, &cheat_savetheframes, &cheat_mentalsonic, + &cheat_4thgear, #ifdef DEVELOP &cheat_devmode, &cheat_skipgoner,