/* global.h - Don Yang (uguu.org) 12/31/00 */ #ifndef GLOBAL_H__ #define GLOBAL_H__ #include #include #include #include #include #include #include #include #include #include"log.h" // Game parameters #define CELLS_PER_LEVEL 50 // Number of cells to advance level #define SPECIAL_FREQ 100 // Special cell frequency #define MINIMUM_TIME 1 // Minimum block drop delay #define MAX_DELTA_SCORE 64000 // Maximum score increase #define MAX_SCORE 999999 // Maximum total score #define MAX_LEVEL 9 // Last level (do not change) #define INIT_CRC 31337 // Registry CRC (do not change) #define START_DELAY 6 // Title screen delay time // Animated background parameter // animate when (FrameCount & BG_CHANGE_FREQ) == 0 #define BG_CHANGE_FREQ 7 // Screen/field dimensions (do not change) #define APP_WIDTH 640 #define APP_HEIGHT 480 #define CELL_SIZE 32 #define GRID_MARGIN 16 #define GRID_WIDTH ((APP_WIDTH - 32) / CELL_SIZE) #define GRID_HEIGHT ((APP_HEIGHT - 80) / CELL_SIZE) // Game field bit masks (do not change) #define CELL_FREE 0x40 #define CELL_CLUSTER 0x20 #define CELL_DEAD_CLUSTER 0x10 #define CELL_TYPE 0x0f #define TILE_SPECIAL 6 // Virtual key codes (corresponds with HELP_STRING in resource.h) #define KEY_EXIT 'Q' // Quit #define KEY_CAPTURE 'D' // Recapture desktop #define KEY_FRAMERATE 'F' // Recalibrate framerate #define KEY_PAUSE 'P' // Pause game #define KEY_RESET 'R' // Reset game #define KEY_SOUND 'S' // Toggle sound #define KEY_TERMINAL VK_F12 // Switch to/from Ruri-ruri mode #define KEY_ROTATE VK_UP // Rotate block #define KEY_DROP VK_DOWN // Drop block #define KEY_LEFT VK_LEFT // Move block left #define KEY_RIGHT VK_RIGHT // Move block right // Joystick parameters #define JOYSTICK_PERIOD 20 // Milliseconds between polls #define JOYSTICK_REPEAT_DELAY 3 // Repeat factor (see input.cpp) // Registry parameters (do not change) #define REG_KEY_PATH "Software\\Omoikane\\otika" #define EXEC_COUNT_KEY "exec_count" #define OPTION_KEY "options" #define MAX_NAME_LENGTH 26 #define MAX_NAME_LENGTH_D 8 #define MAX_HISTORY_LENGTH 10 // Option bits (do not change) #define OPTION_SND 0x000f #define OPTION_SND_ALL 1 #define OPTION_SND_BLIP (OPTION_SND_ALL | 2) #define OPTION_SND_CLEAR (OPTION_SND_ALL | 4) #define OPTION_SND_SPECIAL (OPTION_SND_ALL | 8) #define OPTION_SPR 0x0030 #define OPTION_SPR_NORMAL 0 #define OPTION_SPR_TRANSPARENT 0x0010 #define OPTION_SPR_TRANSLUCENT 0x0020 #define OPTION_SPR_MODE0 OPTION_SPR_NORMAL #define OPTION_SPR_MODE1 OPTION_SPR_TRANSPARENT #define OPTION_SPR_MODE2 OPTION_SPR_TRANSLUCENT #define OPTION_SPR_MODE3 (OPTION_SPR_MODE1 | OPTION_SPR_MODE2) #define OPTION_BG 0x03c0 #define OPTION_BG_FX 0x0180 #define OPTION_BG_BACKGROUND 0x0040 #define OPTION_BG_FRACTAL 0x0080 #define OPTION_BG_DUST 0x0100 #define OPTION_BG_SWARM 0X0180 #define OPTION_BG_WHITE_PARTICLE 0x0200 // Default options, when registry read fails #define OPTION_DEFAULT \ (OPTION_SND | OPTION_SPR_MODE2 | OPTION_BG_BACKGROUND | OPTION_BG_FRACTAL) // Symbolic constants enum { PIXEL_1555, PIXEL_565, PIXEL_888, PIXEL_8888 }; enum { HISTORY_SCORE, HISTORY_CELLS, HISTORY_BLOCKS, HISTORY_CLUSTER, HISTORY_MAX_CHAIN, HISTORY_MAX_CLUSTER, HISTORY_TIME, HISTORY_CRC, HISTORY_COUNT }; enum { SYS_STATE_INIT = -100, SYS_STATE_INIT0, SYS_STATE_INIT1, SYS_STATE_INIT2, SYS_STATE_INIT3, SYS_STATE_INIT4, GAME_STATE_WAIT_START = 0, GAME_STATE_SHOW_HISTORY, GAME_STATE_GENERATE_BLOCK, GAME_STATE_INPUT_LOOP, GAME_STATE_CLEAR_SPECIAL, GAME_STATE_REMOVE_CLUSTER, GAME_STATE_MARK_CLUSTER, GAME_STATE_GAME_OVER0, GAME_STATE_GAME_OVER1, GAME_STATE_GAME_OVER2, GAME_STATE_GAME_OVER3, GAME_STATE_ENTER_NAME, GAME_STATE_SHOW_STATS, TERMINAL_STATE }; // Highscore table entry, also current player status typedef struct { union { char name[MAX_NAME_LENGTH + 1]; DWORD data[MAX_NAME_LENGTH_D]; } n; DWORD data[HISTORY_COUNT]; } PlayerEntry; // Global variables (see global.cpp for description) extern int ActualFPS[4]; extern int ActualFPSindex; extern BOOL AppActive; extern HINSTANCE AppInstance; extern BOOL AppPaused; extern HWND AppWindow; extern BYTE *BGImage; extern int BlockT0; // T0 is bottom, y = BlockY extern int BlockT1; // T1 is top, y = BlockY + 1 extern int BlockX; extern int BlockY; extern PlayerEntry CurrentPlayer; extern DWORD DDPitch; extern BOOL DDReady; extern DWORD ExecCount; extern int ExpectedFPS; extern int FixColumn; extern BOOL FixSpecial; extern int FrameCount; extern int GameLevel; extern DWORD GameOptions; extern int GameState; extern int GameStateTime; extern int Grid[32][32]; extern PlayerEntry History[MAX_HISTORY_LENGTH]; extern BOOL JoystickAvailable; extern BOOL JoystickCaptured; extern UINT JoystickID; extern int MaxFrames; extern int MouseB; extern int MouseX; extern int MouseY; extern int PixelFormat; extern BOOL RedrawAll; extern int ResumeState; extern int ScreenWidth; extern int ScreenHeight; extern BOOL ShiftState; extern DWORD SpriteOffset[32][32]; extern int WindowX; extern int WindowY; // Run-time selected functions extern void (*AnimateBackground)(void); extern BOOL (*ClearScreen)(void); extern void (*InitBackground)(void); extern BOOL (*InitSprites)(void); extern void (*PaintBackground)(DWORD screen); extern void (*RenderBackground)(void); extern void (*RepaintBackground)(DWORD screen, int c, int r); extern void (*RepaintBackgroundA)(DWORD screen, int x, int y, int w, int h); void NullFunc(void); #endif