X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=adventure.yaml;h=e01ca5cc2629535c04855936d3a131590a8d8110;hb=4821aeff60eba24fc08d255a03d601e0e3ce9bee;hp=622b3198013ba1ce5584867da91be709df566f9f;hpb=8a6e6aae7d289c4f7d5c419aba5f39f5eb74fb08;p=open-adventure.git diff --git a/adventure.yaml b/adventure.yaml index 622b319..e01ca5c 100644 --- a/adventure.yaml +++ b/adventure.yaml @@ -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 @@ -34,11 +38,10 @@ # 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. # @@ -62,23 +65,24 @@ # 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 @@ -97,6 +101,336 @@ # %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