added optional button to restart game (door, panel and touch variants)
[rocksndiamonds.git] / src / main.h
index 643d62bb8673e8c88555712a5d05b043083ccd8a..6f5b29c7f1da626de92db63f26b39d1a00461e41 100644 (file)
 #define IS_INTERNAL_ELEMENT(e) ((e) >= EL_INTERNAL_START &&            \
                                 (e) <= EL_INTERNAL_END)
 
-#define IS_MM_ELEMENT(e)       ((e) >= EL_MM_START &&                  \
-                                (e) <= EL_MM_END)
-
-#define IS_DF_ELEMENT(e)       ((e) >= EL_DF_START &&                  \
-                                (e) <= EL_DF_END)
+#define IS_MM_ELEMENT_1(e)     ((e) >= EL_MM_START_1 &&                \
+                                (e) <= EL_MM_END_1)
+#define IS_MM_ELEMENT_2(e)     ((e) >= EL_MM_START_2 &&                \
+                                (e) <= EL_MM_END_2)
+#define IS_MM_ELEMENT_3(e)     ((e) >= EL_MM_START_3 &&                \
+                                (e) <= EL_MM_END_3)
+#define IS_MM_ELEMENT(e)       (IS_MM_ELEMENT_1(e) ||                  \
+                                IS_MM_ELEMENT_2(e) ||                  \
+                                IS_MM_ELEMENT_3(e))
+
+#define IS_DF_ELEMENT_1(e)     ((e) >= EL_DF_START_1 &&                \
+                                (e) <= EL_DF_END_1)
+#define IS_DF_ELEMENT_2(e)     ((e) >= EL_DF_START_2 &&                \
+                                (e) <= EL_DF_END_2)
+#define IS_DF_ELEMENT(e)       (IS_DF_ELEMENT_1(e) ||                  \
+                                IS_DF_ELEMENT_2(e))
 
 #define IS_MM_MCDUFFIN(e)      ((e) >= EL_MM_MCDUFFIN_START &&         \
                                 (e) <= EL_MM_MCDUFFIN_END)
 #define EL_MM_START_2                  (EL_MM_START + 160)
 
 #define EL_DF_START                    EL_MM_START_2
+#define EL_DF_START_1                  EL_MM_START_2
 #define EL_DF_START2                   (EL_DF_START - 240)
 
 #define EL_DF_MIRROR_START             EL_DF_START
 #define EL_DF_STEEL_GRID_ROTATING_8    (EL_DF_STEEL_GRID_ROTATING_START + 7)
 #define EL_DF_STEEL_GRID_ROTATING_END  EL_DF_STEEL_GRID_ROTATING_07
 
-#define EL_DF_END                      (EL_DF_START2 + 355)
+#define EL_DF_END_1                    (EL_DF_START2 + 355)
 
 #define EL_MM_TELEPORTER_RED_START     (EL_DF_START2 + 356)
 #define EL_MM_TELEPORTER_RED_1         (EL_MM_TELEPORTER_RED_START + 0)
 #define EL_DF_WOODEN_WALL              1214
 
 #define EL_MM_END_2                    (EL_DF_START2 + 430)
-#define EL_MM_END                      EL_MM_END_2
 
 #define EL_SPRING_LEFT                 1215
 #define EL_SPRING_RIGHT                        1216
 #define EL_EMPTY_SPACE_END             1232
 // ---------- end of empty space elements section -----------------------------
 
-#define NUM_FILE_ELEMENTS              1233
+#define EL_MM_START_3                  EL_DF_MIRROR_FIXED_START
+#define EL_DF_START_2                  EL_DF_MIRROR_FIXED_START
+
+#define EL_DF_MIRROR_FIXED_START       1233
+#define EL_DF_MIRROR_FIXED_1           (EL_DF_MIRROR_FIXED_START + 0)
+#define EL_DF_MIRROR_FIXED_2           (EL_DF_MIRROR_FIXED_START + 1)
+#define EL_DF_MIRROR_FIXED_3           (EL_DF_MIRROR_FIXED_START + 2)
+#define EL_DF_MIRROR_FIXED_4           (EL_DF_MIRROR_FIXED_START + 3)
+#define EL_DF_MIRROR_FIXED_5           (EL_DF_MIRROR_FIXED_START + 4)
+#define EL_DF_MIRROR_FIXED_6           (EL_DF_MIRROR_FIXED_START + 5)
+#define EL_DF_MIRROR_FIXED_7           (EL_DF_MIRROR_FIXED_START + 6)
+#define EL_DF_MIRROR_FIXED_8           (EL_DF_MIRROR_FIXED_START + 7)
+#define EL_DF_MIRROR_FIXED_9           (EL_DF_MIRROR_FIXED_START + 8)
+#define EL_DF_MIRROR_FIXED_10          (EL_DF_MIRROR_FIXED_START + 9)
+#define EL_DF_MIRROR_FIXED_11          (EL_DF_MIRROR_FIXED_START + 10)
+#define EL_DF_MIRROR_FIXED_12          (EL_DF_MIRROR_FIXED_START + 11)
+#define EL_DF_MIRROR_FIXED_13          (EL_DF_MIRROR_FIXED_START + 12)
+#define EL_DF_MIRROR_FIXED_14          (EL_DF_MIRROR_FIXED_START + 13)
+#define EL_DF_MIRROR_FIXED_15          (EL_DF_MIRROR_FIXED_START + 14)
+#define EL_DF_MIRROR_FIXED_16          (EL_DF_MIRROR_FIXED_START + 15)
+#define EL_DF_MIRROR_FIXED_END         EL_DF_MIRROR_FIXED_16
+
+#define EL_DF_SLOPE_START              1249
+#define EL_DF_SLOPE_1                  (EL_DF_SLOPE_START + 0)
+#define EL_DF_SLOPE_2                  (EL_DF_SLOPE_START + 1)
+#define EL_DF_SLOPE_3                  (EL_DF_SLOPE_START + 2)
+#define EL_DF_SLOPE_4                  (EL_DF_SLOPE_START + 3)
+#define EL_DF_SLOPE_END                        EL_DF_SLOPE_4
+
+#define EL_MM_END_3                    EL_DF_SLOPE_END
+#define EL_DF_END_2                    EL_DF_SLOPE_END
+
+#define NUM_FILE_ELEMENTS              1253
 
 
 // "real" (and therefore drawable) runtime elements
@@ -2454,6 +2497,7 @@ enum
   GFX_ARG_SORT_PRIORITY,
   GFX_ARG_CLASS,
   GFX_ARG_STYLE,
+  GFX_ARG_ALPHA,
   GFX_ARG_ACTIVE_XOFFSET,
   GFX_ARG_ACTIVE_YOFFSET,
   GFX_ARG_PRESSED_XOFFSET,
@@ -2509,6 +2553,7 @@ enum
   FONT_ENVELOPE_2,
   FONT_ENVELOPE_3,
   FONT_ENVELOPE_4,
+  FONT_REQUEST_NARROW,
   FONT_REQUEST,
   FONT_INPUT_1_ACTIVE,
   FONT_INPUT_2_ACTIVE,
@@ -2618,15 +2663,15 @@ enum
 // program information and versioning definitions
 #define PROGRAM_VERSION_SUPER          4
 #define PROGRAM_VERSION_MAJOR          3
-#define PROGRAM_VERSION_MINOR          5
-#define PROGRAM_VERSION_PATCH          5
+#define PROGRAM_VERSION_MINOR          8
+#define PROGRAM_VERSION_PATCH          2
 #define PROGRAM_VERSION_EXTRA          ""
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
 #define PROGRAM_EMAIL_STRING           "info@artsoft.org"
 #define PROGRAM_WEBSITE_STRING         "https://www.artsoft.org/"
-#define PROGRAM_COPYRIGHT_STRING       "1995-2023 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING       "1995-2024 by Holger Schemel"
 #define PROGRAM_COMPANY_STRING         "A Game by Artsoft Entertainment"
 
 #define PROGRAM_ICON_FILENAME          "icons/icon.png"
@@ -3434,6 +3479,8 @@ struct ElementChangeInfo
   void (*post_change_function)(int x, int y);
 
   short actual_trigger_element;        // element that actually triggered change
+  int actual_trigger_x;                // element x position that triggered change
+  int actual_trigger_y;                // element y position that triggered change
   int actual_trigger_side;     // element side that triggered the change
   int actual_trigger_player;   // player which actually triggered change
   int actual_trigger_player_bits; // player bits of triggering players
@@ -3548,6 +3595,8 @@ struct ElementInfo
 
   struct ElementGroupInfo *group;      // pointer to element group info
 
+  boolean has_anim_event;      // element can trigger global animation
+
   // ---------- internal values used at runtime when playing ----------
 
   boolean has_change_event[NUM_CHANGE_EVENTS];
@@ -3696,6 +3745,7 @@ struct GraphicInfo
 
   int class;
   int style;
+  int alpha;
 
   int active_xoffset;
   int active_yoffset;
@@ -3736,11 +3786,13 @@ struct MusicFileInfo
   char *artist_header;
   char *album_header;
   char *year_header;
+  char *played_header;
 
   char *title;
   char *artist;
   char *album;
   char *year;
+  char *played;
 
   int music;