Relax the savefile validity check a little.
[open-adventure.git] / saveresume.c
index d66854344733de47951fb7a3cd33f9eba356f72c..af71b5ed5ab3ba7672e11a5ff1d6639b0d7cb378 100644 (file)
@@ -137,7 +137,10 @@ int restore(FILE* fp)
     fclose(fp);
     if (save.version != VRSION) {
         rspeak(VERSION_SKEW, save.version / 10, MOD(save.version, 10), VRSION / 10, MOD(VRSION, 10));
-    } else if (is_valid(save.game)) {
+    } else if (!is_valid(save.game)) {
+       rspeak(SAVE_TAMPERING);
+       exit(EXIT_SUCCESS);
+    } else {
         game = save.game;
     }
     return GO_TOP;
@@ -216,7 +219,8 @@ bool is_valid(struct game_t valgame)
 
     /* Check that properties of objects aren't beyond expected */
     for (obj_t obj = 0; obj <= NOBJECTS; obj++) {
-        if (valgame.prop[obj] < STATE_NOTFOUND || valgame.prop[obj] > 1) {
+       /* Magic number -2 allows a STASHED version of state 1 */
+        if (valgame.prop[obj] < -2 || valgame.prop[obj] > 1) {
             switch (obj) {
             case RUG:
             case DRAGON:
@@ -230,7 +234,7 @@ bool is_valid(struct game_t valgame)
             case VASE:
             case CHAIN:
                 if (valgame.prop[obj] == 2) // There are multiple different states, but it's convenient to clump them together
-                    continue;
+                    continue;  // LCOV_EXCL_LINE
             /* FALLTHRU */
             case BEAR:
                 if (valgame.prop[BEAR] == CONTENTED_BEAR || valgame.prop[BEAR] == BEAR_DEAD)