ref: cb74057b461e6649c00c216a9b67c6ded683eb21
parent: 749e078e9f67af467e563c77688b6fccf352b001
author: Simon Howard <[email protected]>
date: Wed Sep 24 14:15:06 EDT 2008
Rework Heretic cheat code to use common m_cheat.c code. Subversion-branch: /branches/raven-branch Subversion-revision: 1269
--- a/src/heretic/sb_bar.c
+++ b/src/heretic/sb_bar.c
@@ -25,32 +25,18 @@
#include "doomdef.h"
#include "i_video.h"
+#include "m_cheat.h"
#include "m_random.h"
#include "p_local.h"
#include "s_sound.h"
#include "v_video.h"
-// Macros
-
-#define CHEAT_ENCRYPT(a) \
- ((((a)&1)<<5)+ \
- (((a)&2)<<1)+ \
- (((a)&4)<<4)+ \
- (((a)&8)>>3)+ \
- (((a)&16)>>3)+ \
- (((a)&32)<<2)+ \
- (((a)&64)>>2)+ \
- (((a)&128)>>4))
-
// Types
typedef struct Cheat_s
{
void (*func) (player_t * player, struct Cheat_s * cheat);
- byte *sequence;
- byte *pos;
- int args[2];
- int currentArg;
+ cheatseq_t *seq;
} Cheat_t;
// Private Functions
@@ -65,7 +51,6 @@
static void DrawInventoryBar(void);
static void DrawFullScreenStuff(void);
static boolean HandleCheats(byte key);
-static boolean CheatAddKey(Cheat_t * cheat, byte key, boolean * eat);
static void CheatGodFunc(player_t * player, Cheat_t * cheat);
static void CheatNoClipFunc(player_t * player, Cheat_t * cheat);
static void CheatWeaponsFunc(player_t * player, Cheat_t * cheat);
@@ -131,200 +116,69 @@
int spinbooklump;
int spinflylump;
-static byte CheatLookup[256];
-
// Toggle god mode
-static byte CheatGodSeq[] = {
- CHEAT_ENCRYPT('q'),
- CHEAT_ENCRYPT('u'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('c'),
- CHEAT_ENCRYPT('k'),
- CHEAT_ENCRYPT('e'),
- CHEAT_ENCRYPT('n'),
- 0xff
-};
+cheatseq_t CheatGodSeq = CHEAT("quicken", 0);
// Toggle no clipping mode
-static byte CheatNoClipSeq[] = {
- CHEAT_ENCRYPT('k'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('t'),
- CHEAT_ENCRYPT('t'),
- CHEAT_ENCRYPT('y'),
- 0xff
-};
+cheatseq_t CheatNoClipSeq = CHEAT("kitty", 0);
// Get all weapons and ammo
-static byte CheatWeaponsSeq[] = {
- CHEAT_ENCRYPT('r'),
- CHEAT_ENCRYPT('a'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('b'),
- CHEAT_ENCRYPT('o'),
- 0xff
-};
+cheatseq_t CheatWeaponsSeq = CHEAT("rambo", 0);
// Toggle tome of power
-static byte CheatPowerSeq[] = {
- CHEAT_ENCRYPT('s'),
- CHEAT_ENCRYPT('h'),
- CHEAT_ENCRYPT('a'),
- CHEAT_ENCRYPT('z'),
- CHEAT_ENCRYPT('a'),
- CHEAT_ENCRYPT('m'),
- 0xff, 0
-};
+cheatseq_t CheatPowerSeq = CHEAT("shazam", 0);
// Get full health
-static byte CheatHealthSeq[] = {
- CHEAT_ENCRYPT('p'),
- CHEAT_ENCRYPT('o'),
- CHEAT_ENCRYPT('n'),
- CHEAT_ENCRYPT('c'),
- CHEAT_ENCRYPT('e'),
- 0xff
-};
+cheatseq_t CheatHealthSeq = CHEAT("ponce", 0);
// Get all keys
-static byte CheatKeysSeq[] = {
- CHEAT_ENCRYPT('s'),
- CHEAT_ENCRYPT('k'),
- CHEAT_ENCRYPT('e'),
- CHEAT_ENCRYPT('l'),
- 0xff, 0
-};
+cheatseq_t CheatKeysSeq = CHEAT("skel", 0);
// Toggle sound debug info
-static byte CheatSoundSeq[] = {
- CHEAT_ENCRYPT('n'),
- CHEAT_ENCRYPT('o'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('s'),
- CHEAT_ENCRYPT('e'),
- 0xff
-};
+cheatseq_t CheatSoundSeq = CHEAT("noise", 0);
// Toggle ticker
-static byte CheatTickerSeq[] = {
- CHEAT_ENCRYPT('t'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('c'),
- CHEAT_ENCRYPT('k'),
- CHEAT_ENCRYPT('e'),
- CHEAT_ENCRYPT('r'),
- 0xff, 0
-};
+cheatseq_t CheatTickerSeq = CHEAT("ticker", 0);
// Get an artifact 1st stage (ask for type)
-static byte CheatArtifact1Seq[] = {
- CHEAT_ENCRYPT('g'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('e'),
- 0xff
-};
+cheatseq_t CheatArtifact1Seq = CHEAT("gimme", 0);
// Get an artifact 2nd stage (ask for count)
-static byte CheatArtifact2Seq[] = {
- CHEAT_ENCRYPT('g'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('e'),
- 0, 0xff, 0
-};
+cheatseq_t CheatArtifact2Seq = CHEAT("gimme", 1);
// Get an artifact final stage
-static byte CheatArtifact3Seq[] = {
- CHEAT_ENCRYPT('g'),
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('m'),
- CHEAT_ENCRYPT('e'),
- 0, 0, 0xff
-};
+cheatseq_t CheatArtifact3Seq = CHEAT("gimme", 2);
// Warp to new level
-static byte CheatWarpSeq[] = {
- CHEAT_ENCRYPT('e'),
- CHEAT_ENCRYPT('n'),
- CHEAT_ENCRYPT('g'),
- CHEAT_ENCRYPT('a'),
- CHEAT_ENCRYPT('g'),
- CHEAT_ENCRYPT('e'),
- 0, 0, 0xff, 0
-};
+cheatseq_t CheatWarpSeq = CHEAT("engage", 2);
// Save a screenshot
-static 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
-};
+cheatseq_t CheatChickenSeq = CHEAT("cockadoodledoo", 0);
// Kill all monsters
-static 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
-};
+cheatseq_t CheatMassacreSeq = CHEAT("massacre", 0);
-static byte CheatIDKFASeq[] = {
- CHEAT_ENCRYPT('i'),
- CHEAT_ENCRYPT('d'),
- CHEAT_ENCRYPT('k'),
- CHEAT_ENCRYPT('f'),
- CHEAT_ENCRYPT('a'),
- 0xff, 0
-};
+cheatseq_t CheatIDKFASeq = CHEAT("idkfa", 0);
+cheatseq_t CheatIDDQDSeq = CHEAT("iddqd", 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
+ {CheatGodFunc, &CheatGodSeq},
+ {CheatNoClipFunc, &CheatNoClipSeq},
+ {CheatWeaponsFunc, &CheatWeaponsSeq},
+ {CheatPowerFunc, &CheatPowerSeq},
+ {CheatHealthFunc, &CheatHealthSeq},
+ {CheatKeysFunc, &CheatKeysSeq},
+ {CheatSoundFunc, &CheatSoundSeq},
+ {CheatTickerFunc, &CheatTickerSeq},
+ {CheatArtifact1Func, &CheatArtifact1Seq},
+ {CheatArtifact2Func, &CheatArtifact2Seq},
+ {CheatArtifact3Func, &CheatArtifact3Seq},
+ {CheatWarpFunc, &CheatWarpSeq},
+ {CheatChickenFunc, &CheatChickenSeq},
+ {CheatMassacreFunc, &CheatMassacreSeq},
+ {CheatIDKFAFunc, &CheatIDKFASeq},
+ {CheatIDDQDFunc, &CheatIDDQDSeq},
+ {NULL, NULL}
};
//---------------------------------------------------------------------------
@@ -385,10 +239,6 @@
playpalette = W_GetNumForName("PLAYPAL");
spinbooklump = W_GetNumForName("SPINBK0");
spinflylump = W_GetNumForName("SPFLY0");
- for (i = 0; i < 256; i++)
- {
- CheatLookup[i] = CHEAT_ENCRYPT(i);
- }
}
//---------------------------------------------------------------------------
@@ -1177,7 +1027,7 @@
eat = false;
for (i = 0; Cheats[i].func != NULL; i++)
{
- if (CheatAddKey(&Cheats[i], key, &eat))
+ if (cht_CheckCheat(Cheats[i].seq, key))
{
Cheats[i].func(&players[consoleplayer], &Cheats[i]);
S_StartSound(NULL, sfx_dorcls);
@@ -1188,45 +1038,6 @@
//--------------------------------------------------------------------------
//
-// 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 (CheatLookup[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
//
//--------------------------------------------------------------------------
@@ -1368,13 +1179,15 @@
static void CheatArtifact3Func(player_t * player, Cheat_t * cheat)
{
+ char args[2];
int i;
int j;
artitype_t type;
int count;
- type = cheat->args[0] - 'a' + 1;
- count = cheat->args[1] - '0';
+ cht_GetParam(cheat->seq, args);
+ type = args[0] - 'a' + 1;
+ count = args[1] - '0';
if (type == 26 && count == 0)
{ // All artifacts
for (i = arti_none + 1; i < NUMARTIFACTS; i++)
@@ -1414,11 +1227,14 @@
static void CheatWarpFunc(player_t * player, Cheat_t * cheat)
{
+ char args[2];
int episode;
int map;
- episode = cheat->args[0] - '0';
- map = cheat->args[1] - '0';
+ cht_GetParam(cheat->seq, args);
+
+ episode = args[0] - '0';
+ map = args[1] - '0';
if (M_ValidEpisodeMap(episode, map))
{
G_DeferedInitNew(gameskill, episode, map);