added function to load and merge local and server scores
authorHolger Schemel <info@artsoft.org>
Sat, 1 May 2021 15:27:46 +0000 (17:27 +0200)
committerHolger Schemel <info@artsoft.org>
Sat, 1 May 2021 15:37:15 +0000 (17:37 +0200)
src/files.c
src/files.h
src/game.c
src/main.h
src/screens.c

index eb47c4efd0e8c4c7073e5ba5e9a41a95780c894a..1adbfd740c72d7127d35043d538a6014d8123d90 100644 (file)
@@ -8438,6 +8438,7 @@ static void setScoreInfoToDefaultsExt(struct ScoreInfo *scores)
 
   scores->num_entries = 0;
   scores->last_added = -1;
+  scores->last_added_local = -1;
 }
 
 static void setScoreInfoToDefaults(void)
@@ -9052,8 +9053,6 @@ void LoadServerScore(int nr)
 
   DownloadServerScoreToCache(nr);
   LoadServerScoreFromCache(nr);
-
-  MergeServerScore();
 }
 
 static char *get_file_base64(char *filename)
@@ -9196,6 +9195,20 @@ void SaveServerScore(int nr)
   UploadScoreToServer(nr);
 }
 
+void LoadLocalAndServerScore(int nr)
+{
+  int last_added_local = scores.last_added_local;
+
+  LoadScore(nr);
+
+  // restore last added local score entry (before merging server scores)
+  scores.last_added = scores.last_added_local = last_added_local;
+
+  LoadServerScore(nr);
+
+  MergeServerScore();
+}
+
 
 // ============================================================================
 // setup file functions
index 803762db18bdcc9ae8d6cad4b1404a9688083227..bd2207a91f423b102ce79778174a938cdf96a059 100644 (file)
@@ -65,6 +65,8 @@ void SaveScore(int);
 void LoadServerScore(int);
 void SaveServerScore(int);
 
+void LoadLocalAndServerScore(int);
+
 void LoadUserNames(void);
 
 void LoadSetupFromFilename(char *);
index f783c164f8f0187e3bf438c03a8562332121410d..79ee535e7956a2c2ae4cf9764058e7e1d811c30e 100644 (file)
@@ -5133,6 +5133,9 @@ void NewHighScore(int level_nr)
       SaveScoreTape(level_nr);
       SaveServerScore(level_nr);
     }
+
+    // store last added local score entry (before merging server scores)
+    scores.last_added_local = scores.last_added;
   }
 }
 
index 2d4e61d632948ed15d5d25e509c683bec6c6efa3..fe1106db8ab74d2cc08381e4b2da1fe18b02ef31 100644 (file)
@@ -3056,6 +3056,7 @@ struct ScoreInfo
 
   int num_entries;
   int last_added;
+  int last_added_local;
 
   struct ScoreEntry entry[MAX_SCORE_ENTRIES];
 };
index 843458f9fac2eb5b1b5d895201d6ed1e1fb23327..2e9d67d27e08b6b8ecee90875b898d912fe42712 100644 (file)
@@ -5046,10 +5046,7 @@ void DrawHallOfFame(int level_nr)
   SetDrawDeactivationMask(REDRAW_NONE);
   SetDrawBackgroundMask(REDRAW_FIELD);
 
-  if (scores.last_added < 0)
-    LoadScore(level_nr);
-
-  LoadServerScore(level_nr);
+  LoadLocalAndServerScore(level_nr);
 
   if (scores.last_added >= 0)
     SetAnimStatus(GAME_MODE_PSEUDO_SCORESNEW);