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