		(HERE.EQ.FDOOR).AND.INQSTF) {
		GO TO 27100
		}
	CALL RSPEAK(799)			#NO ONE LISTENS.
	PRSCON=1
	RETURN
#
27100	K=1					#POINTER INTO ANSSTR.
	DO J=1,28,2 {				#CHECK ANSWERS.
	  NEWK=K+ANSWER(J+1)			#COMPUTE NEXT K.
	  IF(QUESNO.NE.ANSWER(J)) GO TO 27300	#ONLY CHECK PROPER ANS.
	  I=PRSCON-1				#SCAN ANSWER.
	  DO L=K,NEWK-1 {
27150	    I=I+1				#SKIP INPUT BLANKS.
	    IF(I.GT.INLNT) GO TO 27300		#END OF INPUT? LOSE.
	    IF(INBUF(I).EQ.' ') GO TO 27150
	    IF(INBUF(I).NE.ANSSTR(L)) GO TO 27300
	    }
	  GO TO 27500				#RIGHT ANSWER.
27300	K=NEWK
	}
#
	PRSCON=1				#KILL REST OF LINE.
	NQATT=NQATT+1				#WRONG, CRETIN.
	IF(NQATT.GE.5) GO TO 27400		#TOO MANY WRONG?
	CALL RSPEAK(800+NQATT)			#NO, TRY AGAIN.
	RETURN
#
27400	CALL RSPEAK(826)			#ALL OVER.
	CFLAG(CEVINQ)=.FALSE.			#LOSE.
	RETURN
#
27500	PRSCON=1				#KILL REST OF LINE.
	CORRCT=CORRCT+1				#GOT IT RIGHT.
	CALL RSPEAK(800)			#HOORAY.
	IF(CORRCT.GE.3) GO TO 27600		#WON TOTALLY?
	CTICK(CEVINQ)=2				#NO, START AGAIN.
	QUESNO=MOD(QUESNO+3,8)
	NQATT=0
	CALL RSPEAK(769)			#ASK NEXT QUESTION.
	CALL RSPEAK(770+QUESNO)
	RETURN
#
27600	CALL RSPEAK(827)			#QUIZ OVER,
	CFLAG(CEVINQ)=.FALSE.
	OFLAG2(QDOOR)=OFLAG2(QDOOR).OR.OPENBT	#OPEN DOOR.
	RETURN
#
# v97 - rname : give the current room name
#
28000	call rspeak((rdesc2-here))
	return
		END
# TAKE-- BASIC TAKE SEQUENCE
#
# TAKE AN OBJECT (FOR VERBS TAKE, PUT, DROP, READ, ETC.)
#
	LOGICAL FUNCTION TAKE(FLG)
#
# DECLARATIONS
#
	IMPLICIT INTEGER (A-Z)
	LOGICAL FLG,OBJACT,OAPPLI,QOPEN,QHERE
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
	COMMON /STAR/ MBASE,STRBIT
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
		NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
		TOOLBT,TURNBT,ONBT
	COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
		WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
		TCHBT,VEHBT,SCHBT
#
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# FUNCTIONS AND DATA
#
	QOPEN(O)=AND(OFLAG2(O),OPENBT).NE.0

# TAKE, PAGE 2
#
	TAKE=.FALSE.				#ASSUME LOSES.
	OA=OACTIO(PRSO)				#GET OBJECT ACTION.
	IF(PRSO.LE.STRBIT) GO TO 100	#STAR?
	TAKE=OBJACT(X)			#YES, LET IT HANDLE.
	RETURN
#
100	X=OCAN(PRSO)				#INSIDE?
	IF(PRSO.NE.AVEHIC(WINNER)) GO TO 400	#HIS VEHICLE?
	CALL RSPEAK(672)			#DUMMY.
	RETURN
#
400	IF(AND(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 500	#TAKEABLE?
	IF(.NOT.OAPPLI(OA,0)) CALL RSPEAK(552+RND(5))
	RETURN
#
# OBJECT IS TAKEABLE AND IN POSITION TO BE TAKEN.
#
500	IF((X.NE.0).OR. QHERE(PRSO,HERE)) GO TO 600
	IF(OADV(PRSO).EQ.WINNER) CALL RSPEAK(557)	#ALREADY GOT IT?
	RETURN
#
600	MXLOAD=MXLOAD				#ADJUST MXLOAD (HOW???)
	IF(((X.NE.0).AND.(OADV(X).EQ.WINNER)).OR.
		((WEIGHT(0,PRSO,WINNER)+OSIZE(PRSO)).LE.MXLOAD)) {
		GO TO 700
		}
	CALL RSPEAK(558)			#TOO MUCH WEIGHT.
	RETURN
#
700	TAKE=.TRUE.				#AT LAST.
	IF(OAPPLI(OA,0)) RETURN			#DID IT HANDLE?
	CALL NEWSTA(PRSO,0,0,0,WINNER)		#TAKE OBJECT FOR WINNER.
	OFLAG2(PRSO)=OR(OFLAG2(PRSO),TCHBT)	#HAS BEEN TOUCHED.
	CALL SCRUPD(OFVAL(PRSO))		#UPDATE SCORE.
	OFVAL(PRSO)=0				#CANT BE SCORED AGAIN.
	IF(FLG) CALL RSPEAK(559)		#TELL TAKEN.
	RETURN
#
	END

# DROP- DROP VERB PROCESSOR
#
# DECLARATIONS
#
	LOGICAL FUNCTION DROP(Z)
	IMPLICIT INTEGER (A-Z)
	LOGICAL F,PUT,OBJACT
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# ROOMS
#
	COMMON /RINDEX/ WHOUS,LROOM,CELLA
	COMMON /RINDEX/ MTROL,MAZE1	
	COMMON /RINDEX/ MGRAT,MAZ15	
	COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
	COMMON /RINDEX/ STREA,EGYPT,ECHOR
	COMMON /RINDEX/ TSHAF	
	COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
	COMMON /RINDEX/ CAROU	
	COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
	COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
	COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
	COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
	COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
	COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
	COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
	COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
	COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
	COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
	COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
		NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
		TOOLBT,TURNBT,ONBT
	COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
		WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
		TCHBT,VEHBT,SCHBT
#
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# VERBS
#
	COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
	COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
	COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
	COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
	COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
	COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
	COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
	COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
	COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
	COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
	COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
	COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
	COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW

# DROP, PAGE 2
#
	DROP=.TRUE.				#ASSUME WINS.
	X=OCAN(PRSO)				#GET CONTAINER.
	IF(X.EQ.0) GO TO 200			#IS IT INSIDE?
	IF(OADV(X).NE.WINNER) GO TO 1000	#IS HE CARRYING CON?
	IF(AND(OFLAG2(X),OPENBT).NE.0) GO TO 300	#IS IT OPEN?
	CALL RSPSUB(525,ODESC2(X))		#CANT REACH.
	RETURN
#
200	IF(OADV(PRSO).NE.WINNER) GO TO 1000	#IS HE CARRYING OBJ?
300	IF(AVEHIC(WINNER).EQ.0) GO TO 400	#IS HE IN VEHICLE?
	PRSI=AVEHIC(WINNER)			#YES,
	F=PUT(.TRUE.)				#DROP INTO VEHICLE.
	RETURN					#DONE.
#
400	CALL NEWSTA(PRSO,0,HERE,0,0)		#DROP INTO ROOM.
	IF(HERE.EQ.MTREE) CALL NEWSTA(PRSO,0,FORE3,0,0)
500	IF(OBJACT(X)) RETURN			#DID IT HANDLE?
	I=0					#ASSUME NOTHING TO SAY.
	IF(PRSA.EQ.DROPW) I=528
	IF(PRSA.EQ.THROWW) I=529
	IF((I.NE.0).AND.(HERE.EQ.MTREE)) I=659
	CALL RSPSUB(I,ODESC2(PRSO))
	RETURN
#
1000	CALL RSPEAK(527)			#DONT HAVE IT.
	RETURN
#
	END

# PUT- PUT VERB PROCESSOR
#
# DECLARATIONS
#
	LOGICAL FUNCTION PUT(FLG)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QOPEN,QHERE,OBJACT,FLG
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# MISCELLANEOUS VARIABLES
#
	COMMON /STAR/ MBASE,STRBIT
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
		NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
		TOOLBT,TURNBT,ONBT
	COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
		WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
		TCHBT,VEHBT,SCHBT
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# VERBS
#
	COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
	COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
	COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
	COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
	COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
	COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
	COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
	COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
	COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
	COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
	COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
	COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
	COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
#
# FUNCTIONS AND DATA
#
	QOPEN(R)=AND(OFLAG2(R),OPENBT).NE.0

# PUT, PAGE 2
#
	PUT=.FALSE.
	IF((PRSO.LE.STRBIT).AND.(PRSI.LE.STRBIT)) GO TO 200
	IF(.NOT.OBJACT(X)) CALL RSPEAK(560)		#STAR
	PUT=.TRUE.
	RETURN
#
200	IF(QOPEN(PRSI).OR.(AND(OFLAG1(PRSI),(DOORBT+CONTBT)).NE.0)
		.OR.(AND(OFLAG2(PRSI),VEHBT).NE.0)) GO TO 300
	CALL RSPEAK(561)			#CANT PUT IN THAT.
	RETURN
#
300	IF(QOPEN(PRSI)) GO TO 400		#IS IT OPEN?
	CALL RSPEAK(562)			#NO, JOKE
	RETURN
#
400	IF(PRSO.NE.PRSI) GO TO 500		#INTO ITSELF?
	CALL RSPEAK(563)			#YES, JOKE.
	RETURN
#
500	IF(OCAN(PRSO).NE.PRSI) GO TO 600	#ALREADY INSIDE.
	CALL RSPSB2(564,ODESC2(PRSO),ODESC2(PRSI))
	PUT=.TRUE.
	RETURN
#
600	IF((WEIGHT(0,PRSO,0)+WEIGHT(0,PRSI,0)+OSIZE(PRSO))
		.LE.OCAPAC(PRSI)) GO TO 700	#NOT TOO FULL?
	CALL RSPEAK(565)			#THEN CANT DO IT.
	RETURN
#
# NOW SEE IF OBJECT (OR ITS CONTAINER) IS IN ROOM
#
700	J=PRSO					#START SEARCH.
725	IF(QHERE(J,HERE)) GO TO 750		#IS IT HERE?
	J=OCAN(J)
	IF(J.NE.0) GO TO 725			#MORE TO DO?
	GO TO 800				#NO, SCH FAILS.
#
750	SVO=PRSO				#SAVE PARSER.
	SVI=PRSI
	PRSA=TAKEW
	PRSI=0
	IF(.NOT.TAKE(.FALSE.)) RETURN		#TAKE OBJECT.
	PRSA=PUTW
	PRSO=SVO
	PRSI=SVI
	GO TO 1000
#
# NOW SEE IF OBJECT IS ON PERSON.
#
800	IF(OCAN(PRSO).EQ.0) GO TO 1000		#INSIDE?
	IF(QOPEN(OCAN(PRSO))) GO TO 900		#OPEN?
	CALL RSPSUB(566,ODESC2(PRSO))		#LOSE.
	RETURN
#
900	CALL SCRUPD(OFVAL(PRSO))		#SCORE OBJECT.
	OFVAL(PRSO)=0
	CALL NEWSTA(PRSO,0,0,0,WINNER)		#TEMPORARILY ON WINNER.
#
1000	IF(OBJACT(X)) RETURN			#NO, GIVE OBJECT A SHOT.
	CALL NEWSTA(PRSO,2,0,PRSI,0)		#CONTAINED INSIDE.
	PUT=.TRUE.
	RETURN
#
	END

# VALUAC- HANDLES VALUABLES/EVERYTHING
#
# DECLARATIONS
#
	SUBROUTINE VALUAC(V)
	IMPLICIT INTEGER (A-Z)
	common /chan/inpch,outch
	common /spare/ccflg
	LOGICAL LIT,F,F1,TAKE,PUT,DROP,NOTVAL,QHERE
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
		NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
		TOOLBT,TURNBT,ONBT
	COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
		WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
		TCHBT,VEHBT,SCHBT
#
# VERBS
#
	COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
	COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
	COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
	COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
	COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
	COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
	COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
	COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
	COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
	COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
	COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
	COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
	COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
#
# FUNCTIONS AND DATA
#
	NOTVAL(R)=(SAVEP.EQ.V).AND.(OTVAL(R).LE.0)

# VALUAC, PAGE 2
#
	F=.TRUE.				#ASSUME NO ACTIONS.
	I=579					#ASSUME NOT LIT.
	IF(.NOT.LIT(HERE)) GO TO 4000		#IF NOT LIT, PUNT.
	I=677					#ASSUME WRONG VERB.
	SAVEP=PRSO				#SAVE PRSO.
	SAVEH=HERE				#SAVE HERE.
#
100	IF(PRSA.NE.TAKEW) GO TO 1000		#TAKE EVERY/VALUA?
	DO PRSO=1,OLNT {			#LOOP THRU OBJECTS.
	  IF(.NOT.QHERE(PRSO,HERE).OR.
		(AND(OFLAG1(PRSO),VISIBT).EQ.0).OR.
		(AND(OFLAG2(PRSO),ACTRBT).NE.0).OR.
			NOTVAL(PRSO)) NEXT
	  IF((AND(OFLAG1(PRSO),TAKEBT).EQ.0).AND.
		(AND(OFLAG2(PRSO),TRYBT).EQ.0)) NEXT
	  F=.FALSE.
	  CALL RSPSUB(580,ODESC2(PRSO))
	  write(outch,400)
	  ccflg=.true.
	  F1=TAKE(.TRUE.)
	  IF(SAVEH.NE.HERE) RETURN
400	format('   ')
	}
	GO TO 3000
#
1000	IF(PRSA.NE.DROPW) GO TO 2000		#DROP EVERY/VALUA?
	DO PRSO=1,OLNT {
	  IF((OADV(PRSO).NE.WINNER).OR.NOTVAL(PRSO)) {
		NEXT
		}
	  F=.FALSE.
	  CALL RSPSUB(580,ODESC2(PRSO))
	  write(outch,400)
	  ccflg=.true.
	  F1=DROP(.TRUE.)
	  IF(SAVEH.NE.HERE) RETURN
	  }
	GO TO 3000
#
2000	IF(PRSA.NE.PUTW) GO TO 3000		#PUT EVERY/VALUA?
	DO PRSO=1,OLNT {			#LOOP THRU OBJECTS.
	  IF((OADV(PRSO).NE.WINNER)
		.OR.(PRSO.EQ.PRSI).OR.NOTVAL(PRSO).OR.
		(AND(OFLAG1(PRSO),VISIBT).EQ.0)) NEXT
	  F=.FALSE.
	  CALL RSPSUB(580,ODESC2(PRSO))
	  write(outch,400)
 	  ccflg=.true.
	  F1=PUT(.TRUE.)
	  IF(SAVEH.NE.HERE) RETURN
	  }
#
3000	I=581
	IF(SAVEP.EQ.V) I=582			#CHOOSE MESSAGE.
4000	IF(F) CALL RSPEAK(I)			#IF NOTHING, REPORT.
	RETURN
	END

# SAVE- SAVE GAME STATE
#
# DECLARATIONS
#
	SUBROUTINE SAVEGM
	IMPLICIT INTEGER (A-Z)
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
# SCREEN OF LIGHT
#
	COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
#
# MISCELLANEOUS VARIABLES
#
	COMMON /VERS/ VMAJ,VMIN,VEDIT
	COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
#
# ROOMS
#
	COMMON /ROOMS/ RLNT,RDESC2,RDESC1(215),REXIT(215),
		RACTIO(215),RVAL(215),RFLAG(215)
	INTEGER RRAND(215)
	EQUIVALENCE (RVAL,RRAND)
#
# EXITS
#
	COMMON /EXITS/ XLNT,travel(870)
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
#
# CLOCK INTERRUPTS
#
	LOGICAL CFLAG
	COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
#
#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
	COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# FLAGS
#
	LOGICAL FLAGS(50)
	INTEGER SWITCH(27)
	COMMON /FINDEX/ FLAGS,SWITCH
#
	PRSWON=.FALSE.				#DISABLE GAME.
	OPEN (UNIT=1,FILE='DSAVE.DAT',
		ACCESS='SEQOUT',MODE='IMAGE',ERR=100)
#
	CALL GTTIME(I)				#GET TIME.
	WRITE(1) VMAJ,VMIN,VEDIT
	WRITE(1) WINNER,HERE,THFPOS,TELFLG,THFFLG,THFACT,
		SWDACT,SWDSTA
	WRITE(1) I,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC
	WRITE(1) ODESC1,ODESC2,OFLAG1,OFLAG2,OFVAL,OTVAL,
		OSIZE,OCAPAC,OROOM,OADV,OCAN
	WRITE(1) RVAL,RFLAG
	WRITE(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG
	WRITE(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK
#
	CLOSE(UNIT=1,DISPOSE='SAVE')
	CALL RSPEAK(597)
	RETURN
#
100	CALL RSPEAK(598)			#CANT DO IT.
	RETURN
	END

# RESTORE- RESTORE GAME STATE
#
# DECLARATIONS
#
	SUBROUTINE RSTRGM
	IMPLICIT INTEGER (A-Z)
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
# SCREEN OF LIGHT
#
	COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
#
# MISCELLANEOUS VARIABLES
#
	COMMON /VERS/ VMAJ,VMIN,VEDIT
	COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
#
# ROOMS
#
	COMMON /ROOMS/ RLNT,RDESC2,RDESC1(215),REXIT(215),
		RACTIO(215),RVAL(215),RFLAG(215)
	INTEGER RRAND(215)
	EQUIVALENCE (RVAL,RRAND)
#
# EXITS
#
	COMMON /EXITS/ XLNT,TRAVEL(870)
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
#
# CLOCK INTERRUPTS
#
	LOGICAL CFLAG
	COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
#
#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
	COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# FLAGS
#
	LOGICAL flags(50)
	INTEGER switch(27)
	COMMON /FINDEX/ FLAGS,SWITCH
#
	PRSWON=.FALSE.			#DISABLE GAME.
	OPEN (UNIT=1,FILE='DSAVE.DAT',
		ACCESS='SEQIN',MODE='IMAGE',ERR=100)
#
	READ(1) I,J,K
	IF((I.NE.VMAJ).OR.(J.NE.VMIN)) GO TO 200
#
	READ(1) WINNER,HERE,THFPOS,TELFLG,THFFLG,THFACT,
		SWDACT,SWDSTA
	READ(1) PLTIME,MOVES,DEATHS,RWSCOR,EGSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,FROMDR,SCOLRM,SCOLAC
	READ(1) ODESC1,ODESC2,OFLAG1,OFLAG2,OFVAL,OTVAL,
		OSIZE,OCAPAC,OROOM,OADV,OCAN
	READ(1) RVAL,RFLAG
	READ(1) AROOM,ASCORE,AVEHIC,ASTREN,AFLAG
	READ(1) FLAGS,SWITCH,VPROB,CFLAG,CTICK
#
	CLOSE(UNIT=1,DISPOSE='SAVE')
	CALL RSPEAK(599)
	RETURN
#
100	CALL RSPEAK(598)			#CANT DO IT.
	RETURN
#
200	CALL RSPEAK(600)			#OBSOLETE VERSION
	CLOSE (UNIT=1,DISPOSE='SAVE')
	RETURN
	END

# WALK- MOVE IN SPECIFIED DIRECTION
#
# DECLARATIONS
#
	LOGICAL FUNCTION WALK(X)
	IMPLICIT INTEGER(A-Z)
	LOGICAL FINDXT,QOPEN,LIT,PROB,MOVETO,RMINFO
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# ROOMS
#
	COMMON /ROOMS/ RLNT,RDESC2,RDESC1(215),REXIT(215),
		RACTIO(215),RVAL(215),RFLAG(215)
	INTEGER RRAND(215)
	EQUIVALENCE (RVAL,RRAND)
#
	COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
		RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
#
# EXITS
#
	COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ
	EQUIVALENCE (XFLAG,XOBJ)
#
	COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP,
		XNORTH,XSOUTH,XENTER,XEXIT
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
		NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
		TOOLBT,TURNBT,ONBT
	COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
		WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
		TCHBT,VEHBT,SCHBT
#
	LOGICAL CFLAG
	COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
#
	COMMON /CINDEX/ CEVCUR,CEVMNT,CEVLNT,CEVMAT,CEVCND,
		CEVBAL,CEVBRN,CEVFUS,CEVLED,CEVSAF,CEVVLG,
		CEVGNO,CEVBUC,CEVSPH,CEVEGH,
			CEVFOR,CEVSCL,CEVZGI,CEVZGO,CEVSTE,
		CEVMRS,CEVPIN,CEVINQ,CEVFOL

#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT
	COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
#
# ADVENTURERS
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# FLAGS
#
	LOGICAL flags(50)
	EQUIVALENCE (FLAGS(1),TROLLF)
	LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
	LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
	LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
	LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
	LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
	LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
	LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
	LOGICAL FOLLWF,SPELLF,sprf
	COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
		DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
		MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
			EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
		GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
		GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
		MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
		follwf,spellf,sprf(6)
	COMMON /FINDEX/ BTIEF,BINFF
	COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
	COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
	COMMON /FINDEX/ MDIR,MLOC,POLEUF
	COMMON /FINDEX/ QUESNO,NQATT,CORRCT
	COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL
#
# FUNCTIONS AND DATA
#
	QOPEN(O)=AND(OFLAG2(O),OPENBT).NE.0

# WALK, PAGE 2
#
	WALK=.TRUE.				#ASSUME WINS.
	IF((WINNER.NE.PLAYER).OR.LIT(HERE).OR.PROB(25,25)) {
		GO TO 500
		}
	IF(.NOT.FINDXT(PRSO,HERE)) GO TO 450	#INVALID EXIT? GRUE!
	GO TO (400,200,100,300),XTYPE		#DECODE EXIT TYPE.
	CALL BUG(9,XTYPE)
#
100	IF(CXAPPL(XACTIO).NE.0) GO TO 400	#CEXIT... RETURNED ROOM?
	IF(FLAGS(XFLAG)) GO TO 400		#NO, FLAG ON?
200	CALL JIGSUP(523)			#BAD EXIT, GRUE!
	RETURN
#
300	IF(CXAPPL(XACTIO).NE.0) GO TO 400	#DOOR... RETURNED ROOM?
	IF(QOPEN(XOBJ)) GO TO 400		#NO, DOOR OPEN?
	CALL JIGSUP(523)			#BAD EXIT, GRUE!
	RETURN
#
400	IF(LIT(XROOM1)) GO TO 900		#VALID ROOM, IS IT LIT?
450	CALL JIGSUP(522)			#NO, GRUE!
	RETURN
#
# ROOM IS LIT, OR WINNER IS NOT PLAYER (NO GRUE).
#
500	IF(FINDXT(PRSO,HERE)) GO TO 550		#EXIT EXIST?
525	XSTRNG=524				#ASSUME WALL.
	IF(PRSO.EQ.XUP) XSTRNG=679		#IF UP, CANT.
	IF(PRSO.EQ.XDOWN) XSTRNG=680		#IF DOWN, CANT.
	IF((RFLAG(HERE).AND.RNWALL).EQ.0) XSTRNG=678
	CALL RSPEAK(XSTRNG)
	RETURN
#
550	GO TO (900,600,700,800),XTYPE	#BRANCH ON EXIT TYPE.
	CALL BUG(9,XTYPE)
#
600	CALL RSPEAK(XSTRNG)			#NO EXIT... TELL WHY.
	RETURN
#
700	IF(CXAPPL(XACTIO).NE.0) GO TO 900	#CEXIT... RETURNED ROOM?
	IF(FLAGS(XFLAG)) GO TO 900		#NO, FLAG ON?
	IF(XSTRNG.EQ.0) GO TO 525		#IF NO REASON, USE STD.
	CALL RSPEAK(XSTRNG)			#DENY EXIT.
	RETURN
#
800	IF(CXAPPL(XACTIO).NE.0) GO TO 900	#DOOR... RETURNED ROOM?
	IF(QOPEN(XOBJ)) GO TO 900		#NO, DOOR OPEN?
	IF(XSTRNG.EQ.0) XSTRNG=525		#IF NO REASON, USE STD.
	CALL RSPSUB(XSTRNG,ODESC2(XOBJ))
	RETURN
#
900	WALK=MOVETO(XROOM1,WINNER)		#MOVE TO ROOM.
	IF(WALK) WALK=RMINFO(.FALSE.)		#DESCRIBE ROOM.
	RETURN
	END

# CXAPPL- CONDITIONAL EXIT PROCESSORS
#
# DECLARATIONS
#
	INTEGER FUNCTION CXAPPL(RI)
	IMPLICIT INTEGER (A-Z)
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# ROOMS
#
	COMMON /ROOMS/ RLNT,RDESC2,RDESC1(215),REXIT(215),
		RACTIO(215),RVAL(215),RFLAG(215)
	INTEGER RRAND(215)
	EQUIVALENCE (RVAL,RRAND)
#
	COMMON /RINDEX/ WHOUS,LROOM,CELLA
	COMMON /RINDEX/ MTROL,MAZE1	
	COMMON /RINDEX/ MGRAT,MAZ15	
	COMMON /RINDEX/ FORE1,FORE3,CLEAR,RESER
	COMMON /RINDEX/ STREA,EGYPT,ECHOR
	COMMON /RINDEX/ TSHAF	
	COMMON /RINDEX/ BSHAF,MMACH,DOME,MTORC
	COMMON /RINDEX/ CAROU	
	COMMON /RINDEX/ RIDDL,LLD2,TEMP1,TEMP2,MAINT
	COMMON /RINDEX/ BLROO,TREAS,RIVR1,RIVR2,RIVR3,MCYCL
	COMMON /RINDEX/ RIVR4,RIVR5,FCHMP,FALLS,MBARR
	COMMON /RINDEX/ MRAIN,POG,VLBOT,VAIR1,VAIR2,VAIR3,VAIR4
	COMMON /RINDEX/ LEDG2,LEDG3,LEDG4,MSAFE,CAGER
	COMMON /RINDEX/ CAGED,TWELL,BWELL,ALICE,ALISM,ALITR
	COMMON /RINDEX/ MTREE,BKENT,BKVW,BKTWI,BKVAU,BKBOX
	COMMON /RINDEX/ CRYPT,TSTRS,MRANT,MREYE
	COMMON /RINDEX/ MRA,MRB,MRC,MRG,MRD,FDOOR
	COMMON /RINDEX/ MRAE,MRCE,MRCW,MRGE,MRGW,MRDW,INMIR
	COMMON /RINDEX/ SCORR,NCORR,PARAP,CELL,PCELL,NCELL
#
# EXITS
#
	COMMON /EXITS/ XLNT,travel(870)
#
	COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ
	EQUIVALENCE (XFLAG,XOBJ)
#
	COMMON /XPARS/ XRMASK,XDMASK,XFMASK,XFSHFT,XASHFT,
		XELNT(4),XNORM,XNO,XCOND,XDOOR,XLFLAG
#
	COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP,
		XNORTH,XSOUTH,XENTER,XEXIT
#
# OBJECTS
#
	COMMON /OBJCTS/ OLNT,ODESC1(250),ODESC2(250),ODESCO(250),
		OACTIO(250),OFLAG1(250),OFLAG2(250),OFVAL(250),
		OTVAL(250),OSIZE(250),OCAPAC(250),OROOM(250),
			OADV(250),OCAN(250),OREAD(250)
#
	COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
		NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
		TOOLBT,TURNBT,ONBT
	COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
		WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
		TCHBT,VEHBT,SCHBT
#
	COMMON /OINDEX/ GARLI,FOOD,GUNK,COAL,MACHI,DIAMO,TCASE,BOTTL
	COMMON /OINDEX/ WATER,ROPE,KNIFE,SWORD,LAMP,BLAMP,RUG
	COMMON /OINDEX/	LEAVE,TROLL,AXE
	COMMON /OINDEX/ RKNIF,KEYS,ICE,BAR
	COMMON /OINDEX/ COFFI,TORCH,TBASK,FBASK,IRBOX
	COMMON /OINDEX/ GHOST,TRUNK,BELL,BOOK,CANDL
	COMMON /OINDEX/ MATCH,TUBE,PUTTY,WRENC,SCREW,CYCLO,CHALI
	COMMON /OINDEX/ THIEF,STILL,WINDO,GRATE,DOOR
	COMMON /OINDEX/ HPOLE,LEAK,RBUTT,RAILI
	COMMON /OINDEX/ POT,STATU,IBOAT,DBOAT,PUMP,RBOAT
	COMMON /OINDEX/ STICK,BUOY,SHOVE,BALLO,RECEP,GUANO
	COMMON /OINDEX/ BROPE,HOOK1,HOOK2,SAFE,SSLOT,BRICK,FUSE
	COMMON /OINDEX/ GNOME,BLABE,DBALL,TOMB
	COMMON /OINDEX/ LCASE,CAGE,RCAGE,SPHER,SQBUT
	COMMON /OINDEX/ FLASK,POOL,SAFFR,BUCKE,ECAKE,ORICE,RDICE,BLICE
	COMMON /OINDEX/ ROBOT,FTREE,BILLS,PORTR,SCOL,ZGNOM
	COMMON /OINDEX/ EGG,BEGG,BAUBL,CANAR,BCANA
	COMMON /OINDEX/ YLWAL,RDWAL,PINDR,RBEAM
	COMMON /OINDEX/ ODOOR,QDOOR,CDOOR,NUM1,NUM8
	COMMON /OINDEX/ HANDS,WALL,LUNGS,SAILO,AVIAT,TEETH
	COMMON /OINDEX/ ITOBJ,EVERY,VALUA,OPLAY,WNORT,GWATE,MASTER
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# FLAGS
#
	LOGICAL TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF
	LOGICAL DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF
	LOGICAL MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF
	LOGICAL EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF
	LOGICAL GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF
	LOGICAL GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF
	LOGICAL MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF
	LOGICAL FOLLWF,SPELLF,sprf
	COMMON /FINDEX/ TROLLF,CAGESF,BUCKTF,CAROFF,CAROZF,LWTIDF,
		DOMEF,GLACRF,ECHOF,RIDDLF,LLDF,CYCLOF,
		MAGICF,LITLDF,SAFEF,GNOMEF,GNODRF,MIRRMF,
			EGYPTF,ONPOLF,BLABF,BRIEFF,SUPERF,BUOYF,
		GRUNLF,GATEF,RAINBF,CAGETF,EMPTHF,DEFLAF,
		GLACMF,FROBZF,ENDGMF,BADLKF,THFENF,SINGSF,
		MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
		follwf,spellf,sprf(6)
	COMMON /FINDEX/ BTIEF,BINFF
	COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVSND,RVGUA
	COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
	COMMON /FINDEX/ MDIR,MLOC,POLEUF
	COMMON /FINDEX/ QUESNO,NQATT,CORRCT
	COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL

# CXAPPL, PAGE 2
#
	CXAPPL=0				#NO RETURN.
	IF(RI.EQ.0) RETURN			#IF NO ACTION, DONE.
	GO TO (1000,2000,3000,4000,5000,6000,7000,
		8000,9000,10000,11000),RI	#BRANCH ON APP.
	CALL BUG(5,RI)
#
# C1- COFFIN-CURE
#
1000	EGYPTF=OADV(COFFI).NE.WINNER		#T IF NO COFFIN.
	RETURN
#
# C2- CAROUSEL EXIT
# C5- CAROUSEL OUT
#
2000	IF(CAROFF) RETURN			#IF FLIPPED, NOTHING.
2500	CALL RSPEAK(121)			#SPIN THE COMPASS.
5000	I=XELNT(XCOND)*RND(8)			#CHOOSE RANDOM EXIT.
	XROOM1=AND((TRAVEL(REXIT(HERE)+I)),XRMASK)
	CXAPPL=XROOM1				#RETURN EXIT.
	RETURN
#
# C3- CHIMNEY FUNCTION
#
3000	LITLDF=.FALSE.			#ASSUME HEAVY LOAD.
	J=0
	DO I=1,OLNT {			#COUNT OBJECTS.
	  IF(OADV(I).EQ.WINNER) J=J+1
	  }
#
	IF(J.GT.2) RETURN			#CARRYING TOO MUCH?
	XSTRNG=446				#ASSUME NO LAMP.
	IF(OADV(LAMP).NE.WINNER) RETURN		#NO LAMP?
	LITLDF=.TRUE.				#HE CAN DO IT.
