1 // ============================================================================
2 // Mirror Magic -- McDuffin's Revenge
3 // ----------------------------------------------------------------------------
4 // (c) 1994-2017 by Artsoft Entertainment
7 // http://www.artsoft.org/
8 // ----------------------------------------------------------------------------
10 // ============================================================================
17 struct GameInfo_MM game_mm;
18 struct LevelInfo_MM native_mm_level;
20 short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
21 short Hit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
22 short Box[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
23 short Angle[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
25 short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
27 unsigned int Elementeigenschaften[MAX_ELEMENTS];
29 struct LaserInfo laser;
31 short LX,LY, XS,YS, ELX,ELY;
34 Pixel pen_fg, pen_bg, pen_ray, pen_magicolor[2];
57 /* "Sign" has the following structure:
59 each 4-bit-value represents the values d*8 + c*4 + b*2 + a*1
60 at the pixel positions
65 so the value "0xA" (=> (d=1)*8 + (c=0)*4 + (b=1)*2 + (a=0)*1)
66 would result in the pixel pattern
96 char *element_info_mm[] =
98 "empty space", /* 0 */
100 "mirror (11.25\xb0)",
102 "mirror (33.75\xb0)",
104 "mirror (56.25\xb0)",
106 "mirror (78.75\xb0)",
108 "mirror (101.25\xb0)", /* 10 */
109 "mirror (112.5\xb0)",
110 "mirror (123.75\xb0)",
112 "mirror (146.25\xb0)",
113 "mirror (157.5\xb0)",
114 "mirror (168.75\xb0)",
115 "fixed steel polarizer (0\xb0)",
116 "fixed steel polarizer (90\xb0)",
117 "fixed steel polarizer (45\xb0)",
118 "fixed steel polarizer (135\xb0)", /* 20 */
119 "Gregor McDuffin (looking right)",
120 "Gregor McDuffin (looking up)",
121 "Gregor McDuffin (looking left)",
122 "Gregor McDuffin (looking down)",
138 "steel wall", /* 40 */
148 "wooden wall", /* 50 */
158 "wooden wall", /* 60 */
178 "amoeba wall", /* 80 */
188 "amoeba wall", /* 90 */
198 "beamer (45\xb0)", /* 100 */
201 "beamer (112.5\xb0)",
203 "beamer (157.5\xb0)",
205 "beamer (202.5\xb0)",
207 "beamer (247.5\xb0)",
208 "beamer (270\xb0)", /* 110 */
209 "beamer (292.5\xb0)",
211 "beamer (337.5\xb0)",
213 "pac man (starts moving right)",
214 "pac man (starts moving up)",
215 "pac man (starts moving left)",
216 "pac man (starts moving down)",
218 "polarizer (11.25\xb0)", /* 120 */
219 "polarizer (22.5\xb0)",
220 "polarizer (33.75\xb0)",
221 "polarizer (45\xb0)",
222 "polarizer (56.25\xb0)",
223 "polarizer (67.5\xb0)",
224 "polarizer (78.75\xb0)",
225 "polarizer (90\xb0)",
226 "polarizer (101.25\xb0)",
227 "polarizer (112.5\xb0)",
228 "polarizer (123.75\xb0)", /* 130 */
229 "polarizer (135\xb0)",
230 "polarizer (146.25\xb0)",
231 "polarizer (157.5\xb0)",
232 "polarizer (168.75\xb0)",
233 "two-way polarizer (0\xb0)",
234 "two-way polarizer (22.5\xb0)",
235 "two-way polarizer (45\xb0)",
236 "two-way polarizer (67.5\xb0)",
237 "fixed mirror (0\xb0)",
238 "fixed mirror (45\xb0)", /* 140 */
239 "fixed mirror (90\xb0)",
240 "fixed mirror (135\xb0)",
241 "reflecting stone lock",
244 "ligh bulb (glowing)",
246 "reflecting stone block",
248 "extra energy ball (full)", /* 150 */
249 "fixed wooden polarizer (0\xb0)",
250 "fixed wooden polarizer (90\xb0)",
251 "fixed wooden polarizer (45\xb0)",
252 "fixed wooden polarizer (135\xb0)",
253 "extra energy ball (empty)",
258 "letter ' '", /* 160 */
268 "letter '*'", /* 170 */
278 "letter '4'", /* 180 */
288 "letter '>'", /* 190 */
298 "letter 'H'", /* 200 */
308 "letter 'R'", /* 210 */
318 "letter '\xd6'", /* 220 */
328 "letter ''", /* 230 */
338 "mirror (0\xb0)", /* 240 */
339 "mirror (11.25\xb0)",
341 "mirror (33.75\xb0)",
343 "mirror (56.25\xb0)",
345 "mirror (78.75\xb0)",
347 "mirror (101.25\xb0)",
348 "mirror (112.5\xb0)", /* 250 */
349 "mirror (123.75\xb0)",
351 "mirror (146.25\xb0)",
352 "mirror (157.5\xb0)",
353 "mirror (168.75\xb0)",
354 "fixed wooden polarizer (0\xb0)",
355 "fixed wooden polarizer (22.5\xb0)",
356 "fixed wooden polarizer (45\xb0)",
357 "fixed wooden polarizer (67.5\xb0)",
358 "fixed wooden polarizer (90\xb0)", /* 260 */
359 "fixed wooden polarizer (112.5\xb0)",
360 "fixed wooden polarizer (135\xb0)",
361 "fixed wooden polarizer (157.5\xb0)",
362 "fixed steel polarizer (0\xb0)",
363 "fixed steel polarizer (22.5\xb0)",
364 "fixed steel polarizer (45\xb0)",
365 "fixed steel polarizer (67.5\xb0)",
366 "fixed steel polarizer (90\xb0)",
367 "fixed steel polarizer (112.5\xb0)",
368 "fixed steel polarizer (135\xb0)", /* 270 */
369 "fixed steel polarizer (157.5\xb0)",
370 "deflektor style wooden wall",
371 "deflektor style wooden wall",
372 "deflektor style wooden wall",
373 "deflektor style wooden wall",
374 "deflektor style wooden wall",
375 "deflektor style wooden wall",
376 "deflektor style wooden wall",
377 "deflektor style wooden wall",
378 "deflektor style wooden wall", /* 280 */
379 "deflektor style wooden wall",
380 "deflektor style wooden wall",
381 "deflektor style wooden wall",
382 "deflektor style wooden wall",
383 "deflektor style wooden wall",
384 "deflektor style wooden wall",
385 "deflektor style wooden wall",
386 "deflektor style steel wall",
387 "deflektor style steel wall",
388 "deflektor style steel wall", /* 290 */
389 "deflektor style steel wall",
390 "deflektor style steel wall",
391 "deflektor style steel wall",
392 "deflektor style steel wall",
393 "deflektor style steel wall",
394 "deflektor style steel wall",
395 "deflektor style steel wall",
396 "deflektor style steel wall",
397 "deflektor style steel wall",
398 "deflektor style steel wall", /* 300 */
399 "deflektor style steel wall",
400 "deflektor style steel wall",
401 "deflektor style steel wall",
406 "laser cannon (shooting right)",
407 "laser cannon (shooting up)",
408 "laser cannon (shooting left)", /* 310 */
409 "laser cannon (shooting down)",
410 "laser receiver (directed right)",
411 "laser receiver (directed up)",
412 "laser receiver (directed left)",
413 "laser receiver (directed down)",
418 "fibre optic (3a)", /* 320 */
422 "rotating mirror (0\xb0)",
423 "rotating mirror (11.25\xb0)",
424 "rotating mirror (22.5\xb0)",
425 "rotating mirror (33.75\xb0)",
426 "rotating mirror (45\xb0)",
427 "rotating mirror (56.25\xb0)",
428 "rotating mirror (67.5\xb0)", /* 330 */
429 "rotating mirror (78.75\xb0)",
430 "rotating mirror (90\xb0)",
431 "rotating mirror (101.25\xb0)",
432 "rotating mirror (112.5\xb0)",
433 "rotating mirror (123.75\xb0)",
434 "rotating mirror (135\xb0)",
435 "rotating mirror (146.25\xb0)",
436 "rotating mirror (157.5\xb0)",
437 "rotating mirror (168.75\xb0)",
438 "rotating wooden polarizer (0\xb0)", /* 340 */
439 "rotating wooden polarizer (22.5\xb0)",
440 "rotating wooden polarizer (45\xb0)",
441 "rotating wooden polarizer (67.5\xb0)",
442 "rotating wooden polarizer (90\xb0)",
443 "rotating wooden polarizer (112.5\xb0)",
444 "rotating wooden polarizer (135\xb0)",
445 "rotating wooden polarizer (157.5\xb0)",
446 "rotating steel polarizer (0\xb0)",
447 "rotating steel polarizer (22.5\xb0)",
448 "rotating steel polarizer (45\xb0)", /* 350 */
449 "rotating steel polarizer (67.5\xb0)",
450 "rotating steel polarizer (90\xb0)",
451 "rotating steel polarizer (112.5\xb0)",
452 "rotating steel polarizer (135\xb0)",
453 "rotating steel polarizer (157.5\xb0)",
454 "red beamer (0\xb0)",
455 "red beamer (22.5\xb0)",
456 "red beamer (45\xb0)",
457 "red beamer (67.5\xb0)",
458 "red beamer (90\xb0)", /* 360 */
459 "red beamer (112.5\xb0)",
460 "red beamer (135\xb0)",
461 "red beamer (157.5\xb0)",
462 "red beamer (180\xb0)",
463 "red beamer (202.5\xb0)",
464 "red beamer (225\xb0)",
465 "red beamer (247.5\xb0)",
466 "red beamer (270\xb0)",
467 "red beamer (292.5\xb0)",
468 "red beamer (315\xb0)", /* 370 */
469 "red beamer (337.5\xb0)",
470 "yellow beamer (0\xb0)",
471 "yellow beamer (22.5\xb0)",
472 "yellow beamer (45\xb0)",
473 "yellow beamer (67.5\xb0)",
474 "yellow beamer (90\xb0)",
475 "yellow beamer (112.5\xb0)",
476 "yellow beamer (135\xb0)",
477 "yellow beamer (157.5\xb0)",
478 "yellow beamer (180\xb0)", /* 380 */
479 "yellow beamer (202.5\xb0)",
480 "yellow beamer (225\xb0)",
481 "yellow beamer (247.5\xb0)",
482 "yellow beamer (270\xb0)",
483 "yellow beamer (292.5\xb0)",
484 "yellow beamer (315\xb0)",
485 "yellow beamer (337.5\xb0)",
486 "green beamer (0\xb0)",
487 "green beamer (22.5\xb0)",
488 "green beamer (45\xb0)", /* 390 */
489 "green beamer (67.5\xb0)",
490 "green beamer (90\xb0)",
491 "green beamer (112.5\xb0)",
492 "green beamer (135\xb0)",
493 "green beamer (157.5\xb0)",
494 "green beamer (180\xb0)",
495 "green beamer (202.5\xb0)",
496 "green beamer (225\xb0)",
497 "green beamer (247.5\xb0)",
498 "green beamer (270\xb0)", /* 400 */
499 "green beamer (292.5\xb0)",
500 "green beamer (315\xb0)",
501 "green beamer (337.5\xb0)",
502 "blue beamer (0\xb0)",
503 "blue beamer (22.5\xb0)",
504 "blue beamer (45\xb0)",
505 "blue beamer (67.5\xb0)",
506 "blue beamer (90\xb0)",
507 "blue beamer (112.5\xb0)",
508 "blue beamer (135\xb0)", /* 410 */
509 "blue beamer (157.5\xb0)",
510 "blue beamer (180\xb0)",
511 "blue beamer (202.5\xb0)",
512 "blue beamer (225\xb0)",
513 "blue beamer (247.5\xb0)",
514 "blue beamer (270\xb0)",
515 "blue beamer (292.5\xb0)",
516 "blue beamer (315\xb0)",
517 "blue beamer (337.5\xb0)",
521 "-------------------------------",
524 int num_element_info_mm = sizeof(element_info_mm) / sizeof(char *);