1 /* RAPPL2- SPECIAL PURPOSE ROOM ROUTINES, PART 2 */
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
10 static void ewtell_ P((integer, integer));
11 static void lookto_ P((integer, integer, integer, integer, integer));
12
rappl2_(ri)13 logical rappl2_(ri)
14 integer ri;
15 {
16 /* Initialized data */
17
18 const integer newrms = 38;
19
20 /* System generated locals */
21 integer i__1;
22 logical ret_val;
23
24 /* Local variables */
25 integer i;
26 integer j;
27
28 ret_val = TRUE_;
29 switch (ri - newrms + 1) {
30 case 1: goto L38000;
31 case 2: goto L39000;
32 case 3: goto L40000;
33 case 4: goto L41000;
34 case 5: goto L42000;
35 case 6: goto L43000;
36 case 7: goto L44000;
37 case 8: goto L45000;
38 case 9: goto L46000;
39 case 10: goto L47000;
40 case 11: goto L48000;
41 case 12: goto L49000;
42 case 13: goto L50000;
43 case 14: goto L51000;
44 case 15: goto L52000;
45 case 16: goto L53000;
46 case 17: goto L54000;
47 case 18: goto L55000;
48 case 19: goto L56000;
49 case 20: goto L57000;
50 case 21: goto L58000;
51 case 22: goto L59000;
52 case 23: goto L60000;
53 }
54 bug_(70, ri);
55 return ret_val;
56
57 /* R38-- MIRROR D ROOM */
58
59 L38000:
60 if (prsvec_1.prsa == vindex_1.lookw) {
61 lookto_(rindex_1.fdoor, rindex_1.mrg, 0, 682, 681);
62 }
63 return ret_val;
64
65 /* R39-- MIRROR G ROOM */
66
67 L39000:
68 if (prsvec_1.prsa == vindex_1.walkiw) {
69 jigsup_(685);
70 }
71 return ret_val;
72
73 /* R40-- MIRROR C ROOM */
74
75 L40000:
76 if (prsvec_1.prsa == vindex_1.lookw) {
77 lookto_(rindex_1.mrg, rindex_1.mrb, 683, 0, 681);
78 }
79 return ret_val;
80
81 /* R41-- MIRROR B ROOM */
82
83 L41000:
84 if (prsvec_1.prsa == vindex_1.lookw) {
85 lookto_(rindex_1.mrc, rindex_1.mra, 0, 0, 681);
86 }
87 return ret_val;
88
89 /* R42-- MIRROR A ROOM */
90
91 L42000:
92 if (prsvec_1.prsa == vindex_1.lookw) {
93 lookto_(rindex_1.mrb, 0, 0, 684, 681);
94 }
95 return ret_val;
96 /* RAPPL2, PAGE 3 */
97
98 /* R43-- MIRROR C EAST/WEST */
99
100 L43000:
101 if (prsvec_1.prsa == vindex_1.lookw) {
102 ewtell_(play_1.here, 683);
103 }
104 return ret_val;
105
106 /* R44-- MIRROR B EAST/WEST */
107
108 L44000:
109 if (prsvec_1.prsa == vindex_1.lookw) {
110 ewtell_(play_1.here, 686);
111 }
112 return ret_val;
113
114 /* R45-- MIRROR A EAST/WEST */
115
116 L45000:
117 if (prsvec_1.prsa == vindex_1.lookw) {
118 ewtell_(play_1.here, 687);
119 }
120 return ret_val;
121
122 /* R46-- INSIDE MIRROR */
123
124 L46000:
125 if (prsvec_1.prsa != vindex_1.lookw) {
126 return ret_val;
127 }
128 /* !LOOK? */
129 rspeak_(688);
130 /* !DESCRIBE */
131
132 /* NOW DESCRIBE POLE STATE. */
133
134 /* CASES 1,2-- MDIR=270 & MLOC=MRB, POLE IS UP OR IN HOLE */
135 /* CASES 3,4-- MDIR=0 V MDIR=180, POLE IS UP OR IN CHANNEL */
136 /* CASE 5-- POLE IS UP */
137
138 i = 689;
139 /* !ASSUME CASE 5. */
140 if (findex_1.mdir == 270 && findex_1.mloc == rindex_1.mrb) {
141 i = min(findex_1.poleuf,1) + 690;
142 }
143 if (findex_1.mdir % 180 == 0) {
144 i = min(findex_1.poleuf,1) + 692;
145 }
146 rspeak_(i);
147 /* !DESCRIBE POLE. */
148 i__1 = findex_1.mdir / 45 + 695;
149 rspsub_(694, i__1);
150 /* !DESCRIBE ARROW. */
151 return ret_val;
152 /* RAPPL2, PAGE 4 */
153
154 /* R47-- MIRROR EYE ROOM */
155
156 L47000:
157 if (prsvec_1.prsa != vindex_1.lookw) {
158 return ret_val;
159 }
160 /* !LOOK? */
161 i = 704;
162 /* !ASSUME BEAM STOP. */
163 i__1 = objcts_1.olnt;
164 for (j = 1; j <= i__1; ++j) {
165 if (qhere_(j, play_1.here) && j != oindex_1.rbeam) {
166 goto L47200;
167 }
168 /* L47100: */
169 }
170 i = 703;
171 L47200:
172 rspsub_(i, objcts_1.odesc2[j - 1]);
173 /* !DESCRIBE BEAM. */
174 lookto_(rindex_1.mra, 0, 0, 0, 0);
175 /* !LOOK NORTH. */
176 return ret_val;
177
178 /* R48-- INSIDE CRYPT */
179
180 L48000:
181 if (prsvec_1.prsa != vindex_1.lookw) {
182 return ret_val;
183 }
184 /* !LOOK? */
185 i = 46;
186 /* !CRYPT IS OPEN/CLOSED. */
187 if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) {
188 i = 12;
189 }
190 rspsub_(705, i);
191 return ret_val;
192
193 /* R49-- SOUTH CORRIDOR */
194
195 L49000:
196 if (prsvec_1.prsa != vindex_1.lookw) {
197 return ret_val;
198 }
199 /* !LOOK? */
200 rspeak_(706);
201 /* !DESCRIBE. */
202 i = 46;
203 /* !ODOOR IS OPEN/CLOSED. */
204 if ((objcts_1.oflag2[oindex_1.odoor - 1] & OPENBT) != 0) {
205 i = 12;
206 }
207 if (findex_1.lcell == 4) {
208 rspsub_(707, i);
209 }
210 /* !DESCRIBE ODOOR IF THERE. */
211 return ret_val;
212
213 /* R50-- BEHIND DOOR */
214
215 L50000:
216 if (prsvec_1.prsa != vindex_1.walkiw) {
217 goto L50100;
218 }
219 /* !WALK IN? */
220 cevent_1.cflag[cindex_1.cevfol - 1] = TRUE_;
221 /* !MASTER FOLLOWS. */
222 cevent_1.ctick[cindex_1.cevfol - 1] = -1;
223 return ret_val;
224
225 L50100:
226 if (prsvec_1.prsa != vindex_1.lookw) {
227 return ret_val;
228 }
229 /* !LOOK? */
230 i = 46;
231 /* !QDOOR IS OPEN/CLOSED. */
232 if ((objcts_1.oflag2[oindex_1.qdoor - 1] & OPENBT) != 0) {
233 i = 12;
234 }
235 rspsub_(708, i);
236 return ret_val;
237 /* RAPPL2, PAGE 5 */
238
239 /* R51-- FRONT DOOR */
240
241 L51000:
242 if (prsvec_1.prsa == vindex_1.walkiw) {
243 cevent_1.ctick[cindex_1.cevfol - 1] = 0;
244 }
245 /* !IF EXITS, KILL FOLLOW. */
246 if (prsvec_1.prsa != vindex_1.lookw) {
247 return ret_val;
248 }
249 /* !LOOK? */
250 lookto_(0, rindex_1.mrd, 709, 0, 0);
251 /* !DESCRIBE SOUTH. */
252 i = 46;
253 /* !PANEL IS OPEN/CLOSED. */
254 if (findex_1.inqstf) {
255 i = 12;
256 }
257 /* !OPEN IF INQ STARTED. */
258 j = 46;
259 /* !QDOOR IS OPEN/CLOSED. */
260 if ((objcts_1.oflag2[oindex_1.qdoor - 1] & OPENBT) != 0) {
261 j = 12;
262 }
263 rspsb2_(710, i, j);
264 return ret_val;
265
266 /* R52-- NORTH CORRIDOR */
267
268 L52000:
269 if (prsvec_1.prsa != vindex_1.lookw) {
270 return ret_val;
271 }
272 /* !LOOK? */
273 i = 46;
274 if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
275 i = 12;
276 }
277 /* !CDOOR IS OPEN/CLOSED. */
278 rspsub_(711, i);
279 return ret_val;
280
281 /* R53-- PARAPET */
282
283 L53000:
284 if (prsvec_1.prsa == vindex_1.lookw) {
285 i__1 = findex_1.pnumb + 712;
286 rspsub_(712, i__1);
287 }
288 return ret_val;
289
290 /* R54-- CELL */
291
292 L54000:
293 if (prsvec_1.prsa != vindex_1.lookw) {
294 return ret_val;
295 }
296 /* !LOOK? */
297 i = 721;
298 /* !CDOOR IS OPEN/CLOSED. */
299 if ((objcts_1.oflag2[oindex_1.cdoor - 1] & OPENBT) != 0) {
300 i = 722;
301 }
302 rspeak_(i);
303 i = 46;
304 /* !ODOOR IS OPEN/CLOSED. */
305 if ((objcts_1.oflag2[oindex_1.odoor - 1] & OPENBT) != 0) {
306 i = 12;
307 }
308 if (findex_1.lcell == 4) {
309 rspsub_(723, i);
310 }
311 /* !DESCRIBE. */
312 return ret_val;
313
314 /* R55-- PRISON CELL */
315
316 L55000:
317 if (prsvec_1.prsa == vindex_1.lookw) {
318 rspeak_(724);
319 }
320 /* !LOOK? */
321 return ret_val;
322
323 /* R56-- NIRVANA CELL */
324
325 L56000:
326 if (prsvec_1.prsa != vindex_1.lookw) {
327 return ret_val;
328 }
329 /* !LOOK? */
330 i = 46;
331 /* !ODOOR IS OPEN/CLOSED. */
332 if ((objcts_1.oflag2[oindex_1.odoor - 1] & OPENBT) != 0) {
333 i = 12;
334 }
335 rspsub_(725, i);
336 return ret_val;
337 /* RAPPL2, PAGE 6 */
338
339 /* R57-- NIRVANA AND END OF GAME */
340
341 L57000:
342 if (prsvec_1.prsa != vindex_1.walkiw) {
343 return ret_val;
344 }
345 /* !WALKIN? */
346 rspeak_(726);
347 score_(0);
348 /* moved to exit routine CLOSE(DBCH) */
349 exit_();
350
351 /* R58-- TOMB ROOM */
352
353 L58000:
354 if (prsvec_1.prsa != vindex_1.lookw) {
355 return ret_val;
356 }
357 /* !LOOK? */
358 i = 46;
359 /* !TOMB IS OPEN/CLOSED. */
360 if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) {
361 i = 12;
362 }
363 rspsub_(792, i);
364 return ret_val;
365
366 /* R59-- PUZZLE SIDE ROOM */
367
368 L59000:
369 if (prsvec_1.prsa != vindex_1.lookw) {
370 return ret_val;
371 }
372 /* !LOOK? */
373 i = 861;
374 /* !ASSUME DOOR CLOSED. */
375 if (findex_1.cpoutf) {
376 i = 862;
377 }
378 /* !OPEN? */
379 rspeak_(i);
380 /* !DESCRIBE. */
381 return ret_val;
382
383 /* R60-- PUZZLE ROOM */
384
385 L60000:
386 if (prsvec_1.prsa != vindex_1.lookw) {
387 return ret_val;
388 }
389 /* !LOOK? */
390 if (findex_1.cpushf) {
391 goto L60100;
392 }
393 /* !STARTED PUZZLE? */
394 rspeak_(868);
395 /* !NO, DESCRIBE. */
396 if ((objcts_1.oflag2[oindex_1.warni - 1] & TCHBT) != 0) {
397 rspeak_(869);
398 }
399 return ret_val;
400
401 L60100:
402 cpinfo_(880, findex_1.cphere);
403 /* !DESCRIBE ROOM. */
404 return ret_val;
405
406 } /* rappl2_ */
407
408 /* LOOKTO-- DESCRIBE VIEW IN MIRROR HALLWAY */
409
410 /* DECLARATIONS */
411
lookto_(nrm,srm,nt,st,ht)412 static void lookto_(nrm, srm, nt, st, ht)
413 integer nrm;
414 integer srm;
415 integer nt;
416 integer st;
417 integer ht;
418 {
419 /* System generated locals */
420 integer i__1;
421
422 /* Local variables */
423 integer i, m1, dir, mrbf;
424
425 rspeak_(ht);
426 /* !DESCRIBE HALL. */
427 rspeak_(nt);
428 /* !DESCRIBE NORTH VIEW. */
429 rspeak_(st);
430 /* !DESCRIBE SOUTH VIEW. */
431 dir = 0;
432 /* !ASSUME NO DIRECTION. */
433 if ((i__1 = findex_1.mloc - play_1.here, abs(i__1)) != 1) {
434 goto L200;
435 }
436 /* !MIRROR TO N OR S? */
437 if (findex_1.mloc == nrm) {
438 dir = 695;
439 }
440 if (findex_1.mloc == srm) {
441 dir = 699;
442 }
443 /* !DIR=N/S. */
444 if (findex_1.mdir % 180 != 0) {
445 goto L100;
446 }
447 /* !MIRROR N-S? */
448 rspsub_(847, dir);
449 /* !YES, HE SEES PANEL */
450 rspsb2_(848, dir, dir);
451 /* !AND NARROW ROOMS. */
452 goto L200;
453
454 L100:
455 m1 = mrhere_(play_1.here);
456 /* !WHICH MIRROR? */
457 mrbf = 0;
458 /* !ASSUME INTACT. */
459 if (m1 == 1 && ! findex_1.mr1f || m1 == 2 && ! findex_1.mr2f) {
460 mrbf = 1;
461 }
462 i__1 = mrbf + 849;
463 rspsub_(i__1, dir);
464 /* !DESCRIBE. */
465 if (m1 == 1 && findex_1.mropnf) {
466 i__1 = mrbf + 823;
467 rspeak_(i__1);
468 }
469 if (mrbf != 0) {
470 rspeak_(851);
471 }
472
473 L200:
474 i = 0;
475 /* !ASSUME NO MORE TO DO. */
476 if (nt == 0 && (dir == 0 || dir == 699)) {
477 i = 852;
478 }
479 if (st == 0 && (dir == 0 || dir == 695)) {
480 i = 853;
481 }
482 if (nt + st + dir == 0) {
483 i = 854;
484 }
485 if (ht != 0) {
486 rspeak_(i);
487 }
488 /* !DESCRIBE HALLS. */
489 } /* lookto_ */
490
491 /* EWTELL-- DESCRIBE E/W NARROW ROOMS */
492
493 /* DECLARATIONS */
494
ewtell_(rm,st)495 static void ewtell_(rm, st)
496 integer rm;
497 integer st;
498 {
499 /* System generated locals */
500 integer i__1;
501
502 /* Local variables */
503 integer i;
504 logical m1;
505
506 /* NOTE THAT WE ARE EAST OR WEST OF MIRROR, AND */
507 /* MIRROR MUST BE N-S. */
508
509 m1 = findex_1.mdir + (rm - rindex_1.mrae) % 2 * 180 == 180;
510 i = (rm - rindex_1.mrae) % 2 + 819;
511 /* !GET BASIC E/W STRING. */
512 if (m1 && ! findex_1.mr1f || ! m1 && ! findex_1.mr2f) {
513 i += 2;
514 }
515 rspeak_(i);
516 if (m1 && findex_1.mropnf) {
517 i__1 = (i - 819) / 2 + 823;
518 rspeak_(i__1);
519 }
520 rspeak_(825);
521 rspeak_(st);
522 } /* ewtell_ */
523