X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=c538c84e2d873fbfd92d45933694a99a087ce5dd;hb=d89d36fe4c90bdc2b0948156451cfb8fd678e473;hp=c82f2a962d6d5463c2d85565ac4d90dddf276286;hpb=94a1798d87daf68e97fa0968f7b08109868020ab;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index c82f2a96..c538c84e 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1630,9 +1630,8 @@ void DrawMainMenu(void) return; } - // leveldir_current may be invalid (level group, parent link) - if (!validLevelSeries(leveldir_current)) - leveldir_current = getFirstValidTreeInfoEntry(leveldir_last_valid); + // leveldir_current may be invalid (level group, parent link, node copy) + leveldir_current = getValidLevelSeries(leveldir_current, leveldir_last_valid); if (leveldir_current != leveldir_last_valid) { @@ -1740,15 +1739,7 @@ void DrawMainMenu(void) OpenDoor(DOOR_CLOSE_1 | DOOR_OPEN_2); -#if defined(PLATFORM_EMSCRIPTEN) - EM_ASM - ( - FS.syncfs(function(err) - { - assert(!err); - }); - ); -#endif + SyncEmscriptenFilesystem(); } static void gotoTopLevelDir(void) @@ -2166,6 +2157,9 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) SaveLevelSetup_LastSeries(); SaveLevelSetup_SeriesInfo(); + // restore level set if chosen from "last played level set" menu + RestoreLastPlayedLevels(&leveldir_current); + if (setup.internal.choose_from_top_leveldir) gotoTopLevelDir(); @@ -4856,6 +4850,11 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, HandleMainMenu_SelectLevel(0, 0, new_level_nr); } + else if (game_status == GAME_MODE_LEVELS) + { + // store level set if chosen from "last played level set" menu + StoreLastPlayedLevels(leveldir_current); + } else if (game_status == GAME_MODE_NAMES) { if (mx >= sx1_edit_name && mx <= sx2_edit_name) @@ -5070,6 +5069,24 @@ void DrawHallOfFame(int level_nr, int highlight_position) FadeIn(fade_mask); } +static char *getHallOfFameScoreText(int nr) +{ + if (!level.rate_time_over_score) + return int2str(scores.entry[nr].score, 5); + + if (level.use_step_counter) + return int2str(scores.entry[nr].time, 5); + + static char score_text[10]; + int time_seconds = scores.entry[nr].time / FRAMES_PER_SECOND; + int mm = (time_seconds / 60) % 60; + int ss = (time_seconds % 60); + + sprintf(score_text, "%02d:%02d", mm, ss); + + return score_text; +} + static void drawHallOfFameList(int level_nr, int first_entry, int highlight_position) { @@ -5103,10 +5120,10 @@ static void drawHallOfFameList(int level_nr, int first_entry, for (j = 0; j < num_dots; j++) DrawText(mSX + dx2 + j * getFontWidth(font_nr3), sy, ".", font_nr3); - if (!strEqual(highscore[entry].Name, EMPTY_PLAYER_NAME)) - DrawText(mSX + dx2, sy, highscore[entry].Name, font_nr2); + if (!strEqual(scores.entry[entry].name, EMPTY_PLAYER_NAME)) + DrawText(mSX + dx2, sy, scores.entry[entry].name, font_nr2); - DrawText(mSX + dx3, sy, int2str(highscore[entry].Score, 5), font_nr4); + DrawText(mSX + dx3, sy, getHallOfFameScoreText(entry), font_nr4); } redraw_mask |= REDRAW_FIELD;