1 // ============================================================================
2 // Mirror Magic -- McDuffin's Revenge
3 // ----------------------------------------------------------------------------
4 // (c) 1994-2017 by Artsoft Entertainment
7 // https://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;
39 Pixel pen_fg, pen_bg, pen_ray, pen_magicolor[2];
62 /* "Sign" has the following structure:
64 each 4-bit-value represents the values d*8 + c*4 + b*2 + a*1
65 at the pixel positions
70 so the value "0xA" (=> (d=1)*8 + (c=0)*4 + (b=1)*2 + (a=0)*1)
71 would result in the pixel pattern
101 char *element_info_mm[] =
105 "mirror (11.25\xb0)",
107 "mirror (33.75\xb0)",
109 "mirror (56.25\xb0)",
111 "mirror (78.75\xb0)",
113 "mirror (101.25\xb0)", // 10
114 "mirror (112.5\xb0)",
115 "mirror (123.75\xb0)",
117 "mirror (146.25\xb0)",
118 "mirror (157.5\xb0)",
119 "mirror (168.75\xb0)",
120 "fixed steel polarizer (0\xb0)",
121 "fixed steel polarizer (90\xb0)",
122 "fixed steel polarizer (45\xb0)",
123 "fixed steel polarizer (135\xb0)", // 20
124 "Gregor McDuffin (looking right)",
125 "Gregor McDuffin (looking up)",
126 "Gregor McDuffin (looking left)",
127 "Gregor McDuffin (looking down)",
201 "teleporter (0\xb0)",
202 "teleporter (22.5\xb0)",
203 "teleporter (45\xb0)", // 100
204 "teleporter (67.5\xb0)",
205 "teleporter (90\xb0)",
206 "teleporter (112.5\xb0)",
207 "teleporter (135\xb0)",
208 "teleporter (157.5\xb0)",
209 "teleporter (180\xb0)",
210 "teleporter (202.5\xb0)",
211 "teleporter (225\xb0)",
212 "teleporter (247.5\xb0)",
213 "teleporter (270\xb0)", // 110
214 "teleporter (292.5\xb0)",
215 "teleporter (315\xb0)",
216 "teleporter (337.5\xb0)",
218 "pac man (starts moving right)",
219 "pac man (starts moving up)",
220 "pac man (starts moving left)",
221 "pac man (starts moving down)",
223 "polarizer (11.25\xb0)", // 120
224 "polarizer (22.5\xb0)",
225 "polarizer (33.75\xb0)",
226 "polarizer (45\xb0)",
227 "polarizer (56.25\xb0)",
228 "polarizer (67.5\xb0)",
229 "polarizer (78.75\xb0)",
230 "polarizer (90\xb0)",
231 "polarizer (101.25\xb0)",
232 "polarizer (112.5\xb0)",
233 "polarizer (123.75\xb0)", // 130
234 "polarizer (135\xb0)",
235 "polarizer (146.25\xb0)",
236 "polarizer (157.5\xb0)",
237 "polarizer (168.75\xb0)",
238 "two-way polarizer (0\xb0)",
239 "two-way polarizer (22.5\xb0)",
240 "two-way polarizer (45\xb0)",
241 "two-way polarizer (67.5\xb0)",
242 "fixed mirror (0\xb0)",
243 "fixed mirror (45\xb0)", // 140
244 "fixed mirror (90\xb0)",
245 "fixed mirror (135\xb0)",
246 "reflecting stone lock",
249 "light bulb (glowing)",
251 "reflecting stone block",
253 "extra energy ball (full)", // 150
254 "fixed wooden polarizer (0\xb0)",
255 "fixed wooden polarizer (90\xb0)",
256 "fixed wooden polarizer (45\xb0)",
257 "fixed wooden polarizer (135\xb0)",
258 "extra energy ball (empty)",
323 "letter '\xd6'", // 220
343 "mirror (0\xb0)", // 240
344 "mirror (11.25\xb0)",
346 "mirror (33.75\xb0)",
348 "mirror (56.25\xb0)",
350 "mirror (78.75\xb0)",
352 "mirror (101.25\xb0)",
353 "mirror (112.5\xb0)", // 250
354 "mirror (123.75\xb0)",
356 "mirror (146.25\xb0)",
357 "mirror (157.5\xb0)",
358 "mirror (168.75\xb0)",
359 "fixed wooden polarizer (0\xb0)",
360 "fixed wooden polarizer (22.5\xb0)",
361 "fixed wooden polarizer (45\xb0)",
362 "fixed wooden polarizer (67.5\xb0)",
363 "fixed wooden polarizer (90\xb0)", // 260
364 "fixed wooden polarizer (112.5\xb0)",
365 "fixed wooden polarizer (135\xb0)",
366 "fixed wooden polarizer (157.5\xb0)",
367 "fixed steel polarizer (0\xb0)",
368 "fixed steel polarizer (22.5\xb0)",
369 "fixed steel polarizer (45\xb0)",
370 "fixed steel polarizer (67.5\xb0)",
371 "fixed steel polarizer (90\xb0)",
372 "fixed steel polarizer (112.5\xb0)",
373 "fixed steel polarizer (135\xb0)", // 270
374 "fixed steel polarizer (157.5\xb0)",
375 "deflektor style wooden wall",
376 "deflektor style wooden wall",
377 "deflektor style wooden wall",
378 "deflektor style wooden wall",
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", // 280
384 "deflektor style wooden wall",
385 "deflektor style wooden wall",
386 "deflektor style wooden wall",
387 "deflektor style wooden wall",
388 "deflektor style wooden wall",
389 "deflektor style wooden wall",
390 "deflektor style wooden wall",
391 "deflektor style steel wall",
392 "deflektor style steel wall",
393 "deflektor style steel wall", // 290
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",
399 "deflektor style steel wall",
400 "deflektor style steel wall",
401 "deflektor style steel wall",
402 "deflektor style steel wall",
403 "deflektor style steel wall", // 300
404 "deflektor style steel wall",
405 "deflektor style steel wall",
406 "deflektor style steel wall",
411 "laser cannon (shooting right)",
412 "laser cannon (shooting up)",
413 "laser cannon (shooting left)", // 310
414 "laser cannon (shooting down)",
415 "laser receiver (directed right)",
416 "laser receiver (directed up)",
417 "laser receiver (directed left)",
418 "laser receiver (directed down)",
423 "fibre optic (3a)", // 320
427 "rotating mirror (0\xb0)",
428 "rotating mirror (11.25\xb0)",
429 "rotating mirror (22.5\xb0)",
430 "rotating mirror (33.75\xb0)",
431 "rotating mirror (45\xb0)",
432 "rotating mirror (56.25\xb0)",
433 "rotating mirror (67.5\xb0)", // 330
434 "rotating mirror (78.75\xb0)",
435 "rotating mirror (90\xb0)",
436 "rotating mirror (101.25\xb0)",
437 "rotating mirror (112.5\xb0)",
438 "rotating mirror (123.75\xb0)",
439 "rotating mirror (135\xb0)",
440 "rotating mirror (146.25\xb0)",
441 "rotating mirror (157.5\xb0)",
442 "rotating mirror (168.75\xb0)",
443 "rotating wooden polarizer (0\xb0)", // 340
444 "rotating wooden polarizer (22.5\xb0)",
445 "rotating wooden polarizer (45\xb0)",
446 "rotating wooden polarizer (67.5\xb0)",
447 "rotating wooden polarizer (90\xb0)",
448 "rotating wooden polarizer (112.5\xb0)",
449 "rotating wooden polarizer (135\xb0)",
450 "rotating wooden polarizer (157.5\xb0)",
451 "rotating steel polarizer (0\xb0)",
452 "rotating steel polarizer (22.5\xb0)",
453 "rotating steel polarizer (45\xb0)", // 350
454 "rotating steel polarizer (67.5\xb0)",
455 "rotating steel polarizer (90\xb0)",
456 "rotating steel polarizer (112.5\xb0)",
457 "rotating steel polarizer (135\xb0)",
458 "rotating steel polarizer (157.5\xb0)",
459 "red teleporter (0\xb0)",
460 "red teleporter (22.5\xb0)",
461 "red teleporter (45\xb0)",
462 "red teleporter (67.5\xb0)",
463 "red teleporter (90\xb0)", // 360
464 "red teleporter (112.5\xb0)",
465 "red teleporter (135\xb0)",
466 "red teleporter (157.5\xb0)",
467 "red teleporter (180\xb0)",
468 "red teleporter (202.5\xb0)",
469 "red teleporter (225\xb0)",
470 "red teleporter (247.5\xb0)",
471 "red teleporter (270\xb0)",
472 "red teleporter (292.5\xb0)",
473 "red teleporter (315\xb0)", // 370
474 "red teleporter (337.5\xb0)",
475 "yellow teleporter (0\xb0)",
476 "yellow teleporter (22.5\xb0)",
477 "yellow teleporter (45\xb0)",
478 "yellow teleporter (67.5\xb0)",
479 "yellow teleporter (90\xb0)",
480 "yellow teleporter (112.5\xb0)",
481 "yellow teleporter (135\xb0)",
482 "yellow teleporter (157.5\xb0)",
483 "yellow teleporter (180\xb0)", // 380
484 "yellow teleporter (202.5\xb0)",
485 "yellow teleporter (225\xb0)",
486 "yellow teleporter (247.5\xb0)",
487 "yellow teleporter (270\xb0)",
488 "yellow teleporter (292.5\xb0)",
489 "yellow teleporter (315\xb0)",
490 "yellow teleporter (337.5\xb0)",
491 "green teleporter (0\xb0)",
492 "green teleporter (22.5\xb0)",
493 "green teleporter (45\xb0)", // 390
494 "green teleporter (67.5\xb0)",
495 "green teleporter (90\xb0)",
496 "green teleporter (112.5\xb0)",
497 "green teleporter (135\xb0)",
498 "green teleporter (157.5\xb0)",
499 "green teleporter (180\xb0)",
500 "green teleporter (202.5\xb0)",
501 "green teleporter (225\xb0)",
502 "green teleporter (247.5\xb0)",
503 "green teleporter (270\xb0)", // 400
504 "green teleporter (292.5\xb0)",
505 "green teleporter (315\xb0)",
506 "green teleporter (337.5\xb0)",
507 "blue teleporter (0\xb0)",
508 "blue teleporter (22.5\xb0)",
509 "blue teleporter (45\xb0)",
510 "blue teleporter (67.5\xb0)",
511 "blue teleporter (90\xb0)",
512 "blue teleporter (112.5\xb0)",
513 "blue teleporter (135\xb0)", // 410
514 "blue teleporter (157.5\xb0)",
515 "blue teleporter (180\xb0)",
516 "blue teleporter (202.5\xb0)",
517 "blue teleporter (225\xb0)",
518 "blue teleporter (247.5\xb0)",
519 "blue teleporter (270\xb0)",
520 "blue teleporter (292.5\xb0)",
521 "blue teleporter (315\xb0)",
522 "blue teleporter (337.5\xb0)",
526 "-------------------------------",
529 int num_element_info_mm = sizeof(element_info_mm) / sizeof(char *);