[comp.sources.games] v11i028: adven2 - generic adventure 551, Part02/07

billr@saab.CNA.TEK.COM (Bill Randle) (08/23/90)

Submitted-by: Doug McDonald <mcdonald@aries.scs.uiuc.edu>
Posting-number: Volume 11, Issue 28
Archive-name: adven2/Part02
Supersedes: adven: Volume 9, Issue 89-96



#! /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 <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 2 (of 7)."
# Contents:  aamain.f.xaa combine.sh makefile
# Wrapped by billr@saab on Wed Aug 22 16:47:40 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'aamain.f.xaa' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'aamain.f.xaa'\"
else
echo shar: Extracting \"'aamain.f.xaa'\" \(56404 characters\)
sed "s/^X//" >'aamain.f.xaa' <<'END_OF_FILE'
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 MAXLOC<N<=500   N-MAXLOC IS USED IN A COMPUTED GOTO
XC                                       TO A SECTION OF SPECIAL CODE.
XC               IF N>500        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 0<M<100      IT IS DONE WITH M% PROBABILITY.
XC               IF M=100        UNCONDITIONAL, BUT FORBIDDEN TO DWARVES.
XC               IF 100<M<=200   HE MUST BE CARRYING OBJECT M-100.
XC               IF 200<M<=300   MUST BE CARRYING OR IN SAME ROOM AS M-200.
XC               IF 300<M<=400   PROP(M MOD 100) MUST *NOT* BE 0.
XC               IF 400<M<=500   PROP(M MOD 100) MUST *NOT* BE 1.
XC               IF 500<M<=600   PROP(M MOD 100) MUST *NOT* BE 2, ETC.
XC       IF THE CONDITION (IF ANY) IS NOT MET, THEN THE NEXT *DIFFERENT*
XC       "DESTINATION" VALUE IS USED (UNLESS IT FAILS TO MEET *ITS* CONDITIONS,
XC       IN WHICH CASE THE NEXT IS FOUND, ETC.).  TYPICALLY, THE NEXT DEST WILL
XC       BE FOR ONE OF THE SAME VERBS, SO THAT ITS ONLY USE IS AS THE ALTERNATE
XC       DESTINATION FOR THOSE VERBS.  FOR INSTANCE:
XC               15      110022  29      31      34      35      23      43
XC               15      14      29
XC       THIS SAYS THAT, FROM LOC 15, ANY OF THE VERBS 29, 31, ETC., WILL TAKE
XC       HIM TO 22 IF HE'S CARRYING OBJECT 10, AND OTHERWISE WILL GO TO 14.
XC               11      303008  49
XC               11      9       50
XC       THIS SAYS THAT, FROM 11, 49 TAKES HIM TO 8 UNLESS PROP(3)=0, IN WHICH
XC       CASE HE GOES TO 9.  VERB 50 TAKES HIM TO 9 REGARDLESS OF PROP(3).
XC       (SEE DESCRIPTION FOR SECTION 14 FOR A SCHEMATIC OF TABLES.)
XC
XC  SECTION 5: OBJECT DESCRIPTIONS.  EACH LINE CONTAINS A NUMBER (N), A TAB,
XC       AND A MESSAGE.  IF N IS FROM 1 TO MAXOBJ, THE MESSAGE IS THE "INVENTORY"
XC       MESSAGE FOR OBJECT N.  OTHERWISE, N SHOULD BE 0000, 1000, 2000, ETC., AN
XC       THE MESSAGE SHOULD BE THE DESCRIPTION OF THE PRECEDING OBJECT WHEN ITS
XC       PROP VALUE IS N/1000.  THE N/1000 IS USED ONLY TO DISTINGUISH MULTIPLE
XC       MESSAGES FROM MULTI-LINE MESSAGES; THE PROP INFO ACTUALLY REQUIRES ALL
XC       MESSAGES FOR AN OBJECT TO BE PRESENT AND CONSECUTIVE.  PROPERTIES WHICH
XC       PRODUCE NO MESSAGE SHOULD BE GIVEN THE MESSAGE "<$$<".  NOTE THAT
XC       OBJECTS WITH N>100 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
END_OF_FILE
if test 56404 -ne `wc -c <'aamain.f.xaa'`; then
    echo shar: \"'aamain.f.xaa'\" unpacked with wrong size!
fi
# end of 'aamain.f.xaa'
fi
if test -f 'combine.sh' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'combine.sh'\"
else
echo shar: Extracting \"'combine.sh'\" \(290 characters\)
sed "s/^X//" >'combine.sh' <<'END_OF_FILE'
X#! /bin/sh
X#
X# combine split source and data files into their original
X#
Xcat advdat.xaa advdat.xab advdat.xac > ADVDAT
Xrm advdat.xaa advdat.xab advdat.xac
Xcat aamain.f.xaa aamain.f.xab > aamain.f
Xrm aamain.f.xaa aamain.f.xab
Xcat asubs.f.xaa asubs.f.xab > asubs.f
Xrm asubs.f.xaa asubs.f.xab
END_OF_FILE
if test 290 -ne `wc -c <'combine.sh'`; then
    echo shar: \"'combine.sh'\" unpacked with wrong size!
fi
chmod +x 'combine.sh'
# end of 'combine.sh'
fi
if test -f 'makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'makefile'\"
else
echo shar: Extracting \"'makefile'\" \(181 characters\)
sed "s/^X//" >'makefile' <<'END_OF_FILE'
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_FILE
if test 181 -ne `wc -c <'makefile'`; then
    echo shar: \"'makefile'\" unpacked with wrong size!
fi
# end of 'makefile'
fi
echo shar: End of archive 2 \(of 7\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 3 4 5 6 7 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 7 archives.
    echo "now type 'sh combine.sh'"
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0