1 /* AAPPLI- APPLICABLES FOR ADVENTURERS */
2
3 /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
4 /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
5 /* WRITTEN BY R. M. SUPNIK */
6
7 #include "funcs.h"
8 #include "vars.h"
9
aappli_(ri)10 logical aappli_(ri)
11 integer ri;
12 {
13 /* System generated locals */
14 logical ret_val;
15
16 /* Local variables */
17 logical f;
18 integer i;
19
20 if (ri == 0) {
21 goto L10;
22 }
23 /* !IF ZERO, NO APP. */
24 ret_val = TRUE_;
25 /* !ASSUME WINS. */
26 switch (ri) {
27 case 1: goto L1000;
28 case 2: goto L2000;
29 }
30 /* !BRANCH ON ADV. */
31 bug_(11, ri);
32
33 /* COMMON FALSE RETURN. */
34
35 L10:
36 ret_val = FALSE_;
37 return ret_val;
38
39 /* A1-- ROBOT. PROCESS MOST COMMANDS GIVEN TO ROBOT. */
40
41 L1000:
42 if (prsvec_1.prsa != vindex_1.raisew || prsvec_1.prso != oindex_1.rcage) {
43
44 goto L1200;
45 }
46 cevent_1.cflag[cindex_1.cevsph - 1] = FALSE_;
47 /* !ROBOT RAISED CAGE. */
48 play_1.winner = aindex_1.player;
49 /* !RESET FOR PLAYER. */
50 f = moveto_(rindex_1.cager, play_1.winner);
51 /* !MOVE TO NEW ROOM. */
52 newsta_(oindex_1.cage, 567, rindex_1.cager, 0, 0);
53 /* !INSTALL CAGE IN ROOM. */
54 newsta_(oindex_1.robot, 0, rindex_1.cager, 0, 0);
55 /* !INSTALL ROBOT IN ROOM. */
56 advs_1.aroom[aindex_1.arobot - 1] = rindex_1.cager;
57 /* !ALSO MOVE ROBOT/ADV. */
58 findex_1.cagesf = TRUE_;
59 /* !CAGE SOLVED. */
60 objcts_1.oflag1[oindex_1.robot - 1] &= ~ NDSCBT;
61 objcts_1.oflag1[oindex_1.spher - 1] |= TAKEBT;
62 return ret_val;
63
64 L1200:
65 if (prsvec_1.prsa != vindex_1.drinkw && prsvec_1.prsa != vindex_1.eatw) {
66 goto L1300;
67 }
68 rspeak_(568);
69 /* !EAT OR DRINK, JOKE. */
70 return ret_val;
71
72 L1300:
73 if (prsvec_1.prsa != vindex_1.readw) {
74 goto L1400;
75 }
76 /* !READ, */
77 rspeak_(569);
78 /* !JOKE. */
79 return ret_val;
80
81 L1400:
82 if (prsvec_1.prsa == vindex_1.walkw || prsvec_1.prsa == vindex_1.takew ||
83 prsvec_1.prsa == vindex_1.dropw || prsvec_1.prsa == vindex_1.putw
84 || prsvec_1.prsa == vindex_1.pushw || prsvec_1.prsa ==
85 vindex_1.throww || prsvec_1.prsa == vindex_1.turnw ||
86 prsvec_1.prsa == vindex_1.leapw) {
87 goto L10;
88 }
89 rspeak_(570);
90 /* !JOKE. */
91 return ret_val;
92 /* AAPPLI, PAGE 3 */
93
94 /* A2-- MASTER. PROCESS MOST COMMANDS GIVEN TO MASTER. */
95
96 L2000:
97 if ((objcts_1.oflag2[oindex_1.qdoor - 1] & OPENBT) != 0) {
98 goto L2100;
99 }
100 rspeak_(783);
101 /* !NO MASTER YET. */
102 return ret_val;
103
104 L2100:
105 if (prsvec_1.prsa != vindex_1.walkw) {
106 goto L2200;
107 }
108 /* !WALK? */
109 i = 784;
110 /* !ASSUME WONT. */
111 if (play_1.here == rindex_1.scorr && (prsvec_1.prso == xsrch_1.xnorth ||
112 prsvec_1.prso == xsrch_1.xenter) || play_1.here == rindex_1.ncorr
113 && (prsvec_1.prso == xsrch_1.xsouth || prsvec_1.prso ==
114 xsrch_1.xenter)) {
115 i = 785;
116 }
117 rspeak_(i);
118 return ret_val;
119
120 L2200:
121 if (prsvec_1.prsa == vindex_1.takew || prsvec_1.prsa == vindex_1.dropw ||
122 prsvec_1.prsa == vindex_1.putw || prsvec_1.prsa ==
123 vindex_1.throww || prsvec_1.prsa == vindex_1.pushw ||
124 prsvec_1.prsa == vindex_1.turnw || prsvec_1.prsa ==
125 vindex_1.spinw || prsvec_1.prsa == vindex_1.trntow ||
126 prsvec_1.prsa == vindex_1.follow || prsvec_1.prsa ==
127 vindex_1.stayw || prsvec_1.prsa == vindex_1.openw ||
128 prsvec_1.prsa == vindex_1.closew || prsvec_1.prsa ==
129 vindex_1.killw) {
130 goto L10;
131 }
132 rspeak_(786);
133 /* !MASTER CANT DO IT. */
134 return ret_val;
135
136 } /* aappli_ */
137
138 /* THIEFD- INTERMOVE THIEF DEMON */
139
140 /* DECLARATIONS */
141
thiefd_()142 void thiefd_()
143 {
144 /* System generated locals */
145 integer i__1, i__2;
146
147 /* Local variables */
148 integer i, j, nr;
149 logical once;
150 integer rhere;
151
152 /* !SET UP DETAIL FLAG. */
153 once = FALSE_;
154 /* !INIT FLAG. */
155 L1025:
156 rhere = objcts_1.oroom[oindex_1.thief - 1];
157 /* !VISIBLE POS. */
158 if (rhere != 0) {
159 hack_1.thfpos = rhere;
160 }
161
162 if (hack_1.thfpos == play_1.here) {
163 goto L1100;
164 }
165 /* !THIEF IN WIN RM? */
166 if (hack_1.thfpos != rindex_1.treas) {
167 goto L1400;
168 }
169 /* !THIEF NOT IN TREAS? */
170
171 /* THIEF IS IN TREASURE ROOM, AND WINNER IS NOT. */
172
173 if (rhere == 0) {
174 goto L1050;
175 }
176 /* !VISIBLE? */
177 newsta_(oindex_1.thief, 0, 0, 0, 0);
178 /* !YES, VANISH. */
179 rhere = 0;
180 if (qhere_(oindex_1.still, rindex_1.treas) || objcts_1.oadv[
181 oindex_1.still - 1] == -oindex_1.thief) {
182 newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
183 }
184 L1050:
185 i__1 = -oindex_1.thief;
186 i = robadv_(i__1, hack_1.thfpos, 0, 0);
187 /* !DROP VALUABLES. */
188 if (qhere_(oindex_1.egg, hack_1.thfpos)) {
189 objcts_1.oflag2[oindex_1.egg - 1] |= OPENBT;
190 }
191 goto L1700;
192
193 /* THIEF AND WINNER IN SAME ROOM. */
194
195 L1100:
196 if (hack_1.thfpos == rindex_1.treas) {
197 goto L1700;
198 }
199 /* !IF TREAS ROOM, NOTHING. */
200 if ((rooms_1.rflag[hack_1.thfpos - 1] & RLIGHT) != 0) {
201 goto L1400;
202 }
203 if (hack_1.thfflg) {
204 goto L1300;
205 }
206 /* !THIEF ANNOUNCED? */
207 if (rhere != 0 || prob_(70, 70)) {
208 goto L1150;
209 }
210 /* !IF INVIS AND 30%. */
211 if (objcts_1.ocan[oindex_1.still - 1] != oindex_1.thief) {
212 goto L1700;
213 }
214 /* !ABORT IF NO STILLETTO. */
215 newsta_(oindex_1.thief, 583, hack_1.thfpos, 0, 0);
216 /* !INSERT THIEF INTO ROOM. */
217 hack_1.thfflg = TRUE_;
218 /* !THIEF IS ANNOUNCED. */
219 return;
220
221 L1150:
222 if (rhere == 0 || (objcts_1.oflag2[oindex_1.thief - 1] & FITEBT)
223 == 0) {
224 goto L1200;
225 }
226 if (winnin_(oindex_1.thief, play_1.winner)) {
227 goto L1175;
228 }
229 /* !WINNING? */
230 newsta_(oindex_1.thief, 584, 0, 0, 0);
231 /* !NO, VANISH THIEF. */
232 objcts_1.oflag2[oindex_1.thief - 1] &= ~ FITEBT;
233 if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
234 oindex_1.still - 1] == -oindex_1.thief) {
235 newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
236 }
237 return;
238
239 L1175:
240 if (prob_(90, 90)) {
241 goto L1700;
242 }
243 /* !90% CHANCE TO STAY. */
244
245 L1200:
246 if (rhere == 0 || prob_(70, 70)) {
247 goto L1250;
248 }
249 /* !IF VISIBLE AND 30% */
250 newsta_(oindex_1.thief, 585, 0, 0, 0);
251 /* !VANISH THIEF. */
252 if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
253 oindex_1.still - 1] == -oindex_1.thief) {
254 newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
255 }
256 return;
257
258 L1300:
259 if (rhere == 0) {
260 goto L1700;
261 }
262 /* !ANNOUNCED. VISIBLE? */
263 L1250:
264 if (prob_(70, 70)) {
265 return;
266 }
267 /* !70% CHANCE TO DO NOTHING. */
268 hack_1.thfflg = TRUE_;
269 i__1 = -oindex_1.thief;
270 i__2 = -oindex_1.thief;
271 nr = robrm_(hack_1.thfpos, 100, 0, 0, i__1) + robadv_(
272 play_1.winner, 0, 0, i__2);
273 i = 586;
274 /* !ROBBED EM. */
275 if (rhere != 0) {
276 i = 588;
277 }
278 /* !WAS HE VISIBLE? */
279 if (nr != 0) {
280 ++i;
281 }
282 /* !DID HE GET ANYTHING? */
283 newsta_(oindex_1.thief, i, 0, 0, 0);
284 /* !VANISH THIEF. */
285 if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
286 oindex_1.still - 1] == -oindex_1.thief) {
287 newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
288 }
289 if (nr != 0 && ! lit_(hack_1.thfpos)) {
290 rspeak_(406);
291 }
292 rhere = 0;
293 goto L1700;
294 /* !ONWARD. */
295
296 /* NOT IN ADVENTURERS ROOM. */
297
298 L1400:
299 newsta_(oindex_1.thief, 0, 0, 0, 0);
300 /* !VANISH. */
301 rhere = 0;
302 if (qhere_(oindex_1.still, hack_1.thfpos) || objcts_1.oadv[
303 oindex_1.still - 1] == -oindex_1.thief) {
304 newsta_(oindex_1.still, 0, 0, oindex_1.thief, 0);
305 }
306 if ((rooms_1.rflag[hack_1.thfpos - 1] & RSEEN) == 0) {
307 goto L1700;
308 }
309 i__1 = -oindex_1.thief;
310 i = robrm_(hack_1.thfpos, 75, 0, 0, i__1);
311 /* !ROB ROOM 75%. */
312 if (hack_1.thfpos < rindex_1.maze1 || hack_1.thfpos > rindex_1.maz15 ||
313 play_1.here < rindex_1.maze1 || play_1.here > rindex_1.maz15) {
314 goto L1500;
315 }
316 i__1 = objcts_1.olnt;
317 for (i = 1; i <= i__1; ++i) {
318 /* !BOTH IN MAZE. */
319 if (! qhere_(i, hack_1.thfpos) || prob_(60, 60) || (
320 objcts_1.oflag1[i - 1] & VISIBT + TAKEBT) !=
321 VISIBT + TAKEBT) {
322 goto L1450;
323 }
324 rspsub_(590, objcts_1.odesc2[i - 1]);
325 /* !TAKE OBJECT. */
326 if (prob_(40, 20)) {
327 goto L1700;
328 }
329 i__2 = -oindex_1.thief;
330 newsta_(i, 0, 0, 0, i__2);
331 /* !MOST OF THE TIME. */
332 objcts_1.oflag2[i - 1] |= TCHBT;
333 goto L1700;
334 L1450:
335 ;
336 }
337 goto L1700;
338
339 L1500:
340 i__1 = objcts_1.olnt;
341 for (i = 1; i <= i__1; ++i) {
342 /* !NOT IN MAZE. */
343 if (! qhere_(i, hack_1.thfpos) || objcts_1.otval[i - 1] != 0 ||
344 prob_(80, 60) || (objcts_1.oflag1[i - 1] &
345 VISIBT + TAKEBT) != VISIBT +
346 TAKEBT) {
347 goto L1550;
348 }
349 i__2 = -oindex_1.thief;
350 newsta_(i, 0, 0, 0, i__2);
351 objcts_1.oflag2[i - 1] |= TCHBT;
352 goto L1700;
353 L1550:
354 ;
355 }
356
357 /* NOW MOVE TO NEW ROOM. */
358
359 L1700:
360 if (objcts_1.oadv[oindex_1.rope - 1] == -oindex_1.thief) {
361 findex_1.domef = FALSE_;
362 }
363 if (once) {
364 goto L1800;
365 }
366 once = ! once;
367 L1750:
368 --hack_1.thfpos;
369 /* !NEXT ROOM. */
370 if (hack_1.thfpos <= 0) {
371 hack_1.thfpos = rooms_1.rlnt;
372 }
373 if ((rooms_1.rflag[hack_1.thfpos - 1] & RLAND + RSACRD +
374 REND) != RLAND) {
375 goto L1750;
376 }
377 hack_1.thfflg = FALSE_;
378 /* !NOT ANNOUNCED. */
379 goto L1025;
380 /* !ONCE MORE. */
381
382 /* ALL DONE. */
383
384 L1800:
385 if (hack_1.thfpos == rindex_1.treas) {
386 return;
387 }
388 /* !IN TREASURE ROOM? */
389 j = 591;
390 /* !NO, DROP STUFF. */
391 if (hack_1.thfpos != play_1.here) {
392 j = 0;
393 }
394 i__1 = objcts_1.olnt;
395 for (i = 1; i <= i__1; ++i) {
396 if (objcts_1.oadv[i - 1] != -oindex_1.thief || prob_(70, 70)
397 || objcts_1.otval[i - 1] > 0) {
398 goto L1850;
399 }
400 newsta_(i, j, hack_1.thfpos, 0, 0);
401 j = 0;
402 L1850:
403 ;
404 }
405 return;
406
407 } /* thiefd_ */
408