From c2fb9dc5673b63e8f7286b9d0edbcd8a7865c8bd Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Wed, 29 Oct 2008 21:04:35 +0000 Subject: Update Hexen to use common cheats code. Subversion-branch: /branches/raven-branch Subversion-revision: 1366 --- HH-TODO | 2 - src/hexen/sb_bar.c | 411 +++++++++++------------------------------------------ 2 files changed, 86 insertions(+), 327 deletions(-) diff --git a/HH-TODO b/HH-TODO index afc97372..0a016599 100644 --- a/HH-TODO +++ b/HH-TODO @@ -1,6 +1,5 @@ * Remove all dependencies of common code on doom/ - net_client.c - * Split d_iwad.c into common and use for Heretic/Hexen * Update netcode for new ticcmd_t fields * Chocolate Setup to allow configuration for H/H * Update docgen to generate manpages for Heretic/Hexen. @@ -23,7 +22,6 @@ Hexen: * CD-ROM music playback * Multiplayer code to use Chocolate Doom multiplayer code. * Frequency shifted sounds. - * Use the common cheats code * Check for endianness assumptions - mostly done now * Savegame code to write structures predictably and endianness-correct * Remove NeXT and WATCOMC defines diff --git a/src/hexen/sb_bar.c b/src/hexen/sb_bar.c index 9930cccc..9025db40 100644 --- a/src/hexen/sb_bar.c +++ b/src/hexen/sb_bar.c @@ -27,35 +27,19 @@ #include "h2def.h" #include "i_video.h" #include "m_bbox.h" +#include "m_cheat.h" #include "p_local.h" #include "s_sound.h" #include "v_video.h" -#ifdef __WATCOMC__ #include "i_sound.h" // For CD stuff -#endif - -// MACROS ------------------------------------------------------------------ - -#define CHEAT_ENCRYPT(a) \ - ((((a)&1)<<2)+ \ - (((a)&2)>>1)+ \ - (((a)&4)<<5)+ \ - (((a)&8)<<2)+ \ - (((a)&16)>>3)+ \ - (((a)&32)<<1)+ \ - (((a)&64)>>3)+ \ - (((a)&128)>>3)) // 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; // EXTERNAL FUNCTION PROTOTYPES -------------------------------------------- @@ -136,7 +120,6 @@ boolean i_CDMusic; // in Watcom, defined in i_ibm // PRIVATE DATA DEFINITIONS ------------------------------------------------ static int DisplayTicker = 0; -static byte CheatLookup[256]; static int HealthMarker; //static int ChainWiggle; static player_t *CPlayer; @@ -184,335 +167,100 @@ static patch_t *PatchINVRTGEM1; static patch_t *PatchINVRTGEM2; // Toggle god mode -static byte CheatGodSeq[] = { - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('n'), - 0xff -}; +cheatseq_t CheatGodSeq = CHEAT("satan", 0); // Toggle no clipping mode -static byte CheatNoClipSeq[] = { - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('p'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - 0xff -}; +cheatseq_t CheatNoClipSeq = CHEAT("casper", 0); // Get all weapons and mana -static byte CheatWeaponsSeq[] = { - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('a'), - 0xff -}; +cheatseq_t CheatWeaponsSeq = CHEAT("nra", 0); // Get full health -static byte CheatHealthSeq[] = { - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('l'), - CHEAT_ENCRYPT('u'), - CHEAT_ENCRYPT('b'), - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('d'), - 0xff -}; +cheatseq_t CheatHealthSeq = CHEAT("clubmed", 0); // Get all keys -static byte CheatKeysSeq[] = { - CHEAT_ENCRYPT('l'), - CHEAT_ENCRYPT('o'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('h'), - 0xff, 0 -}; +cheatseq_t CheatKeysSeq = CHEAT("locksmith", 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 all artifacts -static byte CheatArtifactAllSeq[] = { - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('d'), - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('a'), - 0xff, 0 -}; +cheatseq_t CheatArtifactAllSeq = CHEAT("indiana", 0); // Get all puzzle pieces -static byte CheatPuzzleSeq[] = { - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('h'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('l'), - CHEAT_ENCRYPT('o'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('k'), - 0xff, 0 -}; +cheatseq_t CheatPuzzleSeq = CHEAT("sherlock", 0); // Warp to new level -static byte CheatWarpSeq[] = { - CHEAT_ENCRYPT('v'), - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('t'), - 0, 0, 0xff, 0 -}; +cheatseq_t CheatWarpSeq = CHEAT("visit", 2); // Become a pig -static byte CheatPigSeq[] = { - CHEAT_ENCRYPT('d'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('l'), - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('v'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('e'), - 0xff, 0 -}; +cheatseq_t CheatPigSeq = CHEAT("deliverance", 0); // Kill all monsters -static byte CheatMassacreSeq[] = { - CHEAT_ENCRYPT('b'), - CHEAT_ENCRYPT('u'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('h'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - 0xff, 0 -}; +cheatseq_t CheatMassacreSeq = CHEAT("butcher", 0); -static byte CheatIDKFASeq[] = { - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('o'), - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('n'), - 0xff, 0 -}; +cheatseq_t CheatIDKFASeq = CHEAT("conan", 0); -static byte CheatQuickenSeq1[] = { - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('k'), - 0xff, 0 -}; +cheatseq_t CheatQuickenSeq1 = CHEAT("martek", 0); -static byte CheatQuickenSeq2[] = { - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('k'), - 0xff, 0 -}; +cheatseq_t CheatQuickenSeq2 = CHEAT("martekmartek", 0); -static byte CheatQuickenSeq3[] = { - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('k'), - 0xff, 0 -}; +cheatseq_t CheatQuickenSeq3 = CHEAT("martekmartekmartek", 0); // New class -static byte CheatClass1Seq[] = { - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('h'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('d'), - CHEAT_ENCRYPT('o'), - CHEAT_ENCRYPT('w'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - 0xff, 0 -}; +cheatseq_t CheatClass1Seq = CHEAT("shadowcaster", 0); -static byte CheatClass2Seq[] = { - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('h'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('d'), - CHEAT_ENCRYPT('o'), - CHEAT_ENCRYPT('w'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('t'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - 0, 0xff, 0 -}; +cheatseq_t CheatClass2Seq = CHEAT("shadowcaster", 1); -static byte CheatInitSeq[] = { - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('i'), - CHEAT_ENCRYPT('t'), - 0xff, 0 -}; +cheatseq_t CheatInitSeq = CHEAT("init", 0); -static byte CheatVersionSeq[] = { - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('j'), - CHEAT_ENCRYPT('o'), - CHEAT_ENCRYPT('n'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('s'), - 0xff, 0 -}; +cheatseq_t CheatVersionSeq = CHEAT("mrjones", 0); -static byte CheatDebugSeq[] = { - CHEAT_ENCRYPT('w'), - CHEAT_ENCRYPT('h'), - CHEAT_ENCRYPT('e'), - CHEAT_ENCRYPT('r'), - CHEAT_ENCRYPT('e'), - 0xff, 0 -}; +cheatseq_t CheatDebugSeq = CHEAT("where", 0); -static byte CheatScriptSeq1[] = { - CHEAT_ENCRYPT('p'), - CHEAT_ENCRYPT('u'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('e'), - 0xff, 0 -}; +cheatseq_t CheatScriptSeq1 = CHEAT("puke", 0); -static byte CheatScriptSeq2[] = { - CHEAT_ENCRYPT('p'), - CHEAT_ENCRYPT('u'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('e'), - 0, 0xff, 0 -}; +cheatseq_t CheatScriptSeq2 = CHEAT("puke", 1); -static byte CheatScriptSeq3[] = { - CHEAT_ENCRYPT('p'), - CHEAT_ENCRYPT('u'), - CHEAT_ENCRYPT('k'), - CHEAT_ENCRYPT('e'), - 0, 0, 0xff, -}; +cheatseq_t CheatScriptSeq3 = CHEAT("puke", 2); -static byte CheatRevealSeq[] = { - CHEAT_ENCRYPT('m'), - CHEAT_ENCRYPT('a'), - CHEAT_ENCRYPT('p'), - CHEAT_ENCRYPT('s'), - CHEAT_ENCRYPT('c'), - CHEAT_ENCRYPT('o'), - 0xff, 0 -}; +cheatseq_t CheatRevealSeq = CHEAT("mapsco", 0); -static byte CheatTrackSeq1[] = { - CHEAT_ENCRYPT('`'), - 0xff, 0 -}; +cheatseq_t CheatTrackSeq1 = CHEAT("`", 0); -static byte CheatTrackSeq2[] = { - CHEAT_ENCRYPT('`'), - 0, 0, 0xff, 0 -}; +cheatseq_t CheatTrackSeq2 = CHEAT("`", 2); static Cheat_t Cheats[] = { - {CheatTrackFunc1, CheatTrackSeq1, NULL, 0, 0, 0}, - {CheatTrackFunc2, CheatTrackSeq2, NULL, 0, 0, 0}, - {CheatGodFunc, CheatGodSeq, NULL, 0, 0, 0}, - {CheatNoClipFunc, CheatNoClipSeq, NULL, 0, 0, 0}, - {CheatWeaponsFunc, CheatWeaponsSeq, 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}, - {CheatArtifactAllFunc, CheatArtifactAllSeq, NULL, 0, 0, 0}, - {CheatPuzzleFunc, CheatPuzzleSeq, NULL, 0, 0, 0}, - {CheatWarpFunc, CheatWarpSeq, NULL, 0, 0, 0}, - {CheatPigFunc, CheatPigSeq, NULL, 0, 0, 0}, - {CheatMassacreFunc, CheatMassacreSeq, NULL, 0, 0, 0}, - {CheatIDKFAFunc, CheatIDKFASeq, NULL, 0, 0, 0}, - {CheatQuickenFunc1, CheatQuickenSeq1, NULL, 0, 0, 0}, - {CheatQuickenFunc2, CheatQuickenSeq2, NULL, 0, 0, 0}, - {CheatQuickenFunc3, CheatQuickenSeq3, NULL, 0, 0, 0}, - {CheatClassFunc1, CheatClass1Seq, NULL, 0, 0, 0}, - {CheatClassFunc2, CheatClass2Seq, NULL, 0, 0, 0}, - {CheatInitFunc, CheatInitSeq, NULL, 0, 0, 0}, - {CheatVersionFunc, CheatVersionSeq, NULL, 0, 0, 0}, - {CheatDebugFunc, CheatDebugSeq, NULL, 0, 0, 0}, - {CheatScriptFunc1, CheatScriptSeq1, NULL, 0, 0, 0}, - {CheatScriptFunc2, CheatScriptSeq2, NULL, 0, 0, 0}, - {CheatScriptFunc3, CheatScriptSeq3, NULL, 0, 0, 0}, - {CheatRevealFunc, CheatRevealSeq, NULL, 0, 0, 0}, - {NULL, NULL, NULL, 0, 0, 0} // Terminator + {CheatTrackFunc1, &CheatTrackSeq1}, + {CheatTrackFunc2, &CheatTrackSeq2}, + {CheatGodFunc, &CheatGodSeq}, + {CheatNoClipFunc, &CheatNoClipSeq}, + {CheatWeaponsFunc, &CheatWeaponsSeq}, + {CheatHealthFunc, &CheatHealthSeq}, + {CheatKeysFunc, &CheatKeysSeq}, + {CheatSoundFunc, &CheatSoundSeq}, + {CheatTickerFunc, &CheatTickerSeq}, + {CheatArtifactAllFunc, &CheatArtifactAllSeq}, + {CheatPuzzleFunc, &CheatPuzzleSeq}, + {CheatWarpFunc, &CheatWarpSeq}, + {CheatPigFunc, &CheatPigSeq}, + {CheatMassacreFunc, &CheatMassacreSeq}, + {CheatIDKFAFunc, &CheatIDKFASeq}, + {CheatQuickenFunc1, &CheatQuickenSeq1}, + {CheatQuickenFunc2, &CheatQuickenSeq2}, + {CheatQuickenFunc3, &CheatQuickenSeq3}, + {CheatClassFunc1, &CheatClass1Seq}, + {CheatClassFunc2, &CheatClass2Seq}, + {CheatInitFunc, &CheatInitSeq}, + {CheatVersionFunc, &CheatVersionSeq}, + {CheatDebugFunc, &CheatDebugSeq}, + {CheatScriptFunc1, &CheatScriptSeq1}, + {CheatScriptFunc2, &CheatScriptSeq2}, + {CheatScriptFunc3, &CheatScriptSeq3}, + {CheatRevealFunc, &CheatRevealSeq}, }; // CODE -------------------------------------------------------------------- @@ -571,11 +319,6 @@ void SB_Init(void) SpinSpeedLump = W_GetNumForName("SPBOOT0"); SpinDefenseLump = W_GetNumForName("SPSHLD0"); - for (i = 0; i < 256; i++) - { - CheatLookup[i] = CHEAT_ENCRYPT(i); - } - if (deathmatch) { PatchKILLS = W_CacheLumpName("KILLS", PU_STATIC); @@ -920,7 +663,7 @@ static void DrawSoundInfo(void) MN_DrTextA(text, xPos[x++], y); sprintf(text, "%d", c->mo->y >> FRACBITS); MN_DrTextA(text, xPos[x++], y); - sprintf(text, "%d", c->id); + sprintf(text, "%d", (int) c->id); MN_DrTextA(text, xPos[x++], y); sprintf(text, "%d", c->priority); MN_DrTextA(text, xPos[x++], y); @@ -1793,7 +1536,7 @@ static boolean HandleCheats(byte key) return (false); } eat = false; - for (i = 0; Cheats[i].func != NULL; i++) + for (i = 0; ipos) { cheat->pos = cheat->sequence; @@ -1841,6 +1585,11 @@ static boolean CheatAddKey(Cheat_t * cheat, byte key, boolean * eat) return (true); } return (false); + */ + + *eat = cht_CheckCheat(cheat->seq, key); + + return *eat; } //========================================================================== @@ -1981,15 +1730,18 @@ static void CheatWarpFunc(player_t * player, Cheat_t * cheat) int ones; int map; char mapName[9]; + char args[2]; + + cht_GetParam(cheat->seq, args); - tens = cheat->args[0] - '0'; - ones = cheat->args[1] - '0'; + tens = args[0] - '0'; + ones = args[1] - '0'; if (tens < 0 || tens > 9 || ones < 0 || ones > 9) { // Bad map P_SetMessage(player, TXT_CHEATBADINPUT, true); return; } - map = P_TranslateMap((cheat->args[0] - '0') * 10 + cheat->args[1] - '0'); + map = P_TranslateMap((args[0] - '0') * 10 + args[1] - '0'); if (map == -1) { // Not found P_SetMessage(player, TXT_CHEATNOMAP, true); @@ -2075,12 +1827,15 @@ static void CheatClassFunc2(player_t * player, Cheat_t * cheat) { int i; int class; + char args[2]; + + cht_GetParam(cheat->seq, args); if (player->morphTics) { // don't change class if the player is morphed return; } - class = cheat->args[0] - '0'; + class = args[0] - '0'; if (class > 2 || class < 0) { P_SetMessage(player, "INVALID PLAYER CLASS", true); @@ -2127,20 +1882,23 @@ static void CheatScriptFunc2(player_t * player, Cheat_t * cheat) static void CheatScriptFunc3(player_t * player, Cheat_t * cheat) { int script; - byte args[3]; + byte script_args[3]; int tens, ones; char textBuffer[40]; + char args[2]; - tens = cheat->args[0] - '0'; - ones = cheat->args[1] - '0'; + cht_GetParam(cheat->seq, args); + + tens = args[0] - '0'; + ones = args[1] - '0'; script = tens * 10 + ones; if (script < 1) return; if (script > 99) return; - args[0] = args[1] = args[2] = 0; + script_args[0] = script_args[1] = script_args[2] = 0; - if (P_StartACS(script, 0, args, player->mo, NULL, 0)) + if (P_StartACS(script, 0, script_args, player->mo, NULL, 0)) { sprintf(textBuffer, "RUNNING SCRIPT %.2d", script); P_SetMessage(player, textBuffer, true); @@ -2190,12 +1948,15 @@ static void CheatTrackFunc2(player_t * player, Cheat_t * cheat) #ifdef __WATCOMC__ char buffer[80]; int track; + char args[2]; + + cht_GetParam(cheat->seq, args); if (!i_CDMusic) { return; } - track = (cheat->args[0] - '0') * 10 + (cheat->args[1] - '0'); + track = (args[0] - '0') * 10 + (args[1] - '0'); if (track < I_CDMusFirstTrack() || track > I_CDMusLastTrack()) { P_SetMessage(player, "INVALID TRACK NUMBER\n", true); -- cgit v1.2.3