YAML coverage - commented out unused arbitrary messages
[open-adventure.git] / adventure.yaml
index cfe51e0ab657210157b1cb3e42c28ed974f43dfd..742a4c394124f784180178b122505c96142d6a9a 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 object
+#                    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).
 #
@@ -204,9 +204,9 @@ motions: !!omap
     words: ['east', 'e']
 - WEST:
     words: ['west', 'w']
-- MOT_45:
+- NORTH:
     words: ['north', 'n']
-- MOT_46:
+- SOUTH:
     words: ['south', 's']
 - NE:
     words: ['ne']
@@ -270,121 +270,6 @@ motions: !!omap
 - FORWARD6:
     words: ['main', 'offic']
 
-actions: !!omap
-- ACT_0:
-    message: !!null
-    words: !!null
-- CARRY:
-    message: ALREADY_CARRYING
-    words: ['g', 'carry', 'take', 'keep', 'catch',
-            'steal', 'captu', 'get', 'tote', 'snarf']
-    oldstyle: false
-- DROP:
-    message: ARENT_CARRYING
-    words: ['drop', 'relea', 'free', 'disca', 'dump']
-- SAY:
-    message: NO_MESSAGE
-    words: ['say', 'chant', 'sing', 'utter', 'mumbl']
-- UNLOCK:
-    message: NOT_LOCKABLE
-    words: ['unloc', 'open']
-- NOTHING:
-    message: NO_MESSAGE
-    words: ['z', 'nothi']
-    oldstyle: false
-- LOCK:
-    message: NOT_LOCKABLE
-    words: ['lock', 'close']
-- LIGHT:
-    message: DONT_UNDERSTAND
-    words: ['light', 'on']
-- EXTINGUISH:
-    message: DONT_UNDERSTAND
-    words: ['extin', 'off']
-- WAVE:
-    message: NOTHING_HAPPENS
-    words: ['wave', 'shake', 'swing']
-- TAME:
-    message: AM_GAME
-    words: ['calm', 'placa', 'tame']
-- GO:
-    message: WHERE_QUERY
-    words: ['walk', 'run', 'trave', 'go', 'proce',
-            'conti', 'explo', 'follo', 'turn']
-- ATTACK:
-    message: RIDICULOUS_ATTEMPT
-    words: ['attac', 'kill', 'fight', 'hit', 'strik', 'slay']
-- POUR:
-    message: ARENT_CARRYING
-    words: ['pour']
-- EAT:
-    message: RIDICULOUS_ATTEMPT
-    words: ['eat', 'devou']
-- DRINK:
-    message: STREAM_WATER
-    words: ['drink']
-- RUB:
-    message: RUB_NOGO
-    words: ['rub']
-- THROW:
-    message: ARENT_CARRYING
-    words: ['throw', 'toss']
-- QUIT:
-    message: HUH_MAN
-    words: ['quit']
-- FIND:
-    message: NEARBY
-    words: ['find', 'where']
-- INVENTORY:
-    message: NEARBY
-    words: ['i', 'inven']
-    oldstyle: false
-- FEED:
-    message: NO_EDIBLES
-    words: ['feed']
-- FILL:
-    message: CANT_FILL
-    words: ['fill']
-- BLAST:
-    message: REQUIRES_DYNAMITE
-    words: ['blast', 'deton', 'ignit', 'blowu']
-- SCORE:
-    message: HUH_MAN
-    words: ['score']
-- GIANTWORDS:
-    message: NOT_KNOWHOW
-    words: ['fee', 'fie', 'foe', 'foo', 'fum']
-- BRIEF:
-    message: ON_WHAT
-    words: ['brief']
-- READ:
-    message: DONT_UNDERSTAND
-    words: ['read', 'perus']
-- BREAK:
-    message: BEYOND_POWER
-    words: ['break', 'shatt', 'smash']
-- WAKE:
-    message: RIDICULOUS_ATTEMPT
-    words: ['wake', 'distu']
-- SAVE:
-    message: HUH_MAN
-    words: ['suspe', 'pause', 'save']
-- RESUME:
-    message: HUH_MAN
-    words: ['resum', 'resta']
-- FLY:
-    message: AM_GAME
-    words: ['fly']
-- LISTEN:
-    message: DONT_UNDERSTAND
-    words: ['liste']
-- PART:
-    message: NOTHING_HAPPENS
-    words: ['z''zzz']
-- ACT_35:
-    message: HUH_MAN
-    words: !!null
-
 hints:
   - hint: &grate
       name: CAVE
@@ -471,7 +356,7 @@ hints:
       penalty: 4
       question: 'You''re missing only one other treasure.  Do you need help finding it?'
       hint: |-
-        Once you''ve found all the other treasures, it is no longer possible to
+        Once you've found all the other treasures, it is no longer possible to
         locate the one you''re now missing.'
 
 locations: !!omap
@@ -494,7 +379,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]},
     ]
@@ -536,7 +421,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]},
     ]
@@ -596,7 +481,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]},
@@ -1069,7 +954,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:
@@ -1538,7 +1423,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:
@@ -1787,7 +1672,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]},
@@ -1950,6 +1835,8 @@ locations: !!omap
       {verbs: [DOWN], action: [goto, LOC_LOWROOM]},
       {verbs: [UPWAR], action: [goto, LOC_SWCHASM]},
     ]
+  # Following three rooms are where the dragon lives.  The code has a
+  # wired-in assumption that the dragon corpse goes to LOC_SECRET5,
 - LOC_SECRET4:
     description:
       long: 'You are in a secret canyon which exits to the north and east.'
@@ -2019,7 +1906,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]},
     ]
@@ -2689,7 +2576,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:
@@ -2786,7 +2673,7 @@ arbitrary_messages:  !!omap
     I don't know in from out here.  Use compass points or name something
     in the general direction you want to go.
 - CANT_APPLY: 'I don''t know how to apply that word here.'
-- AM_GAME: 'I''m game.  Would you care to explain how?'
+- AM_GAME: &am_game 'I''m game.  Would you care to explain how?'
 - NO_MORE_DETAIL: |-
       Sorry, but I am not allowed to give more detail.  I will repeat the
       long description of your location.
@@ -2794,27 +2681,27 @@ arbitrary_messages:  !!omap
 - W_IS_WEST: 'If you prefer, simply type w rather than west.'
 - REALLY_QUIT: 'Do you really want to quit now?'
 - PIT_FALL: 'You fell into a pit and broke every bone in your body!'
-- ALREADY_CARRYING: 'You are already carrying it!'
+- ALREADY_CARRYING: &already_carrying 'You are already carrying it!'
 - YOU_JOKING: 'You can''t be serious!'
 - BIRD_EVADES: |-
     The bird seemed unafraid at first, but as you approach it becomes
     disturbed and you cannot catch it.
 - CANNOT_CARRY: 'You can catch the bird, but you cannot carry it.'
 - NOTHING_LOCKED: 'There is nothing here with a lock!'
-- ARENT_CARRYING: 'You aren''t carrying it!'
+- ARENT_CARRYING: &arent_carrying 'You aren''t carrying it!'
 - BIRD_ATTACKS: |-
     The little bird attacks the green snake, and in an astounding flurry
     drives the snake away.
 - NO_KEYS: 'You have no keys!'
 - NO_LOCK: 'It has no lock.'
-- NOT_LOCKABLE: 'I don''t know how to lock or unlock such a thing.'
+- NOT_LOCKABLE: &not_lockable 'I don''t know how to lock or unlock such a thing.'
 - ALREADY_LOCKED: 'It was already locked.'
 - ALREADY_UNLOCKED: 'It was already unlocked.'
 - BEAR_BLOCKS: |-
     There is no way to get past the bear to unlock the chain, which is
     probably just as well.
-- NOTHING_HAPPENS: 'Nothing happens.'
-- WHERE_QUERY: 'Where?'
+- NOTHING_HAPPENS: &nothing_happens 'Nothing happens.'
+- WHERE_QUERY: &where_query 'Where?'
 - NO_TARGET: 'There is nothing here to attack.'
 - BIRD_DEAD: 'The little bird is now dead.  Its body disappears.'
 - SNAKE_WARNING: 'Attacking the snake both doesn''t work and is very dangerous.'
@@ -2832,23 +2719,16 @@ arbitrary_messages:  !!omap
       I don't know where the cave is, but hereabouts no stream can run on
       the surface for long.  I would try the stream.
 - NEED_DETAIL: 'I need more detailed instructions to do that.'
-- NEARBY: |-
+- NEARBY: &nearby |-
       I can only tell you what you see as you move about and manipulate
       things.  I cannot tell you where remote things are.
 - OGRE_SNARL: 'The ogre snarls and shoves you back.'
-- HUH_MAN: 'Huh?'
+- HUH_MAN: &huh_man 'Huh?'
 - WELCOME_YOU: 'Welcome to Adventure!!  Would you like instructions?'
-- REQUIRES_DYNAMITE: 'Blasting requires dynamite.'
+- REQUIRES_DYNAMITE: &requires_dynamite 'Blasting requires dynamite.'
 - FEET_WET: 'Your feet are now wet.'
 - LOST_APPETITE: 'I think I just lost my appetite.'
 - THANKS_DELICIOUS: 'Thank you, it was delicious!'
-- 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.
 - PECULIAR_NOTHING: 'Peculiar.  Nothing unexpected happens.'
 - GROUND_WET: 'Your bottle is empty and the ground is wet.'
 - CANT_POUR: 'You can''t pour that.'
@@ -2871,10 +2751,7 @@ 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!'
+- RIDICULOUS_ATTEMPT: &ridiculous_attempt 'Don''t be ridiculous!'
 - RUSTY_DOOR: 'The door is extremely rusty and refuses to open.'
 - SHAKING_LEAVES: 'The plant indignantly shakes the oil off its leaves and asks, "Water?"'
 - DEEP_ROOTS: 'The plant has exceptionally deep roots and cannot be pulled free.'
@@ -2940,7 +2817,7 @@ arbitrary_messages:  !!omap
 - WITHOUT_SUSPENDS: 'Now let''s see you do it without suspending in mid-Adventure.'
 - FILL_INVALID: 'There is nothing here with which to fill it.'
 - SHATTER_VASE: 'The sudden change in temperature has delicately shattered the vase.'
-- BEYOND_POWER: 'It is beyond your power to do that.'
+- BEYOND_POWER: &beyond_power 'It is beyond your power to do that.'
 - NOT_KNOWHOW: &not_knowhow 'I don''t know how.'
 - TOO_FAR: 'It is too far up for you to reach.'
 - DWARF_SMOKE: |-
@@ -2948,12 +2825,12 @@ arbitrary_messages:  !!omap
       black smoke.
 - SHELL_IMPERVIOUS: 'The shell is very strong and is impervious to attack.'
 - START_OVER: 'What''s the matter, can''t you read?  Now you''d best start over.'
+- WELL_POINTLESS: 'Well, that was remarkably pointless.'
 - DRAGON_SCALES: 'The axe bounces harmlessly off the dragon''s thick scales.'
 - NASTY_DRAGON: 'The dragon looks rather nasty.  You''d best not try to get by.'
 - BIRD_BURNT: |-
     The little bird attacks the green dragon, and in an astounding flurry
     gets burnt to a cinder.  The ashes blow away.
-- ON_WHAT: 'On what?'
 - BRIEF_CONFIRM: |-
     Okay, from now on I'll only describe a place in full the first time
     you come to it.  To get the full description, say "look".
@@ -2966,26 +2843,14 @@ arbitrary_messages:  !!omap
 - TROLL_SATISFIED: 'The troll catches your treasure and scurries away out of sight.'
 - TROLL_BLOCKS: 'The troll refuses to let you cross.'
 - BRIDGE_GONE: 'There is no longer any way across the chasm.'
-- BRIDGE_COLLAPSE: |-
-    Just as you reach the other side, the bridge buckles beneath the
-    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!'
-- BEAR_TAMED: |-
-    The bear eagerly wolfs down your food, after which he seems to calm
-    down considerably and even becomes rather friendly.
 - BEAR_CHAINED: 'The bear is still chained to the wall.'
 - STILL_LOCKED: 'The chain is still locked.'
 - CHAIN_UNLOCKED: 'The chain is now unlocked.'
 - CHAIN_LOCKED: 'The chain is now locked.'
 - NO_LOCKSITE: 'There is nothing here to which the chain can be locked.'
-- NO_EDIBLES: 'There is nothing here to eat.'
 - WANT_HINT: 'Do you want the hint?'
 - TROLL_VICES: 'Gluttony is not one of the troll''s vices.  Avarice, however, is.'
 - LAMP_DIM: |-
@@ -3016,7 +2881,7 @@ arbitrary_messages:  !!omap
 - WAYOUT_CLUE: |-
     It says, "There is a way out of this place.  Do you need any more
     information to escape?  Sorry, but this initial hint is all you get."
-- DONT_UNDERSTAND: 'I''m afraid I don''t understand.'
+- DONT_UNDERSTAND: &dont_understand 'I''m afraid I don''t understand.'
 - HAND_PASSTHROUGH: 'Your hand passes through it as though it weren''t there.'
 - BREAK_MIRROR: |-
     You strike the mirror a resounding blow, whereupon it shatters into a
@@ -3026,9 +2891,9 @@ arbitrary_messages:  !!omap
     you, curses, and grabs for his axe.
 - THIS_ACCEPTABLE: 'Is this acceptable?'
 # This message is not currently used
-- ALREADY_OVER: |-
-    This adventure is already over.  To start a new adventure, or to
-    resume an earlier adventure, please run a fresh copy of the program.
+#- ALREADY_OVER: |-
+#    This adventure is already over.  To start a new adventure, or to
+#    resume an earlier adventure, please run a fresh copy of the program.
 - OGRE_FULL: 'The ogre doesn''t appear to be hungry.'
 - OGRE_DODGE: |-
     The ogre, who despite his bulk is quite agile, easily dodges your
@@ -3124,26 +2989,26 @@ arbitrary_messages:  !!omap
 - OFF_SCALE: 'You just went off my scale!!'
 - RESUME_HELP: 'To resume your Adventure, start a new game and then say "RESUME".'
 # This message is not currently used
-- TABLE_SPACE: |-
-    Table space used:
-    %d of %d words of messages   %d of %d travel options
-    %d of %d vocabulary words    %d of %d locations
-    %d of %d objects             %d of %d action verbs
-    %d of %d "random" messages   %d of %d "class" messages
-    %d of %d hints               %d of %d turn threshholds'
+#- TABLE_SPACE: |-
+#    Table space used:
+#    %d of %d words of messages   %d of %d travel options
+#    %d of %d vocabulary words    %d of %d locations
+#    %d of %d objects             %d of %d action verbs
+#    %d of %d "random" messages   %d of %d "class" messages
+#    %d of %d hints               %d of %d turn threshholds'
 - RESUME_ABANDON: 'To resume an earlier Adventure, you must abandon the current one.'
 - VERSION_SKEW: |-
     I'm sorry, but that Adventure was begun using Version %d.%d of the
     save file format, and this program uses Version %d.%d.  You must find an instance
     using that other version in order to resume that Adventure.
 # This message is not currently used
-- SAVE_TAMPERING: |-
-    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.
+#- SAVE_TAMPERING: |-
+#    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.
 - TWIST_TURN: |-
     Sorry, but the path twisted and turned so much that I can't figure
     out which way to go to get back.
@@ -3212,9 +3077,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.'
@@ -3223,9 +3089,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.'
@@ -3252,6 +3119,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.'
@@ -3259,10 +3127,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.'
@@ -3282,9 +3151,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.'
     - |-
@@ -3301,20 +3171,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'
@@ -3375,10 +3250,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'
@@ -3400,13 +3280,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, ..."'
-    - [PLANT_BELLOWING, 'There is a 12-foot-tall beanstalk stretching up out of the pit,\nbellowing "WATER!! WATER!!"']
-    - [PLANT_GROWN, 'There is a gigantic beanstalk stretching all the way up to the hole.']
+    - '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.'
@@ -3438,9 +3320,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.'
@@ -3461,10 +3344,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:
     - ''
     - |-
@@ -3480,21 +3364,37 @@ 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.'
+    changes:
+    - ''
+    - |- 
+        Just as you reach the other side, the bridge buckles beneath the
+        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:
     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'
@@ -3504,14 +3404,20 @@ objects: !!omap
     - 'The troll is nowhere to be seen.'
 - BEAR:
     words: ['bear']
-    inventory: !!null # bear uses rtext 141
+    inventory: !!null
     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.'
+    - ''
+    changes:
+    - ''
+    - 'The bear eagerly wolfs down your food, after which he seems to calm\ndown considerably and even becomes rather friendly.'
+    - ''
+    - ''
 - MESSAG:
     words: ['messa']
     inventory: '*message in second maze'
@@ -3534,9 +3440,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.'
@@ -3547,9 +3458,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'
@@ -3570,10 +3482,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.'
@@ -3583,9 +3496,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'
@@ -3598,10 +3512,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'
@@ -3631,9 +3548,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.
@@ -3687,10 +3605,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'
@@ -3703,14 +3622,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']
@@ -3740,10 +3659,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'
@@ -3757,10 +3677,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'
@@ -3781,9 +3702,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'
@@ -3821,25 +3743,141 @@ obituaries:
         me to do a decent reincarnation without any orange smoke, do you?
     yes_response: 'Okay, if you''re so smart, do it yourself!  I''m leaving!'
 
-specials: !!omap
-- SPC_0:
+actions: !!omap
+- ACT_0:
     message: !!null
     words: !!null
-- SPC_1:
-    message: !!null
+- CARRY:
+    message: *already_carrying
+    words: ['g', 'carry', 'take', 'keep', 'catch',
+            'steal', 'captu', 'get', 'tote', 'snarf']
+    oldstyle: false
+- DROP:
+    message: *arent_carrying
+    words: ['drop', 'relea', 'free', 'disca', 'dump']
+- SAY:
+    message: NO_MESSAGE
+    words: ['say', 'chant', 'sing', 'utter', 'mumbl']
+- UNLOCK:
+    message: *not_lockable
+    words: ['unloc', 'open']
+- NOTHING:
+    message: NO_MESSAGE
+    words: ['z', 'nothi']
+    oldstyle: false
+- LOCK:
+    message: *not_lockable
+    words: ['lock', 'close']
+- LIGHT:
+    message: *dont_understand
+    words: ['light', 'on']
+- EXTINGUISH:
+    message: *dont_understand
+    words: ['extin', 'off']
+- WAVE:
+    message: *nothing_happens
+    words: ['wave', 'shake', 'swing']
+- TAME:
+    message: *am_game
+    words: ['calm', 'placa', 'tame']
+- GO:
+    message: *where_query
+    words: ['walk', 'run', 'trave', 'go', 'proce',
+            'conti', 'explo', 'follo', 'turn']
+- ATTACK:
+    message: *ridiculous_attempt
+    words: ['attac', 'kill', 'fight', 'hit', 'strik', 'slay']
+- POUR:
+    message: *arent_carrying
+    words: ['pour']
+- EAT:
+    message: *ridiculous_attempt
+    words: ['eat', 'devou']
+- DRINK:
+    message: |-
+      You have taken a drink from the stream.  The water tastes strongly of
+      minerals, but is not unpleasant.  It is extremely cold.
+    words: ['drink']
+- RUB:
+    message: |-
+      Rubbing the electric lamp is not particularly rewarding.  Anyway,
+      nothing exciting happens.
+    words: ['rub']
+- THROW:
+    message: *arent_carrying
+    words: ['throw', 'toss']
+- QUIT:
+    message: *huh_man
+    words: ['quit']
+- FIND:
+    message: *nearby
+    words: ['find', 'where']
+- INVENTORY:
+    message: *nearby
+    words: ['i', 'inven']
+    oldstyle: false
+- FEED:
+    message: 'There is nothing here to eat.'
+    words: ['feed']
+- FILL:
+    message: 'You can''t fill that.'
+    words: ['fill']
+- BLAST:
+    message: *requires_dynamite
+    words: ['blast', 'deton', 'ignit', 'blowu']
+- SCORE:
+    message: *huh_man
+    words: ['score']
+- FEE:
+    message: *not_knowhow
     words: ['fee']
-- SPC_2:
-    message: !!null
+- FIE:
+    message: *not_knowhow
     words: ['fie']
-- SPC_3:
-    message: !!null
+- FOE:
+    message: *not_knowhow
     words: ['foe']
-- SPC_4:
-    message: !!null
+- FOO:
+    message: *not_knowhow
     words: ['foo']
-- SPC_5:
-    message: !!null
+- FUM:
+    message: *not_knowhow
     words: ['fum']
+- BRIEF:
+    message: 'On what?'
+    words: ['brief']
+- READ:
+    message: *dont_understand
+    words: ['read', 'perus']
+- BREAK:
+    message: *beyond_power
+    words: ['break', 'shatt', 'smash']
+- WAKE:
+    message: *ridiculous_attempt
+    words: ['wake', 'distu']
+- SAVE:
+    message: *huh_man
+    words: ['suspe', 'pause', 'save']
+- RESUME:
+    message: *huh_man
+    words: ['resum', 'resta']
+- FLY:
+    message: *am_game
+    words: ['fly']
+- LISTEN:
+    message: *dont_understand
+    words: ['liste']
+- PART:
+    message: *nothing_happens
+    words: ['z''zzz']
+- ACT_35:
+    message: *huh_man
+    words: !!null
+
+specials: !!omap
+- SPC_0:
+    message: !!null
+    words: !!null
 - SPC_13:
     message: 'You''re quite welcome.'
     words: ['thank']