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