Fix for GitLab issue #40: Inconsistant inventory space
authorEric S. Raymond <esr@thyrsus.com>
Sat, 10 Mar 2018 22:58:46 +0000 (17:58 -0500)
committerEric S. Raymond <esr@thyrsus.com>
Sat, 10 Mar 2018 22:58:46 +0000 (17:58 -0500)
misc.c
tests/birdweight.chk [new file with mode: 0644]
tests/birdweight.log [new file with mode: 0644]

diff --git a/misc.c b/misc.c
index aa164728d54366942e282de3e1fdcee704b81877..679c2c87505ecfb5f1a451e80988ec7a2394ad66 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -585,7 +585,9 @@ void carry(obj_t object, loc_t where)
         if (game.place[object] == CARRIED)
             return;
         game.place[object] = CARRIED;
-        ++game.holdng;
+       
+       if (object!= BIRD)
+           ++game.holdng;
     }
     if (game.atloc[where] == object) {
         game.atloc[where] = game.link[object];
@@ -606,7 +608,14 @@ void drop(obj_t object, loc_t where)
         game.fixed[object - NOBJECTS] = where;
     else {
         if (game.place[object] == CARRIED)
-            --game.holdng;
+           if (object != BIRD)
+               /* The bird has to be weightless.  This ugly hack (and the
+                * corresponding code in the drop function) brought to you
+                * by the fact that when the bird is caged, we need to be able
+                * to either 'take bird' or 'take cage' and have the right thing
+                * happen.
+                */
+               --game.holdng;
         game.place[object] = where;
     }
     if (where == LOC_NOWHERE ||
diff --git a/tests/birdweight.chk b/tests/birdweight.chk
new file mode 100644 (file)
index 0000000..0df99e6
--- /dev/null
@@ -0,0 +1,464 @@
+
+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 976729036
+
+Seed set to 976729036
+
+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
+
+> take food
+
+OK
+
+> take bottle
+
+OK
+
+> inventory
+
+You are currently holding the following:
+Brass lantern
+Tasty food
+Small bottle
+Water in the bottle
+
+> 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
+
+> 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 some keys on the ground here.
+
+> xyzzy
+
+>>Foof!<<
+
+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".
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+> 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
+
+You're in debris room.
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+> 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.
+
+> take bird
+
+OK
+
+> e
+
+You are in an awkward sloping east/west canyon.
+
+> e
+
+You're in debris room.
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+> take rod
+
+OK
+
+> w
+
+You are in an awkward sloping east/west canyon.
+
+> w
+
+You're in bird chamber.
+
+> 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.
+
+> 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.
+
+> inventory
+
+You are currently holding the following:
+Brass lantern
+Wicker cage
+Black rod
+Little bird in cage
+Tasty food
+Small bottle
+Water in the bottle
+Leporine appendage
+
+> 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.
+
+> 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.
+
+> w
+
+You're on east bank of fissure.
+
+A three foot black rod with a rusty star on an end lies nearby.
+
+A crystal bridge spans the fissure.
+
+> w
+
+You are on the west side of the fissure in the Hall of Mists.
+
+There are diamonds here!
+
+A crystal bridge spans the fissure.
+
+> drop gold
+
+OK
+
+> take diamonds
+
+OK
+
+> w
+
+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
+
+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.
+
+> w
+
+You are at the west end of a very long featureless hall.  The hall
+joins up with a narrow north/south passage.
+
+> inventory
+
+You are currently holding the following:
+Brass lantern
+Wicker cage
+Little bird in cage
+Tasty food
+Small bottle
+Water in the bottle
+Leporine appendage
+Several diamonds
+
+> s
+
+You are in a maze of twisty little passages, all different.
+
+> sw
+
+You are in a little maze of twisty passages, all different.
+
+> se
+
+You are in a little maze of twisting passages, all different.
+
+> s
+
+A little dwarf just walked around a corner, saw you, threw a little
+axe at you which missed, cursed, and ran away.
+
+Dead end
+
+There is a little axe here.
+
+There is a massive and somewhat battered vending machine here.  The
+instructions on it read: "Drop coins here to receive fresh batteries."
+
+> drop food
+
+OK
+
+> drop water
+
+OK
+
+> take axe
+
+OK
+
+> kill machine
+
+As you strike the vending machine, it pivots backward along with a
+section of wall, revealing a dark passage leading south.
+
+> s
+
+You are in a long, rough-hewn, north/south corridor.
+
+> s
+
+You are in a large chamber with passages to the west and north.
+
+A formidable ogre bars the northern exit.
+
+> drop diamonds
+
+OK
+
+> w
+
+You are in a long, rough-hewn, north/south corridor.
+
+> w
+
+There is no way to go that direction.
+
+You are in a long, rough-hewn, north/south corridor.
+
+> n
+
+Dead end
+
+There is a bottle of water here.
+
+There is food here.
+
+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 is a large sparkling nugget of gold here!
+
+A crystal bridge spans the fissure.
+
+> take gold
+
+OK
+
+> w
+
+You're at west end of Hall of Mists.
+
+> w
+
+You're at east end of long hall.
+
+> w
+
+You're at west end of long hall.
+
+> s
+
+You are in a maze of twisty little passages, all different.
+
+> sw
+
+You are in a little maze of twisty passages, all different.
+
+> se
+
+You are in a little maze of twisting passages, all different.
+
+> s
+
+Dead end
+
+There is a bottle of water here.
+
+There is food here.
+
+There is a massive vending machine here, swung back to reveal a
+southward passage.
+
+> take bottle
+
+OK
+
+> take food
+
+OK
+
+> s
+
+You are in a long, rough-hewn, north/south corridor.
+
+> s
+
+You are in a large chamber with passages to the west and north.
+
+There are diamonds here!
+
+A formidable ogre bars the northern exit.
+
+> throw appendage
+
+OK
+
+> kill ogre
+
+The ogre, who despite his bulk is quite agile, easily dodges your
+attack.  He seems almost amused by your puny effort.
+
+> take appendage
+
+OK
+
+
+You scored 61 out of a possible 430, using 81 turns.
+
+Your score qualifies you as a novice class adventurer.
+
+To achieve the next higher rating, you need 60 more points.
diff --git a/tests/birdweight.log b/tests/birdweight.log
new file mode 100644 (file)
index 0000000..bc07eb6
--- /dev/null
@@ -0,0 +1,87 @@
+## Verify that the bird is weightless in inventory
+# Checks fix for GitLab issue #40
+n
+#seed 687800971
+seed 976729036
+in
+take lamp
+take food
+take bottle
+inventory
+out
+s
+w
+n
+take appendage
+s
+s
+n
+in
+xyzzy
+on
+e
+take cage
+w
+w
+w
+take bird
+e
+e
+take rod
+w
+w
+w
+d
+inventory
+w
+wave rod
+drop rod
+e
+s
+take gold
+n
+w
+w
+drop gold
+take diamonds
+w
+w
+w
+inventory
+s
+sw
+se
+s
+drop food
+drop water
+take axe
+kill machine
+s
+s
+drop diamonds
+w
+w
+n
+# Back at vending machine
+n
+n
+nw
+d
+e
+e
+e
+take gold
+w
+w
+w
+s
+sw
+se
+s
+take bottle
+take food
+s
+s
+throw appendage
+kill ogre
+take appendage