RelocatePlayer(x, y, target_element);
}
-static void ChangeElementNow(int x, int y, int element, int page)
+static boolean ChangeElementNow(int x, int y, int element, int page)
{
struct ElementChangeInfo *change = &element_info[element].change_page[page];
+ if (Changed[x][y]) /* do not change already changed elements */
+ return FALSE;
+
Changed[x][y] = TRUE; /* no more changes in this frame */
CheckTriggeredElementChange(x, y, Feld[x][y], CE_OTHER_IS_CHANGING);
if (change->explode)
{
Bang(x, y);
- return;
+
+ return TRUE;
}
if (change->use_content)
if (change->only_complete && change->use_random_change &&
RND(100) < change->random)
- return;
+ return FALSE;
for (yy = 0; yy < 3; yy++) for(xx = 0; xx < 3 ; xx++)
{
PlaySoundLevelElementAction(x, y, element, ACTION_CHANGING);
}
+
+ return TRUE;
}
static void ChangeElement(int x, int y, int page)
return;
}
- ChangeElementNow(x, y, element, page);
-
- if (change->post_change_function)
- change->post_change_function(x, y);
+ if (ChangeElementNow(x, y, element, page))
+ {
+ if (change->post_change_function)
+ change->post_change_function(x, y);
+ }
}
}
if (x == lx && y == ly) /* do not change trigger element itself */
continue;
+#if 0
if (Changed[x][y]) /* do not change already changed elements */
continue;
+#endif
if (Feld[x][y] == element)
{