rnd-20030703-2-src
[rocksndiamonds.git] / src / main.h
index 1108cbf76d19aa265912e6e10eb17313e9f81b10..255a6475adc66f2f3aa4786be75c8835394c871c 100644 (file)
 #define CE_TOUCHED_BY_PLAYER   1
 #define CE_PRESSED_BY_PLAYER   2
 #define CE_PUSHED_BY_PLAYER    3
-#define CE_IMPACT              4
-#define CE_SMASHED             5
-#define CE_OTHER_COLLECTING    6
-#define CE_OTHER_PUSHING       7
-#define CE_OTHER_CHANGING      8
-#define CE_OTHER_EXPLODING     9
+#define CE_COLLISION           4
+#define CE_IMPACT              5
+#define CE_SMASHED             6
+#define CE_OTHER_IS_TOUCHING   7
+#define CE_OTHER_IS_CHANGING   8
+#define CE_OTHER_IS_EXPLODING  9
+#define CE_OTHER_GETS_TOUCHED  10
+#define CE_OTHER_GETS_PRESSED  11
+#define CE_OTHER_GETS_PUSHED   12
+#define CE_OTHER_GETS_COLLECTED        13
 
 /* values for internal purpose only (level editor) */
-#define CE_BY_PLAYER           10
-#define CE_IMPACT_SMASHED      11
-#define CE_BY_OTHER            12
+#define CE_BY_PLAYER           14
+#define CE_BY_COLLISION                15
+#define CE_BY_OTHER            16
 
-#define NUM_CHANGE_EVENTS      13
+#define NUM_CHANGE_EVENTS      17
 
 #define CE_BITMASK_DEFAULT     0
 
@@ -1081,6 +1085,8 @@ struct LevelInfo
   boolean gravity;
   boolean em_slippery_gems;    /* EM style "gems slip from wall" behaviour */
 
+  boolean use_custom_template; /* use custom properties from template file */
+
   boolean no_level_file;
 };
 
@@ -1171,17 +1177,19 @@ struct ElementChangeInfo
 {
   unsigned long events;                /* bitfield for change events */
 
+  short target_element;                /* target element after change */
+
   int delay_fixed;             /* added frame delay before changed (fixed) */
   int delay_random;            /* added frame delay before changed (random) */
   int delay_frames;            /* either 1 (frames) or 50 (seconds; 50 fps) */
 
-  short trigger;               /* custom element triggering change */
-
-  short target_element;                /* target element after change */
+  short trigger_element;       /* custom element triggering change */
 
   int content[3][3];           /* new elements after extended change */
   boolean use_content;         /* use extended change content */
   boolean only_complete;       /* only use complete content */
+  boolean use_random_change;   /* use random value for setting content */
+  int random;                  /* random value for setting content */
   int power;                   /* power of extended change */
 
   boolean explode;             /* explode instead of change */
@@ -1214,8 +1222,6 @@ struct ElementInfo
 
   /* ---------- special element property values ---------- */
 
-  boolean use_template;                /* use all properties from template file */
-
   boolean use_gfx_element;
   short gfx_element;           /* optional custom graphic element */
 
@@ -1234,6 +1240,22 @@ struct ElementInfo
   int content[3][3];           /* new elements after explosion */
 
   struct ElementChangeInfo change;
+
+  /* ---------- internal values used in level editor ---------- */
+
+  int access_type;             /* walkable or passable */
+  int access_layer;            /* accessible over/inside/under */
+  int walk_to_action;          /* diggable/collectible/pushable */
+  int smash_targets;           /* can smash player/enemies/everything */
+  int deadliness;              /* deadly when running/colliding/touching */
+  int consistency;             /* indestructible/can explode */
+  int change_player_action;    /* touched/pressed/pushed by player */
+  int change_collide_action;   /* collision/impact/smashed */
+  int change_other_action;     /* various change actions */
+
+  boolean can_explode_by_fire; /* element explodes by fire */
+  boolean can_explode_smashed; /* element explodes when smashed */
+  boolean can_explode_impact;  /* element explodes on impact */
 };
 
 struct FontInfo