Magic-number elimination.
[open-adventure.git] / adventure.yaml
index c35d471a96e3eaec776b7a1d107f93222540ee44..4338eb33fb20742bfc0899357fe8ef8ee7d9d4b7 100644 (file)
 #
 # objects: Objects have attributes as follows...
 #      inventory:    A description for use in the inventory command.
+#      states:       A list of state labels for states from 0 up. Each
+#                    becomes a #define, and is also a state label that
+#                    can be used in travel-rule 'not' clauses.
 #      descriptions: Messages describing the object in different states.
-#                    If a state message is a tuple then the first element
-#                    is made the name of a #define visible to the code for
-#                    the associated state, numbered from zero upwards; it
-#                    is also a state label that can be used in travel-rule
-#                    'not' clauses.
-#       changes:     State-change messages to be emitted whenever the obect
+#                    Must correspond 1:1 with state labels if the latter exist.
+#      changes:      State-change messages to be emitted whenever the object
 #                    *changes* to the (0-origin) state that is the index of the
-#                    message in this array.
-#       words:       The vocabulary word(s) referring to this object.
-#       treasure:    A boolean "treasure" used for point-scoring and pirate
+#                    message in this array. Must correspond 1:1 with state
+#                    labels if the latter exist.
+#      words:        The vocabulary word(s) referring to this object.
+#      treasure:     A boolean "treasure" used for point-scoring and pirate
 #                    snatches, defaulting to false.
-#       immovable:   An object may also be flagged
+#      immovable:    An object may also be flagged
 #                    immovable, meaning it cannot be carried.
-#       locations:   An object may have one or two start locations (the gate
+#      locations:    An object may have one or two start locations (the gate
 #                    is an example of a two-location object; it can be accessed
 #                    from above or below).
 #
 # Message strings may include certain special character sequences to
 # denote that the program must provide parameters to insert into a
 # message when the message is printed.  These sequences are:
-#      %S = The letter 'S' or nothing (if a given value is exactly 1)
-#      %W = A word (up to 10 characters)
-#      %L = A word mapped to lower-case letters
-#      %U = A word mapped to upper-case letters
-#      %C = A word mapped to lower-case, first letter capitalised
-#      %T = Several words of text, ending with a word of -1
-#      %1 = A 1-digit number
-#      %2 = A 2-digit number
-#      ...
-#      %9 = A 9-digit number
-#      %B = Variable number of blanks
-#      %! = The entire message should be suppressed
+#       %d = an integer
+#       %s = an ASCII string
+#      %S = The letter 's' or nothing (if a previous %d value is exactly 1)
 #      %V = substitute program version string
 
 motions: !!omap
@@ -503,7 +494,7 @@ locations: !!omap
     travel: [
       {verbs: [ROAD, WEST, UPWAR], action: [goto, LOC_HILL]},
       {verbs: [ENTER, BUILD, INWAR, EAST], action: [goto, LOC_BUILDING]},
-      {verbs: [DOWNS, GULLY, STREA, SOUTH, D], action: [goto, LOC_VALLEY]},
+      {verbs: [DOWNS, GULLY, STREA, SOUTH, DOWN], action: [goto, LOC_VALLEY]},
       {verbs: [FORES, NORTH], action: [goto, LOC_FOREST1]},
       {verbs: [DEPRE], action: [goto, LOC_GRATE]},
     ]
@@ -519,7 +510,7 @@ locations: !!omap
       {verbs: [WEST], action: [goto, LOC_ROADEND]},
       {verbs: [NORTH], action: [goto, LOC_FOREST20]},
       {verbs: [SOUTH, FORES], action: [goto, LOC_FOREST13]},
-      {verbs: [D], action: [speak, WHICH_WAY]},
+      {verbs: [DOWN], action: [speak, WHICH_WAY]},
     ]
 - LOC_BUILDING:
     description:
@@ -545,7 +536,7 @@ locations: !!omap
       {verbs: [UPSTR, BUILD, NORTH], action: [goto, LOC_START]},
       {verbs: [EAST, FORES], action: [goto, LOC_FOREST6]},
       {verbs: [WEST], action: [goto, LOC_FOREST12]},
-      {verbs: [DOWNS, SOUTH, D], action: [goto, LOC_SLIT]},
+      {verbs: [DOWNS, SOUTH, DOWN], action: [goto, LOC_SLIT]},
       {verbs: [DEPRE], action: [goto, LOC_GRATE]},
       {verbs: [STREA], action: [speak, UPSTREAM_DOWNSTREAM]},
     ]
@@ -588,7 +579,7 @@ locations: !!omap
       {verbs: [EAST, FORES], action: [goto, LOC_FOREST6]},
       {verbs: [WEST], action: [goto, LOC_FOREST10]},
       {verbs: [DOWNS, BED, SOUTH, DEPRE], action: [goto, LOC_GRATE]},
-      {verbs: [SLIT, STREA, D, INWAR, ENTER], action: [speak, DONT_FIT]},
+      {verbs: [SLIT, STREA, DOWN, INWAR, ENTER], action: [speak, DONT_FIT]},
     ]
 - LOC_GRATE:
     description:
@@ -605,7 +596,7 @@ locations: !!omap
       {verbs: [WEST], action: [goto, LOC_FOREST9]},
       {verbs: [BUILD], action: [goto, LOC_START]},
       {verbs: [UPSTR, GULLY, NORTH], action: [goto, LOC_SLIT]},
-      {verbs: [ENTER, INWAR, D],
+      {verbs: [ENTER, INWAR, DOWN],
                              cond: [not, GRATE, GRATE_CLOSED],
                              action: [goto, LOC_BELOWGRATE]},
       {verbs: [ENTER], action: [speak, GRATE_NOWAY]},
@@ -618,7 +609,8 @@ locations: !!omap
       short: 'You''re below the grate.'
     conditions: {LIT: true}
     travel: [
-      {verbs: [OUT, UPWAR], cond: [not, GRATE, GRATE_CLOSED], action: [goto, LOC_GRATE]},
+      {verbs: [OUT, UPWAR], cond: [not, GRATE, GRATE_CLOSED],
+                            action: [goto, LOC_GRATE]},
       {verbs: [OUT], action: [speak, GRATE_NOWAY]},
       {verbs: [CRAWL, COBBL, INWAR, WEST], action: [goto, LOC_COBBLE]},
       {verbs: [PIT], action: [goto, LOC_PITTOP]},
@@ -646,10 +638,10 @@ locations: !!omap
       short: 'You''re in debris room.'
     conditions: {}
     travel: [
-      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED], action: [goto, LOC_GRATE]},
+      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED],
+                       action: [goto, LOC_GRATE]},
       {verbs: [ENTRA], action: [goto, LOC_BELOWGRATE]},
-      {verbs: [CRAWL, COBBL, PASSA, LOW, EAST],
-                                                     action: [goto, LOC_COBBLE]},
+      {verbs: [CRAWL, COBBL, PASSA, LOW, EAST], action: [goto, LOC_COBBLE]},
       {verbs: [CANYO, INWAR, UPWAR, WEST], action: [goto, LOC_AWKWARD]},
       {verbs: [XYZZY], action: [goto, LOC_FOOF2]},
       {verbs: [PIT], action: [goto, LOC_PITTOP]},
@@ -660,9 +652,10 @@ locations: !!omap
       short: !!null
     conditions: {}
     travel: [
-      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED], action: [goto, LOC_GRATE]},
+      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED],
+                       action: [goto, LOC_GRATE]},
       {verbs: [ENTRA], action: [goto, LOC_BELOWGRATE]},
-      {verbs: [D, EAST, DEBRI], action: [goto, LOC_DEBRIS]},
+      {verbs: [DOWN, EAST, DEBRI], action: [goto, LOC_DEBRIS]},
       {verbs: [INWAR, UPWAR, WEST], action: [goto, LOC_BIRD]},
       {verbs: [PIT], action: [goto, LOC_PITTOP]},
     ]
@@ -676,7 +669,8 @@ locations: !!omap
     conditions: {}
     hints: [*bird] 
     travel: [
-      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED], action: [goto, LOC_GRATE]},
+      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED],
+                       action: [goto, LOC_GRATE]},
       {verbs: [ENTRA], action: [goto, LOC_BELOWGRATE]},
       {verbs: [DEBRI], action: [goto, LOC_DEBRIS]},
       {verbs: [CANYO, EAST], action: [goto, LOC_AWKWARD]},
@@ -690,13 +684,14 @@ locations: !!omap
       short: 'You''re at top of small pit.'
     conditions: {}
     travel: [
-      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED], action: [goto, LOC_GRATE]},
+      {verbs: [DEPRE], cond: [not, GRATE, GRATE_CLOSED],
+                       action: [goto, LOC_GRATE]},
       {verbs: [ENTRA], action: [goto, LOC_BELOWGRATE]},
       {verbs: [DEBRI], action: [goto, LOC_DEBRIS]},
       {verbs: [PASSA, EAST], action: [goto, LOC_BIRD]},
-      {verbs: [D, PIT, STEPS], cond: [carry, NUGGET],
+      {verbs: [DOWN, PIT, STEPS], cond: [carry, NUGGET],
                                action: [goto, LOC_NECKBROKE]},
-      {verbs: [D], action: [goto, LOC_MISTHALL]},
+      {verbs: [DOWN], action: [goto, LOC_MISTHALL]},
       {verbs: [CRACK, WEST], action: [goto, LOC_CRACK]},
     ]
 - LOC_MISTHALL:
@@ -714,7 +709,7 @@ locations: !!omap
     travel: [
       {verbs: [LEFT, SOUTH], action: [goto, LOC_NUGGET]},
       {verbs: [FORWA, HALL, WEST], action: [goto, LOC_EASTBANK]},
-      {verbs: [STAIR, D, NORTH], action: [goto, LOC_KINGHALL]},
+      {verbs: [STAIR, DOWN, NORTH], action: [goto, LOC_KINGHALL]},
       {verbs: [UPWAR, PIT, STEPS, DOME, PASSA, EAST],
                               cond: [carry, NUGGET], action: [goto, LOC_DOME]},
       {verbs: [UPWAR], action: [goto, LOC_PITTOP]},
@@ -813,7 +808,7 @@ locations: !!omap
     travel: [
       {verbs: [EAST, ACROS], action: [goto, LOC_EASTEND]},
       {verbs: [WEST, SLAB], action: [goto, LOC_SLAB]},
-      {verbs: [D, PIT], action: [goto, LOC_WESTPIT]},
+      {verbs: [DOWN, PIT], action: [goto, LOC_WESTPIT]},
       {verbs: [HOLE], action: [speak, TOO_FAR]},
     ]
 - LOC_EASTPIT:
@@ -835,7 +830,8 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [UPWAR, OUT], action: [goto, LOC_WESTEND]},
-      {verbs: [CLIMB], cond: [not, PLANT, 2], action: [goto, LOC_BUILDING1]},
+      {verbs: [CLIMB], cond: [not, PLANT, PLANT_GROWN],
+                       action: [goto, LOC_BUILDING1]},
       {verbs: [CLIMB], action: [goto, LOC_CLIMBSTALK]},
     ]
 - LOC_CLIMBSTALK:
@@ -873,7 +869,7 @@ locations: !!omap
     travel: [
       {verbs: [HALL, OUT, SOUTH], action: [goto, LOC_KINGHALL]},
       {verbs: [NORTH, Y2], action: [goto, LOC_Y2]},
-      {verbs: [D, HOLE], action: [goto, LOC_BROKEN]},
+      {verbs: [DOWN, HOLE], action: [goto, LOC_BROKEN]},
     ]
 - LOC_SOUTHSIDE:
     description:
@@ -900,7 +896,8 @@ locations: !!omap
       short: !!null
     conditions: {DEEP: true}
     travel: [
-      {verbs: [], cond: [not, PLANT, 1], action: [goto, LOC_NOCLIMB]},
+      {verbs: [], cond: [not, PLANT, PLANT_BELLOWING],
+                  action: [goto, LOC_NOCLIMB]},
       {verbs: [], action: [goto, LOC_PLANTTOP]},
     ]
 - LOC_SNAKEBLOCK:
@@ -933,7 +930,7 @@ locations: !!omap
       short: !!null
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D, Y2], action: [goto, LOC_Y2]},
+      {verbs: [DOWN, Y2], action: [goto, LOC_Y2]},
       {verbs: [UPWAR], action: [goto, LOC_MISTHALL]},
     ]
 - LOC_WINDOW1:
@@ -974,7 +971,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [WEST, CRAWL], action: [goto, LOC_BROKEN]},
-      {verbs: [D, PIT, CLIMB], action: [goto, LOC_SMALLPIT]},
+      {verbs: [DOWN, PIT, CLIMB], action: [goto, LOC_SMALLPIT]},
     ]
 - LOC_SMALLPIT:
     description:
@@ -986,7 +983,7 @@ locations: !!omap
     sound: STREAM_GURGLES
     travel: [
       {verbs: [CLIMB, UPWAR, OUT], action: [goto, LOC_SMALLPITBRINK]},
-      {verbs: [SLIT, STREA, D, UPSTR, DOWNS, ENTER, INWAR],
+      {verbs: [SLIT, STREA, DOWN, UPSTR, DOWNS, ENTER, INWAR],
                                    action: [speak, DONT_FIT]},
     ]
 - LOC_DUSTY:
@@ -998,7 +995,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [EAST, PASSA], action: [goto, LOC_BROKEN]},
-      {verbs: [D, HOLE, FLOOR], action: [goto, LOC_COMPLEX]},
+      {verbs: [DOWN, HOLE, FLOOR], action: [goto, LOC_COMPLEX]},
       {verbs: [BEDQU], action: [goto, LOC_BEDQUILT]},
     ]
 - LOC_PARALLEL1:
@@ -1057,7 +1054,7 @@ locations: !!omap
     hints: [*maze]
     travel: [
       {verbs: [EAST], action: [goto, LOC_ALIKE2]},
-      {verbs: [D], action: [goto, LOC_DEADEND3]},
+      {verbs: [DOWN], action: [goto, LOC_DEADEND3]},
       {verbs: [SOUTH], action: [goto, LOC_ALIKE6]},
       {verbs: [NORTH], action: [goto, LOC_DEADEND9]},
     ]
@@ -1072,7 +1069,7 @@ locations: !!omap
       {verbs: [NORTH], action: [goto, LOC_ALIKE2]},
       {verbs: [EAST], action: [goto, LOC_DEADEND1]},
       {verbs: [SOUTH], action: [goto, LOC_DEADEND2]},
-      {verbs: [UPWAR, D], action: [goto, LOC_ALIKE14]},
+      {verbs: [UPWAR, DOWN], action: [goto, LOC_ALIKE14]},
     ]
 - LOC_DEADEND1:
     description:
@@ -1120,7 +1117,7 @@ locations: !!omap
     travel: [
       {verbs: [EAST], action: [goto, LOC_ALIKE3]},
       {verbs: [WEST], action: [goto, LOC_ALIKE5]},
-      {verbs: [D], action: [goto, LOC_ALIKE7]},
+      {verbs: [DOWN], action: [goto, LOC_ALIKE7]},
       {verbs: [SOUTH], action: [goto, LOC_ALIKE8]},
     ]
 - LOC_ALIKE7:
@@ -1147,7 +1144,7 @@ locations: !!omap
       {verbs: [SOUTH], action: [goto, LOC_ALIKE8]},
       {verbs: [UPWAR], action: [goto, LOC_ALIKE9]},
       {verbs: [NORTH], action: [goto, LOC_ALIKE10]},
-      {verbs: [D], action: [goto, LOC_DEADEND11]},
+      {verbs: [DOWN], action: [goto, LOC_DEADEND11]},
     ]
 - LOC_ALIKE9:
     description:
@@ -1178,7 +1175,7 @@ locations: !!omap
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE8]},
       {verbs: [NORTH], action: [goto, LOC_ALIKE10]},
-      {verbs: [D], action: [goto, LOC_DEADEND5]},
+      {verbs: [DOWN], action: [goto, LOC_DEADEND5]},
       {verbs: [EAST], action: [goto, LOC_PITBRINK]},
     ]
 - LOC_DEADEND5:
@@ -1199,7 +1196,7 @@ locations: !!omap
       short: 'You''re at brink of pit.'
     conditions: {DEEP: true, NOBACK: true}
     travel: [
-      {verbs: [D, CLIMB], action: [goto, LOC_BIRD]},
+      {verbs: [DOWN, CLIMB], action: [goto, LOC_BIRD]},
       {verbs: [WEST], action: [goto, LOC_ALIKE10]},
       {verbs: [SOUTH], action: [goto, LOC_DEADEND6]},
       {verbs: [NORTH], action: [goto, LOC_ALIKE12]},
@@ -1234,7 +1231,7 @@ locations: !!omap
     travel: [
       {verbs: [EAST, UPWAR, CRAWL], action: [goto, LOC_MISTWEST]},
       {verbs: [WEST], action: [goto, LOC_LONGWEST]},
-      {verbs: [NORTH, D, HOLE], action: [goto, LOC_CROSSOVER]},
+      {verbs: [NORTH, DOWN, HOLE], action: [goto, LOC_CROSSOVER]},
     ]
 - LOC_LONGWEST:
     description:
@@ -1301,8 +1298,8 @@ locations: !!omap
       {verbs: [NORTH], cond: [pct, 50], action: [speak, FUTILE_CRAWL]},
       {verbs: [NORTH], cond: [pct, 75], action: [goto, LOC_LOWROOM]},
       {verbs: [NORTH], action: [goto, LOC_THREEJUNCTION]},
-      {verbs: [D], cond: [pct, 65], action: [speak, FUTILE_CRAWL]},
-      {verbs: [D], action: [goto, LOC_ANTEROOM]},
+      {verbs: [DOWN], cond: [pct, 65], action: [speak, FUTILE_CRAWL]},
+      {verbs: [DOWN], action: [goto, LOC_ANTEROOM]},
     ]
 - LOC_SWISSCHEESE:
     description:
@@ -1334,7 +1331,7 @@ locations: !!omap
     travel: [
       {verbs: [EAST], action: [goto, LOC_SWISSCHEESE]},
       {verbs: [WEST, ACROS], action: [goto, LOC_WESTEND]},
-      {verbs: [D, PIT], action: [goto, LOC_EASTPIT]},
+      {verbs: [DOWN, PIT], action: [goto, LOC_EASTPIT]},
     ]
 - LOC_SLAB:
     description:
@@ -1357,7 +1354,7 @@ locations: !!omap
       short: !!null
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D, SLAB], action: [goto, LOC_SLAB]},
+      {verbs: [DOWN, SLAB], action: [goto, LOC_SLAB]},
       {verbs: [SOUTH], cond: [not, DRAGON, DRAGON_BARS],
                          action: [goto, LOC_SECRET5]},
       {verbs: [SOUTH], action: [goto, LOC_SECRET4]},
@@ -1371,7 +1368,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [NORTH], action: [goto, LOC_THREEJUNCTION]},
-      {verbs: [D, PASSA], action: [goto, LOC_BEDQUILT]},
+      {verbs: [DOWN, PASSA], action: [goto, LOC_BEDQUILT]},
       {verbs: [SOUTH], action: [goto, LOC_TOPSTALACTITE]},
     ]
 - LOC_THREEJUNCTION:
@@ -1418,7 +1415,7 @@ locations: !!omap
       {verbs: [EAST], action: [goto, LOC_KINGHALL]},
       {verbs: [WEST], cond: [not, DRAGON, DRAGON_BARS], action: [goto, LOC_SECRET5]},
       {verbs: [WEST], action: [goto, LOC_SECRET6]},
-      {verbs: [D], action: [goto, LOC_WIDEPLACE]},
+      {verbs: [DOWN], action: [goto, LOC_WIDEPLACE]},
     ]
 - LOC_WIDEPLACE:
     description:
@@ -1541,7 +1538,7 @@ locations: !!omap
     conditions: {DEEP: true, NOBACK: true}
     hints: [*maze]
     travel: [
-      {verbs: [UPWAR, D], action: [goto, LOC_ALIKE4]},
+      {verbs: [UPWAR, DOWN], action: [goto, LOC_ALIKE4]},
     ]
 - LOC_NARROW:
     description:
@@ -1552,7 +1549,7 @@ locations: !!omap
       short: 'You''re in narrow corridor.'
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D, CLIMB, EAST], action: [goto, LOC_WESTPIT]},
+      {verbs: [DOWN, CLIMB, EAST], action: [goto, LOC_WESTPIT]},
       {verbs: [JUMP], action: [goto, LOC_NECKBROKE]},
       {verbs: [WEST, GIANT], action: [goto, LOC_GIANTROOM]},
     ]
@@ -1582,7 +1579,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [NORTH, CAVER, PASSA], action: [goto, LOC_WATERFALL]},
-      {verbs: [D, CLIMB], action: [goto, LOC_LOWROOM]},
+      {verbs: [DOWN, CLIMB], action: [goto, LOC_LOWROOM]},
     ]
 - LOC_GIANTROOM:
     description:
@@ -1714,7 +1711,7 @@ locations: !!omap
       short: 'You''re in arched hall.'
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D, SHELL, OUT], action: [goto, LOC_SHELLROOM]},
+      {verbs: [DOWN, SHELL, OUT], action: [goto, LOC_SHELLROOM]},
     ]
 - LOC_SHELLROOM:
     description:
@@ -1727,7 +1724,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [UPWAR, HALL], action: [goto, LOC_ARCHED]},
-      {verbs: [D], action: [goto, LOC_SLOPING1]},
+      {verbs: [DOWN], action: [goto, LOC_SLOPING1]},
       {verbs: [SOUTH], cond: [carry, CLAM],
                          action: [speak, CLAM_BLOCKER]},
       {verbs: [SOUTH], cond: [carry, OYSTER],
@@ -1741,7 +1738,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [UPWAR, SHELL], action: [goto, LOC_SHELLROOM]},
-      {verbs: [D], action: [goto, LOC_CULDESAC]},
+      {verbs: [DOWN], action: [goto, LOC_CULDESAC]},
     ]
 - LOC_CULDESAC:
     description:
@@ -1781,7 +1778,7 @@ locations: !!omap
       {verbs: [EAST], action: [goto, LOC_DIFFERENT9]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT10]},
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT11]},
-      {verbs: [D], action: [goto, LOC_LONGWEST]},
+      {verbs: [DOWN], action: [goto, LOC_LONGWEST]},
     ]
 - LOC_WITTSEND:
     description:
@@ -1790,7 +1787,7 @@ locations: !!omap
     conditions: {DEEP: true, NOBACK: true}
     hints: [*witt]
     travel: [
-      {verbs: [EAST, NORTH, SOUTH, NE, SE, SW, NW, UPWAR, D],
+      {verbs: [EAST, NORTH, SOUTH, NE, SE, SW, NW, UPWAR, DOWN],
               cond: [pct, 95], action: [speak, FUTILE_CRAWL]},
       {verbs: [EAST], action: [goto, LOC_ANTEROOM]},
       {verbs: [WEST], action: [speak, WAY_BLOCKED]},
@@ -1839,10 +1836,10 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [NORTH], action: [goto, LOC_SECRET2]},
-      {verbs: [D, JUMP, CLIMB], cond: [pct, 40],
+      {verbs: [DOWN, JUMP, CLIMB], cond: [pct, 40],
                                       action: [goto, LOC_ALIKE6]},
-      {verbs: [D], cond: [pct, 50], action: [goto, LOC_ALIKE9]},
-      {verbs: [D], action: [goto, LOC_ALIKE4]},
+      {verbs: [DOWN], cond: [pct, 50], action: [goto, LOC_ALIKE9]},
+      {verbs: [DOWN], action: [goto, LOC_ALIKE4]},
     ]
 - LOC_DIFFERENT2:
     description:
@@ -1857,7 +1854,7 @@ locations: !!omap
       {verbs: [SE], action: [goto, LOC_DIFFERENT7]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT8]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT9]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT10]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT10]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT11]},
       {verbs: [SOUTH], action: [goto, LOC_DEADEND13]},
     ]
@@ -1874,7 +1871,7 @@ locations: !!omap
     sound: STREAM_SPLASHES
     travel: [
       {verbs: [SOUTH, OUT], action: [goto, LOC_MIRRORCANYON]},
-      {verbs: [NORTH, ACROS, CROSS], cond: [not, RESER, 1], action: [speak, BAD_DIRECTION]},
+      {verbs: [NORTH, ACROS, CROSS], cond: [not, RESER, WATERS_PARTED], action: [speak, BAD_DIRECTION]},
       {verbs: [NORTH], action: [goto, LOC_RESBOTTOM]},
     ]
 - LOC_DEADEND12:
@@ -1921,7 +1918,7 @@ locations: !!omap
     sound: SNAKES_HISSING
     travel: [
       {verbs: [NE], action: [goto, LOC_NE]},
-      {verbs: [D], action: [speak, GRATE_NOWAY]},
+      {verbs: [DOWN], action: [speak, GRATE_NOWAY]},
     ]
 - LOC_SWCHASM:
     description:
@@ -1950,7 +1947,7 @@ locations: !!omap
       short: 'You''re in sloping corridor.'
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D], action: [goto, LOC_LOWROOM]},
+      {verbs: [DOWN], action: [goto, LOC_LOWROOM]},
       {verbs: [UPWAR], action: [goto, LOC_SWCHASM]},
     ]
 - LOC_SECRET4:
@@ -2022,7 +2019,7 @@ locations: !!omap
     travel: [
       {verbs: [WEST], action: [goto, LOC_CORRIDOR]},
       {verbs: [NE, LEFT], action: [goto, LOC_WARMWALLS]},
-      {verbs: [SE, RIGHT, D], action: [goto, LOC_LIMESTONE]},
+      {verbs: [SE, RIGHT, DOWN], action: [goto, LOC_LIMESTONE]},
       {verbs: [VIEW], action: [goto, LOC_BREATHTAKING]},
       {verbs: [BARRE], action: [goto, LOC_BARRENFRONT]},
     ]
@@ -2070,7 +2067,7 @@ locations: !!omap
     travel: [
       {verbs: [SOUTH, PASSA, OUT], action: [goto, LOC_WARMWALLS]},
       {verbs: [FORK], action: [goto, LOC_FORK]},
-      {verbs: [D], action: [speak, RIDICULOUS_ATTEMPT]},
+      {verbs: [DOWN], action: [speak, RIDICULOUS_ATTEMPT]},
       {verbs: [JUMP], action: [goto, LOC_GRUESOME]},
     ]
 - LOC_BOULDERS2:
@@ -2097,7 +2094,7 @@ locations: !!omap
     conditions: {NOARRR: true, DEEP: true}
     travel: [
       {verbs: [NORTH, UPWAR, FORK], action: [goto, LOC_FORK]},
-      {verbs: [SOUTH, D, BARRE], action: [goto, LOC_BARRENFRONT]},
+      {verbs: [SOUTH, DOWN, BARRE], action: [goto, LOC_BARRENFRONT]},
       {verbs: [VIEW], action: [goto, LOC_BREATHTAKING]},
     ]
 - LOC_BARRENFRONT:
@@ -2138,7 +2135,7 @@ locations: !!omap
       {verbs: [SW], action: [goto, LOC_DIFFERENT6]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT7]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT8]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT9]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT9]},
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT10]},
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT11]},
       {verbs: [EAST], action: [goto, LOC_DIFFERENT2]},
@@ -2157,7 +2154,7 @@ locations: !!omap
       {verbs: [SW], action: [goto, LOC_DIFFERENT8]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT9]},
       {verbs: [EAST], action: [goto, LOC_DIFFERENT10]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT11]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT11]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT2]},
     ]
 - LOC_DIFFERENT5:
@@ -2167,7 +2164,7 @@ locations: !!omap
     conditions: {DEEP: true, NOBACK: true}
     travel: [
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT1]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT3]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT3]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT4]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT6]},
       {verbs: [SW], action: [goto, LOC_DIFFERENT7]},
@@ -2188,7 +2185,7 @@ locations: !!omap
       {verbs: [NW], action: [goto, LOC_DIFFERENT4]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT5]},
       {verbs: [EAST], action: [goto, LOC_DIFFERENT7]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT8]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT8]},
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT9]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT10]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT11]},
@@ -2202,7 +2199,7 @@ locations: !!omap
     travel: [
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT1]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT3]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT4]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT4]},
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT5]},
       {verbs: [EAST], action: [goto, LOC_DIFFERENT6]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT8]},
@@ -2221,7 +2218,7 @@ locations: !!omap
       {verbs: [WEST], action: [goto, LOC_DIFFERENT3]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT4]},
       {verbs: [SW], action: [goto, LOC_DIFFERENT5]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT6]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT6]},
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT7]},
       {verbs: [NW], action: [goto, LOC_DIFFERENT9]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT10]},
@@ -2237,7 +2234,7 @@ locations: !!omap
       {verbs: [SE], action: [goto, LOC_DIFFERENT1]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT3]},
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT4]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT5]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT5]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT6]},
       {verbs: [NW], action: [goto, LOC_DIFFERENT7]},
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT8]},
@@ -2251,7 +2248,7 @@ locations: !!omap
       short: !!null
     conditions: {DEEP: true, NOBACK: true}
     travel: [
-      {verbs: [D], action: [goto, LOC_DIFFERENT1]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT1]},
       {verbs: [EAST], action: [goto, LOC_DIFFERENT3]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT4]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT5]},
@@ -2273,7 +2270,7 @@ locations: !!omap
       {verbs: [EAST], action: [goto, LOC_DIFFERENT4]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT5]},
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT6]},
-      {verbs: [D], action: [goto, LOC_DIFFERENT7]},
+      {verbs: [DOWN], action: [goto, LOC_DIFFERENT7]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT8]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT9]},
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT10]},
@@ -2629,7 +2626,7 @@ locations: !!omap
     conditions: {DEEP: true}
     travel: [
       {verbs: [UPWAR, NW], action: [goto, LOC_STEEP]},
-      {verbs: [D, SE], action: [goto, LOC_RESNORTH]},
+      {verbs: [DOWN, SE], action: [goto, LOC_RESNORTH]},
     ]
 - LOC_STEEP:
     description:
@@ -2637,7 +2634,7 @@ locations: !!omap
       short: !!null
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D, SE], action: [goto, LOC_TREACHEROUS]},
+      {verbs: [DOWN, SE], action: [goto, LOC_TREACHEROUS]},
       {verbs: [UPWAR, NW], action: [goto, LOC_CLIFFBASE]},
     ]
 - LOC_CLIFFBASE:
@@ -2650,7 +2647,7 @@ locations: !!omap
       short: 'You''re at base of cliff.'
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D, SE], action: [goto, LOC_STEEP]},
+      {verbs: [DOWN, SE], action: [goto, LOC_STEEP]},
       {verbs: [UPWAR, CLIMB], action: [goto, LOC_CLIFFACE]},
     ]
 - LOC_CLIFFACE:
@@ -2659,7 +2656,7 @@ locations: !!omap
       short: !!null
     conditions: {DEEP: true}
     travel: [
-      {verbs: [D], action: [goto, LOC_CLIFFBASE]},
+      {verbs: [DOWN], action: [goto, LOC_CLIFFBASE]},
       {verbs: [UPWAR], cond: [carry, OBJ_46], action: [goto, LOC_CLIFFTOP]},
       {verbs: [UPWAR], action: [goto, LOC_FOOTSLIP]},
     ]
@@ -2692,7 +2689,7 @@ locations: !!omap
       short: 'You''re at top of cliff.'
     conditions: {DEEP: true}
     travel: [
-      {verbs: [CLIMB, D], action: [goto, LOC_CLIFFACE]},
+      {verbs: [CLIMB, DOWN], action: [goto, LOC_CLIFFACE]},
       {verbs: [NE, CRAWL], action: [goto, LOC_REACHDEAD]},
     ]
 - LOC_REACHDEAD:
@@ -2848,7 +2845,6 @@ arbitrary_messages:  !!omap
 - STREAM_WATER: |-
     You have taken a drink from the stream.  The water tastes strongly of
     minerals, but is not unpleasant.  It is extremely cold.
-- BOTTLE_EMPTY: 'The bottle of water is now empty.'
 - RUB_NOGO: |-
     Rubbing the electric lamp is not particularly rewarding.  Anyway,
     nothing exciting happens.
@@ -2874,8 +2870,6 @@ arbitrary_messages:  !!omap
 - NO_CONTAINER: 'You have nothing in which to carry it.'
 - BOTTLE_FULL: 'Your bottle is already full.'
 - NO_LIQUID: 'There is nothing here with which to fill the bottle.'
-- BOTTLED_WATER: 'Your bottle is now full of water.'
-- BOTTLED_OIL: 'Your bottle is now full of oil.'
 - CANT_FILL: 'You can''t fill that.'
 - RIDICULOUS_ATTEMPT: 'Don''t be ridiculous!'
 - RUSTY_DOOR: 'The door is extremely rusty and refuses to open.'
@@ -2974,9 +2968,6 @@ arbitrary_messages:  !!omap
     weight of the bear, which was still following you around.  You
     scrabble desperately for support, but as the bridge collapses you
     stumble back and fall into the chasm.
-- TROLL_SCAMPERS: |-
-    The bear lumbers toward the troll, who lets out a startled shriek and
-    scurries away.  The bear soon gives up the pursuit and wanders back.
 - BEAR_HANDS: 'With what?  Your bare hands?  Against *HIS* bear hands??'
 - BEAR_CONFUSED: 'The bear is confused; he only wants to be your friend.'
 - ALREADY_DEAD: 'For crying out loud, the poor thing is already dead!'
@@ -3110,9 +3101,9 @@ arbitrary_messages:  !!omap
 - ONE_HIT: 'One of them gets you!'
 - NONE_HIT: 'None of them hits you!'
 - DONT_KNOW: 'Sorry, I don''t know the word "%s".'
-- WHAT_DO: 'What do you want to do with the %L%L?' # FIXME: %L%L should become %L once parsing no longer depends on packed tokens
-- NO_SEE: 'I see no %L%L here.' # FIXME: %L%L should become %L once parsing no longer depends on packed tokens
-- DO_WHAT: '%C what?'
+- WHAT_DO: 'What do you want to do with the %s?'
+- NO_SEE: 'I see no %s here.'
+- DO_WHAT: '%s what?'
 - OKEY_DOKEY: 'Okay, "%s".'
 - GARNERED_POINTS: 'You have garnered %d out of a possible %d points, using %d turn%S.'
 - SUSPEND_WARNING: |-
@@ -3215,9 +3206,10 @@ objects: !!omap
     words: ['lamp', 'lante']
     inventory: 'Brass lantern'
     locations: LOC_BUILDING
+    states: [LAMP_DARK, LAMP_BRIGHT]
     descriptions:
-    - [LAMP_DARK, 'There is a shiny brass lamp nearby.']
-    - [LAMP_BRIGHT, 'There is a lamp shining nearby.']
+    - 'There is a shiny brass lamp nearby.'
+    - 'There is a lamp shining nearby.'
     changes:
     - 'Your lamp is now off.'
     - 'Your lamp is now on.'
@@ -3226,9 +3218,10 @@ objects: !!omap
     inventory: '*grate'
     locations: [LOC_GRATE, LOC_BELOWGRATE]
     immovable: true
+    states: [GRATE_CLOSED, GRATE_OPEN]  
     descriptions:
-    - [GRATE_CLOSED, 'The grate is locked.']
-    - [GRATE_OPEN, 'The grate is open.']
+    - 'The grate is locked.'
+    - 'The grate is open.'
     changes:
     - 'The grate is now locked.'
     - 'The grate is now unlocked.'
@@ -3255,6 +3248,7 @@ objects: !!omap
     inventory: '*steps'
     locations: [LOC_PITTOP, LOC_MISTHALL]
     immovable: true
+    states: [STEPS_DOWN, STEPS_UP]
     descriptions:
     - 'Rough stone steps lead down the pit.'
     - 'Rough stone steps lead up the dome.'
@@ -3262,10 +3256,11 @@ objects: !!omap
     words: ['bird']
     inventory: 'Little bird in cage'
     locations: LOC_BIRD
+    states: [BIRD_UNCAGED, BIRD_CAGED, BIRD_FOREST_UNCAGED]
     descriptions:
-    - [BIRD_UNCAGED, 'A cheerful little bird is sitting here singing.']
-    - [BIRD_CAGED, 'There is a little bird in the cage.']
-    - [BIRD_FOREST_UNCAGED, 'A cheerful little bird is sitting here singing.']
+    - 'A cheerful little bird is sitting here singing.'
+    - 'There is a little bird in the cage.'
+    - 'A cheerful little bird is sitting here singing.'
     sounds:
     - 'The bird''s singing is quite melodious.'
     - 'The bird does not seem inclined to sing while in the cage.'
@@ -3285,9 +3280,10 @@ objects: !!omap
     inventory: '*rusty door'
     locations: LOC_IMMENSE
     immovable: true
+    states: [DOOR_RUSTED, DOOR_UNRUSTED]
     descriptions:
-    - [DOOR_RUSTED, 'The way north is barred by a massive, rusty, iron door.']
-    - [DOOR_UNRUSTED, 'The way north leads through a massive, rusty, iron door.']
+    - 'The way north is barred by a massive, rusty, iron door.'
+    - 'The way north leads through a massive, rusty, iron door.'
     changes:
     - 'The hinges are quite thoroughly rusted now and won''t budge.'
     - |-
@@ -3304,20 +3300,25 @@ objects: !!omap
     inventory: '*snake'
     locations: LOC_KINGHALL
     immovable: true
+    states: [SNAKE_BLOCKS, SNAKE_CHASED]
     descriptions:
-    - [SNAKE_BLOCKS, 'A huge green fierce snake bars the way!']
-    - [SNAKE_CHASED, ''] # chased away
+    - 'A huge green fierce snake bars the way!'
+    - '' # chased away
     sounds:
     - 'The snake is hissing venomously.'
+    - ''
 - FISSURE:
     words: ['fissu']
     inventory: '*fissure'
     locations: [LOC_EASTBANK, LOC_WESTBANK]
     immovable: true
+    states: [UNBRIDGED, BRIDGED]
     descriptions:
-    - [UNBRIDGED, '']
-    - [BRIDGED, 'A crystal bridge now spans the fissure.']
-    - [VANISHED, 'The crystal bridge has vanished!']
+    - ''
+    - 'A crystal bridge spans the fissure.'
+    changes:
+    - 'The crystal bridge has vanished!'
+    - 'A crystal bridge now spans the fissure.'
 - OBJ_13:
     words: ['table']
     inventory: '*stone tablet'
@@ -3378,10 +3379,15 @@ objects: !!omap
     words: ['bottl', 'jar']
     inventory: 'Small bottle'
     locations: LOC_BUILDING
-    descriptions:
-    - [WATER_BOTTLE, 'There is a bottle of water here.']
-    - [EMPTY_BOTTLE, 'There is an empty bottle here.']
-    - [OIL_BOTTLE, 'There is a bottle of oil here.']
+    states: [WATER_BOTTLE, EMPTY_BOTTLE, OIL_BOTTLE]
+    descriptions: 
+    - 'There is a bottle of water here.'
+    - 'There is an empty bottle here.'
+    - 'There is a bottle of oil here.'
+    changes:
+    - 'Your bottle is now full of water.'
+    - 'The bottle of water is now empty.'
+    - 'Your bottle is now full of oil.'
 - WATER:
     words: ['water', 'h2o']
     inventory: 'Water in the bottle'
@@ -3403,15 +3409,15 @@ objects: !!omap
     inventory: '*plant'
     locations: LOC_WESTPIT
     immovable: true
+    states: [PLANT_THIRSTY, PLANT_BELLOWING, PLANT_GROWN]
     descriptions:
     - 'There is a tiny little plant in the pit, murmuring "water, water, ..."'
-    - |-
-      There is a 12-foot-tall beanstalk stretching up out of the pit,
-      bellowing "WATER!! WATER!!"
+    - 'There is a 12-foot-tall beanstalk stretching up out of the pit,\nbellowing "WATER!! WATER!!"'
     - 'There is a gigantic beanstalk stretching all the way up to the hole.'
+    changes:
+    - 'You''ve over-watered the plant!  It''s shriveling up!  And now . . .'
     - 'The plant spurts into furious growth for a few seconds.'
     - 'The plant grows explosively, almost filling the bottom of the pit.'
-    - 'You''ve over-watered the plant!  It''s shriveling up!  And now . . .'
     sounds:
     - 'The plant continues to ask plaintively for water.'
     - 'The plant continues to demand water.'
@@ -3443,9 +3449,10 @@ objects: !!omap
     words: ['axe']
     inventory: 'Dwarf''s axe'
     locations: LOC_NOWHERE
+    states: [AXE_HERE, AXE_LOST]
     descriptions:
-    - [AXE_HERE, 'There is a little axe here.']
-    - [AXE_LOST, 'There is a little axe lying beside the bear.']
+    - 'There is a little axe here.'
+    - 'There is a little axe lying beside the bear.'
     changes:
     - ''
     - 'The axe misses and lands near the bear where you can''t get at it.'
@@ -3466,10 +3473,11 @@ objects: !!omap
     inventory: '*dragon'
     locations: [LOC_SECRET4, LOC_SECRET6]
     immovable: true
+    states: [DRAGON_BARS, DRAGON_DEAD, DRAGON_BLOODLESS]
     descriptions:
-    - [DRAGON_BARS, 'A huge green fierce dragon bars the way!']
-    - [DRAGON_DEAD, 'The blood-specked body of a huge green dead dragon lies to one side.']
-    - [DRAGON_BLOODLESS, 'The body of a huge green dead dragon is lying off to one side.']
+    - 'A huge green fierce dragon bars the way!'
+    - 'The blood-specked body of a huge green dead dragon lies to one side.'
+    - 'The body of a huge green dead dragon is lying off to one side.'
     changes:
     - ''
     - |-
@@ -3485,21 +3493,30 @@ objects: !!omap
     inventory: '*chasm'
     locations: [LOC_SWCHASM, LOC_NECHASM]
     immovable: true
+    states: [TROLL_BRIDGE, BRIDGE_WRECKED]
     descriptions:
-    - [TROLL_BRIDGE, 'A rickety wooden bridge extends across the chasm, vanishing into the\nmist.  A notice posted on the bridge reads, "Stop! Pay troll!"']
-    - [BRIDGE_WRECKED, 'The wreckage of a bridge (and a dead bear) can be seen at the bottom\nof the chasm.']
+    - 'A rickety wooden bridge extends across the chasm, vanishing into the\nmist.  A notice posted on the bridge reads, "Stop! Pay troll!"'
+    - 'The wreckage of a bridge (and a dead bear) can be seen at the bottom\nof the chasm.'
 - TROLL:
     words: ['troll']
     inventory: '*troll'
     locations: [LOC_SWCHASM, LOC_NECHASM]
     immovable: true
-    descriptions:
-    - [TROLL_UNPAID, 'A burly troll stands by the bridge and insists you throw him a\ntreasure before you may cross.']
-    - [TROLL_PAIDONCE, 'The troll steps out from beneath the bridge and blocks your way.']
-    - [TROLL_GONE, ''] # chased away
+    states: [TROLL_UNPAID, TROLL_PAIDONCE, TROLL_GONE]
+    descriptions: 
+    - 'A burly troll stands by the bridge and insists you throw him a\ntreasure before you may cross.'
+    - 'The troll steps out from beneath the bridge and blocks your way.'
+    - '' # chased away
+    changes:
+    - ''
+    - ''
+    - |-
+        The bear lumbers toward the troll, who lets out a startled shriek and
+        scurries away.  The bear soon gives up the pursuit and wanders back.
     sounds:
     - 'The troll sounds quite adamant in his demand for a treasure.'
     - 'The troll sounds quite adamant in his demand for a treasure.'
+    - ''
 - TROLL2:
     words: ['troll']
     inventory: '*phony troll'
@@ -3512,11 +3529,12 @@ objects: !!omap
     inventory: !!null # bear uses rtext 141
     locations: LOC_BARRENROOM
     immovable: true
+    states: [UNTAMED_BEAR, SITTING_BEAR, CONTENTED_BEAR, BEAR_DEAD]
     descriptions:
-    - [UNTAMED_BEAR, 'There is a ferocious cave bear eying you from the far end of the room!']
-    - [SITTING_BEAR, 'There is a gentle cave bear sitting placidly in one corner.']
-    - [CONTENTED_BEAR, 'There is a contented-looking bear wandering about nearby.']
-    - [BEAR_DEAD, '']
+    - 'There is a ferocious cave bear eying you from the far end of the room!'
+    - 'There is a gentle cave bear sitting placidly in one corner.'
+    - 'There is a contented-looking bear wandering about nearby.'
+    - ''
 - MESSAG:
     words: ['messa']
     inventory: '*message in second maze'
@@ -3539,9 +3557,14 @@ objects: !!omap
     inventory: '*vending machine'
     locations: LOC_DEADEND13
     immovable: true
+    states: [VEND_BLOCKS, VEND_UNBLOCKS]
     descriptions:
-    - [VEND_BLOCKS, 'There is a massive and somewhat battered vending machine here.  The\ninstructions on it read: "Drop coins here to receive fresh batteries."']
-    - [VEND_UNBLOCKS, 'There is a massive vending machine here, swung back to reveal a\nsouthward passage.']
+    - |-
+        There is a massive and somewhat battered vending machine here.  The
+        instructions on it read: "Drop coins here to receive fresh batteries."
+    - |-
+        There is a massive vending machine here, swung back to reveal a
+        southward passage.
     changes:
     - 'The vending machine swings back to block the passage.'
     - 'As you strike the vending machine, it pivots backward along with a\nsection of wall, revealing a dark passage leading south.'
@@ -3552,9 +3575,10 @@ objects: !!omap
     words: ['batte']
     inventory: 'Batteries'
     locations: LOC_NOWHERE
+    states: [FRESH_BATTERIES, DEAD_BATTERIES]
     descriptions:
-    - [FRESH_BATTERIES, 'There are fresh batteries here.']
-    - [DEAD_BATTERIES, 'Some worn-out batteries have been discarded nearby.']
+    - 'There are fresh batteries here.'
+    - 'Some worn-out batteries have been discarded nearby.'
 - OBJ_40:
     words: ['carpe', 'moss']
     inventory: '*carpet and/or moss and/or curtains'
@@ -3575,10 +3599,11 @@ objects: !!omap
     inventory: '*urn'
     locations: LOC_CLIFF
     immovable: true
+    states: [URN_EMPTY, URN_DARK, URN_LIT]
     descriptions:
-    - [URN_EMPTY, 'A small urn is embedded in the rock.']
-    - [URN_DARK, 'A small urn full of oil is embedded in the rock.']
-    - [URN_LIT, 'A small oil flame extrudes from an urn embedded in the rock.']
+    - 'A small urn is embedded in the rock.'
+    - 'A small urn full of oil is embedded in the rock.'
+    - 'A small oil flame extrudes from an urn embedded in the rock.'
     changes:
     - 'The urn is empty and will not light.'
     - 'The urn is now dark.'
@@ -3588,9 +3613,10 @@ objects: !!omap
     inventory: '*cavity'
     locations: LOC_NOWHERE
     immovable: true
+    states: [CAVITY_FULL, CAVITY_EMPTY]
     descriptions:
-    - [CAVITY_FULL, ''] # something in it
-    - [CAVITY_EMPTY, 'There is a small urn-shaped cavity in the rock.']
+    - '' # something in it
+    - 'There is a small urn-shaped cavity in the rock.'
 - BLOOD:
     words: ['blood']
     inventory: '*blood'
@@ -3603,10 +3629,13 @@ objects: !!omap
     inventory: '*reservoir'
     locations: [LOC_RESERVOIR, LOC_RESNORTH]
     immovable: true
+    states: [WATERS_UNPARTED, WATERS_PARTED]
     descriptions:
     - ''
-    - [WATERS_PARTED, 'The waters have parted to form a narrow path across the reservoir.']
+    - 'The waters have parted to form a narrow path across the reservoir.'
+    changes:
     - 'The waters crash together again.'
+    - 'The waters have parted to form a narrow path across the reservoir.'
 - OBJ_46:
     words: ['appen', 'lepor']
     inventory: 'Leporine appendage'
@@ -3636,9 +3665,10 @@ objects: !!omap
     inventory: '*sign'
     locations: LOC_ANTEROOM
     immovable: true
+    states: [INGAME_SIGN, ENDGAME_SIGN]
     descriptions:
-    - [INGAME_SIGN, '']
-    - [ENDGAME_SIGN, '']
+    - ''
+    - ''
     texts:
     - |-
       Cave under construction beyond this point.
@@ -3692,10 +3722,11 @@ objects: !!omap
     inventory: 'Golden eggs'
     locations: LOC_GIANTROOM
     treasure: true
+    states: [EGGS_HERE, EGGS_VANISHED, EGGS_DONE]
     descriptions:
-    - [EGGS_HERE, 'There is a large nest here, full of golden eggs!']
-    - [EGGS_VANISHED, 'The nest of golden eggs has vanished!']
-    - [EGGS_DONE, 'Done!']
+    - 'There is a large nest here, full of golden eggs!'
+    - 'The nest of golden eggs has vanished!'
+    - 'Done!'
 - TRIDENT:
     words: ['tride']
     inventory: 'Jeweled trident'
@@ -3708,14 +3739,14 @@ objects: !!omap
     inventory: 'Ming vase'
     locations: LOC_ORIENTAL
     treasure: true
+    states: [VASE_WHOLE, VASE_DROPPED, VASE_BROKEN]
     descriptions:
-    - [VASE_WHOLE, 'There is a delicate, precious, ming vase here!']
-    - [VASE_RESTING, 'The vase is now resting, delicately, on a velvet pillow.']
-    - [VASE_BROKEN, 'The floor is littered with worthless shards of pottery.']
-    - [VASE_DROPS, 'The ming vase drops with a delicate crash.']
+    - 'There is a delicate, precious, ming vase here!'
+    - 'The floor is littered with worthless shards of pottery.'
+    - 'The floor is littered with worthless shards of pottery.'
     changes:
-    - ''
-    - ''
+    - 'The vase is now resting, delicately, on a velvet pillow.'
+    - 'The ming vase drops with a delicate crash.'
     - 'You have taken the vase and hurled it delicately to the ground.'
 - EMERALD:
     words: ['emera']
@@ -3745,10 +3776,11 @@ objects: !!omap
     locations: [LOC_SECRET4, LOC_SECRET6]
     immovable: true
     treasure: true
+    states: [RUG_FLOOR, RUG_DRAGON, RUG_HOVER]
     descriptions:
-    - [RUG_FLOOR, 'There is a persian rug spread out on the floor!']
-    - [RUG_DRAGON, 'The dragon is sprawled out on a persian rug!!']
-    - [RUG_HOVER, 'There is a persian rug here, hovering in mid-air!']
+    - 'There is a persian rug spread out on the floor!'
+    - 'The dragon is sprawled out on a persian rug!!'
+    - 'There is a persian rug here, hovering in mid-air!'
 - OBJ_63:
     words: ['spice']
     inventory: 'Rare spices'
@@ -3762,10 +3794,11 @@ objects: !!omap
     locations: LOC_BARRENROOM
     immovable: true
     treasure: true
+    states: [CHAIN_HEAP, CHAINING_BEAR, CHAIN_FIXED]
     descriptions:
-    - [CHAIN_HEAP, 'There is a golden chain lying in a heap on the floor!']
-    - [CHAINING_BEAR, 'The bear is locked to the wall with a golden chain!']
-    - [CHAIN_FIXED, 'There is a golden chain locked to the wall!']
+    - 'There is a golden chain lying in a heap on the floor!'
+    - 'The bear is locked to the wall with a golden chain!'
+    - 'There is a golden chain locked to the wall!'
 - RUBY:
     words: ['ruby']
     inventory: 'Giant ruby'
@@ -3786,9 +3819,10 @@ objects: !!omap
     inventory: 'Amber gemstone'
     locations: LOC_NOWHERE
     treasure: true
+    states: [AMBER_IN_URN, AMBER_IN_ROCK]
     descriptions:
-    - [AMBER_IN_URN, 'There is a rare amber gemstone here!']
-    - [AMBER_IN_ROCK, 'There is an amber gemstone resting in a small cavity in the rock!']
+    - 'There is a rare amber gemstone here!'
+    - 'There is an amber gemstone resting in a small cavity in the rock!'
 - SAPPH:
     words: ['sapph']
     inventory: 'Star sapphire'