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