added element property for all (run-time) empty space elements
[rocksndiamonds.git] / src / main.h
index 58e6c59adf6bcfed6f47a855ba66ac107325248b..0a2ff1f6a8f1238f80a12358af7ae833d26e4b23 100644 (file)
 
 // values for pre-defined properties
 // (from here on, values can be changed by inserting new values)
-#define EP_PLAYER                      32
-#define EP_CAN_PASS_MAGIC_WALL         33
-#define EP_CAN_PASS_DC_MAGIC_WALL      34
-#define EP_SWITCHABLE                  35
-#define EP_BD_ELEMENT                  36
-#define EP_SP_ELEMENT                  37
-#define EP_SB_ELEMENT                  38
-#define EP_GEM                         39
-#define EP_FOOD_DARK_YAMYAM            40
-#define EP_FOOD_PENGUIN                        41
-#define EP_FOOD_PIG                    42
-#define EP_HISTORIC_WALL               43
-#define EP_HISTORIC_SOLID              44
-#define EP_CLASSIC_ENEMY               45
-#define EP_BELT                                46
-#define EP_BELT_ACTIVE                 47
-#define EP_BELT_SWITCH                 48
-#define EP_TUBE                                49
-#define EP_ACID_POOL                   50
-#define EP_KEYGATE                     51
-#define EP_AMOEBOID                    52
-#define EP_AMOEBALIVE                  53
-#define EP_HAS_EDITOR_CONTENT          54
-#define EP_CAN_TURN_EACH_MOVE          55
-#define EP_CAN_GROW                    56
-#define EP_ACTIVE_BOMB                 57
-#define EP_INACTIVE                    58
+#define EP_EMPTY_SPACE                 32
+#define EP_PLAYER                      33
+#define EP_CAN_PASS_MAGIC_WALL         34
+#define EP_CAN_PASS_DC_MAGIC_WALL      35
+#define EP_SWITCHABLE                  36
+#define EP_BD_ELEMENT                  37
+#define EP_SP_ELEMENT                  38
+#define EP_SB_ELEMENT                  39
+#define EP_GEM                         40
+#define EP_FOOD_DARK_YAMYAM            41
+#define EP_FOOD_PENGUIN                        42
+#define EP_FOOD_PIG                    43
+#define EP_HISTORIC_WALL               44
+#define EP_HISTORIC_SOLID              45
+#define EP_CLASSIC_ENEMY               46
+#define EP_BELT                                47
+#define EP_BELT_ACTIVE                 48
+#define EP_BELT_SWITCH                 49
+#define EP_TUBE                                50
+#define EP_ACID_POOL                   51
+#define EP_KEYGATE                     52
+#define EP_AMOEBOID                    53
+#define EP_AMOEBALIVE                  54
+#define EP_HAS_EDITOR_CONTENT          55
+#define EP_CAN_TURN_EACH_MOVE          56
+#define EP_CAN_GROW                    57
+#define EP_ACTIVE_BOMB                 58
+#define EP_INACTIVE                    59
 
 // values for special configurable properties (depending on level settings)
-#define EP_EM_SLIPPERY_WALL            59
+#define EP_EM_SLIPPERY_WALL            60
 
 // values for special graphics properties (no effect on game engine)
-#define EP_GFX_CRUMBLED                        60
+#define EP_GFX_CRUMBLED                        61
 
 // values for derived properties (determined from properties above)
-#define EP_ACCESSIBLE_OVER             61
-#define EP_ACCESSIBLE_INSIDE           62
-#define EP_ACCESSIBLE_UNDER            63
-#define EP_WALKABLE                    64
-#define EP_PASSABLE                    65
-#define EP_ACCESSIBLE                  66
-#define EP_COLLECTIBLE                 67
-#define EP_SNAPPABLE                   68
-#define EP_WALL                                69
-#define EP_SOLID_FOR_PUSHING           70
-#define EP_DRAGONFIRE_PROOF            71
-#define EP_EXPLOSION_PROOF             72
-#define EP_CAN_SMASH                   73
-#define EP_EXPLODES_3X3_OLD            74
-#define EP_CAN_EXPLODE_BY_FIRE         75
-#define EP_CAN_EXPLODE_SMASHED         76
-#define EP_CAN_EXPLODE_IMPACT          77
-#define EP_SP_PORT                     78
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   79
-#define EP_CAN_EXPLODE_BY_EXPLOSION    80
-#define EP_COULD_MOVE_INTO_ACID                81
-#define EP_MAYBE_DONT_COLLIDE_WITH     82
-#define EP_CAN_BE_CLONED_BY_ANDROID    83
+#define EP_ACCESSIBLE_OVER             62
+#define EP_ACCESSIBLE_INSIDE           63
+#define EP_ACCESSIBLE_UNDER            64
+#define EP_WALKABLE                    65
+#define EP_PASSABLE                    66
+#define EP_ACCESSIBLE                  67
+#define EP_COLLECTIBLE                 68
+#define EP_SNAPPABLE                   69
+#define EP_WALL                                70
+#define EP_SOLID_FOR_PUSHING           71
+#define EP_DRAGONFIRE_PROOF            72
+#define EP_EXPLOSION_PROOF             73
+#define EP_CAN_SMASH                   74
+#define EP_EXPLODES_3X3_OLD            75
+#define EP_CAN_EXPLODE_BY_FIRE         76
+#define EP_CAN_EXPLODE_SMASHED         77
+#define EP_CAN_EXPLODE_IMPACT          78
+#define EP_SP_PORT                     79
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   80
+#define EP_CAN_EXPLODE_BY_EXPLOSION    81
+#define EP_COULD_MOVE_INTO_ACID                82
+#define EP_MAYBE_DONT_COLLIDE_WITH     83
+#define EP_CAN_BE_CLONED_BY_ANDROID    84
 
 // values for internal purpose only (level editor)
-#define EP_WALK_TO_OBJECT              84
-#define EP_DEADLY                      85
-#define EP_EDITOR_CASCADE              86
-#define EP_EDITOR_CASCADE_ACTIVE       87
-#define EP_EDITOR_CASCADE_INACTIVE     88
+#define EP_WALK_TO_OBJECT              85
+#define EP_DEADLY                      86
+#define EP_EDITOR_CASCADE              87
+#define EP_EDITOR_CASCADE_ACTIVE       88
+#define EP_EDITOR_CASCADE_INACTIVE     89
 
 // values for internal purpose only (game engine)
-#define EP_HAS_ACTION                  89
-#define EP_CAN_CHANGE_OR_HAS_ACTION    90
+#define EP_HAS_ACTION                  90
+#define EP_CAN_CHANGE_OR_HAS_ACTION    91
 
 // values for internal purpose only (other)
-#define EP_OBSOLETE                    91
+#define EP_OBSOLETE                    92
 
-#define NUM_ELEMENT_PROPERTIES         92
+#define NUM_ELEMENT_PROPERTIES         93
 
 #define NUM_EP_BITFIELDS               ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE_NR            0
 #define CE_PRESSED_BY_MOUSE            45
 #define CE_MOUSE_CLICKED_ON_X          46
 #define CE_MOUSE_PRESSED_ON_X          47
+#define CE_NEXT_TO_PLAYER              48
+#define CE_NEXT_TO_X                   49
+#define CE_PLAYER_NEXT_TO_X            50
 
-#define NUM_CHANGE_EVENTS              48
+#define NUM_CHANGE_EVENTS              51
 
 #define NUM_CE_BITFIELDS               ((NUM_CHANGE_EVENTS + 31) / 32)
 
 #define GFX_CRUMBLED(e)                HAS_PROPERTY(GFX_ELEMENT(e), EP_GFX_CRUMBLED)
 
 // macros for pre-defined properties
+#define IS_EMPTY_SPACE(e)      HAS_PROPERTY(e, EP_EMPTY_SPACE)
 #define IS_PLAYER_ELEMENT(e)   HAS_PROPERTY(e, EP_PLAYER)
 #define CAN_PASS_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_MAGIC_WALL)
 #define CAN_PASS_DC_MAGIC_WALL(e) HAS_PROPERTY(e, EP_CAN_PASS_DC_MAGIC_WALL)
 
 #define NUM_GROUP_ELEMENTS             32
 #define EL_GROUP_END                   655
-// ---------- end of custom elements section ----------------------------------
+// ---------- end of group elements section -----------------------------------
 
 #define EL_UNKNOWN                     656
 #define EL_TRIGGER_ELEMENT             657
 #define EL_SPRING_LEFT                 1215
 #define EL_SPRING_RIGHT                        1216
 
-#define NUM_FILE_ELEMENTS              1217
+// ---------- begin of empty space elements section ---------------------------
+#define EL_EMPTY_SPACE_START           1217
+
+#include "conf_emp.h"  // include auto-generated data structure definitions
+
+#define NUM_EMPTY_SPACE_ELEMENTS       16
+#define EL_EMPTY_SPACE_END             1232
+// ---------- end of empty space elements section -----------------------------
+
+#define NUM_FILE_ELEMENTS              1233
 
 
 // "real" (and therefore drawable) runtime elements
 #define EL_INTERNAL_CASCADE_CE_ACTIVE          (EL_FIRST_INTERNAL + 29)
 #define EL_INTERNAL_CASCADE_GE                 (EL_FIRST_INTERNAL + 30)
 #define EL_INTERNAL_CASCADE_GE_ACTIVE          (EL_FIRST_INTERNAL + 31)
-#define EL_INTERNAL_CASCADE_REF                        (EL_FIRST_INTERNAL + 32)
-#define EL_INTERNAL_CASCADE_REF_ACTIVE         (EL_FIRST_INTERNAL + 33)
-#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 34)
-#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 35)
-#define EL_INTERNAL_CASCADE_DYNAMIC            (EL_FIRST_INTERNAL + 36)
-#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE     (EL_FIRST_INTERNAL + 37)
+#define EL_INTERNAL_CASCADE_ES                 (EL_FIRST_INTERNAL + 32)
+#define EL_INTERNAL_CASCADE_ES_ACTIVE          (EL_FIRST_INTERNAL + 33)
+#define EL_INTERNAL_CASCADE_REF                        (EL_FIRST_INTERNAL + 34)
+#define EL_INTERNAL_CASCADE_REF_ACTIVE         (EL_FIRST_INTERNAL + 35)
+#define EL_INTERNAL_CASCADE_USER               (EL_FIRST_INTERNAL + 36)
+#define EL_INTERNAL_CASCADE_USER_ACTIVE                (EL_FIRST_INTERNAL + 37)
+#define EL_INTERNAL_CASCADE_DYNAMIC            (EL_FIRST_INTERNAL + 38)
+#define EL_INTERNAL_CASCADE_DYNAMIC_ACTIVE     (EL_FIRST_INTERNAL + 39)
 
 #define EL_INTERNAL_CLIPBOARD_START    (EL_FIRST_INTERNAL + 0)
 #define EL_INTERNAL_CLIPBOARD_END      (EL_FIRST_INTERNAL + 2)
 #define EL_INTERNAL_START              (EL_FIRST_INTERNAL + 0)
-#define EL_INTERNAL_END                        (EL_FIRST_INTERNAL + 37)
+#define EL_INTERNAL_END                        (EL_FIRST_INTERNAL + 39)
 
-#define MAX_NUM_ELEMENTS               (EL_FIRST_INTERNAL + 38)
+#define MAX_NUM_ELEMENTS               (EL_FIRST_INTERNAL + 40)
 
 
 // values for graphics/sounds action types
@@ -2574,9 +2590,9 @@ enum
 
 // program information and versioning definitions
 #define PROGRAM_VERSION_SUPER          4
-#define PROGRAM_VERSION_MAJOR          2
-#define PROGRAM_VERSION_MINOR          3
-#define PROGRAM_VERSION_PATCH          2
+#define PROGRAM_VERSION_MAJOR          3
+#define PROGRAM_VERSION_MINOR          1
+#define PROGRAM_VERSION_PATCH          0
 #define PROGRAM_VERSION_EXTRA          ""
 
 #define PROGRAM_TITLE_STRING           "Rocks'n'Diamonds"
@@ -2656,7 +2672,8 @@ enum
 #define AUTOPLAY_WARP                  (1 << 2)
 #define AUTOPLAY_TEST                  (1 << 3)
 #define AUTOPLAY_SAVE                  (1 << 4)
-#define AUTOPLAY_FIX                   (1 << 5)
+#define AUTOPLAY_UPLOAD                        (1 << 5)
+#define AUTOPLAY_FIX                   (1 << 6)
 #define AUTOPLAY_WARP_NO_DISPLAY       AUTOPLAY_TEST
 
 #define AUTOPLAY_MODE_NONE             0
@@ -2665,6 +2682,7 @@ enum
 #define AUTOPLAY_MODE_WARP             (AUTOPLAY_MODE_FFWD | AUTOPLAY_WARP)
 #define AUTOPLAY_MODE_TEST             (AUTOPLAY_MODE_WARP | AUTOPLAY_TEST)
 #define AUTOPLAY_MODE_SAVE             (AUTOPLAY_MODE_TEST | AUTOPLAY_SAVE)
+#define AUTOPLAY_MODE_UPLOAD           (AUTOPLAY_MODE_TEST | AUTOPLAY_UPLOAD)
 #define AUTOPLAY_MODE_FIX              (AUTOPLAY_MODE_TEST | AUTOPLAY_FIX)
 #define AUTOPLAY_MODE_WARP_NO_DISPLAY  AUTOPLAY_MODE_TEST
 
@@ -3266,8 +3284,9 @@ struct GlobalInfo
 {
   char *autoplay_leveldir;
   int autoplay_level[MAX_TAPES_PER_SET];
+  int autoplay_mode;
   boolean autoplay_all;
-  boolean autoplay_mode;
+  time_t autoplay_time;
 
   char *patchtapes_mode;
   char *patchtapes_leveldir;
@@ -3732,6 +3751,7 @@ extern int                        PlayerVisit[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
 extern int                     GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern int                     GfxRandomStatic[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxElement[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern int                     GfxDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY];