added using server score if higher than (potentially truncated) local score
[rocksndiamonds.git] / src / game.c
index 87c054a211c0363e6200dd8670c984c5a90a3d21..defb1d08802b16814dc27065efd95ddd776bf296 100644 (file)
@@ -5094,7 +5094,14 @@ static int addScoreEntry(struct ScoreInfo *list, struct ScoreEntry *new_entry,
     // (special case: historic score entries have an empty tape basename entry)
     if (strEqual(new_entry->tape_basename, entry->tape_basename) &&
        !strEqual(new_entry->tape_basename, UNDEFINED_FILENAME))
+    {
+      // special case: use server score instead of local score value if higher
+      // (historic scores might have been truncated to 16-bit values locally)
+      if (score_is_better)
+       entry->score = new_entry->score;
+
       return -1;
+    }
 
     if (is_better || entry_is_empty)
     {
@@ -5993,6 +6000,10 @@ static void Explode(int ex, int ey, int phase, int mode)
       return;
   }
 
+  // this can happen if the player was just killed by an explosion
+  if (GfxElement[x][y] == EL_UNDEFINED)
+    GfxElement[x][y] = EL_EMPTY;
+
   if (phase == last_phase)
   {
     int element;