X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=2b575392c2ef6d921c50f91393047e282bd63a6d;hb=c87fc56ebe59b3d5158e7e6f01d7aa9bf667737e;hp=1450e51818557cb9c5e6d937dc289ba3cd2277be;hpb=19368085952eb82c094767bf6d356963aaee50a0;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 1450e518..2b575392 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1721,6 +1721,9 @@ void DrawMainMenu(void) return; } + // reset flag to continue playing next level from hall of fame + scores.continue_playing = FALSE; + // leveldir_current may be invalid (level group, parent link, node copy) leveldir_current = getValidLevelSeries(leveldir_current, leveldir_last_valid); @@ -4336,15 +4339,20 @@ static int getAlignYOffsetFromTreeInfo(TreeInfo *ti) return align_yoffset; } +static void StartPlayingFromHallOfFame(void) +{ + level_nr = scores.next_level_nr; + LoadLevel(level_nr); + + StartGameActions(network.enabled, setup.autorecord, level.random_seed); +} + static void DrawChooseTree(TreeInfo **ti_ptr) { int fade_mask = REDRAW_FIELD; boolean restart_music = (game_status != game_status_last_screen && game_status_last_screen != GAME_MODE_SCOREINFO); - scores.continue_playing = (game_status == GAME_MODE_SCORES && - game_status_last_screen == GAME_MODE_PLAYING); - if (CheckFadeAll()) fade_mask = REDRAW_ALL; @@ -4806,10 +4814,10 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } #endif - // any mouse click or direction input stops playing the next level - if ((mx || my || dx || dy) && scores.continue_playing) + // any mouse click or cursor key stops leaving scores by "Return" key + if ((mx || my || dx || dy) && scores.continue_on_return) { - scores.continue_playing = FALSE; + scores.continue_on_return = FALSE; level_nr = scores.last_level_nr; LoadLevel(level_nr); } @@ -5092,16 +5100,13 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else if (game_status == GAME_MODE_SCORES) { - if (setup.auto_play_next_level && setup.increment_levels && - scores.last_level_nr < leveldir_current->last_level && - scores.continue_playing && - !network_playing) + if (scores.continue_playing && scores.continue_on_return) { - StartGameActions(network.enabled, setup.autorecord, - level.random_seed); + StartPlayingFromHallOfFame(); + return; } - else if (!scores.continue_playing) + else if (!scores.continue_on_return) { SetGameStatus(GAME_MODE_SCOREINFO); @@ -5304,6 +5309,7 @@ static void DrawHallOfFame_setScoreEntries(void) void DrawHallOfFame(int nr) { scores.last_level_nr = nr; + scores.continue_on_return = (game_status_last_screen == GAME_MODE_PLAYING); // (this is needed when called from GameEnd() after winning a game) KeyboardAutoRepeatOn();