1 C FWIM- Find what I mean
  2 C
  3 C Declarations
  4 C
  5           INTEGER FUNCTION FWIM(F1,F2,RM,CON,ADV,NOCARE)
  6           IMPLICIT INTEGER (A-Z)
  7           %include dparam
  8           LOGICAL NOCARE,QHERE
  9 C
 10           FWIM=0                                            ! assume nothing.
 11           DO 1000 I=1,OLNT                        ! loop
 12             IF(((RM.EQ.0).OR.(.NOT.QHERE(I,RM))) .AND.
 13           &         ((ADV.EQ.0).OR.(OADV(I).NE.ADV)) .AND.
 14           &         ((CON.EQ.0).OR.(OCAN(I).NE.CON)))
 15           &         GO TO 1000
 16 C
 17 C Object is on list... is it a match?
 18 C
 19 C old       IF((OFLAG1(I).AND.VISIBT).EQ.0) GO TO 1000
 20             IF((AND(OFLAG1(I),VISIBT)).EQ.0) GO TO 1000
 21 C old       IF((.NOT.NOCARE .AND.((OFLAG1(I).AND.TAKEBT).EQ.0)) .OR.
 22 C old     &         (((OFLAG1(I).AND.F1).EQ.0).AND.
 23 C old     &          ((OFLAG2(I).AND.F2).EQ.0))) GO TO 500
 24             IF((.NOT.NOCARE .AND.((AND(OFLAG1(I),TAKEBT)).EQ.0)) .OR.
 25           &         (((AND(OFLAG1(I),F1)).EQ.0).AND.
 26           &          ((AND(OFLAG2(I),F2)).EQ.0))) GO TO 500
 27             IF(FWIM.EQ.0) GO TO 400               ! already got something?
 28             FWIM=-FWIM                                      ! yes, ambiguous.
 29             RETURN
 30 C
 31 400         FWIM=I                                ! note match.
 32 C
 33 C Does object contain a match?
 34 C
 35 C old 500   IF((OFLAG2(I).AND.OPENBT).EQ.0) GO TO 1000 ! closed?
 36 500         IF((AND(OFLAG2(I),OPENBT)).EQ.0) GO TO 1000 ! closed?
 37             DO 700 J=1,OLNT                       ! no, search contents.
 38 C old         IF((OCAN(J).NE.I).OR.((OFLAG1(J).AND.VISIBT).EQ.0) .OR.
 39 C old     &         (((OFLAG1(J).AND.F1).EQ.0).AND.
 40 C old     &          ((OFLAG2(J).AND.F2).EQ.0))) GO TO 700
 41               IF((OCAN(J).NE.I).OR.((AND(OFLAG1(J),VISIBT)).EQ.0) .OR.
 42           &         (((AND(OFLAG1(J),F1)).EQ.0).AND.
 43           &          ((AND(OFLAG2(J),F2)).EQ.0))) GO TO 700
 44               IF(FWIM.EQ.0) GO TO 600
 45               FWIM=-FWIM
 46               RETURN
 47 C
 48 600           FWIM=J
 49 700         CONTINUE
 50 1000      CONTINUE
 51           RETURN
 52 C
 53           END
 54 C page
 55 C ORPHAN- Set up orphans for parser
 56 C
 57 C Declarations
 58 C
 59           SUBROUTINE ORPHAN(OR1,OR2,OR3,OR4,OR5,OR6,OR7,OR8)
 60           IMPLICIT INTEGER (A-Z)
 61           %include dparam
 62           CHARACTER*(*) OR6
 63 C
 64           OFLAG=OR1
 65           OACT=OR2
 66           OPREP1=OR3
 67           OOBJ1=OR4
 68           OPREP=OR5
 69           ONAME=OR6
 70           OPREP2=OR7
 71           OOBJ2=OR8
 72           RETURN
 73 C
 74           END
 75 C page
 76 C YESNO- Obtain yes/no answer
 77 C
 78 C Called by-
 79 C
 80 C         YES-IS-TRUE=YESNO(QUESTION,YES-STRING,NO-STRING)
 81 C
 82           LOGICAL FUNCTION YESNO(Q,Y,N)
 83           IMPLICIT INTEGER (A-Z)
 84           %include dparam
 85           CHARACTER*1 ANS
 86 C
 87 100       CALL RSPEAK(Q)                                    ! ask
 88           READ(INPCH,110,END=120) ANS             ! get answer
 89 110       FORMAT(A)
 90           IF((ANS.EQ.'Y').OR.(ANS.EQ.'y')) GO TO 200
 91           IF((ANS.EQ.'N').OR.(ANS.EQ.'n')) GO TO 300
 92 120       CALL RSPEAK(6)                                    ! scold.
 93           GO TO 100
 94 C
 95 200       YESNO=.TRUE.                                      ! yes,
 96           CALL RSPEAK(Y)                                    ! out with it.
 97           RETURN
 98 C
 99 300       YESNO=.FALSE.                                     ! no,
100           CALL RSPEAK(N)                                    ! likewise.
101           RETURN
102 C
103           END
104 C page
105 C ROBADV-- Steal winner's valuables
106 C
107 C Declarations
108 C
109           INTEGER FUNCTION ROBADV(ADV,NR,NC,NA)
110           IMPLICIT INTEGER (A-Z)
111           %include dparam
112 C
113           ROBADV=0                                ! count objects
114           DO 100 I=1,OLNT
115 C old       IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
116 C old     &         ((OFLAG2(I).AND.SCRDBT).NE.0)) GO TO 100
117             IF((OADV(I).NE.ADV).OR.(OTVAL(I).LE.0).OR.
118           &         ((AND(OFLAG2(I),SCRDBT)).NE.0)) GO TO 100
119             CALL NEWSTA(I,0,NR,NC,NA)             ! steal object
120             ROBADV=ROBADV+1
121 100       CONTINUE
122           RETURN
123 C
124           END
125 C page
126 C ROBRM-- Steal room valuables
127 C
128 C Declarations
129 C
130           INTEGER FUNCTION ROBRM(RM,PR,NR,NC,NA)
131           IMPLICIT INTEGER (A-Z)
132           %include dparam
133           LOGICAL PROB,QHERE
134 C
135           ROBRM=0                                           ! count objects
136           DO 100 I=1,OLNT                                   ! loop on objects.
137             IF(.NOT. QHERE(I,RM)) GO TO 100
138 C old       IF((OTVAL(I).LE.0).OR.((OFLAG2(I).AND.SCRDBT).NE.0).OR.
139 C old     &         ((OFLAG1(I).AND.VISIBT).EQ.0).OR.(.NOT.PROB(PR,PR)))
140 C old     &         GO TO 50
141             IF((OTVAL(I).LE.0).OR.((AND(OFLAG2(I),SCRDBT)).NE.0).OR.
142           &         ((AND(OFLAG1(I),VISIBT)).EQ.0).OR.(.NOT.PROB(PR,PR)))
143           &         GO TO 50
144             CALL NEWSTA(I,0,NR,NC,NA)
145             ROBRM=ROBRM+1
146 C old       OFLAG2(I)=OFLAG2(I).OR.TCHBT
147             OFLAG2(I)=OR(OFLAG2(I),TCHBT)
148             GO TO 100
149 C old 50    IF((OFLAG2(I).AND.ACTRBT).NE.0)
150 C old     &         ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
151 50          IF((AND(OFLAG2(I),ACTRBT)).NE.0)
152           &         ROBRM=ROBRM+ROBADV(OACTOR(I),NR,NC,NA)
153 100       CONTINUE
154           RETURN
155 C
156           END
157 C page
158 C WINNIN-- See if villain is winning
159 C
160 C Declarations
161 C
162           LOGICAL FUNCTION WINNIN(VL,HR)
163           IMPLICIT INTEGER (A-Z)
164           %include dparam
165           LOGICAL PROB
166 C
167           VS=OCAPAC(VL)                                     ! villain strength
168           PS=VS-FIGHTS(HR,.TRUE.)                           ! his margin over hero
169           WINNIN=PROB(90,100)
170           IF(PS.GT.3) RETURN                      ! +3... 90% winning
171           WINNIN=PROB(75,85)
172           IF(PS.GT.0) RETURN                      ! >0... 75% winning
173           WINNIN=PROB(50,30)
174           IF(PS.EQ.0) RETURN                      ! =0... 50% winning
175           WINNIN=PROB(25,25)
176           IF(VS.GT.1) RETURN                      ! any villain strength.
177           WINNIN=PROB(10,0)
178           RETURN
179 C
180           END