1 C FIGHTS-- Compute fight strength
  2 C
  3 C Declarations
  4 C
  5           INTEGER FUNCTION FIGHTS(H,FLG)
  6           IMPLICIT INTEGER (A-Z)
  7           %include dparam
  8           PARAMETER (STRMAX=7)
  9           PARAMETER (STRMIN=2)
 10           LOGICAL FLG
 11 C
 12           FIGHTS=STRMIN+((((STRMAX-STRMIN)*ASCORE(H))+(MXSCOR/2))/MXSCOR)
 13           IF(FLG) FIGHTS=FIGHTS+ASTREN(H)
 14           RETURN
 15 C
 16           END
 17 C page
 18 C VILSTR- Compute villain strength
 19 C
 20 C Declarations
 21 C
 22           INTEGER FUNCTION VILSTR(V)
 23           IMPLICIT INTEGER (A-Z)
 24           %include dparam
 25 C
 26           VILSTR=OCAPAC(V)
 27           IF(VILSTR.LE.0) RETURN
 28           IF((V.NE.THIEF).OR..NOT.THFENF) GO TO 100
 29           THFENF=.FALSE.                                    ! thief unengrossed.
 30           VILSTR=MIN0(VILSTR,2)                             ! no better than 2.
 31 C
 32 100       DO 200 I=1,VLNT                                   ! see if best weapon.
 33             IF((VILLNS(I).EQ.V).AND.(PRSI.EQ.VBEST(I)))
 34           &         VILSTR=MAX0(1,VILSTR-1)
 35 200       CONTINUE
 36           RETURN
 37 C
 38           END
 39 C page
 40 C GTTIME-- Get total time played
 41 C
 42 C Declarations
 43 C
 44           SUBROUTINE GTTIME(T)
 45           IMPLICIT INTEGER (A-Z)
 46           %include dparam
 47 C
 48           CALL ITIME(TMARRAY)
 49           H=TMARRAY(1)
 50           M=TMARRAY(2)
 51           S=TMARRAY(3)
 52           T=((H*60)+M)-((SHOUR*60)+SMIN)
 53           IF(T.LT.0) T=T+1440
 54           T=T+PLTIME
 55           RETURN
 56 C
 57           END
 58 C page
 59 C OPNCLS-- Process open/close for doors
 60 C
 61 C Declarations
 62 C
 63           LOGICAL FUNCTION OPNCLS(OBJ,SO,SC)
 64           IMPLICIT INTEGER (A-Z)
 65           %include dparam
 66           LOGICAL QOPEN
 67 C
 68 C Functions and data
 69 C
 70 C old     QOPEN(O)=(OFLAG2(O).AND.OPENBT).NE.0
 71           QOPEN(O)=AND(OFLAG2(O),OPENBT).NE.0
 72 C
 73           OPNCLS=.TRUE.                                     ! assume wins.
 74           IF(PRSA.EQ.CLOSEW) GO TO 100            ! close?
 75           IF(PRSA.EQ.OPENW) GO TO 50              ! open?
 76           OPNCLS=.FALSE.                                    ! lose
 77           RETURN
 78 C
 79 50        IF(QOPEN(OBJ)) GO TO 200                ! open... is it?
 80           CALL RSPEAK(SO)
 81 C old     OFLAG2(OBJ)=OFLAG2(OBJ).OR.OPENBT
 82           OFLAG2(OBJ)=OR(OFLAG2(OBJ),OPENBT)
 83           RETURN
 84 C
 85 100       IF(.NOT.QOPEN(OBJ)) GO TO 200           ! close... is it?
 86           CALL RSPEAK(SC)
 87 C old     OFLAG2(OBJ)=OFLAG2(OBJ).AND..NOT.OPENBT
 88           OFLAG2(OBJ)=AND(OFLAG2(OBJ),COMPL(OPENBT))
 89           RETURN
 90 C
 91 200       CALL RSPEAK(125+RND(3))                           ! dummy.
 92           RETURN
 93 C
 94           END
 95 C page
 96 C LIT-- Is room lit?
 97 C
 98 C Declarations
 99 C
100           LOGICAL FUNCTION LIT(RM)
101           IMPLICIT INTEGER (A-Z)
102           %include dparam
103           LOGICAL QHERE
104 C
105           LIT=.TRUE.                                        ! assume wins
106 C old     IF(DEADF.OR.((RFLAG(RM).AND.RLIGHT).NE.0)) RETURN ! room lit?
107           IF(DEADF.OR.(AND(RFLAG(RM),RLIGHT).NE.0)) RETURN  ! room lit?
108 C
109           DO 1000 I=1,OLNT                        ! look for lit obj
110             IF(QHERE(I,RM)) GO TO 100             ! in room?
111             OA=OADV(I)                                      ! no
112             IF(OA.LE.0) GO TO 1000                ! on adv?
113             IF(AROOM(OA).NE.RM) GO TO 1000        ! adv in room?
114 C
115 C Obj in room or on adv in room
116 C
117 C old 100   IF((OFLAG1(I).AND.ONBT).NE.0) RETURN  ! lit?
118 100         IF((AND(OFLAG1(I),ONBT)).NE.0) RETURN ! lit?
119 C old       IF(((OFLAG1(I).AND.VISIBT).EQ.0).OR.
120 C old     &         (((OFLAG1(I).AND.TRANBT).EQ.0).AND.
121 C old     &         ((OFLAG2(I).AND.OPENBT).EQ.0))) GO TO 1000
122             IF(((AND(OFLAG1(I),VISIBT)).EQ.0).OR.
123           &         (((AND(OFLAG1(I),TRANBT)).EQ.0).AND.
124           &         ((AND(OFLAG2(I),OPENBT)).EQ.0))) GO TO 1000
125 C
126 C Obj is visible and open or transparent
127 C
128             DO 500 J=1,OLNT
129 C old         IF((OCAN(J).EQ.I).AND.((OFLAG1(J).AND.ONBT).NE.0))
130 C old     &         RETURN
131               IF((OCAN(J).EQ.I).AND.((AND(OFLAG1(J),ONBT)).NE.0))
132           &         RETURN
133 500         CONTINUE
134 1000      CONTINUE
135           LIT=.FALSE.
136           RETURN
137 C
138           END