#
# 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.
-# 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:
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.']
- '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
- '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.'
- '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!!"'
- '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.'
- '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.'
- '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.'
- '' # 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.']
- '"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, '']
texts:
- 'Cave under construction beyond this point.\n Proceed at own risk.\n [Witt Construction Company]'
- '"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!'
- 'The nest of golden eggs has vanished!'
- '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!']
- [VASE_RESTING, 'The vase is now resting, delicately, on a velvet pillow.']
- [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!'
- 'The dragon is sprawled out on a persian rug!!'
- '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!'
- 'The bear is locked to the wall with a golden chain!'
- '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!'
-- OBJ_70:
- inventory: !!null
- longs: !!null
-- OBJ_71:
- inventory: !!null
- longs: !!null
-- OBJ_72:
- inventory: !!null
- longs: !!null
-- OBJ_73:
- inventory: !!null
- longs: !!null
-- OBJ_74:
- inventory: !!null
- longs: !!null
-- OBJ_75:
- inventory: !!null
- longs: !!null
-- OBJ_76:
- inventory: !!null
- longs: !!null
-- OBJ_77:
- inventory: !!null
- longs: !!null
-- OBJ_78:
- inventory: !!null
- longs: !!null
-- OBJ_79:
- inventory: !!null
- longs: !!null
-- OBJ_80:
- inventory: !!null
- longs: !!null
-- OBJ_81:
- inventory: !!null
- longs: !!null
-- OBJ_82:
- inventory: !!null
- longs: !!null
-- OBJ_83:
- inventory: !!null
- longs: !!null
-- OBJ_84:
- inventory: !!null
- longs: !!null
-- OBJ_85:
- inventory: !!null
- longs: !!null
-- OBJ_86:
- inventory: !!null
- longs: !!null
-- OBJ_87:
- inventory: !!null
- longs: !!null
-- OBJ_88:
- inventory: !!null
- longs: !!null
-- OBJ_89:
- inventory: !!null
- longs: !!null
-- OBJ_90:
- inventory: !!null
- longs: !!null
-- OBJ_91:
- inventory: !!null
- longs: !!null
-- OBJ_92:
- inventory: !!null
- longs: !!null
-- OBJ_93:
- inventory: !!null
- longs: !!null
-- OBJ_94:
- inventory: !!null
- longs: !!null
-- OBJ_95:
- inventory: !!null
- longs: !!null
-- OBJ_96:
- inventory: !!null
- longs: !!null
-- OBJ_97:
- inventory: !!null
- longs: !!null
-- OBJ_98:
- inventory: !!null
- longs: !!null
-- OBJ_99:
- inventory: !!null
- longs: !!null
-- OBJ_100:
- inventory: !!null
- longs: !!null
obituaries:
- query: 'Oh dear, you seem to have gotten yourself killed. I might be able to\nhelp you out, but I''ve never really done this before. Do you want me\nto try to reincarnate you?'