Comment polishing.
[open-adventure.git] / adventure.yaml
index 622b3198013ba1ce5584867da91be709df566f9f..e01ca5cc2629535c04855936d3a131590a8d8110 100644 (file)
@@ -6,19 +6,23 @@
 #
 # We define a bunch of YAML structures:
 #
-# hints: Each item contains a hint number (add 10 to get cond bit),
-#    a hint label (used to generate the value macro for the hint) 
-#    the number of turns he must be at the right loc(s) before
-#    triggering the hint, the points deducted for taking the hint, the
-#    message number (section 6) of the question, and the message
-#    number of the hint.  These values are stashed in the "hints"
-#    array.
+# vocabulary: Almost all the words the game knows - one of them (the
+#    reservoir magic word) gets replaced with a randomly-generated
+#    cookie.  For each word there is a type (motion, action, object,
+#    or special) and a numeric value.  Multiple synonyms may have the
+#    same value.
 #
-# locations: They have attributes as follows...
+# hints: Each item contains a hint number, a hint label (used to
+#    generate the value macro for the hint) the number of turns he
+#    must be at the right loc(s) before triggering the hint, the
+#    points deducted for taking the hint, the message number (in
+#    arbitrary_messages) of the question, and the message number of
+#    the hint.
 #
-#    long:         Long description, always shown on first encounter.
-#    short:        Short description. If none, use long description.
-#    conditions:   A dictionary of attributes
+# locations: They have attributes as follows...
+#      long:         Long description, always shown on first encounter.
+#      short:        Short description. If none, use long description.
+#      conditions:   A dictionary of attributes
 #        LIT           Light
 #        OILY          If FLUID flag is on: true for oil, false for water
 #        FLUID         Liquid asset
 #        HWOODS                Lost in forest
 #        HOGRE         Trying to deal with ogre
 #        HJADE         Found all treasures except jade
-#    hints:        A list of YAML references to hints that may be available at
-#                  this location. (This is why locations has to follow hints.)
-#    sound:        Label for a location sound.
-#    loud:         If true, object sounds are drowned out at this location.
-#
+#      hints:        A list of YAML references to hints that may be available at
+#                    this location. (This is why locations has to follow hints.)
+#      sound:        Label for a location sound.
+#      loud:         If true, object sounds are drowned out at this location.
 #    All attributes are optional except the long description. Order of
 #    locations is not significant.
 #
 #    Order doesn't matter; the logic simply tests every threshold on
 #    the assumption that turn counts never decrease nor skip values.
 #
-# objects: Each item contains a description for use in the inventory command
-#    and one or more messages describing the object in different states.
-#    There is also a boolean "treasure" attribute, defaulting to false.
-#    An pbject 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).
-#    An object may also be flagged immovable, meaning it cannot be carried.
-#    If a state message is a tuple then the first element is made the name
-#    of a #define viible to the code for the associayed state, numbered
-#    from zero upwards. If the inventory desription begins with "*" the
-#    object is dungeon furniture that cannot be taken or carried.
+# object_descriptions: Each item contains a description for use in the
+#    inventory command and one or more messages describing the object
+#    in different states.  There is also a boolean "treasure"
+#    attribute, defaulting to false.  An pbject 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).  An object may also be
+#    flagged immovable, meaning it cannot be carried.  If a state
+#    message is a tuple then the first element is made the name of a
+#    #define viible to the code for the associayed state, numbered
+#    from zero upwards. If the inventory desription begins with "*"
+#    the object is dungeon furniture that cannot be taken or carried.
 #
 # obituaries: Death messages and reincarnation queries.  Order is
 #    significant, they're used in succession as the player racks up
 #    deaths.
 #
-# These correspond to sections 1, 2, 5, 6, 7, 9, 10, 11, 13, and 14 in
-# the old adventure.text format.  Sections 3, 4, and 8 haven't moved
+# These correspond to sections 1, 2, 4, 5, 6, 7, 9, 10, 11, 13, and 14 in
+# the old adventure.text format.  Sections 3 and 8 haven't moved
 # yet.  Section 12 was obsolete.
 #
 # Message strings may include certain special character sequences to
 #      %B = Variable number of blanks
 #      %! = The entire message should be suppressed
 
+# There are duplicate keys in this vocabulary, that's why it can't be a normal
+# map.  You have to iterate through it looking for a match qualified by type.
+vocabulary: [
+    {word: "ROAD",  type: motion, value: 2},
+    {word: "HILL",  type: motion, value: 2},
+    {word: "ENTER", type: motion, value: 3},
+    {word: "UPSTR", type: motion, value: 4},
+    {word: "DOWNS", type: motion, value: 5},
+    {word: "FORES", type: motion, value: 6},
+    {word: "FORWA", type: motion, value: 7},
+    {word: "CONTI", type: motion, value: 7},
+    {word: "ONWAR", type: motion, value: 7},
+    {word: "BACK",  type: motion, value: 8},
+    {word: "RETUR", type: motion, value: 8},
+    {word: "RETRE", type: motion, value: 8},
+    {word: "VALLE", type: motion, value: 9},
+    {word: "STAIR", type: motion, value: 10},
+    {word: "OUT",   type: motion, value: 11},
+    {word: "OUTSI", type: motion, value: 11},
+    {word: "EXIT",  type: motion, value: 11},
+    {word: "LEAVE", type: motion, value: 11},
+    {word: "BUILD", type: motion, value: 12},
+    {word: "HOUSE", type: motion, value: 12},
+    {word: "GULLY", type: motion, value: 13},
+    {word: "STREA", type: motion, value: 14},
+    {word: "FORK",  type: motion, value: 15},
+    {word: "BED",   type: motion, value: 16},
+    {word: "CRAWL", type: motion, value: 17},
+    {word: "COBBL", type: motion, value: 18},
+    {word: "INWAR", type: motion, value: 19},
+    {word: "INSID", type: motion, value: 19},
+    {word: "IN",    type: motion, value: 19},
+    {word: "SURFA", type: motion, value: 20},
+    {word: "NULL",  type: motion, value: 21},
+    {word: "NOWHE", type: motion, value: 21},
+    {word: "DARK",  type: motion, value: 22},
+    {word: "PASSA", type: motion, value: 23},
+    {word: "TUNNE", type: motion, value: 23},
+    {word: "LOW",   type: motion, value: 24},
+    {word: "CANYO", type: motion, value: 25},
+    {word: "AWKWA", type: motion, value: 26},
+    {word: "GIANT", type: motion, value: 27},
+    {word: "VIEW",  type: motion, value: 28},
+    {word: "UPWAR", type: motion, value: 29},
+    {word: "UP",    type: motion, value: 29},
+    {word: "U",     type: motion, value: 29},
+    {word: "ABOVE", type: motion, value: 29},
+    {word: "ASCEN", type: motion, value: 29},
+    {word: "D",     type: motion, value: 30},
+    {word: "DOWNW", type: motion, value: 30},
+    {word: "DOWN",  type: motion, value: 30},
+    {word: "DESCE", type: motion, value: 30},
+    {word: "PIT",   type: motion, value: 31},
+    {word: "OUTDO", type: motion, value: 32},
+    {word: "CRACK", type: motion, value: 33},
+    {word: "STEPS", type: motion, value: 34},
+    {word: "DOME",  type: motion, value: 35},
+    {word: "LEFT",  type: motion, value: 36},
+    {word: "RIGHT", type: motion, value: 37},
+    {word: "HALL",  type: motion, value: 38},
+    {word: "JUMP",  type: motion, value: 39},
+    {word: "BARRE", type: motion, value: 40},
+    {word: "OVER",  type: motion, value: 41},
+    {word: "ACROS", type: motion, value: 42},
+    {word: "EAST",  type: motion, value: 43},
+    {word: "E",     type: motion, value: 43},
+    {word: "WEST",  type: motion, value: 44},
+    {word: "W",     type: motion, value: 44},
+    {word: "NORTH", type: motion, value: 45},
+    {word: "N",     type: motion, value: 45},
+    {word: "SOUTH", type: motion, value: 46},
+    {word: "S",     type: motion, value: 46},
+    {word: "NE",    type: motion, value: 47},
+    {word: "SE",    type: motion, value: 48},
+    {word: "SW",    type: motion, value: 49},
+    {word: "NW",    type: motion, value: 50},
+    {word: "DEBRI", type: motion, value: 51},
+    {word: "HOLE",  type: motion, value: 52},
+    {word: "WALL",  type: motion, value: 53},
+    {word: "BROKE", type: motion, value: 54},
+    {word: "Y2",    type: motion, value: 55},
+    {word: "CLIMB", type: motion, value: 56},
+    {word: "LOOK",  type: motion, value: 57},
+    {word: "EXAMI", type: motion, value: 57},
+    {word: "TOUCH", type: motion, value: 57},
+    {word: "DESCR", type: motion, value: 57},
+    {word: "FLOOR", type: motion, value: 58},
+    {word: "ROOM",  type: motion, value: 59},
+    {word: "SLIT",  type: motion, value: 60},
+    {word: "SLAB",  type: motion, value: 61},
+    {word: "SLABR", type: motion, value: 61},
+    {word: "XYZZY", type: motion, value: 62},
+    {word: "DEPRE", type: motion, value: 63},
+    {word: "ENTRA", type: motion, value: 64},
+    {word: "PLUGH", type: motion, value: 65},
+    {word: "SECRE", type: motion, value: 66},
+    {word: "CAVE",  type: motion, value: 67},
+    {word: "CROSS", type: motion, value: 69},
+    {word: "BEDQU", type: motion, value: 70},
+    {word: "PLOVE", type: motion, value: 71},
+    {word: "ORIEN", type: motion, value: 72},
+    {word: "CAVER", type: motion, value: 73},
+    {word: "SHELL", type: motion, value: 74},
+    {word: "RESER", type: motion, value: 75},
+    {word: "MAIN",  type: motion, value: 76},
+    {word: "OFFIC", type: motion, value: 76},
+    {word: "KEYS",  type: object, value: 1},
+    {word: "KEY",   type: object, value: 1},
+    {word: "LAMP",  type: object, value: 2},
+    {word: "LANTE", type: object, value: 2},
+    {word: "GRATE", type: object, value: 3},
+    {word: "CAGE",  type: object, value: 4},
+    {word: "ROD",   type: object, value: 5},
+    {word: "ROD",   type: object, value: 6}, # Must be next object after "real" rod
+    {word: "STEPS", type: object, value: 7},
+    {word: "BIRD",  type: object, value: 8},
+    {word: "DOOR",  type: object, value: 9},
+    {word: "PILLO", type: object, value: 10},
+    {word: "VELVE", type: object, value: 10},
+    {word: "SNAKE", type: object, value: 11},
+    {word: "FISSU", type: object, value: 12},
+    {word: "TABLE", type: object, value: 13},
+    {word: "CLAM",  type: object, value: 14},
+    {word: "OYSTE", type: object, value: 15},
+    {word: "MAGAZ", type: object, value: 16},
+    {word: "ISSUE", type: object, value: 16},
+    {word: "SPELU", type: object, value: 16},
+    {word: '"SPEL', type: object, value: 16},
+    {word: "DWARF", type: object, value: 17},
+    {word: "DWARV", type: object, value: 17},
+    {word: "KNIFE", type: object, value: 18},
+    {word: "KNIVE", type: object, value: 18},
+    {word: "FOOD",  type: object, value: 19},
+    {word: "RATIO", type: object, value: 19},
+    {word: "BOTTL", type: object, value: 20},
+    {word: "JAR",   type: object, value: 20},
+    {word: "WATER", type: object, value: 21},
+    {word: "H2O",   type: object, value: 21},
+    {word: "OIL",   type: object, value: 22},
+    {word: "MIRRO", type: object, value: 23},
+    {word: "PLANT", type: object, value: 24},
+    {word: "BEANS", type: object, value: 24},
+    {word: "PLANT", type: object, value: 25}, # Must be next object after "real" plant
+    {word: "STALA", type: object, value: 26},
+    {word: "SHADO", type: object, value: 27},
+    {word: "FIGUR", type: object, value: 27},
+    {word: "WINDO", type: object, value: 27}, # Same as figure
+    {word: "AXE",   type: object, value: 28},
+    {word: "DRAWI", type: object, value: 29},
+    {word: "PIRAT", type: object, value: 30},
+    {word: "GENIE", type: object, value: 30},
+    {word: "DJINN", type: object, value: 30},
+    {word: "DRAGO", type: object, value: 31},
+    {word: "CHASM", type: object, value: 32},
+    {word: "TROLL", type: object, value: 33},
+    {word: "TROLL", type: object, value: 34}, # Must be next object after "real" troll
+    {word: "BEAR",  type: object, value: 35},
+    {word: "MESSA", type: object, value: 36},
+    {word: "VOLCA", type: object, value: 37},
+    {word: "GEYSE", type: object, value: 37}, # Same as volcano
+    {word: "MACHI", type: object, value: 38},
+    {word: "VENDI", type: object, value: 38},
+    {word: "BATTE", type: object, value: 39},
+    {word: "CARPE", type: object, value: 40},
+    {word: "MOSS",  type: object, value: 40},
+    {word: "CURTA", type: object, value: 40}, # Same as carpet
+    {word: "OGRE",  type: object, value: 41},
+    {word: "URN",   type: object, value: 42},
+    {word: "CAVIT", type: object, value: 43},
+    {word: "BLOOD", type: object, value: 44},
+    {word: "RESER", type: object, value: 45}, # Verb overrides
+    {word: "APPEN", type: object, value: 46},
+    {word: "LEPOR", type: object, value: 46},
+    {word: "MUD",   type: object, value: 47},
+    {word: "NOTE",  type: object, value: 48},
+    {word: "SIGN",  type: object, value: 49},
+    {word: "GOLD",  type: object, value: 50},
+    {word: "NUGGE", type: object, value: 50},
+    {word: "DIAMO", type: object, value: 51},
+    {word: "SILVE", type: object, value: 52},
+    {word: "BARS",  type: object, value: 52},
+    {word: "JEWEL", type: object, value: 53},
+    {word: "COINS", type: object, value: 54},
+    {word: "CHEST", type: object, value: 55},
+    {word: "BOX",   type: object, value: 55},
+    {word: "TREAS", type: object, value: 55},
+    {word: "EGGS",  type: object, value: 56},
+    {word: "EGG",   type: object, value: 56},
+    {word: "NEST",  type: object, value: 56},
+    {word: "TRIDE", type: object, value: 57},
+    {word: "VASE",  type: object, value: 58},
+    {word: "MING",  type: object, value: 58},
+    {word: "SHARD", type: object, value: 58},
+    {word: "POTTE", type: object, value: 58},
+    {word: "EMERA", type: object, value: 59},
+    {word: "PLATI", type: object, value: 60},
+    {word: "PYRAM", type: object, value: 60},
+    {word: "PEARL", type: object, value: 61},
+    {word: "RUG",   type: object, value: 62},
+    {word: "PERSI", type: object, value: 62},
+    {word: "SPICE", type: object, value: 63},
+    {word: "CHAIN", type: object, value: 64},
+    {word: "RUBY",  type: object, value: 65},
+    {word: "JADE",  type: object, value: 66},
+    {word: "NECKL", type: object, value: 66},
+    {word: "AMBER", type: object, value: 67},
+    {word: "GEMST", type: object, value: 67},
+    {word: "SAPPH", type: object, value: 68},
+    {word: "EBONY", type: object, value: 69},
+    {word: "STATU", type: object, value: 69},
+    {word: "CARRY", type: action, value: 1},
+    {word: "TAKE",  type: action, value: 1},
+    {word: "KEEP",  type: action, value: 1},
+    {word: "CATCH", type: action, value: 1},
+    {word: "STEAL", type: action, value: 1},
+    {word: "CAPTU", type: action, value: 1},
+    {word: "GET",   type: action, value: 1},
+    {word: "TOTE",  type: action, value: 1},
+    {word: "SNARF", type: action, value: 1},
+    {word: "DROP",  type: action, value: 2},
+    {word: "RELEA", type: action, value: 2},
+    {word: "FREE",  type: action, value: 2},
+    {word: "DISCA", type: action, value: 2},
+    {word: "DUMP",  type: action, value: 2},
+    {word: "SAY",   type: action, value: 3},
+    {word: "CHANT", type: action, value: 3},
+    {word: "SING",  type: action, value: 3},
+    {word: "UTTER", type: action, value: 3},
+    {word: "MUMBL", type: action, value: 3},
+    {word: "UNLOC", type: action, value: 4},
+    {word: "OPEN",  type: action, value: 4},
+    {word: "NOTHI", type: action, value: 5},
+    {word: "LOCK",  type: action, value: 6},
+    {word: "CLOSE", type: action, value: 6},
+    {word: "LIGHT", type: action, value: 7},
+    {word: "ON",    type: action, value: 7},
+    {word: "EXTIN", type: action, value: 8},
+    {word: "OFF",   type: action, value: 8},
+    {word: "WAVE",  type: action, value: 9},
+    {word: "SHAKE", type: action, value: 9},
+    {word: "SWING", type: action, value: 9},
+    {word: "CALM",  type: action, value: 10},
+    {word: "PLACA", type: action, value: 10},
+    {word: "TAME",  type: action, value: 10},
+    {word: "WALK",  type: action, value: 11},
+    {word: "RUN",   type: action, value: 11},
+    {word: "TRAVE", type: action, value: 11},
+    {word: "GO",    type: action, value: 11},
+    {word: "PROCE", type: action, value: 11},
+    {word: "CONTI", type: action, value: 11},
+    {word: "EXPLO", type: action, value: 11},
+    {word: "FOLLO", type: action, value: 11},
+    {word: "TURN",  type: action, value: 11},
+    {word: "ATTAC", type: action, value: 12},
+    {word: "KILL",  type: action, value: 12},
+    {word: "FIGHT", type: action, value: 12},
+    {word: "HIT",   type: action, value: 12},
+    {word: "STRIK", type: action, value: 12},
+    {word: "SLAY",  type: action, value: 12},
+    {word: "POUR",  type: action, value: 13},
+    {word: "EAT",   type: action, value: 14},
+    {word: "DEVOU", type: action, value: 14},
+    {word: "DRINK", type: action, value: 15},
+    {word: "RUB",   type: action, value: 16},
+    {word: "THROW", type: action, value: 17},
+    {word: "TOSS",  type: action, value: 17},
+    {word: "QUIT",  type: action, value: 18},
+    {word: "FIND",  type: action, value: 19},
+    {word: "WHERE", type: action, value: 19},
+    {word: "INVEN", type: action, value: 20},
+    {word: "FEED",  type: action, value: 21},
+    {word: "FILL",  type: action, value: 22},
+    {word: "BLAST", type: action, value: 23},
+    {word: "DETON", type: action, value: 23},
+    {word: "IGNIT", type: action, value: 23},
+    {word: "BLOWU", type: action, value: 23},
+    {word: "SCORE", type: action, value: 24},
+    {word: "FEE",   type: action, value: 25},
+    {word: "FIE",   type: action, value: 25},
+    {word: "FOE",   type: action, value: 25},
+    {word: "FOO",   type: action, value: 25},
+    {word: "FUM",   type: action, value: 25},
+    {word: "BRIEF", type: action, value: 26},
+    {word: "READ",  type: action, value: 27},
+    {word: "PERUS", type: action, value: 27},
+    {word: "BREAK", type: action, value: 28},
+    {word: "SHATT", type: action, value: 28},
+    {word: "SMASH", type: action, value: 28},
+    {word: "WAKE",  type: action, value: 29},
+    {word: "DISTU", type: action, value: 29},
+    {word: "SUSPE", type: action, value: 30},
+    {word: "PAUSE", type: action, value: 30},
+    {word: "SAVE",  type: action, value: 30},
+    {word: "RESUM", type: action, value: 31},
+    {word: "RESTA", type: action, value: 31},
+    {word: "FLY",   type: action, value: 32},
+    {word: "LISTE", type: action, value: 33},
+    {word: "Z'ZZZ", type: action, value: 34}, # Gets replaced
+    {word: "FEE",   type: special, value: 1},
+    {word: "FIE",   type: special, value: 2},
+    {word: "FOE",   type: special, value: 3},
+    {word: "FOO",   type: special, value: 4},
+    {word: "FUM",   type: special, value: 5},
+    {word: "THANK", type: special, value: 13},
+    {word: "SESAM", type: special, value: 50},
+    {word: "OPENS", type: special, value: 50},
+    {word: "ABRA",  type: special, value: 50},
+    {word: "ABRAC", type: special, value: 50},
+    {word: "SHAZA", type: special, value: 50},
+    {word: "HOCUS", type: special, value: 50},
+    {word: "POCUS", type: special, value: 50},
+    {word: "HELP",  type: special, value: 51},
+    {word: "?",     type: special, value: 51},
+    {word: "NO",    type: special, value: 54},
+    {word: "TREE",  type: special, value: 64},
+    {word: "TREES", type: special, value: 64},
+    {word: "DIG",   type: special, value: 66},
+    {word: "EXCAV", type: special, value: 66},
+    {word: "LOST",  type: special, value: 68},
+    {word: "MIST",  type: special, value: 69},
+    {word: "FUCK",  type: special, value: 79},
+    {word: "STOP",  type: special, value: 139},
+    {word: "INFO",  type: special, value: 142},
+    {word: "INFOR", type: special, value: 142},
+    {word: "SWIM",  type: special, value: 147},
+    {word: "WIZAR", type: special, value: 246},
+    {word: "YES",   type: special, value: 271},
+    {word: "NEWS",  type: special, value: 275},
+]
+
 # FIXME: Hint texts shouldn't be in arbitrary_messages, but inlined here
 hints:
   - hint: &grate