ref: cb74057b461e6649c00c216a9b67c6ded683eb21
parent: 749e078e9f67af467e563c77688b6fccf352b001
author: Simon Howard <fraggle@gmail.com>
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 artifactsfor (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);
--
⑨