added centering levels that are smaller than the playfield (MM engine)
[rocksndiamonds.git] / src / game_mm / mm_main.c
index 44ca0ad0830c88b252b1d8b57a2a786552183068..7eafc2f592995da6b488956cbd1c875928e2bab2 100644 (file)
@@ -22,11 +22,20 @@ short               Hit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Box[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Angle[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
 short          Box[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 short          Angle[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
+short          Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+
 unsigned int   Elementeigenschaften[MAX_ELEMENTS];
 
 unsigned int   Elementeigenschaften[MAX_ELEMENTS];
 
+struct LaserInfo       laser;
+
 short          LX,LY, XS,YS, ELX,ELY;
 short          CT,Ct;
 
 short          LX,LY, XS,YS, ELX,ELY;
 short          CT,Ct;
 
+int            dSX, dSY;
+int            cSX, cSY;
+int            cSX2, cSY2;
+int            cFX, cFY;
+
 Pixel          pen_fg, pen_bg, pen_ray, pen_magicolor[2];
 int            color_status;
 
 Pixel          pen_fg, pen_bg, pen_ray, pen_magicolor[2];
 int            color_status;
 
@@ -83,10 +92,10 @@ struct XY   Step[16] =
 
 short Sign[16] =
 {
 
 short Sign[16] =
 {
-  0xA,0xF,0xB,0xF,
-  0x3,0xF,0x7,0xF,
-  0x5,0xF,0xD,0xF,
-  0xC,0xF,0xE,0xF
+  0xA, 0xF, 0xB, 0xF,
+  0x3, 0xF, 0x7, 0xF,
+  0x5, 0xF, 0xD, 0xF,
+  0xC, 0xF, 0xE, 0xF
 };
 
 char *element_info_mm[] =
 };
 
 char *element_info_mm[] =
@@ -108,10 +117,10 @@ char *element_info_mm[] =
   "mirror (146.25\xb0)",
   "mirror (157.5\xb0)",
   "mirror (168.75\xb0)",
   "mirror (146.25\xb0)",
   "mirror (157.5\xb0)",
   "mirror (168.75\xb0)",
-  "fixed steel polarisator (0\xb0)",
-  "fixed steel polarisator (90\xb0)",
-  "fixed steel polarisator (45\xb0)",
-  "fixed steel polarisator (135\xb0)",         /* 20 */
+  "fixed steel polarizer (0\xb0)",
+  "fixed steel polarizer (90\xb0)",
+  "fixed steel polarizer (45\xb0)",
+  "fixed steel polarizer (135\xb0)",           /* 20 */
   "Gregor McDuffin (looking right)",
   "Gregor McDuffin (looking up)",
   "Gregor McDuffin (looking left)",
   "Gregor McDuffin (looking right)",
   "Gregor McDuffin (looking up)",
   "Gregor McDuffin (looking left)",
@@ -189,47 +198,47 @@ char *element_info_mm[] =
   "amoeba wall",
   "wooden block",
   "gray ball",
   "amoeba wall",
   "wooden block",
   "gray ball",
-  "beamer (0\xb0)",
-  "beamer (22.5\xb0)",
-  "beamer (45\xb0)",                           /* 100 */
-  "beamer (67.5\xb0)",
-  "beamer (90\xb0)",
-  "beamer (112.5\xb0)",
-  "beamer (135\xb0)",
-  "beamer (157.5\xb0)",
-  "beamer (180\xb0)",
-  "beamer (202.5\xb0)",
-  "beamer (225\xb0)",
-  "beamer (247.5\xb0)",
-  "beamer (270\xb0)",                          /* 110 */
-  "beamer (292.5\xb0)",
-  "beamer (315\xb0)",
-  "beamer (337.5\xb0)",
+  "teleporter (0\xb0)",
+  "teleporter (22.5\xb0)",
+  "teleporter (45\xb0)",                       /* 100 */
+  "teleporter (67.5\xb0)",
+  "teleporter (90\xb0)",
+  "teleporter (112.5\xb0)",
+  "teleporter (135\xb0)",
+  "teleporter (157.5\xb0)",
+  "teleporter (180\xb0)",
+  "teleporter (202.5\xb0)",
+  "teleporter (225\xb0)",
+  "teleporter (247.5\xb0)",
+  "teleporter (270\xb0)",                      /* 110 */
+  "teleporter (292.5\xb0)",
+  "teleporter (315\xb0)",
+  "teleporter (337.5\xb0)",
   "fuse",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
   "pac man (starts moving left)",
   "pac man (starts moving down)",
   "fuse",
   "pac man (starts moving right)",
   "pac man (starts moving up)",
   "pac man (starts moving left)",
   "pac man (starts moving down)",
-  "polarisator (0\xb0)",
-  "polarisator (11.25\xb0)",                   /* 120 */
-  "polarisator (22.5\xb0)",
-  "polarisator (33.75\xb0)",
-  "polarisator (45\xb0)",
-  "polarisator (56.25\xb0)",
-  "polarisator (67.5\xb0)",
-  "polarisator (78.75\xb0)",
-  "polarisator (90\xb0)",
-  "polarisator (101.25\xb0)",
-  "polarisator (112.5\xb0)",
-  "polarisator (123.75\xb0)",                  /* 130 */
-  "polarisator (135\xb0)",
-  "polarisator (146.25\xb0)",
-  "polarisator (157.5\xb0)",
-  "polarisator (168.75\xb0)",
-  "two-way polarisator (0\xb0)",
-  "two-way polarisator (22.5\xb0)",
-  "two-way polarisator (45\xb0)",
-  "two-way polarisator (67.5\xb0)",
+  "polarizer (0\xb0)",
+  "polarizer (11.25\xb0)",                     /* 120 */
+  "polarizer (22.5\xb0)",
+  "polarizer (33.75\xb0)",
+  "polarizer (45\xb0)",
+  "polarizer (56.25\xb0)",
+  "polarizer (67.5\xb0)",
+  "polarizer (78.75\xb0)",
+  "polarizer (90\xb0)",
+  "polarizer (101.25\xb0)",
+  "polarizer (112.5\xb0)",
+  "polarizer (123.75\xb0)",                    /* 130 */
+  "polarizer (135\xb0)",
+  "polarizer (146.25\xb0)",
+  "polarizer (157.5\xb0)",
+  "polarizer (168.75\xb0)",
+  "two-way polarizer (0\xb0)",
+  "two-way polarizer (22.5\xb0)",
+  "two-way polarizer (45\xb0)",
+  "two-way polarizer (67.5\xb0)",
   "fixed mirror (0\xb0)",
   "fixed mirror (45\xb0)",                     /* 140 */
   "fixed mirror (90\xb0)",
   "fixed mirror (0\xb0)",
   "fixed mirror (45\xb0)",                     /* 140 */
   "fixed mirror (90\xb0)",
@@ -237,15 +246,15 @@ char *element_info_mm[] =
   "reflecting stone lock",
   "key",
   "light bulb (dark)",
   "reflecting stone lock",
   "key",
   "light bulb (dark)",
-  "ligh bulb (glowing)",
+  "light bulb (glowing)",
   "bonus ball",
   "reflecting stone block",
   "wooden lock",
   "extra energy ball (full)",                  /* 150 */
   "bonus ball",
   "reflecting stone block",
   "wooden lock",
   "extra energy ball (full)",                  /* 150 */
-  "fixed wooden polarisator (0\xb0)",
-  "fixed wooden polarisator (90\xb0)",
-  "fixed wooden polarisator (45\xb0)",
-  "fixed wooden polarisator (135\xb0)",
+  "fixed wooden polarizer (0\xb0)",
+  "fixed wooden polarizer (90\xb0)",
+  "fixed wooden polarizer (45\xb0)",
+  "fixed wooden polarizer (135\xb0)",
   "extra energy ball (empty)",
   "unused",
   "unused",
   "extra energy ball (empty)",
   "unused",
   "unused",
@@ -347,22 +356,22 @@ char *element_info_mm[] =
   "mirror (146.25\xb0)",
   "mirror (157.5\xb0)",
   "mirror (168.75\xb0)",
   "mirror (146.25\xb0)",
   "mirror (157.5\xb0)",
   "mirror (168.75\xb0)",
-  "fixed wooden polarisator (0\xb0)",
-  "fixed wooden polarisator (22.5\xb0)",
-  "fixed wooden polarisator (45\xb0)",
-  "fixed wooden polarisator (67.5\xb0)",
-  "fixed wooden polarisator (90\xb0)",         /* 260 */
-  "fixed wooden polarisator (112.5\xb0)",
-  "fixed wooden polarisator (135\xb0)",
-  "fixed wooden polarisator (157.5\xb0)",
-  "fixed steel polarisator (0\xb0)",
-  "fixed steel polarisator (22.5\xb0)",
-  "fixed steel polarisator (45\xb0)",
-  "fixed steel polarisator (67.5\xb0)",
-  "fixed steel polarisator (90\xb0)",
-  "fixed steel polarisator (112.5\xb0)",
-  "fixed steel polarisator (135\xb0)",         /* 270 */
-  "fixed steel polarisator (157.5\xb0)",
+  "fixed wooden polarizer (0\xb0)",
+  "fixed wooden polarizer (22.5\xb0)",
+  "fixed wooden polarizer (45\xb0)",
+  "fixed wooden polarizer (67.5\xb0)",
+  "fixed wooden polarizer (90\xb0)",           /* 260 */
+  "fixed wooden polarizer (112.5\xb0)",
+  "fixed wooden polarizer (135\xb0)",
+  "fixed wooden polarizer (157.5\xb0)",
+  "fixed steel polarizer (0\xb0)",
+  "fixed steel polarizer (22.5\xb0)",
+  "fixed steel polarizer (45\xb0)",
+  "fixed steel polarizer (67.5\xb0)",
+  "fixed steel polarizer (90\xb0)",
+  "fixed steel polarizer (112.5\xb0)",
+  "fixed steel polarizer (135\xb0)",           /* 270 */
+  "fixed steel polarizer (157.5\xb0)",
   "deflektor style wooden wall",
   "deflektor style wooden wall",
   "deflektor style wooden wall",
   "deflektor style wooden wall",
   "deflektor style wooden wall",
   "deflektor style wooden wall",
@@ -431,90 +440,90 @@ char *element_info_mm[] =
   "rotating mirror (146.25\xb0)",
   "rotating mirror (157.5\xb0)",
   "rotating mirror (168.75\xb0)",
   "rotating mirror (146.25\xb0)",
   "rotating mirror (157.5\xb0)",
   "rotating mirror (168.75\xb0)",
-  "rotating wooden polarisator (0\xb0)",       /* 340 */
-  "rotating wooden polarisator (22.5\xb0)",
-  "rotating wooden polarisator (45\xb0)",
-  "rotating wooden polarisator (67.5\xb0)",
-  "rotating wooden polarisator (90\xb0)",
-  "rotating wooden polarisator (112.5\xb0)",
-  "rotating wooden polarisator (135\xb0)",
-  "rotating wooden polarisator (157.5\xb0)",
-  "rotating steel polarisator (0\xb0)",
-  "rotating steel polarisator (22.5\xb0)",
-  "rotating steel polarisator (45\xb0)",       /* 350 */
-  "rotating steel polarisator (67.5\xb0)",
-  "rotating steel polarisator (90\xb0)",
-  "rotating steel polarisator (112.5\xb0)",
-  "rotating steel polarisator (135\xb0)",
-  "rotating steel polarisator (157.5\xb0)",
-  "red beamer (0\xb0)",
-  "red beamer (22.5\xb0)",
-  "red beamer (45\xb0)",
-  "red beamer (67.5\xb0)",
-  "red beamer (90\xb0)",                       /* 360 */
-  "red beamer (112.5\xb0)",
-  "red beamer (135\xb0)",
-  "red beamer (157.5\xb0)",
-  "red beamer (180\xb0)",
-  "red beamer (202.5\xb0)",
-  "red beamer (225\xb0)",
-  "red beamer (247.5\xb0)",
-  "red beamer (270\xb0)",
-  "red beamer (292.5\xb0)",
-  "red beamer (315\xb0)",                      /* 370 */
-  "red beamer (337.5\xb0)",
-  "yellow beamer (0\xb0)",
-  "yellow beamer (22.5\xb0)",
-  "yellow beamer (45\xb0)",
-  "yellow beamer (67.5\xb0)",
-  "yellow beamer (90\xb0)",
-  "yellow beamer (112.5\xb0)",
-  "yellow beamer (135\xb0)",
-  "yellow beamer (157.5\xb0)",
-  "yellow beamer (180\xb0)",                   /* 380 */
-  "yellow beamer (202.5\xb0)",
-  "yellow beamer (225\xb0)",
-  "yellow beamer (247.5\xb0)",
-  "yellow beamer (270\xb0)",
-  "yellow beamer (292.5\xb0)",
-  "yellow beamer (315\xb0)",
-  "yellow beamer (337.5\xb0)",
-  "green beamer (0\xb0)",
-  "green beamer (22.5\xb0)",
-  "green beamer (45\xb0)",                     /* 390 */
-  "green beamer (67.5\xb0)",
-  "green beamer (90\xb0)",
-  "green beamer (112.5\xb0)",
-  "green beamer (135\xb0)",
-  "green beamer (157.5\xb0)",
-  "green beamer (180\xb0)",
-  "green beamer (202.5\xb0)",
-  "green beamer (225\xb0)",
-  "green beamer (247.5\xb0)",
-  "green beamer (270\xb0)",                    /* 400 */
-  "green beamer (292.5\xb0)",
-  "green beamer (315\xb0)",
-  "green beamer (337.5\xb0)",
-  "blue beamer (0\xb0)",
-  "blue beamer (22.5\xb0)",
-  "blue beamer (45\xb0)",
-  "blue beamer (67.5\xb0)",
-  "blue beamer (90\xb0)",
-  "blue beamer (112.5\xb0)",
-  "blue beamer (135\xb0)",                     /* 410 */
-  "blue beamer (157.5\xb0)",
-  "blue beamer (180\xb0)",
-  "blue beamer (202.5\xb0)",
-  "blue beamer (225\xb0)",
-  "blue beamer (247.5\xb0)",
-  "blue beamer (270\xb0)",
-  "blue beamer (292.5\xb0)",
-  "blue beamer (315\xb0)",
-  "blue beamer (337.5\xb0)",
+  "rotating wooden polarizer (0\xb0)",         /* 340 */
+  "rotating wooden polarizer (22.5\xb0)",
+  "rotating wooden polarizer (45\xb0)",
+  "rotating wooden polarizer (67.5\xb0)",
+  "rotating wooden polarizer (90\xb0)",
+  "rotating wooden polarizer (112.5\xb0)",
+  "rotating wooden polarizer (135\xb0)",
+  "rotating wooden polarizer (157.5\xb0)",
+  "rotating steel polarizer (0\xb0)",
+  "rotating steel polarizer (22.5\xb0)",
+  "rotating steel polarizer (45\xb0)",         /* 350 */
+  "rotating steel polarizer (67.5\xb0)",
+  "rotating steel polarizer (90\xb0)",
+  "rotating steel polarizer (112.5\xb0)",
+  "rotating steel polarizer (135\xb0)",
+  "rotating steel polarizer (157.5\xb0)",
+  "red teleporter (0\xb0)",
+  "red teleporter (22.5\xb0)",
+  "red teleporter (45\xb0)",
+  "red teleporter (67.5\xb0)",
+  "red teleporter (90\xb0)",                   /* 360 */
+  "red teleporter (112.5\xb0)",
+  "red teleporter (135\xb0)",
+  "red teleporter (157.5\xb0)",
+  "red teleporter (180\xb0)",
+  "red teleporter (202.5\xb0)",
+  "red teleporter (225\xb0)",
+  "red teleporter (247.5\xb0)",
+  "red teleporter (270\xb0)",
+  "red teleporter (292.5\xb0)",
+  "red teleporter (315\xb0)",                  /* 370 */
+  "red teleporter (337.5\xb0)",
+  "yellow teleporter (0\xb0)",
+  "yellow teleporter (22.5\xb0)",
+  "yellow teleporter (45\xb0)",
+  "yellow teleporter (67.5\xb0)",
+  "yellow teleporter (90\xb0)",
+  "yellow teleporter (112.5\xb0)",
+  "yellow teleporter (135\xb0)",
+  "yellow teleporter (157.5\xb0)",
+  "yellow teleporter (180\xb0)",               /* 380 */
+  "yellow teleporter (202.5\xb0)",
+  "yellow teleporter (225\xb0)",
+  "yellow teleporter (247.5\xb0)",
+  "yellow teleporter (270\xb0)",
+  "yellow teleporter (292.5\xb0)",
+  "yellow teleporter (315\xb0)",
+  "yellow teleporter (337.5\xb0)",
+  "green teleporter (0\xb0)",
+  "green teleporter (22.5\xb0)",
+  "green teleporter (45\xb0)",                 /* 390 */
+  "green teleporter (67.5\xb0)",
+  "green teleporter (90\xb0)",
+  "green teleporter (112.5\xb0)",
+  "green teleporter (135\xb0)",
+  "green teleporter (157.5\xb0)",
+  "green teleporter (180\xb0)",
+  "green teleporter (202.5\xb0)",
+  "green teleporter (225\xb0)",
+  "green teleporter (247.5\xb0)",
+  "green teleporter (270\xb0)",                        /* 400 */
+  "green teleporter (292.5\xb0)",
+  "green teleporter (315\xb0)",
+  "green teleporter (337.5\xb0)",
+  "blue teleporter (0\xb0)",
+  "blue teleporter (22.5\xb0)",
+  "blue teleporter (45\xb0)",
+  "blue teleporter (67.5\xb0)",
+  "blue teleporter (90\xb0)",
+  "blue teleporter (112.5\xb0)",
+  "blue teleporter (135\xb0)",                 /* 410 */
+  "blue teleporter (157.5\xb0)",
+  "blue teleporter (180\xb0)",
+  "blue teleporter (202.5\xb0)",
+  "blue teleporter (225\xb0)",
+  "blue teleporter (247.5\xb0)",
+  "blue teleporter (270\xb0)",
+  "blue teleporter (292.5\xb0)",
+  "blue teleporter (315\xb0)",
+  "blue teleporter (337.5\xb0)",
   "unknown",                                   /* 420 */
 
   /*
   "-------------------------------",
   */
 };
   "unknown",                                   /* 420 */
 
   /*
   "-------------------------------",
   */
 };
-int num_element_info_mm = sizeof(element_info_mm)/sizeof(char *);
+int num_element_info_mm = sizeof(element_info_mm) / sizeof(char *);