# DUNGEON-- MAIN PROGRAM
#
	PROGRAM DUNGEO
	INCLUDE 'zork.com'

# DUNGEON, PAGE 2
#
# DATA STATEMENTS FOR CONSTANT ARRAYS
#
	DATA VMAJ/2/,VMIN/1/,VEDIT/'A'/
#
	DATA SDIR/o'40000'/,SIND/o'20000'/,SSTD/o'10000'/,
		SFLIP/o'4000'/,SDRIV/o'2000'/,SVMASK/o'777'/
	DATA VABIT/o'40000'/,VRBIT/o'20000'/,VTBIT/o'10000'/,
		VCBIT/o'4000'/,VEBIT/o'2000'/,VFBIT/o'1000'/,VPMASK/o'777'/
#
	DATA BATDRP/66,67,68,69,70,71,72,65,73/
#
	DATA SCOLDR/o'2000',153,o'12000',154,o'6000',152,o'16000',151/
	DATA SCOLWL/151,202,o'6000',152,203,o'16000',
		153,201,o'12000',154,200,o'2000'/
#
	DATA CEVCUR/1/,CEVMNT/2/,CEVLNT/3/,CEVMAT/4/,
		CEVCND/5/,CEVBAL/6/,CEVBRN/7/,CEVFUS/8/,
		CEVLED/9/,CEVSAF/10/,CEVVLG/11/,CEVGNO/12/,
		CEVBUC/13/,CEVSPH/14/,CEVEGH/15/,
		CEVFOR/16/,CEVSCL/17/,CEVZGI/18/,CEVZGO/19/,
		CEVSTE/20/,CEVMRS/21/,CEVPIN/22/,CEVINQ/23/,
		CEVFOL/24/
#
	DATA XRMASK/o'377'/,XDMASK/o'76000'/,XFMASK/3/
	DATA XFSHFT/256/,XASHFT/256/
	DATA XNORM/1/,XNO/2/,XCOND/3/,XDOOR/4/
	DATA XELNT/1,2,3,3/,XLFLAG/o'100000'/
	DATA XMIN/o'2000'/,XMAX/o'40000'/,XUP/o'22000'/,XDOWN/o'24000'/
	DATA XNORTH/o'2000'/,XSOUTH/o'12000'/,XENTER/o'32000'/,XEXIT/o'34000'/
#
	DATA PLAYER/1/,AROBOT/2/,AMASTR/3/
	DATA ASTAG/o'100000'/
#
	DATA RSEEN/o'100000'/,RLIGHT/o'40000'/,RLAND/o'20000'/
	DATA RWATER/o'10000'/,RAIR/o'4000'/,RSACRD/o'2000'/,RFILL/o'1000'/
	DATA RMUNG/o'400'/,RBUCK/o'200'/,RHOUSE/o'100'/,RNWALL/o'40'/,REND/o'20'/
#
	DATA WHOUS/2/,LROOM/8/,CELLA/9/
	DATA MTROL/10/,MAZE1/11/
	DATA MGRAT/25/,MAZ15/30/
	DATA FORE1/31/,FORE3/33/,CLEAR/36/,RESER/40/
	DATA STREA/42/,EGYPT/44/,ECHOR/49/
	DATA TSHAF/61/
	DATA BSHAF/76/,MMACH/77/,DOME/79/,MTORC/80/
	DATA CAROU/83/
	DATA RIDDL/91/,LLD2/94/,TEMP1/96/,TEMP2/97/,MAINT/100/
	DATA MCYCL/101/,BLROO/102/,TREAS/103/,RIVR1/107/,RIVR2/108/
	DATA 	RIVR3/109/
	DATA RIVR4/112/,RIVR5/113/,FCHMP/114/,MBARR/119/,FALLS/120/
	DATA MRAIN/121/,POG/122/,VLBOT/126/,VAIR1/127/,VAIR2/128/
	DATA 	VAIR3/129/,VAIR4/130/
	DATA LEDG2/131/,LEDG3/132/,LEDG4/133/,MSAFE/135/,CAGER/140/
	DATA CAGED/141/,TWELL/142/,BWELL/143/,ALICE/144/,ALISM/145/
	DATA 	ALITR/146/,MTREE/147/,BKENT/148/
	DATA BKVW/151/,BKTWI/153/,BKVAU/154/,BKBOX/155/
	DATA	CRYPT/157/,TSTRS/158/,MRANT/159/
	DATA MREYE/160/,MRA/161/,MRB/162/,MRC/163/,MRG/164/
	DATA	MRD/165/,FDOOR/166/,MRAE/167/
	DATA MRCE/171/,MRCW/172/,MRGE/173/,MRGW/174/,MRDW/176/
	DATA	INMIR/177/,SCORR/179/
	DATA NCORR/182/,PARAP/183/,CELL/184/,PCELL/185/,NCELL/186/
#
	DATA CINTW/1/,DEADXW/2/,FRSTQW/3/,INXW/4/
	DATA OUTXW/5/,WALKIW/6/,FIGHTW/7/,FOOW/8/
#
	DATA READW/100/,MELTW/101/
	DATA INFLAW/102/,DEFLAW/103/,ALARMW/104/,EXORCW/105/
	DATA PLUGW/106/,KICKW/107/,WAVEW/108/,RAISEW/109/,LOWERW/110/
	DATA RUBW/111/,PUSHW/112/,UNTIEW/113/,TIEW/114/,TIEUPW/115/
	DATA TURNW/116/,BREATW/117/,KNOCKW/118/,LOOKW/119/
	DATA EXAMIW/120/,SHAKEW/121/,MOVEW/122/,TRNONW/123/,TRNOFW/124/
	DATA OPENW/125/,CLOSEW/126/,FINDW/127/,WAITW/128/,SPINW/129/
	DATA BOARDW/130/,UNBOAW/131/,TAKEW/132/,INVENW/133/
	DATA FILLW/134/,EATW/135/,DRINKW/136/,BURNW/137/
	DATA MUNGW/138/,KILLW/139/,ATTACW/141/
	DATA SWINGW/140/,WALKW/142/,TELLW/143/,PUTW/144/
	DATA DROPW/145/,GIVEW/146/,POURW/147/,THROWW/148/
#
	DATA DIGW/89/,LEAPW/91/,STAYW/73/,FOLLOW/85/
	DATA HELLOW/151/,LOOKIW/152/,LOOKUW/153/,PUMPW/154/
	DATA WINDW/155/,CLMBW/156/,CLMBUW/157/,CLMBDW/158/,TRNTOW/159/
#
	DATA VISIBT/o'100000'/,READBT/o'40000'/,TAKEBT/o'20000'/,DOORBT/o'10000'/,
		TRANBT/o'4000'/,FOODBT/o'2000'/,NDSCBT/o'1000'/,DRNKBT/o'400'/,
		CONTBT/o'200'/,LITEBT/o'100'/,VICTBT/o'40'/,BURNBT/o'20'/,
		FLAMBT/o'10'/,TOOLBT/o'4'/,TURNBT/o'2'/,ONBT/o'1'/
#
	DATA FINDBT/o'100000'/,SLEPBT/o'40000'/,SCRDBT/o'20000'/,TIEBT/o'10000'/,
		CLMBBT/o'4000'/,ACTRBT/o'2000'/,WEAPBT/o'1000'/,FITEBT/o'400'/,
		VILLBT/o'200'/,STAGBT/o'100'/,TRYBT/o'40'/,NOCHBT/o'20'/,
		OPENBT/o'10'/,TCHBT/o'4'/,VEHBT/o'2'/,SCHBT/o'1'/
#
	DATA GARLI/2/,FOOD/3/,GUNK/4/,COAL/5/,MACHI/7/,DIAMO/8/
	DATA	TCASE/9/,BOTTL/10/
	DATA WATER/11/,ROPE/12/,KNIFE/13/,SWORD/14/,LAMP/15/,BLAMP/16/
	DATA	RUG/17/,LEAVE/18/,TROLL/19/,AXE/20/
	DATA RKNIF/21/,KEYS/23/,BAR/26/,ICE/30/
	DATA COFFI/33/,TORCH/34/,TBASK/35/,FBASK/36/,IRBOX/39/
	DATA GHOST/42/,TRUNK/45/,BELL/46/,BOOK/47/,CANDL/48/
	DATA MATCH/51/,TUBE/54/,PUTTY/55/,WRENC/56/,SCREW/57/
	DATA	CYCLO/58/,CHALI/59/
	DATA THIEF/61/,STILL/62/,WINDO/63/,GRATE/65/,DOOR/66/
	DATA HPOLE/71/,RBUTT/79/,LEAK/78/,RAILI/75/
	DATA POT/85/,STATU/86/,IBOAT/87/,DBOAT/88/,PUMP/89/,RBOAT/90/
	DATA STICK/92/,BUOY/94/,SHOVE/96/,GUANO/97/,BALLO/98/,RECEP/99/
	DATA BROPE/101/,HOOK1/102/,HOOK2/103/,SAFE/105/,SSLOT/107/
	DATA	BRICK/109/,FUSE/110/
	DATA GNOME/111/,BLABE/112/,DBALL/113/,TOMB/119/
	DATA LCASE/123/,CAGE/124/,RCAGE/125/,SPHER/126/,SQBUT/127/
	DATA FLASK/132/,POOL/133/,SAFFR/134/,BUCKE/137/,ORICE/139/
	DATA	ECAKE/138/,RDICE/140/
	DATA BLICE/141/,ROBOT/142/,FTREE/145/,BILLS/148/,PORTR/149/
	DATA SCOL/151/,ZGNOM/152/,EGG/154/,BEGG/155/,BAUBL/156/
	DATA	CANAR/157/,BCANA/158/,YLWAL/159/
	DATA RDWAL/161/,PINDR/164/
	DATA RBEAM/171/,ODOOR/172/,QDOOR/173/,CDOOR/175/
	DATA	NUM1/178/,NUM8/185/
	DATA ITOBJ/187/,OPLAY/188/,EVERY/189/
	DATA	VALUA/190/,SAILO/191/,TEETH/192/,WALL/193/
	DATA HANDS/195/,LUNGS/196/,AVIAT/197/
	DATA WNORT/200/,GWATE/204/,MASTER/210/

# DUNGEON, PAGE 3
#
# 1) INITIALIZE DATA STRUCTURES
# 2) PLAY GAME
#
	CALL ERRSET(0)				#NO OV'FLO MESSAGES
	IF(INIT(X)) CALL GAME			#IF INIT, PLAY GAME.
	CALL EXIT				#DONE
	END
# GAME- MAIN COMMAND LOOP FOR DUNGEON
#
# DECLARATIONS
#
	SUBROUTINE GAME
	IMPLICIT INTEGER (A-Z)
	LOGICAL RMINFO,VAPPLI,RAPPLI,AAPPLI
	LOGICAL F,PARSE,FINDXT,XVEHIC,LIT
	LOGICAL SECHO(4),GDTSTR(3)
#
# 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
#
# MISCELLANEOUS VARIABLES
#
	LOGICAL INLINE
	COMMON /INPUT/ INLNT,INLINE(78)
	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 /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
#
# 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
#
	DATA SECHO/'E','C','H','O'/
	DATA GDTSTR/'G','D','T'/

# GAME, PAGE 2
#
# START UP, DESCRIBE CURRENT LOCATION.
#
	CALL RSPEAK(1)				#WELCOME ABOARD.
	F=RMINFO(.TRUE.)			#START GAME.
#
# NOW LOOP, READING AND EXECUTING COMMANDS.
#
100	WINNER=PLAYER				#PLAYER MOVING.
	TELFLG=.FALSE.				#ASSUME NOTHING TOLD.
	IF(PRSCON.LE.1) CALL RDLINE(INLINE,INLNT,1)	#READ COMMAND.
#
	DO I=1,3 {				#CALL ON GDT?
	  IF(INLINE(I+PRSCON-1).NE.GDTSTR(I)) GO TO 200
	  }
	CALL GDT				#YES, INVOKE.
	GO TO 100				#ONWARD.
#
200	MOVES=MOVES+1
	PRSWON=PARSE(INLINE,INLNT,.TRUE.)	#PARSE INPUT, NORMAL MODE.
	IF(.NOT.PRSWON) GO TO 400		#PARSE LOSES?
	IF(XVEHIC(1)) GO TO 400			#VEHICLE HANDLE?
#
	IF(PRSA.EQ.TELLW) GO TO 2000		#TELL?
300	IF((PRSO.EQ.VALUA).OR.(PRSO.EQ.EVERY)) GO TO 900
	prsab=prsa
	IF(.NOT.VAPPLI(PRsab)) GO TO 400	#VERB OK?
350	IF(.NOT.ECHOF.AND.(HERE.EQ.ECHOR)) GO TO 1000
	F=RAPPLI(RACTIO(HERE))
#
400	CALL XENDMV(TELFLG)			#DO END OF MOVE.
	IF(.NOT.LIT(HERE)) PRSCON=1
	GO TO 100
#
900	CALL VALUAC(VALUA)
	GO TO 350

# GAME, PAGE 3
#
# SPECIAL CASE-- ECHO ROOM.
# IF INPUT IS NOT 'ECHO' OR A DIRECTION, JUST ECHO.
#
1000	CALL RDLINE(INLINE,INLNT,0)		#READ LINE.
	MOVES=MOVES+1				#CHARGE FOR MOVES.
	DO I=1,4 {				#INPUT = ECHO?
	  IF(INLINE(I).NE.SECHO(I)) GO TO 1300
	  }
#
	DO I=5,78 {				#REST BLANK?
	  IF(INLINE(I).NE.' ') GO TO 1300
	  }
#
	CALL RSPEAK(571)			#KILL THE ECHO.
	ECHOF=.TRUE.
	OFLAG2(BAR)=AND(OFLAG2(BAR),NOT(SCRDBT))	#LET THIEF STEAL BAR.
	PRSWON=.TRUE.				#FAKE OUT PARSER.
	PRSCON=1				#FORCE NEW INPUT.
	GO TO 400
#
1300	PRSWON=PARSE(INLINE,INLNT,.FALSE.)	#PARSE INPUT, ECHO MODE.
	IF(.NOT.PRSWON .OR. (PRSA.NE.WALKW)) {
		GO TO 1400			#WALK?
		}
	IF(FINDXT(PRSO,HERE)) GO TO 300		#VALID EXIT?
#
1400	WRITE(OUTCH,1410) (INLINE(J),J=1,INLNT)	#ECHO INPUT.
1410	FORMAT('+',78A1)
	ccflg=.false.
	TELFLG=.TRUE.				#INDICATE OUTPUT.
	GO TO 1000				#MORE ECHO ROOM.

# GAME, PAGE 4
#
# SPECIAL CASE-- TELL <ACTOR>, NEW COMMAND
# NOTE THAT WE CANNOT BE IN THE ECHO ROOM.
#
2000	IF(AND(OFLAG2(PRSO),ACTRBT).NE.0) GO TO 2100	#ACTOR?
	CALL RSPEAK(602)			#CANT DO IT.
	GO TO 350				#VAPPLI SUCCEEDS.
#
2100	WINNER=OACTOR(PRSO)			#NEW PLAYER.
	HERE=AROOM(WINNER)			#NEW LOCATION.
	IF(PRSCON.LE.1) GO TO 2700		#ANY INPUT?
	IF(PARSE(INLINE,INLNT,.TRUE.)) GO TO 2150	#PARSE COMMAND.
2700	I=341					#FAILS.
	IF(TELFLG) I=604			#GIVE RESPONSE.
	CALL RSPEAK(I)
2600	WINNER=PLAYER				#RESTORE STATE.
	HERE=AROOM(WINNER)
	GO TO 350
#
2150	IF(AAPPLI(AACTIO(WINNER))) GO TO 2400	#ACTOR HANDLE?
	IF(XVEHIC(1)) GO TO 2400		#VEHICLE HANDLE?
	IF((PRSO.EQ.VALUA).OR.(PRSO.EQ.EVERY)) GO TO 2900
	IF(.NOT.VAPPLI(PRSA)) GO TO 2400	#VERB HANDLE?
2350	F=RAPPLI(RACTIO(HERE))
#
2400	CALL XENDMV(TELFLG)			#DO END OF MOVE.
	GO TO 2600				#DONE.
#
2900	CALL VALUAC(VALUA)			#ALL OR VALUABLES.
	GO TO 350
#
	END

# XENDMV-	EXECUTE END OF MOVE FUNCTIONS.
#
# DECLARATIONS
#
	SUBROUTINE XENDMV(FLAG)
	IMPLICIT INTEGER(A-Z)
	LOGICAL F,CLOCKD,FLAG,XVEHIC
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSO,PRSI,PRSWON,PRSCON
#
# VILLAINS AND DEMONS
#
	LOGICAL THFFLG,SWDACT,THFACT
	COMMON /HACK/ THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
#
	IF(.NOT.FLAG) CALL RSPEAK(341)		#DEFAULT REMARK.
	IF(THFACT) CALL THIEFD			#THIEF DEMON.
	IF(PRSWON) CALL FIGHTD			#FIGHT DEMON.
	IF(SWDACT) CALL SWORDD			#SWORD DEMON.
	IF(PRSWON) F=CLOCKD(X)			#CLOCK DEMON.
	IF(PRSWON) F=XVEHIC(2)			#VEHICLE READOUT.
	RETURN
	END

# XVEHIC- EXECUTE VEHICLE FUNCTION
#
# DECLARATIONS
#
	LOGICAL FUNCTION XVEHIC(N)
	IMPLICIT INTEGER(A-Z)
	LOGICAL OAPPLI
#
# 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)
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	XVEHIC=.FALSE.				#ASSUME LOSES.
	AV=AVEHIC(WINNER)			#GET VEHICLE.
	IF(AV.NE.0) XVEHIC=OAPPLI(OACTIO(AV),N)
	RETURN
	END

# RSPEAK-- OUTPUT RANDOM MESSAGE ROUTINE
#
# CALLED BY--
#
#	CALL RSPEAK(MSGNUM)
#
	SUBROUTINE RSPEAK(N)
	IMPLICIT INTEGER(A-Z)
#
	CALL RSPSB2(N,0,0)
	RETURN
	END

# RSPSUB-- OUTPUT RANDOM MESSAGE WITH SUBSTITUTABLE ARGUMENT
#
# CALLED BY--
#
#	CALL RSPSUB(MSGNUM,SUBNUM)
#
	SUBROUTINE RSPSUB(N,S1)
	IMPLICIT INTEGER(A-Z)
#
	CALL RSPSB2(N,S1,0)
	RETURN
	END

# RSPSB2-- OUTPUT RANDOM MESSAGE WITH SUBSTITUTABLE ARGUMENTS
#
# CALLED BY--
#
#	CALL RSPSB2(MSGNUM,S1,S2)
#
	SUBROUTINE RSPSB2(A,B,C)
	IMPLICIT INTEGER(A-Z)
	LOGICAL B1(78),B2(78)
	integer bx(16),by(16)
#
# DECLARATIONS
#
	LOGICAL TELFLG,CCFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /SPARE/CCFLG
#
	COMMON /RMSG/ MLNT,RTEXT(1050)
	COMMON /CHAN/ INPCH,OUTCH,DBCH
#
# CONVERT ALL ARGUMENTS FROM DICTIONARY NUMBERS (IF POSITIVE)
# TO ABSOLUTE RECORD NUMBERS.
#
	X=A					#SET UP WORK VARIABLES.
	Y=B
	Z=C
	IF(X.GT.0) X=RTEXT(X)			#IF >0, LOOK UP IN RTEXT.
	IF(Y.GT.0) Y=RTEXT(Y)
	IF(Z.GT.0) Z=RTEXT(Z)
	X=IABS(X)				#TAKE ABS VALUE.
	Y=IABS(Y)
	Z=IABS(Z)
	IF(X.EQ.0) RETURN			#ANYTHING TO DO?
	TELFLG=.TRUE.				#SAID SOMETHING.
#
	READ(DBCH,REC=X) OLDREC,bx			#READ FIRST LINE.
200	len=78
	call decrpt(x,b1,len,bx)
250	IF(Y.EQ.0) GO TO 400			#ANY SUBSTITUTABLE?
	DO I=1,78 {				#YES, LOOK FOR #.
	  IF(B1(I).EQ.'#') GO TO 1000
	  }
#
400	DO I=len,1,-1 {				#BACKSCAN FOR BLANKS.
	  IF(B1(I).NE.' ') GO TO 600
	  }
#
600	IF(.NOT.CCFLG)WRITE(OUTCH,610)
610	FORMAT(' ')
	WRITE(OUTCH,650) (B1(J),J=1,I)		#OUTPUT LINE.
650	FORMAT('+',78A1)
	CCFLG=.FALSE.
	X=X+1					#ON TO NEXT RECORD.
	READ(DBCH,REC=X) NEWREC,bx		#READ NEXT RECORD.
	IF(OLDREC.EQ.NEWREC) GO TO 200		#CONTINUATION?
	RETURN					#NO, EXIT.
#
# SUBSTITUTION WITH SUBSTITUTABLE AVAILABLE.
# I IS INDEX OF # IN B1.
# Y IS NUMBER OF RECORD TO SUBSTITUTE.
#
# PROCEDURE:
#   1) COPY REST OF B1 TO B2
#   2) READ SUBSTITUTABLE OVER B1
#   3) RESTORE TAIL OF ORIGINAL B1
#
# THE IMPLICIT ASSUMPTION HERE IS THAT THE SUBSTITUTABLE STRING
# IS VERY SHORT.
#
1000	K2=1					#TO
	DO K1=I+1,78 {				#COPY REST OF B1.
	  B2(K2)=B1(K1)
	  K2=K2+1
	  }
#
	READ(DBCH,REC=Y) J,by
	len2=78-i+1
	call decrpt(y,b1(i),len2,by)
#
	DO J=78,1,-1 {				#ELIM TRAILING BLANKS.
	  IF(B1(J).NE.' ') GO TO 1300
	  }
#
1300	K1=1					#FROM
	DO K2=J+1,78 {				#COPY REST OF B1 BACK.
	  B1(K2)=B2(K1)
	  K1=K1+1
	  }
#
	Y=Z					#SET UP FOR NEXT
	Z=0					#SUBSTITUTION AND
	GO TO 250				#RECHECK LINE.
#
	END

# OBJACT-- APPLY OBJECTS FROM PARSE VECTOR
#
# DECLARATIONS
#
	LOGICAL FUNCTION OBJACT(X)
	IMPLICIT INTEGER (A-Z)
	LOGICAL OAPPLI
#
# 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)
#
	OBJACT=.TRUE.				#ASSUME WINS.
	IF(PRSI.EQ.0) GO TO 100			#IND OBJECT?
	IF(OAPPLI(OACTIO(PRSI),0)) RETURN	#YES, LET IT HANDLE.
#
100	IF(PRSO.EQ.0) GO TO 200			#DIR OBJECT?
	IF(OAPPLI(OACTIO(PRSO),0)) RETURN	#YES, LET IT HANDLE.
#
200	OBJACT=.FALSE.				#LOSES.
	RETURN
	END

# BUG-- REPORT FATAL SYSTEM ERROR
#
# CALLED BY--
#
#	CALL BUG(NO,PAR)
#
	SUBROUTINE BUG(A,B)
	IMPLICIT INTEGER(A-Z)
#
	COMMON /DEBUG/ DBGFLG
#
	TYPE 100,A,B
	IF(DBGFLG.NE.0) RETURN
	CALL EXIT
#
100	FORMAT(' PROGRAM ERROR ',I2,', PARAMETER=',I6)
	END

# NEWSTA-- SET NEW STATUS FOR OBJECT
#
# CALLED BY--
#
#	CALL NEWSTA(OBJECT,STRING,NEWROOM,NEWCON,NEWADV)
#
	SUBROUTINE NEWSTA(O,R,RM,CN,AD)
	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 RSPEAK(R)
	OROOM(O)=RM
	OCAN(O)=CN
	OADV(O)=AD
	RETURN
	END

# QHERE-- TEST FOR OBJECT IN ROOM
#
# DECLARATIONS
#
	LOGICAL FUNCTION QHERE(OBJ,RM)
	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 /OROOM2/ R2LNT,O2(15),R2(15)
#
	QHERE=.TRUE.
	IF(OROOM(OBJ).EQ.RM) RETURN		#IN ROOM?
	DO I=1,R2LNT {				#NO, SCH ROOM2.
	  IF((O2(I).EQ.OBJ).AND.(R2(I).EQ.RM)) RETURN
	  }
	QHERE=.FALSE.				#NOT PRESENT.
	RETURN
	END

# QEMPTY-- TEST FOR OBJECT EMPTY
#
# DECLARATIONS
#
	LOGICAL FUNCTION QEMPTY(OBJ)
	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)
#
	QEMPTY=.FALSE.				#ASSUME LOSE.
	DO I=1,OLNT {
	  IF(OCAN(I).EQ.OBJ) RETURN		#INSIDE TARGET?
	  }
	QEMPTY=.TRUE.
	RETURN
	END

# JIGSUP- YOU ARE DEAD
#
# DECLARATIONS
#
	SUBROUTINE JIGSUP(DESC)
	IMPLICIT INTEGER (A-Z)
	LOGICAL YESNO,MOVETO,QHERE,F
	INTEGER RLIST(9)
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
	COMMON /STATE/ MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,
		LTSHFT,BLOC,MUNGRM,HS,EGSCOR,EGMXSC
#
	COMMON /CHAN/ INPCH,OUTCH,DBCH
	COMMON /DEBUG/ DBGFLG
#
# 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
#
# 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
#
	DATA RLIST/8,6,36,35,34,4,34,6,5/

# JIGSUP, PAGE 2
#
	CALL RSPEAK(DESC)			#DESCRIBE SAD STATE.
	PRSCON=1				#STOP PARSER.
	IF(DBGFLG.NE.0) RETURN			#IF DBG, EXIT.
	AVEHIC(WINNER)=0			#GET RID OF VEHICLE.
	IF(WINNER.EQ.PLAYER) GO TO 100		#HIMSELF?
	CALL RSPSUB(432,ODESC2(AOBJ(WINNER)))	#NO, SAY WHO DIED.
	CALL NEWSTA(AOBJ(WINNER),0,0,0,0)	#SEND TO HYPER SPACE.
	RETURN
#
100	IF(ENDGMF) GO TO 900			#NO RECOVERY IN END GAME.
	IF(DEATHS.GE.2) GO TO 1000		#DEAD TWICE? KICK HIM OFF.
	IF(.NOT.YESNO(10,9,8)) GO TO 1100	#CONTINUE?
#
	DO J=1,OLNT {				#TURN OFF FIGHTING.
	  IF(QHERE(J,HERE)) OFLAG2(J)=AND(OFLAG2(J),NOT(FITEBT))
	  }
#
	DEATHS=DEATHS+1
	CALL SCRUPD(-10)			#CHARGE TEN POINTS.
	F=MOVETO(FORE1,WINNER)			#REPOSITION HIM.
	EGYPTF=.TRUE.				#RESTORE COFFIN.
	IF(OADV(COFFI).EQ.WINNER) CALL NEWSTA(COFFI,0,EGYPT,0,0)
	OFLAG2(DOOR)=AND(OFLAG2(DOOR),NOT(TCHBT))	#RESTORE DOOR.
	OFLAG1(ROBOT)=AND(OR(OFLAG1(ROBOT),VISIBT),NOT(NDSCBT))
	IF((OROOM(LAMP).NE.0).OR.(OADV(LAMP).EQ.WINNER)) {
		CALL NEWSTA(LAMP,0,LROOM,0,0)	#RESTORE LAMP.
		}
#
# NOW REDISTRIBUTE HIS VALUABLES AND OTHER BELONGINGS.
#
# THE LAMP HAS BEEN PLACED IN THE LIVING ROOM.
# THE FIRST 8 NON-VALUABLES ARE PLACED IN LOCATIONS AROUND THE HOUSE.
# HIS VALUABLES ARE PLACED AT THE END OF THE MAZE.
# REMAINING NON-VALUABLES ARE PLACED AT THE END OF THE MAZE.
#
	I=1
	DO J=1,OLNT {				#LOOP THRU OBJECTS.
	  IF((OADV(J).NE.WINNER).OR.(OTVAL(J).NE.0)) {
		GO TO 200			#GET HIS NON-VAL OBJS.
		}
	  I=I+1
	  IF(I.GT.9) GO TO 400			#MOVE TO RANDOM LOCATIONS.
	  CALL NEWSTA(J,0,RLIST(I),0,0)
	  }
#
400	I=RLNT+1				#NOW MOVE VALUABLES.
	NONOFL=RAIR+RWATER+RSACRD+REND		#DONT MOVE HERE.
	DO J=1,OLNT {
	  IF((OADV(J).NE.WINNER).OR.(OTVAL(J).EQ.0)) {
		NEXT				#ON ADV AND VALUABLE?
		}
250	  I=I-1					#FIND NEXT ROOM.
	  IF(AND(RFLAG(I),NONOFL).NE.0) GO TO 250	#SKIP IF NONO.
	  CALL NEWSTA(J,0,I,0,0)		#YES, MOVE.
	  }
#
	DO J=1,OLNT {				#NOW GET RID OF REMAINDER.
	  IF(OADV(J).NE.WINNER) NEXT
450	  I=I-1					#FIND NEXT ROOM.
	  IF(AND(RFLAG(I),NONOFL).NE.0) GO TO 450	#SKIP IF NONO.
	  CALL NEWSTA(J,0,I,0,0)
	  }
	RETURN
#
# CANT OR WONT CONTINUE, CLEAN UP AND EXIT.
#
900	CALL RSPEAK(625)			#IN ENDGAME, LOSE.
	GO TO 1100
#
1000	CALL RSPEAK(7)				#INVOLUNTARY EXIT.
1100	CALL SCORE(.FALSE.)			#TELL SCORE.
	CLOSE (UNIT=DBCH,DISPOSE='SAVE')
	CALL EXIT
#
	END

# OACTOR-	GET ACTOR ASSOCIATED WITH OBJECT
#
# DECLARATIONS
#
	INTEGER FUNCTION OACTOR(OBJ)
	IMPLICIT INTEGER(A-Z)
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	DO I=1,ALNT {				#LOOP THRU ACTORS.
	  OACTOR=I				#ASSUME FOUND.
	  IF(AOBJ(I).EQ.OBJ) RETURN		#FOUND IT?
	  }
	CALL BUG(40,OBJ)			#NO, DIE.
	RETURN
	END

# PROB-		COMPUTE PROBABILITY
#
# DECLARATIONS
#
	LOGICAL FUNCTION PROB(G,B)
	IMPLICIT INTEGER(A-Z)
#
# 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
#
	I=G					#ASSUME GOOD LUCK.
	IF(BADLKF) I=B				#IF BAD, TOO BAD.
	PROB=RND(100).LT.I			#COMPUTE.
	RETURN
	END

# RMINFO-- PRINT ROOM DESCRIPTION
#
# RMINFO PRINTS A DESCRIPTION OF THE CURRENT ROOM.
# IT IS ALSO THE PROCESSOR FOR VERBS 'LOOK' AND 'EXAMINE'.
#
	LOGICAL FUNCTION RMINFO(FULL)
#
# DECLARATIONS
#
	IMPLICIT INTEGER (A-Z)
	LOGICAL FULL,PROB,LIT,RAPPLI
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# SCREEN OF LIGHT
#
	COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
#
# 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 /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)
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
