	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
#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
#
# ADVENTURERS
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR

# SWORDD, PAGE 2
#
	IF(OADV(SWORD).NE.PLAYER) GO TO 500	#HOLDING SWORD?
	NG=2					#ASSUME VILL CLOSE.
	IF(INFEST(HERE)) GO TO 300		#VILL HERE?
	NG=1
	DO I=XMIN,XMAX,XMIN {			#NO, SEARCH ROOMS.
	  IF(.NOT.FINDXT(I,HERE)) NEXT		#ROOM THAT WAY?
	  GO TO (50,200,50,50),XTYPE		#SEE IF ROOM AT ALL.
50	  IF(INFEST(XROOM1)) GO TO 300		#CHECK ROOM.
	  }
	NG=0					#NO GLOW.
#
300	IF(NG.EQ.SWDSTA) RETURN			#ANY STATE CHANGE?
	CALL RSPEAK(NG+495)			#YES, TELL NEW STATE.
	SWDSTA=NG
	RETURN
#
500	SWDACT=.FALSE.				#DROPPED SWORD,
	RETURN					#DISABLE DEMON.
	END

# INFEST-	SUBROUTINE TO TEST FOR INFESTED ROOM
#
# DECLARATIONS
#
	LOGICAL FUNCTION INFEST(R)
	IMPLICIT INTEGER(A-Z)
#
# 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 /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
#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
#
# 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(.NOT.ENDGMF) INFEST=(OROOM(CYCLO).EQ.R).OR.(OROOM(TROLL).EQ.R).OR.((OROOM(THIEF).EQ.R).AND.THFACT)
	IF(ENDGMF) INFEST=(R.EQ.MRG).OR.(R.EQ.MRGE).OR.(R.EQ.MRGW).OR.((R.EQ.INMIR).AND.(MLOC.EQ.MRG))
	RETURN
	END

# CEVAPP- CLOCK EVENT APPLICABLES
#
# DECLARATIONS
#
	SUBROUTINE CEVAPP(RI)
	IMPLICIT INTEGER (A-Z)
	INTEGER CNDTCK(10),LMPTCK(12)
	LOGICAL FINDXT,LIT,RMINFO,QOPEN,MOVETO
	LOGICAL F,QLEDGE,QVAIR,QHERE,PROB
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
# 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
#
	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
#
	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
#
# 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
#
# EXITS
#
	COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ
	EQUIVALENCE (XFLAG,XOBJ)
#
	COMMON /XSRCH/ XMIN,XMAX,XDOWN,XUP,
		XNORTH,XSOUTH,XENTER,XEXIT
#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
#
# 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,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(R)=AND(OFLAG2(R),OPENBT).NE.0
	QLEDGE(R)=(R.EQ.LEDG2).OR.(R.EQ.LEDG3).OR.(R.EQ.LEDG4).OR.(R.EQ.VLBOT)
	QVAIR(R)=(R.EQ.VAIR1).OR.(R.EQ.VAIR2).OR.(R.EQ.VAIR3).OR.(R.EQ.VAIR4)
	DATA CNDTCK/50,20,10,5,0,156,156,156,157,0/
	DATA LMPTCK/50,30,20,10,4,0,154,154,154,154,155,0/

# CEVAPP, PAGE 2
#
	IF(RI.EQ.0) RETURN			#IGNORE DISABLED.
	GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
		11000,12000,13000,14000,15000,16000,17000,18000,19000,
		20000,21000,22000,23000,24000),RI
	CALL BUG(3,RI)
#
# CEV1--	CURE CLOCK.  LET PLAYER SLOWLY RECOVER.
#
1000	ASTREN(PLAYER)=MIN0(0,ASTREN(PLAYER)+1)		#RECOVER.
	IF(ASTREN(PLAYER).GE.0) RETURN		#FULLY RECOVERED?
	CTICK(CEVCUR)=30			#NO, WAIT SOME MORE.
	RETURN
#
# CEV2--	MAINT-ROOM WITH LEAK.  RAISE THE WATER LEVEL.
#
2000	IF(HERE.EQ.MAINT) CALL RSPEAK(71+(RVMNT/2))	#DESCRIBE.
	RVMNT=RVMNT+1				#RAISE WATER LEVEL.
	IF(RVMNT.LE.16) RETURN			#IF NOT FULL, EXIT.
	CTICK(CEVMNT)=0				#FULL, DISABLE CLOCK.
	RFLAG(MAINT)=RFLAG(MAINT).OR.RMUNG	#MUNG ROOM.
	RRAND(MAINT)=80				#SAY IT IS FULL OF WATER.
	IF(HERE.EQ.MAINT) CALL JIGSUP(81)	#DROWN HIM IF PRESENT.
	RETURN
#
# CEV3--	LANTERN.  DESCRIBE GROWING DIMNESS.
#
3000	CALL LITINT(LAMP,ORLAMP,CEVLNT,LMPTCK,12)	#DO LIGHT INTERRUPT.
	RETURN
#
# CEV4--	MATCH.  OUT IT GOES.
#
4000	CALL RSPEAK(153)			#MATCH IS OUT.
	OFLAG1(MATCH)=AND(OFLAG1(MATCH),NOT(ONBT))
	RETURN
#
# CEV5--	CANDLE.  DESCRIBE GROWING DIMNESS.
#
5000	CALL LITINT(CANDL,ORCAND,CEVCND,CNDTCK,10)	#DO CANDLE INTERRUPT.
	RETURN

# CEVAPP, PAGE 3
#
# CEV6--	BALLOON
#
6000	CTICK(CEVBAL)=3				#RESCHEDULE INTERRUPT.
	F=AVEHIC(WINNER).EQ.BALLO		#SEE IF IN BALLOON.
	IF(BLOC.EQ.VLBOT) GO TO 6800		#AT BOTTOM?
	IF(QLEDGE(BLOC)) GO TO 6700		#ON LEDGE?
	IF(QOPEN(RECEP).AND.(BINFF.NE.0))
		GO TO 6500			#INFLATED AND RECEP OPEN?.
#
# BALLOON IS IN MIDAIR AND IS DEFLATED (OR HAS RECEPTACLE CLOSED).
# FALL TO NEXT ROOM.
#
	IF(BLOC.NE.VAIR1) GO TO 6300		#IN VAIR1?
	BLOC=VLBOT				#YES, NOW AT VLBOT.
	CALL NEWSTA(BALLO,0,BLOC,0,0)
	IF(F) GO TO 6200			#IN BALLOON?
	IF(QLEDGE(HERE)) CALL RSPEAK(530)	#ON LEDGE, DESCRIBE.
	RETURN
#
6200	F=MOVETO(BLOC,WINNER)			#MOVE HIM.
	IF(BINFF.EQ.0) GO TO 6250		#IN BALLOON.  INFLATED?
	CALL RSPEAK(531)			#YES, LANDED.
	F=RMINFO(.FALSE.)			#DESCRIBE.
	RETURN
#
6250	CALL NEWSTA(BALLO,532,0,0,0)		#NO, BALLOON DIES.
	CALL NEWSTA(DBALL,0,BLOC,0,0)		#INSERT DEAD BALLOON.
	AVEHIC(WINNER)=0			#NOT IN VEHICLE.
	CFLAG(CEVBAL)=.FALSE.			#DISABLE INTERRUPTS.
	CFLAG(CEVBRN)=.FALSE.
	BINFF=0
	BTIEF=0
	RETURN
#
6300	BLOC=BLOC-1				#NOT IN VAIR1, DESCEND.
	CALL NEWSTA(BALLO,0,BLOC,0,0)
	IF(F) GO TO 6400			#IS HE IN BALLOON?
	IF(QLEDGE(HERE)) CALL RSPEAK(533)	#IF ON LEDGE, DESCRIBE.
	RETURN
#
6400	F=MOVETO(BLOC,WINNER)			#IN BALLOON, MOVE HIM.
	CALL RSPEAK(534)			#DESCRIBE.
	F=RMINFO(.FALSE.)
	RETURN
#
# BALLOON IS IN MIDAIR AND IS INFLATED, UP-UP-AND-AWAY!
#
6500	IF(BLOC.NE.VAIR4) GO TO 6600		#AT VAIR4?
	CTICK(CEVBRN)=.FALSE.			#DISABLE INTERRUPTS.
	CTICK(CEVBAL)=.FALSE.
	BINFF=0
	BTIEF=0
	BLOC=VLBOT				#FALL TO BOTTOM.
	CALL NEWSTA(BALLO,0,0,0,0)		#GET RID OF BALLOON.
	CALL NEWSTA(DBALL,0,BLOC,0,0)		#SUBSTITUTE DEAD BALLOON.
	IF(F) GO TO 6550			#WAS HE IN IT?
	IF(QLEDGE(HERE)) CALL RSPEAK(535)	#IF HE CAN SEE, DESCRIBE.
	RETURN
#
6550	CALL JIGSUP(536)			#IN BALLOON AT CRASH, DIE.
	RETURN
#
6600	BLOC=BLOC+1				#NOT AT VAIR4, GO UP.
	CALL NEWSTA(BALLO,0,BLOC,0,0)
	IF(F) GO TO 6650			#IN BALLOON?
	IF(QLEDGE(HERE)) CALL RSPEAK(537)	#CAN HE SEE IT?
	RETURN
#
6650	F=MOVETO(BLOC,WINNER)			#MOVE PLAYER.
	CALL RSPEAK(538)			#DESCRIBE.
	F=RMINFO(.FALSE.)
	RETURN
#
# ON LEDGE, GOES TO MIDAIR ROOM WHETHER INFLATED OR NOT.
#
6700	BLOC=BLOC+(VAIR2-LEDG2)			#MOVE TO MIDAIR.
	CALL NEWSTA(BALLO,0,BLOC,0,0)
	IF(F) GO TO 6750			#IN BALLOON?
	IF(QLEDGE(HERE)) CALL RSPEAK(539)	#NO, STRANDED.
	CTICK(CEVVLG)=10			#MATERIALIZE GNOME.
	RETURN
#
6750	F=MOVETO(BLOC,WINNER)			#MOVE TO NEW ROOM.
	CALL RSPEAK(540)			#DESCRIBE.
	F=RMINFO(.FALSE.)
	RETURN
#
# AT BOTTOM, GO UP IF INFLATED, DO NOTHING IF DEFLATED.
#
6800	IF((BINFF.EQ.0).OR..NOT.QOPEN(RECEP)) RETURN
	BLOC=VAIR1				#INFLATED AND OPEN,
	CALL NEWSTA(BALLO,0,BLOC,0,0)		#GO UP TO VAIR1.
	IF(F) GO TO 6850			#IN BALLOON?
	IF(QLEDGE(HERE)) CALL RSPEAK(541)	#IF CAN SEE, DESCRIBE.
	RETURN
#
6850	F=MOVETO(BLOC,WINNER)			#MOVE PLAYER.
	CALL RSPEAK(542)
	F=RMINFO(.FALSE.)
	RETURN

# CEVAPP, PAGE 4
#
# CEV7--	BALLOON BURNUP
#
7000	DO I=1,OLNT {				#FIND BURNING OBJECT
	  IF((RECEP.EQ.OCAN(I)).AND.(AND(OFLAG1(I),FLAMBT).NE.0))
		GO TO 7200			#IN RECEPTACLE.
	  }
	CALL BUG(4,0)
#
7200	CALL NEWSTA(I,0,0,0,0)		#VANISH OBJECT.
	BINFF=0					#UNINFLATED.
	IF(HERE.EQ.BLOC) CALL RSPSUB(292,ODESC2(I))	#DESCRIBE.
	RETURN
#
# CEV8--	FUSE FUNCTION
#
8000	IF(OCAN(FUSE).NE.BRICK) GO TO 8500	#IGNITED BRICK?
	BR=OROOM(BRICK)				#GET BRICK ROOM.
	BC=OCAN(BRICK)				#GET CONTAINER.
	IF((BR.EQ.0).AND.(BC.NE.0)) BR=OROOM(BC)
	CALL NEWSTA(FUSE,0,0,0,0)		#KILL FUSE.
	CALL NEWSTA(BRICK,0,0,0,0)		#KILL BRICK.
	IF((BR.NE.0).AND.(BR.NE.HERE)) GO TO 8100	#BRICK ELSEWHERE?
#
	RFLAG(HERE)=RFLAG(HERE).OR.RMUNG	#BLEW SELF.
	RRAND(HERE)=114				#MUNG ROOM.
	CALL JIGSUP(150)			#DEAD.
	RETURN
#
8100	CALL RSPEAK(151)			#BOOM.
	MUNGRM=BR				#SAVE ROOM THAT BLEW.
	CTICK(CEVSAF)=5				#SET SAFE INTERRUPT.
	IF(BR.NE.MSAFE) GO TO 8200		#BLEW SAFE ROOM?
	IF(BC.NE.SSLOT) RETURN			#WAS BRICK IN SAFE?
	CALL NEWSTA(SSLOT,0,0,0,0)		#KILL SLOT.
	OFLAG2(SAFE)=OFLAG2(SAFE).OR.OPENBT	#OPEN SAFE.
	SAFEF=.TRUE.				#INDICATE SAFE BLOWN.
	RETURN
#
8200	DO I=1,OLNT {				#BLEW WRONG ROOM.
	  IF(QHERE(I,BR) .AND. (AND(OFLAG1(I),TAKEBT).NE.0))
		CALL NEWSTA(I,0,0,0,0)		#VANISH CONTENTS.
	  }
	IF(BR.NE.LROOM) RETURN			#BLEW LIVING ROOM?
	DO I=1,OLNT {
	  IF(OCAN(I).EQ.TCASE) CALL NEWSTA(I,0,0,0,0)	#KILL TROPHY CASE.
	  }
	RETURN
#
8500	IF(QHERE(FUSE,HERE).OR.(OADV(FUSE).EQ.WINNER))
		CALL RSPEAK(152)
	CALL NEWSTA(FUSE,0,0,0,0)		#KILL FUSE.
	RETURN

# CEVAPP, PAGE 5
#
# CEV9--	LEDGE MUNGE.
#
9000	RFLAG(LEDG4)=RFLAG(LEDG4).OR.RMUNG	#LEDGE COLLAPSES.
	RRAND(LEDG4)=109
	IF(HERE.EQ.LEDG4) GO TO 9100		#WAS HE THERE?
	CALL RSPEAK(110)			#NO, NARROW ESCAPE.
	RETURN
#
9100	IF(AVEHIC(WINNER).NE.0) GO TO 9200	#IN VEHICLE?
	CALL JIGSUP(111)			#NO, DEAD.
	RETURN
#
9200	IF(BTIEF.NE.0) GO TO 9300		#TIED TO LEDGE?
	CALL RSPEAK(112)			#NO, NO PLACE TO LAND.
	RETURN
#
9300	BLOC=VLBOT				#YES, CRASH BALLOON.
	CALL NEWSTA(BALLO,0,0,0,0)
	CALL NEWSTA(DBALL,0,BLOC,0,0)
	BTIEF=0
	BINFF=0
	CFLAG(CEVBAL)=.FALSE.
	CFLAG(CEVBRN)=.FALSE.
	CALL JIGSUP(113)			#DEAD
	RETURN
#
# CEV10--	SAFE MUNG.
#
10000	RFLAG(MUNGRM)=RFLAG(MUNGRM).OR.RMUNG	#MUNG TARGET.
	RRAND(MUNGRM)=114
	IF(HERE.EQ.MUNGRM) GO TO 10100		#IS HE PRESENT?
	CALL RSPEAK(115)			#LET HIM KNOW.
	IF(MUNGRM.EQ.MSAFE) CTICK(CEVLED)=8	#START LEDGE CLOCK.
	RETURN
#
10100	I=116					#HE'S DEAD,
	IF((RFLAG(HERE).AND.RHOUSE).NE.0) I=117	#ONE WAY OR ANOTHER.
	CALL JIGSUP(I)				#LET HIM KNOW.
	RETURN

# CEVAPP, PAGE 6
#
# CEV11--	VOLCANO GNOME
#
11000	IF(QLEDGE(HERE)) GO TO 11100		#IS HE ON LEDGE?
	CTICK(CEVVLG)=1				#NO, WAIT A WHILE.
	RETURN
#
11100	CALL NEWSTA(GNOME,118,HERE,0,0)		#YES, MATERIALIZE GNOME.
	RETURN
#
# CEV12--	VOLCANO GNOME DISAPPEARS
#
12000	CALL NEWSTA(GNOME,149,0,0,0)		#DISAPPEAR THE GNOME.
	RETURN
#
# CEV13--	BUCKET.
#
13000	IF(OCAN(WATER).EQ.BUCKE)
		CALL NEWSTA(WATER,0,0,0,0)	#WATER LEAKS OUT.
	RETURN
#
# CEV14--	SPHERE.  IF EXPIRES, HE'S TRAPPED.
#
14000	RFLAG(CAGER)=RFLAG(CAGER).OR.RMUNG	#MUNG ROOM.
	RRAND(CAGER)=147
	CALL JIGSUP(148)			#MUNG PLAYER.
	RETURN
#
# CEV15--	END GAME HERALD.
#
15000	ENDGMF=.TRUE.				#WE'RE IN ENDGAME.
	CALL RSPEAK(119)			#INFORM OF ENDGAME.
	RETURN

# CEVAPP, PAGE 7
#
# CEV16--	FOREST MURMURS
#
16000	CFLAG(CEVFOR)=(HERE.EQ.MTREE).OR.((HERE.GE.FORE1).AND.(HERE.LT.CLEAR))
	IF(CFLAG(CEVFOR).AND.PROB(10,10)) CALL RSPEAK(635)
	RETURN
#
# CEV17--	SCOL ALARM
#
17000	IF(HERE.EQ.BKTWI) CFLAG(CEVZGI)=.TRUE.	#IF IN TWI, GNOME.
	IF(HERE.EQ.BKVAU) CALL JIGSUP(636)	#IF IN VAU, DEAD.
	RETURN
#
# CEV18--	ENTER GNOME OF ZURICH
#
18000	CFLAG(CEVZGO)=.TRUE.			#EXITS, TOO.
	CALL NEWSTA(ZGNOM,0,BKTWI,0,0)		#PLACE IN TWI.
	IF(HERE.EQ.BKTWI) CALL RSPEAK(637)	#ANNOUNCE.
	RETURN
#
# CEV19--	EXIT GNOME
#
19000	CALL NEWSTA(ZGNOM,0,0,0,0)		#VANISH.
	IF(HERE.EQ.BKTWI) CALL RSPEAK(638)	#ANNOUNCE.
	RETURN

# CEVAPP, PAGE 8
#
# CEV20--	START OF ENDGAME
#
20000	IF(SPELLF) GO TO 20200			#SPELL HIS WAY IN?
	IF(HERE.NE.CRYPT) RETURN		#NO, STILL IN TOMB?
	IF(.NOT.LIT(HERE)) GO TO 20100		#LIGHTS OFF?
	CTICK(CEVSTE)=3				#RESCHEDULE.
	RETURN
#
20100	CALL RSPEAK(727)			#ANNOUNCE.
20200	DO I=1,OLNT {				#STRIP HIM OF OBJS.
	  CALL NEWSTA(I,0,OROOM(I),OCAN(I),0)
	  }
	CALL NEWSTA(LAMP,0,0,0,PLAYER)		#GIVE HIM LAMP.
	CALL NEWSTA(SWORD,0,0,0,PLAYER)		#GIVE HIM SWORD.
#
	OFLAG1(LAMP)=AND((OFLAG1(LAMP).OR.LITEBT),NOT(ONBT))
	OFLAG2(LAMP)=OR(OFLAG2(LAMP),TCHBT)
	CFLAG(CEVLNT)=.FALSE.			#LAMP IS GOOD AS NEW.
	CTICK(CEVLNT)=350
	ORLAMP=0
	OFLAG2(SWORD)=OR(OFLAG2(SWORD),TCHBT)	#RECREATE SWORD.
	SWDACT=.TRUE.
	SWDSTA=0
#
	THFACT=.FALSE.				#THIEF GONE.
	ENDGMF=.TRUE.				#ENDGAME RUNNING.
	CFLAG(CEVMAT)=.FALSE.			#MATCHES GONE,
	CFLAG(CEVCND)=.FALSE.			#CANDLES GONE.
#
	CALL SCRUPD(RVAL(CRYPT))		#SCORE CRYPT,
	RVAL(CRYPT)=0				#BUT ONLY ONCE.
	F=MOVETO(TSTRS,WINNER)			#TO TOP OF STAIRS,
	F=RMINFO(.TRUE.)			#AND DESCRIBE.
	RETURN					#BAM!
#
# CEV21--	MIRROR CLOSES.
#
21000	MRPSHF=.FALSE.			#BUTTON IS OUT.
	MROPNF=.FALSE.				#MIRROR IS CLOSED.
	IF(HERE.EQ.MRANT) CALL RSPEAK(728)	#DESCRIBE BUTTON.
	IF((HERE.EQ.INMIR).OR.(MRHERE(HERE).EQ.1))
		CALL RSPEAK(729)		#DESCRIBE MIRROR.
	RETURN

# CEVAPP, PAGE 9
#
# CEV22--	DOOR CLOSES.
#
22000	IF(WDOPNF) CALL RSPEAK(730)		#DESCRIBE.
	WDOPNF=.FALSE.				#CLOSED.
	RETURN
#
# CEV23--	INQUISITOR'S QUESTION
#
23000	IF(AROOM(PLAYER).NE.FDOOR) RETURN	#IF PLAYER LEFT, DIE.
	CALL RSPEAK(769)
	CALL RSPEAK(770+QUESNO)
	CTICK(CEVINQ)=2
	RETURN
#
# CEV24--	MASTER FOLLOWS
#
24000	IF(AROOM(AMASTR).EQ.HERE) RETURN	#NO MOVEMENT, DONE.
	IF((HERE.NE.CELL).AND.(HERE.NE.PCELL)) GO TO 24100
	IF(FOLLWF) CALL RSPEAK(811)		#WONT GO TO CELLS.
	FOLLWF=.FALSE.
	RETURN
#
24100	FOLLWF=.TRUE.				#FOLLOWING.
	I=812					#ASSUME CATCHES UP.
	DO J=XMIN,XMAX,XMIN {
	  IF(FINDXT(J,AROOM(AMASTR)).AND.(XROOM1.EQ.HERE))
		I=813				#ASSUME FOLLOWS.
	  }
	CALL RSPEAK(I)
	CALL NEWSTA(MASTER,0,HERE,0,0)		#MOVE MASTER OBJECT.
	AROOM(AMASTR)=HERE		#MOVE MASTER PLAYER.
	RETURN
#
	END

# LITINT-	LIGHT INTERRUPT PROCESSOR
#
# DECLARATIONS
#
	SUBROUTINE LITINT(OBJ,CTR,CEV,TICKS,TICKLN)
	IMPLICIT INTEGER (A-Z)
	INTEGER TICKS(TICKLN)
#
# 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
#
# CLOCK INTERRUPTS
#
	LOGICAL CFLAG
	COMMON /CEVENT/ CLNT,CTICK(25),CACTIO(25),CFLAG(25)
#
	CTR=CTR+1				#ADVANCE STATE CNTR.
	CTICK(CEV)=TICKS(CTR)		#RESET INTERRUPT.
	IF(CTICK(CEV).NE.0) GO TO 100		#EXPIRED?
	OFLAG1(OBJ)=AND(OFLAG1(OBJ),NOT(LITEBT+FLAMBT+ONBT))
	IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
		CALL RSPSUB(293,ODESC2(OBJ))
	RETURN
#
100	IF((OROOM(OBJ).EQ.HERE).OR.(OADV(OBJ).EQ.WINNER))
		CALL RSPEAK(TICKS(CTR+(TICKLN/2)))
	RETURN
#
	END

# RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1
#
# DECLARATIONS
#
	LOGICAL FUNCTION RAPPL1(RI)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QOPEN,QON,QHERE,PROB,F
	LOGICAL MOVETO,LIT
#
# 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
	COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
#
# MISCELLANEOUS VARIABLES
#
	COMMON /BATS/ BATDRP(9)
#
# 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
#
	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
#
	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
#
# 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

#
	LOGICAL THFFLG,THFACT,SWDACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# 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
#
# 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
#
	QOPEN(R)=AND(OFLAG2(R),OPENBT).NE.0
	QON(R)=AND(OFLAG1(R),ONBT).NE.0

# RAPPL1, PAGE 2
#
	RAPPL1=.TRUE.				#USUALLY IGNORED.
	IF(RI.EQ.0) RETURN			#RETURN IF NAUGHT.
#						#SET TO FALSE FOR
#						#NEW DESC NEEDED.
	GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
		11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
		21000,22000,23000,24000,25000,26000,27000,28000,29000,30000,
		 31000,32000,33000,34000,35000,36000,37000),RI
	CALL BUG(1,RI)
#
# R1--	EAST OF HOUSE.  DESCRIPTION DEPENDS ON STATE OF WINDOW
#
1000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	I=13					#ASSUME CLOSED.
	IF(QOPEN(WINDO)) I=12			#IF OPEN, AJAR.
	CALL RSPSUB(11,I)			#DESCRIBE.
	RETURN
#
# R2--	KITCHEN.  SAME VIEW FROM INSIDE.
#
2000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	I=13					#ASSUME CLOSED.
	IF(QOPEN(WINDO)) I=12			#IF OPEN, AJAR.
	CALL RSPSUB(14,I)			#DESCRIBE.
	RETURN
#
# R3--	LIVING ROOM.  DESCRIPTION DEPENDS ON MAGICF (STATE OF
#	DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED)
#
3000	IF(PRSA.NE.LOOKW) GO TO 3500		#LOOK?
	I=15					#ASSUME NO HOLE.
	IF(MAGICF) I=16				#IF MAGICF, CYCLOPS HOLE.
	CALL RSPEAK(I)				#DESCRIBE.
	I=17+ORRUG				#ASSUME INITIAL STATE.
	IF(QOPEN(DOOR)) I=I+2			#DOOR OPEN?
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
#	NOT A LOOK WORD.  REEVALUATE TROPHY CASE.
#
3500	IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE)))
		RETURN				#IF NOT TAKE OR PUT.
	ASCORE(WINNER)=RWSCOR			#SCORE TROPHY CASE.
	DO I=1,OLNT {				#RETAIN RAW SCORE AS WELL.
	  J=I					#FIND OUT IF IN CASE.
3550	  J=OCAN(J)				#TRACE OWNERSHIP.
	  IF(J.EQ.0) NEXT
	  IF(J.NE.TCASE) GO TO 3550		#DO ALL LEVELS.
	  ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I)
	  }
	CALL SCRUPD(0)				#SEE IF ENDGAME TRIG.
	RETURN

# RAPPL1, PAGE 3
#
# R4--	CELLAR.  SHUT DOOR AND BAR IT IF HE JUST WALKED IN.
#
4000	IF(PRSA.NE.LOOKW) GO TO 4500		#LOOK?
	CALL RSPEAK(21)				#DESCRIBE CELLAR.
	RETURN
#
4500	IF(PRSA.NE.WALKIW) RETURN		#WALKIN?
	IF(AND(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN
	OFLAG2(DOOR)=AND(OR(OFLAG2(DOOR),TCHBT),NOT(OPENBT))
	CALL RSPEAK(22)				#SLAM AND BOLT DOOR.
	RETURN
#
# R5--	MAZE11.  DESCRIBE STATE OF GRATING.
#
5000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(23)				#DESCRIBE.
	I=24					#ASSUME LOCKED.
	IF(GRUNLF) I=26				#UNLOCKED?
	IF(QOPEN(GRATE)) I=25			#OPEN?
	CALL RSPEAK(I)				#DESCRIBE GRATE.
	RETURN
#
# R6--	CLEARING.  DESCRIBE CLEARING, MOVE LEAVES.
#
6000	IF(PRSA.NE.LOOKW) GO TO 6500		#LOOK?
	CALL RSPEAK(27)				#DESCRIBE.
	IF(RVCLR.EQ.0) RETURN			#LEAVES MOVED?
	I=28					#YES, ASSUME GRATE CLOSED.
	IF(QOPEN(GRATE)) I=29			#OPEN?
	CALL RSPEAK(I)				#DESCRIBE GRATE.
	RETURN
#
6500	IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND.
		((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN
	CALL RSPEAK(30)				#MOVE LEAVES, REVEAL GRATE.
	RVCLR=1					#INDICATE LEAVES MOVED.
	RETURN

# RAPPL1, PAGE 4
#
# R7--	RESERVOIR SOUTH.  DESCRIPTION DEPENDS ON LOW TIDE FLAG.
#
7000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	I=31					#ASSUME FULL.
	IF(LWTIDF) I=32				#IF LOW TIDE, EMPTY.
	CALL RSPEAK(I)				#DESCRIBE.
	CALL RSPEAK(33)				#DESCRIBE EXITS.
	RETURN
#
# R8--	RESERVOIR.  STATE DEPENDS ON LOW TIDE FLAG.
#
8000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	I=34					#ASSUME FULL.
	IF(LWTIDF) I=35				#IF LOW TIDE, EMTPY.
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
# R9--	RESERVOIR NORTH.  ALSO DEPENDS ON LOW TIDE FLAG.
#
