SCAN_PLAYFIELD(x, y)
{
- Feld[x][y] = level.field[x][y];
+ Feld[x][y] = Last[x][y] = level.field[x][y];
MovPos[x][y] = MovDir[x][y] = MovDelay[x][y] = 0;
ChangeDelay[x][y] = 0;
ChangePage[x][y] = -1;
Feld[ExitX][ExitY] =
(element == EL_EXIT_OPEN ? EL_EXIT_CLOSING :
- element == EL_EM_EXIT_OPEN ? EL_EM_EXIT_CLOSING :
- element == EL_SP_EXIT_OPEN ? EL_SP_EXIT_CLOSING:
+ element == EL_EM_EXIT_OPEN ? EL_EM_EXIT_CLOSING :
+ element == EL_SP_EXIT_OPEN ? EL_SP_EXIT_CLOSING:
element == EL_STEEL_EXIT_OPEN ? EL_STEEL_EXIT_CLOSING:
EL_EM_STEEL_EXIT_CLOSING);
for (y1 = -1; y1 < 2; y1++) for (x1 = -1; x1 < 2; x1++)
{
int xx = ax+x1, yy = ay+y1;
- int nachbarn = 0;
+ int old_element = Feld[xx][yy];
+ int num_neighbours = 0;
if (!IN_LEV_FIELD(xx, yy))
continue;
(element == EL_GAME_OF_LIFE && IS_PLAYER(x, y))) &&
!Stop[x][y]) ||
(IS_FREE(x, y) && Stop[x][y]))
- nachbarn++;
+ num_neighbours++;
}
if (xx == ax && yy == ay) /* field in the middle */
{
- if (nachbarn < life_parameter[0] ||
- nachbarn > life_parameter[1])
+ if (num_neighbours < life_parameter[0] ||
+ num_neighbours > life_parameter[1])
{
Feld[xx][yy] = EL_EMPTY;
- if (!Stop[xx][yy])
+ if (Feld[xx][yy] != old_element)
TEST_DrawLevelField(xx, yy);
Stop[xx][yy] = TRUE;
changed = TRUE;
}
else if (IS_FREE(xx, yy) || CAN_GROW_INTO(Feld[xx][yy]))
{ /* free border field */
- if (nachbarn >= life_parameter[2] &&
- nachbarn <= life_parameter[3])
+ if (num_neighbours >= life_parameter[2] &&
+ num_neighbours <= life_parameter[3])
{
Feld[xx][yy] = element;
MovDelay[xx][yy] = (element == EL_GAME_OF_LIFE ? 0 : life_time-1);
- if (!Stop[xx][yy])
+ if (Feld[xx][yy] != old_element)
TEST_DrawLevelField(xx, yy);
Stop[xx][yy] = TRUE;
changed = TRUE;
SCAN_PLAYFIELD(x, y)
{
+ Last[x][y] = Feld[x][y];
+
ChangeCount[x][y] = 0;
ChangeEvent[x][y] = -1;
if (local_player->players_still_needed > 0)
local_player->players_still_needed--;
+
+ /* also set if some players not yet gone, but not needed to solve level */
+ if (local_player->players_still_needed == 0)
+ AllPlayersGone = TRUE;
}
static void setFieldForSnapping(int x, int y, int element, int direction)