Merge branch 'master' into actions-arithmetic
authorPeje Nilsson <peje66@gmail.com>
Fri, 16 Jun 2017 08:10:38 +0000 (10:10 +0200)
committerPeje Nilsson <peje66@gmail.com>
Fri, 16 Jun 2017 08:10:38 +0000 (10:10 +0200)
Makefile
actions.c
advent.h
main.c
misc.c
notes.adoc
score.c
tests/seedcrash.chk [new file with mode: 0644]
tests/seedcrash.log [new file with mode: 0644]

index 88fd80719260b4c08fa344158f4a1a41039c2add..3c0e965e14bace008c5444111b57306bd6966fad 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -22,7 +22,7 @@
 VERS=1.0
 
 CC?=gcc
-CCFLAGS+=-std=c99 -D _DEFAULT_SOURCE -Wall -Wpedantic -g
+CCFLAGS+=-std=c99 -D _DEFAULT_SOURCE -Wall -Wpedantic -Wextra -g
 LIBS=
 UNAME_S := $(shell uname -s)
 ifeq ($(UNAME_S),Linux)
index baebd0c45e629e613e99385096022fbe15c57711..8b4f938aa694f2afe91e9c1c1ccb3b66838a4514 100644 (file)
--- a/actions.c
+++ b/actions.c
@@ -614,7 +614,7 @@ static int fly(token_t verb, token_t obj)
     return GO_TERMINATE;
 }
 
-static int inven(token_t obj)
+static int inven(void)
 /* Inventory. If object, treat same as find.  Else report on current burden. */
 {
     int spk=NO_CARRY;
@@ -1087,7 +1087,7 @@ int action(FILE *input, enum speechpart part, long verb, token_t obj)
                    case 16: /* TOSS  */ return GO_UNKNOWN; 
                    case 17: /* QUIT  */ return quit(input);   
                    case 18: /* FIND  */ return GO_UNKNOWN; 
-                   case 19: /* INVEN */ return inven(obj);   
+                   case 19: /* INVEN */ return inven();
                    case 20: /* FEED  */ return GO_UNKNOWN; 
                    case 21: /* FILL  */ return fill(verb, obj);   
                    case 22: /* BLAST */ return blast();   
index 6ddbbbe37879fbffda30561eb8421ca6b4622395..1f2bd8c893d18c1ef40a0009992b67c1746bef6b 100644 (file)
--- a/advent.h
+++ b/advent.h
@@ -12,7 +12,8 @@
 #define MAXPARMS       25
 #define INVLIMIT       7
 #define INTRANSITIVE   -1              /* illegal object number */
-#define SPECIALBASE    300             /* base umber of special rooms */
+#define SPECIALBASE    300             /* base number of special rooms */
+#define WARNTIME       30              /* late game starts at game.limit-this */
 
 typedef long token_t;  /* word token - someday this will be char[TOKLEN+1] */
 typedef long vocab_t;  /* index into a vocabulary array */
diff --git a/main.c b/main.c
index 3d4962ab9e6433117ae53358ab21ce5be2d6053e..fbd7de04dd5cd7d69fce6cd65d1578759c5984f5 100644 (file)
--- a/main.c
+++ b/main.c
@@ -248,8 +248,8 @@ static void checkhints(FILE *cmdin)
                SETPRM(1,HINTS[hint][2],HINTS[hint][2]);
                RSPEAK(HINT_COST);
                game.hinted[hint]=YES(cmdin,WANT_HINT,HINTS[hint][4],OK_MAN);
-               if (game.hinted[hint] && game.limit > 30)
-                   game.limit=game.limit+30*HINTS[hint][2];
+               if (game.hinted[hint] && game.limit > WARNTIME)
+                   game.limit += WARNTIME*HINTS[hint][2];
            }
        }
     }
@@ -831,7 +831,7 @@ static void lampcheck(void)
      *  Second is for other cases of lamp dying.  12400 is when it
      *  goes out.  Even then, he can explore outside for a while
      *  if desired. */
-    if (game.limit<=30 && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
+    if (game.limit <= WARNTIME && HERE(BATTER) && game.prop[BATTER]==0 && HERE(LAMP))
     {
        RSPEAK(REPLACE_BATTERIES);
        game.prop[BATTER]=1;
@@ -844,7 +844,7 @@ static void lampcheck(void)
        game.prop[LAMP]=0;
        if (HERE(LAMP))
            RSPEAK(LAMP_OUT);
-    } else if (game.limit <= 30) {
+    } else if (game.limit <= WARNTIME) {
        if (!game.lmwarn && HERE(LAMP)) {
            game.lmwarn=true;
            int spk=GET_BATTERIES;
@@ -1058,7 +1058,7 @@ static bool do_command(FILE *cmdin)
        if (i == -1) {
            /* Gee, I don't understand. */
            if (fallback_handler(rawbuf))
-               return true;
+               continue;
            SETPRM(1,WD1,WD1X);
            RSPEAK(DONT_KNOW);
            goto L2600;
diff --git a/misc.c b/misc.c
index b0f24b803e328cec5e9e60f1a2067a8854049c34..243381a86330d1df2221b4f3ee6975b8b5cd6b34 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -67,7 +67,7 @@ void newspeak(char* msg)
  
   // Handle format specifiers (including the custom %C, %L, %S) by adjusting the parameter accordingly, and replacing the specifier with %s.
   int pi = 0; // parameter index
-  for (int i = 0; i < strlen(msg); ++i)
+  for (int i = 0; i < (int)strlen(msg); ++i)
     {
       if (msg[i] == '%')
        {
@@ -105,7 +105,7 @@ void newspeak(char* msg)
            {
              copy[i + 1] = 's';
              packed_to_token(PARMS[pi], parameters[pi]);
-             for (int j = 0; j < strlen(parameters[pi]); ++j)
+             for (int j = 0; j < (int)strlen(parameters[pi]); ++j)
                {
                  parameters[pi][j] = tolower(parameters[pi][j]);
                }
@@ -116,7 +116,7 @@ void newspeak(char* msg)
            {
              copy[i + 1] = 's';
              packed_to_token(PARMS[pi], parameters[pi]);
-             for (int j = 0; j < strlen(parameters[pi]); ++j)
+             for (int j = 0; j < (int)strlen(parameters[pi]); ++j)
                {
                  parameters[pi][j] = tolower(parameters[pi][j]);
                }
index cc4246c440abadd0b4b0605988261214a9e2ba3a..fd3504a6f2ce68a4d62668690e3b4542f0cf070e 100644 (file)
@@ -11,7 +11,7 @@ The principal maintainers of this code are Eric S. Raymond and Jason
 Ninneman.  Eric received Don Woods's encouragement to update and ship
 the game; Jason signed on early in the process to help. The assistance
 of Peje Nilsson in restructuring some particularly grotty gotos is
-gratefully acknowledged.
+gratefully acknowledged. Petr Voropaev contributed fuzz testing.
 
 == Nomenclature ==
 
@@ -113,6 +113,7 @@ ways:
   We don't need whatever minor performance gains this might collect,
   and the choice to refrain will make forward translation into future
   languages easier.
+
 * There are a few gotos left that resist restructuring; all of these
   are in the principal command interpreter function implementing its
   state machine.
@@ -124,10 +125,13 @@ ways:
   compromise forward-portability to other languages.
 
 * The code still has an unfortunately high density of magic numbers - in
-  particular, numeric object and room IDs.  There are plans to fix this.
+  particular, numeric object IDs.  There are plans to fix this.
 
 * Much of the code still uses FORTRAN-style uppercase names.
 
+* The code still assumes one-origin array indexing.  Thus, arrays are
+  a cell larger than they strictly need to be and cell 0 is unused.
+
 * The code is still mostly typeless, slinging around machine longs
   like a FORTRAN or BCPL program.  Some (incomplete) effort has been made
   to introduce semantic types.
diff --git a/score.c b/score.c
index a9ab765aed73e90261230c6f08f1a5e12ad853eb..594b637578d1270822c9b183218efaeba26ab2e3 100644 (file)
--- a/score.c
+++ b/score.c
@@ -110,7 +110,7 @@ void score(enum termination mode)
     SETPRM(1,score,mxscor);
     SETPRM(3,game.turns,game.turns);
     RSPEAK(TOTAL_SCORE);
-    for (long i=1; i<=CLSSES; i++) {
+    for (long i=1; i<=(long)CLSSES; i++) {
        if(CVAL[i] >= score) {
            newspeak(class_messages[i]);
            i=CVAL[i]+1-score;
diff --git a/tests/seedcrash.chk b/tests/seedcrash.chk
new file mode 100644 (file)
index 0000000..ca74e94
--- /dev/null
@@ -0,0 +1,1304 @@
+
+Welcome to Adventure!!  Would you like instructions?
+
+> n
+
+You are standing at the end of a road before a small brick building.
+Around you is a forest.  A small stream flows out of the building and
+down a gully.
+
+> seed 1635997320
+Seed set to 1635997320
+
+You're in front of building.
+
+> in
+
+You are inside a building, a well house for a large spring.
+
+There are some keys on the ground here.
+
+There is a shiny brass lamp nearby.
+
+There is food here.
+
+There is a bottle of water here.
+
+> take lamp
+
+OK
+
+> xyzzy
+
+>>Foof!<<
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> take rod
+
+OK
+
+> e
+
+You are crawling over cobbles in a low passage.  There is a dim light
+at the east end of the passage.
+
+There is a small wicker cage discarded nearby.
+
+> take cage
+
+OK
+
+> w
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> on
+
+Your lamp is now on.
+
+You are in a debris room filled with stuff washed in from the surface.
+A low wide passage with cobbles becomes plugged with mud and debris
+here, but an awkward canyon leads upward and west.  In the mud someone
+has scrawled, "MAGIC WORD XYZZY".
+
+> w
+
+You are in an awkward sloping east/west canyon.
+
+> w
+
+You are in a splendid chamber thirty feet high.  The walls are frozen
+rivers of orange stone.  An awkward canyon and a good passage exit
+from east and west sides of the chamber.
+
+A cheerful little bird is sitting here singing.
+
+> drop rod
+
+OK
+
+> take bird
+
+OK
+
+> take rod
+
+OK
+
+> w
+
+At your feet is a small pit breathing traces of white mist.  An east
+passage ends here except for a small crack leading on.
+
+Rough stone steps lead down the pit.
+
+> free bird
+
+OK
+
+> wave rod
+
+The bird flies about agitatedly for a moment, then disappears through
+the crack.  It reappears shortly, carrying in its beak a jade
+necklace, which it drops at your feet.
+
+> drop rod
+
+OK
+
+> take bird
+
+OK
+
+> take jade
+
+OK
+
+> e
+
+You're in bird chamber.
+
+> e
+
+You are in an awkward sloping east/west canyon.
+
+> e
+
+You're in debris room.
+
+> off
+
+Your lamp is now off.
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> xyzzy
+
+>>Foof!<<
+
+You're inside building.
+
+There are some keys on the ground here.
+
+There is food here.
+
+There is a bottle of water here.
+
+> drop jade
+
+OK
+
+> xyzzy
+
+>>Foof!<<
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> on
+
+Your lamp is now on.
+
+You're in debris room.
+
+> w
+
+You are in an awkward sloping east/west canyon.
+
+> w
+
+You're in bird chamber.
+
+> w
+
+You're at top of small pit.
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+Rough stone steps lead down the pit.
+
+> take rod
+
+OK
+
+> d
+
+You are at one end of a vast hall stretching forward out of sight to
+the west.  There are openings to either side.  Nearby, a wide stone
+staircase leads downward.  The hall is filled with wisps of white mist
+swaying to and fro almost as if alive.  A cold wind blows up the
+staircase.  There is a passage at the top of a dome behind you.
+
+Rough stone steps lead up the dome.
+
+> w
+
+You are on the east bank of a fissure slicing clear across the hall.
+The mist is quite thick here, and the fissure is too wide to jump.
+
+> wave rod
+
+The bird flies agitatedly about the cage.
+
+A crystal bridge now spans the fissure.
+
+> drop rod
+
+OK
+
+> e
+
+You're in Hall of Mists.
+
+Rough stone steps lead up the dome.
+
+> n
+
+You are in the Hall of the Mountain King, with passages off in all
+directions.
+
+A huge green fierce snake bars the way!
+
+> free bird
+
+The little bird attacks the green snake, and in an astounding flurry
+drives the snake away.
+
+> take bird
+
+OK
+
+> s
+
+You are in the south side chamber.
+
+There is precious jewelry here!
+
+> take jewelry
+
+OK
+
+> n
+
+You're in Hall of Mt King.
+
+> sw
+
+You are in a secret canyon which here runs e/w.  It crosses over a
+very tight canyon 15 feet below.  If you go down you may not be able
+to get back up.
+
+> w
+
+You are in a secret canyon which exits to the north and east.
+
+A huge green fierce dragon bars the way!
+
+The dragon is sprawled out on a persian rug!!
+
+> feed dragon
+
+There's nothing here it wants to eat (except perhaps you).
+
+> kill dragon
+
+With what?  Your bare hands?
+
+> yes
+
+Congratulations!  You have just vanquished a dragon with your bare
+hands!  (Unbelievable, isn't it?)
+
+You are in a secret canyon which exits to the north and east.
+
+There is a persian rug spread out on the floor!
+
+The blood-specked body of a huge green dead dragon lies to one side.
+
+> drink blood
+
+Your head buzzes strangely for a moment.
+
+> take rug
+
+OK
+
+> e
+
+You're in secret e/w canyon above tight canyon.
+
+> e
+
+You're in Hall of Mt King.
+
+> n
+
+You are in a low n/s passage at a hole in the floor.  The hole goes
+down to an e/w passage.
+
+There are bars of silver here!
+
+> take silver
+
+OK
+
+> n
+
+You are in a large room, with a passage to the south, a passage to the
+west, and a wall of broken rock to the east.  There is a large "Y2" on
+a rock in the room's center.
+
+> off
+
+Your lamp is now off.
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> plugh
+
+>>Foof!<<
+
+You're inside building.
+
+A precious jade necklace has been dropped here!
+
+There are some keys on the ground here.
+
+There is food here.
+
+There is a bottle of water here.
+
+> drop jewelry
+
+OK
+
+> drop rug
+
+OK
+
+> drop silver
+
+OK
+
+> out
+
+You're in front of building.
+
+> s
+
+You are in a valley in the forest beside a stream tumbling along a
+rocky bed.
+
+> w
+
+You are wandering aimlessly through the forest.
+
+> n
+
+You are wandering aimlessly through the forest.
+
+Your keen eye spots a severed leporine appendage lying on the ground.
+
+> take appendage
+
+OK
+
+> free bird
+
+OK
+
+> drop cage
+
+OK
+
+> listen
+
+The bird is singing to you in gratitude for your having returned it to
+its home.  In return, it informs you of a magic word which it thinks
+you may find useful somewhere near the Hall of Mists.  The magic word
+changes frequently, but for now the bird believes it is "F'UNJ".  You
+thank the bird for this information, and it flies off into the forest.
+
+> s
+
+You are wandering aimlessly through the forest.
+
+> s
+
+You're in valley.
+
+> n
+
+You're in front of building.
+
+> in
+
+You're inside building.
+
+There are bars of silver here!
+
+There is a persian rug spread out on the floor!
+
+There is precious jewelry here!
+
+A precious jade necklace has been dropped here!
+
+There are some keys on the ground here.
+
+There is food here.
+
+There is a bottle of water here.
+
+> take water
+
+OK
+
+> plugh
+
+>>Foof!<<
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> on
+
+Your lamp is now on.
+
+You're at "Y2".
+
+> plover
+
+>>Foof!<<
+
+You're in a small chamber lit by an eerie green light.  An extremely
+narrow tunnel exits to the west.  A dark corridor leads ne.
+
+There is an emerald here the size of a plover's egg!
+
+> ne
+
+You're in the dark-room.  A corridor leading south is the only exit.
+
+A massive stone tablet imbedded in the wall reads:
+"Congratulations on bringing light into the dark-room!"
+
+There is a platinum pyramid here, 8 inches on a side!
+
+> take pyramid
+
+OK
+
+> s
+
+You're in Plover Room.
+
+There is an emerald here the size of a plover's egg!
+
+> plover
+
+>>Foof!<<
+
+You're at "Y2".
+
+A hollow voice says "PLUGH".
+
+> s
+
+You're in n/s passage above e/w passage.
+
+> d
+
+A little dwarf just walked around a corner, saw you, threw a little
+axe at you which missed, cursed, and ran away.
+
+You are in a dirty broken passage.  To the east is a crawl.  To the
+west is a large passage.  Above you is a hole to another passage.
+
+There is a little axe here.
+
+> take axe
+
+OK
+
+> u
+
+There is a threatening little dwarf in the room with you!
+
+You're in n/s passage above e/w passage.
+
+> s
+
+There is a threatening little dwarf in the room with you!
+
+You're in Hall of Mt King.
+
+> up
+
+There is a threatening little dwarf in the room with you!
+
+You're in Hall of Mists.
+
+Rough stone steps lead up the dome.
+
+> w
+
+There is a threatening little dwarf in the room with you!
+
+You're on east bank of fissure.
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+A crystal bridge now spans the fissure.
+
+> w
+
+There is a threatening little dwarf in the room with you!
+
+You are on the west side of the fissure in the Hall of Mists.
+
+There are diamonds here!
+
+A crystal bridge now spans the fissure.
+
+> w
+
+There is a threatening little dwarf in the room with you!
+
+You are at the west end of the Hall of Mists.  A low wide crawl
+continues west and another goes north.  To the south is a little
+passage 6 feet off the floor.
+
+> w
+
+There are 2 threatening little dwarves in the room with you.
+
+One sharp nasty knife is thrown at you!
+
+It misses!
+
+You are at the east end of a very long hall apparently without side
+chambers.  To the east a low wide crawl slants up.  To the north a
+round two foot hole slants down.
+
+> throw axe
+
+You killed a little dwarf.  The body vanishes in a cloud of greasy
+black smoke.
+
+There is a threatening little dwarf in the room with you!
+
+One sharp nasty knife is thrown at you!
+
+It misses!
+
+You're at east end of long hall.
+
+There is a little axe here.
+
+> take axe
+
+OK
+
+> w
+
+There is a threatening little dwarf in the room with you!
+
+You are at the west end of a very long featureless hall.  The hall
+joins up with a narrow north/south passage.
+
+> s
+
+There is a threatening little dwarf in the room with you!
+
+You are in a maze of twisty little passages, all different.
+
+> sw
+
+There is a threatening little dwarf in the room with you!
+
+You are in a little maze of twisty passages, all different.
+
+> se
+
+There is a threatening little dwarf in the room with you!
+
+You are in a little maze of twisting passages, all different.
+
+> s
+
+There is a threatening little dwarf in the room with you!
+
+Dead end
+
+There is a massive and somewhat battered vending machine here.  The
+instructions on it read: "Drop coins here to receive fresh batteries."
+
+> kill machine
+
+As you strike the vending machine, it pivots backward along with a
+section of wall, revealing a dark passage leading south.
+
+> s
+
+There is a threatening little dwarf in the room with you!
+
+You are in a long, rough-hewn, north/south corridor.
+
+> s
+
+There is a threatening little dwarf in the room with you!
+
+You are in a large chamber with passages to the west and north.
+
+A formidable ogre bars the northern exit.
+
+> kill ogre
+
+The ogre, who despite his bulk is quite agile, easily dodges your
+attack.  He seems almost amused by your puny effort.
+
+One sharp nasty knife is thrown at you!
+
+The ogre, distracted by your rush, is struck by the knife.  With a
+blood-curdling yell he turns and bounds after the dwarf, who flees
+in panic.  You are left alone in the room.
+
+> n
+
+You are in the ogre's storeroom.  The only exit is to the south.
+
+There is an enormous ruby here!
+
+> take ruby
+
+OK
+
+> s
+
+You are in a large chamber with passages to the west and north.
+
+> w
+
+You are in a long, rough-hewn, north/south corridor.
+
+> n
+
+Dead end
+
+There is a massive vending machine here, swung back to reveal a
+southward passage.
+
+> n
+
+You are in a little maze of twisting passages, all different.
+
+> n
+
+You are in a little maze of twisty passages, all different.
+
+> nw
+
+You are in a maze of twisty little passages, all different.
+
+> d
+
+You're at west end of long hall.
+
+> e
+
+You're at east end of long hall.
+
+> e
+
+You're at west end of Hall of Mists.
+
+> e
+
+You're on west bank of fissure.
+
+There are diamonds here!
+
+A crystal bridge now spans the fissure.
+
+> take diamonds
+
+OK
+
+> e
+
+You're on east bank of fissure.
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+A crystal bridge now spans the fissure.
+
+> e
+
+You're in Hall of Mists.
+
+Rough stone steps lead up the dome.
+
+> drop bottle
+
+OK
+
+> s
+
+This is a low room with a crude note on the wall.  The note says,
+"You won't get it up the steps".
+
+There is a large sparkling nugget of gold here!
+
+> take gold
+
+OK
+
+> n
+
+You're in Hall of Mists.
+
+There is a bottle of water here.
+
+> n
+
+You're in Hall of Mt King.
+
+> n
+
+You're in n/s passage above e/w passage.
+
+> n
+
+You're at "Y2".
+
+> off
+
+Your lamp is now off.
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+> plugh
+
+>>Foof!<<
+
+You're inside building.
+
+There are bars of silver here!
+
+There is a persian rug spread out on the floor!
+
+There is precious jewelry here!
+
+A precious jade necklace has been dropped here!
+
+There are some keys on the ground here.
+
+There is food here.
+
+> drop gold
+
+OK
+
+> drop diamonds
+
+OK
+
+> drop pyramid
+
+OK
+
+> drop ruby
+
+OK
+
+> plugh
+
+>>Foof!<<
+
+It is now pitch dark.  If you proceed you will likely fall into a pit.
+
+A hollow voice says "PLUGH".
+
+> on
+
+Your lamp is now on.
+
+You're at "Y2".
+
+> s
+
+You're in n/s passage above e/w passage.
+
+> s
+
+You are in the Hall of the Mountain King, with passages off in all
+directions.
+
+> u
+
+There is a threatening little dwarf in the room with you!
+
+You are at one end of a vast hall stretching forward out of sight to
+the west.  There are openings to either side.  Nearby, a wide stone
+staircase leads downward.  The hall is filled with wisps of white mist
+swaying to and fro almost as if alive.  A cold wind blows up the
+staircase.  There is a passage at the top of a dome behind you.
+
+There is a bottle of water here.
+
+Rough stone steps lead up the dome.
+
+> take water
+
+OK
+
+> throw axe
+
+You killed a little dwarf.
+
+You're in Hall of Mists.
+
+There is a little axe here.
+
+Rough stone steps lead up the dome.
+
+> take axe
+
+OK
+
+> n
+
+You're in Hall of Mt King.
+
+> n
+
+You are in a low n/s passage at a hole in the floor.  The hole goes
+down to an e/w passage.
+
+> d
+
+You're in dirty passage.
+
+> bedquilt
+
+You are in Bedquilt, a long east/west passage with holes everywhere.
+To explore at random select north, south, up, or down.
+
+> slab
+
+You are in a large low circular chamber whose floor is an immense slab
+fallen from the ceiling (Slab Room).  East and west there once were
+large passages, but they are now filled with boulders.  Low small
+passages go north and south, and the south one quickly bends west
+around the boulders.
+
+> s
+
+You are at the west end of the Twopit Room.  There is a large hole in
+the wall above the pit at this end of the room.
+
+> d
+
+You are at the bottom of the western pit in the Twopit Room.  There is
+a large hole in the wall about 25 feet above you.
+
+There is a tiny little plant in the pit, murmuring "water, water, ..."
+
+> water plant
+
+The plant spurts into furious growth for a few seconds.
+
+You're in west pit.
+
+There is a 12-foot-tall beanstalk stretching up out of the pit,
+bellowing "WATER!! WATER!!"
+
+> u
+
+You're at west end of Twopit Room.
+
+The top of a 12-foot-tall beanstalk is poking out of the west pit.
+
+> w
+
+You're in Slab Room.
+
+> u
+
+You are in a secret n/s canyon above a large room.
+
+> reservoir
+
+You are at the edge of a large underground reservoir.  An opaque cloud
+of white mist fills the room and rises rapidly upward.  The lake is
+fed by a stream, which tumbles out of a hole in the wall about 10 feet
+overhead and splashes noisily into the water somewhere within the
+mist.  There is a passage going back toward the south.
+
+> F'UNJ
+
+The waters have parted to form a narrow path across the reservoir.
+
+> n
+
+You are walking across the bottom of the reservoir.  Walls of water
+rear up on either side.  The roar of the water cascading past is
+nearly deafening, and the mist is so thick you can barely see.
+
+> n
+
+You are at the northern edge of the reservoir.  A northwest passage
+leads sharply up from here.
+
+The waters have parted to form a narrow path across the reservoir.
+
+> nw
+
+You are scrambling along a treacherously steep, rocky passage.
+
+> u
+
+You are on a very steep incline, which widens at it goes upward.
+
+> u
+
+You are at the base of a nearly vertical cliff.  There are some
+slim footholds which would enable you to climb up, but it looks
+extremely dangerous.  Here at the base of the cliff lie the remains
+of several earlier adventurers who apparently failed to make it.
+
+> u
+
+You are climbing along a nearly vertical cliff.
+
+> u
+
+Just as you reach the top, your foot slips on a loose rock and you
+make one last desperate grab.  Your luck holds, as does your grip.
+With an enormous heave, you lift yourself to the ledge above.
+
+You are on a small ledge at the top of a nearly vertical cliff.
+There is a low crawl leading off to the northeast.
+
+> ne
+
+You have reached a dead end.
+
+There is a richly-carved ebony statuette here!
+
+> take ebony
+
+OK
+
+> sw
+
+You're at top of cliff.
+
+> d
+
+You are climbing along a nearly vertical cliff.
+
+> d
+
+You're at base of cliff.
+
+> d
+
+You are on a very steep incline, which widens at it goes upward.
+
+> d
+
+You are scrambling along a treacherously steep, rocky passage.
+
+> d
+
+You're north of reservoir.
+
+The waters have parted to form a narrow path across the reservoir.
+
+> take water
+
+Your bottle is now full of water.
+
+> s
+
+You're at bottom of reservoir.
+
+> s
+
+You're at reservoir.
+
+The waters have parted to form a narrow path across the reservoir.
+
+> s
+
+You are in a north/south canyon about 25 feet across.  The floor is
+covered by white mist seeping in from the north.  The walls extend
+upward for well over 100 feet.  Suspended from some unseen point far
+above you, an enormous two-sided mirror is hanging parallel to and
+midway between the canyon walls.  (The mirror is obviously provided
+for the use of the dwarves who, as you know, are extremely vain.)  A
+small window can be seen in either wall, some fifty feet up.
+
+> s
+
+You are in a secret n/s canyon above a large room.
+
+> d
+
+You're in Slab Room.
+
+> s
+
+You're at west end of Twopit Room.
+
+The top of a 12-foot-tall beanstalk is poking out of the west pit.
+
+> d
+
+You're in west pit.
+
+There is a 12-foot-tall beanstalk stretching up out of the pit,
+bellowing "WATER!! WATER!!"
+
+> water plant
+
+The plant grows explosively, almost filling the bottom of the pit.
+
+You're in west pit.
+
+There is a gigantic beanstalk stretching all the way up to the hole.
+
+> u
+
+You're at west end of Twopit Room.
+
+There is a huge beanstalk growing out of the west pit up to the hole.
+
+> e
+
+You are at the east end of the Twopit Room.  The floor here is
+littered with thin rock slabs, which make it easy to descend the pits.
+There is a path here bypassing the pits to connect passages from east
+and west.  There are holes all over, but the only big one is on the
+wall directly over the west pit where you can't get to it.
+
+There is a huge beanstalk growing out of the west pit up to the hole.
+
+> d
+
+You are at the bottom of the eastern pit in the Twopit Room.  There is
+a small pool of oil in one corner of the pit.
+
+> get oil
+
+Your bottle is now full of oil.
+
+> u
+
+You're at east end of Twopit Room.
+
+There is a huge beanstalk growing out of the west pit up to the hole.
+
+> w
+
+You're at west end of Twopit Room.
+
+There is a huge beanstalk growing out of the west pit up to the hole.
+
+> d
+
+You're in west pit.
+
+There is a gigantic beanstalk stretching all the way up to the hole.
+
+> climb
+
+You clamber up the plant and scurry through the hole at the top.
+
+You are in a long, narrow corridor stretching out of sight to the
+west.  At the eastern end is a hole through which you can see a
+profusion of leaves.
+
+> w
+
+You are in the Giant Room.  The ceiling here is too high up for your
+lamp to show it.  Cavernous passages lead east, north, and south.  On
+the west wall is scrawled the inscription, "FEE FIE FOE FOO" [sic].
+
+There is a large nest here, full of golden eggs!
+
+> n
+
+You are at one end of an immense north/south passage.
+
+The way north is barred by a massive, rusty, iron door.
+
+> oil door
+
+The oil has freed up the hinges so that the door will now move,
+although it requires some effort.
+
+> drop bottle
+
+OK
+
+> drop appendage
+
+OK
+
+> n
+
+You are in a magnificent cavern with a rushing stream, which cascades
+over a sparkling waterfall into a roaring whirlpool which disappears
+through a hole in the floor.  Passages exit to the south and west.
+
+There is a jewel-encrusted trident here!
+
+> take trident
+
+OK
+
+> w
+
+You are at the top of a steep incline above a large room.  You could
+climb down here, but you would not be able to climb up.  There is a
+passage leading back to the north.
+
+> d
+
+You are in a large low room.  Crawls lead north, se, and sw.
+
+> se
+
+This is the Oriental Room.  Ancient oriental cave drawings cover the
+walls.  A gently sloping passage leads upward to the north, another
+passage leads se, and a hands and knees crawl leads west.
+
+There is a delicate, precious, ming vase here!
+
+> n
+
+You are following a wide path around the outer edge of a large cavern.
+Far below, through a heavy white mist, strange splashing noises can be
+heard.  The mist rises up through a fissure in the ceiling.  The path
+exits to the south and west.
+
+> w
+
+You are in an alcove.  A small nw path seems to widen after a short
+distance.  An extremely tight tunnel leads east.  It looks like a very
+tight squeeze.  An eerie light can be seen at the other end.
+
+> inven
+
+You are currently holding the following:
+Brass lantern
+Dwarf's axe
+Jeweled trident
+Ebony statuette
+
+> drop trident
+
+OK
+
+> drop ebony
+
+OK
+
+> drop axe
+
+OK
+
+> drop lantern
+
+OK
+
+> e
+
+You're in Plover Room.
+
+There is an emerald here the size of a plover's egg!
+
+> take emerald
+
+OK
+
+> w
+
+You're in alcove.
+
+There is a lamp shining nearby.
+
+There is a little axe here.
+
+There is a richly-carved ebony statuette here!
+
+There is a jewel-encrusted trident here!
+
+> take lamp
+
+OK
+
+> take axe
+
+OK
+
+> take ebony
+
+OK
+
+> take trident
+
+OK
+
+> nw
+
+You're in misty cavern.
+
+> s
+
+You're in Oriental Room.
+
+There is a delicate, precious, ming vase here!
+
+> take vase
+
+OK
+
+> se
+
+You are in a room whose walls resemble swiss cheese.  Obvious passages
+go west, east, ne, and nw.  Part of the room is occupied by a large
+bedrock block.
+
+> e
+
+You are in the Soft Room.  The walls are covered with heavy curtains,
+the floor with a thick pile carpet.  Moss covers the ceiling.
+
+A small velvet pillow lies on the floor.
+
+> take pillow
+
+OK
+
+> w
+
+You're in Swiss Cheese Room.
+
+> ne
+
+You're in Bedquilt.
+
+> e
+
+You are at a complex junction.  A low hands and knees passage from the
+north joins a higher crawl from the east to make a walking passage
+going west.  There is also a large room above.  The air is damp here.
+
+> n
+
+You're in a large room carved out of sedimentary rock.  The floor and
+walls are littered with bits of shells imbedded in the stone.  A
+shallow passage proceeds downward, and a somewhat steeper one leads
+up.  A low hands and knees passage enters from the south.
+
+There is an enormous clam here with its shell tightly closed.
+
+> n
+
+There is no way to go that direction.
+
+You're in Shell Room.
+
+There is an enormous clam here with its shell tightly closed.
+
+> seed 1635997320
+Seed set to 1635997320
+
+You're in Shell Room.
+
+There is an enormous clam here with its shell tightly closed.
+
+> n
+
+There is no way to go that direction.
+
+You're in Shell Room.
+
+There is an enormous clam here with its shell tightly closed.
+
+> 
+
+> 
+
+> 
+
+> 
+
+
+You scored 179 out of a possible 430, using 216 turns.
+
+You may now consider yourself a "Seasoned Adventurer".
+
+To achieve the next higher rating, you need 72 more points.
diff --git a/tests/seedcrash.log b/tests/seedcrash.log
new file mode 100644 (file)
index 0000000..7f364cc
--- /dev/null
@@ -0,0 +1,225 @@
+## This crashed advent before the control path after seed was fixed.
+n
+seed 1635997320
+in
+take lamp
+xyzzy
+take rod
+e
+take cage
+w
+on
+w
+w
+drop rod
+take bird
+take rod
+w
+free bird
+wave rod
+drop rod
+take bird
+take jade
+e
+e
+e
+off
+xyzzy
+drop jade
+xyzzy
+on
+w
+w
+w
+take rod
+d
+w
+wave rod
+drop rod
+e
+n
+free bird
+take bird
+s
+take jewelry
+n
+sw
+w
+feed dragon
+kill dragon
+yes
+drink blood
+take rug
+e
+e
+n
+take silver
+n
+off
+plugh
+drop jewelry
+drop rug
+drop silver
+out
+s
+w
+n
+take appendage
+free bird
+drop cage
+listen
+s
+s
+n
+in
+take water
+plugh
+on
+plover
+ne
+take pyramid
+s
+plover
+s
+d
+take axe
+u
+s
+up
+w
+w
+w
+w
+throw axe
+take axe
+w
+s
+sw
+se
+s
+kill machine
+s
+s
+kill ogre
+n
+take ruby
+s
+w
+n
+n
+n
+nw
+d
+e
+e
+e
+take diamonds
+e
+e
+drop bottle
+s
+take gold
+n
+n
+n
+n
+off
+plugh
+drop gold
+drop diamonds
+drop pyramid
+drop ruby
+plugh
+on
+s
+s
+u
+take water
+throw axe
+take axe
+n
+n
+d
+bedquilt
+slab
+s
+d
+water plant
+u
+w
+u
+reservoir
+F'UNJ
+n
+n
+nw
+u
+u
+u
+u
+ne
+take ebony
+sw
+d
+d
+d
+d
+d
+take water
+s
+s
+s
+s
+d
+s
+d
+water plant
+u
+e
+d
+get oil
+u
+w
+d
+climb
+w
+n
+oil door
+drop bottle
+drop appendage
+n
+take trident
+w
+d
+se
+n
+w
+inven
+drop trident
+drop ebony
+drop axe
+drop lantern
+e
+take emerald
+w
+take lamp
+take axe
+take ebony
+take trident
+nw
+s
+take vase
+se
+e
+take pillow
+w
+ne
+e
+n
+n
+seed 1635997320
+n
+
+
+
+