Relax the savefile validity check a little.
authorEric S. Raymond <esr@thyrsus.com>
Sun, 12 Mar 2023 14:03:43 +0000 (10:03 -0400)
committerEric S. Raymond <esr@thyrsus.com>
Sun, 12 Mar 2023 14:03:43 +0000 (10:03 -0400)
There was a very old bug, probably predating the OpenAdventure port,
that would poke a stashed value of -1 into the snake object if you did
a save in endgame, and then fail the savefile validation on resume.
This was masked for a long time by a bug in put() just fixed a couple
of revisions ago.

advent.h
saveresume.c
tests/saveresume.4.chk

index 8cecf317f15a1612a11d3842b41b1d27d57fc8fe..4d1c9f39325e0f2f06e42e2f5fbe4037f4a0ed3b 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -32,7 +32,7 @@
 #define WRITE_MODE     "wb"       // b is not needed for POSIX but harmless
 
 /* Special object-state values - integers > 0 are object-specific */
-#define STATE_NOTFOUND  -1       // 'Not found" state of treasures */
+#define STATE_NOTFOUND  -1       // 'Not found" state of treasures
 #define STATE_FOUND    0         // After discovered, before messed with
 #define STATE_IN_CAVITY        1         // State value common to all gemstones
 
@@ -42,7 +42,7 @@
 
 /* Map a state property value to a negative range, where the object cannot be
  * picked up but the value can be recovered later.  Avoid colliding with -1,
- * which has its own meaning. */
+ * which has its own meaning as STATE_NOTFOUND. */
 #define STASHED(obj)   (-1 - game.prop[obj])
 
 #define PROMPT "> "
index c9278a413bf448ba6ec096a1fcbc711ac887f1c2..af71b5ed5ab3ba7672e11a5ff1d6639b0d7cb378 100644 (file)
@@ -219,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:
index 1280b2b99eaa919a84041be044f3e742f6f0f1f7..260cbf3b40c1a474c471147d098d9f86621fdd9e 100644 (file)
@@ -10,9 +10,19 @@ down a gully.
 > resume
 Can't open file y, try again.
 
-A dark fog creeps in to surround you.  From somewhere in the fog you
-hear a stern voice.  "This Adventure has been tampered with!  You have
-been dabbling in magic, knowing not the havoc you might cause thereby.
-Leave at once, before you do irrevocable harm!"  The fog thickens,
-until at last you can see nothing at all.  Your vision then clears,
-and you find yourself back in The Real World.
+You're at sw end.
+
+The grate is locked.
+
+> blast
+
+There is a loud explosion, and a twenty-foot hole appears in the far
+wall, burying the dwarves in the rubble.  You march through the hole
+and find yourself in the main office, where a cheering band of
+friendly elves carry the conquering adventurer off into the sunset.
+
+You scored 423 out of a possible 430, using 468 turns.
+
+Your score puts you in Master Adventurer Class A.
+
+To achieve the next higher rating, you need 4 more points.