Change structure of vocabulary YAML to cope with multiply-loaded words.

This commit is contained in:
Eric S. Raymond 2017-06-25 12:36:40 -04:00
parent cfb43fcf44
commit 8a3757df59
2 changed files with 356 additions and 334 deletions

View file

@ -99,333 +99,334 @@
# %B = Variable number of blanks # %B = Variable number of blanks
# %! = The entire message should be suppressed # %! = The entire message should be suppressed
vocabulary: { # There are duplicate keys in this voavulary, that's why it can't be a normal map
"ROAD": {type: motion, value: 2}, vocabulary: [
"HILL": {type: motion, value: 2}, {word: "ROAD", type: motion, value: 2},
"ENTER": {type: motion, value: 3}, {word: "HILL", type: motion, value: 2},
"UPSTR": {type: motion, value: 4}, {word: "ENTER", type: motion, value: 3},
"DOWNS": {type: motion, value: 5}, {word: "UPSTR", type: motion, value: 4},
"FORES": {type: motion, value: 6}, {word: "DOWNS", type: motion, value: 5},
"FORWA": {type: motion, value: 7}, {word: "FORES", type: motion, value: 6},
"CONTI": {type: motion, value: 7}, {word: "FORWA", type: motion, value: 7},
"ONWAR": {type: motion, value: 7}, {word: "CONTI", type: motion, value: 7},
"BACK": {type: motion, value: 8}, {word: "ONWAR", type: motion, value: 7},
"RETUR": {type: motion, value: 8}, {word: "BACK", type: motion, value: 8},
"RETRE": {type: motion, value: 8}, {word: "RETUR", type: motion, value: 8},
"VALLE": {type: motion, value: 9}, {word: "RETRE", type: motion, value: 8},
"STAIR": {type: motion, value: 10}, {word: "VALLE", type: motion, value: 9},
"OUT": {type: motion, value: 11}, {word: "STAIR", type: motion, value: 10},
"OUTSI": {type: motion, value: 11}, {word: "OUT", type: motion, value: 11},
"EXIT": {type: motion, value: 11}, {word: "OUTSI", type: motion, value: 11},
"LEAVE": {type: motion, value: 11}, {word: "EXIT", type: motion, value: 11},
"BUILD": {type: motion, value: 12}, {word: "LEAVE", type: motion, value: 11},
"HOUSE": {type: motion, value: 12}, {word: "BUILD", type: motion, value: 12},
"GULLY": {type: motion, value: 13}, {word: "HOUSE", type: motion, value: 12},
"STREA": {type: motion, value: 14}, {word: "GULLY", type: motion, value: 13},
"FORK": {type: motion, value: 15}, {word: "STREA", type: motion, value: 14},
"BED": {type: motion, value: 16}, {word: "FORK", type: motion, value: 15},
"CRAWL": {type: motion, value: 17}, {word: "BED", type: motion, value: 16},
"COBBL": {type: motion, value: 18}, {word: "CRAWL", type: motion, value: 17},
"INWAR": {type: motion, value: 19}, {word: "COBBL", type: motion, value: 18},
"INSID": {type: motion, value: 19}, {word: "INWAR", type: motion, value: 19},
"IN": {type: motion, value: 19}, {word: "INSID", type: motion, value: 19},
"SURFA": {type: motion, value: 20}, {word: "IN", type: motion, value: 19},
"NULL": {type: motion, value: 21}, {word: "SURFA", type: motion, value: 20},
"NOWHE": {type: motion, value: 21}, {word: "NULL", type: motion, value: 21},
"DARK": {type: motion, value: 22}, {word: "NOWHE", type: motion, value: 21},
"PASSA": {type: motion, value: 23}, {word: "DARK", type: motion, value: 22},
"TUNNE": {type: motion, value: 23}, {word: "PASSA", type: motion, value: 23},
"LOW": {type: motion, value: 24}, {word: "TUNNE", type: motion, value: 23},
"CANYO": {type: motion, value: 25}, {word: "LOW", type: motion, value: 24},
"AWKWA": {type: motion, value: 26}, {word: "CANYO", type: motion, value: 25},
"GIANT": {type: motion, value: 27}, {word: "AWKWA", type: motion, value: 26},
"VIEW": {type: motion, value: 28}, {word: "GIANT", type: motion, value: 27},
"UPWAR": {type: motion, value: 29}, {word: "VIEW", type: motion, value: 28},
"UP": {type: motion, value: 29}, {word: "UPWAR", type: motion, value: 29},
"U": {type: motion, value: 29}, {word: "UP", type: motion, value: 29},
"ABOVE": {type: motion, value: 29}, {word: "U", type: motion, value: 29},
"ASCEN": {type: motion, value: 29}, {word: "ABOVE", type: motion, value: 29},
"D": {type: motion, value: 30}, {word: "ASCEN", type: motion, value: 29},
"DOWNW": {type: motion, value: 30}, {word: "D", type: motion, value: 30},
"DOWN": {type: motion, value: 30}, {word: "DOWNW", type: motion, value: 30},
"DESCE": {type: motion, value: 30}, {word: "DOWN", type: motion, value: 30},
"PIT": {type: motion, value: 31}, {word: "DESCE", type: motion, value: 30},
"OUTDO": {type: motion, value: 32}, {word: "PIT", type: motion, value: 31},
"CRACK": {type: motion, value: 33}, {word: "OUTDO", type: motion, value: 32},
"STEPS": {type: motion, value: 34}, {word: "CRACK", type: motion, value: 33},
"DOME": {type: motion, value: 35}, {word: "STEPS", type: motion, value: 34},
"LEFT": {type: motion, value: 36}, {word: "DOME", type: motion, value: 35},
"RIGHT": {type: motion, value: 37}, {word: "LEFT", type: motion, value: 36},
"HALL": {type: motion, value: 38}, {word: "RIGHT", type: motion, value: 37},
"JUMP": {type: motion, value: 39}, {word: "HALL", type: motion, value: 38},
"BARRE": {type: motion, value: 40}, {word: "JUMP", type: motion, value: 39},
"OVER": {type: motion, value: 41}, {word: "BARRE", type: motion, value: 40},
"ACROS": {type: motion, value: 42}, {word: "OVER", type: motion, value: 41},
"EAST": {type: motion, value: 43}, {word: "ACROS", type: motion, value: 42},
"E": {type: motion, value: 43}, {word: "EAST", type: motion, value: 43},
"WEST": {type: motion, value: 44}, {word: "E", type: motion, value: 43},
"W": {type: motion, value: 44}, {word: "WEST", type: motion, value: 44},
"NORTH": {type: motion, value: 45}, {word: "W", type: motion, value: 44},
"N": {type: motion, value: 45}, {word: "NORTH", type: motion, value: 45},
"SOUTH": {type: motion, value: 46}, {word: "N", type: motion, value: 45},
"S": {type: motion, value: 46}, {word: "SOUTH", type: motion, value: 46},
"NE": {type: motion, value: 47}, {word: "S", type: motion, value: 46},
"SE": {type: motion, value: 48}, {word: "NE", type: motion, value: 47},
"SW": {type: motion, value: 49}, {word: "SE", type: motion, value: 48},
"NW": {type: motion, value: 50}, {word: "SW", type: motion, value: 49},
"DEBRI": {type: motion, value: 51}, {word: "NW", type: motion, value: 50},
"HOLE": {type: motion, value: 52}, {word: "DEBRI", type: motion, value: 51},
"WALL": {type: motion, value: 53}, {word: "HOLE", type: motion, value: 52},
"BROKE": {type: motion, value: 54}, {word: "WALL", type: motion, value: 53},
"Y2": {type: motion, value: 55}, {word: "BROKE", type: motion, value: 54},
"CLIMB": {type: motion, value: 56}, {word: "Y2", type: motion, value: 55},
"LOOK": {type: motion, value: 57}, {word: "CLIMB", type: motion, value: 56},
"EXAMI": {type: motion, value: 57}, {word: "LOOK", type: motion, value: 57},
"TOUCH": {type: motion, value: 57}, {word: "EXAMI", type: motion, value: 57},
"DESCR": {type: motion, value: 57}, {word: "TOUCH", type: motion, value: 57},
"FLOOR": {type: motion, value: 58}, {word: "DESCR", type: motion, value: 57},
"ROOM": {type: motion, value: 59}, {word: "FLOOR", type: motion, value: 58},
"SLIT": {type: motion, value: 60}, {word: "ROOM", type: motion, value: 59},
"SLAB": {type: motion, value: 61}, {word: "SLIT", type: motion, value: 60},
"SLABR": {type: motion, value: 61}, {word: "SLAB", type: motion, value: 61},
"XYZZY": {type: motion, value: 62}, {word: "SLABR", type: motion, value: 61},
"DEPRE": {type: motion, value: 63}, {word: "XYZZY", type: motion, value: 62},
"ENTRA": {type: motion, value: 64}, {word: "DEPRE", type: motion, value: 63},
"PLUGH": {type: motion, value: 65}, {word: "ENTRA", type: motion, value: 64},
"SECRE": {type: motion, value: 66}, {word: "PLUGH", type: motion, value: 65},
"CAVE": {type: motion, value: 67}, {word: "SECRE", type: motion, value: 66},
"CROSS": {type: motion, value: 69}, {word: "CAVE", type: motion, value: 67},
"BEDQU": {type: motion, value: 70}, {word: "CROSS", type: motion, value: 69},
"PLOVE": {type: motion, value: 71}, {word: "BEDQU", type: motion, value: 70},
"ORIEN": {type: motion, value: 72}, {word: "PLOVE", type: motion, value: 71},
"CAVER": {type: motion, value: 73}, {word: "ORIEN", type: motion, value: 72},
"SHELL": {type: motion, value: 74}, {word: "CAVER", type: motion, value: 73},
"RESER": {type: motion, value: 75}, {word: "SHELL", type: motion, value: 74},
"MAIN": {type: motion, value: 76}, {word: "RESER", type: motion, value: 75},
"OFFIC": {type: motion, value: 76}, {word: "MAIN", type: motion, value: 76},
"KEYS": {type: object, value: 1}, {word: "OFFIC", type: motion, value: 76},
"KEY": {type: object, value: 1}, {word: "KEYS", type: object, value: 1},
"LAMP": {type: object, value: 2}, {word: "KEY", type: object, value: 1},
"LANTE": {type: object, value: 2}, {word: "LAMP", type: object, value: 2},
"GRATE": {type: object, value: 3}, {word: "LANTE", type: object, value: 2},
"CAGE": {type: object, value: 4}, {word: "GRATE", type: object, value: 3},
"ROD": {type: object, value: 5}, {word: "CAGE", type: object, value: 4},
"ROD": {type: object, value: 6}, # Must be next object after "real" rod {word: "ROD", type: object, value: 5},
"STEPS": {type: object, value: 7}, {word: "ROD", type: object, value: 6}, # Must be next object after "real" rod
"BIRD": {type: object, value: 8}, {word: "STEPS", type: object, value: 7},
"DOOR": {type: object, value: 9}, {word: "BIRD", type: object, value: 8},
"PILLO": {type: object, value: 10}, {word: "DOOR", type: object, value: 9},
"VELVE": {type: object, value: 10}, {word: "PILLO", type: object, value: 10},
"SNAKE": {type: object, value: 11}, {word: "VELVE", type: object, value: 10},
"FISSU": {type: object, value: 12}, {word: "SNAKE", type: object, value: 11},
"TABLE": {type: object, value: 13}, {word: "FISSU", type: object, value: 12},
"CLAM": {type: object, value: 14}, {word: "TABLE", type: object, value: 13},
"OYSTE": {type: object, value: 15}, {word: "CLAM", type: object, value: 14},
"MAGAZ": {type: object, value: 16}, {word: "OYSTE", type: object, value: 15},
"ISSUE": {type: object, value: 16}, {word: "MAGAZ", type: object, value: 16},
"SPELU": {type: object, value: 16}, {word: "ISSUE", type: object, value: 16},
'"SPEL': {type: object, value: 16}, {word: "SPELU", type: object, value: 16},
"DWARF": {type: object, value: 17}, {word: '"SPEL', type: object, value: 16},
"DWARV": {type: object, value: 17}, {word: "DWARF", type: object, value: 17},
"KNIFE": {type: object, value: 18}, {word: "DWARV", type: object, value: 17},
"KNIVE": {type: object, value: 18}, {word: "KNIFE", type: object, value: 18},
"FOOD": {type: object, value: 19}, {word: "KNIVE", type: object, value: 18},
"RATIO": {type: object, value: 19}, {word: "FOOD", type: object, value: 19},
"BOTTL": {type: object, value: 20}, {word: "RATIO", type: object, value: 19},
"JAR": {type: object, value: 20}, {word: "BOTTL", type: object, value: 20},
"WATER": {type: object, value: 21}, {word: "JAR", type: object, value: 20},
"H2O": {type: object, value: 21}, {word: "WATER", type: object, value: 21},
"OIL": {type: object, value: 22}, {word: "H2O", type: object, value: 21},
"MIRRO": {type: object, value: 23}, {word: "OIL", type: object, value: 22},
"PLANT": {type: object, value: 24}, {word: "MIRRO", type: object, value: 23},
"BEANS": {type: object, value: 24}, {word: "PLANT", type: object, value: 24},
"PLANT": {type: object, value: 25}, # Must be next object after "real" plant {word: "BEANS", type: object, value: 24},
"STALA": {type: object, value: 26}, {word: "PLANT", type: object, value: 25}, # Must be next object after "real" plant
"SHADO": {type: object, value: 27}, {word: "STALA", type: object, value: 26},
"FIGUR": {type: object, value: 27}, {word: "SHADO", type: object, value: 27},
"WINDO": {type: object, value: 27}, # Same as figure {word: "FIGUR", type: object, value: 27},
"AXE": {type: object, value: 28}, {word: "WINDO", type: object, value: 27}, # Same as figure
"DRAWI": {type: object, value: 29}, {word: "AXE", type: object, value: 28},
"PIRAT": {type: object, value: 30}, {word: "DRAWI", type: object, value: 29},
"GENIE": {type: object, value: 30}, {word: "PIRAT", type: object, value: 30},
"DJINN": {type: object, value: 30}, {word: "GENIE", type: object, value: 30},
"DRAGO": {type: object, value: 31}, {word: "DJINN", type: object, value: 30},
"CHASM": {type: object, value: 32}, {word: "DRAGO", type: object, value: 31},
"TROLL": {type: object, value: 33}, {word: "CHASM", type: object, value: 32},
"TROLL": {type: object, value: 34}, # Must be next object after "real" troll {word: "TROLL", type: object, value: 33},
"BEAR": {type: object, value: 35}, {word: "TROLL", type: object, value: 34}, # Must be next object after "real" troll
"MESSA": {type: object, value: 36}, {word: "BEAR", type: object, value: 35},
"VOLCA": {type: object, value: 37}, {word: "MESSA", type: object, value: 36},
"GEYSE": {type: object, value: 37}, # Same as volcano {word: "VOLCA", type: object, value: 37},
"MACHI": {type: object, value: 38}, {word: "GEYSE", type: object, value: 37}, # Same as volcano
"VENDI": {type: object, value: 38}, {word: "MACHI", type: object, value: 38},
"BATTE": {type: object, value: 39}, {word: "VENDI", type: object, value: 38},
"CARPE": {type: object, value: 40}, {word: "BATTE", type: object, value: 39},
"MOSS": {type: object, value: 40}, {word: "CARPE", type: object, value: 40},
"CURTA": {type: object, value: 40}, # Same as carpet {word: "MOSS", type: object, value: 40},
"OGRE": {type: object, value: 41}, {word: "CURTA", type: object, value: 40}, # Same as carpet
"URN": {type: object, value: 42}, {word: "OGRE", type: object, value: 41},
"CAVIT": {type: object, value: 43}, {word: "URN", type: object, value: 42},
"BLOOD": {type: object, value: 44}, {word: "CAVIT", type: object, value: 43},
"RESER": {type: object, value: 45}, # Verb overrides {word: "BLOOD", type: object, value: 44},
"APPEN": {type: object, value: 46}, {word: "RESER", type: object, value: 45}, # Verb overrides
"LEPOR": {type: object, value: 46}, {word: "APPEN", type: object, value: 46},
"MUD": {type: object, value: 47}, {word: "LEPOR", type: object, value: 46},
"NOTE": {type: object, value: 48}, {word: "MUD", type: object, value: 47},
"SIGN": {type: object, value: 49}, {word: "NOTE", type: object, value: 48},
"GOLD": {type: object, value: 50}, {word: "SIGN", type: object, value: 49},
"NUGGE": {type: object, value: 50}, {word: "GOLD", type: object, value: 50},
"DIAMO": {type: object, value: 51}, {word: "NUGGE", type: object, value: 50},
"SILVE": {type: object, value: 52}, {word: "DIAMO", type: object, value: 51},
"BARS": {type: object, value: 52}, {word: "SILVE", type: object, value: 52},
"JEWEL": {type: object, value: 53}, {word: "BARS", type: object, value: 52},
"COINS": {type: object, value: 54}, {word: "JEWEL", type: object, value: 53},
"CHEST": {type: object, value: 55}, {word: "COINS", type: object, value: 54},
"BOX": {type: object, value: 55}, {word: "CHEST", type: object, value: 55},
"TREAS": {type: object, value: 55}, {word: "BOX", type: object, value: 55},
"EGGS": {type: object, value: 56}, {word: "TREAS", type: object, value: 55},
"EGG": {type: object, value: 56}, {word: "EGGS", type: object, value: 56},
"NEST": {type: object, value: 56}, {word: "EGG", type: object, value: 56},
"TRIDE": {type: object, value: 57}, {word: "NEST", type: object, value: 56},
"VASE": {type: object, value: 58}, {word: "TRIDE", type: object, value: 57},
"MING": {type: object, value: 58}, {word: "VASE", type: object, value: 58},
"SHARD": {type: object, value: 58}, {word: "MING", type: object, value: 58},
"POTTE": {type: object, value: 58}, {word: "SHARD", type: object, value: 58},
"EMERA": {type: object, value: 59}, {word: "POTTE", type: object, value: 58},
"PLATI": {type: object, value: 60}, {word: "EMERA", type: object, value: 59},
"PYRAM": {type: object, value: 60}, {word: "PLATI", type: object, value: 60},
"PEARL": {type: object, value: 61}, {word: "PYRAM", type: object, value: 60},
"RUG": {type: object, value: 62}, {word: "PEARL", type: object, value: 61},
"PERSI": {type: object, value: 62}, {word: "RUG", type: object, value: 62},
"SPICE": {type: object, value: 63}, {word: "PERSI", type: object, value: 62},
"CHAIN": {type: object, value: 64}, {word: "SPICE", type: object, value: 63},
"RUBY": {type: object, value: 65}, {word: "CHAIN", type: object, value: 64},
"JADE": {type: object, value: 66}, {word: "RUBY", type: object, value: 65},
"NECKL": {type: object, value: 66}, {word: "JADE", type: object, value: 66},
"AMBER": {type: object, value: 67}, {word: "NECKL", type: object, value: 66},
"GEMST": {type: object, value: 67}, {word: "AMBER", type: object, value: 67},
"SAPPH": {type: object, value: 68}, {word: "GEMST", type: object, value: 67},
"EBONY": {type: object, value: 69}, {word: "SAPPH", type: object, value: 68},
"STATU": {type: object, value: 69}, {word: "EBONY", type: object, value: 69},
"CARRY": {type: action, value: 1}, {word: "STATU", type: object, value: 69},
"TAKE": {type: action, value: 1}, {word: "CARRY", type: action, value: 1},
"KEEP": {type: action, value: 1}, {word: "TAKE", type: action, value: 1},
"CATCH": {type: action, value: 1}, {word: "KEEP", type: action, value: 1},
"STEAL": {type: action, value: 1}, {word: "CATCH", type: action, value: 1},
"CAPTU": {type: action, value: 1}, {word: "STEAL", type: action, value: 1},
"GET": {type: action, value: 1}, {word: "CAPTU", type: action, value: 1},
"TOTE": {type: action, value: 1}, {word: "GET", type: action, value: 1},
"SNARF": {type: action, value: 1}, {word: "TOTE", type: action, value: 1},
"DROP": {type: action, value: 2}, {word: "SNARF", type: action, value: 1},
"RELEA": {type: action, value: 2}, {word: "DROP", type: action, value: 2},
"FREE": {type: action, value: 2}, {word: "RELEA", type: action, value: 2},
"DISCA": {type: action, value: 2}, {word: "FREE", type: action, value: 2},
"DUMP": {type: action, value: 2}, {word: "DISCA", type: action, value: 2},
"SAY": {type: action, value: 3}, {word: "DUMP", type: action, value: 2},
"CHANT": {type: action, value: 3}, {word: "SAY", type: action, value: 3},
"SING": {type: action, value: 3}, {word: "CHANT", type: action, value: 3},
"UTTER": {type: action, value: 3}, {word: "SING", type: action, value: 3},
"MUMBL": {type: action, value: 3}, {word: "UTTER", type: action, value: 3},
"UNLOC": {type: action, value: 4}, {word: "MUMBL", type: action, value: 3},
"OPEN": {type: action, value: 4}, {word: "UNLOC", type: action, value: 4},
"NOTHI": {type: action, value: 5}, {word: "OPEN", type: action, value: 4},
"LOCK": {type: action, value: 6}, {word: "NOTHI", type: action, value: 5},
"CLOSE": {type: action, value: 6}, {word: "LOCK", type: action, value: 6},
"LIGHT": {type: action, value: 7}, {word: "CLOSE", type: action, value: 6},
"ON": {type: action, value: 7}, {word: "LIGHT", type: action, value: 7},
"EXTIN": {type: action, value: 8}, {word: "ON", type: action, value: 7},
"OFF": {type: action, value: 8}, {word: "EXTIN", type: action, value: 8},
"WAVE": {type: action, value: 9}, {word: "OFF", type: action, value: 8},
"SHAKE": {type: action, value: 9}, {word: "WAVE", type: action, value: 9},
"SWING": {type: action, value: 9}, {word: "SHAKE", type: action, value: 9},
"CALM": {type: action, value: 10}, {word: "SWING", type: action, value: 9},
"PLACA": {type: action, value: 10}, {word: "CALM", type: action, value: 10},
"TAME": {type: action, value: 10}, {word: "PLACA", type: action, value: 10},
"WALK": {type: action, value: 11}, {word: "TAME", type: action, value: 10},
"RUN": {type: action, value: 11}, {word: "WALK", type: action, value: 11},
"TRAVE": {type: action, value: 11}, {word: "RUN", type: action, value: 11},
"GO": {type: action, value: 11}, {word: "TRAVE", type: action, value: 11},
"PROCE": {type: action, value: 11}, {word: "GO", type: action, value: 11},
"CONTI": {type: action, value: 11}, {word: "PROCE", type: action, value: 11},
"EXPLO": {type: action, value: 11}, {word: "CONTI", type: action, value: 11},
"FOLLO": {type: action, value: 11}, {word: "EXPLO", type: action, value: 11},
"TURN": {type: action, value: 11}, {word: "FOLLO", type: action, value: 11},
"ATTAC": {type: action, value: 12}, {word: "TURN", type: action, value: 11},
"KILL": {type: action, value: 12}, {word: "ATTAC", type: action, value: 12},
"FIGHT": {type: action, value: 12}, {word: "KILL", type: action, value: 12},
"HIT": {type: action, value: 12}, {word: "FIGHT", type: action, value: 12},
"STRIK": {type: action, value: 12}, {word: "HIT", type: action, value: 12},
"SLAY": {type: action, value: 12}, {word: "STRIK", type: action, value: 12},
"POUR": {type: action, value: 13}, {word: "SLAY", type: action, value: 12},
"EAT": {type: action, value: 14}, {word: "POUR", type: action, value: 13},
"DEVOU": {type: action, value: 14}, {word: "EAT", type: action, value: 14},
"DRINK": {type: action, value: 15}, {word: "DEVOU", type: action, value: 14},
"RUB": {type: action, value: 16}, {word: "DRINK", type: action, value: 15},
"THROW": {type: action, value: 17}, {word: "RUB", type: action, value: 16},
"TOSS": {type: action, value: 17}, {word: "THROW", type: action, value: 17},
"QUIT": {type: action, value: 18}, {word: "TOSS", type: action, value: 17},
"FIND": {type: action, value: 19}, {word: "QUIT", type: action, value: 18},
"WHERE": {type: action, value: 19}, {word: "FIND", type: action, value: 19},
"INVEN": {type: action, value: 20}, {word: "WHERE", type: action, value: 19},
"FEED": {type: action, value: 21}, {word: "INVEN", type: action, value: 20},
"FILL": {type: action, value: 22}, {word: "FEED", type: action, value: 21},
"BLAST": {type: action, value: 23}, {word: "FILL", type: action, value: 22},
"DETON": {type: action, value: 23}, {word: "BLAST", type: action, value: 23},
"IGNIT": {type: action, value: 23}, {word: "DETON", type: action, value: 23},
"BLOWU": {type: action, value: 23}, {word: "IGNIT", type: action, value: 23},
"SCORE": {type: action, value: 24}, {word: "BLOWU", type: action, value: 23},
"FEE": {type: action, value: 25}, {word: "SCORE", type: action, value: 24},
"FIE": {type: action, value: 25}, {word: "FEE", type: action, value: 25},
"FOE": {type: action, value: 25}, {word: "FIE", type: action, value: 25},
"FOO": {type: action, value: 25}, {word: "FOE", type: action, value: 25},
"FUM": {type: action, value: 25}, {word: "FOO", type: action, value: 25},
"BRIEF": {type: action, value: 26}, {word: "FUM", type: action, value: 25},
"READ": {type: action, value: 27}, {word: "BRIEF", type: action, value: 26},
"PERUS": {type: action, value: 27}, {word: "READ", type: action, value: 27},
"BREAK": {type: action, value: 28}, {word: "PERUS", type: action, value: 27},
"SHATT": {type: action, value: 28}, {word: "BREAK", type: action, value: 28},
"SMASH": {type: action, value: 28}, {word: "SHATT", type: action, value: 28},
"WAKE": {type: action, value: 29}, {word: "SMASH", type: action, value: 28},
"DISTU": {type: action, value: 29}, {word: "WAKE", type: action, value: 29},
"SUSPE": {type: action, value: 30}, {word: "DISTU", type: action, value: 29},
"PAUSE": {type: action, value: 30}, {word: "SUSPE", type: action, value: 30},
"SAVE": {type: action, value: 30}, {word: "PAUSE", type: action, value: 30},
"RESUM": {type: action, value: 31}, {word: "SAVE", type: action, value: 30},
"RESTA": {type: action, value: 31}, {word: "RESUM", type: action, value: 31},
"FLY": {type: action, value: 32}, {word: "RESTA", type: action, value: 31},
"LISTE": {type: action, value: 33}, {word: "FLY", type: action, value: 32},
"Z'ZZZ": {type: action, value: 34}, # Gets replaced {word: "LISTE", type: action, value: 33},
"FEE": {type: special, value: 1}, {word: "Z'ZZZ", type: action, value: 34}, # Gets replaced
"FIE": {type: special, value: 2}, {word: "FEE", type: special, value: 1},
"FOE": {type: special, value: 3}, {word: "FIE", type: special, value: 2},
"FOO": {type: special, value: 4}, {word: "FOE", type: special, value: 3},
"FUM": {type: special, value: 5}, {word: "FOO", type: special, value: 4},
"THANK": {type: special, value: 13}, {word: "FUM", type: special, value: 5},
"SESAM": {type: special, value: 50}, {word: "THANK", type: special, value: 13},
"OPENS": {type: special, value: 50}, {word: "SESAM", type: special, value: 50},
"ABRA": {type: special, value: 50}, {word: "OPENS", type: special, value: 50},
"ABRAC": {type: special, value: 50}, {word: "ABRA", type: special, value: 50},
"SHAZA": {type: special, value: 50}, {word: "ABRAC", type: special, value: 50},
"HOCUS": {type: special, value: 50}, {word: "SHAZA", type: special, value: 50},
"POCUS": {type: special, value: 50}, {word: "HOCUS", type: special, value: 50},
"HELP": {type: special, value: 51}, {word: "POCUS", type: special, value: 50},
"?": {type: special, value: 51}, {word: "HELP", type: special, value: 51},
"NO": {type: special, value: 54}, {word: "?", type: special, value: 51},
"TREE": {type: special, value: 64}, {word: "NO", type: special, value: 54},
"TREES": {type: special, value: 64}, {word: "TREE", type: special, value: 64},
"DIG": {type: special, value: 66}, {word: "TREES", type: special, value: 64},
"EXCAV": {type: special, value: 66}, {word: "DIG", type: special, value: 66},
"LOST": {type: special, value: 68}, {word: "EXCAV", type: special, value: 66},
"MIST": {type: special, value: 69}, {word: "LOST", type: special, value: 68},
"FUCK": {type: special, value: 79}, {word: "MIST", type: special, value: 69},
"STOP": {type: special, value: 139}, {word: "FUCK", type: special, value: 79},
"INFO": {type: special, value: 142}, {word: "STOP", type: special, value: 139},
"INFOR": {type: special, value: 142}, {word: "INFO", type: special, value: 142},
"SWIM": {type: special, value: 147}, {word: "INFOR", type: special, value: 142},
"WIZAR": {type: special, value: 246}, {word: "SWIM", type: special, value: 147},
"YES": {type: special, value: 271}, {word: "WIZAR", type: special, value: 246},
"NEWS": {type: special, value: 275}, {word: "YES", type: special, value: 271},
} {word: "NEWS", type: special, value: 275},
]
# FIXME: Hint texts shouldn't be in arbitrary_messages, but inlined here # FIXME: Hint texts shouldn't be in arbitrary_messages, but inlined here
hints: hints:

View file

@ -25,11 +25,11 @@
# If M=100 unconditional, but forbidden to dwarves. # If M=100 unconditional, but forbidden to dwarves.
# If 100<M<=200 he must be carrying object M-100. # If 100<M<=200 he must be carrying object M-100.
# If 200<M<=300 must be carrying or in same room as M-200. # If 200<M<=300 must be carrying or in same room as M-200.
# If 300<M<=400 game.prop(M % 100) must#not* be 0. # If 300<M<=400 game.prop(M % 100) must *not* be 0.
# If 400<M<=500 game.prop(M % 100) must#not* be 1. # If 400<M<=500 game.prop(M % 100) must *not* be 1.
# If 500<M<=600 game.prop(M % 100) must#not* be 2, etc. # If 500<M<=600 game.prop(M % 100) must *not* be 2, etc.
# If the condition (if any) is not met, then the next#different* # If the condition (if any) is not met, then the next different
# "destination" value is used (unless it fails to meet#its* conditions, # "destination" value is used (unless it fails to meet *its* conditions,
# in which case the next is found, etc.). Typically, the next dest will # in which case the next is found, etc.). Typically, the next dest will
# be for one of the same verbs, so that its only use is as the alternate # be for one of the same verbs, so that its only use is as the alternate
# destination for those verbs. For instance: # destination for those verbs. For instance:
@ -671,13 +671,28 @@ section3 = (
(184, 33, 1), (184, 33, 1),
) )
def destdecode(dest):
"Decode a destinatio nnumber"
if dest <= 300:
return '["move", %s]' % locnames[dest]
elif dest <= 500:
return '["goto", %s]' % (dest - 300)
else:
return '["speak", %s]' % (msgnames[dest - 500])
def genline(loc): def genline(loc):
attrs = [] attrs = []
sys.stdout.write(" travel: {\n") sys.stdout.write(" travel: {\n")
for t in section3: for t in section3:
t = list(t) t = list(t)
if t.pop(0) == loc: src = t.pop(0)
sys.stdout.write(" %s,\n" % t) if src == loc:
dest = t.pop(0)
cond = dest // 1000
dest = dest % 1000
print("cond %s, dest %s, words: %s" % (cond, dest, t))
t = [verbs[e] for e in t]
sys.stdout.write(" %s %s %s,\n" % (destdecode(dest), cond, t))
sys.stdout.write(" }\n") sys.stdout.write(" }\n")
@ -687,6 +702,12 @@ if __name__ == "__main__":
db = yaml.load(fp) db = yaml.load(fp)
fp.seek(0) fp.seek(0)
locnames = [el[0] for el in db["locations"]] locnames = [el[0] for el in db["locations"]]
msgnames = [el[0] for el in db["arbitrary_messages"]]
verbs = {}
for entry in db["vocabulary"]:
if entry["type"] == "motion" and entry["value"] not in verbs:
verbs[entry["value"]] = entry["word"]
print(verbs)
ln = -1 ln = -1
while True: while True:
line = fp.readline() line = fp.readline()