	RETURN
#
15500	IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10
	IF(AND(OFLAG1(PRSI),FLOBTS).EQ.FLOBTS) GO TO 15600
	CALL RSPSUB(298,ODI2)			#CANT MELT WITH THAT.
	RETURN
#
15600	GLACMF=.TRUE.				#PARTIAL MELT.
	IF(PRSI.NE.TORCH) GO TO 15700		#MELT WITH TORCH?
	ODESC1(TORCH)=174			#MUNG TORCH.
	ODESC2(TORCH)=173
	OFLAG1(TORCH)=AND(OFLAG1(TORCH),NOT(FLOBTS))
15700	CALL JIGSUP(172)			#DROWN.
	RETURN
#
# O106--	BLACK BOOK
#
18000	IF(PRSA.NE.OPENW) GO TO 18100		#OPEN?
	CALL RSPEAK(180)			#JOKE.
	RETURN
#
18100	IF(PRSA.NE.CLOSEW) GO TO 18200		#CLOSE?
	CALL RSPEAK(181)
	RETURN
#
18200	IF(PRSA.NE.BURNW) GO TO 10		#BURN?
	CALL NEWSTA(PRSO,0,0,0,0)		#FATAL JOKE.
	CALL JIGSUP(182)
	RETURN

# OAPPLI, PAGE 6
#
# O107--	CANDLES, PROCESSED EXTERNALLY
#
19000	OAPPLI=LIGHTP(CANDL)
	RETURN
#
# O108--	MATCHES, PROCESSED EXTERNALLY
#
20000	OAPPLI=LIGHTP(MATCH)
	RETURN
#
# O109--	CYCLOPS, PROCESSED EXTERNALLY.
#
22000	OAPPLI=CYCLOP(ARG)			#CYCLOPS
	RETURN
#
# O110--	THIEF, PROCESSED EXTERNALLY
#
25000	OAPPLI=THIEFP(ARG)
	RETURN
#
# O111--	WINDOW
#
26000	OAPPLI=OPNCLS(WINDO,208,209)		#OPEN/CLS WINDOW.
	RETURN
#
# O112--	PILE OF BODIES
#
32000	IF(PRSA.NE.TAKEW) GO TO 32500		#TAKE?
	CALL RSPEAK(228)			#CANT.
	RETURN
#
32500	IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10
	IF(ONPOLF) RETURN			#BURN OR MUNG?
	ONPOLF=.TRUE.				#SET HEAD ON POLE.
	CALL NEWSTA(HPOLE,0,LLD2,0,0)
	CALL JIGSUP(229)			#BEHEADED.
	RETURN
#
# O113--	VAMPIRE BAT
#
35000	CALL RSPEAK(50)				#TIME TO FLY, JACK.
	F=MOVETO(BATDRP(RND(9)+1),WINNER)	#SELECT RANDOM DEST.
	F=RMINFO(.FALSE.)
	RETURN

# OAPPLI, PAGE 7
#
# O114--	STICK
#
39000	IF(PRSA.NE.WAVEW) GO TO 10		#WAVE?
	IF(HERE.EQ.MRAIN) GO TO 39500		#ON RAINBOW?
	IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200
	CALL RSPEAK(244)			#NOTHING HAPPENS.
	RETURN
#
39200	OFLAG1(POT)=OFLAG1(POT).OR.VISIBT	#MAKE GOLD VISIBLE.
	RAINBF=.NOT. RAINBF			#COMPLEMENT RAINBOW.
	I=245					#ASSUME OFF.
	IF(RAINBF) I=246			#IF ON, SOLID.
	CALL RSPEAK(I)				#DESCRIBE.
	RETURN
#
39500	RAINBF=.FALSE.				#ON RAINBOW,
	CALL JIGSUP(247)			#TAKE A FALL.
	RETURN
#
# O115--	BALLOON, HANDLED EXTERNALLY
#
40000	OAPPLI=BALLOP(ARG)
	RETURN
#
# O116--	HEADS
#
45000	IF(PRSA.NE.HELLOW) GO TO 45100		#HELLO HEADS?
	CALL RSPEAK(633)			#TRULY BIZARRE.
	RETURN
#
45100	IF(PRSA.EQ.READW) GO TO 10		#READ IS OK.
	CALL NEWSTA(LCASE,260,LROOM,0,0)	#MAKE LARGE CASE.
	I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0)
	CALL JIGSUP(261)			#KILL HIM.
	RETURN

# OAPPLI, PAGE 8
#
# O117--	SPHERE
#
47000	IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 10	#TAKE?
	IF(WINNER.NE.PLAYER) GO TO 47500	#ROBOT TAKE?
	CALL RSPEAK(263)			#NO, DROP CAGE.
	IF(OROOM(ROBOT).NE.HERE) GO TO 47200	#ROBOT HERE?
	F=MOVETO(CAGED,WINNER)			#YES, MOVE INTO CAGE.
	CALL NEWSTA(ROBOT,0,CAGED,0,0)	#MOVE ROBOT.
	AROOM(AROBOT)=CAGED
	OFLAG1(ROBOT)=OFLAG1(ROBOT).OR.NDSCBT	#DONT DESCRIBE ROBOT.
	CTICK(CEVSPH)=10			#GET OUT IN 10 OR ELSE.
	RETURN
#
47200	CALL NEWSTA(SPHER,0,0,0,0)		#YOURE DEAD.
	RFLAG(CAGER)=RFLAG(CAGER).OR.RMUNG	#MUNG CAGE ROOM.
	RRAND(CAGER)=147
	CALL JIGSUP(148)			#MUNG PLAYER.
	RETURN
#
47500	CALL NEWSTA(SPHER,0,0,0,0)		#ROBOT TRIED,
	CALL NEWSTA(ROBOT,264,0,0,0)		#KILL HIM.
	CALL NEWSTA(CAGE,0,HERE,0,0)		#INSERT MANGLED CAGE.
	RETURN
#
# O118--	GEOMETRICAL BUTTONS
#
48000	IF(PRSA.NE.PUSHW) GO TO 10		#PUSH?
	I=PRSO-SQBUT+1				#GET BUTTON INDEX.
	IF((I.LE.0).OR.(I.GE.4)) GO TO 10	#A BUTTON?
	IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I
	CALL JIGSUP(265)			#YOU PUSHED, YOU DIE.
	RETURN
#
48100	I=267
	IF(CAROZF) I=266			#SPEED UP?
	CAROZF=.TRUE.
	CALL RSPEAK(I)
	RETURN
#
48200	I=266					#ASSUME NO CHANGE.
	IF(CAROZF) I=268
	CAROZF=.FALSE.
	CALL RSPEAK(I)
	RETURN
#
48300	CAROFF=.NOT.CAROFF			#FLIP CAROUSEL.
	IF(.NOT.QHERE(IRBOX,CAROU)) RETURN	#IRON BOX IN CAROUSEL?
	CALL RSPEAK(269)			#YES, THUMP.
	OFLAG1(IRBOX)=OFLAG1(IRBOX).XOR.VISIBT	#COMPLEMENT VISIBILITY.
	IF(CAROFF) RFLAG(CAROU)=AND(RFLAG(CAROU),NOT(RSEEN))
	RETURN
#
# O119--	FLASK FUNCTION
#
49000	IF(PRSA.EQ.OPENW) GO TO 49100		#OPEN?
	IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
	CALL NEWSTA(FLASK,270,0,0,0)		#KILL FLASK.
49100	RFLAG(HERE)=RFLAG(HERE).OR.RMUNG	#MUNG ROOM.
	RRAND(HERE)=271
	CALL JIGSUP(272)			#POISONED.
	RETURN
#
# O120--	BUCKET FUNCTION
#
50000	IF(ARG.NE.2) GO TO 10			#READOUT?
	IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500
	BUCKTF=.TRUE.				#BUCKET AT TOP.
	CTICK(CEVBUC)=100			#START COUNTDOWN.
	CALL NEWSTA(BUCKE,290,TWELL,0,0)	#REPOSITION BUCKET.
	GO TO 50900				#FINISH UP.
#
50500	IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10
	BUCKTF=.FALSE.
	CALL NEWSTA(BUCKE,291,BWELL,0,0)	#BUCKET AT BOTTOM.
50900	IF(AV.NE.BUCKE) RETURN			#IN BUCKET?
	F=MOVETO(OROOM(BUCKE),WINNER)	#MOVE ADVENTURER.
	F=RMINFO(.FALSE.)			#DESCRIBE ROOM.
	RETURN

# OAPPLI, PAGE 9
#
# O121--	EATME CAKE
#
51000	IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR.
		(HERE.NE.ALICE)) GO TO 10	#EAT CAKE IN ALICEROOM?
	CALL NEWSTA(ECAKE,273,0,0,0)		#VANISH CAKE.
	OFLAG1(ROBOT)=AND(OFLAG1(ROBOT),NOT(VISIBT))	#VANISH ROBOT.
	DO I=1,OLNT {				#MAKE OBJECTS BIG.
	  IF((OROOM(I).NE.ALICE).OR.(OSIZE(I).EQ.10000)) {
		GO TO 51100
		}
	  OSIZE(I)=OSIZE(I)*64
	  OROOM(I)=ALISM
	  }
	OAPPLI=MOVETO(ALISM,WINNER)		#MOVE TO ALICE SMALL.
	RETURN
#
# O122--	ICINGS
#
52000	IF(PRSA.NE.READW) GO TO 52200		#READ?
	I=274					#CANT READ.
	IF(PRSI.NE.0) I=275			#THROUGH SOMETHING?
	IF(PRSI.EQ.BOTTL) I=276			#THROUGH BOTTLE?
	IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE)	#THROUGH FLASK?
	CALL RSPEAK(I)				#READ FLASK.
	RETURN
#
52200	IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL)) {
		GO TO 52300			#THROW RDICE AT POOL?
		}
	CALL NEWSTA(POOL,280,0,0,0)		#VANISH POOL.
	OFLAG1(SAFFR)=OFLAG1(SAFFR).OR.VISIBT	#MATERIALIZE SPICES.
	RETURN
#
52300	IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR)) {
		GO TO 10			#IN WONDERLAND?
		}
	IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR.
		(PRSO.NE.ORICE)) GO TO 52400	#THROW ORANGE ICE?
	CALL NEWSTA(ORICE,0,0,0,0)		#VANISH ORANGE ICE.
	RFLAG(HERE)=RFLAG(HERE).OR.RMUNG	#VANISH ROOM.
	RRAND(HERE)=281
	CALL JIGSUP(282)			#VANISH ADVENTURER.
	RETURN
#
52400	IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE)) {
		GO TO 10			#EAT BLUE ICE?
		}
	CALL NEWSTA(BLICE,283,0,0,0)		#VANISH BLUE ICE.
	IF(HERE.NE.ALISM) GO TO 52500		#IN REDUCED ROOM?
	OFLAG1(ROBOT)=OFLAG1(ROBOT).OR.VISIBT	#MATERIALIZE ROBOT.
	DO I=1,OLNT {				#ENLARGE WORLD.
	  IF((OROOM(I).NE.HERE).OR.(OSIZE(I).EQ.10000)) {
		NEXT
		}
	  OROOM(I)=ALICE
	  OSIZE(I)=OSIZE(I)/64
	  }
	OAPPLI=MOVETO(ALICE,WINNER)		#RETURN
	RETURN
#
52500	CALL JIGSUP(284)			#ENLARGED IN WRONG ROOM.
	RETURN
#
# O123--	BRICK
#
54000	IF(PRSA.NE.BURNW) GO TO 10		#BURN?
	CALL JIGSUP(150)			#BOOM!
	RETURN
#
# O124--	MYSELF
#
55000	IF(PRSA.NE.GIVEW) GO TO 55100		#GIVE?
	CALL NEWSTA(PRSO,2,0,0,PLAYER)		#DONE.
	RETURN
#
55100	IF(PRSA.NE.TAKEW) GO TO 55200		#TAKE?
	CALL RSPEAK(286)			#JOKE.
	RETURN
#
55200	IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW)) GO TO 10
	CALL JIGSUP(287)			#KILL, NO JOKE.
	RETURN

# OAPPLI, PAGE 10
#
# O125--	PANELS INSIDE MIRROR
#
56000	IF(PRSA.NE.PUSHW) GO TO 10		#PUSH?
	IF(POLEUF.NE.0) GO TO 56100		#SHORT POLE UP?
	I=731					#NO, WONT BUDGE.
	IF(MOD(MDIR,180).EQ.0) I=732		#DIFF MSG IF N-S.
	CALL RSPEAK(I)				#TELL WONT MOVE.
	RETURN
#
56100	IF(MLOC.NE.MRG) GO TO 56200		#IN GDN ROOM?
	CALL RSPEAK(733)			#YOU LOSE.
	CALL JIGSUP(685)
	RETURN
#
56200	I=831					#ROTATE L OR R.
	IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830
	CALL RSPEAK(I)				#TELL DIRECTION.
	MDIR=MOD(MDIR+45+(270*(I-830)),360)	#CALCULATE NEW DIR.
	CALL RSPSUB(734,695+(MDIR/45))		#TELL NEW DIR.
	IF(WDOPNF) CALL RSPEAK(730)		#IF PANEL OPEN, CLOSE.
	WDOPNF=.FALSE.
	RETURN					#DONE.
#
# O126--	ENDS INSIDE MIRROR
#
57000	IF(PRSA.NE.PUSHW) GO TO 10		#PUSH?
	IF(MOD(MDIR,180).EQ.0) GO TO 57100	#MIRROR N-S?
	CALL RSPEAK(735)			#NO, WONT BUDGE.
	RETURN
#
57100	IF(PRSO.NE.PINDR) GO TO 57300		#PUSH PINE WALL?
	IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR.
		((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR.
		(MLOC.EQ.MRG)) GO TO 57200		#IN VIEW OF GDN?
	CALL RSPEAK(736)			#NO, OPENS.
	WDOPNF=.TRUE.				#INDICATE OPEN.
	CFLAG(CEVPIN)=.TRUE.			#TIME OPENING.
	CTICK(CEVPIN)=5
	RETURN
#
57200	CALL RSPEAK(737)			#GDN SEES YOU, DIE.
	CALL JIGSUP(685)
	RETURN
#
57300	NLOC=MLOC-1				#NEW LOC IF SOUTH.
	IF(MDIR.EQ.0) NLOC=MLOC+1		#NEW LOC IF NORTH.
	IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400
	CALL RSPEAK(738)			#HAVE REACHED END.
	RETURN
#
57400	I=699					#ASSUME SOUTH.
	IF(MDIR.EQ.0) I=695			#NORTH.
	J=739					#ASSUME SMOOTH.
	IF(POLEUF.NE.0) J=740			#POLE UP, WOBBLES.
	CALL RSPSUB(J,I)			#DESCRIBE.
	MLOC=NLOC
	IF(MLOC.NE.MRG) RETURN			#NOW IN GDN ROOM?
#
	IF(POLEUF.NE.0) GO TO 57500		#POLE UP, GDN SEES.
	IF(MROPNF.OR.WDOPNF) GO TO 57600	#DOOR OPEN, GDN SEES.
	IF(MR1F.AND.MR2F) RETURN		#MIRRORS INTACT, OK.
	CALL RSPEAK(742)			#MIRRORS BROKEN, DIE.
	CALL JIGSUP(743)
	RETURN
#
57500	CALL RSPEAK(741)			#POLE UP, DIE.
	CALL JIGSUP(743)
	RETURN
#
57600	CALL RSPEAK(744)			#DOOR OPEN, DIE.
	CALL JIGSUP(743)
	RETURN

# OAPPLI, PAGE 11
#
# O127--	GLOBAL GUARDIANS
#
58000	IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
		(PRSA.NE.MUNGW)) GO TO 58100		#AGGRESSIVE?
	CALL JIGSUP(745)			#LOSE.
	RETURN
#
58100	IF(PRSA.NE.HELLOW) GO TO 10		#HELLO?
	CALL RSPEAK(746)			#NO REPLY.
	RETURN
#
# O128--	GLOBAL MASTER
#
59000	IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
		(PRSA.NE.MUNGW)) GO TO 59100		#AGGRESSIVE?
	CALL JIGSUP(747)			#BAD IDEA.
	RETURN
#
59100	IF(PRSA.NE.TAKEW) GO TO 10		#TAKE?
	CALL RSPEAK(748)			#JOKE.
	RETURN
#
# O129--	NUMERAL FIVE (FOR JOKE)
#
60000	IF(PRSA.NE.TAKEW) GO TO 10		#TAKE FIVE?
	CALL RSPEAK(419)			#TIME PASSES.
	DO I=1,3 {				#WAIT A WHILE.
	  IF(CLOCKD(X)) RETURN
	  }
	RETURN
#
# O130--	CRYPT FUNCTION
#
61000	IF(.NOT.ENDGMF) GO TO 45000		#IF NOT EG, DIE.
	IF(PRSA.NE.OPENW) GO TO 61100		#OPEN?
	I=793
	IF(QOPEN(TOMB)) I=794
	CALL RSPEAK(I)
	OFLAG2(TOMB)=OFLAG2(TOMB).OR.OPENBT	#NOW TOMB WITH VIEW.
	RETURN
#
61100	IF(PRSA.NE.CLOSEW) GO TO 45000		#CLOSE?
	I=795
	IF(QOPEN(TOMB)) I=796
	CALL RSPEAK(I)
	OFLAG2(TOMB)=(OFLAG2(TOMB),NOT(OPENBT))
	IF(HERE.EQ.CRYPT) CTICK(CEVSTE)=3	#IF IN CRYPT, START EG.
	RETURN
#
	END

# SVERBS-	SIMPLE VERBS PROCESSOR
#	ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT
#	OF OBJECT ACTIONS
#
# DECLARATIONS
#
	LOGICAL FUNCTION SVERBS(RI)
	IMPLICIT INTEGER (A-Z)
	LOGICAL MOVETO,YESNO
	LOGICAL RMINFO
	LOGICAL QOPEN
	LOGICAL FINDXT,QHERE,F
	INTEGER JOKES(20)
	LOGICAL ANSSTR(78)
	LOGICAL P1(6),P2(6),CH(6)
	INTEGER ANSWER(28)
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	common /spare/ccflg
	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
#
	LOGICAL INBUF
	COMMON /INPUT/ INLNT,INBUF(78)
	COMMON /VERS/ VMAJ,VMIN,VEDIT
	COMMON /CHAN/ INPCH,OUTCH,DBCH
#
# 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
#
# 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
#
# 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)
#
	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 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(R)=AND(OFLAG2(R),OPENBT).NE.0
	DATA MXNOP/49/,MXJOKE/69/
	DATA JOKES/4,5,3,304,305,306,307,308,309,310,
		311,312,313,5314,5319,324,325,0,0,0/
	DATA ANSWER/0,6,1,6,2,5,3,5,4,3,4,6,4,6,4,5,
		5,5,5,4,5,6,6,10,7,4,7,6/
	DATA ANSSTR/'T','E','M','P','L','E',
		'F','O','R','E','S','T',
		'3','0','0','0','3',
			'F','L','A','S','K',
		'R','U','B',
		'F','O','N','D','L','E',
		'C','A','R','R','E','S',
		'T','O','U','C','H',
		'B','O','N','E','S',
		'B','O','D','Y',
		'S','K','E','L','E','T',
		'R','U','S','T','Y','K','N','I','F','E',
			'N','O','N','E',
		'N','O','W','H','E','R',0/

# SVERBS, PAGE 2
#
	SVERBS=.TRUE.				#ASSUME WINS.
	IF(PRSO.NE.0) ODO2=ODESC2(PRSO)		#SET UP DESCRIPTORS.
	IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
#
	IF(RI.EQ.0) CALL BUG(7,RI)		#ZERO IS VERBOTEN.
	IF(RI.LE.MXNOP) RETURN			#NOP?
	IF(RI.LE.MXJOKE) GO TO 100		#JOKE?
	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),
		(RI-MXJOKE)
	CALL BUG(7,RI)
#
# ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
#
10	SVERBS=.FALSE.				#LOSE.
	RETURN
#
# JOKE PROCESSOR.
# FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT.
#
100	I=JOKES(RI-MXNOP)			#GET TABLE ENTRY.
	J=I/1000				#ISOLATE # STRINGS.
	IF(J.NE.0) I=MOD(I,1000)+RND(J)		#IF RANDOM, CHOOSE.
	CALL RSPEAK(I)				#PRINT JOKE.
	RETURN

# SVERBS, PAGE 3
#
# V70--	BRIEF.  SET FLAG.
#
1000	BRIEFF=.TRUE.				#BRIEF DESCRIPTIONS.
	SUPERF=.FALSE.
	CALL RSPEAK(326)
	RETURN
#
# V71--	VERBOSE.  CLEAR FLAGS.
#
2000	BRIEFF=.FALSE.				#LONG DESCRIPTIONS.
	SUPERF=.FALSE.
	CALL RSPEAK(327)
	RETURN
#
# V72--	SUPERBRIEF.  SET FLAG.
#
3000	SUPERF=.TRUE.
	CALL RSPEAK(328)
	RETURN
#
# V73-- STAY (USED IN ENDGAME).
#
4000	IF(WINNER.NE.AMASTR) GO TO 4100		#TELL MASTER, STAY.
	CALL RSPEAK(781)			#HE DOES.
	CTICK(CEVFOL)=0				#NOT FOLLOWING.
	RETURN
#
4100	IF(WINNER.EQ.PLAYER) CALL RSPEAK(664)	#JOKE.
	RETURN
#
# V74--	VERSION.  PRINT INFO.
#
5000	WRITE(OUTCH,5010) VMAJ,VMIN,VEDIT
5010	FORMAT(' V',I1,'.',I2,A1)
	ccflg=.false.
	TELFLG=.TRUE.
	RETURN
#
# V75--	SWIM.  ALWAYS A JOKE.
#
6000	I=330					#ASSUME WATER.
	IF(AND(RFLAG(HERE),(RWATER+RFILL)).EQ.0)
		I=331+RND(3)			#IF NO WATER, JOKE.
	CALL RSPEAK(I)
	RETURN
#
# V76--	GERONIMO.  IF IN BARREL, FATAL, ELSE JOKE.
#
7000	IF(HERE.EQ.MBARR) GO TO 7100		#IN BARREL?
	CALL RSPEAK(334)			#NO, JOKE.
	RETURN
#
7100	CALL JIGSUP(335)			#OVER FALLS.
	RETURN
#
# V77--	SINBAD ET AL.  CHASE CYCLOPS, ELSE JOKE.
#
8000	IF((HERE.EQ.MCYCL).AND.QHERE(CYCLO,HERE)) GO TO 8100
	CALL RSPEAK(336)			#NOT HERE, JOKE.
	RETURN
#
8100	CALL NEWSTA(CYCLO,337,0,0,0)		#CYCLOPS FLEES.
	CYCLOF=.TRUE.				#SET ALL FLAGS.
	MAGICF=.TRUE.
	OFLAG2(CYCLO)=AND(OFLAG2(CYCLO),NOT(FITEBT))
	RETURN
#
# V78--	WELL.  OPEN DOOR, ELSE JOKE.
#
9000	IF(RIDDLF.OR.(HERE.NE.RIDDL)) GO TO 9100	#IN RIDDLE ROOM?
	RIDDLF=.TRUE.				#YES, SOLVED IT.
	CALL RSPEAK(338)
	RETURN
#
9100	CALL RSPEAK(339)			#WELL, WHAT?
	RETURN
#
# V79--	PRAY.  IF IN TEMP2, POOF!
#
10000	IF(HERE.NE.TEMP2) GO TO 10050		#IN TEMPLE?
	IF(MOVETO(FORE1,WINNER)) GO TO 10100	#FORE1 STILL THERE?
10050	CALL RSPEAK(340)			#JOKE.
	RETURN
#
10100	F=RMINFO(.TRUE.)			#MOVED, DESCRIBE.
	RETURN
#
# V80--	TREASURE.  IF IN TEMP1, POOF!
#
11000	IF(HERE.NE.TEMP1) GO TO 11050	#IN TEMPLE?
	IF(MOVETO(TREAS,WINNER)) GO TO 10100	#TREASURE ROOM THERE?
11050	CALL RSPEAK(341)			#NOTHING HAPPENS.
	RETURN
#
# V81--	TEMPLE.  IF IN TREAS, POOF!
#
12000	IF(HERE.NE.TREAS) GO TO 12050		#IN TREASURE?
	IF(MOVETO(TEMP1,WINNER)) GO TO 10100	#TEMP1 STILL THERE?
12050	CALL RSPEAK(341)			#NOTHING HAPPENS.
	RETURN
#
# V82--	BLAST.  USUALLY A JOKE.
#
13000	I=342					#DONT UNDERSTAND.
	IF(PRSO.EQ.SAFE) I=252			#JOKE FOR SAFE.
	CALL RSPEAK(I)
	RETURN
#
# V83--	SCORE.  PRINT SCORE.
#
14000	CALL SCORE(.FALSE.)
	RETURN
#
# V84--	QUIT.  FINISH OUT THE GAME.
#
15000	CALL SCORE(.TRUE.)			#TELLL SCORE.
	IF(.NOT.YESNO(343,0,0)) RETURN		#ASK FOR Y/N DECISION.
	CLOSE (UNIT=DBCH,DISPOSE='SAVE')	#CLEAN UP.
	CALL EXIT				#BYE.

# SVERBS, PAGE 4
#
# V85--	FOLLOW (USED IN ENDGAME)
#
16000	IF(WINNER.NE.AMASTR) RETURN		#TELL MASTER, FOLLOW.
	CALL RSPEAK(782)
	CTICK(CEVFOL)=-1			#STARTS FOLLOWING.
	RETURN
#
# V86--	WALK THROUGH
#
17000	IF((SCOLRM.EQ.0).OR.((PRSO.NE.SCOL).AND.
		((PRSO.NE.WNORT).OR.(HERE.NE.BKBOX)))) GO TO 17100
	SCOLAC=SCOLRM				#WALKED THRU SCOL.
	PRSO=0					#FAKE OUT FROMDR.
	CTICK(CEVSCL)=6				#START ALARM.
	CALL RSPEAK(668)			#DISORIENT HIM.
	F=MOVETO(SCOLRM,WINNER)			#INTO ROOM.
	F=RMINFO(.TRUE.)			#DESCRIBE.
	RETURN
#
17100	IF(HERE.NE.SCOLAC) GO TO 17300		#ON OTHER SIDE OF SCOL?
	DO I=1,12,3 {				#WALK THRU PROPER WALL?
	  IF((SCOLWL(I).EQ.HERE).AND.(SCOLWL(I+1).EQ.PRSO)) {
		GO TO 17500			#IN SPECIFIED ROOM?
		}
	  }
#
17300	IF(AND(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 17400	#TKBLE?
	I=669					#NO, JOKE.
	IF(PRSO.EQ.SCOL) I=670			#SPECIAL JOKE FOR SCOL.
	CALL RSPSUB(I,ODO2)
	RETURN
#
17400	I=671					#JOKE.
	IF(OROOM(PRSO).NE.0) I=552+RND(5)	#SPECIAL JOKES IF CARRY.
	CALL RSPEAK(I)
	RETURN
#
17500	PRSO=SCOLWL(I+2)			#THRU SCOL WALL...
	DO I=1,8,2 {				#FIND MATCHING ROOM.
	  IF(PRSO.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
	  }
	CTICK(CEVSCL)=0				#CANCEL ALARM.
	CALL RSPEAK(668)			#DISORIENT HIM.
	F=MOVETO(BKBOX,WINNER)			#BACK IN BOX ROOM.
	F=RMINFO(.TRUE.)
	RETURN
#
# V87--	RING.  A JOKE.
#
18000	I=359					#CANT RING.
	IF(PRSO.EQ.BELL) I=360			#DING, DONG.
	CALL RSPEAK(I)				#JOKE.
	RETURN
#
# V88--	BRUSH.  JOKE WITH OBSCURE TRAP.
#
19000	IF(PRSO.EQ.TEETH) GO TO 19100		#BRUSH TEETH?
	CALL RSPEAK(362)			#NO, JOKE.
	RETURN
#
19100	IF(PRSI.NE.0) GO TO 19200		#WITH SOMETHING?
	CALL RSPEAK(363)			#NO, JOKE.
	RETURN
#
19200	IF((PRSI.EQ.PUTTY).AND.(OADV(PUTTY).EQ.WINNER)) {
		GO TO 19300			#WITH PUTTY?
		}
	CALL RSPSUB(364,ODI2)			#NO, JOKE.
	RETURN
#
19300	CALL JIGSUP(365)			#YES, DEAD!!!!!
	RETURN

# SVERBS, PAGE 5
#
# V89--	DIG.  UNLESS SHOVEL, A JOKE.
#
20000	IF(PRSO.EQ.SHOVE) RETURN		#SHOVEL?
	I=392					#ASSUME TOOL.
	IF(AND(OFLAG1(PRSO),TOOLBT).EQ.0) I=393
	CALL RSPSUB(I,ODO2)
	RETURN
#
# V90--	TIME.  PRINT OUT DURATION OF GAME.
#
21000	CALL GTTIME(K)			#GET PLAY TIME.
	I=K/60
	J=MOD(K,60)
	WRITE(OUTCH,21010)
	IF(I.NE.0) WRITE(OUTCH,21011) I
	IF(I.GE.2) WRITE(OUTCH,21012)
	IF(I.EQ.1) WRITE(OUTCH,21013)
	IF(J.EQ.1) WRITE(OUTCH,21014) J
	IF(J.NE.1) WRITE(OUTCH,21015) J
	ccflg=.false.
	TELFLG=.TRUE.
	RETURN
#
21010	FORMAT(' You have been playing Dungeon for ')
21011	FORMAT('+',I3,' hour')
21012	FORMAT('+s and ')
21013	FORMAT('+ and ')
21014	FORMAT('+',I2,' minute.')
21015	FORMAT('+',I2,' minutes.')
#
# V91--	LEAP.  USUALLY A JOKE, WITH A CATCH.
#
22000	IF(PRSO.EQ.0) GO TO 22200		#OVER SOMETHING?
	IF(QHERE(PRSO,HERE)) GO TO 22100	#HERE?
	CALL RSPEAK(447)			#NO, JOKE.
	RETURN
#
22100	IF(AND(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 22300
	CALL RSPSUB(448,ODO2)			#CANT JUMP VILLAIN.
	RETURN
#
22200	IF(.NOT.FINDXT(XDOWN,HERE)) GO TO 22300	#DOWN EXIT?
	IF((XTYPE.EQ.XNO).OR.((XTYPE.EQ.XCOND).AND.
		.NOT.FLAGS(XFLAG))) GO TO 22400	#BLOCKED OFF?
22300	CALL RSPEAK(314+RND(5))			#WHEEEE!
	RETURN
#
22400	CALL JIGSUP(449+RND(4))			#FATAL LEAP.
	RETURN

# SVERBS, PAGE 6
#
# V92--	LOCK.
#
23000	IF((PRSO.EQ.GRATE).AND.(HERE.EQ.MGRAT)) {
		GO TO 23200
		}
23100	CALL RSPEAK(464)			#NOT LOCK GRATE.
	RETURN
#
23200	GRUNLF=.FALSE.				#GRATE NOW LOCKED.
	CALL RSPEAK(214)
	TRAVEL(REXIT(HERE)+1)=214		#CHANGE EXIT STATUS.
	RETURN
#
# V93--	UNLOCK
#
24000	IF((PRSO.NE.GRATE).OR.(HERE.NE.MGRAT)) {
		GO TO 23100			#NOT UNLOCK GRATE.
		}
	IF(PRSI.EQ.KEYS) GO TO 24200		#GOT KEYS?
	CALL RSPSUB(465,ODI2)			#NO, JOKE.
	RETURN
#
24200	GRUNLF=.TRUE.				#UNLOCK GRATE.
	CALL RSPEAK(217)
	TRAVEL(REXIT(HERE)+1)=217		#CHANGE EXIT STATUS.
	RETURN
#
# V94--	DIAGNOSE.
#
25000	I=FIGHTS(WINNER,.FALSE.)		#GET FIGHTS STRENGTH.
	J=ASTREN(WINNER)			#GET HEALTH.
	K=MIN0(I+J,4)				#GET STATE.
	IF(.NOT.CFLAG(CEVCUR)) J=0		#IF NO WOUNDS.
	L=MIN0(4,IABS(J))			#SCALE.
	CALL RSPEAK(473+L)			#DESCRIBE HEALTH.
	I=(30*(-J-1))+CTICK(CEVCUR)		#COMPUTE WAIT.
	IF(J.NE.0) WRITE(OUTCH,25100) I
25100	FORMAT(' You will be cured after ',I3,' moves.')
	ccflg=.false.
	CALL RSPEAK(478+K)			#HOW MUCH MORE?
	IF(DEATHS.NE.0) CALL RSPEAK(482+DEATHS)	#HOW MANY DEATHS?
	RETURN

# SVERBS, PAGE 7
#
# V95--	INCANT
#
26000	DO I=1,6 {				#SET UP PARSE.
	  P1(I)=' '
	  P2(I)=' '
	  }
	WP=1					#WORD POINTER.
	CP=1					#CHAR POINTER.
	IF((PRSCON.LE.1).OR.(PRSCON.GT.INLNT)) GO TO 26300
	DO I=PRSCON,INLNT {			#PARSE INPUT
	  IF(INBUF(I).EQ.',') GO TO 26300	#END OF PHRASE?
	  IF(INBUF(I).NE.' ') GO TO 26150	#SPACE?
	  IF(CP.NE.1) WP=WP+1
	  CP=1
	  NEXT
26150	  IF(WP.EQ.1) P1(CP)=INBUF(I)		#STUFF INTO HOLDER.
	  IF(WP.EQ.2) P2(CP)=INBUF(I)
	  CP=MIN0(CP+1,6)
	  }
#
26300	PRSCON=1				#KILL REST OF LINE.
	IF(P1(1).NE.' ') GO TO 26400		#ANY INPUT?
	CALL RSPEAK(856)			#NO, HO HUM.
	RETURN
#
26400	CALL ENCRYP(P1,CH)			#COMPUTE RESPONSE.
	IF(P2(1).NE.' ') GO TO 26600	#TWO PHRASES?
#
	IF(SPELLF) GO TO 26550			#HE'S TRYING TO LEARN.
	IF(AND(RFLAG(MRANT),RSEEN).NE.0) GO TO 26575
	SPELLF=.TRUE.				#TELL HIM.
	TELFLG=.TRUE.
	WRITE(OUTCH,26510) P1,CH
%26510	FORMAT(' A hollow voice replies:  \"',6A1,1X,6A1,'\".')
	ccflg=.false.
	RETURN
#
26550	CALL RSPEAK(857)			#HE'S GOT ONE ALREADY.
	RETURN
#
26575	CALL RSPEAK(858)			#HE'S NOT IN ENDGAME.
	RETURN
#
26600	IF(AND(RFLAG(TSTRS),RSEEN).NE.0) GO TO 26800
	DO I=1,6 {
	  IF(P2(I).NE.CH(I)) GO TO 26575	#WRONG.
	  }
	SPELLF=.TRUE.				#IT WORKS.
	CALL RSPEAK(859)
	CTICK(CEVSTE)=1				#FORCE START.
	RETURN
#
26800	CALL RSPEAK(855)			#TOO LATE.
	RETURN

# SVERBS, PAGE 8
#
# V96--	ANSWER
#
27000	IF((PRSCON.GT.1).AND.(PRSCON.LE.INLNT).AND.
