#! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh advent.doc <<'END_OF_advent.doc' XThis is the hopefully portable ADVENTURE 551 program. Its BETA!!!!! XI've tested it as well as I can, but you never know!!!! It comes as three XFortran files, aamain.f, the main game program; asetup.f, a program that Xreads the ASCII data file ADVDAT and makes a runtime data file ADVTXT; Xasubs.f, that needs to be liked with each of the above; and ADVDAT, Xthe ASCII data file itself (note all caps for Unix users). X X XIt is based on the old old old Fortran one posted recently in comp.sources. Xgames - or rather one very close to that. I added a small piece of game, Xand the version I started from was lacking a tiny (and uncompleted) part. XBut mostly I fixed bugs. Oh! My! What a mess it was. You think it is Xbad now? Well, it is still F66 spaghetti, but previously it was full Xof Holleriths, system dependencies, and just plain bugs. Code bugs, Xgame bugs, out of range subscripts ad nauseum. I played it to Xcompletion, and got all 551 points. That means it is possible to win. But Xit does NOT guarantee no bugs - as I found a bad one just playing it Xthis last time. So have other testers. The only blatent non-portability Xis that it assumes ASCII. X XFor Unix people with Fortran, first make sure that the file is ADVDAT, Xall upper case, make sure the name of your Fortran compiler is right in the Xmakefile and then type 'make'. To play, type "adventure". X XIf your Unix system lacks the MIL std Fortran functions ior, ieor, and iand, Xyou'll have to make up some with whatever bit functions you do have. XIt's up to you. These functions just take two integer variables and Xreturn the appropriate bitwise functions OR, XOR, and AND. If you get them Xwrong the asetup program will die at section 9 of the data file. X XFor folks on MS-DOS, rename the .f files to .for. Then compile and link Xasetup with asubs to make asetup.exe. Make SURE to have your Fortran compiler Xuse 4-byte integers!!! (Use /4I4 for Microsoft Fortran). Run asetup.exe. XThen compile aamain.for and link with asubs.obj to make aamain.exe. XRename aamain.exe to "adventure" and play the game. X XFor VMS folks, do as MS-DOS except that you have to add ".dat" to the advdat Xfilename, and compile with /check=noover. This last is necessary as the Xrandom number generator actually depends on overflows. X X XFor folks with Unix systems and no (or broken!!! - Sun 3's) Fortran compilers, Xit works with the "f2c" program available from research.att.com. This took Xme a bit of work on our Mips machine. It is easy to generate the f2c program Xand its two libraries libF77 and libI77 but it didn't link right. The solution Xwas to use the librarian (ar) to make a single library libF2C with all the X.o files from BOTH libraries, put that in the directory you are working Xwith and tell cc to use that as an ordinary object file - i.e. Xf2c *.f X<> Xcc -c *.c Xcc asetup.o asubs.o iors.o libF2C -lm -lc Xa.out Xcc aamain.o asubs.o iors.o libF2C -lm -lc Xmv a.out adventure X X(Note the lack of a -l before the libF2C - read the READMEs that Xcome with f2c.) X Xthen just play! I suppose I could distribute the .c files f2c produces, Xbut the main problem is that I would also have to distribute the libs, Xwhich are the big problem anyway. X X XIt hopefully will just work. There are two places to look at the Xsource code: First, look in asubs.f for the string ?????, which occurs Xtwice. Thereabouts is code which works on VMS, the IBM-PC, and f2c to allow Xyou to get a prompt on the same line as your response. It fails miserably in XF77 on my MIPS Unix machine. If you can make this or some other prompting Xmechanism work on your machine, PLEASE report it to me. Second, in aamain.f Xlook for the the string ?????. There you can uncomment a line to activate XWizard mode, which allows a modest amount of cheating. Uncautious use Xof it, however, can prevent actually winning. X XThis version compiles and runs using f77 on a MIPS unix box, on the VAX using XVMS VAX Fortran or using Ultrix and its Fortran compiler (though you must Xsupply the bitwise functions), on the IBM PC using either the MicroWay 386 X32-bit compiler or Microsoft Fortran 4.1 in large model, and on the IBM XRiscstation 6000. X XIt compiles but does NOT run on a Sun 3 (with a F77 compiler with a 1988 Xdate) due to the compiler simply being unable (with no help from Xswitches) to compile correctly the main program. Tests indicate that Xthis compiler barfs on files with much more than 400 lines of significant code. XIf anybody can get it to run on a Sun 3, please let me know how. XI find it hard to believe that they would let out a compiler this limited. X X X X XDoug McDonald (mcdonald@aries.scs.uiuc.edu) X XAdventurer Grandmaster!!! X(its not easy, even if you do read the source code) END_OF_advent.doc if test 4732 -ne `wc -c makefile <<'END_OF_makefile' Xall: asetup adventure ADVTXT X Xasetup: asetup.o asubs.o X f77 -o asetup asetup.o asubs.o Xadventure: aamain.o asubs.o X f77 -o adventure aamain.o asubs.o XADVTXT: ADVDAT asetup X asetup X END_OF_makefile if test 181 -ne `wc -c aamain.f <<'END_OF_aamain.f' XC THIS IS THE FIRST LINE OF ADVENTURE, MAIN MODULE. X XC CURRENT LIMITS: XC 20000 WORDS OF MESSAGE TEXT (LINES, LINSIZ). XC 1600 TRAVEL OPTIONS (TRAVEL, TRVSIZ). XC 600 VOCABULARY WORDS (KTAB, ATAB, TABSIZ). XC 250 LOCATIONS (LTEXT, STEXT, KEY, LOCCON, ABB, ATLOC, XC LOCSIZ, MAXLOC). XC 150 OBJECTS (PLAC, PLACE, FIXD, FIXED, LINK (TWICE), PTEXT, POINTS, XC HOLDER, HLINK, OBJCON, PROP, WEIGHT, MAXOBJ). XC 60 "ACTION" VERBS (ACTSPK, VRBSIZ, VKEY). XC 300 VERB/PREP/OBJ COMBINATIONS (PTAB, PTBSIZ). XC 50 ADJECTIVES (ADJKEY, ADJSIZ) XC 150 MODIFIED NOUNS (ADJTAB, MAXOBJ) XC 450 RANDOM MESSAGES (RTEXT, RTXSIZ). XC 12 DIFFERENT PLAYER CLASSIFICATIONS (CTEXT, CVAL, CLSMAX). XC 20 HINTS, LESS 3 (HINTLC, HINTED, HINTS, HNTSIZ, HNTMIN). X XC THERE ARE ALSO LIMITS WHICH CANNOT BE EXCEEDED DUE TO THE STRUCTURE OF XC THE DATABASE. (E.G., THE VOCABULARY USES N/1000 TO DETERMINE WORD TYPE, XC SO THERE CAN'T BE MORE THAN 1000 WORDS OF ANY CLASS.) THESE UPPER XC LIMITS ARE: XC 1000 NON-SYNONYMOUS VOCABULARY WORDS OF EACH CLASS. CURRENTLY DEFINED XC CLASSES ARE: XC 1. MOTION/DIRECTION WORDS (EAST, WEST, UP, JUMP, ETC.) XC 2. NOUNS/OBJECTS (LAMP, KEYS, TROLL, ETC.) XC 3. ACTION VERBS, TRANSITIVE & INTRANSITIVE (TAKE, DROP, KILL, IN XC 4. MISCELLANEOUS WORDS; MOSTLY THINGS OR ACTIONS WHICH GENERATE XC FIXED REPLIES (FEE-FIE-FOE-FOO, TREE, CAVE, CURSES) XC 5. PREPOSITIONS, DUPLICATES MANY WORDS IN SECTION 1. XC 6. ADJECTIVES XC 7. CONJUNCTIONS XC 450 LOCATIONS XC 100 OBJECTS WHICH CAN BE USED IN TRAVEL TABLE (PLUS 900 MORE, WHICH CAN' X X XC DESCRIPTION OF THE DATABASE FORMAT XC XC XC THE DATA FILE CONTAINS SEVERAL SECTIONS. EACH BEGINS WITH A LINE CONTAINING XC A NUMBER IDENTIFYING THE SECTION, AND ENDS WITH A LINE CONTAINING "-1". XC XC SECTION 1: LONG FORM DESCRIPTIONS. EACH LINE CONTAINS A LOCATION NUMBER, XC A TAB, AND A LINE OF TEXT. THE SET OF (NECESSARILY ADJACENT) LINES XC WHOSE NUMBERS ARE X FORM THE LONG DESCRIPTION OF LOCATION X. XC XC SECTION 2: SHORT FORM DESCRIPTIONS. SAME FORMAT AS LONG FORM. NOT ALL XC PLACES HAVE SHORT DESCRIPTIONS. XC XC SECTION 3: VOCABULARY. EACH LINE CONTAINS A NUMBER (N), A TAB, AND A XC FIVE-LETTER WORD. CALL M=N/1000. IF M=0, THEN THE WORD IS A MOTION XC VERB FOR USE IN TRAVELLING (SEE SECTION 4). ELSE, IF M=1, THE WORD IS XC AN OBJECT. ELSE, IF M=2, THE WORD IS AN ACTION VERB (SUCH AS "CARRY" XC OR "ATTACK"). ELSE, IF M=3, THE WORD IS A SPECIAL CASE VERB (SUCH AS XC "DIG") AND N MOD 1000 IS AN INDEX INTO SECTION 6. OBJECTS FROM 50 TO XC (CURRENTLY, ANYWAY) 79 ARE CONSIDERED TREASURES (FOR PIRATE, CLOSEOUT). XC XC SECTION 4: TRAVEL TABLE. EACH LINE CONTAINS A LOCATION NUMBER (X), A SECOND XC LOCATION NUMBER (Y), AND A LIST OF MOTION VERBS (SEE SECTION 3). XC EACH MOTION REPRESENTS A VERB WHICH WILL GO TO Y IF CURRENTLY AT X. XC Y, IN TURN, IS INTERPRETED AS FOLLOWS. LET M=Y/1000, N=Y MOD 1000. XC IF N<=MAXLOC IT IS THE LOCATION TO GO TO. XC IF MAXLOC500 MESSAGE N-500 FROM SECTION 6 IS PRINTED, XC AND HE STAYS WHEREVER HE IS. XC MEANWHILE, M SPECIFIES THE CONDITIONS ON THE MOTION. XC IF M=0 IT'S UNCONDITIONAL. XC IF 0100 CANNOT BE USED FOR CONDITIONAL MOTIONS IN XC TRAVEL TABLE. XC XC SECTION 6: ARBITRARY MESSAGES. SAME FORMAT AS SECTIONS 1, 2, AND 5, EXCEPT XC THE NUMBERS BEAR NO RELATION TO ANYTHING (EXCEPT FOR SPECIAL VERBS XC IN SECTION 3). XC XC SECTION 7: CONTAINS LOTS OF OBJECT INFO: XC (1) OBJECT LOCATIONS & WEIGHTS. EACH LINE CONTAINS AN OBJECT NUMBER XC AND ITS INITIAL LOCATION (ZERO (OR OMITTED) IF NONE). IF THE OBJECT IS XC IMMOVABLE, THE LOCATION IS FOLLOWED BY A "-1". IF IT HAS TWO LOCATIONS XC (E.G. THE GRATE) THE FIRST LOCATION IS FOLLOWED WITH THE SECOND, AND XC THE OBJECT IS ASSUMED TO BE IMMOVABLE. IF THE OBJECT IS MOVABLE, IT XC HAS A THIRD NUMBER WHICH IS ITS RELATIVE WEIGHT. XC (2) DEFAULT OBJECT NAMES. TEN CHARACTER MAXIMUM, TO PERMIT PRINTING XC OBJECT NAMES WHEN HERO SAYS 'TAKE ALL' OR SUCH. XC (3) POINTS. OBJECT NUMBER, A SCORE XC VALUE, A PROP VALUE, AND A LOCATION NUMBER. THE SCORE IS XC FOR LEAVING IT AT THE NAMED LOCATION WITH THE RIGHT PROP VALUE. XC SCORES ARE ASSIGNED ON A DIFFICULTY SCALE OF 1-5 (1 IS XC FOR EASY TREASURES; 5 IS FOR REAL HARD ONES), AND ARE MULTIPLIED XC BY SOME APPROPRIATE FACTOR AT SCORING TIME. XC XC SECTION 8: ACTION DEFAULTS. EACH LINE CONTAINS AN "ACTION-VERB" NUMBER AND XC THE INDEX (IN SECTION 6) OF THE DEFAULT MESSAGE FOR THE VERB. XC XC SECTION 9: LIQUID ASSETS, ETC. EACH LINE CONTAINS A NUMBER (N) AND UP TO 20 XC LOCATION NUMBERS. XC FOR THE LOW BYTE BIT N (WHERE 0 IS THE UNITS BIT) IS SET IN LOCCON(LOC XC FOR EACH LOC GIVEN. THE COND BITS CURRENTLY ASSIGNED ARE: XC 0 LIGHT XC 1 IF BIT 3 IS ON: ON FOR OIL, OFF FOR WATER XC 2 IF BIT 3 IS ON: ON FOR WINE, OFF FOR WATER & OIL XC 3 LIQUID ASSET, SEE BITS 1 & 2 XC 4 PIRATE DOESN'T GO HERE UNLESS FOLLOWING PLAYER XC 5 ALL LOCATIONS IN EITHER 'PORTAL'; I.E., NOT OUTSIDE XC CAVE, BUT NOT FAR IN XC 6 ALL LOCATIONS OUTSIDE THE CAVE XC THE HIGH BYTE IS USED TO INDICATE AREAS OF INTEREST TO "HINT" ROUTINES: XC THE NUMBER 256*(BIT-7) INDICATES THE HINT XC 1 LOST IN MAZE XC 2 PONDERING DARK ROOM XC 3 AT WITT'S END XC 4 TRYING TO EXTRACT SWORD XC 5 TRYING TO GO UP SLIDE XC 6 TRYING TO GET INTO CAVE VIA SEA ENTRANCE XC 7 TRYING TO FIND CAVE (ANY ENTRANCE) XC 8 TRYING TO CATCH BIRD XC 9 TRYING TO GET OVER THE RAINBOW XC 10 STYMIED BY DOG XC 11 TRYING TO DEAL WITH SNAKE XC 12 TRYING TO GET TO THE CASTLE XC ONLY ONE HINT PER LOC IS ALLOWED XC LOCCON(LOC) IS SET TO 2, OVERRIDING ALL OTHER BITS, IF LOC HAS FORCED XC MOTION. XC XC SECTION 10: CLASS MESSAGES. EACH LINE CONTAINS A NUMBER (N), A TAB, AND A XC MESSAGE DESCRIBING A CLASSIFICATION OF PLAYER. THE SCORING SECTION XC SELECTS THE APPROPRIATE MESSAGE, WHERE EACH MESSAGE IS CONSIDERED TO XC APPLY TO PLAYERS WHOSE SCORES ARE HIGHER THAN THE PREVIOUS N BUT NOT XC HIGHER THAN THIS N. NOTE THAT THESE SCORES PROBABLY CHANGE WITH EVERY XC MODIFICATION (AND PARTICULARLY EXPANSION) OF THE PROGRAM. XC XC SECTION 11: HINTS. EACH LINE CONTAINS A HINT NUMBER (CORRESPONDING TO A XC COND BIT, SEE SECTION 9), THE NUMBER OF TURNS HE MUST BE AT THE RIGHT XC LOC(S) BEFORE TRIGGERING THE HINT, THE POINTS DEDUCTED FOR TAKING THE XC HINT, THE MESSAGE NUMBER (SECTION 6) OF THE QUESTION, AND THE MESSAGE XC NUMBER OF THE HINT. THESE VALUES ARE STASHED IN THE "HINTS" ARRAY. XC HNTMAX IS SET TO THE MAX HINT NUMBER (<= HNTSIZ). NUMBERS 1-6 ARE XC UNUSABLE SINCE COND BITS ARE OTHERWISE ASSIGNED, SO 2 IS USED TO XC REMEMBER IF HE'S READ THE CLUE IN THE REPOSITORY, AND 3 IS USED TO XC REMEMBER WHETHER HE ASKED FOR INSTRUCTIONS (GETS MORE TURNS, BUT LOSES XC POINTS). HNTMIN IS SET TO THE NUMBER OF THE FIRST USABLE HINT. XC XC SECTION 14: PREPOSITION TABLE. EACH LINE CONTAINS A VERB, A PREPOSITION XC AND VALID OBJECTS FOR THAT VERB/PREP COMBINATION. THEY ARE CONVERTED XC INTO TWO TABLES SIMILAR IN FORMAT TO THE TRAVEL TABLE. THE FIRST XC TABLE, VKEY, HAS ONE ENTRY PER VERB. A ZERO ENTRY INDICATES NO XC PREPOSITION IS VALID WITH THAT VERB. A NON-ZERO ENTRY POINTS TO THE XC BEGINNING OF THE PREP/OBJ LIST FOR THAT VERB. THE POSITION OF THE XC ENTRY IN VKEY CORRESPONDS TO THE VERB NUMBER. THE PREP/OBJ LIST, XC PTAB, FOR A GIVEN VERB CONSISTS OF A SERIES OF ONE-WORD ENTRIES XC DELIMITED BY A NEGATIVE ENTRY. EACH WORD CONTAINS THE PREPOSITION XC NUMBER TIMES 1000 PLUS THE NUMBER OF A VALID OBJECT. A SCHEMATIC XC FOLLOWS. ENTRIES IN VKEY ARE REPRESENTED BY V1, V2, ... VN. XC ENTRIES IN PTAB ARE REPRESENTED BY P1, P2, ..., PN (PREPOSITIONS), XC AND OB1, OB2,..., OBN (OBJECTS). XC XC I VKEY(I) PTAB(J) J XC - ------- ------- - XC 1. V1==========>> P1,OB1 1. XC P1,OB2 2. XC P1,OB3 3. XC P1,OB4 4. XC P1,OB5 5. XC P2,OB1 6. XC P2,OB2 7. XC P3,OB1 8. XC P3,OB2 9. XC P3,OB3 10. XC -P3,OB4 11. XC 2. V2==========>> P1,OB1 12. XC P1,OB2 13. XC P2,OB1 14. XC -P3,OB1 15. XC 3. 0 (THE VERB CORRESPONDING TO THIS POSITION TAKES NO PREPOSITION XC 4. V3==========>> P1,OB1 16. XC -P2,OB1 17. XC XC SECTION 15: OBJECT ATTRIBUTES. EACH LINE CONTAINS A BIT NUMBER AND XC UP TO 20 OBJECT NUMBERS. BIT N (WHERE ZERO IS THE UNITS BIT) IS SET XC IN OBJCON(OBJ) FOR EACH OBJECT GIVEN. THE BITS CURRENTLY ASSIGNED XC ARE: XC 1 THE OBJ CAN BE OPENED/CLOSED. (DOORS, GRATE, CLAM, ETC.) XC 2 THE OBJ IS CURRENTLY OPEN. XC 3 IT HAS A LOCK. (GRATE, CHAIN, ELFIN DOOR, ETC.) XC 4 IT IS CURRENTLY LOCKED. XC 5 FLAMMABLE. (IT WILL BURN IF IGNITED.) XC 6 IT IS CURRENTLY BURNING. XC 7 EDIBLE. FOOD, MUSHROOMS, ETC. XC 8 PRINTED MATERIAL, ANYTHING READABLE XC 9 A LIVING BEASTIE, E.G., DWARF, DOG, WUMPUS, ETC. XC 10 DEAD (KILLED) BEASTIE: WUMPUS, DRAGON, SLEEPING DOG XC 11 CAN BE WORN: CROWN, SHOES, CLOAK, JEWELS XC 12 IS CURRENTLY BEING WORN XC 13 REQUIRES PLURAL RESPONSES (SHOES, COINS, ETC.) XC 14 TREASURE. XC 15 CONTAINER. XC 16 OBJECT IS "SMALL". (CAN FIT INTO SACK OR CHEST) XC 17 CONTAINER IS OPAQUE -- CONTENTS ARE NOT VISIBLE UNLESS XC CONTAINER IS OPEN. XC XC SECTION 16: ADJECTIVE/NOUN LIST. EACH VALID ADJECTIVE IS FOLLOWED BY XC ALL NOUNS WHICH IT MAY MODIFY. XC XC SECTION 0: END OF DATABASE. X X IMPLICIT INTEGER(A-Z) X LOGICAL DSEEN,BLKLIN,HINTED,YES,START,TERSE,ISWIZ,LOGOUT X LOGICAL WZDARK,KILLED,RDFLAG,LIVING X CHARACTER*6 DTK(9),ATAB,DJJ,DK,DKK,DL,DLL X CHARACTER*6 VTXT,OTXT,IOTXT,TXT X CHARACTER ZAPP(20) X CHARACTER*2 KK2C X X COMMON/IZWIZ/ISWIZ X COMMON /ADJCOM/ ADJKEY(50),ADJTAB(150),ADJSIZ X COMMON /BITCOM/ OPENBT,LOCKBT,BURNBT,WEARBT X COMMON /BLKCOM/ BLKLIN X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X COMMON /DIECOM/ NUMDIE,MAXDIE,TURNS,KILLED X COMMON /DWFCOM/ DWARF,KNIFE,KNFLOC,DFLAG,DSEEN(6),DLOC(6), X 1 ODLOC(6),DWFMAX X COMMON /HLDCOM/ HOLDER(150),HLINK(150) X COMMON /HNTCOM/ HINTLC(20),HINTED(20),HINTS(20,4),HNTSIZ,HNTMIN X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /MNECOM/ BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE(2,4),TK(20) X X COMMON /LTXCOM/ LTEXT(250),STEXT(250),KEY(250),ABB(250),LOCSIZ X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X COMMON /PRPCOM/ VKEY(60),PTAB(300),VKYSIZ,PTBSIZ X COMMON /TRVCOM/ TRAVEL(1600) X COMMON /TXTCOM/ LINES(25000),RTEXT(450),PTEXT(150) X COMMON /UTXCOM/ WDX X COMMON /VOCCOM/ KTAB(600),TABSIZ X COMMON /WRDCOM/ VERBS(45),VRBX,OBJS(45), X 1 OBJX,IOBJS(15),IOBX,PREP,WORDS(45) X X COMMON /SAVCOM/ABBNUM,ADJ,ATBS,ATTACK,BCROSS,BONUS,CHASE, X 1 CLOCK1,CLOCK2,CLOCK3,CLOSED,CLOSNG,CLSMAX,COMBO,DEADBT, X 2 DETAIL,DKILL,DTOTAL,DWARFN,FLG239, X 3 FOO,FOOBAR,FOOD,GAVEUP,HEALTH,HINT,HIT,HNTMAX,I,IKK,ILOC, X 4 IOBJ,J,JJ,JK1,JKK,K,K1,KK,L,L1,LIMIT, X 5 LINSIZ,LL,LMWARN,LOCK,LOGOUT,MESSAG,OBJ,PANIC, X 6 PORTAL,PTBS,RDFLAG,RETN,RTXSIZ,SCORE,SCORNG,SECT, X 7 SKEY,SLOC,SPK,START,STICK,TABNDX,TALLY,TALLY2,TERSE, X 8 TRVS,TRVSIZ,VEND,VERB,VRBSIZ,WASTE,WKDAY,WKEND,WZDARK, X 9 YEA,ACTSPK,CTEXT,CVAL,HNAME X COMMON /SV2COM/ANVIL,BATTER,BEES,BILLBD,BIRD,BRUSH,CAGE, X 1 CAKES,CHAIN,CHEST,CHLOC,CHLOC2,CLAM,CLOAK,CLSSES,COINS,CROWN, X 2 DALTLC,DOG,DRAGON,EGGS,FISSUR,FLOWER,GATLOC,GRAIL,HIVE, X 3 HONEY,HORN,JEWELS,KEYS,LYRE, X 4 MAGZIN,MIRROR,MUSHRM,MXSCOR,NUGGET,OYSTER,PEARL,PHONE, X 5 PILLOW,POLE,POSTER,PREPAT,PREPDN,PREPFR,PREPIN,PREPOF, X 6 PREPON,PYRAM,RADIUM,RING,RUG,SAPPHI,SHIELD,SHOES, X 7 SHUT,SLUGS,SNAKE,SPHERE,STEPS,STICKS,SWORD,TABLET,TRIDNT, X 8 UNLOCK,VASE,WALL,WALL2,WEAR,WUMPUS,Y2,YANK X COMMON /SV3COM/DTK,ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X COMMON /TNOUX/INDENT X DIMENSION ACTSPK(60),CTEXT(12),CVAL(12) X DIMENSION HNAME(10) X X LOGICAL AJAR,AT,ATHAND,BITSET,BLIND,CLOSED,CLOSNG, X 1 DARK,DEAD,EDIBLE,ENCLSD,FORCED, X 2 GAVEUP,HERE,HINGED,HOLDNG,INSIDE,LMWARN,LOCKS,OUTSID,OPAQUE, X 3 PANIC,PCT,PLURAL,PORTAL,PRINTD,SCORNG,SMALL, X 4 TOTING,TREASR,LOCKED,VESSEL,WEARNG,WORN,YEA, X 5 YESM X XC DATA LINSIZ/25000/,TRVSIZ/1600/,TABSIZ/600/,LOCSIZ/250/, XC 1 VRBSIZ/60/,RTXSIZ/450/,CLSMAX/12/,HNTSIZ/20/, XC 2 MAXOBJ/150/,MAXLOC/300/,HNTMIN/7/,PTBSIZ/300/,ADJSIZ/50/, XC 3 VKYSIZ/60/,BLKLIN/.TRUE./,DWFMAX/6/,ISWIZ/.FALSE./ X X DATA LINUSE/0/ XC PHUCE CONSISTS OF FOUR PAIRS OF ORIGIN/DESTINATION LOCATIONS FROM/TO XC WHICH ONE IS TRANSPORTED ON UTTERING THE ELFIN CURSE AT THE TINY XC DOOR. HE CAN GO FROM BIG TO SMALL OR SMALL TO BIG, ON EITHER SIDE OF XC THE DOOR. X X XC STATEMENT FUNCTIONS XC XC XC AJAR(OBJ = TRUE IF THE OBJECT IS OPEN XC AT(OBJ) = TRUE IF ON EITHER SIDE OF TWO-PLACED OBJECT XC ATHAND(OBJ) = TRUE IF OBJECT IS HERE AND NOT IN CLOSED CONTAINER. XC BITSET(COND,L,N) = TRUE IF COND(L) HAS BIT N SET (BIT 0 IS UNITS BIT) XC BLIND(DUMMY) = TRUE IF HERO CAN'T SEE (TOO DARK OR GLAREY) XC DARK(DUMMY) = TRUE IF LOCATION "LOC" IS DARK XC DEAD(OBJ) = TRUE IF CRITTER IS KILLED (OR IN ENCHANTED SLEEP) XC FORCED(LOC) = TRUE IF LOC MOVES WITHOUT ASKING FOR INPUT (COND=2) XC HERE(OBJ) = TRUE IF THE OBJ IS AT "LOC" (OR IS BEING CARRIED) XC HINGED(OBJ) = TRUE IF OBJECT CAN BE OPENED/SHUT. XC INSIDE(LOC) = TRUE IF LOCATION IS WELL WITHIN THE CAVE XC LIQ(DUMMY) = OBJECT NUMBER OF LIQUID IN BOTTLE XC LIQLOC(LOC) = OBJECT NUMBER OF LIQUID (IF ANY) AT LOC XC LIVING(OBJ) = TRUE IF OBJ IS SOME SORT OF CRITTER XC LOCKED(OBJ) = TRUE IF OBJECT IS LOCKED. (NEED NOT HAVE A LOCK, XC E.G., RUSTY DOOR) XC LOCKS(OBJ) = TRUE IF OBJECT HAS A LOCK. XC OPAQUE(OBJ) = TRUE IF CONTAINER IS NOT TRANSPARENT (SACK, CHEST) XC TRANSPARENT OBJS: BOTTLE(GLASS), CAGE(WICKER) XC OUTSID(LOC) = TRUE IF LOCATION IS OUTSIDE THE CAVE XC PCT(N) = TRUE N% OF THE TIME (N INTEGER FROM 0 TO 100) XC PLURAL(OBJ) = TRUE IF IT IS A PLURAL OBJ (SHOES, KEYS, ETC.) XC PORTAL(LOC) = TRUE IS LOCATION IS IN CAVE "ENTRANCE" XC PRINTD(OBJ) = TRUE IF OBJECT CAN BE READ. XC SMALL(OBJ) = TRUE IF OBJ FITS INTO SACK XC TOTING(OBJ) = TRUE IF THE OBJ IS BEING CARRIED XC TREASR(OBJ) = TRUE IF OBJECT IS A TREASURE XC VESSEL(OBJ) = TRUE IF OBJECT IS A CONTAINER XC WEARNG(OBJ) = TRUE IF OBJECT IS BEING WORN XC WORN(OBJ) = TRUE IF THE OBJECT CAN BE WORN XC XC CLOSED SAYS WHETHER WE'RE ALL THE WAY CLOSED XC CLOSNG SAYS WHETHER ITS CLOSING TIME YET XC DEMO IS TRUE IF THIS IS A PRIME-TIME DEMONSTRATION GAME XC GAVEUP SAYS WHETHER HE EXITED VIA "QUIT" XC LMWARN SAYS WHETHER HE'S BEEN WARNED ABOUT LAMP GOING DIM XC PANIC SAYS WHETHER HE'S FOUND OUT HE'S TRAPPED IN THE CAVE XC SCORNG INDICATES TO THE RATING ROUTINE WHETHER WE'RE DOING A "SCORE" COMMAND XC WZDARK SAYS WHETHER THE LOC HE'S LEAVING WAS DARK XC YEA IS RANDOM YES/NO REPLY X X X X XC CLEAR OUT THE VARIOUS TEXT-POINTER ARRAYS. ALL TEXT IS STORED IN ARRAY XC LINES; EACH LINE IS PRECEDED BY A WORD POINTING TO THE NEXT POINTER (I.E. XC THE WORD FOLLOWING THE END OF THE LINE). THE POINTER IS NEGATIVE IF THIS IS XC FIRST LINE OF A MESSAGE. THE TEXT-POINTER ARRAYS CONTAIN INDICES OF XC POINTER-WORDS IN LINES. STEXT(N) IS SHORT DESCRIPTION OF LOCATION N. XC LTEXT(N) IS LONG DESCRIPTION. PTEXT(N) POINTS TO MESSAGE FOR PROP( PROPN)=0 XC SUCCESSIVE PROP MESSAGES ARE FOUND BY CHASING POINTERS. RTEXT CONTAINS XC SECTION 6'S STUFF. CTEXT(N) POINTS TO A PLAYER-CLASS MESSAGE. MTEXT IS FOR XC SECTION 12. WE ALSO CLEAR COND. SEE DESCRIPTION OF SECTION 9 FOR DETAILS. X X XC ****** CALL THE ROUTINE TO RESTORE FORM DISK ALL THE COMMONS X XC DEADBT = 10 XC OPENBT = 2 XC LOCKBT = 4 XC BURNBT = 6 XC WEARBT = 12 XC DATA PHUCE/158,160,160,158,167,166,166,167/ X X OPEN (UNIT=16,FILE='ADVTXT',STATUS='OLD',FORM= X 1 'UNFORMATTED',ACCESS='SEQUENTIAL') X READ(16)ISWIZ,ADJKEY,ADJTAB,ADJSIZ,OPENBT,LOCKBT,BURNBT,WEARBT X READ(16)BLKLIN,LOCCON,OBJCON,NUMDIE,MAXDIE,TURNS X READ(16)DWARF,KNIFE,KNFLOC,DFLAG,DSEEN,DLOC,ODLOC,DWFMAX X READ(16)HOLDER,HLINK,HINTLC,HINTED,HINTS,HNTSIZ,HNTMIN X READ(16)BOTTLE,CASK,WATER,OIL,WINE,LIQTYP X READ(16)LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X READ(16) LTEXT,STEXT,KEY,ABB,LOCSIZ X READ(16) BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE,TK X X READ(16)PLAC,FIXD,WEIGHT,PROP,POINTS X READ(16) ATLOC,LINK,PLACE, X 1 FIXED,MAXOBJ X READ(16) VKEY,PTAB,VKYSIZ,PTBSIZ,TRAVEL X READ(16)LINES,RTEXT,PTEXT,WDX,KTAB,TABSIZ X READ(16) VERBS,VRBX,OBJS, X 1 OBJX,IOBJS,IOBX,PREP,WORDS X X READ(16)ABBNUM,ADJ,ATBS,ATTACK,BCROSS,BONUS,CHASE, X 1 CLOCK1,CLOCK2,CLOCK3,CLOSED,CLOSNG,CLSMAX,COMBO,DEADBT, X 2 DETAIL,DKILL,DTOTAL,DWARFN,FLG239, X 3 FOO,FOOBAR,FOOD,GAVEUP,HEALTH,HINT,HIT,HNTMAX,I,IKK,ILOC, X 4 IOBJ,J,JJ,JK1,JKK,K,K1,KK,L,L1,LIMIT, X 5 LINSIZ,LL,LMWARN,LOCK,LOGOUT,MESSAG,OBJ,PANIC, X 6 PORTAL,PTBS,RDFLAG,RETN,RTXSIZ,SCORE,SCORNG,SECT, X 7 SKEY,SLOC,SPK,START,STICK,TABNDX,TALLY,TALLY2,TERSE, X 8 TRVS,TRVSIZ,VEND,VERB,VRBSIZ,WASTE,WKDAY,WKEND,WZDARK, X 9 YEA,ACTSPK,CTEXT,CVAL,HNAME X READ(16)ANVIL,BATTER,BEES,BILLBD,BIRD,BRUSH,CAGE, X 1 CAKES,CHAIN,CHEST,CHLOC,CHLOC2,CLAM,CLOAK,CLSSES,COINS,CROWN, X 2 DALTLC,DOG,DRAGON,EGGS,FISSUR,FLOWER,GATLOC,GRAIL,HIVE, X 3 HONEY,HORN,JEWELS,KEYS,LYRE, X 4 MAGZIN,MIRROR,MUSHRM,MXSCOR,NUGGET,OYSTER,PEARL,PHONE, X 5 PILLOW,POLE,POSTER,PREPAT,PREPDN,PREPFR,PREPIN,PREPOF, X 6 PREPON,PYRAM,RADIUM,RING,RUG,SAPPHI,SHIELD,SHOES, X 7 SHUT,SLUGS,SNAKE,SPHERE,STEPS,STICKS,SWORD,TABLET,TRIDNT, X 8 UNLOCK,VASE,WALL,WALL2,WEAR,WUMPUS,Y2,YANK X READ(16)DTK,ATAB,VTXT,OTXT,IOTXT X 1 ,TXT X CLOSE(16) X LOC = 1 X INDENT = 0 XC FINALLY, SINCE WE'RE CLEARLY SETTING THINGS UP FOR THE FIRST TIME... X XC START-UP, DWARF STUFF X X1 CONTINUE X I=RANZ(1) X CALL RSPEAK(325) X HINTED(3)=YES(65,1,0) X NEWLOC=1 X LIMIT=650 X FLG239=0 X IF(HINTED(3))LIMIT=400 X XC CAN'T LEAVE CAVE ONCE IT'S CLOSING (EXCEPT BY MAIN OFFICE). X X2 IF(.NOT.OUTSID(NEWLOC).OR.NEWLOC.EQ.0.OR..NOT.CLOSNG)GOTO 71 X CALL RSPEAK(130) X NEWLOC=LOC X IF(.NOT.PANIC)CLOCK2=15 X PANIC=.TRUE. X XC SEE IF A DWARF HAS SEEN HIM AND HAS COME FROM WHERE HE WANTS TO GO. IF SO, XC THE DWARF'S BLOCKING HIS WAY. IF COMING FROM PLACE FORBIDDEN TO PIRATE XC (DWARVES ROOTED IN PLACE) LET HIM GET OUT (AND ATTACKED). X X71 IF(NEWLOC.EQ.LOC)GOTO 74 X ILOC=LOC X171 IF(FORCED(ILOC))GOTO 74 X172 IF(IAND(LOCCON(ILOC),16).NE.0)GOTO 74 X L1=DWFMAX-1 X DO 73 I=1,L1 X IF(ODLOC(I).NE.NEWLOC.OR..NOT.DSEEN(I))GOTO 73 X NEWLOC=LOC X CALL RSPEAK(2) X GOTO 74 X73 CONTINUE X74 LOC=NEWLOC X XC DWARF STUFF. SEE EARLIER COMMENTS FOR DESCRIPTION OF VARIABLES. REMEMBER XC SIXTH DWARF IS PIRATE AND IS THUS VERY DIFFERENT EXCEPT FOR MOTION RULES. X XC FIRST OFF, DON'T LET THE DWARVES FOLLOW HIM INTO A PIT OR A WALL. ACTIVATE XC THE WHOLE MESS THE FIRST TIME HE GETS AS FAR AS THE HALL OF MISTS (LOC 15). XC IF NEWLOC IS FORBIDDEN TO PIRATE (IN PARTICULAR, IF IT'S BEYOND THE TROLL XC BRIDGE), BYPASS DWARF STUFF. THAT WAY PIRATE CAN'T STEAL RETURN TOLL, AND XC DWARVES CAN'T MEET THE BEAR. ALSO MEANS DWARVES WON'T FOLLOW HIM INTO DEAD XC END IN MAZE, BUT C'EST LA VIE. THEY'LL WAIT FOR HIM OUTSIDE THE DEAD END. X X IF(LOC.EQ.0.OR.FORCED(LOC).OR.IAND(LOCCON(NEWLOC),16).NE.0) X 1 GOTO 2000 X IF(DFLAG.NE.0)GOTO 6000 X IF(INSIDE(LOC))DFLAG=1 X GOTO 2000 X XC WHEN WE ENCOUNTER THE FIRST DWARF, WE KILL 0, 1, OR 2 OF THE DWFMAX DWARVES. XC IF ANY OF THE SURVIVORS IS AT LOC, REPLACE HIM WITH THE ALTERNATE. X X6000 IF(DFLAG.NE.1)GOTO 6010 X IF(.NOT.INSIDE(LOC).OR.PCT(95))GOTO 2000 X DFLAG=2 X DO 6001 I=1,2 X J=1+RANZ(DWFMAX-1) X6001 IF(PCT(50))DLOC(J)=0 X L1=DWFMAX-1 X DO 6002 I=1,L1 X IF(DLOC(I).EQ.LOC)DLOC(I)=DALTLC X6002 ODLOC(I)=DLOC(I) X CALL RSPEAK(3) X CALL DROP(AXE,LOC) X GOTO 2000 X XC THINGS ARE IN FULL SWING. MOVE EACH DWARF AT RANDOM, EXCEPT IF HE'S SEEN US XC HE STICKS WITH US. DWARVES NEVER GO TO LOCS WHICH ARE OUTSIDE OR IN XC EITHER OF THE TWO PORTAL AREAS. IF WANDERING AT RANDOM, THEY XC DON'T BACK UP UNLESS THERE'S NO ALTERNATIVE. IF THEY DON'T HAVE TO XC MOVE, THEY ATTACK. AND, OF COURSE, DEAD DWARVES DON'T DO MUCH OF ANYTHING. X X6010 DTOTAL=0 X ATTACK=0 X STICK=0 X DO 6030 I=1,DWFMAX X IF(DLOC(I).EQ.0)GOTO 6030 X J=1 X KK=KEY(DLOC(I)) X IF(KK.EQ.0)GOTO 6016 X6012 NEWLOC=MOD(IABS(TRAVEL(KK))/1000,1000) X IF(NEWLOC.GT.MAXLOC.OR.NEWLOC.EQ.ODLOC(I) X 1 .OR..NOT.INSIDE(NEWLOC) X 2 .OR.(J.GT.1.AND.NEWLOC.EQ.TK(J-1)).OR.J.GE.20 X 3 .OR.NEWLOC.EQ.DLOC(I).OR.FORCED(NEWLOC) X 4 .OR.(I.EQ.DWFMAX.AND.IAND(LOCCON(NEWLOC),16).NE.0) X 5 .OR.IABS(TRAVEL(KK))/1000.EQ.100)GOTO 6014 X TK(J)=NEWLOC X J=J+1 X6014 KK=KK+1 X IF(TRAVEL(KK-1).GE.0)GOTO 6012 X6016 TK(J)=ODLOC(I) X IF(J.GE.2)J=J-1 X J=1+RANZ(J) X ODLOC(I)=DLOC(I) X DLOC(I)=TK(J) X DSEEN(I)=(DSEEN(I).AND.INSIDE(LOC)) X 1 .OR.(DLOC(I).EQ.LOC.OR.ODLOC(I).EQ.LOC) X IF(.NOT.DSEEN(I))GOTO 6030 X DLOC(I)=LOC X IF(I.NE.DWFMAX)GOTO 6027 X XC THE PIRATE'S SPOTTED HIM. HE LEAVES HIM ALONE ONCE WE'VE FOUND CHEST. XC K COUNTS IF A TREASURE IS HERE. IF NOT, AND TALLY=TALLY2 PLUS ONE FOR XC AN UNSEEN CHEST, LET THE PIRATE BE SPOTTED. X X IF(LOC.EQ.CHLOC.OR.PROP(CHEST).GE.0)GOTO 6030 X K=0 X DO 6020 J=1,MAXOBJ XC PIRATE WON'T TAKE PYRAMID FROM PLOVER ROOM OR DARK ROOM (TOO EASY!). X IF(.NOT.TREASR(J).OR.(J.EQ.CASK.AND.LIQ(CASK).NE.WINE))GOTO 6020 X IF(J.EQ.PYRAM.AND.(LOC.EQ.PLAC(PYRAM) X 1 .OR.LOC.EQ.PLAC(EMRALD)))GOTO 6020 X IF(TOTING(J).AND.ATHAND(J))GOTO 6022 X6020 IF(HERE(J).AND.TREASR(J))K=1 X IF(TALLY.EQ.TALLY2+1.AND.K.EQ.0.AND.PLACE(CHEST).EQ.0 X 1 .AND.ATHAND(LAMP).AND.PROP(LAMP).EQ.1)GOTO 6025 X IF(ODLOC(DWFMAX).NE.DLOC(DWFMAX).AND.PCT(30))CALL RSPEAK(127) X GOTO 6030 X X6022 CALL RSPEAK(128) XC DON'T STEAL CHEST BACK FROM TROLL! X IF(PLACE(MESSAG).EQ.0)CALL MOVE(CHEST,CHLOC) X CALL MOVE(MESSAG,CHLOC2) X DO 6023 J=1,MAXOBJ X IF(.NOT.TREASR(J).OR.(J.EQ.PYRAM.AND. X 1 (LOC.EQ.PLAC(PYRAM).OR.LOC.EQ.PLAC(EMRALD))).OR. X 2 (J.EQ.CASK.AND.LIQ(CASK).NE.WINE).OR. X 3 (ENCLSD(J).AND..NOT.ATHAND(J)))GOTO 6023 X IF(AT(J).AND.FIXED(J).EQ.0)CALL CARRY(J,LOC) X IF(ENCLSD(J))CALL REMOVE(J) X IF(.NOT.HOLDNG(J))GOTO 6023 X CALL INSERT(J,CHEST) X IF(.NOT.WEARNG(J))GOTO 6023 X PROP(J)=0 X CALL BITOFF(J,WEARBT) X6023 CONTINUE X6024 DLOC(DWFMAX)=CHLOC X ODLOC(DWFMAX)=CHLOC X DSEEN(DWFMAX)=.FALSE. X GOTO 6030 X X6025 CALL RSPEAK(186) X CALL MOVE(CHEST,CHLOC) X CALL MOVE(MESSAG,CHLOC2) X GOTO 6024 X XC THIS THREATENING LITTLE DWARF IS IN THE ROOM WITH HIM! X X6027 DTOTAL=DTOTAL+1 X IF(ODLOC(I).NE.DLOC(I))GOTO 6030 X ATTACK=ATTACK+1 X IF(KNFLOC.GE.0)KNFLOC=LOC X IF(RANZ(1000).LT.250*(DFLAG-2))STICK=STICK+1 X6030 CONTINUE X XC NOW WE KNOW WHAT'S HAPPENING. LET'S TELL THE POOR SUCKER ABOUT IT. X X IF(DTOTAL.EQ.0)GOTO 2000 X IF(DTOTAL.EQ.1)GOTO 75 X WRITE(*,67)DTOTAL X67 FORMAT(/' There are ',I1,' threatening little dwarves in the' X 1 ,' room with you!') X GOTO 77 X75 CALL RSPEAK(4) X77 IF(ATTACK.EQ.0)GOTO 2000 X IF(DFLAG.EQ.2)DFLAG=3 X IF(ATTACK.EQ.1)GOTO 79 X WRITE(*,78)ATTACK X78 FORMAT(/' ',I1,' of them throw knives at you!') X K=6 X82 IF(STICK.GT.1)GOTO 83 X CALL RSPEAK(K+STICK) X IF(STICK.EQ.0)GOTO 2000 X GOTO 84 X83 WRITE(*,68)STICK X68 FORMAT(/' ',I1,' of them get you!') X84 OLDLC2=LOC X GOTO 94100 X X79 CALL RSPEAK(5) X K=52 X GOTO 82 XC DESCRIBE THE CURRENT LOCATION AND (MAYBE) GET NEXT COMMAND. X XC PRINT TEXT FOR CURRENT LOC. X X2000 IF(LOC.EQ.0)GOTO 94100 X JKK=STEXT(LOC) X IF(VERB.EQ.LOOK.OR.JKK.EQ.0.OR. X 1 (.NOT.TERSE.AND.MOD(ABB(LOC),ABBNUM).EQ.0) )JKK=LTEXT(LOC) X IF((FORCED(LOC).OR..NOT.DARK(0)).AND.LOC.NE.200)GOTO 2001 X IF(LOC.NE.200.AND. (DARK(0).OR.PROP(LAMP).EQ.0 X 1 .OR..NOT.ATHAND(LAMP)) )GOTO 2003 X IF(PROP(LAMP).EQ.0.OR..NOT.ATHAND(LAMP))GOTO 2020 X IF(PCT(35))GOTO 94000 X JKK=RTEXT(294) X GOTO 2020 X X2003 IF(WZDARK.AND.PCT(35))GOTO 94000 X JKK=RTEXT(16) X2001 IF(HOLDNG(BEAR).AND..NOT.DARK(0))CALL RSPEAK(141) X2020 CALL SPEAK(JKK) X K=1 X ABB(LOC)=ABB(LOC)+1 X IF(.NOT.FORCED(LOC))GOTO 2022 X CALL TRAVL(K,BCROSS,TALLY2) X IF(KILLED)GOTO 94100 X GOTO 2 X X2022 ABB(LOC)=ABB(LOC)-1 X IF(LOC.EQ.Y2.AND.PCT(25).AND..NOT.CLOSNG)CALL RSPEAK(8) X IF(LOC.EQ.147.AND.ABB(LOC).EQ.1)CALL RSPEAK(216) X XC SEE IF HE IS WASTING HIS BATTERIES OUT IN THE OPEN. X K=0 X IF(.NOT.OUTSID(LOC).OR.PROP(LAMP).EQ.0)GOTO 2030 X K=WASTE+1 X IF(K.LE.12)GOTO 2030 X CALL RSPEAK(324) X K=0 X2030 WASTE=K X XC IF WUMPUS IS CHASING STOOGE, SEE IF WUMPUS GETS HIM. X IF(CHASE.EQ.0)GOTO 2040 X CHASE=CHASE+1 X KK=CHASE/2 X PROP(WUMPUS)=KK X CALL MOVE(WUMPUS,LOC) X IF(KK.LT.5)GOTO 2040 X IF(DARK(0))CALL RSPEAK(270) X CALL PSPEAK(WUMPUS,5) X GOTO 94100 X XC CHECK FOR RADIATION POISONING. X2040 K=1 X IF(OUTSID(LOC))K=3 X HEALTH=MIN0(HEALTH+K,100) X IF(.NOT.HERE(RADIUM).OR. X 1 (PLACE(RADIUM).EQ.-SHIELD.AND..NOT.AJAR(SHIELD)) )GOTO 2045 X HEALTH=HEALTH-7 X IF(HEALTH.GE.60)GOTO 2045 X CALL RSPEAK(391+(60-HEALTH)/10) X IF(HEALTH.LE.0)GOTO 94100 XC PRINT OUT DESCRIPTIONS OF OBJECTS AT THIS LOCATION. IF NOT CLOSING AND XC PROPERTY VALUE IS NEGATIVE, TALLY OFF ANOTHER TREASURE. RUG IS SPECIAL XC CASE; ONCE SEEN, ITS PROP IS 1 (DRAGON ON IT) TILL DRAGON IS KILLED. XC SIMILARLY FOR CHAIN; PROP IS INITIALLY 1 (LOCKED TO BEAR). XC LIKEWISE, FOR SWORD (MUST PROVE ELFIN ROYALTY). X X2045 IF(OLDLOC.NE.188.OR.LOC.EQ.189.OR.LOC.EQ.188 X 1 .OR.PROP(BOOTH).NE.1)GOTO 2021 X CALL MOVE(GNOME,0) X PROP(BOOTH)=0 X2021 IF(BLIND(0))GOTO 2100 X ABB(LOC)=ABB(LOC)+1 X I=ATLOC(LOC) X2004 IF(I.EQ.0)GOTO 2100 X OBJ=I X IF(OBJ.GT.MAXOBJ)OBJ=OBJ-MAXOBJ X IF(OBJ.EQ.STEPS.AND.TOTING(NUGGET))GOTO 2008 X IF(PROP(OBJ).GE.0)GOTO 2006 X IF(CLOSED)GOTO 2008 X PROP(OBJ)=0 X IF(OBJ.EQ.RUG.OR.OBJ.EQ.CHAIN.OR.OBJ.EQ.SWORD X 1 .OR.OBJ.EQ.CASK)PROP(OBJ)=1 X IF(OBJ.EQ.CLOAK.OR.OBJ.EQ.RING)PROP(OBJ)=2 X TALLY=TALLY-1 XC IF REMAINING TREASURES TOO ELUSIVE, ZAP HIS LAMP. X IF(TALLY.EQ.TALLY2.AND.TALLY.NE.0)LIMIT=MIN0(35,LIMIT) X2006 KK=PROP(OBJ) X IF(OBJ.EQ.STEPS.AND.LOC.EQ.FIXED(STEPS))KK=1 X CALL PSPEAK(OBJ,KK) X CALL LOOKIN(OBJ) X2008 I=LINK(I) X GOTO 2004 X XC "I DON'T UNDERSTAND THAT!" X2060 SPK=CONFUZ(0) X GOTO 2011 X XC "YOU CAN'T DO THAT!" (AN IMPOSSIBLE ACT, E.G., "OPEN SWORD", "FEED BOAT", ET X2070 SPK=NOWAY(0) X GOTO 2011 X X2009 SPK=54 X2011 IF(OBJ.EQ.0.OR.(OBJS(2).EQ.0.AND.IOBJS(2).EQ.0))GOTO 2015 X CALL PSPEAK(OBJ,-1) X CALL TNOUA X BLKLIN=.FALSE. X2015 CALL RSPEAK(SPK) X BLKLIN=.TRUE. X X2100 RDFLAG=.FALSE. X IF(OBJX.EQ.0)GOTO 2110 X OBJX=OBJX+1 X IF(OBJS(OBJX).EQ.0)OBJX=0 X2110 IF(OBJX.GT.0.AND.OBJS(OBJX).NE.0)GOTO 2120 X IF(IOBX.EQ.0)GOTO 2120 X IOBX=IOBX+1 X IF(IOBJS(IOBX).EQ.0)IOBX=0 X IF(IOBX.NE.0.AND.OBJS(1).NE.0)OBJX=1 X X2120 IF(OBJX.GT.0.OR.IOBX.GT.0)GOTO 2600 X IF(OBJS(1).NE.0)OBJX=1 X IF(IOBJS(1).NE.0)IOBX=1 X VRBX=VRBX+1 X IF(VERBS(VRBX).NE.0)GOTO 2600 X CALL CLRLIN X RDFLAG=.TRUE. X XC CHECK IF THIS LOC IS ELIGIBLE FOR ANY HINTS. IF BEEN HERE LONG ENOUGH, XC BRANCH TO HELP SECTION (ON LATER PAGE). HINTS ALL COME BACK HERE EVENTUALLY XC TO FINISH THE LOOP. IGNORE "HINTS" < HNTMIN (SPECIAL STUFF, SEE DATABASE XC NOTES). X X2600 DO 2601 HINT=HNTMIN,HNTMAX X IF(HINTED(HINT))GOTO 2601 X IF((LOCCON(LOC)/256).NE.HINT-6)HINTLC(HINT)=-1 X HINTLC(HINT)=HINTLC(HINT)+1 X IF(HINTLC(HINT).GE.HINTS(HINT,1))GOTO 40000 X2601 CONTINUE X2602 CONTINUE XC KICK THE RANDOM NUMBER GENERATOR JUST TO ADD VARIETY TO THE CHASE. ALSO, XC IF CLOSING TIME, CHECK FOR ANY OBJECTS BEING TOTED WITH PROP < 0 AND SET XC THE PROP TO -1-PROP. THIS WAY OBJECTS WON'T BE DESCRIBED UNTIL THEY'VE XC BEEN PICKED UP AND PUT DOWN SEPARATE FROM THEIR RESPECTIVE PILES. DON'T XC TICK CLOCK1 UNLESS WELL INTO CAVE (AND NOT AT Y2). X X IF(.NOT.CLOSED)GOTO 2605 X IF(PROP(OYSTER).LT.0.AND.TOTING(OYSTER)) X 1 CALL PSPEAK(OYSTER,1) X DO 2604 I=1,MAXOBJ X2604 IF(TOTING(I).AND.PROP(I).LT.0)PROP(I)=-1-PROP(I) X2605 WZDARK=DARK(0) X IF(KNFLOC.GT.0.AND.KNFLOC.NE.LOC)KNFLOC=0 X I=RANZ(1) X IF(.NOT.RDFLAG)GOTO 2608 X XC GET A NEW INPUT CLAUSE, OR FINISH GETTING CURRENT ONE. X X CALL GETWDS X VRBX=1 X OBJX=0 X IF(OBJS(1).NE.0)OBJX=1 X IOBX=0 X IF(IOBJS(1).NE.0)IOBX=1 X RDFLAG=.TRUE. X XC EVERY INPUT, CHECK "FOOBAR" FLAG. IF ZERO, NOTHING'S GOING ON. IF POS, XC MAKE NEG. IF NEG, HE SKIPPED A WORD, SO MAKE IT ZERO. X X2608 FOOBAR=MIN0(0,-FOOBAR) X COMBO=MIN0(0,-COMBO) X TURNS=TURNS+1 X2609 IF(TURNS.EQ.310.AND.ABBNUM.NE.10000.AND..NOT.TERSE) X 1 CALL RSPEAK(273) X XC BUMP ALL THE RIGHT CLOCKS FOR RECONNING BATTERY LIFE AND CLOSING. X X IF(CLOSED)CLOCK3=CLOCK3-1 X IF(CLOCK3.EQ.-7)GOTO 93300 X IF(CLOCK3.NE.0)GOTO 2621 X PROP(PHONE)=0 X PROP(BOOTH)=0 X CALL RSPEAK(284) X2621 IF(TALLY.EQ.0.AND.INSIDE(LOC).AND.LOC.NE.Y2)CLOCK1=CLOCK1-1 X IF(CLOCK1.EQ.0)GOTO 90000 X IF(CLOCK1.LT.0)CLOCK2=CLOCK2-1 X IF(CLOCK2.EQ.0)GOTO 91000 X IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-1 X IF(LIMIT.EQ.0)GOTO 92400 X IF(LIMIT.LT.0.AND.OUTSID(LOC))GOTO 92600 X IF(LIMIT.LE.40)GOTO 92000 X X19999 VERB=VAL(VERBS(VRBX)) X OBJ=0 X IF(OBJX.NE.0)OBJ=OBJS(OBJX) X IOBJ=0 X IF(IOBX.NE.0)IOBJ=IOBJS(IOBX) X IF(KNFLOC.NE.LOC.OR.(OBJ.NE.KNIFE.AND.IOBJ.NE.KNIFE))GOTO 19998 X KNFLOC=-1 X SPK=116 X GOTO 2011 X X19998 GOTO (2750,2700,4000,2710), CLASS(VERBS(VRBX)) X2700 CALL BUG(22) X X2710 SPK=VERB X GOTO 2011 X XC IT IS A MOTION VERB. ANALYZE IT & LOOP TO 2, IF NOT DEAD. X2750 CALL TRAVL(VERB,BCROSS,TALLY2) X IF(KILLED)GOTO 94100 X GOTO 2 X XC ACTION VERB 'LEAVE' (DROP) HAS NO OBJECT. X3100 CALL BUG(29) X XC VERB 'SAY' OR 'YELL' SLIPPED THROUGH WITH AN OBJECT. X3200 CALL BUG(34) X XC ANALYSE A VERB. X4000 SPK=ACTSPK(VERB) X IF(OBJ.NE.0.OR.IOBJ.NE.0)GOTO 4090 X XC ANALYSE AN INTRANSITIVE VERB (IE, NO OBJECT GIVEN YET). X X GOTO( X 9 10100,10000,10000,10400, 2009,10400,20700,20800,10000,10000, X 9 2011,21200,11300,11400,11500,10000,10000,11800,10000,12000, X 9 10000,12200,12300,12400,12500,12600,10000,10000,10000,13000, X 9 13100,10100,10000,10000,13500,23600, 3100,13800,10000,10000, X 9 10000,10000,10000,10100,10100,10100,10100,14800,10400,10400, X 9 25100,25200,25300,25400,25500,25600,25700,25800,25900),VERB XC 01-10 TAKE DROP SAY OPEN NOTH CLOSE ON OFF WAVE CALM XC 11-20 WALK KILL POUR EAT DRINK RUB THROW QUIT FIND INVEN XC 21-30 FEED FILL BLAST SCORE FOO BRIEF READ BREAK WAKE SUSPD XC 31-40 RESUM YANK WEAR HIT ANSWR BLOW LEAVE YELL DIAL PLAY XC 41-50 PICK PUT TURN GET INSRT REMOV BURN GRIPE LOCK UNLOK XC 51-60 HEALTH LOOK COMBO SWEEP TERSE WIZ MAP GATE PIRLOC X CALL BUG(23) X XC ANALYSE A TRANSITIVE VERB. X X4090 GOTO( X 9 20100,20200, 3200,20400, 2009,20600,20700,20800,20900, 2011, X 9 2011,21200,21300,21400,21500,21600,21700, 2011,21900,21900, X 9 22100,22200,12300, 2011, 2011,22600,22700,22800,22900, 2011, X 9 2011,23200,23300,23400,23500,23600,20200, 3200,23900,24000, X 9 24100,24200,24300,24400,24500,24600,24700, 2060,24900,25000, X 9 2060,25200, 2070,25400, 2060, 2060, 2060, 2060, 2060),VERB XC 01-10 TAKE DROP SAY OPEN NOTH CLOSE ON OFF WAVE CALM XC 11-20 WALK KILL POUR EAT DRINK RUB THROW QUIT FIND INVEN XC 21-30 FEED FILL BLAST SCORE FOO BRIEF READ BREAK WAKE SUSPD XC 31-40 HOUR YANK WEAR HIT ANSWR BLOW LEAVE YELL DIAL PLAY XC 41-50 PICK PUT TURN GET INSRT REMOV BURN GRIPE LOCK UNLOK XC 51-60 HEALTH LOOK COMBO SWEEP TERSE WIZ MAP GATE PIRLOC X CALL BUG(24) XC ROUTINES FOR PERFORMING THE VARIOUS ACTION VERBS X XC STATEMENT NUMBERS IN THIS SECTION ARE 10000 FOR INTRANSITIVE VERBS, 20000 FOR XC TRANSITIVE, PLUS 100 TIMES THE VERB NUMBER. MANY INTRANSITIVE VERBS USE THE XC TRANSITIVE CODE, AND SOME VERBS USE CODE FOR OTHER VERBS, AS NOTED BELOW. X XC RANDOM INTRANSITIVE VERBS COME HERE. CLEAR OBJ JUST IN CASE (SEE "ATTACK"). X X10000 CALL A5TOA1(VTXT(VRBX,1),VTXT(VRBX,2),'_What?',ZAPP,K) X WRITE(*,10002)(ZAPP(I),I=1,K) X10002 FORMAT(/' ',20A1) X OBJS(1)=0 X OBJX=0 X GOTO 2600 X X X10010 CALL A5TOA1(VTXT(VRBX,1),VTXT(VRBX,2),'_it? ',ZAPP,K) X WRITE(*,10012)(ZAPP(I),I=1,K) X10012 FORMAT(/' Where do you want to ',20A1) X GOTO 2600 X X XC CONSTRUCT MSG: "I DON'T KNOW HOW TO [VERB] THE [OBJ]", AND VARIANTS. X XC CARRY, NO OBJECT GIVEN YET. OK IF ONLY ONE OBJECT PRESENT. X X10100 IF(ATLOC(LOC).EQ.0.OR.LINK(ATLOC(LOC)).NE.0.OR.BLIND(0)) X 1 GOTO 10000 X L1=DWFMAX-1 X DO 10110 I=1,L1 X IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 10000 X10110 CONTINUE X OBJ=ATLOC(LOC) X IF(VERB.EQ.YANK)GOTO 23200 X IF(VERB.EQ.WEAR)GOTO 23300 X XC CARRY AN OBJECT. SPECIAL CASES FOR BIRD AND CAGE (IF BIRD IN CAGE, CAN'T XC TAKE ONE WITHOUT THE OTHER. LIQUIDS ALSO SPECIAL, SINCE THEY DEPEND ON XC STATUS OF BOTTLE. ALSO VARIOUS SIDE EFFECTS, ETC. XC "YANK" AND "WEAR" ALSO WEAVE INTO THIS CODE, SINCE THEY ARE MOSTLY XC JUST RESTRICTED CARRY'S. X X20100 IF(OBJ.EQ.BOAT)SPK=281 X IF(PLURAL(OBJ))SPK=297 X IF(OBJ.EQ.BIRD.AND..NOT.CLOSED.AND.ATHAND(BIRD) X 1 .AND.PLACE(BIRD).NE.LOC)GOTO 20102 X IF(PREP.NE.PREPOF)GOTO 20104 X IF(OBJ.NE.0.AND.IOBJ.NE.0)GOTO 2060 X IF(OBJ.EQ.0)OBJ=IOBJ X IOBJ=0 X GOTO 20200 X20102 CALL RSPEAK(407) X GOTO 2 X X20104 IF(HOLDNG(OBJ))GOTO 2011 X ASSIGN 20106 TO RETN X GOTO 20190 X X20106 IF(PREP.EQ.PREPIN)GOTO 24500 X IF(PREP.EQ.PREPFR.OR.ENCLSD(OBJ))GOTO 24600 X XC THE NEXT LINES ARE FOR 'TAKING' LIQUIDS (WATER, OIL & WINE). XC IF WE ARE HOLDING A CONTAINER (BOTTLE OR CASK), WE CAN TAKE THE XC THE LIQUID BY FILLING THE CONTAINER. IF THERE IS A CONTAINER NEARBY XC HOLDING THE REQUESTED LIQUID, WE WILL PICK UP THE CONTAINER. X X IF(IOBJ.EQ.0)GOTO 20110 X SPK=313 X IF(OBJ.NE.CASK.AND.OBJ.NE.BOTTLE)GOTO 2011 X K=0 X IF(OBJ.EQ.CASK)K=1 X IOBJ=IOBJ+K X IF(LIQ(OBJ).EQ.IOBJ)GOTO 20116 X SPK=302+K X IF(PROP(OBJ).NE.1)GOTO 2011 X GOTO 20118 X X20110 IF(OBJ.NE.WATER.AND.OBJ.NE.OIL.AND.OBJ.NE.WINE)GOTO 20120 X IOBJ=OBJ X K=0 X OBJ=BOTTLE X IF(.NOT.HERE(BOTTLE))GOTO 20114 X IF(PROP(BOTTLE).NE.1)GOTO 20112 X IF(.NOT.HERE(CASK).OR.(HERE(CASK).AND.PROP(CASK).EQ.1)) X 1 GOTO 20118 X OBJ=0 X CALL RSPEAK(304) X GOTO 2600 X X20112 IF(LIQ(BOTTLE).EQ.IOBJ)GOTO 20116 X20114 SPK=312 X IF(.NOT.HERE(CASK))GOTO 2011 X OBJ=CASK X K=1 X IF(PROP(CASK).EQ.1)GOTO 20118 X IF(LIQ(CASK).EQ.IOBJ)GOTO 20116 X SPK=315 X IF(.NOT.ATHAND(BOTTLE))SPK=303 X GOTO 2011 X X20116 IF(.NOT.HOLDNG(OBJ))GOTO 20120 X SPK=302+K X GOTO 2011 X X20118 IF(HOLDNG(OBJ))GOTO 22200 X GOTO 20120 XC *** END OF LIQUID STUFF X XC 'WEAR' AND 'YANK' WEAVE IN HERE. X X20120 SPK=343 X IF(OBJ.EQ.BEAR .OR. BURDEN(0)+BURDEN(OBJ).LE.15 )GOTO 20125 X SPK=92 X IF(.NOT.WEARNG(OBJ))GOTO 2011 X PROP(OBJ)=0 X CALL BITOFF(OBJ,WEARBT) X GOTO 2011 X XC CLOAK. BIG TROUBLE AHEAD. CAN ONLY GET HERE VIA 'YANK'. X20125 IF(OBJ.NE.CLOAK.OR.PROP(CLOAK).NE.2)GOTO 20130 X PROP(ROCKS)=1 X PROP(CLOAK)=0 X FIXED(CLOAK)=0 X CALL CARRY(CLOAK,LOC) X CALL RSPEAK(241) X IF(AT(WUMPUS).AND.PROP(WUMPUS).EQ.0)GOTO 22900 X GOTO 2100 X XC POSTER: HIDES WALL SAFE. X20130 IF(OBJ.NE.POSTER.OR.PLACE(SAFE).NE.0)GOTO 20160 X PROP(POSTER)=1 X SPK=362 XC MOVE SAFE AND WALL CONTAINING SAFE INTO VIEW. X CALL DROP(SAFE,LOC) X CALL DROP(WALL2,LOC) X GOTO 20180 X XC BOAT: NEED THE POLE TO PUSH IT X20160 IF(OBJ.NE.BOAT)GOTO 20165 X SPK=218 X IF(.NOT.TOTING(POLE).AND.PLACE(POLE).NE.-BOAT)GOTO 2011 X PROP(BOAT)=1 X SPK=221 X GOTO 20180 X XC BIRD: GOT TO HAVE CAGE, BUT ROD CAN'T BE AROUND TO TAKE BIRD X20165 IF(OBJ.NE.BIRD.OR.PROP(BIRD).NE.0)GOTO 20170 X SPK=26 X IF(ATHAND(ROD))GOTO 2011 X SPK=27 X IF(.NOT.HOLDNG(CAGE))GOTO 2011 X CALL INSERT(BIRD,CAGE) X CALL BITOFF(CAGE,OPENBT) X GOTO 2009 X XC SWORD: IF IN ANVIL, NEEDS CROWN & MUST YANK. X20170 IF(OBJ.NE.SWORD.OR.PROP(SWORD).EQ.0)GOTO 20180 X IF(IOBJ.NE.0.AND.IOBJ.NE.ANVIL)GOTO 2070 X IF(VERB.EQ.YANK)GOTO 20175 X XC HE WANTS THE SWORD, BUT HASN'T ESTABLISHED HIS ROYAL BLOOD, OR HE XC HASN'T PULLED HARD ENOUGH. OR NEITHER. X X IF(.NOT.YES(215,0,0))GOTO 2009 X20175 IF(WEARNG(CROWN))GOTO 20180 X CALL PSPEAK(SWORD,2) X IF(CLOSED)GOTO 93000 X FIXED(SWORD)=-1 X PROP(SWORD)=3 X GOTO 2100 X X20180 CALL CARRY(OBJ,LOC) X IF(OBJ.EQ.POLE.OR.OBJ.EQ.SKEY.OR.OBJ.EQ.SWORD X 1 .OR.((OBJ.EQ.CLOAK.OR.OBJ.EQ.RING) X 2 .AND..NOT.WEARNG(OBJ)) )PROP(OBJ)=0 X IF(VERB.NE.YANK.OR.OBJ.EQ.SWORD)GOTO 2011 X SPK=204 X GOTO 2011 X X XC THIS IS A QUASI-SUBROUTINE, CALLED FROM 'TAKE' AND FROM 'INSERT', WHEN XC THE ITEM IS NOT CURRENTLY BEING TOTED. 'RETN' IS A VARIABLE DEFINED XC TO BE THE RETURN ADDRESS. X X20190 SPK=NOWAY(0) X IF(OBJ.EQ.PLANT.AND.PROP(PLANT).LE.0)SPK=115 X IF(OBJ.EQ.BEAR.AND.PROP(BEAR).EQ.1)SPK=169 X IF(OBJ.EQ.CHAIN.AND.PROP(BEAR).NE.0)SPK=170 X IF(OBJ.EQ.SWORD.AND.PROP(SWORD).EQ.5)SPK=208 X IF(OBJ.EQ.CLOAK.AND.PROP(CLOAK).EQ.2)SPK=242 X IF(OBJ.EQ.AXE.AND.PROP(AXE).EQ.2)SPK=246 X IF(OBJ.EQ.PHONE)SPK=251 X IF(OBJ.EQ.BEES.OR.OBJ.EQ.HIVE)SPK=295 X IF(OBJ.EQ.STICKS)SPK=296 X IF(FIXED(OBJ).NE.0)GOTO 2011 X GOTO RETN XC DROP/DISCARD OBJECT. "THROW" ALSO COMES HERE FOR MOST OBJECTS. XC SPECIAL CASES FOR BIRD (MIGHT ATTACK SNAKE OR DRAGON) AND CAGE (MIGHT XC CONTAIN BIRD) AND VASE. XC DROP COINS IN VENDING MACHINE FOR EXTRA BATTERIES. X X20200 IF(HOLDNG(ROD2).AND.OBJ.EQ.ROD.AND..NOT.HOLDNG(ROD))OBJ=ROD2 X IF(PLURAL(OBJ))SPK=105 X K=LIQ(BOTTLE) X IF(K.EQ.OBJ)OBJ=BOTTLE X IF(OBJ.NE.BOTTLE)K=LIQ(CASK) X IF(OBJ.NE.BOTTLE.AND.K.EQ.OBJ)OBJ=CASK X IF(.NOT.TOTING(OBJ))GOTO 2011 X IF(PREP.EQ.PREPIN)GOTO 24500 X IF(OBJ.NE.BIRD.OR..NOT.HERE(SNAKE))GOTO 20220 X CALL RSPEAK(30) X IF(CLOSED)GOTO 93000 X CALL REMOVE(BIRD) X CALL DSTROY(SNAKE) XC SET SNAKE PROP FOR USE BY TRAVEL OPTIONS X PROP(SNAKE)=1 X CALL DROP(BIRD,LOC) X GOTO 2100 X X20220 SPK=344 X IF(VERB.EQ.LEAVE)SPK=353 X IF(VERB.EQ.THROW)SPK=352 X IF(VERB.EQ.TAKE)SPK=54 X IF(OBJ.NE.POLE.OR..NOT.HOLDNG(BOAT))GOTO 20240 X SPK=280 X GOTO 2011 X X20240 IF(OBJ.NE.BIRD.OR..NOT.AT(DRAGON).OR.PROP(DRAGON).NE.0) X 1 GOTO 20260 X CALL RSPEAK(154) X CALL REMOVE(BIRD) X CALL DSTROY(BIRD) X IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1 X GOTO 2100 X X20260 IF(OBJ.NE.BEAR.OR..NOT.AT(TROLL))GOTO 20270 X SPK=163 X CALL DSTROY(TROLL) X CALL DSTROY(TROLL+MAXOBJ) X CALL MOVE(TROLL2,PLAC(TROLL)) X CALL MOVE(TROLL2+MAXOBJ,FIXD(TROLL)) X CALL JUGGLE(CHASM) X PROP(TROLL)=2 X GOTO 20290 X X20270 IF(OBJ.NE.VASE.OR.LOC.EQ.PLAC(PILLOW))GOTO 20280 X PROP(VASE)=2 X IF(AT(PILLOW))PROP(VASE)=0 X CALL PSPEAK(VASE,PROP(VASE)+1) X IF(PROP(VASE).NE.0)FIXED(VASE)=-1 X GOTO 20290 X X20280 IF(WORN(OBJ).OR.OBJ.EQ.POLE.OR.OBJ.EQ.BOAT)PROP(OBJ)=0 X IF(WORN(OBJ))CALL BITOFF(OBJ,WEARBT) X IF(OBJ.EQ.POLE)PROP(BOAT)=0 X20290 IF(ENCLSD(OBJ))CALL REMOVE(OBJ) X CALL DROP(OBJ,LOC) X GOTO 2011 XC OPEN/CLOSE/LOCK/UNLOCK: NO OBJECT GIVEN. XC ASSUME VARIOUS THINGS IF PRESENT. X X10400 SPK=28 X K=0 X DO 10410 I=1,MAXOBJ X IF(.NOT.(HERE(I).AND.HINGED(I)))GOTO 10410 X OBJ=I X K=K+1 X10410 CONTINUE X IF(K.GT.1)GOTO 10000 X IF(OBJ.NE.0)GOTO 10420 X IF(VERB.EQ.LOCK.OR.VERB.EQ.UNLOCK)GOTO 2011 X GOTO 10000 X X10420 IF(VERB.EQ.LOCK)GOTO 24900 X IF(VERB.EQ.UNLOCK)GOTO 25000 X IF(VERB.EQ.SHUT)GOTO 20600 X XC OPEN. SPECIAL STUFF FOR OPENING CLAM/OYSTER. XC THE FOLLOWING CAN BE OPENED WITHOUT A KEY: XC CLAM/OYSTER, DOOR, PDOOR, BOTTLE, CASK, CAGE X X20400 IF(.NOT.HINGED(OBJ))GOTO 2070 X SPK=253 X IF(OBJ.EQ.PDOOR.AND.PROP(PDOOR).EQ.1)GOTO 2011 X SPK=336 X IF(AJAR(OBJ))GOTO 2011 X IF(LOCKS(OBJ).OR.IOBJ.EQ.KEYS.OR.IOBJ.EQ.SKEY)GOTO 25000 X SPK=337 X IF(OBJ.EQ.DOOR)SPK=111 X IF(LOCKED(OBJ))GOTO 2011 X IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)GOTO 20410 X CALL BITON(OBJ,OPENBT) X GOTO 2009 X XC CLAM/OYSTER. X20410 K=0 X IF(OBJ.EQ.OYSTER)K=1 X SPK=124+K X IF(HOLDNG(OBJ))SPK=120+K X IF(.NOT.ATHAND(TRIDNT))SPK=122+K X IF(IOBJ.NE.0.AND.IOBJ.NE.TRIDNT)SPK=376+K X IF(SPK.NE.124)GOTO 2011 X CALL DSTROY(CLAM) X CALL DROP(OYSTER,LOC) X CALL DROP(PEARL,105) X GOTO 2011 X X XC CLOSE. SHUT. XC THE FOLLOWING CAN BE CLOSED WITHOUT KEYS: XC DOOR, PDOOR, BOTTLE, CASK, CAGE X X20600 IF(.NOT.HINGED(OBJ))GOTO 2070 X SPK=338 X IF(.NOT.AJAR(OBJ))GOTO 2011 X IF(LOCKS(OBJ))GOTO 24900 X CALL BITOFF(OBJ,OPENBT) X GOTO 2009 XC LIGHT LAMP X X20700 IF(.NOT.ATHAND(LAMP))GOTO 2011 X SPK=184 X IF(LIMIT.LT.0)GOTO 2011 X SPK=321 X IF(PROP(LAMP).EQ.1)GOTO 2011 X PROP(LAMP)=1 X K=39 X IF(LOC.EQ.200)K=108 X CALL RSPEAK(K) X IF(WZDARK)GOTO 2000 X GOTO 2100 X XC LAMP OFF X X20800 IF(.NOT.ATHAND(LAMP))GOTO 2011 X SPK=322 X IF(PROP(LAMP).EQ.0)GOTO 2011 X PROP(LAMP)=0 X CALL RSPEAK(40) X IF(DARK(0))CALL RSPEAK(16) X GOTO 2100 X XC WAVE. NO EFFECT UNLESS WAVING ROD AT FISSURE. X X20900 IF((.NOT.HOLDNG(OBJ)).AND.(OBJ.NE.ROD.OR..NOT.HOLDNG(ROD2))) X 1 SPK=29 X IF(OBJ.NE.ROD.OR..NOT.AT(FISSUR).OR..NOT.HOLDNG(OBJ) X 1 .OR.CLOSNG)GOTO 2011 X IF(IOBJ.NE.0.AND.IOBJ.NE.FISSUR)GOTO 2011 X PROP(FISSUR)=1-PROP(FISSUR) X CALL PSPEAK(FISSUR,2-PROP(FISSUR)) X IF(CHASE.EQ.0.OR.PROP(FISSUR).NE.0)GOTO 2100 X XC DEMISE OF THE WUMPUS. CHAMP MUST HAVE JUST CROSSED BRIDGE. X X IF((LOC.EQ.17.AND.OLDLOC.NE.27) X 1 .OR.(LOC.EQ.27.AND.OLDLOC.NE.17))GOTO 2100 X CALL RSPEAK(244) X CHASE=0 X CALL DROP(RING,209) X CALL MOVE(WUMPUS,209) X PROP(WUMPUS)=6 X CALL BITON(WUMPUS,DEADBT) X IF(PLACE(AXE).NE.PLAC(WUMPUS))GOTO 2100 X FIXED(AXE)=0 X PROP(AXE)=0 X GOTO 2100 X XC ATTACK. ASSUME TARGET IF UNAMBIGUOUS. "THROW" ALSO LINKS HERE. ATTACKABLE XC OBJECTS FALL INTO TWO CATEGORIES: ENEMIES (SNAKE, DWARF, ETC.) AND OTHERS XC (BIRD, CLAM). AMBIGUOUS IF TWO ENEMIES, OR IF NO ENEMIES BUT TWO OTHERS. X XC KILL OBJ WITH IOBJ. X X21200 L1=DWFMAX-1 X DO 21210 DWARFN=1,L1 X IF(DLOC(DWARFN).EQ.LOC.AND.DFLAG.GE.2)GOTO 21220 X21210 CONTINUE X DWARFN=0 X21220 IF(OBJ.NE.0)GOTO 21240 X IF(DWARFN.NE.0)OBJ=DWARF X IF(HERE(SNAKE))OBJ=OBJ*MAXOBJ+SNAKE X IF(AT(DRAGON).AND.PROP(DRAGON).EQ.0)OBJ=OBJ*MAXOBJ+DRAGON X IF(AT(TROLL))OBJ=OBJ*MAXOBJ+TROLL X IF(HERE(GNOME))OBJ=OBJ*MAXOBJ+GNOME X IF(HERE(BEAR).AND.PROP(BEAR).EQ.0)OBJ=OBJ*MAXOBJ+BEAR X IF(HERE(WUMPUS).AND.PROP(WUMPUS).EQ.0)OBJ=OBJ*MAXOBJ+WUMPUS X IF(OBJ.GT.MAXOBJ)GOTO 10000 X IF(OBJ.NE.0)GOTO 21240 XC CAN'T ATTACK BIRD BY THROWING AXE. X IF(HERE(BIRD).AND.VERB.NE.THROW)OBJ=BIRD XC CLAM AND OYSTER BOTH TREATED AS CLAM FOR INTRANSITIVE CASE; NO HARM DONE. X IF(HERE(CLAM).OR.HERE(OYSTER))OBJ=MAXOBJ*OBJ+CLAM X IF(OBJ.GT.MAXOBJ)GOTO 10000 X21240 IF(OBJ.NE.BIRD)GOTO 21250 X SPK=137 X IF(CLOSED)GOTO 2011 X CALL DSTROY(BIRD) X PROP(BIRD)=0 X IF(PLACE(SNAKE).EQ.PLAC(SNAKE))TALLY2=TALLY2+1 X SPK=45 X21250 IF(OBJ.EQ.DWARF)GOTO 21270 X IF(OBJ.EQ.0)SPK=44 X IF(OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER)SPK=150 X IF(AT(DOG).AND.PROP(DOG).EQ.1)SPK=291 X IF(OBJ.EQ.SNAKE)SPK=46 X IF(OBJ.EQ.DRAGON.OR.(OBJ.EQ.WUMPUS.AND.PROP(WUMPUS).EQ.6))SPK=167 X IF(OBJ.EQ.TROLL)SPK=157 X IF(OBJ.EQ.BEAR)SPK=165+(PROP(BEAR)+1)/2 X IF(OBJ.EQ.GNOME)SPK=320 X IF(IOBJ.NE.AXE.OR.VERB.EQ.THROW.OR. X 1 (OBJ.NE.DOG.AND.OBJ.NE.WUMPUS.AND.OBJ.NE.DRAGON X 2 .AND.OBJ.NE.TROLL))GOTO 21253 X IOBJ=OBJ X OBJ=IOBJS(IOBX) X SPK=110 X GOTO 21700 X X21253 IF(IOBJ.NE.0.AND.IOBJ.NE.AXE)GOTO 2070 X IF(.NOT.(OBJ.NE.DRAGON.OR.PROP(DRAGON).NE.0))GOTO 21294 X IF(OBJ.NE.TROLL.AND.SPK.EQ.158)SPK=110 X GOTO 2011 X XC FUN STUFF FOR DRAGON. IF HE INSISTS ON ATTACKING IT, WIN! SET PROP TO DEAD, XC MOVE DRAGON TO CENTRAL LOC (STILL FIXED), MOVE RUG THERE (NOT FIXED), AND XC MOVE HIM THERE, TOO. THEN DO A NULL MOTION TO GET NEW DESCRIPTION. XC THERE IS SOME AMOUNT OF PAIN HERE, TO FORCE GETWDS TO DO THE RIGHT THING. X X21294 CALL RSPEAK(49) X CALL GETLIN X WDX=0 X CALL CLRLIN X IF(TXT(1,1).EQ.'Y '.OR.TXT(1,1).EQ.'YES ')GOTO 21255 X WORDS(1)=-2 X RDFLAG=.TRUE. X GOTO 2600 X X21255 CALL PSPEAK(DRAGON,1) X CALL BITON(DRAGON,DEADBT) X PROP(DRAGON)=2 X PROP(RUG)=0 X K=(PLAC(DRAGON)+FIXD(DRAGON))/2 X CALL MOVE(DRAGON+MAXOBJ,-1) X CALL MOVE(RUG+MAXOBJ,0) X CALL MOVE(DRAGON,K) X CALL MOVE(RUG,K) X DO 21260 OBJ=1,MAXOBJ X IF(PLACE(OBJ).EQ.PLAC(DRAGON).OR.PLACE(OBJ).EQ.FIXD(DRAGON)) X 1 CALL MOVE(OBJ,K) X21260 CONTINUE X WORDS(1)=0 X LOC=K X NEWLOC=K X GOTO 2 X XC HE IS ATTACKING A DWARF. IF USING SOMETHING OTHER THAN AXE OR SWORD, XC GOODBYE CHARLIE. IF USING NOTHING, DON'T LET HIM. IF USING AXE OR XC SWORD, THE FOLLOWING ODDS PREVAIL (IF I CALCULATED THIS MESS RIGHT!) XC (THE END OF LINE FIGURE IS THE CULULATIVE PROBABILITY OF THE EVENT): XC .25 - HERO KILLS DWARF (.25) XC .75 - HERO MISSES XC .25 - HERO GETS KNIFE IN (HIS) RIBS. DIES. (.1875) XC .75 - HERO CAN'T MAKE A CLEAN THRUST XC .36 - STANDOFF (.2) XC .64 - DWARF SLASHES XC .61 - DWARF MISSES! (.22) XC .39 - DWARF KILLS HERO (.14) XC ADVENTURER HAS 1/3 CHANCE OF GETTING NAILED, 1/4 CHANCE OF NAILING XC DWARF. ALL BY WAY OF ENCOURAGING HIM TO THROW THE AXE. X X21270 IF(OBJ.EQ.DWARF.AND.CLOSED)GOTO 93000 X SPK=49 X IF(IOBJ.EQ.0)GOTO 2011 X SPK=355 X IF(IOBJ.NE.AXE.AND.IOBJ.NE.SWORD)GOTO 21275 X IF(PCT(25))GOTO 21753 X IF(PCT(25))GOTO 21275 X CALL RSPEAK(354) X IF(PCT(36))GOTO 2100 X CALL RSPEAK(356) X SPK=52 X IF(PCT(61))GOTO 2011 X SPK=53 X XC HERO IS GONZO. X21275 CALL RSPEAK(SPK) X OLDLC2=LOC X GOTO 94100 XC POUR. IF NO OBJECT, ASSUME LIQ IN CONTAINER, IF HOLDING ONLY ONE. XC SPECIAL TESTS FOR POURING WATER OR OIL ON PLANT OR RUSTY DOOR. X X11300 IF(.NOT.HOLDNG(BOTTLE).AND..NOT.HOLDNG(CASK))GOTO 10000 X K=LIQ(BOTTLE) X KK=LIQ(CASK) X IF(HOLDNG(BOTTLE).AND.K.NE.0.AND.HOLDNG(CASK) X 1 .AND.KK.NE.0)GOTO 10000 X IF(KK.NE.0.AND.HOLDNG(CASK))OBJ=CASK X IF(K.NE.0.AND.HOLDNG(BOTTLE))OBJ=BOTTLE X IF(OBJ.EQ.0)GOTO 10000 X XC POUR OBJ FROM IOBJ. X21300 SPK=78 X IF(OBJ.NE.BOTTLE.AND.OBJ.NE.CASK)GOTO 21310 X IOBJ=OBJ X OBJ=LIQ(IOBJ) X SPK=316 X IF(OBJ.EQ.0)GOTO 2011 X GOTO 21320 X X21310 IF(OBJ.LT.WATER.OR.OBJ.GT.WINE+1)GOTO 2011 X SPK=29 X IF(.NOT.HOLDNG(BOTTLE).AND..NOT.HOLDNG(CASK))GOTO 2011 X IF(HOLDNG(BOTTLE).AND.LIQ(BOTTLE).EQ.OBJ)IOBJ=BOTTLE X IF(HOLDNG(CASK).AND.LIQ(CASK).EQ.OBJ)IOBJ=CASK X IF(IOBJ.EQ.0)GOTO 2011 X21320 SPK=335 X IF(.NOT.AJAR(IOBJ))GOTO 2011 X IF(IOBJ.EQ.CASK)OBJ=OBJ+1 X PROP(IOBJ)=1 X CALL REMOVE(OBJ) X PLACE(OBJ)=0 X SPK=77 X IF(IOBJ.NE.CASK)GOTO 21330 X OBJ=OBJ-1 X SPK=104 X21330 IF(.NOT.(AT(PLANT).OR.AT(DOOR).OR.AT(SWORD)).OR. X 1 AT(SWORD).AND.PROP(SWORD).EQ.0)GOTO 2011 X X IF(AT(DOOR))GOTO 21340 X IF(AT(SWORD))GOTO 21350 X SPK=112 X IF(OBJ.NE.WATER)GOTO 2011 X CALL PSPEAK(PLANT,PROP(PLANT)+1) X PROP(PLANT)=MOD(PROP(PLANT)+2,6) X PROP(PLANT2)=PROP(PLANT)/2 X NEWLOC=LOC X GOTO 2 X X21340 PROP(DOOR)=0 X IF(OBJ.NE.OIL)GOTO 21341 X PROP(DOOR)=1 X CALL BITOFF(DOOR,LOCKBT) X CALL BITON(DOOR,OPENBT) X21341 SPK=113+PROP(DOOR) X GOTO 2011 X XC IF SWORD IS ALREADY OILY, DON'T LET HIM CLEAN IT. NO SOAP. X X21350 IF(PROP(SWORD).EQ.5)GOTO 21360 X PROP(SWORD)=4 X IF(OBJ.NE.OIL)GOTO 21360 X PROP(SWORD)=5 X FIXED(SWORD)=-1 X21360 SPK=206+PROP(SWORD)-4 X GOTO 2011 XC EAT. INTRANSITIVE: ASSUME EDIBLE IF PRESENT, ELSE ASK WHAT. TRANSITIVE: XC FOOD/MUSHROOMS/CAKES OK, SOME THINGS LOSE APPETITE, REST ARE RIDICULOUS. XC IF HE HAS MORE THAN ONE EDIBLE, OR NONE, 'EAT' IS AMBIGUOUS WITHOUT XC AN EXPLICIT OBJECT. X X11400 K=0 X DO 11410 I=1,MAXOBJ X IF(.NOT.(HERE(I).AND.EDIBLE(I))) GOTO 11410 X K=K+1 X KK=I X11410 CONTINUE X IF(K.NE.1)GOTO 10000 X OBJ=KK X IF(OBJ.NE.FOOD.AND.OBJ.NE.HONEY)GOTO 21400 X11420 IF(OBJ.EQ.HONEY)TALLY2=TALLY2+1 X CALL DSTROY(OBJ) X SPK=72 X GOTO 2011 X XC IF HE ATE THE RIGHT THING AND IS IN THE RIGHT PLACE, MOVE HIM TO XC THE OTHER PLACE WITH ALL HIS JUNK. OTHERWISE, NARKY MESSAGE. X21400 IF(OBJ.EQ.FOOD.OR.OBJ.EQ.HONEY)GOTO 11420 X IF(OBJ.EQ.BIRD.OR.OBJ.EQ.SNAKE.OR.OBJ.EQ.CLAM.OR.OBJ.EQ.OYSTER X 1 .OR.OBJ.EQ.FLOWER)SPK=301 X IF(OBJ.EQ.DWARF.OR.OBJ.EQ.DRAGON.OR.OBJ.EQ.TROLL X 1 .OR.OBJ.EQ.DOG.OR.OBJ.EQ.WUMPUS.OR.OBJ.EQ.BEAR X 2 .OR.OBJ.EQ.GNOME)SPK=250 X IF(OBJ.NE.MUSHRM.AND.OBJ.NE.CAKES)GOTO 2011 X X K=OBJ-MUSHRM X LL=229+K X K=159-K X KK=SKEY X IF(OBJ.EQ.MUSHRM)KK=TDOOR X IF(OBJ.EQ.MUSHRM.AND.LOC.NE.158)TALLY2=TALLY2+1 X CALL DSTROY(OBJ) X SPK=228 X IF(.NOT. (HERE(KK).OR.FIXED(KK).EQ.LOC) )GOTO 2011 X CALL RSPEAK(LL) XC IF HE HASN'T TAKEN TINY KEY OFF SHELF, DON'T LET HIM GET IT FOR FREE! X DO 21440 OBJ=1,MAXOBJ X IF(OBJ.EQ.SKEY.AND.PROP(SKEY).EQ.1)GOTO 21440 X IF(PLACE(OBJ).EQ.PLAC(KK).AND.FIXED(OBJ).EQ.0)CALL MOVE(OBJ,K) X21440 CONTINUE X IF(LOC.EQ.PLAC(SKEY).AND.PLACE(SKEY).EQ.PLAC(SKEY)) X 1 TALLY2=TALLY2+1 X LOC=K X NEWLOC=K X GOTO 2 XC DRINK. IF NO OBJECT, ASSUME WATER OR WINE AND LOOK FOR THEM HERE. XC IF POTABLE IS IN BOTTLE OR CASK, DRINK THAT. IF NOT, SEE IF THERE XC IS SOMETHING DRINKABLE NEARBY (STREAM, LAKE, WINE FOUNTAIN, ETC.), XC AND DRINK THAT. IF HE HAS STUFF IN BOTH CONTAINERS, ASK WHICH. X XC DRINK OBJ FROM IOBJ X11500 LL=LIQLOC(LOC) X IF(.NOT.ATHAND(BOTTLE).AND..NOT.ATHAND(CASK) X 1 .AND.LL.NE.WINE.AND.LL.NE.WATER)GOTO 10000 X K=LIQ(BOTTLE) X KK=LIQ(CASK) X IF(.NOT.ATHAND(BOTTLE).OR.K.EQ.0)GOTO 11520 X IF(ATHAND(CASK).AND.KK.NE.0.AND.KK.NE.K)GOTO 10000 X OBJ=K X IOBJ=BOTTLE X GOTO 21560 X X11520 IF(.NOT.ATHAND(CASK).OR.KK.EQ.0)GOTO 11540 X OBJ=KK X IOBJ=CASK X GOTO 21560 X X11540 IF(LL.EQ.0)GOTO 10000 X OBJ=LL X IOBJ=-1 X GOTO 21560 X X21500 IF(OBJ.EQ.0.AND.(IOBJ.EQ.BOTTLE.OR.IOBJ.EQ.CASK))OBJ=LIQ(IOBJ) X SPK=110 X IF(OBJ.EQ.OIL)SPK=301 X IF(OBJ.NE.WATER.AND.OBJ.NE.WINE)GOTO 2011 X IF(IOBJ.NE.0)GOTO 21560 X IF(OBJ.EQ.LIQLOC(LOC))IOBJ=-1 X IF(ATHAND(CASK).AND.OBJ.EQ.LIQ(CASK))IOBJ=CASK X IF(ATHAND(BOTTLE).AND.OBJ.EQ.LIQ(BOTTLE))IOBJ=BOTTLE X21560 SPK=73 X IF(IOBJ.EQ.-1)GOTO 21570 X IF(IOBJ.EQ.CASK)OBJ=OBJ+1 X CALL REMOVE(OBJ) X PLACE(OBJ)=0 X PROP(IOBJ)=1 X SPK=74 X IF(IOBJ.EQ.CASK)SPK=299 X21570 IF(OBJ.EQ.WATER.OR.OBJ.EQ.WATER+1)GOTO 2011 X XC UH-OH. HE'S A WINO. LET HIM REAP THE REWARDS OF INCONTINENCE. XC HE'LL WANDER AROUND FOR AWHILE, THEN WAKE UP SOMEWHERE OR OTHER, XC HAVING DROPPED MOST OF HIS STUFF. X X CALL RSPEAK(300) X IF(PROP(LAMP).EQ.1)LIMIT=LIMIT-RANZ(LIMIT)/2 X IF(LIMIT.LT.10)LIMIT=25 X K=0 X IF(PCT(15))K=49 X IF(K.EQ.0.AND.PCT(15))K=53 X IF(K.EQ.0.AND.PCT(25))K=132 X IF(K.EQ.0)K=175 X IF(OUTSID(LOC))K=5 X IF(K.EQ.LOC)GOTO 2100 X IF(HOLDNG(AXE))CALL MOVE(AXE,K) X IF(HOLDNG(LAMP))CALL MOVE(LAMP,K) X DO 21580 J=1,MAXOBJ X IF(WEARNG(J))CALL BITOFF(J,WEARBT) X21580 IF(HOLDNG(J))CALL DROP(J,LOC) X LOC=K X NEWLOC=K X GOTO 2 X X X X X XC RUB. YIELDS VARIOUS SNIDE REMARKS. X X21600 IF(OBJ.NE.LAMP)SPK=76 X GOTO 2011 XC THROW OBJ AT IOBJ. XC SAME AS DISCARD UNLESS AXE. THEN SAME AS ATTACK EXCEPT IGNORE BIRD, XC AND IF DWARF IS PRESENT THEN ONE MIGHT BE KILLED. XC AXE ALSO SPECIAL FOR DRAGON, BEAR, DOG, WUMPUS AND TROLL. XC TREASURES SPECIAL FOR TROLL. XC IF THROWING FOOD AT SOMEONE WHO MIGHT BE HUNGRY, GO FEED HIM. X X21700 IF(PREP.EQ.PREPDN)GOTO 24200 X IF(HOLDNG(ROD2).AND.OBJ.EQ.ROD.AND..NOT.HOLDNG(ROD))OBJ=ROD2 X IF(.NOT.HOLDNG(OBJ))GOTO 2011 X IF(OBJ.EQ.BOAT.OR.OBJ.EQ.BEAR)GOTO 2070 X DWARFN=0 X IF(IOBJ.NE.0)GOTO 21750 X XC NO INDIRECT OBJ WAS SPECIFIED. IF A DWARF IS PRESENT, ASSUME IT XC IS THE IOBJ. IF NOT, LOOK FOR ANY OTHER LIVING THING. IF NO LIVING XC THINGS PRESENT, TREAT 'THROW' AS 'DROP'. X X L1=DWFMAX-1 X DO 21710 DWARFN=1,L1 X IF(DLOC(DWARFN).EQ.LOC.AND.DFLAG.GE.2)GOTO 21718 X21710 CONTINUE X DWARFN=0 X XC NO DWARVES PRESENT; FIGURE OUT PLAUSIBLE OBJECT. X X K=0 X DO 21715 I=1,MAXOBJ X IF(.NOT. (AT(I).AND.LIVING(I)) )GOTO 21715 X IOBJ=I X K=K+1 X21715 CONTINUE X IF(K.EQ.0)GOTO 20200 X XC IT IS A BEASTIE OF SOME SORT. IS THERE MORE THAN ONE? XC DON'T KILL THE BIRD BY DEFAULT. X X21717 IF(K.EQ.1)GOTO 21718 X CALL RSPEAK(43) X GOTO 2600 X X21718 IF(IOBJ.EQ.BIRD)GOTO 20200 X IF(TREASR(OBJ).AND.AT(TROLL))IOBJ=TROLL X X21750 IF(TREASR(OBJ).AND.IOBJ.EQ.TROLL)GOTO 21790 X IF(OBJ.EQ.SWORD.OR.OBJ.EQ.BOTTLE)GOTO 22800 X IF(DWARFN.NE.0)IOBJ=DWARF X IF(OBJ.EQ.FLOWER.AND.IOBJ.EQ.HIVE)IOBJ=BEES X IF(EDIBLE(OBJ).AND.LIVING(IOBJ))GOTO 22100 X IF(OBJ.NE.AXE)GOTO 20200 X SPK=152 X IF(IOBJ.EQ.DRAGON.AND.PROP(DRAGON).EQ.0)GOTO 21755 X SPK=158 X IF(IOBJ.EQ.TROLL)GOTO 21755 X IF(IOBJ.NE.DWARF)GOTO 21760 X SPK=48 X IF(RANZ(4).EQ.0)GOTO 21755 X IF(DWARFN.NE.0)GOTO 21753 X L1=DWFMAX-1 X DO 21752 DWARFN=1,L1 X IF(DLOC(DWARFN).EQ.LOC.AND.DFLAG.GE.2)GOTO 21753 X21752 CONTINUE XC 'ATTACK' WITH AXE OR SWORD LINKS IN HERE. X21753 DSEEN(DWARFN)=.FALSE. X DLOC(DWARFN)=0 X SPK=47 X DKILL=DKILL+1 X IF(DKILL.EQ.1)SPK=149 X21755 CALL RSPEAK(SPK) X CALL DROP(AXE,LOC) X NEWLOC=LOC X GOTO 2 X XC THIS'LL TEACH HIM TO THROW THE AXE AT THE BEAR! X21760 IF(IOBJ.NE.BEAR.OR.PROP(BEAR).NE.0)GOTO 21765 X SPK=164 X CALL DROP(AXE,LOC) X FIXED(AXE)=-1 X PROP(AXE)=1 X CALL JUGGLE(BEAR) X GOTO 2011 X XC OR THE WUMPUS! X21765 IF(IOBJ.NE.WUMPUS.OR.PROP(WUMPUS).EQ.6)GOTO 21770 X IF(PROP(WUMPUS).EQ.6)GOTO 20200 X SPK=245 X PROP(AXE)=2 X IF(PROP(WUMPUS).EQ.0)GOTO 21780 X SPK=243 X CALL DSTROY(AXE) X GOTO 2011 X XC OR THE NICE DOGGIE! X21770 IF(IOBJ.NE.DOG.OR.PROP(DOG).EQ.1)GOTO 21790 X SPK=248 X PROP(AXE)=3 X21780 CALL DROP(AXE,LOC) X FIXED(AXE)=-1 X CALL JUGGLE(IOBJ) X GOTO 2011 X XC SNARF A TREASURE FOR THE TROLL. X21790 IF(IOBJ.NE.TROLL)GOTO 21795 X PREP=0 X IF(OBJ.EQ.CASK.AND.LIQ(CASK).NE.WINE)GOTO 20200 X SPK=159 X CALL DROP(OBJ,0) X IF(OBJ.EQ.CASK)PLACE(WINE+1)=0 X CALL MOVE(TROLL,0) X CALL MOVE(TROLL+MAXOBJ,0) X CALL DROP(TROLL2,PLAC(TROLL)) X CALL DROP(TROLL2+MAXOBJ,FIXD(TROLL)) X CALL JUGGLE(CHASM) X GOTO 2011 X XC THROWING AXE AT NONE OF THE ABOVE. ASSUME 'ATTACK'. X21795 OBJ=IOBJ X IOBJ=OBJS(OBJX) X GOTO 21200 XC QUIT. INTRANSITIVE ONLY. VERIFY INTENT AND EXIT IF THAT'S WHAT HE WANTS. X X11800 GAVEUP=YES(22,54,54) X11850 IF(GAVEUP)GOTO 95000 X GOTO 2100 X XC FIND. MIGHT BE CARRYING IT, OR IT MIGHT BE HERE. ELSE GIVE CAVEAT. X X21900 IF(AT(OBJ).OR.(LIQ(BOTTLE).EQ.OBJ.AND.AT(BOTTLE)) X 1 .OR.K.EQ.LIQLOC(LOC))SPK=94 X L1=DWFMAX-1 X DO 21920 I=1,L1 X21920 IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2.AND.OBJ.EQ.DWARF)SPK=94 X IF(CLOSED)SPK=138 X IF(ATHAND(OBJ))SPK=24 X GOTO 2011 X X X XC INVENTORY. IF OBJECT, TREAT SAME AS FIND. ELSE REPORT ON CURRENT BURDEN. XC THERE ARE SOME FUNNY CASES, LIKE THE WEARABLE THINGS. ALSO, BOAT XC AND BEAR, WHICH AREN'T REALLY CARRIED. LIST OUTER-LEVEL CONTAINERS XC AND CONTENTS, IF CONTAINER IS OPEN OR TRANSPARENT. X X12000 SPK=98 X DO 12050 I=1,MAXOBJ X IF(I.EQ.BEAR.OR.I.EQ.BOAT.OR..NOT.HOLDNG(I))GOTO 12050 X IF(WEARNG(I))GOTO 12050 X IF(SPK.EQ.98)CALL RSPEAK(99) X BLKLIN=.FALSE. X CALL PSPEAK(I,-1) X SPK=0 X IF(I.NE.BOAT)CALL LOOKIN(I) X12050 CONTINUE X XC TELL HIM WHAT HE IS WEARING. X X K=0 X DO 12060 I=1,MAXOBJ X IF(.NOT.WEARNG(I))GOTO 12060 X IF(K.EQ.0)WRITE(*,12052) X12052 FORMAT(' You are wearing:') X CALL TNOUA X CALL PSPEAK(I,-1) X K=-1 X12060 CONTINUE X X IF(.NOT.HOLDNG(BOAT))GOTO 12090 X CALL RSPEAK(221) X CALL LOOKIN(BOAT) X12090 IF(HOLDNG(BEAR))SPK=141 X GOTO 2011 XC FEED. IF BIRD, NO SEED. SNAKE, DRAGON, TROLL: QUIP. IF DWARF, MAKE HIM XC MAD. BEAR, SPECIAL. X XC CASE 1: FEED CRITTER. *OR* XC CASE 2: FEED CRITTER EDIBLE. XC [** THIS CASE TRANSFORMED BY PARSER INTO CASE 3 **] XC CASE 3: FEED EDIBLE TO CRITTER. X X22100 IF(IOBJ.NE.0.AND.LIVING(IOBJ))GOTO 22120 X SPK=100 X IF(OBJ.EQ.BIRD)GOTO 2011 X IF(.NOT.LIVING(OBJ))GOTO 2070 X XC SEE IF THERE IS ANYTHING EDIBLE AROUND HERE. X KK=0 X K=0 X DO 22110 I=1,MAXOBJ X IF(.NOT.HERE(I).OR..NOT.EDIBLE(I))GOTO 22110 X K=K+1 X KK=I X22110 CONTINUE X IOBJ=OBJ X OBJ=KK X IF(K.EQ.1.OR.DEAD(IOBJ))GOTO 22120 X CALL A5TOA1(OTXT(OBJX,1),OTXT(OBJX,2),'? ',ZAPP,K) X WRITE(*,22112)(ZAPP(I),I=1,K) X22112 FORMAT (/' What do you want to feed the ',20A1) X OBJS(1)=0 X OBJX=0 X GOTO 2600 X XC FEED OBJ TO IOBJ. X22120 IF(IOBJ.NE.SNAKE.AND.IOBJ.NE.DRAGON.AND.IOBJ.NE.TROLL)GOTO 22130 X SPK=102 X IF(IOBJ.EQ.DRAGON.AND.PROP(DRAGON).NE.0)SPK=NOWAY(0) X IF(IOBJ.EQ.TROLL)SPK=182 X IF(IOBJ.NE.SNAKE.OR.CLOSED.OR.OBJ.NE.BIRD)GOTO 2011 X SPK=101 X CALL DSTROY(BIRD) X PROP(BIRD)=0 X TALLY2=TALLY2+1 X GOTO 2011 X XC FEED DWARF? X22130 IF(IOBJ.NE.DWARF)GOTO 22140 X SPK=103 X DFLAG=DFLAG+1 X GOTO 2011 X XC FEED BEAR? X22140 SPK=102 X IF(IOBJ.NE.BEAR)GOTO 22150 X IF(PROP(BEAR).EQ.3)SPK=NOWAY(0) X IF(PROP(BEAR).EQ.1.OR.PROP(BEAR).EQ.2)SPK=264 X IF(OBJ.EQ.FOOD)SPK=278 X IF(OBJ.NE.HONEY)GOTO 2011 X PROP(BEAR)=1 X FIXED(AXE)=0 X PROP(AXE)=0 X SPK=168 X CALL DSTROY(HONEY) X GOTO 2011 X XC FEED DOG? X22150 IF(IOBJ.NE.DOG)GOTO 22160 X IF(PROP(DOG).EQ.1)SPK=291 X IF(OBJ.NE.FOOD.OR.PROP(DOG).EQ.1)GOTO 2011 X SPK=249 X CALL DSTROY(FOOD) X GOTO 2011 X XC FEED WUMPUS? X22160 IF(IOBJ.NE.WUMPUS)GOTO 22170 X IF(PROP(WUMPUS).EQ.6)SPK=326 X IF(PROP(WUMPUS).EQ.0)SPK=327 X IF(OBJ.EQ.FOOD)SPK=240 X GOTO 2011 X XC FEED BEES? X22170 IF(IOBJ.NE.BEES.OR.OBJ.NE.FLOWER)GOTO 2070 X IF(ENCLSD(FLOWER))CALL REMOVE(FLOWER) X CALL DROP(FLOWER,LOC) X FIXED(FLOWER)=-1 X PROP(FLOWER)=1 X CALL DROP(HONEY,LOC) X CALL JUGGLE(HONEY) X SPK=267 X PROP(HIVE)=1 X GOTO 2011 XC FILL. BOTTLE/CASK MUST BE EMPTY, AND SOME LIQUID AVAILABLE. XC (VASE IS NASTY & GRAIL IS CRACKED.) X12200 IF( (.NOT.HERE(BOTTLE).AND..NOT.HERE(CASK)) .OR. X 1 (HERE(BOTTLE).AND.HERE(CASK)) )GOTO 10000 X IF(PROP(CASK).EQ.1.AND.HERE(CASK))OBJ=CASK X IF(PROP(BOTTLE).EQ.1.AND.HERE(BOTTLE))OBJ=BOTTLE X IF(OBJ.EQ.0)GOTO 10000 X XC FILL OBJ WITH IOBJ X22200 SPK=313 X IF(.NOT.VESSEL(OBJ))GOTO 2011 X IF(IOBJ.EQ.0)IOBJ=LIQLOC(LOC) X IF(OBJ.NE.BOTTLE.AND.OBJ.NE.CASK)GOTO 22220 X K=0 X IF(OBJ.EQ.CASK)K=1 X SPK=0 X IF(IOBJ.EQ.0)SPK=304+K X IF(LIQ(OBJ).NE.0)SPK=302+K X IF(SPK.NE.0)GOTO 2011 X SPK=306+K X IF(IOBJ.EQ.OIL)SPK=308+K X IF(IOBJ.EQ.WINE)SPK=310+K X PROP(OBJ)=MOD(LOCCON(LOC),8)/2*2 X PLACE(IOBJ+K)=-1 X CALL INSERT(IOBJ+K,OBJ) X GOTO 2011 X XC VASE. (NASTY). X22220 IF(OBJ.NE.VASE)GOTO 22230 X SPK=144 X IF(IOBJ.EQ.0.OR..NOT.HOLDNG(VASE))GOTO 2011 X CALL RSPEAK(145) X PROP(VASE)=2 X FIXED(VASE)=-1 X GOTO 20290 X XC GRAIL OR OTHER. X22230 SPK=339 X IF(OBJ.EQ.GRAIL)SPK=298 X GOTO 2011 X XC BLAST. NO EFFECT UNLESS YOU'VE GOT DYNAMITE, WHICH IS A NEAT TRICK! X X12300 IF(CLOSED)GOTO 12310 X GO TO 2011 X12310 BONUS=135 X IF(PLACE(ROD2).EQ.212.AND.LOC.EQ.116)BONUS=133 X IF(PLACE(ROD2).EQ.116.AND.LOC.NE.116)BONUS=134 X CALL RSPEAK(BONUS) X GOTO 95000 XC SCORE. X X12400 SCORNG=.TRUE. X CALL RATING(SCORE,BONUS,GAVEUP,SCORNG,CLOSNG,CLOSED X 1 ,HNTMAX) X SCORNG=.FALSE. X WRITE(*,12412)SCORE,MXSCOR,TURNS X12412 FORMAT(/' If you were to quit now, you would score',I4 X 1 ,' out of',I4,' using',I4,' turns.') XC GAVEUP=YES(143,54,54) XC GOTO 11850 X GOTO 2100 X XC FEE FIE FOE FOO (AND FUM). ADVANCE TO NEXT STATE IF GIVEN IN PROPER ORDER. XC LOOK UP WD1 IN SECTION 3 OF VOCAB TO DETERMINE WHICH WORD WE'VE GOT. LAST XC WORD ZIPS THE EGGS BACK TO THE GIANT ROOM (UNLESS ALREADY THERE). X X12500 K=VOCABX(VTXT(VRBX,1),4) X SPK=42 X IF(FOOBAR.EQ.1-K)GOTO 12520 X IF(FOOBAR.NE.0)SPK=151 X GOTO 2011 X X12520 FOOBAR=K X IF(K.NE.4)GOTO 2009 X FOOBAR=0 X IF(PLACE(EGGS).EQ.PLAC(EGGS) X 1 .OR.(TOTING(EGGS).AND.LOC.EQ.PLAC(EGGS)))GOTO 2011 XC BRING BACK TROLL IF WE STEAL THE EGGS BACK FROM HIM BEFORE CROSSING. X IF(PLACE(EGGS).EQ.0.AND.PLACE(TROLL).EQ.0.AND.PROP(TROLL).EQ.0) X 1 PROP(TROLL)=1 X K=2 X IF(HERE(EGGS))K=1 X IF(LOC.EQ.PLAC(EGGS))K=0 X CALL MOVE(EGGS,PLAC(EGGS)) X CALL PSPEAK(EGGS,K) X GOTO 2100 X XC BRIEF/UNBRIEF. INTRANSITIVE ONLY. XC SUPPRESS LONG DESCRIPTIONS AFTER FIRST TIME. X X12600 DETAIL=3 X TERSE=.FALSE. X IF(ABBNUM.EQ.10000)GOTO 12610 X SPK=156 X ABBNUM=10000 X GOTO 2011 X X12610 ABBNUM=5 X SPK=374 X GOTO 2011 X X22600 IF(OBJ.NE.0.AND.LIVING(OBJ).AND.IOBJ.NE.0)GOTO 2011 X GOTO 2060 X XC READ. MAGAZINES IN DWARVISH, MESSAGE WE'VE SEEN, AND . . . OYSTER? X X22700 IF(BLIND(0))GOTO 2011 X IF(OBJ.NE.0.AND.IOBJ.NE.0)GOTO 2060 X SPK=CONFUZ(0) X IF(OBJ.EQ.0)OBJ=IOBJ X IF(OBJ.EQ.BOOK.OR.OBJ.EQ.BOOK2)SPK=142 X IF(OBJ.EQ.BILLBD)SPK=361 X IF(OBJ.EQ.CARVNG)SPK=372 X IF(OBJ.EQ.MAGZIN)SPK=190 X IF(OBJ.EQ.MESSAG)SPK=191 X IF(OBJ.EQ.OYSTER.AND.HINTED(2).AND.HOLDNG(OYSTER))SPK=194 X IF(OBJ.EQ.POSTER)SPK=370 X IF(OBJ.EQ.TABLET)SPK=196 X IF(OBJ.NE.OYSTER.OR.HINTED(2).OR..NOT.HOLDNG(OYSTER) X 1 .OR..NOT.CLOSED)GOTO 2011 X HINTED(2)=YES(192,193,54) X GOTO 2100 XC BREAK. WORKS FOR MIRROR IN REPOSITORY AND, OF COURSE, THE XC VASE AND BOTTLE. ALSO, THE SWORD IS MORE BRITTLE THAN IT APPEARS. X X22800 IF(OBJ.EQ.MIRROR)SPK=148 X IF(OBJ.EQ.VASE.AND.PROP(VASE).EQ.0)GOTO 22820 X IF(OBJ.EQ.BOTTLE.AND.PROP(BOTTLE).NE.3)GOTO 22840 X IF(OBJ.EQ.SWORD)GOTO 22860 X IF(OBJ.NE.MIRROR.OR..NOT.CLOSED)GOTO 2011 X CALL RSPEAK(197) X GOTO 93000 X X22820 SPK=198 X PROP(VASE)=2 X22830 IF(ENCLSD(OBJ))CALL REMOVE(OBJ) X IF(HOLDNG(OBJ))CALL DROP(OBJ,LOC) X FIXED(OBJ)=-1 X GOTO 2011 X X22840 SPK=231 X K=LIQ(BOTTLE) X PROP(BOTTLE)=3 X IF(K.EQ.0)GOTO 22830 X CALL REMOVE(K) X PLACE(K)=0 X GOTO 22830 X XC HE'D BETTER NOT SLING THE SWORD AROUND! X22860 SPK=29 X IF(.NOT.HOLDNG(SWORD))GOTO 2011 X SPK=279 X PROP(SWORD)=4 X GOTO 22830 X XC ERWACHE. ONLY USE IS TO DISTURB THE DWARVES OR THE WUMPUS. XC OTHER WUMPUS-WAKERS LINK HERE. X X22900 IF(.NOT.AT(WUMPUS))GOTO 22940 X CHASE=1 X PROP(WUMPUS)=1 X SPK=276 X GOTO 2011 X X22940 IF(AT(DOG).AND.PROP(DOG).EQ.1)SPK=291 X IF(OBJ.NE.DWARF.OR..NOT.CLOSED)GOTO 2011 X CALL RSPEAK(199) X GOTO 93000 X X13000 SPK=201 X X OPEN (UNIT=16,FILE='ASAVE',STATUS='UNKNOWN',FORM= X 1 'UNFORMATTED',ACCESS='SEQUENTIAL') X WRITE(16)ISWIZ,OPENBT,LOCKBT,BURNBT,WEARBT X WRITE(16)BLKLIN,LOCCON,OBJCON,NUMDIE,MAXDIE,TURNS,KILLED X WRITE(16)DWARF,KNIFE,KNFLOC,DFLAG,DSEEN,DLOC,ODLOC,DWFMAX X WRITE(16)HOLDER,HLINK X WRITE(16)BOTTLE,CASK,WATER,OIL,WINE,LIQTYP X WRITE(16)LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X WRITE(16) LTEXT,STEXT,KEY,ABB,LOCSIZ X X WRITE(16)PLAC,FIXD,WEIGHT,PROP,POINTS X WRITE(16) ATLOC,LINK,PLACE, X 1 FIXED,MAXOBJ X WRITE(16) VERBS,VRBX,OBJS, X 1 OBJX,IOBJS,IOBX,PREP,WORDS X X WRITE(16)ABBNUM,ADJ,ATBS,ATTACK,BCROSS,BONUS,CHASE, X 1 CLOCK1,CLOCK2,CLOCK3,CLOSED,CLOSNG,CLSMAX,COMBO,DEADBT, X 2 DETAIL,DKILL,DTOTAL,DWARFN,FLG239, X 3 FOO,FOOBAR,FOOD,GAVEUP,HEALTH,HINT,HIT,HNTMAX,I,IKK,ILOC, X 4 IOBJ,J,JJ,JK1,JKK,K,K1,KK,L,L1,LIMIT, X 5 LINSIZ,LL,LMWARN,LOCK,LOGOUT,MESSAG,OBJ,PANIC, X 6 PORTAL,PTBS,RDFLAG,RETN,RTXSIZ,SCORE,SCORNG,SECT, X 7 SKEY,SLOC,SPK,START,STICK,TABNDX,TALLY,TALLY2,TERSE, X 8 TRVS,TRVSIZ,VEND,VERB,VRBSIZ,WASTE,WKDAY,WKEND,WZDARK, X 9 YEA,ACTSPK,CTEXT,CVAL,HNAME X CLOSE(16) X X X X GOTO 2100 XC THE ZSAVE FUNCTION MUST BE CHANGED IF ANY NEW VARIABLES XC WHICH CHANGE DURING EXECUTION ARE ADDED. X X XC RESUME RESUME GAME BROM BACKUP FILE X X13100 CONTINUE XC **************************** XC SEE THE COMMENT ON SUSPEND ABOVE!!!!!!!!!!! X X OPEN (UNIT=16,FILE='ASAVE',STATUS='OLD',FORM= X 1 'UNFORMATTED',ACCESS='SEQUENTIAL') X REWIND(16) X READ(16)ISWIZ,OPENBT,LOCKBT,BURNBT,WEARBT X READ(16)BLKLIN,LOCCON,OBJCON,NUMDIE,MAXDIE,TURNS X READ(16)DWARF,KNIFE,KNFLOC,DFLAG,DSEEN,DLOC,ODLOC,DWFMAX X READ(16)HOLDER,HLINK X READ(16)BOTTLE,CASK,WATER,OIL,WINE,LIQTYP X READ(16)LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X READ(16) LTEXT,STEXT,KEY,ABB,LOCSIZ X X READ(16)PLAC,FIXD,WEIGHT,PROP,POINTS X READ(16) ATLOC,LINK,PLACE, X 1 FIXED,MAXOBJ X READ(16) VERBS,VRBX,OBJS, X 1 OBJX,IOBJS,IOBX,PREP,WORDS X X READ(16)ABBNUM,ADJ,ATBS,ATTACK,BCROSS,BONUS,CHASE, X 1 CLOCK1,CLOCK2,CLOCK3,CLOSED,CLOSNG,CLSMAX,COMBO,DEADBT, X 2 DETAIL,DKILL,DTOTAL,DWARFN,FLG239, X 3 FOO,FOOBAR,FOOD,GAVEUP,HEALTH,HINT,HIT,HNTMAX,I,IKK,ILOC, X 4 IOBJ,J,JJ,JK1,JKK,K,K1,KK,L,L1,LIMIT, X 5 LINSIZ,LL,LMWARN,LOCK,LOGOUT,MESSAG,OBJ,PANIC, X 6 PORTAL,PTBS,RDFLAG,RETN,RTXSIZ,SCORE,SCORNG,SECT, X 7 SKEY,SLOC,SPK,START,STICK,TABNDX,TALLY,TALLY2,TERSE, X 8 TRVS,TRVSIZ,VEND,VERB,VRBSIZ,WASTE,WKDAY,WKEND,WZDARK, X 9 YEA,ACTSPK,CTEXT,CVAL,HNAME X CLOSE(16) X X X X GOTO 2100 X X XC YANK. A VARIANT OF 'CARRY'. IN GENERAL, NOT A GOOD IDEA. XC AT MOST, IT GETS THE CLOAK OR A COUPLE SNIDE COMMENTS. X X23200 IF(TOTING(OBJ))GOTO 20200 X IF(OBJ.EQ.PLANT.OR.OBJ.EQ.SWORD.OR.OBJ.EQ.CHAIN)GOTO 20100 X SPK=205 X IF(OBJ.EQ.BEAR.AND.PROP(CHAIN).EQ.1)GOTO 2011 X IF(OBJ.EQ.CLOAK.AND.PROP(CLOAK).EQ.2)GOTO 20120 X GOTO 20100 X XC WEAR: ONLY GOOD FOR JEWELS, RUBY SLIPPERS, CLOAK & CROWN. XC BUT HE MIGHT TRY THE SWORD. ANYTHING ELSE IS RIDICULOUS. XC ANOTHER VARIANT OF 'CARRY'. X X23300 SPK=209 X IF(OBJ.EQ.SWORD.AND.PROP(SWORD).NE.3)GOTO 2011 X IF(WORN(OBJ))GOTO 23320 X23310 CALL A5TOA1(OTXT(OBJX,1),OTXT(OBJX,2),'? ',ZAPP,K) X WRITE(*,23312)(ZAPP(I),I=1,K) X23312 FORMAT(/' Just exactly how does one wear a ',20A1) X GOTO 2100 X X23320 SPK=242 X IF(OBJ.EQ.CLOAK.AND.PROP(CLOAK).EQ.2)GOTO 2011 X SPK=210 X IF(OBJ.EQ.SHOES)SPK=227 X IF(WEARNG(OBJ))GOTO 2011 X PROP(OBJ)=1 X CALL BITON(OBJ,WEARBT) X IF(ENCLSD(OBJ))CALL REMOVE(OBJ) X IF(HOLDNG(OBJ))GOTO 2009 X GOTO 20120 XC HIT. IF NOT PUNCHING OUT TELEPHONE, ASSUME ATTACK. X X23400 IF(AT(WUMPUS).AND.PROP(WUMPUS).EQ.0)GOTO 22900 X IF(OBJ.NE.PHONE)GOTO 21200 X IF(CLOSED)GOTO 93100 X SPK=256 X IF(PROP(PHONE).EQ.2)GOTO 2011 X CALL DROP(SLUGS,LOC) X SPK=257 X PROP(PHONE)=2 X PROP(BOOTH)=2 X GOTO 2011 X XC ANSWER (TELEPHONE). SMARTASS FOR ANYTHING ELSE. X13500 IF(LOC.NE.189.OR.PROP(PHONE).NE.0)GOTO 10000 X OBJ=PHONE X23500 IF(OBJ.NE.PHONE)GOTO 23520 X SPK=269 X IF(PROP(PHONE).NE.0)GOTO 2011 X IF(CLOSED)GOTO 93200 X SPK=261 X PROP(PHONE)=1 X PROP(BOOTH)=2 X GOTO 2011 X X23520 IF(OBJ.EQ.DWARF.OR.OBJ.EQ.WUMPUS.OR.OBJ.EQ.SNAKE.OR.OBJ.EQ.BEAR X 1 .OR.OBJ.EQ.DRAGON)SPK=259 X IF(OBJ.EQ.TROLL)SPK=258 X IF(OBJ.EQ.BIRD)SPK=260 X GOTO 2011 XC BLOW. JOSHUA FIT DE BATTLE OF JERICHO, AND DE WALLS.... X X23600 IF(OBJ.NE.0.AND.IOBJ.NE.0)GOTO 2060 X IF(OBJ.EQ.0)OBJ=IOBJ X IOBJ=0 X IF(OBJ.EQ.0)SPK=268 X IF(OBJ.NE.HORN)GOTO 2011 X SPK=266 X IF(OUTSID(LOC))SPK=277 X IF(.NOT.AT(WUMPUS))GOTO 23610 X IF(PROP(WUMPUS).NE.0)GOTO 2011 X CALL RSPEAK(SPK) X GOTO 22900 X X23610 IF(PROP(WALL).EQ.1.OR.(LOC.NE.102.AND.LOC.NE.194))GOTO 2011 X K=196 X IF(LOC.EQ.194)K=195 X CALL RSPEAK(265) X PROP(WALL)=1 X DO 23620 OBJ=1,MAXOBJ X IF(PLACE(OBJ).EQ.LOC.OR.FIXED(OBJ).EQ.LOC)CALL MOVE(OBJ,K) X23620 CONTINUE X NEWLOC=K X GOTO 2 X X XC CALL. IF NO PHONE IS HANDY, YELL. X X13800 IF(.NOT.HERE(PHONE))GOTO 10000 X GOTO 23910 X XC DIAL. NO EFFECT UNLESS AT PHONE. X X23900 IF(OBJ.NE.PHONE)GOTO 2011 X23910 IF(CLOSED)GOTO 93200 X SPK=271 X GOTO 2011 X X XC PLAY. ONLY FOR HORN OR LYRE. X24000 IF(OBJ.NE.0.AND.IOBJ.NE.0)GOTO 2060 X IF(OBJ.EQ.0)OBJ=IOBJ X IOBJ=0 X IF(OBJ.EQ.HORN)GOTO 23600 X IF(OBJ.NE.LYRE)GOTO 2011 X SPK=287 X IF(.NOT.HERE(DOG).OR.DEAD(DOG))GOTO 2011 X PROP(DOG)=1 X CALL BITON(DOG,DEADBT) X FIXED(AXE)=0 X PROP(AXE)=0 X SPK=288 X GOTO 2011 X X XC PICK/PICK UP. CAN PICK FLOWERS & MUSHROOMS, BUT MUST 'PICK UP' EVERYTHING EL X X24100 IF(OBJ.EQ.0)OBJ=IOBJ X IOBJ=0 X IF(OBJ.EQ.FLOWER.OR.OBJ.EQ.MUSHRM)GOTO 20100 X IF(PREP.NE.0)GOTO 20100 X GOTO 2060 XC PUT DOWN: EQUIVALENT TO DROP. XC PUT IN: IF LIQUID, MEANS 'FILL'. XC PUT ON: WEAR OR DROP. X X24200 IF(PREP.NE.0)GOTO 24210 X CALL A5TOA1(OTXT(OBJX,1),OTXT(OBJX,2),'? ',ZAPP,K) X WRITE(*,24204)(ZAPP(I),I=1,K) X24204 FORMAT(/' Where do you want to put the ',20A1) X GOTO 2600 X X24210 IF(PREP.EQ.PREPIN)GOTO 24500 X XC PUT ON: "WEAR" OR "PUT OBJ ON IOBJ". X24240 IF(PREP.NE.PREPON)GOTO 24250 X IF(OBJ.NE.0)GOTO 24242 X OBJ=IOBJ X OTXT(OBJX,1)=IOTXT(IOBX,1) X OTXT(OBJX,2)=IOTXT(IOBX,2) X IOBJ=0 X24242 IF(WORN(OBJ))GOTO 23300 X IF(IOBJ.EQ.0)GOTO 23310 X GOTO 20200 X XC PUT DOWN: "DROP" X24250 IF(OBJ.EQ.0.OR.IOBJ.EQ.0)GOTO 24252 X GOTO 2070 X X24252 IF(OBJ.EQ.0)OBJ=IOBJ X IOBJ=0 X GOTO 20200 X X XC TURN ON/OFF. X X24300 IF(PREP.EQ.0)GOTO 2060 X IF(OBJ.EQ.0.AND.IOBJ.EQ.LAMP)OBJ=LAMP X IF(OBJ.NE.LAMP)GOTO 2070 X IF(PREP.EQ.PREPON)GOTO 20700 X GOTO 20800 X X XC GET (NO PREP): "TAKE" XC GET IN: "ENTER" XC GET OUT: "LEAVE" XC****** NEEDS WORK X X24400 IF(PREP.EQ.0.OR.PREP.EQ.PREPFR)GOTO 20100 X IF(OBJ.NE.0)GOTO 2060 X OBJ=IOBJ X IOBJ=0 X PREP=0 X GOTO 20100 XC INSERT/PUT IN. X X24500 IF(IOBJ.EQ.0)GOTO 10010 X SPK=NOWAY(0) X IF(OBJ.EQ.SWORD.AND.IOBJ.EQ.ANVIL.AND.PROP(SWORD).EQ.0)SPK=350 X IF(.NOT.VESSEL(IOBJ))GOTO 2011 X ASSIGN 24510 TO RETN X GOTO 20190 X X24510 IF(IOBJ.NE.BOTTLE.AND.IOBJ.NE.CASK.AND.IOBJ.NE.VASE X 1 .AND.IOBJ.NE.GRAIL.AND.(OBJ.LT.WATER.OR.OBJ.GT.WINE+1)) X 2 GOTO 24515 X OBJ=IOBJ X IOBJ=OBJS(OBJX) X GOTO 22200 X X24515 SPK=252 X IF(OBJ.EQ.IOBJ)GOTO 2011 X SPK=358 X IF(.NOT.AJAR(IOBJ))GOTO 2011 X IF(IOBJ.NE.BOAT.AND.IOBJ.NE.CHEST)GOTO 24520 X IF(IOBJ.EQ.CHEST.AND.OBJ.EQ.BOAT)GOTO 2070 X GOTO 24590 X XC BIRD GOES INTO CAGE AND ONLY CAGE. CAGE HOLDS NOTHING ELSE. XC BAR VASE & PILLOW FROM SAFE, TO FORCE PUTTING DOWN ON FLOOR. X24520 SPK=351 X IF(OBJ.EQ.BIRD.AND.IOBJ.NE.CAGE)GOTO 2011 X SPK=329 X IF(IOBJ.EQ.CAGE.AND.OBJ.NE.BIRD)GOTO 2011 X IF(OBJ.EQ.BIRD)GOTO 20120 X IF(IOBJ.EQ.SAFE.AND.(OBJ.EQ.VASE.OR.OBJ.EQ.PILLOW))GOTO 2011 X IF(IOBJ.EQ.SHIELD.AND.OBJ.NE.RADIUM)GOTO 2011 X IF(IOBJ.NE.PHONE)GOTO 24530 X IF(OBJ.NE.COINS.AND.OBJ.NE.SLUGS)GOTO 2070 X CALL DSTROY(OBJ) X SPK=330 X GOTO 2011 X X24530 IF(IOBJ.NE.VEND)GOTO 24540 X IF(OBJ.NE.COINS.AND.OBJ.NE.SLUGS)GOTO 2070 X CALL DSTROY(OBJ) X CALL MOVE(BATTER,LOC) X IF(PROP(BATTER).NE.1)GOTO 24535 X CALL RSPEAK(317) X PROP(VEND)=1 X24535 PROP(BATTER)=0 X CALL PSPEAK(BATTER,0) X GOTO 2100 X XC PUT BATTERIES IN LAMP. XC THERE IS A GLITCH HERE, IN THAT IF HE TRIES TO GET A THIRD SET OF XC BATTERIES BEFORE THE SECOND SET HAS BEEN INSERTED, THE SECOND SET XC DISAPPEARS! ***FIX THIS SOMETIME*** X24540 IF(IOBJ.NE.LAMP)GOTO 24550 X IF(OBJ.NE.BATTER.OR.PROP(BATTER).NE.0)GOTO 2070 X PROP(BATTER)=1 X IF(ENCLSD(BATTER))CALL REMOVE(BATTER) X IF(HOLDNG(BATTER))CALL DROP(BATTER,LOC) X LIMIT=400 X PROP(LAMP)=1 X LMWARN=.FALSE. X SPK=188 X GOTO 2011 X X24550 IF(.NOT.SMALL(OBJ))GOTO 2011 X24590 IF(WEARNG(OBJ))CALL BITOFF(OBJ,WEARBT) X IF(WORN(OBJ))PROP(OBJ) = 0 X IF(ENCLSD(OBJ))CALL REMOVE(OBJ) X CALL INSERT(OBJ,IOBJ) X GOTO 2009 XC REMOVE/TAKE FROM. X X24600 IF(OBJ.NE.RING.OR.PROP(RING).NE.2)GOTO 24610 X PREP=0 X IOBJ=0 X GOTO 20100 X X24610 SPK=343 X IF(IOBJ.NE.0)GOTO 24620 X IF(.NOT.ENCLSD(OBJ))SPK=340 X IOBJ=-PLACE(OBJ) X24620 IF(PLACE(OBJ).NE.-IOBJ)SPK=341 X IF(.NOT.AJAR(IOBJ))SPK=335 X IF(OBJ.EQ.WATER.OR.OBJ.EQ.OIL.OR.OBJ.EQ.WINE)SPK=342 X IF(.NOT.TOTING(OBJ).AND.BURDEN(0)+BURDEN(OBJ).GT.15)SPK=92 X IF(SPK.NE.343)GOTO 2011 X CALL REMOVE(OBJ) X IF(OBJ.EQ.BIRD)GOTO 20200 X GOTO 2009 X X XC BURN X X24700 GOTO 2011 X X XC GRIPE/COMPLAIN/SUGGEST. X X14800 CONTINUE XC A SUGGESTION MECHANISM USED TO GO HERE. IT IS NOT NEEDED FOR A XC SINGLE-USER GAME X GOTO 2011 XC LOCK. CHAIN, GRATE, CHEST, ELFIN DOOR XC HERE ARE THE CURRENT LOCK/UNLOCK MESSAGES & NUMBERS: XC 31 YOU HAVE NO KEYS. XC 32 IT HAS NO LOCK. XC 34 IT'S ALREADY LOCKED. XC 35 THE GRATE IS NOW LOCKED. XC 36 THE GRATE IS NOW UNLOCKED. XC 37 IT WAS ALREADY UNLOCKED. XC 55 YOU CAN'T UNLOCK THE KEYS. XC 171 THE CHAIN IS NOW UNLOCKED. XC 172 THE CHAIN IS NOW LOCKED. XC 173 THERE IS NOTHING HERE TO WHICH THE CHAIN CAN BE LOCKED. XC 224 YOUR KEYS ARE ALL TOO LARGE. XC 234 THE WROUGHT-IRON DOOR IS NOW LOCKED. XC 235 THE TINY DOOR IS NOW LOCKED. XC 236 THE WROUGHT-IRON DOOR IS NOW UNLOCKED. XC 237 THE TINY DOOR IS NOW UNLOCKED. XC 375 YOU DON'T HAVE THE RIGHT KEY. XC 333 THE CHEST IS NOW LOCKED. XC 334 THE CHEST IS NOW UNLOCKED. XC 367 THE SAFE'S DOOR SWINGS SHUT. X X24900 IF(HINGED(OBJ))GOTO 24905 X CALL A5TOA1(OTXT(OBJX,1),OTXT(OBJX,2),'. ',ZAPP,K) X WRITE(*,24903)(ZAPP(I),I=1,K) X24903 FORMAT(/' I don''t know how to lock or unlock the ',20A1) X GOTO 2100 X X24905 SPK=375 X IF(.NOT.LOCKS(OBJ))SPK=32 X IF(LOCKED(OBJ))SPK=34 X IF(.NOT.(ATHAND(KEYS).OR.ATHAND(SKEY).OR.OBJ.EQ.SAFE))SPK=31 X IF(SPK.NE.375)GOTO 2011 X XC CHAIN. X IF(OBJ.NE.CHAIN)GOTO 24910 X IF(.NOT.ATHAND(KEYS))GOTO 2011 X SPK=173 X IF(LOC.NE.PLAC(CHAIN))GOTO 2011 X SPK=172 X PROP(CHAIN)=2 X IF(ENCLSD(CHAIN))CALL REMOVE(CHAIN) X IF(HOLDNG(CHAIN))CALL DROP(CHAIN,LOC) X FIXED(CHAIN)=-1 X GOTO 24990 X XC CHEST. X24910 IF(OBJ.NE.CHEST)GOTO 24920 X IF(.NOT.ATHAND(KEYS))GOTO 2011 X SPK=334 X GOTO 24990 X XC ELFIN DOOR. X24920 IF(OBJ.NE.TDOOR.AND.OBJ.NE.TDOOR2)GOTO 24930 X SPK=224 X IF(.NOT.TOTING(SKEY))GOTO 2011 X PROP(TDOOR)=0 X PROP(TDOOR2)=0 X SPK=234+2*PROP(TDOOR)+(TDOOR2-OBJ) X K=TDOOR+(TDOOR2-OBJ) X CALL BITON(K,LOCKBT) X CALL BITOFF(K,OPENBT) X GOTO 24990 X XC GRATE. X24930 IF(OBJ.NE.GRATE)GOTO 24940 X IF(.NOT.ATHAND(KEYS))GOTO 2011 X PROP(GRATE)=0 X SPK=35 X GOTO 24990 X XC SAFE. X24940 PROP(SAFE)=0 X SPK=367 XC GOTO 24990 X X24990 CALL BITON(OBJ,LOCKBT) X CALL BITOFF(OBJ,OPENBT) X GOTO 2011 XC UNLOCK. CHAIN, GRATE, CHEST, ELFIN DOOR. X X25000 SPK=55 X IF(OBJ.EQ.KEYS.OR.OBJ.EQ.SKEY)GOTO 2011 X IF(.NOT.HINGED(OBJ))GOTO 24900 X SPK=375 X IF(.NOT.LOCKED(OBJ))SPK=37 X IF(.NOT.LOCKS(OBJ))SPK=32 X IF(OBJ.EQ.SAFE)SPK=342 X IF(OBJ.EQ.SAFE.AND.(IOBJ.EQ.KEYS.OR.IOBJ.EQ.SKEY))SPK=368 X IF(.NOT.(ATHAND(KEYS).OR.ATHAND(SKEY).OR.OBJ.EQ.SAFE))SPK=31 X IF(SPK.NE.375)GOTO 2011 X XC CHAIN. X IF(OBJ.NE.CHAIN)GOTO 25020 X IF(.NOT.ATHAND(KEYS))GOTO 2011 X SPK=171 X IF(PROP(BEAR).EQ.0)SPK=41 X IF(SPK.NE.171)GOTO 2011 X PROP(CHAIN)=0 X FIXED(CHAIN)=0 X IF(PROP(BEAR).NE.3)PROP(BEAR)=2 X FIXED(BEAR)=2-PROP(BEAR) X GOTO 25090 X XC CHEST. X25020 IF(OBJ.NE.CHEST)GOTO 25030 X IF(.NOT.ATHAND(KEYS))GOTO 2011 X SPK=333 X GOTO 25090 X XC ELFIN DOOR. XC STUFF TO LOCK/UNLOCK TINY DOOR W/SPECIAL KEY. XC THE DAMN THING IS REALLY AT FOUR PLACES, AND WE WANT THE RIGHT XC MESSAGES IF HE ONLY HAS 'BIG' KEYS (OR NO KEYS). ALSO, HE XC CAN UNLOCK IT EITHER WHILE HE IS BIG OR SMALL. X25030 IF(OBJ.NE.TDOOR.AND.OBJ.NE.TDOOR2)GOTO 25040 X SPK=224 X IF(.NOT.ATHAND(SKEY))GOTO 2011 X IF(CLOSNG)GOTO 25060 X PROP(TDOOR)=1 X PROP(TDOOR2)=1 X SPK=234+2*PROP(TDOOR)+(TDOOR2-OBJ) X K=TDOOR+(TDOOR2-OBJ) X CALL BITOFF(K,LOCKBT) X CALL BITON(K,OPENBT) X GOTO 25090 X XC GRATE. X25040 IF(.NOT.ATHAND(KEYS))GOTO 2011 X IF(CLOSNG)GOTO 25060 X PROP(GRATE)=1 X SPK=36 X X25090 CALL BITOFF(OBJ,LOCKBT) X CALL BITON(OBJ,OPENBT) X GOTO 2011 X XC CLOSING. NO EXIT THIS WAY. X25060 SPK=130 X IF(.NOT.PANIC)CLOCK2=15 X PANIC=.TRUE. X GOTO 2011 X X XC HEALTH. GIVE HIM A DIAGNOSIS. X X25100 IF(HEALTH.LT.100)WRITE(*,25102)HEALTH X25102 FORMAT(/' You''re health rating is ',I2, X 1 ' out of a possible 100.') X IF(PCT(50))SPK=349 X IF(HEALTH.GE.95)GOTO 2011 X SPK=381 + (100-HEALTH)/20 X GOTO 2011 X X XC LOOK. CAN'T GIVE MORE DETAIL. PRETEND IT WASN'T DARK (THOUGH IT MAY "NOW" XC BE DARK) SO HE WON'T FALL INTO A PIT WHILE STARING INTO THE GLOOM. X X25200 IF(OBJ.NE.0)GOTO 2060 X IF(IOBJ.NE.0)GOTO 25210 X25201 IF(DETAIL.LT.3)CALL RSPEAK(15) X DETAIL=DETAIL+1 X WZDARK=.FALSE. X ABB(LOC)=0 X NEWLOC=LOC X GOTO 2 X XC LOOK INTO SOMETHING (A CONTAINER). X25210 IF(.NOT.VESSEL(IOBJ))GOTO 25220 X IF(.NOT.AJAR(IOBJ).AND.OPAQUE(IOBJ))GOTO 2011 X SPK=359 X IF(HOLDER(IOBJ).EQ.0)GOTO 2011 X WRITE(*,25212) X25212 FORMAT(' ') X CALL LOOKIN(IOBJ) X GOTO 2100 X XC LOOK AT SOMETHING. IF WRITTEN, READ IT. X25220 IF(.NOT.PRINTD(IOBJ))GOTO 25230 X OBJ=IOBJ X IOBJ=0 X GOTO 22700 X X25230 IF(IOBJ.NE.SPHERE)GOTO 25201 X IF(INSIDE(LOC).AND.(.NOT.ATHAND(SAPPHI)))GOTO 25232 X CALL RSPEAK(42) X GO TO 2100 X25232 CALL RSPEAK(400) X WRITE(*,*)' ' X SLOC=PLACE(SAPPHI) X IF((MOD(LOCCON(SLOC),2).EQ.0.OR.ENCLSD(SAPPHI)).AND.SLOC.NE.200 X 1 .AND..NOT.(PLACE(LAMP).EQ.SLOC.AND.PROP(LAMP).NE.0)) X 1 GO TO 25234 X CALL SPEAK(LTEXT(SLOC)) X IF(SLOC.NE.239.OR.FLG239.NE.0)GOTO 25235 X CALL RSPEAK(403) X FLG239=1 X25235 GO TO 25236 X25234 CALL RSPEAK(401) X25236 WRITE(*,*)' ' X CALL RSPEAK(402) X GO TO 2100 X XC COMBO: TRYING TO OPEN SAFE. SEE COMMENTS FOR FEE FIE FOE FOO. X X25300 IF(.NOT.AT(SAFE))GOTO 2060 X K=VOCABX(VTXT(VRBX,1),4)-10 X SPK=42 X IF(COMBO.EQ.1-K)GOTO 25320 X IF(COMBO.NE.0)SPK=366 X GOTO 2011 X X25320 COMBO=K X SPK=371 X IF(K.NE.3)GOTO 2011 X COMBO=0 X CALL BITOFF(SAFE,LOCKBT) X CALL BITON(SAFE,OPENBT) X PROP(SAFE)=1 X SPK=365 X IF(PROP(BOOK).GE.0)GOTO 2011 X TALLY=TALLY-1 X PROP(BOOK)=0 XC IF REMAINING TREASURES TOO ELUSIVE, ZAP HIS LAMP. XC THIS COPIES SOME CODE LOCATED AROUND LABEL 2000. MUST BE DONE XC HERE SINCE BOOK IS CONTAINED IN SAFE & TALLY STUFF ONLY WORKS FOR THINGS XC DEPOSITED AT A LOC. X IF(TALLY.EQ.TALLY2.AND.TALLY.NE.0)LIMIT=MIN0(35,LIMIT) X GOTO 2011 XC DUST/SWEEP. X25400 IF(.NOT.ATHAND(BRUSH))SPK=342 X IF(.NOT.AT(CARVNG).OR..NOT.ATHAND(BRUSH).OR.PROP(CARVNG).EQ.1) X 1 GOTO 2011 X PROP(CARVNG)=1 X CALL RSPEAK(363) X SPK=372 X GOTO 2011 X X XC TERSE/UNTERSE. SUPRESS ALL LONG-FORM DESCRIPTIONS. X X25500 TERSE=.NOT.TERSE X DETAIL=3 X GOTO 2009 XC WIZ STUFF X X25600 CONTINUE XC ???????????? UNCOMMENT THE FOLLOWING LINE TO ACTIVATE WIZARD MODE: XC ISWIZ = .NOT.ISWIZ X25700 GOTO 2009 X25800 IF(.NOT.ISWIZ) GOTO 2009 X WRITE(*,25801) X25801 FORMAT (1X,'LOCATION ?') X READ (*,25802) GATLOC X25802 FORMAT (I4) X IF ((GATLOC.GT.0).AND.(GATLOC.LE.MAXLOC)) X + LOC=GATLOC X GOTO 2009 X25900 IF(ISWIZ)WRITE(*,25902)(DLOC(KQQQ),KQQQ=1,DWFMAX-1) X25902 FORMAT(1X,'THE DWARFS ARE AT LOCATIONS ',/, X 1 8I6) X IF(ISWIZ) WRITE(*,25901) DLOC(DWFMAX) X25901 FORMAT(1X,'THE PIRATE IS AT LOCATION ',I4) X GOTO 2009 X XC HINTS X XC COME HERE IF HE'S BEEN LONG ENOUGH AT REQUIRED LOC(S) FOR SOME UNUSED HINT. XC HINT NUMBER IS IN VARIABLE "HINT". BRANCH TO QUICK TEST FOR ADDITIONAL XC CONDITIONS, THEN COME BACK TO DO NEAT STUFF. GOTO 40010 IF CONDITIONS ARE XC MET AND WE WANT TO OFFER THE HINT. GOTO 40020 TO CLEAR HINTLC BACK TO ZERO, XC 40030 TO TAKE NO ACTION YET. X X40000 GOTO (40700,40800,40900,41000,41100,41200,41300,41400,41500, X 1 41600,41700,40010),(HINT+1-HNTMIN) XC MAZE DARK WITT SWORD SLIDE CAVE1 BIRD CAVE2 RNBOW XC SNAKE STYX X X WRITE(*,40002)HINT X40002 FORMAT (' TRYING TO PRINT HINT # ',I1,/) X CALL BUG(27) X X40010 HINTLC(HINT)=0 X IF(.NOT.YES(HINTS(HINT,3),0,54))GOTO 2602 X WRITE(*,40012)HINTS(HINT,2) X40012 FORMAT(/' I am prepared to give you a hint, but it will cost X 1 you', I2,' points.') X HINTED(HINT)=YES(175,HINTS(HINT,4),54) X IF(HINTED(HINT).AND.LIMIT.GT.30)LIMIT=LIMIT+30*HINTS(HINT,2) X40020 HINTLC(HINT)=0 X40030 GOTO 2602 X XC NOW FOR THE QUICK TESTS. SEE DATABASE DESCRIPTION FOR ONE-LINE NOTES. X X40700 IF(ATLOC(LOC).EQ.0.AND.ATLOC(OLDLOC).EQ.0.AND. X 1 ATLOC(OLDLC2).EQ.0.AND.BURDEN(0).GT.1)GOTO 40010 X GOTO 40020 X X40800 IF(PROP(EMRALD).NE.-1.AND.PROP(PYRAM).EQ.-1)GOTO 40010 X GOTO 40020 X X40900 GOTO 40010 X X41000 IF( (PROP(SWORD).EQ.1.OR.PROP(SWORD).EQ.5) X 1 .AND..NOT.TOTING(CROWN))GOTO 40010 X GOTO 40020 X X41100 GOTO 40010 X X41200 IF(PROP(GRATE).EQ.0.AND..NOT.ATHAND(KEYS))GOTO 40010 X GOTO 40020 X X41300 IF(HERE(BIRD).AND.ATHAND(ROD).AND.OBJ.EQ.BIRD)GOTO 40010 X GOTO 40030 X X41400 IF(ABB(159).EQ.0)GOTO 40010 X GOTO 40020 X X41500 IF(.NOT.TOTING(SHOES).OR.ABB(205).EQ.0)GOTO 40010 X GOTO 40020 X X41600 IF(.NOT.ATHAND(LYRE).AND.PROP(DOG).NE.1)GOTO 40010 X GOTO 40020 X X41700 IF(HERE(SNAKE).AND..NOT.HERE(BIRD))GOTO 40010 X GOTO 40020 XC CAVE CLOSING AND SCORING X X XC THESE SECTIONS HANDLE THE CLOSING OF THE CAVE. THE CAVE CLOSES "CLOCK1" XC TURNS AFTER THE LAST TREASURE HAS BEEN LOCATED (INCLUDING THE PIRATE'S XC CHEST, WHICH MAY OF COURSE NEVER SHOW UP). NOTE THAT THE TREASURES NEED NOT XC HAVE BEEN TAKEN YET, JUST LOCATED. HENCE CLOCK1 MUST BE LARGE ENOUGH TO GET XC OUT OF THE CAVE (IT ONLY TICKS WHILE INSIDE THE CAVE). WHEN IT HITS ZERO, XC WE BRANCH TO 90000 TO START CLOSING THE CAVE, AND THEN SIT BACK AND WAIT FOR XC HIM TO TRY TO GET OUT. IF HE DOESN'T WITHIN CLOCK2 TURNS, WE CLOSE THE XC CAVE; IF HE DOES TRY, WE ASSUME HE PANICS, AND GIVE HIM A FEW ADDITIONAL XC TURNS TO GET FRANTIC BEFORE WE CLOSE. WHEN CLOCK2 HITS ZERO, WE BRANCH TO XC 90000 TO TRANSPORT HIM INTO THE FINAL PUZZLE. NOTE THAT THE PUZZLE DEPENDS XC UPON ALL SORTS OF RANDOM THINGS. FOR INSTANCE, THERE MUST BE NO WATER OR XC OIL, SINCE THERE ARE BEANSTALKS WHICH WE DON'T WANT TO BE ABLE TO WATER, XC SINCE THE CODE CAN'T HANDLE IT. ALSO, WE CAN HAVE NO KEYS, SINCE THERE IS A XC GRATE (HAVING MOVED THE FIXED OBJECT!) THERE SEPARATING HIM FROM ALL THE XC TREASURES. MOST OF THESE PROBLEMS ARISE FROM THE USE OF NEGATIVE PROP XC NUMBERS TO SUPPRESS THE OBJECT DESCRIPTIONS UNTIL HE'S ACTUALLY MOVED THE XC OBJECTS. X XC WHEN THE FIRST WARNING COMES, WE LOCK THE GRATE, DESTROY THE BRIDGE, KILL XC ALL THE DWARVES (AND THE PIRATE), REMOVE THE TROLL AND BEAR (UNLESS DEAD), XC AND SET "CLOSNG" TO TRUE. LEAVE THE DRAGON; TOO MUCH TROUBLE TO MOVE IT. XC FROM NOW UNTIL CLOCK2 RUNS OUT, HE CANNOT UNLOCK THE GRATE, MOVE TO ANY XC LOCATION OUTSIDE THE CAVE (LOC=BITSET(LOCCON,6)), OR CREATE THE BRIDGE. NOR XC RESURRECTED IF HE DIES. NOTE THAT THE SNAKE IS ALREADY GONE, SINCE HE GOT XC TO THE TREASURE ACCESSIBLE ONLY VIA THE HALL OF THE MT. KING. ALSO, HE'S XC BEEN IN GIANT ROOM (TO GET EGGS), SO WE CAN REFER TO IT. ALSO ALSO, HE'S XC GOTTEN THE PEARL, SO WE KNOW THE BIVALVE IS AN OYSTER. *AND*, THE DWARVES XC MUST HAVE BEEN ACTIVATED, SINCE WE'VE FOUND CHEST. X X90000 PROP(GRATE)=0 X PROP(FISSUR)=0 X PROP(TDOOR)=0 X PROP(TDOOR2)=0 X DO 90010 I=1,6 X DSEEN(I)=.FALSE. X90010 DLOC(I)=0 X CALL MOVE(TROLL,0) X CALL MOVE(TROLL+MAXOBJ,0) X CALL MOVE(TROLL2,PLAC(TROLL)) X CALL MOVE(TROLL2+MAXOBJ,FIXD(TROLL)) X CALL JUGGLE(CHASM) X IF(PROP(BEAR).NE.3)CALL DSTROY(BEAR) X PROP(CHAIN)=0 X FIXED(CHAIN)=0 X PROP(AXE)=0 X FIXED(AXE)=0 X CALL RSPEAK(129) X CLOCK1=-1 X CLOSNG=.TRUE. X GOTO 19999 X XC ONCE HE'S PANICKED, AND CLOCK2 HAS RUN OUT, WE COME HERE TO SET UP THE XC STORAGE ROOM. THE ROOM HAS TWO LOCS, HARDWIRED AS 115 (NE) AND 116 (SW). XC AT THE NE END, WE PLACE EMPTY BOTTLES, A NURSERY OF PLANTS, A BED OF XC OYSTERS, A PILE OF LAMPS, RODS WITH STARS, SLEEPING DWARVES, PHONE BOOTH AND XC AT THE SW END WE PLACE GRATE OVER TREASURES, SNAKE PIT, COVEY OF CAGED BIRDS, XC MORE RODS, AND PILLOWS. A MIRROR STRETCHES ACROSS ONE WALL. MANY OF THE XC OBJECTS COME FROM KNOWN LOCATIONS AND/OR STATES (E.G. THE SNAKE IS KNOWN TO XC HAVE BEEN DESTROYED AND NEEDN'T BE CARRIED AWAY FROM ITS OLD "PLACE"), XC MAKING THE VARIOUS OBJECTS BE HANDLED DIFFERENTLY. WE ALSO DROP ALL OTHER XC OBJECTS HE MIGHT BE CARRYING (LEST HE HAVE SOME WHICH COULD CAUSE TROUBLE, XC SUCH AS THE KEYS). WE DESCRIBE THE FLASH OF LIGHT AND TRUNDLE BACK. XC THE PHONE MAKES IT IMPOSSIBLE FOR THE WALDO TO FART AROUND IN THE XC REPOSITORY TOO LONG. WHEN CLOCK3 TICKS TO ZERO, THE PHONE STARTS XC RINGING. WHEN IT HITS -7, THE DWARVES WAKE UP. IF HE FIDDLES WITH XC THE PHONE, HE GETS ZONKED IN OTHER WAYS. X X91000 PROP(BOTTLE)=PUT(BOTTLE,115,1) X PROP(PLANT)=PUT(PLANT,115,0) X PROP(OYSTER)=PUT(OYSTER,115,0) X PROP(LAMP)=PUT(LAMP,115,0) X PROP(ROD)=PUT(ROD,115,0) X PROP(DWARF)=PUT(DWARF,115,0) X LOC=115 X OLDLOC=115 X NEWLOC=115 X XC LEAVE THE GRATE WITH NORMAL (NON-NEGATIVE PROPERTY). X X FOO=PUT(GRATE,116,0) X PROP(SNAKE)=PUT(SNAKE,116,1) X PROP(BIRD)=PUT(BIRD,116,1) X PROP(CAGE)=PUT(CAGE,116,0) X PROP(ROD2)=PUT(ROD2,116,0) X PROP(PILLOW)=PUT(PILLOW,116,0) X X PROP(BOOTH)=PUT(BOOTH,116,-4) X FIXED(BOOTH)=115 X PROP(PHONE)=PUT(PHONE,212,-4) X X PROP(MIRROR)=PUT(MIRROR,115,0) X PROP(BOOK2)=PUT(BOOK2,115,0) X FIXED(MIRROR)=116 X X DO 91010 I=1,MAXOBJ X IF(TOTING(I).AND.ENCLSD(I))CALL REMOVE(I) X91010 IF(TOTING(I))CALL DSTROY(I) X X CALL RSPEAK(132) X CLOSED=.TRUE. X GOTO 2 XC ANOTHER WAY WE CAN FORCE AN END TO THINGS IS BY HAVING THE LAMP GIVE OUT. XC WHEN IT GETS CLOSE, WE COME HERE TO WARN HIM. XC 92000 IS FOR CASES OF LAMP DYING. 92400 IS WHEN IT GOES OUT, XC AND 92600 IS IF HE'S WANDERED OUTSIDE AND THE LAMP IS USED UP, IN WHICH XC CASE WE FORCE HIM TO GIVE UP. X X92000 IF(LMWARN.OR..NOT.HERE(LAMP))GOTO 19999 X LMWARN=.TRUE. X SPK=187 X IF(PROP(BATTER).EQ.1)SPK=323 X IF(PLACE(BATTER).EQ.0)SPK=183 X IF(PROP(VEND).EQ.1)SPK=189 X CALL RSPEAK(SPK) X GOTO 19999 X X92400 LIMIT=-1 X PROP(LAMP)=0 X IF(HERE(LAMP))CALL RSPEAK(184) X GOTO 19999 X X92600 CALL RSPEAK(185) X GAVEUP=.TRUE. X GOTO 95000 X X XC OH DEAR, HE'S DISTURBED THE DWARVES. X X93000 CALL RSPEAK(136) X GOTO 95000 X XC HIT THE PHONE. JINGLE, JANGLE, CRASH! X93100 CALL RSPEAK(282) X GOTO 93000 X XC WHOOPS. DOWN THE CHUTE. X93200 CALL RSPEAK(283) X GOTO 95000 X XC DWARVES CAN'T SLEEP THRU ALL THIS RINGING! X93300 CALL RSPEAK(254) X GOTO 95000 XC "YOU'RE DEAD, FRED." "YOU DIED, CLYDE?" XC XC IF THE CURRENT LOC IS ZERO, IT MEANS THE CLOWN GOT HIMSELF KILLED. WE'LL XC ALLOW THIS MAXDIE TIMES. MAXDIE IS AUTOMATICALLY SET BASED ON THE NUMBER OF XC SNIDE MESSAGES AVAILABLE. EACH DEATH RESULTS IN A MESSAGE (81, 83, ETC.) XC WHICH OFFERS REINCARNATION; IF ACCEPTED, THIS RESULTS IN MESSAGE 82, 84, XC ETC. THE LAST TIME, IF HE WANTS ANOTHER CHANCE, HE GETS A SNIDE REMARK AS XC WE EXIT. WHEN REINCARNATED, ALL OBJECTS BEING CARRIED GET DROPPED AT OLDLC2 XC (PRESUMABLY THE LAST PLACE PRIOR TO BEING KILLED) WITHOUT CHANGE OF PROPS. XC THE LOOP RUNS BACKWARDS TO ASSURE THAT THE BIRD IS DROPPED BEFORE THE CAGE. XC (THIS KLUGE COULD BE CHANGED ONCE WE'RE SURE ALL REFERENCES TO BIRD AND CAGE XC ARE DONE BY KEYWORDS.) THE LAMP IS A SPECIAL CASE (IT WOULDN'T DO TO LEAVE XC IT IN THE CAVE). IT IS TURNED OFF AND LEFT OUTSIDE THE BUILDING (ONLY IF HE XC WAS CARRYING IT, OF COURSE). HE HIMSELF IS LEFT INSIDE THE BUILDING (AND XC HEAVEN HELP HIM IF HE TRIES TO XYZZY BACK INTO THE CAVE WITHOUT THE LAMP!). XC OLDLOC IS ZAPPED SO HE CAN'T JUST "RETREAT". X XC THE EASIEST WAY TO GET KILLED IS TO FALL INTO A PIT IN PITCH DARKNESS. X X94000 CALL RSPEAK(23) X OLDLC2=LOC X XC OKAY, HE'S DEAD. LET'S GET ON WITH IT. X X94100 IF(CLOSNG)GOTO 94500 X YEA=YES(81+NUMDIE*2,82+NUMDIE*2,54) X NUMDIE=NUMDIE+1 X IF(NUMDIE.EQ.MAXDIE.OR..NOT.YEA)GOTO 95000 X IF(CHASE.EQ.0)GOTO 94160 X XC CHAMP WAS BEING CHASED BY WUMPUS, & DIED ANOTHER WAY. XC PUT WUMPUS BACK TO SLEEP, IN CASE OUR HERO STILL HASN'T GOT THE CLOAK. X CHASE=0 X PROP(WUMPUS)=0 X CALL MOVE(WUMPUS,174) X94160 IF(TOTING(LAMP))PROP(LAMP)=0 X DO 94200 J=1,MAXOBJ X IF(.NOT.HOLDNG(J))GOTO 94200 X LOC=OLDLC2 X IF(J.EQ.LAMP)LOC=1 X CALL DROP(J,LOC) X IF(.NOT.WEARNG(J))GOTO 94200 X PROP(J)=0 X CALL BITOFF(J,WEARBT) X94200 CONTINUE X LOC=3 X OLDLOC=LOC X WDX=0 X WORDS(1)=0 X CALL CLRLIN X HEALTH=100 X GOTO 2000 X XC HE DIED DURING CLOSING TIME. NO RESURRECTION. TALLY UP A DEATH AND EXIT. X X94500 CALL RSPEAK(131) X NUMDIE=NUMDIE+1 X GOTO 95000 XC IT'S OVER. TALLY SCORE. X X95000 CALL RATING(SCORE,BONUS,GAVEUP,SCORNG,CLOSNG,CLOSED X 1 ,HNTMAX) X XC THAT SHOULD BE GOOD ENOUGH. LET'S TELL HIM ALL ABOUT IT. X X X WRITE(*,95100)SCORE,MXSCOR,TURNS X95100 FORMAT(///' You scored',I4,' out of a possible',I4, X 1 ', using',I5,' turns.') X X DO 95200 I=1,CLSSES X IF(CVAL(I).GE.SCORE)GOTO 95210 X95200 CONTINUE X WRITE(*,95202) X95202 FORMAT(/' You just went off my scale!!'/) X GOTO 98000 X X95210 CALL SPEAK(CTEXT(I)) X IF(I.EQ.CLSSES-1)GOTO 95220 X K=CVAL(I)+1-SCORE X KK2C='s.' X IF(K.EQ.1)KK2C='. ' X WRITE(*,95212)K,KK2C X95212 FORMAT(/' To achieve the next higher rating, you need',I3, X 1 ' more point',A2/) X GOTO 98000 X X95220 WRITE(*,95222) X95222 FORMAT(/' To achieve the next higher rating ', X 1 'would be a neat trick!'//' CONGRATULATIONS!!'/) X XC98000 STOP X98000 STOP X X END X X X X X X X END_OF_aamain.f if test 98021 -ne `wc -c asubs.f <<'END_OF_asubs.f' X X X X X XC*** A5TOA1 X X SUBROUTINE A5TOA1(A,B,C,QQ,LENG) X XC A AND B CONTAIN A 1- TO 12-CHARACTER WORD IN A6 FORMAT, C CONTAINS ANOTHER XC WORD AND/OR PUNCTUATION. THEY ARE UNPACKED TO ONE CHARACTER PER WORD IN THE XC ARRAY "CHARS". XC THE INDEX OF THE LAST NON-BLANK CHAR IN CHARS IS RETURNED IN LENG. X X IMPLICIT INTEGER(A-Z) X CHARACTER*6 A,B,C X CHARACTER QQ(20) X DO 300 JJ=1,6 X QQ(JJ)=A(JJ:JJ) X300 QQ(JJ+6)=B(JJ:JJ) X DO 5 I=1,12 X IF(QQ(I).EQ.' ')GOTO 10 X5 CONTINUE X LENG=12 X GOTO 15 X10 CONTINUE X LENG=I-1 X15 DO 20 I=1,6 X IF(C(I:I).NE.' ')THEN X LENG=LENG+1 X QQ(LENG) = C(I:I) X ENDIF X20 CONTINUE X DO 21 I= LENG+1,20 X21 QQ(I) = ' ' X DO 22 I= 1,20 X22 IF(QQ(I).EQ.'_')QQ(I) = ' ' X X RETURN X END X X X XC*** AJAR .TRUE. IF OBJ IS CONTAINER AND IS OPEN XC THE NEXT LOGICAL FUNCTIONS DESCRIBE ATTRIBUTES OF OBJECTS. XC (AJAR, HINGED, OPAQUE, PRINTD, TREASR, VESSEL, WEARNG) X X LOGICAL FUNCTION AJAR(OBJ) X XC AJAR(OBJ) = TRUE IF OBJECT IS AN OPEN OR UNHINGED CONTAINER. X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET,HINGED,VESSEL X COMMON /BITCOM/ OPENBT,UNLKBT,BURNBT,WEARBT X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X AJAR=BITSET(OBJCON(OBJ),OPENBT).OR. X 1 (VESSEL(OBJ).AND..NOT.HINGED(OBJ)) X RETURN X END X X XC*** AT .TRUE. IF AT OBJ X LOGICAL FUNCTION AT(OBJ) X XC AT(OBJ) = TRUE IF ON EITHER SIDE OF TWO-PLACED OBJECT X X IMPLICIT INTEGER(A-Z) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X AT = .FALSE. X IF(OBJ.LT.1.OR.OBJ.GT.MAXOBJ)RETURN X AT=PLACE(OBJ).EQ.LOC.OR.FIXED(OBJ).EQ.LOC X RETURN X END X X X XC*** ATHAND .TRUE. IF OBJ READILY AVAILABLE X X X LOGICAL FUNCTION ATHAND(OBJ) X XC ATHAND(OBJ) = TRUE IF OBJ IS READILY REACHABLE. XC IT CAN BE LYING HERE, IN HAND OR IN OPEN CONTAINER. X X IMPLICIT INTEGER(A-Z) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X LOGICAL TOTING,AJAR,ENCLSD,HOLDNG,AAA X X ATHAND = .FALSE. X IF(PLACE(OBJ).EQ.LOC.OR.HOLDNG(OBJ))THEN X ATHAND = .TRUE. X RETURN X ENDIF X IF(.NOT.ENCLSD(OBJ))RETURN X CONTNR=-PLACE(OBJ) X X X ATHAND= X 1 (AJAR(CONTNR).AND. X 2 (PLACE(CONTNR).EQ.LOC.OR. X 3 (TOTING(OBJ).AND.HOLDNG(CONTNR)))) X X RETURN X END X X X X XC*** BITOFF X X X SUBROUTINE BITOFF(OBJ,BIT) X XC TURNS OFF (SETS=0) A BIT IN OBJCON. X X IMPLICIT INTEGER(A-Z) X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X XC OBJCON(OBJ)=IAND(OBJCON(OBJ),INOT(BITS(BIT))) XC THE FOLLOWING SHOULD BE EQUIVALENT TO THE ABOVE X OBJCON(OBJ)=IOR(OBJCON(OBJ),(BITS(BIT)))-BITS(BIT) X RETURN X END X X X X XC*** BITON X X X SUBROUTINE BITON(OBJ,BIT) X XC TURNS ON (SETS=1) A BIT IN OBJCON. X X IMPLICIT INTEGER(A-Z) X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X OBJCON(OBJ)=IOR(OBJCON(OBJ),BITS(BIT)) X RETURN X END X X X X X X XC*** BITS X INTEGER FUNCTION BITS(SHIFT) X IMPLICIT INTEGER (A-Z) X BITS=(2**SHIFT) X RETURN X END X X X X XC*** BITSET XC MISCELLANEOUS LOGICAL FUNCTIONS (BITSET, PCT) XC ALSO, SUBROUTINES FOR TURNING BITS ON AND OFF (BITON, BITOFF). X X LOGICAL FUNCTION BITSET(WORD,N) X XC BITSET(COND,L,N) = TRUE IF COND(L) HAS BIT N SET X X IMPLICIT INTEGER(A-Z) X BITSET=IAND(WORD,2**N).NE.0 X5 RETURN X END X X X X X X XC*** BLIND .TRUE. IF YOU CAN'T SEE AT THIS LOC XC LOCATION ATTRIBUTES. (BLIND, DARK, FORCED, INSIDE, OUTSID, PORTAL) X X X LOGICAL FUNCTION BLIND(DUMMY) X XC TRUE IF ADVENTURER IS "BLIND" AT THIS LOC, (DARKNESS OR GLARE) X X IMPLICIT INTEGER(A-Z) X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X LOGICAL DARK,ATHAND X DATA LAMP /2/ X X BLIND=DARK(0).OR.(LOC.EQ.200.AND.ATHAND(LAMP).AND.PROP(LAMP) X 1 .EQ.1) X X RETURN X END X X X X X XC*** BUG X X SUBROUTINE BUG(NUM) X IMPLICIT INTEGER(A-Z) X XC THE FOLLOWING CONDITIONS ARE CURRENTLY CONSIDERED FATAL BUGS. NUMBERS < 20 XC ARE DETECTED WHILE READING THE DATABASE; THE OTHERS OCCUR AT "RUN TIME". XC 0 MESSAGE LINE > 70 CHARACTERS XC 1 NULL LINE IN MESSAGE XC 2 TOO MANY WORDS OF MESSAGES XC 3 TOO MANY TRAVEL OPTIONS XC 4 TOO MANY VOCABULARY WORDS XC 5 REQUIRED VOCABULARY WORD NOT FOUND XC 6 TOO MANY RTEXT OR MTEXT MESSAGES XC 7 TOO MANY HINTS XC 8 LOCATION HAS COND BIT BEING SET TWICE XC 9 INVALID SECTION NUMBER IN DATABASE XC 10 OUT OF ORDER LOCS OR RSPEAK ENTRIES. XC 11 ILLEGAL MOTION WORD IN TRAVEL TABLE XC 12 ** UNUSED **. XC 13 UNKNOWN OR ILLEGAL WORD IN ADJECTIVE TABLE. XC 14 ILLEGAL WORD IN PREP/OBJ TABLE XC 15 TOO MANY ENTRIES IN PREP/OBJ TABLE XC 16 OBJECT HAS CONDITION BIT SET TWICE XC 17 OBJECT NUMBER TOO LARGE XC 18 TOO MANY ENTRIES IN ADJECTIVE/NOUN TABLE. XC 20 SPECIAL TRAVEL (500>L>300) EXCEEDS GOTO LIST XC 21 RAN OFF END OF VOCABULARY TABLE XC 22 VERB CLASS (N/1000) NOT BETWEEN 1 AND 3 XC 23 INTRANSITIVE ACTION VERB EXCEEDS GOTO LIST XC 24 TRANSITIVE ACTION VERB EXCEEDS GOTO LIST XC 25 CONDITIONAL TRAVEL ENTRY WITH NO ALTERNATIVE XC 26 LOCATION HAS NO TRAVEL ENTRIES XC 27 HINT NUMBER EXCEEDS GOTO LIST XC 28 INVALID MONTH RETURNED BY DATE FUNCTION XC 29 ACTION VERB 'LEAVE' HAS NO OBJECT. XC 30 PREPOSITION FOUND IN UNEXPECTED TABLE XC 31 RECEIVED AN UNEXPECTED WORD TERMINATOR FROM A1TOA5 XC 32 TRYING TO PUT A CONTAINER INTO ITSELF (TRICKY!) XC 33 UNKNOWN WORD CLASS IN GETWDS XC 35 TRYING TO CARRY A NON-EXISTENT OBJECT X X WRITE(*,1) NUM X1 FORMAT (' FATAL ERROR, SEE SOURCE CODE FOR INTERPRETATION.'/ X 1 ' PROBABLE CAUSE: ERRONEOUS INFO IN DATABASE OR BAD ASAVE.DAT'/ X 2 ' ERROR CODE =',I2/) X STOP X END X X XC*** BURDEN .. RETURNS WEIGHT OF ITEMS BEING CARRIED X X INTEGER FUNCTION BURDEN(OBJ) X XC IF OBJ=0, BURDEN CALCULATES THE TOTAL WEIGHT OF THE ADVENTURER'S BURDEN, XC INCLUDING EVERYTHING IN ALL CONTAINERS (EXCEPT THE BOAT) THAT HE IS XC CARRYING. XC IF OBJ#0 AND OBJ IS A CONTAINER, CALCULATE THE WEIGHT OF EVERYTHING INSIDE XC THE CONTAINER (INCLUDING THE CONTAINER ITSELF). SINCE DONKEY FORTRAN XC ISN'T RECURSIVE, WE WILL ONLY CALCULATE WEIGHTS OF CONTAINED CONTAINERS XC ONE LEVEL DOWN. THE ONLY SERIOUS CONTAINED CONTAINER WOULD BE THE SACK XC THE ONLY THINGS WE'LL MISS WILL BE FILLED VS EMPTY BOTTLE OR CAGE. XC IF OBJ#0 AND ISN'T A CONTAINER, RETURN ITS WEIGHT. X X IMPLICIT INTEGER(A-Z) X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X COMMON /HLDCOM/ HOLDER(150),HLINK(150) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X LOGICAL TOTING,WEARNG X DATA BOAT /48/ X X BURDEN=0 X IF(OBJ.NE.0)GOTO 200 X DO 100 I=1,MAXOBJ X IF(.NOT.TOTING(I).OR.PLACE(I).EQ.-BOAT)GOTO 100 X BURDEN=BURDEN+WEIGHT(I) X100 CONTINUE X RETURN X X200 BURDEN=WEIGHT(OBJ) X IF(OBJ.EQ.BOAT)RETURN X TEMP=HOLDER(OBJ) X210 IF(TEMP.EQ.0)RETURN X BURDEN=BURDEN+WEIGHT(TEMP) X TEMP=HLINK(TEMP) X GOTO 210 X X END X X X X X X XC*** CARRY X X SUBROUTINE CARRY(OBJECT,WHERE) X XC START TOTING AN OBJECT, REMOVING IT FROM THE LIST OF THINGS AT ITS FORMER XC LOCATION. IF OBJECT>MAXOBJ (MOVING "FIXED" SECOND LOC), XC DON'T CHANGE PLACE. X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X X IF(OBJECT.GT.MAXOBJ)GOTO 5 X IF(PLACE(OBJECT).EQ.-1)RETURN X PLACE(OBJECT)=-1 X5 IF(ATLOC(WHERE).NE.OBJECT)GOTO 6 X ATLOC(WHERE)=LINK(OBJECT) X RETURN X X6 TEMP=ATLOC(WHERE) X7 IF(LINK(TEMP).EQ.OBJECT)GOTO 8 X TEMP=LINK(TEMP) X IF(TEMP.NE.0)GOTO 7 X CALL BUG(35) X X8 LINK(TEMP)=LINK(OBJECT) X RETURN X END X X XC*** CLASS X X X INTEGER FUNCTION CLASS(WORD) X XC RETURNS WORD CLASS NUMBER (1=MOTION VERB; 2=NOUN; 3=ACTION VERB; XC 4=MISCELLANEOUS WORD; 5=PREPOSITION; 6=ADJECTIVE; 7=CONJUNCTION). X X X IMPLICIT INTEGER(A-Z) X X CLASS=WORD/1000 +1 X IF(WORD.LT.0)CLASS=-1 X RETURN X END X X X XC*** CLRLIN X X SUBROUTINE CLRLIN X XC CLEARS OUT ALL CURRENT SYNTAX ARGS IN PREPARATION FOR A NEW INPUT LINE X X IMPLICIT INTEGER(A-Z) X CHARACTER*6 VTXT,OTXT,IOTXT,DTK,ATAB,TXT,ALLZERO X COMMON /WRDCOM/ VERBS(45),VRBX,OBJS(45), X 1 OBJX,IOBJS(15),IOBX,PREP,WORDS(45) X COMMON /SV3COM/DTK(9),ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X X DO 3333 I=1,6 X3333 ALLZERO(I:I) = CHAR(0) X DO 1 I=1,45 X OBJS(I)=0 X VERBS(I)=0 X DO 1 J=1,2 X1 VTXT(I,J)=ALLZERO X X DO 3 I=1,15 X IOBJS(I)=0 X DO 3 J=1,2 X IOTXT(I,J)=ALLZERO X3 OTXT(I,J)=ALLZERO X X VRBX=0 X OBJX=0 X IOBX=0 X PREP=0 X RETURN X X END X X X XC*** CONFUZ X X X INTEGER FUNCTION CONFUZ(DUMMY) X XC GENERATES SOME VARIANT OF "DON'T UNDERSTAND THAT" MESSAGE. X X IMPLICIT INTEGER(A-Z) X LOGICAL PCT X CONFUZ=60 X IF(PCT(50))CONFUZ=61 X IF(PCT(33))CONFUZ=13 X IF(PCT(25))CONFUZ=347 X IF(PCT(20))CONFUZ=195 X RETURN X END X X X X XC*** DARK .TRUE. IF THERE IS NO LIGHT HERE X X X LOGICAL FUNCTION DARK(DUMMY) X XC TRUE IF LOCATION "LOC" IS DARK X X IMPLICIT INTEGER(A-Z) X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X LOGICAL ATHAND X DATA LAMP /2/ X X DARK=MOD(LOCCON(LOC),2).EQ.0.AND.(PROP(LAMP).EQ.0.OR. X 1 .NOT.ATHAND(LAMP)) X RETURN X END X X X X X X X XC*** DEAD .TRUE. IF OBJ IS NOW DEAD X LOGICAL FUNCTION DEAD(OBJ) X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON/CONCOM/LOCCON(250),OBJCON(150) X DEAD=BITSET(OBJCON(OBJ),10) X RETURN X END X XC*** DROP X X X X SUBROUTINE DROP(OBJECT,WHERE) X XC PLACE AN OBJECT AT A GIVEN LOC, PREFIXING IT ONTO THE ATLOC LIST. X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X X IF(OBJECT.GT.MAXOBJ)GOTO 1 X PLACE(OBJECT)=WHERE X GOTO 2 X X1 FIXED(OBJECT-MAXOBJ)=WHERE X2 IF(WHERE.LE.0)RETURN X LINK(OBJECT)=ATLOC(WHERE) X ATLOC(WHERE)=OBJECT X RETURN X END X X X X XC*** DSTROY X X X SUBROUTINE DSTROY(OBJECT) X XC PERMANENTLY ELIMINATE "OBJECT" BY MOVING TO A NON-EXISTENT LOCATION. X X IMPLICIT INTEGER(A-Z) X X CALL MOVE(OBJECT,0) X RETURN X END X X X X XC*** EDIBLE .TRUE. IF OBJ CAN BE EATEN X X LOGICAL FUNCTION EDIBLE(OBJ) X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON/CONCOM/LOCCON(250),OBJCON(150) X EDIBLE=BITSET(OBJCON(OBJ),7) X RETURN X END X X XC*** ENCLSD .TURE. IF OBJ INSIDE SOMETHING X X X LOGICAL FUNCTION ENCLSD(OBJECT) X XC ENCLSD(OBJ) = TRUE IF THE OBJ IS IN A CONTAINER X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X ENCLSD=.FALSE. X IF(OBJECT.LT.1.OR.OBJECT.GT.MAXOBJ)RETURN X ENCLSD=PLACE(OBJECT).LT.-1 X RETURN X END X X X X X XC*** FORCED X X X LOGICAL FUNCTION FORCED(LOC) X XC A FORCED LOCATION IS ONE FROM WHICH HE IS IMMEDIATELY BOUNCED TO ANOTHER. XC NORMAL USE IS FOR DEATH (FORCE TO LOC ZERO) AND FOR DESCRIPTIONS OF XC JOURNEY FROM ONE PLACE TO ANOTHER. X X IMPLICIT INTEGER(A-Z) X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X FORCED=LOCCON(LOC).EQ.2 X X RETURN X END X X X XC*** GETLIN X X SUBROUTINE GETLIN X X X IMPLICIT INTEGER(A-Z) X LOGICAL BLKLIN X COMMON /BLKCOM/ BLKLIN X CHARACTER*6 TXT,WDS(2),KK,DTK,ATAB,VTXT,OTXT,IOTXT,TXT2(35,2) X LOGICAL ACTIVE X COMMON /UTXCOM/ WDX X CHARACTER CHRS(150), CHR2(150),CHRX(70) X COMMON /SV3COM/DTK(9),ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X X10 DO 15 I=1,35 X DO 15 J=1,2 X TXT2(I,J) = ' ' X15 TXT(I,J) = ' ' X X20 IF(BLKLIN)WRITE(*,*)' ' X WRITE(*,1266) X1266 FORMAT(' >') XC??????????????????????????????? THE FOLLOWING WORKS ON MANY COMPUTERS: XC1266 FORMAT(' >',$) X30 READ (*,50)CHRX X50 FORMAT(70A1) X DO 1 I=1,70 X CHRX(I) = CHAR(IAND(ICHAR(CHRX(I)), 127)) X IF(CHRX(I).LT.' ')CHRX(I) = ' ' X IF(CHRX(I).GE.'`')CHRX(I) = CHAR(ICHAR(CHRX(I)) - 32) X1 CONTINUE X X DO 4 I=1,70 X IF(CHRX(I).NE.' ') GOTO 6 X4 CONTINUE X GOTO 20 X6 CONTINUE X X INDX = 1 X DO 2 I=1,70 X IF(CHRX(I).EQ.'.'.OR.CHRX(I).EQ.';'.OR.CHRX(I).EQ.',')THEN X CHR2(INDX) = ' ' X INDX = INDX + 1 X CHR2(INDX) = 'A' X INDX = INDX + 1 X CHR2(INDX) = 'N' X INDX = INDX + 1 X CHR2(INDX) = 'D' X INDX = INDX + 1 X CHR2(INDX) = ' ' X INDX = INDX + 1 X ELSE X CHR2(INDX) = CHRX(I) X INDX = INDX + 1 X ENDIF X2 CONTINUE X CHR2(INDX) = '.' X X X DO 70 INDX2= 1,INDX X70 IF(CHR2(INDX2).NE.' ') GOTO 73 X73 CONTINUE X J = 1 X DO 71 I = INDX2,INDX X IF(I.NE.INDX2.AND.CHRS(J-1).EQ.' '.AND.CHR2(I).EQ.' ')GOTO71 X CHRS(J) = CHR2(I) X J = J+1 X71 CONTINUE X IF(CHRS(1).EQ.'.') GOTO 20 X X WDX = 1 X J = 1 X DO 100 I=1,100 X IF(CHRS(I).EQ.'.') GO TO 200 X IF(CHRS(I).EQ.' ') GO TO 120 X IF(J.LE.6)TXT2(WDX,1)(J:J) = CHRS(I) X IF(J.GT.6.AND.J.LE.12)TXT2(WDX,2)(J-6:J-6) = CHRS(I) X J = J+1 X GOTO 100 X120 CONTINUE X J = 1 X WDX = WDX + 1 X100 CONTINUE X200 CONTINUE X TXT(1,1) = TXT2(1,1) X TXT(1,2) = TXT2(1,2) X J = 1 X DO 210 I=2,35 X IF(TXT(J,1).NE.'AND '.OR.TXT2(I,1).NE.'AND ')THEN X J = J+1 X TXT(J,1) = TXT2(I,1) X TXT(J,2) = TXT2(I,2) X ELSE X WDX = WDX - 1 X ENDIF X210 CONTINUE X XC WRITE(*,12345)(TXT(IQQ,1),IQQ = 1,35) XC12345 FORMAT(' ',5A6) X X X END X X X XC*** GETOBJ X X SUBROUTINE GETOBJ(OBJ) X XC ANALYSE AN OBJECT WORD. SEE IF THE THING IS HERE, WHETHER WE'VE GOT A VERB XC YET, AND SO ON. OBJECT MUST BE HERE UNLESS VERB IS "FIND" OR "INVENT(ORY)" XC (AND NO NEW VERB YET TO BE ANALYSED). WATER, OIL AND WINE ARE ALSO XC FUNNY, SINCE THEY ARE NEVER ACTUALLY DROPPED AT ANY LOCATION, BUT MIGHT XC BE HERE INSIDE THE BOTTLE OR AS A FEATURE OF THE LOCATION. XC XC HAS THREE POSSIBLE RETURN VALUES FOR 'OBJ': XC VAL > 0 :: A POSITIVE OBJECT NUMBER XC VAL = 0 :: OBJECT NOT FOUND HERE. ERROR MESSAGE PRINTED. XC VAL < 0 :: OBJECT WORD REALLY SOMETHING ELSE. RETURN NEGATIVE XC VALUE OF SUBSTITUTED WORD. X X IMPLICIT INTEGER(A-Z) X LOGICAL AT X CHARACTER ZAPP(20) X COMMON /DWFCOM/ DWARF,KNIFE,KNFLOC,DFLAG,DSEEN(6),DLOC(6), X 1 ODLOC(6),DWFMAX X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /MNECOM/ BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE(2,4),TK(20) X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X CHARACTER*6 TXT X COMMON /UTXCOM/ WDX X CHARACTER*6 VTXT,OTXT,IOTXT,DTK,ATAB X COMMON /WRDCOM/ VERBS(45),VRBX,OBJS(45), X 1 OBJX,IOBJS(15),IOBX,PREP,WORDS(45) X LOGICAL ATHAND,BLIND,HERE,HOLDNG,PLURAL X COMMON /SV3COM/DTK(9),ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X X X IF(HOLDNG(OBJ))RETURN X IF(BLIND(0))GOTO 280 X IF(FIXED(OBJ).EQ.LOC.OR.ATHAND(OBJ))GOTO 290 X IF(.NOT.HERE(OBJ))GOTO 205 X K=335 X IF(PLURAL(OBJ))K=373 X OBJ=0 X CALL RSPEAK(K) X RETURN X X205 IF(OBJ.NE.GRATE)GOTO 210 X IF(LOC.EQ.1.OR.LOC.EQ.4.OR.LOC.EQ.7)OBJ=-DPRSSN X IF(LOC.GT.9.AND.LOC.LT.15)OBJ=-ENTRNC X IF(OBJ.EQ.GRATE)GOTO 280 X RETURN X X210 IF(OBJ.NE.DWARF)GOTO 220 X L1=DWFMAX-1 X DO 212 I=1,L1 X IF(DLOC(I).EQ.LOC.AND.DFLAG.GE.2)GOTO 290 X212 CONTINUE X GOTO 280 X X220 IF(OBJ.EQ.LIQLOC(LOC).OR. X 1 (ATHAND(BOTTLE).AND.LIQ(BOTTLE).EQ.OBJ).OR. X 2 (ATHAND(CASK).AND.LIQ(CASK).EQ.OBJ))GOTO 290 X IF(OBJ.NE.PLANT.OR..NOT.AT(PLANT2).OR.PROP(PLANT2).EQ.0)GOTO 230 X OBJ=PLANT2 X GOTO 290 X X230 IF(OBJ.NE.ROCKS.OR..NOT.AT(CARVNG))GOTO 240 X OBJ=CARVNG X GOTO 290 X X240 IF(OBJ.NE.ROD.OR..NOT.ATHAND(ROD2))GOTO 250 X OBJ=ROD2 X GOTO 290 X X250 IF(OBJ.NE.DOOR.OR..NOT. X 1 (AT(SAFE).OR.AT(TDOOR).OR.AT(TDOOR2).OR.AT(PDOOR))) X 2 GOTO 260 X OBJ=TDOOR X IF(AT(TDOOR2))OBJ=TDOOR2 X IF(AT(PDOOR))OBJ=PDOOR X IF(AT(SAFE))OBJ=SAFE X GOTO 290 X X260 IF(OBJ.NE.BOOK.OR..NOT.ATHAND(BOOK2))GOTO 270 X OBJ=BOOK2 X GOTO 290 X X270 IF(VERBS(VRBX).EQ.FIND.OR.VERBS(VRBX).EQ.INVENT)GOTO 290 X XC IT ISN'T HERE. TELL HIM & RETURN. X280 OBJ=0 X CALL A5TOA1(TXT(WDX,1),TXT(WDX,2),'_here.',ZAPP,K) X WRITE(*,282)(ZAPP(I),I=1,K) X282 FORMAT(/' I see no ',20A1) X X290 RETURN X X END X X X X X XC*** GETWDS X SUBROUTINE GETWDS X XC WHEN CALLED, CHECKS IF PREVIOUS WORDS VECTOR HAS BEEN EXHAUSTED. XC IF NOT, BRANCH AROUND THE CODE WHICH READS IN A NEW LINE. IF VECTOR IS EMPTY XC SUCK UP A LINE FROM THE TTY, THEN CHECK EACH WORD FOR INTELLIGIBILITY. XC IF THE WORD IS VALID, ITS NUMBER GETS STUCK INTO THE WORDS VECTOR. XC THEN EACH WORD IS PARSED BY THE APPROPRIATE CODE. THE LABELS BELOW ARE XC 100 TIMES THE WORD CLASS. XC XC THE FOLLOWING VECTORS ARE USED: XC TXT(WDX,2) HOLD THE RAW TEXT FROM GETLIN XC WORDS(WDX) LIST OF WORD NUMBERS, CONVERTED FROM TXT(WDX,1). XC VTXT(VRBX,2) HOLD THE TEXT FOR VERB VRBX. XC VERBS(VRBX) IS THE LIST OF VALIDATED VERB NUMBERS. XC OTXT(OBJX,2) HOLDS THE TEXT OF THE OBJECT OBJX. XC OBJX(OBJX) IS THE LIST OF VALIDATED OBJECT NUMBERS. XC IOTXT(IOBX,2) HOLDS THE TEXT FOR PREP'S IOBJ. X X IMPLICIT INTEGER(A-Z) X LOGICAL BLIND,LIVING,PCT,PFLAG,HINGED,AT,ATHAND,TOTING,K1,ISWIZ X LOGICAL KILLED X CHARACTER*6 WORD1,WORD2,DKK,DK X CHARACTER ZAPP(20) X X COMMON/IZWIZ/ISWIZ X COMMON /ADJCOM/ ADJKEY(50),ADJTAB(150),ADJSIZ X COMMON /DIECOM/ NUMDIE,MAXDIE,TURNS,KILLED X COMMON /DWFCOM/ DWARF,KNIFE,KNFLOC,DFLAG,DSEEN(6),DLOC(6), X 1 ODLOC(6),DWFMAX X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /MNECOM/ BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE(2,4),TK(20) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X COMMON /PRPCOM/ VKEY(60),PTAB(300),VKYSIZ,PTBSIZ X CHARACTER*6 TXT,DTK(9),ATAB X COMMON /UTXCOM/ WDX X CHARACTER*6 VTXT,OTXT,IOTXT X COMMON /WRDCOM/ VERBS(45),VRBX,OBJS(45), X 1 OBJX,IOBJS(15),IOBX,PREP,WORDS(45) X DIMENSION TAKDIR(20) X COMMON /SV3COM/DTK,ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X XC MOTION NOUN ACTION MISC PREP ADJ CONJ X DATA CLASSD,CLASSN,CLASSA,CLASSM,CLASSP,CLASSJ,CLASSC X 1 /1,2,3,4,5,6,7/ XC XC A FEW MORE ACTION VERBS NOT IN COMMON. X DATA DROP,FEED,NOTHNG,LIGHT,DRINK,SCORE /02,21,05,07,15,24/ X DATA PICK,PUT,GET /41,42,44/ XC XC AND A MOTION VERB: X DATA ENTER /3/ XC XC AND TO GET/DROP EVERYTHING IN SIGHT: X DATA ALL /109/ XC XC TAKDIR IS A LIST OF MOTION VERBS WHICH ARE ACCEPTABLE AFTER 'TAKE'. X DATA TAKDIR/2,6,9,10,11,13,14,17,23,25,33,34, X 1 36,37,39,78,79,80,89,-1/ XC XC IF WORDS(WDX+1) HAS SOMETHING IN IT, WE ARE STILL PROCESSING OLD INPUT LINE. XC IF WORDS(1) = -2, SOMEONE ELSE HAS CALLED GETLIN (E.G., KILL DRAGON). X X POUR = 13 X IF(WORDS(WDX+1).GT.0)GOTO 30 X XC IF WORDS(1) HAS BEEN SET TO -2, SOMEONE ELSE HAS ALREADY READ IN XC THE NEW LINE, PRESUMABLY TO CHECK FOR SOME NON-STANDARD WORD. XC (THIS HAPPENS WHEN KILLING DRAGON WITH BARE HANDS.) X20 IF(WORDS(1).NE.-2)CALL GETLIN X WDX=0 X DO 25 I=1,35 X WORDS(I)=0 X IF(TXT(I,1).NE.' ')WORDS(I)=VOCABX(TXT(I,1),-1) X25 CONTINUE X XC THE FIRST WORD OF EACH CLAUSE GETS SPECIAL CHECKING, MOSTLY LOOKING XC FOR IDIOMS. X XC SPECIAL HANDLING FOR 'SAY' AND 'CALL'. WIN IF SAYING/CALLING XC MAGIC WORDS. NARKY IF UTTERING ANYTHING ELSE. IF NO OBJ, PASS XC ON FOR HIGHER LEVEL PARSING. X30 PFLAG=.FALSE. X WDX=WDX+1 X WORD=WORDS(WDX) X IF(WORD)830,800,32 X X32 KK=CLASS(WORD) X IF(KK.EQ.-1)GOTO 91 X IF(KK.EQ.CLASSA.OR.KK.EQ.CLASSD.OR.KK.EQ.CLASSM)CALL CLRLIN X K=VAL(WORD) X IF(KK.NE.CLASSA.OR.(K.NE.SAY.AND.K.NE.YELL))GOTO 40 X XC 'SAY' OR 'CALL'. IF NO NEXT WORD, PASS ON TO HIGHER POWERS. XC IF OBJECT IS MAGIC WORD ('SAY XYZZY'), FLUSH 'SAY' & TAKE NEXT WORD. X IF(WORDS(WDX+1).EQ.0.OR.CLASS(WORDS(WDX+1)).EQ.CLASSC)GOTO 99 X WDX=WDX+1 X IF(K.EQ.SAY)CALL A5TOA1(TXT(WDX,1),TXT(WDX,2),'". ',ZAPP,K) X IF(K.EQ.YELL)CALL A5TOA1(TXT(WDX,1),TXT(WDX,2),'"!!!!!',ZAPP,K) X WORD=WORDS(WDX) X IF(WORD.EQ.62.OR.WORD.EQ.65.OR.WORD.EQ.71.OR.WORD.EQ.82 X 1 .OR.WORD.EQ.2025)GOTO 99 X WRITE(*,37)(ZAPP(I),I=1,K) X37 FORMAT(/' Okay, "',20A1) X GOTO 860 X XC SPECIAL STUFF FOR 'ENTER'. CAN'T GO INTO WATER. XC 'ENTER BOAT' MEANS 'TAKE BOAT'. X40 WORD1=TXT(WDX,1) X WORD2=TXT(WDX+1,1) X IF(WORD1.NE.'ENTER ')GOTO 50 X IF(WORD2.EQ.' ')GOTO 91 X SPK=43 X IF(LIQLOC(LOC).EQ.WATER)SPK=70 X IF(WORD2.EQ.'STREAM'.OR.WORD2.EQ.'WATER '.OR.WORD2.EQ. X 1 'RESERV'.OR.WORD2.EQ.'OCEAN '.OR.WORD2.EQ.'SEA ' X 2 .OR.WORD2.EQ.'POOL ')GOTO 810 X IF(WORD2.NE.'BOAT '.AND.WORD2.NE.'ROWBOA')GOTO 99 X WORD=TAKE+2000 X GOTO 99 X XC 'LEAVE' IS A MOTION VERB, UNLESS LEAVING AN OBJECT, XC E.G., 'LEAVE BOAT' OR 'LEAVE BOTTLE'. BUT MAKE SURE TO LEAVE ('DROP') XC ONLY TOTABLE OBJECTS. X50 KK=WORDS(WDX+1) X IF(WORD1.NE.'LEAVE '.OR.CLASS(KK).NE.CLASSN) X 1 GOTO 55 X IF(HINGED(VAL(KK)).OR.FIXED(VAL(KK)).NE.0)GOTO 99 X WORD=LEAVE+2000 X GOTO 99 X XC IF 'LIGHT LAMP', LIGHT MUST BE TAKEN AS AN ACTION VERB, NOT A NOUN. X55 IF(WORD1.NE.'LIGHT'.OR.WORDS(WDX+1).NE.(LAMP+1000))GOTO 60 X WORD=LIGHT+2000 X GOTO 99 X XC 'WATER PLANT' BECOMES 'POUR WATER', IF WE ARE AT PLANT. XC 'OIL DOOR' BECOMES 'POUR OIL', ETC., ETC. X60 IF((WORD1.NE.'WATER '.AND.WORD1.NE.'OIL ') X 1 .OR.(WORD2.NE.'PLANT '.AND.WORD2.NE.'DOOR ' X 2 .AND.WORD2.NE.'SWORD '.AND.WORD2.NE.'ANVIL '))GOTO 65 X IF(.NOT.AT(VOCABX(WORD2,CLASSN)))GOTO 61 X WORDS(WDX+1)=WORDS(WDX) X TXT(WDX+1,1)=WORD1 X TXT(WDX+1,2)=TXT(WDX,2) X61 WORD=POUR+2000 X GOTO 99 X XC CHECK FILLING OR EMPTYING A CONTAINER. X65 IF((WORD1.NE.'EMPTY ').OR. X 1 (CLASS(WORDS(WDX+1)).NE.CLASSN))GOTO 91 X KK=VAL(WORDS(WDX+1)) XC IF(KK.NE.SACK.AND.KK.NE.SAFE.AND.KK.NE.BOAT.AND.KK.NE.CHEST) XC 1 GOTO 91 XC *** UNFINISHED CODE HERE *** XC ALL THAT ACTUALLY HAPPENS IS OFF ERROR MESSAGES. THE STOOGE XC SIMPLY CAN'T SAY 'EMPTY SACK OR 'TAKE ALL FROM SACK' ETC X GOTO 91 X X XC THIS IS THE 'INNER' LOOP. DISPATCHING OF ALL WORDS IN A CLAUSE AFTER XC THE FIRST COMES THRU HERE. X X90 WDX=WDX+1 X WORD=WORDS(WDX) X91 IF(WORD)830,900,92 X X96 WCLASS=WCLASS+1 X WORD=VOCABX(TXT(WDX,1),-(WCLASS+1)) X IF(WORD.EQ.-1)GOTO 800 X WORDS(WDX)=WORD X92 IF(CLASS(WORD).NE.CLASSN)GOTO 99 X XC IT'S NOT THE FIRST: MAKE SURE HE INCLUDED A COMMA OR 'AND'. XC DIFFERENTIATE BETWEEN DIR & INDIR OBJECTS. XC CHECK FOR SPECIAL CASE OF MULTIPLE OBJECTS: 'FEED BEAR HONEY' OR XC 'THROW TROLL NUGGET'. X K=OBJX X IF(PFLAG)K=IOBX X IF(K.EQ.0.OR.CLASS(WORDS(WDX-1)).EQ.CLASSC)GOTO 99 X KK=VAL(VERBS(VRBX)) X IF(.NOT.LIVING(OBJS(OBJX)).OR.(KK.NE.THROW.AND.KK.NE.FEED)) X 1 GOTO 800 X IOBX=IOBX+1 X IOBJS(IOBX)=OBJS(OBJX) X OBJS(OBJX)=0 X OBJX=OBJX-1 X X99 WCLASS=CLASS(WORD) X GOTO(100,200,300,400,500,600,700),WCLASS XC MWD OBJ AVB MVB PRP ADJ CNJ X CALL BUG(33) XC MOTION VERB. XC A MOTION VERB IS EITHER A DIRECTION ('WEST') OR A MOTION ('JUMP'). XC MULTIPLE MOTIONS MUST BE SEPARATED BY COMMAS OR AND'S. THERE ARE XC SOME IDIOMATIC USES WHICH MUST BE SCANNED FOR, SUCH AS 'TAKE BRIDGE', XC WHICH BECOMES 'BRIDGE' AND 'GO WEST', WHICH BECOMES 'WEST', AND 'LEAVE THING' XC IS DIFFERENT FROM JUST 'LEAVE'. XC XC IF ORIGINAL VERB WAS 'GO', FLUSH IT & REPLACE WITH THIS ONE. XC I.E., 'GO WEST' BECOMES 'WEST'. XC XC CHECK TAKDIR(20) LIST FOR VALID OBJECT MOTION VERBS FOR 'TAKE'. XC IF FOUND, THROW AWAY 'TAKE' AND USE THE MOTION VERB. XC XC SINCE THE ORIGINAL VERB IS AN ACTION VERB, CHECK THIS WORD IN THE XC NOUN TABLE. MAYBE IT IS AN OBJECT SYNONYMOUS WITH A VERB ('ROCKS'). XC XC IF IT ISN'T A VALID MOTION-OBJECT OF 'TAKE' OR 'GO', NOR AN OBJECT, XC CHECK THE PREP TABLE. IF FOUND, HAND IT TO THE PREPOSITION ANALYZER. X X100 IF(VRBX.EQ.0)GOTO 180 X K=VERBS(VRBX) X IF(CLASS(K).GT.CLASSA)GOTO 800 X IF(CLASS(K).NE.CLASSA)GOTO 140 X IF(VAL(K).EQ.GO)GOTO 180 X X IF(VAL(K).NE.TAKE)GOTO 96 X KK=VAL(WORD) X DO 110 I=1,20 X IF(TAKDIR(I).EQ.KK)GOTO 180 X110 CONTINUE X GOTO 96 X XC IF ORIGINAL MOTION VERB WAS CRAWL, JUMP OR CLIMB, IGNORE CURRENT WORD. XC I.E., 'CLIMB UP' OR 'JUMP OVER' BECOME 'CLIMB' & 'JUMP' ONLY. X140 IF(K.EQ.17.OR.K.EQ.39.OR.K.EQ.56)GOTO 90 XC 'CRAWL' 'JUMP' 'CLIMB' X X180 VERBS(1)=WORD X VRBX=1 X IF(TXT(WDX,1).NE.'WEST ')GOTO 90 X IWEST=IWEST+1 X IF(IWEST.EQ.10)CALL RSPEAK(17) X K=VAL(WORD) X IF(K.EQ.EXIT.OR.K.EQ.ENTER)GOTO 860 X GOTO 90 XC ANALYZE OBJECT. XC IF PFLAG IS TRUE, THEN WE ARE PROCESSING A SET OF INDIRECT (PREP) XC OBJECTS, NOT DIRECT OBJS. X X200 IF(PFLAG)GOTO 503 X IF(VRBX.NE.0)GOTO 220 X K=VOCABX(TXT(WDX,1),-(CLASSA+1)) X IF(K.EQ.-1)GOTO 220 X WORD=K X GOTO 300 X X220 WORD=VAL(WORD) X IF(WORD.EQ.ALL)GOTO 280 X222 CALL GETOBJ(WORD) X IF(WORD)230,860,240 X XC IT WASN'T REALLY AN OBJECT. GO SEE WHAT IT WAS. X230 WORD=-WORD X GOTO 99 X XC IT WAS REALLY AN OBJECT & IT IS HERE. X240 OBJX=OBJX+1 X OBJS(OBJX)=WORD X OTXT(OBJX,1)=TXT(WDX,1) X OTXT(OBJX,2)=TXT(WDX,2) X GOTO 90 X XC TAKE EVERYTHING NOT BATTENED DOWN. X X280 KK=VAL(VERBS(VRBX)) X K1=.FALSE. X IF(KK.EQ.DROP.OR.KK.EQ.PUT.OR.KK.EQ.LEAVE)GOTO 281 X K1=.TRUE. X IF(KK.NE.TAKE.AND.KK.NE.PICK.AND.KK.NE.GET)GOTO 800 X SPK=357 X IF(BLIND(0))GOTO 810 X281 DO 289 I=1,MAXOBJ X IF(.NOT.ATHAND(I).OR.FIXED(I).NE.0)GOTO 289 X IF(I.GE.WATER.AND.I.LE.WINE+1)GOTO 289 X IF((K1.AND.TOTING(I)) .OR. (.NOT.K1.AND..NOT.TOTING(I)) )GOTO 289 X OBJX=OBJX+1 X OBJS(OBJX)=I XC OTXT(OBJX,1)=NTXT(I,1) XC OTXT(OBJX,2)=NTXT(I,2) X OTXT(OBJX,1)='BUG???' X OTXT(OBJX,2)=' ' X IF(OBJX.EQ.44)GOTO 90 X289 CONTINUE X GOTO 90 XC ACTION VERB. X300 IF(VRBX.EQ.0)GOTO 370 X IF(VAL(VERBS(VRBX)).NE.TAKE)GOTO 320 X K=VAL(WORD) X IF(K.EQ.DRINK.OR.K.EQ.INVENT.OR.K.EQ.SCORE.OR.K.EQ.NOTHNG X 1 .OR.K.EQ.LOOK)GOTO 371 X IF(K.NE.GO)GOTO 800 X DK=TXT(WDX,1) X IF(DK.EQ.'WALK '.OR.DK.EQ.'RUN '.OR.DK.EQ.'HIKE ') X 1 GOTO 371 X GOTO 800 X X320 IF(OBJX.NE.0.OR.CLASS(WORDS(WDX-1)).NE.CLASSC)GOTO 800 X370 VRBX=VRBX+1 X371 VERBS(VRBX)=WORD X VTXT(VRBX,1)=TXT(WDX,1) X VTXT(VRBX,2)=TXT(WDX,2) X GOTO 90 X X XC MISCELLANEOUS WORDS/VERBS. X400 IF(VRBX.NE.0)GOTO 800 X VERBS(1)=WORD X VRBX=1 X GOTO 90 XC ANALYZE A PREPOSITION AND ITS OBJECT. CHECK THAT PREP XC IS VALID FOR THIS VERB, AND THEN CHECK THAT THE OBJECT IS VALID XC FOR THIS PREPOSITION. IF FIRST CHECK FAILS, SYNTAX IS MESSED XC UP; IF SECOND PART FAILS, IT MAY MERELY BE AN IMPOSSIBLE ACT. X X500 IF(CLASS(VERBS(VRBX)).NE.CLASSA.OR.IOBX.NE.0)GOTO 800 X IF(PFLAG)GOTO 503 X VRBKEY=VKEY(VAL(VERBS(VRBX))) X IF(VRBKEY.EQ.0)GOTO 800 X PREP=VAL(WORD) X PFLAG=.TRUE. X WDX=WDX+1 X WORD=WORDS(WDX) X IF(WORD.EQ.0)GOTO 510 X GOTO(800,503,800,800,800,600,510),CLASS(WORD) X GOTO 840 X X503 WORD=VAL(WORD) X IF(WORD.EQ.ALL)GOTO 510 X504 CALL GETOBJ(WORD) X IF(WORD)570,860,505 X X505 IOBX=IOBX+1 X IOBJS(IOBX)=WORD X IOTXT(IOBX,1)=TXT(WDX,1) X IOTXT(IOBX,2)=TXT(WDX,2) X510 KK=IABS(PTAB(VRBKEY)/1000) X IF(KK.NE.PREP)GOTO 525 X XC PREP IS VALID WITH THIS VERB. NOW CHECK OBJECT OF PREP. X IF(WORD.EQ.0.OR.CLASS(WORD).EQ.CLASSC)GOTO 530 X XC AN OBJ FOLLOWS THE PREP. SEE IF IT'S PLAUSIBLE. X520 KK=IABS((MOD(PTAB(VRBKEY),0001000))) X IF(KK.EQ.WORD.AND.KK.EQ.ALL)GOTO 280 X IF(KK.EQ.WORD.OR.KK.EQ.999)GOTO 90 X525 VRBKEY=VRBKEY+1 X IF(PTAB(VRBKEY-1).GE.0)GOTO 510 X GOTO 570 X XC NO OBJ FOLLOWS PREP. CHECK SPECIAL CASES. X530 PFLAG=.FALSE. X WDX=WDX-1 X DK=TXT(WDX,1) X DKK=VTXT(VRBX,1) X IF((DK.NE.'ON '.AND.DK.NE.'OFF ').AND. X 1 (DKK.NE.'TURN '.OR.OBJS(OBJX).NE.LAMP) .AND. X 2 (DKK.NE.'TAKE '.AND.DKK.NE.'PUT ') )GOTO 570 X IF((DK.EQ.'UP '.AND.DKK.NE.'PICK ').OR. X 1 (DK.EQ.'DOWN '.AND.(DKK.NE.'PUT '.AND.VERBS(VRBX).NE.THROW X 2 )))GOTO 570 X WDX=WDX+1 X WORD=WORDS(WDX) X IF(WORD.EQ.0)GOTO 900 X IF(CLASS(WORD).NE.CLASSC)GOTO 800 X GOTO 91 X XC YOU CAN'T DO THAT!! X570 SPK=NOWAY(0) X GOTO 810 XC ADJECTIVE HANDLER. XC SCARF THE NEXT WORD, MAKE SURE IT IS A VALID OBJECT FOR THIS ADJ. XC THEN CALL GETOBJ TO SEE IF IT IS REALLY THERE, THEN LINK INTO OBJ XC CODE. X X600 ADJ=VAL(WORD) X WDX=WDX+1 X WORD=WORDS(WDX) X IF(WORD)840,640,605 X X605 IF(CLASS(WORD).EQ.CLASSC) GOTO 640 X IF(CLASS(WORD).NE.CLASSN) WORD=VOCABX(TXT(WDX,1),-(CLASSN+1)) X IF(WORD.EQ.-1.OR.CLASS(WORD).NE.CLASSN.OR.VAL(WORD).EQ.ALL) X 1 GOTO 800 X WORDS(WDX)=WORD X KK=VAL(WORD) X K=ADJKEY(ADJ) X610 IF(KK.EQ.IABS(ADJTAB(K)))GOTO 92 X IF(ADJTAB(K).LT.0)GOTO 800 X K=K+1 X GOTO 610 X X640 CALL A5TOA1(TXT(WDX-1,1),TXT(WDX-1,2),'_WHAT?',ZAPP,K) X WRITE(*,642)(ZAPP(I),I=1,K) X642 FORMAT(1X, 20A1) X GOTO 20 X X XC ANALYZE A CONJUNCTION. MAY BE A COMMA OR AN EXPLICIT "AND". XC LOOK AHEAD AT NEXT WORD. IF IT IS AN ACTION VERB AND NO OBJECT XC HAS YET BEEN SPECIFIED, PUT IT INTO THE VERB STACK. IF IT IS XC AN OBJECT, ADD IT TO THE PILE. XC ELSE, BUMP BACK THE WORD POINTER, ASSUME END OF CLAUSE, AND XC RETURN. X700 WDX=WDX+1 X WORD=WORDS(WDX) X IF(WORD)840,800,710 X X710 GOTO(790,92,720,790,800,92,800),CLASS(WORD) X XC A NEW ACTION VERB FOLLOWS. IF NO PREVIOUS VERB HAS BEEN TYPED, XC HE LOSES. IF PREVIOUS VERB IS NOT AN ACTION VERB, HE LOSES. XC IF AN OBJ/IOBJ WAS SPECIFIED FOR PREV ACT VERB, HE LOSES. ONLY XC VALID SYNTAX IS: 'GET AND OPEN CAGE'. X720 IF(VRBX.NE.0.AND.CLASS(VERBS(VRBX)).EQ.CLASSA X 1 .AND.OBJX.EQ.0.AND.IOBX.EQ.0)GOTO 92 X790 WDX=WDX-1 X GOTO 900 XC GEE, I DON'T UNDERSTAND. FLUSH REST OF CURRENT CLAUSE, UP TO XC EOL OR CONJUNCTION & CONTINUE. X800 SPK=CONFUZ(0) X810 CALL RSPEAK(SPK) X820 CALL CLRLIN X GOTO 20 X XC AN IRREGULAR WORD WAS TYPED IN BY USER. CHECK FOR WIZARDRY. X830 CONTINUE X X840 CONTINUE X841 IF(PCT(25))GOTO 850 X CALL A5TOA1(TXT(WDX,1),TXT(WDX,2),'. ',ZAPP,K) X WRITE(*,842)(ZAPP(I),I=1,K) X842 FORMAT(/' I don''t understand the word ',20A1) X CALL CLRLIN X GOTO 20 X X850 CALL A5TOA1(TXT(WDX,1),TXT(WDX,2),'? ',ZAPP,K) X WRITE(*,852)(ZAPP(I),I=1,K) X852 FORMAT(/' Mumble? ',20A1) X CALL CLRLIN X GOTO 20 X X XC SCAN TO CONJ OR END OF LINE. X860 CALL CLRLIN X PFLAG=.FALSE. X862 WDX=WDX+1 X IF(WORDS(WDX).EQ.0)GOTO 20 X IF(CLASS(WORDS(WDX)).EQ.CLASSC)GOTO 90 X GOTO 862 X XC END OF CLAUSE. WE APPEAR TO HAVE REACHED THE END OF A SENTENCE. XC IT WAS TERMINATED EITHER BY CRLF OR A CONJUNCTION. IF A CONJ, XC THE CONJ ANALYZER CLAIMS THAT THE NEXT WORDS ARE NOT PART OF XC THIS CLAUSE. DECIDE WHETHER OR NOT WE HAVE ENOUGH TO WORK WITH. X900 PFLAG=.FALSE. X IF(VERBS(1).NE.0)GOTO 930 X IF(OBJS(1).EQ.0)GOTO 800 X IF(OBJS(2).NE.0)GOTO 920 X CALL A5TOA1(OTXT(1,1),OTXT(1,2),'? ',ZAPP,K) X WRITE(*,915)(ZAPP(I),I=1,K) X915 FORMAT(/' What do you want to do with the ',20A1) X GOTO 20 X X920 WRITE(*,*)' What do you want to do with them' X GOTO 20 X X930 IF(OBJX.GT.1.AND.IOBX.GT.1)GOTO 800 X RETURN X X END X X X X X XC*** HERE .TRUE. IF OBJ AT THIS LOCATION X X X LOGICAL FUNCTION HERE(OBJ) X XC HERE(OBJ) = TRUE IF THE OBJ IS AT "LOC" (OR IS BEING CARRIED) X X IMPLICIT INTEGER(A-Z) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X LOGICAL TOTING X HERE = .FALSE. X IF(OBJ.LT.1.OR.OBJ.GT.MAXOBJ)RETURN X HERE=PLACE(OBJ).EQ.LOC.OR.TOTING(OBJ) X RETURN X END X X X X X XC*** HINGED .TRUE. IF OBJ CAN BE OPENED X X X LOGICAL FUNCTION HINGED(OBJ) X XC HINGED(OBJ) = TRUE IF OBJECT CAN BE OPENED/SHUT. X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X HINGED=BITSET(OBJCON(OBJ),1) X X RETURN X END X X X X XC*** HOLDNG .TRUE. IF HOLDING OBJ X X X LOGICAL FUNCTION HOLDNG(OBJ) X XC HOLDNG(OBJ) = TRUE IF THE OBJ IS BEING CARRIED IN HAND. X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X HOLDNG = .FALSE. X IF(OBJ.LT.1.OR.OBJ.GT.MAXOBJ)RETURN X HOLDNG=PLACE(OBJ).EQ.-1 X RETURN X END X X X X X X X XC*** INSERT X X SUBROUTINE INSERT(OBJECT,CONTNR) X X IMPLICIT INTEGER(A-Z) X COMMON /HLDCOM/ HOLDER(150),HLINK(150) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X X IF(CONTNR.EQ.OBJECT)CALL BUG(32) X CALL CARRY(OBJECT,LOC) X X TEMP=HOLDER(CONTNR) X HOLDER(CONTNR)=OBJECT X HLINK(OBJECT)=TEMP X PLACE(OBJECT)=-CONTNR X RETURN X X END XC*** INSIDE .TRUE. IF LOCATION IS WELL WITHIN THE CAVE X X X LOGICAL FUNCTION INSIDE(LOC) X XC INSIDE(LOC) = TRUE IF LOCATION IS WELL WITHIN THE CAVE X X IMPLICIT INTEGER(A-Z) X LOGICAL OUTSID,PORTAL X INSIDE=.NOT.OUTSID(LOC).AND..NOT.PORTAL(LOC) X RETURN X END X X X X X X X X XC*** JUGGLE X X SUBROUTINE JUGGLE(OBJECT) X XC JUGGLE AN OBJECT BY PICKING IT UP AND PUTTING IT DOWN AGAIN, THE PURPOSE XC BEING TO GET THE OBJECT TO THE FRONT OF THE CHAIN OF THINGS AT ITS LOC. X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X X I=PLACE(OBJECT) X J=FIXED(OBJECT) X CALL MOVE(OBJECT,I) X CALL MOVE(OBJECT+MAXOBJ,J) X RETURN X END X X X XC*** LIQ X X X INTEGER FUNCTION LIQ(OBJ) X IMPLICIT INTEGER(A-Z) X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X XC LIQ=LIQ2(MAX0(PROP(OBJ),-1-PROP(OBJ))) X LIQ = 0 X IF(OBJ.NE.BOTTLE.AND.OBJ.NE.CASK)RETURN X IQ = MAX0(PROP(OBJ)+1,-1-(PROP(OBJ)+1)) X IF(IQ.LE.0)RETURN X LIQ=LIQTYP(IQ) X RETURN X END X X X X X XC*** LIQ2 XC NON-LOGICAL (ILLOGICAL?) FUNCTIONS (CLASS,LIQ,LIQ2,LIQLOC,VAL) X X INTEGER FUNCTION LIQ2(PBOTL) X IMPLICIT INTEGER(A-Z) X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X X LIQ2=(1-PBOTL)*WATER+(PBOTL/2)*(WATER+OIL)+(PBOTL/4) X 1 *(WATER+WINE-2*OIL) X RETURN X END X X X X X X X X X XC*** LIQLOC X X INTEGER FUNCTION LIQLOC(LOC) X IMPLICIT INTEGER(A-Z) X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X INTEGER WRD(2) X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X EQUIVALENCE (LOCCON,WRD) XC CALL TOOCT(LOCCON(LOC)) XC CALL TOOCT(WRD(LOC*2)) X X LIQLOC=LIQ2((MOD(LOCCON(LOC)/8,2)*(MOD(LOCCON(LOC)/2*2,16)-9) X 1 +1)) X X RETURN X END X X X XC*** LIVING .TRUE. IF OBJ IS LIVING, BEAR FOR EXAMPLE X X X LOGICAL FUNCTION LIVING(OBJ) X XC LIVING(OBJ) = TRUE IF OBJ IS SOME SORT OF CRITTER X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X LIVING=BITSET(OBJCON(OBJ),9) X X RETURN X END X X X X XC*** LOCKED .TRUE. IF LOCKABLE OBJ IS LOCKED X X LOGICAL FUNCTION LOCKED(OBJ) X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON/CONCOM/LOCCON(250),OBJCON(150) X LOCKED=BITSET(OBJCON(OBJ),4) X RETURN X END X XC*** LOCKS .TRUE. IF YOU CAN LOCK THIS OBJ X X LOGICAL FUNCTION LOCKS(OBJ) X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON/CONCOM/LOCCON(250),OBJCON(150) X LOCKS=BITSET(OBJCON(OBJ),3) X RETURN X END X X X X X X XC*** LOOKIN X X SUBROUTINE LOOKIN(CONTNR) X XC LIST CONTENTS IF OBJ IS A CONTAINER AND IS OPEN OR TRANSPARENT. XC SAVE INITIAL VALUE OF BLKLIN THRU SUBROUTINE. X X IMPLICIT INTEGER(A-Z) X COMMON /BLKCOM/ BLKLIN X COMMON /HLDCOM/ HOLDER(150),HLINK(150) X LOGICAL VESSEL,AJAR,OPAQUE,BLKLIN,BSAVE X DIMENSION TK(20) X X IF(.NOT.VESSEL(CONTNR).OR. X 1 (.NOT.AJAR(CONTNR).AND.OPAQUE(CONTNR)) )RETURN X TEMP=HOLDER(CONTNR) X LOOP=0 X BSAVE=BLKLIN X20 IF(TEMP.EQ.0)RETURN X BLKLIN=.FALSE. X IF(LOOP.EQ.0)CALL RSPEAK(360) X CALL TNOUA X CALL PSPEAK(TEMP,-1) X BLKLIN=BSAVE X TEMP=HLINK(TEMP) X LOOP=-1 X GOTO 20 X X END X X X X SUBROUTINE MOVE(OBJECT,WHERE) X XC PLACE ANY OBJECT ANYWHERE BY PICKING IT UP AND DROPPING IT. MAY ALREADY BE XC TOTING, IN WHICH CASE THE CARRY IS A NO-OP. MUSTN'T PICK UP OBJECTS WHICH XC ARE NOT AT ANY LOC, SINCE CARRY WANTS TO REMOVE OBJECTS FROM ATLOC CHAINS. X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X LOGICAL ENCLSD X X IF(OBJECT.GT.MAXOBJ)THEN X FROM=FIXED(OBJECT-MAXOBJ) X ELSE X IF(ENCLSD(OBJECT))CALL REMOVE(OBJECT) X FROM=PLACE(OBJECT) X ENDIF X IF(FROM.GT.0.AND.FROM.LE.MAXOBJ*2)CALL CARRY(OBJECT,FROM) X CALL DROP(OBJECT,WHERE) X RETURN X END X X X X X X XC*** NOWAY X X X INTEGER FUNCTION NOWAY(DUMMY) X XC GENERATE'S SOME VARIANT OF "CAN'T DO THAT" MESSAGE. X X IMPLICIT INTEGER(A-Z) X LOGICAL PCT X X NOWAY=14 X IF(PCT(50))NOWAY=110 X IF(PCT(33))NOWAY=147 X IF(PCT(25))NOWAY=250 X IF(PCT(20))NOWAY=262 X IF(PCT(17))NOWAY=25 X IF(PCT(14))NOWAY=345 X IF(PCT(12))NOWAY=346 X RETURN X END X X X X X X XC*** OPAQUE .TRUE. IF OBJ IS NON-TRANSPARENT CONTAINER X X X LOGICAL FUNCTION OPAQUE(OBJ) X XC OPAQUE(OBJ) = TRUE IF OBJECT IS NOT TRANSPARENT. E.G., BAG & CHEST ARE OPAQ XC WICKER CAGE & GLASS BOTTLE ARE TRANSPARENT. X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X OPAQUE=BITSET(OBJCON(OBJ),6) X X RETURN X END X XC*** OUTSID .TRUE. IF LOCATION IS OUTSIDE THE CAVE X X X LOGICAL FUNCTION OUTSID(LOC) X XC OUTSID(LOC) = TRUE IF LOCATION IS OUTSIDE THE CAVE X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X OUTSID=BITSET(LOCCON(LOC),6) X X RETURN X END X X X X XC*** PCT X X X LOGICAL FUNCTION PCT(N) X XC PCT(N) = TRUE N% OF THE TIME (N INTEGER FROM 0 TO 100) X X IMPLICIT INTEGER(A-Z) X PCT=RANZ(100).LT.N X RETURN X END X X X X X X XC*** PLURAL .TRUE. IF OBJ IS MULTIPLE OBJS X X X LOGICAL FUNCTION PLURAL(OBJ) X XC PLURAL(OBJ) = TRUE IF OBJECT IS A "BUNCH" OF THINGS (COINS, SHOES). X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X PLURAL=BITSET(OBJCON(OBJ),13) X X RETURN X END X X X X X X XC*** PORTAL .TRUE. IF LOCATION IS IN CAVE ENTRANCE X X X LOGICAL FUNCTION PORTAL(LOC) X XC PORTAL(LOC) = TRUE IS LOCATION IS IN CAVE "ENTRANCE" X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X PORTAL=BITSET(LOCCON(LOC),5) X X RETURN X END X X X X XC*** PRINTD .TRUE. IF OBJ CAN BE READ X X X LOGICAL FUNCTION PRINTD(OBJ) X XC PRINTD(OBJ) = TRUE IF OBJECT CAN BE READ. X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X PRINTD=BITSET(OBJCON(OBJ),8) X X RETURN X END X X X X XC*** PSPEAK X X X X SUBROUTINE PSPEAK(MSG,SKIP) X XC FIND THE SKIP+1ST MESSAGE FROM MSG AND PRINT IT. MSG SHOULD BE THE INDEX OF XC THE INVENTORY MESSAGE FOR OBJECT. (INVEN+N+1 MESSAGE IS PROP=N MESSAGE). X X IMPLICIT INTEGER(A-Z) X COMMON /TXTCOM/ LINES(25000),RTEXT(450),PTEXT(150) X X M=PTEXT(MSG) X IF(SKIP.LT.0)GOTO 9 X DO 3 I=0,SKIP X1 M=IABS(LINES(M)) X IF(LINES(M).GE.0)GOTO 1 X3 CONTINUE X9 CALL SPEAK(M) X RETURN X END X X X X X X X XC*** PUT X X X X INTEGER FUNCTION PUT(OBJECT,WHERE,PVAL) X XC PUT IS THE SAME AS MOVE, EXCEPT IT RETURNS A VALUE USED TO SET UP THE XC NEGATED PROP VALUES FOR THE REPOSITORY OBJECTS. X X IMPLICIT INTEGER(A-Z) X X CALL MOVE(OBJECT,WHERE) X PUT=(-1)-PVAL X RETURN X END X X X X XC*** RANZ XC UTILITY ROUTINES (SHIFT, RAN, DATIME, CIAO, BUG, LOG) X X INTEGER FUNCTION RANZ(RANGE) X IMPLICIT INTEGER (A-Z) X SAVE X DATA SEED/12345/ X SEED = SEED*69069+1 X I = 16384/RANGE X J = IABS(SEED)/I X RANZ = MOD(J,RANGE) X RETURN X END X X X XC*** RATING X X SUBROUTINE RATING(SCORE,BONUS,GAVEUP,SCORNG,CLOSNG,CLOSED X 1 ,HNTMAX) X XC CALCULATE WHAT THE PLAYER'S SCORE WOULD BE IF HE QUIT NOW. XC THIS MAY BE THE END OF THE GAME, OR HE MAY JUST BE WONDERING XC HOW HE IS DOING. X X IMPLICIT INTEGER(A-Z) X LOGICAL TREASR,GAVEUP,CLOSNG,CLOSED,SCORNG,HINTED,KILLED X COMMON /MNECOM/ BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE(2,4),TK(20) X COMMON /DIECOM/ NUMDIE,MAXDIE,TURNS,KILLED X COMMON /DWFCOM/ DWARF,KNIFE,KNFLOC,DFLAG,DSEEN(6),DLOC(6), X 1 ODLOC(6),DWFMAX X COMMON /HNTCOM/ HINTLC(20),HINTED(20),HINTS(20,4),HNTSIZ,HNTMIN X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X COMMON /SV2COM/ANVIL,BATTER,BEES,BILLBD,BIRD,BRUSH,CAGE, X 1 CAKES,CHAIN,CHEST,CHLOC,CHLOC2,CLAM,CLOAK,CLSSES,COINS,CROWN, X 2 DALTLC,DOG,DRAGON,EGGS,FISSUR,FLOWER,GATLOC,GRAIL,HIVE, X 3 HONEY,HORN,JEWELS,KEYS,LYRE, X 4 MAGZIN,MIRROR,MUSHRM,MXSCOR,NUGGET,OYSTER,PEARL,PHONE, X 5 PILLOW,POLE,POSTER,PREPAT,PREPDN,PREPFR,PREPIN,PREPOF, X 6 PREPON,PYRAM,RADIUM,RING,RUG,SAPPHI,SHIELD,SHOES, X 7 SHUT,SLUGS,SNAKE,SPHERE,STEPS,STICKS,SWORD,TABLET,TRIDNT, X 8 UNLOCK,VASE,WALL,WALL2,WEAR,WUMPUS,Y2,YANK X X DIMENSION QK(20) X XC THE PRESENT SCORING ALGORITHM IS AS FOLLOWS: XC (TREASURE POINTS ARE EXPLAINED IN A FOLLOWING COMMENT) XC OBJECTIVE: POINTS: PRESENT TOTAL POSSIBLE: XC GETTING WELL INTO CAVE 25 25 XC TOTAL POSSIBLE FOR TREASURES (+MAG) 426 XC SURVIVING (MAX-NUM)*10 30 XC NOT QUITTING 4 4 XC REACHING "CLOSNG" 20 20 XC "CLOSED": QUIT/KILLED 10 XC KLUTZED 20 XC WRONG WAY 25 XC SUCCESS 30 30 XC ROUND OUT THE TOTAL 16 16 XC TOTAL: 551 XC (POINTS CAN ALSO BE DEDUCTED FOR USING HINTS.) X X SCORE=0 X MXSCOR=0 X XC FIRST TALLY UP THE TREASURES. MUST BE IN BUILDING AND NOT BROKEN. XC GIVE THE POOR GUY PARTIAL SCORE JUST FOR FINDING EACH TREASURE. XC GETS FULL SCORE, QK(3), FOR OBJ IF: XC OBJ IS AT LOC QK(1), AND XC OBJ HAS PROP VALUE OF QK(2) XC XC WEIGHT TOTAL POSSIBLE XC MAGAZINE 1 (ABSOLUTE) 1 XC XC ALL THE FOLLOWING ARE MULTIPLIED BY 5 (RANGE 5-25): XC BOOK 2 XC CASK 3 (WITH WINE ONLY) XC CHAIN 4 (MUST ENTER VIA STYX) XC CHEST 5 XC CLOAK 3 XC CLOVER 1 XC COINS 5 XC CROWN 2 XC CRYSTAL-BALL 2 XC DIAMONDS 2 XC EGGS 3 XC EMERALD 3 XC GRAIL 2 XC HORN 2 XC JEWELS 1 XC LYRE 1 XC NUGGET 2 XC PEARL 4 XC PYRAMID 4 XC RADIUM 4 XC RING 4 XC RUG 3 XC SAPPHIRE 1 XC SHOES 3 XC SPICES 1 XC SWORD 4 XC TRIDENT 2 XC VASE 2 XC DROPLET 5 XC TREE 5 XC TOTAL: 85 * 5 = 425 + 1 ==> 426 X X DO 1010 OBJ=1,MAXOBJ X IF(POINTS(OBJ).EQ.0)GOTO 1010 X QK(3)=IABS(POINTS(OBJ))/1000000 X QK(2)=(IABS(POINTS(OBJ))-QK(3)*1000000)/1000 X QK(1)=IABS(POINTS(OBJ))-QK(3)*1000000-QK(2)*1000 X IF(POINTS(OBJ).LT.0) QK(1)=-QK(1) X K=0 X IF(.NOT.TREASR(OBJ))GOTO 1007 X K=QK(3)*2 X IF(PROP(OBJ).GE.0)SCORE=SCORE+K X QK(3)=QK(3)*5 X1007 IF(PLACE(OBJ).EQ.QK(1).AND.PROP(OBJ).EQ.QK(2).AND. X 1 (PLACE(OBJ).NE.-CHEST.OR.PLACE(CHEST).EQ.3).AND. X 2 (PLACE(OBJ).NE.-SHIELD.OR.PLACE(SHIELD).EQ.-SAFE)) X 3 SCORE=SCORE+QK(3)-K X MXSCOR=MXSCOR+QK(3) X1010 CONTINUE XC NOW LOOK AT HOW HE FINISHED AND HOW FAR HE GOT. MAXDIE AND NUMDIE TELL US XC HOW WELL HE SURVIVED. GAVEUP SAYS WHETHER HE EXITED VIA QUIT. DFLAG WILL XC TELL US IF HE EVER GOT SUITABLY DEEP INTO THE CAVE. CLOSNG STILL INDICATES XC WHETHER HE REACHED THE ENDGAME. AND IF HE GOT AS FAR AS "CAVE CLOSED" XC (INDICATED BY "CLOSED"), THEN BONUS IS ZERO FOR MUNDANE EXITS OR 133, 134, XC 135 IF HE BLEW IT (SO TO SPEAK). X X ASCORE=(MAXDIE-NUMDIE)*10 X MXSCOR=MXSCOR+MAXDIE*10 X IF(.NOT.(SCORNG.OR.GAVEUP))ASCORE=ASCORE+4 X MXSCOR=MXSCOR+4 X IF(DFLAG.NE.0)ASCORE=ASCORE+25 X MXSCOR=MXSCOR+25 X IF(CLOSNG)ASCORE=ASCORE+20 X MXSCOR=MXSCOR+20 X IF(.NOT.CLOSED)GOTO 1020 X IF(BONUS.EQ.0)ASCORE=ASCORE+10 X IF(BONUS.EQ.135)ASCORE=ASCORE+20 X IF(BONUS.EQ.134)ASCORE=ASCORE+25 X IF(BONUS.EQ.133)ASCORE=ASCORE+30 X1020 MXSCOR=MXSCOR+30 XC ROUND IT OFF. X X ASCORE=ASCORE+16 X MXSCOR=MXSCOR+16 X XC DEDUCT POINTS FOR HINTS. HINTS < HNTMIN ARE SPECIAL; SEE DATABASE DESCRIPTIO X X DO 1030 I=1,HNTMAX X1030 IF(HINTED(I))SCORE=SCORE-HINTS(I,2) X JTURNS=TURNS/100 X IF(JTURNS.EQ.0)ASCORE=0 X IF(JTURNS.EQ.1)ASCORE=ASCORE/3 X IF(JTURNS.EQ.2)ASCORE=(ASCORE*2)/3 X SCORE=SCORE+ASCORE X IF(SCORE.LT.0) SCORE=0 X RETURN X END X X X X XC*** REMOVE X X X SUBROUTINE REMOVE(OBJECT) X X IMPLICIT INTEGER(A-Z) X COMMON /HLDCOM/ HOLDER(150),HLINK(150) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X X CONTNR=-PLACE(OBJECT) X PLACE(OBJECT)=-1 X X IF(HOLDER(CONTNR).NE.OBJECT)GOTO 1 X HOLDER(CONTNR)=HLINK(OBJECT) X RETURN X X1 TEMP=HOLDER(CONTNR) X2 IF(HLINK(TEMP).EQ.OBJECT)GOTO 3 X TEMP=HLINK(TEMP) X GOTO 2 X X3 HLINK(TEMP)=HLINK(OBJECT) X RETURN X END X X X X X XC*** RSPEAK X X SUBROUTINE RSPEAK(I) X XC PRINT THE I-TH "RANDOM" MESSAGE (SECTION 6 OF DATABASE). X X IMPLICIT INTEGER(A-Z) X COMMON /TXTCOM/ LINES(25000),RTEXT(450),PTEXT(150) X X IF(I.LE.0)RETURN X M=RTEXT(I) X CALL SPEAK(M) X RETURN X END X X X X X XC*** SMALL .TRUE. IF IT FITS IN SACK OR SMALL CONTAINER X X LOGICAL FUNCTION SMALL(OBJ) X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON/CONCOM/LOCCON(250),OBJCON(150) X SMALL=BITSET(OBJCON(OBJ),5) X RETURN X END X X X XC*** SPEAK X X SUBROUTINE SPEAK(N) X XC PRINT THE MESSAGE WHICH STARTS AT LINES(N). PRECEDE IT WITH A BLANK LINE XC UNLESS BLKLIN IS FALSE. X X IMPLICIT INTEGER(A-Z) X LOGICAL BLKLIN X COMMON /TNOUX/INDENT X COMMON /TXTCOM/ LINES(25000),RTEXT(450),PTEXT(150) X COMMON /BLKCOM/ BLKLIN X DIMENSION OLINE(30) XC DATA ZCLYD/'CLYD'/,ZLS/'<$$<'/ XC ZCLYD = 0 XC ZCLYD = 37+256*(9+256*(20+256*15)) X ZCLYD = ICHAR('c')+256*(ICHAR('L')+ 256*(ICHAR('y') X 1 +256*ICHAR('D'))) X ZLS = 60+256*(36+256*(36+256*60)) X XCLYD=IEOR(ZCLYD,ZLS) X100 IF(N.EQ.0)GOTO 145 X IF(LINES(N+1).EQ.XCLYD)GOTO 4 X K=N X1 CONTINUE X L=IABS(LINES(K))-K-1 X DO 2 I=1,L X2 OLINE(I)=IEOR(LINES(K+I),ZCLYD) X IF(INDENT.EQ.0)WRITE(*,3) (OLINE(I),I=1,L) X IF(INDENT.EQ.1)WRITE(*,133)(OLINE(I),I=1,L) X133 FORMAT(6X,19A4) X3 FORMAT(' ',19A4) X K=K+L+1 X IF(LINES(K).GE.0)GOTO 1 X4 CONTINUE X145 INDENT=0 X RETURN X END X X XC A HORRIBLE KLUDGE X SUBROUTINE TNOUA X INTEGER INDENT X COMMON /TNOUX/INDENT X INDENT=1 X RETURN X END X X X XC*** TOTING .TRUE. IF OBJ SOMEWHERE ON PERSON X X X LOGICAL FUNCTION TOTING(OBJ) X XC TOTING(OBJ) = TRUE IF THE OBJ IS BEING CARRIED (IN HAND OR XC CONTAINER). OBJ MAY NOT BE REACHABLE. SEE XC ALSO: ENCLSD, ATHAND, HOLDNG. X X IMPLICIT INTEGER(A-Z) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X LOGICAL HOLDNG,ENCLSD,AAA,BBB,CCC X X X X TOTING = .FALSE. X IF(HOLDNG(OBJ))THEN X TOTING = .TRUE. X RETURN X ENDIF X CONTNR=-PLACE(OBJ) X IF(CONTNR.LE.0)RETURN X IF(HOLDNG(CONTNR))THEN X TOTING = .TRUE. X RETURN X ENDIF X OUTER=-PLACE(CONTNR) X IF(OUTER.LE.0)RETURN X IF(HOLDNG(OUTER))THEN X TOTING = .TRUE. X RETURN X ENDIF X OUTER2=-PLACE(OUTER) X IF(OUTER2.LE.0)RETURN X IF(HOLDNG(OUTER2))THEN X TOTING = .TRUE. X RETURN X ENDIF X RETURN X X END X X X X X XC*** TRAVL XC FIGURE OUT THE NEW LOCATION XC XC GIVEN THE CURRENT LOCATION IN "LOC", AND A MOTION VERB NUMBER IN "K", PUT XC THE NEW LOCATION IN "NEWLOC". THE CURRENT LOC IS SAVED IN "OLDLOC" IN CASE XC HE WANTS TO RETREAT. THE CURRENT OLDLOC IS SAVED IN OLDLC2, IN CASE HE XC DIES. (IF HE DOES, NEWLOC WILL BE LIMBO, AND OLDLOC WILL BE WHAT KILLED XC HIM, SO WE NEED OLDLC2, WHICH IS THE LAST PLACE HE WAS SAFE.) X X SUBROUTINE TRAVL(K,BCROSS,TALLY2) X IMPLICIT INTEGER(A-Z) X X LOGICAL KILLED,PCT,HOLDNG,ENCLSD X LOGICAL INSIDE,OUTSID,PORTAL,TOTING,HERE,AT,FORCED X X COMMON /DIECOM/ NUMDIE,MAXDIE,TURNS,KILLED X COMMON /TRVCOM/ TRAVEL(1600) X COMMON /LTXCOM/ LTEXT(250),STEXT(250),KEY(250),ABB(250),LOCSIZ X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /MNECOM/ BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE(2,4),TK(20) X X KILLED=.FALSE. X KK=KEY(LOC) X NEWLOC=LOC X IF(KK.EQ.0)CALL BUG(26) X IF(K.EQ.NULL)RETURN X IF(K.EQ.BACK)GOTO 20 X IF(K.EQ.CAVE)GOTO 40 X OLDLC2=OLDLOC X OLDLOC=LOC X X9 LL=IABS(TRAVEL(KK)) X IF(MOD(LL,0001000).EQ.1.OR.MOD(LL,0001000).EQ.K) X 1 GOTO 10 X IF(TRAVEL(KK).LT.0000000)GOTO 50 X KK=KK+1 X GOTO 9 X X10 LL=LL/0001000 X11 NEWLOC=LL/0001000 X K=MOD(NEWLOC,100) X IF(NEWLOC.LE.MAXLOC)GOTO 13 X IF(PROP(K).NE.NEWLOC/100-3)GOTO 16 X12 IF(TRAVEL(KK).LT.0)CALL BUG(25) X KK=KK+1 X NEW1=IABS(TRAVEL(KK))/1000 X IF(NEW1.EQ.LL)GOTO 12 X LL=NEW1 X GOTO 11 X X13 IF(NEWLOC.LE.100)GOTO 14 X IF(TOTING(K).OR.(NEWLOC.GT.200.AND.AT(K)))GOTO 16 X GOTO 12 X X14 IF(NEWLOC.NE.0.AND..NOT.PCT(NEWLOC))GOTO 12 X16 NEWLOC=MOD(LL,1000) X IF(NEWLOC.LE.MAXLOC)GO TO 2000 X IF(NEWLOC.LE.500)GOTO 30000 X CALL RSPEAK(NEWLOC-500) X NEWLOC=LOC X RETURN XC HANDLE "GO BACK". LOOK FOR VERB WHICH GOES FROM LOC TO OLDLOC, OR TO OLDLC2 XC IF OLDLOC HAS FORCED-MOTION. K2 SAVES ENTRY -> FORCED LOC -> PREVIOUS LOC. X X20 K=OLDLOC X IF(FORCED(K))K=OLDLC2 X OLDLC2=OLDLOC X OLDLOC=LOC X K2=0 X IF(K.NE.LOC)GOTO 21 X CALL RSPEAK(91) X GO TO 2000 X X21 LL=MOD((IABS(TRAVEL(KK))/1000),1000) X IF(LL.EQ.K)GOTO 25 X IF(LL.GT.MAXLOC)GOTO 22 X J=KEY(LL) X IF(FORCED(LL).AND.MOD((IABS(TRAVEL(J))/1000),1000).EQ.K) X 1 K2=KK X22 IF(TRAVEL(KK).LT.000000)GOTO 23 X KK=KK+1 X GOTO 21 X X23 KK=K2 X IF(KK.NE.0)GOTO 25 X CALL RSPEAK(140) X2000 IF(NEWLOC.LT.242.OR.NEWLOC.GT.247)RETURN X IF(NEWLOC.NE.242)GOTO 2010 X KALFLG=0 X RETURN X2010 IF(NEWLOC.NE.OLDLOC+1)GOTO 2020 X KALFLG=KALFLG+1 X RETURN X2020 KALFLG=-10 X RETURN X X25 K=MOD(IABS(TRAVEL(KK)),1000) X KK=KEY(LOC) X GOTO 9 X XC CAVE. DIFFERENT MESSAGES DEPENDING ON WHETHER ABOVE GROUND. X X40 IF(OUTSID(LOC))CALL RSPEAK(57) X IF(.NOT.OUTSID(LOC))CALL RSPEAK(58) X RETURN X XC NON-APPLICABLE MOTION. VARIOUS MESSAGES DEPENDING ON WORD GIVEN. X X50 SPK=12 X IF(K.GE.43.AND.K.LE.50)SPK=9 X IF(K.EQ.29.OR.K.EQ.30)SPK=9 X IF(K.EQ.7.OR.K.EQ.36.OR.K.EQ.37)SPK=10 X IF(K.EQ.11.OR.K.EQ.19)SPK=11 X IF(K.EQ.62.OR.K.EQ.65.OR.K.EQ.82)SPK=42 X IF(K.EQ.17)SPK=80 X CALL RSPEAK(SPK) X RETURN XC SPECIAL MOTIONS COME HERE. LABELLING CONVENTION: STATEMENT NUMBERS NNNXX XC (XX=00-99) ARE USED FOR SPECIAL CASE NUMBER NNN (NNN=301-500). X X30000 NEWLOC=NEWLOC-MAXLOC X GOTO (30100,30200,30300,30400,30500,30600,30700),NEWLOC XC ALCOV PLOVR TROLL PHUCE BOOTH BRDGE X WRITE(*,1001)NEWLOC X1001 FORMAT('BUG IN TRAVEL TABLES. NEWLOC= ',I5) X CALL BUG(20) X XC TRAVEL 301. PLOVER-ALCOVE PASSAGE. CAN CARRY ONLY EMERALD. NOTE: TRAVEL XC TABLE MUST INCLUDE "USELESS" ENTRIES GOING THROUGH PASSAGE, WHICH CAN NEVER XC BE USED FOR ACTUAL MOTION, BUT CAN BE SPOTTED BY "GO BACK". X X30100 NEWLOC=99+100-LOC X KK=BURDEN(0) X IF(KK.EQ.0.OR.(KK.EQ.BURDEN(EMRALD).AND.HOLDNG(EMRALD)))RETURN X NEWLOC=LOC X CALL RSPEAK(117) X RETURN X XC TRAVEL 302. PLOVER TRANSPORT. DROP THE EMERALD (ONLY USE SPECIAL TRAVEL IF XC TOTING IT), SO HE'S FORCED TO USE THE PLOVER-PASSAGE TO GET IT OUT. HAVING XC DROPPED IT, GO BACK AND PRETEND HE WASN'T CARRYING IT AFTER ALL. X X30200 IF(ENCLSD(EMRALD))CALL REMOVE(EMRALD) X CALL DROP(EMRALD,LOC) X GOTO 12 X XC TRAVEL 303. TROLL BRIDGE. MUST BE DONE ONLY AS SPECIAL MOTION SO THAT XC DWARVES WON'T WANDER ACROSS AND ENCOUNTER THE BEAR. (THEY WON'T FOLLOW THE XC PLAYER THERE BECAUSE THAT REGION IS FORBIDDEN TO THE PIRATE.) IF XC PROP(TROLL)=1, HE'S CROSSED SINCE PAYING, SO STEP OUT AND BLOCK HIM. XC (STANDARD TRAVEL ENTRIES CHECK FOR PROP(TROLL)=0.) SPECIAL STUFF FOR BEAR. X X30300 IF(PROP(TROLL).NE.1)GOTO 30310 X CALL PSPEAK(TROLL,1) X PROP(TROLL)=0 X CALL MOVE(TROLL2,0) X CALL MOVE(TROLL2+MAXOBJ,0) X CALL MOVE(TROLL,PLAC(TROLL)) X CALL MOVE(TROLL+MAXOBJ,FIXD(TROLL)) X CALL JUGGLE(CHASM) X NEWLOC=LOC X RETURN X X30310 NEWLOC=PLAC(TROLL)+FIXD(TROLL)-LOC X IF(PROP(TROLL).EQ.0)PROP(TROLL)=1 X IF(.NOT.HOLDNG(BEAR))RETURN X CALL RSPEAK(162) X PROP(CHASM)=1 X PROP(TROLL)=2 X CALL DROP(BEAR,NEWLOC) X FIXED(BEAR)=-1 X PROP(BEAR)=3 X IF(PROP(SPICES).LT.0)TALLY2=TALLY2+1 X OLDLC2=NEWLOC X KILLED=.TRUE. X RETURN XC TRAVEL 304. GROWING OR SHRINKING IN AREA OF TINY DOOR. EACH TIME XC HE DOES THIS, EVERYTHING MUST BE MOVED TO THE NEW LOC. PRESUMABLY, XC ALL HIS POSSESIONS ARE SHRUNK OR STRECHED ALONG WITH HIM. XC PHUCE(2,4) IS AN ARRAY CONTAINING FOUR PAIRS OF "HERE" (K) AND XC "THERE" (KK) LOCATIONS. X X30400 K=PHUCE(1,LOC-161+1) X NEWLOC=PHUCE(2,LOC-161+1) X DO 30410 OBJ=1,MAXOBJ X IF(OBJ.EQ.BOAT)GOTO 30410 X IF(PLACE(OBJ).EQ.K.AND.(FIXED(OBJ).EQ.0.OR.FIXED(OBJ).EQ.-1)) X 1 CALL MOVE(OBJ,NEWLOC) X30410 CONTINUE X RETURN X XC TRAVEL #5. PHONE BOOTH IN ROTUNDA. XC TRYING TO SHOVE PAST GNOME, TO GET INTO PHONE BOOTH. X X30500 IF((PROP(BOOTH).EQ.0.AND.PCT(55)).OR.ABB(LOC).EQ.1)GOTO 30510 X NEWLOC=189 X IF(PROP(BOOTH).NE.1)RETURN X CALL RSPEAK(253) X GOTO 30512 X X30510 CALL RSPEAK(263) X PROP(BOOTH)=1 X CALL MOVE(GNOME,188) X30512 NEWLOC=LOC X RETURN X XC TRAVEL #6. COLLAPSING CLAY BRIDGE. HE CAN CROSS WITH THREE (OR FEWER) XC THINGS. IF MORE, OR IF CARRYING OBVIOUSLY HEAVY THINGS, HE MAY END UP XC IN THE DRINK. X X30600 NEWLOC=235 X IF(LOC.EQ.235)NEWLOC=190 X BCROSS=BCROSS+1 X KK=BURDEN(0) X IF(KK.LE.4)RETURN X K=MAX0( ((KK+BCROSS)**2)/10, 10) X30605 IF(PCT(K))GOTO 30610 X CALL RSPEAK(318) X RETURN X X30610 CALL RSPEAK(319) X NEWLOC=236 X IF(HOLDNG(LAMP))CALL MOVE(LAMP,236) X IF(TOTING(AXE).AND.ENCLSD(AXE))CALL REMOVE(AXE) X IF(HOLDNG(AXE))CALL MOVE(AXE,208) X DO 30620 OBJ=1,MAXOBJ X30620 IF(TOTING(OBJ))CALL DSTROY(OBJ) X PROP(CHASM2)=1 X RETURN XC THE KALEIDOSCOPE CODE IS HERE X30700 IF(KALFLG.NE.5)GOTO 30701 X NEWLOC=248 X OLDLOC=247 X RETURN X30701 NEWLOC=242+RANZ(5) X OLDLOC=NEWLOC-1 X CALL RSPEAK(406) X KALFLG=-10 X IF(NEWLOC.EQ.242)KALFLG=0 X RETURN X XC END OF SPECIALS. X X END X X XC*** TREASR .TRUE. IF OBJ IS VALUABLE FOR POINTS X X X LOGICAL FUNCTION TREASR(OBJ) X XC TREASR(OBJ) = TRUE IF OBJECT IS A TREASURE X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X TREASR=BITSET(OBJCON(OBJ),14) X X RETURN X END X X X X X X X XC*** VAL X X X INTEGER FUNCTION VAL(WORD) X XC RETURNS THE 'VALUE' OF A WORD, MODULO 1000. X X IMPLICIT INTEGER(A-Z) X VAL=MOD(WORD,1000) X RETURN X END X X X X XC*** VESSEL .TRUE. IF OBJ CAN HOLD A LIQUID X X X LOGICAL FUNCTION VESSEL(OBJ) X XC VESSEL(OBJ) = TRUE IF OBJECT IS A CONTAINER X X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X X VESSEL=BITSET(OBJCON(OBJ),15) X X RETURN X END X X X X X XC*** VOCABX X X X INTEGER FUNCTION VOCABX(ID,INIT) X XC LOOK UP ID IN THE VOCABULARY (ATAB) AND RETURN ITS "DEFINITION" (KTAB XC -1 IF NOT FOUND. IF INIT IS POSITIVE, THIS IS AN INITIALISATION CALL XC UP A KEYWORD VARIABLE, AND NOT FINDING IT CONSTITUTES A BUG. IT ALSO XC THAT ONLY KTAB VALUES WHICH TAKEN OVER 1000 EQUAL INIT MAY BE CONSIDE XC (THUS "STEPS", WHICH IS A MOTION VERB AS WELL AS AN OBJECT, MAY BE LO XC AS AN OBJECT.) AND IT ALSO MEANS THE KTAB VALUE IS TAKEN MOD 1000. X X IMPLICIT INTEGER(A-Z) X CHARACTER*6 ATAB,DTK,ID,VTXT,OTXT,IOTXT,TXT X COMMON /VOCCOM/ KTAB(600),TABSIZ X COMMON /SV3COM/DTK(9),ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X XC HASH=ID.XOR.'PHROG' (DONE BY CALLER) X WDCLAS=INIT X IF(INIT.LT.0)WDCLAS=-INIT-1 X DO 1 I=1,TABSIZ X IF(KTAB(I).EQ.-1)GOTO 2 X IF(ATAB(I).NE.ID)GOTO 1 X IF(CLASS(KTAB(I)).GE.WDCLAS)GOTO 3 X1 CONTINUE X CALL BUG(21) X X2 VOCABX=-1 X IF(INIT.LT.0)RETURN X WRITE(*,4)ID X4 FORMAT (' VOCAB ERROR: CAN''T FIND WORD ''',A5,''' IN TABLE.') X CALL BUG(5) X X3 VOCABX=KTAB(I) X IF(INIT.GE.0)VOCABX=MOD(VOCABX,1000) X RETURN X END X X X XC*** WEARNG .TRUE. IF WEARING OBJ X X X LOGICAL FUNCTION WEARNG(OBJ) X XC WEARNG(OBJ) = TRUE IF THE OBJ IS BEING WORN X X IMPLICIT INTEGER(A-Z) X COMMON /BITCOM/ OPENBT,UNLKBT,BURNBT,WEARBT X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X LOGICAL BITSET X X WEARNG=BITSET(OBJCON(OBJ),WEARBT) X RETURN X END X X X X X XC*** WORN .TRUE. IF OBJ IS BEING WORN X X LOGICAL FUNCTION WORN(OBJ) X IMPLICIT INTEGER(A-Z) X LOGICAL BITSET X COMMON/CONCOM/LOCCON(250),OBJCON(150) X WORN=BITSET(OBJCON(OBJ),11) X RETURN X END X X X X XC*** YES X X X X LOGICAL FUNCTION YES(X,Y,Z) X XC PRINT MESSAGE X, WAIT FOR YES/NO ANSWER. X X IMPLICIT INTEGER(A-Z) X CHARACTER*6 REPLY X X1 IF(X.NE.0)CALL RSPEAK(X) X WRITE(*,338) X338 FORMAT(/,' >') XC??????????????? THE FOLLOWING WORKS BETTER ON VAXES, ETC: XC338 FORMAT(/,' >',$) X READ(*,30)REPLY X30 FORMAT(A6) X DO 2 I=1,6 X IF(REPLY(I:I).GE.'a'.AND.REPLY(I:I).LE.'z') X 1 REPLY(I:I) = CHAR(ICHAR(REPLY(I:I)) -32) X2 CONTINUE X IF(REPLY.EQ.'YES '.OR.REPLY.EQ.'Y ')GOTO 10 X IF(REPLY.EQ.'NO '.OR.REPLY.EQ.'N ')GOTO 20 X X WRITE(*,*)' Please answer the question.' X GOTO 1 X10 YES=.TRUE. X IF(Y.NE.0)CALL RSPEAK(Y) X RETURN X20 YES=.FALSE. X IF(Z.NE.0)CALL RSPEAK(Z) X RETURN X END X X X END_OF_asubs.f if test 63057 -ne `wc -c asetup.f <<'END_OF_asetup.f' XC THIS IS THE FIRST LINE OF THE SETUP OF ADVENTURE. XC THE COMMENTS ARE IN THE MAIN PROGRAM X X IMPLICIT INTEGER(A-Z) X LOGICAL DSEEN,BLKLIN,HINTED,YES,START,TERSE,ISWIZ,LOGOUT X LOGICAL WZDARK,KILLED,RDFLAG,LIVING X CHARACTER*6 DTK(9),ATAB,DJJ,DK,DKK,DL,DLL X CHARACTER*6 VTXT,OTXT,IOTXT,TXT X DIMENSION PHUCE2(2,4) X X COMMON/IZWIZ/ISWIZ X COMMON /ADJCOM/ ADJKEY(50),ADJTAB(150),ADJSIZ X COMMON /BITCOM/ OPENBT,LOCKBT,BURNBT,WEARBT X COMMON /BLKCOM/ BLKLIN X COMMON /CONCOM/ LOCCON(250),OBJCON(150) X COMMON /DIECOM/ NUMDIE,MAXDIE,TURNS,KILLED X COMMON /DWFCOM/ DWARF,KNIFE,KNFLOC,DFLAG,DSEEN(6),DLOC(6), X 1 ODLOC(6),DWFMAX X COMMON /HLDCOM/ HOLDER(150),HLINK(150) X COMMON /HNTCOM/ HINTLC(20),HINTED(20),HINTS(20,4),HNTSIZ,HNTMIN X COMMON /LIQCOM/ BOTTLE,CASK,WATER,OIL,WINE,LIQTYP(5) X COMMON /LOCCOM/ LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X COMMON /LTXCOM/ LTEXT(250),STEXT(250),KEY(250),ABB(250),LOCSIZ X COMMON /MNECOM/ BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE(2,4),TK(20) X X COMMON /OBJCOM/ PLAC(150),FIXD(150),WEIGHT(150),PROP(150), X 1 POINTS(150) X COMMON /PLACOM/ ATLOC(250),LINK(300),PLACE(150), X 1 FIXED(150),MAXOBJ X COMMON /PRPCOM/ VKEY(60),PTAB(300),VKYSIZ,PTBSIZ X COMMON /TRVCOM/ TRAVEL(1600) X COMMON /TXTCOM/ LINES(25000),RTEXT(450),PTEXT(150) X COMMON /UTXCOM/ WDX X COMMON /VOCCOM/ KTAB(600),TABSIZ X COMMON /WRDCOM/ VERBS(45),VRBX,OBJS(45), X 1 OBJX,IOBJS(15),IOBX,PREP,WORDS(45) X X COMMON /SAVCOM/ABBNUM,ADJ,ATBS,ATTACK,BCROSS,BONUS,CHASE, X 1 CLOCK1,CLOCK2,CLOCK3,CLOSED,CLOSNG,CLSMAX,COMBO,DEADBT, X 2 DETAIL,DKILL,DTOTAL,DWARFN,FLG239, X 3 FOO,FOOBAR,FOOD,GAVEUP,HEALTH,HINT,HIT,HNTMAX,I,IKK,ILOC, X 4 IOBJ,J,JJ,JK1,JKK,K,K1,KK,L,L1,LIMIT, X 5 LINSIZ,LL,LMWARN,LOCK,LOGOUT,MESSAG,OBJ,PANIC, X 6 PORTAL,PTBS,RDFLAG,RETN,RTXSIZ,SCORE,SCORNG,SECT, X 7 SKEY,SLOC,SPK,START,STICK,TABNDX,TALLY,TALLY2,TERSE, X 8 TRVS,TRVSIZ,VEND,VERB,VRBSIZ,WASTE,WKDAY,WKEND,WZDARK, X 9 YEA,ACTSPK,CTEXT,CVAL,HNAME X COMMON /SV2COM/ANVIL,BATTER,BEES,BILLBD,BIRD,BRUSH,CAGE, X 1 CAKES,CHAIN,CHEST,CHLOC,CHLOC2,CLAM,CLOAK,CLSSES,COINS,CROWN, X 2 DALTLC,DOG,DRAGON,EGGS,FISSUR,FLOWER,GATLOC,GRAIL,HIVE, X 3 HONEY,HORN,JEWELS,KEYS,LYRE, X 4 MAGZIN,MIRROR,MUSHRM,MXSCOR,NUGGET,OYSTER,PEARL,PHONE, X 5 PILLOW,POLE,POSTER,PREPAT,PREPDN,PREPFR,PREPIN,PREPOF, X 6 PREPON,PYRAM,RADIUM,RING,RUG,SAPPHI,SHIELD,SHOES, X 7 SHUT,SLUGS,SNAKE,SPHERE,STEPS,STICKS,SWORD,TABLET,TRIDNT, X 8 UNLOCK,VASE,WALL,WALL2,WEAR,WUMPUS,Y2,YANK X COMMON /SV3COM/DTK,ATAB(600),VTXT(45,2),OTXT(45,2),IOTXT(15,2) X 1 ,TXT(35,2) X DIMENSION ACTSPK(60),CTEXT(12),CVAL(12) X DIMENSION HNAME(10) X X LOGICAL AJAR,AT,ATHAND,BITSET,BLIND,CLOSED,CLOSNG, X 1 DARK,DEAD,EDIBLE,ENCLSD,FORCED, X 2 GAVEUP,HERE,HINGED,HOLDNG,INSIDE,LMWARN,LOCKS,OUTSID,OPAQUE, X 3 PANIC,PCT,PLURAL,PORTAL,PRINTD,SCORNG,SMALL, X 4 TOTING,TREASR,LOCKED,VESSEL,WEARNG,WORN,YEA, X 5 YESM X XC DATA LINSIZ/25000/,TRVSIZ/1600/,TABSIZ/600/,LOCSIZ/250/, XC 1 VRBSIZ/60/,RTXSIZ/450/,CLSMAX/12/,HNTSIZ/20/, XC 2 MAXOBJ/150/,MAXLOC/300/,HNTMIN/7/,PTBSIZ/300/,ADJSIZ/50/, XC 3 VKYSIZ/60/,BLKLIN/.TRUE./,DWFMAX/6/,ISWIZ/.FALSE./ X X DATA LINUSE/0/ XC PHUCE CONSISTS OF FOUR PAIRS OF ORIGIN/DESTINATION LOCATIONS FROM/TO XC WHICH ONE IS TRANSPORTED ON UTTERING THE ELFIN CURSE AT THE TINY XC DOOR. HE CAN GO FROM BIG TO SMALL OR SMALL TO BIG, ON EITHER SIDE OF XC THE DOOR. X DATA PHUCE2/158,160,160,158,167,166,166,167/ X X XC DATA DEADBT,OPENBT,LOCKBT,BURNBT,WEARBT /10,2,4,6,12/ XC STATEMENT FUNCTIONS XC XC XC AJAR(OBJ = TRUE IF THE OBJECT IS OPEN XC AT(OBJ) = TRUE IF ON EITHER SIDE OF TWO-PLACED OBJECT XC ATHAND(OBJ) = TRUE IF OBJECT IS HERE AND NOT IN CLOSED CONTAINER. XC BITSET(COND,L,N) = TRUE IF COND(L) HAS BIT N SET (BIT 0 IS UNITS BIT) XC BLIND(DUMMY) = TRUE IF HERO CAN'T SEE (TOO DARK OR GLAREY) XC DARK(DUMMY) = TRUE IF LOCATION "LOC" IS DARK XC DEAD(OBJ) = TRUE IF CRITTER IS KILLED (OR IN ENCHANTED SLEEP) XC FORCED(LOC) = TRUE IF LOC MOVES WITHOUT ASKING FOR INPUT (COND=2) XC HERE(OBJ) = TRUE IF THE OBJ IS AT "LOC" (OR IS BEING CARRIED) XC HINGED(OBJ) = TRUE IF OBJECT CAN BE OPENED/SHUT. XC INSIDE(LOC) = TRUE IF LOCATION IS WELL WITHIN THE CAVE XC LIQ(DUMMY) = OBJECT NUMBER OF LIQUID IN BOTTLE XC LIQLOC(LOC) = OBJECT NUMBER OF LIQUID (IF ANY) AT LOC XC LIVING(OBJ) = TRUE IF OBJ IS SOME SORT OF CRITTER XC LOCKED(OBJ) = TRUE IF OBJECT IS LOCKED. (NEED NOT HAVE A LOCK, XC E.G., RUSTY DOOR) XC LOCKS(OBJ) = TRUE IF OBJECT HAS A LOCK. XC OPAQUE(OBJ) = TRUE IF CONTAINER IS NOT TRANSPARENT (SACK, CHEST) XC TRANSPARENT OBJS: BOTTLE(GLASS), CAGE(WICKER) XC OUTSID(LOC) = TRUE IF LOCATION IS OUTSIDE THE CAVE XC PCT(N) = TRUE N% OF THE TIME (N INTEGER FROM 0 TO 100) XC PLURAL(OBJ) = TRUE IF IT IS A PLURAL OBJ (SHOES, KEYS, ETC.) XC PORTAL(LOC) = TRUE IS LOCATION IS IN CAVE "ENTRANCE" XC PRINTD(OBJ) = TRUE IF OBJECT CAN BE READ. XC SMALL(OBJ) = TRUE IF OBJ FITS INTO SACK XC TOTING(OBJ) = TRUE IF THE OBJ IS BEING CARRIED XC TREASR(OBJ) = TRUE IF OBJECT IS A TREASURE XC VESSEL(OBJ) = TRUE IF OBJECT IS A CONTAINER XC WEARNG(OBJ) = TRUE IF OBJECT IS BEING WORN XC WORN(OBJ) = TRUE IF THE OBJECT CAN BE WORN XC XC CLOSED SAYS WHETHER WE'RE ALL THE WAY CLOSED XC CLOSNG SAYS WHETHER ITS CLOSING TIME YET XC DEMO IS TRUE IF THIS IS A PRIME-TIME DEMONSTRATION GAME XC GAVEUP SAYS WHETHER HE EXITED VIA "QUIT" XC LMWARN SAYS WHETHER HE'S BEEN WARNED ABOUT LAMP GOING DIM XC PANIC SAYS WHETHER HE'S FOUND OUT HE'S TRAPPED IN THE CAVE XC SCORNG INDICATES TO THE RATING ROUTINE WHETHER WE'RE DOING A "SCORE" COMMAND XC WZDARK SAYS WHETHER THE LOC HE'S LEAVING WAS DARK XC YEA IS RANDOM YES/NO REPLY X X X X XC CLEAR OUT THE VARIOUS TEXT-POINTER ARRAYS. ALL TEXT IS STORED IN ARRAY XC LINES; EACH LINE IS PRECEDED BY A WORD POINTING TO THE NEXT POINTER (I.E. XC THE WORD FOLLOWING THE END OF THE LINE). THE POINTER IS NEGATIVE IF THIS IS XC FIRST LINE OF A MESSAGE. THE TEXT-POINTER ARRAYS CONTAIN INDICES OF XC POINTER-WORDS IN LINES. STEXT(N) IS SHORT DESCRIPTION OF LOCATION N. XC LTEXT(N) IS LONG DESCRIPTION. PTEXT(N) POINTS TO MESSAGE FOR PROP( PROPN)=0 XC SUCCESSIVE PROP MESSAGES ARE FOUND BY CHASING POINTERS. RTEXT CONTAINS XC SECTION 6'S STUFF. CTEXT(N) POINTS TO A PLAYER-CLASS MESSAGE. MTEXT IS FOR XC SECTION 12. WE ALSO CLEAR COND. SEE DESCRIPTION OF SECTION 9 FOR DETAILS. X X DEADBT = 10 X OPENBT = 2 X LOCKBT = 4 X BURNBT = 6 X WEARBT = 12 X DO 2238 I = 1,2 X DO 2239 J = 1,4 X PHUCE(I,J) = PHUCE2(I,J) X2239 CONTINUE X2238 CONTINUE XC DATA LINSIZ/25000/,TRVSIZ/1600/,TABSIZ/600/,LOCSIZ/250/, XC 1 VRBSIZ/60/,RTXSIZ/450/,CLSMAX/12/,HNTSIZ/20/, XC 2 MAXOBJ/150/,MAXLOC/300/,HNTMIN/7/,PTBSIZ/300/,ADJSIZ/50/, XC 3 VKYSIZ/60/,BLKLIN/.TRUE./,DWFMAX/6/,ISWIZ/.FALSE./ X LINSIZ = 25000 X TRVSIZ = 1600 X TABSIZ = 600 X LOCSIZ = 250 X VRBSIZ = 60 X RTXSIZ = 450 X CLSMAX = 12 X HNTSIZ = 20 X MAXOBJ = 150 X MAXLOC = 300 X HNTMIN = 7 X PTBSIZ = 300 X ADJSIZ = 50 X VKYSIZ = 60 X BLKLIN = .TRUE. X DWFMAX = 6 X ISWIZ = .FALSE. X X ZCLYD = ICHAR('c')+256*(ICHAR('L')+ 256*(ICHAR('y') X 1 +256*ICHAR('D'))) X ALLSPACE = 32+256*(32+256*(32+256*32)) X DO 1001 I=1,MAXLOC X IF(I.LE.MAXOBJ)PTEXT(I)=0 X IF(I.LE.RTXSIZ)RTEXT(I)=0 X IF(I.LE.CLSMAX)CTEXT(I)=0 X IF(I.GT.LOCSIZ)GOTO 1001 X STEXT(I)=0 X LTEXT(I)=0 X LOCCON(I)=0 X1001 CONTINUE X DO 1278 I=1,MAXOBJ X POINTS(I)=0 X1278 OBJCON(I)=0 X OPEN (UNIT=2,FILE='ADVDAT',STATUS='OLD') X DO 1279 I=1,250 X KEY(I) = 0 X1279 CONTINUE X DO 1280 I = 1,50 X1280 ADJKEY(I) = 0 X DO 1281 I=1,150 X WEIGHT(I) = 0 X PLAC(I) = 0 X FIXD(I) = 0 X1281 ADJTAB(I) = 0 X LINUSE=1 X TRVS=1 X PTBS=1 X ATBS=1 X CLSSES=1 X X XC START NEW DATA SECTION. SECT IS THE SECTION NUMBER. X X1002 READ(2,1003)SECT X1003 FORMAT(I8) X WRITE(*,1015)SECT X1015 FORMAT (' READING TABLE ',I2,'...') X OLDLOC=-1 X GOTO(1190,1004,1004,1040,1030,1004,1004,1050,1060,1070,1004, X 1 1080,0999,0999,1100,1120,1140),(SECT+1) XC (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) (10) XC (11) (12) (13) (14) (15) (16) X999 CALL BUG(9) X XC SECTIONS 1, 2, 5, 6, 10 READ MESSAGES AND SET UP POINTERS. X X1004 JL1=LINUSE+1 X JL2=LINUSE+18 X X READ(2,1005)LOC,(LINES(J12),J12=JL1,JL2),KK X1005 FORMAT(I8,19A4) X IF(KK.EQ.ALLSPACE)GOTO 1017 X PRINT 1016,LOC X1016 FORMAT (1X,'LINE FOR LOCN ',I4,' TOO LONG.') X CALL BUG(0) X X1017 IF(LOC.EQ.-1)GOTO 1002 X DO 1006 K=1,18 X JKK=LINUSE+19-K X IF(LINES(JKK).NE.ALLSPACE)GOTO 1007 X1006 CONTINUE X IF(LOC.EQ.0)GOTO 1004 XC ABOVE KLUGE IS TO AVOID F40 BUG IF CRLF BROKEN ACROSS RECORD BOUNDARY X CALL BUG(1) X X1007 JL1=LINUSE+1 X DO 1008 JK1=JL1,JKK X1008 LINES(JK1)=IEOR(LINES(JK1),ZCLYD) X LINES(LINUSE)=JKK+1 X IF(LOC.EQ.OLDLOC)GOTO 1020 X IF(LOC.GT.OLDLOC.OR.SECT.EQ.5)GOTO 1019 X PRINT 1018,LOC,SECT X1018 FORMAT (/' LINE ',I3,' OUT OF ORDER IN SECTION ',I2) X CALL BUG(10) X X1019 LINES(LINUSE)=-LINES(LINUSE) X IF(SECT.EQ.10)GOTO 1012 X IF(SECT.EQ.6)GOTO 1011 X IF(SECT.EQ.5)GOTO 1010 X IF(SECT.EQ.1)GOTO 1009 X X STEXT(LOC)=LINUSE X GOTO 1020 X X1009 LTEXT(LOC)=LINUSE X GOTO 1020 X X1010 IF(LOC.GT.0.AND.LOC.LE.MAXOBJ)PTEXT(LOC)=LINUSE X GOTO 1020 X X1011 IF(LOC.GT.RTXSIZ)CALL BUG(6) X RTEXT(LOC)=LINUSE X GOTO 1020 X X1012 CTEXT(CLSSES)=LINUSE X CVAL(CLSSES)=LOC X CLSSES=CLSSES+1 X GOTO 1020 X X X1020 LINUSE=JKK+1 X LINES(LINUSE)=-1 X OLDLOC=LOC X IF(LINUSE+18.GT.LINSIZ)CALL BUG(2) X GOTO 1004 X XC THE STUFF FOR SECTION 4 IS ENCODED HERE. EACH "FROM-LOCATION" GETS A XC CONTIGUOUS SECTION OF THE "TRAVEL" ARRAY. EACH ENTRY IN TRAVEL IS XC NEWLOC*1000 + KEYWORD (FROM SECTION 3, MOTION VERBS), AND IS NEGATED IF XC THIS IS THE LAST ENTRY FOR THIS LOCATION. KEY(N) IS THE INDEX IN TRAVEL XC OF THE FIRST OPTION AT LOCATION N. X X1030 READ(2,1031)LOC,JNEW,(DTK(I),I=1,8) X1031 FORMAT(2I8,8(A6,2X)) X IF(LOC.EQ.0)GOTO 1030 XC ABOVE KLUGE IS TO AVOID AFOREMENTIONED F40 BUG X IF(LOC.EQ.-1)GOTO 1002 X IF(LOC.GE.OLDLOC)GOTO 1032 X PRINT 1018,LOC,SECT X CALL BUG(10) X X1032 IF(KEY(LOC).NE.0)GOTO 1033 X KEY(LOC)=TRVS X GOTO 1035 X X1033 TRAVEL(TRVS-1)=-TRAVEL(TRVS-1) X1035 DO 1037 L=1,8 X IF(DTK(L).EQ.' ')GOTO 1039 X K=VOCABX(DTK(L),-1) X TRAVEL(TRVS)=JNEW*1000+K X TRVS=TRVS+1 X IF(TRVS.EQ.TRVSIZ)CALL BUG(3) X1037 CONTINUE X1039 TRAVEL(TRVS-1)=-TRAVEL(TRVS-1) X GOTO 1030 X XC HERE WE READ IN THE VOCABULARY. KTAB(N) IS THE WORD NUMBER, ATAB(N) IS XC THE CORRESPONDING WORD. THE -1 AT THE END OF SECTION 3 IS LEFT IN KTAB XC AS AN END-MARKER. THE WORDS ARE GIVEN A MINIMAL HASH TO MAKE READING THE XC CORE-IMAGE HARDER. X X1040 DO 1042 TABNDX=1,TABSIZ X1043 READ(2,1041)KTAB(TABNDX),ATAB(TABNDX) X1041 FORMAT(I8,A6) XC IF(KTAB(TABNDX).EQ.0)GOTO 1043 XC ABOVE KLUGE IS TO AVOID AFOREMENTIONED F40 BUG X IF(KTAB(TABNDX).EQ.-1)GOTO 1002 X1042 CONTINUE X CALL BUG(4) X XC READ IN THE INITIAL LOCATIONS FOR EACH OBJECT. ALSO THE IMMOVABILITY INFO. XC PLAC CONTAINS INITIAL LOCATIONS OF OBJECTS. FIXD IS -1 FOR IMMOVABLE XC OBJECTS (INCLUDING THE SNAKE), OR = SECOND LOC FOR TWO-PLACED OBJECTS. XC WEIGHT CONTAINS THE HEAVINESS OF EACH OBJ, ON A SCALE OF 1-10. X X1050 READ(2,1052) OBJ,J,K,KK,DL,DLL,(TK(I),I=1,3) X1052 FORMAT(4I8,2(A6,2X),3I8) X IF(OBJ.EQ.-1)GOTO 1002 X IF(OBJ.LE.0.OR.OBJ.GT.MAXOBJ)CALL BUG(17) X PLAC(OBJ)=J X FIXD(OBJ)=K X WEIGHT(OBJ)=KK XC READ DEFAULT OBJECT NAMES. FOR USE IN 'TAKE ALL' COMMANDS. XC READ POINT VALUES FOR TREASURES. X K=1 X IF(TK(3).LT.0)K=-1 X POINTS(OBJ)= (TK(1)*1000000*K) + (TK(2)*1000*K) + TK(3) X GOTO 1050 X XC READ DEFAULT MESSAGE NUMBERS FOR ACTION VERBS, STORE IN ACTSPK. X X1060 READ(2,1061)VERB,J X1061 FORMAT(10I8) X IF(VERB.EQ.-1)GOTO 1002 X ACTSPK(VERB)=J X GOTO 1060 X XC READ INFO ABOUT AVAILABLE LIQUIDS AND OTHER CONDITIONS, STORE IN COND. X X1070 READ(2,1061)K,(TK(I),I=1,9) X IF(K.EQ.-1)GOTO 1002 X DO 1071 I=1,9 X LOC=TK(I) X IF(LOC.EQ.0)GOTO 1070 X IF(K.GT.7)GOTO 1072 X IF(BITSET(LOCCON(LOC),K))CALL BUG(8) X LOCCON(LOC)=LOCCON(LOC)+BITS(K) X GOTO 1071 X1072 LOCCON(LOC)=IOR(LOCCON(LOC),(256*(K-7))) X1071 CONTINUE X GOTO 1070 X XC READ DATA FOR HINTS. X X1080 HNTMAX=0 X1081 READ(2,1061)K,(TK(I),I=1,9) X IF(K.EQ.-1)GOTO 1002 X IF(K.EQ.0)GOTO 1081 X IF(K.LT.0.OR.K.GT.HNTSIZ)CALL BUG(7) X DO 1083 I=1,4 X1083 HINTS(K,I)=TK(I) X HNTMAX=MAX0(HNTMAX,K) X GOTO 1081 X XC SECTION 14 IS THE PREPOSITION TABLE. X1100 READ(2,1101)DK,DKK,(DTK(I),I=1,8) X1101 FORMAT(10(A6,2X)) XC IF(DK.EQ.0)GOTO 1100 XC ABOVE KLUGE IS TO AVOID AFOREMENTIONED F40 BUG X IF(DK.EQ.'-1 ')GOTO 1002 X VERB=VAL(VOCABX(DK,-4)) X DJJ=DK X IF(VERB.EQ.-1)GOTO 7645 X PREP=VAL(VOCABX(DKK,-6)) X DJJ=DKK X IF(PREP.EQ.-1)GOTO 7645 X X IF(VKEY(VERB).NE.0)GOTO 1104 X VKEY(VERB)=PTBS X GOTO 1105 X X7645 PRINT 1107,DJJ X CALL BUG(14) X GOTO 1100 X X X1104 PTAB(PTBS-1)=-PTAB(PTBS-1) X1105 DO 1110 L=1,8 X IF(DTK(L).EQ.' ')GOTO 1111 X K=VAL(VOCABX(DTK(L),-3)) X IF(K.NE.-1)GOTO 1108 X K=999 X IF(L.EQ.1.AND.DTK(1).EQ.'ANY ')GOTO 1108 X DJJ=DTK(L) X1106 PRINT 1107,DJJ X1107 FORMAT(/' UNRECOGNIZED WORD "',A6,'" IN PREP/OBJ TABLE.') X CALL BUG(14) X X1108 PTAB(PTBS)=PREP*1000+K X PTBS=PTBS+1 X IF(PTBS.EQ.PTBSIZ)CALL BUG(15) X1110 CONTINUE X1111 PTAB(PTBS-1)=-PTAB(PTBS-1) X GOTO 1100 X XC READ CONDITION BITS FOR OBJECTS. KK IS THE BIT; TK(I), THE OBJ LIST. X X1120 READ(2,1061)IKK,(TK(I),I=1,9) X IF(IKK.EQ.-1)GOTO 1002 X DO 1125 I=1,9 X OBJ=TK(I) X IF(OBJ.EQ.0)GOTO 1120 X IF(OBJ.LE.0.OR.OBJ.GT.MAXOBJ)CALL BUG(17) X IF(.NOT.BITSET(OBJCON(OBJ),IKK))GOTO 1125 X WRITE(6,101)OBJ,IKK X101 FORMAT('BIT SET TWICE OBJ=',I5,' BIT= ',I5) X CALL BUG(16) X1125 OBJCON(OBJ)=IOR(OBJCON(OBJ),BITS(IKK)) X GOTO 1120 X XC SECTION 17 IS THE ADJECTIVE TABLE. X1140 CONTINUE X READ(2,1141)DK,(DTK(I),I=1,9) X1141 FORMAT(10(A6,2X)) XC IF(DK.EQ.0)GOTO 1140 XC ABOVE KLUGE IS TO AVOID AFOREMENTIONED F40 BUG X IF(DK.EQ.'-1 ')GOTO 1002 X ADJ=VOCABX(DK,-7) X DJJ=DK X IF(ADJ.EQ.-1.OR.CLASS(ADJ).NE.6)GOTO 1148 X ADJ=VAL(ADJ) X IF(ADJKEY(ADJ).NE.0)GOTO 1142 X ADJKEY(ADJ)=ATBS X GOTO 1143 X X1142 ADJTAB(ATBS-1)=-ADJTAB(ATBS-1) X1143 DO 1145 L=1,9 X IF(DTK(L).EQ.' ')GOTO 1146 X DJJ=DTK(L) X K=VOCABX(DTK(L),-3) X IF(K.EQ.-1.OR.CLASS(K).NE.2)GOTO 1148 X ADJTAB(ATBS)=VAL(K) X ATBS=ATBS+1 X IF(ATBS.EQ.MAXOBJ)CALL BUG(18) X1145 CONTINUE X1146 ADJTAB(ATBS-1)=-ADJTAB(ATBS-1) X GOTO 1140 X X1148 PRINT 1149,DJJ X1149 FORMAT(/' UNRECOGNIZED WORD "',A6,'" IN ADJECTIVE TABLE.') X CALL BUG(13) X X XC EVERYTHING IS READ! NOW FINISH CONSTRUCTING INTERNAL DATA FORMAT. XC DEFINE SOME HANDY MNEMONICS. THESE CORRESPOND TO OBJECT NUMBERS. XC (INCLUDES TREASURES.) X X1190 CLOSE(UNIT=2) X ANVIL=VOCABX('ANVIL ',2) X AXE=VOCABX('AXE ',2) X BATTER=VOCABX('BATTER',2) X BEAR=VOCABX('BEAR ',2) X BEES=VOCABX('BEES ',2) X BILLBD=VOCABX('BILLBO',2) X BIRD=VOCABX('BIRD ',2) X BOAT=VOCABX('BOAT ',2) X BOOK=VOCABX('BOOK ',2) X BOOK2=BOOK+1 X BOOTH=VOCABX('BOOTH ',2) X BOTTLE=VOCABX('BOTTLE',2) X BRUSH=VOCABX('BRUSH ',2) X CAGE=VOCABX('CAGE ',2) X CAKES=VOCABX('CAKES ',2) X CARVNG=VOCABX('CARVIN',2) X CASK=VOCABX('CASK ',2) X CHAIN=VOCABX('CHAIN ',2) X CHASM=VOCABX('CHASM ',2) X CHASM2=CHASM+1 X CHEST=VOCABX('CHEST ',2) X CLAM=VOCABX('CLAM ',2) X CLOAK=VOCABX('CLOAK ',2) X COINS=VOCABX('COINS ',2) X CROWN=VOCABX('CROWN ',2) X DOG=VOCABX('DOG ',2) X DOOR=VOCABX('DOOR ',2) X DRAGON=VOCABX('DRAGON',2) X DWARF=VOCABX('DWARF ',2) X EGGS=VOCABX('EGGS ',2) X EMRALD=VOCABX('EMERAL',2) X FISSUR=VOCABX('FISSUR',2) X FLOWER=VOCABX('FLOWER',2) X FOOD=VOCABX('FOOD ',2) X GNOME=VOCABX('GNOME ',2) X GRAIL=VOCABX('GRAIL ',2) X GRATE=VOCABX('GRATE ',2) X HIVE=VOCABX('HIVE ',2) X HONEY=VOCABX('HONEY ',2) X HORN=VOCABX('HORN ',2) X JEWELS=VOCABX('JEWELS',2) X KEYS=VOCABX('KEYS ',2) X KNIFE=VOCABX('KNIFE ',2) X LAMP=VOCABX('LAMP ',2) X LYRE=VOCABX('LYRE ',2) X MAGZIN=VOCABX('MAGAZI',2) X MESSAG=VOCABX('MESSAG',2) X MIRROR=VOCABX('MIRROR',2) X MUSHRM=VOCABX('MUSHRO',2) X NUGGET=VOCABX('NUGGET',2) X OIL=VOCABX('OIL ',2) XC OIL2=OIL+1 X OYSTER=VOCABX('OYSTER',2) X PEARL=VOCABX('PEARL ',2) X PHONE=VOCABX('PHONE ',2) X PILLOW=VOCABX('PILLOW',2) X PLANT=VOCABX('PLANT ',2) X PLANT2=PLANT+1 X POLE=VOCABX('POLE ',2) X POSTER=VOCABX('POSTER',2) X PYRAM=VOCABX('PYRAMI',2) X RADIUM=VOCABX('RADIUM',2) X RING=VOCABX('RING ',2) X ROCKS=VOCABX('ROCKS ',2) X ROD= VOCABX('ROD ',2) X ROD2=ROD+1 X RUG=VOCABX('RUG ',2) X SAFE=VOCABX('SAFE ',2) X SAPPHI=VOCABX('SAPPHI',2) X SHIELD=VOCABX('TUBE ',2) X SHOES=VOCABX('SHOES ',2) X SKEY=VOCABX('KEY ',2) X SLUGS=VOCABX('SLUGS ',2) X SNAKE=VOCABX('SNAKE ',2) X SPICES=VOCABX('SPICES',2) X SPHERE=VOCABX('SPHERE',2) X STEPS=VOCABX('STEPS ',2) X STICKS=VOCABX('STICKS',2) X SWORD=VOCABX('SWORD ',2) X TABLET=VOCABX('TABLET',2) X TDOOR=DOOR+1 X TDOOR2=TDOOR+1 X PDOOR=TDOOR2+1 X TRIDNT=VOCABX('TRIDEN',2) X TROLL=VOCABX('TROLL ',2) X TROLL2=TROLL+1 X VASE=VOCABX('VASE ',2) X VEND=VOCABX('MACHIN',2) X WALL=VOCABX('WALL ',2) X WALL2=WALL+1 X WATER=VOCABX('WATER ',2) XC WATER2=WATER+1 X WINE=VOCABX('WINE ',2) XC WINE2=WINE+1 X WUMPUS=VOCABX('WUMPUS',2) X XC THESE ARE MOTION-VERB NUMBERS. X X BACK=VOCABX('BACK ',1) X CAVE=VOCABX('CAVE ',1) X DPRSSN=VOCABX('DEPRES',1) X ENTRNC=VOCABX('ENTRAN',1) X EXIT=VOCABX('EXIT ',1) X NULL=VOCABX('NULL ',1) X XC AND SOME ACTION VERBS. X X FIND=VOCABX('FIND ',3) X GO=VOCABX('GO ',3) X HIT=VOCABX('HIT ',3) X LOOK=VOCABX('LOOK ',3) X YELL=VOCABX('CALL ',3) X INVENT=VOCABX('INVENT',3) X LEAVE=VOCABX('LEAVE ',3) X LOCK=VOCABX('LOCK ',3) X SAY=VOCABX('SAY ',3) X SHUT=VOCABX('CLOSE ',3) X TAKE=VOCABX('TAKE ',3) X THROW=VOCABX('THROW ',3) X UNLOCK=VOCABX('UNLOCK',3) X WEAR=VOCABX('WEAR ',3) X YANK=VOCABX('YANK ',3) X XC AND A FEW PREPOSITIONS. PREFIX 'PREP' TO DISTINGUISH THEM FROM FUNCTIONS & R X X PREPAT=VOCABX('AT ',5) X PREPDN=VOCABX('DOWN ',5) X PREPFR=VOCABX('FROM ',5) X PREPIN=VOCABX('IN ',5) X PREPOF=VOCABX('OFF ',5) X PREPON=VOCABX('ON ',5) X XC A POPULAR LOCATION IS: X X Y2=33 X1200 CONTINUE X XC HAVING READ IN THE DATABASE, CERTAIN THINGS ARE NOW CONSTRUCTED. PROPS ARE XC SET TO ZERO. WE FINISH SETTING UP COND BY CHECKING FOR FORCED-MOTION TRAVEL XC ENTRIES. THE PLAC AND FIXD ARRAYS ARE USED TO SET UP ATLOC(N) AS THE FIRST XC OBJECT AT LOCATION N, AND LINK(OBJ) AS THE NEXT OBJECT AT THE SAME LOCATION XC AS OBJ. (OBJ>MAXOBJ INDICATES THAT FIXED(OBJ-MAXOBJ)=LOC; LINK(OBJ) IS STILL XC THE CORRECT LINK TO USE.) ABB IS ZEROED; IT CONTROLS WHETHER THE ABBREVIATED XC DESCRIPTION IS PRINTED. COUNTS MOD 5 UNLESS "LOOK" IS USED. X X LOC = 1 X DO 1201 I=1,MAXOBJ X PLACE(I)=0 X PROP(I)=0 X HOLDER(I)=0 X HLINK(I)=0 X LINK(I)=0 X1201 LINK(I+MAXOBJ)=0 X X DO 1202 I=1,LOCSIZ X ABB(I)=0 X IF(LTEXT(I).EQ.0.OR.KEY(I).EQ.0)GOTO 1202 X K=KEY(I) X IF(MOD(IABS(TRAVEL(K)),0001000).EQ.1)LOCCON(I)=2 X1202 ATLOC(I)=0 X XC SET UP THE ATLOC AND LINK ARRAYS AS DESCRIBED ABOVE. WE'LL USE THE DROP XC SUBROUTINE, WHICH PREFACES NEW OBJECTS ON THE LISTS. SINCE WE WANT THINGS XC IN THE OTHER ORDER, WE'LL RUN THE LOOP BACKWARDS. IF THE OBJECT IS IN TWO XC LOCS, WE DROP IT TWICE. THIS ALSO SETS UP "PLACE" AND "FIXED" AS COPIES OF XC "PLAC" AND "FIXD". ALSO, SINCE TWO-PLACED OBJECTS ARE TYPICALLY BEST XC DESCRIBED LAST, WE'LL DROP THEM FIRST. X X DO 1206 I=1,MAXOBJ X K=MAXOBJ+1-I X IF(FIXD(K).LE.0)GOTO 1206 X CALL DROP(K+MAXOBJ,FIXD(K)) X CALL DROP(K,PLAC(K)) X1206 CONTINUE X X DO 1207 I=1,MAXOBJ X K=MAXOBJ+1-I X FIXED(K)=FIXD(K) X1207 IF(PLAC(K).NE.0.AND.FIXD(K).LE.0)CALL DROP(K,PLAC(K)) X XC MAKE SURE ALL THE RIGHT THINGS GET CLOSED AND LOCKED, ETC., BEFORE XC WE GET STARTED. X X XC TREASURES, AS NOTED EARLIER, ARE OBJECTS WITH BITSET(14) IN OBJCON. XC THEIR PROPS ARE INITIALLY -1, AND ARE SET TO 0 THE FIRST TIME THEY ARE XC DESCRIBED. TALLY KEEPS TRACK OF HOW MANY ARE NOT YET FOUND, SO WE KNOW XC WHEN TO CLOSE THE CAVE. TALLY2 COUNTS HOW MANY CAN NEVER BE FOUND (E.G. IF XC LOST BIRD OR BRIDGE). X X TALLY=0 X TALLY2=0 X DO 1240 I=1,MAXOBJ X IF(.NOT.TREASR(I))GOTO 1240 X IF(PTEXT(I).NE.0)PROP(I)=-1 X1240 TALLY=TALLY-PROP(I) X X XC CLEAR THE HINT STUFF. HINTLC(I) IS HOW LONG HE'S BEEN AT LOC WITH COND BIT XC I. HINTED(I) IS TRUE IFF HINT I HAS BEEN USED. X X DO 1300 I=1,HNTMAX X HINTED(I)=.FALSE. X1300 HINTLC(I)=0 X XC INITIALISE THE DWARVES. DLOC IS LOC OF DWARVES, HARD-WIRED IN. ODLOC IS XC PRIOR LOC OF EACH DWARF, INITIALLY GARBAGE. DALTLC IS ALTERNATE INITIAL LOC XC FOR DWARF, IN CASE ONE OF THEM STARTS OUT ON TOP OF THE ADVENTURER. (NO 2 XC OF THE 5 INITIAL LOCS ARE ADJACENT.) DSEEN IS TRUE IF DWARF HAS SEEN HIM. XC DFLAG CONTROLS THE LEVEL OF ACTIVATION OF ALL THIS: XC 0 NO DWARF STUFF YET (WAIT UNTIL REACHES HALL OF MISTS) XC 1 REACHED HALL OF MISTS, BUT HASN'T MET FIRST DWARF XC 2 MET FIRST DWARF, OTHERS START MOVING, NO KNIVES THROWN YET XC 3 A KNIFE HAS BEEN THROWN (FIRST SET ALWAYS MISSES) XC 3+ DWARVES ARE MAD (INCREASES THEIR ACCURACY) XC SIXTH DWARF IS SPECIAL (THE PIRATE). HE ALWAYS STARTS AT HIS CHEST'S XC EVENTUAL LOCATION INSIDE THE MAZE. THIS LOC IS SAVED IN CHLOC FOR REF. XC THE DEAD END IN THE OTHER MAZE HAS ITS LOC STORED IN CHLOC2. X X CHLOC=114 X CHLOC2=140 X DO 1700 I=1,DWFMAX X1700 DSEEN(I)=.FALSE. X DFLAG=0 X DLOC(1)=PLAC(SNAKE) X DLOC(2)=PLAC(BOOTH) X DLOC(3)=Y2 X DLOC(4)=44 X DLOC(5)=PLAC(CLAM) XC DLOC(6)=PLAC(VEND) X DLOC(DWFMAX)=CHLOC X DALTLC=PLAC(NUGGET) X XC OTHER RANDOM FLAGS AND COUNTERS, AS FOLLOWS: XC ABBNUM HOW OFTEN WE SHOULD PRINT NON-ABBREVIATED DESCRIPTIONS XC BCROSS NUMBER OF TIMES COLLAPSING BRIDGE HAS BEEN TRAVERSED. XC BONUS USED TO DETERMINE AMOUNT OF BONUS IF HE REACHES CLOSING XC CHASE TELLS HOW CLOSE THE WUMPUS IS TO GOBBLING HIM UP XC CLOCK1 NUMBER OF TURNS FROM FINDING LAST TREASURE TILL CLOSING XC CLOCK2 NUMBER OF TURNS FROM FIRST WARNING TILL BLINDING FLASH XC CLOCK3 NUMBER OF TURNS IN REPOSITORY TILL PHONE RINGS. XC AFTER TICKING TO 0, TICKS 7 TIMES TO WAKE DWARVES. XC COMBO CURRENT PROGRESS IN GIVING SAFE'S COMBINATION XC DETAIL HOW OFTEN WE'VE SAID "NOT ALLOWED TO GIVE MORE DETAIL" XC DKILL NUMBER OF DWARVES KILLED (UNUSED IN SCORING, NEEDED FOR MSG) XC FOOBAR CURRENT PROGRESS IN SAYING "FEE FIE FOE FOO". XC HEALTH PERCENTAGE OF MAXIMUM (100) FITNESS XC IWEST HOW MANY TIMES HE'S SAID "WEST" INSTEAD OF "W" XC KNFLOC 0 IF NO KNIFE HERE, LOC IF KNIFE HERE, -1 AFTER CAVEAT XC LIMIT LIFETIME OF LAMP (NOT SET HERE) XC MAXDIE NUMBER OF REINCARNATION MESSAGES AVAILABLE (UP TO 5) XC NUMDIE NUMBER OF TIMES KILLED SO FAR XC TERSE IF TRUE, NEVER PRINT LONG LOCATION DESCRIPTIONS XC TURNS TALLIES HOW MANY COMMANDS HE'S GIVEN (IGNORES YES/NO) XC WASTE TELLS HOW LONG HE HAS USED LAMP IN LIGHTED AREA. X XC LOGICALS WERE EXPLAINED EARLIER X X ABBNUM=5 X BCROSS=0 X BONUS=0 X CLOCK1=30 X CLOCK2=50 X CLOCK3=20+RANZ(20) X CHASE=0 X CLOSED=.FALSE. X CLOSNG=.FALSE. X COMBO=0 X DETAIL=0 X DKILL=0 X FOOBAR=0 X GAVEUP=.FALSE. X HEALTH=100 X IWEST=0 X KNFLOC=0 X LMWARN=.FALSE. X DO 1800 I=0,4 X1800 IF(RTEXT(2*I+81).NE.0)MAXDIE=I+1 X NUMDIE=0 X PANIC=.FALSE. X SCORNG=.FALSE. X TERSE=.FALSE. X TURNS=0 X WASTE=0 X XC SETUP THE LIQUIDS ACCORDING TO CONTAINER PROP VALUES X LIQTYP(1)=WATER X LIQTYP(2)=0 X LIQTYP(3)=OIL X LIQTYP(4)=0 X LIQTYP(5)=WINE X X PROP(POLE)=1 X PROP(SKEY)=1 X PLACE(WATER)=-1 X CALL INSERT(WATER,BOTTLE) X PLACE(BOOK)=-1 X CALL INSERT(BOOK,SAFE) X XC AND CLEAR OUT ANY LEFTOVER WORD VECTORS... X CALL CLRLIN X DO 1810 WDX=1,35 X1810 WORDS(WDX)=0 X WDX=0 X XC IF SETUP=1, REPORT ON AMOUNT OF ARRAYS ACTUALLY USED, TO PERMIT REDUCTIONS. X X X JJ=0 X DO 1989 K=1,VKYSIZ X1989 IF(VKEY(K).NE.0)JJ=JJ+1 X X DO 1998 K=1,LOCSIZ X KK=LOCSIZ+1-K X IF(LTEXT(KK).NE.0)GOTO 1997 X1998 CONTINUE X X1997 LL=0 X OBJ=0 X DO 1996 K=1,MAXOBJ X IF(TREASR(K))LL=LL+1 X1996 IF(PTEXT(K).NE.0)OBJ=OBJ+1 X X DO 1995 K=1,TABNDX X1995 IF(KTAB(K)/1000.EQ.2)VERB=KTAB(K)-2000 X X DO 1994 K=1,RTXSIZ X J=RTXSIZ+1-K X IF(RTEXT(J).NE.0)GOTO 1993 X1994 CONTINUE X X1993 CONTINUE X1992 CONTINUE X X X1991 CALL RATING(SCORE,0,.FALSE.,.FALSE.,.FALSE.,.FALSE., X 1 HNTMAX) X K=MAXOBJ X PRINT 1999,LINUSE,LINSIZ,TRVS,TRVSIZ,TABNDX,TABSIZ,KK, X 1 LOCSIZ,OBJ,K,LL,VERB,VRBSIZ,J,RTXSIZ,CLSSES,CLSMAX, X 2 HNTMAX,HNTSIZ,PTBS,PTBSIZ,JJ,VERB, X 3 MXSCOR X1999 FORMAT (' TABLE SPACE USED:'/ X 1 ' ',I6,' OF ',I6,' WORDS OF MESSAGES'/ X 2 ' ',I6,' OF ',I6,' TRAVEL OPTIONS'/ X 3 ' ',I6,' OF ',I6,' VOCABULARY WORDS'/ X 4 ' ',I6,' OF ',I6,' LOCATIONS'/ X 5 ' ',I6,' OF ',I6,' OBJECTS OF WHICH ',I2,' ARE TREASURES.'/ X 6 ' ',I6,' OF ',I6,' ACTION VERBS'/ X 7 ' ',I6,' OF ',I6,' RTEXT MESSAGES'/ X 8 ' ',I6,' OF ',I6,' CLASS MESSAGES'/ X 9 ' ',I6,' OF ',I6,' HINTS'/ X 2 ' ',I6,' OF ',I6,' VERB/PREP/OBJ OPTIONS'/ X 3 ' ',I6,' OF ',I6,' VERBS TAKE PREPOSITIONS'/ X 4 /' MAXIMUM SCORE FOR THIS VERSION IS ',I4,' POINTS.'/ X 5 ) X8445 OPEN (UNIT=16,FILE='ADVTXT',STATUS='UNKNOWN',FORM= X 1 'UNFORMATTED',ACCESS='SEQUENTIAL') X WRITE(16)ISWIZ,ADJKEY,ADJTAB,ADJSIZ,OPENBT,LOCKBT,BURNBT,WEARBT X WRITE(16)BLKLIN,LOCCON,OBJCON,NUMDIE,MAXDIE,TURNS,KILLED X WRITE(16)DWARF,KNIFE,KNFLOC,DFLAG,DSEEN,DLOC,ODLOC,DWFMAX X WRITE(16)HOLDER,HLINK,HINTLC,HINTED,HINTS,HNTSIZ,HNTMIN X WRITE(16)BOTTLE,CASK,WATER,OIL,WINE,LIQTYP X WRITE(16)LOC,OLDLOC,OLDLC2,NEWLOC,MAXLOC X WRITE(16) LTEXT,STEXT,KEY,ABB,LOCSIZ X WRITE(16) BACK,CAVE,DPRSSN,ENTRNC,EXIT,GO,LOOK,NULL, X 1 AXE,BEAR,BOAT,BOOK,BOOK2,BOOTH,CARVNG,CHASM,CHASM2,DOOR,GNOME, X 2 GRATE,LAMP,PDOOR,PLANT,PLANT2,ROCKS,ROD,ROD2,SAFE, X 3 TDOOR,TDOOR2,TROLL,TROLL2,EMRALD,SPICES, X 4 FIND,YELL,INVENT,LEAVE,POUR,SAY,TAKE,THROW, X 5 IWEST,PHUCE,TK X X WRITE(16)PLAC,FIXD,WEIGHT,PROP,POINTS X WRITE(16) ATLOC,LINK,PLACE, X 1 FIXED,MAXOBJ X WRITE(16) VKEY,PTAB,VKYSIZ,PTBSIZ,TRAVEL X WRITE(16)LINES,RTEXT,PTEXT,WDX,KTAB,TABSIZ X WRITE(16) VERBS,VRBX,OBJS, X 1 OBJX,IOBJS,IOBX,PREP,WORDS X X WRITE(16)ABBNUM,ADJ,ATBS,ATTACK,BCROSS,BONUS,CHASE, X 1 CLOCK1,CLOCK2,CLOCK3,CLOSED,CLOSNG,CLSMAX,COMBO,DEADBT, X 2 DETAIL,DKILL,DTOTAL,DWARFN,FLG239, X 3 FOO,FOOBAR,FOOD,GAVEUP,HEALTH,HINT,HIT,HNTMAX,I,IKK,ILOC, X 4 IOBJ,J,JJ,JK1,JKK,K,K1,KK,L,L1,LIMIT, X 5 LINSIZ,LL,LMWARN,LOCK,LOGOUT,MESSAG,OBJ,PANIC, X 6 PORTAL,PTBS,RDFLAG,RETN,RTXSIZ,SCORE,SCORNG,SECT, X 7 SKEY,SLOC,SPK,START,STICK,TABNDX,TALLY,TALLY2,TERSE, X 8 TRVS,TRVSIZ,VEND,VERB,VRBSIZ,WASTE,WKDAY,WKEND,WZDARK, X 9 YEA,ACTSPK,CTEXT,CVAL,HNAME X WRITE(16)ANVIL,BATTER,BEES,BILLBD,BIRD,BRUSH,CAGE, X 1 CAKES,CHAIN,CHEST,CHLOC,CHLOC2,CLAM,CLOAK,CLSSES,COINS,CROWN, X 2 DALTLC,DOG,DRAGON,EGGS,FISSUR,FLOWER,GATLOC,GRAIL,HIVE, X 3 HONEY,HORN,JEWELS,KEYS,LYRE, X 4 MAGZIN,MIRROR,MUSHRM,MXSCOR,NUGGET,OYSTER,PEARL,PHONE, X 5 PILLOW,POLE,POSTER,PREPAT,PREPDN,PREPFR,PREPIN,PREPOF, X 6 PREPON,PYRAM,RADIUM,RING,RUG,SAPPHI,SHIELD,SHOES, X 7 SHUT,SLUGS,SNAKE,SPHERE,STEPS,STICKS,SWORD,TABLET,TRIDNT, X 8 UNLOCK,VASE,WALL,WALL2,WEAR,WUMPUS,Y2,YANK X WRITE(16)DTK,ATAB,VTXT,OTXT,IOTXT X 1 ,TXT X CLOSE(16) X X STOP X END END_OF_asetup.f if test 29694 -ne `wc -c iors.f <<'END_OF_iors.f' Xc this file is not needed for most modern Fortran compilers Xc it is for the f2c system or as a TEMPLATE for code if your Xc Fortran compiler lacks these functions X integer function ior(i,j) X implicit integer (a-z) X ior = i+j Xc change the '+' above to '|' in the c code Xc emitted by f2c X return X end X integer function iand(i,j) X implicit integer (a-z) X iand = i+j Xc change the '+' above to '&' in the c code Xc emitted by f2c X return X end X integer function ieor(i,j) X implicit integer (a-z) X ieor = i+j Xc change the '+' above to '^' in the c code Xc emitted by f2c X return X end X END_OF_iors.f if test 704 -ne `wc -c advdat <<'END_OF_advdat' X1 X1 You are standing at the end of a road before a small brick building. X1 Around you is a forest. A small stream flows out of the building and X1 down a gully. X2 You have walked up a hill, still in the forest. The road slopes back X2 down the other side of the hill. There is a building in the distance. X3 You are inside a building, a well house for a large spring. Off X3 to one side is a small pantry. X4 You are in a valley in the forest beside a stream tumbling along a X4 rocky bed. X5 You are in open forest, with a deep valley to one side. Not far X5 is a large billboard. X6 You are in open forest near both a valley and a road. X7 At your feet all the water of the stream splashes into a 2-inch slit X7 in the rock. Downstream the streambed is bare rock. X8 You are in a 20-foot depression floored with bare dirt. Set into the X8 dirt is a strong steel grate mounted in concrete. A dry streambed X8 leads into the depression. X9 You are in a small chamber beneath a 3x3 steel grate to the surface. X9 A low crawl over cobbles leads inward to the west. X10 You are crawling over cobbles in a low passage. There is a dim light X10 at the east end of the passage. X11 You are in a debris room filled with stuff washed in from the surface. X11 A low wide passage with cobbles becomes plugged with mud and debris X11 here, but an awkward canyon leads upward and west. A note on the wall X11 says "Magic Word XYZZY". X12 You are in an awkward sloping east/west canyon. X13 You are in a splendid chamber thirty feet high. The walls are frozen X13 rivers of orange stone. An awkward canyon and a good passage exit X13 from east and west sides of the chamber. X14 At your feet is a small pit breathing traces of white mist. An east X14 passage ends here except for a small crack leading on. X15 You are at one end of a vast hall stretching forward out of sight to X15 the west. There are openings to either side. Nearby, a wide stone X15 staircase leads downward. The hall is filled with wisps of white mist X15 swaying to and fro almost as if alive. A cold wind blows up the X15 staircase. There is a passage at the top of a dome behind you. X16 The crack is far too small for you to follow. X17 You are on the east bank of a fissure slicing clear across the hall. X17 The mist is quite thick here, and the fissure is too wide to jump. X18 This is a low room with a crude note on the wall. The note says, X18 "You won't get it up the steps". X19 You are in the Hall of the Mountain King, with passages off in all X19 directions. X20 You are at the bottom of the pit with a broken neck. X21 You didn't make it. X22 The dome is unclimbable. X23 You are at the west end of the Twopit Room. There is a large hole in X23 the wall above the pit at this end of the room. X24 You are at the bottom of the eastern pit in the Twopit Room. There is X24 a small pool of oil in one corner of the pit. X25 You are at the bottom of the western pit in the Twopit Room. There is X25 a large hole in the wall about 25 feet above you. X26 You clamber up the plant and scurry through the hole at the top. X27 You are on the west side of the fissure in the Hall of Mists. X28 You are in a low N/S passage at a hole in the floor. The hole goes X28 down to an E/W passage. X29 You are in the South Side Chamber. X30 You are in the West Side Chamber of the Hall of the Mountain King. X30 A passage continues west and up here. X31 <$$< X32 You can't get by the snake. X33 You are in a large room, with a passage to the south, a passage to the X33 west, and a wall of broken rock to the east. There is a large "Y2" on X33 a rock in the room's center. X34 You are in a jumble of rock, with cracks everywhere. X35 You're at a low window overlooking a huge pit, which extends up out of X35 sight. A floor is indistinctly visible over 50 feet below. Traces of X35 white mist cover the floor of the pit, becoming thicker to the right. X35 Marks in the dust around the window would seem to indicate that X35 someone has been here recently. Directly across the pit from you and X35 25 feet away there is a similar window looking into a lighted room. A X35 shadowy figure can be seen there peering back at you. X36 You are in a dirty broken passage. To the east is a crawl. To the X36 west is a large passage. Above you is a hole to another passage. X37 You are on the brink of a small clean climbable pit. A crawl leads X37 west. X38 You are in the bottom of a small pit with a little stream, which X38 enters and exits through tiny slits. X39 You are in a large room full of dusty rocks. There is a big hole in X39 the floor. There are cracks everywhere, and a passage leading east. X40 You have crawled through a very low wide passage parallel to and north X40 of the Hall of Mists. X41 You are at the west end of Hall of Mists. A low wide crawl continues X41 west and another goes north. To the south is a little passage 6 feet X41 off the floor. X42 You are in a maze of twisty little passages, all alike. X43 You are in a maze of twisty little passages, all alike. X44 You are in a maze of twisty little passages, all alike. X45 You are in a maze of twisty little passages, all alike. X46 Dead end. X47 Dead end. X48 Dead end. X49 You are in a maze of twisty little passages, all alike. X50 You are in a maze of twisty little passages, all alike. X51 You are in a maze of twisty little passages, all alike. X52 You are in a maze of twisty little passages, all alike. X53 You are in a maze of twisty little passages, all alike. X54 Dead end. X55 You are in a maze of twisty little passages, all alike. X56 Dead end. X57 You are on the brink of a thirty foot pit with a massive orange column X57 down one wall. You could climb down here but you could not get back X57 up. The maze continues at this level. X58 Dead end. X59 You have crawled through a very low wide passage parallel to and north X59 of the Hall of Mists. X60 You are at the east end of a very long hall apparently without side X60 chambers. In the south wall are several wide cracks and a high X60 hole, but the hole is far above your head. To the east a wide X60 crawl slants up. To the north a round two foot hole slants down. X61 You are at the west end of a very long featureless hall. The hall X61 joins up with a narrow north/south passage. X62 You are at a crossover of a high N/S passage and a low E/W one. X63 Dead end. X64 You are at a complex junction. A low hands and knees passage from the X64 north joins a higher crawl from the east to make a walking passage X64 going west. There is also a large room above. The air is damp here. X65 You are in Bedquilt, a long east/west passage with holes everywhere. X65 To explore at random select north, south, up, or down. X66 You are in a room whose walls resemble swiss cheese. Obvious passages X66 go west, east, NE, and NW. Part of the room is occupied by a large X66 bedrock block. X67 You are at the east end of the Twopit Room. The floor here is X67 littered with thin rock slabs, which make it easy to descend the pits. X67 There is a path here bypassing the pits to connect passages from east X67 and west. There are holes all over, but the only big one is on the X67 wall directly over the west pit where you can't get to it. X68 You are in a large low circular chamber whose floor is an immense slab X68 fallen from the ceiling (Slab Room). East and west there once were X68 large passages, but they are now filled with boulders. Low small X68 passages go north and south, and the south one quickly bends west X68 around the boulders. X69 You are in a secret N/S canyon above a large room. X70 You are in a secret N/S canyon above a sizable passage. X71 You are in a secret canyon at a junction of three canyons, bearing X71 north, south, and SE. The north one is as tall as the other two X71 combined. X72 You are in a large low room. Crawls lead north, NE, and SW. X73 Dead end crawl. X74 You are in a secret canyon which here runs E/W. It crosses over a X74 very tight canyon 15 feet below. If you go down you may not be able X74 to get back up. X75 You are at a wide place in a very tight N/S canyon. X76 The canyon here becomes too tight to go further south. X77 You are in a tall E/W canyon. A low tight crawl goes 3 feet north and X77 seems to open up. X78 The canyon runs into a mass of boulders -- dead end. X79 The stream flows out through a pair of 1 foot diameter sewer pipes. X79 It would be advisable to use the exit. X80 You are in a maze of twisty little passages, all alike. X81 Dead end. X82 Dead end. X83 You are in a maze of twisty little passages, all alike. X84 You are in a maze of twisty little passages, all alike. X85 Dead end. X86 Dead end. X87 You are in a maze of twisty little passages, all alike. X88 You are in a long, narrow corridor stretching out of sight to the X88 west. At the eastern end is a hole through which you can see a X88 profusion of leaves. X89 There is nothing here to climb. Use "up" or "out" to leave the pit. X90 You have climbed up the plant and out of the pit. X91 You are at the top of a steep incline above a large room. You could X91 climb down here, but you would not be able to climb up. There is a X91 passage leading back to the north. X92 You are in the Giant Room. The ceiling here is too high up for your X92 lamp to show it. Cavernous passages lead east, north, and south. On X92 the west wall is scrawled the inscription, "FEE FIE FOE FOO" [sic]. X93 The passage here is blocked by a recent cave-in. X94 You are at one end of an immense north/south passage. X95 You are in a magnificent cavern with a rushing stream, which cascades X95 over a sparkling waterfall into a roaring whirlpool which disappears X95 through a hole in the floor. Passages exit to the south and west. X96 You are in the Soft Room. The walls are covered with heavy curtains, X96 the floor with a thick pile carpet. Moss covers the ceiling. X97 This is the Oriental Room. Ancient oriental cave drawings cover the X97 walls. A gently sloping passage leads upward to the north, another X97 passage leads SE, and a hands and knees crawl leads east. X98 You are following a wide path around the outer edge of a large cavern. X98 Far below, through a heavy white mist, strange splashing noises can be X98 heard. The mist rises up through a fissure in the ceiling. The path X98 hugs the cavern's rim to the NE and south, while another branch forks X98 west. A round chute with extremely smooth walls angles sharply up X98 to the southwest. X99 You are in an alcove. A small NW path seems to widen after a short X99 distance. An extremely tight tunnel leads east. It looks like a very X99 tight squeeze. An eerie light can be seen at the other end. X100 You're in a small chamber lit by an eerie green light. An extremely X100 narrow tunnel exits to the west, and a dark corridor leads NE. X101 You're in the Dark-Room. A corridor leading south is the only exit. X102 You are in an arched hall. A coral passage once continued up and east X102 from here, but is now blocked by debris. The air smells of sea water. X103 You're in a large room carved out of sedimentary rock. The floor and X103 walls are littered with bits of shells imbedded in the stone. A X103 shallow passage proceeds downward, and a somewhat steeper one leads X103 up. A low hands and knees passage enters from the south. X104 You are in a long sloping corridor with ragged sharp walls. X105 You are in a cul-de-sac about eight feet across. X106 You are in an anteroom leading to a large passage to the east. Small X106 passages go west and up. The remnants of recent digging are evident. X106 A sign in midair here says "Cave under construction beyond this point. X106 Proceed at own risk. [Witt Construction Company]". X107 You are in a maze of twisty little passages, all different. X108 You are at Witt's End. Passages lead off in *ALL* directions. X109 You are in a north/south canyon about 25 feet across. The floor is X109 covered by white mist seeping in from the north. The walls extend X109 upward for well over 100 feet. Suspended from some unseen point far X109 above you, an enormous two-sided mirror is hanging parallel to and X109 midway between the canyon walls. (The mirror is obviously provided X109 for the use of the dwarves, who as you know, are extremely vain.) A X109 small window can be seen in either wall, some fifty feet up. X110 You're at a low window overlooking a huge pit, which extends up out of X110 sight. A floor is indistinctly visible over 50 feet below. Traces of X110 white mist cover the floor of the pit, becoming thicker to the left. X110 Marks in the dust around the window would seem to indicate that X110 someone has been here recently. Directly across the pit from you and X110 25 feet away there is a similar window looking into a lighted room. A X110 shadowy figure can be seen there peering back at you. X111 A large stalactite extends from the roof and almost reaches the floor X111 below. You could climb down it, and jump from it to the floor, but X111 having done so you would be unable to reach it to climb back up. X112 You are in a little maze of twisting passages, all different. X113 You are at the edge of a large underground reservoir. An opaque cloud X113 of white mist fills the room and rises rapidly upward. The lake is X113 fed by a stream, which tumbles out of a hole in the wall about 10 feet X113 overhead and splashes noisily into the water somewhere within the X113 mist. The indistinct shape of the opposite shore can be dimly seen X113 through the mist. The only passage goes back toward the south. X114 Dead end. X115 You are at the northeast end of an immense room, even larger than the X115 Giant Room. It appears to be a repository for the "ADVENTURE" X115 program. Massive torches far overhead bathe the room with smokey X115 yellow light. Scattered about you can be seen a pile of bottles (all X115 of them empty), a nursery of young beanstalks murmuring quietly, a bed X115 of oysters, a bundle of black rods with rusty stars on their ends, and X115 a collection of brass lanterns. Off to one side a great many dwarves X115 are sleeping on the floor, snoring loudly. A sign nearby reads: "Do X115 not disturb the dwarves!" An immense mirror is hanging against one X115 wall, and stretches to the other end of the room, where various other X115 sundry objects can be glimpsed dimly in the distance. An unoccupied X115 telephone booth stands against the north wall. X116 You are at the southwest end of the repository. To one side is a pit X116 full of fierce green snakes. On the other side is a row of small X116 wicker cages, each of which contains a little sulking bird. In one X116 corner is a bundle of black rods with rusty marks on their ends. A X116 large number of velvet pillows are scattered about on the floor. X116 Beside one of the pillows is a large, dusty, leather-bound volume X116 with the title "History of Adventure" embossed in pure gold. X116 A vast mirror stretches off to the northeast, almost reaching the X116 phone booth. At your feet is a large steel grate, next to which is X116 a sign which reads, "Treasure Vault. Keys in Main Office." X117 You are on one side of a large, deep chasm. A heavy white mist rising X117 up from below obscures all view of the far side. A SW path leads away X117 from the chasm into a winding corridor. X118 You are in a long winding corridor sloping out of sight in both X118 directions. X119 You are in a secret canyon which exits to the north and east. X120 You are in a secret canyon which exits to the north and east. X121 You are in a secret canyon which exits to the north and east. X122 You are on the northeast side of a deep chasm. A NE path leads away X122 from the chasm on this side. X123 You're in a long east/west corridor. A faint rumbling noise can be X123 heard in the distance. X124 The path forks here. The left fork leads northeast. A dull rumbling X124 seems to get louder in that direction. The right fork leads southeast X124 down a gentle slope. The main corridor enters from the west. X125 The walls are quite warm here. From the north can be heard a steady X125 roar, so loud that the entire cave seems to be trembling. Another X125 passage leads south, and a low crawl goes east. X126 You are on the edge of a breath-taking view. Far below you is an X126 active volcano, from which great gouts of molten lava come surging X126 out, cascading back down into the depths. The glowing rock fills the X126 farthest reaches of the cavern with a blood-red glare, giving every- X126 thing an eerie, macabre appearance. The air is filled with flickering X126 sparks of ash and a heavy smell of brimstone. The walls are hot to X126 the touch, and the thundering of the volcano drowns out all other X126 sounds. Embedded in the jagged roof far overhead are myriad twisted X126 formations composed of pure white alabaster, which scatter the murky X126 light into sinister apparitions upon the walls. To one side is a deep X126 gorge, filled with a bizarre chaos of tortured rock which seems to X126 have been crafted by the devil himself. An immense river of fire X126 crashes out from the depths of the volcano, burns its way through the X126 gorge, and plummets into a bottomless pit far off to your left. To X126 the right, an immense geyser of blistering steam erupts continuously X126 from a barren island in the center of a sulfurous lake, which bubbles X126 ominously. The far right wall is aflame with an incandescence of its X126 own, which lends an additional infernal splendor to the already X126 hellish scene. A dark, foreboding passage exits to the south. X127 You are in a small chamber filled with large boulders. The walls are X127 very warm, causing the air in the room to be almost stifling from the X127 heat. The only exit is a crawl heading west, through which is coming X127 a low rumbling. X128 You are walking along a gently sloping north/south passage lined with X128 oddly shaped limestone formations. X129 You are standing at the entrance to a large, barren room. A sign X129 posted above the entrance reads: "Caution! Bear in room!" X130 You are inside a barren room. The center of the room is completely X130 empty except for some dust. Marks in the dust lead away toward the X130 far end of the room. The only exit is the way you came in. X131 You are in a maze of twisting little passages, all different. X132 You are in a little maze of twisty passages, all different. X133 You are in a twisting maze of little passages, all different. X134 You are in a twisting little maze of passages, all different. X135 You are in a twisty little maze of passages, all different. X136 You are in a twisty maze of little passages, all different. X137 You are in a little twisty maze of passages, all different. X138 You are in a maze of little twisting passages, all different. X139 You are in a maze of little twisty passages, all different. X140 Dead end. X141 You are on a narrow promontory at the foot of a waterfall, which X141 spurts from an overhead hole in the rock wall and splashes into a X141 large reservoir, sending up clouds of mist and spray. X141 Through the thick white mist looms a polished marble slab, to X141 which is affixed an enormous rusty iron anvil. In golden letters X141 are written the words: "Whoso Pulleth Out This Sword of This X141 Stone and Anvil, is Rightwise King-Born of All This Mountain." X141 There is a narrow chimney on the east side of the promontory. X142 You are on a narrow shelf above and east of the top of a very steep X142 chimney. A long smooth granite slide curves down out of sight X142 to the east. If you go down the slide, you may not be able to X142 climb back up. X143 You are in the private chamber of the Mountain King. Hewn into the X143 solid rock of the east wall of the chamber is an intricately-wrought X143 throne of elvish design. There is an exit to the west. X144 You are on the east side of the throne room. On the arm of the throne X144 has been hung a sign which reads "Gone for the day: visiting X144 sick snake. --M.K." X145 You are dragged down, down, into the depths of the whirlpool. X145 Just as you can no longer hold your breath, you are shot out over X145 a waterfall into the shallow end of a large reservoir. Gasping X145 and sputtering, you crawl weakly towards the shore.... X146 You are in dense forest, with a hill to one side. The trees appear X146 to thin out towards the north and east. X147 You are at the high point of a wide grassy knoll, partially surrounded X147 by dense forest. The land rises to the south and east, and drops off X147 sharply to the north and west. The air smells of sea water. X148 You are at the edge of a trackless salt marsh. Tall reeds obscure X148 the view. X149 You're in salt marsh. X150 You're in salty marsh. X151 You are in salt marsh. X152 Dead end. X153 You're on a sandy beach at the edge of the open sea. The beach X153 ends a short distance south and the land rises to a point. To X153 the north, the beach ends cliffs and broken rocks. X154 You are at a jumble of large broken rocks. A gentle path leads up X154 to the top of the nearby cliffs. A narrow treacherous path X154 disappears among the rocks at the foot of the cliff. X155 You are on a high cliff overlooking the sea. Far below the X155 rolling breakers smash into a jumble of large broken rocks. X155 The thunder of the surf is deafening. X156 You're at the bottom of the cliff, smashed to smithereens by the X156 pounding surf. X157 You are at Thunder Hole, a funnel shaped cavern opening onto the sea. X157 The noise of the surf pounding against the outer rocks of the cave is X157 amplified by the peculiar shape of the cave, causing a thunder-like X157 booming sound to reverberate throughout the cave. Outside, a narrow X157 path leads south towards some large rocks. X158 You are at the top of some arched steps. On one side is a blank wall X158 with a tiny door at the base and a shelf overhead. On the other side X158 a westward passage leads to the sea. X159 You are in a low cramped chamber at the back of a small cave. X159 There is a shelf in the rock wall at about the height of your X159 shoulder. X160 You are on a wide ledge, bounded on one side by a rock wall, X160 and on the other by a sheer cliff. The only way past is through X160 a large wrought-iron door. X161 You feel dizzy...Everything around you is spinning, expanding, X161 growing larger.... Dear me! Is the cave bigger or are you smaller? X162 You are again overcome by a sickening vertigo, but this time X162 everything around you is shrinking...Shrinking... X163 You are again overcome by a sickening vertigo, but this time X163 everything is shrinking... I mean, you are growing. This is X163 terribly confusing! X164 You feel dizzy...Everything around you is spinning, expanding, X164 growing larger.... X165 You're at the bottom of the cliff with a broken neck. X166 You are at the western tip of the Blue Grotto. A large lake almost X166 covers the cavern floor, except for where you are standing. Small X166 holes high in the rock wall to the east admit a dim light. The X166 reflection of the light from the water suffuses the cavern with X166 a hazy bluish glow. X167 You are on the shore of an underground sea. A high wooden X167 structure of vast proportions extends out into the water to the X167 east. The way west is through a wrought-iron door. X168 You are on the eastern shore of the Blue Grotto. An ascending X168 tunnel disappears into the darkness to the SE. X169 You are at a high rock on the NE side of a watery chamber at the mouth X169 of a small brook. An unknown gas bubbles up through the water from X169 the chamber floor. A bluish light can be seen to the southwest. X170 You are in a windy tunnel between two large rooms. X171 You are in the Bat Cave. The walls and ceiling are covered with X171 sleeping bats. The floor is buried by a mass of dry, foul-smelling X171 guano. The stench is overpowering. Exits to the NW and east. X172 You are in a very tight N/S crack. The passage seems to widen to X172 the south. X173 You are in a very tight N/S crack. The passage south is blocked X173 by a recent cave-in. X174 You're in the Cloakroom. This is where the dreaded Wumpus repairs X174 to sleep off heavy meals. (Adventurers are his favorite dinner!) X174 Two very narrow passages exit NW and NE. X175 You're in a room containing several small climable pits. Passages X175 exit to the east and north. X176 You are at the bottom of a small featureless pit. X177 You are at a high hole in a rock wall. X178 The NE passage is blocked by a recent cave-in. X179 You are in a sloping muddy defile, next to a tumbling brook. X180 You are in a level E/W passage partially blocked by an overhanging X180 tongue of rock. A steep scramble would take you up over the tongue, X180 whence continues an upward crawl. X181 The dog won't let you pass. X182 You're in the Upper Passage, a long level E/W tunnel. X183 You are in a star-shaped chamber. Passages exit north, east, south, X183 and west. X184 You are at an elbow in a winding E/W passage. X185 Dead end. X186 You're at the intersection of two long tunnels. One goes NW, X186 the other NE. X187 You're in a long narrow east-west passage which curves out of sight X187 at both ends. X188 You're in the Rotunda. Corridors radiate in all directions. X188 There is a telephone booth standing against the north wall. X189 You are standing in a telephone booth at the side of a large chamber. X189 Hung on the wall is a banged-up pay telephone of ancient design. X190 You're at the Devil's Chair, a large crystallization shaped like a X190 seat, at the edge of a black abyss. You can't see the bottom. X190 An upward path leads away from the abyss. X191 You're in a dead-end crack. X192 You're on a small gravel beach at the south wall of the Blue Grotto. X192 A gravelly path leads east. X193 You are in the Flower Room. The walls are covered with colorful, X193 intricate, flower-like patterns of crystallized gypsum. A hole leads X193 to the west. X194 You are at the end of a short E/W corridor. X195 You are looking west from the end of a short E/W corridor. At your X195 feet is a pile of loose rubble. On your left is a hole into another X195 chamber. X196 You are in an arched hall. The remnants of a now-plugged coral X196 passage lie to the east. The north wall has partially crumbled, X196 exposing a large connecting hole to another room. X197 You're in the Vestibule, a short east-west passage between two rooms. X198 You are in the Fairy Grotto. All around you innumerable stalactites, X198 arranged in immense colonnades, form elegant arches. On every side X198 you hear the dripping of water, like the footsteps of a thousand X198 fairies. A small stream runs from the SW corner. A bright glow X198 emanates from the south side of the grotto, and a steep passage X198 descends to the east. X199 You have approached the lower end of a steep passage, but it is X199 just too cold here to hang around, and you aren't properly equipped X199 to continue. With teeth chattering, you climb back up.... X200 You are in the Crystal Palace. An overhead vein of phosphorescent X200 quartz casts a liminous glow which is reflected by countless chips of X200 mica embedded in both walls, which consist of some sort of highly X200 reflective glass, apparently of volcanic origin. A winding path X200 of yellow sandstone leads west and rises steeply to the east. X201 You are following a yellow sandstone path. There is a glow X201 to the west. X202 You are in a very tall chamber whose walls are comprised of many X202 different rock strata. Layers of red and yellow sandstone X202 intertwine with bright bands of calcareous limestone in a rainbow- X202 like profusion of color. The rainbow effect is so real, you X202 are almost tempted to look for a pot of gold! Poised far over X202 your head, a gigantic slab, wedged tightly between the north and X202 south walls, forms a natural bridge across the roof of the chamber. X202 A trail leads east and west. X203 You're in a steeply sloping passage. It is very cold here. X204 You are in the Hall of Ice, in the deepest part of the caverns. X204 During winter, frigid outside air settles here, making this room X204 extremely cold all year round. The walls and ceilings are covered X204 with a thick coating of ice. An upward passage exits to the west. X205 You are standing on a natural bridge far above the floor of a circular X205 chamber whose walls are a rainbow of multi-colored rock. The bridge X205 was formed eons ago by a huge slab which fell from the ceiling and X205 is now jammed between the north and south walls of the chamber. X206 You are in a low, wide room below another chamber. A small green X206 pond fills the center of the room. The lake is apparently spring- X206 fed. A small stream exits through a narrow passage to the north. X206 A larger passage continues west. X207 You are in a tight north/south crawl through a stratum of red X207 colored rock. The air is damp with mist. X208 You are in a tall canyon on the south side of a swift, wide river. X208 Written in the mud in crude letters are the words: "You Have Found X208 Lost River." A wide path leads east and west along the bank. A tight X208 crawlway would take you south out of the canyon. X209 You are standing on a large flat rock table at the western end of X209 Lost River Canyon. Beneath your feet, the river disappears amidst X209 foam and spray into a large sinkhole. A gentle path leads east X209 along the river's south shore. Another leads sharply upward along X209 the river's north side. X210 You are at a niche in the canyon wall, far above a raging river. X210 The air is filled with mist and spray, making it difficult to see X210 ahead. A downward sloping ledge narrows to the east. The path X210 to the west is easier. X211 The ledge is growing very narrow and treacherous, and falls off almost X211 vertically. You could go down, but you won't be able to climb X211 back. X212 You are standing in a telephone booth at the side of the Repository. X213 You're at the east end of a level passage at a hole in the floor. X214 You're at the north edge of a dark cove. X215 You are in a dry granite basin, worn smooth eons ago by water X215 swirling down from a now-dry spillway. X216 You're in a dry spillway east of and above a smooth rock basin. X217 You are in the Winery, a cool dark room which extends some X217 distance off to the east. X218 You are to the east of the Winery, where the room ends in a thicket X218 of high, sharp, pointed, climable limestone pinnacles. There is a X218 narrow ledge just above the top of the spires. If you go up, it X218 might be difficult to get back down. X219 You are in a high-vaulted cavern whose roof rises over fifty X219 meters to culminate in a series of pointed arches directly over X219 your head. There are also two low arches to either side, forming X219 side portals. The whole effect is that of a gothic cathedral. X219 You can proceed north, south, east, or west. X220 You're at the east portal of the Gothic Cathedral. The path leads X220 east and west. X221 You're at the west portal of the Gothic Cathedral. X222 You are at the foot of the Altar, an immense, broad stalagmite. X222 An opening leads south. X223 You're on top of an enormous, broad stalagmite. There is a hole X223 in the ceiling overhead. X224 You are in a room the size and shape of a small crypt. A narrow X224 cut exits east. There is a hole in the floor. X225 You are in the Gothic Chapel, a small chamber adjoining the Gothic X225 Cathedral. A path leads west. X226 You are on the floor of the Rainbow Room. In fact, you are spread X226 *ALL OVER* the floor of the Rainbow Room. X227 You are in a dimly lit passage behind Thunder Hole. Etched into X227 the rock wall are the ominous words: X227 * "You are approaching the River Styx. * X227 * Laciate Ogni Speranza Voi Ch'Entrate." * X228 You are at the River Styx, a narrow little stream cutting directly X228 across the passageway. The edge of the stream is littered with sticks X228 and other debris washed in by a recent rainfall. On the far side X228 of the river, the passage continues east. X229 You're on the east side of the river's sticks. X230 You are on a ledge at the northern end of a long N/S crawl. The X230 ledge is above a large number of sharp vertical limestone spires. X230 An attempt to climb down could be dangerous, if you get my *point*! X231 You are very neatly skewered on the point of a sharp rock. X232 You have poled your boat across the calm water. X233 You have poled your boat across the dark water. X234 You have poled your boat across the Blue Grotto. X235 You're at Dante's Rest, on the north side of a yawning dark chasm. X235 A passage continues west along the chasm's edge. X236 You are at the east end of a riverbank path in Lost River Canyon. X237 The staircase is now unclimable. X238 You're in the caretaker's pantry. X239 You are on a small rise overlooking a beautiful bay. In the center X239 of the bay is the castle of the elves. X240 You are on the highest pinnacle of the castle in the bay. X240 Steps lead down into the garden. X241 You are in the outer courtyard of the garden of the elves. X241 Steps lead up to the tower, and to the west, separating you X241 from the inner courtyard, is a maze of hedges, living things, X241 but almost crystalline in their multicolored splendor. X242 From the inside the maze looks like a kaleidoscope, with X242 swatches of color dancing as you move. In this part the colors X242 are produced by shining red berries on the branches. X243 You are surrounded by a tall hedge with sharp iridescent leaves X243 and metallic orange flowers. X244 You are in the center of the living maze. The plants here are X244 dormant this season, but still carry brilliant yellow leaves. X245 Unlike the other areas of the hedge system, this area seems to X245 have no metallic gleam; nevertheless it is still breathtaking. X245 The trees and bushes are all varigated shades of green, the X245 evergreens being a rich dark shade while the seasonal bushes X245 are a lighter yellowish green, making a startling contrast. X246 You are near the edge of the maze. You sample the blueberries X246 on the bushes. They are delicious. X247 You are at the western end of the living maze. Beside the X247 shrubs forming the walls are tastefully planted beds of X247 violets and brilliant purple pansies. X247 To the west is the inner garden. X248 You are in the inner garden of the elves. In the center is X248 a living tree, with shimmering silvery bark, glistening metallic X248 green leaves, and flowers ripe with nectar. As the nectar falls X248 to the ground it forms droplets of silver. Around the tree is X248 a hedge of briars which cannot be crossed. Unfortunately for X248 adventurers such as you, most of the nectar falls inside the hedge. X248 The exit is to the east. X-1 END X2 X1 You're at end of road again. X2 You're at hill in road. X3 You're inside building. X4 You're in valley. X5 You're in forest. X6 You're in forest. X7 You're at slit in streambed. X8 You're outside grate. X9 You're below the grate. X10 You're in cobble crawl. X11 You're in Debris Room. X13 You're in Bird Chamber. X14 You're at top of small pit. X15 You're in Hall of Mists. X17 You're on east bank of fissure. X18 You're in Nugget of Gold Room. X19 You're in Hall of Mt King. X23 You're at west end of Twopit Room. X24 You're in east pit. X25 You're in west pit. X33 You're at "Y2". X35 You're at window on pit. X36 You're in dirty passage. X39 You're in dusty rock room. X41 You're at west end of Hall of Mists. X57 You're at brink of pit. X60 You're at east end of Long Hall. X61 You're at west end of Long Hall. X64 You're at Complex Junction. X66 You're in Swiss Cheese Room. X67 You're at east end of Twopit Room. X68 You're in Slab Room. X71 You're at junction of three secret canyons. X74 You're in secret E/W canyon above tight canyon. X88 You're in narrow corridor. X91 You're at steep incline above large room. X92 You're in Giant Room. X95 You're in cavern with waterfall. X96 You're in Soft Room. X97 You're in Oriental Room. X98 You're in Misty Cavern. X99 You're in Alcove. X100 You're in Plover Room. X101 You're in Dark-Room. X102 You're in Arched Hall. X103 You're in Shell Room. X106 You're in Anteroom. X108 You're at Witt's End. X109 You're in Mirror Canyon. X110 You're at window on pit. X111 You're at top of stalactite. X113 You're at Reservoir. X115 You're at NE end. X116 You're at SW end. X117 You're on SW side of chasm. X118 You're in sloping corridor. X122 You're on NE side of chasm. X123 You're in corridor. X124 You're at fork in path. X125 You're at junction with warm walls. X126 You're at breath-taking view. X127 You're in Chamber of Boulders. X128 You're in Limestone Passage. X129 You're in front of Barren Room. X130 You're in Barren Room. X141 You're at Sword Point. X142 You're at top of slide. X143 You're at entrance to Throne Room. X144 You're on east side of Throne Room. X145 <$$< X146 You're in forest. X147 You're on grassy knoll. X153 You're on sandy beach. X154 You're at broken rocks. X155 You're at Ocean Vista. X157 You're at Thunder Hole. X158 You're at top of steps in back of Thunder Hole. X159 You're in cramped chamber. X160 You're at ledge by wrought-iron door. X161 <$$< X162 <$$< X163 <$$< X164 <$$< X166 You're at west wall of Blue Grotto. X167 You're at underground sea. X168 You're on east side of the Blue Grotto. X169 You're in Bubble Chamber. X171 You're in Bat Cave. X174 You're in the Cloakroom. X180 You're at Tongue of Rock. X183 You're in Star Chamber. X188 You're in Rotunda. X189 You're in phone booth. X190 You're at Devil's Chair. X192 You're on gravel beach. X193 You're in Flower Room. X194 You are at east end of short E/W corridor. X195 You are at east end of short E/W corridor. X196 You're in Arched Hall. X198 You're in the Fairy Grotto. X200 You're in the Crystal Palace. X202 You're in the Rainbow Room. X204 You're in the Hall of Ice. X205 You are over the Rainbow (Room). X206 You're in Green Lake Room. X207 You're in red rock crawl. X208 You're on south side of Lost River Canyon. X209 You're at end of Lost River Canyon. X210 You're at niche in ledge above Lost River. X212 You're in phone booth. X214 You're in dark cove. X215 You're in dry basin. X216 You're in old spillway. X217 You're in the Winery. X218 You're at limestone pinnacles. X219 You're in Gothic Cathedral. X223 You're on top of stalagmite. X224 You're in the Crypt. X225 You're in Gothic Chapel. X227 You are at approach to River Styx. X228 You're at the River Styx. X230 You're on ledge above limestone pinnacles. X235 You're at Dante's Rest. X236 You're at east end of Lost River Canyon. X239 You're on a small rise over the bay. X241 You are in the outer courtyard of the elves. X242 You are in the living maze. There are red berries here. X248 You're in the inner courtyard of the elves. X-1 X3 X1 FORCD X2 ROAD X2 HILL X3 ENTER X4 UPSTREAM X5 DOWNSTREAM X6 FOREST X7 FORWARD X7 CONTINUE X7 ONWARD X8 BACK X8 RETURN X8 RETREAT X9 VALLEY X10 STAIR X10 STAIRS X11 OUT X11 OUTSIDE X11 EXIT X11 LEAVE X12 BUILDING X12 HOUSE X13 GULLY X14 STREAM X15 ROCK X16 BED X17 CRAWL X18 COBBLE X19 INWARD X19 INSIDE X19 IN X20 SURFACE X21 NULL X21 NOWHERE X22 DARK X23 PASSAGE X23 TUNNEL X23 DEFILE X24 LOW X25 CANYON X26 AWKWARD X27 GIANT X28 VIEW X29 UPWARD X29 UP X29 U X29 ABOVE X29 ASCEND X30 D X30 DOWNWARD X30 DOWN X30 DESCEND X31 PIT X32 OUTDOORS X33 CRACK X34 STEPS X35 DOME X36 LEFT X37 RIGHT X38 HALL X39 JUMP X39 LEAP X40 BARREN X41 OVER X42 ACROSS X43 EAST X43 E X44 WEST X44 W X45 NORTH X45 N X46 SOUTH X46 S X47 NE X47 NORTHEAST X48 SE X48 SOUTHEAST X49 SW X49 SOUTHWEST X50 NW X50 NORTHWEST X51 DEBRIS X52 HOLE X53 WALL X54 BROKEN X55 Y2 X56 CLIMB X57 PANTRY X58 FLOOR X59 ROOM X60 SLIT X61 SLAB X61 SLABROOM X62 XYZZY X63 DEPRESSION X64 ENTRANCE X65 PLUGH X66 SECRET X67 CAVE X69 CROSS X70 BEDQUILT X71 PLOVER X72 ORIENTAL X73 CAVERN X74 SHELL X75 RESERVOIR X76 MAIN X76 OFFICE X77 FORK X78 CHIMNEY X79 SLIDE X80 POOL X80 WHIRL X80 WHIRLPOOL X81 KNOLL X82 PHUCE X83 LEDGE X83 SHELF X84 THUNDER X85 CLICK X88 ICE X89 BRIDGE X90 ALTAR X91 GROTTO X92 PRAY X92 PRAYER X93 SAINT-MICHEL X1002 LAMP X1002 HEADLAMP X1002 LANTERN X1002 LIGHT X1003 GRATE X1004 CAGE X1005 WAND X1005 ROD X1006 ROD (MUST BE NEXT OBJECT AFTER "REAL" ROD) X1007 STEPS X1008 ***** X1009 POLE X1010 PILLOW X1011 SNAKE X1012 FISSURE X1013 TABLET X1014 CLAM X1015 OYSTER X1016 MAGAZINE X1016 ISSUE X1016 SPELUNKER X1016 "SPELUNKER" X1017 DWARF X1017 DWARVES X1018 KNIFE X1018 KNIVES X1019 FOOD X1019 RATION X1019 SANDWICH X1020 BOTTLE X1020 JAR X1021 CHASM (TROLL BRIDGE) X1022 CHASM (DECREPIT BRIDGE) X1023 MIRROR X1024 PLANT X1024 BEANS X1025 PLANT (MUST BE NEXT OBJECT AFTER "REAL" PLANT) X1026 STALAGMITE X1027 FIGURE X1028 AXE X1029 DRAWING X1030 PIRATE X1031 DRAGON X1033 TROLL X1034 TROLL (MUST BE NEXT OBJECT AFTER "REAL" TROLL) X1035 BEAR X1036 MESSAGE X1037 VOLCANO X1037 GEYSER (SAME AS VOLCANO) X1038 MACHINE X1039 BATTERIES X1040 CARPET X1040 MOSS X1041 DOOR (GIANT DOOR) X1042 DOOR (TINY DOOR - TDOOR) X1043 DOOR (WROUGHT-IRON DOOR - TDOOR2) X1044 DOOR (DOOR TO PHONE BOOTH) X1045 ***** X1046 FLOWER X1047 CLOAK X1047 CAPE X1048 BOAT X1048 SHIP X1048 ROWBOAT X1049 STICK X1049 STICKS X1050 NUGGET X1051 DIAMOND X1052 HORN X1053 JEWELRY X1053 JEWELS X1054 COINS X1055 CHEST X1055 BOX X1056 EGGS X1056 EGG X1056 NEST X1057 TRIDENT X1058 VASE X1058 SHARDS X1058 SHARDS X1058 POTTERY X1059 EMERALD X1060 PYRAMID X1061 PEARL X1062 RUG X1063 SPICES X1064 CHAIN X1065 SWORD X1066 CROWN X1067 SHOES X1067 HEELS X1067 SLIPPERS X1068 LYRE X1069 SAPPHIRE X1070 CHALICE X1070 GRAIL X1070 CUP X1071 CASK X1071 KEG X1072 RING X1073 CLOVER X1074 TREE X1075 DROPLET X1076 ***** X1077 ***** X1078 ***** X1079 ***** X1080 ***** X1081 WATER IN BOTTLE X1081 H20 X1082 WATER IN CASK X1083 OIL IN BOTTLE X1084 OIL IN CASK X1085 WINE IN BOTTLE X1086 WINE IN CASK X1087 BEE X1087 BEES X1087 BUMBLE X1088 WALL IN BLUE GROTTO X1089 WALL FOR WALLSAFE X1090 KEY X1091 ANVIL X1092 ROCKS X1093 BOOTH X1094 TELEPHONE X1094 PHONE X1094 PHONEBOOTH X1095 SLUGS X1096 HONEY X1096 COMB X1096 HONEYCOMB X1097 BEEHIVE X1097 HIVE X1098 DOG X1098 HOUND X1098 WOLF X1099 WUMPUS X1100 ***** X1101 BIRD X1102 KEYS X1103 FOUNTAIN X1104 BAT X1104 BATS X1104 GUANO X1104 BATSHIT X1105 GNOME X1106 MUSHROOMS X1106 PEYOTE X1107 CAKES (MUST FOLLOW MUSHROOMS) X1107 CAKE X1107 CUPCAKES X1108 SACK X1108 KNAPSACK X1109 ALL X1109 EVERYTHING X1110 BOOK X1110 VOLUME X1110 TOME X1111 BOOK (FOR REPOSITORY) X1112 SAFE X1113 POSTER X1114 BROOM X1114 WHISK X1114 BRUSH X1115 CARVING X1115 ROCKS X1116 BILLBOARD X1117 ***** X1118 CANNISTER X1118 TUBE X1118 SHIELD X1119 RADIUM X1119 ROCK X1119 STONE X1120 SPHERE X1120 BALL X2001 CARRY X2001 TAKE X2001 KEEP X2001 CATCH X2001 STEAL X2001 CAPTURE X2001 TOTE X2002 DROP X2002 RELEASE X2002 FREE X2002 DISCARD X2002 DUMP X2002 DOFF X2003 SAY X2003 CHANT X2003 SING X2003 UTTER X2003 MUMBLE X2004 OPEN X2005 NOTHING X2006 CLOSE X2006 SHUT X2007 LIGHT X2008 EXTINGUISH X2009 WAVE X2009 SHAKE X2009 SWING X2010 CALM X2010 PLACATE X2010 TAME X2011 WALK X2011 RUN X2011 GO X2011 PROCEED X2011 CONTINUE X2011 EXPLORE X2011 GOTO X2011 FOLLOW X2011 TRAVEL X2011 HIKE X2012 ATTACK X2012 KILL X2012 FIGHT X2012 SLAY X2013 POUR X2013 EMPTY X2014 EAT X2014 DEVOUR X2015 DRINK X2016 RUB X2017 THROW X2017 TOSS X2017 HURL X2017 FLING X2017 HEAVE X2018 QUIT X2018 Q X2019 FIND X2019 WHERE X2020 INVENTORY X2020 I X2021 FEED X2022 FILL X2022 REFILL X2023 BLAST X2023 DETONATE X2023 IGNITE X2023 BLOWUP X2024 SCORE X2025 FEE X2025 FIE X2025 FOE X2025 FOO X2025 FUM X2026 BRIEF X2026 UNBRIEF X2027 READ X2027 PERUSE X2028 BREAK X2028 SHATTER X2028 SMASH X2029 WAKE X2029 WAKEN X2029 DISTURB X2029 AWAKEN X2030 SUSPEND X2030 PAUSE X2030 SAVE X2031 RESTOR X2032 YANK X2032 JERK X2032 PULL X2032 GRAB X2033 WEAR X2033 DON X2034 HIT X2034 STRIKE X2034 KICK X2034 PUNCH X2034 POUND X2034 WHACK X2035 ANSWER X2035 REPLY X2036 BLOW X2037 LEAVE X2038 CALL X2039 DIAL X2040 PLAY X2040 STRUM X2041 PICK X2042 PUT X2043 TURN X2044 GET X2045 INSERT X2046 REMOVE X2047 BURN X2048 GRIPE X2048 BITCH X2048 COMPLAIN X2048 SUGGEST X2048 REPORT X2049 LOCK X2050 UNLOCK X2051 HEALTH X2051 DIAGNOSE X2052 LOOK X2052 L X2052 EXAMINE X2052 DESCRIBE X2053 7 X2053 22 X2053 34 X2054 SWEEP X2054 BRUSH X2054 DUST X2055 TERSE X2055 UNTERSE X2056 WIZ X2057 MAP X2058 GATE X2059 PIRLOC X3001 FEE X3002 FIE X3003 FOE X3004 FOO X3005 FUM X3011 7 X3012 22 X3013 34 X3050 SESAME X3050 OPENSESAME X3050 ABRA X3050 ABRACD X3050 ALACAZ X3050 SHAZAM X3050 HOCUS X3050 POCUS X3051 HELP X3051 ? X3064 TREE X3064 TREES X3066 DIG X3066 EXCAVATE X3068 LOST X3069 MIST X3079 FUCK X3079 FUCK! X3139 STOP X3147 SWIM X3106 SHIT X3106 SHIT! X3106 CRAP X3106 CRAP! X3107 PISS X3107 PISS! X4001 IN X4001 INTO X4001 INSIDE X4002 ON X4002 ONTO X4002 UPON X4003 WITH X4004 TO X4005 FROM X4006 OFF X4007 UP X4008 DOWN X4009 AT X5001 GOLD X5001 GOLDEN X5002 PERSIAN X5003 WOODEN X5004 BRASS X5005 WICKER X5006 BLACK X5007 VELVET X5008 VENDING X5009 WORN-OUT X5009 WORNOUT X5009 WORN X5009 USED X5010 FRESH X5011 IRON X5012 TINY X5012 SMALL X5012 LITTLE X5013 SILK X5013 SILKEN X5014 SILVER X5015 TREASURE X5016 MING X5017 PLATINUM X5018 RARE X5019 ELFIN X5020 RUBY X5021 HOLY X5022 OAKEN X5022 OAK X5023 LEAD X5023 LEADEN X5024 LEATHER X5025 STEEL X5026 STAR X5027 SHADOWY X5028 RUSTY X5029 GIANT X5030 TASTY X5031 GLOWING X5032 GREEN X5032 GREY X5033 CRYSTAL X5034 4-LEAFED X5034 FOUR-LEAFED X5035 METAL X5036 QUARTZ X6001 AND X-1 X4 X1 2 ROAD W U CLIMB X1 3 ENTER BUILDIN IN E X1 4 DOWNSTR GULLY STREAM S DOWN X1 5 FOREST N EAST X1 8 DEPRESS X1 147 KNOLL X1 157 HOLE THUNDER X2 1 ROAD BUILDIN FORWARD E N D X2 30146 FOREST X2 5 FOREST N S X2 146 WEST X3 1 EXIT OUTDOOR W X3 11 XYZZY X3 33 PLUGH X3 467785 CLICK X3 202 CLICK X3 79 DOWNSTR STREAM X3 238 PANTRY ENTER IN X4 1 UPSTREA BUILDIN N X4 5 FOREST E W U X4 7 DOWNSTR S D X4 8 DEPRESS X5 4 VALLEY E D X5 50005 FOREST FORWARD N X5 6 FOREST X5 5 WEST S X6 1 ROAD N X6 4 VALLEY E W D X6 5 FOREST S X7 1 BUILDIN X7 4 UPSTREA N X7 5 FOREST EAST WEST X7 8 DOWNSTR ROCKY BED S X7 595 SLIT STREAM DOWN X8 5 FOREST E W S X8 1 BUILDIN X8 7 UPSTREA GULLY N X8 303009 ENTER IN D X8 593 ENTER X9 303008 EXIT UP X9 593 EXIT X9 10 CRAWL COBBLE IN W X9 14 PIT X9 11 DEBRIS X10 9 EXIT SURFACE NULL EAST X10 11 IN DARK W DEBRIS X10 14 PIT X11 303008 DEPRESS X11 9 ENTRANC X11 10 CRAWL COBBLE PASSAGE LOW E X11 12 CANYON IN U W X11 3 XYZZY X11 14 PIT X12 303008 DEPRESS X12 9 ENTRANC X12 11 D E DEBRIS X12 13 IN U W X12 14 PIT X13 303008 DEPRESS X13 9 ENTRANC X13 11 DEBRIS X13 12 CANYON E X13 14 PASSAGE PIT W X14 303008 DEPRESS X14 9 ENTRANC X14 11 DEBRIS X14 13 PASSAGE E X14 150020 D PIT STEPS X14 15 DOWN X14 16 CRACK W X15 18 LEFT S X15 17 FORWARD HALL W X15 19 STAIRS D N X15 150022 U PIT STEPS DOME PASSAGE E CLIMB STAIRS X15 14 UP X15 33 Y2 X16 14 FORCD X17 15 HALL E X17 312596 JUMP X17 412021 FORWARD X17 412597 OVER ACROSS W CROSS BRIDGE X17 27 OVER X18 15 HALL EXIT N X19 150237 U PIT STEPS DOME PASSAGE E CLIMB STAIRS X19 15 UP X19 15 STAIRS U E X19 75556 NE X19 311143 NE X19 311028 N LEFT X19 311029 S RIGHT X19 311030 WEST FORWARD X19 32 N X19 15074 SW X19 211032 SW X19 74 SECRET X20 0 FORCD X21 0 FORCD X22 15 FORCD X23 67 EAST ACROSS X23 68 WEST SLAB X23 25 DOWN PIT X23 648 HOLE X24 67 UP EXIT X24 92 GIANT X25 23 UP EXIT X25 724031 CLIMB X25 26 CLIMB X26 88 FORCD X27 312596 JUMP X27 412021 FORWARD X27 412597 OVER ACROSS E CROSS BRIDGE X27 17 OVER X27 40 N X27 41 WEST X28 19 HALL EXIT S X28 33 N Y2 X28 36 DOWN HOLE X29 19 HALL EXIT N X30 19 HALL EXIT EAST X30 62 WEST UP X31 524089 FORCD X31 90 FORCD X32 19 FORCD X33 3 PLUGH X33 28 S X33 34 EAST WALL BROKEN X33 35 WEST X33 159302 PLOVER X33 100 PLOVER X34 33 DOWN Y2 X34 15 UP X35 33 EAST Y2 X35 20 JUMP X36 37 EAST CRAWL X36 28 UP HOLE X36 39 WEST X36 65 BEDQUIL X37 36 WEST CRAWL X37 38 DOWN PIT CLIMB X38 37 CLIMB UP EXIT X38 595 SLIT STREAM DOWN UPSTREA DOWNSTR X39 36 EAST PASSAGE X39 64 DOWN HOLE FLOOR X39 65 BEDQUIL X40 41 FORCD X41 42 S U PASSAGE CLIMB X41 27 EAST X41 59 N X41 60 WEST CRAWL X42 41 UP X42 42 N X42 43 EAST X42 45 S X42 80 WEST X43 42 WEST X43 44 S X43 45 EAST X44 43 EAST X44 48 DOWN X44 50 S X44 82 N X45 42 WEST X45 43 N X45 46 EAST X45 47 S X45 87 UP DOWN X46 45 WEST EXIT X47 45 EAST EXIT X48 44 UP EXIT X49 50 EAST X49 51 WEST X50 44 EAST X50 49 WEST X50 51 DOWN X50 52 S X51 49 WEST X51 50 UP X51 52 EAST X51 53 S X52 50 WEST X52 51 EAST X52 52 S X52 53 UP X52 55 N X52 86 DOWN X53 51 WEST X53 52 N X53 54 S X54 53 WEST EXIT X55 52 WEST X55 55 N X55 56 DOWN X55 57 EAST X56 55 UP EXIT X57 13 DOWN CLIMB X57 55 WEST X57 58 S X57 83 N X57 84 EAST X58 57 EAST EXIT X59 27 FORCD X60 41 EAST UP CRAWL X60 61 WEST X60 62 N DOWN HOLE X60 50191 S CRACK X60 392173 S CRACK X60 172 S CRACK X60 648 CLIMB X61 60 EAST X61 62 N X61 100107 S X62 60 WEST X62 63 N X62 30 EAST X62 61 S X63 62 S EXIT X64 39 UP CLIMB ROOM X64 65 WEST BEDQUIL X64 103 N SHELL X64 106 EAST X65 64 EAST X65 66 WEST X65 40556 S X65 68 SLAB X65 40556 UP X65 50070 UP X65 39 UP X65 40556 N X65 50072 N X65 71 N X65 50556 DOWN X65 106 DOWN X66 65 NE X66 67 WEST X66 80556 S X66 77 CANYON X66 96 EAST X66 50556 NW X66 97 ORIENTAL X67 66 EAST X67 23 WEST ACROSS X67 24 DOWN PIT X68 23 S X68 69 UP CLIMB X68 65 N X69 68 DOWN SLAB X69 331120 S X69 119 S X69 109 N X69 113 RESERVO X70 71 N X70 65 DOWN PASSAGE X70 111 S X71 65 SE X71 70 S X71 110 N X72 65 BEDQUIL X72 118 NE X72 73 N X72 97 SW ORIENTA X73 72 S CRAWL EXIT X74 19 EAST X74 331120 WEST X74 121 WEST X74 75 DOWN X75 76 S X75 77 N X76 75 N X77 75 EAST X77 78 WEST X77 66 N CRAWL X78 77 S X79 3 FORCD X80 42 N X80 80 WEST X80 80 S X80 81 EAST X81 80 WEST EXIT X82 44 S EXIT X83 57 S X83 84 EAST X83 85 WEST X84 57 N X84 83 WEST X84 114 NW X85 83 EAST EXIT X86 52 UP EXIT X87 45 UP DOWN X88 25 DOWN CLIMB EAST X88 20 JUMP X88 92 WEST GIANT X89 25 FORCD X90 23 FORCD X91 95 N CAVERN PASSAGE X91 72 DOWN CLIMB X92 88 S X92 93 EAST X92 94 N X93 92 S GIANT EXIT X94 92 S GIANT PASSAGE X94 341095 N ENTER CAVERN X94 611 N X95 94 S EXIT X95 92 GIANT X95 91 WEST X95 145 DOWN JUMP POOL HOLE X96 66 WEST EXIT X97 66 SE X97 72 EAST CRAWL X97 98 UP N CAVERN X98 235 NE X98 97 S ORIENTA X98 99 WEST X98 3142 UP SW CLIMB SLIDE X98 75702 UP SW CLIMB SLIDE X98 703 UP SW CLIMB SLIDE X98 141 CHIMNEY X99 98 NW CAVERN X99 301 EAST PASSAGE X99 100 EAST X100 301 WEST PASSAGE EXIT X100 99 WEST X100 159302 PLOVER Y2 X100 33 PLOVER Y2 X100 101 NE DARK X101 100 S PLOVER EXIT X102 103 DOWN SHELL EXIT X103 388196 UP HALL X103 102 UP HALL X103 104 DOWN X103 114618 S X103 115619 S X103 64 S X104 103 UP SHELL X104 105 DOWN X105 104 UP EXIT X105 103 SHELL X106 64 UP X106 65 WEST X106 108 EAST X107 131 S X107 132 SW X107 133 NE X107 134 SE X107 135 UP X107 136 NW X107 137 EAST X107 138 WEST X107 139 N X107 61 DOWN X108 90556 E N S NE SE SW NW U X108 90556 D X108 106 EAST X108 626 WEST X109 69 S X109 113 N RESERVO X110 71 WEST X110 20 JUMP X111 70 N X111 40050 DOWN JUMP CLIMB X111 50053 DOWN X111 45 DOWN X112 131 SW X112 132 N X112 133 EAST X112 134 NW X112 135 SE X112 136 NE X112 137 WEST X112 138 DOWN X112 139 UP X112 140 S X113 109 S EXIT X114 84 SE X115 116 SW ACROSS CROSS X115 212 IN ENTER N X116 115 NE ACROSS SW X116 593 DOWN X117 118 SW X117 233660 OVER ACROSS CROSS NE BRIDGE X117 332661 OVER X117 303 OVER X117 332021 JUMP X117 596 JUMP X118 72 DOWN X118 117 UP X119 69 N EXIT X119 653 EAST FORWARD X120 69 N X120 74 EAST X121 74 EAST EXIT X121 653 N FORWARD X122 123 NE X122 233660 OVER ACROSS CROSS SW BRIDGE X122 303 OVER X122 596 JUMP X122 124 FORK X122 126 VIEW X122 129 BARREN X123 122 WEST X123 124 EAST FORK X123 126 VIEW X123 129 BARREN X124 123 WEST X124 125 NE LEFT X124 128 SE RIGHT DOWN X124 126 VIEW X124 129 BARREN X125 124 S FORK X125 126 N VIEW X125 127 EAST CRAWL X126 125 S PASSAGE EXIT X126 124 FORK X126 610 DOWN JUMP X127 125 WEST EXIT CRAWL X127 124 FORK X127 126 VIEW X128 124 N UP FORK X128 129 S DOWN BARREN X128 126 VIEW X129 128 WEST UP X129 124 FORK X129 130 EAST IN BARREN ENTER X129 126 VIEW X130 129 WEST EXIT X130 124 FORK X130 126 VIEW X131 107 WEST X131 132 SE X131 133 NW X131 134 SW X131 135 NE X131 136 UP X131 137 DOWN X131 138 N X131 139 S X131 112 EAST X132 107 NW X132 131 UP X132 133 N X132 134 S X132 135 WEST X132 136 SW X132 137 NE X132 138 EAST X132 139 DOWN X132 112 SE X133 107 UP X133 131 DOWN X133 132 WEST X133 134 NE X133 135 SW X133 136 EAST X133 137 N X133 138 NW X133 139 SE X133 112 S X134 107 NE X134 131 N X134 132 NW X134 133 SE X134 135 EAST X134 136 DOWN X134 137 S X134 138 UP X134 139 WEST X134 112 SW X135 107 N X135 131 SE X135 132 DOWN X135 133 S X135 134 EAST X135 136 WEST X135 137 SW X135 138 NE X135 139 NW X135 112 UP X136 107 EAST X136 131 WEST X136 132 UP X136 133 SW X136 134 DOWN X136 135 S X136 137 NW X136 138 SE X136 139 NE X136 112 N X137 107 SE X137 131 NE X137 132 S X137 133 DOWN X137 134 UP X137 135 NW X137 136 N X137 138 SW X137 139 EAST X137 112 WEST X138 107 DOWN X138 131 EAST X138 132 NE X138 133 UP X138 134 WEST X138 135 N X138 136 S X138 137 SE X138 139 SW X138 112 NW X139 107 SW X139 131 NW X139 132 EAST X139 133 WEST X139 134 N X139 135 DOWN X139 136 SE X139 137 UP X139 138 S X139 112 NE X140 112 N EXIT X141 142 UP EAST CLIMB CHIMNEY SLIDE X142 98 EAST DOWN FORWARD SLIDE X142 141 BACK WEST CHIMNEY X143 19 WEST EXIT X143 144 EAST X144 143 WEST BACK X144 19 EXIT X145 141 FORCD X146 2 EAST UP ROAD CLIMB X146 50006 S FOREST X146 146 S FOREST X146 147 WEST X146 148 N X147 146 EAST S X147 148 N X147 153 WEST X147 157 HOLE X147 3 BUILDIN X147 157 THUNDER X148 50147 S X148 146 S X148 149 EAST WEST N X148 3 BUILDIN X148 166 GROTTO X149 149 S X149 151 EAST X149 150 WEST X149 152 N X150 151 N S X150 149 EAST WEST X151 148 EAST X151 152 WEST X151 150 N X151 149 S X152 151 EAST X152 150 S X153 154 N X153 239 S X153 147 EAST X153 3 BUILDIN X154 50155 N X154 157 N DOWN X154 155 UP X154 153 S X154 3 BUILDIN X155 154 DOWN BACK S X155 156 JUMP X155 3 BUILDIN X156 0 FORCD X157 227 IN EAST X157 154 EXIT S UP X157 3 BUILDIN X158 229 WEST STEPS DOWN X158 157 EXIT X158 161 PHUCE X158 725 CLIMB UP X158 726 LEDGE X158 747 ENTER IN EAST ENTRANC X159 732 EXIT WEST STEPS X160 343167 EAST IN ENTER X160 738 EAST X160 162 PHUCE X160 723 WEST CLIMB DOWN X160 165 JUMP X161 304 FORCD X162 304 FORCD X163 304 FORCD X164 304 FORCD X165 0 FORCD X166 747 ENTER EXIT IN WEST X166 148232 EAST CROSS OVER ACROSS X166 148169 NE X166 148233 S X166 148234 N X166 717 EAST CROSS OVER ACROSS NE X166 448164 PHUCE X166 720 PHUCE X167 163 PHUCE X167 343160 WEST EXIT ENTER IN X167 739 WEST X167 722 EAST CROSS OVER ACROSS X168 448170 SE UP PASSAGE X168 719 SE UP PASSAGE X168 148169 N X168 148192 S X168 148166 WEST CROSS OVER ACROSS X168 717 WEST N S X169 148168 S X169 148166 SW X169 717 SW S X169 448179 PASSAGE EAST UP X169 719 PASSAGE UP X170 171 EAST UP X170 168 WEST DOWN X171 170 NW DOWN X171 180 EAST UP X172 60 N X172 174 S X173 60 N X174 392178 NE X174 172 NE CRACK X174 175 NW X175 177 N X175 174 EAST X175 176 PIT DOWN CLIMB X176 175 UP CLIMB EXIT BACK X177 60 DOWN CLIMB JUMP X177 175 S BACK X178 174 FORCD X179 169 DOWN WEST X179 198 UP EAST STREAM X180 171 WEST X180 182 UP CLIMB X180 213 EAST X181 227 FORCD X182 180 WEST X182 183 EAST X183 182 WEST X183 50184 EAST X183 186 EAST X183 185 S X183 187 N X184 183 SW X184 188 SE X185 183 N X186 183 NW X186 188 NE X187 183 WEST X187 188 EAST X188 187 N X188 184 WEST X188 65190 SW DOWN X188 186 SW X188 305 IN ENTER X189 188 EXIT BACK X190 422306 CROSS N ACROSS BRIDGE X190 661 CROSS X190 188 UP BACK X191 60 N X192 148166 N X192 148168 NE X192 717 N NE X192 448197 EAST X192 720 EAST X193 197 WEST X194 224 WEST X195 196 HOLE WALL S CROSS LEFT X195 224 WEST X196 103 DOWN SHELL X196 114618 HOLE WALL N CROSS X196 195 HOLE X197 193 EAST X197 192 WEST X198 179 SW STREAM DOWNSTR PASSAGE X198 203 DOWN EAST X198 402200 S UP X198 772 S UP X199 198 FORCD X200 198 WEST X200 201 EAST UP X201 402200 WEST DOWN X201 772 WEST DOWN X201 202 EAST X201 230 N X202 201 WEST X202 467785 CLICK X202 205 CLICK X202 206 EAST X203 447199 DOWN EAST ICE X203 204 DOWN EAST ICE X203 198 UP WEST X204 203 UP WEST BACK EXIT X205 219 N X205 467785 CLICK X205 202 CLICK X205 226 JUMP X206 207 N CRAWL X206 202 WEST X206 648 UP HOLE X207 208 N X207 206 S X208 236 EAST X208 207 S CRAWL X208 209 WEST X208 793 CROSS ACROSS N X209 208 EAST X209 210 UP CLIMB X210 211 DOWN EAST X210 209 WEST X211 210 UP BACK WEST X211 122 DOWN EAST X212 115 EXIT BACK S X213 206 DOWN HOLE X213 180 WEST BACK X214 148166 S X214 148169 SE X214 717 S SE X214 448215 NE X214 720 NE X215 214 SW X215 216 UP X216 215 DOWN X216 217 EAST UP X217 216 WEST DOWN EXIT X217 218 EAST PIT X218 217 BACK WEST X218 230 UP CLIMB X219 205 S BRIDGE X219 222 N ALTAR X219 220 EAST X219 221 WEST X219 3 PRAY X220 219 WEST X220 225 EAST X221 219 EAST X222 219 S X222 223 UP X222 3 PRAY X223 222 DOWN X223 224 UP X224 223 DOWN HOLE X224 388195 EAST X224 194 EAST X225 220 WEST X226 0 FORCD X227 157 WEST EXIT UP X227 398228 EAST IN DOWN X227 181 EAST IN DOWN X228 792 N S UPSTREA DOWNSTR CRACK X228 227 UP WEST EXIT X228 229 JUMP X228 786 EAST IN ACROS CROSS OVER X229 792 N S UPSTREA DOWNSTR CRACK X229 228 JUMP X229 786 WEST EXIT ACROSS CROSS OVER X229 158 EAST IN STEPS X230 65218 DOWN JUMP X230 231 DOWN JUMP X230 201 S CRAWL X231 0 FORCD X232 168 FORCD X233 192 FORCD X234 214 FORCD X235 422306 CROSS S ACROSS BRIDGE X235 661 CROSS X235 98 WEST X236 208 WEST X237 19 FORCD X238 3 EXIT OUT ENTRANC X239 153 N NE X239 240 SAINT-MI X240 239 NE ACROSS CROSS SAINT- X240 241 D X241 240 U X241 242 W X242 241 E X242 243 SW X242 244 W X242 246 NW X243 242 NE X243 244 N X243 247 NW X244 242 E X244 243 S X244 245 W X244 246 N X245 243 S X245 244 E X245 246 N X245 247 W X246 242 SE X246 245 S X246 247 SW X247 243 SE X247 245 E X247 246 NE X247 307 W X248 247 E X-1 X5 X2 Brass lantern X0000 There is a shiny brass lamp nearby. X1000 There is a lamp shining nearby. X3 *Grate X0000 The grate is locked. X1000 The grate is open. X4 Wicker cage X0000 There is a small wicker cage discarded nearby. X5 Black rod X0000 A three foot black rod with a rusty star on an end lies nearby. X6 Black rod X0000 A three foot black rod with a rusty mark on an end lies nearby. X7 *Steps X0000 Rough stone steps lead down the pit. X1000 Rough stone steps lead up the dome. X9 Wooden pole X0000 A wooden pole is lying nearby. X1000 A wooden pole has been stuck in the mud here. X10 Velvet pillow X0000 A small velvet pillow lies on the floor. X11 *Snake X0000 A huge green fierce snake bars the way! X1000 <$$< (Chased away) X12 *Fissure X0000 <$$< X1000 A crystal bridge now spans the fissure. X2000 The crystal bridge has vanished! X13 *Stone tablet X0000 A massive stone tablet imbedded in the wall reads: X0000 "Congratulations on bringing light into the Dark-Room!" X14 Giant clam >grunt!< X0000 There is an enormous clam here with its shell tightly closed. X15 Giant oyster >groan!< X0000 There is an enormous oyster here with its shell tightly closed. X1000 Interesting. There seems to be something written on the underside of X1000 the oyster. X16 "Spelunker Today" X0000 There are a few recent issues of "Spelunker Today" magazine here. X19 Tasty food X0000 There is food here. X20 Small bottle X0000 There is a bottle of water here. X1000 There is an empty bottle here. X2000 There is a bottle of oil here. X3000 There is a broken bottle here. X4000 There is a bottle of wine here. X21 *Chasm - troll bridge X0000 A rickety wooden bridge extends across the chasm, vanishing into the X0000 mist. A sign posted on the bridge reads, "Stop! Pay troll!" X1000 The wreckage of a bridge (and a dead bear) can be seen at the bottom X1000 of the chasm. X22 *Chasm2 & decrepit natural bridge X0000 A decrepit natural bridge spans the chasm. A message scrawled into X0000 the rock wall reads: "Bridge out of repair. Maximum load: 35 Foonts." X1000 The remnants of a natural bridge partially overhang the chasm. X23 *Mirror X0000 <$$< X24 *plant X0000 There is a tiny little plant in the pit, murmuring "Water, water, ..." X1000 The plant spurts into furious growth for a few seconds. X2000 There is a 12-foot-tall beanstalk stretching up out of the pit, X2000 bellowing "Water!! Water!!" X3000 The plant grows explosively, almost filling the bottom of the pit. X4000 There is a gigantic beanstalk stretching all the way up to the hole. X5000 You've over-watered the plant! It's shriveling up! It's, it's... X25 *Phony plant (seen in twopit room only when tall enough) X0000 <$$< X1000 The top of a 12-foot-tall beanstalk is poking out of the west pit. X2000 There is a huge beanstalk growing out of the west pit up to the hole. X26 *Stalactite X0000 <$$< X27 *shadowy figure X0000 The shadowy figure seems to be trying to attract your attention. X28 Dwarf's axe X0000 There is a little axe here. X1000 There is a little axe lying beside the bear. X2000 There is a little axe lying beside the Wumpus. X3000 There is a little axe lying beside the dog. X29 *Cave drawings X0000 <$$< X30 *pirate X0000 <$$< X31 *dragon X0000 A huge green fierce dragon bars the way! X1000 Congratulations! You have just vanquished a dragon with your bare X1000 hands! (Unbelievable, isn't it?) X2000 The body of a huge green dead dragon is lying off to one side. X33 *Troll X0000 A burly troll stands by the bridge and insists you throw him a X0000 treasure before you may cross. X1000 The troll steps out from beneath the bridge and blocks your way. X2000 <$$< (Chased away) X34 *phony troll X0000 The troll is nowhere to be seen. X35 <$$< (Bear uses rtext 141) X0000 There is a ferocious cave bear eying you from the far end of the room! X1000 There is a gentle cave bear sitting placidly in one corner. X2000 There is a contented-looking bear wandering about nearby. X3000 <$$< (Dead) X36 *Message in second maze X0000 There is a message scrawled in the dust in a flowery script, reading: X0000 "This is not the maze where the pirate leaves his treasure chest." X37 *Volcano and/or geyser X0000 <$$< X38 *Vending machine X0000 There is a massive vending machine here. The instructions on it X0000 read: "Insert coins to receive fresh batteries." X1000 There is a massive vending machine here. X39 Batteries X0000 There are fresh batteries here. X1000 Some worn-out batteries have been discarded nearby. X2000 Some worn-out batteries have been discarded nearby. X40 *Carpet and/or moss X0000 <$$< X41 *Rusty door X0000 The way north is barred by a massive, rusty, iron door. X1000 The way north leads through a massive, rusty, iron door. X42 *Tiny door X0000 The only way past the wall is through a tiny locked door. X1000 The only way past the wall is through a tiny open door. X43 *Tiny door-2 X0000 The door is locked. X1000 The door is open. X44 *Phone booth door X0000 <$$< X46 Beautiful flowers X0000 There are some beautiful flowers here! X1000 On the other side of the room a swarm of bees eagerly buzzes over X1000 a bunch of fresh flowers. X47 Silken cloak X0000 There is a silken cloak here! X1000 <$$< (wearing cloak) X2000 A lovely silken cloak lies partially buried under a pile of X2000 loose rocks. X48 Wooden boat X0000 There is a small wooden boat here. X1000 You are in a wooden boat. X49 *Sticks at Styx X0000 <$$< X50 Large gold nugget X0000 There is a large sparkling nugget of gold here! X51 Several diamonds X0000 There are diamonds here! X52 Silver horn X0000 There is a silver horn here! X53 Precious jewelry X0000 There is precious jewelry here! X1000 <$$< (wearing jewelry) X54 Rare coins X0000 There are many coins here! X55 Treasure chest X0000 The pirate's treasure chest is here! X56 Golden eggs X0000 There is a large nest here, full of golden eggs! X1000 The nest of golden eggs has vanished! X2000 Done! X57 Jeweled trident X0000 There is a jewel-encrusted trident here! X58 Ming vase X0000 There is a delicate, precious, ming vase here! X1000 The vase is now resting, delicately, on a velvet pillow. X2000 The floor is littered with worthless shards of pottery. X3000 The ming vase drops with a delicate crash. X59 Egg-sized emerald X0000 There is an emerald here the size of a plover's egg! X60 Platinum pyramid X0000 There is a platinum pyramid here, 8 inches on a side! X61 Glistening pearl X0000 Off to one side lies a glistening pearl! X62 Persian rug X0000 There is a persian rug spread out on the floor! X1000 The dragon is sprawled out on a persian rug!! X63 Rare spices X0000 There are rare spices here! X64 Golden chain X0000 There is a golden chain lying in a heap on the floor! X1000 The bear is locked to the wall with a golden chain! X2000 There is a golden chain locked to the wall! X65 Gleaming sword X0000 There is a gleaming sword here! X1000 A gleaming sword is stuck into the anvil! X3000 You grasp the sword's handle and give a mighty heave, but with a X3000 loud clang the sword blade shatters into several fragments. X4000 Rusty shards of a elven sword lie scattered about. X5000 A very clean sword is stuck into the anvil! X6000 An oily sword is stuck into the anvil. X66 Elfin crown X0000 An ancient crown of elfin kings lies here! X1000 <$$< (wearing crown) X67 Ruby slippers X0000 There is a pair of ruby slippers here. X1000 <$$< (wearing slippers) X2000 There is a pair of ruby slippers here. X68 Delicate lyre X0000 There is a delicate lyre here! X69 Star sapphire X0000 There is a star sapphire here! X70 Holy Grail X0000 There is an ornate silver chalice here! X71 Oaken cask X0000 There is a cask of water here. X1000 There is an empty oaken cask here. X2000 There is a cask of oil here. X3000 <$$< (Unused) X4000 There is a cask of wine here. X72 Golden ring X0000 There is a small gold ring here. X1000 <$$< (wearing ring) X2000 On the Wumpus' finger is a small gold ring. X73 Four-leafed clover X0000 There is a four-leafed clover here! X1000 <$$< (wearing clover) X74 Gold tree X1000 There is a gold statue of a tree here. X75 Silver droplet X1000 There is a single droplet of silver on the ground here. X81 Clear water X82 Cool water X83 Thick, black oil X84 Thick, black oil X85 Vintage wine X86 Vintage wine X87 *Bumblebees X0000 <$$< X1000 Some bumblebees are swarming around a bunch of fresh flowers. X88 *Hollow wall X0000 Your footsteps echo hollowly throughout the chamber. X1000 <$$< X89 *Wall with safe X0000 A steel safe is embedded in the wall. X90 Tiny brass key X0000 There is a tiny brass key here. X1000 There is a tiny brass key on the shelf. X91 *Anvil X0000 <$$< X92 *rocks on cloak X0000 <$$< (ON CLOAK) X1000 <$$< (AFTER ROCKSLIDE) X93 *telephone booth X0000 The telephone booth is empty. The phone is ringing. X1000 The phone booth is occupied by a gnome. He is talking excitedly X1000 to someone at the other end. X2000 The telephone booth is empty. X3000 <$$< X94 *Telephone X0000 The phone is ringing. X1000 The telephone is out of order. X2000 The telephone is out of order. It is badly dented. X3000 <$$< X95 Lead slugs X0000 There are some lead slugs here! X96 Sweet honeycomb X0000 There is a sweet honeycomb here! X97 *Beehive X0000 There is an active beehive nearby. The bees hum protectively X0000 around the hive. X1000 There is an empty beehive nearby. X98 *Black dog X0000 A hideous black dog bares his teeth and growls at your approach. X1000 Nearby, a large black dog is in a deep slumber. X99 *Dreaded Wumpus X0000 In the corner, a Wumpus is sleeping peacefully. X1000 A sleepy Wumpus is ambling towards you. He wants to invite you to X1000 dinner. He wants you to *be* the dinner! X2000 The Wumpus is still on your trail! And he's getting closer!! X3000 The Wumpus is only a few steps behind you! All this exercise is X3000 making him veerrrrry hungry! X4000 The Wumpus almost has you in his grasp! You can feel his hot breath X4000 on your neck! X5000 "Chomp, chomp." Crunch! Chew! Slurp! Smack! Yum!!! X6000 Nearby is the smashed body of a defunct Wumpus. X101 Little bird in cage X0000 A cheerful little bird is sitting here singing. X1000 There is a little bird in the cage. X102 Set of keys X0000 There are some keys on the ground here. X103 *Fountain X0000 There is a fountain of sparkling vintage wine here! X104 *Bats & guano in bat-cave X0000 <$$< X105 *gnome in phone booth X0000 <$$< X106 Colored mushrooms X0000 There are some oddly-colored mushrooms here. X107 Tiny cakes X0000 There are some tiny cakes on the shelf. X108 Leather Sack X0000 There is a leather sack here. X110 Rare book X0000 There is a dusty, leather-bound volume here. X111 Rare book X0000 There is a dusty, leather-bound volume here. X112 Steel wall-safe X0000 The safe door is locked. X1000 The safe door is open. X113 Faded poster X0000 Taped to the wall is a faded poster. X1000 There is a faded poster here. X114 Whiskbroom X0000 There is a small whiskbroom here. X115 *Carving on dusty rocks X0000 <$$< X1000 <$$< X116 *Billboard X0000 <$$< X118 Small metal cannister X0000 There is a heavy, grey, metal cannister here. X119 Glowing stone X0000 Nearby, a strange, greenish stone is glowing brightly. X120 Quartz sphere X0000 There is a polished sphere of pure quartz here! X-1 X6 X1 Somewhere nearby is Colossal Cave, where others have found fortunes in X1 treasure and gold, though it is rumored that some who enter are never X1 seen again. Magic is said to work in the cave. I will be your eyes X1 and hands. Direct me with natural English commands. I should warn X1 you that I look at only the first six letters of each word. Also you X1 should enter "Northeast" as "NE" to distinguish it from "North". X1 (Should you get stuck, type "HELP" or "?" for some general hints.) X1 Good Luck! X1 - - - - X2 A little dwarf with a big knife blocks your way. X3 A little dwarf just walked around a corner, saw you, threw a little X3 axe at you which missed, cursed, and ran away. X4 There is a threatening little dwarf in the room with you! X5 One sharp nasty knife is thrown at you! X6 None of them hit you! X7 One of them gets you! X8 A hollow voice says "Plugh". X9 There is no way to go that direction. X10 I am unsure how you are facing. Use compass points or nearby objects. X11 I don't know in from out here. Use compass points or name something X11 in the general direction you want to go. X12 I don't know how to apply that word here. X13 I don't understand that! X14 I'm game. Would you care to explain how? X15 Sorry, but I am not allowed to give more detail. I will repeat the X15 long description of your location. X16 It is now pitch dark. If you proceed you will likely fall into a pit. X17 If you prefer, simply type "W" rather than "West". X18 Are you trying to catch the bird? X19 The bird is frightened right now and you cannot catch it no matter X19 what you try. Perhaps you might try later. X20 Are you trying to somehow deal with the snake? X21 You can't kill the snake, or drive it away, or avoid it, or anything X21 like that. There is a way to get by, but you don't have the necessary X21 resources right now. X22 Do you really want to quit now? X23 You fell into a pit and broke every bone in your body! X24 You are already carrying it! X25 You can't be serious! X26 The bird was unafraid when you entered, but as you approach it becomes X26 disturbed and you cannot catch it. X27 You can catch the bird, but you cannot carry it. X28 There is nothing here with a lock! X29 You aren't carrying it! X30 The little bird attacks the green snake, and in an astounding flurry X30 drives the snake away. X31 You have no keys! X32 It has no lock. X33 I don't know how to lock or unlock such a thing. X34 It was already locked. X35 The grate is now locked. X36 The grate is now unlocked. X37 It was already unlocked. X38 You have no source of light. X39 Your lamp is now on. X40 Your lamp is now off. X41 There is no way to get past the bear to unlock the chain, which is X41 probably just as well. X42 Nothing happens. X43 Where? X44 There is nothing here to attack. X45 The little bird is now dead. Its body disappears. X46 Attacking the snake both doesn't work and is very dangerous. X47 You killed a little dwarf. X48 You attack a little dwarf, but he dodges out of the way. X49 With what? Your bare hands? X50 Good try, but that is an old worn-out magic word. X51 To move, try words like FOREST, BUILDING, DOWNSTREAM, IN, EAST, NORTH, X51 UP, OR DOWN. Saying a place name may take you there, as may some X51 magic words. You can say TAKE LAMP or DROP LAMP or PUT LAMP IN SACK. X51 Some objects have side effects; for instance, the rod scares the bird. X51 You can take or drop multiple objects by saying TAKE BOOK AND LAMP, X51 etc. To list what you are currently holding, say INVENTORY, or just I. X51 To reprint the detailed description of where you are, say LOOK X51 or L. You can also LOOK IN or LOOK AT appropriate objects. Other X51 useful commands are HEALTH, QUIT, SCORE, BRIEF, TERSE, UNBRIEF, X51 UNTERSE, SAVE, and RESTORE. The latter two save or restore your X51 current position. To get full credit for a treasure, you must have X51 left it **safely** in the building. Some non-treasure items are best X51 left near where you find them. There are clues for various problems X51 lying about the cave: look and listen. If you seem to have found X51 all the treasures, keep looking around a while, something else X51 may happen to you (for a bonus!) X51 (The word "give" doesn't exist, but you can say FEED BONE TO DOG or X51 THROW BONE AT DOG. Also, you can use conveyances or animals(!) X51 by TAKEing and DROPing them.) X52 It misses! X53 It gets you! X54 Ok X55 You can't unlock the keys. X56 You have crawled around in some little holes and wound up back in the X56 main passage. X57 I don't know where the cave is, but hereabouts no stream can run on X57 the surface for long. I would try the stream. X58 I need more detailed instructions to do that. X59 I can only tell you what you see as you move about and manipulate X59 things. I cannot tell you where remote things are. X60 I can't make any sense out of that. X61 What? X62 Are you trying to get into the cave? X63 The grate is very solid and has a hardened steel lock. You cannot X63 enter without a key, and there are no keys nearby. I would recommend X63 looking elsewhere for the keys. X64 The trees of the forest are large hardwood oak and maple, with an X64 occasional grove of pine or spruce. There is quite a bit of under- X64 growth, largely birch and ash saplings plus nondescript bushes of X64 various sorts. This time of year visibility is quite restricted by X64 all the leaves, but travel is quite easy if you detour around the X64 spruce and berry bushes. X65 Welcome to ADVENTURE!! Would you like instructions? X66 Digging without a shovel is quite impractical. Even with a shovel X66 progress is unlikely. X67 Blasting requires dynamite. X68 I'm as confused as you are. X69 Mist is a white vapor, usually water, seen from time to time in X69 caverns. It can be found anywhere but is frequently a sign of a deep X69 pit leading down to water. X70 Your feet are now wet. X71 I think I just lost my appetite. X72 Thank you, it was delicious! X73 You have taken a drink from the stream. The water tastes strongly of X73 minerals, but is not unpleasant. It is extremely cold. X74 The bottle is now empty. X75 Rubbing the electric lamp is not particularly rewarding. Anyway, X75 nothing exciting happens. X76 Peculiar. Nothing unexpected happens. X77 Your bottle is empty and the ground is wet. X78 You can't pour that. X79 Watch it! X80 Which way? X81 Oh dear, you seem to have gotten yourself killed. I might be able to X81 help you out, but I've never really done this before. Do you want me X81 to try to reincarnate you? X82 All right. But don't blame me if something goes wr...... X82 * --- POOF!! --- * X82 You are engulfed in a cloud of orange smoke. Coughing and gasping, X82 you emerge from the smoke and find.... X83 You clumsy oaf, you've done it again! I don't know how long I can X83 keep this up. Do you want me to try reincarnating you again? X84 Okay, now where did I put my orange smoke?.... >POOF!< X84 Everything disappears in a dense cloud of orange smoke. X85 Now you've really done it! I'm out of orange smoke! You don't expect X85 me to do a decent reincarnation without any orange smoke, do you? X86 Okay, if you're so smart, do it yourself! I'm leaving! X90 >>> Messages 81 thru 90 are reserved for "Obituaries". <<< X91 Sorry, but I no longer seem to remember how it was you got here. X92 It's too heavy. You'll have to drop something first. X93 You can't go through a locked steel grate! X94 I believe what you want is right here with you. X95 You don't fit through a two-inch slit! X96 I respectfully suggest you go across the bridge instead of jumping. X97 There is no way across the fissure. X98 You're not carrying anything. X99 You are currently holding the following: X100 It's not hungry (it's merely pinin' for the fjords). Besides, you X100 have no bird seed. X101 The snake has now devoured your bird. X102 There's nothing here it wants to eat (except perhaps you). X103 You fool, dwarves eat only coal! Now you've made him *REALLY* mad!! X104 Your cask is empty and the ground is soaked. X105 You aren't carrying them! X106 I don't need to, thank you. X107 The ground is wet and the air is smelly. X108 Your lamp is now on, but the glare from the walls is absolutely X108 blinding. If you proceed you are likely to fall into a pit. X109 You haven't any matches. X110 Don't be ridiculous! X111 The door is extremely rusty and refuses to open. X112 The plant indignantly shakes dry its leaves and asks, "Water?" X113 The hinges are quite thoroughly rusted now and won't budge. X114 The oil has freed up the hinges so that the door will now move, X114 although it requires some effort. X115 The plant has exceptionally deep roots and cannot be pulled free. X116 The dwarves' knives vanish as they strike the walls of the cave. X117 Something you're carrying won't fit through the tunnel with you. X117 You'd best take inventory and drop something. X118 You can't fit this five-foot clam through that little passage! X119 You can't fit this five-foot oyster through that little passage! X120 I advise you to put down the clam before opening it. >Strain!< X121 I advise you to put down the oyster before opening it. >Wrench!< X122 You don't have anything strong enough to open the clam. X123 You don't have anything strong enough to open the oyster. X124 A glistening pearl falls out of the clam and rolls away. Goodness, X124 this must really be an oyster. (I never was very good at identifying X124 bivalves.) Whatever it is, it has now snapped shut again. X125 The oyster creaks open, revealing nothing but oyster inside. It X125 promptly snaps shut again. X126 You have crawled around in some little holes and found your way X126 blocked by a recent cave-in. You are now back in the main passage. X127 There are faint rustling noises from the darkness behind you. X128 Out from the shadows behind you pounces a bearded pirate! "Har, har," X128 he chortles, "I'll just take all this booty and hide it away with me X128 chest deep in the maze!" He snatches your treasure and vanishes into X128 the gloom. X129 A sepulchral voice reverberating through the cave, says, "Cave closing X129 soon. All adventurers exit immediately through Main Office." X130 A mysterious recorded voice groans into life and announces: X130 "This exit is closed. Please leave via Main Office." X131 It looks as though you're dead. Well, seeing as how it's so close to X131 closing time anyway, I think we'll just call it a day. X132 The sepulchral voice entones, "The cave is now closed." As the echoes X132 fade, there is a blinding flash of light (and a small puff of orange X132 smoke). . . . As your eyes refocus, you look around and find... X133 There is a loud explosion, and a twenty-foot hole appears in the far X133 wall, burying the dwarves in the rubble. You march through the hole X133 and find yourself in the Main Office, where a cheering band of X133 friendly elves carry the conquering adventurer off into the sunset. X134 There is a loud explosion, and a twenty-foot hole appears in the far X134 wall, burying the snakes in the rubble. A river of molten lava pours X134 in through the hole, destroying everything in its path, including you! X135 There is a loud explosion, and you are suddenly splashed across the X135 walls of the room. X136 The resulting ruckus has awakened the dwarves. There are now several X136 threatening little dwarves in the room with you! Most of them throw X136 knives at you! All of them get you! X137 Oh, leave the poor unhappy bird alone. X138 I daresay whatever you want is around here somewhere. X139 I'm not sure what you mean by "Stop". Use "Quit" if you want to give X139 up. X140 You can't get there from here. X141 You are being followed by a very large, tame bear. X142 - *** THE HISTORY OF ADVENTURE (ABRIDGED) *** - X142 - ** By Ima Wimp ** - X142 ADVENTURE was originally developed by William Crowther, and later X142 substantially rewritten and expanded by Don Woods at Stanford Univ. X142 According to legend, Crowther's original version was modelled on an X142 a real cavern, called Colossal Cave, which is a part of Kentucky's X142 Mammoth Caverns. That version of the game included the main maze X142 and a portion of the third-level (Complex Junction - Bedquilt - X142 Swiss Cheese rooms, etc.), but not much more. X142 Don Woods and some others at Stanford later rewrote portions of X142 the original program, and greatly expanded the cave. That version X142 of the game is recognizable by the maximum score of 350 points. X142 Some major additions were done by David Long while at the University X142 of Chicago, Graduate School of Business. Long's additions include the X142 seaside entrance and all of the cave on the "far side" of Lost River X142 (Rainbow Rm - Crystal Palace - Blue Grotto, etc.). X142 The castle problem was added in late 1984 by an anonymous writer. X142 Thanks are owed to Roger Matus and David Feldman, both of U. of C., X142 for several suggestions, including the Rainbow Room, the telephone X142 booth and the fearsome Wumpus. Most thanks (and apologies) X142 go to Thomas Malory, Charles Dodgson, the Grimm Brothers, Dante, X142 Homer, Frank Baum and especially Anon., the real authors of ADVENTURE. X143 Do you indeed wish to quit now? X144 There is nothing here with which to fill the vase. X145 The sudden change in temperature has delicately shattered the vase. X146 It is beyond your power to do that. X147 I don't know how. X148 It is too far up for you to reach. X149 You killed a little dwarf. The body vanishes in a cloud of greasy X149 black smoke. X150 The shell is very strong and is impervious to attack. X151 What's the matter, can't you read? Now you'd best start over. X152 The axe bounces harmlessly off the dragon's thick scales. X153 The dragon looks rather nasty. You'd best not try to get by. X154 The little bird attacks the green dragon, and in an astounding flurry X154 gets burnt to a cinder. The ashes blow away. X155 On what? X156 Okay, from now on I'll only describe a place in full the first time X156 you come to it. To get the full description, say "LOOK". X157 Trolls are close relatives with the rocks and have skin as tough as X157 that of a rhinoceros. The troll fends off your blows effortlessly. X158 The troll deftly catches the axe, examines it carefully, and tosses it X158 back, declaring, "Good workmanship, but it's not valuable enough." X159 The troll catches your treasure and scurries away out of sight. X160 The troll refuses to let you cross. X161 There is no longer any way across the chasm. X162 Just as you reach the other side, the bridge buckles beneath the X162 weight of the bear, which was still following you around. You X162 scrabble desperately for support, but as the bridge collapses you X162 stumble back and fall into the chasm. X163 The bear lumbers toward the troll, who lets out a startled shriek and X163 scurries away. The bear soon gives up the pursuit and wanders back. X164 The axe misses and lands near the bear where you can't get at it. X165 With what? Your bare hands? Against *HIS* bear hands?? X166 The bear is confused; he only wants to be your friend. X167 For crying out loud, the poor thing is already dead! X168 The bear eagerly licks up the honeycomb, after which he seems to calm X168 down considerably and even becomes rather friendly. X169 The bear is still chained to the wall. X170 The chain is still locked. X171 The chain is now unlocked. X172 The chain is now locked. X173 There is nothing here to which the chain can be locked. X174 There is nothing here to eat. X175 Do you want the hint? X176 Do you need help getting out of the maze? X177 You can make the passages look less alike by dropping things. X178 Are you trying to explore beyond the Plover Room? X179 There is a way to explore that region without having to worry about X179 falling into a pit. None of the objects available is immediately X179 useful in discovering the secret. X180 Do you need help getting out of here? X181 Don't go west. X182 Gluttony is not one of the troll's vices. Avarice, however, is. X183 Your lamp is getting dim. You'd best start wrapping this up, unless X183 you can find some fresh batteries. I seem to recall there's a vending X183 machine in the maze. Bring some coins with you. X184 Your lamp has run out of power. X185 There's not much point in wandering around out here, and you can't X185 explore the cave without a lamp. So let's just call it a day. X186 There are faint rustling noises from the darkness behind you. As you X186 turn toward them, the beam of your lamp falls across a bearded pirate. X186 He is carrying a large chest. "Shiver me timbers!", he cries, "I've X186 been spotted! I'd best hie meself off to the maze to hide me chest!" X186 With that, he vanishes into the gloom. X187 Your lamp is getting dim. You'd best replace those batteries. X188 Your lamp is now shining with renewed strength. X189 Your lamp is getting dim, and you haven't any more coins. You'd X189 best start wrapping this up. X190 I'm afraid the magazine is written in dwarvish. X191 "This is not the maze where the pirate leaves his treasure chest." X192 Hmmm, this looks like a clue, which means it'll cost you 10 points to X192 read it. Should I go ahead and read it anyway? X193 It says, "Not all black rods are magic wands. Some are useful for X193 other cave construction purposes. There might be some around here." X194 It says the same thing it did before. X195 I'm afraid I don't understand. X196 "Congratulations on bringing light into the dark-room!" X197 You strike the mirror a resounding blow, whereupon it shatters into a X197 myriad tiny fragments. X198 You have taken the vase and hurled it delicately to the ground. X199 You prod the nearest dwarf, who wakes up grumpily, takes one look at X199 you, curses, and grabs for his axe. X200 Is this acceptable? X201 There's no point in suspending a demonstration game. X202 You managed to climb about halfway up before losing your hold and X202 sliding back. X203 You were only a few yards from the top when you slipped and tumbled X203 all the way back down. X204 Ok, ok. No need to be grabby. X205 Pulling an angry bear around is a good way to get your arm ripped off. X206 The sword is now very clean. X207 The sword is now covered with oil. X208 The handle is now too slippery to grasp. X209 You have no scabbord! X210 You are already wearing it! X211 Do you want to extract the sword from the anvil? X212 If you could convince me of your royal blood, you might get somewhere. X213 Are you trying to go up the slide? X214 Maybe you'd better look for another way into the cave. X215 You grasp the sword's handle and pull, but the sword won't budge. X215 Do you want to try yanking it out? X216 A tiny elf runs straight at you, shouts "Phuce!", and X216 disappears into the forest. X217 You can't swim. You'd best go by boat. X218 The boat's oars were stolen by the dwarves to play bing-bong. X218 (That's dwarvish ping-pong -- with rocks!). You have no way X218 to propel the boat. X219 You are still in the boat. It is too heavy to carry. X220 You had better leave the boat first. X221 You are now sitting in a small boat. X222 You couldn't possibly cross this sea without a large ship. X223 The cliff is unscalable. X224 Your keys are all too large for the lock. X225 The wall is too smooth to climb. X226 The shelf is beyond your reach. X227 You are already wearing them! X228 You thought maybe these were peyote?? You feel a little dizzy, X228 but nothing happens. X229 You are growing taller, expanding like a telescope! Just before X229 your head strikes the top of the chamber, the mysterious process X229 stops as suddenly as it began. X230 You are closing up like an accordian....shrinking..shrinking. You X230 are now your normal size. X231 You have smashed your bottle all over the ground. X232 You are now too big to leave the way you came in. X233 This is obviously an elfin entrance. Unless you can squeeze X233 yourself through a six-inch door, you'll have to find another X233 way into the cave. X234 The wrought-iron door is now locked. X235 The tiny door is now locked. X236 The wrought-iron door is now unlocked. X237 The tiny door is now unlocked. X238 You are blocked by a wall of solid rock. X239 <$$< X240 The Wumpus looks at the food with distaste. He looks at *YOU* with X240 relish! X241 You have jerked the cloak free of the rocks. However, in doing X241 so you have caused a small rockslide, blocking the entrance X241 and making an unholy din. X242 The cloak is stuck tight under the rocks. You'll probably have to X242 yank it out. X243 The Wumpus grabs the axe, stops and picks his teeth with it for a few X243 moments while looking thoughtfully at you. When he finishes picking X243 his teeth, he eats the axe, belches, farts... and starts after X243 you again! X244 As the bridge disappears, the Wumpus scrambles frantically to reach X244 your side of the fissure. He misses by inches, and with a horrible X244 shriek plunges to his death in the depths of the fissure! X245 You can't even hit a sleeping Wumpus! The axe is now lying too near X245 the Wumpus for you to retrieve it. X246 The Wumpus is between you and the axe. You can't reach it. X247 You can't fit through a six-inch door! X248 The dog easily dodges the axe, which lands beyond him where you can't X248 get at it. X249 The dog wolfs (natch) down the food and looks around hungrily for X249 more. However, he does not appear to be any better disposed towards X249 your presence. X250 You've got to be kidding! X251 It's attached to the wall! X252 You can't put a thing into itself! X253 The gnome firmly blocks the door of the booth. You can't enter. X254 The constant ringing has awakened the dwarves! X254 There are now several threatening little dwarves in the room with X254 you! Most of them throw knives at you! All of them get you! X255 The telephone is out of order. X256 The telephone is out of order and your hand is sore. X257 A couple of lead slugs drop from the coinbox. (Gnomes are X257 notoriously cheap....) But you've broken the phone beyond X257 all hope. X258 He wants treasure, not gab. X259 He didn't say anything! X260 It isn't a parrot. He didn't say anything. X261 No one replies. The line goes dead with a faint "Click". X262 I think you are a little confused! X263 As you move towards the phone booth, a gnome suddenly streaks X263 around the corner, jumps into the booth and rudely slams the door X263 in your face. You can't get in. X264 He isn't hungry. X265 As the blast of the horn reverberates through the chamber, the X265 seemingly solid rock wall crumbles away, revealing another room just X265 beyond. The wall was most likely worn thin by an ancient watercourse X265 which dried up just before completely wearing away the rock. X266 The chamber reverberates to the blast of the horn. X266 (Satchmo you ain't!) X267 The bees swarm over the fresh flowers, leaving the hive unguarded X267 and revealing a sweet honeycomb. X268 You are now out of breath. X269 It isn't ringing! X270 A hairy paw reaches out of the darkness and.... X271 You don't have the correct change. X272 You go a short way down the bright passage, but the light X272 grows to blinding intensity. You can't continue. X273 You know, if you type "BRIEF", I won't have to keep repeating these X273 long descriptions of each room. X274 Are you trying to reach the natural bridge? X275 You can't get to it by climbing the walls or jumping or anything X275 like that. You could always put in a telephone call to the local X275 spelunking club for advice, if you could find a phone. X276 You turkey!!! Now you've done it! It took some effort, but you X276 woke up the Wumpus. He slowly opens one red eye, and then another, X276 and then one more (!!), and looks at you sleepily. He had been X276 dreaming of a late snack. If you don't act quickly, you'll X276 be a *late* adventurer! X277 The blast of your horn echos throughout hill and dale. X278 All you have are watercress sandwiches. The bear is less than X278 interested. X279 You have smashed your sword to smithereens against a rock. X280 Setting yourself adrift in the boat with no way to propel it would X280 not be very smart. Best to keep the pole. X281 You're already in it! X282 You've hit the jackpot!! Hundreds of coins and slugs cascade from X282 the telephone's coin return slot and spill all over the floor of X282 the booth. X283 Whoops! The floor has opened out from under you! It seems you X283 have fallen into a bottomless pit. As a matter of fact, you're X283 still falling! Well, I have better things to do than wait around X283 for you to strike bottom, so let's just assume you're dead. X283 Sorry about that, Chief. X284 The telephone in the booth has begun to ring. X285 I don't understand what you are trying to do! X286 How do you propose to cross the river? X287 The air is filled with beautiful music. X288 The air fills with beautiful music. The dog gradually becomes X288 less fierce, and after a short while he lies down by the side of X288 the cavern and falls into a deep sleep. X289 Are you trying to get past the dog? X290 The only person I can remember who managed to get past the dog X290 was that singer, ummm, what's his name... Euridice's friend.... X291 That wouldn't be wise. It is best to let sleeping dogs lie. X292 The stream flows out of one very small crack and into another. X292 You can't go that way. X293 The river is too wide and deep to cross. X294 The glare is absolutely blinding. If you proceed you are likely X294 to fall into a pit. X295 The hum of the bees rises to an angry buzz as you move towards X295 the hive. X296 The sticks and branches are all in a tangle and are stuck in the X296 mud. You'd need a shovel to dig them out. X297 You're already carrying them! X298 The chalice is slightly cracked. It won't hold any liquids. X299 The cask is now empty. X300 The wine goes right to your head. You reel around in a drunken X300 stupor and finally pass out. You awaken with a splitting headache, X300 and try to focus your eyes.... X301 Yeeeecchhh!! X302 Your bottle is already full. X303 The cask is already full. X304 There is nothing here with which to fill the bottle. X305 There is nothing here which you would want to put into the cask. X306 Your bottle is now full of water. X307 The cask is now full of water. X308 Your bottle is now full of oil. X309 The cask is now full of oil. X310 The bottle is now full of wine. X311 The cask is now full of wine. X312 You have nothing in which to carry it. X313 You can't fill that. X314 Do you want it in the bottle or the cask? X315 Your containers are both full. X316 It's empty. X317 Hmmm, I see you have already gone through an extra set of batteries. X317 I'll get rid of the trash for you. X318 The bridge shakes as you cross. Large hunks of clay and rock near X318 the edge break off and hurtle far down into the chasm. Several of X318 the cracks on the bridge surface widen perceptibly. X319 The load is too much for the bridge! With a roar, the entire X319 structure gives way, plunging you headlong into the raging river at X319 the bottom of the chasm and scattering all your holdings. As the X319 icy waters close over your head, you flail and thrash with all your X319 might, and with your last ounce of strength pull yourself onto the X319 south bank of the river. X320 You can't get at him. He is inside the phone booth. X321 Your lamp is already on. X322 Your lamp is already off. X323 Your lamp is again growing dim. You'd better get some more batteries. X324 You know, you are wasting your batteries by wandering around out X324 here with your light on. X325 X326 Dead wumpi, as a rule, are light eaters. Nothing happens. X327 How do expect to feed a sleeping Wumpus? X328 You aren't holding it! X329 It won't fit! X330 The coin drops into the slot with a dull "clunk". There is no X330 dial tone. X331 It's already there. X332 Please read the supplied documentation files to find out where to X332 send complaints, suggestions, and bug reports. X333 The chest is now unlocked. X334 The chest is now locked. X335 You can't get at it. X336 It's already open. X337 It's locked. X338 It's already closed. X339 You can't fill that. It would leak all over the place. X340 It's not inside anything. X341 It isn't there! X342 How? X343 Taken. X344 Dropped. X345 I don't think I can. X346 Interesting. How? X347 Huh? X348 You are in perfect health. X349 You are fit as a fiddle. X350 Only wizards can do that! X351 Are you kidding? Do you want to suffocate the poor thing? X352 Thrown. X353 Left. X354 You can't get close enough for a clean thrust. X355 As you move in for the kill, the dwarf neatly slips a knife X355 between your ribs. X356 As you approach, the dwarf slashes out with his knife! X357 It's too dark to see anything! X358 It's not open. X359 There's nothing inside. X360 It contains: X361 The billboard reads: X361 "Visit Beautiful Colossal Cave. Open Year Around. Fun for X361 the entire family, or at least for those who survive." X361 Below the headline is an impossibly complicated map showing how X361 to find Colossal Cave. Not that it matters, because all the X361 directions are written in Elvish. X362 Hidden behind the poster is a steel safe, embedded in the wall. X363 Brushing the dust from one of the larger rocks reveals some carved X363 characters. X364 Enough dusting, already! You're making me sneeze. X365 The safe door smoothly swings open. X366 Maybe if you rubbed your fingertips with sandpaper.... X367 The safe's door clicks shut. X368 This is a combination safe. The keys won't help. X369 I certainly can't read in this light. X370 The poster has a picture of a thin man with a long white beard. X370 He is wearing a high pointed cap embroidered with strange symbols, X370 and he is pointing a finger at you. Below the picture are the words: X370 "I want you!--To report all good ideas for extensions to this game X370 to me without delay. Remember: ask not what ADVENTURE can do to X370 you; ask what you can do for ADVENTURE." X370 - * * * - X370 "A public service of the John Dillinger Died for You Society." X371 "Click." X372 In the rock is carved the message "7-22-34". X373 You can't get at them. X374 Ok, I'll give you the full description whenever you enter a room X374 for the first time. X375 You don't have the right key. X376 That's not strong enough to open the clam. X377 That's not strong enough to open the oyster. X378 ** Unused ** X379 ** Unused ** X380 >>> Messages 381 thru 389 are reserved for "Diagnoses". <<< X381 You are a bit off top form, but nothing to worry about. X382 You are weaker than usual. Better avoid fights. X383 You really ought to take a break. You're in tough shape. X384 You are on the edge of collapse. Lots of sun and fresh air will X384 speed your recovery. X385 Your strength is nearly gone. Only a miracle can save you now. X386 ** Unused ** X387 ** Unused ** X388 ** Unused ** X389 ** Unused ** X390 >>> Messages 391 thru 399 are reserved for Radium Poisoning. <<< X391 Is it hot in here? You are flushed and sweating. X392 You are feeling definitely peculiar, weak.... X393 You're dizzy, nauseous. You can barely stand. X394 You are really ill. If you don't find an antidote soon, it's X394 curtains. X395 You are a walking wound. You are very weak. You'd better find out X395 what's wrong before it's too late. X396 Sheeesh! What a mess! Your hair has fallen out and your skin is X396 covered with blisters. And not an asprin in sight! X397 Well, you tried, but your strength is gone. The agony is finally X397 over. X398 ** Unused ** X399 ** Unused ** X400 You feel rather disembodied, as if you were suddenly somewhere X400 else entirely. X401 You sense that you are in a dark place. The only thing in sight X401 appears to be a companion to the crystal ball which holds your X401 gaze. It seems to be searching the gloom for something to X401 show you, but all it can see is itself: a brilliant blue X401 six-pointed star suspended in space. X402 Your gaze withdraws from the crystal ball, and you are now back X402 in your normal senses. X403 A large, stately elf walks up the rise, says the word X403 "Saint-Michel", and is instantly transported to the castle. X404 Are you trying to get to the castle? X405 It's easy to get there if you know how. The elves cross over X405 from here so perhaps you might watch an elf to see how. X405 Of course they are a bit shy, so keep a good way off while you X405 watch. X406 You get a tingling feeling as you walk through the gate, and ... X407 Fiddling with the bird in its cage is not useful. X407 If you had it in your hand it would make a mess. X408 Would you like a map? X-1 X7 X2 3 0 1 Brass lamp 0 0 0 X3 8 9 0 Grate 0 0 0 X4 10 0 1 Cage 0 0 0 X5 11 0 2 Black rod 0 0 0 X6 0 0 2 Black rod 0 0 0 X7 14 15 0 Steps 0 0 0 X9 148 0 2 Wood Pole 0 0 0 X10 96 0 1 Pillow 0 0 0 X11 19 -1 0 Snake 0 0 0 X12 17 27 0 Fissure 0 0 0 X13 101 -1 0 Tablet 0 0 0 X14 103 0 7 Giant clam 0 0 0 X15 0 0 7 Oyster 0 0 0 X16 106 0 1 Magazines 1 0 108 X17 0 -1 0 Dwarf 0 0 0 X18 0 0 0 Knife 0 0 0 X19 238 0 2 Tasty Food 0 0 0 X20 238 0 1 Bottle 0 0 0 X21 117 122 0 *Chasm1 0 0 0 X22 190 235 0 *Chasm2 0 0 0 X23 109 -1 0 Mirror 0 0 0 X24 25 -1 0 Tiny Plant 0 0 0 X25 23 67 0 Beanstalk 0 0 0 X26 111 -1 0 Stalagmite 0 0 0 X27 35 110 0 Figure 0 0 0 X28 0 0 3 Small Axe 0 0 0 X29 97 -1 0 *Drawings 0 0 0 X30 0 -1 0 Pirate 0 0 0 X31 119 121 0 Dragon 0 0 0 X33 117 122 0 Troll 0 0 0 X34 0 0 0 Troll 0 0 0 X35 130 -1 0 Tame Bear 0 0 0 X36 0 -1 0 *Message 0 0 0 X37 126 -1 0 Volcano 0 0 0 X38 140 -1 0 Machine 0 0 0 X39 0 0 3 Batteries 0 0 0 X40 96 -1 0 *Moss 0 0 0 X41 94 -1 0 Giant Door 0 0 0 X42 158 166 0 Elfin door 0 0 0 X43 160 167 0 Iron door 0 0 0 X44 188 189 0 Door 0 0 0 X46 155 0 1 Flowers 0 0 0 X47 174 -1 1 Silk Cloak 3 0 -112 X48 166 0 0 Wood Boat 0 0 0 X49 228 229 0 Sticks 0 0 0 X50 18 0 6 Nugget 2 0 -55 X51 204 0 1 Diamonds 2 0 -112 X52 27 0 2 Horn 2 0 -112 X53 29 0 2 Jewelry 1 0 -112 X54 30 0 3 Rare Coins 5 0 -112 X55 0 0 5 Chest 5 0 3 X56 92 0 4 Gold Eggs 3 0 -112 X57 168 0 3 Trident 2 0 -55 X58 97 0 2 Ming vase 2 0 3 X59 100 0 3 Emerald 3 0 -112 X60 101 0 4 Pyramid 4 0 -112 X61 0 0 1 Pearl 4 0 -112 X62 119 121 3 Rug 3 0 3 X63 127 0 1 Spices 1 0 -112 X64 130 -1 3 Gold Chain 4 0 -112 X65 141 0 2 Sword 4 0 -112 X66 144 0 1 Crown 2 0 -112 X67 205 0 1 Ruby Shoes 3 0 -112 X68 28 0 2 Lyre 1 0 -112 X69 183 0 2 Sapphire 1 0 -112 X70 225 0 2 Holy grail 2 0 -112 X71 230 0 3 Oaken Cask 3 4 -55 X72 0 0 1 Gold ring 4 0 -112 X73 147 0 1 Clover 1 0 -112 X74 241 0 3 Tree 5 0 -112 X75 248 0 1 Droplet 5 0 -112 X81 0 0 2 Water 0 0 0 X82 0 0 2 Water 0 0 0 X83 0 0 2 Oil 0 0 0 X84 0 0 2 Oil 0 0 0 X85 0 0 2 Wine 0 0 0 X86 0 0 2 Wine 0 0 0 X87 193 -1 0 Bumblebees 0 0 0 X88 102 194 0 *Wall 0 0 0 X89 0 -1 0 *Wall 0 0 0 X90 159 0 1 Tiny key 0 0 0 X91 141 -1 0 *Anvil 0 0 0 X92 172 174 0 *Rocks 0 0 0 X93 188 -1 0 Phonebooth 0 0 0 X94 189 -1 0 Telephone 0 0 0 X95 0 0 3 Lead Slugs 0 0 0 X96 0 0 2 Honeycomb 0 0 0 X97 193 -1 0 Beehive 0 0 0 X98 227 -1 0 Large dog 0 0 0 X99 174 -1 0 Wumpus 0 0 0 X101 13 0 2 Bird 0 0 0 X102 238 0 1 Keys 0 0 0 X103 217 -1 0 Fountain 0 0 0 X104 171 -1 0 Bats 0 0 0 X105 0 -1 0 Gnome 0 0 0 X106 146 0 1 Mushrooms 0 0 0 X107 159 0 1 Cakes 0 0 0 X108 3 0 2 Large Sack 0 0 0 X110 0 0 3 Rare Book 2 0 -112 X111 0 0 3 Rare Book 0 0 0 X112 0 -1 0 Safe 0 0 0 X113 3 0 1 Old Poster 0 0 0 X114 180 0 1 Whiskbroom 0 0 0 X115 39 -1 0 *Carving 0 0 0 X116 5 -1 0 *Billbd 0 0 0 X118 110 0 3 Metal Tube 0 0 0 X119 169 0 1 Green Rock 4 0 -118 X120 200 0 2 Crys. Ball 2 0 -112 X-1 -1 -1 -1 END LIST -1 -1 -1 X8 X1 24 X2 29 X3 0 X4 33 X5 0 X6 33 X7 38 X8 38 X9 42 X10 14 X11 43 X12 110 X13 29 X14 110 X15 73 X16 75 X17 29 X18 13 X19 59 X20 59 X21 174 X22 313 X23 67 X24 13 X25 147 X26 155 X27 369 X28 146 X29 110 X30 13 X31 13 X32 24 X33 25 X34 110 X35 262 X36 14 X37 29 X38 271 X39 14 X40 14 X41 24 X42 29 X43 38 X44 24 X45 331 X46 24 X47 109 X48 332 X49 0 X50 0 X51 348 X52 358 X53 0 X54 364 X55 0 X-1 X9 X0 1 2 3 4 5 6 7 8 9 X0 99 100 115 116 212 126 239 240 200 X0 146 147 148 149 150 151 152 153 154 X0 157 158 159 166 167 168 169 160 192 X0 198 201 214 227 228 229 238 155 156 X0 241 242 243 244 245 246 247 248 X1 24 X2 217 X3 24 33 217 1 3 4 7 38 95 X3 166 167 168 169 192 198 206 207 208 X3 214 228 229 113 X4 46 47 48 54 56 58 82 85 86 X4 122 123 124 125 126 127 128 129 130 X4 141 142 189 X5 9 10 11 12 13 14 166 167 X6 1 2 3 4 5 6 7 8 239 X6 146 147 148 149 150 151 152 153 154 X6 157 158 159 160 227 228 229 238 240 X6 241 242 243 244 245 246 247 248 X8 42 43 44 45 46 47 48 49 50 X8 52 53 54 55 56 80 81 82 86 X9 99 100 101 X10 108 X11 141 X12 98 X13 8 X14 13 X15 158 X16 202 X17 157 227 X18 19 X19 239 X-1 X10 X72 You are obviously a rank amateur. Better luck next time. X130 Your score qualifies you as a Novice Class Adventurer. X200 You have achieved the rating: "Experienced Adventurer". X250 You may now consider yourself a "Seasoned Adventurer". X350 You have reached "Junior Master" status. X450 Your score puts you in Master Adventurer Class C. X500 Your score puts you in Master Adventurer Class B. X550 Your score puts you in Master Adventurer Class A. X9999 All of Adventuredom gives tribute to you, Adventurer Grandmaster! X-1 X11 X2 9999 10 0 0 X3 9999 5 0 0 X7 75 4 176 177 X8 25 5 178 179 X9 20 3 180 181 X10 6 10 211 212 X11 16 5 213 214 X12 4 2 62 63 X13 5 2 18 19 X14 10 2 62 233 X15 8 5 274 275 X16 10 5 289 290 X17 8 2 20 21 X18 5 2 404 405 X-1 X14 XBREAK WITH AXE SWORD POLE ROD XDRINK FROM CASK CUP VASE BOTTLE XDROP IN CHEST SACK MACHINE BOTTLE CASK GRAIL VASE CAGE XDROP IN BOAT ANVIL PHONE SAFE LAMP TUBE XDROP ON RUG CROWN CLOAK SHOES JEWELS SWORD PILLOW XDUST WITH BROOM XFEED TO TROLL SNAKE BIRD BEAR WUMPUS DOG DWARF BAT XFEED TO CLAM OYSTER BEES XFILL WITH OIL WINE WATER XGET FROM CHEST SACK BOTTLE CASK GRAIL VASE CAGE BOAT XGET FROM ANVIL SAFE WUMPUS TUBE XGET IN CHEST SACK BOTTLE CASK GRAIL VASE CAGE BOAT XGET IN ANVIL SAFE WUMPUS TUBE XHIT WITH AXE SWORD POLE ROD KNIFE XINSERT IN CHEST SACK MACHINE BOTTLE CASK GRAIL VASE CAGE XINSERT IN CAGE BOAT ANVIL PHONE SAFE LAMP TUBE XKILL WITH AXE SWORD KNIFE XLEAVE IN CHEST SACK MACHINE BOTTLE CASK GRAIL VASE XLEAVE IN CAGE BOAT ANVIL PHONE SAFE TUBE XLEAVE ON RUG CROWN CLOAK SHOES JEWELS SWORD PILLOW XLOCK WITH KEYS KEY XLOOK IN CHEST SACK BOTTLE CASK GRAIL VASE CAGE BOAT XLOOK IN ANVIL CLAM OYSTER SAFE TUBE BALL SPHERE XLOOK AT ANY XOPEN WITH KEY KEYS AXE TRIDENT SWORD POLE ROD XPICK UP ANY XPLAY ON HORN LYRE XPOUR ON PLANT SWORD ANVIL DOOR CLOVER XPOUR FROM CASK CUP VASE BOTTLE XPUT DOWN ANY XPUT ON RUG CROWN CLOAK SHOES JEWELS SWORD PILLOW CLOVER XPUT IN CHEST SACK MACHINE BOTTLE CASK GRAIL VASE CAGE XPUT IN BOAT ANVIL PHONE SAFE LAMP TUBE XREAD ON CLAM OYSTER TABLET BILLBOA XREAD FROM CLAM OYSTER TABLET MAGAZIN BOOK POSTER BILLBOA XREMOVE FROM CHEST SACK BOTTLE CASK GRAIL VASE CAGE BOAT XREMOVE FROM ANVIL CLAM OYSTER SAFE WUMPUS TUBE XSHUT WITH KEYS KEY XTAKE OFF CROWN CLOAK SHOES JEWELRY RING CLOVER XTAKE FROM CHEST SACK BOTTLE CASK GRAIL CAGE CAGE BOAT XTAKE FROM ANVIL SAFE WUMPUS TUBE XTAKE IN CHEST SACK BOTTLE CASK GRAIL VASE CAGE BOAT XTAKE IN ANVIL TUBE XTOSS TO TROLL SNAKE BIRD BEAR WUMPUS DOG DWARF BAT XTOSS TO FIGURE BEES XTOSS AT ANY XTOSS DOWN ANY XTURN ON LAMP XTURN OFF LAMP XUNLOCK WITH KEYS KEY XWAVE AT ANY XWAVE TO TROLL SNAKE BIRD BEAR WUMPUS BEES DOG DWARF XWAVE TO BAT FIGURE XYANK FROM ANY X-1 X15 X1 3 4 14 15 20 41 42 43 44 X1 64 71 108 110 111 112 118 X2 108 X3 3 42 43 55 64 112 X4 3 42 43 55 64 112 41 X7 19 24 46 63 96 101 106 107 X8 13 14 15 16 36 110 111 113 115 X9 11 14 15 17 30 31 33 35 87 X11 47 53 66 67 72 73 X13 7 29 39 46 53 54 56 67 87 X13 102 106 107 X14 47 50 51 52 53 54 55 56 57 X14 59 60 61 62 63 64 65 66 67 X14 69 70 71 72 73 110 119 120 58 X14 68 74 75 X15 2 4 20 38 48 55 58 70 71 X15 112 118 108 X5 2 5 6 10 16 19 20 28 39 X5 47 51 52 53 54 56 58 59 60 X5 61 63 64 65 66 67 68 69 70 X5 72 73 101 102 106 107 108 110 113 X5 114 118 119 120 74 75 X6 55 108 112 118 X-1 X16 XBLACK ROD DOG OIL XBRASS LAMP KEY XELFIN CROWN DOOR KEY XFRESH BATTERI XGIANT DOOR CLAM OYSTER NUGGET SNAKE XGOLD NUGGET CHAIN EGGS RING TREE XTASTY FOOD XGREEN RADIUM EMERALD CLOVER XGREY TUBE XGLOWING RADIUM XHOLY GRAIL XIRON DOOR XLEAD SLUGS TUBE XMETAL TUBE XMING VASE XOAKEN CASK XQUARTZ SPHERE XLEATHER BOOK SACK XCRYSTAL BALL X4-LEAF CLOVER XPERSIAN RUG XPLATINU PYRAMID XRARE BOOK COINS SPICES XRUBY SHOES XRUSTY DOOR XSHADOWY FIGURE XSILKEN CLOAK XSILVER HORN DROPLET XSTAR SAPPHIR XSTEEL SWORD SAFE GRATE XTINY DOOR RING KEY BOTTLE BIRD CAKES TUBE XTREASUR CHEST XVELVET PILLOW XVENDING MACHINE XWICKER CAGE XWOODEN BOAT POLE CASK XWORN-OU BATTERI X-1 X0 X X END_OF_advdat if test 132545 -ne `wc -c