#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
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;
};
{
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 */
/* ---------- special element property values ---------- */
- boolean use_template; /* use all properties from template file */
-
boolean use_gfx_element;
short gfx_element; /* optional custom graphic element */
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