X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame.c;h=db689084c64fa6802d465fa4b5be9e34b4365b7b;hb=2da7ff2f1891503259a4650bd1badcddb5c1a186;hp=8982004f7d5baf11d3a700d75060960f7d17e20a;hpb=5d6032cc9b8eb9c26da60c742b1cc6bec08337cc;p=rocksndiamonds.git diff --git a/src/game.c b/src/game.c index 8982004f..db689084 100644 --- a/src/game.c +++ b/src/game.c @@ -4906,6 +4906,31 @@ static void LevelSolved(void) LevelSolved_SetFinalGameValues(); } +static boolean AdvanceToNextLevel(void) +{ + if (setup.increment_levels && + level_nr < leveldir_current->last_level && + !network_playing) + { + level_nr++; // advance to next level + TapeErase(); // start with empty tape + + if (setup.auto_play_next_level) + { + scores.continue_playing = TRUE; + scores.next_level_nr = level_nr; + + LoadLevel(level_nr); + + SaveLevelSetup_SeriesInfo(); + } + + return TRUE; + } + + return FALSE; +} + void GameWon(void) { static int time_count_steps; @@ -5183,23 +5208,8 @@ void GameEnd(void) // save score and score tape before potentially erasing tape below NewHighScore(last_level_nr, tape_saved); - if (setup.increment_levels && - level_nr < leveldir_current->last_level && - !network_playing) - { - level_nr++; // advance to next level - TapeErase(); // start with empty tape - - if (setup.auto_play_next_level) - { - scores.continue_playing = TRUE; - scores.next_level_nr = level_nr; - - LoadLevel(level_nr); - - SaveLevelSetup_SeriesInfo(); - } - } + // increment and load next level (if possible and not configured otherwise) + AdvanceToNextLevel(); if (scores.last_added >= 0 && setup.show_scores_after_game) { @@ -16274,7 +16284,17 @@ static void RequestRestartGame(void) int request_mode = (has_started_game ? REQ_ASK : REQ_CONFIRM); int door_state = DOOR_CLOSE_1; - if (Request(message, request_mode | REQ_STAY_OPEN) && has_started_game) + boolean restart_wanted = (Request(message, request_mode | REQ_STAY_OPEN) && has_started_game); + + // if no restart wanted, continue with next level for BD style intermission levels + if (!restart_wanted && !level_editor_test_game && level.bd_intermission) + { + boolean success = AdvanceToNextLevel(); + + restart_wanted = (success && setup.auto_play_next_level); + } + + if (restart_wanted) { CloseDoor(door_state);