rnd-20030902-B-src
[rocksndiamonds.git] / src / main.h
index 1f16fcc82deec921f94ebd28c5730e55c91876e5..3b109635003994cd4c5138e51aaa587b361638a9 100644 (file)
 #define CE_OTHER_GETS_DROPPED  15
 
 /* 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
+#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
+#define CE_BY_DIRECT_ACTION    19
 
-#define NUM_CHANGE_EVENTS      19
+#define NUM_CHANGE_EVENTS      20
 
 #define CE_BITMASK_DEFAULT     0
 
 #define CH_EVENT_BIT(c)                (1 << (c))
 #define CH_EVENT_VAR(e)                (element_info[e].change->events)
+#define CH_ANY_EVENT_VAR(e)    (element_info[e].change_events)
 
 #define HAS_CHANGE_EVENT(e,c)  (IS_CUSTOM_ELEMENT(e) &&                  \
                                 (CH_EVENT_VAR(e) & CH_EVENT_BIT(c)) != 0)
+#define HAS_ANY_CHANGE_EVENT(e,c) (IS_CUSTOM_ELEMENT(e) &&               \
+                                (CH_ANY_EVENT_VAR(e) & CH_EVENT_BIT(c)) != 0)
 #define SET_CHANGE_EVENT(e,c,v)        (IS_CUSTOM_ELEMENT(e) ?                   \
                                 ((v) ?                                   \
                                  (CH_EVENT_VAR(e) |=  CH_EVENT_BIT(c)) : \
 #define GFX_SPECIAL_ARG_EDITOR                 3
 #define GFX_SPECIAL_ARG_INFO                   4
 #define GFX_SPECIAL_ARG_SETUP                  5
-#define GFX_SPECIAL_ARG_DOOR                   6
-#define GFX_SPECIAL_ARG_PREVIEW                        7
-#define GFX_SPECIAL_ARG_CRUMBLED               8
+#define GFX_SPECIAL_ARG_PLAYING                        6
+#define GFX_SPECIAL_ARG_DOOR                   7
+#define GFX_SPECIAL_ARG_PREVIEW                        8
+#define GFX_SPECIAL_ARG_CRUMBLED               9
 
-#define NUM_SPECIAL_GFX_ARGS                   9
+#define NUM_SPECIAL_GFX_ARGS                   10
 
 
 /* values for image configuration suffixes */
 #define GAME_MODE_EDITOR                       3
 #define GAME_MODE_INFO                         4
 #define GAME_MODE_SETUP                                5
-#define GAME_MODE_PSEUDO_DOOR                  6
-#define GAME_MODE_PSEUDO_PREVIEW               7
-#define GAME_MODE_PSEUDO_CRUMBLED              8
+#define GAME_MODE_PLAYING                      6
+#define GAME_MODE_PSEUDO_DOOR                  7
+#define GAME_MODE_PSEUDO_PREVIEW               8
+#define GAME_MODE_PSEUDO_CRUMBLED              9
 
 /* there are no special config file suffixes for these modes */
-#define GAME_MODE_PLAYING                      9
 #define GAME_MODE_PSEUDO_TYPENAME              10
 #define GAME_MODE_QUIT                         11
 
@@ -1233,6 +1238,8 @@ struct DoorInfo
 
 struct ElementChangeInfo
 {
+  boolean can_change;          /* use or ignore this change info */
+
   unsigned long events;                /* bitfield for change events */
 
   short target_element;                /* target element after change */
@@ -1260,9 +1267,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
@@ -1317,10 +1323,13 @@ struct ElementInfo
   int num_change_pages;                /* actual number of change pages */
   int current_change_page;     /* currently edited change page */
 
-  /* ---------- internal values used in game at runtime ---------- */
+  /* ---------- internal values used at runtime when playing ---------- */
 
   unsigned long change_events; /* bitfield for combined change events */
 
+  int event_page_num[NUM_CHANGE_EVENTS]; /* page number for each event */
+  struct ElementChangeInfo *event_page[NUM_CHANGE_EVENTS]; /* page for event */
+
   /* ---------- internal values used in level editor ---------- */
 
   int access_type;             /* walkable or passable */