rnd-20040411-1-src
[rocksndiamonds.git] / src / main.h
index c58dbfbe8ecc81897578a1f1ff66035bd4c78818..0690bafee808f0e66089399beab6a885252873ec 100644 (file)
@@ -89,6 +89,7 @@
 #define EP_CAN_EXPLODE_CROSS   25
 #define EP_PROTECTED           26
 #define EP_CAN_MOVE_INTO_ACID  27
+#define EP_THROWABLE           28
 
 /* values for pre-defined properties */
 #define EP_PLAYER              32
 #define EP_AMOEBALIVE          51
 #define EP_HAS_CONTENT         52
 #define EP_CAN_TURN_EACH_MOVE  53
-#define EP_ACTIVE_BOMB         54
-#define EP_INACTIVE            55
+#define EP_CAN_GROW            54
+#define EP_ACTIVE_BOMB         55
+#define EP_INACTIVE            56
 
 /* values for special configurable properties (depending on level settings) */
-#define EP_EM_SLIPPERY_WALL    56
+#define EP_EM_SLIPPERY_WALL    57
 
 /* values for special graphics properties (no effect on game engine) */
-#define EP_GFX_CRUMBLED                57
+#define EP_GFX_CRUMBLED                58
 
 /* values for derived properties (determined from properties above) */
-#define EP_ACCESSIBLE_OVER     58
-#define EP_ACCESSIBLE_INSIDE   59
-#define EP_ACCESSIBLE_UNDER    60
-#define EP_WALKABLE            61
-#define EP_PASSABLE            62
-#define EP_ACCESSIBLE          63
-#define EP_COLLECTIBLE         64
-#define EP_SNAPPABLE           65
-#define EP_WALL                        66
-#define EP_SOLID_FOR_PUSHING   67
-#define EP_DRAGONFIRE_PROOF    68
-#define EP_EXPLOSION_PROOF     69
-#define EP_CAN_SMASH           70
-#define EP_CAN_EXPLODE         71
-#define EP_CAN_EXPLODE_3X3     72
-#define EP_SP_PORT             73
-#define EP_CAN_EXPLODE_BY_DRAGONFIRE   74
-#define EP_CAN_EXPLODE_BY_EXPLOSION    75
-#define EP_COULD_MOVE_INTO_ACID                76
-#define EP_MAYBE_DONT_COLLIDE_WITH     77
+#define EP_ACCESSIBLE_OVER     59
+#define EP_ACCESSIBLE_INSIDE   60
+#define EP_ACCESSIBLE_UNDER    61
+#define EP_WALKABLE            62
+#define EP_PASSABLE            63
+#define EP_ACCESSIBLE          64
+#define EP_COLLECTIBLE         65
+#define EP_SNAPPABLE           66
+#define EP_WALL                        67
+#define EP_SOLID_FOR_PUSHING   68
+#define EP_DRAGONFIRE_PROOF    69
+#define EP_EXPLOSION_PROOF     70
+#define EP_CAN_SMASH           71
+#define EP_CAN_EXPLODE         72
+#define EP_CAN_EXPLODE_3X3     73
+#define EP_SP_PORT             74
+#define EP_CAN_EXPLODE_BY_DRAGONFIRE   75
+#define EP_CAN_EXPLODE_BY_EXPLOSION    76
+#define EP_COULD_MOVE_INTO_ACID                77
+#define EP_MAYBE_DONT_COLLIDE_WITH     78
 
 /* values for internal purpose only (level editor) */
-#define EP_EXPLODE_RESULT      78
-#define EP_WALK_TO_OBJECT      79
-#define EP_DEADLY              80
+#define EP_EXPLODE_RESULT      79
+#define EP_WALK_TO_OBJECT      80
+#define EP_DEADLY              81
 
-#define NUM_ELEMENT_PROPERTIES 81
+#define NUM_ELEMENT_PROPERTIES 82
 
 #define NUM_EP_BITFIELDS       ((NUM_ELEMENT_PROPERTIES + 31) / 32)
 #define EP_BITFIELD_BASE       0
 #define CP_WHEN_EMPTY          0
 #define CP_WHEN_DIGGABLE       1
 #define CP_WHEN_DESTRUCTIBLE   2
+#define CP_WHEN_COLLECTIBLE    3
+#define CP_WHEN_REMOVABLE      4
 
 /* values for custom move patterns (bits 0 - 3: basic move directions) */
 #define MV_BIT_TOWARDS_PLAYER  4
 #define CAN_EXPLODE_CROSS(e)   HAS_PROPERTY(e, EP_CAN_EXPLODE_CROSS)
 #define IS_PROTECTED(e)                HAS_PROPERTY(e, EP_PROTECTED)
 #define CAN_MOVE_INTO_ACID(e)  HAS_PROPERTY(e, EP_CAN_MOVE_INTO_ACID)
+#define IS_THROWABLE(e)                HAS_PROPERTY(e, EP_THROWABLE)
 
 /* macros for special configurable properties */
 #define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
 #define IS_AMOEBALIVE(e)       HAS_PROPERTY(e, EP_AMOEBALIVE)
 #define HAS_CONTENT(e)         HAS_PROPERTY(e, EP_HAS_CONTENT)
 #define CAN_TURN_EACH_MOVE(e)  HAS_PROPERTY(e, EP_CAN_TURN_EACH_MOVE)
+#define CAN_GROW(e)            HAS_PROPERTY(e, EP_CAN_GROW)
 #define IS_ACTIVE_BOMB(e)      HAS_PROPERTY(e, EP_ACTIVE_BOMB)
 #define IS_INACTIVE(e)         HAS_PROPERTY(e, EP_INACTIVE)
 
 #define IS_ENVELOPE(e)         ((e) >= EL_ENVELOPE_1 &&                \
                                 (e) <= EL_ENVELOPE_4)
 
+#define IS_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)
 
@@ -1461,6 +1473,7 @@ struct LevelInfo
   boolean use_spring_bug;      /* for compatibility with old levels */
   boolean instant_relocation;  /* no visual delay when relocating player */
   boolean can_pass_to_walkable;        /* player can pass to empty or walkable tile */
+  boolean grow_into_diggable;  /* amoeba can grow into anything diggable */
 
   /* ('int' instead of 'boolean' because used as selectbox value in editor) */
   int use_step_counter;                /* count steps instead of seconds for level */
@@ -1855,6 +1868,7 @@ extern unsigned long              Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern unsigned long           ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   WasJustMoving[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   WasJustFalling[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern short                   CheckCollision[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaCnt[MAX_NUM_AMOEBA];
 extern short                   AmoebaCnt2[MAX_NUM_AMOEBA];