9000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	I=36					#YOU GET THE IDEA.
	IF(LWTIDF) I=37
	CALL RSPEAK(I)
	CALL RSPEAK(38)
	RETURN
#
# R10--	GLACIER ROOM.  STATE DEPENDS ON MELTED, VANISHED FLAGS.
#
10000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(39)				#BASIC DESCRIPTION.
	I=0					#ASSUME NO CHANGES.
	IF(GLACMF) I=40				#PARTIAL MELT?
	IF(GLACRF) I=41				#COMPLETE MELT?
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
# R11--	FOREST ROOM
#
11000	IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE.	#IF WALK IN, BIRDIE.
	RETURN
#
# R12--	MIRROR ROOM.  STATE DEPENDS ON MIRROR INTACT.
#
12000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(42)				#DESCRIBE.
	IF(MIRRMF) CALL RSPEAK(43)		#IF BROKEN, NASTY REMARK.
	RETURN

# RAPPL1, PAGE 5
#
# R13--	CAVE2 ROOM.  BLOW OUT CANDLES WITH 50% PROBABILITY.
#
13000	IF(PRSA.NE.WALKIW) RETURN		#WALKIN?
	IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR.
		.NOT.QON(CANDL)) RETURN		#BLOW EM OUT?
	OFLAG1(CANDL)=AND(OFLAG1(CANDL),NOT(ONBT))	#YES.
	CALL RSPEAK(47)				#TELL OF WINDS.
	CFLAG(CEVCND)=.FALSE.			#HALT CANDLE COUNTDOWN.
	RETURN
#
# R14--	BOOM ROOM.  BLOW HIM UP IF CARRYING FLAMING OBJECT.
#
14000	J=ODESC2(CANDL)				#ASSUME CANDLE.
	IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100
	J=ODESC2(TORCH)				#ASSUME TORCH.
	IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100
	J=ODESC2(MATCH)
	IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100
	RETURN					#SAFE
#
14100	IF(PRSA.NE.TRNONW) GO TO 14200		#TURN ON?
	CALL RSPSUB(294,J)			#BOOM!
	CALL JIGSUP(44)
	RETURN
#
14200	IF(PRSA.NE.WALKIW) RETURN		#WALKIN?
	CALL RSPSUB(295,J)			#BOOM!
	CALL JIGSUP(44)
	RETURN
#
# R15--	NO-OBJS.  SEE IF EMPTY HANDED, SCORE LIGHT SHAFT.
#
15000	EMPTHF=.TRUE.				#ASSUME TRUE.
	DO I=1,OLNT {				#SEE IF CARRYING.
	  IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE.
	  }
#
	IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN
	CALL SCRUPD(LTSHFT)			#SCORE LIGHT SHAFT.
	LTSHFT=0				#NEVER AGAIN.
	RETURN

# RAPPL1, PAGE 6
#
# R16--	MACHINE ROOM.  DESCRIBE MACHINE.
#
16000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	I=46					#ASSUME LID CLOSED.
	IF(QOPEN(MACHI)) I=12			#IF OPEN, OPEN.
	CALL RSPSUB(45,I)			#DESCRIBE.
	RETURN
#
# R17--	BAT ROOM.  UNLESS CARRYING GARLIC, FLY AWAY WITH ME...
#
17000	IF(PRSA.NE.LOOKW) GO TO 17500		#LOOK?
	CALL RSPEAK(48)				#DESCRIBE ROOM.
	IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49)	#BAT HOLDS NOSE.
	RETURN
#
17500	IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN
	CALL RSPEAK(50)				#TIME TO FLY, JACK.
	F=MOVETO(BATDRP(RND(9)+1),WINNER)	#SELECT RANDOM DEST.
	RAPPL1=.FALSE.				#INDICATE NEW DESC NEEDED.
	RETURN
#
# R18--	DOME ROOM.  STATE DEPENDS ON WHETHER ROPE TIED TO RAILING.
#
18000	IF(PRSA.NE.LOOKW) GO TO 18500		#LOOK?
	CALL RSPEAK(51)				#DESCRIBE.
	IF(DOMEF) CALL RSPEAK(52)		#IF ROPE, DESCRIBE.
	RETURN
#
18500	IF(PRSA.EQ.LEAPW) CALL JIGSUP(53)	#DID HE JUMP???
	RETURN
#
# R19--	TORCH ROOM.  ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING.
#
19000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(54)				#DESCRIBE.
	IF(DOMEF) CALL RSPEAK(55)		#IF ROPE, DESCRIBE.
	RETURN
#
# R20--	CAROUSEL ROOM.  SPIN HIM OR KILL HIM.
#
20000	IF(PRSA.NE.LOOKW) GO TO 20500		#LOOK?
	CALL RSPEAK(56)				#DESCRIBE.
	IF(.NOT.CAROFF) CALL RSPEAK(57)		#IF NOT FLIPPED, SPIN.
	RETURN
#
20500	IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58)	#WALKED IN.
	RETURN

# RAPPL1, PAGE 7
#
# R21--	LLD ROOM.  HANDLE EXORCISE, DESCRIPTIONS.
#
21000	IF(PRSA.NE.LOOKW) GO TO 21500		#LOOK?
	CALL RSPEAK(59)				#DESCRIBE.
	IF(.NOT.LLDF) CALL RSPEAK(60)		#IF NOT VANISHED, GHOSTS.
	RETURN
#
21500	IF(PRSA.NE.EXORCW) RETURN		#EXORCISE?
	IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND.
		(OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600
	CALL RSPEAK(62)				#NOT EQUIPPED.
	RETURN
#
21600	IF(QHERE(GHOST,HERE)) GO TO 21700	#GHOST HERE?
	CALL JIGSUP(61)				#NOPE, EXORCISE YOU.
	RETURN
#
21700	CALL NEWSTA(GHOST,63,0,0,0)		#VANISH GHOST.
	LLDF=.TRUE.				#OPEN GATE.
	RETURN
#
# R22--	LLD2-ROOM.  IS HIS HEAD ON A POLE?
#
22000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(64)				#DESCRIBE.
	IF(ONPOLF) CALL RSPEAK(65)		#ON POLE?
	RETURN
#
# R23--	DAM ROOM.  DESCRIBE RESERVOIR, PANEL.
#
23000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(66)				#DESCRIBE.
	I=67
	IF(LWTIDF) I=68
	CALL RSPEAK(I)				#DESCRIBE RESERVOIR.
	CALL RSPEAK(69)				#DESCRIBE PANEL.
	IF(GATEF) CALL RSPEAK(70)		#BUBBLE IS GLOWING.
	RETURN
#
# R24--	TREE ROOM
#
24000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(660)			#DESCRIBE.
	I=661					#SET FLAG FOR BELOW.
	DO J=1,OLNT {				#DESCRIBE OBJ IN FORE3.
	  IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) NEXT
	  CALL RSPEAK(I)			#SET STAGE,
	  I=0
	  CALL RSPSUB(502,ODESC2(J))		#DESCRIBE.
	  }
	RETURN

# RAPPL1, PAGE 8
#
# R25--	CYCLOPS-ROOM.  DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
#
25000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(606)			#DESCRIBE.
	I=607					#ASSUME BASIC STATE.
	IF(RVCYC.GT.0) I=608			#>0?  HUNGRY.
	IF(RVCYC.LT.0) I=609			#<0?  THIRSTY.
	IF(CYCLOF) I=610			#ASLEEP?
	IF(MAGICF) I=611			#GONE?
	CALL RSPEAK(I)				#DESCRIBE.
	IF(.NOT.CYCLOF .AND.(RVCYC.NE.0))
		CALL RSPEAK(193+IABS(RVCYC))	#CYCLOPS IS ANNOYED.
	RETURN
#
# R26--	BANK BOX ROOM.
#
26000	IF(PRSA.NE.WALKIW) RETURN		#SURPRISE HIM.
	DO I=1,8,2 {				#SCOLRM DEPENDS ON
	  IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
	  }					#ENTRY DIRECTION.
	RETURN
#
# R27--	TREASURE ROOM.
#
27000	IF((PRSA.NE.WALKIW).OR. .NOT.THFACT)
		RETURN				#WALKIN, THIEF ACTIVE?
	IF(OROOM(THIEF).NE.HERE)
		CALL NEWSTA(THIEF,82,HERE,0,0)	#NO, MATERIALIZE HIM.
	THFPOS=HERE				#RESET SEARCH PATTERN.
	OFLAG2(THIEF)=OFLAG2(THIEF).OR.FITEBT	#HE'S ANGRY.
	IF(OROOM(CHALI).EQ.HERE)
		OFLAG1(CHALI)=AND(OFLAG1(CHALI),NOT(TAKEBT))
#
#	VANISH EVERYTHING IN ROOM
#
	J=0					#ASSUME NOTHING TO VANISH.
	DO I=1,OLNT {
	  IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
		NEXT				#HERE?
	  J=83					#FLAG BYEBYE.
	  OFLAG1(I)=AND(OFLAG1(I),NOT(VISIBT))	#AWAY IT GOES.
	  }
	CALL RSPEAK(J)				#DESCRIBE.
	RETURN
#
# R28--	CLIFF FUNCTION.  SEE IF CARRYING INFLATED BOAT.
#
28000	DEFLAF=OADV(RBOAT).NE.WINNER		#TRUE IF NOT CARRYING.
	RETURN

# RAPPL1, PAGE 9
#
# R29--	RIVR4 ROOM.  PLAY WITH BUOY.
#
29000	IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN
	CALL RSPEAK(84)				#GIVE HINT,
	BUOYF=.FALSE.				#THEN DISABLE.
	RETURN
#
# R30--	OVERFALLS.  DOOM.
#
30000	IF(PRSA.NE.LOOKW) CALL JIGSUP(85)	#OVER YOU GO.
	RETURN
#
# R31--	BEACH ROOM.  DIG A HOLE.
#
31000	IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
	RVSND=RVSND+1				#INCREMENT DIG STATE.
	GO TO (31100,31100,31100,31400,31500),RVSND	#PROCESS STATE.
	CALL BUG(2,RVSND)
#
31100	CALL RSPEAK(85+RVSND)			#1-3... DISCOURAGE HIM.
	RETURN
#
31400	I=89					#ASSUME DISCOVERY.
	IF(AND(OFLAG1(STATU),VISIBT).NE.0) I=88	#ALREADY DONE.
	CALL RSPEAK(I)
	OFLAG1(STATU)=OR(OFLAG1(STATU),VISIBT)	#MATERIALIZE STATUE.
	RETURN
#
31500	RVSND=0					#5... SAND COLLAPSES
	CALL JIGSUP(90)				#AND SO DOES HE.
	RETURN
#
# R32--	TCAVE ROOM.  DIG A HOLE IN GUANO.
#
32000	IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
	I=91					#ASSUME NO GUANO.
	IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100	#IS IT HERE?
	RVGUA=MIN0(4,RVGUA+1)		#YES, SET NEW STATE.
	I=91+RVGUA				#GET NASTY REMARK.
32100	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
# R33--	FALLS ROOM
#
33000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(96)				#DESCRIBE.
	I=97					#ASSUME NO RAINBOW.
	IF(RAINBF) I=98				#GOT ONE?
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN

# RAPPL1, PAGE 10
#
# R34--	LEDGE FUNCTION.  LEDGE CAN COLLAPSE.
#
34000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(100)			#DESCRIBE.
	I=102					#ASSUME SAFE ROOM OK.
	IF((RFLAG(MSAFE).AND.RMUNG).NE.0) I=101	#IF MUNGED, ROOM GONE.
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
# R35--	SAFE ROOM.  STATE DEPENDS ON WHETHER SAFE BLOWN.
#
35000	IF(PRSA.NE.LOOKW) RETURN		#LOOK?
	CALL RSPEAK(104)			#DESCRIBE.
	I=105					#ASSUME OK.
	IF(SAFEF) I=106				#BLOWN?
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
# R36--	MAGNET ROOM.  DESCRIBE, CHECK FOR SPINDIZZY DOOM.
#
36000	IF(PRSA.NE.LOOKW) GO TO 36500		#LOOK?
	CALL RSPEAK(107)			#DESCRIBE.
	RETURN
#
36500	IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN	#WALKIN ON FLIPPED?
	IF(CAROZF) GO TO 36600			#ZOOM?
	CALL RSPEAK(108)			#NO, SPIN HIS COMPASS.
	RETURN
#
36600	I=58					#SPIN HIS INSIDES.
	IF(WINNER.NE.PLAYER) I=99		#SPIN ROBOT.
	CALL JIGSUP(I)				#DEAD.
	RETURN
#
# R37--	CAGE ROOM.  IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM.
#
37000	IF(CAGESF) F=MOVETO(CAGER,WINNER)	#IF SOLVED, MOVE.
	RETURN
#
	END

# SOBJS-	SIMPLE OBJECTS PROCESSOR
#	OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
#	MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
#
# DECLARATIONS
#
	LOGICAL FUNCTION SOBJS(RI,ARG)
	IMPLICIT INTEGER (A-Z)
	LOGICAL QOPEN
	LOGICAL MOVETO,OPNCLS,LIT
	LOGICAL QHERE,F
#
# 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
#
# 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

#
# 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
#
# 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

# SOBJS, PAGE 2
#
	IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
	IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
	AV=AVEHIC(WINNER)
	SOBJS=.TRUE.
#
	GO TO (1000,3000,4000,6000,7000,8000,9000,
		13000,14000,16000,17000,
		21000,23000,24000,27000,28000,29000,30000,
		31000,33000,34000,36000,37000,38000,
		41000,42000,43000,44000,46000,
		53000,56000)RI
	CALL BUG(6,RI)
#
# RETURN HERE TO DECLARE FALSE RESULT
#
10	SOBJS=.FALSE.
	RETURN

# SOBJS, PAGE 3
#
# O1--	GUNK FUNCTION
#
1000	IF(OCAN(GUNK).EQ.0) GO TO 10		#NOT INSIDE? F
	CALL NEWSTA(GUNK,122,0,0,0)		#FALLS APART.
	RETURN
#
# O2--	TROPHY CASE
#
3000	IF(PRSA.NE.TAKEW) GO TO 10		#TAKE?
	CALL RSPEAK(128)			#CANT.
	RETURN
#
# O3--	BOTTLE FUNCTION
#
4000	IF(PRSA.NE.THROWW) GO TO 4100		#THROW?
	CALL NEWSTA(PRSO,129,0,0,0)		#BREAKS.
	RETURN
#
4100	IF(PRSA.NE.MUNGW) GO TO 10		#MUNG?
	CALL NEWSTA(PRSO,131,0,0,0)		#BREAKS.
	RETURN

# SOBJS, PAGE 4
#
# O4--	ROPE FUNCTION
#
6000	IF(HERE.EQ.DOME) GO TO 6100		#IN DOME?
	DOMEF=.FALSE.				#NO,
	IF(PRSA.NE.UNTIEW) GO TO 6050		#UNTIE?
	CALL RSPEAK(134)			#CANT
	RETURN
#
6050	IF(PRSA.NE.TIEW) GO TO 10		#TIE?
	CALL RSPEAK(135)			#CANT TIE
	RETURN
#
6100	IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
	IF(DOMEF) GO TO 6150			#ALREADY TIED?
	DOMEF=.TRUE.				#NO, TIE IT.
	OFLAG1(ROPE)=OFLAG1(ROPE).OR.NDSCBT
	OFLAG2(ROPE)=OFLAG2(ROPE).OR.CLMBBT
	CALL NEWSTA(ROPE,137,DOME,0,0)
	RETURN
#
6150	CALL RSPEAK(136)			#DUMMY.
	RETURN
#
6200	IF(PRSA.NE.UNTIEW) GO TO 6300		#UNTIE?
	IF(DOMEF) GO TO 6250			#TIED?
	CALL RSPEAK(138)			#NO, DUMMY.
	RETURN
#
6250	DOMEF=.FALSE.				#YES, UNTIE IT.
	OFLAG1(ROPE)=AND(OFLAG1(ROPE),NOT(NDSCBT))
	OFLAG2(ROPE)=AND(OFLAG2(ROPE),NOT(CLMBBT))
	CALL RSPEAK(139)
	RETURN
#
6300	IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400	#DROP & UNTIED?
	CALL NEWSTA(ROPE,140,MTORC,0,0)		#YES, DROP.
	RETURN
#
6400	IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
	CALL RSPEAK(141)			#TAKE & TIED.
	RETURN
#
# O5--	SWORD FUNCTION
#
7000	IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
		SWDACT=.TRUE.			#TURN ON DEMON.
	GO TO 10
#
# O6--	LANTERN
#
8000	IF(PRSA.NE.THROWW) GO TO 8100		#THROW?
	CALL NEWSTA(LAMP,142,0,0,0)		#BREAKS,
	CALL NEWSTA(BLAMP,0,HERE,0,0)		#REPLACED.
	RETURN
#
8100	IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
	IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
	GO TO 10
#
# O7--	RUG FUNCTION
#
9000	IF(PRSA.NE.RAISEW) GO TO 9100		#RAISE?
	CALL RSPEAK(143)			#CANT
	RETURN
#
9100	IF(PRSA.NE.TAKEW) GO TO 9200		#TAKE?
	CALL RSPEAK(144)			#CANT
	RETURN
#
9200	IF(PRSA.NE.MOVEW) GO TO 9300		#MOVE?
	CALL RSPEAK(145+ORRUG)
	ORRUG=1
	OFLAG1(DOOR)=OFLAG1(DOOR).OR.VISIBT	#REVEAL DOOR.
	RETURN
#
9300	IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
		QOPEN(DOOR)) GO TO 10		#LOOK UNDER RUG?
	CALL RSPEAK(345)
	RETURN

# SOBJS, PAGE 5
#
# O8--	SKELETON
#
13000	I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
	IF(I.NE.0) CALL RSPEAK(162)		#IF ROBBED, SAY SO.
	RETURN
#
# O9--	MIRROR
#
14000	IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
	MROOM=HERE.XOR.1			#CALCULATE NEW RM.
	DO I=1,OLNT {				#INTERCHANGE OBJS.
	  IF(OROOM(I).EQ.HERE) OROOM(I)=-1
	  IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
	  IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
	  }
	F=MOVETO(MROOM,WINNER)
	CALL RSPEAK(163)			#SHAKE WORLD.
	RETURN
#
14500	IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
		(PRSA.NE.EXAMIW)) GO TO 14600
	I=164					#MIRROR OK.
	IF(MIRRMF) I=165			#MIRROR DEAD.
	CALL RSPEAK(I)
	RETURN
#
14600	IF(PRSA.NE.TAKEW) GO TO 14700		#TAKE?
	CALL RSPEAK(166)			#JOKE.
	RETURN
#
14700	IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
	I=167					#MIRROR BREAKS.
	IF(MIRRMF) I=168			#MIRROR ALREADY BROKEN.
	MIRRMF=.TRUE.
	BADLKF=.TRUE.
	CALL RSPEAK(I)
	RETURN

# SOBJS, PAGE 6
#
# O10--	DUMBWAITER
#
16000	IF(PRSA.NE.RAISEW) GO TO 16100		#RAISE?
	IF(CAGETF) GO TO 16400			#ALREADY AT TOP?
	CALL NEWSTA(TBASK,175,TSHAF,0,0)	#NO, RAISE BASKET.
	CALL NEWSTA(FBASK,0,BSHAF,0,0)
	CAGETF=.TRUE.			#AT TOP.
	RETURN
#
16100	IF(PRSA.NE.LOWERW) GO TO 16200		#LOWER?
	IF(.NOT.CAGETF) GO TO 16400		#ALREADY AT BOTTOM?
	CALL NEWSTA(TBASK,176,BSHAF,0,0)	#NO, LOWER BASKET.
	CALL NEWSTA(FBASK,0,TSHAF,0,0)
	CAGETF=.FALSE.
	IF(.NOT.LIT(HERE)) CALL RSPEAK(406)	#IF DARK, DIE.
	RETURN
#
16200	IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
	CALL RSPEAK(130)			#WRONG BASKET.
	RETURN
#
16300	IF(PRSA.NE.TAKEW) GO TO 10		#TAKE?
	CALL RSPEAK(177)			#JOKE.
	RETURN
#
16400	CALL RSPEAK(125+RND(3))			#DUMMY.
	RETURN
#
# O11--	GHOST FUNCTION
#
17000	I=178					#ASSUME DIRECT.
	IF(PRSO.NE.GHOST) I=179			#IF NOT, INDIRECT.
	CALL RSPEAK(I)
	RETURN					#SPEAK AND EXIT.

# SOBJS, PAGE 7
#
# O12--	TUBE
#
21000	IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
	CALL RSPEAK(186)			#CANT PUT BACK IN.
	RETURN
#
# O13--	CHALICE
#
23000	IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
		(OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
		(AND(OFLAG2(THIEF),FITEBT).EQ.0).OR.
			.NOT. THFACT) GO TO 10
	CALL RSPEAK(204)			#CANT TAKE.
	RETURN
#
# O14--	PAINTING
#
24000	IF(PRSA.NE.MUNGW) GO TO 10		#MUNG?
	CALL RSPEAK(205)			#DESTROY PAINTING.
	OFVAL(PRSO)=0
	OTVAL(PRSO)=0
	ODESC1(PRSO)=207
	ODESC2(PRSO)=206
	RETURN

# SOBJS, PAGE 8
#
# O15--	BOLT
#
27000	IF(PRSA.NE.TURNW) GO TO 10		#TURN BOLT?
	IF(PRSI.NE.WRENC) GO TO 27500		#WITH WRENCH?
	IF(GATEF) GO TO 27100			#PROPER BUTTON PUSHED?
	CALL RSPEAK(210)			#NO, LOSE.
	RETURN
#
27100	IF(LWTIDF) GO TO 27200			#LOW TIDE NOW?
	LWTIDF=.TRUE.				#NO, EMPTY DAM.
	CALL RSPEAK(211)
	OFLAG2(COFFI)=AND(OFLAG2(COFFI),NOT(SCRDBT))
	OFLAG1(TRUNK)=OR(OFLAG1(TRUNK),VISIBT)	#MATERIALIZE TRUNK.
	RFLAG(RESER)=AND(OR(RFLAG(RESER),RLAND),
		NOT(RWATER+RSEEN))		#KEEP THIEF AWAY.
	RETURN
#
27200	LWTIDF=.FALSE.				#YES, FILL DAM.
	CALL RSPEAK(212)
	IF(QHERE(TRUNK,RESER)) {
		OFLAG1(TRUNK)=AND(OFLAG1(TRUNK),NOT(VISIBT))
		}
	RFLAG(RESER)=AND(OR(RFLAG(RESER),RWATER),NOT(RLAND))
	RETURN
#
27500	CALL RSPSUB(299,ODI2)			#NOT WITH THAT.
	RETURN
#
# O16--	GRATING
#
28000	IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
	IF(GRUNLF) GO TO 28200			#UNLOCKED?
	CALL RSPEAK(214)			#NO, LOCKED.
	RETURN
#
28200	I=215					#UNLOCKED, VIEW FRM CLR.
	IF(HERE.NE.CLEAR) I=216			#VIEW FROM BELOW.
	SOBJS=OPNCLS(GRATE,I,217)		#OPEN/CLOSE.
	RETURN
#
# O17--	TRAP DOOR
#
29000	IF(HERE.NE.LROOM) GO TO 29100		#FROM LIVING ROOM?
	SOBJS=OPNCLS(DOOR,218,219)		#OPEN/CLOSE.
	RETURN
#
29100	IF(HERE.NE.CELLA) GO TO 10		#FROM CELLAR?
	IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
	CALL RSPEAK(220)			#CANT OPEN CLOSED DOOR.
	RETURN
#
29200	SOBJS=OPNCLS(DOOR,0,22)			#NORMAL OPEN/CLOSE.
	RETURN
#
# O18--	DURABLE DOOR
#
30000	I=0					#ASSUME NO APPL.
	IF(PRSA.EQ.OPENW) I=221			#OPEN?
	IF(PRSA.EQ.BURNW) I=222			#BURN?
	IF(PRSA.EQ.MUNGW) I=223+RND(3)		#MUNG?
	IF(I.EQ.0) GO TO 10
	CALL RSPEAK(I)
	RETURN
#
# O19--	MASTER SWITCH
#
31000	IF(PRSA.NE.TURNW) GO TO 10		#TURN?
	IF(PRSI.NE.SCREW) GO TO 31500		#WITH SCREWDRIVER?
	IF(QOPEN(MACHI)) GO TO 31600		#LID UP?
	CALL RSPEAK(226)			#NO, ACTIVATE.
	IF(OCAN(COAL).NE.MACHI) GO TO 31400	#COAL INSIDE?
	CALL NEWSTA(COAL,0,0,0,0)		#VANISH COAL.
	CALL NEWSTA(DIAMO,0,0,MACHI,0)		#PRODUCE DIAMOND.
	RETURN
#
31400	DO I=1,OLNT {				#KILL NONCOAL OBJECTS.
	  IF(OCAN(I).NE.MACHI) NEXT		#INSIDE MACHINE?
	  CALL NEWSTA(I,0,0,0,0)
	  CALL NEWSTA(GUNK,0,0,MACHI,0)		#REDUCE TO GUNK.
	  }
	RETURN
#
31500	CALL RSPSUB(300,ODI2)			#CANT TURN WITH THAT.
	RETURN
#
31600	CALL RSPEAK(227)			#LID IS UP.
	RETURN

# SOBJS, PAGE 9
#
# O20--	LEAK
#
33000	IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
		GO TO 10			#PLUG ACTIVE LEAK?
	IF(PRSI.NE.PUTTY) GO TO 33100		#WITH PUTTY?
	RVMNT=-1				#DISABLE LEAK.
	CTICK(CEVMNT)=0
	CALL RSPEAK(577)
	RETURN
#
33100	CALL RSPSUB(301,ODI2)			#CANT WITH THAT.
	RETURN
#
# O21--	DROWNING BUTTONS
#
34000	IF(PRSA.NE.PUSHW) GO TO 10		#PUSH?
	GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
	GO TO 10				#NOT A BUTTON.
#
34100	RFLAG(HERE)=RFLAG(HERE).XOR.RLIGHT	#RED, ZAP LIGHTS.
	I=230
	IF(AND(RFLAG(HERE),RLIGHT).NE.0) I=231
	CALL RSPEAK(I)
	RETURN
#
34200	GATEF=.TRUE.				#RELEASE GATE.
	CALL RSPEAK(232)
	RETURN
#
34300	GATEF=.FALSE.				#INTERLOCK GATE.
	CALL RSPEAK(232)
	RETURN
#
34400	IF(RVMNT.NE.0) GO TO 34500		#LEAK ALREADY STARTED?
	CALL RSPEAK(233)			#NO, START LEAK.
	RVMNT=1
	CTICK(CEVMNT)=-1
	RETURN
#
34500	CALL RSPEAK(234)			#BUTTON JAMMED.
	RETURN
#
# O22--	INFLATABLE BOAT
#
36000	IF(PRSA.NE.INFLAW) GO TO 10		#INFLATE?
	IF(OROOM(IBOAT).NE.0) GO TO 36100	#IN ROOM?
	CALL RSPEAK(235)			#NO, JOKE.
	RETURN
#
36100	IF(PRSI.NE.PUMP) GO TO 36200		#WITH PUMP?
	CALL NEWSTA(IBOAT,0,0,0,0)		#REPLACE BOAT WITH
	CALL NEWSTA(RBOAT,236,HERE,0,0)	#MAGIC BOAT.
	DEFLAF=.FALSE.
	RETURN
#
36200	I=237					#JOKES.
	IF(PRSI.NE.LUNGS) I=303
	CALL RSPSUB(I,ODI2)
	RETURN
#
# O23--	DEFLATED BOAT
#
37000	IF(PRSA.NE.INFLAW) GO TO 37100		#INFLATE?
	CALL RSPEAK(238)			#JOKE.
	RETURN
#
37100	IF(PRSA.NE.PLUGW) GO TO 10		#PLUG?
	IF(PRSI.NE.PUTTY) GO TO 33100		#WITH PUTTY?
	CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
	CALL NEWSTA(DBOAT,0,0,0,0)
	RETURN

# SOBJS, PAGE 10
#
# O24--	RUBBER BOAT
#
38000	IF(ARG.NE.0) GO TO 10			#DISMISS READIN, OUT.
	IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
	CALL NEWSTA(RBOAT,0,0,0,0)		#STICK PUNCTURES
	CALL NEWSTA(DBOAT,240,HERE,0,0)	#INFLATED BOAT.
	DEFLAF=.TRUE.
	RETURN
#
38100	IF(PRSA.NE.INFLAW) GO TO 38200		#INFLATE?
	CALL RSPEAK(367)			#YES, JOKE.
	RETURN
#
38200	IF(PRSA.NE.DEFLAW) GO TO 10		#DEFLATE?
	IF(AV.EQ.RBOAT) GO TO 38300		#IN BOAT?
	IF(OROOM(RBOAT).EQ.0) GO TO 38400	#ON GROUND?
	CALL NEWSTA(IBOAT,241,HERE,0,0)		#REPLACE WITH
	CALL NEWSTA(RBOAT,0,0,0,0)		#INFLATABLE BOAT.
	DEFLAF=.TRUE.
	RETURN
#
38300	CALL RSPEAK(242)			#IN BOAT.
	RETURN
#
38400	CALL RSPEAK(243)			#NOT ON GROUND.
	RETURN
#
# O25--	BRAIDED ROPE
#
41000	IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
		((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
		GO TO 41500			#TIE TO HOOK?
	BTIEF=PRSI				#RECORD LOCATION.
	CFLAG(CEVBAL)=.FALSE.			#STALL ASCENT.
	CALL RSPEAK(248)
	RETURN
#
41500	IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
	IF(BTIEF.NE.0) GO TO 41600		#TIED UP?
	CALL RSPEAK(249)			#NO, JOKE.
	RETURN
#
41600	CALL RSPEAK(250)
	BTIEF=0					#UNTIE.
	CTICK(CEVBAL)=3				#RESTART CLOCK.
	CFLAG(CEVBAL)=.TRUE.
	RETURN
#
# O26--	SAFE
#
42000	I=0					#ASSUME UNPROCESSED.
	IF(PRSA.EQ.TAKEW) I=251			#TAKE?
	IF((PRSA.EQ.OPENW).AND.SAFEF) I=253	#OPEN AFTER BLAST?
	IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254	#OPEN BEFORE BLAST?
	IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253	#CLOSE AFTER?
	IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
	IF(I.EQ.0) GO TO 10
	CALL RSPEAK(I)
	RETURN
#
# O27--	FUSE
#
43000	IF(PRSA.NE.BURNW) GO TO 10		#BURN?
	CALL RSPEAK(256)
	CTICK(CEVFUS)=2				#START COUNTDOWN.
	RETURN
#
# O28--	GNOME
#
44000	IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
	IF(OTVAL(PRSO).EQ.0) GO TO 44100	#TREASURE?
	CALL RSPSUB(257,ODO2)			#YES, GET DOOR.
	CALL NEWSTA(PRSO,0,0,0,0)
	CALL NEWSTA(GNOME,0,0,0,0)		#VANISH GNOME.
	GNODRF=.TRUE.
	RETURN
#
44100	CALL RSPSUB(258,ODO2)			#NO, LOSE OBJECT.
	CALL NEWSTA(PRSO,0,0,0,0)
	RETURN
#
44500	CALL RSPEAK(259)			#NERVOUS GNOME.
	IF(.NOT.GNOMEF) CTICK(CEVGNO)=5		#SCHEDULE BYEBYE.
	GNOMEF=.TRUE.
	RETURN
#
# O29--	COKE BOTTLES
#
46000	IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
	CALL NEWSTA(PRSO,262,0,0,0)		#MUNG BOTTLES.
	RETURN

# SOBJS, PAGE 11
#
#
# O30--	ROBOT
#
53000	IF(PRSA.NE.GIVEW) GO TO 53200		#GIVE?
	CALL NEWSTA(PRSO,0,0,0,AROBOT)		#PUT ON ROBOT.
	CALL RSPSUB(302,ODO2)
	RETURN
#
53200	IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
	CALL NEWSTA(ROBOT,285,0,0,0)		#KILL ROBOT.
	RETURN
#
# O31--	GRUE
#
56000	IF(PRSA.NE.EXAMIW) GO TO 56100		#EXAMINE?
	CALL RSPEAK(288)
	RETURN
#
56100	IF(PRSA.NE.FINDW) GO TO 10		#FIND?
	CALL RSPEAK(289)
	RETURN
#
	END

# BALLOP-	BALLOON FUNCTION
#
