1 // ============================================================================
2 // Mirror Magic -- McDuffin's Revenge
3 // ----------------------------------------------------------------------------
4 // (c) 1994-2017 by Artsoft Entertainment
7 // https://www.artsoft.org/
8 // ----------------------------------------------------------------------------
10 // ============================================================================
15 #define STD_LEV_FIELDX MM_STD_PLAYFIELD_WIDTH
16 #define STD_LEV_FIELDY MM_STD_PLAYFIELD_HEIGHT
17 #define MAX_LEV_FIELDX MM_MAX_PLAYFIELD_WIDTH
18 #define MAX_LEV_FIELDY MM_MAX_PLAYFIELD_HEIGHT
20 #define SCREENX(a) (a)
21 #define SCREENY(a) (a)
25 #define IN_FIELD(x, y, xsize, ysize) ((x) >= 0 && (x) < (xsize) && \
26 (y) >= 0 && (y) < (ysize))
27 #define IN_FIELD_MINMAX(x, y, xmin, ymin, xmax, ymax) \
28 ((x) >= (xmin) && (x) <= (xmax) && \
29 (y) >= (ymin) && (y) <= (ymax))
31 #define IN_PIX_FIELD(x, y) IN_FIELD(x, y, SXSIZE, SYSIZE)
32 #define IN_VIS_FIELD(x, y) IN_FIELD(x, y, SCR_FIELDX, SCR_FIELDY)
33 #define IN_LEV_FIELD(x, y) IN_FIELD(x, y, lev_fieldx, lev_fieldy)
34 #define IN_SCR_FIELD(x, y) IN_FIELD_MINMAX(x, y, BX1, BY1, BX2, BY2)
36 // values for 'Elementeigenschaften'
37 #define EP_BIT_GRID (1 << 0)
38 #define EP_BIT_MCDUFFIN (1 << 1)
39 #define EP_BIT_RECTANGLE (1 << 2)
40 #define EP_BIT_MIRROR (1 << 3)
41 #define EP_BIT_MIRROR_FIXED (1 << 4)
42 #define EP_BIT_POLAR (1 << 5)
43 #define EP_BIT_POLAR_CROSS (1 << 6)
44 #define EP_BIT_BEAMER (1 << 7)
45 #define EP_BIT_CHAR (1 << 8)
46 #define EP_BIT_REFLECTING (1 << 9)
47 #define EP_BIT_ABSORBING (1 << 10)
48 #define EP_BIT_INACTIVE (1 << 11)
49 #define EP_BIT_WALL (1 << 12)
50 #define EP_BIT_PACMAN (1 << 13)
52 #define IS_GRID(e) (Elementeigenschaften[e] & EP_BIT_GRID)
53 #define IS_MCDUFFIN(e) (Elementeigenschaften[e] & EP_BIT_MCDUFFIN)
54 #define IS_RECTANGLE(e) (Elementeigenschaften[e] & EP_BIT_RECTANGLE)
55 #define IS_MIRROR(e) (Elementeigenschaften[e] & EP_BIT_MIRROR)
56 #define IS_MIRROR_FIXED(e) (Elementeigenschaften[e] & EP_BIT_MIRROR_FIXED)
57 #define IS_POLAR(e) (Elementeigenschaften[e] & EP_BIT_POLAR)
58 #define IS_POLAR_CROSS(e) (Elementeigenschaften[e] & EP_BIT_POLAR_CROSS)
59 #define IS_BEAMER_OLD(e) (Elementeigenschaften[e] & EP_BIT_BEAMER)
60 #define IS_CHAR(e) (Elementeigenschaften[e] & EP_BIT_CHAR)
61 #define IS_REFLECTING(e) (Elementeigenschaften[e] & EP_BIT_REFLECTING)
62 #define IS_ABSORBING(e) (Elementeigenschaften[e] & EP_BIT_ABSORBING)
63 #define IS_INACTIVE(e) (Elementeigenschaften[e] & EP_BIT_INACTIVE)
64 #define IS_MM_WALL(e) (Elementeigenschaften[e] & EP_BIT_WALL)
65 #define IS_PACMAN(e) (Elementeigenschaften[e] & EP_BIT_PACMAN)
67 #define IS_WALL_STEEL(e) ((e) >= EL_WALL_STEEL_START && \
68 (e) <= EL_WALL_STEEL_END)
69 #define IS_WALL_WOOD(e) ((e) >= EL_WALL_WOOD_START && \
70 (e) <= EL_WALL_WOOD_END)
71 #define IS_WALL_ICE(e) ((e) >= EL_WALL_ICE_START && \
72 (e) <= EL_WALL_ICE_END)
73 #define IS_WALL_AMOEBA(e) ((e) >= EL_WALL_AMOEBA_START && \
74 (e) <= EL_WALL_AMOEBA_END)
75 #define IS_DF_WALL_STEEL(e) ((e) >= EL_DF_WALL_STEEL_START && \
76 (e) <= EL_DF_WALL_STEEL_END)
77 #define IS_DF_WALL_WOOD(e) ((e) >= EL_DF_WALL_WOOD_START && \
78 (e) <= EL_DF_WALL_WOOD_END)
79 #define IS_DF_WALL(e) ((e) >= EL_DF_WALL_START && \
80 (e) <= EL_DF_WALL_END)
81 #define IS_WALL(e) (IS_MM_WALL(e) || IS_DF_WALL(e))
82 #define IS_WALL_CHANGING(e) ((e) >= EL_WALL_CHANGING_START && \
83 (e) <= EL_WALL_CHANGING_END)
84 #define IS_GRID_STEEL(e) ((e) >= EL_GRID_STEEL_START && \
85 (e) <= EL_GRID_STEEL_END)
86 #define IS_GRID_WOOD(e) ((e) >= EL_GRID_WOOD_START && \
87 (e) <= EL_GRID_WOOD_END)
88 #define IS_GRID_WOOD_FIXED(e) ((e) >= EL_GRID_WOOD_FIXED_START && \
89 (e) <= EL_GRID_WOOD_FIXED_END)
90 #define IS_GRID_STEEL_FIXED(e) ((e) >= EL_GRID_STEEL_FIXED_START && \
91 (e) <= EL_GRID_STEEL_FIXED_END)
92 #define IS_GRID_WOOD_AUTO(e) ((e) >= EL_GRID_WOOD_AUTO_START && \
93 (e) <= EL_GRID_WOOD_AUTO_END)
94 #define IS_GRID_STEEL_AUTO(e) ((e) >= EL_GRID_STEEL_AUTO_START && \
95 (e) <= EL_GRID_STEEL_AUTO_END)
96 #define IS_DF_GRID(e) (IS_GRID_WOOD_FIXED(e) || \
97 IS_GRID_STEEL_FIXED(e) || \
98 IS_GRID_WOOD_AUTO(e) || \
99 IS_GRID_STEEL_AUTO(e))
100 #define IS_DF_MIRROR(e) ((e) >= EL_DF_MIRROR_START && \
101 (e) <= EL_DF_MIRROR_END)
102 #define IS_DF_MIRROR_AUTO(e) ((e) >= EL_DF_MIRROR_AUTO_START && \
103 (e) <= EL_DF_MIRROR_AUTO_END)
104 #define IS_LASER(e) ((e) >= EL_LASER_START && \
106 #define IS_RECEIVER(e) ((e) >= EL_RECEIVER_START && \
107 (e) <= EL_RECEIVER_END)
108 #define IS_FIBRE_OPTIC(e) ((e) >= EL_FIBRE_OPTIC_START && \
109 (e) <= EL_FIBRE_OPTIC_END)
110 #define FIBRE_OPTIC_NR(e) (((e) - EL_FIBRE_OPTIC_START) / 2)
111 #define IS_BEAMER(e) ((e) >= EL_BEAMER_RED_START && \
112 (e) <= EL_BEAMER_BLUE_END)
113 #define BEAMER_CLASSIC_NR(e) (((e) - EL_BEAMER_RED_START) / 16)
114 #define BEAMER_NR(e) (IS_BEAMER(e) ? BEAMER_CLASSIC_NR(e) : \
115 IS_FIBRE_OPTIC(e) ? (FIBRE_OPTIC_NR(e)+4) : 0)
116 #define IS_EXPLODING(e) ((e) == EL_EXPLODING_OPAQUE || \
117 (e) == EL_EXPLODING_TRANSP)
119 #define IS_EATABLE4PACMAN(e) ((e) == EL_EMPTY || \
120 (e) == EL_KETTLE || \
125 #define CAN_MOVE(e) ((e) == EL_PACMAN)
126 #define IS_FREE(x,y) (Tile[x][y] == EL_EMPTY)
128 #define IS_MOVING(x,y) (MovPos[x][y] != 0)
129 #define IS_BLOCKED(x,y) (Tile[x][y] == EL_BLOCKED)
130 #define IS_DRAWABLE(e) ((e) < EL_BLOCKED)
131 #define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED)
133 #define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_SPIELER1])
135 #define WALL_BASE(e) ((e) & 0xfff0)
136 #define WALL_BITS(e) ((e) & 0x000f)
138 // Bitmaps with graphic file
143 #define PIX_BIGFONT 4
144 #define PIX_SMALLFONT 5
145 #define PIX_MEDIUMFONT 6
146 // Bitmaps without graphic file
147 #define PIX_DB_DOOR 7
149 #define NUM_PICTURES 7
150 #define NUM_BITMAPS 8
152 // boundaries of arrays etc.
153 #define MAX_PLAYER_NAME_LEN 10
154 #define MAX_LEVEL_NAME_LEN 32
155 #define MAX_LEVEL_AUTHOR_LEN 32
156 #define MAX_SCORE_ENTRIES 100
157 #define MAX_ELEMENTS 700 // 500 static + 200 runtime
159 #define MICROLEVEL_SCROLL_DELAY 50 // delay for scrolling micro level
160 #define MICROLEVEL_LABEL_DELAY 250 // delay for micro level label
162 // score for elements
163 #define SC_COLLECTIBLE 0
164 #define SC_UNUSED_1 1
165 #define SC_UNUSED_2 2
166 #define SC_UNUSED_3 3
167 #define SC_UNUSED_4 4
168 #define SC_UNUSED_5 5
170 #define SC_UNUSED_7 7
171 #define SC_UNUSED_8 8
173 #define SC_TIME_BONUS 10
174 #define SC_UNUSED_11 11
175 #define SC_UNUSED_12 12
176 #define SC_UNUSED_13 13
177 #define SC_LIGHTBALL 14
178 #define SC_UNUSED_15 15
180 #define LEVEL_SCORE_ELEMENTS 16 // level elements with score
183 extern DrawBuffer *drawto_field;
185 extern int game_status;
186 extern boolean level_editor_test_game;
188 extern boolean redraw[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
189 extern int redraw_x1, redraw_y1;
191 extern short Tile[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
192 extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
193 extern short Hit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
194 extern short Box[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
195 extern short Angle[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
197 extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
198 extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
199 extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
200 extern short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
201 extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
202 extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
203 extern short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
204 extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
205 extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
206 extern short AmoebaCnt[MAX_NUM_AMOEBA];
207 extern short AmoebaCnt2[MAX_NUM_AMOEBA];
209 extern unsigned int Elementeigenschaften[MAX_ELEMENTS];
212 extern int lev_fieldx, lev_fieldy, scroll_x, scroll_y;
214 extern int FX, FY, ScrollStepSize;
215 extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos;
216 extern int GameFrameDelay;
217 extern int FfwdFrameDelay;
218 extern int BX1, BY1, BX2, BY2;
219 extern int SBX_Left, SBX_Right;
220 extern int SBY_Upper, SBY_Lower;
221 extern int TimeFrames, TimePlayed, TimeLeft;
223 extern struct LevelInfo_MM native_mm_level;
224 extern struct GameInfo_MM game_mm;
225 extern struct LaserInfo laser;
227 extern short LX, LY, XS, YS, ELX, ELY;
232 extern int cSX2, cSY2;
235 extern Pixel pen_fg, pen_bg, pen_ray, pen_magicolor[2];
236 extern int color_status;
238 extern struct XY Step[];
239 extern short Sign[16];
241 extern char *element_info[];
242 extern int num_element_info;
244 // often used screen positions
248 #define EY (DY + 178)
249 #define TILEX TILESIZE
250 #define TILEY TILESIZE
251 #define MINI_TILESIZE (TILESIZE / 2)
252 #define MINI_TILEX (TILEX / 2)
253 #define MINI_TILEY (TILEY / 2)
254 #define MICRO_TILEX (TILEX / 4)
255 #define MICRO_TILEY (TILEY / 4)
256 #define MICRO_WALLX (TILEX / 8)
257 #define MICRO_WALLY (TILEY / 8)
258 #define MIDPOSX (SCR_FIELDX / 2)
259 #define MIDPOSY (SCR_FIELDY / 2)
262 #define VXSIZE DXSIZE
264 #define EXSIZE DXSIZE
265 #define EYSIZE (VXSIZE + 44)
266 #define FULL_SXSIZE (2 + SXSIZE + 2)
267 #define FULL_SYSIZE (2 + SYSIZE + 2)
268 #define MICROLEV_XPOS (SX + 12 * TILEX)
269 #define MICROLEV_YPOS (SY + 6 * TILEY)
270 #define MICROLEV_XSIZE (STD_LEV_FIELDX * MICRO_TILEX)
271 #define MICROLEV_YSIZE (STD_LEV_FIELDY * MICRO_TILEY)
272 #define MICROLABEL_XPOS (SY)
273 #define MICROLABEL_YPOS (SY + 352)
274 #define MICROLABEL_XSIZE (SXSIZE)
275 #define MICROLABEL_YSIZE (FONT4_YSIZE)
277 #define GFX_STARTX SX
278 #define GFX_STARTY SY
279 #define MINI_GFX_STARTX (SX + 8 * TILEX)
280 #define MINI_GFX_STARTY (SY + 6 * TILEY)
281 #define MICRO_GFX_STARTX (MINI_GFX_STARTX + 8 * MINI_TILEX)
282 #define MICRO_GFX_STARTY (MINI_GFX_STARTY + 6 * MINI_TILEY)
283 #define GFX_PER_LINE 16
284 #define MINI_GFX_PER_LINE GFX_PER_LINE
285 #define MICRO_GFX_PER_LINE GFX_PER_LINE
287 #define MINI_DF_STARTX (8 * TILEX)
288 #define MINI_DF_STARTY (8 * TILEY)
289 #define MICRO_DF_STARTX (MINI_DF_STARTX + 8 * MINI_TILEX)
290 #define MICRO_DF_STARTY (MINI_DF_STARTY + 8 * MINI_TILEY)
291 #define DF_PER_LINE 16
292 #define MINI_DF_PER_LINE DF_PER_LINE
293 #define MICRO_DF_PER_LINE DF_PER_LINE
295 #define MICRO_FONT_STARTX (MICRO_DF_STARTX + 8 * MICRO_TILEX)
296 #define MICRO_FONT_STARTY (MICRO_DF_STARTY + 8 * MICRO_TILEY)
297 #define MICRO_FONT_PER_LINE 8
299 // wall positions (that can be OR'ed together)
300 #define WALL_TOPLEFT 1
301 #define WALL_TOPRIGHT 2
302 #define WALL_BOTTOMLEFT 4
303 #define WALL_BOTTOMRIGHT 8
304 #define WALL_LEFT (WALL_TOPLEFT | WALL_BOTTOMLEFT)
305 #define WALL_RIGHT (WALL_TOPRIGHT | WALL_BOTTOMRIGHT)
306 #define WALL_TOP (WALL_TOPLEFT | WALL_TOPRIGHT)
307 #define WALL_BOTTOM (WALL_BOTTOMLEFT | WALL_BOTTOMRIGHT)
310 // 0 - 499: real elements, stored in level file
311 // 500 - 699: flag elements, only used at runtime
313 // "real" level elements
314 #define EL_MM_START 0
315 #define EL_MM_START_1 EL_MM_START
318 #define EL_MIRROR_START 1
319 #define EL_MIRROR_00 (EL_MIRROR_START + 0)
320 #define EL_MIRROR_01 (EL_MIRROR_START + 1)
321 #define EL_MIRROR_02 (EL_MIRROR_START + 2)
322 #define EL_MIRROR_03 (EL_MIRROR_START + 3)
323 #define EL_MIRROR_04 (EL_MIRROR_START + 4)
324 #define EL_MIRROR_05 (EL_MIRROR_START + 5)
325 #define EL_MIRROR_06 (EL_MIRROR_START + 6)
326 #define EL_MIRROR_07 (EL_MIRROR_START + 7)
327 #define EL_MIRROR_08 (EL_MIRROR_START + 8)
328 #define EL_MIRROR_09 (EL_MIRROR_START + 9)
329 #define EL_MIRROR_10 (EL_MIRROR_START + 10)
330 #define EL_MIRROR_11 (EL_MIRROR_START + 11)
331 #define EL_MIRROR_12 (EL_MIRROR_START + 12)
332 #define EL_MIRROR_13 (EL_MIRROR_START + 13)
333 #define EL_MIRROR_14 (EL_MIRROR_START + 14)
334 #define EL_MIRROR_15 (EL_MIRROR_START + 15)
335 #define EL_MIRROR_END EL_MIRROR_15
336 #define EL_GRID_STEEL_START 17
337 #define EL_GRID_STEEL_00 (EL_GRID_STEEL_START + 0)
338 #define EL_GRID_STEEL_01 (EL_GRID_STEEL_START + 1)
339 #define EL_GRID_STEEL_02 (EL_GRID_STEEL_START + 2)
340 #define EL_GRID_STEEL_03 (EL_GRID_STEEL_START + 3)
341 #define EL_GRID_STEEL_END EL_GRID_STEEL_03
342 #define EL_MCDUFFIN_START 21
343 #define EL_MCDUFFIN_RIGHT (EL_MCDUFFIN_START + 0)
344 #define EL_MCDUFFIN_UP (EL_MCDUFFIN_START + 1)
345 #define EL_MCDUFFIN_LEFT (EL_MCDUFFIN_START + 2)
346 #define EL_MCDUFFIN_DOWN (EL_MCDUFFIN_START + 3)
347 #define EL_MCDUFFIN_END EL_MCDUFFIN_DOWN
348 #define EL_EXIT_CLOSED 25
349 #define EL_EXIT_OPENING_1 26
350 #define EL_EXIT_OPENING_2 27
351 #define EL_EXIT_OPEN 28
355 #define EL_WALL_START 32
356 #define EL_WALL_EMPTY EL_WALL_START
357 #define EL_WALL_00 EL_WALL_START
358 #define EL_WALL_STEEL EL_WALL_00
359 #define EL_WALL_STEEL_START EL_WALL_00
360 #define EL_WALL_15 47
361 #define EL_WALL_STEEL_END EL_WALL_15
362 #define EL_WALL_16 48
363 #define EL_WALL_WOOD EL_WALL_16
364 #define EL_WALL_WOOD_START EL_WALL_16
365 #define EL_WALL_31 63
366 #define EL_WALL_WOOD_END EL_WALL_31
367 #define EL_WALL_32 64
368 #define EL_WALL_ICE EL_WALL_32
369 #define EL_WALL_ICE_START EL_WALL_32
370 #define EL_WALL_47 79
371 #define EL_WALL_ICE_END EL_WALL_47
372 #define EL_WALL_48 80
373 #define EL_WALL_AMOEBA EL_WALL_48
374 #define EL_WALL_AMOEBA_START EL_WALL_48
375 #define EL_WALL_63 95
376 #define EL_WALL_AMOEBA_END EL_WALL_63
377 #define EL_WALL_END EL_WALL_63
378 #define EL_BLOCK_WOOD 96
379 #define EL_BALL_GRAY 97
380 #define EL_BEAMER_START 98
381 #define EL_BEAMER_00 (EL_BEAMER_START + 0)
382 #define EL_BEAMER_01 (EL_BEAMER_START + 1)
383 #define EL_BEAMER_02 (EL_BEAMER_START + 2)
384 #define EL_BEAMER_03 (EL_BEAMER_START + 3)
385 #define EL_BEAMER_04 (EL_BEAMER_START + 4)
386 #define EL_BEAMER_05 (EL_BEAMER_START + 5)
387 #define EL_BEAMER_06 (EL_BEAMER_START + 6)
388 #define EL_BEAMER_07 (EL_BEAMER_START + 7)
389 #define EL_BEAMER_08 (EL_BEAMER_START + 8)
390 #define EL_BEAMER_09 (EL_BEAMER_START + 9)
391 #define EL_BEAMER_10 (EL_BEAMER_START + 10)
392 #define EL_BEAMER_11 (EL_BEAMER_START + 11)
393 #define EL_BEAMER_12 (EL_BEAMER_START + 12)
394 #define EL_BEAMER_13 (EL_BEAMER_START + 13)
395 #define EL_BEAMER_14 (EL_BEAMER_START + 14)
396 #define EL_BEAMER_15 (EL_BEAMER_START + 15)
397 #define EL_BEAMER_END EL_BEAMER_15
398 #define EL_FUSE_ON 114
399 #define EL_PACMAN_START 115
400 #define EL_PACMAN_RIGHT (EL_PACMAN_START + 0)
401 #define EL_PACMAN_UP (EL_PACMAN_START + 1)
402 #define EL_PACMAN_LEFT (EL_PACMAN_START + 2)
403 #define EL_PACMAN_DOWN (EL_PACMAN_START + 3)
404 #define EL_PACMAN_END EL_PACMAN_DOWN
405 #define EL_POLAR_START 119
406 #define EL_POLAR_00 (EL_POLAR_START + 0)
407 #define EL_POLAR_01 (EL_POLAR_START + 1)
408 #define EL_POLAR_02 (EL_POLAR_START + 2)
409 #define EL_POLAR_03 (EL_POLAR_START + 3)
410 #define EL_POLAR_04 (EL_POLAR_START + 4)
411 #define EL_POLAR_05 (EL_POLAR_START + 5)
412 #define EL_POLAR_06 (EL_POLAR_START + 6)
413 #define EL_POLAR_07 (EL_POLAR_START + 7)
414 #define EL_POLAR_08 (EL_POLAR_START + 8)
415 #define EL_POLAR_09 (EL_POLAR_START + 9)
416 #define EL_POLAR_10 (EL_POLAR_START + 10)
417 #define EL_POLAR_11 (EL_POLAR_START + 11)
418 #define EL_POLAR_12 (EL_POLAR_START + 12)
419 #define EL_POLAR_13 (EL_POLAR_START + 13)
420 #define EL_POLAR_14 (EL_POLAR_START + 14)
421 #define EL_POLAR_15 (EL_POLAR_START + 15)
422 #define EL_POLAR_END EL_POLAR_15
423 #define EL_POLAR_CROSS_START 135
424 #define EL_POLAR_CROSS_00 (EL_POLAR_CROSS_START + 0)
425 #define EL_POLAR_CROSS_01 (EL_POLAR_CROSS_START + 1)
426 #define EL_POLAR_CROSS_02 (EL_POLAR_CROSS_START + 2)
427 #define EL_POLAR_CROSS_03 (EL_POLAR_CROSS_START + 3)
428 #define EL_POLAR_CROSS_END EL_POLAR_CROSS_03
429 #define EL_MIRROR_FIXED_START 139
430 #define EL_MIRROR_FIXED_00 (EL_MIRROR_FIXED_START + 0)
431 #define EL_MIRROR_FIXED_01 (EL_MIRROR_FIXED_START + 1)
432 #define EL_MIRROR_FIXED_02 (EL_MIRROR_FIXED_START + 2)
433 #define EL_MIRROR_FIXED_03 (EL_MIRROR_FIXED_START + 3)
434 #define EL_MIRROR_FIXED_END EL_MIRROR_FIXED_03
435 #define EL_GATE_STONE 143
437 #define EL_LIGHTBULB_OFF 145
438 #define EL_LIGHTBULB_ON 146
439 #define EL_LIGHTBALL 147
440 #define EL_BLOCK_STONE 148
441 #define EL_GATE_WOOD 149
442 #define EL_FUEL_FULL 150
443 #define EL_GRID_WOOD_START 151
444 #define EL_GRID_WOOD_00 (EL_GRID_WOOD_START + 0)
445 #define EL_GRID_WOOD_01 (EL_GRID_WOOD_START + 1)
446 #define EL_GRID_WOOD_02 (EL_GRID_WOOD_START + 2)
447 #define EL_GRID_WOOD_03 (EL_GRID_WOOD_START + 3)
448 #define EL_GRID_WOOD_END EL_GRID_WOOD_03
449 #define EL_FUEL_EMPTY 155
451 #define EL_MM_END_1 155
453 #define EL_CHAR_START 160
454 #define EL_CHAR_ASCII0 (EL_CHAR_START - 32)
455 #define EL_CHAR_AUSRUF (EL_CHAR_ASCII0 + 33)
456 #define EL_CHAR_ZOLL (EL_CHAR_ASCII0 + 34)
457 #define EL_CHAR_RAUTE (EL_CHAR_ASCII0 + 35)
458 #define EL_CHAR_DOLLAR (EL_CHAR_ASCII0 + 36)
459 #define EL_CHAR_PROZ (EL_CHAR_ASCII0 + 37)
460 #define EL_CHAR_AMPERSAND (EL_CHAR_ASCII0 + 38)
461 #define EL_CHAR_APOSTR (EL_CHAR_ASCII0 + 39)
462 #define EL_CHAR_KLAMM1 (EL_CHAR_ASCII0 + 40)
463 #define EL_CHAR_KLAMM2 (EL_CHAR_ASCII0 + 41)
464 #define EL_CHAR_MULT (EL_CHAR_ASCII0 + 42)
465 #define EL_CHAR_PLUS (EL_CHAR_ASCII0 + 43)
466 #define EL_CHAR_KOMMA (EL_CHAR_ASCII0 + 44)
467 #define EL_CHAR_MINUS (EL_CHAR_ASCII0 + 45)
468 #define EL_CHAR_PUNKT (EL_CHAR_ASCII0 + 46)
469 #define EL_CHAR_SLASH (EL_CHAR_ASCII0 + 47)
470 #define EL_CHAR_0 (EL_CHAR_ASCII0 + 48)
471 #define EL_CHAR_9 (EL_CHAR_ASCII0 + 57)
472 #define EL_CHAR_DOPPEL (EL_CHAR_ASCII0 + 58)
473 #define EL_CHAR_SEMIKL (EL_CHAR_ASCII0 + 59)
474 #define EL_CHAR_LT (EL_CHAR_ASCII0 + 60)
475 #define EL_CHAR_GLEICH (EL_CHAR_ASCII0 + 61)
476 #define EL_CHAR_GT (EL_CHAR_ASCII0 + 62)
477 #define EL_CHAR_FRAGE (EL_CHAR_ASCII0 + 63)
478 #define EL_CHAR_AT (EL_CHAR_ASCII0 + 64)
479 #define EL_CHAR_A (EL_CHAR_ASCII0 + 65)
480 #define EL_CHAR_Z (EL_CHAR_ASCII0 + 90)
481 #define EL_CHAR_AE (EL_CHAR_ASCII0 + 91)
482 #define EL_CHAR_OE (EL_CHAR_ASCII0 + 92)
483 #define EL_CHAR_UE (EL_CHAR_ASCII0 + 93)
484 #define EL_CHAR_COPY (EL_CHAR_ASCII0 + 94)
485 #define EL_CHAR_END (EL_CHAR_START + 79)
487 #define EL_CHAR(x) ((x) == CHAR_BYTE_UMLAUT_A ? EL_CHAR_AE : \
488 (x) == CHAR_BYTE_UMLAUT_O ? EL_CHAR_OE : \
489 (x) == CHAR_BYTE_UMLAUT_U ? EL_CHAR_UE : \
490 EL_CHAR_A + (x) - 'A')
492 #define EL_MM_START_2 240
494 // elements for "Deflektor" style levels
495 #define EL_DF_START EL_MM_START_2
497 #define EL_DF_MIRROR_START EL_DF_START
498 #define EL_DF_MIRROR_00 (EL_DF_MIRROR_START + 0)
499 #define EL_DF_MIRROR_01 (EL_DF_MIRROR_START + 1)
500 #define EL_DF_MIRROR_02 (EL_DF_MIRROR_START + 2)
501 #define EL_DF_MIRROR_03 (EL_DF_MIRROR_START + 3)
502 #define EL_DF_MIRROR_04 (EL_DF_MIRROR_START + 4)
503 #define EL_DF_MIRROR_05 (EL_DF_MIRROR_START + 5)
504 #define EL_DF_MIRROR_06 (EL_DF_MIRROR_START + 6)
505 #define EL_DF_MIRROR_07 (EL_DF_MIRROR_START + 7)
506 #define EL_DF_MIRROR_08 (EL_DF_MIRROR_START + 8)
507 #define EL_DF_MIRROR_09 (EL_DF_MIRROR_START + 9)
508 #define EL_DF_MIRROR_10 (EL_DF_MIRROR_START + 10)
509 #define EL_DF_MIRROR_11 (EL_DF_MIRROR_START + 11)
510 #define EL_DF_MIRROR_12 (EL_DF_MIRROR_START + 12)
511 #define EL_DF_MIRROR_13 (EL_DF_MIRROR_START + 13)
512 #define EL_DF_MIRROR_14 (EL_DF_MIRROR_START + 14)
513 #define EL_DF_MIRROR_15 (EL_DF_MIRROR_START + 15)
514 #define EL_DF_MIRROR_END EL_DF_MIRROR_15
516 #define EL_GRID_WOOD_FIXED_START 256
517 #define EL_GRID_WOOD_FIXED_00 (EL_GRID_WOOD_FIXED_START + 0) // 0.0°
518 #define EL_GRID_WOOD_FIXED_01 (EL_GRID_WOOD_FIXED_START + 1) // 22.5°
519 #define EL_GRID_WOOD_FIXED_02 (EL_GRID_WOOD_FIXED_START + 2) // 45.0°
520 #define EL_GRID_WOOD_FIXED_03 (EL_GRID_WOOD_FIXED_START + 3) // 67.5°
521 #define EL_GRID_WOOD_FIXED_04 (EL_GRID_WOOD_FIXED_START + 4) // 90.0°
522 #define EL_GRID_WOOD_FIXED_05 (EL_GRID_WOOD_FIXED_START + 5) // 112.5°
523 #define EL_GRID_WOOD_FIXED_06 (EL_GRID_WOOD_FIXED_START + 6) // 135.0°
524 #define EL_GRID_WOOD_FIXED_07 (EL_GRID_WOOD_FIXED_START + 7) // 157.5°
525 #define EL_GRID_WOOD_FIXED_END EL_GRID_WOOD_FIXED_07
527 #define EL_GRID_STEEL_FIXED_START 264
528 #define EL_GRID_STEEL_FIXED_00 (EL_GRID_STEEL_FIXED_START + 0) // 0.0°
529 #define EL_GRID_STEEL_FIXED_01 (EL_GRID_STEEL_FIXED_START + 1) // 22.5°
530 #define EL_GRID_STEEL_FIXED_02 (EL_GRID_STEEL_FIXED_START + 2) // 45.0°
531 #define EL_GRID_STEEL_FIXED_03 (EL_GRID_STEEL_FIXED_START + 3) // 67.5°
532 #define EL_GRID_STEEL_FIXED_04 (EL_GRID_STEEL_FIXED_START + 4) // 90.0°
533 #define EL_GRID_STEEL_FIXED_05 (EL_GRID_STEEL_FIXED_START + 5) // 112.5°
534 #define EL_GRID_STEEL_FIXED_06 (EL_GRID_STEEL_FIXED_START + 6) // 135.0°
535 #define EL_GRID_STEEL_FIXED_07 (EL_GRID_STEEL_FIXED_START + 7) // 157.5°
536 #define EL_GRID_STEEL_FIXED_END EL_GRID_STEEL_FIXED_07
538 #define EL_DF_WALL_WOOD 272
539 #define EL_DF_WALL_START EL_DF_WALL_WOOD_START
540 #define EL_DF_WALL_WOOD_START (EL_DF_WALL_WOOD + 0)
541 #define EL_DF_WALL_WOOD_END (EL_DF_WALL_WOOD + 15)
543 #define EL_DF_WALL_STEEL 288
544 #define EL_DF_WALL_STEEL_START (EL_DF_WALL_STEEL + 0)
545 #define EL_DF_WALL_STEEL_END (EL_DF_WALL_STEEL + 15)
546 #define EL_DF_WALL_END EL_DF_WALL_STEEL_END
548 #define EL_DF_EMPTY 304
551 #define EL_REFRACTOR 307
553 #define EL_LASER_START 308
554 #define EL_LASER_RIGHT (EL_LASER_START + 0)
555 #define EL_LASER_UP (EL_LASER_START + 1)
556 #define EL_LASER_LEFT (EL_LASER_START + 2)
557 #define EL_LASER_DOWN (EL_LASER_START + 3)
558 #define EL_LASER_END EL_LASER_DOWN
560 #define EL_RECEIVER_START 312
561 #define EL_RECEIVER_RIGHT (EL_RECEIVER_START + 0)
562 #define EL_RECEIVER_UP (EL_RECEIVER_START + 1)
563 #define EL_RECEIVER_LEFT (EL_RECEIVER_START + 2)
564 #define EL_RECEIVER_DOWN (EL_RECEIVER_START + 3)
565 #define EL_RECEIVER_END EL_RECEIVER_DOWN
567 #define EL_FIBRE_OPTIC_START 316
568 #define EL_FIBRE_OPTIC_00 (EL_FIBRE_OPTIC_START + 0)
569 #define EL_FIBRE_OPTIC_01 (EL_FIBRE_OPTIC_START + 1)
570 #define EL_FIBRE_OPTIC_02 (EL_FIBRE_OPTIC_START + 2)
571 #define EL_FIBRE_OPTIC_03 (EL_FIBRE_OPTIC_START + 3)
572 #define EL_FIBRE_OPTIC_04 (EL_FIBRE_OPTIC_START + 4)
573 #define EL_FIBRE_OPTIC_05 (EL_FIBRE_OPTIC_START + 5)
574 #define EL_FIBRE_OPTIC_06 (EL_FIBRE_OPTIC_START + 6)
575 #define EL_FIBRE_OPTIC_07 (EL_FIBRE_OPTIC_START + 7)
576 #define EL_FIBRE_OPTIC_END EL_FIBRE_OPTIC_07
578 #define EL_DF_MIRROR_AUTO_START 324
579 #define EL_DF_MIRROR_AUTO_00 (EL_DF_MIRROR_AUTO_START + 0)
580 #define EL_DF_MIRROR_AUTO_01 (EL_DF_MIRROR_AUTO_START + 1)
581 #define EL_DF_MIRROR_AUTO_02 (EL_DF_MIRROR_AUTO_START + 2)
582 #define EL_DF_MIRROR_AUTO_03 (EL_DF_MIRROR_AUTO_START + 3)
583 #define EL_DF_MIRROR_AUTO_04 (EL_DF_MIRROR_AUTO_START + 4)
584 #define EL_DF_MIRROR_AUTO_05 (EL_DF_MIRROR_AUTO_START + 5)
585 #define EL_DF_MIRROR_AUTO_06 (EL_DF_MIRROR_AUTO_START + 6)
586 #define EL_DF_MIRROR_AUTO_07 (EL_DF_MIRROR_AUTO_START + 7)
587 #define EL_DF_MIRROR_AUTO_08 (EL_DF_MIRROR_AUTO_START + 8)
588 #define EL_DF_MIRROR_AUTO_09 (EL_DF_MIRROR_AUTO_START + 9)
589 #define EL_DF_MIRROR_AUTO_10 (EL_DF_MIRROR_AUTO_START + 10)
590 #define EL_DF_MIRROR_AUTO_11 (EL_DF_MIRROR_AUTO_START + 11)
591 #define EL_DF_MIRROR_AUTO_12 (EL_DF_MIRROR_AUTO_START + 12)
592 #define EL_DF_MIRROR_AUTO_13 (EL_DF_MIRROR_AUTO_START + 13)
593 #define EL_DF_MIRROR_AUTO_14 (EL_DF_MIRROR_AUTO_START + 14)
594 #define EL_DF_MIRROR_AUTO_15 (EL_DF_MIRROR_AUTO_START + 15)
595 #define EL_DF_MIRROR_AUTO_END EL_DF_MIRROR_AUTO_15
597 #define EL_GRID_WOOD_AUTO_START 340
598 #define EL_GRID_WOOD_AUTO_00 (EL_GRID_WOOD_AUTO_START + 0)
599 #define EL_GRID_WOOD_AUTO_01 (EL_GRID_WOOD_AUTO_START + 1)
600 #define EL_GRID_WOOD_AUTO_02 (EL_GRID_WOOD_AUTO_START + 2)
601 #define EL_GRID_WOOD_AUTO_03 (EL_GRID_WOOD_AUTO_START + 3)
602 #define EL_GRID_WOOD_AUTO_04 (EL_GRID_WOOD_AUTO_START + 4)
603 #define EL_GRID_WOOD_AUTO_05 (EL_GRID_WOOD_AUTO_START + 5)
604 #define EL_GRID_WOOD_AUTO_06 (EL_GRID_WOOD_AUTO_START + 6)
605 #define EL_GRID_WOOD_AUTO_07 (EL_GRID_WOOD_AUTO_START + 7)
606 #define EL_GRID_WOOD_AUTO_END EL_GRID_WOOD_AUTO_07
608 #define EL_GRID_STEEL_AUTO_START 348
609 #define EL_GRID_STEEL_AUTO_00 (EL_GRID_STEEL_AUTO_START + 0)
610 #define EL_GRID_STEEL_AUTO_01 (EL_GRID_STEEL_AUTO_START + 1)
611 #define EL_GRID_STEEL_AUTO_02 (EL_GRID_STEEL_AUTO_START + 2)
612 #define EL_GRID_STEEL_AUTO_03 (EL_GRID_STEEL_AUTO_START + 3)
613 #define EL_GRID_STEEL_AUTO_04 (EL_GRID_STEEL_AUTO_START + 4)
614 #define EL_GRID_STEEL_AUTO_05 (EL_GRID_STEEL_AUTO_START + 5)
615 #define EL_GRID_STEEL_AUTO_06 (EL_GRID_STEEL_AUTO_START + 6)
616 #define EL_GRID_STEEL_AUTO_07 (EL_GRID_STEEL_AUTO_START + 7)
617 #define EL_GRID_STEEL_AUTO_END EL_GRID_STEEL_AUTO_07
619 #define EL_DF_END 355
621 #define EL_BEAMER_RED_START 356
622 #define EL_BEAMER_RED_END (EL_BEAMER_RED_START + 15)
623 #define EL_BEAMER_YELLOW_START 372
624 #define EL_BEAMER_YELLOW_END (EL_BEAMER_YELLOW_START + 15)
625 #define EL_BEAMER_GREEN_START 388
626 #define EL_BEAMER_GREEN_END (EL_BEAMER_GREEN_START + 15)
627 #define EL_BEAMER_BLUE_START 404
628 #define EL_BEAMER_BLUE_END (EL_BEAMER_BLUE_START + 15)
630 // element definitions partially used for drawing graphics
631 #define EL_MCDUFFIN 420
632 #define EL_PACMAN 421
633 #define EL_FUSE_OFF 422
634 #define EL_STEEL_WALL 423
635 #define EL_WOODEN_WALL 424
636 #define EL_ICE_WALL 425
637 #define EL_AMOEBA_WALL 426
639 #define EL_RECEIVER 428
640 #define EL_DF_STEEL_WALL 429
641 #define EL_DF_WOODEN_WALL 430
643 #define EL_MM_END_2 430
644 #define EL_MM_END EL_MM_END_2
646 // "real" (and therefore drawable) runtime elements
647 #define EL_EXIT_OPENING 500
648 #define EL_EXIT_CLOSING 501
649 #define EL_GRAY_BALL_OPENING 502
650 #define EL_ICE_WALL_SHRINKING 503
651 #define EL_AMOEBA_WALL_GROWING 504
653 #define EL_WALL_CHANGING 512
654 #define EL_WALL_CHANGING_START (EL_WALL_CHANGING + 0)
655 #define EL_WALL_CHANGING_END (EL_WALL_CHANGING + 15)
657 #define EL_FIRST_RUNTIME_EL EL_EXIT_OPENING
659 // "unreal" (and therefore not drawable) runtime elements
660 #define EL_BLOCKED 600
661 #define EL_EXPLODING_OPAQUE 601
662 #define EL_EXPLODING_TRANSP 602
664 // dummy elements (never used as game elements, only used as graphics)
665 #define EL_MM_MASK_MCDUFFIN_RIGHT 700
666 #define EL_MM_MASK_MCDUFFIN_UP 701
667 #define EL_MM_MASK_MCDUFFIN_LEFT 702
668 #define EL_MM_MASK_MCDUFFIN_DOWN 703
669 #define EL_MM_MASK_GRID_1 704
670 #define EL_MM_MASK_GRID_2 705
671 #define EL_MM_MASK_GRID_3 706
672 #define EL_MM_MASK_GRID_4 707
673 #define EL_MM_MASK_RECTANGE 708
674 #define EL_MM_MASK_CIRCLE 709
678 // 0 - 191: graphics from "MirrorScreen"
679 // 192 - 255: pseudo graphics mapped to "MirrorScreen"
680 // 256 - 511: graphics from "MirrorFont"
681 // 512 - 767: graphics from "MirrorDF"
683 #define IMG_EMPTY IMG_EMPTY_SPACE
685 #define GFX_START_MIRRORSCREEN 0
686 #define GFX_END_MIRRORSCREEN 191
687 #define GFX_START_PSEUDO 192
688 #define GFX_END_PSEUDO 255
689 #define GFX_START_MIRRORFONT 256
690 #define GFX_END_MIRRORFONT 511
691 #define GFX_START_MIRRORDF 512
692 #define GFX_END_MIRRORDF 767
694 #define NUM_TILES 512
696 // graphics from "MirrorScreen"
697 #define GFX_EMPTY (-1)
699 #define GFX_MIRROR_START 0
700 #define GFX_MIRROR GFX_MIRROR_START
701 #define GFX_MIRROR_00 (GFX_MIRROR_START + 0)
702 #define GFX_MIRROR_01 (GFX_MIRROR_START + 1)
703 #define GFX_MIRROR_02 (GFX_MIRROR_START + 2)
704 #define GFX_MIRROR_03 (GFX_MIRROR_START + 3)
705 #define GFX_MIRROR_04 (GFX_MIRROR_START + 4)
706 #define GFX_MIRROR_05 (GFX_MIRROR_START + 5)
707 #define GFX_MIRROR_06 (GFX_MIRROR_START + 6)
708 #define GFX_MIRROR_07 (GFX_MIRROR_START + 7)
709 #define GFX_MIRROR_08 (GFX_MIRROR_START + 8)
710 #define GFX_MIRROR_09 (GFX_MIRROR_START + 9)
711 #define GFX_MIRROR_10 (GFX_MIRROR_START + 10)
712 #define GFX_MIRROR_11 (GFX_MIRROR_START + 11)
713 #define GFX_MIRROR_12 (GFX_MIRROR_START + 12)
714 #define GFX_MIRROR_13 (GFX_MIRROR_START + 13)
715 #define GFX_MIRROR_14 (GFX_MIRROR_START + 14)
716 #define GFX_MIRROR_15 (GFX_MIRROR_START + 15)
717 #define GFX_MIRROR_END GFX_MIRROR_15
719 #define GFX_GRID_STEEL_START 16
720 #define GFX_GRID_STEEL GFX_GRID_STEEL_START
721 #define GFX_GRID_STEEL_00 (GFX_GRID_STEEL_START + 0)
722 #define GFX_GRID_STEEL_01 (GFX_GRID_STEEL_START + 1)
723 #define GFX_GRID_STEEL_02 (GFX_GRID_STEEL_START + 2)
724 #define GFX_GRID_STEEL_03 (GFX_GRID_STEEL_START + 3)
725 #define GFX_MCDUFFIN_START 20
726 #define GFX_MCDUFFIN GFX_MCDUFFIN_START
727 #define GFX_MCDUFFIN_RIGHT (GFX_MCDUFFIN_START + 0)
728 #define GFX_MCDUFFIN_UP (GFX_MCDUFFIN_START + 1)
729 #define GFX_MCDUFFIN_LEFT (GFX_MCDUFFIN_START + 2)
730 #define GFX_MCDUFFIN_DOWN (GFX_MCDUFFIN_START + 3)
731 #define GFX_EXIT_CLOSED 24
732 #define GFX_EXIT_OPENING_1 25
733 #define GFX_EXIT_OPENING_2 26
734 #define GFX_EXIT_OPEN 27
735 #define GFX_KETTLE 28
736 #define GFX_EXPLOSION_KETTLE 29
739 #define GFX_WALL_SEVERAL 33
740 #define GFX_WALL_ANIMATION 34
741 #define GFX_BLOCK_WOOD 36
743 #define GFX_FUSE_ON 38
744 #define GFX_FUSE_OFF 39
745 #define GFX_GATE_STONE 40
747 #define GFX_LIGHTBULB_OFF 42
748 #define GFX_LIGHTBULB_ON 43
749 #define GFX_BALL_RED 44
750 #define GFX_BALL_BLUE 45
751 #define GFX_BALL_YELLOW 46
752 #define GFX_BALL_GRAY 47
754 #define GFX_BEAMER_START 48
755 #define GFX_BEAMER_END 63
757 #define GFX_PACMAN_START 64
758 #define GFX_PACMAN GFX_PACMAN_START
759 #define GFX_PACMAN_RIGHT (GFX_PACMAN_START + 0)
760 #define GFX_PACMAN_UP (GFX_PACMAN_START + 1)
761 #define GFX_PACMAN_LEFT (GFX_PACMAN_START + 2)
762 #define GFX_PACMAN_DOWN (GFX_PACMAN_START + 3)
763 #define GFX_EXPLOSION_START 72
764 #define GFX_EXPLOSION_SHORT 76
765 #define GFX_EXPLOSION_LAST 78
767 #define GFX_POLAR_START 80
768 #define GFX_POLAR_END 95
770 #define GFX_POLAR_CROSS_START 96
771 #define GFX_POLAR_CROSS GFX_POLAR_CROSS_START
772 #define GFX_POLAR_CROSS_00 (GFX_POLAR_CROSS_START + 0)
773 #define GFX_POLAR_CROSS_01 (GFX_POLAR_CROSS_START + 1)
774 #define GFX_POLAR_CROSS_02 (GFX_POLAR_CROSS_START + 2)
775 #define GFX_POLAR_CROSS_03 (GFX_POLAR_CROSS_START + 3)
776 #define GFX_MIRROR_FIXED_START 100
777 #define GFX_MIRROR_FIXED GFX_MIRROR_FIXED_START
778 #define GFX_MIRROR_FIXED_00 (GFX_MIRROR_FIXED_START + 0)
779 #define GFX_MIRROR_FIXED_01 (GFX_MIRROR_FIXED_START + 1)
780 #define GFX_MIRROR_FIXED_02 (GFX_MIRROR_FIXED_START + 2)
781 #define GFX_MIRROR_FIXED_03 (GFX_MIRROR_FIXED_START + 3)
783 #define GFX_BLOCK_STONE 112
784 #define GFX_GATE_WOOD 113
785 #define GFX_FUEL_FULL 114
786 #define GFX_FUEL_EMPTY 115
787 #define GFX_GRID_WOOD_00 116
788 #define GFX_GRID_WOOD_01 117
789 #define GFX_GRID_WOOD_02 118
790 #define GFX_GRID_WOOD_03 119
792 #define GFX_ARROW_BLUE_LEFT 128
793 #define GFX_ARROW_BLUE_RIGHT 129
794 #define GFX_ARROW_BLUE_UP 130
795 #define GFX_ARROW_BLUE_DOWN 131
796 #define GFX_ARROW_RED_LEFT 132
797 #define GFX_ARROW_RED_RIGHT 133
798 #define GFX_ARROW_RED_UP 134
799 #define GFX_ARROW_RED_DOWN 135
801 #define GFX_SCROLLBAR_BLUE 144
802 #define GFX_SCROLLBAR_RED 145
804 #define GFX_MASK_CIRCLE 160
805 #define GFX_MASK_RECTANGLE 161
806 #define GFX_MASK_RECTANGLE2 162
807 #define GFX_MASK_RECTANGLE3 163
808 #define GFX_MASK_GRID_00 164
809 #define GFX_MASK_GRID_01 165
810 #define GFX_MASK_GRID_02 166
811 #define GFX_MASK_GRID_03 167
813 #define GFX_MASK_MCDUFFIN_00 176
814 #define GFX_MASK_MCDUFFIN_01 177
815 #define GFX_MASK_MCDUFFIN_02 178
816 #define GFX_MASK_MCDUFFIN_03 179
818 // pseudo-graphics; will be mapped to other graphics
819 #define GFX_WALL_STEEL 192
820 #define GFX_WALL_WOOD 193
821 #define GFX_WALL_ICE 194
822 #define GFX_WALL_AMOEBA 195
823 #define GFX_DF_WALL_STEEL 196
824 #define GFX_DF_WALL_WOOD 197
826 #define GFX_KUGEL_ROT GFX_BALL_RED
827 #define GFX_KUGEL_BLAU GFX_BALL_BLUE
828 #define GFX_KUGEL_GELB GFX_BALL_YELLOW
829 #define GFX_KUGEL_GRAU GFX_BALL_GRAY
831 // graphics from "MirrorFont"
832 #define GFX_CHAR_START (GFX_START_MIRRORFONT)
833 #define GFX_CHAR_ASCII0 (GFX_CHAR_START - 32)
834 #define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0 + 33)
835 #define GFX_CHAR_ZOLL (GFX_CHAR_ASCII0 + 34)
836 #define GFX_CHAR_DOLLAR (GFX_CHAR_ASCII0 + 36)
837 #define GFX_CHAR_PROZ (GFX_CHAR_ASCII0 + 37)
838 #define GFX_CHAR_APOSTR (GFX_CHAR_ASCII0 + 39)
839 #define GFX_CHAR_KLAMM1 (GFX_CHAR_ASCII0 + 40)
840 #define GFX_CHAR_KLAMM2 (GFX_CHAR_ASCII0 + 41)
841 #define GFX_CHAR_PLUS (GFX_CHAR_ASCII0 + 43)
842 #define GFX_CHAR_KOMMA (GFX_CHAR_ASCII0 + 44)
843 #define GFX_CHAR_MINUS (GFX_CHAR_ASCII0 + 45)
844 #define GFX_CHAR_PUNKT (GFX_CHAR_ASCII0 + 46)
845 #define GFX_CHAR_SLASH (GFX_CHAR_ASCII0 + 47)
846 #define GFX_CHAR_0 (GFX_CHAR_ASCII0 + 48)
847 #define GFX_CHAR_9 (GFX_CHAR_ASCII0 + 57)
848 #define GFX_CHAR_DOPPEL (GFX_CHAR_ASCII0 + 58)
849 #define GFX_CHAR_SEMIKL (GFX_CHAR_ASCII0 + 59)
850 #define GFX_CHAR_LT (GFX_CHAR_ASCII0 + 60)
851 #define GFX_CHAR_GLEICH (GFX_CHAR_ASCII0 + 61)
852 #define GFX_CHAR_GT (GFX_CHAR_ASCII0 + 62)
853 #define GFX_CHAR_FRAGE (GFX_CHAR_ASCII0 + 63)
854 #define GFX_CHAR_AT (GFX_CHAR_ASCII0 + 64)
855 #define GFX_CHAR_A (GFX_CHAR_ASCII0 + 65)
856 #define GFX_CHAR_Z (GFX_CHAR_ASCII0 + 90)
857 #define GFX_CHAR_AE (GFX_CHAR_ASCII0 + 91)
858 #define GFX_CHAR_OE (GFX_CHAR_ASCII0 + 92)
859 #define GFX_CHAR_UE (GFX_CHAR_ASCII0 + 93)
860 #define GFX_CHAR_COPY (GFX_CHAR_ASCII0 + 94)
861 #define GFX_CHAR_END (GFX_CHAR_START + 79)
863 // graphics from "MirrorDF"
864 #define GFX_DF_MIRROR_00 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 0)
865 #define GFX_DF_MIRROR_01 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 1)
866 #define GFX_DF_MIRROR_02 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 2)
867 #define GFX_DF_MIRROR_03 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 3)
868 #define GFX_DF_MIRROR_04 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 4)
869 #define GFX_DF_MIRROR_05 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 5)
870 #define GFX_DF_MIRROR_06 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 6)
871 #define GFX_DF_MIRROR_07 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 7)
872 #define GFX_DF_MIRROR_08 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 8)
873 #define GFX_DF_MIRROR_09 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 9)
874 #define GFX_DF_MIRROR_10 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 10)
875 #define GFX_DF_MIRROR_11 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 11)
876 #define GFX_DF_MIRROR_12 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 12)
877 #define GFX_DF_MIRROR_13 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 13)
878 #define GFX_DF_MIRROR_14 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 14)
879 #define GFX_DF_MIRROR_15 (GFX_START_MIRRORDF + 0 * DF_PER_LINE + 15)
881 #define GFX_DF_MIRROR_AUTO_00 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 0)
882 #define GFX_DF_MIRROR_AUTO_01 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 1)
883 #define GFX_DF_MIRROR_AUTO_02 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 2)
884 #define GFX_DF_MIRROR_AUTO_03 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 3)
885 #define GFX_DF_MIRROR_AUTO_04 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 4)
886 #define GFX_DF_MIRROR_AUTO_05 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 5)
887 #define GFX_DF_MIRROR_AUTO_06 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 6)
888 #define GFX_DF_MIRROR_AUTO_07 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 7)
889 #define GFX_DF_MIRROR_AUTO_08 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 8)
890 #define GFX_DF_MIRROR_AUTO_09 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 9)
891 #define GFX_DF_MIRROR_AUTO_10 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 10)
892 #define GFX_DF_MIRROR_AUTO_11 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 11)
893 #define GFX_DF_MIRROR_AUTO_12 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 12)
894 #define GFX_DF_MIRROR_AUTO_13 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 13)
895 #define GFX_DF_MIRROR_AUTO_14 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 14)
896 #define GFX_DF_MIRROR_AUTO_15 (GFX_START_MIRRORDF + 1 * DF_PER_LINE + 15)
898 #define GFX_GRID_STEEL_FIXED_00 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 0)
899 #define GFX_GRID_STEEL_FIXED_01 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 1)
900 #define GFX_GRID_STEEL_FIXED_02 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 2)
901 #define GFX_GRID_STEEL_FIXED_03 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 3)
902 #define GFX_GRID_STEEL_FIXED_04 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 4)
903 #define GFX_GRID_STEEL_FIXED_05 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 5)
904 #define GFX_GRID_STEEL_FIXED_06 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 6)
905 #define GFX_GRID_STEEL_FIXED_07 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 7)
906 #define GFX_GRID_STEEL_FIXED GFX_GRID_STEEL_FIXED_00
908 #define GFX_GRID_WOOD_FIXED_00 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 8)
909 #define GFX_GRID_WOOD_FIXED_01 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 9)
910 #define GFX_GRID_WOOD_FIXED_02 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 10)
911 #define GFX_GRID_WOOD_FIXED_03 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 11)
912 #define GFX_GRID_WOOD_FIXED_04 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 12)
913 #define GFX_GRID_WOOD_FIXED_05 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 13)
914 #define GFX_GRID_WOOD_FIXED_06 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 14)
915 #define GFX_GRID_WOOD_FIXED_07 (GFX_START_MIRRORDF + 2 * DF_PER_LINE + 15)
916 #define GFX_GRID_WOOD_FIXED GFX_GRID_WOOD_FIXED_00
918 #define GFX_GRID_STEEL_AUTO_00 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 0)
919 #define GFX_GRID_STEEL_AUTO_01 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 1)
920 #define GFX_GRID_STEEL_AUTO_02 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 2)
921 #define GFX_GRID_STEEL_AUTO_03 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 3)
922 #define GFX_GRID_STEEL_AUTO_04 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 4)
923 #define GFX_GRID_STEEL_AUTO_05 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 5)
924 #define GFX_GRID_STEEL_AUTO_06 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 6)
925 #define GFX_GRID_STEEL_AUTO_07 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 7)
926 #define GFX_GRID_STEEL_AUTO GFX_GRID_STEEL_AUTO_00
928 #define GFX_GRID_WOOD_AUTO_00 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 8)
929 #define GFX_GRID_WOOD_AUTO_01 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 9)
930 #define GFX_GRID_WOOD_AUTO_02 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 10)
931 #define GFX_GRID_WOOD_AUTO_03 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 11)
932 #define GFX_GRID_WOOD_AUTO_04 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 12)
933 #define GFX_GRID_WOOD_AUTO_05 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 13)
934 #define GFX_GRID_WOOD_AUTO_06 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 14)
935 #define GFX_GRID_WOOD_AUTO_07 (GFX_START_MIRRORDF + 3 * DF_PER_LINE + 15)
936 #define GFX_GRID_WOOD_AUTO GFX_GRID_WOOD_AUTO_00
938 #define GFX_BEAMER_RED_START (GFX_START_MIRRORDF + 4 * DF_PER_LINE + 0)
939 #define GFX_BEAMER_RED_END (GFX_START_MIRRORDF + 4 * DF_PER_LINE + 15)
940 #define GFX_BEAMER_YELLOW_START (GFX_START_MIRRORDF + 5 * DF_PER_LINE + 0)
941 #define GFX_BEAMER_YELLOW_END (GFX_START_MIRRORDF + 5 * DF_PER_LINE + 15)
942 #define GFX_BEAMER_GREEN_START (GFX_START_MIRRORDF + 6 * DF_PER_LINE + 0)
943 #define GFX_BEAMER_GREEN_END (GFX_START_MIRRORDF + 6 * DF_PER_LINE + 15)
944 #define GFX_BEAMER_BLUE_START (GFX_START_MIRRORDF + 7 * DF_PER_LINE + 0)
945 #define GFX_BEAMER_BLUE_END (GFX_START_MIRRORDF + 7 * DF_PER_LINE + 15)
947 #define GFX_DF_WALL_SEVERAL (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 0)
948 #define GFX_REFRACTOR (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 1)
949 #define GFX_CELL (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 2)
950 #define GFX_MINE (GFX_START_MIRRORDF + 8 * DF_PER_LINE + 4)
952 #define GFX_LASER_RIGHT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 0)
953 #define GFX_LASER_UP (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 1)
954 #define GFX_LASER_LEFT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 2)
955 #define GFX_LASER_DOWN (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 3)
956 #define GFX_RECEIVER_RIGHT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 4)
957 #define GFX_RECEIVER_UP (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 5)
958 #define GFX_RECEIVER_LEFT (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 6)
959 #define GFX_RECEIVER_DOWN (GFX_START_MIRRORDF + 9 * DF_PER_LINE + 7)
961 #define GFX_FIBRE_OPTIC_00 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 0)
962 #define GFX_FIBRE_OPTIC_01 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 1)
963 #define GFX_FIBRE_OPTIC_02 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 2)
964 #define GFX_FIBRE_OPTIC_03 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 3)
965 #define GFX_FIBRE_OPTIC_04 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 4)
966 #define GFX_FIBRE_OPTIC_05 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 5)
967 #define GFX_FIBRE_OPTIC_06 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 6)
968 #define GFX_FIBRE_OPTIC_07 (GFX_START_MIRRORDF + 10 * DF_PER_LINE + 7)
970 #define GFX_FIBRE_OPTIC_ED_00 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 0)
971 #define GFX_FIBRE_OPTIC_ED_01 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 1)
972 #define GFX_FIBRE_OPTIC_ED_02 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 2)
973 #define GFX_FIBRE_OPTIC_ED_03 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 3)
974 #define GFX_FIBRE_OPTIC_ED_04 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 4)
975 #define GFX_FIBRE_OPTIC_ED_05 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 5)
976 #define GFX_FIBRE_OPTIC_ED_06 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 6)
977 #define GFX_FIBRE_OPTIC_ED_07 (GFX_START_MIRRORDF + 11 * DF_PER_LINE + 7)
979 // the names of the sounds
981 #define SND_ANTIGRAV 1
985 #define SND_HALLOFFAME 5
992 #define SND_OEFFNEN 12
994 #define SND_RHYTHMLOOP 14
995 #define SND_ROAAAR 15
998 #define SND_WARNTON 18
999 #define SND_WHOOSH 19
1001 #define NUM_SOUNDS 20
1003 // values for graphics/sounds action types
1004 #define MM_ACTION_DEFAULT 0
1005 #define MM_ACTION_WAITING 1
1006 #define MM_ACTION_FALLING 2
1007 #define MM_ACTION_MOVING 3
1008 #define MM_ACTION_DIGGING 4
1009 #define MM_ACTION_SNAPPING 5
1010 #define MM_ACTION_COLLECTING 6
1011 #define MM_ACTION_DROPPING 7
1012 #define MM_ACTION_PUSHING 8
1013 #define MM_ACTION_WALKING 9
1014 #define MM_ACTION_PASSING 10
1015 #define MM_ACTION_IMPACT 11
1016 #define MM_ACTION_BREAKING 12
1017 #define MM_ACTION_ACTIVATING 13
1018 #define MM_ACTION_DEACTIVATING 14
1019 #define MM_ACTION_OPENING 15
1020 #define MM_ACTION_CLOSING 16
1021 #define MM_ACTION_ATTACKING 17
1022 #define MM_ACTION_GROWING 18
1023 #define MM_ACTION_SHRINKING 19
1024 #define MM_ACTION_ACTIVE 20
1025 #define MM_ACTION_FILLING 21
1026 #define MM_ACTION_EMPTYING 22
1027 #define MM_ACTION_CHANGING 23
1028 #define MM_ACTION_EXPLODING 24
1029 #define MM_ACTION_BORING 25
1030 #define MM_ACTION_BORING_1 26
1031 #define MM_ACTION_BORING_2 27
1032 #define MM_ACTION_BORING_3 28
1033 #define MM_ACTION_BORING_4 29
1034 #define MM_ACTION_BORING_5 30
1035 #define MM_ACTION_BORING_6 31
1036 #define MM_ACTION_BORING_7 32
1037 #define MM_ACTION_BORING_8 33
1038 #define MM_ACTION_BORING_9 34
1039 #define MM_ACTION_BORING_10 35
1040 #define MM_ACTION_SLEEPING 36
1041 #define MM_ACTION_SLEEPING_1 37
1042 #define MM_ACTION_SLEEPING_2 38
1043 #define MM_ACTION_SLEEPING_3 39
1044 #define MM_ACTION_AWAKENING 40
1045 #define MM_ACTION_DYING 41
1046 #define MM_ACTION_TURNING 42
1047 #define MM_ACTION_TURNING_FROM_LEFT 43
1048 #define MM_ACTION_TURNING_FROM_RIGHT 44
1049 #define MM_ACTION_TURNING_FROM_UP 45
1050 #define MM_ACTION_TURNING_FROM_DOWN 46
1051 #define MM_ACTION_SMASHED_BY_ROCK 47
1052 #define MM_ACTION_SMASHED_BY_SPRING 48
1053 #define MM_ACTION_EATING 49
1054 #define MM_ACTION_TWINKLING 50
1055 #define MM_ACTION_SPLASHING 51
1056 #define MM_ACTION_HITTING 52
1058 // laser angles (directions)
1059 #define ANG_RAY_RIGHT 0
1060 #define ANG_RAY_UP 4
1061 #define ANG_RAY_LEFT 8
1062 #define ANG_RAY_DOWN 12
1064 // laser angles (degree)
1066 #define ANG_RAY_90 4
1067 #define ANG_RAY_180 8
1068 #define ANG_RAY_270 12
1069 #define IS_22_5_ANGLE(angle) ((angle) % 2)
1070 #define IS_90_ANGLE(angle) (!((angle) % 4))
1071 #define IS_HORIZ_ANGLE(angle) (!((angle) % 8))
1072 #define IS_VERT_ANGLE(angle) ((angle) % 8)
1075 #define ANG_MIRROR_0 0
1076 #define ANG_MIRROR_45 4
1077 #define ANG_MIRROR_90 8
1078 #define ANG_MIRROR_135 12
1080 // positions for checking where laser already hits element
1081 #define HIT_POS_CENTER 1
1082 #define HIT_POS_EDGE 2
1083 #define HIT_POS_BETWEEN 4
1085 // masks for scanning elements
1086 #define HIT_MASK_NO_HIT 0
1087 #define HIT_MASK_TOPLEFT 1
1088 #define HIT_MASK_TOPRIGHT 2
1089 #define HIT_MASK_BOTTOMLEFT 4
1090 #define HIT_MASK_BOTTOMRIGHT 8
1091 #define HIT_MASK_LEFT (HIT_MASK_TOPLEFT | HIT_MASK_BOTTOMLEFT)
1092 #define HIT_MASK_RIGHT (HIT_MASK_TOPRIGHT | HIT_MASK_BOTTOMRIGHT)
1093 #define HIT_MASK_TOP (HIT_MASK_TOPLEFT | HIT_MASK_TOPRIGHT)
1094 #define HIT_MASK_BOTTOM (HIT_MASK_BOTTOMLEFT | HIT_MASK_BOTTOMRIGHT)
1095 #define HIT_MASK_ALL (HIT_MASK_LEFT | HIT_MASK_RIGHT)
1097 // step values for rotating elements
1098 #define ROTATE_NO_ROTATING 0
1099 #define ROTATE_LEFT (+1)
1100 #define ROTATE_RIGHT (-1)
1101 #define BUTTON_ROTATION(button) ((button) == MB_LEFTBUTTON ? ROTATE_LEFT : \
1102 (button) == MB_RIGHTBUTTON ? ROTATE_RIGHT : \
1106 #define GAME_OVER_NO_ENERGY 1
1107 #define GAME_OVER_OVERLOADED 2
1108 #define GAME_OVER_BOMB 3
1109 #define GAME_OVER_DELAYED 4
1111 // values for color_status
1112 #define STATIC_COLORS 0
1113 #define DYNAMIC_COLORS 1
1115 #define PROGRAM_VERSION_MAJOR 2
1116 #define PROGRAM_VERSION_MINOR 0
1117 #define PROGRAM_VERSION_PATCH 2
1118 #define PROGRAM_VERSION_STRING "2.0.2"
1120 #define PROGRAM_TITLE_STRING "Mirror Magic II"
1121 #define PROGRAM_AUTHOR_STRING "Holger Schemel"
1122 #define PROGRAM_RIGHTS_STRING "Copyright ^1994-2001"
1123 #define PROGRAM_DOS_PORT_STRING "DOS port based on code by Guido Schulz"
1124 #define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " TARGET_STRING
1125 #define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
1126 #define WINDOW_SUBTITLE_STRING PROGRAM_RIGHTS_STRING " " PROGRAM_AUTHOR_STRING
1127 #define ICON_TITLE_STRING PROGRAM_TITLE_STRING
1128 #define UNIX_USERDATA_DIRECTORY ".mirrormagic"
1130 #define X11_ICON_FILENAME "mirrormagic_icon.xbm"
1131 #define X11_ICONMASK_FILENAME "mirrormagic_iconmask.xbm"
1132 #define MSDOS_POINTER_FILENAME "mouse.pcx"
1134 // functions for version handling
1135 #define MM_VERSION_IDENT(x,y,z) VERSION_IDENT(x,y,z,0)
1136 #define MM_VERSION_MAJOR(x) VERSION_PART_1(x)
1137 #define MM_VERSION_MINOR(x) VERSION_PART_2(x)
1138 #define MM_VERSION_PATCH(x) VERSION_PART_3(x)
1140 // file version numbers for resource files (levels, score, setup, etc.)
1141 // currently supported/known file version numbers:
1142 // 1.4 (still in use)
1145 #define MM_FILE_VERSION_1_4 MM_VERSION_IDENT(1,4,0)
1146 #define MM_FILE_VERSION_2_0 MM_VERSION_IDENT(2,0,0)
1148 // file version does not change for every program version, but is changed
1149 // when new features are introduced that are incompatible with older file
1150 // versions, so that they can be treated accordingly
1151 #define MM_FILE_VERSION_ACTUAL MM_FILE_VERSION_2_0
1153 #define MM_GAME_VERSION_ACTUAL MM_VERSION_IDENT(PROGRAM_VERSION_MAJOR, \
1154 PROGRAM_VERSION_MINOR, \
1155 PROGRAM_VERSION_PATCH)
1159 #define ST(x) (((x) - 8) * 16)