X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame_sp%2FGlobals.h;h=a202d07df139482eee5939941267d2202b7a99d4;hp=64f3230c54091476b2c39ebdf8d86a6033baac56;hb=64e7c54dce6ea8c063f04198c64c5057d751c928;hpb=5ba7f2d9a3f07f342afdf215a3307d5487cb6d43 diff --git a/src/game_sp/Globals.h b/src/game_sp/Globals.h index 64f3230c..a202d07d 100644 --- a/src/game_sp/Globals.h +++ b/src/game_sp/Globals.h @@ -5,148 +5,322 @@ #ifndef GLOBALS_H #define GLOBALS_H -#include "vb_types.h" -#include "vb_defs.h" -#include "vb_vars.h" -#include "vb_lib.h" - #include "global.h" -#define BaseWidth (16) -#define StretchWidth (16) -#define StretchWidth2 (StretchWidth / 2) -#define TwoPixels (2) -#define aniExplosionInfo (111) -#define aniMurphySleepLeft (71) -#define aniMurphySleepRight (68) -#define aniMurphyTouchDown (47) -#define aniMurphyTouchLeft (95) -#define aniMurphyTouchRight (94) -#define aniMurphyTouchUp (46) -#define aniMurphyYawn (56) -#define aniPushLeft (45) -#define aniPushRight (44) -#define aniPushUpDown (79) -#define aniSnikSnakDown (167) -#define aniSnikSnakLeft (239) -#define aniSnikSnakRight (247) -#define aniSnikSnakUp (159) -#define fiBase (2) -#define fiBug (25) -#define fiElectron (24) -#define fiExit (7) -#define fiExplosion (0x1F) -#define fiHWFirst (28) -#define fiHWLast (37) -#define fiHWMurphy (43) -#define fiHWTrash1 (41) -#define fiHWTrash2 (42) -#define fiHardWare (6) -#define fiInfotron (4) -#define fiMurphy (3) -#define fiOrangeDisk (8) -#define fiPortAllDirections (23) -#define fiPortDown (10) -#define fiPortLeft (11) -#define fiPortLeftAndRight (22) -#define fiPortRight (9) -#define fiPortUp (12) -#define fiPortUpAndDown (21) -#define fiRAM (5) -#define fiRAMBottom (39) -#define fiRAMLeft (26) -#define fiRAMRight (27) -#define fiRAMTop (38) -#define fiRedDisk (20) -#define fiSnikSnak (17) -#define fiSpPortDown (14) -#define fiSpPortLeft (15) -#define fiSpPortRight (13) -#define fiSpPortUp (16) -#define fiSpace (0) -#define fiTerminal (19) -#define fiWallSpace (40) -#define fiYellowDisk (18) -#define fiZonk (1) -#define keyDown (3) -#define keyLeft (2) -#define keyNone (0) -#define keyRight (4) -#define keySpace (9) -#define keySpaceDown (7) -#define keySpaceLeft (6) -#define keySpaceRight (8) -#define keySpaceUp (5) -#define keyUp (1) -#define posFrameCorner (55) -#define posFrameHorizontal (111) -#define posFrameVertical (110) - -extern int GetSI(int X, int Y); -extern int GetStretchX(int si); -extern int GetStretchY(int si); -extern int GetX(int si); -extern int GetY(int si); -extern void InitGlobals(); -extern void InitPseudoCompileFlags(); - -extern void ReadLevel(); - -extern boolean Alignments; -extern boolean BlockingSpeed; -extern boolean Cracked; -extern boolean Ctrl_Alt_Fix; -extern boolean Dead_Code; -extern boolean DebugSwitch; -extern boolean DemoRecordFix; -extern boolean EGA_Arg; -extern boolean EP_DEBUG; -extern boolean EP_DEMO; -extern boolean EP_ENHANCE; -extern boolean EP_OLD8; -extern boolean EXTRASPEED; -extern boolean HP_DEMO; + +#ifndef False +#define False 0 +#define True (!False) +#endif + +#define ScrollDelta ((int)1) + +#define ZoomFactor (2) + +#define StretchWidth (ZoomFactor * 16) +#define TwoPixels (ZoomFactor * 2) + + +// ---------------------------------------------------------------------------- +// elements (stored in file and playfield) +// ---------------------------------------------------------------------------- + +#define fiSpace (0) +#define fiZonk (1) +#define fiBase (2) +#define fiMurphy (3) +#define fiInfotron (4) +#define fiRAM (5) +#define fiHardWare (6) +#define fiExit (7) +#define fiOrangeDisk (8) +#define fiPortRight (9) +#define fiPortDown (10) +#define fiPortLeft (11) +#define fiPortUp (12) +#define fiSpPortRight (13) +#define fiSpPortDown (14) +#define fiSpPortLeft (15) +#define fiSpPortUp (16) +#define fiSnikSnak (17) +#define fiYellowDisk (18) +#define fiTerminal (19) +#define fiRedDisk (20) +#define fiPortUpAndDown (21) +#define fiPortLeftAndRight (22) +#define fiPortAllDirections (23) +#define fiElectron (24) +#define fiBug (25) +#define fiRAMLeft (26) +#define fiRAMRight (27) +#define fiHWFirst (28) +#define fiHW0 (fiHWFirst + 0) // fiHWFirst +#define fiHW1 (fiHWFirst + 1) +#define fiHW2 (fiHWFirst + 2) +#define fiHW3 (fiHWFirst + 3) +#define fiHW4 (fiHWFirst + 4) +#define fiHW5 (fiHWFirst + 5) +#define fiHW6 (fiHWFirst + 6) +#define fiHW7 (fiHWFirst + 7) +#define fiHW8 (fiHWFirst + 8) +#define fiHW9 (fiHWFirst + 9) // fiHWLast +#define fiHWLast (37) +#define fiRAMTop (38) +#define fiRAMBottom (39) +#define fiWallSpace (40) + +#define fiExplosion (0x1F) + +#define fiFirst (0) +#define fiLast (40) + + +// ---------------------------------------------------------------------------- +// graphics and animations (used at runtime to display the elements) +// ---------------------------------------------------------------------------- + +// graphics and animations directly related to file elements + +#define aniSpace IMG_EMPTY_SPACE +#define aniZonk IMG_SP_ZONK +#define aniBase IMG_SP_BASE +#define aniMurphy IMG_SP_MURPHY +#define aniInfotron IMG_SP_INFOTRON +#define aniRAM IMG_SP_CHIP_SINGLE +#define aniHardWare IMG_SP_HARDWARE_GRAY +#define aniExit IMG_SP_EXIT_CLOSED +#define aniOrangeDisk IMG_SP_DISK_ORANGE +#define aniPortRight IMG_SP_PORT_RIGHT +#define aniPortDown IMG_SP_PORT_DOWN +#define aniPortLeft IMG_SP_PORT_LEFT +#define aniPortUp IMG_SP_PORT_UP +#define aniSpPortRight IMG_SP_GRAVITY_PORT_RIGHT +#define aniSpPortDown IMG_SP_GRAVITY_PORT_DOWN +#define aniSpPortLeft IMG_SP_GRAVITY_PORT_LEFT +#define aniSpPortUp IMG_SP_GRAVITY_PORT_UP +#define aniSnikSnak IMG_SP_SNIKSNAK +#define aniYellowDisk IMG_SP_DISK_YELLOW +#define aniTerminal IMG_SP_TERMINAL +#define aniRedDisk IMG_SP_DISK_RED +#define aniPortUpAndDown IMG_SP_PORT_VERTICAL +#define aniPortLeftAndRight IMG_SP_PORT_HORIZONTAL +#define aniPortAllDirections IMG_SP_PORT_ANY +#define aniElectron IMG_SP_ELECTRON +#define aniBug IMG_SP_BUGGY_BASE +#define aniRAMLeft IMG_SP_CHIP_LEFT +#define aniRAMRight IMG_SP_CHIP_RIGHT +#define aniHWFirst IMG_SP_HARDWARE_BASE_1 +#define aniHW0 IMG_SP_HARDWARE_BASE_1 +#define aniHW1 IMG_SP_HARDWARE_GREEN +#define aniHW2 IMG_SP_HARDWARE_BLUE +#define aniHW3 IMG_SP_HARDWARE_RED +#define aniHW4 IMG_SP_HARDWARE_YELLOW +#define aniHW5 IMG_SP_HARDWARE_BASE_2 +#define aniHW6 IMG_SP_HARDWARE_BASE_3 +#define aniHW7 IMG_SP_HARDWARE_BASE_4 +#define aniHW8 IMG_SP_HARDWARE_BASE_5 +#define aniHW9 IMG_SP_HARDWARE_BASE_6 +#define aniHWLast IMG_SP_HARDWARE_BASE_6 +#define aniRAMTop IMG_SP_CHIP_TOP +#define aniRAMBottom IMG_SP_CHIP_BOTTOM +#define aniWallSpace IMG_INVISIBLE_WALL +#define aniHWTrash1 +#define aniHWTrash2 +#define aniHWMurphy + + +// graphics and animations related to in-game animations for element actions + +#define aniMurphyDropping IMG_SP_MURPHY_DROPPING + +#define aniMurphySleepLeft IMG_SP_MURPHY_SLEEPING_LEFT +#define aniMurphySleepRight IMG_SP_MURPHY_SLEEPING_RIGHT +#define aniMurphyTouchLeft IMG_SP_MURPHY_SNAPPING_LEFT +#define aniMurphyTouchRight IMG_SP_MURPHY_SNAPPING_RIGHT +#define aniMurphyTouchUp IMG_SP_MURPHY_SNAPPING_UP +#define aniMurphyTouchDown IMG_SP_MURPHY_SNAPPING_DOWN +#define aniMurphyYawn IMG_SP_MURPHY_BORING_1 +#define aniPushLeft IMG_SP_MURPHY_PUSHING_LEFT +#define aniPushRight IMG_SP_MURPHY_PUSHING_RIGHT + +#define aniBugActivating IMG_SP_BUGGY_BASE_ACTIVATING +#define aniBugDeactivating IMG_SP_BUGGY_BASE_ACTIVATING +#define aniBugActive IMG_SP_BUGGY_BASE_ACTIVE +#define aniZonkRollLeft IMG_SP_ZONK_MOVING_LEFT +#define aniZonkRollRight IMG_SP_ZONK_MOVING_RIGHT +#define aniEatInfotronLeft IMG_SP_MURPHY_COLLECTING_LEFT +#define aniEatInfotronRight IMG_SP_MURPHY_COLLECTING_RIGHT +#define aniInfotronRollLeft IMG_SP_INFOTRON_MOVING_LEFT +#define aniInfotronRollRight IMG_SP_INFOTRON_MOVING_RIGHT +#define aniMurphyMoveLeft IMG_SP_MURPHY_MOVING_LEFT +#define aniMurphyMoveRight IMG_SP_MURPHY_MOVING_RIGHT +#define aniMurphyMoveUpLeft IMG_SP_MURPHY_MOVING_LEFT +#define aniMurphyMoveUpRight IMG_SP_MURPHY_MOVING_RIGHT +#define aniMurphyDigLeft IMG_SP_MURPHY_DIGGING_LEFT +#define aniMurphyDigRight IMG_SP_MURPHY_DIGGING_RIGHT +#define aniMurphyDigUpLeft IMG_SP_MURPHY_DIGGING_LEFT +#define aniMurphyDigUpRight IMG_SP_MURPHY_DIGGING_RIGHT +#define aniMurphyEatLeft IMG_SP_MURPHY_COLLECTING_LEFT +#define aniMurphyEatRight IMG_SP_MURPHY_COLLECTING_RIGHT +#define aniMurphyEatUpLeft IMG_SP_MURPHY_COLLECTING_LEFT +#define aniMurphyEatUpRight IMG_SP_MURPHY_COLLECTING_RIGHT +#define aniSplitUpDown IMG_SP_MURPHY +#define aniMurphyExit IMG_SP_MURPHY_SHRINKING +#define aniElectron IMG_SP_ELECTRON +#define aniExplosion IMG_SP_DEFAULT_EXPLODING +#define aniTouchBase IMG_SP_BASE_SNAPPING +#define aniTouchInfotron IMG_SP_INFOTRON_COLLECTING +#define aniTouchRedDisk IMG_SP_DISK_RED_COLLECTING +#define aniYellowDisk IMG_SP_DISK_YELLOW +#define aniOrangeDisk IMG_SP_DISK_ORANGE +#define aniRedDisk IMG_SP_DISK_RED + +#define aniSnikSnakDown IMG_SP_SNIKSNAK_DOWN +#define aniSnikSnakLeft IMG_SP_SNIKSNAK_LEFT +#define aniSnikSnakRight IMG_SP_SNIKSNAK_RIGHT +#define aniSnikSnakUp IMG_SP_SNIKSNAK_UP + +#define aniSnikSnakTurnLeftToUp IMG_SP_SNIKSNAK_TURNING_FROM_LEFT_UP +#define aniSnikSnakTurnLeftToDown IMG_SP_SNIKSNAK_TURNING_FROM_LEFT_DOWN +#define aniSnikSnakTurnRightToUp IMG_SP_SNIKSNAK_TURNING_FROM_RIGHT_UP +#define aniSnikSnakTurnRightToDown IMG_SP_SNIKSNAK_TURNING_FROM_RIGHT_DOWN +#define aniSnikSnakTurnUpToLeft IMG_SP_SNIKSNAK_TURNING_FROM_UP_LEFT +#define aniSnikSnakTurnUpToRight IMG_SP_SNIKSNAK_TURNING_FROM_UP_RIGHT +#define aniSnikSnakTurnDownToLeft IMG_SP_SNIKSNAK_TURNING_FROM_DOWN_LEFT +#define aniSnikSnakTurnDownToRight IMG_SP_SNIKSNAK_TURNING_FROM_DOWN_RIGHT + +#define aniTerminalActive IMG_SP_TERMINAL_ACTIVE + +#define aniDefaultExplosion IMG_SP_DEFAULT_EXPLODING +#define aniElectronExplosion IMG_SP_ELECTRON_EXPLODING + +#define imgFrameCorner IMG_SP_FRAME_CORNER +#define imgFrameHorizontal IMG_SP_FRAME_HORIZONTAL +#define imgFrameVertical IMG_SP_FRAME_VERTICAL + + +// ---------------------------------------------------------------------------- +// input keys +// ---------------------------------------------------------------------------- + +#define keyNone (0) +#define keyUp (1) +#define keyLeft (2) +#define keyDown (3) +#define keyRight (4) +#define keySpaceUp (5) +#define keySpaceLeft (6) +#define keySpaceDown (7) +#define keySpaceRight (8) +#define keySpace (9) + + +// ---------------------------------------------------------------------------- +// data structures +// ---------------------------------------------------------------------------- + +#ifndef HAS_LevelDescriptor +typedef struct +{ + int Width; + int Height; + int OffSet; + int Size; +} LevelDescriptor; +#define HAS_LevelDescriptor +#endif + +#ifndef HAS_SpecialPortType +typedef struct +{ + short PortLocation; // = 2*(x+(y*60)) + byte Gravity; // 1 = turn on, anything else (0) = turn off + byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!) + byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off + byte UnUsed; +} SpecialPortType; +#define HAS_SpecialPortType +#endif + +#ifndef HAS_LevelInfoType +typedef struct +{ + byte UnUsed[4]; + byte InitialGravity; // 1=on, anything else (0) = off + byte Version; // SpeedFixVersion XOR &H20 + char LevelTitle[23]; + byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!) + byte InfotronsNeeded; + + // Number of Infotrons needed. 0 means that Supaplex will count the total + // amount of Infotrons in the level, and use the low byte of that number. + // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!) + byte SpecialPortCount; // Maximum 10 allowed! + SpecialPortType SpecialPort[10]; + byte SpeedByte; // = Speed XOR Highbyte(RandomSeed) + byte CheckSumByte; // = CheckSum XOR SpeedByte + short DemoRandomSeed; +} LevelInfoType; +#define HAS_LevelInfoType +#endif + + +int GetSI(int X, int Y); +int GetStretchX(int si); +int GetStretchY(int si); +int GetX(int si); +int GetY(int si); +void InitGlobals(void); + +void PrepareLevel(void); + +int getSequenceLength(int sequence); +boolean isSnappingSequence(int sequence); + +int Min(int A, int B); +int Max(int A, int B); + +extern int fiGraphic[]; +extern int aniSnikSnakTurningLeft[]; +extern int aniSnikSnakTurningRight[]; + extern boolean LevelLoaded; -extern boolean Level_Arg; -extern boolean Level_Fix; -extern boolean Norm_Time; -extern boolean Original; -extern boolean Protection; -extern boolean Record_Fix; -extern boolean Redundant; -extern boolean SAVEGAME; -extern boolean SafeRecord; -extern boolean ScreenFix; -extern boolean SpeedKeys; -extern boolean TIMINGFIX; -extern boolean Ver62; -extern boolean Ver62test; -extern boolean Ver63; -extern boolean Ver64; -extern boolean bCapturePane; -extern byte *DisPlayField; -extern byte *PlayField8; -extern char *CurPath, *OrigPath, *TmpPath; -extern currency DeltaT; + +extern boolean DemoAvailable; +extern boolean menBorder; + extern int *PlayField16; -extern int *aniBug, *aniZonkRollRight, *aniZonkRollLeft; -extern int *aniEatInfotronLeft, *aniEatInfotronRight; -extern int *aniInfotronRollRight, *aniInfotronRollLeft; -extern int *aniMurphyEatLeft, *aniMurphyEatRight; -extern int *aniMurphyEatUpLeft, *aniMurphyEatUpRight, *aniSplitUpDown; -extern int *aniMurphyExit; -extern int *aniSnikSnak, *aniElectron, *aniExplosion; -extern int *aniTouchBase, *aniTouchInfotron, *aniTouchRedDisk; -extern int *aniYellowDisk, *aniOrangeDisk, *aniRedDisk; +extern byte *PlayField8; +extern byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE]; + extern int FieldHeight; extern int FieldMax, LevelMax; extern int FieldWidth; extern int FreezeZonks; extern int HeaderSize; -extern int LevelNumber; -extern int TimerVar, RandomSeed; -extern long DeltaTPlay, DeltaTDemo; -extern long FileMax; -extern long SignatureDelay; +extern int TimerVar; +extern short RandomSeed; + +extern LevelInfoType LInfo; +extern int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY; +extern int ScrollX, ScrollY; + +extern int AllowRedDiskCheat, AllowEatRightRedDiskBug; +extern int Data_SubRest, Data_SubRstFlg; +extern int DemoKeyCode; +extern int GameBusyFlag; +extern int InfotronsNeeded, TotalInfotronsNeeded; +extern int KillMurphyFlag, MurphyMoveCounter; +extern int MurphyExplodePos, SplitMoveFlag, RedDiskReleaseMurphyPos; +extern int MurphyPosIndex, MurphyXPos, MurphyYPos; +extern int MurphyScreenXPos, MurphyScreenYPos; +extern int MurphyVarFaceLeft; +extern int RedDiskCount; +extern int RedDiskReleaseFlag, MovingPictureSequencePhase; +extern int RedDiskReleasePhase; +extern int ScratchGravity, GravityFlag; +extern int SnikSnaksElectronsFrozen; +extern int YellowDisksExploded; +extern int YawnSleepCounter; -#endif /* GLOBALS_H */ +#endif // GLOBALS_H