C GTTIME-- GET TOTAL TIME PLAYED
C
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
C
C DECLARATIONS
C
       SUBROUTINE GTTIME(T)
       IMPLICIT INTEGER(A-Z)
C
       COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
C
       CALL ITIME(H,M,S)
       T=((H*60)+M)-((SHOUR*60)+SMIN)
       IF(T.LT.0) T=T+1440
       T=T+PLTIME
       RETURN
       END
C OPNCLS-- PROCESS OPEN/CLOSE FOR DOORS
C
C DECLARATIONS
C
       LOGICAL FUNCTION OPNCLS(OBJ,SO,SC)
       IMPLICIT INTEGER (A-Z)
       LOGICAL QOPEN
C
C PARSER OUTPUT
C
       LOGICAL PRSWON
       COMMON /PRSVEC/ PRSA,PRSI,PRSO,PRSWON,PRSCON
C
C OBJECTS
C
       COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
       1       OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
       2       OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
       3       OADV(220),OCAN(220),OREAD(220)
C
       COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
       1       NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
       2       TOOLBT,TURNBT,ONBT
       COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
       1       WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
       2       TCHBT,VEHBT,SCHBT
C
C VERBS
C
       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
C
C FUNCTIONS AND DATA
C
       QOPEN(O)=(OFLAG2(O).AND.OPENBT).NE.0
C
       OPNCLS=.TRUE.                   !ASSUME WINS.
       IF(PRSA.EQ.CLOSEW) GO TO 100    !CLOSE?
       IF(PRSA.EQ.OPENW) GO TO 50      !OPEN?
       OPNCLS=.FALSE.                  !LOSE
       RETURN
C
50      IF(QOPEN(OBJ)) GO TO 200        !OPEN... IS IT?
       CALL RSPEAK(SO)
       OFLAG2(OBJ)=OFLAG2(OBJ).OR.OPENBT
       RETURN
C
100     IF(.NOT.QOPEN(OBJ)) GO TO 200   !CLOSE... IS IT?
       CALL RSPEAK(SC)
       OFLAG2(OBJ)=OFLAG2(OBJ).AND..NOT.OPENBT
       RETURN
C
200     CALL RSPEAK(125+RND(3))         !DUMMY.
       RETURN
       END
C LIT-- IS ROOM LIT?
C
C DECLARATIONS
C
       LOGICAL FUNCTION LIT(RM)
       IMPLICIT INTEGER (A-Z)
       LOGICAL QHERE
C
C ROOMS
C
       COMMON /ROOMS/ RLNT,RDESC2,RDESC1(200),REXIT(200),
       1       RACTIO(200),RVAL(200),RFLAG(200)
       INTEGER RRAND(200)
       EQUIVALENCE (RVAL,RRAND)
C
       COMMON /RFLAG/ RSEEN,RLIGHT,RLAND,RWATER,RAIR,
       1       RSACRD,RFILL,RMUNG,RBUCK,RHOUSE,RNWALL,REND
C
C OBJECTS
C
       COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
       1       OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
       2       OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
       3       OADV(220),OCAN(220),OREAD(220)
C
       COMMON /OFLAGS/ VISIBT,READBT,TAKEBT,DOORBT,TRANBT,FOODBT,
       1       NDSCBT,DRNKBT,CONTBT,LITEBT,VICTBT,BURNBT,FLAMBT,
       2       TOOLBT,TURNBT,ONBT
       COMMON /OFLAGS/ FINDBT,SLEPBT,SCRDBT,TIEBT,CLMBBT,ACTRBT,
       1       WEAPBT,FITEBT,VILLBT,STAGBT,TRYBT,NOCHBT,OPENBT,
       2       TCHBT,VEHBT,SCHBT
C
C ADVENTURERS
C
       COMMON /ADVS/ ALNT,AROOM(4),ASCORE(4),AVEHIC(4),
       1       AOBJ(4),AACTIO(4),ASTREN(4),AFLAG(4)
C
       LIT=.TRUE.                              !ASSUME WINS
       IF((RFLAG(RM).AND.RLIGHT).NE.0) RETURN  !ROOM LIT?
C
       DO 1000 I=1,OLNT                        !LOOK FOR LIT OBJ
         IF(QHERE(I,RM)) GO TO 100             !IN ROOM?
         OA=OADV(I)                            !NO
         IF(OA.LE.0) GO TO 1000                !ON ADV?
         IF(AROOM(OA).NE.RM) GO TO 1000        !ADV IN ROOM?
C
C OBJ IN ROOM OR ON ADV IN ROOM
C
100       IF((OFLAG1(I).AND.ONBT).NE.0) RETURN  !LIT?
         IF(((OFLAG1(I).AND.VISIBT).EQ.0).OR.
       1       (((OFLAG1(I).AND.TRANBT).EQ.0).AND.
       2       ((OFLAG2(I).AND.OPENBT).EQ.0))) GO TO 1000
C
C OBJ IS VISIBLE AND OPEN OR TRANSPARENT
C
         DO 500 J=1,OLNT
           IF((OCAN(J).EQ.I).AND.((OFLAG1(J).AND.ONBT).NE.0))
       1       RETURN
500       CONTINUE
1000    CONTINUE
       LIT=.FALSE.
       RETURN
       END
C WEIGHT- RETURNS SUM OF WEIGHT OF QUALIFYING OBJECTS
C
C DECLARATIONS
C
       INTEGER FUNCTION WEIGHT(RM,CN,AD)
       IMPLICIT INTEGER (A-Z)
       LOGICAL QHERE
C
C OBJECTS
C
       COMMON /OBJCTS/ OLNT,ODESC1(220),ODESC2(220),ODESCO(220),
       1       OACTIO(220),OFLAG1(220),OFLAG2(220),OFVAL(220),
       2       OTVAL(220),OSIZE(220),OCAPAC(220),OROOM(220),
       3       OADV(220),OCAN(220),OREAD(220)
C
       WEIGHT=0
       DO 100 I=1,OLNT                         !OMIT BIG FIXED ITEMS.
         IF(OSIZE(I).GE.10000) GO TO 100       !IF FIXED, FORGET IT.
         IF((QHERE(I,RM).AND.(RM.NE.0)).OR.
       1       ((OADV(I).EQ.AD).AND.(AD.NE.0))) GO TO 50
         J=I                                   !SEE IF CONTAINED.
25        J=OCAN(J)                             !GET NEXT LEVEL UP.
         IF(J.EQ.0) GO TO 100                  !END OF LIST?
         IF(J.NE.CN) GO TO 25
50        WEIGHT=WEIGHT+OSIZE(I)
100     CONTINUE
       RETURN
       END