rnd-20030923-1-src
[rocksndiamonds.git] / src / main.h
index 4b77a46b45889d199a839423d48a2fe317c6a9b9..bfb43280bfddfa04e48a22d70250057e6e236a28 100644 (file)
 #define CE_BY_OTHER_ACTION     18      /* activates other element events */
 #define CE_BY_DIRECT_ACTION    19      /* activates direct element events */
 #define CE_OTHER_GETS_DIGGED   20
+#define CE_ENTERED_BY_PLAYER   21
+#define CE_LEFT_BY_PLAYER      22
+#define CE_OTHER_GETS_ENTERED  23
+#define CE_OTHER_GETS_LEFT     24
 
-#define NUM_CHANGE_EVENTS      21
+/* values for derived change events (determined from properties above) */
+#define CE_TOUCHING_SOME_SIDE  25      /* summarized left/right/up/down/any */
+
+#define NUM_CHANGE_EVENTS      26
 
 #define CE_BITMASK_DEFAULT     0
 
                                  (CH_EVENT_VAR(e) |=  CH_EVENT_BIT(c)) : \
                                  (CH_EVENT_VAR(e) &= ~CH_EVENT_BIT(c))) : 0)
 
+/* values for change sides for custom elements */
+#define CH_SIDE_LEFT           MV_LEFT
+#define CH_SIDE_RIGHT          MV_RIGHT
+#define CH_SIDE_TOP            MV_UP
+#define CH_SIDE_BOTTOM         MV_DOWN
+#define CH_SIDE_LEFT_RIGHT     MV_HORIZONTAL
+#define CH_SIDE_TOP_BOTTOM     MV_VERTICAL
+#define CH_SIDE_ANY            MV_ANY_DIRECTION
+
 /* values for change power for custom elements */
 #define CP_NON_DESTRUCTIVE     0
 #define CP_HALF_DESTRUCTIVE    1
@@ -1095,6 +1111,8 @@ struct PlayerInfo
   boolean is_digging;
   boolean is_collecting;
 
+  boolean show_envelope;
+
   unsigned long move_delay;
   int move_delay_value;
 
@@ -1242,7 +1260,8 @@ struct ElementChangeInfo
 {
   boolean can_change;          /* use or ignore this change info */
 
-  unsigned long events;                /* bitfield for change events */
+  unsigned long events;                /* change events */
+  int sides;                   /* change sides */
 
   short target_element;                /* target element after change */
 
@@ -1442,7 +1461,8 @@ extern short                      StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   Back[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean                 Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern boolean                 Pushed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-extern boolean                 Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern unsigned long           Changed[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+extern unsigned long           ChangeEvent[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
 extern short                   AmoebaCnt[MAX_NUM_AMOEBA];