1 C CYCLOP- Cyclops function
  2 C
  3 C Declarations
  4 C
  5           LOGICAL FUNCTION CYCLOP(ARG)
  6           IMPLICIT INTEGER (A-Z)
  7           %include dparam
  8 C
  9           CYCLOP=.TRUE.                                     ! assume wins.
 10           IF(.NOT.CYCLOF) GO TO 100               ! asleep?
 11           IF((PRSA.NE.ALARMW).AND.(PRSA.NE.MUNGW).AND.(PRSA.NE.KICKW).AND.
 12           &         (PRSA.NE.BURNW).AND.(PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW))
 13           &          GO TO 10
 14           CYCLOF=.FALSE.                                    ! wake cyclops.
 15           CALL RSPEAK(187)                        ! describe.
 16           RVCYC=IABS(RVCYC)
 17 C old     OFLAG2(CYCLO)=OFLAG2(CYCLO).OR.FITEBT
 18           OFLAG2(CYCLO)=OR(OFLAG2(CYCLO),FITEBT)
 19           RETURN
 20 C
 21 100       IF(PRSA.NE.GIVEW) GO TO 500             ! give?
 22           IF(PRSO.NE.FOOD) GO TO 300              ! food?
 23           IF(RVCYC.LT.0) GO TO 200                ! already eaten?
 24           CALL NEWSTA(FOOD,189,0,0,0)             ! eats peppers.
 25           RVCYC=MIN0(-1,-RVCYC)                             ! gets thirsty.
 26 200       CFLAG(CEVCYC)=.TRUE.                              ! turn on cyclops timer.
 27           CTICK(CEVCYC)=-1
 28           RETURN
 29 C
 30 300       IF(PRSO.NE.WATER) GO TO 400             ! drink when thirsty?
 31           IF(RVCYC.GE.0) GO TO 350
 32           CALL NEWSTA(PRSO,190,0,0,0)             ! drinks and
 33           CYCLOF=.TRUE.                                     ! falls asleep.
 34 C old     OFLAG2(CYCLO)=OFLAG2(CYCLO).AND.(.NOT.FITEBT)
 35           OFLAG2(CYCLO)=AND(OFLAG2(CYCLO),COMPL(FITEBT))
 36           CFLAG(CEVCYC)=.FALSE.                             ! turn off cyclops timer.
 37           RETURN
 38 C
 39 350       CALL RSPEAK(191)                        ! not thirsty.
 40 10        CYCLOP=.FALSE.                                    ! fails.
 41           RETURN
 42 C
 43 400       I=192                                             ! assume inedible.
 44           IF(PRSO.EQ.GARLI) I=193                           ! garlic is joke.
 45 450       CALL RSPEAK(I)                                    ! disdain it.
 46           RETURN
 47 C
 48 500       IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND.
 49           &  (PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 600
 50           CFLAG(CEVCYC)=.TRUE.                              ! turn on cyclops timer.
 51           CTICK(CEVCYC)=-1
 52           I=201                                             ! assume not poke.
 53           IF(PRSA.EQ.MUNGW) I=912                           ! poke joke.
 54           GO TO 450                               ! go remark and return.
 55 C
 56 600       I=202                                             ! assume take.
 57           IF(PRSA.EQ.TAKEW) GO TO 450
 58           I=203                                             ! assume tie.
 59           IF(PRSA.EQ.TIEW) GO TO 450
 60           CYCLOP=.FALSE.
 61           RETURN
 62 C
 63           END
 64 C page
 65 C THIEFP- Thief function
 66 C
 67 C Declarations
 68 C
 69           LOGICAL FUNCTION THIEFP(ARG)
 70           IMPLICIT INTEGER (A-Z)
 71           %include dparam
 72           LOGICAL QHERE,PROB,QEMPTY
 73 C
 74           THIEFP=.TRUE.                                     ! assume wins.
 75           IF(PRSA.NE.FIGHTW) GO TO 100            ! fight?
 76           IF(OCAN(STILL).EQ.THIEF) GO TO 10       ! got stilletto?  f.
 77           IF(QHERE(STILL,THFPOS)) GO TO 50        ! can he recover it?
 78           CALL NEWSTA(THIEF,0,0,0,0)              ! no, vanish.
 79           IF(QHERE(THIEF,HERE)) CALL RSPEAK(498)  ! if hero, tell.
 80           RETURN
 81 C
 82 50        CALL NEWSTA(STILL,0,0,THIEF,0)                    ! yes, recover.
 83           IF(QHERE(THIEF,HERE)) CALL RSPEAK(499)  ! if hero, tell.
 84           RETURN
 85 C
 86 100       IF(PRSA.NE.DEADXW) GO TO 200            ! dead?
 87           THFACT=.FALSE.                                    ! disable demon.
 88           IF(HERE.NE.TREAS) GO TO 150             ! in treasure room?
 89           J=501
 90           DO 125 I=1,OLNT                                   ! loop.
 91             IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
 92           &         GO TO 125                     ! is it here?
 93 C old       OFLAG1(I)=OFLAG1(I).OR.VISIBT                   ! rematerialize objects.
 94             OFLAG1(I)=OR(OFLAG1(I),VISIBT)                  ! rematerialize objects.
 95             CALL RSPSUB(J,ODESC2(I))              ! describe.
 96             J=502
 97 C old       IF(.NOT.QEMPTY(I).AND.
 98 C old     &   (((OFLAG1(I).AND.TRANBT).NE.0).OR.
 99 C old     &    ((OFLAG2(I).AND.OPENBT).NE.0))) CALL PRINCO(I,573,.TRUE.)
100             IF(.NOT.QEMPTY(I).AND.
101           &   (((AND(OFLAG1(I),TRANBT)).NE.0).OR.
102           &    ((AND(OFLAG2(I),OPENBT)).NE.0))) CALL PRINCO(I,573,.TRUE.)
103 125       CONTINUE
104 C
105 150       J=500
106           DO 175 I=1,OLNT                                   ! carrying anything?
107             IF(OADV(I).NE.-THIEF) GO TO 175
108             CALL NEWSTA(I,0,HERE,0,0)             ! drop in room.
109             CALL RSPSUB(J,ODESC2(I))              ! describe.
110             J=502
111 C old       IF(.NOT.QEMPTY(I).AND.
112 C old     &   (((OFLAG1(I).AND.TRANBT).NE.0).OR.
113 C old     &    ((OFLAG2(I).AND.OPENBT).NE.0))) CALL PRINCO(I,573,.TRUE.)
114             IF(.NOT.QEMPTY(I).AND.
115           &   (((AND(OFLAG1(I),TRANBT)).NE.0).OR.
116           &    ((AND(OFLAG2(I),OPENBT)).NE.0))) CALL PRINCO(I,573,.TRUE.)
117 175       CONTINUE
118           RETURN
119 C
120 200       IF(PRSA.NE.FRSTQW) GO TO 250            ! first encounter?
121           THIEFP=PROB(20,75)
122           RETURN
123 C
124 250       IF((PRSA.NE.HELLOW).OR.(OCAPAC(THIEF).GE.0)) GO TO 300
125           CALL RSPEAK(626)                        ! hello to out thief?
126           RETURN
127 C
128 300       IF(PRSA.NE.OUTXW) GO TO 400             ! out?
129           THFACT=.FALSE.                                    ! disable demon.
130           ODESC1(THIEF)=504                       ! change description.
131 C old     OFLAG1(STILL)=OFLAG1(STILL).AND..NOT.VISIBT
132           OFLAG1(STILL)=AND(OFLAG1(STILL),COMPL(VISIBT))
133           RETURN
134 C
135 400       IF((PRSA.NE.INXW).AND.                            ! wake from fight demon?
136           &  (((PRSA.NE.ALARMW).AND.(PRSA.NE.KICKW)).OR.
137           &    (OCAPAC(THIEF).GE.0))) GO TO 500   ! wake, kick while out?
138           OCAPAC(THIEF)=IABS(OCAPAC(THIEF))       ! wake him up.
139           IF(QHERE(THIEF,HERE)) CALL RSPEAK(505)  ! can hero see?
140           THFACT=.TRUE.                                     ! enable demon.
141           ODESC1(THIEF)=503                       ! change description.
142 C old     OFLAG1(STILL)=OFLAG1(STILL).OR.VISIBT
143           OFLAG1(STILL)=OR(OFLAG1(STILL),VISIBT)
144           RETURN
145 C
146 500       IF(PRSA.NE.TAKEW) GO TO 600             ! take?
147           CALL RSPEAK(506)                        ! joke.
148           RETURN
149 C
150 C old 600 IF((PRSA.NE.THROWW).OR.(PRSO.NE.KNIFE).OR.
151 C old     &         ((OFLAG2(THIEF).AND.FITEBT).NE.0)) GO TO 700
152 600       IF((PRSA.NE.THROWW).OR.(PRSO.NE.KNIFE).OR.
153           &         ((AND(OFLAG2(THIEF),FITEBT)).NE.0)) GO TO 700
154           IF(PROB(10,10)) GO TO 650               ! threw knife, 10%?
155           CALL RSPEAK(507)                        ! no, just makes
156 C old     OFLAG2(THIEF)=OFLAG2(THIEF).OR.FITEBT   ! thief mad.
157           OFLAG2(THIEF)=OR(OFLAG2(THIEF),FITEBT)  ! thief mad.
158           RETURN
159 C
160 650       J=508                                             ! thief drops stuff.
161           DO 675 I=1,OLNT
162             IF(OADV(I).NE.-THIEF) GO TO 675       ! thief carrying?
163             J=509
164             CALL NEWSTA(I,0,HERE,0,0)
165 675       CONTINUE
166           CALL NEWSTA(THIEF,J,0,0,0)              ! thief vanishes.
167           RETURN
168 C
169 700       IF(((PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)).OR.(PRSO.EQ.0).OR.
170           &         (PRSO.EQ.THIEF)) GO TO 10     ! throw/give to thief?
171           IF(OCAPAC(THIEF).GE.0) GO TO 750
172           OCAPAC(THIEF)=IABS(OCAPAC(THIEF))       ! wake him up.
173           THFACT=.TRUE.                                     ! enable demon.
174           ODESC1(THIEF)=503                       ! change description.
175 C old     OFLAG1(STILL)=OFLAG1(STILL).OR.VISIBT
176           OFLAG1(STILL)=OR(OFLAG1(STILL),VISIBT)
177           CALL RSPEAK(510)
178 C
179 750       IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR.
180           &         (CTICK(CEVFUS).EQ.0)) GO TO 800
181           CALL RSPEAK(511)                        ! thief refuses bomb.
182           RETURN
183 C
184 800       IF(PRSO.NE.WATER) GO TO 850             ! water?
185           CALL NEWSTA(WATER,1081,0,0,0)           ! slips through fingers.
186           RETURN
187 C
188 850       CALL NEWSTA(PRSO,0,0,0,-THIEF)                    ! thief takes gift.
189           IF(OTVAL(PRSO).GT.0) GO TO 900                    ! a treasure?
190           CALL RSPSUB(512,ODESC2(PRSO))
191           RETURN
192 C
193 900       CALL RSPSUB(627,ODESC2(PRSO))           ! thief engrossed.
194           THFENF=.TRUE.
195           RETURN
196 C
197 10        THIEFP=.FALSE.
198           RETURN
199           END