📄 sb_bar.c
字号:
//**************************************************************************//**//** sb_bar.c : Heretic 2 : Raven Software, Corp.//**//** $RCSfile: sb_bar.c,v $//** $Revision: 1.94 $//** $Date: 95/12/31 21:10:08 $//** $Author: bgokey $//**//**************************************************************************// HEADER FILES ------------------------------------------------------------#include "h2def.h"#include "p_local.h"#include "soundst.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;} Cheat_t;// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------// PUBLIC FUNCTION PROTOTYPES ----------------------------------------------void SB_PaletteFlash(boolean forceChange);// PRIVATE FUNCTION PROTOTYPES ---------------------------------------------static void DrawSoundInfo(void);static void DrINumber(signed int val, int x, int y);static void DrRedINumber(signed int val, int x, int y);static void DrBNumber(signed int val, int x, int y);static void DrawCommonBar(void);static void DrawMainBar(void);static void DrawInventoryBar(void);static void DrawKeyBar(void);static void DrawWeaponPieces(void);static void DrawFullScreenStuff(void);static void DrawAnimatedIcons(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);static void CheatHealthFunc(player_t *player, Cheat_t *cheat);static void CheatKeysFunc(player_t *player, Cheat_t *cheat);static void CheatSoundFunc(player_t *player, Cheat_t *cheat);static void CheatTickerFunc(player_t *player, Cheat_t *cheat);static void CheatArtifactAllFunc(player_t *player, Cheat_t *cheat);static void CheatPuzzleFunc(player_t *player, Cheat_t *cheat);static void CheatWarpFunc(player_t *player, Cheat_t *cheat);static void CheatPigFunc(player_t *player, Cheat_t *cheat);static void CheatMassacreFunc(player_t *player, Cheat_t *cheat);static void CheatIDKFAFunc(player_t *player, Cheat_t *cheat);static void CheatQuickenFunc1(player_t *player, Cheat_t *cheat);static void CheatQuickenFunc2(player_t *player, Cheat_t *cheat);static void CheatQuickenFunc3(player_t *player, Cheat_t *cheat);static void CheatClassFunc1(player_t *player, Cheat_t *cheat);static void CheatClassFunc2(player_t *player, Cheat_t *cheat);static void CheatInitFunc(player_t *player, Cheat_t *cheat);static void CheatInitFunc(player_t *player, Cheat_t *cheat);static void CheatVersionFunc(player_t *player, Cheat_t *cheat);static void CheatDebugFunc(player_t *player, Cheat_t *cheat);static void CheatScriptFunc1(player_t *player, Cheat_t *cheat);static void CheatScriptFunc2(player_t *player, Cheat_t *cheat);static void CheatScriptFunc3(player_t *player, Cheat_t *cheat);static void CheatRevealFunc(player_t *player, Cheat_t *cheat);static void CheatTrackFunc1(player_t *player, Cheat_t *cheat);static void CheatTrackFunc2(player_t *player, Cheat_t *cheat);// EXTERNAL DATA DECLARATIONS ----------------------------------------------extern byte *screen;extern int ArmorIncrement[NUMCLASSES][NUMARMOR];extern int AutoArmorSave[NUMCLASSES];#ifdef __WATCOMC__extern boolean i_CDMusic;extern int i_CDMusicLength;extern int i_CDTrack;extern int i_CDCurrentTrack;extern int oldTic;#endif// PUBLIC DATA DECLARATIONS ------------------------------------------------boolean DebugSound; // Debug flag for displaying sound infoboolean inventory;int curpos;int inv_ptr;int ArtifactFlash;#ifndef __WATCOMC__boolean i_CDMusic; // in Watcom, defined in i_ibm#endif// PRIVATE DATA DEFINITIONS ------------------------------------------------static byte CheatLookup[256];static int HealthMarker;//static int ChainWiggle;static player_t *CPlayer;static int SpinFlylump;static int SpinMinotaurLump;static int SpinSpeedLump;static int SpinDefenseLump;static int FontBNumBase;static int PlayPalette;static patch_t *PatchH2BAR;static patch_t *PatchH2TOP;static patch_t *PatchLFEDGE;static patch_t *PatchRTEDGE;static patch_t *PatchARMCLEAR;static patch_t *PatchARTICLEAR;static patch_t *PatchMANACLEAR;static patch_t *PatchKILLS;static patch_t *PatchMANAVIAL1;static patch_t *PatchMANAVIAL2;static patch_t *PatchMANAVIALDIM1;static patch_t *PatchMANAVIALDIM2;static patch_t *PatchMANADIM1;static patch_t *PatchMANADIM2;static patch_t *PatchMANABRIGHT1;static patch_t *PatchMANABRIGHT2;static patch_t *PatchCHAIN;static patch_t *PatchSTATBAR;static patch_t *PatchKEYBAR;static patch_t *PatchLIFEGEM;static patch_t *PatchSELECTBOX;static patch_t *PatchINumbers[10];static patch_t *PatchNEGATIVE;static patch_t *PatchSmNumbers[10];static patch_t *PatchINVBAR;static patch_t *PatchWEAPONSLOT;static patch_t *PatchWEAPONFULL;static patch_t *PatchPIECE1;static patch_t *PatchPIECE2;static patch_t *PatchPIECE3;static patch_t *PatchINVLFGEM1;static patch_t *PatchINVLFGEM2;static patch_t *PatchINVRTGEM1;static patch_t *PatchINVRTGEM2;// Toggle god modestatic byte CheatGodSeq[] ={ CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('t'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('n'), 0xff};// Toggle no clipping modestatic byte CheatNoClipSeq[] ={ CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('p'), CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('r'), 0xff};// Get all weapons and manastatic byte CheatWeaponsSeq[] ={ CHEAT_ENCRYPT('n'), CHEAT_ENCRYPT('r'), CHEAT_ENCRYPT('a'), 0xff};// Get full healthstatic byte CheatHealthSeq[] ={ CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('l'), CHEAT_ENCRYPT('u'), CHEAT_ENCRYPT('b'), CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('d'), 0xff};// Get all keysstatic 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};// Toggle sound debug infostatic byte CheatSoundSeq[] ={ CHEAT_ENCRYPT('n'), CHEAT_ENCRYPT('o'), CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('e'), 0xff};// Toggle tickerstatic byte CheatTickerSeq[] ={ CHEAT_ENCRYPT('t'), CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('k'), CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('r'), 0xff, 0};// Get all artifactsstatic 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};// Get all puzzle piecesstatic 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};// Warp to new levelstatic byte CheatWarpSeq[] ={ CHEAT_ENCRYPT('v'), CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('t'), 0, 0, 0xff, 0};// Become a pigstatic 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};// Kill all monstersstatic 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};static byte CheatIDKFASeq[] ={ CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('o'), CHEAT_ENCRYPT('n'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('n'), 0xff, 0};static byte CheatQuickenSeq1[] ={ CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('r'), CHEAT_ENCRYPT('t'), CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('k'), 0xff, 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};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};// New classstatic 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};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};static byte CheatInitSeq[] ={ CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('n'), CHEAT_ENCRYPT('i'), CHEAT_ENCRYPT('t'), 0xff, 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};static byte CheatDebugSeq[] ={ CHEAT_ENCRYPT('w'), CHEAT_ENCRYPT('h'), CHEAT_ENCRYPT('e'), CHEAT_ENCRYPT('r'), CHEAT_ENCRYPT('e'), 0xff, 0};static byte CheatScriptSeq1[] ={ CHEAT_ENCRYPT('p'), CHEAT_ENCRYPT('u'), CHEAT_ENCRYPT('k'), CHEAT_ENCRYPT('e'), 0xff, 0};static byte CheatScriptSeq2[] ={ CHEAT_ENCRYPT('p'), CHEAT_ENCRYPT('u'), CHEAT_ENCRYPT('k'), CHEAT_ENCRYPT('e'), 0, 0xff, 0};static byte CheatScriptSeq3[] ={ CHEAT_ENCRYPT('p'), CHEAT_ENCRYPT('u'), CHEAT_ENCRYPT('k'), CHEAT_ENCRYPT('e'), 0, 0, 0xff,};static byte CheatRevealSeq[] ={ CHEAT_ENCRYPT('m'), CHEAT_ENCRYPT('a'), CHEAT_ENCRYPT('p'), CHEAT_ENCRYPT('s'), CHEAT_ENCRYPT('c'), CHEAT_ENCRYPT('o'), 0xff, 0};static byte CheatTrackSeq1[] = { CHEAT_ENCRYPT('`'), 0xff, 0};static byte CheatTrackSeq2[] = { CHEAT_ENCRYPT('`'), 0, 0, 0xff, 0};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};// CODE --------------------------------------------------------------------//==========================================================================//// SB_Init////==========================================================================void SB_Init(void){ int i; int startLump; PatchH2BAR = W_CacheLumpName("H2BAR", PU_STATIC); PatchH2TOP = W_CacheLumpName("H2TOP", PU_STATIC); PatchINVBAR = W_CacheLumpName("INVBAR", PU_STATIC); PatchLFEDGE = W_CacheLumpName("LFEDGE", PU_STATIC); PatchRTEDGE = W_CacheLumpName("RTEDGE", PU_STATIC); PatchSTATBAR = W_CacheLumpName("STATBAR", PU_STATIC); PatchKEYBAR = W_CacheLumpName("KEYBAR", PU_STATIC); PatchSELECTBOX = W_CacheLumpName("SELECTBOX", PU_STATIC); PatchARTICLEAR = W_CacheLumpName("ARTICLS", PU_STATIC); PatchARMCLEAR = W_CacheLumpName("ARMCLS", PU_STATIC); PatchMANACLEAR = W_CacheLumpName("MANACLS", PU_STATIC); PatchMANAVIAL1 = W_CacheLumpName("MANAVL1", PU_STATIC); PatchMANAVIAL2 = W_CacheLumpName("MANAVL2", PU_STATIC); PatchMANAVIALDIM1 = W_CacheLumpName("MANAVL1D", PU_STATIC); PatchMANAVIALDIM2 = W_CacheLumpName("MANAVL2D", PU_STATIC); PatchMANADIM1 = W_CacheLumpName("MANADIM1", PU_STATIC); PatchMANADIM2 = W_CacheLumpName("MANADIM2", PU_STATIC); PatchMANABRIGHT1 = W_CacheLumpName("MANABRT1", PU_STATIC);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -