A port of Zachtronics' match-4 game HACK*MATCH to the TI-84 Plus CE
1#ifndef variables_include_file
2#define variables_include_file
3
4#define SAVE_VAR_NAME "HKMCHDAT"
5
6#define COLOR_BLACK 0
7#define COLOR_WHITE 1
8#define COLOR_RED 2
9#define COLOR_DASH 17
10#define COLOR_DOT 18
11#define COLOR_METAL 3
12
13#define TITLE_SPRITE_HOFFSET ((GFX_LCD_WIDTH - title_width) / 2)
14#define TITLE_SPRITE_VOFFSET 36
15#define TITLE_TEXT_HOFFSET 110
16#define TITLE_TEXT_VOFFSET 180
17
18#define NUM_COLS 6
19#define MAX_ROWS 11
20#define NUM_INITIAL_ROWS 3
21#define NUM_BLOCK_COLORS 5
22#define EXA_START_COL 2
23#define AMOUNT_FILES_TO_MATCH 4
24#define STAR_CHANCE 40 // <- the actual probability is the reciprocal of this number
25#define BASE_BLOCK_VALUE 100
26#define CHAIN_BLOCK_BONUS 50
27#define MAX_NEW_ROW_INTERVAL 150000ul
28#define MIN_NEW_ROW_INTERVAL 50000ul
29#define ROW_INTERVAL_SCALE_START 0ul
30#define ROW_INTERVAL_SCALE_END 50000ul
31#define ROW_INTERVAL_SCALE_FACTOR (MAX_NEW_ROW_INTERVAL - MIN_NEW_ROW_INTERVAL) \
32 / (ROW_INTERVAL_SCALE_END - ROW_INTERVAL_SCALE_START)
33#define MATCH_TIME 25000
34
35#define FILE_EMPTY 0
36#define FILE_RED 1
37#define FILE_YELLOW 2
38#define FILE_CYAN 3
39#define FILE_BLUE 4
40#define FILE_PURPLE 5
41#define FILE_LOCKED 6
42
43#define MOVE_ANIMATION_FRAME_TIME 300
44#define CLEAR_ANIMATION_FRAME_TIME 1600
45#define DEATH_ANIMATION_FRAME_TIME 16000
46#define DEATH_DARKEN_LEVEL 232
47#define GAME_OVER_FLASH_TIME 32000
48
49#define BG_HOFFSET ((GFX_LCD_WIDTH - background_width) / 2)
50#define BG_VOFFSET ((GFX_LCD_HEIGHT - background_height) / 2)
51#define GRID_HOFFSET (BG_HOFFSET + 48)
52#define GRID_VOFFSET (BG_VOFFSET + 23)
53#define GRID_SIZE 16
54#define GRID_MOVE_STEPS 4
55#define CLIP_VOFFSET (BG_VOFFSET + 22)
56#define EXA_HOFFSET (BG_HOFFSET + 44)
57#define EXA_VOFFSET (BG_VOFFSET + 193)
58#define EXA_HELD_HOFFSET 4
59#define EXA_HELD_VOFFSET 6
60#define DASH_HOFFSET 8
61#define DASH_VOFFSET 3
62#define DASH_INTERVAL 4
63#define DASH_WIDTH 1
64#define DASH_HEIGHT 1
65#define SCORE_HOFFSET (BG_HOFFSET + 160)
66#define SCORE_VOFFSET (BG_VOFFSET + 41)
67#define HIGH_SCORE_HOFFSET (BG_HOFFSET + 160)
68#define HIGH_SCORE_VOFFSET (BG_VOFFSET + 97)
69#define NUM_DISPLAY_DIGITS 6
70#define PLAY_AGAIN_HOFFSET (2 + GRID_HOFFSET + (NUM_COLS * GRID_SIZE - play_again_width) / 2)
71#define PLAY_AGAIN_VOFFSET (GRID_VOFFSET + 42)
72#define DOTS_HOFFSET (BG_HOFFSET + 48)
73#define DOTS_VOFFSET 202
74#define NUM_DOTS 49
75#define BLK_RECT_1_X (BG_HOFFSET + 46)
76#define BLK_RECT_1_Y (BG_VOFFSET + 22)
77#define BLK_RECT_1_W 100
78#define BLK_RECT_1_H 196
79#define BLK_RECT_2_X (BG_HOFFSET + 149)
80#define BLK_RECT_2_Y (BG_VOFFSET + 22)
81#define BLK_RECT_2_W 61
82#define BLK_RECT_2_H 35
83#define BLK_RECT_3_X (BG_HOFFSET + 150)
84#define BLK_RECT_3_Y (BG_VOFFSET + 78)
85#define BLK_RECT_3_W 60
86#define BLK_RECT_3_H 34
87
88extern bool toExit;
89extern bool gameOver;
90
91extern unsigned int score;
92extern unsigned int highScore;
93
94extern unsigned char files[NUM_COLS][MAX_ROWS];
95extern unsigned char exaCol;
96extern bool isHoldingFile;
97extern unsigned char heldFile;
98extern unsigned char gridMoveOffset;
99
100extern clock_t nextMoveTime;
101
102extern unsigned char prevRight, prevLeft, prev2nd, prevAlpha;
103
104#endif