[comp.sources.games] v11i030: adven2 - generic adventure 551, Part04/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 30
Archive-name: adven2/Part04
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 4 (of 7)."
# Contents:  aamain.f.xab advent.doc
# Wrapped by billr@saab on Wed Aug 22 16:47:42 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'aamain.f.xab' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'aamain.f.xab'\"
else
echo shar: Extracting \"'aamain.f.xab'\" \(41617 characters\)
sed "s/^X//" >'aamain.f.xab' <<'END_OF_FILE'
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_FILE
if test 41617 -ne `wc -c <'aamain.f.xab'`; then
    echo shar: \"'aamain.f.xab'\" unpacked with wrong size!
fi
# end of 'aamain.f.xab'
fi
if test -f 'advent.doc' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'advent.doc'\"
else
echo shar: Extracting \"'advent.doc'\" \(4732 characters\)
sed "s/^X//" >'advent.doc' <<'END_OF_FILE'
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<<edit iors.c as instructed in the iors.f file!!!!!>>
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_FILE
if test 4732 -ne `wc -c <'advent.doc'`; then
    echo shar: \"'advent.doc'\" unpacked with wrong size!
fi
# end of 'advent.doc'
fi
echo shar: End of archive 4 \(of 7\).
cp /dev/null ark4isdone
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