rnd-20030204-1-src
[rocksndiamonds.git] / src / main.h
index 3fc93b732c3d53bb42eb0ec031db182c63505c66..6c56974a538cf0e6d86795cbebc4fd8c42edf310 100644 (file)
 #define EP_BIT_TUBE            (1 << 3)
 #define EP_BIT_EM_SLIPPERY_WALL        (1 << 4)
 
+#define EP_BITMASK_DEFAULT     0
+
 #define IS_AMOEBALIVE(e)       (Properties1[e] & EP_BIT_AMOEBALIVE)
 #define IS_AMOEBOID(e)         (Properties1[e] & EP_BIT_AMOEBOID)
 #define IS_SCHLUESSEL(e)       (Properties1[e] & EP_BIT_SCHLUESSEL)
 #define IS_TUBE(e)             (Properties2[e] & EP_BIT_TUBE)
 #define IS_EM_SLIPPERY_WALL(e) (Properties2[e] & EP_BIT_EM_SLIPPERY_WALL)
 
+#define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&      \
+                                (e) <= EL_CUSTOM_END)
+
 #define IS_PLAYER(x,y)         (ELEM_IS_PLAYER(StorePlayer[x][y]))
 
 #define IS_FREE(x,y)           (Feld[x][y] == EL_EMPTY && !IS_PLAYER(x,y))
 #define ANIM_MODE(g)           (graphic_info[g].anim_mode)
 
 #define IS_ANIMATED(g)         (ANIM_FRAMES(g) > 1)
-#define IS_NEW_FRAME(f, g)     ((f) % ANIM_DELAY(g) == 0)
+#define IS_NEW_DELAY(f, g)     ((f) % ANIM_DELAY(g) == 0)
+#define IS_NEW_FRAME(f, g)     (IS_ANIMATED(g) && IS_NEW_DELAY(f, g))
+#define IS_NEXT_FRAME(f, g)    (IS_NEW_FRAME(f, g) && (f) > 0)
 
 #define IS_LOOP_SOUND(s)       (sound_info[s].loop)
 
 #define EL_CUSTOM_128                  (EL_CUSTOM_START + 127)
 #define EL_CUSTOM_END                  (EL_CUSTOM_START + 127)
 
+#define NUM_CUSTOM_ELEMENTS            128
 #define NUM_FILE_ELEMENTS              488
 
 
 #define EL_MAGIC_WALL_FILLING          (EL_FIRST_RUNTIME_UNREAL + 11)
 #define EL_BD_MAGIC_WALL_FILLING       (EL_FIRST_RUNTIME_UNREAL + 12)
 
-/* dummy (not drawable) runtime elements (internal use only) */
+/* dummy elements (never used as game elements, only used as graphics) */
 #define EL_FIRST_DUMMY                 (EL_FIRST_RUNTIME_UNREAL + 13)
 
 #define EL_STEELWALL_TOPLEFT                   (EL_FIRST_DUMMY + 0)
 #define EL_INVISIBLE_STEELWALL_HORIZONTAL      (EL_FIRST_DUMMY + 10)
 #define EL_INVISIBLE_STEELWALL_VERTICAL                (EL_FIRST_DUMMY + 11)
 #define EL_SAND_CRUMBLED                       (EL_FIRST_DUMMY + 12)
-#define EL_BD_AMOEBA_PART1                     (EL_FIRST_DUMMY + 13)
-#define EL_BD_AMOEBA_PART2                     (EL_FIRST_DUMMY + 14)
-#define EL_BD_AMOEBA_PART3                     (EL_FIRST_DUMMY + 15)
-#define EL_BD_AMOEBA_PART4                     (EL_FIRST_DUMMY + 16)
-#define EL_AMOEBA_WET_PART1                    (EL_FIRST_DUMMY + 17)
-#define EL_AMOEBA_WET_PART2                    (EL_FIRST_DUMMY + 18)
-#define EL_AMOEBA_WET_PART3                    (EL_FIRST_DUMMY + 19)
-#define EL_AMOEBA_WET_PART4                    (EL_FIRST_DUMMY + 20)
-#define EL_AMOEBA_DRY_PART1                    (EL_FIRST_DUMMY + 21)
-#define EL_AMOEBA_DRY_PART2                    (EL_FIRST_DUMMY + 22)
-#define EL_AMOEBA_DRY_PART3                    (EL_FIRST_DUMMY + 23)
-#define EL_AMOEBA_DRY_PART4                    (EL_FIRST_DUMMY + 24)
-#define EL_AMOEBA_FULL_PART1                   (EL_FIRST_DUMMY + 25)
-#define EL_AMOEBA_FULL_PART2                   (EL_FIRST_DUMMY + 26)
-#define EL_AMOEBA_FULL_PART3                   (EL_FIRST_DUMMY + 27)
-#define EL_AMOEBA_FULL_PART4                   (EL_FIRST_DUMMY + 28)
-#define EL_AMOEBA_DEAD_PART1                   (EL_FIRST_DUMMY + 29)
-#define EL_AMOEBA_DEAD_PART2                   (EL_FIRST_DUMMY + 30)
-#define EL_AMOEBA_DEAD_PART3                   (EL_FIRST_DUMMY + 31)
-#define EL_AMOEBA_DEAD_PART4                   (EL_FIRST_DUMMY + 32)
-#define EL_DYNABOMB_ACTIVE                     (EL_FIRST_DUMMY + 33)
-#define EL_SHIELD_NORMAL_ACTIVE                        (EL_FIRST_DUMMY + 34)
-#define EL_SHIELD_DEADLY_ACTIVE                        (EL_FIRST_DUMMY + 35)
-#define EL_ARROW_RED_LEFT                      (EL_FIRST_DUMMY + 36)
-#define EL_ARROW_RED_RIGHT                     (EL_FIRST_DUMMY + 37)
-#define EL_ARROW_RED_UP                                (EL_FIRST_DUMMY + 38)
-#define EL_ARROW_RED_DOWN                      (EL_FIRST_DUMMY + 39)
-
-#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 40)
+#define EL_DYNABOMB_ACTIVE                     (EL_FIRST_DUMMY + 13)
+#define EL_SHIELD_NORMAL_ACTIVE                        (EL_FIRST_DUMMY + 14)
+#define EL_SHIELD_DEADLY_ACTIVE                        (EL_FIRST_DUMMY + 15)
+#define EL_ARROW_RED_LEFT                      (EL_FIRST_DUMMY + 16)
+#define EL_ARROW_RED_RIGHT                     (EL_FIRST_DUMMY + 17)
+#define EL_ARROW_RED_UP                                (EL_FIRST_DUMMY + 18)
+#define EL_ARROW_RED_DOWN                      (EL_FIRST_DUMMY + 19)
+
+#define MAX_NUM_ELEMENTS                       (EL_FIRST_DUMMY + 20)
 
 
 /* values for graphics/sounds action types */
 
 #define NUM_ACTIONS                            21
 
+/* values for special image configuration suffixes */
+#define GFX_SPECIAL_ARG_EDITOR                 0
+#define GFX_SPECIAL_ARG_PREVIEW                        1
+
+#define NUM_SPECIAL_GFX_ARGS                   2
+
 
 /* values for image configuration suffixes */
 #define GFX_ARG_XPOS                           0
@@ -1049,6 +1043,9 @@ struct ElementInfo
                                /* special graphics for left/right/up/down */
   int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS];
 
+  int editor_graphic;          /* graphic displayed in level editor */
+  int preview_graphic;         /* graphic displayed in level preview */
+
   int sound[NUM_ACTIONS];      /* default sounds for several actions */
 };
 
@@ -1087,6 +1084,12 @@ struct ElementDirectionInfo
   int value;
 };
 
+struct SpecialSuffixInfo
+{
+  char *suffix;
+  int value;
+};
+
 
 #if 0
 extern GC                      tile_clip_gc;
@@ -1163,6 +1166,7 @@ extern struct GlobalInfo  global;
 extern struct ElementInfo      element_info[];
 extern struct ElementActionInfo        element_action_info[];
 extern struct ElementDirectionInfo element_direction_info[];
+extern struct SpecialSuffixInfo special_suffix_info[];
 extern struct GraphicInfo      *graphic_info;
 extern struct SoundInfo               *sound_info;
 extern struct ConfigInfo       image_config[], sound_config[];