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