rnd-20040315-2-src
[rocksndiamonds.git] / src / main.h
index b483378e3e9441bfd6aa7b068256ac3c73505da6..037ac80fcb6b45c118f721d10176ca68eed0fa09 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
 #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 &&              \
 /* ---------- end of custom elements section ------------------------------- */
 
 #define EL_UNKNOWN                     656
+#define EL_TRIGGER_ELEMENT             657
+#define EL_TRIGGER_PLAYER              658
 
-#define NUM_FILE_ELEMENTS              657
+#define NUM_FILE_ELEMENTS              659
 
 
 /* "real" (and therefore drawable) runtime elements */
 /* 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 +1317,7 @@ struct PlayerInfo
   boolean use_murphy_graphic;
 
   boolean block_last_field;
+  boolean can_fall_into_acid;
 
   boolean LevelSolved, GameOver;
 
@@ -1423,7 +1428,8 @@ struct LevelInfo
   int time_light;
   int time_timegate;
 
-  int can_move_into_acid_bits; /* 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;
@@ -1538,7 +1544,7 @@ struct ElementChangeInfo
   int delay_random;            /* added frame delay before changed (random) */
   int delay_frames;            /* either 1 (frames) or 50 (seconds; 50 fps) */
 
-  short trigger_element;       /* custom element triggering change */
+  short trigger_element;       /* element triggering change */
 
   int content[3][3];           /* new elements after extended change */
   boolean use_content;         /* use extended change content */
@@ -1555,6 +1561,11 @@ struct ElementChangeInfo
   void (*change_function)(int x, int y);
   void (*post_change_function)(int x, int y);
 
+  /* ---------- internal values used at runtime when playing ---------- */
+
+  short actual_trigger_element;        /* element that actually triggered change */
+  int actual_trigger_player;   /* player which actually triggered change */
+
   /* ---------- internal values used in level editor ---------- */
 
   int direct_action;           /* change triggered by actions on element */