X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fgame.c;h=40efde17d7321a5dcac60e754bea4c0230e16ddf;hb=4df30ea516e9959b31fb1df62d7766a9df30faef;hp=fefe353d0e1194cd12a2349fdcda8981961c8895;hpb=a6d0395ba3236badfa052d8329bb42f9a440433f;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index fefe353d..40efde17 100644 --- a/src/game.c +++ b/src/game.c @@ -4667,6 +4667,8 @@ void GameWon(void) 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; @@ -4723,14 +4725,13 @@ void GameEnd(void) } } - /* 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) @@ -8929,13 +8930,28 @@ static void Life(int ax, int ay) 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] || @@ -8948,7 +8964,7 @@ static void Life(int ax, int ay) 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])