void GameEnd(void)
{
+ /* used instead of "level_nr" (needed for network games) */
+ int last_level_nr = levelset.level_nr;
int hi_pos;
local_player->LevelSolved_GameEnd = TRUE;
}
}
- /* used instead of last "level_nr" (for network games) */
- hi_pos = NewHiScore(levelset.level_nr);
+ hi_pos = NewHiScore(last_level_nr);
if (hi_pos >= 0 && !setup.skip_scores_after_game)
{
SetGameStatus(GAME_MODE_SCORES);
- DrawHallOfFame(levelset.level_nr, hi_pos);
+ DrawHallOfFame(last_level_nr, hi_pos);
}
else if (setup.auto_play_next_level && setup.increment_levels &&
!network_playing)
if (!IN_LEV_FIELD(x, y) || (x == xx && y == yy))
continue;
- if (((Feld[x][y] == element ||
- (element == EL_GAME_OF_LIFE && IS_PLAYER(x, y))) &&
- !Stop[x][y]) ||
- (IS_FREE(x, y) && Stop[x][y]))
+ boolean is_player_cell = (element == EL_GAME_OF_LIFE && IS_PLAYER(x, y));
+ boolean is_neighbour = FALSE;
+
+ if (level.use_life_bugs)
+ is_neighbour =
+ (((Feld[x][y] == element || is_player_cell) && !Stop[x][y]) ||
+ (IS_FREE(x, y) && Stop[x][y]));
+ else
+ is_neighbour =
+ (Last[x][y] == element || is_player_cell);
+
+ if (is_neighbour)
num_neighbours++;
}
+ boolean is_free = FALSE;
+
+ if (level.use_life_bugs)
+ is_free = (IS_FREE(xx, yy));
+ else
+ is_free = (IS_FREE(xx, yy) && Last[xx][yy] == EL_EMPTY);
+
if (xx == ax && yy == ay) /* field in the middle */
{
if (num_neighbours < life_parameter[0] ||
changed = TRUE;
}
}
- else if (IS_FREE(xx, yy) || CAN_GROW_INTO(Feld[xx][yy]))
+ else if (is_free || CAN_GROW_INTO(Feld[xx][yy]))
{ /* free border field */
if (num_neighbours >= life_parameter[2] &&
num_neighbours <= life_parameter[3])