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