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