#define MAX_ENVELOPE_TEXT_LEN (MAX_ENVELOPE_XSIZE * MAX_ENVELOPE_YSIZE)
#define MIN_CHANGE_PAGES 1
#define MAX_CHANGE_PAGES 16
+#define MIN_ELEMENTS_IN_GROUP 1
+#define MAX_ELEMENTS_IN_GROUP 16
/* values for elements with content */
#define MIN_ELEMENT_CONTENTS 1
#define EL_BD_MAGIC_WALL 61
#define EL_INVISIBLE_STEELWALL 62
-#define EL_MAZE_RUNNER 63
+#define EL_UNUSED_63 63
#define EL_DYNABOMB_INCREASE_NUMBER 64
#define EL_DYNABOMB_INCREASE_SIZE 65
int other_action; /* change triggered by other element actions */
};
+struct ElementGroupInfo
+{
+ int num_elements; /* number of elements in this group */
+ short element[MAX_ELEMENTS_IN_GROUP]; /* list of elements in this group */
+
+ /* the following is the same as above, but with recursively resolved group
+ elements (group elements may also contain further group elements!) */
+ int num_elements_resolved;
+ short element_resolved[NUM_FILE_ELEMENTS];
+};
+
struct ElementInfo
{
/* ---------- token and description strings ---------- */
char *class_name; /* element class used in config files */
char *editor_description; /* pre-defined description for level editor */
char *custom_description; /* alternative description from config file */
- char description[MAX_ELEMENT_NAME_LEN + 1]; /* for custom elements */
+ char description[MAX_ELEMENT_NAME_LEN + 1]; /* for custom/group elements */
/* ---------- graphic and sound definitions ---------- */
int move_pattern; /* direction movable element moves to */
int move_direction_initial; /* initial direction element moves to */
int move_stepsize; /* step size element moves with */
+ int move_enter_element; /* element that can be entered (and removed) */
+ int move_leave_element; /* element that can be left behind */
int slippery_type; /* how/where other elements slip away */
int num_change_pages; /* actual number of change pages */
int current_change_page; /* currently edited change page */
+ struct ElementGroupInfo *group; /* pointer to element group info */
+
/* ---------- internal values used at runtime when playing ---------- */
unsigned long change_events; /* bitfield for combined change events */
int event_page_nr[NUM_CHANGE_EVENTS]; /* page number for each event */
struct ElementChangeInfo *event_page[NUM_CHANGE_EVENTS]; /* page for event */
+ boolean in_group[NUM_GROUP_ELEMENTS];
+
/* ---------- internal values used in level editor ---------- */
int access_type; /* walkable or passable */