moved (and renamed) global variables to game structure (ZX/ZY)
[rocksndiamonds.git] / src / game_mm / mm_main.h
index 98950edc21394fab6dd4c62d5d2122466cee92fa..946afd1aa0254dad4cb6d59d2937c5be9c0e4177 100644 (file)
 #define SCREENY(a)      (a)
 #define LEVELX(a)       (a)
 #define LEVELY(a)       (a)
-#define IN_VIS_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
-#define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
-#define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
-#define IN_PIX_FIELD(x,y) ((x)>=0 && (x)<SXSIZE && (y)>=0 && (y)<SYSIZE)
 
-/* values for 'Elementeigenschaften' */
+#define IN_FIELD(x, y, xsize, ysize)   ((x) >= 0 && (x) < (xsize) &&      \
+                                        (y) >= 0 && (y) < (ysize))
+#define IN_FIELD_MINMAX(x, y, xmin, ymin, xmax, ymax)                     \
+                                       ((x) >= (xmin) && (x) <= (xmax) && \
+                                        (y) >= (ymin) && (y) <= (ymax))
+
+#define IN_PIX_FIELD(x, y)     IN_FIELD(x, y, SXSIZE, SYSIZE)
+#define IN_VIS_FIELD(x, y)     IN_FIELD(x, y, SCR_FIELDX, SCR_FIELDY)
+#define IN_LEV_FIELD(x, y)     IN_FIELD(x, y, lev_fieldx, lev_fieldy)
+#define IN_SCR_FIELD(x, y)     IN_FIELD_MINMAX(x, y, BX1, BY1, BX2, BY2)
+
+// values for 'Elementeigenschaften'
 #define EP_BIT_GRID            (1 << 0)
 #define EP_BIT_MCDUFFIN                (1 << 1)
 #define EP_BIT_RECTANGLE       (1 << 2)
 #define WALL_BASE(e)           ((e) & 0xfff0)
 #define WALL_BITS(e)           ((e) & 0x000f)
 
-/* Bitmaps with graphic file */
+// Bitmaps with graphic file
 #define PIX_BACK               0
 #define PIX_DOOR               1
 #define PIX_TOONS              2
 #define        PIX_BIGFONT             4
 #define PIX_SMALLFONT          5
 #define PIX_MEDIUMFONT         6
-/* Bitmaps without graphic file */
+// Bitmaps without graphic file
 #define PIX_DB_DOOR            7
 
 #define NUM_PICTURES           7
 #define NUM_BITMAPS            8
 
-/* boundaries of arrays etc. */
+// boundaries of arrays etc.
 #define MAX_PLAYER_NAME_LEN    10
 #define MAX_LEVEL_NAME_LEN     32
 #define MAX_LEVEL_AUTHOR_LEN   32
 #define MAX_SCORE_ENTRIES      100
-#define MAX_ELEMENTS           700             /* 500 static + 200 runtime */
-
-#define LEVEL_SCORE_ELEMENTS   16      /* level elements with score */
-
-#define MICROLEVEL_SCROLL_DELAY        50      /* delay for scrolling micro level */
-#define MICROLEVEL_LABEL_DELAY 250     /* delay for micro level label */
-
-struct HiScore
+#define MAX_ELEMENTS           700             // 500 static + 200 runtime
+
+#define MICROLEVEL_SCROLL_DELAY        50      // delay for scrolling micro level
+#define MICROLEVEL_LABEL_DELAY 250     // delay for micro level label
+
+// score for elements
+#define SC_COLLECTIBLE         0
+#define SC_UNUSED_1            1
+#define SC_UNUSED_2            2
+#define SC_UNUSED_3            3
+#define SC_UNUSED_4            4
+#define SC_UNUSED_5            5
+#define SC_PACMAN              6
+#define SC_UNUSED_7            7
+#define SC_UNUSED_8            8
+#define SC_KEY                 9
+#define SC_TIME_BONUS          10
+#define SC_UNUSED_11           11
+#define SC_UNUSED_12           12
+#define SC_UNUSED_13           13
+#define SC_LIGHTBALL           14
+#define SC_UNUSED_15           15
+
+#define LEVEL_SCORE_ELEMENTS   16      // level elements with score
+
+
+struct HiScore_MM
 {
   char Name[MAX_PLAYER_NAME_LEN + 1];
   int Score;
 };
 
-struct EditorInfo
-{
-  boolean draw_walls_masked;
-};
-
 extern Bitmap         *pix[];
-extern DrawBuffer     *fieldbuffer;
-extern DrawBuffer     *drawto_field;
+extern DrawBuffer      *fieldbuffer;
+extern DrawBuffer      *drawto_field;
 
 extern int             joystick_device;
 extern char           *joystick_device_name[];
@@ -204,32 +225,34 @@ extern short              AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
 extern unsigned int    Elementeigenschaften[MAX_ELEMENTS];
 
 extern int             level_nr;
-extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
+extern int             lev_fieldx, lev_fieldy, scroll_x, scroll_y;
 
-extern int             FX,FY, ScrollStepSize;
+extern int             FX, FY, ScrollStepSize;
 extern int             ScreenMovDir, ScreenMovPos, ScreenGfxPos;
 extern int             GameFrameDelay;
 extern int             FfwdFrameDelay;
-extern int             BX1,BY1, BX2,BY2;
+extern int             BX1, BY1, BX2, BY2;
 extern int             SBX_Left, SBX_Right;
 extern int             SBY_Upper, SBY_Lower;
-extern int             ZX,ZY, ExitX,ExitY;
-extern int             AllPlayersGone;
 extern int             TimeFrames, TimePlayed, TimeLeft;
 extern boolean         SiebAktiv;
 extern int             SiebCount;
 
 extern struct LevelInfo_MM     native_mm_level;
-extern struct HiScore          highscore[];
+extern struct HiScore_MM       highscore[];
 extern struct TapeInfo         tape;
 extern struct SetupInfo                setup;
 extern struct GameInfo_MM      game_mm;
 extern struct LaserInfo                laser;
-extern struct EditorInfo       editor;
 extern struct GlobalInfo       global;
 
-extern short           LX,LY, XS,YS, ELX,ELY;
-extern short           CT,Ct;
+extern short           LX, LY, XS, YS, ELX, ELY;
+extern short           CT, Ct;
+
+extern int             dSX, dSY;
+extern int             cSX, cSY;
+extern int             cSX2, cSY2;
+extern int             cFX, cFY;
 
 extern Pixel           pen_fg, pen_bg, pen_ray, pen_magicolor[2];
 extern int             color_status;
@@ -237,23 +260,20 @@ extern int                color_status;
 extern struct XY       Step[];
 extern short           Sign[16];
 
-extern char            *sound_name[];
+extern char           *sound_name[];
 extern int             background_loop[];
 extern int             num_bg_loops;
-extern char            *element_info[];
+extern char           *element_info[];
 extern int             num_element_info;
 
-/* often used screen positions */
-#define SX                     8
-#define SY                     8
-#define REAL_SX                        (SX - 2)
-#define REAL_SY                        (SY - 2)
+// often used screen positions
 #define DX                     534
 #define DY                     60
 #define EX                     DX
 #define EY                     (DY + 178)
 #define TILEX                  TILESIZE
 #define TILEY                  TILESIZE
+#define MINI_TILESIZE          (TILESIZE / 2)
 #define MINI_TILEX             (TILEX / 2)
 #define MINI_TILEY             (TILEY / 2)
 #define MICRO_TILEX            (TILEX / 4)
@@ -301,7 +321,7 @@ extern int          num_element_info;
 #define MICRO_FONT_STARTY      (MICRO_DF_STARTY + 8 * MICRO_TILEY)
 #define MICRO_FONT_PER_LINE    8
 
-/* wall positions (that can be OR'ed together) */
+// wall positions (that can be OR'ed together)
 #define WALL_TOPLEFT           1
 #define WALL_TOPRIGHT          2
 #define WALL_BOTTOMLEFT                4
@@ -311,11 +331,14 @@ extern int                num_element_info;
 #define WALL_TOP               (WALL_TOPLEFT    | WALL_TOPRIGHT)
 #define WALL_BOTTOM            (WALL_BOTTOMLEFT | WALL_BOTTOMRIGHT)
 
-/* game elements:
-**       0 - 499: real elements, stored in level file
-**      500 - 699: flag elements, only used at runtime
-*/
-/* "real" level elements */
+// game elements:
+//       0 - 499: real elements, stored in level file
+//      500 - 699: flag elements, only used at runtime
+
+// "real" level elements
+#define EL_MM_START            0
+#define EL_MM_START_1          EL_MM_START
+
 #define EL_EMPTY               0
 #define EL_MIRROR_START                1
 #define EL_MIRROR_00           (EL_MIRROR_START + 0)
@@ -450,47 +473,51 @@ extern int                num_element_info;
 #define EL_GRID_WOOD_END       EL_GRID_WOOD_03
 #define EL_FUEL_EMPTY          155
 
+#define EL_MM_END_1            155
+
 #define EL_CHAR_START          160
-#define EL_CHAR_ASCII0         (EL_CHAR_START-32)
-#define EL_CHAR_AUSRUF         (EL_CHAR_ASCII0+33)
-#define EL_CHAR_ZOLL           (EL_CHAR_ASCII0+34)
-#define EL_CHAR_RAUTE          (EL_CHAR_ASCII0+35)
-#define EL_CHAR_DOLLAR         (EL_CHAR_ASCII0+36)
-#define EL_CHAR_PROZ           (EL_CHAR_ASCII0+37)
-#define EL_CHAR_AMPERSAND      (EL_CHAR_ASCII0+38)
-#define EL_CHAR_APOSTR         (EL_CHAR_ASCII0+39)
-#define EL_CHAR_KLAMM1         (EL_CHAR_ASCII0+40)
-#define EL_CHAR_KLAMM2         (EL_CHAR_ASCII0+41)
-#define EL_CHAR_MULT           (EL_CHAR_ASCII0+42)
-#define EL_CHAR_PLUS           (EL_CHAR_ASCII0+43)
-#define EL_CHAR_KOMMA          (EL_CHAR_ASCII0+44)
-#define EL_CHAR_MINUS          (EL_CHAR_ASCII0+45)
-#define EL_CHAR_PUNKT          (EL_CHAR_ASCII0+46)
-#define EL_CHAR_SLASH          (EL_CHAR_ASCII0+47)
-#define EL_CHAR_0              (EL_CHAR_ASCII0+48)
-#define EL_CHAR_9              (EL_CHAR_ASCII0+57)
-#define EL_CHAR_DOPPEL         (EL_CHAR_ASCII0+58)
-#define EL_CHAR_SEMIKL         (EL_CHAR_ASCII0+59)
-#define EL_CHAR_LT             (EL_CHAR_ASCII0+60)
-#define EL_CHAR_GLEICH         (EL_CHAR_ASCII0+61)
-#define EL_CHAR_GT             (EL_CHAR_ASCII0+62)
-#define EL_CHAR_FRAGE          (EL_CHAR_ASCII0+63)
-#define EL_CHAR_AT             (EL_CHAR_ASCII0+64)
-#define EL_CHAR_A              (EL_CHAR_ASCII0+65)
-#define EL_CHAR_Z              (EL_CHAR_ASCII0+90)
-#define EL_CHAR_AE             (EL_CHAR_ASCII0+91)
-#define EL_CHAR_OE             (EL_CHAR_ASCII0+92)
-#define EL_CHAR_UE             (EL_CHAR_ASCII0+93)
-#define EL_CHAR_COPY           (EL_CHAR_ASCII0+94)
-#define EL_CHAR_END            (EL_CHAR_START+79)
+#define EL_CHAR_ASCII0         (EL_CHAR_START - 32)
+#define EL_CHAR_AUSRUF         (EL_CHAR_ASCII0 + 33)
+#define EL_CHAR_ZOLL           (EL_CHAR_ASCII0 + 34)
+#define EL_CHAR_RAUTE          (EL_CHAR_ASCII0 + 35)
+#define EL_CHAR_DOLLAR         (EL_CHAR_ASCII0 + 36)
+#define EL_CHAR_PROZ           (EL_CHAR_ASCII0 + 37)
+#define EL_CHAR_AMPERSAND      (EL_CHAR_ASCII0 + 38)
+#define EL_CHAR_APOSTR         (EL_CHAR_ASCII0 + 39)
+#define EL_CHAR_KLAMM1         (EL_CHAR_ASCII0 + 40)
+#define EL_CHAR_KLAMM2         (EL_CHAR_ASCII0 + 41)
+#define EL_CHAR_MULT           (EL_CHAR_ASCII0 + 42)
+#define EL_CHAR_PLUS           (EL_CHAR_ASCII0 + 43)
+#define EL_CHAR_KOMMA          (EL_CHAR_ASCII0 + 44)
+#define EL_CHAR_MINUS          (EL_CHAR_ASCII0 + 45)
+#define EL_CHAR_PUNKT          (EL_CHAR_ASCII0 + 46)
+#define EL_CHAR_SLASH          (EL_CHAR_ASCII0 + 47)
+#define EL_CHAR_0              (EL_CHAR_ASCII0 + 48)
+#define EL_CHAR_9              (EL_CHAR_ASCII0 + 57)
+#define EL_CHAR_DOPPEL         (EL_CHAR_ASCII0 + 58)
+#define EL_CHAR_SEMIKL         (EL_CHAR_ASCII0 + 59)
+#define EL_CHAR_LT             (EL_CHAR_ASCII0 + 60)
+#define EL_CHAR_GLEICH         (EL_CHAR_ASCII0 + 61)
+#define EL_CHAR_GT             (EL_CHAR_ASCII0 + 62)
+#define EL_CHAR_FRAGE          (EL_CHAR_ASCII0 + 63)
+#define EL_CHAR_AT             (EL_CHAR_ASCII0 + 64)
+#define EL_CHAR_A              (EL_CHAR_ASCII0 + 65)
+#define EL_CHAR_Z              (EL_CHAR_ASCII0 + 90)
+#define EL_CHAR_AE             (EL_CHAR_ASCII0 + 91)
+#define EL_CHAR_OE             (EL_CHAR_ASCII0 + 92)
+#define EL_CHAR_UE             (EL_CHAR_ASCII0 + 93)
+#define EL_CHAR_COPY           (EL_CHAR_ASCII0 + 94)
+#define EL_CHAR_END            (EL_CHAR_START + 79)
 
 #define EL_CHAR(x)             ((x) == CHAR_BYTE_UMLAUT_A ? EL_CHAR_AE : \
                                 (x) == CHAR_BYTE_UMLAUT_O ? EL_CHAR_OE : \
                                 (x) == CHAR_BYTE_UMLAUT_U ? EL_CHAR_UE : \
                                 EL_CHAR_A + (x) - 'A')
 
-/* elements for "Deflektor" style levels */
-#define EL_DF_START            240
+#define EL_MM_START_2          240
+
+// elements for "Deflektor" style levels
+#define EL_DF_START            EL_MM_START_2
 
 #define EL_DF_MIRROR_START     EL_DF_START
 #define EL_DF_MIRROR_00                (EL_DF_MIRROR_START + 0)
@@ -512,25 +539,25 @@ extern int                num_element_info;
 #define EL_DF_MIRROR_END       EL_DF_MIRROR_15
 
 #define EL_GRID_WOOD_FIXED_START 256
-#define EL_GRID_WOOD_FIXED_00  (EL_GRID_WOOD_FIXED_START + 0)  /*   0.0° */
-#define EL_GRID_WOOD_FIXED_01  (EL_GRID_WOOD_FIXED_START + 1)  /*  22.5° */
-#define EL_GRID_WOOD_FIXED_02  (EL_GRID_WOOD_FIXED_START + 2)  /*  45.0° */
-#define EL_GRID_WOOD_FIXED_03  (EL_GRID_WOOD_FIXED_START + 3)  /*  67.5° */
-#define EL_GRID_WOOD_FIXED_04  (EL_GRID_WOOD_FIXED_START + 4)  /*  90.0° */
-#define EL_GRID_WOOD_FIXED_05  (EL_GRID_WOOD_FIXED_START + 5)  /* 112.5° */
-#define EL_GRID_WOOD_FIXED_06  (EL_GRID_WOOD_FIXED_START + 6)  /* 135.0° */
-#define EL_GRID_WOOD_FIXED_07  (EL_GRID_WOOD_FIXED_START + 7)  /* 157.5° */
+#define EL_GRID_WOOD_FIXED_00  (EL_GRID_WOOD_FIXED_START + 0)  //   0.0°
+#define EL_GRID_WOOD_FIXED_01  (EL_GRID_WOOD_FIXED_START + 1)  //  22.5°
+#define EL_GRID_WOOD_FIXED_02  (EL_GRID_WOOD_FIXED_START + 2)  //  45.0°
+#define EL_GRID_WOOD_FIXED_03  (EL_GRID_WOOD_FIXED_START + 3)  //  67.5°
+#define EL_GRID_WOOD_FIXED_04  (EL_GRID_WOOD_FIXED_START + 4)  //  90.0°
+#define EL_GRID_WOOD_FIXED_05  (EL_GRID_WOOD_FIXED_START + 5)  // 112.5°
+#define EL_GRID_WOOD_FIXED_06  (EL_GRID_WOOD_FIXED_START + 6)  // 135.0°
+#define EL_GRID_WOOD_FIXED_07  (EL_GRID_WOOD_FIXED_START + 7)  // 157.5°
 #define EL_GRID_WOOD_FIXED_END EL_GRID_WOOD_FIXED_07
 
 #define EL_GRID_STEEL_FIXED_START 264
-#define EL_GRID_STEEL_FIXED_00 (EL_GRID_STEEL_FIXED_START + 0) /*   0.0° */
-#define EL_GRID_STEEL_FIXED_01 (EL_GRID_STEEL_FIXED_START + 1) /*  22.5° */
-#define EL_GRID_STEEL_FIXED_02 (EL_GRID_STEEL_FIXED_START + 2) /*  45.0° */
-#define EL_GRID_STEEL_FIXED_03 (EL_GRID_STEEL_FIXED_START + 3) /*  67.5° */
-#define EL_GRID_STEEL_FIXED_04 (EL_GRID_STEEL_FIXED_START + 4) /*  90.0° */
-#define EL_GRID_STEEL_FIXED_05 (EL_GRID_STEEL_FIXED_START + 5) /* 112.5° */
-#define EL_GRID_STEEL_FIXED_06 (EL_GRID_STEEL_FIXED_START + 6) /* 135.0° */
-#define EL_GRID_STEEL_FIXED_07 (EL_GRID_STEEL_FIXED_START + 7) /* 157.5° */
+#define EL_GRID_STEEL_FIXED_00 (EL_GRID_STEEL_FIXED_START + 0) //   0.0°
+#define EL_GRID_STEEL_FIXED_01 (EL_GRID_STEEL_FIXED_START + 1) //  22.5°
+#define EL_GRID_STEEL_FIXED_02 (EL_GRID_STEEL_FIXED_START + 2) //  45.0°
+#define EL_GRID_STEEL_FIXED_03 (EL_GRID_STEEL_FIXED_START + 3) //  67.5°
+#define EL_GRID_STEEL_FIXED_04 (EL_GRID_STEEL_FIXED_START + 4) //  90.0°
+#define EL_GRID_STEEL_FIXED_05 (EL_GRID_STEEL_FIXED_START + 5) // 112.5°
+#define EL_GRID_STEEL_FIXED_06 (EL_GRID_STEEL_FIXED_START + 6) // 135.0°
+#define EL_GRID_STEEL_FIXED_07 (EL_GRID_STEEL_FIXED_START + 7) // 157.5°
 #define EL_GRID_STEEL_FIXED_END        EL_GRID_STEEL_FIXED_07
 
 #define EL_DF_WALL_WOOD                272
@@ -625,49 +652,60 @@ extern int                num_element_info;
 #define EL_BEAMER_BLUE_START   404
 #define EL_BEAMER_BLUE_END     (EL_BEAMER_BLUE_START + 15)
 
-/* "real" (and therefore drawable) runtime elements */
-#define EL_FIRST_RUNTIME_EL    500
-#define EL_FUSE_OFF            501
-#define EL_PACMAN              502
-#define EL_EXIT_OPENING                503
-#define EL_GRAY_BALL_OPENING   504
+// element definitions partially used for drawing graphics
+#define EL_MCDUFFIN            420
+#define EL_PACMAN              421
+#define EL_FUSE_OFF            422
+#define EL_STEEL_WALL          423
+#define EL_WOODEN_WALL         424
+#define EL_ICE_WALL            425
+#define EL_AMOEBA_WALL         426
+#define EL_LASER               427
+#define EL_RECEIVER            428
+#define EL_DF_STEEL_WALL       429
+#define EL_DF_WOODEN_WALL      430
+
+#define EL_MM_END_2            430
+#define EL_MM_END              EL_MM_END_2
+
+// "real" (and therefore drawable) runtime elements
+#define EL_EXIT_OPENING                500
+#define EL_EXIT_CLOSING                501
+#define EL_GRAY_BALL_OPENING   502
+#define EL_ICE_WALL_SHRINKING  503
+#define EL_AMOEBA_WALL_GROWING 504
 
 #define EL_WALL_CHANGING       512
 #define EL_WALL_CHANGING_START (EL_WALL_CHANGING + 0)
 #define EL_WALL_CHANGING_END   (EL_WALL_CHANGING + 15)
 
-#if 0
-#define EL_MIRROR              5
-#define EL_GRID_STEEL          5
-#define EL_MCDUFFIN            5
-#define EL_BEAMER              5
-#define EL_POLAR               5
-#define EL_POLAR_CROSS         5
-#define EL_MIRROR_FIXED                5
-#define EL_GRID_WOOD           5
-#define EL_DF_MIRROR           5
-#define EL_GRID_WOOD_FIXED     5
-#define EL_GRID_STEEL_FIXED    5
-#define EL_LASER               5
-#define EL_RECEIVER            5
-#define EL_FIBRE_OPTIC         5
-#define EL_DF_MIRROR_AUTO      5
-#define EL_GRID_WOOD_AUTO      5
-#define EL_GRID_STEEL_AUTO     5
-#endif
-
-/* "unreal" (and therefore not drawable) runtime elements */
+#define EL_FIRST_RUNTIME_EL    EL_EXIT_OPENING
+
+// "unreal" (and therefore not drawable) runtime elements
 #define EL_BLOCKED             600
 #define EL_EXPLODING_OPAQUE    601
 #define EL_EXPLODING_TRANSP    602
 
+// dummy elements (never used as game elements, only used as graphics)
+#define EL_MM_MASK_MCDUFFIN_RIGHT      700
+#define EL_MM_MASK_MCDUFFIN_UP         701
+#define EL_MM_MASK_MCDUFFIN_LEFT       702
+#define EL_MM_MASK_MCDUFFIN_DOWN       703
+#define EL_MM_MASK_GRID_1              704
+#define EL_MM_MASK_GRID_2              705
+#define EL_MM_MASK_GRID_3              706
+#define EL_MM_MASK_GRID_4              707
+#define EL_MM_MASK_RECTANGE            708
+#define EL_MM_MASK_CIRCLE              709
 
-/* game graphics:
-**       0 -  191: graphics from "MirrorScreen"
-**     192 -  255: pseudo graphics mapped to "MirrorScreen"
-**     256 -  511: graphics from "MirrorFont"
-**     512 -  767: graphics from "MirrorDF"
-*/
+
+// game graphics:
+//       0 -  191: graphics from "MirrorScreen"
+//     192 -  255: pseudo graphics mapped to "MirrorScreen"
+//     256 -  511: graphics from "MirrorFont"
+//     512 -  767: graphics from "MirrorDF"
+
+#define IMG_EMPTY              IMG_EMPTY_SPACE
 
 #define GFX_START_MIRRORSCREEN 0
 #define GFX_END_MIRRORSCREEN   191
@@ -680,9 +718,9 @@ extern int          num_element_info;
 
 #define NUM_TILES              512
 
-/* graphics from "MirrorScreen" */
+// graphics from "MirrorScreen"
 #define GFX_EMPTY              (-1)
-/* row 0 (0) */
+// row 0 (0)
 #define GFX_MIRROR_START       0
 #define GFX_MIRROR             GFX_MIRROR_START
 #define GFX_MIRROR_00          (GFX_MIRROR_START + 0)
@@ -702,7 +740,7 @@ extern int          num_element_info;
 #define GFX_MIRROR_14          (GFX_MIRROR_START + 14)
 #define GFX_MIRROR_15          (GFX_MIRROR_START + 15)
 #define GFX_MIRROR_END         GFX_MIRROR_15
-/* row 1 (16) */
+// row 1 (16)
 #define GFX_GRID_STEEL_START   16
 #define GFX_GRID_STEEL         GFX_GRID_STEEL_START
 #define GFX_GRID_STEEL_00      (GFX_GRID_STEEL_START + 0)
@@ -721,7 +759,7 @@ extern int          num_element_info;
 #define GFX_EXIT_OPEN          27
 #define GFX_KETTLE             28
 #define GFX_EXPLOSION_KETTLE   29
-/* row 2 (32) */
+// row 2 (32)
 #define GFX_PRISM              32
 #define GFX_WALL_SEVERAL       33
 #define GFX_WALL_ANIMATION     34
@@ -737,10 +775,10 @@ extern int                num_element_info;
 #define GFX_BALL_BLUE          45
 #define GFX_BALL_YELLOW                46
 #define GFX_BALL_GRAY          47
-/* row 3 (48) */
+// row 3 (48)
 #define GFX_BEAMER_START       48
 #define GFX_BEAMER_END         63
-/* row 4 (64) */
+// row 4 (64)
 #define GFX_PACMAN_START       64
 #define GFX_PACMAN             GFX_PACMAN_START
 #define GFX_PACMAN_RIGHT       (GFX_PACMAN_START + 0)
@@ -750,10 +788,10 @@ extern int                num_element_info;
 #define GFX_EXPLOSION_START    72
 #define GFX_EXPLOSION_SHORT    76
 #define GFX_EXPLOSION_LAST     78
-/* row 5 (80) */
+// row 5 (80)
 #define GFX_POLAR_START                80
 #define GFX_POLAR_END          95
-/* row 6 (96) */
+// row 6 (96)
 #define GFX_POLAR_CROSS_START  96
 #define GFX_POLAR_CROSS                GFX_POLAR_CROSS_START
 #define GFX_POLAR_CROSS_00     (GFX_POLAR_CROSS_START + 0)
@@ -766,7 +804,7 @@ extern int          num_element_info;
 #define GFX_MIRROR_FIXED_01    (GFX_MIRROR_FIXED_START + 1)
 #define GFX_MIRROR_FIXED_02    (GFX_MIRROR_FIXED_START + 2)
 #define GFX_MIRROR_FIXED_03    (GFX_MIRROR_FIXED_START + 3)
-/* row 7 (112) */
+// row 7 (112)
 #define GFX_BLOCK_STONE                112
 #define GFX_GATE_WOOD          113
 #define GFX_FUEL_FULL          114
@@ -775,7 +813,7 @@ extern int          num_element_info;
 #define GFX_GRID_WOOD_01       117
 #define GFX_GRID_WOOD_02       118
 #define GFX_GRID_WOOD_03       119
-/* row 8 (128) */
+// row 8 (128)
 #define GFX_ARROW_BLUE_LEFT    128
 #define GFX_ARROW_BLUE_RIGHT   129
 #define GFX_ARROW_BLUE_UP      130
@@ -784,10 +822,10 @@ extern int                num_element_info;
 #define GFX_ARROW_RED_RIGHT    133
 #define GFX_ARROW_RED_UP       134
 #define GFX_ARROW_RED_DOWN     135
-/* row 9 (144) */
+// row 9 (144)
 #define GFX_SCROLLBAR_BLUE     144
 #define GFX_SCROLLBAR_RED      145
-/* row 10 (160) */
+// row 10 (160)
 #define GFX_MASK_CIRCLE                160
 #define GFX_MASK_RECTANGLE     161
 #define GFX_MASK_RECTANGLE2    162
@@ -796,13 +834,13 @@ extern int                num_element_info;
 #define GFX_MASK_GRID_01       165
 #define GFX_MASK_GRID_02       166
 #define GFX_MASK_GRID_03       167
-/* row 11 (176) */
+// row 11 (176)
 #define GFX_MASK_MCDUFFIN_00   176
 #define GFX_MASK_MCDUFFIN_01   177
 #define GFX_MASK_MCDUFFIN_02   178
 #define GFX_MASK_MCDUFFIN_03   179
 
-/* pseudo-graphics; will be mapped to other graphics */
+// pseudo-graphics; will be mapped to other graphics
 #define GFX_WALL_STEEL         192
 #define GFX_WALL_WOOD          193
 #define GFX_WALL_ICE           194
@@ -815,7 +853,7 @@ extern int          num_element_info;
 #define GFX_KUGEL_GELB         GFX_BALL_YELLOW
 #define GFX_KUGEL_GRAU         GFX_BALL_GRAY
 
-/* graphics from "MirrorFont" */
+// graphics from "MirrorFont"
 #define GFX_CHAR_START         (GFX_START_MIRRORFONT)
 #define GFX_CHAR_ASCII0                (GFX_CHAR_START - 32)
 #define GFX_CHAR_AUSRUF                (GFX_CHAR_ASCII0 + 33)
@@ -847,7 +885,7 @@ extern int          num_element_info;
 #define GFX_CHAR_COPY          (GFX_CHAR_ASCII0 + 94)
 #define GFX_CHAR_END           (GFX_CHAR_START + 79)
 
-/* graphics from "MirrorDF" */
+// graphics from "MirrorDF"
 #define GFX_DF_MIRROR_00       (GFX_START_MIRRORDF +  0 * DF_PER_LINE +  0)
 #define GFX_DF_MIRROR_01       (GFX_START_MIRRORDF +  0 * DF_PER_LINE +  1)
 #define GFX_DF_MIRROR_02       (GFX_START_MIRRORDF +  0 * DF_PER_LINE +  2)
@@ -963,7 +1001,7 @@ extern int         num_element_info;
 #define GFX_FIBRE_OPTIC_ED_06  (GFX_START_MIRRORDF + 11 * DF_PER_LINE +  6)
 #define GFX_FIBRE_OPTIC_ED_07  (GFX_START_MIRRORDF + 11 * DF_PER_LINE +  7)
 
-/* the names of the sounds */
+// the names of the sounds
 #define SND_AMOEBE             0
 #define SND_ANTIGRAV           1
 #define SND_AUTSCH             2
@@ -987,13 +1025,68 @@ extern int               num_element_info;
 
 #define NUM_SOUNDS             20
 
-/* laser angles (directions) */
+// values for graphics/sounds action types
+#define MM_ACTION_DEFAULT      0
+#define MM_ACTION_WAITING      1
+#define MM_ACTION_FALLING      2
+#define MM_ACTION_MOVING       3
+#define MM_ACTION_DIGGING      4
+#define MM_ACTION_SNAPPING     5
+#define MM_ACTION_COLLECTING   6
+#define MM_ACTION_DROPPING     7
+#define MM_ACTION_PUSHING      8
+#define MM_ACTION_WALKING      9
+#define MM_ACTION_PASSING      10
+#define MM_ACTION_IMPACT       11
+#define MM_ACTION_BREAKING     12
+#define MM_ACTION_ACTIVATING   13
+#define MM_ACTION_DEACTIVATING 14
+#define MM_ACTION_OPENING      15
+#define MM_ACTION_CLOSING      16
+#define MM_ACTION_ATTACKING    17
+#define MM_ACTION_GROWING      18
+#define MM_ACTION_SHRINKING    19
+#define MM_ACTION_ACTIVE       20
+#define MM_ACTION_FILLING      21
+#define MM_ACTION_EMPTYING     22
+#define MM_ACTION_CHANGING     23
+#define MM_ACTION_EXPLODING    24
+#define MM_ACTION_BORING       25
+#define MM_ACTION_BORING_1     26
+#define MM_ACTION_BORING_2     27
+#define MM_ACTION_BORING_3     28
+#define MM_ACTION_BORING_4     29
+#define MM_ACTION_BORING_5     30
+#define MM_ACTION_BORING_6     31
+#define MM_ACTION_BORING_7     32
+#define MM_ACTION_BORING_8     33
+#define MM_ACTION_BORING_9     34
+#define MM_ACTION_BORING_10    35
+#define MM_ACTION_SLEEPING     36
+#define MM_ACTION_SLEEPING_1   37
+#define MM_ACTION_SLEEPING_2   38
+#define MM_ACTION_SLEEPING_3   39
+#define MM_ACTION_AWAKENING    40
+#define MM_ACTION_DYING                41
+#define MM_ACTION_TURNING              42
+#define MM_ACTION_TURNING_FROM_LEFT    43
+#define MM_ACTION_TURNING_FROM_RIGHT   44
+#define MM_ACTION_TURNING_FROM_UP      45
+#define MM_ACTION_TURNING_FROM_DOWN    46
+#define MM_ACTION_SMASHED_BY_ROCK      47
+#define MM_ACTION_SMASHED_BY_SPRING    48
+#define MM_ACTION_EATING               49
+#define MM_ACTION_TWINKLING            50
+#define MM_ACTION_SPLASHING            51
+#define MM_ACTION_HITTING              52
+
+// laser angles (directions)
 #define ANG_RAY_RIGHT          0
 #define ANG_RAY_UP             4
 #define ANG_RAY_LEFT           8
 #define ANG_RAY_DOWN           12
 
-/* laser angles (degree) */
+// laser angles (degree)
 #define ANG_RAY_0              0
 #define ANG_RAY_90             4
 #define ANG_RAY_180            8
@@ -1003,18 +1096,18 @@ extern int              num_element_info;
 #define IS_HORIZ_ANGLE(angle)  (!((angle) % 8))
 #define IS_VERT_ANGLE(angle)   ((angle) % 8)
 
-/* mirror angles */
+// mirror angles
 #define ANG_MIRROR_0           0
 #define ANG_MIRROR_45          4
 #define ANG_MIRROR_90          8
 #define ANG_MIRROR_135         12
 
-/* positions for checking where laser already hits element */
+// positions for checking where laser already hits element
 #define HIT_POS_CENTER         1
 #define HIT_POS_EDGE           2
 #define HIT_POS_BETWEEN                4
 
-/* masks for scanning elements */
+// masks for scanning elements
 #define HIT_MASK_NO_HIT                0
 #define HIT_MASK_TOPLEFT       1
 #define HIT_MASK_TOPRIGHT      2
@@ -1026,7 +1119,7 @@ extern int                num_element_info;
 #define HIT_MASK_BOTTOM                (HIT_MASK_BOTTOMLEFT | HIT_MASK_BOTTOMRIGHT)
 #define HIT_MASK_ALL           (HIT_MASK_LEFT | HIT_MASK_RIGHT)
 
-/* step values for rotating elements */
+// step values for rotating elements
 #define ROTATE_NO_ROTATING     0
 #define ROTATE_LEFT            (+1)
 #define ROTATE_RIGHT           (-1)
@@ -1034,12 +1127,12 @@ extern int              num_element_info;
                                 (button) == MB_RIGHTBUTTON ? ROTATE_RIGHT : \
                                 ROTATE_NO_ROTATING)
 
-/* game over values */
+// game over values
 #define GAME_OVER_NO_ENERGY    1
 #define GAME_OVER_OVERLOADED   2
 #define GAME_OVER_BOMB         3
 
-/* values for game_status */
+// values for game_status
 #define EXITGAME               0
 #define MAINMENU               1
 #define PLAYING                        2
@@ -1050,14 +1143,14 @@ extern int              num_element_info;
 #define HALLOFFAME             7
 #define SETUP                  8
 
-/* return values for GameActions */
-#define ACT_GO_ON      0
-#define ACT_GAME_OVER  1
-#define ACT_NEW_GAME   2
+// return values for GameActions
+#define ACT_GO_ON              0
+#define ACT_GAME_OVER          1
+#define ACT_NEW_GAME           2
 
-/* values for color_status */
-#define STATIC_COLORS   0
-#define DYNAMIC_COLORS  1
+// values for color_status
+#define STATIC_COLORS          0
+#define DYNAMIC_COLORS         1
 
 #define PROGRAM_VERSION_MAJOR  2
 #define PROGRAM_VERSION_MINOR  0
@@ -1078,31 +1171,31 @@ extern int              num_element_info;
 #define X11_ICONMASK_FILENAME  "mirrormagic_iconmask.xbm"
 #define MSDOS_POINTER_FILENAME "mouse.pcx"
 
-/* functions for version handling */
-#define MM_VERSION_IDENT(x,y,z)        ((x) * 10000 + (y) * 100 + (z))
-#define MM_VERSION_MAJOR(x)    ((x) / 10000)
-#define MM_VERSION_MINOR(x)    (((x) % 10000) / 100)
-#define MM_VERSION_PATCH(x)    ((x) % 100)
-
-/* file version numbers for resource files (levels, score, setup, etc.)
-** currently supported/known file version numbers:
-**     1.4 (still in use)
-**     2.0 (actual)
-*/
+// functions for version handling
+#define MM_VERSION_IDENT(x,y,z)        VERSION_IDENT(x,y,z,0)
+#define MM_VERSION_MAJOR(x)    VERSION_PART_1(x)
+#define MM_VERSION_MINOR(x)    VERSION_PART_2(x)
+#define MM_VERSION_PATCH(x)    VERSION_PART_3(x)
+
+// file version numbers for resource files (levels, score, setup, etc.)
+// currently supported/known file version numbers:
+//     1.4 (still in use)
+//     2.0 (actual)
+
 #define MM_FILE_VERSION_1_4    MM_VERSION_IDENT(1,4,0)
 #define MM_FILE_VERSION_2_0    MM_VERSION_IDENT(2,0,0)
 
-/* file version does not change for every program version, but is changed
-   when new features are introduced that are incompatible with older file
-   versions, so that they can be treated accordingly */
+// file version does not change for every program version, but is changed
+// when new features are introduced that are incompatible with older file
+// versions, so that they can be treated accordingly
 #define MM_FILE_VERSION_ACTUAL MM_FILE_VERSION_2_0
 
 #define MM_GAME_VERSION_ACTUAL MM_VERSION_IDENT(PROGRAM_VERSION_MAJOR, \
                                                 PROGRAM_VERSION_MINOR, \
                                                 PROGRAM_VERSION_PATCH)
 
-/* sound control */
+// sound control
 
-#define ST(x)           (((x)-8)*16)
+#define ST(x)           (((x) - 8) * 16)
 
-#endif /* MM_MAIN_H */
+#endif // MM_MAIN_H