rnd-20030921-1-src
[rocksndiamonds.git] / src / main.h
index 68ad89ca303d0a240c3c656f0e3d25204e26c355..1d0375f1a8fdc8f08f1dd799aa998ca35b38693b 100644 (file)
 #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_OTHER_GETS_PUSHED   13
 #define CE_OTHER_GETS_COLLECTED        14
 #define CE_OTHER_GETS_DROPPED  15
+#define CE_BY_PLAYER           16 /* obsolete; map'd to CE_BY_DIRECT_ACTION */
+#define CE_BY_COLLISION                17 /* obsolete; map'd to CE_BY_DIRECT_ACTION */
+#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
 
-/* values for activating change events (also stored in level file!) */
-#define CE_BY_PLAYER           16
-#define CE_BY_COLLISION                17
-#define CE_BY_OTHER            18
+/* 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      19
+#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 GFX_ARG_GLOBAL_SYNC                    15
 #define GFX_ARG_CRUMBLED_LIKE                  16
 #define GFX_ARG_DIGGABLE_LIKE                  17
-#define GFX_ARG_STEP_OFFSET                    18
-#define GFX_ARG_STEP_DELAY                     19
-#define GFX_ARG_DIRECTION                      20
-#define GFX_ARG_POSITION                       21
-#define GFX_ARG_DRAW_XOFFSET                   22
-#define GFX_ARG_DRAW_YOFFSET                   23
-#define GFX_ARG_NAME                           24
+#define GFX_ARG_BORDER_SIZE                    18
+#define GFX_ARG_STEP_OFFSET                    19
+#define GFX_ARG_STEP_DELAY                     20
+#define GFX_ARG_DIRECTION                      21
+#define GFX_ARG_POSITION                       22
+#define GFX_ARG_DRAW_XOFFSET                   23
+#define GFX_ARG_DRAW_YOFFSET                   24
+#define GFX_ARG_DRAW_MASKED                    25
+#define GFX_ARG_NAME                           26
 
-#define NUM_GFX_ARGS                           25
+#define NUM_GFX_ARGS                           27
 
 
 /* values for sound configuration suffixes */
 
 #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"
@@ -1092,6 +1102,8 @@ struct PlayerInfo
   boolean is_digging;
   boolean is_collecting;
 
+  boolean show_envelope;
+
   unsigned long move_delay;
   int move_delay_value;
 
@@ -1266,9 +1278,8 @@ struct ElementChangeInfo
 
   /* ---------- internal values used in level editor ---------- */
 
-  int player_action;           /* touched/pressed/pushed by player */
-  int collide_action;          /* collision/impact/smashed */
-  int other_action;            /* various change actions */
+  int direct_action;           /* change triggered by actions on element */
+  int other_action;            /* change triggered by other element actions */
 };
 
 struct ElementInfo
@@ -1371,12 +1382,15 @@ struct GraphicInfo
   boolean anim_global_sync;
   int crumbled_like;           /* element for cloning crumble graphics */
   int diggable_like;           /* element for cloning digging graphics */
+  int border_size;             /* border size for "crumbled" graphics */
 
   int step_offset;             /* optional step offset of toon animations */
   int step_delay;              /* optional step delay of toon animations */
 
   int draw_x, draw_y;          /* optional offset for drawing fonts chars */
 
+  int draw_masked;             /* optional setting for drawing envelope gfx */
+
 #if defined(TARGET_X11_NATIVE_PERFORMANCE_WORKAROUND)
   Pixmap clip_mask;            /* single-graphic-only clip mask for X11 */
   GC clip_gc;                  /* single-graphic-only clip gc for X11 */
@@ -1437,7 +1451,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                 Changing[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];