From c7e0ad81adab95497e736c75575bf307e15a4a61 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Wed, 16 Mar 2016 21:42:00 +0000 Subject: [PATCH] adventure: as required by all 8bit micros --- Applications/cave/Makefile | 31 + Applications/cave/advent.c | 130 ++ Applications/cave/advent.h | 463 +++++++ Applications/cave/adventdb.c | 2316 +++++++++++++++++++++++++++++++++ Applications/cave/advgen.c | 1704 ++++++++++++++++++++++++ Applications/cave/database.c | 420 ++++++ Applications/cave/english.c | 178 +++ Applications/cave/environ.doc | 106 ++ Applications/cave/history.doc | 85 ++ Applications/cave/itverb.c | 351 +++++ Applications/cave/lib.c | 44 + Applications/cave/saveadv.c | 34 + Applications/cave/turn.c | 884 +++++++++++++ Applications/cave/verb.c | 989 ++++++++++++++ 14 files changed, 7735 insertions(+) create mode 100644 Applications/cave/Makefile create mode 100644 Applications/cave/advent.c create mode 100644 Applications/cave/advent.h create mode 100644 Applications/cave/adventdb.c create mode 100644 Applications/cave/advgen.c create mode 100644 Applications/cave/database.c create mode 100644 Applications/cave/english.c create mode 100644 Applications/cave/environ.doc create mode 100644 Applications/cave/history.doc create mode 100644 Applications/cave/itverb.c create mode 100644 Applications/cave/lib.c create mode 100644 Applications/cave/saveadv.c create mode 100644 Applications/cave/turn.c create mode 100644 Applications/cave/verb.c diff --git a/Applications/cave/Makefile b/Applications/cave/Makefile new file mode 100644 index 00000000..1774fdec --- /dev/null +++ b/Applications/cave/Makefile @@ -0,0 +1,31 @@ +# +# For Z80 at least this should work. We will need to hack advgen to +# do endian swapping if building on PC for 6809 +# + +FCC = fcc +FCCOPTS = -O2 --nostdio +PLATFORM = + +SRC = advent.c adventdb.c database.c english.c itverb.c lib.c saveadv.c \ + turn.c verb.c +OBJ = $(SRC:.c=.rel) + +.SUFFIXES: .c .rel + +all: advent advent.db + +advent.db: advgen + ./advgen > advent.db + +advgen: advgen.c + cc advgen.c -o ./advgen + +.c.rel: + $(FCC) $(PLATFORM) $(FCCOPTS) -c $< + +advent: $(OBJ) + $(FCC) $(PLATFORM) $(FCCOPTS) -o $@ $(OBJ) + +clean: + rm advent advent.db advgen *.rel *.asm *.lst core *.sym *.map *.noi *.lk *.ihx *.tmp *.bin diff --git a/Applications/cave/advent.c b/Applications/cave/advent.c new file mode 100644 index 00000000..c074ca26 --- /dev/null +++ b/Applications/cave/advent.c @@ -0,0 +1,130 @@ + +/* program ADVENT.C modified by LCC for V 1.43 by: + altering buffer sizes + + Changed call of exec() to static call for Eco-C88 (BW) + Added function initw() for Eco-C88 (BW) + Made function init() static for Eco-C88 (BW) + +May 1990 - Bob Withers + - Ported code to Microsoft C V 5.10 and 6.00 + - Placed all global variables in header ADVENT.H + - Removed most runtime variable initialization and replaced + by compile time initializers. + - Added file ADVENTDB.C to completely replace all the adventure + data base files. This keeps all data in memory and eliminates + all disk accesses during game play. All functions in DATABASE.C + were modified to access in memory data. + - Added code to support the BRIEF and VERBOSE verbs. + - Added code to ignore CTRL-C signal. + - Modified vocab search to use a binary search. +*/ + +#define DRIVER + +#include "advent.h" +#include +static void init(void); +static void eadvent(void); +int main(int argc, char **argv) +{ + short rflag; /* user restore request option */ + short dflag; /* user restore request option */ + brief_sw = dbgflg = rflag = 0; + signal(SIGINT, SIG_IGN); + while (--argc > 0) { + if ((argv[argc])[0] == '-' || (argv[argc])[0] == '/') { + switch (tolower((argv[argc])[1])) { + case 'r': + ++rflag; + continue; + case 'd': + ++dbgflg; + writes("Debug enabled.\n"); + continue; + case 'b': + ++brief_sw; + writes("Brief mode enabled.\n"); + continue; + default: + writes("unknown flag: "); + write(1, argv[argc] + 1, 1); + nl(); + continue; + } + } + } + dflag = dbgflg; + db_init(); + init(); + if (!rflag) { + writes("\nDo you want to restore a saved game? (Y/N) "); + + do { + char buf[2]; + getinp(buf, 2); + rflag = toupper(buf[0]); + } while (!(rflag == 'Y' || rflag == 'N')); + if (rflag == 'N') + rflag = 0; + } + if (rflag) + restore(); + dbgflg = dflag; + eadvent(); + return (0); +} + + +/* Initialization */ +static void init(void) +{ + dloc[DWARFMAX - 1] = chloc; + return; +} + + +/* restore saved game handler */ +void restore(void) +{ + char username[64]; + int restfd; + writes("What is your saved game name? "); + getinp(username, 64); + if (*username == 0) { + writes("No name entered, restore request ignored.\n"); + return; + } + writes("\nOpening save file \""); + writes(username); + writes("\".\n"); + if ((restfd = open(username, O_RDONLY)) == -1) { + writes("Sorry, can't open save file...\n"); + exit(1); + } + + /* THis is naughty and will want fixing to use a struct! */ + if (read(restfd, &turns, (char *) &turns - (char *) &lastglob) != (char *) &turns - (char *) &lastglob) { + writes("Can't read save file...\n"); + exit(1); + } + if (close(restfd) == -1) + writes("warning -- can't close save file...\n"); + nl(); + saveflg = 0; +} + +static void eadvent(void) +{ + srand(511); + if (yes(65, 1, 0)) + limit = 1000; + + else + limit = 330; + while (!saveflg) + turn(); + if (saveflg) + saveadv(); + return; +} diff --git a/Applications/cave/advent.h b/Applications/cave/advent.h new file mode 100644 index 00000000..828786c4 --- /dev/null +++ b/Applications/cave/advent.h @@ -0,0 +1,463 @@ + +/* ADVENT.H revised header for BDS c vers 1.43 */ + +/* Revised for Eco-C88 V2.72 by Bob Withers + Defined all variables for driver routines and + altered header to declare them external for + all sub-modules. BW - 09/14/85 +*/ + +#include +#include +#include +#include +#include +#include +#include + +#define NUL '\0' + +#define MAXDIM(a) (sizeof(a) / sizeof(a[0])) + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#define MAXLOC 150 +#define MAXOBJ 100 +#define WORDSIZE 20 + +#define DWARFMAX 7 +#define MAXDIE 3 +#define MAXTRS 79 + +#define READ_BIN "rb" +#define WRITE_BIN "wb" + + +#define VOCAB_OBJECT 1000 +#define VOCAB_VERB 2000 +#define VOCAB_MSG 3000 + +/* + Object definitions +*/ +#define KEYS 1 +#define LAMP 2 +#define GRATE 3 +#define CAGE 4 +#define ROD 5 +#define ROD2 6 +#define STEPS 7 +#define BIRD 8 +#define DOOR 9 +#define PILLOW 10 +#define SNAKE 11 +#define FISSURE 12 +#define TABLET 13 +#define CLAM 14 +#define OYSTER 15 +#define MAGAZINE 16 +#define DWARF 17 +#define KNIFE 18 +#define FOOD 19 +#define BOTTLE 20 +#define WATER 21 +#define OIL 22 +#define MIRROR 23 +#define PLANT 24 +#define PLANT2 25 +#define STALACTITE 26 +#define FIGURE 27 +#define AXE 28 +#define DRAWING 29 +#define PIRATE 30 +#define DRAGON 31 +#define CHASM 32 +#define TROLL 33 +#define TROLL2 34 +#define BEAR 35 +#define MESSAGE 36 +#define VOLCANO 37 +#define VEND 38 +#define BATTERIES 39 +#define CARPET 40 +#define NUGGET 50 +#define DIAMONDS 51 +#define SILVER 52 +#define JEWELS 53 +#define COINS 54 +#define CHEST 55 +#define EGGS 56 +#define TRIDENT 57 +#define VASE 58 +#define EMERALD 59 +#define PYRAMID 60 +#define PEARL 61 +#define RUG 62 +#define SPICES 63 +#define CHAIN 64 + +/* + Verb definitions +*/ +#define NULLX 21 +#define BACK 8 +#define LOOK 57 +#define CAVE 67 +#define ENTRANCE 64 +#define DEPRESSION 63 + +/* + Action verb definitions +*/ +#define TAKE 1 +#define DROP 2 +#define SAY 3 +#define OPEN 4 +#define NOTHING 5 +#define LOCK 6 +#define ON 7 +#define OFF 8 +#define WAVE 9 +#define CALM 10 +#define WALK 11 +#define KILL 12 +#define POUR 13 +#define EAT 14 +#define DRINK 15 +#define RUB 16 +#define THROW 17 +#define QUIT 18 +#define FIND 19 +#define INVENTORY 20 +#define FEED 21 +#define FILL 22 +#define BLAST 23 +#define SCORE 24 +#define FOO 25 +#define BRIEF 26 +#define READ 27 +#define BREAK 28 +#define WAKE 29 +#define SUSPEND 30 +#define HOURS 31 +#define LOG 32 +#define SAVE 33 +#define RESTORE 34 +#define VERBOSE 35 + +/* + Bits of array cond + indicating location status +*/ +#define LIGHT 1 +#define WATOIL 2 +#define LIQUID 4 +#define NOPIRAT 8 +#define HINTC 16 +#define HINTB 32 +#define HINTS 64 +#define HINTM 128 +#define HINT 240 + +/* + Adventure global variables +*/ + +struct S_VocabTab { + char *pWord; + short sWord; +}; +typedef struct S_VocabTab VOCABTAB; + +struct trav { + short tdest; + short tverb; + short tcond; +}; +typedef struct trav TRAV; + +struct travtab { + TRAV *pTrav; // trav array for location + short sTrav; // # entries for location +}; +typedef struct travtab TRAVTAB; + +struct gameheader { + uint16_t msg[211]; + uint16_t lshort[141]; + uint16_t odesc[65]; + uint16_t loclong[148]; +}; + +#ifdef DRIVER +#define CLASS +#define INIT(x) = x +#else +#define CLASS extern +#define INIT(x) +#endif + +CLASS short brief_sw; +/* + Database variables +*/ +CLASS TRAV *pTravel; /* travel array & count for */ +CLASS short sTravCnt; /* the current location */ +CLASS short actmsg[32] /* action messages */ +#ifdef DRIVER + = { + 0, 24, 29, 0, 33, 0, 33, 38, 38, 42, /* 0 - 9 */ + 14, 43, 110, 29, 110, 73, 75, 29, 13, 59, /* 10 - 19 */ + 59, 174, 109, 67, 13, 147, 155, 195, 146, 110, /* 20 - 29 */ + 13, 13 /* 30 - 31 */ +}; +#else +; +#endif + +/* + English variables +*/ +CLASS short verb; +CLASS short object; +CLASS short motion; +CLASS char word1[WORDSIZE]; +CLASS char word2[WORDSIZE]; + +/* + Play variables +*/ +CLASS short turns INIT(0); +CLASS short loc INIT(1); +CLASS short oldloc INIT(1); +CLASS short oldloc2 INIT(1); +CLASS short newloc INIT(3); +CLASS short cond[MAXLOC] /* location status */ +#ifdef DRIVER + = { + 0, 5, 1, 5, 5, 1, 1, 5, 17, 1, /* 0 - 9 */ + 1, 0, 0, 32, 0, 0, 2, 0, 0, 64, /* 10 - 19 */ + 2, 2, 2, 0, 6, 0, 2, 0, 0, 0, /* 20 - 29 */ + 0, 2, 2, 0, 0, 0, 0, 0, 4, 0, /* 30 - 39 */ + 2, 0, 128, 128, 128, 128, 136, 136, 136, 128, /* 40 - 49 */ + 128, 128, 128, 136, 128, 136, 0, 8, 0, 2, /* 50 - 59 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 60 - 69 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, /* 70 - 79 */ + 128, 128, 136, 0, 0, 8, 136, 128, 0, 2, /* 80 - 89 */ + 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, /* 90 - 99 */ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 100 - 109 */ + 0, 0, 0, 4, 0, 1, 1, 0, 0, 0, /* 110 - 119 */ + 0, 0, 8, 8, 8, 8, 8, 8, 8, 8, /* 120 - 129 */ + 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 130 - 139 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 140 - 149 */ +}; +#else +; +#endif + +CLASS short place[MAXOBJ] /* object location */ +#ifdef DRIVER + = { + 0, 3, 3, 8, 10, 11, 0, 14, 13, 94, /* 0 - 9 */ + 96, 19, 17, 101, 103, 0, 106, 0, 0, 3, /* 10 - 19 */ + 3, 0, 0, 109, 25, 23, 111, 35, 0, 97, /* 20 - 29 */ + 0, 119, 117, 117, 0, 130, 0, 126, 140, 0, /* 30 - 39 */ + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 - 49 */ + 18, 27, 28, 29, 30, 0, 92, 95, 97, 100, /* 50 - 59 */ + 101, 0, 119, 127, 130, 0, 0, 0, 0, 0, /* 60 - 69 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 - 79 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 89 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 99 */ +}; +#else +; +#endif + +CLASS short fixed[MAXOBJ] /* second object loc */ +#ifdef DRIVER + = { + 0, 0, 0, 9, 0, 0, 0, 15, 0, -1, /* 0 - 9 */ + 0, -1, 27, -1, 0, 0, 0, -1, 0, 0, /* 10 - 19 */ + 0, 0, 0, -1, -1, 67, -1, 110, 0, -1, /* 20 - 29 */ + -1, 121, 122, 122, 0, -1, -1, -1, -1, 0, /* 30 - 39 */ + -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 - 49 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 50 - 59 */ + 0, 0, 121, 0, -1, 0, 0, 0, 0, 0, /* 60 - 69 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 - 79 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 89 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 99 */ +}; +#else +; +#endif + +CLASS short visited[MAXLOC]; /* >0 if has been here */ +CLASS short prop[MAXOBJ] /* status of object */ +#ifdef DRIVER + = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0 - 9 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 19 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 20 - 29 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 30 - 39 */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 40 - 49 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 50 - 59 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 60 - 69 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 70 - 79 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 80 - 89 */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, /* 90 - 99 */ +}; +#else +; +#endif + +CLASS short tally INIT(15); /* item counts */ +CLASS short tally2 INIT(0); +CLASS short limit INIT(100); /* time limit */ +CLASS short lmwarn INIT(0); /* lamp warning flag */ +CLASS uint8_t wzdark INIT(FALSE); +CLASS uint8_t closing INIT(FALSE); +CLASS uint8_t closed INIT(FALSE); +CLASS short holding INIT(0); /* count of held items */ +CLASS short detail INIT(0); /* LOOK count */ +CLASS short knfloc INIT(0); /* knife location */ +CLASS short clock1 INIT(30); /* timing variables */ +CLASS short clock2 INIT(50); +CLASS short panic INIT(0); +CLASS short dloc[DWARFMAX] /* dwarf locations */ +#ifdef DRIVER + = { + 0, 19, 27, 33, 44, 64, 0 /* 0 - 6 */ +}; +#else +; +#endif + +CLASS short dflag INIT(0); /* dwarf flag */ +CLASS short dseen[DWARFMAX]; /* dwarf seen flag */ +CLASS short odloc[DWARFMAX]; /* dwarf old locs */ +CLASS short daltloc INIT(18); /* alt appearance */ +CLASS short dkill INIT(0); /* dwarves killed */ +CLASS short chloc INIT(114); /* chest locations */ +CLASS short chloc2 INIT(140); +CLASS short bonus INIT(0); /* to pass to end */ +CLASS short numdie INIT(0); /* number of deaths */ +CLASS short object1; /* to help intrans. */ +CLASS uint8_t gaveup INIT(FALSE); +CLASS short foobar INIT(0); /* fie fie foe foo... */ +CLASS uint8_t saveflg INIT(FALSE); /* game being saved? */ +CLASS short dbgflg; /* game in restart? */ + + +CLASS char lastglob; /* to get space req. */ + +/* endglobal */ + +/* function prototypes */ + +/* advent.c */ +int main(int argc, char **argv); +void restore(void); + +/* database.c */ +void db_init(void); +void gettrav(short loc); +short yes(short msg1, short msg2, short msg3); +void rspeak(short msg); +void pspeak(short item, short state); +void desclg(short loc); +void descsh(short loc); +short vocab(char *word, short val); +uint8_t dark(void); +uint8_t here(short item); +uint8_t toting(short item); +uint8_t forced(short atloc); +uint8_t pct(short x); +uint8_t at(short item); +void dstroy(short obj); +void move(short obj, short where); +void juggle(short loc); +void carry(short obj, short where); +void drop(short obj, short where); +short put(short obj, short where, short pval); +short dcheck(void); +short liq(void); +short liqloc(short loc); +short liq2(short pbottle); +void bug(short n); + +/* verb.c */ +void trverb(void); +void vtake(void); +void vdrop(void); +void vopen(void); +void vsay(void); +void von(void); +void voff(void); +void vwave(void); +void vkill(void); +void vpour(void); +void veat(void); +void vdrink(void); +void vthrow(void); +void vfind(void); +void vfill(void); +void vfeed(void); +void vread(void); +void vblast(void); +void vbreak(void); +void vwake(void); +void actspk(short verb); +void needobj(void); + +/* english.c */ +uint8_t english(void); +uint8_t analyze(char *word, short *type, short *value); +void getin(void); +void getword(char **buff, char *word); +void skipspc(char **buff); + +/* turn.c */ +void turn(void); +void describe(void); +void descitem(void); +void domove(void); +void goback(void); +void dotrav(void); +void badmove(void); +void spcmove(short rdest); +void dwarfend(void); +void normend(void); +void score(void); +void death(void); +void doobj(void); +void trobj(void); +char *probj(short object); +void dwarves(void); +void dopirate(void); +uint8_t stimer(void); + +/* itverb.c */ +void itverb(void); +void ivtake(void); +void ivopen(void); +void ivkill(void); +void iveat(void); +void ivdrink(void); +void ivquit(void); +void ivfill(void); +void ivfoo(void); +void ivread(void); +void inventory(void); +void addobj(short obj); + +/* saveadv.c */ +void saveadv(void); + +/* lib.c */ +void nl(void); +void writes(const char *p); +void getinp(char *p, int l); +void writei(uint16_t v); diff --git a/Applications/cave/adventdb.c b/Applications/cave/adventdb.c new file mode 100644 index 00000000..c9e50a6d --- /dev/null +++ b/Applications/cave/adventdb.c @@ -0,0 +1,2316 @@ + +#include "advent.h" + +/* WARNING: A binary search is performed on this array. If you add new */ +/* vocabulary entries be sure they are in alphabetical order. */ +VOCABTAB VocabTab[] = { + { + "\"spelunker today\"", MAGAZINE + VOCAB_OBJECT} + , { + "?", 51 + VOCAB_MSG} + , { + "above", 29} + , { + "abra", 50 + VOCAB_MSG} + , { + "abracadabra", 50 + VOCAB_MSG} + , { + "across", 42} + , { + "ascend", 29} + , { + "attack", KILL + VOCAB_VERB} + , { + "awkward", 26} + , { + "axe", AXE + VOCAB_OBJECT} + , { + "back", 8} + , { + "barren", 40} + , { + "bars", SILVER + VOCAB_OBJECT} + , { + "batteries", BATTERIES + VOCAB_OBJECT} + , { + "battery", BATTERIES + VOCAB_OBJECT} + , { + "beans", PLANT + VOCAB_OBJECT} + , { + "bear", BEAR + VOCAB_OBJECT} + , { + "bed", 16} + , { + "bedquilt", 70} + , { + "bird", BIRD + VOCAB_OBJECT} + , { + "blast", BLAST + VOCAB_VERB} + , { + "blowup", BLAST + VOCAB_VERB} + , { + "bottle", BOTTLE + VOCAB_OBJECT} + , { + "box", CHEST + VOCAB_OBJECT} + , { + "break", BREAK + VOCAB_VERB} + , { + "brief", BRIEF + VOCAB_VERB} + , { + "broken", 54} + , { + "building", 12} + , { + "cage", CAGE + VOCAB_OBJECT} + , { + "calm", CALM + VOCAB_VERB} + , { + "canyon", 25} + , { + "capture", TAKE + VOCAB_VERB} + , { + "carpet", CARPET + VOCAB_OBJECT} + , { + "carry", TAKE + VOCAB_VERB} + , { + "catch", TAKE + VOCAB_VERB} + , { + "cave", 67} + , { + "cavern", 73} + , { + "chain", CHAIN + VOCAB_OBJECT} + , { + "chant", SAY + VOCAB_VERB} + , { + "chasm", CHASM + VOCAB_OBJECT} + , { + "chest", CHEST + VOCAB_OBJECT} + , { + "clam", CLAM + VOCAB_OBJECT} + , { + "climb", 56} + , { + "close", LOCK + VOCAB_VERB} + , { + "cobbl", 18} + , { + "cobblestone", 18} + , { + "coins", COINS + VOCAB_OBJECT} + , { + "continue", WALK + VOCAB_VERB} + , { + "crack", 33} + , { + "crap", 79 + VOCAB_MSG} + , { + "crawl", 17} + , { + "cross", 69} + , { + "d", 30} + , { + "damn", 79 + VOCAB_MSG} + , { + "damnit", 79 + VOCAB_MSG} + , { + "dark", 22} + , { + "debris", 51} + , { + "depression", 63} + , { + "descend", 30} + , { + "describe", 57} + , { + "detonate", BLAST + VOCAB_VERB} + , { + "devour", EAT + VOCAB_VERB} + , { + "diamonds", DIAMONDS + VOCAB_OBJECT} + , { + "dig", 66 + VOCAB_MSG} + , { + "discard", DROP + VOCAB_VERB} + , { + "disturb", WAKE + VOCAB_VERB} + , { + "dome", 35} + , { + "door", DOOR + VOCAB_OBJECT} + , { + "down", 30} + , { + "downstream", 4} + , { + "downward", 30} + , { + "dragon", DRAGON + VOCAB_OBJECT} + , { + "drawing", DRAWING + VOCAB_OBJECT} + , { + "drink", DRINK + VOCAB_VERB} + , { + "drop", DROP + VOCAB_VERB} + , { + "dump", DROP + VOCAB_VERB} + , { + "dwarf", DWARF + VOCAB_OBJECT} + , { + "dwarves", DWARF + VOCAB_OBJECT} + , { + "e", 43} + , { + "east", 43} + , { + "eat", EAT + VOCAB_VERB} + , { + "egg", EGGS + VOCAB_OBJECT} + , { + "eggs", EGGS + VOCAB_OBJECT} + , { + "emerald", EMERALD + VOCAB_OBJECT} + , { + "enter", 3} + , { + "entrance", 64} + , { + "examine", 57} + , { + "excavate", 66 + VOCAB_MSG} + , { + "exit", 11} + , { + "explore", WALK + VOCAB_VERB} + , { + "extinguish", OFF + VOCAB_VERB} + , { + "fee", FOO + VOCAB_VERB} + , +/* { "fee", 1 + VOCAB_MSG }, */ + { + "feed", FEED + VOCAB_VERB} + , { + "fie", FOO + VOCAB_VERB} + , +/* { "fie", 2 + VOCAB_MSG }, */ + { + "fight", KILL + VOCAB_VERB} + , { + "figure", FIGURE + VOCAB_OBJECT} + , { + "fill", FILL + VOCAB_VERB} + , { + "find", FIND + VOCAB_VERB} + , { + "fissure", FISSURE + VOCAB_OBJECT} + , { + "floor", 58} + , { + "foe", FOO + VOCAB_VERB} + , +/* { "foe", 3 + VOCAB_MSG }, */ + { + "follow", WALK + VOCAB_VERB} + , { + "foo", FOO + VOCAB_VERB} + , +/* { "foo", 4 + VOCAB_MSG }, */ + { + "food", FOOD + VOCAB_OBJECT} + , { + "forest", 6} + , { + "fork", 77} + , { + "forward", 7} + , { + "free", DROP + VOCAB_VERB} + , { + "fuck", 79 + VOCAB_MSG} + , { + "fum", FOO + VOCAB_VERB} + , +/* { "fum", 5 + VOCAB_MSG }, */ + { + "get", TAKE + VOCAB_VERB} + , { + "geyser", VOLCANO + VOCAB_OBJECT} + , { + "giant", 27} + , { + "go", WALK + VOCAB_VERB} + , { + "gold", NUGGET + VOCAB_OBJECT} + , { + "goto", WALK + VOCAB_VERB} + , { + "grate", GRATE + VOCAB_OBJECT} + , { + "gully", 13} + , { + "h2o", WATER + VOCAB_OBJECT} + , { + "hall", 38} + , { + "headlamp", LAMP + VOCAB_OBJECT} + , { + "help", 51 + VOCAB_MSG} + , { + "hill", 2} + , { + "hit", KILL + VOCAB_VERB} + , { + "hocus", 50 + VOCAB_MSG} + , { + "hole", 52} + , { + "hours", HOURS + VOCAB_VERB} + , { + "house", 12} + , { + "i", INVENTORY + VOCAB_VERB} + , { + "ignite", BLAST + VOCAB_VERB} + , { + "in", 19} + , { + "info", 142 + VOCAB_MSG} + , { + "information", 142 + VOCAB_MSG} + , { + "inside", 19} + , { + "inven", INVENTORY + VOCAB_VERB} + , { + "inventory", INVENTORY + VOCAB_VERB} + , { + "inward", 19} + , { + "issue", MAGAZINE + VOCAB_OBJECT} + , { + "jar", BOTTLE + VOCAB_OBJECT} + , { + "jewel", JEWELS + VOCAB_OBJECT} + , { + "jewelry", JEWELS + VOCAB_OBJECT} + , { + "jewels", JEWELS + VOCAB_OBJECT} + , { + "jump", 39} + , { + "keep", TAKE + VOCAB_VERB} + , { + "key", KEYS + VOCAB_OBJECT} + , { + "keys", KEYS + VOCAB_OBJECT} + , { + "kill", KILL + VOCAB_VERB} + , { + "knife", KNIFE + VOCAB_OBJECT} + , { + "knives", KNIFE + VOCAB_OBJECT} + , { + "l", 57} + , { + "lamp", LAMP + VOCAB_OBJECT} + , { + "lantern", LAMP + VOCAB_OBJECT} + , { + "leave", 11} + , { + "left", 36} + , { + "light", ON + VOCAB_VERB} + , { + "lock", LOCK + VOCAB_VERB} + , { + "log", LOG + VOCAB_VERB} + , { + "look", 57} + , { + "lost", 68 + VOCAB_MSG} + , { + "low", 24} + , { + "machine", VEND + VOCAB_OBJECT} + , { + "magazine", MAGAZINE + VOCAB_OBJECT} + , { + "main", 76} + , { + "message", MESSAGE + VOCAB_OBJECT} + , { + "ming", VASE + VOCAB_OBJECT} + , { + "mirror", MIRROR + VOCAB_OBJECT} + , { + "mist", 69 + VOCAB_MSG} + , { + "moss", CARPET + VOCAB_OBJECT} + , { + "mumble", SAY + VOCAB_VERB} + , { + "n", 45} + , { + "ne", 47} + , { + "nest", EGGS + VOCAB_OBJECT} + , { + "north", 45} + , { + "nothing", NOTHING + VOCAB_VERB} + , { + "nowhere", 21} + , { + "nugget", NUGGET + VOCAB_OBJECT} + , { + "null", 21} + , { + "nw", 50} + , { + "off", OFF + VOCAB_VERB} + , { + "office", 76} + , { + "oil", OIL + VOCAB_OBJECT} + , { + "on", ON + VOCAB_VERB} + , { + "onward", 7} + , { + "open", OPEN + VOCAB_VERB} + , { + "opensesame", 50 + VOCAB_MSG} + , { + "oriental", 72} + , { + "out", 11} + , { + "outdoors", 32} + , { + "outside", 11} + , { + "over", 41} + , { + "oyster", OYSTER + VOCAB_OBJECT} + , { + "passage", 23} + , { + "pause", SUSPEND + VOCAB_VERB} + , { + "pearl", PEARL + VOCAB_OBJECT} + , { + "persian", RUG + VOCAB_OBJECT} + , { + "peruse", READ + VOCAB_VERB} + , { + "pillow", PILLOW + VOCAB_OBJECT} + , { + "pirate", PIRATE + VOCAB_OBJECT} + , { + "pit", 31} + , { + "placate", CALM + VOCAB_VERB} + , { + "plant", PLANT + VOCAB_OBJECT} + , { + "plant", PLANT2 + VOCAB_OBJECT} + , { + "platinum", PYRAMID + VOCAB_OBJECT} + , { + "plover", 71} + , { + "plugh", 65} + , { + "pocus", 50 + VOCAB_MSG} + , { + "pottery", VASE + VOCAB_OBJECT} + , { + "pour", POUR + VOCAB_VERB} + , { + "proceed", WALK + VOCAB_VERB} + , { + "pyramid", PYRAMID + VOCAB_OBJECT} + , { + "quit", QUIT + VOCAB_VERB} + , { + "rations", FOOD + VOCAB_OBJECT} + , { + "read", READ + VOCAB_VERB} + , { + "release", DROP + VOCAB_VERB} + , { + "reservoir", 75} + , { + "restore", RESTORE + VOCAB_VERB} + , { + "retreat", 8} + , { + "return", 8} + , { + "right", 37} + , { + "road", 2} + , { + "rock", 15} + , { + "rod", ROD + VOCAB_OBJECT} + , +/* { "rod", ROD2 + VOCAB_OBJECT }, */ + { + "room", 59} + , { + "rub", RUB + VOCAB_VERB} + , { + "rug", RUG + VOCAB_OBJECT} + , { + "run", WALK + VOCAB_VERB} + , { + "s", 46} + , { + "save", SAVE + VOCAB_VERB} + , { + "say", SAY + VOCAB_VERB} + , { + "score", SCORE + VOCAB_VERB} + , { + "se", 48} + , { + "secret", 66} + , { + "sesame", 50 + VOCAB_MSG} + , { + "shadow", FIGURE + VOCAB_OBJECT} + , { + "shake", WAVE + VOCAB_VERB} + , { + "shard", VASE + VOCAB_OBJECT} + , { + "shatter", BREAK + VOCAB_VERB} + , { + "shazam", 50 + VOCAB_MSG} + , { + "shell", 74} + , { + "shit", 79 + VOCAB_MSG} + , { + "silver", SILVER + VOCAB_OBJECT} + , { + "sing", SAY + VOCAB_VERB} + , { + "slab", 61} + , { + "slit", 60} + , { + "smash", BREAK + VOCAB_VERB} + , { + "snake", SNAKE + VOCAB_OBJECT} + , { + "south", 46} + , { + "spelunker", MAGAZINE + VOCAB_OBJECT} + , { + "spice", SPICES + VOCAB_OBJECT} + , { + "spices", SPICES + VOCAB_OBJECT} + , { + "stairs", 10} + , { + "stalactite", STALACTITE + VOCAB_OBJECT} + , { + "steal", TAKE + VOCAB_VERB} + , { + "steps", 34} + , { + "steps", STEPS + VOCAB_OBJECT} + , { + "stop", 139 + VOCAB_MSG} + , { + "stream", 14} + , { + "strike", KILL + VOCAB_VERB} + , { + "surface", 20} + , { + "suspend", SUSPEND + VOCAB_VERB} + , { + "sw", 49} + , { + "swim", 147 + VOCAB_MSG} + , { + "swing", WAVE + VOCAB_VERB} + , { + "tablet", TABLET + VOCAB_OBJECT} + , { + "take", TAKE + VOCAB_VERB} + , { + "tame", CALM + VOCAB_VERB} + , { + "throw", THROW + VOCAB_VERB} + , { + "toss", THROW + VOCAB_VERB} + , { + "tote", TAKE + VOCAB_VERB} + , { + "touch", 57} + , { + "travel", WALK + VOCAB_VERB} + , { + "treasure", CHEST + VOCAB_OBJECT} + , { + "tree", 64 + VOCAB_MSG} + , { + "trees", 64 + VOCAB_MSG} + , { + "trident", TRIDENT + VOCAB_OBJECT} + , { + "troll", TROLL + VOCAB_OBJECT} + , { + "troll", TROLL2 + VOCAB_OBJECT} + , { + "tunnel", 23} + , { + "turn", WALK + VOCAB_VERB} + , { + "u", 29} + , { + "unlight", OFF + VOCAB_VERB} + , { + "unlock", OPEN + VOCAB_VERB} + , { + "up", 29} + , { + "upstream", 4} + , { + "upward", 29} + , { + "utter", SAY + VOCAB_VERB} + , { + "valley", 9} + , { + "vase", VASE + VOCAB_OBJECT} + , { + "velvet", PILLOW + VOCAB_OBJECT} + , { + "vending", VEND + VOCAB_OBJECT} + , { + "verbose", VERBOSE + VOCAB_VERB} + , { + "view", 28} + , { + "volcano", VOLCANO + VOCAB_OBJECT} + , { + "w", 44} + , { + "wake", WAKE + VOCAB_VERB} + , { + "walk", WALK + VOCAB_VERB} + , { + "wall", 53} + , { + "water", WATER + VOCAB_OBJECT} + , { + "wave", WAVE + VOCAB_VERB} + , { + "west", 44} + , { + "xyzzy", 62} + , { + "y2", 55} + , +}; + +short sVocabCount = MAXDIM(VocabTab); + +#if 0 +static TRAV Trav001[] = { {2, 2, 0}, {2, 44, 0}, {2, 29, 0}, {3, 3, 0}, {3, 12, 0}, {3, 19, 0}, {3, 43, 0}, {4, 5, 0}, {4, 13, 0}, {4, 14, 0}, {4, 46, 0}, {4, 30, 0}, {5, 6, 0}, {5, 45, 0}, {5, 43, 0}, {8, 63, 0}, +}; +static TRAV Trav002[] = { {1, 2, 0}, {1, 12, 0}, {1, 7, 0}, {1, 43, 0}, {1, 45, 0}, {1, 30, 0}, {5, 6, 0}, {5, 45, 0}, {5, 46, 0}, +}; +static TRAV Trav003[] = { {1, 3, 0}, {1, 11, 0}, {1, 32, 0}, {1, 44, 0}, {11, 62, 0}, {33, 65, 0}, {79, 5, 0}, {79, 14, 0}, +}; +static TRAV Trav004[] = { {1, 4, 0}, {1, 12, 0}, {1, 45, 0}, {5, 6, 0}, {5, 43, 0}, {5, 44, 0}, {5, 29, 0}, {7, 5, 0}, {7, 46, 0}, {7, 30, 0}, {8, 63, 0}, +}; +static TRAV Trav005[] = { {4, 9, 0}, {4, 43, 0}, {4, 30, 0}, {5, 6, 50}, {5, 7, 50}, {5, 45, 50}, {6, 6, 0}, {5, 44, 0}, {5, 46, 0}, +}; +static TRAV Trav006[] = { {1, 2, 0}, {1, 45, 0}, {4, 9, 0}, {4, 43, 0}, {4, 44, 0}, {4, 30, 0}, {5, 6, 0}, {5, 46, 0}, +}; +static TRAV Trav007[] = { {1, 12, 0}, {4, 4, 0}, {4, 45, 0}, {5, 6, 0}, {5, 43, 0}, {5, 44, 0}, {8, 5, 0}, {8, 15, 0}, {8, 16, 0}, {8, 46, 0}, {595, 60, 0}, {595, 14, 0}, {595, 30, 0}, +}; +static TRAV Trav008[] = { {5, 6, 0}, {5, 43, 0}, {5, 46, 0}, {5, 44, 0}, {1, 12, 0}, {7, 4, 0}, {7, 13, 0}, {7, 45, 0}, {9, 3, 303}, {9, 19, 303}, {9, 30, 303}, {593, 3, 0}, +}; +static TRAV Trav009[] = { {8, 11, 303}, {8, 29, 303}, {593, 11, 0}, {10, 17, 0}, {10, 18, 0}, {10, 19, 0}, {10, 44, 0}, {14, 31, 0}, {11, 51, 0}, +}; +static TRAV Trav010[] = { {9, 11, 0}, {9, 20, 0}, {9, 21, 0}, {9, 43, 0}, {11, 19, 0}, {11, 22, 0}, {11, 44, 0}, {11, 51, 0}, {14, 31, 0}, +}; +static TRAV Trav011[] = { {8, 63, 303}, {9, 64, 0}, {10, 17, 0}, {10, 18, 0}, {10, 23, 0}, {10, 24, 0}, {10, 43, 0}, {12, 25, 0}, {12, 19, 0}, {12, 29, 0}, {12, 44, 0}, {3, 62, 0}, {14, 31, 0}, +}; +static TRAV Trav012[] = { {8, 63, 303}, {9, 64, 0}, {11, 30, 0}, {11, 43, 0}, {11, 51, 0}, {13, 19, 0}, {13, 29, 0}, {13, 44, 0}, {14, 31, 0}, +}; +static TRAV Trav013[] = { {8, 63, 303}, {9, 64, 0}, {11, 51, 0}, {12, 25, 0}, {12, 43, 0}, {14, 23, 0}, {14, 31, 0}, {14, 44, 0}, +}; +static TRAV Trav014[] = { {8, 63, 303}, {9, 64, 0}, {11, 51, 0}, {13, 23, 0}, {13, 43, 0}, {20, 30, 150}, {20, 31, 150}, {20, 34, 150}, {15, 30, 0}, {16, 33, 0}, {16, 44, 0}, +}; +static TRAV Trav015[] = { {18, 36, 0}, {18, 46, 0}, {17, 7, 0}, {17, 38, 0}, {17, 44, 0}, {19, 10, 0}, {19, 30, 0}, {19, 45, 0}, {22, 29, 150}, {22, 31, 150}, {22, 34, 150}, {22, 35, 150}, {22, 23, 150}, {22, 43, 150}, {14, 29, 0}, {34, 55, 0}, +}; +static TRAV Trav016[] = { {14, 1, 0}, +}; +static TRAV Trav017[] = { {15, 38, 0}, {15, 43, 0}, {596, 39, 312}, {21, 7, 412}, {597, 41, 412}, {597, 42, 412}, {597, 44, 412}, {597, 69, 412}, {27, 41, 0}, +}; +static TRAV Trav018[] = { {15, 38, 0}, {15, 11, 0}, {15, 45, 0}, +}; +static TRAV Trav019[] = { {15, 10, 0}, {15, 29, 0}, {15, 43, 0}, {28, 45, 311}, {28, 36, 311}, {29, 46, 311}, {29, 37, 311}, {30, 44, 311}, {30, 7, 311}, {32, 45, 0}, {74, 49, 35}, {32, 49, 211}, {74, 66, 0}, +}; +static TRAV Trav020[] = { {0, 1, 0}, +}; +static TRAV Trav021[] = { {0, 1, 0}, +}; +static TRAV Trav022[] = { {15, 1, 0}, +}; +static TRAV Trav023[] = { {67, 43, 0}, {67, 42, 0}, {68, 44, 0}, {68, 61, 0}, {25, 30, 0}, {25, 31, 0}, {648, 52, 0}, +}; +static TRAV Trav024[] = { {67, 29, 0}, {67, 11, 0}, +}; +static TRAV Trav025[] = { {23, 29, 0}, {23, 11, 0}, {31, 56, 724}, {26, 56, 0}, +}; +static TRAV Trav026[] = { {88, 1, 0}, +}; +static TRAV Trav027[] = { {596, 39, 312}, {21, 7, 412}, {597, 41, 412}, {597, 42, 412}, {597, 43, 412}, {597, 69, 412}, {17, 41, 0}, {40, 45, 0}, {41, 44, 0}, +}; +static TRAV Trav028[] = { {19, 38, 0}, {19, 11, 0}, {19, 46, 0}, {33, 45, 0}, {33, 55, 0}, {36, 30, 0}, {36, 52, 0}, +}; +static TRAV Trav029[] = { {19, 38, 0}, {19, 11, 0}, {19, 45, 0}, +}; +static TRAV Trav030[] = { {19, 38, 0}, {19, 11, 0}, {19, 43, 0}, {62, 44, 0}, {62, 29, 0}, +}; +static TRAV Trav031[] = { {89, 1, 524}, {90, 1, 0}, +}; +static TRAV Trav032[] = { {19, 1, 0}, +}; +static TRAV Trav033[] = { {3, 65, 0}, {28, 46, 0}, {34, 43, 0}, {34, 53, 0}, {34, 54, 0}, {35, 44, 0}, {302, 71, 159}, {100, 71, 0}, +}; +static TRAV Trav034[] = { {33, 30, 0}, {33, 55, 0}, {15, 29, 0}, +}; +static TRAV Trav035[] = { {33, 43, 0}, {33, 55, 0}, {20, 39, 0}, +}; +static TRAV Trav036[] = { {37, 43, 0}, {37, 17, 0}, {28, 29, 0}, {28, 52, 0}, {39, 44, 0}, {65, 70, 0}, +}; +static TRAV Trav037[] = { {36, 44, 0}, {36, 17, 0}, {38, 30, 0}, {38, 31, 0}, {38, 56, 0}, +}; +static TRAV Trav038[] = { {37, 56, 0}, {37, 29, 0}, {37, 11, 0}, {595, 60, 0}, {595, 14, 0}, {595, 30, 0}, {595, 4, 0}, {595, 5, 0}, +}; +static TRAV Trav039[] = { {36, 43, 0}, {36, 23, 0}, {64, 30, 0}, {64, 52, 0}, {64, 58, 0}, {65, 70, 0}, +}; +static TRAV Trav040[] = { {41, 1, 0}, +}; +static TRAV Trav041[] = { {42, 46, 0}, {42, 29, 0}, {42, 23, 0}, {42, 56, 0}, {27, 43, 0}, {59, 45, 0}, {60, 44, 0}, {60, 17, 0}, +}; +static TRAV Trav042[] = { {41, 29, 0}, {42, 45, 0}, {43, 43, 0}, {45, 46, 0}, {80, 44, 0}, +}; +static TRAV Trav043[] = { {42, 44, 0}, {44, 46, 0}, {45, 43, 0}, +}; +static TRAV Trav044[] = { {43, 43, 0}, {48, 30, 0}, {50, 46, 0}, {82, 45, 0}, +}; +static TRAV Trav045[] = { {42, 44, 0}, {43, 45, 0}, {46, 43, 0}, {47, 46, 0}, {87, 29, 0}, {87, 30, 0}, +}; +static TRAV Trav046[] = { {45, 44, 0}, {45, 11, 0}, +}; +static TRAV Trav047[] = { {45, 43, 0}, {45, 11, 0}, +}; +static TRAV Trav048[] = { {44, 29, 0}, {44, 11, 0}, +}; +static TRAV Trav049[] = { {50, 43, 0}, {51, 44, 0}, +}; +static TRAV Trav050[] = { {44, 43, 0}, {49, 44, 0}, {51, 30, 0}, {52, 46, 0}, +}; +static TRAV Trav051[] = { {49, 44, 0}, {50, 29, 0}, {52, 43, 0}, {53, 46, 0}, +}; +static TRAV Trav052[] = { {50, 44, 0}, {51, 43, 0}, {52, 46, 0}, {53, 29, 0}, {55, 45, 0}, {86, 30, 0}, +}; +static TRAV Trav053[] = { {51, 44, 0}, {52, 45, 0}, {54, 46, 0}, +}; +static TRAV Trav054[] = { {53, 44, 0}, {53, 11, 0}, +}; +static TRAV Trav055[] = { {52, 44, 0}, {55, 45, 0}, {56, 30, 0}, {57, 43, 0}, +}; +static TRAV Trav056[] = { {55, 29, 0}, {55, 11, 0}, +}; +static TRAV Trav057[] = { {13, 30, 0}, {13, 56, 0}, {55, 44, 0}, {58, 46, 0}, {83, 45, 0}, {84, 43, 0}, +}; +static TRAV Trav058[] = { {57, 43, 0}, {57, 11, 0}, +}; +static TRAV Trav059[] = { {27, 1, 0}, +}; +static TRAV Trav060[] = { {41, 43, 0}, {41, 29, 0}, {41, 17, 0}, {61, 44, 0}, {62, 45, 0}, {62, 30, 0}, {62, 52, 0}, +}; +static TRAV Trav061[] = { {60, 43, 0}, {62, 45, 0}, {107, 46, 100}, +}; +static TRAV Trav062[] = { {60, 44, 0}, {63, 45, 0}, {30, 43, 0}, {61, 46, 0}, +}; +static TRAV Trav063[] = { {62, 46, 0}, {62, 11, 0}, +}; +static TRAV Trav064[] = { {39, 29, 0}, {39, 56, 0}, {39, 59, 0}, {65, 44, 0}, {65, 70, 0}, {103, 45, 0}, {103, 74, 0}, {106, 43, 0}, +}; +static TRAV Trav065[] = { {64, 43, 0}, {66, 44, 0}, {556, 46, 80}, {68, 61, 0}, {556, 29, 80}, {70, 29, 50}, {39, 29, 0}, {556, 45, 60}, {72, 45, 75}, {71, 45, 0}, {556, 30, 80}, {106, 30, 0}, +}; +static TRAV Trav066[] = { {65, 47, 0}, {67, 44, 0}, {556, 46, 80}, {77, 25, 0}, {96, 43, 0}, {556, 50, 50}, {97, 72, 0}, +}; +static TRAV Trav067[] = { {66, 43, 0}, {23, 44, 0}, {23, 42, 0}, {24, 30, 0}, {24, 31, 0}, +}; +static TRAV Trav068[] = { {23, 46, 0}, {69, 29, 0}, {69, 56, 0}, {65, 45, 0}, +}; +static TRAV Trav069[] = { {68, 30, 0}, {68, 61, 0}, {120, 46, 331}, {119, 46, 0}, {109, 45, 0}, {113, 75, 0}, +}; +static TRAV Trav070[] = { {71, 45, 0}, {65, 30, 0}, {65, 23, 0}, {111, 46, 0}, +}; +static TRAV Trav071[] = { {65, 48, 0}, {70, 46, 0}, {110, 45, 0}, +}; +static TRAV Trav072[] = { {65, 70, 0}, {118, 49, 0}, {73, 45, 0}, {97, 48, 0}, {97, 72, 0}, +}; +static TRAV Trav073[] = { {72, 46, 0}, {72, 17, 0}, {72, 11, 0}, +}; +static TRAV Trav074[] = { {19, 43, 0}, {120, 44, 331}, {121, 44, 0}, {75, 30, 0}, +}; +static TRAV Trav075[] = { {76, 46, 0}, {77, 45, 0}, +}; +static TRAV Trav076[] = { {75, 45, 0}, +}; +static TRAV Trav077[] = { {75, 43, 0}, {78, 44, 0}, {66, 45, 0}, {66, 17, 0}, +}; +static TRAV Trav078[] = { {77, 46, 0}, +}; +static TRAV Trav079[] = { {3, 1, 0}, +}; +static TRAV Trav080[] = { {42, 45, 0}, {80, 44, 0}, {80, 46, 0}, {81, 43, 0}, +}; +static TRAV Trav081[] = { {80, 44, 0}, {80, 11, 0}, +}; +static TRAV Trav082[] = { {44, 46, 0}, {44, 11, 0}, +}; +static TRAV Trav083[] = { {57, 46, 0}, {84, 43, 0}, {85, 44, 0}, +}; +static TRAV Trav084[] = { {57, 45, 0}, {83, 44, 0}, {114, 50, 0}, +}; +static TRAV Trav085[] = { {83, 43, 0}, {83, 11, 0}, +}; +static TRAV Trav086[] = { {52, 29, 0}, {52, 11, 0}, +}; +static TRAV Trav087[] = { {45, 29, 0}, {45, 30, 0}, +}; +static TRAV Trav088[] = { {25, 30, 0}, {25, 56, 0}, {25, 43, 0}, {20, 39, 0}, {92, 44, 0}, {92, 27, 0}, +}; +static TRAV Trav089[] = { {25, 1, 0}, +}; +static TRAV Trav090[] = { {23, 1, 0}, +}; +static TRAV Trav091[] = { {95, 45, 0}, {95, 73, 0}, {95, 23, 0}, {72, 30, 0}, {72, 56, 0}, +}; +static TRAV Trav092[] = { {88, 46, 0}, {93, 43, 0}, {94, 45, 0}, +}; +static TRAV Trav093[] = { {92, 46, 0}, {92, 27, 0}, {92, 11, 0}, +}; +static TRAV Trav094[] = { {92, 46, 0}, {92, 27, 0}, {92, 23, 0}, {95, 45, 309}, {95, 3, 309}, {95, 73, 309}, {611, 45, 0}, +}; +static TRAV Trav095[] = { {94, 46, 0}, {94, 11, 0}, {92, 27, 0}, {91, 44, 0}, +}; +static TRAV Trav096[] = { {66, 44, 0}, {66, 11, 0}, +}; +static TRAV Trav097[] = { {66, 48, 0}, {72, 44, 0}, {72, 17, 0}, {98, 29, 0}, {98, 45, 0}, {98, 73, 0}, +}; +static TRAV Trav098[] = { {97, 46, 0}, {97, 72, 0}, {99, 44, 0}, +}; +static TRAV Trav099[] = { {98, 50, 0}, {98, 73, 0}, {301, 43, 0}, {301, 23, 0}, {100, 43, 0}, +}; +static TRAV Trav100[] = { {301, 44, 0}, {301, 23, 0}, {301, 11, 0}, {99, 44, 0}, {302, 71, 159}, {33, 71, 0}, {101, 47, 0}, {101, 22, 0}, +}; +static TRAV Trav101[] = { {100, 46, 0}, {100, 71, 0}, {100, 11, 0}, +}; +static TRAV Trav102[] = { {103, 30, 0}, {103, 74, 0}, {103, 11, 0}, +}; +static TRAV Trav103[] = { {102, 29, 0}, {102, 38, 0}, {104, 30, 0}, {618, 46, 114}, {619, 46, 115}, {64, 46, 0}, +}; +static TRAV Trav104[] = { {103, 29, 0}, {103, 74, 0}, {105, 30, 0}, +}; +static TRAV Trav105[] = { {104, 29, 0}, {104, 11, 0}, {103, 74, 0}, +}; +static TRAV Trav106[] = { {64, 29, 0}, {65, 44, 0}, {108, 43, 0}, +}; +static TRAV Trav107[] = { {131, 46, 0}, {132, 49, 0}, {133, 47, 0}, {134, 48, 0}, {135, 29, 0}, {136, 50, 0}, {137, 43, 0}, {138, 44, 0}, {139, 45, 0}, {61, 30, 0}, +}; +static TRAV Trav108[] = { {556, 43, 95}, {556, 45, 95}, {556, 46, 95}, {556, 47, 95}, {556, 48, 95}, {556, 49, 95}, {556, 50, 95}, {556, 29, 95}, {556, 30, 95}, {106, 43, 0}, {626, 44, 0}, +}; +static TRAV Trav109[] = { {69, 46, 0}, {113, 45, 0}, {113, 75, 0}, +}; +static TRAV Trav110[] = { {71, 44, 0}, {20, 39, 0}, +}; +static TRAV Trav111[] = { {70, 45, 0}, {50, 30, 40}, {50, 39, 40}, {50, 56, 40}, {53, 30, 50}, {45, 30, 0}, +}; +static TRAV Trav112[] = { {131, 49, 0}, {132, 45, 0}, {133, 43, 0}, {134, 50, 0}, {135, 48, 0}, {136, 47, 0}, {137, 44, 0}, {138, 30, 0}, {139, 29, 0}, {140, 46, 0}, +}; +static TRAV Trav113[] = { {109, 46, 0}, {109, 11, 0}, {109, 109, 0}, +}; +static TRAV Trav114[] = { {84, 48, 0}, +}; +static TRAV Trav115[] = { {116, 49, 0}, +}; +static TRAV Trav116[] = { {115, 47, 0}, {593, 30, 0}, +}; +static TRAV Trav117[] = { {118, 49, 0}, {660, 41, 233}, {660, 42, 233}, {660, 69, 233}, {660, 47, 233}, {661, 41, 332}, {303, 41, 0}, {21, 39, 332}, {596, 39, 0}, +}; +static TRAV Trav118[] = { {72, 30, 0}, {117, 29, 0}, +}; +static TRAV Trav119[] = { {69, 45, 0}, {69, 11, 0}, {653, 43, 0}, {653, 7, 0}, +}; +static TRAV Trav120[] = { {69, 45, 0}, {74, 43, 0}, +}; +static TRAV Trav121[] = { {74, 43, 0}, {74, 11, 0}, {653, 45, 0}, {653, 7, 0}, +}; +static TRAV Trav122[] = { {123, 47, 0}, {660, 41, 233}, {660, 42, 233}, {660, 69, 233}, {660, 49, 233}, {303, 41, 0}, {596, 39, 0}, {124, 77, 0}, {126, 28, 0}, {129, 40, 0}, +}; +static TRAV Trav123[] = { {122, 44, 0}, {124, 43, 0}, {124, 77, 0}, {126, 28, 0}, {129, 40, 0}, +}; +static TRAV Trav124[] = { {123, 44, 0}, {125, 47, 0}, {125, 36, 0}, {128, 48, 0}, {128, 37, 0}, {128, 30, 0}, {126, 28, 0}, {129, 40, 0}, +}; +static TRAV Trav125[] = { {124, 46, 0}, {124, 77, 0}, {126, 45, 0}, {126, 28, 0}, {127, 43, 0}, {127, 17, 0}, +}; +static TRAV Trav126[] = { {125, 46, 0}, {125, 23, 0}, {125, 11, 0}, {124, 77, 0}, {610, 30, 0}, {610, 39, 0}, +}; +static TRAV Trav127[] = { {125, 44, 0}, {125, 11, 0}, {125, 17, 0}, {124, 77, 0}, {126, 28, 0}, +}; +static TRAV Trav128[] = { {124, 45, 0}, {124, 29, 0}, {124, 77, 0}, {129, 46, 0}, {129, 30, 0}, {129, 40, 0}, {126, 28, 0}, +}; +static TRAV Trav129[] = { {128, 44, 0}, {128, 29, 0}, {124, 77, 0}, {130, 43, 0}, {130, 19, 0}, {130, 40, 0}, {130, 3, 0}, {126, 28, 0}, +}; +static TRAV Trav130[] = { {129, 44, 0}, {124, 77, 0}, {126, 28, 0}, +}; +static TRAV Trav131[] = { {107, 44, 0}, {132, 48, 0}, {133, 50, 0}, {134, 49, 0}, {135, 47, 0}, {136, 29, 0}, {137, 30, 0}, {138, 45, 0}, {139, 46, 0}, {112, 43, 0}, +}; +static TRAV Trav132[] = { {107, 50, 0}, {131, 29, 0}, {133, 45, 0}, {134, 46, 0}, {135, 44, 0}, {136, 49, 0}, {137, 47, 0}, {138, 43, 0}, {139, 30, 0}, {112, 48, 0}, +}; +static TRAV Trav133[] = { {107, 29, 0}, {131, 30, 0}, {132, 44, 0}, {134, 47, 0}, {135, 49, 0}, {136, 43, 0}, {137, 45, 0}, {138, 50, 0}, {139, 48, 0}, {112, 46, 0}, +}; +static TRAV Trav134[] = { {107, 47, 0}, {131, 45, 0}, {132, 50, 0}, {133, 48, 0}, {135, 43, 0}, {136, 30, 0}, {137, 46, 0}, {138, 29, 0}, {139, 44, 0}, {112, 49, 0}, +}; +static TRAV Trav135[] = { {107, 45, 0}, {131, 48, 0}, {132, 30, 0}, {133, 46, 0}, {134, 43, 0}, {136, 44, 0}, {137, 49, 0}, {138, 47, 0}, {139, 50, 0}, {112, 29, 0}, +}; +static TRAV Trav136[] = { {107, 43, 0}, {131, 44, 0}, {132, 29, 0}, {133, 49, 0}, {134, 30, 0}, {135, 46, 0}, {137, 50, 0}, {138, 48, 0}, {139, 47, 0}, {112, 45, 0}, +}; +static TRAV Trav137[] = { {107, 48, 0}, {131, 47, 0}, {132, 46, 0}, {133, 30, 0}, {134, 29, 0}, {135, 50, 0}, {136, 45, 0}, {138, 49, 0}, {139, 43, 0}, {112, 44, 0}, +}; +static TRAV Trav138[] = { {107, 30, 0}, {131, 43, 0}, {132, 47, 0}, {133, 29, 0}, {134, 44, 0}, {135, 45, 0}, {136, 46, 0}, {137, 48, 0}, {139, 49, 0}, {112, 50, 0}, +}; +static TRAV Trav139[] = { {107, 49, 0}, {131, 50, 0}, {132, 43, 0}, {133, 44, 0}, {134, 45, 0}, {135, 30, 0}, {136, 48, 0}, {137, 29, 0}, {138, 46, 0}, {112, 47, 0}, +}; +static TRAV Trav140[] = { {112, 45, 0}, {112, 11, 0}, +}; + +TRAVTAB TravTab[] = { + { + Trav001, MAXDIM(Trav001)}, { + Trav002, MAXDIM(Trav002)}, { + Trav003, MAXDIM(Trav003)}, { + Trav004, MAXDIM(Trav004)}, { + Trav005, MAXDIM(Trav005)}, { + Trav006, MAXDIM(Trav006)}, { + Trav007, MAXDIM(Trav007)}, { + Trav008, MAXDIM(Trav008)}, { + Trav009, + MAXDIM(Trav009)}, { + Trav010, + MAXDIM + (Trav010)}, + { + Trav011, MAXDIM(Trav011)}, { + Trav012, MAXDIM(Trav012)}, { + Trav013, MAXDIM(Trav013)}, { + Trav014, MAXDIM(Trav014)}, { + Trav015, MAXDIM(Trav015)}, { + Trav016, MAXDIM(Trav016)}, { + Trav017, MAXDIM(Trav017)}, { + Trav018, MAXDIM(Trav018)}, { + Trav019, + MAXDIM(Trav019)}, { + Trav020, + MAXDIM + (Trav020)}, + { + Trav021, MAXDIM(Trav021)}, { + Trav022, MAXDIM(Trav022)}, { + Trav023, MAXDIM(Trav023)}, { + Trav024, MAXDIM(Trav024)}, { + Trav025, MAXDIM(Trav025)}, { + Trav026, MAXDIM(Trav026)}, { + Trav027, MAXDIM(Trav027)}, { + Trav028, MAXDIM(Trav028)}, { + Trav029, + MAXDIM(Trav029)}, { + Trav030, + MAXDIM + (Trav030)}, + { + Trav031, MAXDIM(Trav031)}, { + Trav032, MAXDIM(Trav032)}, { + Trav033, MAXDIM(Trav033)}, { + Trav034, MAXDIM(Trav034)}, { + Trav035, MAXDIM(Trav035)}, { + Trav036, MAXDIM(Trav036)}, { + Trav037, MAXDIM(Trav037)}, { + Trav038, MAXDIM(Trav038)}, { + Trav039, + MAXDIM(Trav039)}, { + Trav040, + MAXDIM + (Trav040)}, + { + Trav041, MAXDIM(Trav041)}, { + Trav042, MAXDIM(Trav042)}, { + Trav043, MAXDIM(Trav043)}, { + Trav044, MAXDIM(Trav044)}, { + Trav045, MAXDIM(Trav045)}, { + Trav046, MAXDIM(Trav046)}, { + Trav047, MAXDIM(Trav047)}, { + Trav048, MAXDIM(Trav048)}, { + Trav049, + MAXDIM(Trav049)}, { + Trav050, + MAXDIM + (Trav050)}, + { + Trav051, MAXDIM(Trav051)}, { + Trav052, MAXDIM(Trav052)}, { + Trav053, MAXDIM(Trav053)}, { + Trav054, MAXDIM(Trav054)}, { + Trav055, MAXDIM(Trav055)}, { + Trav056, MAXDIM(Trav056)}, { + Trav057, MAXDIM(Trav057)}, { + Trav058, MAXDIM(Trav058)}, { + Trav059, + MAXDIM(Trav059)}, { + Trav060, + MAXDIM + (Trav060)}, + { + Trav061, MAXDIM(Trav061)}, { + Trav062, MAXDIM(Trav062)}, { + Trav063, MAXDIM(Trav063)}, { + Trav064, MAXDIM(Trav064)}, { + Trav065, MAXDIM(Trav065)}, { + Trav066, MAXDIM(Trav066)}, { + Trav067, MAXDIM(Trav067)}, { + Trav068, MAXDIM(Trav068)}, { + Trav069, + MAXDIM(Trav069)}, { + Trav070, + MAXDIM + (Trav070)}, + { + Trav071, MAXDIM(Trav071)}, { + Trav072, MAXDIM(Trav072)}, { + Trav073, MAXDIM(Trav073)}, { + Trav074, MAXDIM(Trav074)}, { + Trav075, MAXDIM(Trav075)}, { + Trav076, MAXDIM(Trav076)}, { + Trav077, MAXDIM(Trav077)}, { + Trav078, MAXDIM(Trav078)}, { + Trav079, + MAXDIM(Trav079)}, { + Trav080, + MAXDIM + (Trav080)}, + { + Trav081, MAXDIM(Trav081)}, { + Trav082, MAXDIM(Trav082)}, { + Trav083, MAXDIM(Trav083)}, { + Trav084, MAXDIM(Trav084)}, { + Trav085, MAXDIM(Trav085)}, { + Trav086, MAXDIM(Trav086)}, { + Trav087, MAXDIM(Trav087)}, { + Trav088, MAXDIM(Trav088)}, { + Trav089, + MAXDIM(Trav089)}, { + Trav090, + MAXDIM + (Trav090)}, + { + Trav091, MAXDIM(Trav091)}, { + Trav092, MAXDIM(Trav092)}, { + Trav093, MAXDIM(Trav093)}, { + Trav094, MAXDIM(Trav094)}, { + Trav095, MAXDIM(Trav095)}, { + Trav096, MAXDIM(Trav096)}, { + Trav097, MAXDIM(Trav097)}, { + Trav098, MAXDIM(Trav098)}, { + Trav099, + MAXDIM(Trav099)}, { + Trav100, + MAXDIM + (Trav100)}, + { + Trav101, MAXDIM(Trav101)}, { + Trav102, MAXDIM(Trav102)}, { + Trav103, MAXDIM(Trav103)}, { + Trav104, MAXDIM(Trav104)}, { + Trav105, MAXDIM(Trav105)}, { + Trav106, MAXDIM(Trav106)}, { + Trav107, MAXDIM(Trav107)}, { + Trav108, MAXDIM(Trav108)}, { + Trav109, + MAXDIM(Trav109)}, { + Trav110, + MAXDIM + (Trav110)}, + { + Trav111, MAXDIM(Trav111)}, { + Trav112, MAXDIM(Trav112)}, { + Trav113, MAXDIM(Trav113)}, { + Trav114, MAXDIM(Trav114)}, { + Trav115, MAXDIM(Trav115)}, { + Trav116, MAXDIM(Trav116)}, { + Trav117, MAXDIM(Trav117)}, { + Trav118, MAXDIM(Trav118)}, { + Trav119, + MAXDIM(Trav119)}, { + Trav120, + MAXDIM + (Trav120)}, + { + Trav121, MAXDIM(Trav121)}, { + Trav122, MAXDIM(Trav122)}, { + Trav123, MAXDIM(Trav123)}, { + Trav124, MAXDIM(Trav124)}, { + Trav125, MAXDIM(Trav125)}, { + Trav126, MAXDIM(Trav126)}, { + Trav127, MAXDIM(Trav127)}, { + Trav128, MAXDIM(Trav128)}, { + Trav129, + MAXDIM(Trav129)}, { + Trav130, + MAXDIM + (Trav130)}, + { + Trav131, MAXDIM(Trav131)}, { + Trav132, MAXDIM(Trav132)}, { + Trav133, MAXDIM(Trav133)}, { + Trav134, MAXDIM(Trav134)}, { + Trav135, MAXDIM(Trav135)}, { + Trav136, MAXDIM(Trav136)}, { + Trav137, MAXDIM(Trav137)}, { + Trav138, MAXDIM(Trav138)}, { + Trav139, + MAXDIM(Trav139)}, { + Trav140, + MAXDIM + (Trav140)}, +}; + +char *pObjDesc[] = { +/* Object 1 */ + "Set of keys." "/There are some keys on the ground here.", +/* Object 2 */ + "Brass lantern" "/There is a shiny brass lamp nearby." "/There is a lamp shining nearby.", +/* Object 3 */ + "*Grate" "/The grate is locked." "/The grate is open.", +/* Object 4 */ + "Wicker cage" "/There is a small wicker cage discarded nearby.", +/* Object 5 */ + "Black rod" "/A three foot black rod with a rusty star on an end lies nearby.", +/* Object 6 */ + "Black rod" "/A three foot black rod with a rusty mark on an end lies nearby.", +/* Object 7 */ + "*Steps" "/Rough stone steps lead down the pit." "/Rough stone steps lead up the dome.", +/* Object 8 */ + "Little bird in cage" "/A cheerful little bird is sitting here singing." "/There is a little bird in the cage.", +/* Object 9 */ + "*Rusty door" "/The way north is barred by a massive, rusty, iron door." "/The way north leads through a massive, rusty, iron door.", +/* Object 10 */ + "Velvet pillow" "/A small velvet pillow lies on the floor.", +/* Object 11 */ + "*Snake" "/A huge green fierce snake bars the way!", +/* Object 12 */ + "*Fissure" "//A crystal bridge now spans the fissure." "/The crystal bridge has vanished!", +/* Object 13 */ + "*Stone tablet" "/A massive stone tablet imbedded in the wall reads:" "\"Congratulations on bringing light into the dark-room!\"", +/* Object 14 */ + "Giant clam >Grunt!<" "/There is an enormous clam here with its shell tightly closed.", +/* Object 15 */ + "Giant oyster >Groan!<" "/There is an enormous oyster here with its shell tightly closed." "/Interesting. There seems to be something written on the underside of the\n" "oyster.", +/* Object 16 */ + "\"Spelunker Today\"" "/There are a few recent issues of \"Spelunker Today\" magazine here.", +/* Object 17 */ + "", +/* Object 18 */ + "", +/* Object 19 */ + "Tasty food" "/There is tasty food here.", +/* Object 20 */ + "Small bottle" "/There is a bottle of water here." "/There is an empty bottle here." "/There is a bottle of oil here.", +/* Object 21 */ + "Water in the bottle.", +/* Object 22 */ + "Oil in the bottle", +/* Object 23 */ + "*Mirror", +/* Object 24 */ + "*Plant" + "/There is a tiny little plant in the pit, murmuring \"Water, Water, ...\"" + "/The plant spurts into furious growth for a few seconds." + "/There is a 12-foot-tall beanstalk stretching up out of the pit, bellowing\n" + "\"Water!! Water!!\"" "/The plant grows explosively, almost filling the bottom of the pit." "/There is a gigantic beanstalk stretching all the way up to the hole." "/You've over-watered the plant! It's shriveling up! It's, It's...", +/* Object 25 */ + "*Phony plant" "/" "/The top of a 12-foot-tall beanstalk is poking up out of the west pit." "/There is a huge beanstalk growing out of the west pit up to the hole.", +/* Object 26 */ + "*Stalactite", +/* Object 27 */ + "*Shadowy figure" "/The shadowy figure seems to be trying to attract your attention.", +/* Object 28 */ + "Dwarf's axe" "/There is a little axe here." "/There is a little axe lying beside the bear.", +/* Object 29 */ + "*Cave drawings", +/* Object 30 */ + "*Pirate", +/* Object 31 */ + "*Dragon" "/A huge green fierce dragon bars the way!" "/Congratulations! You have just vanquished a dragon with your bare hands!\n" "(Unbelievable, Isn't it?)" "/The body of a huge green dead dragon is lying off to one side.", +/* Object 32 */ + "*Chasm" + "/A rickety wooden bridge extends across the chasm, vanishing into the mist.\n" + "A sign posted on the bridge reads:\n" " \"Stop! Pay Troll!\"" "/The wreckage of a bridge (and a dead bear) can be seen at the bottom of the\n" "chasm.", +/* Object 33 */ + "*Troll" "/A burly troll stands by the bridge and insists you throw him a treasure\n" "before you may cross." "/The troll steps out from beneath the bridge and blocks your way.", +/* Object 34 */ + "*Phony troll" "/The troll is nowhere to be seen.", +/* Object 35 */ + "/There is a ferocious cave bear eyeing you from the far end of the room!" "/There is a gentle cave bear sitting placidly in one corner." "/There is a contented-looking bear wandering about nearby.", +/* Object 36 */ + "*Message in second maze" "/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\"", +/* Object 37 */ + "*Volcano and,or Geyser", +/* Object 38 */ + "*Vending machine" "/There is a massive vending machine here. The instructions on it read:\n" "\n" " \"Drop coins here to receive fresh batteries.\"", +/* Object 39 */ + "Batteries" "/There are fresh batteries here." "/Some worn-out batteries have been discarded nearby.", +/* Object 40 */ + "*Carpet and,or moss", +/* Object 41 */ + "", +/* Object 42 */ + "", +/* Object 43 */ + "", +/* Object 44 */ + "", +/* Object 45 */ + "", +/* Object 46 */ + "", +/* Object 47 */ + "", +/* Object 48 */ + "", +/* Object 49 */ + "", +/* Object 50 */ + "Large gold nugget" "/There is a large sparkling nugget of gold here!", +/* Object 51 */ + "Several diamonds" "/There are diamonds here!", +/* Object 52 */ + "Bars of silver" "/There are bars of silver here!", +/* Object 53 */ + "Precious jewelry" "/There is precious jewelry here!", +/* Object 54 */ + "Rare coins" "/There are many coins here!", +/* Object 55 */ + "Treasure chest" "/The pirate's treasure chest is here!", +/* Object 56 */ + "Golden eggs" "/There is a large nest here, full of golden eggs!" "/The nest of golden eggs has vanished!" "/Done!", +/* Object 57 */ + "Jeweled trident" "/There is a jewel-encrusted trident here!", +/* Object 58 */ + "Ming vase" "/There is a delicate, precious, ming vase here!" "/The vase is now resting, delicately, on a velvet pillow." "/The floor is littered with worthless shards of pottery." "/The ming vase drops with a delicate crash.", +/* Object 59 */ + "Egg-sized emerald" "/There is an emerald here the size of a plover's egg!", +/* Object 60 */ + "Platinum pyramid" "/There is a platinum pyramid here, 8 inches on a side!", +/* Object 61 */ + "Glistening pearl" "/Off to one side lies a glistening pearl!", +/* Object 62 */ + "Persian rug" "/There is a persian rug spread out on the floor!" "/The dragon is sprawled out on a persian rug!!", +/* Object 63 */ + "Rare spices" "/There are rare spices here!", +/* Object 64 */ + "Golden chain" "/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!", +}; + +char *pLongRmDesc[] = { +/* Room 1 */ + "You are standing at the end of a road before a small brick building. Around\n" "you is a forest. A small stream flows out of the building and down a gully.", +/* Room 2 */ + "You have walked up a hill, still in the forest. The road slopes back down\n" "the other side of the hill. There is a building in the distance.", +/* Room 3 */ + "You are inside a building, a well house for a large spring.", +/* Room 4 */ + "You are in a valley in the forest beside a stream tumbling along a rocky\n" "bed.", +/* Room 5 */ + "You are in open forest, with a deep valley to one side.", +/* Room 6 */ + "You are in open forest near both a valley and a road.", +/* Room 7 */ + "At your feet all the water of the stream splashes into a 2-inch slit in the\n" "rock. Downstream the streambed is bare rock.", +/* Room 8 */ + "You are in a 20-foot depression floored with bare dirt. Set into the dirt\n" "is a strong steel grate mounted in concrete. A dry streambed leads into the\n" "depression.", +/* Room 9 */ + "You are in a small chamber beneath a 3x3 steel grate to the surface. A low\n" "crawl over cobbles leads inward to the West.", +/* Room 10 */ + "You are crawling over cobbles in a low passage. There is a dim light at the\n" "east end of the passage.", +/* Room 11 */ + "You are in a debris room filled with stuff washed in from the surface. A\n" + "low wide passage with cobbles becomes plugged with mud and debris here, but\n" "an awkward canyon leads upward and west. A note on the wall says:\n" " Magic Word \"XYZZY\"", +/* Room 12 */ + "You are in an awkward sloping east/west canyon.", +/* Room 13 */ + "You are in a splendid chamber thirty feet high. The walls are frozen rivers\n" "of orange stone. An awkward canyon and a good passage exit from east and\n" "west sides of the chamber.", +/* Room 14 */ + "At your feet is a small pit breathing traces of white mist. An east passage\n" "ends here except for a small crack leading on.", +/* Room 15 */ + "You are at one end of a vast hall stretching forward out of sight to the\n" + "west. There are openings to either side. Nearby, a wide stone staircase\n" + "leads downward. The hall is filled with wisps of white mist swaying to and\n" "fro almost as if alive. A cold wind blows up the staircase. There is a\n" "passage at the top of a dome behind you.", +/* Room 16 */ + "The crack is far too small for you to follow.", +/* Room 17 */ + "You are on the east bank of a fissure slicing clear across the hall. The\n" "mist is quite thick here, and the fissure is too wide to jump.", +/* Room 18 */ + "This is a low room with a crude note on the wall. The note says:\n" " You won't get it up the steps.", +/* Room 19 */ + "You are in the hall of the mountain king, with passages off in all\n" "directions.", +/* Room 20 */ + "You are at the bottom of the pit with a broken neck.", +/* Room 21 */ + "You didn't make it.", +/* Room 22 */ + "The dome is unclimbable.", +/* Room 23 */ + "You are at the west end of the twopit room. There is a large hole in the\n" "wall above the pit at this end of the room.", +/* Room 24 */ + "You are that the bottom of the eastern pit in the twopit room. There is a\n" "small pool of oil in one corner of the pit.", +/* Room 25 */ + "You are at the bottom of the western pit in the towpit room. There is a\n" "large hole in the wall about 25 feet above you.", +/* Room 26 */ + "You clamber up the plant and scurry through the hole at the top.", +/* Room 27 */ + "You are on the west side of the fissure in the hall of mists.", +/* Room 28 */ + "You are in a low N/S passage at a hole in the floor. The hole goes down to\n" "an E/W passage.", +/* Room 29 */ + "You are in the south side chamber.", +/* Room 30 */ + "You are in the west side chamber of the hall of the mountain king. A\n" "passage continues west and up here.", +/* Room 31 */ + ">$<", +/* Room 32 */ + "You can't get by the snake.", +/* Room 33 */ + "You are in a large room, with a passage to the south, a passage to the west,\n" "and a wall of broken rock to the east. There is a large \"Y2\" on a rock in\n" "the room's center.", +/* Room 34 */ + "You are in a jumble of rock, with cracks everywhere.", +/* Room 35 */ + "You're at a low window overlooking a huge pit, which extends up out of\n" + "sight. A floor is indistinctly visible over 50 feet below. Traces of white\n" + "mist cover the floor of the pit, becoming thicker to the right. Marks in\n" + "the dust around the window would seem to indicate that someone has been here\n" + "recently. Directly across the pit from you and 25 feet away there is a\n" "similar window looking into a lighted room. A shadowy figure can be seen\n" "there peering back at you.", +/* Room 36 */ + "You are in a dirty broken passage. To the east is a crawl. To the west is\n" "a large passage. Above you is another passage.", +/* Room 37 */ + "You are on the brink of a small clean climbable pit. A crawl leads west.", +/* Room 38 */ + "You are in the bottom of a small pit with a little stream, which enters and\n" "exits through tiny slits.", +/* Room 39 */ + "You are in a large room full of dusty rocks. There is a big hole in the\n" "floor. There are cracks everywhere, and a passage leading east.", +/* Room 40 */ + "You have crawled through a very low wide passage parallel to and north of\n" "the hall of mists.", +/* Room 41 */ + "You are at the west end of hall of mists. A low wide crawl continues west\n" "and another goes north. To the south is a little passage 6 feet off the\n" "floor.", +/* Room 42 */ + "You are in a maze of twisty little passages, all alike.", +/* Room 43 */ + "@42", +/* Room 44 */ + "@42", +/* Room 45 */ + "@42", +/* Room 46 */ + "Dead end.", +/* Room 47 */ + "@46", +/* Room 48 */ + "@46", +/* Room 49 */ + "@42", +/* Room 50 */ + "@42", +/* Room 51 */ + "@42", +/* Room 52 */ + "@42", +/* Room 53 */ + "@42", +/* Room 54 */ + "@46", +/* Room 55 */ + "@42", +/* Room 56 */ + "@46", +/* Room 57 */ + "You are on the brink of a thirty foot pit with a massive orange column down\n" "one wall. You could climb down here but you could not get back up. The\n" "maze continues at this level.", +/* Room 58 */ + "@46", +/* Room 59 */ + "You have crawled through a very low wide passage paralled to and north of\n" "the hall of mists.", +/* Room 60 */ + "You are at the east end of a very long hall apparently without side\n" "chambers. To the east a low wide crawl slants up. To the north a round two\n" "foot hole slants down.", +/* Room 61 */ + "You are at the west end of a very long featureless hall. The hall joins up\n" "with a narrow north/south passage.", +/* Room 62 */ + "You are at a crossover of a high N/S passage and a low E/W one.", +/* Room 63 */ + "@46", +/* Room 64 */ + "You are at a complex junction. A low hands and knees passage from the north\n" "joins a higher crawl from the east to make a walking passage going west.\n" "There is also a large room above. The air is damp here.", +/* Room 65 */ + "You are in bedquilt, a long east/west passage with holes everywhere. To\n" "explore at random select north, south, up or down.", +/* Room 66 */ + "You are in a room whose walls resemble swiss cheese. Obvious passages go\n" "west, east, ne, and nw. Part of the room is occupied by a large bedrock\n" "block.", +/* Room 67 */ + "You are at the east end of the twopit room. The floor here is littered with\n" + "thin rock slabs, which make it easy to descend the pits. There is a path\n" + "here bypassing the pits to connect passages from east and west. There are\n" "holes all over, but the only bit one is on the wall directly over the west\n" "pit where you can't get at it.", +/* Room 68 */ + "You are in a large low circular chamber whose floor is an immense slab\n" + "fallen from the ceiling (slab room). East and west there once were large\n" "passages, but they are now filled with boulders. Low small passages go\n" "north and south, and the south one quickly bends west around the boulders.", +/* Room 69 */ + "You are in a secret N/S canyon above a large room.", +/* Room 70 */ + "You are in a secret N/S canyon above a sizable passage.", +/* Room 71 */ + "You are in a secret canyon at a junction of three canyons, bearing north,\n" "south and se. The north one is as tall as the other two combined.", +/* Room 72 */ + "You are in a large low room. Crawls lead north, se, and sw.", +/* Room 73 */ + "Dead end crawl.", +/* Room 74 */ + "You are in a secret canyon which here runs E/W. It crosses over a very\n" "tight canyon 15 feet below. If you go down you may not be able to get back\n" "up.", +/* Room 75 */ + "You are at a wide place in a very tight N/S canyon.", +/* Room 76 */ + "The canyon here becomes too tight to go further south.", +/* Room 77 */ + "You are in a tall E/W canyon. A low tight crawl goes 3 feet north and seems\n" "to open up.", +/* Room 78 */ + "The canyon runs into a mass of boulders -- dead end.", +/* Room 79 */ + "The stream flows out through a pair of 1 foot diameter sewer pipes. It\n" "would be advisable to use the exit.", +/* Room 80 */ + "@42", +/* Room 81 */ + "@46", +/* Room 82 */ + "@46", +/* Room 83 */ + "@42", +/* Room 84 */ + "@42", +/* Room 85 */ + "@46", +/* Room 86 */ + "@46", +/* Room 87 */ + "@42", +/* Room 88 */ + "You are in a long, narrow corridor stretching out of sight to the west. At\n" "the eastern end is a hole through which you can see a profusion of leaves,\n", +/* Room 89 */ + "There is nothing here to climb. Use \"up\" or \"out\" to leave\n", "the pit.", +/* Room 90 */ + "You have climbed up the plant and out of the pit.", +/* Room 91 */ + "You are at the top of a steep incline above a large room. You could climb\n" "down here, but you would not be able to climb up. There is a passage\n" "leading back to the north.", +/* Room 92 */ + "You are in the giant room. The ceiling is too high up for your lamp to show\n" "it. Cavernous passages lead east, north, and south. On the west wall is\n" "scrawled the inscription:\n" " \"Fee Fie Foe Foo\" {sic}", +/* Room 93 */ + "The passage here is blocked by a recent cave-in.", +/* Room 94 */ + "You are at one end of an immense north/south passage.", +/* Room 95 */ + "You are in a magnificent cavern with a rushing stream, which cascades over a\n" "sparkling waterfall into a roaring whirlpool which disappears through a hole\n" "in the floor. Passages exit to the south and west.", +/* Room 96 */ + "You are in the soft room. The walls are covered with heavy curtains, the\n" "floor with a thick pile carpet. Moss covers the ceiling.", +/* Room 97 */ + "This is the oriental room. Ancient oriental cave drawings cover the walls.\n" "A gently sloping passage leads upward to the north, another passage leads se,\n" "and a hands and knees crawl leads west.", +/* Room 98 */ + "You are following a wide path around the outer edge of a large cavern. Far\n" + "below, through a heavy white mist, strange splashing noises can be heard.\n" "The mist rises up through a fissure in the ceiling. The path exits to the\n" "south and west.", +/* Room 99 */ + "You are in an alcove. A small nw path seems to widen after a short\n" "distance. An extremely tight tunnel leads east. It looks like a very tight\n" "squeeze. An eerie light can be seen at the other end.", +/* Room 100 */ + "You're in a small chamber lit by an eerie green light. An extremely narrow\n" "tunnel exits to the west. A dark corridor leads ne.", +/* Room 101 */ + "You're in the dark-room. A corridor leading south is the only exit.", +/* Room 102 */ + "You are in an arched hall. A coral passage once continued up and east from\n" "here, but is now blocked by debris. The air smells of sea water.", +/* Room 103 */ + "You're in a large room carved out of sedimentary rock. The floor and walls\n" + "are littered with bits of shells imbedded in the stone. A shallow passage\n" "proceeds downward, and a somewhat steeper one leads up. A low hands and\n" "knees passage enters from the south.", +/* Room 104 */ + "You are in a long sloping corridor with ragged sharp walls.", +/* Room 105 */ + "You are in a cul-de-sac about eight feet across.", +/* Room 106 */ + "You are in an anteroom leading to a large passage to the east. Small\n" + "passages go west and up. The remnants of recent digging are evident. A\n" + "sign in midair here says:\n" " \"Cave under construction beyond this point.\"\n" " \"Proceed at your own risk.\"\n" " \"Witt construction company\"", +/* Room 107 */ + "You are in a maze of twisty little passages, all different.", +/* Room 108 */ + "You are at Witt's end. Passages lead off in ALL directions.", +/* Room 109 */ + "You are in a north/south canyon about 25 feet across. The floor is covered\n" + "by white mist seeping in from the north. The walls extend upward for well\n" + "over 100 feet. Suspended from some unseen point far above you, an enormous\n" + "two-sided mirror is hanging paralled to and midway between the canyon walls.\n" + "(The mirror is obviously provided for the use of the dwarves, who as you\n" "know, are extremely vain.) A small window can be seen in either wall, some\n" "fifty feet up.", +/* Room 110 */ + "You're at a low window overlooking a huge pit, which extends up out of\n" + "sight. A floor is indistinctly visible over 50 feet below. Traces of white\n" + "mist cover the floor of the pit, becoming thicker to the left. Marks in the\n" + "dust around the window would seem to indicate that someone has been here\n" + "recently. Directly across the pit from you and 25 feet away there is a\n" "similar window looking into a lighted room. A shadowy figure can be seen\n" "there peering back at you.", +/* Room 111 */ + "A large stalactite extends from the roof and almost reaches the floor below.\n" "You could climb down it, and jump from it to the floor, but having done so\n" "you would be unable to reach it to climb back up.", +/* Room 112 */ + "You are in a little maze of twisting passages, all different.", +/* Room 113 */ + "You are at the edge of a large underground reservoir. An opaque cloud of\n" + "white mist fills the room and rises rapidly upward. The lake is fed by a\n" + "stream which tumbles out of a hole in the wall about 10 feet overhead and\n" "splashes noisily into the water somewhere within the mist. The only passage\n" "goes back toward the south.", +/* Room 114 */ + "@46", +/* Room 115 */ + "@141,142", +/* Room 116 */ + "@143,144", +/* Room 117 */ + "You are on one side of a large deep chasm. A heavy white mist rising up\n" "from below obscures all view of the far side. A sw path leads away from the\n" "chasm into a winding corridor.", +/* Room 118 */ + "You are in a long winding corridor sloping out of sight in both directions.", +/* Room 119 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 120 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 121 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 122 */ + "You are on the far side of the chasm. A ne path leads away from the chasm\n" "on this side.", +/* Room 123 */ + "You're in a long east/west corridor. A faint rumbling noise can be heard in\n" "the distance.", +/* Room 124 */ + "The path forks here. The left fork leads northeast. A dull rumbling seems\n" "to get louder in that direction. The right fork leads southeast down a\n" "gentle slope. The main corridor enters from the west.", +/* Room 125 */ + "The walls are quite warm here. From the north can be heard a steady roar,\n" "so loud that the entire cave seems to be trembling. Another passage leads\n" "south, and a low crawl goes east.", +/* Room 126 */ + "@145,146,147", +/* Room 127 */ + "You are in a small chamber filled with large boulders. The walls are very\n" "warm, causing the air in the room to be almost stifling from the heat. The\n" "only exit is a crawl heading west, through which is coming a low rumbling.", +/* Room 128 */ + "You are walking along a gently sloping north/south passage lined with oddly\n" "shaped limestone formations.", +/* Room 129 */ + "You are standing at the entrance to a large, barren room. A sign posted\n" "above the entrance reads:\n" " \"Caution! Bear in room!\"" +/* Room 130 */ + "You are inside a barren room. The center of the room is completely empty\n" "except for some dust. Marks in the dust lead away toward the far end of the\n" "room. The only exit is the way you came in.", +/* Room 131 */ + "You are in a maze of twisting little passages, all different.", +/* Room 132 */ + "You are in a little maze of twisty passages, all different.", +/* Room 133 */ + "You are in a twisting maze of little passages, all different.", +/* Room 134 */ + "You are in a twisting little maze of passages, all different.", +/* Room 135 */ + "You are in a twisty little maze of passages, all different.", +/* Room 136 */ + "You are in a twisty maze of little passages, all different.", +/* Room 137 */ + "You are in a little twisty maze of passages, all different.", +/* Room 138 */ + "You are in a maze of little twisting passages, all different.", +/* Room 139 */ + "You are in a maze of little twisty passages, all different.", +/* Room 140 */ + "@46", +/* Extra 141 */ + "You are at the northeast end of an immense room, even larger than the giant\n" + "room. It appears to be a repository for the \"adventure\" program. Massive\n" + "torches far overhead bathe the room with smoky yellow light. Scattered\n" + "about you can be seen a pile of bottles (all of them empty), a nursery of\n" "young beanstalks murmuring quietly, a bed of oysters, a bundle of black rods\n" "with rusty stars on their ends, and a collection of brass lanterns. Off to", +/* Extra 142 */ + "one side a great many Dwarves are sleeping on the floor, snoring loudly. A\n" + "sign nearby reads:\n" + "\n" " \"Do NOT disturb the Dwarves!\"\n" "\n" "An immense mirror is hanging against one wall, and stretches to the other\n" "end of the room, where various other sundry objects can be glimpsed dimly in\n" "the distance.", +/* Extra 143 */ + "You are at the southwest end of the repository. To one side is a pit full\n" + "of fierce green snakes. On the other side is a row of small wicker cages,\n" + "each of which contains a little sulking bird. In one corner is a bundle of\n" "black rods with rusty marks on their ends. A large number of velvet pillows\n" "are scattered about on the floor. A vast mirror stretches off to the", +/* Extra 144 */ + "northeast. At your feet is a large steel grate, next to which is a sign\n" "which reads:\n" " \"Treasure vault. Keys in main office.\"", +/* Extra 145 */ + "You are on the edge of a breath-taking view. Far below you is an active\n" + "volcano, from which great gouts of molten lava come surging out, cascading\n" + "back down into the depths. The glowing rock fills the farthest reaches of\n" + "the cavern with a blood-red glare, giving everything an eerie, macabre\n" "appearance. The air is filled with flickering sparks of ash and a heavy\n" "smell of brimstone. The walls are hot to the touch, and the thundering of", +/* Extra 146 */ + "the volcano drowns out all other sounds. Embedded in the jagged roof far\n" + "overhead are myriad formations composed of pure white alabaster, which\n" + "scatter their murky light into sinister apparitions upon the walls. To one\n" + "side is a deep gorge, filled with a bizarre chaos of tortured rock which\n" "seems to have been crafted by the Devil Himself. An immense river of fire\n" "crashes out from the depths of the volcano, burns its way through the gorge,", +/* Extra 147 */ + "and plummets into a bottomless pit far off to your left. To the right, an\n" + "immense geyser of blistering steam erupts continuously from a barren island\n" + "in the center of a sulfurous lake, which bubbles ominously. The far right\n" + "wall is aflame with an incandescence of its own, which lends an additional\n" "infernal splendor to the already hellish scene. A dark, foreboding passage\n" "exits to the south.", +}; + +char *pShortRmDesc[] = { +/* Room 1 */ + "You're at end of road again.", +/* Room 2 */ + "You're at hill in road.", +/* Room 3 */ + "You're inside building.", +/* Room 4 */ + "You're in valley.", +/* Room 5 */ + "You're in forest.", +/* Room 6 */ + "You're in forest.", +/* Room 7 */ + "You're at slit in streambed.", +/* Room 8 */ + "You're outside grate.", +/* Room 9 */ + "You're below the grate.", +/* Room 10 */ + "You're in cobble crawl.", +/* Room 11 */ + "You're in debris room.", +/* Room 12 */ + "You are in an awkward sloping east/west canyon.", +/* Room 13 */ + "You're in bird chamber.", +/* Room 14 */ + "You're at top of small pit.", +/* Room 15 */ + "You're in hall of mists.", +/* Room 16 */ + "The crack is far too small for you to follow.", +/* Room 17 */ + "You're on east bank of fissure.", +/* Room 18 */ + "You're in nugget of gold room.", +/* Room 19 */ + "You're in hall of mt. king.", +/* Room 20 */ + "You are the the bottom of the pit with a broken neck.", +/* Room 21 */ + "You didn't make it.", +/* Room 22 */ + "The dome is unclimbable.", +/* Room 23 */ + "You're at west end of twopit room.", +/* Room 24 */ + "You're in east pit.", +/* Room 25 */ + "You're in west pit.", +/* Room 26 */ + "You clamber up the plant and scurry through the hole at the top.", +/* Room 27 */ + "You are on the west side of the fissure in the hall of mists.", +/* Room 28 */ + "You are in a low N/S passage at a hole in the floor. The hole goes down to\n" "an E/W passage.", +/* Room 29 */ + "You are in the south side chamber.", +/* Room 30 */ + "You are in the west side chamber of the hall of the mountain king. A\n" "passage continues west and up here.", +/* Room 31 */ + ">$<", +/* Room 32 */ + "You can't get by the snake.", +/* Room 33 */ + "You're at \"Y2\".", +/* Room 34 */ + "You are in a jumble of rock, with cracks everywhere.", +/* Room 35 */ + "You're at window on pit.", +/* Room 36 */ + "You're in dirty passage.", +/* Room 37 */ + "You are on the brink of a small clean climbable pit. A crawl leads west.", +/* Room 38 */ + "You are in the bottom of a small pit with a little stream, which enters and\n" "exits through tiny slits.", +/* Room 39 */ + "You're in dusty rock room.", +/* Room 40 */ + "You have crawled through a very low wide passage parallel to and north of\n" "the hall of mists.", +/* Room 41 */ + "You're at west end of hall of mists.", +/* Room 42 */ + "You are in a maze of twisty little passages, all alike.", +/* Room 43 */ + "@42", +/* Room 44 */ + "@42", +/* Room 45 */ + "@42", +/* Room 46 */ + "Dead end.", +/* Room 47 */ + "@46", +/* Room 48 */ + "@46", +/* Room 49 */ + "@42", +/* Room 50 */ + "@42", +/* Room 51 */ + "@42", +/* Room 52 */ + "@42", +/* Room 53 */ + "@42", +/* Room 54 */ + "@46", +/* Room 55 */ + "@42", +/* Room 56 */ + "@46", +/* Room 57 */ + "You're at brink of pit.", +/* Room 58 */ + "@46", +/* Room 59 */ + "You have crawled through a very low wide passage paralled to and north of\n" "the hall of mists.", +/* Room 60 */ + "You're at east end of long hall.", +/* Room 61 */ + "You're at west end of long hall.", +/* Room 62 */ + "You are at a crossover of a high N/S passage and a low E/W one.", +/* Room 63 */ + "@46", +/* Room 64 */ + "You're at complex junction.", +/* Room 65 */ + "You are in bedquilt, a long east/west passage with holes everywhere. To\n" "explore at random select north, south, up or down.", +/* Room 66 */ + "You're in swiss cheese room.", +/* Room 67 */ + "You're at east end of twopit room.", +/* Room 68 */ + "You're in slab room.", +/* Room 69 */ + "You are in a secret N/S canyon above a large room.", +/* Room 70 */ + "You are in a secret N/S canyon above a sizable passage.", +/* Room 71 */ + "You're at junction of three secret canyons.", +/* Room 72 */ + "You are in a large low room. Crawls lead north, se, and sw.", +/* Room 73 */ + "Dead end crawl.", +/* Room 74 */ + "You're at secret E/W canyon above tight canyon.", +/* Room 75 */ + "You are at a wide place in a very tight N/S canyon.", +/* Room 76 */ + "The canyon here becomes too tight to go further south.", +/* Room 77 */ + "You are in a tall E/W canyon. A low tight crawl goes 3 feet north and seems\n" "to open up.", +/* Room 78 */ + "The canyon runs into a mass of boulders -- dead end.", +/* Room 79 */ + "The stream flows out through a pair of 1 foot diameter sewer pipes. It\n" "would be advisable to use the exit.", +/* Room 80 */ + "@42", +/* Room 81 */ + "@46", +/* Room 82 */ + "@46", +/* Room 83 */ + "@42", +/* Room 84 */ + "@42", +/* Room 85 */ + "@46", +/* Room 86 */ + "@46", +/* Room 87 */ + "@42", +/* Room 88 */ + "You're in narrow corridor.", +/* Room 89 */ + "There is nothing here to climb. Use \"up\" or \"out\" to leave the pit.", +/* Room 90 */ + "You have climbed up the plant and out of the pit.", +/* Room 91 */ + "You're at steep incline above large room.", +/* Room 92 */ + "You're in giant room.", +/* Room 93 */ + "The passage here is blocked by a recent cave-in.", +/* Room 94 */ + "You are at one end of an immense north/south passage.", +/* Room 95 */ + "You're in cavern with waterfall.", +/* Room 96 */ + "You're in soft room.", +/* Room 97 */ + "You're in oriental room.", +/* Room 98 */ + "You're in misty cavern.", +/* Room 99 */ + "You're in alcove.", +/* Room 100 */ + "You're in plover room.", +/* Room 101 */ + "You're in dark-room.", +/* Room 102 */ + "You're in arched hall.", +/* Room 103 */ + "You're in shell room.", +/* Room 104 */ + "You are in a long sloping corridor with ragged sharp walls.", +/* Room 105 */ + "You are in a cul-de-sac about eight feet across.", +/* Room 106 */ + "You're in anteroom.", +/* Room 107 */ + "You are in a maze of twisty little passages, all different.", +/* Room 108 */ + "You're at Witt's end.", +/* Room 109 */ + "You're in mirror canyon.", +/* Room 110 */ + "You're at window on pit.", +/* Room 111 */ + "You're at top of stalactite.", +/* Room 112 */ + "You are in a little maze of twisting passages, all different.", +/* Room 113 */ + "You're at reservoir.", +/* Room 114 */ + "@46", +/* Room 115 */ + "You're at ne end of repository.", +/* Room 116 */ + "You're at sw end of repository.", +/* Room 117 */ + "You're on sw side of chasm.", +/* Room 118 */ + "You're in sloping corridor.", +/* Room 119 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 120 */ + "@119", +/* Room 121 */ + "@119", +/* Room 122 */ + "You're on ne side of chasm.", +/* Room 123 */ + "You're in corridor.", +/* Room 124 */ + "You're at fork in path.", +/* Room 125 */ + "You're at junction with warm walls.", +/* Room 126 */ + "You're at breath-taking view.", +/* Room 127 */ + "You're in chamber of boulders.", +/* Room 128 */ + "You're in limestone passage.", +/* Room 129 */ + "You're in front of barren room.", +/* Room 130 */ + "You're in barren room.", +/* Room 131 */ + "You are in a maze of twisting little passages, all different.", +/* Room 132 */ + "You are in a little maze of twisty passages, all different.", +/* Room 133 */ + "You are in a twisting maze of little passages, all different.", +/* Room 134 */ + "You are in a twisting little maze of passages, all different.", +/* Room 135 */ + "You are in a twisty little maze of passages, all different.", +/* Room 136 */ + "You are in a twisty maze of little passages, all different.", +/* Room 137 */ + "You are in a little twisty maze of passages, all different.", +/* Room 138 */ + "You are in a maze of little twisting passages, all different.", +/* Room 139 */ + "You are in a maze of little twisty passages, all different.", +/* Room 140 */ + "@46", +}; + +char *pTextMsg[] = { +/* Msg 1 */ + "@202,203,204", +/* Msg 2 */ + "A little dwarf with a big knife blocks your way.", +/* Msg 3 */ + "A little dwarf just walked around a corner, saw you, threw a little axe at\n" "you which missed, cursed, and ran away.", +/* Msg 4 */ + "There is a threatening little dwarf in the room with you!", +/* Msg 5 */ + "One sharp, nasty knife is thrown at you!", +/* Msg 6 */ + "None of them hit you!", +/* Msg 7 */ + "One of them gets you!", +/* Msg 8 */ + "A hollow voice says \"Plugh\".", +/* Msg 9 */ + "There is no way to go that direction.", +/* Msg 10 */ + "I am unsure how you are facing. Use compass points or nearby objects.", +/* Msg 11 */ + "I don't know in from out here. Use compass points or name something in the\n" "general direction you want to go.", +/* Msg 12 */ + "I don't know how to apply that word here.", +/* Msg 13 */ + "I don't understand that!", +/* Msg 14 */ + "I'm game. Would you care to explain how?", +/* Msg 15 */ + "Sorry, but I am not allowed to give more detail. I will repeat the long\n" "description of your location.\n", +/* Msg 16 */ + "It is now pitch dark. If you proceed you will likely fall into a pit.", +/* Msg 17 */ + "If you prefer, simply type W rather than West.", +/* Msg 18 */ + "Are you trying to catch the bird?", +/* Msg 19 */ + "The bird is frightened right now and you cannot catch it no matter what you\n" "try. Perhaps you might try later.", +/* Msg 20 */ + "Are you trying to somehow deal with the snake?", +/* Msg 21 */ + "You can't kill the snake, or drive it away, or avoid it, or anything like\n" "that. There is a way to get by, but you don't have the necessary resources\n" "right now.", +/* Msg 22 */ + "Do you really want to quit now?", +/* Msg 23 */ + "You fell into a pit and broke every bone in your body!", +/* Msg 24 */ + "You are already carrying it!", +/* Msg 25 */ + "You can't be serious!", +/* Msg 26 */ + "The bird was unafraid when you entered, but as you approach it becomes\n" "disturbed and you cannot catch it.", +/* Msg 27 */ + "You can catch the bird, but you cannot carry it.", +/* Msg 28 */ + "There is nothing here with a lock!", +/* Msg 29 */ + "You aren't carrying it!", +/* Msg 30 */ + "The little bird attacks the green snake, and in an astounding flurry drives\n" "the snake away.", +/* Msg 31 */ + "You have no keys!", +/* Msg 32 */ + "It has no lock.", +/* Msg 33 */ + "I don't know how to lock or unlock such a thing.", +/* Msg 34 */ + "It was already locked.", +/* Msg 35 */ + "The grate is now locked.", +/* Msg 36 */ + "The grate is now unlocked.", +/* Msg 37 */ + "It was already unlocked.", +/* Msg 38 */ + "You have no source of light.", +/* Msg 39 */ + "Your lamp is now on.", +/* Msg 40 */ + "Your lamp is now off.", +/* Msg 41 */ + "There is no way to get past the bear to unlock the chain, which is probably\n" "just as well.", +/* Msg 42 */ + "Nothing happens.", +/* Msg 43 */ + "Where?", +/* Msg 44 */ + "There is nothing here to attack.", +/* Msg 45 */ + "The little bird is now dead. Its body disappears.", +/* Msg 46 */ + "Attacking the snake both doesn't work and is very dangerous.", +/* Msg 47 */ + "You killed a little dwarf.", +/* Msg 48 */ + "You attack a little dwarf, but he dodges out of the way.", +/* Msg 49 */ + "With what? Your bare hands?", +/* Msg 50 */ + "Good try, but that is an old worn-out magic word.", +/* Msg 51 */ + "@205,206,207", +/* Msg 52 */ + "It misses!", +/* Msg 53 */ + "It gets you!", +/* Msg 54 */ + "OK\n", +/* Msg 55 */ + "You can't unlock the keys.", +/* Msg 56 */ + "You have crawled around in some little holes and wound up back in the main\n" "passage.", +/* Msg 57 */ + "I don't know where the cave is, but hereabouts no stream can run on the\n" "surface for very long. I would try the stream.", +/* Msg 58 */ + "I need more detailed instructions to do that.", +/* Msg 59 */ + "I can only tell you what you see as you move about and manipulate things. I\n" "cannot tell you where remote things are.", +/* Msg 60 */ + "I don't know that word.", +/* Msg 61 */ + "What?", +/* Msg 62 */ + "Are you trying to get into the cave?", +/* Msg 63 */ + "The grate is very solid and has a hardened steel lock. You cannot enter\n" "without a key, and there are no keys nearby. I would recommend looking\n" "elsewhere for the keys.", +/* Msg 64 */ + "The trees of the forest are large hardwood oak and maple, with an occasional\n" + "grove of pine or spruce. There is quite a bit of undergrowth, largely birch\n" + "and ash saplings plus nondescript bushes of various sorts. This time of\n" "year visibility is quite restricted by all the leaves, but travel is quite\n" "easy if you detour around the spruce and berry bushes.", +/* Msg 65 */ + "Welcome to adventure!! Would you like instructions?", +/* Msg 66 */ + "Digging without a shovel is quite impractical. Even with a shovel progress\n" "is unlikely.", +/* Msg 67 */ + "Blasting requires dynamite.", +/* Msg 68 */ + "I'm as confused as you are.", +/* Msg 69 */ + "Mist is a white vapor, usually water. Seen from time to time in caverns.\n" "It can be found anywhere but is frequently a sign of a deep pit leading down\n" "to water.", +/* Msg 70 */ + "Your feet are now wet.", +/* Msg 71 */ + "I think I just lost my appetite.", +/* Msg 72 */ + "Thank you. It was delicious!", +/* Msg 73 */ + "You have taken a drink from the stream. The water tastes strongly of\n" "minerals, but is not unpleasant. It is extremely cold.", +/* Msg 74 */ + "The bottle of water is now empty.", +/* Msg 75 */ + "Rubbing the electric lamp is not particularly rewarding. Anyway, nothing\n" "exciting happens.", +/* Msg 76 */ + "Peculiar. Nothing unexpected happens.", +/* Msg 77 */ + "Your bottle is empty and the ground is wet.", +/* Msg 78 */ + "You can't pour that.", +/* Msg 79 */ + "Watch it!", +/* Msg 80 */ + "Which way?", +/* Msg 81 */ + "Oh dear, you seem to have gotten yourself killed. I might be able to help\n" "you out, but I've never really done this before. Do you want me to try to\n" "reincarnate you?", +/* Msg 82 */ + "All right. But don't blame me if something goes wr......\n" " --- POOF !! ---\n" "You are engulfed in a cloud of orange smoke. Coughing and gasping, you\n" "emerge from the smoke and find...", +/* Msg 83 */ + "You clumsy oaf, you've done it again! I don't know how long I can keep this\n" "up. Do you want me to try reincarnating you again?", +/* Msg 84 */ + "Okay, now where did i put my orange smoke? ... > POOF! <\n" "Everything disappears in a dense cloud of orange smoke.", +/* Msg 85 */ + "Now you've really done it! I'm out of orange smoke! You don't expect me to\n" "do a decent reincarnation without any orange smoke, do you?", +/* Msg 86 */ + "Okay, If you're so smart, do it yourself! I'm leaving!", +/* Msg 87 */ + "", +/* Msg 88 */ + "", +/* Msg 89 */ + "", +/* Msg 90 */ + "", +/* Msg 91 */ + "Sorry, but I no longer seem to remember how it was you got here.", +/* Msg 92 */ + "You can't carry anything more. You'll have to drop something first.", +/* Msg 93 */ + "You can't go through a locked steel grate!", +/* Msg 94 */ + "I believe what you want is right here with you.", +/* Msg 95 */ + "You don't fit through a two-inch slit!", +/* Msg 96 */ + "I respectfully suggest you go across the bridge instead of jumping.", +/* Msg 97 */ + "There is no way across the fissure.", +/* Msg 98 */ + "You're not carrying anything.", +/* Msg 99 */ + "You are currently holding the following:", +/* Msg 100 */ + "It's not hungry (It's merely pinin' for the Fjords). Besides you have no\n" "bird seed.", +/* Msg 101 */ + "The snake has now devoured your bird.", +/* Msg 102 */ + "There's nothing here it wants to eat (Except perhaps you).", +/* Msg 103 */ + "You fool, Dwarves eat only coal! Now you've made him REALLY mad !!", +/* Msg 104 */ + "You have nothing in which to carry it.", +/* Msg 105 */ + "Your bottle is already full.", +/* Msg 106 */ + "There is nothing here with which to fill the bottle.", +/* Msg 107 */ + "Your bottle is now full of water.", +/* Msg 108 */ + "Your bottle is now full of oil.", +/* Msg 109 */ + "You can't fill that.", +/* Msg 110 */ + "Don't be ridiculous!", +/* Msg 111 */ + "The door is extremely rusty and refuses to open.", +/* Msg 112 */ + "The plant indignantly shakes the oil off its leaves and asks: \"Water?\".", +/* Msg 113 */ + "The hinges are quite thoroughly rusted now and won't budge.", +/* Msg 114 */ + "The oil has freed up the hinges so that the door will now move, although it\n" "requires some effort.", +/* Msg 115 */ + "The plant has exceptionally deep roots and cannot be pulled free.", +/* Msg 116 */ + "The Dwarves' knives vanish as they strike the walls of the cave.", +/* Msg 117 */ + "Something you're carrying won't fit through the tunnel with you. You'd best\n" "take inventory and drop something.", +/* Msg 118 */ + "You can't fit this five-foot clam through that little passage!", +/* Msg 119 */ + "You can't fit this five foot oyster through that little passage!", +/* Msg 120 */ + "I advise you to put down the clam before opening it. >STRAIN!<", +/* Msg 121 */ + "I advise you to put down the oyster before opening it. >WRENCH!<", +/* Msg 122 */ + "You don't have anything strong enough to open the clam.", +/* Msg 123 */ + "You don't have anything strong enough to open the oyster.", +/* Msg 124 */ + "A glistening pearl falls out of the clam and rolls away. Goodness, this must\n" "really be an oyster. (I never was very good at identifying bivalves.)\n" "Whatever it is, it has now snapped shut again.", +/* Msg 125 */ + "The oyster creaks open, revealing nothing but oyster inside. It promptly\n" "snaps shut again.", +/* Msg 126 */ + "You have crawled around in some little holes and found your way blocked by a\n" "recent cave-in. You are now back in the main passage.", +/* Msg 127 */ + "There are faint rustling noises from the darkness behind you.", +/* Msg 128 */ + "Out from the shadows behind you pounces a bearded pirate! \"Har, har\" he\n" "chortles, \"I'll just take all this booty and hide it away with me chest deep\n" "in the maze!\". He snatches your treasure and vanishes into the gloom.", +/* Msg 129 */ + "A sepulchral voice reverberating through the cave says: \"Cave closing soon.\n" "All adventurers exit immediately through main office.\"", +/* Msg 130 */ + "A mysterious recorded voice groans into life and announces: \"This exit is\n" "closed. Please leave via main office.\"", +/* Msg 131 */ + "It looks as though you're dead. Well, seeing as how it's so close to\n" "closing time anyway, I think we'll just call it a day.", +/* Msg 132 */ + "The sepulchral voice entones, \"The cave is now closed.\" As the echoes fade,\n" "there is a blinding flash of light (and a small puff of orange smoke). . . .\n" "As your eyes refocus you look around and find...", +/* Msg 133 */ + "There is a loud explosion, and a twenty-foot hole appears in the far wall,\n" + "burying the Dwarves in the rubble. You march through the hole and find\n" "yourself in the main office, where a cheering band of friendly elves carry\n" "the conquering adventurer off into the sunset.", +/* Msg 134 */ + "There is a loud explosion, and a twenty-foot hole appears in the far wall,\n" "burying the snakes in the rubble. A river of molten lava pours in through\n" "the hole, destroying everything in its path, including you!!", +/* Msg 135 */ + "There is a loud explosion, and you are suddenly splashed across the walls of\n" "the room.", +/* Msg 136 */ + "The resulting ruckus has awakened the Dwarves. There are now several\n" "threatening little Dwarves in the room with you! Most of them throw knives\n" "at you! All of them get you!", +/* Msg 137 */ + "Oh, leave the poor unhappy bird alone.", +/* Msg 138 */ + "I daresay whatever you want is around here somewhere.", +/* Msg 139 */ + "I don't know the word \"stop\". Use \"quit\" if you want to give up.", +/* Msg 140 */ + "You can't get there from here.", +/* Msg 141 */ + "You are being followed by a very large, tame bear.", +/* Msg 142 */ + "@208,209,210", +/* Msg 143 */ + "Do you indeed wish to quit now?", +/* Msg 144 */ + "There is nothing here with which to fill the vase.", +/* Msg 145 */ + "The sudden change in temperature has delicately shattered the vase.", +/* Msg 146 */ + "It is beyond your power to do that.", +/* Msg 147 */ + "I don't know how.", +/* Msg 148 */ + "It is too far up for you to reach.", +/* Msg 149 */ + "You killed a little Dwarf. The body vanished in a cloud of greasy black\n" "smoke.", +/* Msg 150 */ + "The shell is very strong and impervious to attack.", +/* Msg 151 */ + "What's the matter, can't you read? Now you'd best start over.", +/* Msg 152 */ + "The axe bounces harmlessly off the dragon's thick scales.", +/* Msg 153 */ + "The dragon looks rather nasty. You'd best not try to get by.", +/* Msg 154 */ + "The little bird attacks the green dragon, and in an astounding flurry gets\n" "burnt to a cinder. The ashes blow away.", +/* Msg 155 */ + "On what?", +/* Msg 156 */ + "Okay, from now on I'll only describe a place in full the first time you come\n" "to it. To get the full description say \"look\".", +/* Msg 157 */ + "Trolls are close relatives with the rocks and have skin as tough as that of\n" "a rhinoceros. The troll fends off your blows effortlessly.", +/* Msg 158 */ + "The troll deftly catches the axe, examines it carefully, and tosses it back,\n" "declaring, \"Good workmanship, but it's not valuable enough.\".", +/* Msg 159 */ + "The troll catches your treasure and scurries away out of sight.", +/* Msg 160 */ + "The troll refuses to let you cross.", +/* Msg 161 */ + "There is no longer any way across the chasm.", +/* Msg 162 */ + "Just as you reach the other side, the bridge buckles beneath the weight of\n" "the bear, which was still following you around. You scrabble desperately for\n" "support, but as the bridge collapses you stumble back and fall into the\n" "chasm.", +/* Msg 163 */ + "The bear lumbers toward the troll, who lets out a startled shriek and\n" "scurries away. The bear soon gives up pursuit and wanders back.", +/* Msg 164 */ + "The axe misses and lands near the bear where you can't get at it.", +/* Msg 165 */ + "With what? Your bare hands? Agains HIS bear hands??", +/* Msg 166 */ + "The bear is confused; he only wants to be your friend.", +/* Msg 167 */ + "For crying out loud, the poor thing is already dead!", +/* Msg 168 */ + "The bear eagerly wolfs down your food, after which he seems to calm down\n" "considerably, and even becomes rather friendly.", +/* Msg 169 */ + "The bear is still chained to the wall.", +/* Msg 170 */ + "The chain is still locked.", +/* Msg 171 */ + "The chain is now unlocked.", +/* Msg 172 */ + "The chain is now locked.", +/* Msg 173 */ + "There is nothing here to which the chain can be locked.", +/* Msg 174 */ + "There is nothing here to eat.", +/* Msg 175 */ + "Do you want the hint?", +/* Msg 176 */ + "Do you need help getting out of the maze?", +/* Msg 177 */ + "You can make the passages look less alike by dropping things.", +/* Msg 178 */ + "Are you trying to explore beyond the plover room?", +/* Msg 179 */ + "There is a way to explore that region without having to worry about falling\n" "into a pit. None of the objects available is immediately useful in\n" "discovering the secret.", +/* Msg 180 */ + "Do you need help getting out of here?", +/* Msg 181 */ + "Don't go west.", +/* Msg 182 */ + "Gluttony is not one of the Troll's vices. Avarice, however, is.", +/* Msg 183 */ + "Your lamp is getting dim.. You'd best start wrapping this up, unless you can\n" "find some fresh batteries. I seem to recall there's a vending machine in\n" "the maze. Bring some coins with you.", +/* Msg 184 */ + "Your lamp has run out of power.", +/* Msg 185 */ + "There's not much point in wandering around out here, and you can't explore\n" "the cave without a lamp. So let's just call it a day.", +/* Msg 186 */ + "There are faint rustling noises from the darkness behind you. As you turn\n" + "toward them, the beam of your lamp falls across a bearded pirate. He is\n" + "carrying a large chest. \"Shiver me timbers!\" he cries, \"I've been spotted!\n" "I'd best hide meself off to the maze and hide me chest!\". With that, he\n" "vanished into the gloom.", +/* Msg 187 */ + "Your lamp is getting dim. You'd best go back for those batteries.", +/* Msg 188 */ + "Your lamp is getting dim.. I'm taking the liberty of replacing the\n" "batteries.", +/* Msg 189 */ + "Your lamp is getting dim, and you're out of spare batteries. You'd best\n" "start wrapping this up.", +/* Msg 190 */ + "I'm afraid the magazine is written in Dwarvish.", +/* Msg 191 */ + "\"This is not the maze where the pirate leaves his treasure chest.\"", +/* Msg 192 */ + "Hmm, this looks like a clue, which means it'll cost you 10 points to read\n" "it. Should I go ahead and read it anyway?", +/* Msg 193 */ + "It says, \"There is something strange about this place, such that one of the\n" "words I've always known now has a new effect.\"", +/* Msg 194 */ + "It says the same thing it did before.", +/* Msg 195 */ + "I'm afraid I don't understand.", +/* Msg 196 */ + "\"Congratulations on bringing light into the dark-room!\"", +/* Msg 197 */ + "You strike the mirror a resounding blow, whereupon it shatters into a myriad\n" "tiny fragments.", +/* Msg 198 */ + "You have taken the vase and hurled it delicately to the ground.", +/* Msg 199 */ + "You prod the nearest Dwarf, who wakes up grumpily, takes one look at you,\n" "curses, and grabs for his axe.", +/* Msg 200 */ + "Is this acceptable?", +/* Msg 201 */ + "There's no point in suspending a demonstration game.", +/* Msg 202 */ + "Somewhere nearby is Colossal Cave, where others have found fortunes in\n" + "treasure and gold, though it is rumored that some who enter are never seen\n" + "again. Magic is said to work in the cave. I will be your eyes and hands.\n" "Direct me with commands of 1 or 2 words. I should warn you that I look at\n" "only the first five letters of each word, so you'll have to enter\n", +/* Msg 203 */ + "\"Northeast\" as \"ne\" to distinguish it from \"North\". (Should you get stuck,\n" "type \"help\" for some general hints.\n", +/* Msg 204 */ + "This program was originally developed by Willie Crowther. Most of the\n" + "features of the current program were added by Don Woods. This version,\n" "written in BDS 8080 C was adapted by Jay R. Jaeger and was later ported to\n" "MSC V5.1 on the IBM/PC by Bob Withers.\n", +/* Msg 205 */ + "I know of places, actions, and things. Most of my vocabulary describes\n" + "places and is used to move you there. To move, try words like forest,\n" + "building, downstream, enter, east, west, north, south, up or down. I know\n" + "about a few special objects, like a black rod hidden in the cave. These\n" "objects can be manipulated using some of the action words I know. Usually\n" "you will need to give both the object and action words (In either order),", +/* Msg 206 */ + "but sometimes I can infer the object from the verb alone. Some objects also\n" + "imply verbs; in particular, \"inventory\" implies \"take inventory\", which\n" + "causes me to give you a list of what you're carrying. The objects have side\n" + "effects; for instance, the rod scares the bird. Usually people having\n" "trouble moving just need to try a few more words. Usually people trying\n" "unsuccessfully to manipulate an object are attempting something beyond their", +/* Msg 207 */ + "(or my!) capabilities and should try a completely different tack. To speed\n" + "the game you can sometimes move long distances with a single word. For\n" + "example, \"building\" usually gets you to the building from anywhere above\n" + "ground except when lost in the forest. Also, note that cave passages turn a\n" "lot, and that leaving a room to the north does not guarantee entering the\n" "next from the south.\n" "\n" "Good luck!", +/* Msg 208 */ + "If you want to end your adventure early, say \"quit\". To suspend you\n" + "adventure such that you can continue later say \"suspend\" (or \"pause\" or\n" + "\"save\"). To see how well you're doing, say \"score\". To get full credit for\n" + "a treasure, you must have left it safely in the building, though you get\n" "partial credit just for locating it. You lose points for getting killed, or\n" "for quitting, though the former costs you more. There are also points based", +/* Msg 209 */ + "on how much (If any) of the cave you've managed to explore; in particular,\n" + "there is a large bonus just for getting in (to distinguish the beginners\n" + "from the rest of the pack), and there are other ways to determine whether\n" + "you've been through some of the more harrowing sections. If you think you've\n" "found all the treasures, just keep exploring for a while. If nothing\n" "interesting happens, you haven't found them all yet. If something", +/* Msg 210 */ + "interesting DOES happen, it means you're getting a bonus and have an\n" + "opportunity to garner many more points in the master's section. I may\n" + "occasionally offer hints in you seem to be having trouble. If I do, I'll\n" + "warn you in advance how much it will affect your score to accept the hints.\n" "Finally, to save paper, you may specify \"brief\", which tells me never to\n" "repeat the full description of a place unless you explicitly ask me to.", +}; + + +#endif /* */ diff --git a/Applications/cave/advgen.c b/Applications/cave/advgen.c new file mode 100644 index 00000000..b8b178ec --- /dev/null +++ b/Applications/cave/advgen.c @@ -0,0 +1,1704 @@ +#include +#include +#include +#include +#include +#include + +#define MAXDIM(a) (sizeof(a) / sizeof(a[0])) +struct trav { + short tdest; + short tverb; + short tcond; +}; +struct travtab { + struct trav *pTrav; // trav array for location + uint8_t sTrav; // # entries for location +}; +static struct trav Trav001[] = { {2, 2, 0}, {2, 44, 0}, {2, 29, 0}, {3, 3, 0}, {3, 12, 0}, {3, 19, 0}, {3, 43, 0}, {4, 5, 0}, {4, 13, 0}, {4, 14, 0}, {4, 46, 0}, {4, 30, 0}, {5, 6, 0}, {5, 45, 0}, {5, 43, 0}, {8, 63, 0}, +}; +static struct trav Trav002[] = { {1, 2, 0}, {1, 12, 0}, {1, 7, 0}, {1, 43, 0}, {1, 45, 0}, {1, 30, 0}, {5, 6, 0}, {5, 45, 0}, {5, 46, 0}, +}; +static struct trav Trav003[] = { {1, 3, 0}, {1, 11, 0}, {1, 32, 0}, {1, 44, 0}, {11, 62, 0}, {33, 65, 0}, {79, 5, 0}, {79, 14, 0}, +}; +static struct trav Trav004[] = { {1, 4, 0}, {1, 12, 0}, {1, 45, 0}, {5, 6, 0}, {5, 43, 0}, {5, 44, 0}, {5, 29, 0}, {7, 5, 0}, {7, 46, 0}, {7, 30, 0}, {8, 63, 0}, +}; +static struct trav Trav005[] = { {4, 9, 0}, {4, 43, 0}, {4, 30, 0}, {5, 6, 50}, {5, 7, 50}, {5, 45, 50}, {6, 6, 0}, {5, 44, 0}, {5, 46, 0}, +}; +static struct trav Trav006[] = { {1, 2, 0}, {1, 45, 0}, {4, 9, 0}, {4, 43, 0}, {4, 44, 0}, {4, 30, 0}, {5, 6, 0}, {5, 46, 0}, +}; +static struct trav Trav007[] = { {1, 12, 0}, {4, 4, 0}, {4, 45, 0}, {5, 6, 0}, {5, 43, 0}, {5, 44, 0}, {8, 5, 0}, {8, 15, 0}, {8, 16, 0}, {8, 46, 0}, {595, 60, 0}, {595, 14, 0}, {595, 30, 0}, +}; +static struct trav Trav008[] = { {5, 6, 0}, {5, 43, 0}, {5, 46, 0}, {5, 44, 0}, {1, 12, 0}, {7, 4, 0}, {7, 13, 0}, {7, 45, 0}, {9, 3, 303}, {9, 19, 303}, {9, 30, 303}, {593, 3, 0}, +}; +static struct trav Trav009[] = { {8, 11, 303}, {8, 29, 303}, {593, 11, 0}, {10, 17, 0}, {10, 18, 0}, {10, 19, 0}, {10, 44, 0}, {14, 31, 0}, {11, 51, 0}, +}; +static struct trav Trav010[] = { {9, 11, 0}, {9, 20, 0}, {9, 21, 0}, {9, 43, 0}, {11, 19, 0}, {11, 22, 0}, {11, 44, 0}, {11, 51, 0}, {14, 31, 0}, +}; +static struct trav Trav011[] = { {8, 63, 303}, {9, 64, 0}, {10, 17, 0}, {10, 18, 0}, {10, 23, 0}, {10, 24, 0}, {10, 43, 0}, {12, 25, 0}, {12, 19, 0}, {12, 29, 0}, {12, 44, 0}, {3, 62, 0}, {14, 31, 0}, +}; +static struct trav Trav012[] = { {8, 63, 303}, {9, 64, 0}, {11, 30, 0}, {11, 43, 0}, {11, 51, 0}, {13, 19, 0}, {13, 29, 0}, {13, 44, 0}, {14, 31, 0}, +}; +static struct trav Trav013[] = { {8, 63, 303}, {9, 64, 0}, {11, 51, 0}, {12, 25, 0}, {12, 43, 0}, {14, 23, 0}, {14, 31, 0}, {14, 44, 0}, +}; +static struct trav Trav014[] = { {8, 63, 303}, {9, 64, 0}, {11, 51, 0}, {13, 23, 0}, {13, 43, 0}, {20, 30, 150}, {20, 31, 150}, {20, 34, 150}, {15, 30, 0}, {16, 33, 0}, {16, 44, 0}, +}; +static struct trav Trav015[] = { {18, 36, 0}, {18, 46, 0}, {17, 7, 0}, {17, 38, 0}, {17, 44, 0}, {19, 10, 0}, {19, 30, 0}, {19, 45, 0}, {22, 29, 150}, {22, 31, 150}, {22, 34, 150}, {22, 35, 150}, {22, 23, 150}, {22, 43, 150}, {14, 29, 0}, {34, 55, 0}, +}; +static struct trav Trav016[] = { {14, 1, 0}, +}; +static struct trav Trav017[] = { {15, 38, 0}, {15, 43, 0}, {596, 39, 312}, {21, 7, 412}, {597, 41, 412}, {597, 42, 412}, {597, 44, 412}, {597, 69, 412}, {27, 41, 0}, +}; +static struct trav Trav018[] = { {15, 38, 0}, {15, 11, 0}, {15, 45, 0}, +}; +static struct trav Trav019[] = { {15, 10, 0}, {15, 29, 0}, {15, 43, 0}, {28, 45, 311}, {28, 36, 311}, {29, 46, 311}, {29, 37, 311}, {30, 44, 311}, {30, 7, 311}, {32, 45, 0}, {74, 49, 35}, {32, 49, 211}, {74, 66, 0}, +}; +static struct trav Trav020[] = { {0, 1, 0}, +}; +static struct trav Trav021[] = { {0, 1, 0}, +}; +static struct trav Trav022[] = { {15, 1, 0}, +}; +static struct trav Trav023[] = { {67, 43, 0}, {67, 42, 0}, {68, 44, 0}, {68, 61, 0}, {25, 30, 0}, {25, 31, 0}, {648, 52, 0}, +}; +static struct trav Trav024[] = { {67, 29, 0}, {67, 11, 0}, +}; +static struct trav Trav025[] = { {23, 29, 0}, {23, 11, 0}, {31, 56, 724}, {26, 56, 0}, +}; +static struct trav Trav026[] = { {88, 1, 0}, +}; +static struct trav Trav027[] = { {596, 39, 312}, {21, 7, 412}, {597, 41, 412}, {597, 42, 412}, {597, 43, 412}, {597, 69, 412}, {17, 41, 0}, {40, 45, 0}, {41, 44, 0}, +}; +static struct trav Trav028[] = { {19, 38, 0}, {19, 11, 0}, {19, 46, 0}, {33, 45, 0}, {33, 55, 0}, {36, 30, 0}, {36, 52, 0}, +}; +static struct trav Trav029[] = { {19, 38, 0}, {19, 11, 0}, {19, 45, 0}, +}; +static struct trav Trav030[] = { {19, 38, 0}, {19, 11, 0}, {19, 43, 0}, {62, 44, 0}, {62, 29, 0}, +}; +static struct trav Trav031[] = { {89, 1, 524}, {90, 1, 0}, +}; +static struct trav Trav032[] = { {19, 1, 0}, +}; +static struct trav Trav033[] = { {3, 65, 0}, {28, 46, 0}, {34, 43, 0}, {34, 53, 0}, {34, 54, 0}, {35, 44, 0}, {302, 71, 159}, {100, 71, 0}, +}; +static struct trav Trav034[] = { {33, 30, 0}, {33, 55, 0}, {15, 29, 0}, +}; +static struct trav Trav035[] = { {33, 43, 0}, {33, 55, 0}, {20, 39, 0}, +}; +static struct trav Trav036[] = { {37, 43, 0}, {37, 17, 0}, {28, 29, 0}, {28, 52, 0}, {39, 44, 0}, {65, 70, 0}, +}; +static struct trav Trav037[] = { {36, 44, 0}, {36, 17, 0}, {38, 30, 0}, {38, 31, 0}, {38, 56, 0}, +}; +static struct trav Trav038[] = { {37, 56, 0}, {37, 29, 0}, {37, 11, 0}, {595, 60, 0}, {595, 14, 0}, {595, 30, 0}, {595, 4, 0}, {595, 5, 0}, +}; +static struct trav Trav039[] = { {36, 43, 0}, {36, 23, 0}, {64, 30, 0}, {64, 52, 0}, {64, 58, 0}, {65, 70, 0}, +}; +static struct trav Trav040[] = { {41, 1, 0}, +}; +static struct trav Trav041[] = { {42, 46, 0}, {42, 29, 0}, {42, 23, 0}, {42, 56, 0}, {27, 43, 0}, {59, 45, 0}, {60, 44, 0}, {60, 17, 0}, +}; +static struct trav Trav042[] = { {41, 29, 0}, {42, 45, 0}, {43, 43, 0}, {45, 46, 0}, {80, 44, 0}, +}; +static struct trav Trav043[] = { {42, 44, 0}, {44, 46, 0}, {45, 43, 0}, +}; +static struct trav Trav044[] = { {43, 43, 0}, {48, 30, 0}, {50, 46, 0}, {82, 45, 0}, +}; +static struct trav Trav045[] = { {42, 44, 0}, {43, 45, 0}, {46, 43, 0}, {47, 46, 0}, {87, 29, 0}, {87, 30, 0}, +}; +static struct trav Trav046[] = { {45, 44, 0}, {45, 11, 0}, +}; +static struct trav Trav047[] = { {45, 43, 0}, {45, 11, 0}, +}; +static struct trav Trav048[] = { {44, 29, 0}, {44, 11, 0}, +}; +static struct trav Trav049[] = { {50, 43, 0}, {51, 44, 0}, +}; +static struct trav Trav050[] = { {44, 43, 0}, {49, 44, 0}, {51, 30, 0}, {52, 46, 0}, +}; +static struct trav Trav051[] = { {49, 44, 0}, {50, 29, 0}, {52, 43, 0}, {53, 46, 0}, +}; +static struct trav Trav052[] = { {50, 44, 0}, {51, 43, 0}, {52, 46, 0}, {53, 29, 0}, {55, 45, 0}, {86, 30, 0}, +}; +static struct trav Trav053[] = { {51, 44, 0}, {52, 45, 0}, {54, 46, 0}, +}; +static struct trav Trav054[] = { {53, 44, 0}, {53, 11, 0}, +}; +static struct trav Trav055[] = { {52, 44, 0}, {55, 45, 0}, {56, 30, 0}, {57, 43, 0}, +}; +static struct trav Trav056[] = { {55, 29, 0}, {55, 11, 0}, +}; +static struct trav Trav057[] = { {13, 30, 0}, {13, 56, 0}, {55, 44, 0}, {58, 46, 0}, {83, 45, 0}, {84, 43, 0}, +}; +static struct trav Trav058[] = { {57, 43, 0}, {57, 11, 0}, +}; +static struct trav Trav059[] = { {27, 1, 0}, +}; +static struct trav Trav060[] = { {41, 43, 0}, {41, 29, 0}, {41, 17, 0}, {61, 44, 0}, {62, 45, 0}, {62, 30, 0}, {62, 52, 0}, +}; +static struct trav Trav061[] = { {60, 43, 0}, {62, 45, 0}, {107, 46, 100}, +}; +static struct trav Trav062[] = { {60, 44, 0}, {63, 45, 0}, {30, 43, 0}, {61, 46, 0}, +}; +static struct trav Trav063[] = { {62, 46, 0}, {62, 11, 0}, +}; +static struct trav Trav064[] = { {39, 29, 0}, {39, 56, 0}, {39, 59, 0}, {65, 44, 0}, {65, 70, 0}, {103, 45, 0}, {103, 74, 0}, {106, 43, 0}, +}; +static struct trav Trav065[] = { {64, 43, 0}, {66, 44, 0}, {556, 46, 80}, {68, 61, 0}, {556, 29, 80}, {70, 29, 50}, {39, 29, 0}, {556, 45, 60}, {72, 45, 75}, {71, 45, 0}, {556, 30, 80}, {106, 30, 0}, +}; +static struct trav Trav066[] = { {65, 47, 0}, {67, 44, 0}, {556, 46, 80}, {77, 25, 0}, {96, 43, 0}, {556, 50, 50}, {97, 72, 0}, +}; +static struct trav Trav067[] = { {66, 43, 0}, {23, 44, 0}, {23, 42, 0}, {24, 30, 0}, {24, 31, 0}, +}; +static struct trav Trav068[] = { {23, 46, 0}, {69, 29, 0}, {69, 56, 0}, {65, 45, 0}, +}; +static struct trav Trav069[] = { {68, 30, 0}, {68, 61, 0}, {120, 46, 331}, {119, 46, 0}, {109, 45, 0}, {113, 75, 0}, +}; +static struct trav Trav070[] = { {71, 45, 0}, {65, 30, 0}, {65, 23, 0}, {111, 46, 0}, +}; +static struct trav Trav071[] = { {65, 48, 0}, {70, 46, 0}, {110, 45, 0}, +}; +static struct trav Trav072[] = { {65, 70, 0}, {118, 49, 0}, {73, 45, 0}, {97, 48, 0}, {97, 72, 0}, +}; +static struct trav Trav073[] = { {72, 46, 0}, {72, 17, 0}, {72, 11, 0}, +}; +static struct trav Trav074[] = { {19, 43, 0}, {120, 44, 331}, {121, 44, 0}, {75, 30, 0}, +}; +static struct trav Trav075[] = { {76, 46, 0}, {77, 45, 0}, +}; +static struct trav Trav076[] = { {75, 45, 0}, +}; +static struct trav Trav077[] = { {75, 43, 0}, {78, 44, 0}, {66, 45, 0}, {66, 17, 0}, +}; +static struct trav Trav078[] = { {77, 46, 0}, +}; +static struct trav Trav079[] = { {3, 1, 0}, +}; +static struct trav Trav080[] = { {42, 45, 0}, {80, 44, 0}, {80, 46, 0}, {81, 43, 0}, +}; +static struct trav Trav081[] = { {80, 44, 0}, {80, 11, 0}, +}; +static struct trav Trav082[] = { {44, 46, 0}, {44, 11, 0}, +}; +static struct trav Trav083[] = { {57, 46, 0}, {84, 43, 0}, {85, 44, 0}, +}; +static struct trav Trav084[] = { {57, 45, 0}, {83, 44, 0}, {114, 50, 0}, +}; +static struct trav Trav085[] = { {83, 43, 0}, {83, 11, 0}, +}; +static struct trav Trav086[] = { {52, 29, 0}, {52, 11, 0}, +}; +static struct trav Trav087[] = { {45, 29, 0}, {45, 30, 0}, +}; +static struct trav Trav088[] = { {25, 30, 0}, {25, 56, 0}, {25, 43, 0}, {20, 39, 0}, {92, 44, 0}, {92, 27, 0}, +}; +static struct trav Trav089[] = { {25, 1, 0}, +}; +static struct trav Trav090[] = { {23, 1, 0}, +}; +static struct trav Trav091[] = { {95, 45, 0}, {95, 73, 0}, {95, 23, 0}, {72, 30, 0}, {72, 56, 0}, +}; +static struct trav Trav092[] = { {88, 46, 0}, {93, 43, 0}, {94, 45, 0}, +}; +static struct trav Trav093[] = { {92, 46, 0}, {92, 27, 0}, {92, 11, 0}, +}; +static struct trav Trav094[] = { {92, 46, 0}, {92, 27, 0}, {92, 23, 0}, {95, 45, 309}, {95, 3, 309}, {95, 73, 309}, {611, 45, 0}, +}; +static struct trav Trav095[] = { {94, 46, 0}, {94, 11, 0}, {92, 27, 0}, {91, 44, 0}, +}; +static struct trav Trav096[] = { {66, 44, 0}, {66, 11, 0}, +}; +static struct trav Trav097[] = { {66, 48, 0}, {72, 44, 0}, {72, 17, 0}, {98, 29, 0}, {98, 45, 0}, {98, 73, 0}, +}; +static struct trav Trav098[] = { {97, 46, 0}, {97, 72, 0}, {99, 44, 0}, +}; +static struct trav Trav099[] = { {98, 50, 0}, {98, 73, 0}, {301, 43, 0}, {301, 23, 0}, {100, 43, 0}, +}; +static struct trav Trav100[] = { {301, 44, 0}, {301, 23, 0}, {301, 11, 0}, {99, 44, 0}, {302, 71, 159}, {33, 71, 0}, {101, 47, 0}, {101, 22, 0}, +}; +static struct trav Trav101[] = { {100, 46, 0}, {100, 71, 0}, {100, 11, 0}, +}; +static struct trav Trav102[] = { {103, 30, 0}, {103, 74, 0}, {103, 11, 0}, +}; +static struct trav Trav103[] = { {102, 29, 0}, {102, 38, 0}, {104, 30, 0}, {618, 46, 114}, {619, 46, 115}, {64, 46, 0}, +}; +static struct trav Trav104[] = { {103, 29, 0}, {103, 74, 0}, {105, 30, 0}, +}; +static struct trav Trav105[] = { {104, 29, 0}, {104, 11, 0}, {103, 74, 0}, +}; +static struct trav Trav106[] = { {64, 29, 0}, {65, 44, 0}, {108, 43, 0}, +}; +static struct trav Trav107[] = { {131, 46, 0}, {132, 49, 0}, {133, 47, 0}, {134, 48, 0}, {135, 29, 0}, {136, 50, 0}, {137, 43, 0}, {138, 44, 0}, {139, 45, 0}, {61, 30, 0}, +}; +static struct trav Trav108[] = { {556, 43, 95}, {556, 45, 95}, {556, 46, 95}, {556, 47, 95}, {556, 48, 95}, {556, 49, 95}, {556, 50, 95}, {556, 29, 95}, {556, 30, 95}, {106, 43, 0}, {626, 44, 0}, +}; +static struct trav Trav109[] = { {69, 46, 0}, {113, 45, 0}, {113, 75, 0}, +}; +static struct trav Trav110[] = { {71, 44, 0}, {20, 39, 0}, +}; +static struct trav Trav111[] = { {70, 45, 0}, {50, 30, 40}, {50, 39, 40}, {50, 56, 40}, {53, 30, 50}, {45, 30, 0}, +}; +static struct trav Trav112[] = { {131, 49, 0}, {132, 45, 0}, {133, 43, 0}, {134, 50, 0}, {135, 48, 0}, {136, 47, 0}, {137, 44, 0}, {138, 30, 0}, {139, 29, 0}, {140, 46, 0}, +}; +static struct trav Trav113[] = { {109, 46, 0}, {109, 11, 0}, {109, 109, 0}, +}; +static struct trav Trav114[] = { {84, 48, 0}, +}; +static struct trav Trav115[] = { {116, 49, 0}, +}; +static struct trav Trav116[] = { {115, 47, 0}, {593, 30, 0}, +}; +static struct trav Trav117[] = { {118, 49, 0}, {660, 41, 233}, {660, 42, 233}, {660, 69, 233}, {660, 47, 233}, {661, 41, 332}, {303, 41, 0}, {21, 39, 332}, {596, 39, 0}, +}; +static struct trav Trav118[] = { {72, 30, 0}, {117, 29, 0}, +}; +static struct trav Trav119[] = { {69, 45, 0}, {69, 11, 0}, {653, 43, 0}, {653, 7, 0}, +}; +static struct trav Trav120[] = { {69, 45, 0}, {74, 43, 0}, +}; +static struct trav Trav121[] = { {74, 43, 0}, {74, 11, 0}, {653, 45, 0}, {653, 7, 0}, +}; +static struct trav Trav122[] = { {123, 47, 0}, {660, 41, 233}, {660, 42, 233}, {660, 69, 233}, {660, 49, 233}, {303, 41, 0}, {596, 39, 0}, {124, 77, 0}, {126, 28, 0}, {129, 40, 0}, +}; +static struct trav Trav123[] = { {122, 44, 0}, {124, 43, 0}, {124, 77, 0}, {126, 28, 0}, {129, 40, 0}, +}; +static struct trav Trav124[] = { {123, 44, 0}, {125, 47, 0}, {125, 36, 0}, {128, 48, 0}, {128, 37, 0}, {128, 30, 0}, {126, 28, 0}, {129, 40, 0}, +}; +static struct trav Trav125[] = { {124, 46, 0}, {124, 77, 0}, {126, 45, 0}, {126, 28, 0}, {127, 43, 0}, {127, 17, 0}, +}; +static struct trav Trav126[] = { {125, 46, 0}, {125, 23, 0}, {125, 11, 0}, {124, 77, 0}, {610, 30, 0}, {610, 39, 0}, +}; +static struct trav Trav127[] = { {125, 44, 0}, {125, 11, 0}, {125, 17, 0}, {124, 77, 0}, {126, 28, 0}, +}; +static struct trav Trav128[] = { {124, 45, 0}, {124, 29, 0}, {124, 77, 0}, {129, 46, 0}, {129, 30, 0}, {129, 40, 0}, {126, 28, 0}, +}; +static struct trav Trav129[] = { {128, 44, 0}, {128, 29, 0}, {124, 77, 0}, {130, 43, 0}, {130, 19, 0}, {130, 40, 0}, {130, 3, 0}, {126, 28, 0}, +}; +static struct trav Trav130[] = { {129, 44, 0}, {124, 77, 0}, {126, 28, 0}, +}; +static struct trav Trav131[] = { {107, 44, 0}, {132, 48, 0}, {133, 50, 0}, {134, 49, 0}, {135, 47, 0}, {136, 29, 0}, {137, 30, 0}, {138, 45, 0}, {139, 46, 0}, {112, 43, 0}, +}; +static struct trav Trav132[] = { {107, 50, 0}, {131, 29, 0}, {133, 45, 0}, {134, 46, 0}, {135, 44, 0}, {136, 49, 0}, {137, 47, 0}, {138, 43, 0}, {139, 30, 0}, {112, 48, 0}, +}; +static struct trav Trav133[] = { {107, 29, 0}, {131, 30, 0}, {132, 44, 0}, {134, 47, 0}, {135, 49, 0}, {136, 43, 0}, {137, 45, 0}, {138, 50, 0}, {139, 48, 0}, {112, 46, 0}, +}; +static struct trav Trav134[] = { {107, 47, 0}, {131, 45, 0}, {132, 50, 0}, {133, 48, 0}, {135, 43, 0}, {136, 30, 0}, {137, 46, 0}, {138, 29, 0}, {139, 44, 0}, {112, 49, 0}, +}; +static struct trav Trav135[] = { {107, 45, 0}, {131, 48, 0}, {132, 30, 0}, {133, 46, 0}, {134, 43, 0}, {136, 44, 0}, {137, 49, 0}, {138, 47, 0}, {139, 50, 0}, {112, 29, 0}, +}; +static struct trav Trav136[] = { {107, 43, 0}, {131, 44, 0}, {132, 29, 0}, {133, 49, 0}, {134, 30, 0}, {135, 46, 0}, {137, 50, 0}, {138, 48, 0}, {139, 47, 0}, {112, 45, 0}, +}; +static struct trav Trav137[] = { {107, 48, 0}, {131, 47, 0}, {132, 46, 0}, {133, 30, 0}, {134, 29, 0}, {135, 50, 0}, {136, 45, 0}, {138, 49, 0}, {139, 43, 0}, {112, 44, 0}, +}; +static struct trav Trav138[] = { {107, 30, 0}, {131, 43, 0}, {132, 47, 0}, {133, 29, 0}, {134, 44, 0}, {135, 45, 0}, {136, 46, 0}, {137, 48, 0}, {139, 49, 0}, {112, 50, 0}, +}; +static struct trav Trav139[] = { {107, 49, 0}, {131, 50, 0}, {132, 43, 0}, {133, 44, 0}, {134, 45, 0}, {135, 30, 0}, {136, 48, 0}, {137, 29, 0}, {138, 46, 0}, {112, 47, 0}, +}; +static struct trav Trav140[] = { {112, 45, 0}, {112, 11, 0}, +}; + +struct travtab TravTab[] = { + {Trav001, MAXDIM(Trav001)}, + {Trav002, MAXDIM(Trav002)}, + {Trav003, MAXDIM(Trav003)}, + {Trav004, MAXDIM(Trav004)}, + {Trav005, MAXDIM(Trav005)}, + {Trav006, MAXDIM(Trav006)}, + {Trav007, MAXDIM(Trav007)}, + {Trav008, MAXDIM(Trav008)}, + {Trav009, MAXDIM(Trav009)}, + {Trav010, MAXDIM(Trav010)}, + {Trav011, MAXDIM(Trav011)}, + {Trav012, MAXDIM(Trav012)}, + {Trav013, MAXDIM(Trav013)}, + {Trav014, MAXDIM(Trav014)}, + {Trav015, MAXDIM(Trav015)}, + {Trav016, MAXDIM(Trav016)}, + {Trav017, MAXDIM(Trav017)}, + {Trav018, MAXDIM(Trav018)}, + {Trav019, MAXDIM(Trav019)}, + {Trav020, MAXDIM(Trav020)}, + {Trav021, MAXDIM(Trav021)}, + {Trav022, MAXDIM(Trav022)}, + {Trav023, MAXDIM(Trav023)}, + {Trav024, MAXDIM(Trav024)}, + {Trav025, MAXDIM(Trav025)}, + {Trav026, MAXDIM(Trav026)}, + {Trav027, MAXDIM(Trav027)}, + {Trav028, MAXDIM(Trav028)}, + {Trav029, MAXDIM(Trav029)}, + {Trav030, MAXDIM(Trav030)}, + {Trav031, MAXDIM(Trav031)}, + {Trav032, MAXDIM(Trav032)}, + {Trav033, MAXDIM(Trav033)}, + {Trav034, MAXDIM(Trav034)}, + {Trav035, MAXDIM(Trav035)}, + {Trav036, MAXDIM(Trav036)}, + {Trav037, MAXDIM(Trav037)}, + {Trav038, MAXDIM(Trav038)}, + {Trav039, MAXDIM(Trav039)}, + {Trav040, MAXDIM(Trav040)}, + {Trav041, MAXDIM(Trav041)}, + {Trav042, MAXDIM(Trav042)}, + {Trav043, MAXDIM(Trav043)}, + {Trav044, MAXDIM(Trav044)}, + {Trav045, MAXDIM(Trav045)}, + {Trav046, MAXDIM(Trav046)}, + {Trav047, MAXDIM(Trav047)}, + {Trav048, MAXDIM(Trav048)}, + {Trav049, MAXDIM(Trav049)}, + {Trav050, MAXDIM(Trav050)}, + {Trav051, MAXDIM(Trav051)}, + {Trav052, MAXDIM(Trav052)}, + {Trav053, MAXDIM(Trav053)}, + {Trav054, MAXDIM(Trav054)}, + {Trav055, MAXDIM(Trav055)}, + {Trav056, MAXDIM(Trav056)}, + {Trav057, MAXDIM(Trav057)}, + {Trav058, MAXDIM(Trav058)}, + {Trav059, MAXDIM(Trav059)}, + {Trav060, MAXDIM(Trav060)}, + {Trav061, MAXDIM(Trav061)}, + {Trav062, MAXDIM(Trav062)}, + {Trav063, MAXDIM(Trav063)}, + {Trav064, MAXDIM(Trav064)}, + {Trav065, MAXDIM(Trav065)}, + {Trav066, MAXDIM(Trav066)}, + {Trav067, MAXDIM(Trav067)}, + {Trav068, MAXDIM(Trav068)}, + {Trav069, MAXDIM(Trav069)}, + {Trav070, MAXDIM(Trav070)}, + {Trav071, MAXDIM(Trav071)}, + {Trav072, MAXDIM(Trav072)}, + {Trav073, MAXDIM(Trav073)}, + {Trav074, MAXDIM(Trav074)}, + {Trav075, MAXDIM(Trav075)}, + {Trav076, MAXDIM(Trav076)}, + {Trav077, MAXDIM(Trav077)}, + {Trav078, MAXDIM(Trav078)}, + {Trav079, MAXDIM(Trav079)}, + {Trav080, MAXDIM(Trav080)}, + {Trav081, MAXDIM(Trav081)}, + {Trav082, MAXDIM(Trav082)}, + {Trav083, MAXDIM(Trav083)}, + {Trav084, MAXDIM(Trav084)}, + {Trav085, MAXDIM(Trav085)}, + {Trav086, MAXDIM(Trav086)}, + {Trav087, MAXDIM(Trav087)}, + {Trav088, MAXDIM(Trav088)}, + {Trav089, MAXDIM(Trav089)}, + {Trav090, MAXDIM(Trav090)}, + {Trav091, MAXDIM(Trav091)}, + {Trav092, MAXDIM(Trav092)}, + {Trav093, MAXDIM(Trav093)}, + {Trav094, MAXDIM(Trav094)}, + {Trav095, MAXDIM(Trav095)}, + {Trav096, MAXDIM(Trav096)}, + {Trav097, MAXDIM(Trav097)}, + {Trav098, MAXDIM(Trav098)}, + {Trav099, MAXDIM(Trav099)}, + {Trav100, MAXDIM(Trav100)}, + {Trav101, MAXDIM(Trav101)}, + {Trav102, MAXDIM(Trav102)}, + {Trav103, MAXDIM(Trav103)}, + {Trav104, MAXDIM(Trav104)}, + {Trav105, MAXDIM(Trav105)}, + {Trav106, MAXDIM(Trav106)}, + {Trav107, MAXDIM(Trav107)}, + {Trav108, MAXDIM(Trav108)}, + {Trav109, MAXDIM(Trav109)}, + {Trav110, MAXDIM(Trav110)}, + {Trav111, MAXDIM(Trav111)}, + {Trav112, MAXDIM(Trav112)}, + {Trav113, MAXDIM(Trav113)}, + {Trav114, MAXDIM(Trav114)}, + {Trav115, MAXDIM(Trav115)}, + {Trav116, MAXDIM(Trav116)}, + {Trav117, MAXDIM(Trav117)}, + {Trav118, MAXDIM(Trav118)}, + {Trav119, MAXDIM(Trav119)}, + {Trav120, MAXDIM(Trav120)}, + {Trav121, MAXDIM(Trav121)}, + {Trav122, MAXDIM(Trav122)}, + {Trav123, MAXDIM(Trav123)}, + {Trav124, MAXDIM(Trav124)}, + {Trav125, MAXDIM(Trav125)}, + {Trav126, MAXDIM(Trav126)}, + {Trav127, MAXDIM(Trav127)}, + {Trav128, MAXDIM(Trav128)}, + {Trav129, MAXDIM(Trav129)}, + {Trav130, MAXDIM(Trav130)}, + {Trav131, MAXDIM(Trav131)}, + {Trav132, MAXDIM(Trav132)}, {Trav133, MAXDIM(Trav133)}, {Trav134, MAXDIM(Trav134)}, {Trav135, MAXDIM(Trav135)}, {Trav136, MAXDIM(Trav136)}, {Trav137, MAXDIM(Trav137)}, {Trav138, MAXDIM(Trav138)}, {Trav139, MAXDIM(Trav139)}, {Trav140, + MAXDIM(Trav140)}, +}; + +char *pObjDesc[] = { +/* Object 1 */ + "Set of keys." "/There are some keys on the ground here.", +/* Object 2 */ + "Brass lantern" "/There is a shiny brass lamp nearby." "/There is a lamp shining nearby.", +/* Object 3 */ + "*Grate" "/The grate is locked." "/The grate is open.", +/* Object 4 */ + "Wicker cage" "/There is a small wicker cage discarded nearby.", +/* Object 5 */ + "Black rod" "/A three foot black rod with a rusty star on an end lies nearby.", +/* Object 6 */ + "Black rod" "/A three foot black rod with a rusty mark on an end lies nearby.", +/* Object 7 */ + "*Steps" "/Rough stone steps lead down the pit." "/Rough stone steps lead up the dome.", +/* Object 8 */ + "Little bird in cage" "/A cheerful little bird is sitting here singing." "/There is a little bird in the cage.", +/* Object 9 */ + "*Rusty door" "/The way north is barred by a massive, rusty, iron door." "/The way north leads through a massive, rusty, iron door.", +/* Object 10 */ + "Velvet pillow" "/A small velvet pillow lies on the floor.", +/* Object 11 */ + "*Snake" "/A huge green fierce snake bars the way!", +/* Object 12 */ + "*Fissure" "//A crystal bridge now spans the fissure." "/The crystal bridge has vanished!", +/* Object 13 */ + "*Stone tablet" "/A massive stone tablet imbedded in the wall reads:" "\"Congratulations on bringing light into the dark-room!\"", +/* Object 14 */ + "Giant clam >Grunt!<" "/There is an enormous clam here with its shell tightly closed.", +/* Object 15 */ + "Giant oyster >Groan!<" "/There is an enormous oyster here with its shell tightly closed." "/Interesting. There seems to be something written on the underside of the\n" "oyster.", +/* Object 16 */ + "\"Spelunker Today\"" "/There are a few recent issues of \"Spelunker Today\" magazine here.", +/* Object 17 */ + "", +/* Object 18 */ + "", +/* Object 19 */ + "Tasty food" "/There is tasty food here.", +/* Object 20 */ + "Small bottle" "/There is a bottle of water here." "/There is an empty bottle here." "/There is a bottle of oil here.", +/* Object 21 */ + "Water in the bottle.", +/* Object 22 */ + "Oil in the bottle", +/* Object 23 */ + "*Mirror", +/* Object 24 */ + "*Plant" + "/There is a tiny little plant in the pit, murmuring \"Water, Water, ...\"" + "/The plant spurts into furious growth for a few seconds." + "/There is a 12-foot-tall beanstalk stretching up out of the pit, bellowing\n" + "\"Water!! Water!!\"" "/The plant grows explosively, almost filling the bottom of the pit." "/There is a gigantic beanstalk stretching all the way up to the hole." "/You've over-watered the plant! It's shriveling up! It's, It's...", +/* Object 25 */ + "*Phony plant" "/" "/The top of a 12-foot-tall beanstalk is poking up out of the west pit." "/There is a huge beanstalk growing out of the west pit up to the hole.", +/* Object 26 */ + "*Stalactite", +/* Object 27 */ + "*Shadowy figure" "/The shadowy figure seems to be trying to attract your attention.", +/* Object 28 */ + "Dwarf's axe" "/There is a little axe here." "/There is a little axe lying beside the bear.", +/* Object 29 */ + "*Cave drawings", +/* Object 30 */ + "*Pirate", +/* Object 31 */ + "*Dragon" "/A huge green fierce dragon bars the way!" "/Congratulations! You have just vanquished a dragon with your bare hands!\n" "(Unbelievable, Isn't it?)" "/The body of a huge green dead dragon is lying off to one side.", +/* Object 32 */ + "*Chasm" + "/A rickety wooden bridge extends across the chasm, vanishing into the mist.\n" + "A sign posted on the bridge reads:\n" " \"Stop! Pay Troll!\"" "/The wreckage of a bridge (and a dead bear) can be seen at the bottom of the\n" "chasm.", +/* Object 33 */ + "*Troll" "/A burly troll stands by the bridge and insists you throw him a treasure\n" "before you may cross." "/The troll steps out from beneath the bridge and blocks your way.", +/* Object 34 */ + "*Phony troll" "/The troll is nowhere to be seen.", +/* Object 35 */ + "/There is a ferocious cave bear eyeing you from the far end of the room!" "/There is a gentle cave bear sitting placidly in one corner." "/There is a contented-looking bear wandering about nearby.", +/* Object 36 */ + "*Message in second maze" "/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\"", +/* Object 37 */ + "*Volcano and,or Geyser", +/* Object 38 */ + "*Vending machine" "/There is a massive vending machine here. The instructions on it read:\n" "\n" " \"Drop coins here to receive fresh batteries.\"", +/* Object 39 */ + "Batteries" "/There are fresh batteries here." "/Some worn-out batteries have been discarded nearby.", +/* Object 40 */ + "*Carpet and,or moss", +/* Object 41 */ + "", +/* Object 42 */ + "", +/* Object 43 */ + "", +/* Object 44 */ + "", +/* Object 45 */ + "", +/* Object 46 */ + "", +/* Object 47 */ + "", +/* Object 48 */ + "", +/* Object 49 */ + "", +/* Object 50 */ + "Large gold nugget" "/There is a large sparkling nugget of gold here!", +/* Object 51 */ + "Several diamonds" "/There are diamonds here!", +/* Object 52 */ + "Bars of silver" "/There are bars of silver here!", +/* Object 53 */ + "Precious jewelry" "/There is precious jewelry here!", +/* Object 54 */ + "Rare coins" "/There are many coins here!", +/* Object 55 */ + "Treasure chest" "/The pirate's treasure chest is here!", +/* Object 56 */ + "Golden eggs" "/There is a large nest here, full of golden eggs!" "/The nest of golden eggs has vanished!" "/Done!", +/* Object 57 */ + "Jeweled trident" "/There is a jewel-encrusted trident here!", +/* Object 58 */ + "Ming vase" "/There is a delicate, precious, ming vase here!" "/The vase is now resting, delicately, on a velvet pillow." "/The floor is littered with worthless shards of pottery." "/The ming vase drops with a delicate crash.", +/* Object 59 */ + "Egg-sized emerald" "/There is an emerald here the size of a plover's egg!", +/* Object 60 */ + "Platinum pyramid" "/There is a platinum pyramid here, 8 inches on a side!", +/* Object 61 */ + "Glistening pearl" "/Off to one side lies a glistening pearl!", +/* Object 62 */ + "Persian rug" "/There is a persian rug spread out on the floor!" "/The dragon is sprawled out on a persian rug!!", +/* Object 63 */ + "Rare spices" "/There are rare spices here!", +/* Object 64 */ + "Golden chain" "/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!", +}; + +char *pLongRmDesc[] = { +/* Room 1 */ + "You are standing at the end of a road before a small brick building. Around\n" "you is a forest. A small stream flows out of the building and down a gully.", +/* Room 2 */ + "You have walked up a hill, still in the forest. The road slopes back down\n" "the other side of the hill. There is a building in the distance.", +/* Room 3 */ + "You are inside a building, a well house for a large spring.", +/* Room 4 */ + "You are in a valley in the forest beside a stream tumbling along a rocky\n" "bed.", +/* Room 5 */ + "You are in open forest, with a deep valley to one side.", +/* Room 6 */ + "You are in open forest near both a valley and a road.", +/* Room 7 */ + "At your feet all the water of the stream splashes into a 2-inch slit in the\n" "rock. Downstream the streambed is bare rock.", +/* Room 8 */ + "You are in a 20-foot depression floored with bare dirt. Set into the dirt\n" "is a strong steel grate mounted in concrete. A dry streambed leads into the\n" "depression.", +/* Room 9 */ + "You are in a small chamber beneath a 3x3 steel grate to the surface. A low\n" "crawl over cobbles leads inward to the West.", +/* Room 10 */ + "You are crawling over cobbles in a low passage. There is a dim light at the\n" "east end of the passage.", +/* Room 11 */ + "You are in a debris room filled with stuff washed in from the surface. A\n" + "low wide passage with cobbles becomes plugged with mud and debris here, but\n" "an awkward canyon leads upward and west. A note on the wall says:\n" " Magic Word \"XYZZY\"", +/* Room 12 */ + "You are in an awkward sloping east/west canyon.", +/* Room 13 */ + "You are in a splendid chamber thirty feet high. The walls are frozen rivers\n" "of orange stone. An awkward canyon and a good passage exit from east and\n" "west sides of the chamber.", +/* Room 14 */ + "At your feet is a small pit breathing traces of white mist. An east passage\n" "ends here except for a small crack leading on.", +/* Room 15 */ + "You are at one end of a vast hall stretching forward out of sight to the\n" + "west. There are openings to either side. Nearby, a wide stone staircase\n" + "leads downward. The hall is filled with wisps of white mist swaying to and\n" "fro almost as if alive. A cold wind blows up the staircase. There is a\n" "passage at the top of a dome behind you.", +/* Room 16 */ + "The crack is far too small for you to follow.", +/* Room 17 */ + "You are on the east bank of a fissure slicing clear across the hall. The\n" "mist is quite thick here, and the fissure is too wide to jump.", +/* Room 18 */ + "This is a low room with a crude note on the wall. The note says:\n" " You won't get it up the steps.", +/* Room 19 */ + "You are in the hall of the mountain king, with passages off in all\n" "directions.", +/* Room 20 */ + "You are at the bottom of the pit with a broken neck.", +/* Room 21 */ + "You didn't make it.", +/* Room 22 */ + "The dome is unclimbable.", +/* Room 23 */ + "You are at the west end of the twopit room. There is a large hole in the\n" "wall above the pit at this end of the room.", +/* Room 24 */ + "You are that the bottom of the eastern pit in the twopit room. There is a\n" "small pool of oil in one corner of the pit.", +/* Room 25 */ + "You are at the bottom of the western pit in the towpit room. There is a\n" "large hole in the wall about 25 feet above you.", +/* Room 26 */ + "You clamber up the plant and scurry through the hole at the top.", +/* Room 27 */ + "You are on the west side of the fissure in the hall of mists.", +/* Room 28 */ + "You are in a low N/S passage at a hole in the floor. The hole goes down to\n" "an E/W passage.", +/* Room 29 */ + "You are in the south side chamber.", +/* Room 30 */ + "You are in the west side chamber of the hall of the mountain king. A\n" "passage continues west and up here.", +/* Room 31 */ + ">$<", +/* Room 32 */ + "You can't get by the snake.", +/* Room 33 */ + "You are in a large room, with a passage to the south, a passage to the west,\n" "and a wall of broken rock to the east. There is a large \"Y2\" on a rock in\n" "the room's center.", +/* Room 34 */ + "You are in a jumble of rock, with cracks everywhere.", +/* Room 35 */ + "You're at a low window overlooking a huge pit, which extends up out of\n" + "sight. A floor is indistinctly visible over 50 feet below. Traces of white\n" + "mist cover the floor of the pit, becoming thicker to the right. Marks in\n" + "the dust around the window would seem to indicate that someone has been here\n" + "recently. Directly across the pit from you and 25 feet away there is a\n" "similar window looking into a lighted room. A shadowy figure can be seen\n" "there peering back at you.", +/* Room 36 */ + "You are in a dirty broken passage. To the east is a crawl. To the west is\n" "a large passage. Above you is another passage.", +/* Room 37 */ + "You are on the brink of a small clean climbable pit. A crawl leads west.", +/* Room 38 */ + "You are in the bottom of a small pit with a little stream, which enters and\n" "exits through tiny slits.", +/* Room 39 */ + "You are in a large room full of dusty rocks. There is a big hole in the\n" "floor. There are cracks everywhere, and a passage leading east.", +/* Room 40 */ + "You have crawled through a very low wide passage parallel to and north of\n" "the hall of mists.", +/* Room 41 */ + "You are at the west end of hall of mists. A low wide crawl continues west\n" "and another goes north. To the south is a little passage 6 feet off the\n" "floor.", +/* Room 42 */ + "You are in a maze of twisty little passages, all alike.", +/* Room 43 */ + "@42", +/* Room 44 */ + "@42", +/* Room 45 */ + "@42", +/* Room 46 */ + "Dead end.", +/* Room 47 */ + "@46", +/* Room 48 */ + "@46", +/* Room 49 */ + "@42", +/* Room 50 */ + "@42", +/* Room 51 */ + "@42", +/* Room 52 */ + "@42", +/* Room 53 */ + "@42", +/* Room 54 */ + "@46", +/* Room 55 */ + "@42", +/* Room 56 */ + "@46", +/* Room 57 */ + "You are on the brink of a thirty foot pit with a massive orange column down\n" "one wall. You could climb down here but you could not get back up. The\n" "maze continues at this level.", +/* Room 58 */ + "@46", +/* Room 59 */ + "You have crawled through a very low wide passage paralled to and north of\n" "the hall of mists.", +/* Room 60 */ + "You are at the east end of a very long hall apparently without side\n" "chambers. To the east a low wide crawl slants up. To the north a round two\n" "foot hole slants down.", +/* Room 61 */ + "You are at the west end of a very long featureless hall. The hall joins up\n" "with a narrow north/south passage.", +/* Room 62 */ + "You are at a crossover of a high N/S passage and a low E/W one.", +/* Room 63 */ + "@46", +/* Room 64 */ + "You are at a complex junction. A low hands and knees passage from the north\n" "joins a higher crawl from the east to make a walking passage going west.\n" "There is also a large room above. The air is damp here.", +/* Room 65 */ + "You are in bedquilt, a long east/west passage with holes everywhere. To\n" "explore at random select north, south, up or down.", +/* Room 66 */ + "You are in a room whose walls resemble swiss cheese. Obvious passages go\n" "west, east, ne, and nw. Part of the room is occupied by a large bedrock\n" "block.", +/* Room 67 */ + "You are at the east end of the twopit room. The floor here is littered with\n" + "thin rock slabs, which make it easy to descend the pits. There is a path\n" + "here bypassing the pits to connect passages from east and west. There are\n" "holes all over, but the only bit one is on the wall directly over the west\n" "pit where you can't get at it.", +/* Room 68 */ + "You are in a large low circular chamber whose floor is an immense slab\n" + "fallen from the ceiling (slab room). East and west there once were large\n" "passages, but they are now filled with boulders. Low small passages go\n" "north and south, and the south one quickly bends west around the boulders.", +/* Room 69 */ + "You are in a secret N/S canyon above a large room.", +/* Room 70 */ + "You are in a secret N/S canyon above a sizable passage.", +/* Room 71 */ + "You are in a secret canyon at a junction of three canyons, bearing north,\n" "south and se. The north one is as tall as the other two combined.", +/* Room 72 */ + "You are in a large low room. Crawls lead north, se, and sw.", +/* Room 73 */ + "Dead end crawl.", +/* Room 74 */ + "You are in a secret canyon which here runs E/W. It crosses over a very\n" "tight canyon 15 feet below. If you go down you may not be able to get back\n" "up.", +/* Room 75 */ + "You are at a wide place in a very tight N/S canyon.", +/* Room 76 */ + "The canyon here becomes too tight to go further south.", +/* Room 77 */ + "You are in a tall E/W canyon. A low tight crawl goes 3 feet north and seems\n" "to open up.", +/* Room 78 */ + "The canyon runs into a mass of boulders -- dead end.", +/* Room 79 */ + "The stream flows out through a pair of 1 foot diameter sewer pipes. It\n" "would be advisable to use the exit.", +/* Room 80 */ + "@42", +/* Room 81 */ + "@46", +/* Room 82 */ + "@46", +/* Room 83 */ + "@42", +/* Room 84 */ + "@42", +/* Room 85 */ + "@46", +/* Room 86 */ + "@46", +/* Room 87 */ + "@42", +/* Room 88 */ + "You are in a long, narrow corridor stretching out of sight to the west. At\n" "the eastern end is a hole through which you can see a profusion of leaves,\n", +/* Room 89 */ + "There is nothing here to climb. Use \"up\" or \"out\" to leave\n", "the pit.", +/* Room 90 */ + "You have climbed up the plant and out of the pit.", +/* Room 91 */ + "You are at the top of a steep incline above a large room. You could climb\n" "down here, but you would not be able to climb up. There is a passage\n" "leading back to the north.", +/* Room 92 */ + "You are in the giant room. The ceiling is too high up for your lamp to show\n" "it. Cavernous passages lead east, north, and south. On the west wall is\n" "scrawled the inscription:\n" " \"Fee Fie Foe Foo\" {sic}", +/* Room 93 */ + "The passage here is blocked by a recent cave-in.", +/* Room 94 */ + "You are at one end of an immense north/south passage.", +/* Room 95 */ + "You are in a magnificent cavern with a rushing stream, which cascades over a\n" "sparkling waterfall into a roaring whirlpool which disappears through a hole\n" "in the floor. Passages exit to the south and west.", +/* Room 96 */ + "You are in the soft room. The walls are covered with heavy curtains, the\n" "floor with a thick pile carpet. Moss covers the ceiling.", +/* Room 97 */ + "This is the oriental room. Ancient oriental cave drawings cover the walls.\n" "A gently sloping passage leads upward to the north, another passage leads se,\n" "and a hands and knees crawl leads west.", +/* Room 98 */ + "You are following a wide path around the outer edge of a large cavern. Far\n" + "below, through a heavy white mist, strange splashing noises can be heard.\n" "The mist rises up through a fissure in the ceiling. The path exits to the\n" "south and west.", +/* Room 99 */ + "You are in an alcove. A small nw path seems to widen after a short\n" "distance. An extremely tight tunnel leads east. It looks like a very tight\n" "squeeze. An eerie light can be seen at the other end.", +/* Room 100 */ + "You're in a small chamber lit by an eerie green light. An extremely narrow\n" "tunnel exits to the west. A dark corridor leads ne.", +/* Room 101 */ + "You're in the dark-room. A corridor leading south is the only exit.", +/* Room 102 */ + "You are in an arched hall. A coral passage once continued up and east from\n" "here, but is now blocked by debris. The air smells of sea water.", +/* Room 103 */ + "You're in a large room carved out of sedimentary rock. The floor and walls\n" + "are littered with bits of shells imbedded in the stone. A shallow passage\n" "proceeds downward, and a somewhat steeper one leads up. A low hands and\n" "knees passage enters from the south.", +/* Room 104 */ + "You are in a long sloping corridor with ragged sharp walls.", +/* Room 105 */ + "You are in a cul-de-sac about eight feet across.", +/* Room 106 */ + "You are in an anteroom leading to a large passage to the east. Small\n" + "passages go west and up. The remnants of recent digging are evident. A\n" + "sign in midair here says:\n" " \"Cave under construction beyond this point.\"\n" " \"Proceed at your own risk.\"\n" " \"Witt construction company\"", +/* Room 107 */ + "You are in a maze of twisty little passages, all different.", +/* Room 108 */ + "You are at Witt's end. Passages lead off in ALL directions.", +/* Room 109 */ + "You are in a north/south canyon about 25 feet across. The floor is covered\n" + "by white mist seeping in from the north. The walls extend upward for well\n" + "over 100 feet. Suspended from some unseen point far above you, an enormous\n" + "two-sided mirror is hanging paralled to and midway between the canyon walls.\n" + "(The mirror is obviously provided for the use of the dwarves, who as you\n" "know, are extremely vain.) A small window can be seen in either wall, some\n" "fifty feet up.", +/* Room 110 */ + "You're at a low window overlooking a huge pit, which extends up out of\n" + "sight. A floor is indistinctly visible over 50 feet below. Traces of white\n" + "mist cover the floor of the pit, becoming thicker to the left. Marks in the\n" + "dust around the window would seem to indicate that someone has been here\n" + "recently. Directly across the pit from you and 25 feet away there is a\n" "similar window looking into a lighted room. A shadowy figure can be seen\n" "there peering back at you.", +/* Room 111 */ + "A large stalactite extends from the roof and almost reaches the floor below.\n" "You could climb down it, and jump from it to the floor, but having done so\n" "you would be unable to reach it to climb back up.", +/* Room 112 */ + "You are in a little maze of twisting passages, all different.", +/* Room 113 */ + "You are at the edge of a large underground reservoir. An opaque cloud of\n" + "white mist fills the room and rises rapidly upward. The lake is fed by a\n" + "stream which tumbles out of a hole in the wall about 10 feet overhead and\n" "splashes noisily into the water somewhere within the mist. The only passage\n" "goes back toward the south.", +/* Room 114 */ + "@46", +/* Room 115 */ + "@141,142", +/* Room 116 */ + "@143,144", +/* Room 117 */ + "You are on one side of a large deep chasm. A heavy white mist rising up\n" "from below obscures all view of the far side. A sw path leads away from the\n" "chasm into a winding corridor.", +/* Room 118 */ + "You are in a long winding corridor sloping out of sight in both directions.", +/* Room 119 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 120 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 121 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 122 */ + "You are on the far side of the chasm. A ne path leads away from the chasm\n" "on this side.", +/* Room 123 */ + "You're in a long east/west corridor. A faint rumbling noise can be heard in\n" "the distance.", +/* Room 124 */ + "The path forks here. The left fork leads northeast. A dull rumbling seems\n" "to get louder in that direction. The right fork leads southeast down a\n" "gentle slope. The main corridor enters from the west.", +/* Room 125 */ + "The walls are quite warm here. From the north can be heard a steady roar,\n" "so loud that the entire cave seems to be trembling. Another passage leads\n" "south, and a low crawl goes east.", +/* Room 126 */ + "@145,146,147", +/* Room 127 */ + "You are in a small chamber filled with large boulders. The walls are very\n" "warm, causing the air in the room to be almost stifling from the heat. The\n" "only exit is a crawl heading west, through which is coming a low rumbling.", +/* Room 128 */ + "You are walking along a gently sloping north/south passage lined with oddly\n" "shaped limestone formations.", +/* Room 129 */ + "You are standing at the entrance to a large, barren room. A sign posted\n" "above the entrance reads:\n" " \"Caution! Bear in room!\"" +/* Room 130 */ + "You are inside a barren room. The center of the room is completely empty\n" "except for some dust. Marks in the dust lead away toward the far end of the\n" "room. The only exit is the way you came in.", +/* Room 131 */ + "You are in a maze of twisting little passages, all different.", +/* Room 132 */ + "You are in a little maze of twisty passages, all different.", +/* Room 133 */ + "You are in a twisting maze of little passages, all different.", +/* Room 134 */ + "You are in a twisting little maze of passages, all different.", +/* Room 135 */ + "You are in a twisty little maze of passages, all different.", +/* Room 136 */ + "You are in a twisty maze of little passages, all different.", +/* Room 137 */ + "You are in a little twisty maze of passages, all different.", +/* Room 138 */ + "You are in a maze of little twisting passages, all different.", +/* Room 139 */ + "You are in a maze of little twisty passages, all different.", +/* Room 140 */ + "@46", +/* Extra 141 */ + "You are at the northeast end of an immense room, even larger than the giant\n" + "room. It appears to be a repository for the \"adventure\" program. Massive\n" + "torches far overhead bathe the room with smoky yellow light. Scattered\n" + "about you can be seen a pile of bottles (all of them empty), a nursery of\n" "young beanstalks murmuring quietly, a bed of oysters, a bundle of black rods\n" "with rusty stars on their ends, and a collection of brass lanterns. Off to", +/* Extra 142 */ + "one side a great many Dwarves are sleeping on the floor, snoring loudly. A\n" + "sign nearby reads:\n" + "\n" " \"Do NOT disturb the Dwarves!\"\n" "\n" "An immense mirror is hanging against one wall, and stretches to the other\n" "end of the room, where various other sundry objects can be glimpsed dimly in\n" "the distance.", +/* Extra 143 */ + "You are at the southwest end of the repository. To one side is a pit full\n" + "of fierce green snakes. On the other side is a row of small wicker cages,\n" + "each of which contains a little sulking bird. In one corner is a bundle of\n" "black rods with rusty marks on their ends. A large number of velvet pillows\n" "are scattered about on the floor. A vast mirror stretches off to the", +/* Extra 144 */ + "northeast. At your feet is a large steel grate, next to which is a sign\n" "which reads:\n" " \"Treasure vault. Keys in main office.\"", +/* Extra 145 */ + "You are on the edge of a breath-taking view. Far below you is an active\n" + "volcano, from which great gouts of molten lava come surging out, cascading\n" + "back down into the depths. The glowing rock fills the farthest reaches of\n" + "the cavern with a blood-red glare, giving everything an eerie, macabre\n" "appearance. The air is filled with flickering sparks of ash and a heavy\n" "smell of brimstone. The walls are hot to the touch, and the thundering of", +/* Extra 146 */ + "the volcano drowns out all other sounds. Embedded in the jagged roof far\n" + "overhead are myriad formations composed of pure white alabaster, which\n" + "scatter their murky light into sinister apparitions upon the walls. To one\n" + "side is a deep gorge, filled with a bizarre chaos of tortured rock which\n" "seems to have been crafted by the Devil Himself. An immense river of fire\n" "crashes out from the depths of the volcano, burns its way through the gorge,", +/* Extra 147 */ + "and plummets into a bottomless pit far off to your left. To the right, an\n" + "immense geyser of blistering steam erupts continuously from a barren island\n" + "in the center of a sulfurous lake, which bubbles ominously. The far right\n" + "wall is aflame with an incandescence of its own, which lends an additional\n" "infernal splendor to the already hellish scene. A dark, foreboding passage\n" "exits to the south.", +}; + +char *pShortRmDesc[] = { +/* Room 1 */ + "You're at end of road again.", +/* Room 2 */ + "You're at hill in road.", +/* Room 3 */ + "You're inside building.", +/* Room 4 */ + "You're in valley.", +/* Room 5 */ + "You're in forest.", +/* Room 6 */ + "You're in forest.", +/* Room 7 */ + "You're at slit in streambed.", +/* Room 8 */ + "You're outside grate.", +/* Room 9 */ + "You're below the grate.", +/* Room 10 */ + "You're in cobble crawl.", +/* Room 11 */ + "You're in debris room.", +/* Room 12 */ + "You are in an awkward sloping east/west canyon.", +/* Room 13 */ + "You're in bird chamber.", +/* Room 14 */ + "You're at top of small pit.", +/* Room 15 */ + "You're in hall of mists.", +/* Room 16 */ + "The crack is far too small for you to follow.", +/* Room 17 */ + "You're on east bank of fissure.", +/* Room 18 */ + "You're in nugget of gold room.", +/* Room 19 */ + "You're in hall of mt. king.", +/* Room 20 */ + "You are the the bottom of the pit with a broken neck.", +/* Room 21 */ + "You didn't make it.", +/* Room 22 */ + "The dome is unclimbable.", +/* Room 23 */ + "You're at west end of twopit room.", +/* Room 24 */ + "You're in east pit.", +/* Room 25 */ + "You're in west pit.", +/* Room 26 */ + "You clamber up the plant and scurry through the hole at the top.", +/* Room 27 */ + "You are on the west side of the fissure in the hall of mists.", +/* Room 28 */ + "You are in a low N/S passage at a hole in the floor. The hole goes down to\n" "an E/W passage.", +/* Room 29 */ + "You are in the south side chamber.", +/* Room 30 */ + "You are in the west side chamber of the hall of the mountain king. A\n" "passage continues west and up here.", +/* Room 31 */ + ">$<", +/* Room 32 */ + "You can't get by the snake.", +/* Room 33 */ + "You're at \"Y2\".", +/* Room 34 */ + "You are in a jumble of rock, with cracks everywhere.", +/* Room 35 */ + "You're at window on pit.", +/* Room 36 */ + "You're in dirty passage.", +/* Room 37 */ + "You are on the brink of a small clean climbable pit. A crawl leads west.", +/* Room 38 */ + "You are in the bottom of a small pit with a little stream, which enters and\n" "exits through tiny slits.", +/* Room 39 */ + "You're in dusty rock room.", +/* Room 40 */ + "You have crawled through a very low wide passage parallel to and north of\n" "the hall of mists.", +/* Room 41 */ + "You're at west end of hall of mists.", +/* Room 42 */ + "You are in a maze of twisty little passages, all alike.", +/* Room 43 */ + "@42", +/* Room 44 */ + "@42", +/* Room 45 */ + "@42", +/* Room 46 */ + "Dead end.", +/* Room 47 */ + "@46", +/* Room 48 */ + "@46", +/* Room 49 */ + "@42", +/* Room 50 */ + "@42", +/* Room 51 */ + "@42", +/* Room 52 */ + "@42", +/* Room 53 */ + "@42", +/* Room 54 */ + "@46", +/* Room 55 */ + "@42", +/* Room 56 */ + "@46", +/* Room 57 */ + "You're at brink of pit.", +/* Room 58 */ + "@46", +/* Room 59 */ + "You have crawled through a very low wide passage paralled to and north of\n" "the hall of mists.", +/* Room 60 */ + "You're at east end of long hall.", +/* Room 61 */ + "You're at west end of long hall.", +/* Room 62 */ + "You are at a crossover of a high N/S passage and a low E/W one.", +/* Room 63 */ + "@46", +/* Room 64 */ + "You're at complex junction.", +/* Room 65 */ + "You are in bedquilt, a long east/west passage with holes everywhere. To\n" "explore at random select north, south, up or down.", +/* Room 66 */ + "You're in swiss cheese room.", +/* Room 67 */ + "You're at east end of twopit room.", +/* Room 68 */ + "You're in slab room.", +/* Room 69 */ + "You are in a secret N/S canyon above a large room.", +/* Room 70 */ + "You are in a secret N/S canyon above a sizable passage.", +/* Room 71 */ + "You're at junction of three secret canyons.", +/* Room 72 */ + "You are in a large low room. Crawls lead north, se, and sw.", +/* Room 73 */ + "Dead end crawl.", +/* Room 74 */ + "You're at secret E/W canyon above tight canyon.", +/* Room 75 */ + "You are at a wide place in a very tight N/S canyon.", +/* Room 76 */ + "The canyon here becomes too tight to go further south.", +/* Room 77 */ + "You are in a tall E/W canyon. A low tight crawl goes 3 feet north and seems\n" "to open up.", +/* Room 78 */ + "The canyon runs into a mass of boulders -- dead end.", +/* Room 79 */ + "The stream flows out through a pair of 1 foot diameter sewer pipes. It\n" "would be advisable to use the exit.", +/* Room 80 */ + "@42", +/* Room 81 */ + "@46", +/* Room 82 */ + "@46", +/* Room 83 */ + "@42", +/* Room 84 */ + "@42", +/* Room 85 */ + "@46", +/* Room 86 */ + "@46", +/* Room 87 */ + "@42", +/* Room 88 */ + "You're in narrow corridor.", +/* Room 89 */ + "There is nothing here to climb. Use \"up\" or \"out\" to leave the pit.", +/* Room 90 */ + "You have climbed up the plant and out of the pit.", +/* Room 91 */ + "You're at steep incline above large room.", +/* Room 92 */ + "You're in giant room.", +/* Room 93 */ + "The passage here is blocked by a recent cave-in.", +/* Room 94 */ + "You are at one end of an immense north/south passage.", +/* Room 95 */ + "You're in cavern with waterfall.", +/* Room 96 */ + "You're in soft room.", +/* Room 97 */ + "You're in oriental room.", +/* Room 98 */ + "You're in misty cavern.", +/* Room 99 */ + "You're in alcove.", +/* Room 100 */ + "You're in plover room.", +/* Room 101 */ + "You're in dark-room.", +/* Room 102 */ + "You're in arched hall.", +/* Room 103 */ + "You're in shell room.", +/* Room 104 */ + "You are in a long sloping corridor with ragged sharp walls.", +/* Room 105 */ + "You are in a cul-de-sac about eight feet across.", +/* Room 106 */ + "You're in anteroom.", +/* Room 107 */ + "You are in a maze of twisty little passages, all different.", +/* Room 108 */ + "You're at Witt's end.", +/* Room 109 */ + "You're in mirror canyon.", +/* Room 110 */ + "You're at window on pit.", +/* Room 111 */ + "You're at top of stalactite.", +/* Room 112 */ + "You are in a little maze of twisting passages, all different.", +/* Room 113 */ + "You're at reservoir.", +/* Room 114 */ + "@46", +/* Room 115 */ + "You're at ne end of repository.", +/* Room 116 */ + "You're at sw end of repository.", +/* Room 117 */ + "You're on sw side of chasm.", +/* Room 118 */ + "You're in sloping corridor.", +/* Room 119 */ + "You are in a secret canyon which exits to the north and east.", +/* Room 120 */ + "@119", +/* Room 121 */ + "@119", +/* Room 122 */ + "You're on ne side of chasm.", +/* Room 123 */ + "You're in corridor.", +/* Room 124 */ + "You're at fork in path.", +/* Room 125 */ + "You're at junction with warm walls.", +/* Room 126 */ + "You're at breath-taking view.", +/* Room 127 */ + "You're in chamber of boulders.", +/* Room 128 */ + "You're in limestone passage.", +/* Room 129 */ + "You're in front of barren room.", +/* Room 130 */ + "You're in barren room.", +/* Room 131 */ + "You are in a maze of twisting little passages, all different.", +/* Room 132 */ + "You are in a little maze of twisty passages, all different.", +/* Room 133 */ + "You are in a twisting maze of little passages, all different.", +/* Room 134 */ + "You are in a twisting little maze of passages, all different.", +/* Room 135 */ + "You are in a twisty little maze of passages, all different.", +/* Room 136 */ + "You are in a twisty maze of little passages, all different.", +/* Room 137 */ + "You are in a little twisty maze of passages, all different.", +/* Room 138 */ + "You are in a maze of little twisting passages, all different.", +/* Room 139 */ + "You are in a maze of little twisty passages, all different.", +/* Room 140 */ + "@46", +}; + +char *pTextMsg[] = { +/* Msg 1 */ + "@202,203,204", +/* Msg 2 */ + "A little dwarf with a big knife blocks your way.", +/* Msg 3 */ + "A little dwarf just walked around a corner, saw you, threw a little axe at\n" "you which missed, cursed, and ran away.", +/* Msg 4 */ + "There is a threatening little dwarf in the room with you!", +/* Msg 5 */ + "One sharp, nasty knife is thrown at you!", +/* Msg 6 */ + "None of them hit you!", +/* Msg 7 */ + "One of them gets you!", +/* Msg 8 */ + "A hollow voice says \"Plugh\".", +/* Msg 9 */ + "There is no way to go that direction.", +/* Msg 10 */ + "I am unsure how you are facing. Use compass points or nearby objects.", +/* Msg 11 */ + "I don't know in from out here. Use compass points or name something in the\n" "general direction you want to go.", +/* Msg 12 */ + "I don't know how to apply that word here.", +/* Msg 13 */ + "I don't understand that!", +/* Msg 14 */ + "I'm game. Would you care to explain how?", +/* Msg 15 */ + "Sorry, but I am not allowed to give more detail. I will repeat the long\n" "description of your location.\n", +/* Msg 16 */ + "It is now pitch dark. If you proceed you will likely fall into a pit.", +/* Msg 17 */ + "If you prefer, simply type W rather than West.", +/* Msg 18 */ + "Are you trying to catch the bird?", +/* Msg 19 */ + "The bird is frightened right now and you cannot catch it no matter what you\n" "try. Perhaps you might try later.", +/* Msg 20 */ + "Are you trying to somehow deal with the snake?", +/* Msg 21 */ + "You can't kill the snake, or drive it away, or avoid it, or anything like\n" "that. There is a way to get by, but you don't have the necessary resources\n" "right now.", +/* Msg 22 */ + "Do you really want to quit now?", +/* Msg 23 */ + "You fell into a pit and broke every bone in your body!", +/* Msg 24 */ + "You are already carrying it!", +/* Msg 25 */ + "You can't be serious!", +/* Msg 26 */ + "The bird was unafraid when you entered, but as you approach it becomes\n" "disturbed and you cannot catch it.", +/* Msg 27 */ + "You can catch the bird, but you cannot carry it.", +/* Msg 28 */ + "There is nothing here with a lock!", +/* Msg 29 */ + "You aren't carrying it!", +/* Msg 30 */ + "The little bird attacks the green snake, and in an astounding flurry drives\n" "the snake away.", +/* Msg 31 */ + "You have no keys!", +/* Msg 32 */ + "It has no lock.", +/* Msg 33 */ + "I don't know how to lock or unlock such a thing.", +/* Msg 34 */ + "It was already locked.", +/* Msg 35 */ + "The grate is now locked.", +/* Msg 36 */ + "The grate is now unlocked.", +/* Msg 37 */ + "It was already unlocked.", +/* Msg 38 */ + "You have no source of light.", +/* Msg 39 */ + "Your lamp is now on.", +/* Msg 40 */ + "Your lamp is now off.", +/* Msg 41 */ + "There is no way to get past the bear to unlock the chain, which is probably\n" "just as well.", +/* Msg 42 */ + "Nothing happens.", +/* Msg 43 */ + "Where?", +/* Msg 44 */ + "There is nothing here to attack.", +/* Msg 45 */ + "The little bird is now dead. Its body disappears.", +/* Msg 46 */ + "Attacking the snake both doesn't work and is very dangerous.", +/* Msg 47 */ + "You killed a little dwarf.", +/* Msg 48 */ + "You attack a little dwarf, but he dodges out of the way.", +/* Msg 49 */ + "With what? Your bare hands?", +/* Msg 50 */ + "Good try, but that is an old worn-out magic word.", +/* Msg 51 */ + "@205,206,207", +/* Msg 52 */ + "It misses!", +/* Msg 53 */ + "It gets you!", +/* Msg 54 */ + "OK\n", +/* Msg 55 */ + "You can't unlock the keys.", +/* Msg 56 */ + "You have crawled around in some little holes and wound up back in the main\n" "passage.", +/* Msg 57 */ + "I don't know where the cave is, but hereabouts no stream can run on the\n" "surface for very long. I would try the stream.", +/* Msg 58 */ + "I need more detailed instructions to do that.", +/* Msg 59 */ + "I can only tell you what you see as you move about and manipulate things. I\n" "cannot tell you where remote things are.", +/* Msg 60 */ + "I don't know that word.", +/* Msg 61 */ + "What?", +/* Msg 62 */ + "Are you trying to get into the cave?", +/* Msg 63 */ + "The grate is very solid and has a hardened steel lock. You cannot enter\n" "without a key, and there are no keys nearby. I would recommend looking\n" "elsewhere for the keys.", +/* Msg 64 */ + "The trees of the forest are large hardwood oak and maple, with an occasional\n" + "grove of pine or spruce. There is quite a bit of undergrowth, largely birch\n" + "and ash saplings plus nondescript bushes of various sorts. This time of\n" "year visibility is quite restricted by all the leaves, but travel is quite\n" "easy if you detour around the spruce and berry bushes.", +/* Msg 65 */ + "Welcome to adventure!! Would you like instructions?", +/* Msg 66 */ + "Digging without a shovel is quite impractical. Even with a shovel progress\n" "is unlikely.", +/* Msg 67 */ + "Blasting requires dynamite.", +/* Msg 68 */ + "I'm as confused as you are.", +/* Msg 69 */ + "Mist is a white vapor, usually water. Seen from time to time in caverns.\n" "It can be found anywhere but is frequently a sign of a deep pit leading down\n" "to water.", +/* Msg 70 */ + "Your feet are now wet.", +/* Msg 71 */ + "I think I just lost my appetite.", +/* Msg 72 */ + "Thank you. It was delicious!", +/* Msg 73 */ + "You have taken a drink from the stream. The water tastes strongly of\n" "minerals, but is not unpleasant. It is extremely cold.", +/* Msg 74 */ + "The bottle of water is now empty.", +/* Msg 75 */ + "Rubbing the electric lamp is not particularly rewarding. Anyway, nothing\n" "exciting happens.", +/* Msg 76 */ + "Peculiar. Nothing unexpected happens.", +/* Msg 77 */ + "Your bottle is empty and the ground is wet.", +/* Msg 78 */ + "You can't pour that.", +/* Msg 79 */ + "Watch it!", +/* Msg 80 */ + "Which way?", +/* Msg 81 */ + "Oh dear, you seem to have gotten yourself killed. I might be able to help\n" "you out, but I've never really done this before. Do you want me to try to\n" "reincarnate you?", +/* Msg 82 */ + "All right. But don't blame me if something goes wr......\n" " --- POOF !! ---\n" "You are engulfed in a cloud of orange smoke. Coughing and gasping, you\n" "emerge from the smoke and find...", +/* Msg 83 */ + "You clumsy oaf, you've done it again! I don't know how long I can keep this\n" "up. Do you want me to try reincarnating you again?", +/* Msg 84 */ + "Okay, now where did i put my orange smoke? ... > POOF! <\n" "Everything disappears in a dense cloud of orange smoke.", +/* Msg 85 */ + "Now you've really done it! I'm out of orange smoke! You don't expect me to\n" "do a decent reincarnation without any orange smoke, do you?", +/* Msg 86 */ + "Okay, If you're so smart, do it yourself! I'm leaving!", +/* Msg 87 */ + "", +/* Msg 88 */ + "", +/* Msg 89 */ + "", +/* Msg 90 */ + "", +/* Msg 91 */ + "Sorry, but I no longer seem to remember how it was you got here.", +/* Msg 92 */ + "You can't carry anything more. You'll have to drop something first.", +/* Msg 93 */ + "You can't go through a locked steel grate!", +/* Msg 94 */ + "I believe what you want is right here with you.", +/* Msg 95 */ + "You don't fit through a two-inch slit!", +/* Msg 96 */ + "I respectfully suggest you go across the bridge instead of jumping.", +/* Msg 97 */ + "There is no way across the fissure.", +/* Msg 98 */ + "You're not carrying anything.", +/* Msg 99 */ + "You are currently holding the following:", +/* Msg 100 */ + "It's not hungry (It's merely pinin' for the Fjords). Besides you have no\n" "bird seed.", +/* Msg 101 */ + "The snake has now devoured your bird.", +/* Msg 102 */ + "There's nothing here it wants to eat (Except perhaps you).", +/* Msg 103 */ + "You fool, Dwarves eat only coal! Now you've made him REALLY mad !!", +/* Msg 104 */ + "You have nothing in which to carry it.", +/* Msg 105 */ + "Your bottle is already full.", +/* Msg 106 */ + "There is nothing here with which to fill the bottle.", +/* Msg 107 */ + "Your bottle is now full of water.", +/* Msg 108 */ + "Your bottle is now full of oil.", +/* Msg 109 */ + "You can't fill that.", +/* Msg 110 */ + "Don't be ridiculous!", +/* Msg 111 */ + "The door is extremely rusty and refuses to open.", +/* Msg 112 */ + "The plant indignantly shakes the oil off its leaves and asks: \"Water?\".", +/* Msg 113 */ + "The hinges are quite thoroughly rusted now and won't budge.", +/* Msg 114 */ + "The oil has freed up the hinges so that the door will now move, although it\n" "requires some effort.", +/* Msg 115 */ + "The plant has exceptionally deep roots and cannot be pulled free.", +/* Msg 116 */ + "The Dwarves' knives vanish as they strike the walls of the cave.", +/* Msg 117 */ + "Something you're carrying won't fit through the tunnel with you. You'd best\n" "take inventory and drop something.", +/* Msg 118 */ + "You can't fit this five-foot clam through that little passage!", +/* Msg 119 */ + "You can't fit this five foot oyster through that little passage!", +/* Msg 120 */ + "I advise you to put down the clam before opening it. >STRAIN!<", +/* Msg 121 */ + "I advise you to put down the oyster before opening it. >WRENCH!<", +/* Msg 122 */ + "You don't have anything strong enough to open the clam.", +/* Msg 123 */ + "You don't have anything strong enough to open the oyster.", +/* Msg 124 */ + "A glistening pearl falls out of the clam and rolls away. Goodness, this must\n" "really be an oyster. (I never was very good at identifying bivalves.)\n" "Whatever it is, it has now snapped shut again.", +/* Msg 125 */ + "The oyster creaks open, revealing nothing but oyster inside. It promptly\n" "snaps shut again.", +/* Msg 126 */ + "You have crawled around in some little holes and found your way blocked by a\n" "recent cave-in. You are now back in the main passage.", +/* Msg 127 */ + "There are faint rustling noises from the darkness behind you.", +/* Msg 128 */ + "Out from the shadows behind you pounces a bearded pirate! \"Har, har\" he\n" "chortles, \"I'll just take all this booty and hide it away with me chest deep\n" "in the maze!\". He snatches your treasure and vanishes into the gloom.", +/* Msg 129 */ + "A sepulchral voice reverberating through the cave says: \"Cave closing soon.\n" "All adventurers exit immediately through main office.\"", +/* Msg 130 */ + "A mysterious recorded voice groans into life and announces: \"This exit is\n" "closed. Please leave via main office.\"", +/* Msg 131 */ + "It looks as though you're dead. Well, seeing as how it's so close to\n" "closing time anyway, I think we'll just call it a day.", +/* Msg 132 */ + "The sepulchral voice entones, \"The cave is now closed.\" As the echoes fade,\n" "there is a blinding flash of light (and a small puff of orange smoke). . . .\n" "As your eyes refocus you look around and find...", +/* Msg 133 */ + "There is a loud explosion, and a twenty-foot hole appears in the far wall,\n" + "burying the Dwarves in the rubble. You march through the hole and find\n" "yourself in the main office, where a cheering band of friendly elves carry\n" "the conquering adventurer off into the sunset.", +/* Msg 134 */ + "There is a loud explosion, and a twenty-foot hole appears in the far wall,\n" "burying the snakes in the rubble. A river of molten lava pours in through\n" "the hole, destroying everything in its path, including you!!", +/* Msg 135 */ + "There is a loud explosion, and you are suddenly splashed across the walls of\n" "the room.", +/* Msg 136 */ + "The resulting ruckus has awakened the Dwarves. There are now several\n" "threatening little Dwarves in the room with you! Most of them throw knives\n" "at you! All of them get you!", +/* Msg 137 */ + "Oh, leave the poor unhappy bird alone.", +/* Msg 138 */ + "I daresay whatever you want is around here somewhere.", +/* Msg 139 */ + "I don't know the word \"stop\". Use \"quit\" if you want to give up.", +/* Msg 140 */ + "You can't get there from here.", +/* Msg 141 */ + "You are being followed by a very large, tame bear.", +/* Msg 142 */ + "@208,209,210", +/* Msg 143 */ + "Do you indeed wish to quit now?", +/* Msg 144 */ + "There is nothing here with which to fill the vase.", +/* Msg 145 */ + "The sudden change in temperature has delicately shattered the vase.", +/* Msg 146 */ + "It is beyond your power to do that.", +/* Msg 147 */ + "I don't know how.", +/* Msg 148 */ + "It is too far up for you to reach.", +/* Msg 149 */ + "You killed a little Dwarf. The body vanished in a cloud of greasy black\n" "smoke.", +/* Msg 150 */ + "The shell is very strong and impervious to attack.", +/* Msg 151 */ + "What's the matter, can't you read? Now you'd best start over.", +/* Msg 152 */ + "The axe bounces harmlessly off the dragon's thick scales.", +/* Msg 153 */ + "The dragon looks rather nasty. You'd best not try to get by.", +/* Msg 154 */ + "The little bird attacks the green dragon, and in an astounding flurry gets\n" "burnt to a cinder. The ashes blow away.", +/* Msg 155 */ + "On what?", +/* Msg 156 */ + "Okay, from now on I'll only describe a place in full the first time you come\n" "to it. To get the full description say \"look\".", +/* Msg 157 */ + "Trolls are close relatives with the rocks and have skin as tough as that of\n" "a rhinoceros. The troll fends off your blows effortlessly.", +/* Msg 158 */ + "The troll deftly catches the axe, examines it carefully, and tosses it back,\n" "declaring, \"Good workmanship, but it's not valuable enough.\".", +/* Msg 159 */ + "The troll catches your treasure and scurries away out of sight.", +/* Msg 160 */ + "The troll refuses to let you cross.", +/* Msg 161 */ + "There is no longer any way across the chasm.", +/* Msg 162 */ + "Just as you reach the other side, the bridge buckles beneath the weight of\n" "the bear, which was still following you around. You scrabble desperately for\n" "support, but as the bridge collapses you stumble back and fall into the\n" "chasm.", +/* Msg 163 */ + "The bear lumbers toward the troll, who lets out a startled shriek and\n" "scurries away. The bear soon gives up pursuit and wanders back.", +/* Msg 164 */ + "The axe misses and lands near the bear where you can't get at it.", +/* Msg 165 */ + "With what? Your bare hands? Agains HIS bear hands??", +/* Msg 166 */ + "The bear is confused; he only wants to be your friend.", +/* Msg 167 */ + "For crying out loud, the poor thing is already dead!", +/* Msg 168 */ + "The bear eagerly wolfs down your food, after which he seems to calm down\n" "considerably, and even becomes rather friendly.", +/* Msg 169 */ + "The bear is still chained to the wall.", +/* Msg 170 */ + "The chain is still locked.", +/* Msg 171 */ + "The chain is now unlocked.", +/* Msg 172 */ + "The chain is now locked.", +/* Msg 173 */ + "There is nothing here to which the chain can be locked.", +/* Msg 174 */ + "There is nothing here to eat.", +/* Msg 175 */ + "Do you want the hint?", +/* Msg 176 */ + "Do you need help getting out of the maze?", +/* Msg 177 */ + "You can make the passages look less alike by dropping things.", +/* Msg 178 */ + "Are you trying to explore beyond the plover room?", +/* Msg 179 */ + "There is a way to explore that region without having to worry about falling\n" "into a pit. None of the objects available is immediately useful in\n" "discovering the secret.", +/* Msg 180 */ + "Do you need help getting out of here?", +/* Msg 181 */ + "Don't go west.", +/* Msg 182 */ + "Gluttony is not one of the Troll's vices. Avarice, however, is.", +/* Msg 183 */ + "Your lamp is getting dim.. You'd best start wrapping this up, unless you can\n" "find some fresh batteries. I seem to recall there's a vending machine in\n" "the maze. Bring some coins with you.", +/* Msg 184 */ + "Your lamp has run out of power.", +/* Msg 185 */ + "There's not much point in wandering around out here, and you can't explore\n" "the cave without a lamp. So let's just call it a day.", +/* Msg 186 */ + "There are faint rustling noises from the darkness behind you. As you turn\n" + "toward them, the beam of your lamp falls across a bearded pirate. He is\n" + "carrying a large chest. \"Shiver me timbers!\" he cries, \"I've been spotted!\n" "I'd best hide meself off to the maze and hide me chest!\". With that, he\n" "vanished into the gloom.", +/* Msg 187 */ + "Your lamp is getting dim. You'd best go back for those batteries.", +/* Msg 188 */ + "Your lamp is getting dim.. I'm taking the liberty of replacing the\n" "batteries.", +/* Msg 189 */ + "Your lamp is getting dim, and you're out of spare batteries. You'd best\n" "start wrapping this up.", +/* Msg 190 */ + "I'm afraid the magazine is written in Dwarvish.", +/* Msg 191 */ + "\"This is not the maze where the pirate leaves his treasure chest.\"", +/* Msg 192 */ + "Hmm, this looks like a clue, which means it'll cost you 10 points to read\n" "it. Should I go ahead and read it anyway?", +/* Msg 193 */ + "It says, \"There is something strange about this place, such that one of the\n" "words I've always known now has a new effect.\"", +/* Msg 194 */ + "It says the same thing it did before.", +/* Msg 195 */ + "I'm afraid I don't understand.", +/* Msg 196 */ + "\"Congratulations on bringing light into the dark-room!\"", +/* Msg 197 */ + "You strike the mirror a resounding blow, whereupon it shatters into a myriad\n" "tiny fragments.", +/* Msg 198 */ + "You have taken the vase and hurled it delicately to the ground.", +/* Msg 199 */ + "You prod the nearest Dwarf, who wakes up grumpily, takes one look at you,\n" "curses, and grabs for his axe.", +/* Msg 200 */ + "Is this acceptable?", +/* Msg 201 */ + "There's no point in suspending a demonstration game.", +/* Msg 202 */ + "Somewhere nearby is Colossal Cave, where others have found fortunes in\n" + "treasure and gold, though it is rumored that some who enter are never seen\n" + "again. Magic is said to work in the cave. I will be your eyes and hands.\n" "Direct me with commands of 1 or 2 words. I should warn you that I look at\n" "only the first five letters of each word, so you'll have to enter\n", +/* Msg 203 */ + "\"Northeast\" as \"ne\" to distinguish it from \"North\". (Should you get stuck,\n" "type \"help\" for some general hints.\n", +/* Msg 204 */ + "This program was originally developed by Willie Crowther. Most of the\n" + "features of the current program were added by Don Woods. This version,\n" "written in BDS 8080 C was adapted by Jay R. Jaeger and was later ported to\n" "MSC V5.1 on the IBM/PC by Bob Withers.\n", +/* Msg 205 */ + "I know of places, actions, and things. Most of my vocabulary describes\n" + "places and is used to move you there. To move, try words like forest,\n" + "building, downstream, enter, east, west, north, south, up or down. I know\n" + "about a few special objects, like a black rod hidden in the cave. These\n" "objects can be manipulated using some of the action words I know. Usually\n" "you will need to give both the object and action words (In either order),", +/* Msg 206 */ + "but sometimes I can infer the object from the verb alone. Some objects also\n" + "imply verbs; in particular, \"inventory\" implies \"take inventory\", which\n" + "causes me to give you a list of what you're carrying. The objects have side\n" + "effects; for instance, the rod scares the bird. Usually people having\n" "trouble moving just need to try a few more words. Usually people trying\n" "unsuccessfully to manipulate an object are attempting something beyond their", +/* Msg 207 */ + "(or my!) capabilities and should try a completely different tack. To speed\n" + "the game you can sometimes move long distances with a single word. For\n" + "example, \"building\" usually gets you to the building from anywhere above\n" + "ground except when lost in the forest. Also, note that cave passages turn a\n" "lot, and that leaving a room to the north does not guarantee entering the\n" "next from the south.\n" "\n" "Good luck!", +/* Msg 208 */ + "If you want to end your adventure early, say \"quit\". To suspend you\n" + "adventure such that you can continue later say \"suspend\" (or \"pause\" or\n" + "\"save\"). To see how well you're doing, say \"score\". To get full credit for\n" + "a treasure, you must have left it safely in the building, though you get\n" "partial credit just for locating it. You lose points for getting killed, or\n" "for quitting, though the former costs you more. There are also points based", +/* Msg 209 */ + "on how much (If any) of the cave you've managed to explore; in particular,\n" + "there is a large bonus just for getting in (to distinguish the beginners\n" + "from the rest of the pack), and there are other ways to determine whether\n" + "you've been through some of the more harrowing sections. If you think you've\n" "found all the treasures, just keep exploring for a while. If nothing\n" "interesting happens, you haven't found them all yet. If something", +/* Msg 210 */ + "interesting DOES happen, it means you're getting a bonus and have an\n" + "opportunity to garner many more points in the master's section. I may\n" + "occasionally offer hints in you seem to be having trouble. If I do, I'll\n" + "warn you in advance how much it will affect your score to accept the hints.\n" "Finally, to save paper, you may specify \"brief\", which tells me never to\n" "repeat the full description of a place unless you explicitly ask me to.", +}; + +struct gameheader { + uint16_t msg[211]; + uint16_t lshort[141]; + uint16_t odesc[65]; + uint16_t loclong[148]; +}; + +#define out 1 +int main(int argc, char *argv[]) +{ + int i = 0; + long base = 0; + uint16_t dp; + int len; + struct trav t; + struct gameheader game; + base = sizeof(game); + write(out, &game, sizeof(game)); + dp = sizeof(game); + while (i < 210) { + len = strlen(pTextMsg[i]) + 1; + game.msg[i] = dp; + dp += len; + write(out, pTextMsg[i], len); + i++; + } + game.msg[i] = dp; + for (i = 0; i < 140; i++) { + + /* 0 terminate as entries don't give the true length */ + len = strlen(pShortRmDesc[i]) + 1; + game.lshort[i] = dp; + write(out, pShortRmDesc[i], len); + dp += len; + if (TravTab[i].sTrav > 16) { + fprintf(stderr, "Trav too big %d = %d\n", i, TravTab[i].sTrav); + exit(1); + } + dp += 16 * sizeof(struct trav) + 1; + write(out, &TravTab[i].sTrav, 1); + write(out, TravTab[i].pTrav, 16 * sizeof(struct trav)); + } game.lshort[i] = dp; + for (i = 0; i < 64; i++) { + len = strlen(pObjDesc[i]); + game.odesc[i] = dp; + write(out, pObjDesc[i], len); + dp += len; + } + game.odesc[i] = dp; + for (i = 0; i < 64; i++) { + len = strlen(pLongRmDesc[i]); + game.loclong[i] = dp; + write(out, pLongRmDesc[i], len); + dp += len; + } + game.loclong[i] = dp; + if (lseek(out, 0L, SEEK_SET) == -1) { + perror("seek"); + exit(1); + } + write(out, &game, sizeof(game)); + close(out); + exit(0); +} diff --git a/Applications/cave/database.c b/Applications/cave/database.c new file mode 100644 index 00000000..38382e92 --- /dev/null +++ b/Applications/cave/database.c @@ -0,0 +1,420 @@ + +/* programs in DATABASE.C no changes for V 1.43 */ + +#include "advent.h" +static void DisplayText(uint16_t * tab); +static char db_buf[257]; +static struct trav db_trav[16]; /* Trav for last location fetched */ +static uint8_t db_ntrav; +static int db_lastloc; +static int db_fd; +static struct gameheader game; +static void dbstring(uint16_t * off) +{ + uint16_t s = off[1] - *off; + if (lseek(db_fd, *off, SEEK_SET) == -1) { + perror("lseek"); + exit(1); + } + if (read(db_fd, db_buf, s) != s) { + perror("read"); + exit(1); + } + db_buf[s] = 0; +} + +void db_init(void) +{ + db_fd = open("advent.db", O_RDONLY); + if (db_fd == -1) { + perror("advent.db"); + exit(1); + } + if (read(db_fd, &game, sizeof(game)) != sizeof(game)) { + perror("read"); + exit(1); + } +} + + +/* Routine to fill travel array for a given location. */ +void gettrav(short loc) +{ + if (loc != db_lastloc) + bug(40); + --loc; + pTravel = db_trav; + sTravCnt = db_ntrav; + return; +} + + +/* Routine to request a yes or no answer to a question. */ +short yes(short msg1, short msg2, short msg3) +{ + char answer[80]; + if (msg1) + rspeak(msg1); + writes(">"); + getinp(answer, 79); + if (tolower(answer[0]) == 'n') { + if (msg3) + rspeak(msg3); + return (0); + } + if (msg2) + rspeak(msg2); + return (1); +} + + +/* Print a random message from database 6 */ +void rspeak(short msg) +{ + dbstring(game.msg + msg - 1); + +#ifdef DEBUG + if (dbgflg) + fprintf(stderr, "** rspeak(%d) ** ", msg); + +#endif /* */ + DisplayText(game.msg); + return; +} + + +/* Routine to print the message for an item in a given state. */ +void pspeak(short item, short state) +{ + register char *p; + +#ifdef DEBUG + if (dbgflg) + fprintf(stderr, "** pspeak(%d,%d) ** ", item, state); + +#endif /* */ + dbstring(game.odesc + item - 1); + p = db_buf; + while (state > -1) { + while (*p && '/' != *p) + ++p; + if (NUL == *p) + return; + ++p; + --state; + } + + /* FIXME: optimise */ + while (TRUE) { + if (NUL == *p || '/' == *p) + break; + write(1, p, 1); + ++p; + } + nl(); + return; +} + + +/* Print the long description of a location */ +void desclg(short loc) +{ + uint8_t *p; + dbstring(game.loclong + loc - 1); + +#ifdef DEBUG + if (dbgflg) + fprintf(stderr, "** desclg(%d) ** ", loc); + +#endif /* */ + DisplayText(game.loclong); + nl(); + + /* Cache the exits */ + dbstring(game.lshort + loc - 1); + p = db_buf + strlen(db_buf) + 1; + db_ntrav = *p++; + memcpy(db_trav, p, sizeof(db_trav)); + db_lastloc = loc; +} + + +/* Print the short description of a location */ +void descsh(short loc) +{ + uint8_t *p; + db_lastloc = loc; + dbstring(game.lshort + loc - 1); + p = db_buf + strlen(db_buf) + 1; + db_ntrav = *p++; + memcpy(db_trav, p, sizeof(db_trav)); + +#ifdef DEBUG + if (dbgflg) + fprintf(stderr, "** descsh(%d) ** ", loc); + +#endif /* */ + DisplayText(game.lshort); + nl(); +} + +static void DisplayText(uint16_t * tab) +{ + uint8_t m[6]; + int i; + int n = 0; + char *p; + p = db_buf; + + /* Be careful - we can't re-use db_buf midstream */ + if (*p == '@') { + p++; + while (*p) { + m[n++] = atoi(p); + while (*p && ',' != *p) + ++p; + if (',' == *p) + ++p; + } + for (i = 0; i < n; i++) { + dbstring(&tab[m[i] - 1]); + writes(db_buf); + nl(); + } + } else { + writes(db_buf); + nl(); + } +} + + +/* routine to look up a vocabulary word. + word is the word to look up. + val is the minimum acceptable value, + if != 0 return %1000 +*/ +short vocab(char *word, short val) +{ + register short i; + register short left, right; + auto short sCmp; + extern short sVocabCount; + extern VOCABTAB VocabTab[]; + left = 0; + right = sVocabCount - 1; + while (right >= left) { + i = (left + right) / 2; + sCmp = *word - *VocabTab[i].pWord; + if (0 == sCmp) + sCmp = strcmp(word, VocabTab[i].pWord); + if (0 == sCmp) + return (val ? VocabTab[i].sWord % 1000 : VocabTab[i].sWord); + if (sCmp < 0) + right = i - 1; + + else + left = i + 1; + } + return (-1); +} + + +/* + Utility Routines +*/ + +/* + Routine to test for darkness +*/ +uint8_t dark(void) +{ + return (!(cond[loc] & LIGHT) && (!prop[LAMP] || !here(LAMP))); +} + + +/* + Routine to tell if an item is present. +*/ +uint8_t here(short item) +{ + return (place[item] == loc || toting(item)); +} + + +/* + Routine to tell if an item is being carried. +*/ +uint8_t toting(short item) +{ + return (place[item] == -1); +} + + +/* + Routine to tell if a location causes + a forced move. +*/ +uint8_t forced(short atloc) +{ + return (cond[atloc] == 2); +} + + +/* + Routine true x% of the time. +*/ +uint8_t pct(short x) +{ + return (rand() % 100 < x); +} + + +/* + Routine to tell if player is on + either side of a two sided object. +*/ +uint8_t at(short item) +{ + return (place[item] == loc || fixed[item] == loc); +} + + +/* + Routine to destroy an object +*/ +void dstroy(short obj) +{ + move(obj, 0); + return; +} + + +/* + Routine to move an object +*/ +void move(short obj, short where) +{ + auto short from; + from = (obj < MAXOBJ) ? place[obj] : fixed[obj]; + if (from > 0 && from <= 300) + carry(obj, from); + drop(obj, where); + return; +} + + +/* + Juggle an object + currently a no-op +*/ +void juggle(short loc) +{ + loc = loc; /* eliminate compiler warning */ + return; +} + + +/* + Routine to carry an object +*/ +void carry(short obj, short where) +{ + where = where; /* eliminate compiler warning */ + if (obj < MAXOBJ) { + if (place[obj] == -1) + return; + place[obj] = -1; + ++holding; + } + return; +} + + +/* + Routine to drop an object +*/ +void drop(short obj, short where) +{ + if (obj < MAXOBJ) { + if (place[obj] == -1) + --holding; + place[obj] = where; + } + + else + fixed[obj - MAXOBJ] = where; + return; +} + + +/* + routine to move an object and return a + value used to set the negated prop values + for the repository. +*/ +short put(short obj, short where, short pval) +{ + move(obj, where); + return ((-1) - pval); +} + + +/* + Routine to check for presence + of dwarves.. +*/ +short dcheck(void) +{ + register short i; + for (i = 1; i < (DWARFMAX - 1); ++i) { + if (dloc[i] == loc) + return (i); + } + return (0); +} + + +/* + Determine liquid in the bottle +*/ +short liq(void) +{ + auto short i, j; + i = prop[BOTTLE]; + j = (-1) - i; + return (liq2(i > j ? i : j)); +} + + +/* + Determine liquid at a location +*/ +short liqloc(short loc) +{ + if (cond[loc] & LIQUID) + return (liq2(cond[loc] & WATOIL)); + return (liq2(1)); +} + + +/* + Convert 0 to WATER + 1 to nothing + 2 to OIL +*/ +short liq2(short pbottle) +{ + return ((1 - pbottle) * WATER + (pbottle >> 1) * (WATER + OIL)); +} + + +/* + Fatal error routine +*/ +void bug(short n) +{ + writes("Fatal error "); + writei(n); + nl(); + exit(1); +} diff --git a/Applications/cave/english.c b/Applications/cave/english.c new file mode 100644 index 00000000..a4909778 --- /dev/null +++ b/Applications/cave/english.c @@ -0,0 +1,178 @@ + +/* ENGLISH.C no mod for V 1.43 + + Changed all calls of rand() to irand() for Eco-C88 (BW) +*/ + +#include "advent.h" + +/* + Analyze a two word sentence +*/ +uint8_t english(void) +{ + auto const char *msg; + auto short type1, type2, val1, val2; + verb = object = motion = 0; + type2 = val2 = -1; + type1 = val1 = -1; + msg = "bad grammar..."; + getin(); + if (!analyze(word1, &type1, &val1)) + return (FALSE); + if (type1 == 2 && val1 == SAY) { + verb = SAY; + object = 1; + return (TRUE); + } + if (strcmp(word2, "")) { + if (!analyze(word2, &type2, &val2)) + return (FALSE); + } + + /* check his grammar */ + if (type1 == 3) { + rspeak(val1); + return (FALSE); + } + + else { + if (type2 == 3) { + rspeak(val2); + return (FALSE); + } + + else { + if (type1 == 0) { + if (type2 == 0) { + writes(msg); + nl(); + return (FALSE); + } + + else + motion = val1; + } + + else { + if (type2 == 0) + motion = val2; + + else { + if (type1 == 1) { + object = val1; + if (type2 == 2) + verb = val2; + if (type2 == 1) { + writes(msg); + nl(); + return (FALSE); + } + } + + else { + if (type1 == 2) { + verb = val1; + if (type2 == 1) + object = val2; + if (type2 == 2) { + writes(msg); + nl(); + return (FALSE); + } + } + + else + bug(36); + } + } + } + } + } + return (TRUE); +} + + +/* + Routine to analyze a word. +*/ +uint8_t analyze(char *word, short *type, short *value) +{ + auto short wordval, msg; + + /* make sure I understand */ + if ((wordval = vocab(word, 0)) == -1) { + switch (rand() % 3) { + case 0: + msg = 60; + break; + case 1: + msg = 61; + break; + default: + msg = 13; + } + rspeak(msg); + return (FALSE); + } + + /* FIXME use powers of 2 ! */ + *type = wordval / 1000; + *value = wordval % 1000; + return (TRUE); +} + + +/* + routine to get two words of input + and convert them to lower case +*/ +void getin(void) +{ + auto char *bptr; + auto char linebuff[65]; + writes(">"); + word1[0] = word2[0] = '\0'; + bptr = linebuff; + getinp(linebuff, 65); + skipspc(&bptr); + getword(&bptr, word1); + if (!*bptr) + return; + while (!isspace(*bptr)) { + if (!*bptr++) + return; + } + skipspc(&bptr); + getword(&bptr, word2); + return; +} + + +/* + Routine to extract one word from a buffer +*/ +void getword(char **buff, char *word) +{ + register short i; + for (i = 0; i < WORDSIZE; ++i) { + if (!**buff || isspace(**buff)) { + *word = NUL; + return; + } + *word++ = (char) tolower(**buff); + (*buff)++; + } *--word = NUL; + return; +} + + +/* + Routine to skip spaces +*/ +void skipspc(char **buff) +{ + while (isspace(**buff)) + ++(*buff); + return; +} diff --git a/Applications/cave/environ.doc b/Applications/cave/environ.doc new file mode 100644 index 00000000..cfa29420 --- /dev/null +++ b/Applications/cave/environ.doc @@ -0,0 +1,106 @@ +Notes on Adventure Environment +written April 26, 1981 + + This disk was written and and compiled under version 1.3x and +will NOT compile under version 1.4 and later without changes to the +source. Specifically dbuff in advent.h on or about line 134 must be +declared so that it is compatible with the 1.4 file i/o. The com files +on the disk will require at least a 46k system to execute, but +recompiling under 1.4 will add about 1k to the memory requirements +(except that 1.4 produces tighter code). + The com files provided were debugged on a system including +a 48k Altair equipped with 2 Micropolis drives, and a Processor +Technology VDM. + To begin play, type advent. To resume a saved game type +"advent -r". + +Added notes on making this ADVENTURE work in BDS-C Version 1.43 +Environment written 17 May 1981 by L. C. Calhoun. + + At Robert Ward's request, I brought this program up on +the 1.43 compiler. Only one change was required..to add the +small section on buffering from BDSCIO.H to ADVENT.H, and to +change dbuff[134] in ADVENT.H to dbuff[BUFSIZ]. I did review +the other program files for potential changes, and added a +title and note to the head of each for the record. The compile +and link control syntaxes differ between V 1.4 and older versions. +I made the appropriate changes, and created two submit files; +ADVCOMP.SUB and ADVLINK.SUB. These must (of course) run on +disk a:, but they are set up for all the c utilities to be on +disk a: and the actual c programs with their .CRL files to be +on b:. Just PIP these two sub files over to the a: disk where +CC1, CC2, C.CCC, CLINK, DEFF* etc. hang out. Only one file +needs to be read two times during linkage - TURN.CRL while +EADVENT.COM is being linked. Otherwise, it went smoothly +in conversion. + + Mr. Jaeger (me too, I must admit) was worried that +the greater buffer size used in the standard V 1.43 library +would have a bad effect on the program length. I compiled +without the -o option for optimization. Lo and behold, +the program appears to be considerably shorter. I was able +to external set the data (-e6A00) much lower than in the +submit files supplied. I could have even gone lower. +I compiled a second time with the e option in CC1 to -e6A00, +see ADVCOMP.SUB. Dog gone if the code didn't end at 5EC8. +However, the variables end at 7CA1 even with the -e6A00, +so I didn't bother. + + The re-compiles were done on an ALTAIR 8800B, with +a 60K CPM 2.2 system, ADM-3A display, and TARBEL single side +single density controlling four Shugart 801R's. I checked +the elboeroom callouts during compile, and the least amount +of elboeroom was 20K whilst compiling TURN.C. So, it appears +that the re-compiled version will compile and run on +a 40K system with about 4K of stack space. You can pick +up another 2K of stack space by editing the ADVCOMP.SUB file +for the option -e6000 if it's worthwhile. Thank you Mr. Zolman. + +*********************************************************************** + +Written on Sept 18, 1985 + +Port of source code to the MS-DOS environment with the following +target compilers: + + Eco-C88 Version 2.72 + Lattice C Version 2.14 + DeSmet C Version 2.41 + +Most of the changes required involved the use of file I/O and the +database offset index arrays used in the program. Conditional code +was added at various points in order to allow the same source to +compile under the three target compilers. The modules EADVENT.C and +SAVEADV.C were modified from main drivers to called functions in order +that the entire program could be linked into a single executable +module. + +Under MS-DOS version 2 or higher the default number of files is one +too few to enable the program to run. A FILES=10 should be added +in your CONFIG.SYS file (I've been using 12). + +I was unable to get the Lattice version to operate properly using +buffered file I/O. It appeared that the file offsets returned by +lseek() and ftell() were incorrect while using buffered I/O. I'm +still scratching my head over this one. I disabled file buffering +on the Lattice version and it worked perfectly. Well .... not +exactly perfectly. Lets put it this way, it operates properly. A +dead snail could beat it in a race but it does operate as advertised. +If anyone has a clue for a fix to this it would be most appreciated. + +All versions of the program were compiled on an IBM/PC with 640K and +running under PC-DOS V2.10. The executable modules were also tried +under PC-DOS V3.00 and on a TIPC with 512K running under MS-DOS V2.13. +The program operated as expected under all configurations. + +Bob Withers + +***************************************************************************** + +Written on June 2nd, 1990 + +The code was once again ported to compile under Microsoft C V5.10 and V6.00 +under both MSDOS and OS/2. Numerous changes and code restructuring were +performed. See comments in file ADVENT.C for details. + +Bob Withers diff --git a/Applications/cave/history.doc b/Applications/cave/history.doc new file mode 100644 index 00000000..9f307c48 --- /dev/null +++ b/Applications/cave/history.doc @@ -0,0 +1,85 @@ + +HISTORY FILE FOR ADVENTURE IN C + +09 Jan 1982 Greg Huntzinger +----------- 5775 Leetsdale Dr. + Suite 699 + P.O. Box 22557 + Denver, CO 80222 + <303> 753-0488/452-4919 ext 307 +(1) added this history file +(2) fixed spelling and typeo errors in-- + ADVENT1.DAT + ADVENT2.DAT + ADVENT6.DAT + + +15 Sept 1985 Bob Withers +------------ 4001 Via Plata + Mesquite, Texas 75150 + (214) 270-0368 + +(1) Ported code to compile under the Eco-C88 compiler for the IBM/PC. +(2) Added conditional code to allow the adventure to be compiled under + the Lattice and DeSmet compilers (refer to the conditional switches + in ADVENT.H for compiler selection). +(3) Re-formatted all of the text databases to take better advantage of + an 80 column screen. +(4) Added type casts at various places to keep the Lattice compiler from + complaining. +(5) Performed fairly extensive modification to the file I/O portion of + the program to allow it to use MS-DOS stream I/O. +(6) Added functions for initb() and initw() which do not exist under any + of the target compilers. +(7) Doubled the number of file offset indexes kept for databases ADVENT1, + ADVENT2, ADVENT3, and ADVENT6. This did not significantly increase + the size of the executable module but does speed access to the text + stored in these files. +(8) Modified sub-modules EADVENT.C and SAVEADV.C so that the entire + program could be linked together to produce a single executable file + rather than performing dynamic loads of these two modules (via exec). + + These modifications were compiled and tested under the following IBM/PC + compilers: + + Eco-C88 Version 2.72 Ecosoft, Inc. + Lattice C Version 2.14 Lattice, Inc. + DeSmet C Version 2.41 C-Ware, Inc. + + The resultant executable modules were play tested on both an IBM/PC and + a Texas Instruments TIPC. All versions of the game appeared to operate + properly, however, the game was not played to it's conclusion. + +** Note that when running this program under MS-DOS a CONFIG.SYS file is + required to set the FILES= parameter to at least 10 files. Failure to do + this will result in an error message that the program was not able to open + file ADVENT6.DAT. + + + 2 Jun 90 Bob Withers + -------- 649 Meadowbrook + Allen, Texas 75002 + + (1) Ported code to Microsoft C V 5.10 and 6.00 + (2) Placed all global variables in header ADVENT.H + (3) Removed most runtime variable initialization and replaced + by compile time initializers. + (4) Added file ADVENTDB.C to completely replace all the adventure + data base files. This keeps all data in memory and eliminates + all disk accesses during game play. All functions in DATABASE.C + were modified to access in memory data. + (5) Added code to support the BRIEF and VERBOSE verbs. + (6) Added code to ignore CTRL-C signal. + (7) Modified vocab search to use a binary search. + + + 16 March 2016 Alan Cox +-------------- + + (1) Turned the database back into a file + (2) Removed some of the weird DOSism + (3) Removed the use of stdio + + This allows us to run it on Fuzix although it is a bit tight at the moment + and more optimisation is needed as is removing the rigid 80 column formatting + diff --git a/Applications/cave/itverb.c b/Applications/cave/itverb.c new file mode 100644 index 00000000..0ee42d21 --- /dev/null +++ b/Applications/cave/itverb.c @@ -0,0 +1,351 @@ + +/* ITVERB.C no mod for V 1.43 */ + +#include "advent.h" + +/* + Routines to process intransitive verbs +*/ +void itverb(void) +{ + switch (verb) { + case DROP: + case SAY: + case WAVE: + case CALM: + case RUB: + case THROW: + case FIND: + case FEED: + case BREAK: + case WAKE: + needobj(); + break; + case TAKE: + ivtake(); + break; + case OPEN: + case LOCK: + ivopen(); + break; + case NOTHING: + rspeak(54); + break; + case ON: + case OFF: + case POUR: + trverb(); + break; + case WALK: + actspk(verb); + break; + case KILL: + ivkill(); + break; + +#if 0 + case EAT: + iveat(); + break; + +#endif /* */ + case DRINK: + ivdrink(); + break; + case QUIT: + ivquit(); + break; + +#if 0 + case FILL: + ivfill(); + break; + +#endif /* */ + case BLAST: + vblast(); + break; + case SCORE: + score(); + break; + case FOO: + ivfoo(); + break; + case SUSPEND: + saveflg = 1; + break; + case INVENTORY: + inventory(); + break; + case SAVE: + saveadv(); + describe(); + descitem(); + break; + case RESTORE: + restore(); + describe(); + descitem(); + break; + case BRIEF: + case VERBOSE: + brief_sw = (BRIEF == verb); + rspeak(54); + break; + default: + writes("This intransitive not implemented yet\n"); + } + return; +} + + +/* + CARRY, TAKE etc. +*/ +void ivtake(void) +{ + auto short anobj, item; + anobj = 0; + for (item = 1; item < MAXOBJ; ++item) { + if (place[item] == loc) { + if (anobj != 0) { + needobj(); + return; + } + anobj = item; + } + } + if (anobj == 0 || (dcheck() && dflag >= 2)) { + needobj(); + return; + } + object = anobj; + vtake(); + return; +} + + +/* + OPEN, LOCK, UNLOCK +*/ +void ivopen(void) +{ + if (here(CLAM)) + object = CLAM; + if (here(OYSTER)) + object = OYSTER; + if (at(DOOR)) + object = DOOR; + if (at(GRATE)) + object = GRATE; + if (here(CHAIN)) { + if (object != 0) { + needobj(); + return; + } + object = CHAIN; + } + if (object == 0) { + rspeak(28); + return; + } + vopen(); + return; +} + + +/* + ATTACK, KILL etc +*/ +void ivkill(void) +{ + object1 = 0; + if (dcheck() && dflag >= 2) + object = DWARF; + if (here(SNAKE)) + addobj(SNAKE); + if (at(DRAGON) && prop[DRAGON] == 0) + addobj(DRAGON); + if (at(TROLL)) + addobj(TROLL); + if (here(BEAR) && prop[BEAR] == 0) + addobj(BEAR); + if (object1 != 0) { + needobj(); + return; + } + if (object != 0) { + vkill(); + return; + } + if (here(BIRD) && verb != THROW) + object = BIRD; + if (here(CLAM) || here(OYSTER)) + addobj(CLAM); + if (object1 != 0) { + needobj(); + return; + } + vkill(); + return; +} + + +/* + EAT +*/ +void iveat(void) +{ + if (!here(FOOD)) + needobj(); + + else { + object = FOOD; + veat(); + } + return; +} + + +/* + DRINK +*/ +void ivdrink(void) +{ + if (liqloc(loc) != WATER && (liq() != WATER || !here(BOTTLE))) + needobj(); + + else { + object = WATER; + vdrink(); + } + return; +} + + +/* + QUIT +*/ +void ivquit(void) +{ + if (gaveup = yes(22, 54, 54)) + normend(); + return; +} + + +/* + FILL +*/ +void ivfill(void) +{ + if (!here(BOTTLE)) + needobj(); + + else { + object = BOTTLE; + vfill(); + } + return; +} + + +/* + Handle fee fie foe foo... +*/ +void ivfoo(void) +{ + auto short k, msg; + k = vocab(word1, 3000); + msg = 42; + if (foobar != 1 - k) { + if (foobar != 0) + msg = 151; + rspeak(msg); + return; + } + foobar = k; + if (k != 4) + return; + foobar = 0; + if (place[EGGS] == 92 || (toting(EGGS) && loc == 92)) { + rspeak(msg); + return; + } + if (place[EGGS] == 0 && place[TROLL] == 0 && prop[TROLL] == 0) + prop[TROLL] = 1; + if (here(EGGS)) + k = 1; + + else { + if (loc == 92) + k = 0; + + else + k = 2; + } + move(EGGS, 92); + pspeak(EGGS, k); + return; +} + + +/* + read etc... +*/ +void ivread(void) +{ + if (here(MAGAZINE)) + object = MAGAZINE; + if (here(TABLET)) + object = object * 100 + TABLET; + if (here(MESSAGE)) + object = object * 100 + MESSAGE; + if (object > 100 || object == 0 || dark()) { + needobj(); + return; + } + vread(); + return; +} + + +/* + INVENTORY +*/ +void inventory(void) +{ + auto short msg; + auto short i; + msg = 98; + for (i = 1; i <= MAXOBJ; ++i) { + if (i == BEAR || !toting(i)) + continue; + if (msg) + rspeak(99); + msg = 0; + pspeak(i, -1); + } + if (toting(BEAR)) + msg = 141; + if (msg) + rspeak(msg); + return; +} + + +/* + ensure uniqueness as objects are searched + out for an intransitive verb +*/ +void addobj(short obj) +{ + if (object1 != 0) + return; + if (object != 0) { + object1 = -1; + return; + } + object = obj; + return; +} diff --git a/Applications/cave/lib.c b/Applications/cave/lib.c new file mode 100644 index 00000000..cd8edb15 --- /dev/null +++ b/Applications/cave/lib.c @@ -0,0 +1,44 @@ +/* + * Stdio avoidance library + */ + +#include "advent.h" + +void nl(void) +{ + write(1, "\n", 1); +} + +void writes(const char *p) +{ + write(1, p, strlen(p)); +} + +void getinp(char *p, int l) +{ + char *ep = p + l - 1; + int e; + while ((e = read(0, p, 1)) == 1) { + if (*p == '\n') { + *p = 0; + return; + } + if (p < ep) + p++; + } + if (e || !isatty(0)) + exit(1); + *p = 0; + return; +} + +void writei(uint16_t v) +{ +#ifdef __linux__ + char buf[16]; + sprintf(buf, "%d", (unsigned int) v); + writes(buf); +#else + writes(_itoa(v)); +#endif +} diff --git a/Applications/cave/saveadv.c b/Applications/cave/saveadv.c new file mode 100644 index 00000000..44d9621d --- /dev/null +++ b/Applications/cave/saveadv.c @@ -0,0 +1,34 @@ + + /* SAVEADV.C no mods for V 1.43 + * + * Modified calls of fcreat() to call fopen() with a mode setting of write. + * Modified close() call to use fclose() and removed call to fflush(). + * Cahnged "savefd" from and int to pointer to FILE. -- Eco-C88 V2.72 -- BW + */ + +#include "advent.h" +void saveadv(void) +{ + auto int savefd; + auto char username[64]; + writes("What do you want to call the saved game? "); + getinp(username, 64); + if (*username == 0) + return; + writes("Opening save file \""); + writes(username); + writes("\".\n"); + if ((savefd = open(username, O_WRONLY | O_CREAT | O_TRUNC, 0600)) == -1) { + writes("Sorry, I can't open the file...\n"); + return; + } + if (write(savefd, (char *) &turns, (char *) &lastglob - (char *) &turns) != (char *) &lastglob - (char *) &turns) { + writes("write error on save file...\n"); + return; + } + if (close(savefd) == -1) { + writes("can't close save file...\n"); + return; + } + writes("Game saved.\n\n"); +} diff --git a/Applications/cave/turn.c b/Applications/cave/turn.c new file mode 100644 index 00000000..af5b1a49 --- /dev/null +++ b/Applications/cave/turn.c @@ -0,0 +1,884 @@ + + /* TURN.C no mods for V 1.43 + * + * Modified all calls of rand() to irand() for Eco-C88 (BW) + */ + +#include "advent.h" + +/* + Routine to take 1 turn +*/ +void turn(void) +{ + auto short i; + + /* if closing, then he can't leave except via the main office. */ + if (newloc < 9 && newloc != 0 && closing) { + rspeak(130); + newloc = loc; + if (!panic) + clock2 = 15; + panic = 1; + } + + /* see if a dwarf has seen him and has come from where he wants to go. */ + if (newloc != loc && !forced(loc) && cond[loc] & NOPIRAT == 0) { + for (i = 1; i < (DWARFMAX - 1); ++i) + if (odloc[i] == newloc && dseen[i]) { + newloc = loc; + rspeak(2); + break; + } + } + dwarves(); + + /* on to the regular move. */ + if (loc != newloc) { + ++turns; + loc = newloc; + + /* check for death */ + if (loc == 0) { + death(); + return; + } + + /* check for forced move */ + if (forced(loc)) { + describe(); + domove(); + return; + } + + /* check for wandering in dark */ + if (wzdark && dark() && pct(35)) { + rspeak(23); + oldloc2 = loc; + death(); + return; + } + + /* describe his situation */ + describe(); + if (!dark()) { + ++visited[loc]; + descitem(); + } + } + if (closed) { + if (prop[OYSTER] < 0 && toting(OYSTER)) + pspeak(OYSTER, 1); + for (i = 1; i <= MAXOBJ; ++i) { + if (toting(i) && prop[i] < 0) + prop[i] = -1 - prop[i]; + } + } + wzdark = dark(); + if (knfloc > 0 && knfloc != loc) + knfloc = 0; + + /* run the timer routine */ + if (stimer()) + return; + + /* ask what he wants to do */ + /* debug */ +#ifdef DEBUG + if (dbgflg) + printf("Your current location is %d\n", loc); +#endif /* */ + while (!english()); + + /* act on his instructions */ + if (motion) + domove(); + + else { + if (object) + doobj(); + + else + itverb(); + } + return; +} + + +/* + Routine to describe current location +*/ +void describe(void) +{ + if (toting(BEAR)) + rspeak(141); + if (dark()) + rspeak(16); + + else { + if (visited[loc] && brief_sw) + descsh(loc); + + else + desclg(loc); + } + if (loc == 33 && pct(25) && !closing) + rspeak(8); + return; +} + + +/* + Routine to describe visible items +*/ +void descitem(void) +{ + auto short i, state; + for (i = 1; i < MAXOBJ; ++i) { + if (at(i)) { + if (i == STEPS && toting(NUGGET)) + continue; + if (prop[i] < 0) { + if (closed) + continue; + + else { + prop[i] = 0; + if (i == RUG || i == CHAIN) + ++prop[i]; + --tally; + } + } + if (i == STEPS && loc == fixed[STEPS]) + state = 1; + + else + state = prop[i]; + pspeak(i, state); + } + } + if (tally == tally2 && tally != 0 && limit > 35) + limit = 35; + return; +} + + +/* + Routine to handle motion requests +*/ +void domove(void) +{ + gettrav(loc); + switch (motion) { + case NULLX: + break; + case BACK: + goback(); + break; + case LOOK: + if (detail++ < 3) + rspeak(15); + wzdark = 0; + visited[loc] = 0; + newloc = loc; + loc = 0; + break; + case CAVE: + if (loc < 8) + rspeak(57); + + else + rspeak(58); + break; + default: + oldloc2 = oldloc; + oldloc = loc; + dotrav(); + loc = 0; /* Modified BW 09/28/85 */ + } + return; +} + + +/* + Routine to handle request to return + from whence we came! +*/ +void goback(void) +{ + auto short kk, k2, want, temp; + auto TRAV *pSavTrav; + auto short sSavCnt; + if (forced(oldloc)) + want = oldloc2; + + else + want = oldloc; + oldloc2 = oldloc; + oldloc = loc; + k2 = 0; + if (want == loc) { + rspeak(91); + return; + } + pSavTrav = pTravel; + sSavCnt = sTravCnt; + for (kk = 0; kk < sTravCnt; ++kk) { + if (!pTravel[kk].tcond && pTravel[kk].tdest == want) { + motion = pTravel[kk].tverb; + dotrav(); + return; + } + if (!pTravel[kk].tcond) { + k2 = kk; + temp = pTravel[kk].tdest; + gettrav(temp); + if (forced(temp) && pTravel[0].tdest == want) + k2 = temp; + pTravel = pSavTrav; + sTravCnt = sSavCnt; + } + } + if (k2) { + motion = pTravel[k2].tverb; + dotrav(); + } + + else + rspeak(140); + return; +} + + +/* + Routine to figure out a new location + given current location and a motion. +*/ +void dotrav(void) +{ + auto short mvflag, hitflag, kk; + auto short rdest, rverb, rcond, robject; + auto short pctt; + newloc = loc; + mvflag = hitflag = 0; + pctt = rand() % 100; + for (kk = 0; kk < sTravCnt && !mvflag; ++kk) { + rdest = pTravel[kk].tdest; + rverb = pTravel[kk].tverb; + rcond = pTravel[kk].tcond; + robject = rcond % 100; + if (rverb != 1 && rverb != motion && !hitflag) + continue; + ++hitflag; + switch (rcond / 100) { + case 0: + if (rcond == 0 || pctt < rcond) + ++mvflag; + + /* debug */ +#ifdef DEBUG + if (rcond && dbgflg) + printf("\% move %d %d\n", pctt, mvflag); + +#endif /* */ + break; + case 1: + if (robject == 0) + ++mvflag; + + else { + if (toting(robject)) + ++mvflag; + } + break; + case 2: + if (toting(robject) || at(robject)) + ++mvflag; + break; + case 3: + case 4: + case 5: + case 7: + if (prop[robject] != (rcond / 100) - 3) + ++mvflag; + break; + default: + bug(37); + } + } + if (!mvflag) + badmove(); + + else { + if (rdest > 500) + rspeak(rdest - 500); + + else { + if (rdest > 300) + spcmove(rdest); + + else + newloc = rdest; + } + } + return; +} + + +/* + The player tried a poor move option. +*/ +void badmove(void) +{ + auto short msg; + msg = 12; + if (motion >= 43 && motion <= 50) + msg = 9; + if (motion == 29 || motion == 30) + msg = 9; + if (motion == 7 || motion == 36 || motion == 37) + msg = 10; + if (motion == 11 || motion == 19) + msg = 11; + if (verb == FIND || verb == INVENTORY) + msg = 59; + if (motion == 62 || motion == 65) + msg = 42; + if (motion == 17) + msg = 80; + rspeak(msg); + return; +} + + +/* + Routine to handle very special movement. +*/ +void spcmove(short rdest) +{ + switch (rdest - 300) { + case 1: /* plover movement via alcove */ + if (!holding || (holding == 1 && toting(EMERALD))) + newloc = (99 + 100) - loc; + + else + rspeak(117); + break; + case 2: /* trying to remove plover, bad route */ + drop(EMERALD, loc); + break; + case 3: /* troll bridge */ + if (prop[TROLL] == 1) { + pspeak(TROLL, 1); + prop[TROLL] = 0; + move(TROLL2, 0); + move((TROLL2 + MAXOBJ), 0); + move(TROLL, 117); + move((TROLL + MAXOBJ), 122); + juggle(CHASM); + newloc = loc; + } + + else { + newloc = (loc == 117 ? 122 : 117); + if (prop[TROLL] == 0) + ++prop[TROLL]; + if (!toting(BEAR)) + return; + rspeak(162); + prop[CHASM] = 1; + prop[TROLL] = 2; + drop(BEAR, newloc); + fixed[BEAR] = -1; + prop[BEAR] = 3; + if (prop[SPICES] < 0) + ++tally2; + oldloc2 = newloc; + death(); + } + break; + default: + bug(38); + } + return; +} + + +/* + Routine to handle player's demise via + waking up the dwarves... +*/ +void dwarfend(void) +{ + death(); + normend(); /* no return from here */ +} + +/* + normal end of game +*/ +void normend(void) +{ + score(); + exit(1); +} + +/* + scoring +*/ +void score(void) +{ + auto short t, i, k, s; + s = t = 0; + for (i = 50; i <= MAXTRS; ++i) { + if (i == CHEST) + k = 14; + + else + k = i > CHEST ? 16 : 12; + if (prop[i] >= 0) + t += 2; + if (place[i] == 3 && prop[i] == 0) + t += k - 2; + } + writes("Treasures "); + writei(s = t); + t = (MAXDIE - numdie) * 10; + if (t) { + writes("\nSurvival "); + writei(t); + } + s += t; + if (!gaveup) + s += 4; + t = dflag ? 25 : 0; + if (t) { + writes("\nGetting well in: "); + writei(t); + } + s += t; + t = closing ? 25 : 0; + if (t) { + writes("\nMasters section: "); + writei(t); + } + s += t; + if (closed) { + if (bonus == 0) + t = 10; + + else { + if (bonus == 135) + t = 25; + + else { + if (bonus == 134) + t = 30; + + else { + if (bonus == 133) + t = 45; + } + } + } + writes("\nBonus "); + writei(t); + s += t; + } + if (place[MAGAZINE] == 108) + s += 1; + s += 2; + writes("\nScore: "); + writei(s); + nl(); + return; +} + + +/* + Routine to handle the passing on of one + of the player's incarnations... +*/ +void death(void) +{ + auto short yea, i, j; + if (!closing) { + yea = yes(81 + numdie * 2, 82 + numdie * 2, 54); + if (++numdie >= MAXDIE || !yea) + normend(); + place[WATER] = 0; + place[OIL] = 0; + if (toting(LAMP)) + prop[LAMP] = 0; + for (j = 1; j < 101; ++j) { + i = 101 - j; + if (toting(i)) + drop(i, i == LAMP ? 1 : oldloc2); + } + newloc = 3; + oldloc = loc; + return; + } + + /* closing -- no resurrection... */ + rspeak(131); + ++numdie; + normend(); /* no return from here */ +} + + +/* + Routine to process an object. +*/ +void doobj(void) +{ + + /* is object here? if so, transitive */ + if (fixed[object] == loc || here(object)) + trobj(); + + /* did he give grate as destination? */ + else { + if (object == GRATE) { + if (loc == 1 || loc == 4 || loc == 7) { + motion = DEPRESSION; + domove(); + } + + else { + if (loc > 9 && loc < 15) { + motion = ENTRANCE; + domove(); + } + } + } + + /* is it a dwarf he is after? */ + else { + if (dcheck() && dflag >= 2) { + object = DWARF; + trobj(); + } + + /* is he trying to get/use a liquid? */ + else { + if ((liq() == object && here(BOTTLE)) || liqloc(loc) == object) + trobj(); + + else { + if (object == PLANT && at(PLANT2) && prop[PLANT2] == 0) { + object = PLANT2; + trobj(); + } + + /* is he trying to grab a knife? */ + else { + if (object == KNIFE && knfloc == loc) { + rspeak(116); + knfloc = -1; + } + + /* is he trying to get at dynamite? */ + else { + if (object == ROD && here(ROD2)) { + object = ROD2; + trobj(); + } + + else { + writes("I see no "); + writes(probj(object)); + writes(" here.\n"); + } + } + } + } + } + } + } + return; +} + +/* + Routine to process an object being + referred to. +*/ +void trobj(void) +{ + if (verb) + trverb(); + + else { + writes("What do you want to do with the "); + writes(probj(object)); + writes("?\n"); + } + return; +} + +/* + Routine to print word corresponding to object +*/ +char *probj(short object) +{ + auto short wtype, wval; + analyze(word1, &wtype, &wval); + return ((wtype == 1) ? word1 : word2); +} + +/* + dwarf stuff. +*/ +void dwarves(void) +{ + auto short i, j, k, try, attack, stick, dtotal; + + /* see if dwarves allowed here */ + if (newloc == 0 || forced(newloc) || cond[newloc] & NOPIRAT) + return; + + /* see if dwarves are active. */ + if (!dflag) { + if (newloc > 15) + ++dflag; + return; + } + + /* if first close encounter (of 3rd kind) kill 0, 1 or 2 */ + if (dflag == 1) { + if (newloc < 15 || pct(95)) + return; + ++dflag; + for (i = 1; i < 3; ++i) { + if (pct(50)) + dloc[rand() % 5 + 1] = 0; + } + for (i = 1; i < (DWARFMAX - 1); ++i) { + if (dloc[i] == newloc) + dloc[i] = daltloc; + odloc[i] = dloc[i]; + } + rspeak(3); + drop(AXE, newloc); + return; + } + dtotal = attack = stick = 0; + for (i = 1; i < DWARFMAX; ++i) { + if (dloc[i] == 0) + continue; + + /* move a dwarf at random. we don't have a matrix around to do it as + * in the original version... */ + for (try = 1; try < 20; ++try) { + j = rand() % 106 + 15; /* allowed area */ + if (j != odloc[i] && j != dloc[i] && !(i == (DWARFMAX - 1) && cond[j] & NOPIRAT == 1)) + break; + } + if (j == 0) + j = odloc[i]; + odloc[i] = dloc[i]; + dloc[i] = j; + if ((dseen[i] && newloc >= 15) || dloc[i] == newloc || odloc[i] == newloc) + dseen[i] = 1; + + else + dseen[i] = 0; + if (!dseen[i]) + continue; + dloc[i] = newloc; + if (i == 6) + dopirate(); + + else { + ++dtotal; + if (odloc[i] == dloc[i]) { + ++attack; + if (knfloc >= 0) + knfloc = newloc; + if (rand() % 1000 < 30 * (dflag - 2)) + ++stick; + } + } + } + if (dtotal == 0) + return; + if (dtotal > 1) { + writes("There are "); + writei(dtotal); + writes(" threatening little dwarves in the room with you!\n"); + } else + rspeak(4); + if (attack == 0) + return; + if (dflag == 2) + ++dflag; + if (attack > 1) { + writei(attack); + writes(" of them throw knives at you!!\n"); + k = 6; + } + + else { + rspeak(5); + k = 52; + } + if (stick <= 1) { + rspeak(stick + k); + if (stick == 0) + return; + } + + else { + writei(stick); + writes(" of them get you !!!\n"); + } + oldloc2 = newloc; + death(); + return; +} + +/* + pirate stuff +*/ +void dopirate(void) +{ + auto short j, k; + if (newloc == chloc || prop[CHEST] >= 0) + return; + k = 0; + for (j = 50; j <= MAXTRS; ++j) + if (j != PYRAMID || (newloc != place[PYRAMID] && newloc != place[EMERALD])) { + if (toting(j)) + goto stealit; + if (here(j)) + ++k; + } + if (tally == tally2 + 1 && k == 0 && place[CHEST] == 0 && here(LAMP) && prop[LAMP] == 1) { + rspeak(186); + move(CHEST, chloc); + move(MESSAGE, chloc2); + dloc[6] = chloc; + odloc[6] = chloc; + dseen[6] = 0; + return; + } + if (odloc[6] != dloc[6] && pct(20)) { + rspeak(127); + return; + } + return; + stealit:rspeak(128); + if (place[MESSAGE] == 0) + move(CHEST, chloc); + move(MESSAGE, chloc2); + for (j = 50; j <= MAXTRS; ++j) { + if (j == PYRAMID && (newloc == place[PYRAMID] || newloc == place[EMERALD])) + continue; + if (at(j) && fixed[j] == 0) + carry(j, newloc); + if (toting(j)) + drop(j, chloc); + } + dloc[6] = chloc; + odloc[6] = chloc; + dseen[6] = 0; + return; +} + +/* + special time limit stuff... +*/ +uint8_t stimer(void) +{ + register short i; + foobar = foobar > 0 ? -foobar : 0; + if (tally == 0 && loc >= 15 && loc != 33) + --clock1; + if (clock1 == 0) { + + /* start closing the cave */ + prop[GRATE] = 0; + prop[FISSURE] = 0; + for (i = 1; i < DWARFMAX; ++i) + dseen[i] = 0; + move(TROLL, 0); + move((TROLL + MAXOBJ), 0); + move(TROLL2, 117); + move((TROLL2 + MAXOBJ), 122); + juggle(CHASM); + if (prop[BEAR] != 3) + dstroy(BEAR); + prop[CHAIN] = 0; + fixed[CHAIN] = 0; + prop[AXE] = 0; + fixed[AXE] = 0; + rspeak(129); + clock1 = -1; + closing = 1; + return (FALSE); + } + if (clock1 < 0) + --clock2; + if (clock2 == 0) { + + /* set up storage room... and close the cave... */ + prop[BOTTLE] = put(BOTTLE, 115, 1); + prop[PLANT] = put(PLANT, 115, 0); + prop[OYSTER] = put(OYSTER, 115, 0); + prop[LAMP] = put(LAMP, 115, 0); + prop[ROD] = put(ROD, 115, 0); + prop[DWARF] = put(DWARF, 115, 0); + loc = 115; + oldloc = 115; + newloc = 115; + put(GRATE, 116, 0); + prop[SNAKE] = put(SNAKE, 116, 1); + prop[BIRD] = put(BIRD, 116, 1); + prop[CAGE] = put(CAGE, 116, 0); + prop[ROD2] = put(ROD2, 116, 0); + prop[PILLOW] = put(PILLOW, 116, 0); + prop[MIRROR] = put(MIRROR, 115, 0); + fixed[MIRROR] = 116; + for (i = 1; i <= MAXOBJ; ++i) + if (toting(i)) + dstroy(i); + rspeak(132); + closed = 1; + return (TRUE); + } + if (prop[LAMP] == 1) + --limit; + if (limit <= 30 && here(BATTERIES) && prop[BATTERIES] == 0 && here(LAMP)) { + rspeak(188); + prop[BATTERIES] = 1; + if (toting(BATTERIES)) + drop(BATTERIES, loc); + limit += 2500; + lmwarn = 0; + return (FALSE); + } + if (limit == 0) { + --limit; + prop[LAMP] = 0; + if (here(LAMP)) + rspeak(184); + return (FALSE); + } + if (limit < 0 && loc <= 8) { + rspeak(185); + gaveup = 1; + normend(); + } + if (limit <= 30) { + if (lmwarn || !here(LAMP)) + return (FALSE); + lmwarn = 1; + i = 187; + if (place[BATTERIES] == 0) + i = 183; + if (prop[BATTERIES] == 1) + i = 189; + rspeak(i); + } + return (FALSE); +} diff --git a/Applications/cave/verb.c b/Applications/cave/verb.c new file mode 100644 index 00000000..4bb74433 --- /dev/null +++ b/Applications/cave/verb.c @@ -0,0 +1,989 @@ + + /* VERB.C no mods for V 1.43 */ + +#include "advent.h" + +/* + Routine to process a transitive verb +*/ +void trverb(void) +{ + switch (verb) { + case CALM: + case WALK: + case QUIT: + case SCORE: + case FOO: + case BRIEF: + case SUSPEND: + case HOURS: + case LOG: + actspk(verb); + break; + case TAKE: + vtake(); + break; + case DROP: + vdrop(); + break; + case OPEN: + case LOCK: + vopen(); + break; + case SAY: + vsay(); + break; + case NOTHING: + rspeak(54); + break; + case ON: + von(); + break; + case OFF: + voff(); + break; + case WAVE: + vwave(); + break; + case KILL: + vkill(); + break; + case POUR: + vpour(); + break; + case EAT: + veat(); + break; + case DRINK: + vdrink(); + break; + case RUB: + if (object != LAMP) + rspeak(76); + + else + actspk(RUB); + break; + case THROW: + vthrow(); + break; + case FEED: + vfeed(); + break; + case FIND: + case INVENTORY: + vfind(); + break; + case FILL: + vfill(); + break; + case READ: + vread(); + break; + case BLAST: + vblast(); + break; + case BREAK: + vbreak(); + break; + case WAKE: + vwake(); + break; + case SAVE: + saveadv(); + describe(); + descitem(); + break; + case RESTORE: + restore(); + describe(); + descitem(); + break; + default: + writes("This verb is not implemented yet.\n"); + } + return; +} + + +/* + CARRY TAKE etc. +*/ +void vtake(void) +{ + auto short msg; + auto short i; + if (toting(object)) { + actspk(verb); + return; + } + + /* special case objects and fixed objects */ + msg = 25; + if (object == PLANT && prop[PLANT] <= 0) + msg = 115; + if (object == BEAR && prop[BEAR] == 1) + msg = 169; + if (object == CHAIN && prop[BEAR] != 0) + msg = 170; + if (fixed[object]) { + rspeak(msg); + return; + } + + /* special case for liquids */ + if (object == WATER || object == OIL) { + if (!here(BOTTLE) || liq() != object) { + object = BOTTLE; + if (toting(BOTTLE) && prop[BOTTLE] == 1) { + vfill(); + return; + } + if (prop[BOTTLE] != 1) + msg = 105; + if (!toting(BOTTLE)) + msg = 104; + rspeak(msg); + return; + } + object = BOTTLE; + } + if (holding >= 7) { + rspeak(92); + return; + } + + /* special case for bird. */ + if (object == BIRD && prop[BIRD] == 0) { + if (toting(ROD)) { + rspeak(26); + return; + } + if (!toting(CAGE)) { + rspeak(27); + return; + } + prop[BIRD] = 1; + } + if ((object == BIRD || object == CAGE) && prop[BIRD] != 0) + carry((BIRD + CAGE) - object, loc); + carry(object, loc); + + /* handle liquid in bottle */ + i = liq(); + if (object == BOTTLE && i != 0) + place[i] = -1; + rspeak(54); + return; +} + + +/* + DROP etc. +*/ +void vdrop(void) +{ + auto short i; + + /* check for dynamite */ + if (toting(ROD2) && object == ROD && !toting(ROD)) + object = ROD2; + if (!toting(object)) { + actspk(verb); + return; + } + + /* snake and bird */ + if (object == BIRD && here(SNAKE)) { + rspeak(30); + if (closed) + dwarfend(); + dstroy(SNAKE); + prop[SNAKE] = -1; + } + + else { /* coins and vending machine */ + + if (object == COINS && here(VEND)) { + dstroy(COINS); + drop(BATTERIES, loc); + pspeak(BATTERIES, 0); + return; + } + + else { /* bird and dragon (ouch!!) */ + + if (object == BIRD && at(DRAGON) && prop[DRAGON] == 0) { + rspeak(154); + dstroy(BIRD); + prop[BIRD] = 0; + if (place[SNAKE] != 0) + ++tally2; + return; + } + } + } + + /* Bear and troll */ + if (object == BEAR && at(TROLL)) { + rspeak(163); + move(TROLL, 0); + move((TROLL + MAXOBJ), 0); + move(TROLL2, 117); + move((TROLL2 + MAXOBJ), 122); + juggle(CHASM); + prop[TROLL] = 2; + } + + else { /* vase */ + + if (object == VASE) { + if (loc == 96) + rspeak(54); + + else { + prop[VASE] = at(PILLOW) ? 0 : 2; + pspeak(VASE, prop[VASE] + 1); + if (prop[VASE] != 0) + fixed[VASE] = -1; + } + } + } + + /* handle liquid and bottle */ + i = liq(); + if (i == object) + object = BOTTLE; + if (object == BOTTLE && i != 0) + place[i] = 0; + + /* handle bird and cage */ + if (object == CAGE && prop[BIRD] != 0) + drop(BIRD, loc); + if (object == BIRD) + prop[BIRD] = 0; + drop(object, loc); + return; +} + + +/* + LOCK, UNLOCK, OPEN, CLOSE etc. +*/ +void vopen(void) +{ + auto short msg, oyclam; + switch (object) { + case CLAM: + case OYSTER: + oyclam = (object == OYSTER ? 1 : 0); + if (verb == LOCK) + msg = 61; + + else { + if (!toting(TRIDENT)) + msg = 122 + oyclam; + + else { + if (toting(object)) + msg = 120 + oyclam; + + else { + msg = 124 + oyclam; + dstroy(CLAM); + drop(OYSTER, loc); + drop(PEARL, 105); + } + } + } + break; + case DOOR: + msg = (prop[DOOR] == 1 ? 54 : 111); + break; + case CAGE: + msg = 32; + break; + case KEYS: + msg = 55; + break; + case CHAIN: + if (!here(KEYS)) + msg = 31; + + else { + if (verb == LOCK) { + if (prop[CHAIN] != 0) + msg = 34; + + else if (loc != 130) + msg = 173; + + else { + prop[CHAIN] = 2; + if (toting(CHAIN)) + drop(CHAIN, loc); + fixed[CHAIN] = -1; + msg = 172; + } + } + + else { + if (prop[BEAR] == 0) + msg = 41; + + else { + if (prop[CHAIN] == 0) + msg = 37; + + else { + prop[CHAIN] = 0; + fixed[CHAIN] = 0; + if (prop[BEAR] != 3) + prop[BEAR] = 2; + fixed[BEAR] = 2 - prop[BEAR]; + msg = 171; + } + } + } + } + break; + case GRATE: + if (!here(KEYS)) + msg = 31; + + else { + if (closing) { + if (!panic) { + clock2 = 15; + ++panic; + } + msg = 130; + } + + else { + msg = 34 + prop[GRATE]; + prop[GRATE] = (verb == LOCK ? 0 : 1); + msg += 2 * prop[GRATE]; + } + } + break; + default: + msg = 33; + } + rspeak(msg); + return; +} + + +/* + SAY etc. +*/ +void vsay(void) +{ + auto short wtype, wval; + analyze(word1, &wtype, &wval); + writes("Okay.\n"); + writes(wval == SAY ? word2 : word1); + nl(); + return; +} + + +/* + ON etc. +*/ +void von(void) +{ + if (!here(LAMP)) + actspk(verb); + + else { + if (limit < 0) + rspeak(184); + + else { + prop[LAMP] = 1; + rspeak(39); + if (wzdark) { + wzdark = 0; + describe(); + descitem(); + } + } + } + return; +} + + +/* + OFF etc. +*/ +void voff(void) +{ + if (!here(LAMP)) + actspk(verb); + + else { + prop[LAMP] = 0; + rspeak(40); + } + return; +} + + +/* + WAVE etc. +*/ +void vwave(void) +{ + if (!toting(object) && (object != ROD || !toting(ROD2))) + rspeak(29); + + else { + if (object != ROD || !at(FISSURE) || !toting(object) || closing) + actspk(verb); + + else { + prop[FISSURE] = 1 - prop[FISSURE]; + pspeak(FISSURE, 2 - prop[FISSURE]); + } + } +} + + +/* + ATTACK, KILL etc. +*/ +void vkill(void) +{ + auto short msg; + auto short i; + switch (object) { + case BIRD: + if (closed) + msg = 137; + + else { + dstroy(BIRD); + prop[BIRD] = 0; + if (place[SNAKE] == 19) + ++tally2; + msg = 45; + } + break; + case 0: + msg = 44; + break; + case CLAM: + case OYSTER: + msg = 150; + break; + case SNAKE: + msg = 46; + break; + case DWARF: + if (closed) + dwarfend(); + msg = 49; + break; + case TROLL: + msg = 157; + break; + case BEAR: + msg = 165 + (prop[BEAR] + 1) / 2; + break; + case DRAGON: + if (prop[DRAGON] != 0) { + msg = 167; + break; + } + if (!yes(49, 0, 0)) + break; + pspeak(DRAGON, 1); + prop[DRAGON] = 2; + prop[RUG] = 0; + move((DRAGON + MAXOBJ), -1); + move((RUG + MAXOBJ), 0); + move(DRAGON, 120); + move(RUG, 120); + for (i = 1; i < MAXOBJ; ++i) + if (place[i] == 119 || place[i] == 121) + move(i, 120); + newloc = 120; + return; + default: + actspk(verb); + return; + } + rspeak(msg); +} + + +/* + POUR +*/ +void vpour(void) +{ + if (object == BOTTLE || object == 0) + object = liq(); + if (object == 0) { + needobj(); + return; + } + if (!toting(object)) { + actspk(verb); + return; + } + if (object != OIL && object != WATER) { + rspeak(78); + return; + } + prop[BOTTLE] = 1; + place[object] = 0; + if (at(PLANT)) { + if (object != WATER) + rspeak(112); + + else { + pspeak(PLANT, prop[PLANT] + 1); + prop[PLANT] = (prop[PLANT] + 2) % 6; + prop[PLANT2] = prop[PLANT] / 2; + describe(); + } + } + + else { + if (at(DOOR)) { + prop[DOOR] = (object == OIL ? 1 : 0); + rspeak(113 + prop[DOOR]); + } + + else + rspeak(77); + } + return; +} + + +/* + EAT +*/ +void veat(void) +{ + auto short msg; + switch (object) { + case FOOD: + dstroy(FOOD); + msg = 72; + break; + case BIRD: + case SNAKE: + case CLAM: + case OYSTER: + case DWARF: + case DRAGON: + case TROLL: + case BEAR: + msg = 71; + break; + default: + actspk(verb); + return; + } + rspeak(msg); + return; +} + + +/* + DRINK +*/ +void vdrink(void) +{ + if (object != WATER) + rspeak(110); + + else { + if (liq() != WATER || !here(BOTTLE)) + actspk(verb); + + else { + prop[BOTTLE] = 1; + place[WATER] = 0; + rspeak(74); + } + } + return; +} + + +/* + THROW etc. +*/ +void vthrow(void) +{ + auto short msg; + auto short i; + if (toting(ROD2) && object == ROD && !toting(ROD)) + object = ROD2; + if (!toting(object)) { + actspk(verb); + return; + } + + /* treasure to troll */ + if (at(TROLL) && object >= 50 && object < MAXOBJ) { + rspeak(159); + drop(object, 0); + move(TROLL, 0); + move((TROLL + MAXOBJ), 0); + drop(TROLL2, 117); + drop((TROLL2 + MAXOBJ), 122); + juggle(CHASM); + return; + } + + /* feed the bears... */ + if (object == FOOD && here(BEAR)) { + object = BEAR; + vfeed(); + return; + } + + /* if not axe, same as drop... */ + if (object != AXE) { + vdrop(); + return; + } + + /* AXE is THROWN */ + /* at a dwarf... */ + if (i = dcheck()) { + msg = 48; + if (pct(33)) { + dseen[i] = dloc[i] = 0; + msg = 47; + ++dkill; + if (dkill == 1) + msg = 149; + } + } + + else { /* at a dragon... */ + + if (at(DRAGON) && prop[DRAGON] == 0) + msg = 152; + + else { /* at the troll... */ + + if (at(TROLL)) + msg = 158; + + else { /* at the bear... */ + + if (here(BEAR) && prop[BEAR] == 0) { + rspeak(164); + drop(AXE, loc); + fixed[AXE] = -1; + prop[AXE] = 1; + juggle(BEAR); + return; + } + + else { /* otherwise it is an attack */ + + verb = KILL; + object = 0; + itverb(); + return; + } + } + } + } + + /* handle the left over axe... */ + rspeak(msg); + drop(AXE, loc); + describe(); + return; +} + + +/* + INVENTORY, FIND etc. +*/ +void vfind(void) +{ + auto short msg; + if (toting(object)) + msg = 24; + + else { + if (closed) + msg = 138; + + else { + if (dcheck() && dflag >= 2 && object == DWARF) + msg = 94; + + else { + if (at(object) || (liq() == object && here(BOTTLE)) || object == liqloc(loc)) + msg = 94; + + else { + actspk(verb); + return; + } + } + } + } + rspeak(msg); + return; +} + + +/* + FILL +*/ +void vfill(void) +{ + auto short msg; + auto short i; + switch (object) { + case BOTTLE: + if (liq() != 0) + msg = 105; + + else { + if (liqloc(loc) == 0) + msg = 106; + + else { + prop[BOTTLE] = cond[loc] & WATOIL; + i = liq(); + if (toting(BOTTLE)) + place[i] = -1; + msg = (i == OIL ? 108 : 107); + } + } + break; + case VASE: + if (liqloc(loc) == 0) { + msg = 144; + break; + } + if (!toting(VASE)) { + msg = 29; + break; + } + rspeak(145); + vdrop(); + return; + default: + msg = 29; + } + rspeak(msg); +} + + +/* + FEED +*/ +void vfeed(void) +{ + auto short msg; + switch (object) { + case BIRD: + msg = 100; + break; + case DWARF: + if (!here(FOOD)) { + actspk(verb); + return; + } + ++dflag; + msg = 103; + break; + case BEAR: + if (!here(FOOD)) { + if (prop[BEAR] == 0) + msg = 102; + + else { + if (prop[BEAR] == 3) + msg = 110; + + else { + actspk(verb); + return; + } + } + break; + } + dstroy(FOOD); + prop[BEAR] = 1; + fixed[AXE] = 0; + prop[AXE] = 0; + msg = 168; + break; + case DRAGON: + msg = (prop[DRAGON] != 0 ? 110 : 102); + break; + case TROLL: + msg = 182; + break; + case SNAKE: + if (closed || !here(BIRD)) { + msg = 102; + break; + } + msg = 101; + dstroy(BIRD); + prop[BIRD] = 0; + ++tally2; + break; + default: + msg = 14; + } + rspeak(msg); +} + + +/* + READ etc. +*/ +void vread(void) +{ + auto short msg; + msg = 0; + if (dark()) { + writes("I see no "); + writes(probj(object)); + writes(" here.\n"); + return; + } + switch (object) { + case MAGAZINE: + msg = 190; + break; + case TABLET: + msg = 196; + break; + case MESSAGE: + msg = 191; + break; + case OYSTER: + if (!toting(OYSTER) || !closed) + break; + yes(192, 193, 54); + return; + default: + ; + } + if (msg) + rspeak(msg); + + else + actspk(verb); + return; +} + + +/* + BLAST etc. +*/ +void vblast(void) +{ + if (prop[ROD2] < 0 || !closed) + actspk(verb); + + else { + bonus = 133; + if (loc == 115) + bonus = 134; + if (here(ROD2)) + bonus = 135; + rspeak(bonus); + normend(); + } + return; +} + + +/* + BREAK etc. +*/ +void vbreak(void) +{ + auto short msg; + if (object == MIRROR) { + msg = 148; + if (closed) { + rspeak(197); + dwarfend(); + } + } + + else { + if (object == VASE && prop[VASE] == 0) { + msg = 198; + if (toting(VASE)) + drop(VASE, loc); + prop[VASE] = 2; + fixed[VASE] = -1; + } + + else { + actspk(verb); + return; + } + } + rspeak(msg); + return; +} + + +/* + WAKE etc. +*/ +void vwake(void) +{ + if (object != DWARF || !closed) + actspk(verb); + + else { + rspeak(199); + dwarfend(); + } + return; +} + + +/* + Routine to speak default verb message +*/ +void actspk(short verb) +{ + auto short i; + if (verb < 1 || verb > 31) + bug(39); + i = actmsg[verb]; + if (i) + rspeak(i); + return; +} + + +/* + Routine to indicate no reasonable + object for verb found. Used mostly by + intransitive verbs. +*/ +void needobj(void) +{ + auto short wtype, wval; + analyze(word1, &wtype, &wval); + writes(wtype == 2 ? word1 : word2); + writes(" what?\n"); + return; +} -- 2.34.1