removed function parameter only used for storing copy of global variable
[rocksndiamonds.git] / src / screens.c
index 8e4fb8c9a3d6638cb19fc040cc6814b6e6a5c734..d257060fa732cd0b937dd3b03fe17d12b7978e1f 100644 (file)
@@ -2172,7 +2172,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 
        SetGameStatus(GAME_MODE_SCORES);
 
-       DrawHallOfFame(level_nr, -1);
+       DrawHallOfFame(level_nr);
       }
       else if (pos == MAIN_CONTROL_EDITOR)
       {
@@ -5029,7 +5029,7 @@ void HandleChooseLevelNr(int mx, int my, int dx, int dy, int button)
   HandleChooseTree(mx, my, dx, dy, button, &level_number_current);
 }
 
-void DrawHallOfFame(int level_nr, int highlight_position)
+void DrawHallOfFame(int level_nr)
 {
   int fade_mask = REDRAW_FIELD;
 
@@ -5046,11 +5046,13 @@ void DrawHallOfFame(int level_nr, int highlight_position)
   SetDrawDeactivationMask(REDRAW_NONE);
   SetDrawBackgroundMask(REDRAW_FIELD);
 
-  if (highlight_position < 0) 
+  if (scores.last_added < 0)
     LoadScore(level_nr);
   else
     SetAnimStatus(GAME_MODE_PSEUDO_SCORESNEW);
 
+  LoadServerScore(level_nr);
+
   FadeSetEnterScreen();
 
   FadeOut(fade_mask);
@@ -5062,33 +5064,44 @@ void DrawHallOfFame(int level_nr, int highlight_position)
 
   OpenDoor(GetDoorState() | DOOR_NO_DELAY | DOOR_FORCE_REDRAW);
 
-  HandleHallOfFame(level_nr, highlight_position, 0, 0, MB_MENU_INITIALIZE);
+  HandleHallOfFame(level_nr, scores.last_added, 0, 0, MB_MENU_INITIALIZE);
 
   DrawMaskedBorder(fade_mask);
 
   FadeIn(fade_mask);
 }
 
+static int getHallOfFameFirstEntry(int first_entry, int step)
+{
+  if (step == 0)
+    first_entry = scores.last_added - (NUM_MENU_ENTRIES_ON_SCREEN + 1) / 2 + 1;
+  else
+    first_entry += step;
+
+  if (first_entry < 0)
+    first_entry = 0;
+  else if (first_entry > MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN)
+    first_entry = MAX(0, MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN);
+
+  return first_entry;
+}
+
 static char *getHallOfFameScoreText(int nr)
 {
-  // use playing time instead of score for Supaplex levels
-  if (level.rate_time_over_score ||
-      level.game_engine_type == GAME_ENGINE_TYPE_SP)
-  {
-    if (level.use_step_counter)
-      return int2str(scores.entry[nr].time, 5);
+  if (!level.rate_time_over_score)
+    return int2str(scores.entry[nr].score, 5); // show normal score
 
-    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);
+  if (level.use_step_counter)
+    return int2str(scores.entry[nr].time, 5);  // show number of steps
 
-    sprintf(score_text, "%02d:%02d", mm, ss);
+  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);
 
-    return score_text;
-  }
+  sprintf(score_text, "%02d:%02d", mm, ss);    // show playing time
 
-  return int2str(scores.entry[nr].score, 5);
+  return score_text;
 }
 
 static void drawHallOfFameList(int level_nr, int first_entry,
@@ -5145,12 +5158,7 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button)
     level_nr = mx;
     highlight_position = my;
 
-    first_entry = highlight_position - (NUM_MENU_ENTRIES_ON_SCREEN + 1) / 2 + 1;
-
-    if (first_entry < 0)
-      first_entry = 0;
-    else if (first_entry + NUM_MENU_ENTRIES_ON_SCREEN > MAX_SCORE_ENTRIES)
-      first_entry = MAX(0, MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN);
+    first_entry = getHallOfFameFirstEntry(0, 0);
 
     drawHallOfFameList(level_nr, first_entry, highlight_position);
 
@@ -5162,25 +5170,15 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button)
 
   if (dy < 0)
   {
-    if (first_entry > 0)
-    {
-      first_entry -= step;
-      if (first_entry < 0)
-       first_entry = 0;
+    first_entry = getHallOfFameFirstEntry(first_entry, -step);
 
-      drawHallOfFameList(level_nr, first_entry, highlight_position);
-    }
+    drawHallOfFameList(level_nr, first_entry, highlight_position);
   }
   else if (dy > 0)
   {
-    if (first_entry + NUM_MENU_ENTRIES_ON_SCREEN < MAX_SCORE_ENTRIES)
-    {
-      first_entry += step;
-      if (first_entry + NUM_MENU_ENTRIES_ON_SCREEN > MAX_SCORE_ENTRIES)
-       first_entry = MAX(0, MAX_SCORE_ENTRIES - NUM_MENU_ENTRIES_ON_SCREEN);
+    first_entry = getHallOfFameFirstEntry(first_entry, step);
 
-      drawHallOfFameList(level_nr, first_entry, highlight_position);
-    }
+    drawHallOfFameList(level_nr, first_entry, highlight_position);
   }
   else if (button == MB_MENU_LEAVE || button == MB_MENU_CHOICE)
   {