C AAPPLI- APPLICABLES FOR ADVENTURERS
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
LOGICAL FUNCTION AAPPLI(RI)
C A1-- ROBOT. PROCESS MOST COMMANDS GIVEN TO ROBOT.
1000 IF((PRSA.NE.RAISEW).OR.(PRSO.NE.RCAGE)) GO TO 1200
CALL NEWSTA(CAGE,567,CAGER,0,0)
CALL NEWSTA(ROBOT,0,CAGER,0,0)
C !INSTALL ROBOT IN ROOM.
OFLAG1(ROBOT)=and(OFLAG1(ROBOT),not(NDSCBT))
OFLAG1(SPHER)=or(OFLAG1(SPHER),TAKEBT)
1200 IF((PRSA.NE.DRINKW).AND.(PRSA.NE.EATW)) GO TO 1300
1300 IF(PRSA.NE.READW) GO TO 1400
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
C A2-- MASTER. PROCESS MOST COMMANDS GIVEN TO MASTER.
2000 IF(and(OFLAG2(QDOOR),OPENBT).NE.0) GO TO 2100
2100 IF(PRSA.NE.WALKW) GO TO 2200
& ((PRSO.EQ.XNORTH).OR.(PRSO.EQ.XENTER))).OR.
& ((PRSO.EQ.XSOUTH).OR.(PRSO.EQ.XENTER))))
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
C THIEFD- INTERMOVE THIEF DEMON
LOGICAL ONCE,PROB,QHERE,QSTILL,LIT,WINNIN
QSTILL(R)=(QHERE(STILL,R).OR.(OADV(STILL).EQ.-THIEF))
DFLAG=and(PRSFLG, 32768).NE.0
IF(RHERE.NE.0) THFPOS=RHERE
IF(THFPOS.EQ.HERE) GO TO 1100
IF(THFPOS.NE.TREAS) GO TO 1400
C THIEF IS IN TREASURE ROOM, AND WINNER IS NOT.
10 FORMAT('THIEFD-- IN TREASURE ROOM')
10 FORMAT(' THIEFD-- IN TREASURE ROOM')
IF(RHERE.EQ.0) GO TO 1050
CALL NEWSTA(THIEF,0,0,0,0)
IF(QSTILL(TREAS)) CALL NEWSTA(STILL,0,0,THIEF,0)
1050 I=ROBADV(-THIEF,THFPOS,0,0)
IF(QHERE(EGG,THFPOS)) OFLAG2(EGG)=or(OFLAG2(EGG),OPENBT)
C THIEF AND WINNER IN SAME ROOM.
1100 IF(THFPOS.EQ.TREAS) GO TO 1700
C !IF TREAS ROOM, NOTHING.
IF(and(RFLAG(THFPOS),RLIGHT).NE.0) GO TO 1400
20 FORMAT('THIEFD-- IN ADV ROOM')
20 FORMAT(' THIEFD-- IN ADV ROOM')
IF((RHERE.NE.0).OR.PROB(70,70)) GO TO 1150
IF(OCAN(STILL).NE.THIEF) GO TO 1700
C !ABORT IF NO STILLETTO.
CALL NEWSTA(THIEF,583,THFPOS,0,0)
C !INSERT THIEF INTO ROOM.
1150 IF((RHERE.EQ.0).OR.(and(OFLAG2(THIEF),FITEBT).EQ.0))
IF(WINNIN(THIEF,WINNER)) GO TO 1175
CALL NEWSTA(THIEF,584,0,0,0)
OFLAG2(THIEF)=and(OFLAG2(THIEF), not(FITEBT))
IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
1175 IF(PROB(90,90)) GO TO 1700
1200 IF((RHERE.EQ.0).OR.PROB(70,70)) GO TO 1250
CALL NEWSTA(THIEF,585,0,0,0)
IF(QSTILL(THFPOS)) CALL NEWSTA(STILL,0,0,THIEF,0)
1300 IF(RHERE.EQ.0) GO TO 1700
1250 IF(PROB(70,70)) RETURN
C !70% CHANCE TO DO NOTHING.
NR=ROBRM(THFPOS,100,0,0,-THIEF)+ROBADV(WINNER,0,0,-THIEF)
CALL NEWSTA(THIEF,I,0,0,0)
& CALL NEWSTA(STILL,0,0,THIEF,0)
IF((NR.NE.0).AND..NOT.LIT(THFPOS)) CALL RSPEAK(406)
C NOT IN ADVENTURERS ROOM.
1400 CALL NEWSTA(THIEF,0,0,0,0)
IF(DFLAG) PRINT 30,THFPOS
30 FORMAT('THIEFD-- IN ROOM ',I4)
30 FORMAT(' THIEFD-- IN ROOM ',I4)
& CALL NEWSTA(STILL,0,0,THIEF,0)
IF(and(RFLAG(THFPOS),RSEEN).EQ.0) GO TO 1700
I=ROBRM(THFPOS,75,0,0,-THIEF)
IF((THFPOS.LT.MAZE1).OR.(THFPOS.GT.MAZ15).OR.
& (HERE.LT.MAZE1).OR.(HERE.GT.MAZ15)) GO TO 1500
IF(.NOT.QHERE(I,THFPOS).OR.PROB(60,60).OR.
& (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
CALL RSPSUB(590,ODESC2(I))
IF(PROB(40,20)) GO TO 1700
CALL NEWSTA(I,0,0,0,-THIEF)
OFLAG2(I)=or(OFLAG2(I),TCHBT)
IF(.NOT.QHERE(I,THFPOS).OR.(OTVAL(I).NE.0).OR.PROB(80,60).OR.
& (and(OFLAG1(I),(VISIBT+TAKEBT)).NE.(VISIBT+TAKEBT)))
CALL NEWSTA(I,0,0,0,-THIEF)
OFLAG2(I)=or(OFLAG2(I),TCHBT)
1700 IF(OADV(ROPE).EQ.-THIEF) DOMEF=.FALSE.
IF(THFPOS.LE.0) THFPOS=RLNT
IF(and(RFLAG(THFPOS),(RLAND+RSACRD+REND)).NE.RLAND)
1800 IF(THFPOS.EQ.TREAS) RETURN
IF((OADV(I).NE.-THIEF).OR.PROB(70,70).OR.
& (OTVAL(I).GT.0)) GO TO 1850
CALL NEWSTA(I,J,THFPOS,0,0)