{ MV_ALONG_RIGHT_SIDE, "along right side" },
{ MV_TURNING_LEFT, "turning left" },
{ MV_TURNING_RIGHT, "turning right" },
+ { MV_TURNING_LEFT_RIGHT, "turning left, right" },
+ { MV_TURNING_RIGHT_LEFT, "turning right, left" },
+ { MV_TURNING_RANDOM, "turning random" },
{ MV_WHEN_PUSHED, "when pushed" },
+ { MV_WHEN_DROPPED, "when dropped" },
+#if 1
{ MV_MAZE_RUNNER, "maze runner style" },
{ MV_MAZE_HUNTER, "maze hunter style" },
+#endif
{ -1, NULL }
};
static struct ValueTextInfo options_consistency[] =
{
{ EP_CAN_EXPLODE_3X3, "can explode 3x3" },
+ { EP_CAN_EXPLODE_DYNA, "can explode 3+3" },
{ EP_CAN_EXPLODE_1X1, "can explode 1x1" },
{ EP_INDESTRUCTIBLE, "indestructible" },
{ -1, NULL }
{ CE_LEFT_BY_PLAYER, "left by player ..." },
{ CE_DROPPED_BY_PLAYER, "dropped by player" },
{ CE_SWITCHED, "switched ..." },
- { CE_COLLISION_ACTIVE, "hitting something ..." },
- { CE_COLLISION_PASSIVE, "hit by something ..." },
+#if 1
+ { CE_HITTING_SOMETHING, "hitting something ..." },
+ { CE_HIT_BY_SOMETHING, "hit by something ..." },
+#else
+ { CE_HITTING_SOMETHING, "collision ..." },
+#endif
{ CE_IMPACT, "impact (on something)" },
{ CE_SMASHED, "smashed (from above)" },
{ -1, NULL }
{ CE_OTHER_GETS_COLLECTED, "player collects" },
{ CE_OTHER_GETS_DROPPED, "player drops" },
{ CE_OTHER_IS_TOUCHING, "touching ..." },
- { CE_OTHER_IS_COLL_ACTIVE, "hitting ..." },
- { CE_OTHER_IS_COLL_PASSIVE, "hit by ..." },
+#if 1
+ { CE_OTHER_IS_HITTING, "hitting ..." },
+ { CE_OTHER_GETS_HIT, "hit by ..." },
+#endif
{ CE_OTHER_IS_SWITCHING, "switch of ..." },
{ CE_OTHER_IS_CHANGING, "change of" },
{ CE_OTHER_IS_EXPLODING, "explosion of" },
EL_BD_FIREFLY,
EL_MOLE_LEFT,
+#if 0
EL_MAZE_RUNNER,
+#else
+ EL_EMPTY,
+#endif
EL_MOLE_RIGHT,
EL_PACMAN,
int pos = 0;
int i, j;
- if (editor_elements != NULL)
- free(editor_elements);
+ checked_free(editor_elements);
if (!initialized)
{
(IS_INDESTRUCTIBLE(element) ? EP_INDESTRUCTIBLE :
CAN_EXPLODE_1X1(element) ? EP_CAN_EXPLODE_1X1 :
CAN_EXPLODE_3X3(element) ? EP_CAN_EXPLODE_3X3 :
+ CAN_EXPLODE_DYNA(element) ? EP_CAN_EXPLODE_DYNA :
custom_element.consistency);
custom_element_properties[EP_EXPLODE_RESULT] =
(IS_INDESTRUCTIBLE(element) ||
CAN_EXPLODE_1X1(element) ||
- CAN_EXPLODE_3X3(element));
+ CAN_EXPLODE_3X3(element) ||
+ CAN_EXPLODE_DYNA(element));
/* special case: sub-settings dependent from main setting */
if (CAN_EXPLODE_BY_FIRE(element))
HAS_CHANGE_EVENT(element, CE_LEFT_BY_PLAYER) ? CE_LEFT_BY_PLAYER :
HAS_CHANGE_EVENT(element, CE_DROPPED_BY_PLAYER) ? CE_DROPPED_BY_PLAYER :
HAS_CHANGE_EVENT(element, CE_SWITCHED) ? CE_SWITCHED :
- HAS_CHANGE_EVENT(element, CE_COLLISION_ACTIVE) ? CE_COLLISION_ACTIVE :
- HAS_CHANGE_EVENT(element, CE_COLLISION_PASSIVE) ? CE_COLLISION_PASSIVE :
+ HAS_CHANGE_EVENT(element, CE_HITTING_SOMETHING) ? CE_HITTING_SOMETHING :
+ HAS_CHANGE_EVENT(element, CE_HIT_BY_SOMETHING) ? CE_HIT_BY_SOMETHING :
HAS_CHANGE_EVENT(element, CE_IMPACT) ? CE_IMPACT :
HAS_CHANGE_EVENT(element, CE_SMASHED) ? CE_SMASHED :
custom_element_change.direct_action);
HAS_CHANGE_EVENT(element, CE_OTHER_GETS_COLLECTED) ? CE_OTHER_GETS_COLLECTED :
HAS_CHANGE_EVENT(element, CE_OTHER_GETS_DROPPED) ? CE_OTHER_GETS_DROPPED :
HAS_CHANGE_EVENT(element, CE_OTHER_IS_TOUCHING) ? CE_OTHER_IS_TOUCHING :
- HAS_CHANGE_EVENT(element, CE_OTHER_IS_COLL_ACTIVE) ? CE_OTHER_IS_COLL_ACTIVE :
- HAS_CHANGE_EVENT(element, CE_OTHER_IS_COLL_PASSIVE) ? CE_OTHER_IS_COLL_PASSIVE :
+ HAS_CHANGE_EVENT(element, CE_OTHER_IS_HITTING) ? CE_OTHER_IS_HITTING :
+ HAS_CHANGE_EVENT(element, CE_OTHER_GETS_HIT) ? CE_OTHER_GETS_HIT :
HAS_CHANGE_EVENT(element, CE_OTHER_IS_SWITCHING) ? CE_OTHER_IS_SWITCHING :
HAS_CHANGE_EVENT(element, CE_OTHER_IS_CHANGING) ? CE_OTHER_IS_CHANGING :
HAS_CHANGE_EVENT(element, CE_OTHER_IS_EXPLODING) ? CE_OTHER_IS_EXPLODING :
if (level.use_custom_template)
{
- if (Request("Copy and modify level tem- plate ?", REQ_ASK))
+ if (Request("Copy and modify level template ?", REQ_ASK))
{
level.use_custom_template = FALSE;
ModifyGadget(level_editor_gadget[GADGET_ID_CUSTOM_USE_TEMPLATE],
custom_element_properties[EP_INDESTRUCTIBLE] = FALSE;
custom_element_properties[EP_CAN_EXPLODE_1X1] = FALSE;
custom_element_properties[EP_CAN_EXPLODE_3X3] = FALSE;
+ custom_element_properties[EP_CAN_EXPLODE_DYNA] = FALSE;
custom_element_properties[EP_CAN_EXPLODE_BY_FIRE] = FALSE;
custom_element_properties[EP_CAN_EXPLODE_SMASHED] = FALSE;
custom_element_properties[EP_CAN_EXPLODE_IMPACT] = FALSE;
custom_element_properties[EP_EXPLODE_RESULT];
/* special case: sub-settings dependent from main setting */
- if (custom_element_properties[EP_CAN_EXPLODE_3X3] ||
- custom_element_properties[EP_CAN_EXPLODE_1X1])
+ if (custom_element_properties[EP_CAN_EXPLODE_1X1] ||
+ custom_element_properties[EP_CAN_EXPLODE_3X3] ||
+ custom_element_properties[EP_CAN_EXPLODE_DYNA])
{
custom_element_properties[EP_CAN_EXPLODE_BY_FIRE] =
custom_element.can_explode_by_fire;
custom_element_change_events[CE_LEFT_BY_PLAYER] = FALSE;
custom_element_change_events[CE_DROPPED_BY_PLAYER] = FALSE;
custom_element_change_events[CE_SWITCHED] = FALSE;
- custom_element_change_events[CE_COLLISION_ACTIVE] = FALSE;
- custom_element_change_events[CE_COLLISION_PASSIVE] = FALSE;
+ custom_element_change_events[CE_HITTING_SOMETHING] = FALSE;
+ custom_element_change_events[CE_HIT_BY_SOMETHING] = FALSE;
custom_element_change_events[CE_IMPACT] = FALSE;
custom_element_change_events[CE_SMASHED] = FALSE;
custom_element_change_events[custom_element_change.direct_action] =
custom_element_change_events[CE_OTHER_GETS_COLLECTED] = FALSE;
custom_element_change_events[CE_OTHER_GETS_DROPPED] = FALSE;
custom_element_change_events[CE_OTHER_IS_TOUCHING] = FALSE;
- custom_element_change_events[CE_OTHER_IS_COLL_ACTIVE] = FALSE;
- custom_element_change_events[CE_OTHER_IS_COLL_PASSIVE] = FALSE;
+ custom_element_change_events[CE_OTHER_IS_HITTING] = FALSE;
+ custom_element_change_events[CE_OTHER_GETS_HIT] = FALSE;
custom_element_change_events[CE_OTHER_IS_SWITCHING] = FALSE;
custom_element_change_events[CE_OTHER_IS_CHANGING] = FALSE;
custom_element_change_events[CE_OTHER_IS_EXPLODING] = FALSE;
static char *filename = NULL;
char basename[MAX_FILENAME_LEN];
- if (filename != NULL)
- free(filename);
+ checked_free(filename);
/* 1st try: look for element description file for exactly this element */
sprintf(basename, "%s.txt", element_info[element].token_name);
}
else if (type_id == ED_TEXTBUTTON_ID_SAVE_AS_TEMPLATE)
{
- boolean new_template = (!LevelFileExists(-1));
+ char *template_filename = getDefaultLevelFilename(-1);
+ boolean new_template = !fileExists(template_filename);
if (new_template ||
- Request("Save this tem- plate and kill the old ?", REQ_ASK))
+ Request("Save this template and kill the old ?", REQ_ASK))
SaveLevelTemplate();
if (new_template)
- Request("Tem- plate saved !", REQ_CONFIRM);
+ Request("Template saved !", REQ_CONFIRM);
}
else if (type_id == ED_TEXTBUTTON_ID_ADD_CHANGE_PAGE &&
custom_element.num_change_pages < MAX_CHANGE_PAGES)
}
else if (type_id == ED_CHECKBUTTON_ID_CUSTOM_USE_TEMPLATE)
{
- if (level.use_custom_template && !LevelFileExists(-1))
+ char *template_filename = getDefaultLevelFilename(-1);
+
+ if (level.use_custom_template && !fileExists(template_filename))
{
- Request("No level tem- plate found !", REQ_CONFIRM);
+ Request("No level template found !", REQ_CONFIRM);
level.use_custom_template = FALSE;
ModifyGadget(gi, GDI_CHECKED, FALSE, GDI_END);
Request("No Level without Gregor Mc Duffin please !", REQ_CONFIRM);
else
{
- boolean new_level = (!LevelFileExists(level_nr));
+ char *level_filename = getDefaultLevelFilename(level_nr);
+ boolean new_level = !fileExists(level_filename);
if (new_level ||
Request("Save this level and kill the old ?", REQ_ASK))