rnd-20040313-1-src
[rocksndiamonds.git] / src / main.h
index 370d28910103f66e59f26e633d23cff59ed1bd4b..cb739c041ccedc618bd196d452b74247444433eb 100644 (file)
 #define EP_CAN_EXPLODE         70
 #define EP_CAN_EXPLODE_3X3     71
 #define EP_SP_PORT             72
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE 73
-#define EP_CAN_EXPLODE_BY_EXPLOSION  74
-#define EP_COULD_MOVE_INTO_ACID        75
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   73
+#define EP_CAN_EXPLODE_BY_EXPLOSION    74
+#define EP_COULD_MOVE_INTO_ACID                75
+#define EP_MAYBE_DONT_COLLIDE_WITH     76
 
 /* values for internal purpose only (level editor) */
-#define EP_EXPLODE_RESULT      76
-#define EP_WALK_TO_OBJECT      77
-#define EP_DEADLY              78
+#define EP_EXPLODE_RESULT      77
+#define EP_WALK_TO_OBJECT      78
+#define EP_DEADLY              79
 
-#define NUM_ELEMENT_PROPERTIES 79
+#define NUM_ELEMENT_PROPERTIES 80
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 
 /* values for custom move patterns */
 #define MV_HORIZONTAL          (MV_LEFT | MV_RIGHT)
-#define MV_VERTICAL            (MV_UP | MV_DOWN)
-#define MV_ALL_DIRECTIONS      (MV_HORIZONTAL | MV_VERTICAL)
+#define MV_VERTICAL            (MV_UP   | MV_DOWN)
+#define MV_ALL_DIRECTIONS      (MV_LEFT | MV_RIGHT | MV_UP | MV_DOWN)
 #define MV_ANY_DIRECTION       (MV_ALL_DIRECTIONS)
 #define MV_TOWARDS_PLAYER      (1 << MV_BIT_TOWARDS_PLAYER)
 #define MV_AWAY_FROM_PLAYER    (1 << MV_BIT_AWAY_FROM_PLAYER)
 #define CAN_EXPLODE_BY_EXPLOSION(e)    \
                                HAS_PROPERTY(e, EP_CAN_EXPLODE_BY_EXPLOSION)
 #define COULD_MOVE_INTO_ACID(e)        HAS_PROPERTY(e, EP_COULD_MOVE_INTO_ACID)
+#define MAYBE_DONT_COLLIDE_WITH(e)  HAS_PROPERTY(e, EP_MAYBE_DONT_COLLIDE_WITH)
 
 /* special macros used in game engine */
 #define IS_CUSTOM_ELEMENT(e)   ((e) >= EL_CUSTOM_START &&              \
 /* program information and versioning definitions */
 
 #define PROGRAM_VERSION_MAJOR  3
-#define PROGRAM_VERSION_MINOR  0
-#define PROGRAM_VERSION_PATCH  9
+#define PROGRAM_VERSION_MINOR  1
+#define PROGRAM_VERSION_PATCH  0
 #define PROGRAM_VERSION_BUILD  0
 
 #define PROGRAM_TITLE_STRING   "Rocks'n'Diamonds"
@@ -1313,6 +1315,7 @@ struct PlayerInfo
   boolean use_murphy_graphic;
 
   boolean block_last_field;
+  boolean can_fall_into_acid;
 
   boolean LevelSolved, GameOver;
 
@@ -1372,6 +1375,7 @@ struct PlayerInfo
   int shield_deadly_time_left;
 
   int inventory_element[MAX_INVENTORY_SIZE];
+  int inventory_infinite_element;
   int inventory_size;
 };
 
@@ -1422,7 +1426,8 @@ struct LevelInfo
   int time_light;
   int time_timegate;
 
-  int can_move_into_acid;      /* bits indicate property for element groups */
+  int can_move_into_acid_bits; /* bitfield to store property for elements */
+  int dont_collide_with_bits;  /* bitfield to store property for elements */
 
   boolean double_speed;
   boolean initial_gravity;
@@ -1431,11 +1436,13 @@ struct LevelInfo
   boolean sp_block_last_field; /* player blocks previous field while moving */
   boolean use_spring_bug;      /* for compatibility with old levels */
 
+  int use_step_counter;                /* count steps instead of seconds for level */
+
   short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 
   boolean use_custom_template; /* use custom properties from template file */
 
-  boolean no_level_file;       /* set for currently undefined levels */
+  boolean no_valid_file;       /* set when level file missing or invalid */
 };
 
 struct TapeInfo
@@ -1469,6 +1476,8 @@ struct TapeInfo
     byte action[MAX_PLAYERS];
     byte delay;
   } pos[MAX_TAPELEN];
+
+  boolean no_valid_file;       /* set when tape file missing or invalid */
 };
 
 struct GameInfo
@@ -1843,7 +1852,7 @@ extern int                        ZX, ZY;
 extern int                     ExitX, ExitY;
 extern int                     AllPlayersGone;
 
-extern int                     TimeFrames, TimePlayed, TimeLeft;
+extern int                     TimeFrames, TimePlayed, TimeLeft, TapeTime;
 extern boolean                 SiebAktiv;
 extern int                     SiebCount;