1 /* RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1 */
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
rappl1_(ri)10 logical rappl1_(ri)
11 integer ri;
12 {
13 /* System generated locals */
14 integer i__1, i__2;
15 logical ret_val;
16
17 /* Local variables */
18 logical f;
19 integer i;
20 integer j;
21
22 ret_val = TRUE_;
23 /* !USUALLY IGNORED. */
24 if (ri == 0) {
25 return ret_val;
26 }
27 /* !RETURN IF NAUGHT. */
28
29 /* !SET TO FALSE FOR */
30
31 /* !NEW DESC NEEDED. */
32 switch (ri) {
33 case 1: goto L1000;
34 case 2: goto L2000;
35 case 3: goto L3000;
36 case 4: goto L4000;
37 case 5: goto L5000;
38 case 6: goto L6000;
39 case 7: goto L7000;
40 case 8: goto L8000;
41 case 9: goto L9000;
42 case 10: goto L10000;
43 case 11: goto L11000;
44 case 12: goto L12000;
45 case 13: goto L13000;
46 case 14: goto L14000;
47 case 15: goto L15000;
48 case 16: goto L16000;
49 case 17: goto L17000;
50 case 18: goto L18000;
51 case 19: goto L19000;
52 case 20: goto L20000;
53 case 21: goto L21000;
54 case 22: goto L22000;
55 case 23: goto L23000;
56 case 24: goto L24000;
57 case 25: goto L25000;
58 case 26: goto L26000;
59 case 27: goto L27000;
60 case 28: goto L28000;
61 case 29: goto L29000;
62 case 30: goto L30000;
63 case 31: goto L31000;
64 case 32: goto L32000;
65 case 33: goto L33000;
66 case 34: goto L34000;
67 case 35: goto L35000;
68 case 36: goto L36000;
69 case 37: goto L37000;
70 }
71 bug_(1, ri);
72
73 /* R1-- EAST OF HOUSE. DESCRIPTION DEPENDS ON STATE OF WINDOW */
74
75 L1000:
76 if (prsvec_1.prsa != vindex_1.lookw) {
77 return ret_val;
78 }
79 /* !LOOK? */
80 i = 13;
81 /* !ASSUME CLOSED. */
82 if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
83 i = 12;
84 }
85 /* !IF OPEN, AJAR. */
86 rspsub_(11, i);
87 /* !DESCRIBE. */
88 return ret_val;
89
90 /* R2-- KITCHEN. SAME VIEW FROM INSIDE. */
91
92 L2000:
93 if (prsvec_1.prsa != vindex_1.lookw) {
94 return ret_val;
95 }
96 /* !LOOK? */
97 i = 13;
98 /* !ASSUME CLOSED. */
99 if ((objcts_1.oflag2[oindex_1.windo - 1] & OPENBT) != 0) {
100 i = 12;
101 }
102 /* !IF OPEN, AJAR. */
103 rspsub_(14, i);
104 /* !DESCRIBE. */
105 return ret_val;
106
107 /* R3-- LIVING ROOM. DESCRIPTION DEPENDS ON MAGICF (STATE OF */
108 /* DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED) */
109
110 L3000:
111 if (prsvec_1.prsa != vindex_1.lookw) {
112 goto L3500;
113 }
114 /* !LOOK? */
115 i = 15;
116 /* !ASSUME NO HOLE. */
117 if (findex_1.magicf) {
118 i = 16;
119 }
120 /* !IF MAGICF, CYCLOPS HOLE. */
121 rspeak_(i);
122 /* !DESCRIBE. */
123 i = findex_1.orrug + 17;
124 /* !ASSUME INITIAL STATE. */
125 if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT) != 0) {
126 i += 2;
127 }
128 /* !DOOR OPEN? */
129 rspeak_(i);
130 /* !DESCRIBE. */
131 return ret_val;
132
133 /* NOT A LOOK WORD. REEVALUATE TROPHY CASE. */
134
135 L3500:
136 if (prsvec_1.prsa != vindex_1.takew && (prsvec_1.prsa != vindex_1.putw ||
137 prsvec_1.prsi != oindex_1.tcase)) {
138 return ret_val;
139 }
140 advs_1.ascore[play_1.winner - 1] = state_1.rwscor;
141 /* !SCORE TROPHY CASE. */
142 i__1 = objcts_1.olnt;
143 for (i = 1; i <= i__1; ++i) {
144 /* !RETAIN RAW SCORE AS WELL. */
145 j = i;
146 /* !FIND OUT IF IN CASE. */
147 L3550:
148 j = objcts_1.ocan[j - 1];
149 /* !TRACE OWNERSHIP. */
150 if (j == 0) {
151 goto L3600;
152 }
153 if (j != oindex_1.tcase) {
154 goto L3550;
155 }
156 /* !DO ALL LEVELS. */
157 advs_1.ascore[play_1.winner - 1] += objcts_1.otval[i - 1];
158 L3600:
159 ;
160 }
161 scrupd_(0);
162 /* !SEE IF ENDGAME TRIG. */
163 return ret_val;
164 /* RAPPL1, PAGE 3 */
165
166 /* R4-- CELLAR. SHUT DOOR AND BAR IT IF HE JUST WALKED IN. */
167
168 L4000:
169 if (prsvec_1.prsa != vindex_1.lookw) {
170 goto L4500;
171 }
172 /* !LOOK? */
173 rspeak_(21);
174 /* !DESCRIBE CELLAR. */
175 return ret_val;
176
177 L4500:
178 if (prsvec_1.prsa != vindex_1.walkiw) {
179 return ret_val;
180 }
181 /* !WALKIN? */
182 if ((objcts_1.oflag2[oindex_1.door - 1] & OPENBT +
183 TCHBT) != OPENBT) {
184 return ret_val;
185 }
186 objcts_1.oflag2[oindex_1.door - 1] = (objcts_1.oflag2[oindex_1.door - 1] |
187 TCHBT) & ~ OPENBT;
188 rspeak_(22);
189 /* !SLAM AND BOLT DOOR. */
190 return ret_val;
191
192 /* R5-- MAZE11. DESCRIBE STATE OF GRATING. */
193
194 L5000:
195 if (prsvec_1.prsa != vindex_1.lookw) {
196 return ret_val;
197 }
198 /* !LOOK? */
199 rspeak_(23);
200 /* !DESCRIBE. */
201 i = 24;
202 /* !ASSUME LOCKED. */
203 if (findex_1.grunlf) {
204 i = 26;
205 }
206 /* !UNLOCKED? */
207 if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
208 i = 25;
209 }
210 /* !OPEN? */
211 rspeak_(i);
212 /* !DESCRIBE GRATE. */
213 return ret_val;
214
215 /* R6-- CLEARING. DESCRIBE CLEARING, MOVE LEAVES. */
216
217 L6000:
218 if (prsvec_1.prsa != vindex_1.lookw) {
219 goto L6500;
220 }
221 /* !LOOK? */
222 rspeak_(27);
223 /* !DESCRIBE. */
224 if (findex_1.rvclr == 0) {
225 return ret_val;
226 }
227 /* !LEAVES MOVED? */
228 i = 28;
229 /* !YES, ASSUME GRATE CLOSED. */
230 if ((objcts_1.oflag2[oindex_1.grate - 1] & OPENBT) != 0) {
231 i = 29;
232 }
233 /* !OPEN? */
234 rspeak_(i);
235 /* !DESCRIBE GRATE. */
236 return ret_val;
237
238 L6500:
239 if (findex_1.rvclr != 0 || qhere_(oindex_1.leave, rindex_1.clear) && (
240 prsvec_1.prsa != vindex_1.movew || prsvec_1.prso !=
241 oindex_1.leave)) {
242 return ret_val;
243 }
244 rspeak_(30);
245 /* !MOVE LEAVES, REVEAL GRATE. */
246 findex_1.rvclr = 1;
247 /* !INDICATE LEAVES MOVED. */
248 return ret_val;
249 /* RAPPL1, PAGE 4 */
250
251 /* R7-- RESERVOIR SOUTH. DESCRIPTION DEPENDS ON LOW TIDE FLAG. */
252
253 L7000:
254 if (prsvec_1.prsa != vindex_1.lookw) {
255 return ret_val;
256 }
257 /* !LOOK? */
258 i = 31;
259 /* !ASSUME FULL. */
260 if (findex_1.lwtidf) {
261 i = 32;
262 }
263 /* !IF LOW TIDE, EMPTY. */
264 rspeak_(i);
265 /* !DESCRIBE. */
266 rspeak_(33);
267 /* !DESCRIBE EXITS. */
268 return ret_val;
269
270 /* R8-- RESERVOIR. STATE DEPENDS ON LOW TIDE FLAG. */
271
272 L8000:
273 if (prsvec_1.prsa != vindex_1.lookw) {
274 return ret_val;
275 }
276 /* !LOOK? */
277 i = 34;
278 /* !ASSUME FULL. */
279 if (findex_1.lwtidf) {
280 i = 35;
281 }
282 /* !IF LOW TIDE, EMTPY. */
283 rspeak_(i);
284 /* !DESCRIBE. */
285 return ret_val;
286
287 /* R9-- RESERVOIR NORTH. ALSO DEPENDS ON LOW TIDE FLAG. */
288
289 L9000:
290 if (prsvec_1.prsa != vindex_1.lookw) {
291 return ret_val;
292 }
293 /* !LOOK? */
294 i = 36;
295 /* !YOU GET THE IDEA. */
296 if (findex_1.lwtidf) {
297 i = 37;
298 }
299 rspeak_(i);
300 rspeak_(38);
301 return ret_val;
302
303 /* R10-- GLACIER ROOM. STATE DEPENDS ON MELTED, VANISHED FLAGS. */
304
305 L10000:
306 if (prsvec_1.prsa != vindex_1.lookw) {
307 return ret_val;
308 }
309 /* !LOOK? */
310 rspeak_(39);
311 /* !BASIC DESCRIPTION. */
312 i = 0;
313 /* !ASSUME NO CHANGES. */
314 if (findex_1.glacmf) {
315 i = 40;
316 }
317 /* !PARTIAL MELT? */
318 if (findex_1.glacrf) {
319 i = 41;
320 }
321 /* !COMPLETE MELT? */
322 rspeak_(i);
323 /* !DESCRIBE. */
324 return ret_val;
325
326 /* R11-- FOREST ROOM */
327
328 L11000:
329 if (prsvec_1.prsa == vindex_1.walkiw) {
330 cevent_1.cflag[cindex_1.cevfor - 1] = TRUE_;
331 }
332 /* !IF WALK IN, BIRDIE. */
333 return ret_val;
334
335 /* R12-- MIRROR ROOM. STATE DEPENDS ON MIRROR INTACT. */
336
337 L12000:
338 if (prsvec_1.prsa != vindex_1.lookw) {
339 return ret_val;
340 }
341 /* !LOOK? */
342 rspeak_(42);
343 /* !DESCRIBE. */
344 if (findex_1.mirrmf) {
345 rspeak_(43);
346 }
347 /* !IF BROKEN, NASTY REMARK. */
348 return ret_val;
349 /* RAPPL1, PAGE 5 */
350
351 /* R13-- CAVE2 ROOM. BLOW OUT CANDLES WITH 50% PROBABILITY. */
352
353 L13000:
354 if (prsvec_1.prsa != vindex_1.walkiw) {
355 return ret_val;
356 }
357 /* !WALKIN? */
358 if (prob_(50, 50) || objcts_1.oadv[oindex_1.candl - 1] !=
359 play_1.winner || ! ((objcts_1.oflag1[oindex_1.candl - 1] &
360 ONBT) != 0)) {
361 return ret_val;
362 }
363 objcts_1.oflag1[oindex_1.candl - 1] &= ~ ONBT;
364 rspeak_(47);
365 /* !TELL OF WINDS. */
366 cevent_1.cflag[cindex_1.cevcnd - 1] = FALSE_;
367 /* !HALT CANDLE COUNTDOWN. */
368 return ret_val;
369
370 /* R14-- BOOM ROOM. BLOW HIM UP IF CARRYING FLAMING OBJECT. */
371
372 L14000:
373 j = objcts_1.odesc2[oindex_1.candl - 1];
374 /* !ASSUME CANDLE. */
375 if (objcts_1.oadv[oindex_1.candl - 1] == play_1.winner && (
376 objcts_1.oflag1[oindex_1.candl - 1] & ONBT) != 0) {
377 goto L14100;
378 }
379 j = objcts_1.odesc2[oindex_1.torch - 1];
380 /* !ASSUME TORCH. */
381 if (objcts_1.oadv[oindex_1.torch - 1] == play_1.winner && (
382 objcts_1.oflag1[oindex_1.torch - 1] & ONBT) != 0) {
383 goto L14100;
384 }
385 j = objcts_1.odesc2[oindex_1.match - 1];
386 if (objcts_1.oadv[oindex_1.match - 1] == play_1.winner && (
387 objcts_1.oflag1[oindex_1.match - 1] & ONBT) != 0) {
388 goto L14100;
389 }
390 return ret_val;
391 /* !SAFE */
392
393 L14100:
394 if (prsvec_1.prsa != vindex_1.trnonw) {
395 goto L14200;
396 }
397 /* !TURN ON? */
398 rspsub_(294, j);
399 /* !BOOM */
400 /* ! */
401 jigsup_(44);
402 return ret_val;
403
404 L14200:
405 if (prsvec_1.prsa != vindex_1.walkiw) {
406 return ret_val;
407 }
408 /* !WALKIN? */
409 rspsub_(295, j);
410 /* !BOOM */
411 /* ! */
412 jigsup_(44);
413 return ret_val;
414
415 /* R15-- NO-OBJS. SEE IF EMPTY HANDED, SCORE LIGHT SHAFT. */
416
417 L15000:
418 findex_1.empthf = TRUE_;
419 /* !ASSUME TRUE. */
420 i__1 = objcts_1.olnt;
421 for (i = 1; i <= i__1; ++i) {
422 /* !SEE IF CARRYING. */
423 if (objcts_1.oadv[i - 1] == play_1.winner) {
424 findex_1.empthf = FALSE_;
425 }
426 /* L15100: */
427 }
428
429 if (play_1.here != rindex_1.bshaf || ! lit_(play_1.here)) {
430 return ret_val;
431 }
432 scrupd_(state_1.ltshft);
433 /* !SCORE LIGHT SHAFT. */
434 state_1.ltshft = 0;
435 /* !NEVER AGAIN. */
436 return ret_val;
437 /* RAPPL1, PAGE 6 */
438
439 /* R16-- MACHINE ROOM. DESCRIBE MACHINE. */
440
441 L16000:
442 if (prsvec_1.prsa != vindex_1.lookw) {
443 return ret_val;
444 }
445 /* !LOOK? */
446 i = 46;
447 /* !ASSUME LID CLOSED. */
448 if ((objcts_1.oflag2[oindex_1.machi - 1] & OPENBT) != 0) {
449 i = 12;
450 }
451 /* !IF OPEN, OPEN. */
452 rspsub_(45, i);
453 /* !DESCRIBE. */
454 return ret_val;
455
456 /* R17-- BAT ROOM. UNLESS CARRYING GARLIC, FLY AWAY WITH ME... */
457
458 L17000:
459 if (prsvec_1.prsa != vindex_1.lookw) {
460 goto L17500;
461 }
462 /* !LOOK? */
463 rspeak_(48);
464 /* !DESCRIBE ROOM. */
465 if (objcts_1.oadv[oindex_1.garli - 1] == play_1.winner) {
466 rspeak_(49);
467 }
468 /* !BAT HOLDS NOSE. */
469 return ret_val;
470
471 L17500:
472 if (prsvec_1.prsa != vindex_1.walkiw || objcts_1.oadv[oindex_1.garli - 1]
473 == play_1.winner) {
474 return ret_val;
475 }
476 rspeak_(50);
477 /* !TIME TO FLY, JACK. */
478 f = moveto_(bats_1.batdrp[rnd_(9)], play_1.winner);
479 /* !SELECT RANDOM DEST. */
480 ret_val = FALSE_;
481 /* !INDICATE NEW DESC NEEDED. */
482 return ret_val;
483
484 /* R18-- DOME ROOM. STATE DEPENDS ON WHETHER ROPE TIED TO RAILING. */
485
486 L18000:
487 if (prsvec_1.prsa != vindex_1.lookw) {
488 goto L18500;
489 }
490 /* !LOOK? */
491 rspeak_(51);
492 /* !DESCRIBE. */
493 if (findex_1.domef) {
494 rspeak_(52);
495 }
496 /* !IF ROPE, DESCRIBE. */
497 return ret_val;
498
499 L18500:
500 if (prsvec_1.prsa == vindex_1.leapw) {
501 jigsup_(53);
502 }
503 /* !DID HE JUMP??? */
504 return ret_val;
505
506 /* R19-- TORCH ROOM. ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING. */
507
508 L19000:
509 if (prsvec_1.prsa != vindex_1.lookw) {
510 return ret_val;
511 }
512 /* !LOOK? */
513 rspeak_(54);
514 /* !DESCRIBE. */
515 if (findex_1.domef) {
516 rspeak_(55);
517 }
518 /* !IF ROPE, DESCRIBE. */
519 return ret_val;
520
521 /* R20-- CAROUSEL ROOM. SPIN HIM OR KILL HIM. */
522
523 L20000:
524 if (prsvec_1.prsa != vindex_1.lookw) {
525 goto L20500;
526 }
527 /* !LOOK? */
528 rspeak_(56);
529 /* !DESCRIBE. */
530 if (! findex_1.caroff) {
531 rspeak_(57);
532 }
533 /* !IF NOT FLIPPED, SPIN. */
534 return ret_val;
535
536 L20500:
537 if (prsvec_1.prsa == vindex_1.walkiw && findex_1.carozf) {
538 jigsup_(58);
539 }
540 /* !WALKED IN. */
541 return ret_val;
542 /* RAPPL1, PAGE 7 */
543
544 /* R21-- LLD ROOM. HANDLE EXORCISE, DESCRIPTIONS. */
545
546 L21000:
547 if (prsvec_1.prsa != vindex_1.lookw) {
548 goto L21500;
549 }
550 /* !LOOK? */
551 rspeak_(59);
552 /* !DESCRIBE. */
553 if (! findex_1.lldf) {
554 rspeak_(60);
555 }
556 /* !IF NOT VANISHED, GHOSTS. */
557 return ret_val;
558
559 L21500:
560 if (prsvec_1.prsa != vindex_1.exorcw) {
561 return ret_val;
562 }
563 /* !EXORCISE? */
564 if (objcts_1.oadv[oindex_1.bell - 1] == play_1.winner && objcts_1.oadv[
565 oindex_1.book - 1] == play_1.winner && objcts_1.oadv[
566 oindex_1.candl - 1] == play_1.winner && (objcts_1.oflag1[
567 oindex_1.candl - 1] & ONBT) != 0) {
568 goto L21600;
569 }
570 rspeak_(62);
571 /* !NOT EQUIPPED. */
572 return ret_val;
573
574 L21600:
575 if (qhere_(oindex_1.ghost, play_1.here)) {
576 goto L21700;
577 }
578 /* !GHOST HERE? */
579 jigsup_(61);
580 /* !NOPE, EXORCISE YOU. */
581 return ret_val;
582
583 L21700:
584 newsta_(oindex_1.ghost, 63, 0, 0, 0);
585 /* !VANISH GHOST. */
586 findex_1.lldf = TRUE_;
587 /* !OPEN GATE. */
588 return ret_val;
589
590 /* R22-- LLD2-ROOM. IS HIS HEAD ON A POLE? */
591
592 L22000:
593 if (prsvec_1.prsa != vindex_1.lookw) {
594 return ret_val;
595 }
596 /* !LOOK? */
597 rspeak_(64);
598 /* !DESCRIBE. */
599 if (findex_1.onpolf) {
600 rspeak_(65);
601 }
602 /* !ON POLE? */
603 return ret_val;
604
605 /* R23-- DAM ROOM. DESCRIBE RESERVOIR, PANEL. */
606
607 L23000:
608 if (prsvec_1.prsa != vindex_1.lookw) {
609 return ret_val;
610 }
611 /* !LOOK? */
612 rspeak_(66);
613 /* !DESCRIBE. */
614 i = 67;
615 if (findex_1.lwtidf) {
616 i = 68;
617 }
618 rspeak_(i);
619 /* !DESCRIBE RESERVOIR. */
620 rspeak_(69);
621 /* !DESCRIBE PANEL. */
622 if (findex_1.gatef) {
623 rspeak_(70);
624 }
625 /* !BUBBLE IS GLOWING. */
626 return ret_val;
627
628 /* R24-- TREE ROOM */
629
630 L24000:
631 if (prsvec_1.prsa != vindex_1.lookw) {
632 return ret_val;
633 }
634 /* !LOOK? */
635 rspeak_(660);
636 /* !DESCRIBE. */
637 i = 661;
638 /* !SET FLAG FOR BELOW. */
639 i__1 = objcts_1.olnt;
640 for (j = 1; j <= i__1; ++j) {
641 /* !DESCRIBE OBJ IN FORE3. */
642 if (! qhere_(j, rindex_1.fore3) || j == oindex_1.ftree) {
643 goto L24200;
644 }
645 rspeak_(i);
646 /* !SET STAGE, */
647 i = 0;
648 rspsub_(502, objcts_1.odesc2[j - 1]);
649 /* !DESCRIBE. */
650 L24200:
651 ;
652 }
653 return ret_val;
654 /* RAPPL1, PAGE 8 */
655
656 /* R25-- CYCLOPS-ROOM. DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
657 */
658
659 L25000:
660 if (prsvec_1.prsa != vindex_1.lookw) {
661 return ret_val;
662 }
663 /* !LOOK? */
664 rspeak_(606);
665 /* !DESCRIBE. */
666 i = 607;
667 /* !ASSUME BASIC STATE. */
668 if (findex_1.rvcyc > 0) {
669 i = 608;
670 }
671 /* !>0? HUNGRY. */
672 if (findex_1.rvcyc < 0) {
673 i = 609;
674 }
675 /* !<0? THIRSTY. */
676 if (findex_1.cyclof) {
677 i = 610;
678 }
679 /* !ASLEEP? */
680 if (findex_1.magicf) {
681 i = 611;
682 }
683 /* !GONE? */
684 rspeak_(i);
685 /* !DESCRIBE. */
686 if (! findex_1.cyclof && findex_1.rvcyc != 0) {
687 i__1 = abs(findex_1.rvcyc) + 193;
688 rspeak_(i__1);
689 }
690 return ret_val;
691
692 /* R26-- BANK BOX ROOM. */
693
694 L26000:
695 if (prsvec_1.prsa != vindex_1.walkiw) {
696 return ret_val;
697 }
698 /* !SURPRISE HIM. */
699 for (i = 1; i <= 8; i += 2) {
700 /* !SCOLRM DEPENDS ON */
701 if (screen_1.fromdr == screen_1.scoldr[i - 1]) {
702 screen_1.scolrm = screen_1.scoldr[i];
703 }
704 /* L26100: */
705 }
706 /* !ENTRY DIRECTION. */
707 return ret_val;
708
709 /* R27-- TREASURE ROOM. */
710
711 L27000:
712 if (prsvec_1.prsa != vindex_1.walkiw || ! hack_1.thfact) {
713 return ret_val;
714 }
715 if (objcts_1.oroom[oindex_1.thief - 1] != play_1.here) {
716 newsta_(oindex_1.thief, 82, play_1.here, 0, 0);
717 }
718 hack_1.thfpos = play_1.here;
719 /* !RESET SEARCH PATTERN. */
720 objcts_1.oflag2[oindex_1.thief - 1] |= FITEBT;
721 if (objcts_1.oroom[oindex_1.chali - 1] == play_1.here) {
722 objcts_1.oflag1[oindex_1.chali - 1] &= ~ TAKEBT;
723 }
724
725 /* VANISH EVERYTHING IN ROOM */
726
727 j = 0;
728 /* !ASSUME NOTHING TO VANISH. */
729 i__1 = objcts_1.olnt;
730 for (i = 1; i <= i__1; ++i) {
731 if (i == oindex_1.chali || i == oindex_1.thief || ! qhere_(i,
732 play_1.here)) {
733 goto L27200;
734 }
735 j = 83;
736 /* !FLAG BYEBYE. */
737 objcts_1.oflag1[i - 1] &= ~ VISIBT;
738 L27200:
739 ;
740 }
741 rspeak_(j);
742 /* !DESCRIBE. */
743 return ret_val;
744
745 /* R28-- CLIFF FUNCTION. SEE IF CARRYING INFLATED BOAT. */
746
747 L28000:
748 findex_1.deflaf = objcts_1.oadv[oindex_1.rboat - 1] != play_1.winner;
749 /* !TRUE IF NOT CARRYING. */
750 return ret_val;
751 /* RAPPL1, PAGE 9 */
752
753 /* R29-- RIVR4 ROOM. PLAY WITH BUOY. */
754
755 L29000:
756 if (! findex_1.buoyf || objcts_1.oadv[oindex_1.buoy - 1] != play_1.winner)
757 {
758 return ret_val;
759 }
760 rspeak_(84);
761 /* !GIVE HINT, */
762 findex_1.buoyf = FALSE_;
763 /* !THEN DISABLE. */
764 return ret_val;
765
766 /* R30-- OVERFALLS. DOOM. */
767
768 L30000:
769 if (prsvec_1.prsa != vindex_1.lookw) {
770 jigsup_(85);
771 }
772 /* !OVER YOU GO. */
773 return ret_val;
774
775 /* R31-- BEACH ROOM. DIG A HOLE. */
776
777 L31000:
778 if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
779 return ret_val;
780 }
781 ++findex_1.rvsnd;
782 /* !INCREMENT DIG STATE. */
783 switch (findex_1.rvsnd) {
784 case 1: goto L31100;
785 case 2: goto L31100;
786 case 3: goto L31100;
787 case 4: goto L31400;
788 case 5: goto L31500;
789 }
790 /* !PROCESS STATE. */
791 bug_(2, findex_1.rvsnd);
792
793 L31100:
794 i__1 = findex_1.rvsnd + 85;
795 rspeak_(i__1);
796 /* !1-3... DISCOURAGE HIM. */
797 return ret_val;
798
799 L31400:
800 i = 89;
801 /* !ASSUME DISCOVERY. */
802 if ((objcts_1.oflag1[oindex_1.statu - 1] & VISIBT) != 0) {
803 i = 88;
804 }
805 rspeak_(i);
806 objcts_1.oflag1[oindex_1.statu - 1] |= VISIBT;
807 return ret_val;
808
809 L31500:
810 findex_1.rvsnd = 0;
811 /* !5... SAND COLLAPSES */
812 jigsup_(90);
813 /* !AND SO DOES HE. */
814 return ret_val;
815
816 /* R32-- TCAVE ROOM. DIG A HOLE IN GUANO. */
817
818 L32000:
819 if (prsvec_1.prsa != vindex_1.digw || prsvec_1.prso != oindex_1.shove) {
820 return ret_val;
821 }
822 i = 91;
823 /* !ASSUME NO GUANO. */
824 if (! qhere_(oindex_1.guano, play_1.here)) {
825 goto L32100;
826 }
827 /* !IS IT HERE? */
828 /* Computing MIN */
829 i__1 = 4, i__2 = findex_1.rvgua + 1;
830 findex_1.rvgua = min(i__1,i__2);
831 /* !YES, SET NEW STATE. */
832 i = findex_1.rvgua + 91;
833 /* !GET NASTY REMARK. */
834 L32100:
835 rspeak_(i);
836 /* !DESCRIBE. */
837 return ret_val;
838
839 /* R33-- FALLS ROOM */
840
841 L33000:
842 if (prsvec_1.prsa != vindex_1.lookw) {
843 return ret_val;
844 }
845 /* !LOOK? */
846 rspeak_(96);
847 /* !DESCRIBE. */
848 i = 97;
849 /* !ASSUME NO RAINBOW. */
850 if (findex_1.rainbf) {
851 i = 98;
852 }
853 /* !GOT ONE? */
854 rspeak_(i);
855 /* !DESCRIBE. */
856 return ret_val;
857 /* RAPPL1, PAGE 10 */
858
859 /* R34-- LEDGE FUNCTION. LEDGE CAN COLLAPSE. */
860
861 L34000:
862 if (prsvec_1.prsa != vindex_1.lookw) {
863 return ret_val;
864 }
865 /* !LOOK? */
866 rspeak_(100);
867 /* !DESCRIBE. */
868 i = 102;
869 /* !ASSUME SAFE ROOM OK. */
870 if ((rooms_1.rflag[rindex_1.msafe - 1] & RMUNG) != 0) {
871 i = 101;
872 }
873 rspeak_(i);
874 /* !DESCRIBE. */
875 return ret_val;
876
877 /* R35-- SAFE ROOM. STATE DEPENDS ON WHETHER SAFE BLOWN. */
878
879 L35000:
880 if (prsvec_1.prsa != vindex_1.lookw) {
881 return ret_val;
882 }
883 /* !LOOK? */
884 rspeak_(104);
885 /* !DESCRIBE. */
886 i = 105;
887 /* !ASSUME OK. */
888 if (findex_1.safef) {
889 i = 106;
890 }
891 /* !BLOWN? */
892 rspeak_(i);
893 /* !DESCRIBE. */
894 return ret_val;
895
896 /* R36-- MAGNET ROOM. DESCRIBE, CHECK FOR SPINDIZZY DOOM. */
897
898 L36000:
899 if (prsvec_1.prsa != vindex_1.lookw) {
900 goto L36500;
901 }
902 /* !LOOK? */
903 rspeak_(107);
904 /* !DESCRIBE. */
905 return ret_val;
906
907 L36500:
908 if (prsvec_1.prsa != vindex_1.walkiw || ! findex_1.caroff) {
909 return ret_val;
910 }
911 /* !WALKIN ON FLIPPED? */
912 if (findex_1.carozf) {
913 goto L36600;
914 }
915 /* !ZOOM? */
916 rspeak_(108);
917 /* !NO, SPIN HIS COMPASS. */
918 return ret_val;
919
920 L36600:
921 i = 58;
922 /* !SPIN HIS INSIDES. */
923 if (play_1.winner != aindex_1.player) {
924 i = 99;
925 }
926 /* !SPIN ROBOT. */
927 jigsup_(i);
928 /* !DEAD. */
929 return ret_val;
930
931 /* R37-- CAGE ROOM. IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM. */
932
933 L37000:
934 if (findex_1.cagesf) {
935 f = moveto_(rindex_1.cager, play_1.winner);
936 }
937 /* !IF SOLVED, MOVE. */
938 return ret_val;
939
940 } /* rappl1_ */
941