forced displaying last added high score entry
authorHolger Schemel <info@artsoft.org>
Fri, 14 May 2021 15:54:38 +0000 (17:54 +0200)
committerHolger Schemel <info@artsoft.org>
Fri, 14 May 2021 15:54:38 +0000 (17:54 +0200)
src/files.c
src/game.c
src/main.h
src/screens.c

index 8f04a366cdf0d546d396c6ba5658d10fa2e0d591..51e674cd96fcc7b22a2bf7980812d5687e839508 100644 (file)
@@ -8490,6 +8490,7 @@ static void setScoreInfoToDefaultsExt(struct ScoreInfo *scores)
   scores->last_added_local = -1;
 
   scores->updated = FALSE;
+  scores->force_last_added = FALSE;
 }
 
 static void setScoreInfoToDefaults(void)
index f5ed675623811390c1cfce5d1c8ce150f0b7ab69..914c25206477f1e8cd9516af34d8571618128ac4 100644 (file)
@@ -5144,9 +5144,13 @@ void NewHighScore(int level_nr)
 
 void MergeServerScore(void)
 {
+  struct ScoreEntry last_added_entry;
   boolean one_per_name = !program.many_scores_per_name;
   int i;
 
+  if (scores.last_added >= 0)
+    last_added_entry = scores.entry[scores.last_added];
+
   for (i = 0; i < server_scores.num_entries; i++)
   {
     int pos = addScoreEntry(&scores, &server_scores.entry[i], one_per_name);
@@ -5156,7 +5160,12 @@ void MergeServerScore(void)
   }
 
   if (scores.last_added >= MAX_SCORE_ENTRIES)
-    scores.last_added = -1;
+  {
+    scores.last_added = MAX_SCORE_ENTRIES - 1;
+    scores.force_last_added = TRUE;
+
+    scores.entry[scores.last_added] = last_added_entry;
+  }
 }
 
 static int getElementMoveStepsizeExt(int x, int y, int direction)
index e9844b22ec5d3bcbb80dfc09ca64cceeb10c7fb9..fe3e025c566fee4518c9a9263f71c6bc0bfd67cf 100644 (file)
@@ -3059,6 +3059,7 @@ struct ScoreInfo
   int last_added_local;
 
   boolean updated;
+  boolean force_last_added;
 
   struct ScoreEntry entry[MAX_SCORE_ENTRIES];
 };
index 2f3ff410f4818b63a661bcb5ec257fd349b7586d..4bd24b5070593206088ce0408fa54de36f9c6a00 100644 (file)
@@ -5117,6 +5117,7 @@ static void drawHallOfFameList(int level_nr, int first_entry)
   {
     int entry = first_entry + i;
     boolean active = (entry == scores.last_added);
+    boolean forced = (scores.force_last_added && active);
     int font_nr1 = (active ? FONT_TEXT_1_ACTIVE : FONT_TEXT_1);
     int font_nr2 = (active ? FONT_TEXT_2_ACTIVE : FONT_TEXT_2);
     int font_nr3 = (active ? FONT_TEXT_3_ACTIVE : FONT_TEXT_3);
@@ -5127,8 +5128,9 @@ static void drawHallOfFameList(int level_nr, int first_entry)
     int dx3 = SXSIZE - 2 * (mSX - SX + dxoff) - 5 * getFontWidth(font_nr4);
     int num_dots = (dx3 - dx2) / getFontWidth(font_nr3);
     int sy = mSY + 64 + i * 32;
+    char *pos_text = (forced ? "???" : int2str(entry + 1, 3));
 
-    DrawText(mSX, sy, int2str(entry + 1, 3), font_nr1);
+    DrawText(mSX, sy, pos_text, font_nr1);
     DrawText(mSX + dx1, sy, ".", font_nr1);
 
     for (j = 0; j < num_dots; j++)