#define EP_DROPPABLE 22
#define EP_CAN_EXPLODE_1X1 23
#define EP_PUSHABLE 24
+#define EP_CAN_EXPLODE_DYNA 25
/* values for pre-defined properties */
#define EP_PLAYER 32
#define CE_PRESSED_BY_PLAYER 2
#define CE_PUSHED_BY_PLAYER 3
#define CE_DROPPED_BY_PLAYER 4
-#define CE_COLLISION_ACTIVE 5
+#define CE_HITTING_SOMETHING 5
#define CE_IMPACT 6
#define CE_SMASHED 7
#define CE_OTHER_IS_TOUCHING 8
#define CE_OTHER_GETS_LEFT 24
#define CE_SWITCHED 25
#define CE_OTHER_IS_SWITCHING 26
-#define CE_COLLISION_PASSIVE 27
-#define CE_OTHER_IS_COLL_ACTIVE 28
-#define CE_OTHER_IS_COLL_PASSIVE 29
+#define CE_HIT_BY_SOMETHING 27
+#define CE_OTHER_IS_HITTING 28
+#define CE_OTHER_GETS_HIT 29
#define NUM_CHANGE_EVENTS 30
#define MV_BIT_WHEN_PUSHED 10
#define MV_BIT_MAZE_RUNNER 11
#define MV_BIT_MAZE_HUNTER 12
-#define MV_BIT_PROJECTILE 13
+#define MV_BIT_WHEN_DROPPED 13
#define MV_BIT_TURNING_LEFT_RIGHT 14
#define MV_BIT_TURNING_RIGHT_LEFT 15
#define MV_BIT_TURNING_RANDOM 16
#define MV_MAZE_RUNNER (1 << MV_BIT_MAZE_RUNNER)
#define MV_MAZE_HUNTER (1 << MV_BIT_MAZE_HUNTER)
#define MV_MAZE_RUNNER_STYLE (MV_MAZE_RUNNER | MV_MAZE_HUNTER)
-#define MV_PROJECTILE (1 << MV_BIT_PROJECTILE)
+#define MV_WHEN_DROPPED (1 << MV_BIT_WHEN_DROPPED)
#define MV_TURNING_LEFT_RIGHT (1 << MV_BIT_TURNING_LEFT_RIGHT)
#define MV_TURNING_RIGHT_LEFT (1 << MV_BIT_TURNING_RIGHT_LEFT)
#define MV_TURNING_RANDOM (1 << MV_BIT_TURNING_RANDOM)
#define IS_DROPPABLE(e) HAS_PROPERTY(e, EP_DROPPABLE)
#define CAN_EXPLODE_1X1(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_1X1)
#define IS_PUSHABLE(e) HAS_PROPERTY(e, EP_PUSHABLE)
+#define CAN_EXPLODE_DYNA(e) HAS_PROPERTY(e, EP_CAN_EXPLODE_DYNA)
/* macros for special configurable properties */
#define IS_EM_SLIPPERY_WALL(e) HAS_PROPERTY(e, EP_EM_SLIPPERY_WALL)
#define IS_CUSTOM_ELEMENT(e) ((e) >= EL_CUSTOM_START && \
(e) <= EL_CUSTOM_END)
+#define IS_GROUP_ELEMENT(e) ((e) >= EL_GROUP_START && \
+ (e) <= EL_GROUP_END)
+
#define IS_ENVELOPE(e) ((e) >= EL_ENVELOPE_1 && \
(e) <= EL_ENVELOPE_4)
#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 MICROLABEL_YPOS (MICROLEV_YPOS + MICROLEV_YSIZE + 7)
+/* score for elements */
+#define SC_EMERALD 0
+#define SC_DIAMOND 1
+#define SC_BUG 2
+#define SC_SPACESHIP 3
+#define SC_YAMYAM 4
+#define SC_ROBOT 5
+#define SC_PACMAN 6
+#define SC_NUT 7
+#define SC_DYNAMITE 8
+#define SC_KEY 9
+#define SC_TIME_BONUS 10
+#define SC_CRYSTAL 11
+#define SC_PEARL 12
+#define SC_SHIELD 13
+
+
/* "real" level file elements */
#define EL_UNDEFINED -1
#define EL_ENVELOPE_3 622
#define EL_ENVELOPE_4 623
-#define NUM_FILE_ELEMENTS 624
+/* ---------- begin of group elements section ------------------------------ */
+#define EL_GROUP_START 624
+
+#include "conf_grp.h" /* include auto-generated data structure definitions */
+
+#define NUM_GROUP_ELEMENTS 32
+#define EL_GROUP_END 655
+/* ---------- end of custom elements section ------------------------------- */
+
+#define NUM_FILE_ELEMENTS 656
/* "real" (and therefore drawable) runtime elements */
boolean is_collecting;
boolean is_pushing;
boolean is_switching;
+ boolean is_dropping;
boolean is_bored;
boolean is_sleeping;
unsigned long move_delay;
int move_delay_value;
+ int move_delay_reset_counter;
+
unsigned long push_delay;
unsigned long push_delay_value;
int music[MAX_LEVELS];
};
+struct LevelFileInfo
+{
+ int nr;
+ int type;
+ char *filename;
+};
+
struct LevelInfo
{
int file_version; /* file format version the level is stored with */
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 */
+};
+
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 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 */