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