X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=adventure.yaml;h=e01ca5cc2629535c04855936d3a131590a8d8110;hb=4821aeff60eba24fc08d255a03d601e0e3ce9bee;hp=60177932c5514b59a0795ff6ec2730d922c344d7;hpb=c3a2816821512b59a09866a594a9bec699193271;p=open-adventure.git diff --git a/adventure.yaml b/adventure.yaml index 6017793..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,21 +65,371 @@ # 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, deaykting to false. -# 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, 9, 10, 11, 13, and 14 in the old -# adventure.text format. Sections 3, 4, 7, and 8 haven't moved yet. -# Section 12 was obsolete. +# 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 +# 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 + +# 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: @@ -1484,37 +1837,47 @@ object_descriptions: !!omap longs: !!null - OBJ_1: inventory: 'Set of keys' + locations: LOC_BUILDING longs: - 'There are some keys on the ground here.' - OBJ_2: inventory: 'Brass lantern' + locations: LOC_BUILDING longs: - [LAMP_DARK, 'There is a shiny brass lamp nearby.'] - [LAMP_BRIGHT, 'There is a lamp shining nearby.'] - OBJ_3: inventory: '*grate' + locations: [LOC_GRATE, LOC_BELOWGRATE] + immovable: true longs: - [GRATE_CLOSED, 'The grate is locked.'] - [GRATE_OPEN, 'The grate is open.'] - OBJ_4: inventory: 'Wicker cage' + locations: LOC_COBBLE longs: - 'There is a small wicker cage discarded nearby.' - OBJ_5: inventory: 'Black rod' + locations: LOC_DEBRIS longs: - 'A three foot black rod with a rusty star on an end lies nearby.' - OBJ_6: inventory: 'Black rod' + locations: LOC_NOWHERE longs: - 'A three foot black rod with a rusty mark on an end lies nearby.' - OBJ_7: inventory: '*steps' + locations: [LOC_PITTOP, LOC_MISTHALL] + immovable: true longs: - 'Rough stone steps lead down the pit.' - 'Rough stone steps lead up the dome.' - OBJ_8: inventory: 'Little bird in cage' + locations: LOC_BIRD longs: - [BIRD_UNCAGED, 'A cheerful little bird is sitting here singing.'] - [BIRD_CAGED, 'There is a little bird in the cage.'] @@ -1528,15 +1891,20 @@ object_descriptions: !!omap - 'The bird is singing to you in gratitude for your having returned it to\nits home. In return, it informs you of a magic word which it thinks\nyou may find useful somewhere near the Hall of Mists. The magic word\nchanges frequently, but for now the bird believes it is "%s". You\nthank the bird for this information, and it flies off into the forest.' - OBJ_9: inventory: '*rusty door' + locations: LOC_IMMENSE + immovable: true longs: - 'The way north is barred by a massive, rusty, iron door.' - 'The way north leads through a massive, rusty, iron door.' - OBJ_10: inventory: 'Velvet pillow' + locations: LOC_SOFTROOM longs: - 'A small velvet pillow lies on the floor.' - OBJ_11: inventory: '*snake' + locations: LOC_KINGHALL + immovable: true longs: - 'A huge green fierce snake bars the way!' - '' # chased away @@ -1544,24 +1912,30 @@ object_descriptions: !!omap - 'The snake is hissing venomously.' - OBJ_12: inventory: '*fissure' + locations: [LOC_EASTBANK, LOC_WESTBANK] + immovable: true longs: - '' - 'A crystal bridge now spans the fissure.' - 'The crystal bridge has vanished!' - OBJ_13: inventory: '*stone tablet' + locations: LOC_DARKROOM + immovable: true longs: - 'A massive stone tablet imbedded in the wall reads:\n"Congratulations on bringing light into the dark-room!"' texts: - '"Congratulations on bringing light into the dark-room!"' - OBJ_14: inventory: 'Giant clam >GRUNT!<' + locations: LOC_SHELLROOM longs: - 'There is an enormous clam here with its shell tightly closed.' sounds: - 'The clam is as tight-mouthed as a, er, clam.' - OBJ_15: inventory: 'Giant oyster >GROAN!<' + locations: LOC_NOWHERE longs: - 'There is an enormous oyster here with its shell tightly closed.' - 'Interesting. There seems to be something written on the underside of\nthe oyster.' @@ -1570,37 +1944,49 @@ object_descriptions: !!omap - 'It says the same thing it did before. Hm, maybe it''s a pun?' - OBJ_16: inventory: '"Spelunker Today"' + locations: LOC_ANTEROOM longs: - 'There are a few recent issues of "Spelunker Today" magazine here.' texts: - 'I''m afraid the magazine is written in dwarvish. But pencilled on one\ncover you see, "Please leave the magazines at the construction site."' - OBJ_17: inventory: !!null + locations: LOC_NOWHERE + immovable: true longs: !!null - OBJ_18: inventory: !!null + locations: LOC_NOWHERE longs: !!null - OBJ_19: inventory: 'Tasty food' + locations: LOC_BUILDING longs: - 'There is food here.' - OBJ_20: inventory: 'Small bottle' + locations: LOC_BUILDING longs: - [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.'] - OBJ_21: inventory: 'Water in the bottle' + locations: LOC_NOWHERE longs: !!null - OBJ_22: inventory: 'Oil in the bottle' + locations: LOC_NOWHERE longs: !!null - OBJ_23: inventory: '*mirror' + locations: LOC_MIRRORCANYON + immovable: true longs: !!null - OBJ_24: inventory: '*plant' + locations: LOC_WESTPIT + immovable: true longs: - '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,\nbellowing "WATER!! WATER!!"' @@ -1614,31 +2000,44 @@ object_descriptions: !!omap - 'The plant now maintains a contented silence.' - OBJ_25: inventory: '*phony plant' # seen in Twopit Room only when tall enough + locations: [LOC_WESTEND, LOC_EASTEND] + immovable: true longs: - '' - 'The top of a 12-foot-tall beanstalk is poking out of the west pit.' - 'There is a huge beanstalk growing out of the west pit up to the hole.' - OBJ_26: inventory: '*stalactite' + locations: LOC_TOPSTALACTITE + immovable: true longs: - '' - OBJ_27: inventory: '*shadowy figure and/or window' + locations: [LOC_WINDOW1, LOC_WINDOW2] + immovable: true longs: - 'The shadowy figure seems to be trying to attract your attention.' - OBJ_28: inventory: 'Dwarf''s axe' + locations: LOC_NOWHERE longs: - 'There is a little axe here.' - 'There is a little axe lying beside the bear.' - OBJ_29: inventory: '*cave drawings' + locations: LOC_ORIENTAL + immovable: true longs: !!null - OBJ_30: inventory: '*pirate/genie' + locations: LOC_NOWHERE + immovable: true longs: !!null # never present - OBJ_31: inventory: '*dragon' + locations: [LOC_SECRET4, LOC_SECRET6] + immovable: true longs: - 'A huge green fierce dragon bars the way!' - 'The blood-specked body of a huge green dead dragon lies to one side.' @@ -1650,11 +2049,15 @@ object_descriptions: !!omap - 'The dragon is, not surprisingly, silent.' - OBJ_32: inventory: '*chasm' + locations: [LOC_SWCHASM, LOC_NECHASM] + immovable: true longs: - '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.' - OBJ_33: inventory: '*troll' + locations: [LOC_SWCHASM, LOC_NECHASM] + immovable: true longs: - '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.' @@ -1663,10 +2066,14 @@ object_descriptions: !!omap - 'The troll sounds quite adamant in his demand for a treasure.' - OBJ_34: inventory: '*phony troll' + locations: [LOC_NOWHERE, LOC_NOWHERE] + immovable: true longs: - 'The troll is nowhere to be seen.' - OBJ_35: inventory: !!null # bear uses rtext 141 + locations: LOC_BARRENROOM + immovable: true longs: - '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.' @@ -1674,15 +2081,21 @@ object_descriptions: !!omap - '' # dead - OBJ_36: inventory: '*message in second maze' + locations: LOC_NOWHERE + immovable: true longs: - 'There is a message scrawled in the dust in a flowery script, reading:\n"This is not the maze where the pirate leaves his treasure chest."' texts: - '"This is not the maze where the pirate leaves his treasure chest."' - OBJ_37: inventory: '*volcano and/or geyser' + locations: LOC_BREATHTAKING + immovable: true longs: !!null - OBJ_38: inventory: '*vending machine' + locations: LOC_DEADEND13 + immovable: true longs: - [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.'] @@ -1691,57 +2104,77 @@ object_descriptions: !!omap - '"Drop coins here to receive fresh batteries."' - OBJ_39: inventory: 'Batteries' + locations: LOC_NOWHERE longs: - [FRESH_BATTERIES, 'There are fresh batteries here.'] - [DEAD_BATTERIES, 'Some worn-out batteries have been discarded nearby.'] - OBJ_40: inventory: '*carpet and/or moss and/or curtains' + locations: LOC_SOFTROOM + immovable: true longs: !!null - OBJ_41: inventory: '*ogre' + locations: LOC_LARGE + immovable: true longs: - 'A formidable ogre bars the northern exit.' sounds: - 'The ogre is apparently the strong, silent type.' - OBJ_42: inventory: '*urn' + locations: LOC_CLIFF + immovable: true longs: - '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.' - OBJ_43: inventory: '*cavity' + locations: LOC_NOWHERE + immovable: true longs: - '' # something in it - 'There is a small urn-shaped cavity in the rock.' - OBJ_44: inventory: '*blood' + locations: LOC_NOWHERE + immovable: true longs: - '' # described with dragon - OBJ_45: inventory: '*reservoir' + locations: [LOC_RESERVOIR, LOC_RESNORTH] + immovable: true longs: - '' - 'The waters have parted to form a narrow path across the reservoir.' - 'The waters crash together again.' - OBJ_46: inventory: 'Leporine appendage' + locations: LOC_FOREST22 longs: - 'Your keen eye spots a severed leporine appendage lying on the ground.' - OBJ_47: inventory: '*mud' + locations: LOC_DEBRIS + immovable: true longs: - '' texts: - '"MAGIC WORD XYZZY"' - OBJ_48: inventory: '*note' + locations: LOC_NUGGET + immovable: true longs: - '' texts: - '"You won''t get it up the steps"' - OBJ_49: inventory: '*sign' + locations: LOC_ANTEROOM + immovable: true longs: - [INGAME_SIGN, ''] - [ENDGAME_SIGN, ''] @@ -1750,36 +2183,43 @@ object_descriptions: !!omap - '"Treasure Vault. Keys in main office."' - OBJ_50: inventory: 'Large gold nugget' + locations: LOC_NUGGET treasure: true longs: - 'There is a large sparkling nugget of gold here!' - OBJ_51: inventory: 'Several diamonds' + locations: LOC_WESTBANK treasure: true longs: - 'There are diamonds here!' - OBJ_52: inventory: 'Bars of silver' + locations: LOC_FLOORHOLE treasure: true longs: - 'There are bars of silver here!' - OBJ_53: inventory: 'Precious jewelry' + locations: LOC_SOUTHSIDE treasure: true longs: - 'There is precious jewelry here!' - OBJ_54: inventory: 'Rare coins' + locations: LOC_WESTSIDE treasure: true longs: - 'There are many coins here!' - OBJ_55: inventory: 'Treasure chest' + locations: LOC_NOWHERE treasure: true longs: - 'The pirate''s treasure chest is here!' - OBJ_56: inventory: 'Golden eggs' + locations: LOC_GIANTROOM treasure: true longs: - 'There is a large nest here, full of golden eggs!' @@ -1787,11 +2227,13 @@ object_descriptions: !!omap - 'Done!' - OBJ_57: inventory: 'Jeweled trident' + locations: LOC_WATERFALL treasure: true longs: - 'There is a jewel-encrusted trident here!' - OBJ_58: inventory: 'Ming vase' + locations: LOC_ORIENTAL treasure: true longs: - [VASE_WHOLE, 'There is a delicate, precious, ming vase here!'] @@ -1800,22 +2242,27 @@ object_descriptions: !!omap - [VASE_DROPS, 'The ming vase drops with a delicate crash.'] - OBJ_59: inventory: 'Egg-sized emerald' + locations: LOC_PLOVER treasure: true longs: - 'There is an emerald here the size of a plover''s egg!' - 'There is an emerald resting in a small cavity in the rock!' - OBJ_60: inventory: 'Platinum pyramid' + locations: LOC_DARKROOM treasure: true longs: - 'There is a platinum pyramid here, 8 inches on a side!' - OBJ_61: inventory: 'Glistening pearl' + locations: LOC_NOWHERE treasure: true longs: - 'Off to one side lies a glistening pearl!' - OBJ_62: inventory: 'Persian rug' + locations: [LOC_SECRET4, LOC_SECRET6] + immovable: true treasure: true longs: - 'There is a persian rug spread out on the floor!' @@ -1823,11 +2270,14 @@ object_descriptions: !!omap - 'There is a persian rug here, hovering in mid-air!' - OBJ_63: inventory: 'Rare spices' + locations: LOC_BOULDERS2 treasure: true longs: - 'There are rare spices here!' - OBJ_64: inventory: 'Golden chain' + locations: LOC_BARRENROOM + immovable: true treasure: true longs: - 'There is a golden chain lying in a heap on the floor!' @@ -1835,29 +2285,34 @@ object_descriptions: !!omap - 'There is a golden chain locked to the wall!' - OBJ_65: inventory: 'Giant ruby' + locations: LOC_STOREROOM treasure: true longs: - 'There is an enormous ruby here!' - 'There is a ruby resting in a small cavity in the rock!' - OBJ_66: inventory: 'Jade necklace' + locations: LOC_NOWHERE treasure: true longs: - 'A precious jade necklace has been dropped here!' - OBJ_67: inventory: 'Amber gemstone' + locations: LOC_NOWHERE treasure: true longs: - 'There is a rare amber gemstone here!' - 'There is an amber gemstone resting in a small cavity in the rock!' - OBJ_68: inventory: 'Star sapphire' + locations: LOC_LEDGE treasure: true longs: - 'A brilliant blue star sapphire is here!' - 'There is a star sapphire resting in a small cavity in the rock!' - OBJ_69: inventory: 'Ebony statuette' + locations: LOC_REACHDEAD treasure: true longs: - 'There is a richly-carved ebony statuette here!'