2019-09-19 22:42:45 +00:00
//-------------------------------------------------------------------------
/*
Copyright ( C ) 2010 - 2019 EDuke32 developers and contributors
Copyright ( C ) 2019 Nuke . YKT
This file is part of NBlood .
NBlood is free software ; you can redistribute it and / or
modify it under the terms of the GNU General Public License version 2
as published by the Free Software Foundation .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE .
See the GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 , USA .
*/
//-------------------------------------------------------------------------
2019-09-21 18:59:54 +00:00
# include "ns.h" // Must come before everything else!
2019-09-19 22:42:45 +00:00
# include "build.h"
2019-10-25 22:32:49 +00:00
# include "gamecontrol.h"
2020-12-09 14:56:32 +00:00
2019-09-19 22:42:45 +00:00
# include "blood.h"
2019-12-09 01:01:30 +00:00
# include "gstrings.h"
2020-08-03 18:51:31 +00:00
# include "cheathandler.h"
2020-09-02 22:29:17 +00:00
# include "d_protocol.h"
2020-09-03 14:31:31 +00:00
# include "gamestate.h"
2020-09-06 10:44:58 +00:00
# include "automap.h"
2019-09-19 22:42:45 +00:00
2019-09-22 06:39:22 +00:00
BEGIN_BLD_NS
2021-12-29 21:56:21 +00:00
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
2019-09-19 22:42:45 +00:00
void sub_5A928 ( void )
{
2021-12-29 21:56:21 +00:00
for ( int i = 0 ; i < buttonMap . NumButtons ( ) ; i + + )
buttonMap . ClearButton ( i ) ;
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
const char * SetGodMode ( PLAYER * pPlayer , bool god )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
playerSetGodMode ( pPlayer , god ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
2022-09-10 13:15:58 +00:00
return pPlayer - > godMode ? GStrings ( " TXTB_GODMODE " ) : GStrings ( " TXTB_NOTGODMODE " ) ;
2019-09-19 22:42:45 +00:00
}
2021-12-29 21:56:21 +00:00
const char * SetClipMode ( bool noclip )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
gNoClip = noclip ;
bPlayerCheated = true ;
return gNoClip ? GStrings ( " TXTB_NOCLIP " ) : GStrings ( " TXTB_NOCLIPOFF " ) ;
2019-09-19 22:42:45 +00:00
}
2021-12-29 21:56:21 +00:00
void packStuff ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
for ( int i = 0 ; i < 5 ; i + + )
packAddItem ( pPlayer , i ) ;
2019-09-19 22:42:45 +00:00
}
2021-12-29 21:56:21 +00:00
void packClear ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
pPlayer - > packItemId = 0 ;
for ( int i = 0 ; i < 5 ; i + + )
{
pPlayer - > packSlots [ i ] . isActive = 0 ;
pPlayer - > packSlots [ i ] . curAmount = 0 ;
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void SetAmmo ( PLAYER * pPlayer , bool stat )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
if ( stat )
{
for ( int i = 0 ; i < 12 ; i + + )
2022-09-10 13:15:58 +00:00
pPlayer - > ammoCount [ i ] = gAmmoInfo [ i ] . max ;
2021-12-29 21:56:21 +00:00
viewSetMessage ( GStrings ( " TXTB_FULLAMMO " ) ) ;
}
else
{
for ( int i = 0 ; i < 12 ; i + + )
2022-09-10 13:15:58 +00:00
pPlayer - > ammoCount [ i ] = 0 ;
2021-12-29 21:56:21 +00:00
viewSetMessage ( GStrings ( " TXTB_NOAMMO " ) ) ;
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void SetWeapons ( PLAYER * pPlayer , bool stat )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
for ( int i = 0 ; i < 14 ; i + + )
{
2022-09-10 13:15:58 +00:00
pPlayer - > hasWeapon [ i ] = stat ;
2021-12-29 21:56:21 +00:00
}
2022-09-10 13:15:58 +00:00
SetAmmo ( pPlayer , stat ) ;
2021-12-29 21:56:21 +00:00
if ( stat )
viewSetMessage ( GStrings ( " TXTB_ALLWEAP " ) ) ;
else
{
if ( ! VanillaMode ( ) )
{
// Keep the pitchfork to avoid freeze
2022-09-10 13:15:58 +00:00
pPlayer - > hasWeapon [ kWeapPitchFork ] = 1 ;
pPlayer - > curWeapon = kWeapNone ;
pPlayer - > nextWeapon = kWeapPitchFork ;
2021-12-29 21:56:21 +00:00
}
viewSetMessage ( GStrings ( " TXTB_NOWEAP " ) ) ;
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void SetToys ( PLAYER * pPlayer , bool stat )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
if ( stat )
{
2022-09-10 13:15:58 +00:00
packStuff ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
viewSetMessage ( GStrings ( " TXTB_FULLINV " ) ) ;
}
else
{
2022-09-10 13:15:58 +00:00
packClear ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
viewSetMessage ( GStrings ( " TXTB_NOINV " ) ) ;
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void SetArmor ( PLAYER * pPlayer , bool stat )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
int nAmount ;
if ( stat )
{
viewSetMessage ( GStrings ( " TXTB_FULLARM " ) ) ;
nAmount = 3200 ;
}
else
{
viewSetMessage ( GStrings ( " TXTB_NOARM " ) ) ;
nAmount = 0 ;
}
for ( int i = 0 ; i < 3 ; i + + )
2022-09-10 13:15:58 +00:00
pPlayer - > armor [ i ] = nAmount ;
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void SetKeys ( PLAYER * pPlayer , bool stat )
2019-09-19 22:42:45 +00:00
{
2022-10-15 21:13:47 +00:00
for ( int i = 1 ; i < = 7 ; i + + )
2022-09-10 13:15:58 +00:00
pPlayer - > hasKey [ i ] = stat ;
2021-12-29 21:56:21 +00:00
if ( stat )
viewSetMessage ( GStrings ( " TXTB_ALLKEYS " ) ) ;
else
viewSetMessage ( GStrings ( " TXTB_NOKEYS " ) ) ;
2019-09-19 22:42:45 +00:00
}
void SetInfiniteAmmo ( bool stat )
{
2021-12-29 21:56:21 +00:00
gInfiniteAmmo = stat ;
if ( gInfiniteAmmo )
viewSetMessage ( GStrings ( " TXTB_INFAMMO " ) ) ;
else
viewSetMessage ( GStrings ( " TXTB_LIMAMMO " ) ) ;
2019-09-19 22:42:45 +00:00
}
void SetMap ( bool stat )
{
2021-12-29 21:56:21 +00:00
gFullMap = stat ;
if ( gFullMap )
viewSetMessage ( GStrings ( " TXTB_ALLMAP " ) ) ;
else
viewSetMessage ( GStrings ( " TXTB_NOALLMAP " ) ) ;
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void SetWooMode ( PLAYER * pPlayer , bool stat )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
if ( stat )
{
2022-09-10 13:15:58 +00:00
if ( ! powerupCheck ( pPlayer , kPwUpTwoGuns ) )
powerupActivate ( pPlayer , kPwUpTwoGuns ) ;
2021-12-29 21:56:21 +00:00
}
else
{
2022-09-10 13:15:58 +00:00
if ( powerupCheck ( pPlayer , kPwUpTwoGuns ) )
2021-12-29 21:56:21 +00:00
{
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpTwoGuns ] = 0 ;
powerupDeactivate ( pPlayer , kPwUpTwoGuns ) ;
2021-12-29 21:56:21 +00:00
}
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void ToggleWooMode ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
SetWooMode ( pPlayer , ! ( powerupCheck ( pPlayer , kPwUpTwoGuns ) ! = 0 ) ) ;
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void ToggleBoots ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
if ( powerupCheck ( pPlayer , kPwUpJumpBoots ) )
2021-12-29 21:56:21 +00:00
{
viewSetMessage ( GStrings ( " TXTB_NOJBOOTS " ) ) ;
if ( ! VanillaMode ( ) )
{
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpJumpBoots ] = 0 ;
pPlayer - > packSlots [ 4 ] . curAmount = 0 ;
2021-12-29 21:56:21 +00:00
}
2022-09-10 13:15:58 +00:00
powerupDeactivate ( pPlayer , kPwUpJumpBoots ) ;
2021-12-29 21:56:21 +00:00
}
else
{
viewSetMessage ( GStrings ( " TXTB_JBOOTS " ) ) ;
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpJumpBoots ] = gPowerUpInfo [ kPwUpJumpBoots ] . bonusTime ;
powerupActivate ( pPlayer , kPwUpJumpBoots ) ;
2021-12-29 21:56:21 +00:00
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void ToggleInvisibility ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
if ( powerupCheck ( pPlayer , kPwUpShadowCloak ) )
2021-12-29 21:56:21 +00:00
{
viewSetMessage ( GStrings ( " TXTB_VISIBLE " ) ) ;
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpShadowCloak ] = 0 ;
powerupDeactivate ( pPlayer , kPwUpShadowCloak ) ;
2021-12-29 21:56:21 +00:00
}
else
{
viewSetMessage ( GStrings ( " TXTB_INVISIBLE " ) ) ;
2022-09-10 13:15:58 +00:00
powerupActivate ( pPlayer , kPwUpShadowCloak ) ;
2021-12-29 21:56:21 +00:00
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void ToggleInvulnerability ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
if ( powerupCheck ( pPlayer , kPwUpDeathMask ) )
2021-12-29 21:56:21 +00:00
{
viewSetMessage ( GStrings ( " TXTB_VULN " ) ) ;
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpDeathMask ] = 0 ;
powerupDeactivate ( pPlayer , kPwUpDeathMask ) ;
2021-12-29 21:56:21 +00:00
}
else
{
viewSetMessage ( GStrings ( " TXTB_INVULN " ) ) ;
2022-09-10 13:15:58 +00:00
powerupActivate ( pPlayer , kPwUpDeathMask ) ;
2021-12-29 21:56:21 +00:00
}
2019-09-19 22:42:45 +00:00
}
2022-09-10 13:15:58 +00:00
void ToggleDelirium ( PLAYER * pPlayer )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
if ( powerupCheck ( pPlayer , kPwUpDeliriumShroom ) )
2021-12-29 21:56:21 +00:00
{
viewSetMessage ( GStrings ( " TXTB_NODELIR " ) ) ;
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpDeliriumShroom ] = 0 ;
powerupDeactivate ( pPlayer , kPwUpDeliriumShroom ) ;
2021-12-29 21:56:21 +00:00
}
else
{
viewSetMessage ( GStrings ( " TXTB_DELIR " ) ) ;
2022-09-10 13:15:58 +00:00
powerupActivate ( pPlayer , kPwUpDeliriumShroom ) ;
2021-12-29 21:56:21 +00:00
}
2019-09-19 22:42:45 +00:00
}
2020-08-03 18:51:31 +00:00
bool bPlayerCheated = false ;
2019-09-19 22:42:45 +00:00
2021-12-29 21:56:21 +00:00
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
static int parseArgs ( char * pzArgs , int * nArg1 , int * nArg2 )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
if ( ! nArg1 | | ! nArg2 | | strlen ( pzArgs ) < 3 )
return - 1 ;
* nArg1 = pzArgs [ 0 ] - ' 0 ' ;
int a1 = pzArgs [ 1 ] = = ' ' ? 0 : pzArgs [ 1 ] - ' 0 ' ;
* nArg2 = a1 * 10 + ( pzArgs [ 2 ] - ' 0 ' ) ;
return 2 ;
2019-09-19 22:42:45 +00:00
}
2021-12-29 21:56:21 +00:00
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
2020-09-02 23:32:51 +00:00
const char * GameInterface : : GenericCheat ( int player , int cheat )
2019-09-19 22:42:45 +00:00
{
2021-12-29 21:56:21 +00:00
// message processing is not perfect because many cheats output multiple messages.
2022-09-10 13:15:58 +00:00
PLAYER * pPlayer = & gPlayer [ player ] ;
2021-12-29 21:56:21 +00:00
if ( gGameOptions . nGameType ! = 0 | | numplayers > 1 ) // sp only for now.
return nullptr ;
2022-09-10 13:15:58 +00:00
if ( gamestate ! = GS_LEVEL | | pPlayer - > actor - > xspr . health = = 0 ) // must be alive and in a level to cheat.
2021-12-29 21:56:21 +00:00
return nullptr ;
bPlayerCheated = true ;
switch ( cheat )
{
case CHT_GOD :
2022-09-10 13:15:58 +00:00
return SetGodMode ( pPlayer , ! pPlayer - > godMode ) ;
2021-12-29 21:56:21 +00:00
case CHT_GODOFF :
2022-09-10 13:15:58 +00:00
return SetGodMode ( pPlayer , false ) ;
2021-12-29 21:56:21 +00:00
case CHT_GODON :
2022-09-10 13:15:58 +00:00
return SetGodMode ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
case CHT_NOCLIP :
return SetClipMode ( ! gNoClip ) ;
case kCheatSpielberg :
// demo record
break ;
case kCheatSatchel :
2022-09-10 13:15:58 +00:00
SetToys ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatKevorkian :
2022-09-10 13:15:58 +00:00
actDamageSprite ( pPlayer - > actor , pPlayer - > actor , kDamageBullet , 8000 ) ;
2021-12-29 21:56:21 +00:00
return GStrings ( " TXTB_KEVORKIAN " ) ;
case kCheatMcGee :
{
2022-09-10 13:15:58 +00:00
if ( ! pPlayer - > actor - > xspr . burnTime )
evPostActor ( pPlayer - > actor , 0 , kCallbackFXFlameLick ) ;
actBurnSprite ( pPlayer - > actor , pPlayer - > actor , 2400 ) ;
2021-12-29 21:56:21 +00:00
return GStrings ( " TXTB_FIRED " ) ;
}
case kCheatEdmark :
2022-09-10 13:15:58 +00:00
actDamageSprite ( pPlayer - > actor , pPlayer - > actor , kDamageExplode , 8000 ) ;
2021-12-29 21:56:21 +00:00
return GStrings ( " TXTB_THEDAYS " ) ;
case kCheatKrueger :
{
2022-09-10 13:15:58 +00:00
actHealDude ( pPlayer - > actor , 200 , 200 ) ;
pPlayer - > armor [ 1 ] = VanillaMode ( ) ? 200 : 3200 ;
if ( ! pPlayer - > actor - > xspr . burnTime )
evPostActor ( pPlayer - > actor , 0 , kCallbackFXFlameLick ) ;
actBurnSprite ( pPlayer - > actor , pPlayer - > actor , 2400 ) ;
2021-12-29 21:56:21 +00:00
return GStrings ( " TXTB_RETARD " ) ;
}
case kCheatSterno :
2022-09-10 13:15:58 +00:00
pPlayer - > blindEffect = 250 ;
2021-12-29 21:56:21 +00:00
break ;
case kCheat14 : // quakeEffect (causing a little flickerEffect), not used by any cheat code (dead code)
2022-09-10 13:15:58 +00:00
pPlayer - > flickerEffect = 360 ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatSpork :
2022-09-10 13:15:58 +00:00
actHealDude ( pPlayer - > actor , 200 , 200 ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatClarice :
for ( int i = 0 ; i < 3 ; i + + )
2022-09-10 13:15:58 +00:00
pPlayer - > armor [ i ] = 1600 ;
2021-12-29 21:56:21 +00:00
return GStrings ( " TXTB_HALFARMOR " ) ;
case kCheatFrankenstein :
2022-09-10 13:15:58 +00:00
pPlayer - > packSlots [ 0 ] . curAmount = 100 ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatCheeseHead :
2022-09-10 13:15:58 +00:00
pPlayer - > packSlots [ 1 ] . curAmount = 100 ;
2021-12-29 21:56:21 +00:00
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpDivingSuit ] = gPowerUpInfo [ kPwUpDivingSuit ] . bonusTime ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatTequila :
2022-09-10 13:15:58 +00:00
ToggleWooMode ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatFunkyShoes :
2022-09-10 13:15:58 +00:00
ToggleBoots ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatKeyMaster :
2022-09-10 13:15:58 +00:00
SetKeys ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatOneRing :
2022-09-10 13:15:58 +00:00
ToggleInvisibility ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatVoorhees :
2022-09-10 13:15:58 +00:00
ToggleInvulnerability ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatJoJo :
2022-09-10 13:15:58 +00:00
ToggleDelirium ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatLaraCroft :
SetInfiniteAmmo ( ! gInfiniteAmmo ) ;
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , gInfiniteAmmo ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatHongKong :
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
SetInfiniteAmmo ( true ) ;
break ;
case kCheatMontana :
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , true ) ;
SetToys ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatBunz :
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , true ) ;
SetWooMode ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatCousteau :
2022-09-10 13:15:58 +00:00
actHealDude ( pPlayer - > actor , 200 , 200 ) ;
pPlayer - > packSlots [ 1 ] . curAmount = 100 ;
2021-12-29 21:56:21 +00:00
if ( ! VanillaMode ( ) )
2022-09-10 13:15:58 +00:00
pPlayer - > pwUpTime [ kPwUpDivingSuit ] = gPowerUpInfo [ kPwUpDivingSuit ] . bonusTime ;
2021-12-29 21:56:21 +00:00
break ;
case kCheatForkYou :
SetInfiniteAmmo ( false ) ;
SetMap ( false ) ;
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , false ) ;
SetAmmo ( pPlayer , false ) ;
SetArmor ( pPlayer , false ) ;
SetToys ( pPlayer , false ) ;
SetKeys ( pPlayer , false ) ;
SetWooMode ( pPlayer , true ) ;
powerupActivate ( pPlayer , kPwUpDeliriumShroom ) ;
pPlayer - > actor - > xspr . health = 16 ;
pPlayer - > hasWeapon [ kWeapPitchFork ] = 1 ;
pPlayer - > curWeapon = kWeapNone ;
pPlayer - > nextWeapon = kWeapPitchFork ;
2021-12-29 21:56:21 +00:00
break ;
default :
return nullptr ;
}
return nullptr ;
2020-08-03 18:51:31 +00:00
}
2021-12-29 21:56:21 +00:00
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
2020-09-02 23:32:51 +00:00
static bool cheatGoonies ( cheatseq_t * )
2020-09-02 22:29:17 +00:00
{
2021-12-29 21:56:21 +00:00
SetMap ( ! gFullMap ) ;
return true ;
2020-09-02 22:29:17 +00:00
}
2020-09-02 23:32:51 +00:00
static bool cheatMario ( cheatseq_t * c )
{
2021-12-29 21:56:21 +00:00
int nEpisode , nLevel ;
if ( parseArgs ( ( char * ) c - > Args , & nEpisode , & nLevel ) = = 2 )
2020-09-04 18:46:44 +00:00
{
2021-05-02 07:08:57 +00:00
auto map = FindMapByIndex ( nEpisode , nLevel ) ;
2021-07-20 08:51:34 +00:00
if ( map ) DeferredStartGame ( map , g_nextskill ) ;
2020-09-04 18:46:44 +00:00
}
2021-12-29 21:56:21 +00:00
return true ;
2020-09-02 23:32:51 +00:00
}
2020-09-02 22:29:17 +00:00
2020-09-02 23:32:51 +00:00
static bool cheatCalgon ( cheatseq_t * )
2020-08-03 18:51:31 +00:00
{
2021-12-29 21:56:21 +00:00
levelEndLevel ( 0 ) ;
return true ;
2020-08-03 18:51:31 +00:00
}
2021-12-29 21:56:21 +00:00
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
2020-08-03 18:51:31 +00:00
static cheatseq_t s_CheatInfo [ ] = {
2021-12-29 21:56:21 +00:00
{ " MPKFA " , nullptr , SendGenericCheat , 0 , CHT_GOD } ,
{ " CAPINMYASS " , nullptr , SendGenericCheat , 0 , CHT_GODOFF } ,
{ " NOCAPINMYASS " , nullptr , SendGenericCheat , 0 , CHT_GODON } ,
{ " I WANNA BE LIKE KEVIN " , nullptr , SendGenericCheat , 0 , CHT_GODON } ,
{ " IDAHO " , " give weapons " } ,
{ " GRISWOLD " , " give armor " } ,
{ " MONTANA " , nullptr , SendGenericCheat , 0 , kCheatMontana } , // MONTANA (All weapons, full ammo and all items)
{ " EDMARK " , nullptr , SendGenericCheat , 0 , kCheatEdmark } , // EDMARK (Does a lot of fire damage to you (if you have 200HP and 200 fire armor then you can survive). Displays the message "THOSE WERE THE DAYS".)
{ " TEQUILA " , nullptr , SendGenericCheat , 0 , kCheatTequila } , // TEQUILA (Guns akimbo power-up)
{ " BUNZ " , nullptr , SendGenericCheat , 0 , kCheatBunz } , // BUNZ (All weapons, full ammo, and guns akimbo power-up)
{ " FUNKY SHOES " , nullptr , SendGenericCheat , 0 , kCheatFunkyShoes } , // FUNKY SHOES (Gives jump boots item and activates it)
{ " GATEKEEPER " , nullptr , SendGenericCheat , 0 , kCheatGateKeeper } , // GATEKEEPER (Sets the you cheated flag to true, at the end of the level you will see that you have cheated)
{ " KEYMASTER " , nullptr , SendGenericCheat , 0 , kCheatKeyMaster } , // KEYMASTER (All keys)
{ " JOJO " , nullptr , SendGenericCheat , 0 , kCheatJoJo } , // JOJO (Drunk mode (same effect as getting bitten by red spider))
{ " SATCHEL " , nullptr , SendGenericCheat , 0 , kCheatSatchel } , // SATCHEL (Full inventory)
{ " SPORK " , nullptr , SendGenericCheat , 0 , kCheatSpork } , // SPORK (200% health (same effect as getting life seed))
{ " ONERING " , nullptr , SendGenericCheat , 0 , kCheatOneRing } , // ONERING (Cloak of invisibility power-up)
{ " MARIO### " , nullptr , cheatMario } , // MARIO (Warp to level E M, e.g.: MARIO 1 3 will take you to Phantom Express)
2022-01-03 06:11:01 +00:00
{ " MARIO ### " , nullptr , cheatMario } , // MARIO (Warp to level E M, e.g.: MARIO 1 3 will take you to Phantom Express)
2021-12-29 21:56:21 +00:00
{ " CALGON " , nullptr , cheatCalgon } , // CALGON (Jumps to next level)
{ " KEVORKIAN " , nullptr , SendGenericCheat , 0 , kCheatKevorkian } , // KEVORKIAN (Does a lot of physical damage to you (if you have 200HP and 200 fire armor then you can survive). Displays the message "KEVORKIAN APPROVES".)
{ " MCGEE " , nullptr , SendGenericCheat , 0 , kCheatMcGee } , // MCGEE (Sets you on fire. Displays the message "YOU'RE FIRED".)
{ " KRUEGER " , nullptr , SendGenericCheat , 0 , kCheatKrueger } , // KRUEGER (200% health, but sets you on fire. Displays the message "FLAME RETARDANT".)
{ " CHEESEHEAD " , nullptr , SendGenericCheat , 0 , kCheatCheeseHead } , // CHEESEHEAD (100% diving suit)
{ " COUSTEAU " , nullptr , SendGenericCheat , 0 , kCheatCousteau } , // COUSTEAU (200% health and diving suit)
{ " VOORHEES " , nullptr , SendGenericCheat , 0 , kCheatVoorhees } , // VOORHEES (Death mask power-up)
{ " LARA CROFT " , nullptr , SendGenericCheat , 0 , kCheatLaraCroft } , // LARA CROFT (All weapons and infinite ammo. Displays the message "LARA RULES". Typing it the second time will lose all weapons and ammo.)
{ " HONGKONG " , nullptr , SendGenericCheat , 0 , kCheatHongKong } , // HONGKONG (All weapons and infinite ammo)
{ " FRANKENSTEIN " , nullptr , SendGenericCheat , 0 , kCheatFrankenstein } , // FRANKENSTEIN (100% med-kit)
{ " STERNO " , nullptr , SendGenericCheat , 0 , kCheatSterno } , // STERNO (Temporary blindness (same effect as getting bitten by green spider))
{ " CLARICE " , nullptr , SendGenericCheat , 0 , kCheatClarice } , // CLARICE (Gives 100% body armor, 100% fire armor, 100% spirit armor)
{ " FORK YOU " , nullptr , SendGenericCheat , 0 , kCheatForkYou } , // FORK YOU (Drunk mode, 1HP, no armor, no weapons, no ammo, no items, no keys, no map, guns akimbo power-up)
{ " LIEBERMAN " , nullptr , SendGenericCheat , 0 , kCheatLieberMan } , // LIEBERMAN (Sets the you cheated flag to true, at the end of the level you will see that you have cheated)
{ " EVA GALLI " , nullptr , SendGenericCheat , 0 , CHT_NOCLIP } ,
{ " RATE " , " toggle r_showfps " , nullptr , 1 } , // RATE (Display frame rate (doesn't count as a cheat))
{ " GOONIES " , nullptr , cheatGoonies , 0 } , // GOONIES (Enable full map. Displays the message "YOU HAVE THE MAP".)
//{"SPIELBERG", nullptr, doCheat<kCheatSpielberg, 1 }, // SPIELBERG (Disables all cheats. If number values corresponding to a level and episode number are entered after the cheat word (i.e. "spielberg 1 3" for Phantom Express), you will be spawned to said level and the game will begin recording a demo from your actions.)
} ;
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
2019-09-19 22:42:45 +00:00
2020-08-03 18:51:31 +00:00
void cheatReset ( void )
2019-09-19 22:42:45 +00:00
{
2022-09-10 13:15:58 +00:00
PLAYER * pPlayer = & gPlayer [ myconnectindex ] ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = 0 ;
2022-09-10 13:15:58 +00:00
playerSetGodMode ( pPlayer , 0 ) ;
2021-12-29 21:56:21 +00:00
gNoClip = 0 ;
2022-09-10 13:15:58 +00:00
packClear ( pPlayer ) ;
2021-12-29 21:56:21 +00:00
gInfiniteAmmo = 0 ;
gFullMap = 0 ;
2019-09-19 22:42:45 +00:00
}
2020-09-03 14:31:31 +00:00
2021-12-29 21:56:21 +00:00
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
static void cmd_Give ( int player , uint8_t * * stream , bool skip )
2020-09-03 14:31:31 +00:00
{
2022-09-10 13:15:58 +00:00
PLAYER * pPlayer = & gPlayer [ player ] ;
2021-12-29 21:56:21 +00:00
int type = ReadByte ( stream ) ;
if ( skip ) return ;
2022-09-10 13:15:58 +00:00
if ( numplayers ! = 1 | | gamestate ! = GS_LEVEL | | pPlayer - > actor - > xspr . health = = 0 )
2021-12-29 21:56:21 +00:00
{
Printf ( " give: Cannot give while dead or not in a single-player game. \n " ) ;
return ;
}
switch ( type )
{
case GIVE_ALL :
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , true ) ;
SetAmmo ( pPlayer , true ) ;
SetToys ( pPlayer , true ) ;
SetArmor ( pPlayer , true ) ;
SetKeys ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
case GIVE_HEALTH :
2022-09-10 13:15:58 +00:00
actHealDude ( pPlayer - > actor , 200 , 200 ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
case GIVE_WEAPONS :
2022-09-10 13:15:58 +00:00
SetWeapons ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
case GIVE_AMMO :
2022-09-10 13:15:58 +00:00
SetAmmo ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
case GIVE_ARMOR :
2022-09-10 13:15:58 +00:00
SetArmor ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
case GIVE_KEYS :
2022-09-10 13:15:58 +00:00
SetKeys ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
case GIVE_INVENTORY :
2022-09-10 13:15:58 +00:00
SetToys ( pPlayer , true ) ;
2021-12-29 21:56:21 +00:00
bPlayerCheated = true ;
break ;
default :
break ;
}
2020-09-03 14:31:31 +00:00
}
2020-08-03 18:51:31 +00:00
void InitCheats ( )
{
2021-12-29 21:56:21 +00:00
SetCheats ( s_CheatInfo , countof ( s_CheatInfo ) ) ;
Net_SetCommandHandler ( DEM_GIVE , cmd_Give ) ;
2020-08-03 18:51:31 +00:00
}
2019-09-22 06:39:22 +00:00
END_BLD_NS