1: C 2: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 3: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 4: C WRITTEN BY R. M. SUPNIK 5: C 6: #ifndef PDP /* replaced by C function for pdp */ 7: C GTTIME-- GET TOTAL TIME PLAYED 8: C 9: C DECLARATIONS 10: C 11: SUBROUTINE GTTIME(T) 12: IMPLICIT INTEGER(A-Z) 13: C 14: COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC 15: C 16: CALL ITIME(H,M,S) 17: T=((H*60)+M)-((SHOUR*60)+SMIN) 18: IF(T.LT.0) T=T+1440 19: T=T+PLTIME 20: RETURN 21: END 22: #endif PDP 23: C OPNCLS-- PROCESS OPEN/CLOSE FOR DOORS 24: C 25: C DECLARATIONS 26: C 27: LOGICAL FUNCTION OPNCLS(OBJ,SO,SC) 28: IMPLICIT INTEGER (A-Z) 29: LOGICAL QOPEN 30: #include "parser.h" 31: #include "objects.h" 32: #include "oflags.h" 33: #include "verbs.h" 34: C 35: C FUNCTIONS AND DATA 36: C 37: QOPEN(O)=and(OFLAG2(O),OPENBT).NE.0 38: C 39: OPNCLS=.TRUE. 40: C !ASSUME WINS. 41: IF(PRSA.EQ.CLOSEW) GO TO 100 42: C !CLOSE? 43: IF(PRSA.EQ.OPENW) GO TO 50 44: C !OPEN? 45: OPNCLS=.FALSE. 46: C !LOSE 47: RETURN 48: C 49: 50 IF(QOPEN(OBJ)) GO TO 200 50: C !OPEN... IS IT? 51: CALL RSPEAK(SO) 52: OFLAG2(OBJ)=or(OFLAG2(OBJ),OPENBT) 53: RETURN 54: C 55: 100 IF(.NOT.QOPEN(OBJ)) GO TO 200 56: C !CLOSE... IS IT? 57: CALL RSPEAK(SC) 58: OFLAG2(OBJ)=and(OFLAG2(OBJ),not(OPENBT)) 59: RETURN 60: C 61: 200 CALL RSPEAK(125+RND(3)) 62: C !DUMMY. 63: RETURN 64: END 65: C LIT-- IS ROOM LIT? 66: C 67: C DECLARATIONS 68: C 69: LOGICAL FUNCTION LIT(RM) 70: IMPLICIT INTEGER (A-Z) 71: LOGICAL QHERE 72: #include "rooms.h" 73: #include "rflag.h" 74: #include "objects.h" 75: #include "oflags.h" 76: #include "advers.h" 77: C 78: LIT=.TRUE. 79: C !ASSUME WINS 80: IF(and(RFLAG(RM),RLIGHT).NE.0) RETURN 81: C 82: DO 1000 I=1,OLNT 83: C !LOOK FOR LIT OBJ 84: IF(QHERE(I,RM)) GO TO 100 85: C !IN ROOM? 86: OA=OADV(I) 87: C !NO 88: IF(OA.LE.0) GO TO 1000 89: C !ON ADV? 90: IF(AROOM(OA).NE.RM) GO TO 1000 91: C !ADV IN ROOM? 92: C 93: C OBJ IN ROOM OR ON ADV IN ROOM 94: C 95: 100 IF(and(OFLAG1(I),ONBT).NE.0) RETURN 96: IF((and(OFLAG1(I),VISIBT).EQ.0).OR. 97: & ((and(OFLAG1(I),TRANBT).EQ.0).AND. 98: & (and(OFLAG2(I),OPENBT).EQ.0))) GO TO 1000 99: C 100: C OBJ IS VISIBLE AND OPEN OR TRANSPARENT 101: C 102: DO 500 J=1,OLNT 103: IF((OCAN(J).EQ.I).AND.(and(OFLAG1(J),ONBT).NE.0)) 104: & RETURN 105: 500 CONTINUE 106: 1000 CONTINUE 107: LIT=.FALSE. 108: RETURN 109: END 110: C WEIGHT- RETURNS SUM OF WEIGHT OF QUALIFYING OBJECTS 111: C 112: C DECLARATIONS 113: C 114: INTEGER FUNCTION WEIGHT(RM,CN,AD) 115: IMPLICIT INTEGER (A-Z) 116: LOGICAL QHERE 117: #include "objects.h" 118: C 119: WEIGHT=0 120: DO 100 I=1,OLNT 121: C !OMIT BIG FIXED ITEMS. 122: IF(OSIZE(I).GE.10000) GO TO 100 123: C !IF FIXED, FORGET IT. 124: IF((QHERE(I,RM).AND.(RM.NE.0)).OR. 125: & ((OADV(I).EQ.AD).AND.(AD.NE.0))) GO TO 50 126: J=I 127: C !SEE IF CONTAINED. 128: 25 J=OCAN(J) 129: C !GET NEXT LEVEL UP. 130: IF(J.EQ.0) GO TO 100 131: C !END OF LIST? 132: IF(J.NE.CN) GO TO 25 133: 50 WEIGHT=WEIGHT+OSIZE(I) 134: 100 CONTINUE 135: RETURN 136: END