rnd-20050525-1-src
[rocksndiamonds.git] / src / main.h
index d3c293354acd80b0cb1385d72345936adf0ed732..c8c83033f75c4cb23418dd10f91b3112e045fa9a 100644 (file)
 #define IS_ENVELOPE(e)         ((e) >= EL_ENVELOPE_1 &&                \
                                 (e) <= EL_ENVELOPE_4)
 
-#define IS_GATE(e)             ((e) >= EL_GATE_1 &&                    \
+#define IS_RND_KEY(e)          ((e) >= EL_KEY_1 &&                     \
+                                (e) <= EL_KEY_4)
+#define IS_EM_KEY(e)           ((e) >= EL_EM_KEY_1 &&                  \
+                                (e) <= EL_EM_KEY_4)
+#define IS_EMC_KEY(e)          ((e) >= EL_EMC_KEY_5 &&                 \
+                                (e) <= EL_EMC_KEY_8)
+#define IS_KEY(e)              (IS_RND_KEY(e) ||                       \
+                                IS_EM_KEY(e) ||                        \
+                                IS_EMC_KEY(e))
+#define RND_KEY_NR(e)          ((e) - EL_KEY_1)
+#define EM_KEY_NR(e)           ((e) - EL_EM_KEY_1)
+#define EMC_KEY_NR(e)          ((e) - EL_EMC_KEY_5 + 4)
+#define KEY_NR(e)              (IS_RND_KEY(e) ? RND_KEY_NR(e) :        \
+                                IS_EM_KEY(e) ?  EM_KEY_NR(e) :         \
+                                IS_EMC_KEY(e) ? EMC_KEY_NR(e) : 0)
+
+#define IS_RND_GATE(e)         ((e) >= EL_GATE_1 &&                    \
                                 (e) <= EL_GATE_4)
-
-#define IS_GATE_GRAY(e)                ((e) >= EL_GATE_1_GRAY &&               \
-                                (e) <= EL_GATE_4_GRAY)
-
 #define IS_EM_GATE(e)          ((e) >= EL_EM_GATE_1 &&                 \
                                 (e) <= EL_EM_GATE_4)
-
+#define IS_EMC_GATE(e)         ((e) >= EL_EMC_GATE_5 &&                \
+                                (e) <= EL_EMC_GATE_8)
+#define IS_GATE(e)             (IS_RND_GATE(e) ||                      \
+                                IS_EM_GATE(e) ||                       \
+                                IS_EMC_GATE(e))
+#define RND_GATE_NR(e)         ((e) - EL_GATE_1)
+#define EM_GATE_NR(e)          ((e) - EL_EM_GATE_1)
+#define EMC_GATE_NR(e)         ((e) - EL_EMC_GATE_5 + 4)
+#define GATE_NR(e)             (IS_RND_GATE(e) ? RND_GATE_NR(e) :      \
+                                IS_EM_GATE(e) ?  EM_GATE_NR(e) :       \
+                                IS_EMC_GATE(e) ? EMC_GATE_NR(e) : 0)
+
+#define IS_RND_GATE_GRAY(e)    ((e) >= EL_GATE_1_GRAY &&               \
+                                (e) <= EL_GATE_4_GRAY)
 #define IS_EM_GATE_GRAY(e)     ((e) >= EL_EM_GATE_1_GRAY &&            \
                                 (e) <= EL_EM_GATE_4_GRAY)
+#define IS_EMC_GATE_GRAY(e)    ((e) >= EL_EMC_GATE_5_GRAY &&           \
+                                (e) <= EL_EMC_GATE_8_GRAY)
+#define IS_GATE_GRAY(e)                (IS_RND_GATE_GRAY(e) ||                 \
+                                IS_EM_GATE_GRAY(e) ||                  \
+                                IS_EMC_GATE_GRAY(e))
+#define RND_GATE_GRAY_NR(e)    ((e) - EL_GATE_1_GRAY)
+#define EM_GATE_GRAY_NR(e)     ((e) - EL_EM_GATE_1_GRAY)
+#define EMC_GATE_GRAY_NR(e)    ((e) - EL_EMC_GATE_5_GRAY + 4)
+#define GATE_GRAY_NR(e)                (IS_RND_GATE_GRAY(e) ? RND_GATE_GRAY_NR(e) :  \
+                                IS_EM_GATE_GRAY(e) ?  EM_GATE_GRAY_NR(e) :   \
+                                IS_EMC_GATE_GRAY(e) ? EMC_GATE_GRAY_NR(e) : 0)
 
 #define GFX_ELEMENT(e)         (element_info[e].use_gfx_element ?      \
                                 element_info[e].gfx_element : e)
 #define MAX_SCORE_ENTRIES      100
 #define MAX_NUM_AMOEBA         100
 #define MAX_INVENTORY_SIZE     1000
-#define MAX_KEYS               4
+#define STD_NUM_KEYS           4
+#define MAX_NUM_KEYS           8
 #define NUM_BELTS              4
 #define NUM_BELT_PARTS         3
 #define MIN_ENVELOPE_XSIZE     1
 #define EYSIZE                 (VYSIZE + 44)
 #define FULL_SXSIZE            (2 + SXSIZE + 2)
 #define FULL_SYSIZE            (2 + SYSIZE + 2)
-#define MICROLEV_XSIZE         ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
-#define MICROLEV_YSIZE         ((STD_LEV_FIELDY + 2) * MICRO_TILEY)
-#define MICROLEV_XPOS          (SX + (SXSIZE - MICROLEV_XSIZE) / 2)
-#define MICROLEV_YPOS          (SX + 12 * TILEY - MICRO_TILEY)
-#define MICROLABEL_YPOS                (MICROLEV_YPOS + MICROLEV_YSIZE + 7)
+#define MICROLEVEL_XSIZE       ((STD_LEV_FIELDX + 2) * MICRO_TILEX)
+#define MICROLEVEL_YSIZE       ((STD_LEV_FIELDY + 2) * MICRO_TILEY)
+#define MICROLEVEL_XPOS                (SX + (SXSIZE - MICROLEVEL_XSIZE) / 2)
+#define MICROLEVEL_YPOS                (SX + 12 * TILEY - MICRO_TILEY)
+#define MICROLABEL1_YPOS       (MICROLEVEL_YPOS - 36)
+#define MICROLABEL2_YPOS       (MICROLEVEL_YPOS + MICROLEVEL_YSIZE + 7)
 
 
 /* score for elements */
 
 /* the following EMC style elements are currently not implemented in R'n'D */
 #define EL_BALLOON_SWITCH_NONE         667
-#define EL_EM_GATE_5                   668
-#define EL_EM_GATE_6                   669
-#define EL_EM_GATE_7                   670
-#define EL_EM_GATE_8                   671
-#define EL_EM_GATE_5_GRAY              672
-#define EL_EM_GATE_6_GRAY              673
-#define EL_EM_GATE_7_GRAY              674
-#define EL_EM_GATE_8_GRAY              675
-#define EL_EM_KEY_5                    676
-#define EL_EM_KEY_6                    677
-#define EL_EM_KEY_7                    678
-#define EL_EM_KEY_8                    679
+#define EL_EMC_GATE_5                  668
+#define EL_EMC_GATE_6                  669
+#define EL_EMC_GATE_7                  670
+#define EL_EMC_GATE_8                  671
+#define EL_EMC_GATE_5_GRAY             672
+#define EL_EMC_GATE_6_GRAY             673
+#define EL_EMC_GATE_7_GRAY             674
+#define EL_EMC_GATE_8_GRAY             675
+#define EL_EMC_KEY_5                   676
+#define EL_EMC_KEY_6                   677
+#define EL_EMC_KEY_7                   678
+#define EL_EMC_KEY_8                   679
 #define EL_EMC_ANDROID                 680
 #define EL_EMC_GRASS                   681
 #define EL_EMC_MAGIC_BALL              682
 #define EL_EMC_WALL_SLIPPERY_3         700
 #define EL_EMC_WALL_SLIPPERY_4         701
 #define EL_EMC_FAKE_GRASS              702
-#define EL_EMC_DRIPPER                 703
+#define EL_EMC_FAKE_ACID               703
+#define EL_EMC_DRIPPER                 704
 
-#define NUM_FILE_ELEMENTS              704
+#define NUM_FILE_ELEMENTS              705
 
 
 /* "real" (and therefore drawable) runtime elements */
 #define ACTION_SMASHED_BY_SPRING       48
 #define ACTION_SLURPED_BY_SPRING       49
 #define ACTION_TWINKLING               50
-#define ACTION_OTHER                   51
+#define ACTION_SPLASHING               51
+#define ACTION_OTHER                   52
 
-#define NUM_ACTIONS                    52
+#define NUM_ACTIONS                    53
 
 #define ACTION_BORING_LAST             ACTION_BORING_10
 #define ACTION_SLEEPING_LAST           ACTION_SLEEPING_3
 #define PROGRAM_VERSION_MAJOR          3
 #define PROGRAM_VERSION_MINOR          2
 #define PROGRAM_VERSION_PATCH          0
-#define PROGRAM_VERSION_BUILD          1
+#define PROGRAM_VERSION_BUILD          2
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
 #define PROGRAM_AUTHOR_STRING          "Holger Schemel"
 
 struct MenuInfo
 {
-  int draw_xoffset_default;
-  int draw_yoffset_default;
   int draw_xoffset[NUM_SPECIAL_GFX_ARGS];
   int draw_yoffset[NUM_SPECIAL_GFX_ARGS];
 
   int scrollbar_xoffset;
 
-  int list_size_default;
   int list_size[NUM_SPECIAL_GFX_ARGS];
 
   int sound[NUM_SPECIAL_GFX_ARGS];
@@ -1522,7 +1559,7 @@ struct PlayerInfo
   int sokobanfields_still_needed;
   int lights_still_needed;
   int friends_still_needed;
-  int key[4];
+  int key[MAX_NUM_KEYS];
   int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl;
   int shield_normal_time_left;
   int shield_deadly_time_left;