#define CE_COLLISION 5
#define CE_IMPACT 6
#define CE_SMASHED 7
-#define CE_OTHER_IS_TOUCHING 8
+#define CE_TOUCHING_ANY_SIDE_OF 8
#define CE_OTHER_IS_CHANGING 9
#define CE_OTHER_IS_EXPLODING 10
#define CE_OTHER_GETS_TOUCHED 11
#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_TOUCHING_LEFT_OF 21
+#define CE_TOUCHING_RIGHT_OF 22
+#define CE_TOUCHING_TOP_OF 23
+#define CE_TOUCHING_BOTTOM_OF 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
#define MAX_ENVELOPE_YSIZE 20
#define MAX_ENVELOPE_TEXT_LEN (MAX_ENVELOPE_XSIZE * MAX_ENVELOPE_YSIZE)
#define MIN_CHANGE_PAGES 1
-#define MAX_CHANGE_PAGES 10
+#define MAX_CHANGE_PAGES 16
/* values for elements with content */
#define MIN_ELEMENT_CONTENTS 1
#define EL_CONVEYOR_BELT_4_MIDDLE_ACTIVE (EL_FIRST_RUNTIME_REAL + 28)
#define EL_CONVEYOR_BELT_4_RIGHT_ACTIVE (EL_FIRST_RUNTIME_REAL + 29)
#define EL_EXIT_OPENING (EL_FIRST_RUNTIME_REAL + 30)
-#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 31)
-#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 32)
-#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 33)
-#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 34)
-#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 35)
-#define EL_AMOEBA_DROPPING (EL_FIRST_RUNTIME_REAL + 36)
-#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 37)
-#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 38)
-#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 39)
-#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 40)
-#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 41)
-#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 42)
-#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43)
-#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 44)
-#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_EXIT_CLOSING (EL_FIRST_RUNTIME_REAL + 31)
+#define EL_SP_EXIT_OPEN (EL_FIRST_RUNTIME_REAL + 32)
+#define EL_SP_TERMINAL_ACTIVE (EL_FIRST_RUNTIME_REAL + 33)
+#define EL_SP_BUGGY_BASE_ACTIVATING (EL_FIRST_RUNTIME_REAL + 34)
+#define EL_SP_BUGGY_BASE_ACTIVE (EL_FIRST_RUNTIME_REAL + 35)
+#define EL_SP_MURPHY_CLONE (EL_FIRST_RUNTIME_REAL + 36)
+#define EL_AMOEBA_DROPPING (EL_FIRST_RUNTIME_REAL + 37)
+#define EL_QUICKSAND_EMPTYING (EL_FIRST_RUNTIME_REAL + 38)
+#define EL_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 39)
+#define EL_BD_MAGIC_WALL_ACTIVE (EL_FIRST_RUNTIME_REAL + 40)
+#define EL_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 41)
+#define EL_BD_MAGIC_WALL_FULL (EL_FIRST_RUNTIME_REAL + 42)
+#define EL_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 43)
+#define EL_BD_MAGIC_WALL_EMPTYING (EL_FIRST_RUNTIME_REAL + 44)
+#define EL_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 45)
+#define EL_BD_MAGIC_WALL_DEAD (EL_FIRST_RUNTIME_REAL + 46)
/* "unreal" (and therefore not drawable) runtime elements */
-#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 46)
+#define EL_FIRST_RUNTIME_UNREAL (EL_FIRST_RUNTIME_REAL + 47)
#define EL_BLOCKED (EL_FIRST_RUNTIME_UNREAL + 0)
#define EL_EXPLOSION (EL_FIRST_RUNTIME_UNREAL + 1)
#define PROGRAM_VERSION_MAJOR 3
#define PROGRAM_VERSION_MINOR 0
-#define PROGRAM_VERSION_PATCH 3
+#define PROGRAM_VERSION_PATCH 5
#define PROGRAM_VERSION_RELEASE 0
-#define PROGRAM_VERSION_STRING "3.0.3"
+#define PROGRAM_VERSION_STRING "3.0.5"
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
boolean is_digging;
boolean is_collecting;
+ boolean show_envelope;
+
unsigned long move_delay;
int move_delay_value;
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];