	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

# MIRPAN, PAGE 2
#
	MIRPAN=.TRUE.
	NUM=MRHERE(HERE)			#GET MIRROR NUM.
	IF(NUM.NE.0) GO TO 100			#ANY HERE?
	CALL RSPEAK(ST)				#NO, LOSE.
	RETURN
#
100	MRBF=0					#ASSUME MIRROR OK.
	IF(((NUM.EQ.1).AND..NOT.MR1F).OR.
		((NUM.EQ.2).AND..NOT.MR2F)) MRBF=1
	IF((PRSA.NE.MOVEW).AND.(PRSA.NE.OPENW)) GO TO 200
	CALL RSPEAK(ST+1)			#CANT OPEN OR MOVE.
	RETURN
#
200	IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND.
		(PRSA.NE.LOOKW))) GO TO 300
	CALL RSPEAK(844+MRBF)			#LOOK IN MIRROR.
	RETURN
#
300	IF(PRSA.NE.MUNGW) GO TO 400		#BREAK?
	CALL RSPEAK(ST+2+MRBF)			#DO IT.
	IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE.
	IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE.
	RETURN
#
400	IF(PNF.OR.(MRBF.EQ.0)) GO TO 500	#BROKEN MIRROR?
	CALL RSPEAK(846)
	RETURN
#
500	IF(PRSA.NE.PUSHW) GO TO 600		#PUSH?
	CALL RSPEAK(ST+3+NUM)
	RETURN
#
600	MIRPAN=.FALSE.			#CANT HANDLE IT.
	RETURN
#
	END
# PRINCR- PRINT CONTENTS OF ROOM
#
# DECLARATIONS
#
	SUBROUTINE PRINCR(FULL,RM)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QEMPTY,QHERE,FULL
#
# 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
#
#
# 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
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	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,ENDGMF,FROBZF,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,ENDGMF,FROBZF,BADLKF,THFENF,SINGSF,
		MRPSHF,MROPNF,WDOPNF,MR1F,MR2F,INQSTF,
		follwf,spellf,sprf(6)
	COMMON /FINDEX/ BTIEF,BINFF
	COMMON /FINDEX/ RVMNT,RVCLR,RVCYC,RVGUA,RVSND
	COMMON /FINDEX/ ORRUG,ORCAND,ORMTCH,ORLAMP
	COMMON /FINDEX/ MDIR,MLOC,POLEUF
	COMMON /FINDEX/ QUESNO,NQATT,CORRCT
	COMMON /FINDEX/ LCELL,PNUMB,ACELL,DCELL

# PRINCR, PAGE 2
#
	J=329				#ASSUME SUPERBRIEF FORMAT.
	DO I=1,OLNT {			#LOOP ON OBJECTS
	  IF(.NOT.QHERE(I,RM).OR.(AND(OFLAG1(I),(VISIBT+NDSCBT)).NE.
		VISIBT).OR.(I.EQ.AVEHIC(WINNER))) NEXT
	  IF(.NOT.FULL.AND.(SUPERF.OR.(BRIEFF.AND.
		(AND(RFLAG(HERE),RSEEN).NE.0)))) GO TO 200
#
# DO LONG DESCRIPTION OF OBJECT.
#
	  K=ODESCO(I)				#GET UNTOUCHED.
	  IF((K.EQ.0).OR.(AND(OFLAG2(I),TCHBT).NE.0)) K=ODESC1(I)
	  CALL RSPEAK(K)			#DESCRIBE.
	  NEXT
# DO SHORT DESCRIPTION OF OBJECT.
#
200	  CALL RSPSUB(J,ODESC2(I))	#YOU CAN SEE IT.
	  J=502
#
	  }
#
# NOW LOOP TO PRINT CONTENTS OF OBJECTS IN ROOM.
#
	DO I=1,OLNT {				#LOOP ON OBJECTS.
	  IF(.NOT.QHERE(I,RM).OR.(AND(OFLAG1(I),(VISIBT+NDSCBT)).NE.
		VISIBT)) NEXT
	  IF(AND(OFLAG2(I),ACTRBT).NE.0) CALL INVENT(OACTOR(I))
	  IF(((AND(OFLAG1(I),TRANBT).EQ.0).AND.(AND(OFLAG2(I),OPENBT)
		.EQ.0)).OR.QEMPTY(I)) NEXT
#
# OBJECT IS NOT EMPTY AND IS OPEN OR TRANSPARENT.
#
	  J=573
	  IF(I.NE.TCASE) GO TO 600		#TROPHY CASE?
	  J=574
	  IF((BRIEFF.OR.SUPERF).AND. .NOT.FULL) NEXT
600	  CALL PRINCO(I,J)			#PRINT CONTENTS.
#
	  }
	RETURN
#
	END

# INVENT- PRINT CONTENTS OF ADVENTURER
#
# DECLARATIONS
#
	SUBROUTINE INVENT(ADV)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QEMPTY
#
# 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
#
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR

# INVENT, PAGE 2
#
	I=575					#FIRST LINE.
	IF(ADV.NE.PLAYER) I=576			#IF NOT ME.
	DO J=1,OLNT {					#LOOP
	  IF((OADV(J).NE.ADV).OR.(AND(OFLAG1(J),VISIBT).EQ.0))
		NEXT
	  CALL RSPSUB(I,ODESC2(AOBJ(ADV)))
	  I=0
	  CALL RSPSUB(502,ODESC2(J))
	  }
#
	IF(I.EQ.0) GO TO 25			#ANY OBJECTS?
	IF(ADV.EQ.PLAYER) CALL RSPEAK(578)	#NO, TELL HIM.
	RETURN
#
25	DO J=1,OLNT {				#LOOP.
	  IF((OADV(J).NE.ADV).OR.(AND(OFLAG1(J),VISIBT).EQ.0).OR.
		((AND(OFLAG1(J),TRANBT).EQ.0).AND.
		(AND(OFLAG2(J),OPENBT).EQ.0))) NEXT
	  IF(.NOT.QEMPTY(J)) CALL PRINCO(J,573)	#IF NOT EMPTY, LIST.
	  }
	RETURN
#
	END

# PRINCO-	PRINT CONTENTS OF OBJECT
#
# DECLARATIONS
#
	SUBROUTINE PRINCO(OBJ,DESC)
	IMPLICIT INTEGER(A-Z)
#
# 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)
#
	CALL RSPSUB(DESC,ODESC2(OBJ))		#PRINT HEADER.
	DO I=1,OLNT {				#LOOP THRU.
	  IF(OCAN(I).EQ.OBJ) CALL RSPSUB(502,ODESC2(I))
	  }
	RETURN
#
	END

# MOVETO- MOVE PLAYER TO NEW ROOM
#
# DECLARATIONS
#
	LOGICAL FUNCTION MOVETO(NR,WHO)
	IMPLICIT INTEGER (A-Z)
	LOGICAL NLV,LHR,LNR
#
# 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
#
# 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 /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
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR

# MOVETO, PAGE 2
#
	MOVETO=.FALSE.				#ASSUME FAILS.
	LHR=ANd(RFLAG(HERE),RLAND).NE.0	#LAND  HERE FLAG.
	LNR=AND(RFLAG(NR),RLAND).NE.0		#LAND THERE FLAG.
	J=AVEHIC(WHO)			#HIS VEHICLE
#
	IF(J.NE.0) GO TO 100			#IN VEHICLE?
	IF(LNR) GO TO 500			#NO, GOING TO LAND?
	CALL RSPEAK(427)			#CAN'T GO WITHOUT VEHICLE.
	RETURN
#
100	BITS=0					#ASSUME NOWHERE.
	IF(J.EQ.RBOAT) BITS=RWATER		#IN BOAT?
	IF(J.EQ.BALLO) BITS=RAIR		#IN BALLOON?
	IF(J.EQ.BUCKE) BITS=RBUCK		#IN BUCKET?
	NLV=AND(RFLAG(NR),BITS).EQ.0	#GOT WRONG VEHICLE FLAG.
	IF((.NOT.LNR .AND.NLV) .OR.
		(LNR.AND.LHR.AND.NLV.AND.(BITS.NE.RLAND)))
		GO TO 800			#GOT WRONG VEHICLE?
#
500	MOVETO=.TRUE.				#MOVE SHOULD SUCCEED.
	IF(AND(RFLAG(NR),RMUNG).EQ.0) GO TO 600	#ROOM MUNGED?
	CALL RSPEAK(RRAND(NR))			#YES, TELL HOW.
	RETURN
#
600	IF(WHO.NE.PLAYER) CALL NEWSTA(AOBJ(WHO),0,NR,0,0)
	IF(J.NE.0) CALL NEWSTA(J,0,NR,0,0)
	HERE=NR
	AROOM(WHO)=HERE
	CALL SCRUPD(RVAL(NR))			#SCORE ROOM
	RVAL(NR)=0
	RETURN
#
800	CALL RSPSUB(428,ODESC2(J))		#WRONG VEHICLE.
	RETURN
	END

# SCORE-- PRINT OUT CURRENT SCORE
#
# DECLARATIONS
#
	SUBROUTINE SCORE(FLG)
	IMPLICIT INTEGER (A-Z)
	LOGICAL FLG
	INTEGER RANK(10),ERANK(5)
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
	COMMON /CHAN/ INPCH,OUTCH,DBCH
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# 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
#
# FUNCTIONS AND DATA
#
	DATA RANK/20,19,18,16,12,8,4,2,1,0/
	DATA ERANK/20,15,10,5,0/

# SCORE, PAGE 2
#
	AS=ASCORE(WINNER)
	IF(ENDGMF) GO TO 60			#ENDGAME?
	IF(FLG) WRITE(OUTCH,100)
	IF(.NOT.FLG) WRITE(OUTCH,110)
	IF(MOVES.NE.1) WRITE(OUTCH,120) AS,MXSCOR,MOVES
	IF(MOVES.EQ.1) WRITE(OUTCH,130) AS,MXSCOR,MOVES
	DO I=1,10 {
	  IF((AS*20/MXSCOR).GE.RANK(I)) GO TO 50
	  }
50	write(outch,90)
	CALL RSPEAK(484+I)
	RETURN
#
60	IF(FLG) WRITE(OUTCH,140)
	IF(.NOT.FLG) WRITE(OUTCH,150)
	WRITE(OUTCH,120) EGSCOR,EGMXSC,MOVES
	DO I=1,5 {
	  IF((EGSCOR*20/EGMXSC).GE.ERANK(I)) GO TO 80
	  }
80	write(outch,90)
	CALL RSPEAK(786+I)
	RETURN
#
90	format(' ')
100	FORMAT(' Your score would be')
110	FORMAT(' Your score is')
120	FORMAT('+',I4,' [total of',I4,' points], in',I5,' moves.')
130	FORMAT('+',I4,' [total of',I4,' points], in',I5,' move.')
140	FORMAT(' Your score in the endgame would be')
150	FORMAT(' Your score in the endgame is')
#
	END

# SCRUPD- UPDATE WINNER'S SCORE
#
# DECLARATIONS
#
	SUBROUTINE SCRUPD(N)
	IMPLICIT INTEGER (A-Z)
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
# CLOCK INTERRUPTS
#
	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
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# 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
#
	IF(ENDGMF) GO TO 100			#ENDGAME?
	ASCORE(WINNER)=ASCORE(WINNER)+N		#UPDATE SCORE
	RWSCOR=RWSCOR+N				#UPDATE RAW SCORE
	IF(ASCORE(WINNER).LT.(MXSCOR-(10*DEATHS))) RETURN
	if(.not.cflag(cevegh))CTICK(CEVEGH)=15
	CFLAG(CEVEGH)=.TRUE.			#TURN ON END GAME
	RETURN
#
100	EGSCOR=EGSCOR+N				#UPDATE EG SCORE.
	RETURN
	END

# FINDXT- FIND EXIT FROM ROOM
#
# DECLARATIONS
#
	LOGICAL FUNCTION FINDXT(DIR,RM)
	IMPLICIT INTEGER (A-Z)
#
# 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)
#
	COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ
	EQUIVALENCE (XFLAG,XOBJ)
#
	COMMON /XPARS/ XRMASK,XDMASK,XFMASK,XFSHFT,XASHFT,
		XELNT(4),XNORM,XNO,XCOND,XDOOR,XLFLAG
#
	FINDXT=.TRUE.				#ASSUME WINS.
	XI=REXIT(RM)				#FIND FIRST ENTRY.
	IF(XI.EQ.0) GO TO 1000			#NO EXITS?
#
100	I=TRAVEL(XI)				#GET ENTRY.
	XROOM1=AND(I,XRMASK)			#ISOLATE ROOM.
	XTYPE=AND((AND(I,NOT(XLFLAG))/XFSHFT),XFMASK)+1
	GO TO (110,120,130,130),XTYPE		#BRANCH ON ENTRY.
	CALL BUG(10,XTYPE)
#
130	XOBJ=AND(TRAVEL(XI+2),XRMASK)		#DOOR/CEXIT- GET OBJ/FLAG.
	XACTIO=TRAVEL(XI+2)/XASHFT
120	XSTRNG=TRAVEL(XI+1)			#DOOR/CEXIT/NEXIT - STRING.
110	XI=XI+XELNT(XTYPE)			#ADVANCE TO NEXT ENTRY.
	IF(AND(I,XDMASK).EQ.DIR) RETURN	#MATCH?
	IF(AND(I,XLFLAG).EQ.0) GO TO 100	#LAST ENTRY?
1000	FINDXT=.FALSE.				#YES, LOSE.
	RETURN
	END

# FWIM- FIND WHAT I MEAN
#
# DECLARATIONS
#
	INTEGER FUNCTION FWIM(F1,F2,RM,CON,ADV,NOCARE)
	IMPLICIT INTEGER (A-Z)
	LOGICAL NOCARE
#
# 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
#
	FWIM=0					#ASSUME NOTHING.
	DO I=1,OLNT {				#LOOP
	  IF(((RM.EQ.0).OR.(OROOM(I).NE.RM)) .AND.
		((ADV.EQ.0).OR.(OADV(I).NE.ADV)) .AND.
		((CON.EQ.0).OR.(OCAN(I).NE.CON)))
			NEXT
#
# OBJECT IS ON LIST... IS IT A MATCH?
#
	  IF(AND(OFLAG1(I),VISIBT).EQ.0) NEXT
	  IF((.NOT.NOCARE .AND.(AND(OFLAG1(I),TAKEBT).EQ.0)) .OR.
		((AND(OFLAG1(I),F1).EQ.0).AND.
		 (AND(OFLAG2(I),F2).EQ.0))) GO TO 500
	  IF(FWIM.EQ.0) GO TO 400			#ALREADY GOT SOMETHING?
	  FWIM=-FWIM				#YES, AMBIGUOUS.
	  RETURN
#
400	  FWIM=I					#NOTE MATCH.
#
# DOES OBJECT CONTAIN A MATCH?
#
500	  IF(AND(OFLAG2(I),OPENBT).EQ.0) NEXT		#CLOSED?
	  DO J=1,OLNT {					#NO, SEARCH CONTENTS.
	    IF((OCAN(J).NE.I).OR.(AND(OFLAG1(J),VISIBT).EQ.0) .OR.
		((AND(OFLAG1(J),F1).EQ.0).AND.
		 (AND(OFLAG2(J),F2).EQ.0))) NEXT
	    IF(FWIM.EQ.0) GO TO 600
	    FWIM=-FWIM
	    RETURN
#
600	    FWIM=J
	    }
	  }
	RETURN
	END

# YESNO- OBTAIN YES/NO ANSWER
#
# CALLED BY-
#
#	YES-IS-TRUE=YESNO(QUESTION,YES-STRING,NO-STRING)
#
	LOGICAL FUNCTION YESNO(Q,Y,N)
	IMPLICIT INTEGER(A-Z)
	COMMON /CHAN/ INPCH,OUTCH,DBCH
#
100	CALL RSPEAK(Q)				#ASK
	READ(INPCH,110) ANS			#GET ANSWER
110	FORMAT(A1)
	IF((ANS.EQ.'Y').OR.(ANS.EQ.'y')) GO TO 200
	IF((ANS.EQ.'N').OR.(ANS.EQ.'n')) GO TO 300
	CALL RSPEAK(6)				#SCOLD.
	GO TO 100
#
200	YESNO=.TRUE.				#YES,
	CALL RSPEAK(Y)				#OUT WITH IT.
	RETURN
#
300	YESNO=.FALSE.				#NO,
	CALL RSPEAK(N)				#LIKEWISE.
	RETURN
#
	END
# ROBADV-- STEAL WINNER'S VALUABLES
#
# DECLARATIONS
#
	INTEGER FUNCTION ROBADV(ADV,NR,NC,NA)
	IMPLICIT INTEGER (A-Z)
#
# 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
#
	ROBADV=0				#COUNT OBJECTS
	DO I=1,OLNT {
	  IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
		(AND(OFLAG2(I),SCRDBT).NE.0)) NEXT
	  CALL NEWSTA(I,0,NR,NC,NA)		#STEAL OBJECT
	  ROBADV=ROBADV+1
	  }
	RETURN
	END

# ROBRM-- STEAL ROOM VALUABLES
#
# DECLARATIONS
#
	INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
	IMPLICIT INTEGER (A-Z)
	LOGICAL PROB,QHERE
#
# 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
#
	ROBRM=0					#COUNT OBJECTS
	DO I=1,OLNT {				#LOOP ON OBJECTS.
	  IF(.NOT. QHERE(I,RM)) NEXT
	  IF((OTVAL(I).LE.0).OR.(AND(OFLAG2(I),SCRDBT).NE.0).OR.
		(AND(OFLAG1(I),VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
		GO TO 50
	  CALL NEWSTA(I,0,NR,NC,NA)
	  ROBRM=ROBRM+1
	  OFLAG2(I)=OFLAG2(I).OR.TCHBT
	  NEXT
50	  IF(AND(OFLAG2(I),ACTRBT).NE.0)
		ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
	  }
	RETURN
	END

# WINNIN-- SEE IF VILLAIN IS WINNING
#
# DECLARATIONS
#
	LOGICAL FUNCTION WINNIN(VL,HR)
	IMPLICIT INTEGER (A-Z)
	LOGICAL PROB
#
# 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)
#
	VS=OCAPAC(VL)			#VILLAIN STRENGTH
	PS=VS-FIGHTS(HR,.TRUE.)		#HIS MARGIN OVER HERO
	WINNIN=PROB(90,100)
	IF(PS.GT.3) RETURN		#+3... 90% WINNING
	WINNIN=PROB(75,85)
	IF(PS.GT.0) RETURN		#>0... 75% WINNING
	WINNIN=PROB(50,30)
	IF(PS.EQ.0) RETURN		#=0... 50% WINNING
	WINNIN=PROB(25,25)
	IF(VS.GT.1) RETURN		#ANY VILLAIN STRENGTH.
	WINNIN=PROB(10,0)
	RETURN
	END

# FIGHTS-- COMPUTE FIGHT STRENGTH
#
# DECLARATIONS
#
	INTEGER FUNCTION FIGHTS(H,FLG)
	IMPLICIT INTEGER (A-Z)
	LOGICAL FLG
#
# GAME STATE
#
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
# FUNCTIONS AND DATA
#
	DATA SMAX/7/,SMIN/2/
#
	FIGHTS=SMIN+((((SMAX-SMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
	IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
	RETURN
	END

# VILSTR-	COMPUTE VILLAIN STRENGTH
#
# DECLARATIONS
#
	INTEGER FUNCTION VILSTR(V)
	IMPLICIT INTEGER (A-Z)
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# 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 /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
#
# 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

# VILSTR, PAGE 2
#
	VILSTR=OCAPAC(V)
	IF(VILSTR.LE.0) RETURN
	IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
	THFENF=.FALSE.				#THIEF UNENGROSSED.
	VILSTR=MIN0(VILSTR,2)		#NO BETTER THAN 2.
#
100	DO I=1,VLNT {				#SEE IF  BEST WEAPON.
	  IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
		VILSTR=MAX0(1,VILSTR-1)
	  }
	RETURN
	END

# GTTIME-- GET TOTAL TIME PLAYED
#
# DECLARATIONS
#
	SUBROUTINE GTTIME(T)
	IMPLICIT INTEGER(A-Z)
#
	COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
#
	CALL ITIME(H,M,S)
	T=((H*60)+M)-((SHOUR*60)+SMIN)
	IF(T.LT.0) T=T+1440
	T=T+PLTIME
	RETURN
	END
# OPNCLS-- PROCESS OPEN/CLOSE FOR DOORS
#
# DECLARATIONS
#
	LOGICAL FUNCTION OPNCLS(OBJ,SO,SC)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QOPEN
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# 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
#
	QOPEN(O)=AND(OFLAG2(O),OPENBT).NE.0
#
	OPNCLS=.TRUE.			#ASSUME WINS.
	IF(PRSA.EQ.CLOSEW) GO TO 100	#CLOSE?
	IF(PRSA.EQ.OPENW) GO TO 50	#OPEN?
	OPNCLS=.FALSE.			#LOSE
	RETURN
#
50	IF(QOPEN(OBJ)) GO TO 200	#OPEN... IS IT?
	CALL RSPEAK(SO)
	OFLAG2(OBJ)=OFLAG2(OBJ).OR.OPENBT
	RETURN
#
100	IF(.NOT.QOPEN(OBJ)) GO TO 200	#CLOSE... IS IT?
	CALL RSPEAK(SC)
	OFLAG2(OBJ)=AND(OFLAG2(OBJ),NOT(OPENBT))
	RETURN
#
200	CALL RSPEAK(125+RND(3))		#DUMMY.
	RETURN
	END

# LIT-- IS ROOM LIT?
#
# DECLARATIONS
#
	LOGICAL FUNCTION LIT(RM)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QHERE
#
# 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
#
# 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)
#
	LIT=.TRUE.				#ASSUME WINS
	IF(AND(RFLAG(RM),RLIGHT).NE.0) RETURN	#ROOM LIT?
#
	DO I=1,OLNT {				#LOOK FOR LIT OBJ
	  IF(QHERE(I,RM)) GO TO 100		#IN ROOM?
	  OA=OADV(I)				#NO
	  IF(OA.LE.0) NEXT			#ON ADV?
	  IF(AROOM(OA).NE.RM) NEXT		#ADV IN ROOM?
#
# OBJ IN ROOM OR ON ADV IN ROOM
#
100	  IF(AND(OFLAG1(I),ONBT).NE.0) RETURN	#LIT?
	  IF((AND(OFLAG1(I),VISIBT).EQ.0).OR.
		((AND(OFLAG1(I),TRANBT).EQ.0).AND.
		(AND(OFLAG2(I),OPENBT).EQ.0))) NEXT
#
# OBJ IS VISIBLE AND OPEN OR TRANSPARENT
#
	  DO J=1,OLNT {
	    IF((OCAN(J).EQ.I).AND.(AND(OFLAG1(J),ONBT).NE.0))
		RETURN
	    }
	  }
	LIT=.FALSE.
	RETURN
	END

# WEIGHT- RETURNS SUM OF WEIGHT OF QUALIFYING OBJECTS
#
# DECLARATIONS
#
	INTEGER FUNCTION WEIGHT(RM,CN,AD)
