📄 m_cheat.c
字号:
CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('e'), 0, 0xff, 0};// Get an artifact final stagestatic byte CheatArtifact3Seq[] ={ CHEAT_ENCRYPT('g'), CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('e'), 0, 0, 0xff};// Warp to new levelstatic byte CheatWarpSeq[] ={ CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('n'), CHEAT_ENCRYPT('g'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('g'), CHEAT_ENCRYPT('e'), 0, 0, 0xff, 0};// Save a screenshotstatic byte CheatChickenSeq[] ={ CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('o'), CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('k'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('d'), CHEAT_ENCRYPT('o'), CHEAT_ENCRYPT('o'), CHEAT_ENCRYPT('d'), CHEAT_ENCRYPT('l'), CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('d'), CHEAT_ENCRYPT('o'), CHEAT_ENCRYPT('o'), 0xff, 0};// Kill all monstersstatic byte CheatMassacreSeq[] ={ CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('r'), CHEAT_ENCRYPT('e'), 0xff, 0};static byte CheatIDKFASeq[] ={ CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('d'), CHEAT_ENCRYPT('k'), CHEAT_ENCRYPT('f'), CHEAT_ENCRYPT('a'), 0xff, 0};static byte CheatIDDQDSeq[] ={ CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('d'), CHEAT_ENCRYPT('d'), CHEAT_ENCRYPT('q'), CHEAT_ENCRYPT('d'), 0xff, 0};static Cheat_t Cheats[] ={ { CheatGodFunc, CheatGodSeq, NULL, {0, 0}, 0 }, { CheatNoClipFunc, CheatNoClipSeq, NULL, {0, 0}, 0 }, { CheatWeaponsFunc, CheatWeaponsSeq, NULL, {0, 0}, 0 }, { CheatPowerFunc, CheatPowerSeq, NULL, {0, 0}, 0 }, { CheatHealthFunc, CheatHealthSeq, NULL, {0, 0}, 0 }, { CheatKeysFunc, CheatKeysSeq, NULL, {0, 0}, 0 },// { CheatSoundFunc, CheatSoundSeq, NULL, 0, 0, 0 }, { CheatTickerFunc, CheatTickerSeq, NULL, {0, 0}, 0 }, { CheatArtifact1Func, CheatArtifact1Seq, NULL, {0, 0}, 0 }, { CheatArtifact2Func, CheatArtifact2Seq, NULL, {0, 0}, 0 }, { CheatArtifact3Func, CheatArtifact3Seq, NULL, {0, 0}, 0 }, { CheatWarpFunc, CheatWarpSeq, NULL, {0, 0}, 0 }, { CheatChickenFunc, CheatChickenSeq, NULL, {0, 0}, 0 }, { CheatMassacreFunc, CheatMassacreSeq, NULL, {0, 0}, 0 }, { CheatIDKFAFunc, CheatIDKFASeq, NULL, {0, 0}, 0 }, { CheatIDDQDFunc, CheatIDDQDSeq, NULL, {0, 0}, 0 }, { NULL, NULL, NULL, {0, 0}, 0 } // Terminator};//--------------------------------------------------------------------------//// FUNC HandleCheats//// Returns true if the caller should eat the key.////--------------------------------------------------------------------------static boolean HandleCheats(byte key){ int i; boolean eat; if(netgame || gameskill == sk_nightmare) { // Can't cheat in a net-game, or in nightmare mode return(false); } if(players[consoleplayer].health <= 0) { // Dead players can't cheat return(false); } eat = false; for(i = 0; Cheats[i].func != NULL; i++) { if(CheatAddKey(&Cheats[i], key, &eat)) { Cheats[i].func(&players[consoleplayer], &Cheats[i]); S_StartSound(NULL, sfx_dorcls); } } return(eat);}//--------------------------------------------------------------------------//// FUNC CheatAddkey//// Returns true if the added key completed the cheat, false otherwise.////--------------------------------------------------------------------------static boolean CheatAddKey(Cheat_t *cheat, byte key, boolean *eat){ if(!cheat->pos) { cheat->pos = cheat->sequence; cheat->currentArg = 0; } if(*cheat->pos == 0) { *eat = true; cheat->args[cheat->currentArg++] = key; cheat->pos++; } else if( cheat_xlate_table[key] == *cheat->pos) { cheat->pos++; } else { cheat->pos = cheat->sequence; cheat->currentArg = 0; } if(*cheat->pos == 0xff) { cheat->pos = cheat->sequence; cheat->currentArg = 0; return(true); } return(false);}//--------------------------------------------------------------------------//// CHEAT FUNCTIONS////--------------------------------------------------------------------------static void CheatGodFunc(player_t *player, Cheat_t *cheat){ player->cheats ^= CF_GODMODE; if(player->cheats&CF_GODMODE) { P_SetMessage(player, TXT_CHEATGODON, false); } else { P_SetMessage(player, TXT_CHEATGODOFF, false); } st_recalc = true;}static void CheatNoClipFunc(player_t *player, Cheat_t *cheat){ player->cheats ^= CF_NOCLIP; if(player->cheats&CF_NOCLIP) { P_SetMessage(player, TXT_CHEATNOCLIPON, false); } else { P_SetMessage(player, TXT_CHEATNOCLIPOFF, false); }}static void CheatWeaponsFunc(player_t *player, Cheat_t *cheat){ int i; //extern boolean *WeaponInShareware; player->armorpoints = 200; player->armortype = 2; if(!player->backpack) { for(i = 0; i < NUMAMMO; i++) { player->maxammo[i] *= 2; } player->backpack = true; } for(i = 0; i < NUMWEAPONS-1; i++) { player->weaponowned[i] = true; } if(shareware) { player->weaponowned[wp_skullrod] = false; player->weaponowned[wp_phoenixrod] = false; player->weaponowned[wp_mace] = false; } for(i = 0; i < NUMAMMO; i++) { player->ammo[i] = player->maxammo[i]; } P_SetMessage(player, TXT_CHEATWEAPONS, false);}static void CheatPowerFunc(player_t *player, Cheat_t *cheat){ if(player->powers[pw_weaponlevel2]) { player->powers[pw_weaponlevel2] = 0; P_SetMessage(player, TXT_CHEATPOWEROFF, false); } else { P_UseArtifact(player, arti_tomeofpower); P_SetMessage(player, TXT_CHEATPOWERON, false); }}static void CheatHealthFunc(player_t *player, Cheat_t *cheat){ if(player->chickenTics) { player->health = player->mo->health = MAXCHICKENHEALTH; } else { player->health = player->mo->health = MAXHEALTH; } P_SetMessage(player, TXT_CHEATHEALTH, false);}static void CheatKeysFunc(player_t *player, Cheat_t *cheat){ extern int playerkeys; player->cards |= it_allkeys; playerkeys = 7; // Key refresh flags P_SetMessage(player, TXT_CHEATKEYS, false);}static void CheatTickerFunc(player_t *player, Cheat_t *cheat){ cv_ticrate.value = !cv_ticrate.value; if(cv_ticrate.value) { P_SetMessage(player, TXT_CHEATTICKERON, false); } else { P_SetMessage(player, TXT_CHEATTICKEROFF, false); }}static void CheatArtifact1Func(player_t *player, Cheat_t *cheat){ P_SetMessage(player, TXT_CHEATARTIFACTS1, false);}static void CheatArtifact2Func(player_t *player, Cheat_t *cheat){ P_SetMessage(player, TXT_CHEATARTIFACTS2, false);}static void CheatArtifact3Func(player_t *player, Cheat_t *cheat){ int i; int j; artitype_t type; int count; type = cheat->args[0]-'a'+1; count = cheat->args[1]-'0'; if(type == 26 && count == 0) { // All artifacts for(i = arti_none+1; i < NUMARTIFACTS; i++) { if(shareware && (i == arti_superhealth || i == arti_teleport)) { continue; } for(j = 0; j < 16; j++) { P_GiveArtifact(player, i, NULL); } } P_SetMessage(player, TXT_CHEATARTIFACTS3, false); } else if(type > arti_none && type < NUMARTIFACTS && count > 0 && count < 10) { if(shareware && (type == arti_superhealth || type == arti_teleport)) { P_SetMessage(player, TXT_CHEATARTIFACTSFAIL, false); return; } for(i = 0; i < count; i++) { P_GiveArtifact(player, type, NULL); } P_SetMessage(player, TXT_CHEATARTIFACTS3, false); } else { // Bad input P_SetMessage(player, TXT_CHEATARTIFACTSFAIL, false); }}static void CheatWarpFunc(player_t *player, Cheat_t *cheat){ int episode; int map; char *mapname; episode = cheat->args[0]-'0'; map = cheat->args[1]-'0'; mapname = G_BuildMapName(episode, map); if( W_CheckNumForName( mapname )>0 ) { G_DeferedInitNew(gameskill, mapname, false); P_SetMessage(player, TXT_CHEATWARP, false); }}static void CheatChickenFunc(player_t *player, Cheat_t *cheat){ extern boolean P_UndoPlayerChicken(player_t *player); if(player->chickenTics) { if(P_UndoPlayerChicken(player)) { P_SetMessage(player, TXT_CHEATCHICKENOFF, false); } } else if(P_ChickenMorphPlayer(player)) { P_SetMessage(player, TXT_CHEATCHICKENON, false); }}static void CheatMassacreFunc(player_t *player, Cheat_t *cheat){ P_Massacre(); P_SetMessage(player, TXT_CHEATMASSACRE, false);}static void CheatIDKFAFunc(player_t *player, Cheat_t *cheat){ int i; if(player->chickenTics) { return; } for(i = 1; i < 8; i++) { player->weaponowned[i] = false; } player->pendingweapon = wp_staff; P_SetMessage(player, TXT_CHEATIDKFA, true);}static void CheatIDDQDFunc(player_t *player, Cheat_t *cheat){ P_DamageMobj(player->mo, NULL, player->mo, 10000); P_SetMessage(player, TXT_CHEATIDDQD, true);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -