* fixed bug with custom elements digging and leaving elements
2004-03-20
* added copy and paste functions for custom change pages
* enhanced graphical display and functionality of tape recorder
2004-03-20
* added copy and paste functions for custom change pages
* enhanced graphical display and functionality of tape recorder
+ * fixed bug with custom elements digging and leaving elements
2004-03-19
* added move speed faster than "very fast" for custom elements
2004-03-19
* added move speed faster than "very fast" for custom elements
-#define COMPILE_DATE_STRING "[2004-03-21 00:07]"
+#define COMPILE_DATE_STRING "[2004-03-21 01:39]"
element_info[e].move_stepsize = move_stepsize_list[i].move_stepsize;
}
element_info[e].move_stepsize = move_stepsize_list[i].move_stepsize;
}
/* ---------- initialize move dig/leave ---------------------------------- */
for (i = 0; i < MAX_NUM_ELEMENTS; i++)
/* ---------- initialize move dig/leave ---------------------------------- */
for (i = 0; i < MAX_NUM_ELEMENTS; i++)
element_info[i].can_leave_element = FALSE;
element_info[i].can_leave_element_last = FALSE;
}
element_info[i].can_leave_element = FALSE;
element_info[i].can_leave_element_last = FALSE;
}
/* ---------- initialize gem count --------------------------------------- */
/* ---------- initialize gem count --------------------------------------- */
PlayLevelSoundAction(x, y, action);
}
PlayLevelSoundAction(x, y, action);
}
+#if 1
+ Store[newx][newy] = EL_EMPTY;
+ if (IS_EQUAL_OR_IN_GROUP(new_element, MOVE_ENTER_EL(element)) ||
+ element_info[element].move_leave_type == LEAVE_TYPE_UNLIMITED)
+ Store[newx][newy] = element_info[element].move_leave_element;
+#else
if (IS_EQUAL_OR_IN_GROUP(new_element, MOVE_ENTER_EL(element)))
element_info[element].can_leave_element = TRUE;
if (IS_EQUAL_OR_IN_GROUP(new_element, MOVE_ENTER_EL(element)))
element_info[element].can_leave_element = TRUE;
if (move_pattern & MV_MAZE_RUNNER_STYLE)
{
if (move_pattern & MV_MAZE_RUNNER_STYLE)
{
{
element = Feld[newx][newy] = EL_ACID;
}
{
element = Feld[newx][newy] = EL_ACID;
}
+#if 1
+ else if (IS_CUSTOM_ELEMENT(element) && !IS_PLAYER(x, y) &&
+ ei->move_leave_element != EL_EMPTY && Store[x][y] != EL_EMPTY)
+ {
+ /* some elements can leave other elements behind after moving */
+
+ Feld[x][y] = Store[x][y];
+ InitField(x, y, FALSE);
+
+ if (GFX_CRUMBLED(Feld[x][y]))
+ DrawLevelFieldCrumbledSandNeighbours(x, y);
+ }
+#endif
+ Store[x][y] = EL_EMPTY;
MovPos[x][y] = MovDir[x][y] = MovDelay[x][y] = 0;
MovDelay[newx][newy] = 0;
MovPos[x][y] = MovDir[x][y] = MovDelay[x][y] = 0;
MovDelay[newx][newy] = 0;
ResetGfxAnimation(x, y); /* reset animation values for old field */
ResetGfxAnimation(x, y); /* reset animation values for old field */
/* some elements can leave other elements behind after moving */
if (IS_CUSTOM_ELEMENT(element) && !IS_PLAYER(x, y) &&
ei->move_leave_element != EL_EMPTY &&
/* some elements can leave other elements behind after moving */
if (IS_CUSTOM_ELEMENT(element) && !IS_PLAYER(x, y) &&
ei->move_leave_element != EL_EMPTY &&
boolean in_group[NUM_GROUP_ELEMENTS];
boolean in_group[NUM_GROUP_ELEMENTS];
boolean can_leave_element; /* element can leave other element behind */
boolean can_leave_element_last;
boolean can_leave_element; /* element can leave other element behind */
boolean can_leave_element_last;
/* ---------- internal values used in level editor ---------- */
/* ---------- internal values used in level editor ---------- */