X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=53ac39a7e8911e8d3af97091f7819af2073ff1b4;hb=c20136c10315df9e66a56f97db11023306032604;hp=e2308b4d4e455a345f36f9442b7f92f88cb1bf8d;hpb=44307678912a3b7b5a3222b4929976b8e229546b;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index e2308b4d..53ac39a7 100644 --- a/src/screens.c +++ b/src/screens.c @@ -4339,6 +4339,14 @@ 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; @@ -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); } @@ -4893,6 +4901,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; + *ti_ptr = node_cursor->node_group; DrawChooseTree(ti_ptr); @@ -4906,6 +4915,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, PlaySound(SND_MENU_ITEM_SELECTING); *ti_ptr = ti->node_parent; + DrawChooseTree(ti_ptr); return; @@ -4984,6 +4994,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; + *ti_ptr = node_cursor->node_group; DrawChooseTree(ti_ptr); } @@ -5002,6 +5013,7 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; + *ti_ptr = node_cursor; if (ti->type == TREE_TYPE_LEVEL_DIR) @@ -5092,16 +5104,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 +5313,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();