	IF(AND(OFLAG2(DOOR),OPENBT).EQ.0)
		OFLAG2(DOOR)=AND(OFLAG2(DOOR),NOT(TCHBT))
	RETURN
#
# C4-	FROBOZZ FLAG (MAGNET ROOM, FAKE EXIT)
# C6-	FROBOZZ FLAG (MAGNET ROOM, REAL EXIT)
#
4000	IF(CAROFF) GO TO 2500			#IF FLIPPED, GO SPIN.
	FROBZF=.FALSE.				#OTHERWISE, NOT AN EXIT.
	RETURN
#
6000	IF(CAROFF) GO TO 2500			#IF FLIPPED, GO SPIN.
	FROBZF=.TRUE.				#OTHERWISE, AN EXIT.
	RETURN
#
# C7-	FROBOZZ FLAG (BANK ALARM)
#
7000	FROBZF=(OROOM(BILLS).NE.0).AND.(OROOM(PORTR).NE.0)
	RETURN

# CXAPPL, PAGE 3
#
# C8-	FROBOZZ FLAG (MRGO)
#
8000	FROBZF=.FALSE.				#ASSUME CANT MOVE.
	IF(MLOC.NE.XROOM1) GO TO 8100		#MIRROR IN WAY?
	IF((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XSOUTH)) GO TO 8200
	IF(MOD(MDIR,180).NE.0) GO TO 8300	#MIRROR MUST BE N-S.
	XROOM1=((XROOM1-MRA)*2)+MRAE		#CALC EAST ROOM.
	IF(PRSO.GT.XSOUTH) XROOM1=XROOM1+1	#IF SW/NW, CALC WEST.
8100	CXAPPL=XROOM1
	RETURN
#
8200	XSTRNG=814				#ASSUME STRUC BLOCKS.
	IF(MOD(MDIR,180).EQ.0) RETURN		#IF MIRROR N-S, DONE.
8300	LDIR=MDIR				#SEE WHICH MIRROR.
	IF(PRSO.EQ.XSOUTH) LDIR=180
	XSTRNG=815				#MIRROR BLOCKS.
	IF(((LDIR.GT.180).AND..NOT.MR1F).OR.
		((LDIR.LT.180).AND..NOT.MR2F)) XSTRNG=816	#MIRROR BROKEN.
	RETURN
#
# C9-	FROBOZZ FLAG (MIRIN)
#
9000	IF(MRHERE(HERE).NE.1) GO TO 9100	#MIRROR 1 HERE?
	IF(MR1F) XSTRNG=805			#SEE IF BROKEN.
	FROBZF=MROPNF				#ENTER IF OPEN.
	RETURN
#
9100	FROBZF=.FALSE.				#NOT HERE,
	XSTRNG=817				#LOSE.
	RETURN

# CXAPPL, PAGE 4
#
# C10-	FROBOZZ FLAG (MIRROR EXIT)
#
10000	FROBZF=.FALSE.				#ASSUME CANT.
	LDIR=((PRSO-XNORTH)/XNORTH)*45		#XLATE DIR TO DEGREES.
	IF(.NOT.MROPNF .OR.
		((MOD(MDIR+270,360).NE.LDIR).AND.(PRSO.NE.XEXIT)))
		GO TO 10200			#EXIT VIA MIRROR?
	XROOM1=((MLOC-MRA)*2)+MRAE+1-(MDIR/180)	#ASSUME E-W EXIT.
	IF(MOD(MDIR,180).EQ.0) GO TO 10100	#IF N-S, OK.
	XROOM1=MLOC+1				#ASSUME N EXIT.
	IF(MDIR.GT.180) XROOM1=MLOC-1		#IF SOUTH.
10100	CXAPPL=XROOM1
	RETURN
#
10200	IF(.NOT.WDOPNF .OR.
		((MOD(MDIR+180,360).NE.LDIR).AND.(PRSO.NE.XEXIT)))
		RETURN				#EXIT VIA OPEN DOOR?
	XROOM1=MLOC+1				#ASSUME N.
	IF(MDIR.EQ.0) XROOM1=MLOC-1		#IF S.
	CALL RSPEAK(818)			#CLOSE DOOR.
	WDOPNF=.FALSE.
	CXAPPL=XROOM1
	RETURN
#
# C11-	MAYBE DOOR.  NORMAL MESSAGE IS THAT DOOR IS CLOSED.
#	BUT IF LCELL.NE.4, DOOR ISNT THERE.
#
11000	IF(LCELL.NE.4) XSTRNG=678		#SET UP MSG.
	RETURN
#
	END

# AAPPLI- APPLICABLES FOR ADVENTURERS
#
# DECLARATIONS
#
	LOGICAL FUNCTION AAPPLI(RI)
	IMPLICIT INTEGER (A-Z)
	LOGICAL F,MOVETO
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# ROOMS
#
	COMMON /ROOMS/ RLNT,RDESC2,RDESC1(215),REXIT(215),
		RACTIO(215),RVAL(215),RFLAG(215)
	INTEGER RRAND(215)
	EQUIVALENCE (RVAL,RRAND)
#
	COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
		RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
#
	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 /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 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

# AAPPLI, PAGE 2
#
	IF(RI.EQ.0) GO TO 10			#IF ZERO, NO APP.
	AAPPLI=.TRUE.				#ASSUME WINS.
	GO TO (1000,2000),RI			#BRANCH ON ADV.
	CALL BUG(11,RI)
#
# COMMON FALSE RETURN.
#
10	AAPPLI=.FALSE.
	RETURN
#
# A1--	ROBOT.  PROCESS MOST COMMANDS GIVEN TO ROBOT.
#
1000	IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
	CFLAG(CEVSPH)=.FALSE.			#ROBOT RAISED CAGE.
	WINNER=PLAYER				#RESET FOR PLAYER.
	F=MOVETO(CAGER,WINNER)			#MOVE TO NEW ROOM.
	CALL NEWSTA(CAGE,567,CAGER,0,0)		#INSTALL CAGE IN ROOM.
	CALL NEWSTA(ROBOT,0,CAGER,0,0)		#INSTALL ROBOT IN ROOM.
	AROOM(AROBOT)=CAGER			#ALSO MOVE ROBOT/ADV.
	CAGESF=.TRUE.				#CAGE SOLVED.
	OFLAG1(ROBOT)=AND(OFLAG1(ROBOT),NOT(NDSCBT))
	OFLAG1(SPHER)=OR(OFLAG1(SPHER),TAKEBT)	#RESET FLAGS.
	RETURN
#
1200	IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
	CALL RSPEAK(568)			#EAT OR DRINK, JOKE.
	RETURN
#
1300	IF(PRSA.NE.READW) GO TO 1400		#READ,
	CALL RSPEAK(569)			#JOKE.
	RETURN
#
1400	IF((PRSA.EQ.WALKW).OR.(PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW)
		.OR.(PRSA.EQ.PUTW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.THROWW)
		.OR.(PRSA.EQ.TURNW).OR.(PRSA.EQ.LEAPW)) GO TO 10
	CALL RSPEAK(570)			#JOKE.
	RETURN

# AAPLI, PAGE 3
#
# A2--	MASTER.  PROCESS MOST COMMANDS GIVEN TO MASTER.
#
2000	IF(AND(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
	CALL RSPEAK(783)			#NO MASTER YET.
	RETURN
#
2100	IF(PRSA.NE.WALKW) GO TO 2200		#WALK?
	I=784					#ASSUME WONT.
	IF(((HERE.EQ.SCORR).AND.
		((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
		((HERE.EQ.NCORR).AND.
			((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
		I=785				#IF PRISON, CANT.
	CALL RSPEAK(I)
	RETURN
#
2200	IF((PRSA.EQ.TAKEW).OR.(PRSA.EQ.DROPW).OR.(PRSA.EQ.PUTW).OR.
		(PRSA.EQ.THROWW).OR.(PRSA.EQ.PUSHW).OR.(PRSA.EQ.TURNW).OR.
		(PRSA.EQ.SPINW).OR.(PRSA.EQ.TRNTOW).OR.(PRSA.EQ.FOLLOW).OR.
		  (PRSA.EQ.STAYW).OR.(PRSA.EQ.OPENW).OR.(PRSA.EQ.CLOSEW).OR.
		 (PRSA.EQ.KILLW)) GO TO 10		#MASTER CAN DO.
	CALL RSPEAK(786)			#MASTER CANT DO IT.
	RETURN
#
	END

# THIEFD-	INTERMOVE THIEF DEMON
#
# DECLARATIONS
#
	SUBROUTINE THIEFD
	IMPLICIT INTEGER (A-Z)
	LOGICAL DFLAG,ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
	COMMON /DEBUG/ DBGFLG,PRSFLG
#
# 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
#
# 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
#
# FUNCTIONS AND DATA
#
	QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))

# THIEFD, PAGE 2
#
#D	DFLAG=AND(PRSFLG,o'100000').NE.0	#SET UP DETAIL FLAG.
	ONCE=.FALSE.				#INIT FLAG.
1025	RHERE=OROOM(THIEF)			#VISIBLE POS.
	IF(RHERE.NE.0) THFPOS=RHERE
#
	IF(THFPOS.EQ.HERE) GO TO 1100		#THIEF IN WIN RM?
	IF(THFPOS.NE.TREAS) GO TO 1400		#THIEF NOT IN TREAS?
#
# THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
#
#D	IF(DFLAG) TYPE 10
#D10	FORMAT(' THIEFD-- IN TREASURE ROOM')
	IF(RHERE.EQ.0) GO TO 1050		#VISIBLE?
	CALL NEWSTA(THIEF,0,0,0,0)		#YES, VANISH.
	RHERE=0
	IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
1050	I=ROBADV(-THIEF,THFPOS,0,0)			#DROP VALUABLES.
	IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=OFLAG2(EGG).OR.OPENBT
	GO TO 1700
#
# THIEF AND WINNER IN SAME ROOM.
#
1100	IF(THFPOS.EQ.TREAS) GO TO 1700		#IF TREAS ROOM, NOTHING.
	IF(AND(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400	#NOT IF LIGHT.
#D	IF(DFLAG) TYPE 20
#D20	FORMAT(' THIEFD-- IN ADV ROOM')
	IF(THFFLG) GO TO 1300			#THIEF ANNOUNCED?
	IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150	#IF INVIS AND 30%.
	IF(OCAN(STILL).NE.THIEF) GO TO 1700	#ABORT IF NO STILLETTO.
	CALL NEWSTA(THIEF,583,THFPOS,0,0)	#INSERT THIEF INTO ROOM.
	THFFLG=.TRUE.				#THIEF IS ANNOUNCED.
	RETURN
#
1150	IF((RHERE.EQ.0).OR.(AND(OFLAG2(THIEF),FITEBT).EQ.0)) {
		GO TO 1200			#IF VISIBLE AND FIGHT.
		}
	IF(WINNIN(THIEF,WINNER)) GO TO 1175	#WINNING?
	CALL NEWSTA(THIEF,584,0,0,0)		#NO, VANISH THIEF.
	OFLAG2(THIEF)=AND(OFLAG2(THIEF),NOT(FITEBT))
	IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
	RETURN
#
1175	IF(PROB(90,90)) GO TO 1700		#90% CHANCE TO STAY.
#
1200	IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250	#IF VISIBLE AND 30%
	CALL NEWSTA(THIEF,585,0,0,0)		#VANISH THIEF.
	IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
	RETURN
#
1300	IF(RHERE.EQ.0) GO TO 1700		#ANNOUNCED.  VISIBLE?
1250	IF(PROB(70,70)) RETURN			#70% CHANCE TO DO NOTHING.
	THFFLG=.TRUE.
	NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
	I=586					#ROBBED EM.
	IF(RHERE.NE.0) I=588			#WAS HE VISIBLE?
	IF(NR.NE.0) I=I+1			#DID HE GET ANYTHING?
	CALL NEWSTA(THIEF,I,0,0,0)		#VANISH THIEF.
	IF(QSTILL(THFPOS))
		CALL NEWSTA(STILL,0,0,THIEF,0)	#RECLAIM STILLETTO.
	IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
	RHERE=0
	GO TO 1700				#ONWARD.
#
# NOT IN ADVENTURERS ROOM.
#
1400	CALL NEWSTA(THIEF,0,0,0,0)		#VANISH.
	RHERE=0
#D	IF(DFLAG) TYPE 30,THFPOS
#D30	FORMAT(' THIEFD-- IN ROOM ',I4)
	IF(QSTILL(THFPOS))
		CALL NEWSTA(STILL,0,0,THIEF,0)
	IF(AND(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700	#CANT ROB UNSEEN.
	I=ROBRM(THFPOS,75,0,0,-THIEF)		#ROB ROOM 75%.
	IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
		(HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
	DO I=1,OLNT {				#BOTH IN MAZE.
	  IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
		(AND(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
		NEXT
	  CALL RSPSUB(590,ODESC2(I))		#TAKE OBJECT.
	  IF(PROB(40,20)) GO TO 1700
	  CALL NEWSTA(I,0,0,0,-THIEF)		#MOST OF THE TIME.
	  OFLAG2(I)=OFLAG2(I).OR.TCHBT
	  GO TO 1700
	  }
	GO TO 1700
#
1500	DO I=1,OLNT {				#NOT IN MAZE.
	  IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
		(AND(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
		NEXT
	  CALL NEWSTA(I,0,0,0,-THIEF)
	  OFLAG2(I)=OFLAG2(I).OR.TCHBT
	  GO TO 1700
	  }
#
# NOW MOVE TO NEW ROOM.
#
1700	IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
	IF(ONCE) GO TO 1800
	ONCE=.NOT.ONCE
1750	THFPOS=THFPOS-1			#NEXT ROOM.
	IF(THFPOS.LE.0) THFPOS=RLNT
	IF(AND(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
		GO TO 1750			#MUST BE LAND, PROFANE.
	THFFLG=.FALSE.				#NOT ANNOUNCED.
	GO TO 1025				#ONCE MORE.
#
# ALL DONE.
#
1800	IF(THFPOS.EQ.TREAS) RETURN			#IN TREASURE ROOM?
	J=591					#NO, DROP STUFF.
	IF(THFPOS.NE.HERE) J=0
	DO I=1,OLNT {
	  IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
		(OTVAL(I).GT.0)) NEXT
	  CALL NEWSTA(I,J,THFPOS,0,0)
	  J=0
	  }
	RETURN
#
	END

# FIGHTD- INTERMOVE FIGHT DEMON
#
# DECLARATIONS
#
	SUBROUTINE FIGHTD
	IMPLICIT INTEGER (A-Z)
	LOGICAL PROB,OAPPLI
#
# PARSER OUTPUT
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# 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
#
	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
#
	COMMON /VILL/ VLNT,VILLNS(4),VPROB(4),VOPPS(4),VBEST(4),VMELEE(4)
#
# ADVENTURERS
#
	COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
		AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
#
	COMMON /AFLAGS/ ASTAG
#
	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 ROUT/1/

# FIGHTD, PAGE 2
#
	DO I=1,VLNT {				#LOOP THRU VILLAINS.
	  VOPPS(I)=0				#CLEAR OPPONENT SLOT.
	  OBJ=VILLNS(I)				#GET OBJECT NO.
	  RA=OACTIO(OBJ)			#GET HIS ACTION.
	  IF(HERE.NE.OROOM(OBJ)) GO TO 2200	#ADVENTURER STILL HERE?
	  IF((OBJ.EQ.THIEF).AND.THFENF) NEXT	#THIEF ENGROSSED?
	  IF(OCAPAC(OBJ).GE.0) GO TO 2050	#YES, VILL AWAKE?
	  IF((VPROB(I).EQ.0).OR..NOT.PROB(VPROB(I),VPROB(I)))
		GO TO 2025			#NO, SEE IF WAKES UP.
	  OCAPAC(OBJ)=IABS(OCAPAC(OBJ))
	  VPROB(I)=0
	  IF(RA.EQ.0) NEXT			#ANYTHING TO DO?
	  PRSA=INXW				#YES, WAKE HIM UP.
	  F=OAPPLI(RA,0)
	  NEXT					#NOTHING ELSE HAPPENS.
#
2025	  VPROB(I)=VPROB(I)+10			#INCREASE WAKEUP PROB.
	  NEXT					#NOTHING ELSE.
#
2050	  IF(AND(OFLAG2(OBJ),FITEBT).EQ.0) GO TO 2100
	  VOPPS(I)=OBJ				#FIGHTING, SET UP OPP.
	  NEXT
#
2100	  IF(RA.EQ.0) NEXT			#NOT FIGHTING,
	  PRSA=FRSTQW				#SET UP PROBABILITY
	  IF(.NOT.OAPPLI(RA,0)) NEXT		#OF FIGHTING.
	  OFLAG2(OBJ)=OFLAG2(OBJ).OR.FITEBT
	  VOPPS(I)=OBJ				#SET UP OPP.
	  NEXT
#
2200	  IF((AND(OFLAG2(OBJ),FITEBT).EQ.0).OR.(RA.EQ.0))
		GO TO 2300			#NOTHING TO DO.
	  PRSA=FIGHTW				#HAVE A FIGHT.
	  F=OAPPLI(RA,0)
2300	  IF(OBJ.EQ.THIEF) THFENF=.FALSE.	#TURN OFF ENGROSSED.
	  AFLAG(PLAYER)=AND(AFLAG(PLAYER),NOT(ASTAG))
	  OFLAG2(OBJ)=AND(OFLAG2(OBJ),NOT(STAGBT+FITEBT))
	  IF((OCAPAC(OBJ).GE.0).OR.(RA.EQ.0)) NEXT
	  PRSA=INXW				#WAKE HIM UP.
	  F=OAPPLI(RA,0)
	  OCAPAC(OBJ)=IABS(OCAPAC(OBJ))
	  }

# FIGHTD, PAGE 3
#
# NOW DO ACTUAL COUNTERBLOWS.
#
	OUT=0					#ASSUME HERO OK.
2600	DO I=1,VLNT {				#LOOP THRU OPPS.
	  J=VOPPS(I)
	  IF(J.EQ.0) NEXT			#SLOT EMPTY?
	  RA=OACTIO(J)
	  IF(RA.EQ.0) GO TO 2650		#VILLAIN ACTION?
	  PRSA=FIGHTW				#SEE IF
	  IF(OAPPLI(RA,0)) NEXT			#SPECIAL ACTION.
2650	  RES=BLOW(PLAYER,J,VMELEE(I),.FALSE.,OUT)	#STRIKE BLOW.
	  IF(RES.LT.0) RETURN			#IF HERO DEAD, EXIT.
	  IF(RES.EQ.ROUT) OUT=2+RND(3)		#IF HERO OUT, SET FLG.
	  }
	OUT=OUT-1				#DECREMENT OUT COUNT.
	IF(OUT.GT.0) GO TO 2600			#IF STILL OUT, GO AGAIN.
	RETURN
#
	END

# BLOW- STRIKE BLOW
#
# DECLARATIONS
#
	INTEGER FUNCTION BLOW(H,V,RMK,HFLG,OUT)
	IMPLICIT INTEGER (A-Z)
	LOGICAL HFLG,OAPPLI,PROB
	INTEGER DEF1R(3),DEF2R(4),DEF3R(5)
	INTEGER RVECTR(66),RSTATE(45)
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# PARSE VECTOR
#
	LOGICAL PRSWON
	COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
#
# MISCELLANEOUS VARIABLES
#
	COMMON /STAR/ MBASE,STRBIT
#
# 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)
#
	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 /AFLAGS/ ASTAG
#
	COMMON /AINDEX/ PLAYER,AROBOT,AMASTR
#
# VERBS
#
	COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
	COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
#
# FUNCTIONS AND DATA
#
	DATA RMISS/0/,ROUT/1/,RKILL/2/,RLIGHT/3/
	DATA RSER/4/,RSTAG/5/,RLOSE/6/,RHES/7/,RSIT/8/
	DATA DEF1R/1,2,3/
	DATA DEF2R/13,23,24,25/
	DATA DEF3R/35,36,46,47,57/
#
	DATA RVECTR/0,0,0,0,5,5,1,1,2,2,2,2,
		0,0,0,0,0,5,5,3,3,1,
		0,0,0,5,5,3,3,3,1,2,2,2,
			0,0,0,0,0,5,5,3,3,4,4,
		0,0,0,5,5,3,3,3,4,4,4,
		0,5,5,3,3,3,3,4,4,4/
	DATA RSTATE/5000,3005,3008,4011,3015,3018,1021,0,0,
		5022,3027,3030,4033,3037,3040,1043,0,0,
		4044,2048,4050,4054,5058,4063,4067,3071,1074,
			4075,1079,4080,4084,4088,4092,4096,4100,1104,
		4105,2109,4111,4115,4119,4123,4127,3131,3134/

# BLOW, PAGE 3
#
	RA=OACTIO(V)				#GET VILLAIN ACTION,
	DV=ODESC2(V)				#DESCRIPTION.
	BLOW=RMISS				#ASSUME NO RESULT.
#D	TYPE 10,H,V,RMK,HFLG,OUT
#D10	FORMAT(' BLOW 10-- ',3I7,L7,I7)
	IF(.NOT.HFLG) GO TO 1000		#HERO STRIKING BLOW?
#
# HERO IS ATTACKER, VILLAIN IS DEFENDER.
#
	PBLOSE=10				#BAD LK PROB.
	OFLAG2(V)=OFLAG2(V).OR.FITEBT		#YES, VILLAIN GETS MAD.
	IF(AND(AFLAG(H),ASTAG).EQ.0) GO TO 100	#HERO STAG?
	CALL RSPEAK(591)			#YES, CANT FIGHT.
	AFLAG(H)=AND(AFLAG(H),NOT(ASTAG))
	RETURN
#
100	ATT=FIGHTS(H,.TRUE.)			#GET HIS STRENGTH.
	OA=ATT
	DEF=VILSTR(V)				#GET VILL STRENGTH.
	OD=DEF
	DWEAP=0					#ASSUME NO WEAPON.
	DO I=1,OLNT {				#SEARCH VILLAIN.
	  IF((OCAN(I).EQ.V).AND.(AND(OFLAG2(I),WEAPBT).NE.0))
		DWEAP=I
	  }
	IF(V.EQ.AOBJ(PLAYER)) GO TO 300		#KILLING SELF?
	IF(DEF.NE.0) GO TO 2000			#DEFENDER ALIVE?
	CALL RSPSUB(592,DV)			#VILLAIN DEAD.
	RETURN
#
300	CALL JIGSUP(593)			#KILLING SELF.
	RETURN
#
# VILLAIN IS ATTACKER, HERO IS DEFENDER.
#
1000	PBLOSE=50				#BAD LK PROB.
	AFLAG(H)=AND(AFLAG(H),NOT(ASTAG))	#VILL STRIKING.
	IF(AND(OFLAG2(V),STAGBT).EQ.0) GO TO 1200	#VILL STAGGERED?
	OFLAG2(V)=AND(OFLAG2(V),NOT(STAGBT))	#MAKE HIM OK.
	CALL RSPSUB(594,DV)			#DESCRIBE.
	RETURN
#
1200	ATT=VILSTR(V)				#SET UP ATT, DEF.
	OA=ATT
	DEF=FIGHTS(H,.TRUE.)
	IF(DEF.LE.0) RETURN			#DONT ALLOW DEAD DEF.
	OD=FIGHTS(H,.FALSE.)
	DWEAP=IABS(FWIM(0,WEAPBT,0,0,H,.TRUE.))	#FIND A WEAPON.

# BLOW, PAGE 4
#
# PARTIES ARE NOW EQUIPPED.  DEF CANNOT BE ZERO.
# ATT MUST BE > 0.
#
2000	CONTINUE
#D	TYPE 2050,ATT,OA,DEF,OD,DWEAP
#D2050	FORMAT(' BLOW 2050-- ',5I7)
	IF(DEF.GT.0) GO TO 2100			#DEF ALIVE?
	RES=RKILL
	IF(HFLG) CALL RSPSUB(595,DV)		#DEADER.
	GO TO 3000
#
2100	IF(DEF-2) 2200,2300,2400		#DEF <2,=2,>2
2200	ATT=MIN0(ATT,3)				#SCALE ATT.
	TBL=DEF1R(ATT)				#CHOOSE TABLE.
	GO TO 2500
#
2300	ATT=MIN0(ATT,4)				#SCALE ATT.
	TBL=DEF2R(ATT)				#CHOOSE TABLE.
	GO TO 2500
#
2400	ATT=ATT-DEF				#SCALE ATT.
	ATT=MIN0(2,MAX0(-2,ATT))+3
	TBL=DEF3R(ATT)
#
2500	RES=RVECTR(TBL+RND(10))			#GET RESULT.
	IF(OUT.EQ.0) GO TO 2600			#WAS HE OUT?
	IF(RES.EQ.RSTAG) GO TO 2550		#YES, STAG--> HES.
	RES=RSIT				#OTHERWISE, SITTING.
	GO TO 2600
2550	RES=RHES
2600	IF((RES.EQ.RSTAG).AND.(DWEAP.NE.0).AND.PROB(25,PBLOSE))
		RES=RLOSE			#LOSE WEAPON.
#
	MI=RSTATE(((RMK-1)*9)+RES+1)		#CHOOSE TABLE ENTRY.
	IF(MI.EQ.0) GO TO 3000
	I=(MOD(MI,1000)+RND(MI/1000))+MBASE+1
	J=DV
	IF(.NOT.HFLG .AND.(DWEAP.NE.0)) J=ODESC2(DWEAP)
#D	TYPE 2650,RES,MI,I,J,MBASE
#D2650	FORMAT(' BLOW 2650-- ',5I7)
	CALL RSPSUB(I,J)			#PRESENT RESULT.

# BLOW, PAGE 5
#
# NOW APPLY RESULT
#
3000	GO TO (4000,3100,3200,3300,3400,3500,3600,4000,3200),RES+1
#
3100	IF(HFLG) DEF=-DEF			#UNCONSCIOUS.
	GO TO 4000
#
3200	DEF=0					#KILLED OR SITTING DUCK.
	GO TO 4000
#
3300	DEF=MAX0(0,DEF-1)			#LIGHT WOUND.
	GO TO 4000
#
3400	DEF=MAX0(0,DEF-2)			#SERIOUS WOUND.
	GO TO 4000
#
3500	IF(HFLG) GO TO 3550			#STAGGERED.
	AFLAG(H)=AFLAG(H).OR.ASTAG
	GO TO 4000
#
3550	OFLAG2(V)=OFLAG2(V).OR.STAGBT
	GO TO 4000
#
3600	CALL NEWSTA(DWEAP,0,HERE,0,0)		#LOSE WEAPON.
	DWEAP=0
	IF(HFLG) GO TO 4000			#IF HERO, DONE.
	DWEAP=IABS(FWIM(0,WEAPBT,0,0,H,.TRUE.))	#GET NEW.
	IF(DWEAP.NE.0) CALL RSPSUB(605,ODESC2(DWEAP))

# BLOW, PAGE 6
#
4000	BLOW=RES				#RETURN RESULT.
	IF(.NOT.HFLG) GO TO 4500		#HERO?
	OCAPAC(V)=DEF				#STORE NEW CAPACITY.
	IF(DEF.NE.0) GO TO 4100			#DEAD?
	OFLAG2(V)=AND(OFLAG2(V),NOT(FITEBT))	#YES, NOT FIGHTING.
	CALL RSPSUB(572,DV)			#HE DIES.
	CALL NEWSTA(V,0,0,0,0)			#MAKE HIM DISAPPEAR.
	IF(RA.EQ.0) RETURN			#IF NX TO DO, EXIT.
	PRSA=DEADXW				#LET HIM KNOW.
	F=OAPPLI(RA,0)
	RETURN
#
4100	IF((RES.NE.ROUT).OR.(RA.EQ.0)) RETURN
	PRSA=OUTXW				#LET HIM BE OUT.
	F=OAPPLI(RA,0)
	RETURN
#
4500	ASTREN(H)=-10000			#ASSUME DEAD.
	IF(DEF.NE.0) ASTREN(H)=DEF-OD
	IF(DEF.GE.OD) GO TO 4600
	CTICK(CEVCUR)=30
	CFLAG(CEVCUR)=.TRUE.
4600	IF(FIGHTS(H,.TRUE.).GT.0) RETURN
	ASTREN(H)=1-FIGHTS(H,.FALSE.)		#HE'S DEAD.
	CALL JIGSUP(596)
	BLOW=-1
	RETURN
#
	END

# SWORDD- SWORD INTERMOVE DEMON
#
# DECLARATIONS
#
	SUBROUTINE SWORDD
	IMPLICIT INTEGER(A-Z)
	LOGICAL INFEST,FINDXT
#
# GAME STATE
#
	LOGICAL TELFLG
	COMMON /PLAY/ WINNER,HERE,TELFLG
#
# EXITS
#
	COMMON /CURXT/ XTYPE,XROOM1,XSTRNG,XACTIO,XOBJ
	EQUIVALENCE (XFLAG,XOBJ)
#
	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 /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
