1 /* OAPPLI- OBJECT SPECIAL ACTION ROUTINES */
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
oappli_(ri,arg)10 logical oappli_(ri, arg)
11 integer ri;
12 integer arg;
13 {
14 /* Initialized data */
15
16 const integer mxsmp = 99;
17
18 /* System generated locals */
19 integer i__1;
20 logical ret_val;
21
22 /* Local variables */
23 logical f;
24 integer flobts, i;
25 integer j, av, io, ir, iz;
26 integer odi2 = 0, odo2 = 0;
27 integer nloc;
28
29 if (ri == 0) {
30 goto L10;
31 }
32 /* !ZERO IS FALSE APP. */
33 if (ri <= mxsmp) {
34 goto L100;
35 }
36 /* !SIMPLE OBJECT? */
37 if (prsvec_1.prso > 220) {
38 goto L5;
39 }
40 if (prsvec_1.prso != 0) {
41 odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
42 }
43 L5:
44 if (prsvec_1.prsi != 0) {
45 odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
46 }
47 av = advs_1.avehic[play_1.winner - 1];
48 flobts = FLAMBT + LITEBT + ONBT;
49 ret_val = TRUE_;
50
51 switch (ri - mxsmp) {
52 case 1: goto L2000;
53 case 2: goto L5000;
54 case 3: goto L10000;
55 case 4: goto L11000;
56 case 5: goto L12000;
57 case 6: goto L15000;
58 case 7: goto L18000;
59 case 8: goto L19000;
60 case 9: goto L20000;
61 case 10: goto L22000;
62 case 11: goto L25000;
63 case 12: goto L26000;
64 case 13: goto L32000;
65 case 14: goto L35000;
66 case 15: goto L39000;
67 case 16: goto L40000;
68 case 17: goto L45000;
69 case 18: goto L47000;
70 case 19: goto L48000;
71 case 20: goto L49000;
72 case 21: goto L50000;
73 case 22: goto L51000;
74 case 23: goto L52000;
75 case 24: goto L54000;
76 case 25: goto L55000;
77 case 26: goto L56000;
78 case 27: goto L57000;
79 case 28: goto L58000;
80 case 29: goto L59000;
81 case 30: goto L60000;
82 case 31: goto L61000;
83 case 32: goto L62000;
84 }
85 bug_(6, ri);
86
87 /* RETURN HERE TO DECLARE FALSE RESULT */
88
89 L10:
90 ret_val = FALSE_;
91 return ret_val;
92
93 /* SIMPLE OBJECTS, PROCESSED EXTERNALLY. */
94
95 L100:
96 if (ri < 32) {
97 ret_val = sobjs_(ri, arg);
98 }
99 else {
100 ret_val = nobjs_(ri, arg);
101 }
102 return ret_val;
103 /* OAPPLI, PAGE 3 */
104
105 /* O100-- MACHINE FUNCTION */
106
107 L2000:
108 if (play_1.here != rindex_1.mmach) {
109 goto L10;
110 }
111 /* !NOT HERE? F */
112 ret_val = opncls_(oindex_1.machi, 123, 124);
113 /* !HANDLE OPN/CLS. */
114 return ret_val;
115
116 /* O101-- WATER FUNCTION */
117
118 L5000:
119 if (prsvec_1.prsa != vindex_1.fillw) {
120 goto L5050;
121 }
122 /* !FILL X WITH Y IS */
123 prsvec_1.prsa = vindex_1.putw;
124 /* !MADE INTO */
125 i = prsvec_1.prsi;
126 prsvec_1.prsi = prsvec_1.prso;
127 prsvec_1.prso = i;
128 /* !PUT Y IN X. */
129 i = odi2;
130 odi2 = odo2;
131 odo2 = i;
132 L5050:
133 if (prsvec_1.prso == oindex_1.water || prsvec_1.prso == oindex_1.gwate) {
134 goto L5100;
135 }
136 rspeak_(561);
137 /* !WATER IS IND OBJ, */
138 return ret_val;
139 /* !PUNT. */
140
141 L5100:
142 if (prsvec_1.prsa != vindex_1.takew) {
143 goto L5400;
144 }
145 /* !TAKE WATER? */
146 if (objcts_1.oadv[oindex_1.bottl - 1] == play_1.winner && objcts_1.ocan[
147 prsvec_1.prso - 1] != oindex_1.bottl) {
148 goto L5500;
149 }
150 if (objcts_1.ocan[prsvec_1.prso - 1] == 0) {
151 goto L5200;
152 }
153 /* !INSIDE ANYTHING? */
154 if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] &
155 OPENBT) != 0) {
156 goto L5200;
157 }
158 /* !YES, OPEN? */
159 rspsub_(525, objcts_1.odesc2[objcts_1.ocan[prsvec_1.prso - 1] - 1]);
160 /* !INSIDE, CLOSED, PUNT. */
161 return ret_val;
162
163 L5200:
164 rspeak_(615);
165 /* !NOT INSIDE OR OPEN, */
166 return ret_val;
167 /* !SLIPS THRU FINGERS. */
168
169 L5400:
170 if (prsvec_1.prsa != vindex_1.putw) {
171 goto L5700;
172 }
173 /* !PUT WATER IN X? */
174 if (av != 0 && prsvec_1.prsi == av) {
175 goto L5800;
176 }
177 /* !IN VEH? */
178 if (prsvec_1.prsi == oindex_1.bottl) {
179 goto L5500;
180 }
181 /* !IN BOTTLE? */
182 rspsub_(297, odi2);
183 /* !WONT GO ELSEWHERE. */
184 newsta_(prsvec_1.prso, 0, 0, 0, 0);
185 /* !VANISH WATER. */
186 return ret_val;
187
188 L5500:
189 if ((objcts_1.oflag2[oindex_1.bottl - 1] & OPENBT) != 0) {
190 goto L5550;
191 }
192 /* !BOTTLE OPEN? */
193 rspeak_(612);
194 /* !NO, LOSE. */
195 return ret_val;
196
197 L5550:
198 if (qempty_(oindex_1.bottl)) {
199 goto L5600;
200 }
201 /* !OPEN, EMPTY? */
202 rspeak_(613);
203 /* !NO, ALREADY FULL. */
204 return ret_val;
205
206 L5600:
207 newsta_(oindex_1.water, 614, 0, oindex_1.bottl, 0);
208 /* !TAKE WATER TO BOTTLE. */
209 return ret_val;
210
211 L5700:
212 if (prsvec_1.prsa != vindex_1.dropw && prsvec_1.prsa != vindex_1.pourw &&
213 prsvec_1.prsa != vindex_1.givew) {
214 goto L5900;
215 }
216 if (av != 0) {
217 goto L5800;
218 }
219 /* !INTO VEHICLE? */
220 newsta_(prsvec_1.prso, 133, 0, 0, 0);
221 /* !NO, VANISHES. */
222 return ret_val;
223
224 L5800:
225 newsta_(oindex_1.water, 0, 0, av, 0);
226 /* !WATER INTO VEHICLE. */
227 rspsub_(296, objcts_1.odesc2[av - 1]);
228 /* !DESCRIBE. */
229 return ret_val;
230
231 L5900:
232 if (prsvec_1.prsa != vindex_1.throww) {
233 goto L10;
234 }
235 /* !LAST CHANCE, THROW? */
236 newsta_(prsvec_1.prso, 132, 0, 0, 0);
237 /* !VANISHES. */
238 return ret_val;
239 /* OAPPLI, PAGE 4 */
240
241 /* O102-- LEAF PILE */
242
243 L10000:
244 if (prsvec_1.prsa != vindex_1.burnw) {
245 goto L10500;
246 }
247 /* !BURN? */
248 if (objcts_1.oroom[prsvec_1.prso - 1] == 0) {
249 goto L10100;
250 }
251 /* !WAS HE CARRYING? */
252 newsta_(prsvec_1.prso, 158, 0, 0, 0);
253 /* !NO, BURN IT. */
254 return ret_val;
255
256 L10100:
257 newsta_(prsvec_1.prso, 0, play_1.here, 0, 0);
258 /* !DROP LEAVES. */
259 jigsup_(159);
260 /* !BURN HIM. */
261 return ret_val;
262
263 L10500:
264 if (prsvec_1.prsa != vindex_1.movew) {
265 goto L10600;
266 }
267 /* !MOVE? */
268 rspeak_(2);
269 /* !DONE. */
270 return ret_val;
271
272 L10600:
273 if (prsvec_1.prsa != vindex_1.lookuw || findex_1.rvclr != 0) {
274 goto L10;
275 }
276 rspeak_(344);
277 /* !LOOK UNDER? */
278 return ret_val;
279
280 /* O103-- TROLL, DONE EXTERNALLY. */
281
282 L11000:
283 ret_val = trollp_(arg);
284 /* !TROLL PROCESSOR. */
285 return ret_val;
286
287 /* O104-- RUSTY KNIFE. */
288
289 L12000:
290 if (prsvec_1.prsa != vindex_1.takew) {
291 goto L12100;
292 }
293 /* !TAKE? */
294 if (objcts_1.oadv[oindex_1.sword - 1] == play_1.winner) {
295 rspeak_(160);
296 }
297 /* !PULSE SWORD. */
298 goto L10;
299
300 L12100:
301 if ((prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw
302 || prsvec_1.prsi != oindex_1.rknif) && (prsvec_1.prsa !=
303 vindex_1.swingw && prsvec_1.prsa != vindex_1.throww ||
304 prsvec_1.prso != oindex_1.rknif)) {
305 goto L10;
306 }
307 newsta_(oindex_1.rknif, 0, 0, 0, 0);
308 /* !KILL KNIFE. */
309 jigsup_(161);
310 /* !KILL HIM. */
311 return ret_val;
312 /* OAPPLI, PAGE 5 */
313
314 /* O105-- GLACIER */
315
316 L15000:
317 if (prsvec_1.prsa != vindex_1.throww) {
318 goto L15500;
319 }
320 /* !THROW? */
321 if (prsvec_1.prso != oindex_1.torch) {
322 goto L15400;
323 }
324 /* !TORCH? */
325 newsta_(oindex_1.ice, 169, 0, 0, 0);
326 /* !MELT ICE. */
327 objcts_1.odesc1[oindex_1.torch - 1] = 174;
328 /* !MUNG TORCH. */
329 objcts_1.odesc2[oindex_1.torch - 1] = 173;
330 objcts_1.oflag1[oindex_1.torch - 1] &= ~ flobts;
331 newsta_(oindex_1.torch, 0, rindex_1.strea, 0, 0);
332 /* !MOVE TORCH. */
333 findex_1.glacrf = TRUE_;
334 /* !GLACIER GONE. */
335 if (! lit_(play_1.here)) {
336 rspeak_(170);
337 }
338 /* !IN DARK? */
339 return ret_val;
340
341 L15400:
342 rspeak_(171);
343 /* !JOKE IF NOT TORCH. */
344 return ret_val;
345
346 L15500:
347 if (prsvec_1.prsa != vindex_1.meltw || prsvec_1.prso != oindex_1.ice) {
348 goto L10;
349 }
350 if ((objcts_1.oflag1[prsvec_1.prsi - 1] & flobts) == flobts) {
351 goto L15600;
352 }
353 rspsub_(298, odi2);
354 /* !CANT MELT WITH THAT. */
355 return ret_val;
356
357 L15600:
358 findex_1.glacmf = TRUE_;
359 /* !PARTIAL MELT. */
360 if (prsvec_1.prsi != oindex_1.torch) {
361 goto L15700;
362 }
363 /* !MELT WITH TORCH? */
364 objcts_1.odesc1[oindex_1.torch - 1] = 174;
365 /* !MUNG TORCH. */
366 objcts_1.odesc2[oindex_1.torch - 1] = 173;
367 objcts_1.oflag1[oindex_1.torch - 1] &= ~ flobts;
368 L15700:
369 jigsup_(172);
370 /* !DROWN. */
371 return ret_val;
372
373 /* O106-- BLACK BOOK */
374
375 L18000:
376 if (prsvec_1.prsa != vindex_1.openw) {
377 goto L18100;
378 }
379 /* !OPEN? */
380 rspeak_(180);
381 /* !JOKE. */
382 return ret_val;
383
384 L18100:
385 if (prsvec_1.prsa != vindex_1.closew) {
386 goto L18200;
387 }
388 /* !CLOSE? */
389 rspeak_(181);
390 return ret_val;
391
392 L18200:
393 if (prsvec_1.prsa != vindex_1.burnw) {
394 goto L10;
395 }
396 /* !BURN? */
397 newsta_(prsvec_1.prso, 0, 0, 0, 0);
398 /* !FATAL JOKE. */
399 jigsup_(182);
400 return ret_val;
401 /* OAPPLI, PAGE 6 */
402
403 /* O107-- CANDLES, PROCESSED EXTERNALLY */
404
405 L19000:
406 ret_val = lightp_(oindex_1.candl);
407 return ret_val;
408
409 /* O108-- MATCHES, PROCESSED EXTERNALLY */
410
411 L20000:
412 ret_val = lightp_(oindex_1.match);
413 return ret_val;
414
415 /* O109-- CYCLOPS, PROCESSED EXTERNALLY. */
416
417 L22000:
418 ret_val = cyclop_(arg);
419 /* !CYCLOPS */
420 return ret_val;
421
422 /* O110-- THIEF, PROCESSED EXTERNALLY */
423
424 L25000:
425 ret_val = thiefp_(arg);
426 return ret_val;
427
428 /* O111-- WINDOW */
429
430 L26000:
431 ret_val = opncls_(oindex_1.windo, 208, 209);
432 /* !OPEN/CLS WINDOW. */
433 return ret_val;
434
435 /* O112-- PILE OF BODIES */
436
437 L32000:
438 if (prsvec_1.prsa != vindex_1.takew) {
439 goto L32500;
440 }
441 /* !TAKE? */
442 rspeak_(228);
443 /* !CANT. */
444 return ret_val;
445
446 L32500:
447 if (prsvec_1.prsa != vindex_1.burnw && prsvec_1.prsa != vindex_1.mungw) {
448 goto L10;
449 }
450 if (findex_1.onpolf) {
451 return ret_val;
452 }
453 /* !BURN OR MUNG? */
454 findex_1.onpolf = TRUE_;
455 /* !SET HEAD ON POLE. */
456 newsta_(oindex_1.hpole, 0, rindex_1.lld2, 0, 0);
457 jigsup_(229);
458 /* !BEHEADED. */
459 return ret_val;
460
461 /* O113-- VAMPIRE BAT */
462
463 L35000:
464 rspeak_(50);
465 /* !TIME TO FLY, JACK. */
466 f = moveto_(bats_1.batdrp[rnd_(9)], play_1.winner);
467 /* !SELECT RANDOM DEST. */
468 f = rmdesc_(0);
469 return ret_val;
470 /* OAPPLI, PAGE 7 */
471
472 /* O114-- STICK */
473
474 L39000:
475 if (prsvec_1.prsa != vindex_1.wavew) {
476 goto L10;
477 }
478 /* !WAVE? */
479 if (play_1.here == rindex_1.mrain) {
480 goto L39500;
481 }
482 /* !ON RAINBOW? */
483 if (play_1.here == rindex_1.pog || play_1.here == rindex_1.falls) {
484 goto L39200;
485 }
486 rspeak_(244);
487 /* !NOTHING HAPPENS. */
488 return ret_val;
489
490 L39200:
491 objcts_1.oflag1[oindex_1.pot - 1] |= VISIBT;
492 findex_1.rainbf = ! findex_1.rainbf;
493 /* !COMPLEMENT RAINBOW. */
494 i = 245;
495 /* !ASSUME OFF. */
496 if (findex_1.rainbf) {
497 i = 246;
498 }
499 /* !IF ON, SOLID. */
500 rspeak_(i);
501 /* !DESCRIBE. */
502 return ret_val;
503
504 L39500:
505 findex_1.rainbf = FALSE_;
506 /* !ON RAINBOW, */
507 jigsup_(247);
508 /* !TAKE A FALL. */
509 return ret_val;
510
511 /* O115-- BALLOON, HANDLED EXTERNALLY */
512
513 L40000:
514 ret_val = ballop_(arg);
515 return ret_val;
516
517 /* O116-- HEADS */
518
519 L45000:
520 if (prsvec_1.prsa != vindex_1.hellow) {
521 goto L45100;
522 }
523 /* !HELLO HEADS? */
524 rspeak_(633);
525 /* !TRULY BIZARRE. */
526 return ret_val;
527
528 L45100:
529 if (prsvec_1.prsa == vindex_1.readw) {
530 goto L10;
531 }
532 /* !READ IS OK. */
533 newsta_(oindex_1.lcase, 260, rindex_1.lroom, 0, 0);
534 /* !MAKE LARGE CASE. */
535 i = robadv_(play_1.winner, 0, oindex_1.lcase, 0) + robrm_(
536 play_1.here, 100, 0, oindex_1.lcase, 0);
537 jigsup_(261);
538 /* !KILL HIM. */
539 return ret_val;
540 /* OAPPLI, PAGE 8 */
541
542 /* O117-- SPHERE */
543
544 L47000:
545 if (findex_1.cagesf || prsvec_1.prsa != vindex_1.takew) {
546 goto L10;
547 }
548 /* !TAKE? */
549 if (play_1.winner != aindex_1.player) {
550 goto L47500;
551 }
552 /* !ROBOT TAKE? */
553 rspeak_(263);
554 /* !NO, DROP CAGE. */
555 if (objcts_1.oroom[oindex_1.robot - 1] != play_1.here) {
556 goto L47200;
557 }
558 /* !ROBOT HERE? */
559 f = moveto_(rindex_1.caged, play_1.winner);
560 /* !YES, MOVE INTO CAGE. */
561 newsta_(oindex_1.robot, 0, rindex_1.caged, 0, 0);
562 /* !MOVE ROBOT. */
563 advs_1.aroom[aindex_1.arobot - 1] = rindex_1.caged;
564 objcts_1.oflag1[oindex_1.robot - 1] |= NDSCBT;
565 cevent_1.ctick[cindex_1.cevsph - 1] = 10;
566 /* !GET OUT IN 10 OR ELSE. */
567 return ret_val;
568
569 L47200:
570 newsta_(oindex_1.spher, 0, 0, 0, 0);
571 /* !YOURE DEAD. */
572 rooms_1.rflag[rindex_1.cager - 1] |= RMUNG;
573 rrand[rindex_1.cager - 1] = 147;
574 jigsup_(148);
575 /* !MUNG PLAYER. */
576 return ret_val;
577
578 L47500:
579 newsta_(oindex_1.spher, 0, 0, 0, 0);
580 /* !ROBOT TRIED, */
581 newsta_(oindex_1.robot, 264, 0, 0, 0);
582 /* !KILL HIM. */
583 newsta_(oindex_1.cage, 0, play_1.here, 0, 0);
584 /* !INSERT MANGLED CAGE. */
585 return ret_val;
586
587 /* O118-- GEOMETRICAL BUTTONS */
588
589 L48000:
590 if (prsvec_1.prsa != vindex_1.pushw) {
591 goto L10;
592 }
593 /* !PUSH? */
594 i = prsvec_1.prso - oindex_1.sqbut + 1;
595 /* !GET BUTTON INDEX. */
596 if (i <= 0 || i >= 4) {
597 goto L10;
598 }
599 /* !A BUTTON? */
600 if (play_1.winner != aindex_1.player) {
601 switch (i) {
602 case 1: goto L48100;
603 case 2: goto L48200;
604 case 3: goto L48300;
605 }
606 }
607 jigsup_(265);
608 /* !YOU PUSHED, YOU DIE. */
609 return ret_val;
610
611 L48100:
612 i = 267;
613 if (findex_1.carozf) {
614 i = 266;
615 }
616 /* !SPEED UP? */
617 findex_1.carozf = TRUE_;
618 rspeak_(i);
619 return ret_val;
620
621 L48200:
622 i = 266;
623 /* !ASSUME NO CHANGE. */
624 if (findex_1.carozf) {
625 i = 268;
626 }
627 findex_1.carozf = FALSE_;
628 rspeak_(i);
629 return ret_val;
630
631 L48300:
632 findex_1.caroff = ! findex_1.caroff;
633 /* !FLIP CAROUSEL. */
634 if (! qhere_(oindex_1.irbox, rindex_1.carou)) {
635 return ret_val;
636 }
637 /* !IRON BOX IN CAROUSEL? */
638 rspeak_(269);
639 /* !YES, THUMP. */
640 objcts_1.oflag1[oindex_1.irbox - 1] ^= VISIBT;
641 if (findex_1.caroff) {
642 rooms_1.rflag[rindex_1.carou - 1] &= ~ RSEEN;
643 }
644 return ret_val;
645
646 /* O119-- FLASK FUNCTION */
647
648 L49000:
649 if (prsvec_1.prsa == vindex_1.openw) {
650 goto L49100;
651 }
652 /* !OPEN? */
653 if (prsvec_1.prsa != vindex_1.mungw && prsvec_1.prsa != vindex_1.throww) {
654
655 goto L10;
656 }
657 newsta_(oindex_1.flask, 270, 0, 0, 0);
658 /* !KILL FLASK. */
659 L49100:
660 rooms_1.rflag[play_1.here - 1] |= RMUNG;
661 rrand[play_1.here - 1] = 271;
662 jigsup_(272);
663 /* !POISONED. */
664 return ret_val;
665
666 /* O120-- BUCKET FUNCTION */
667
668 L50000:
669 if (arg != 2) {
670 goto L10;
671 }
672 /* !READOUT? */
673 if (objcts_1.ocan[oindex_1.water - 1] != oindex_1.bucke ||
674 findex_1.bucktf) {
675 goto L50500;
676 }
677 findex_1.bucktf = TRUE_;
678 /* !BUCKET AT TOP. */
679 cevent_1.ctick[cindex_1.cevbuc - 1] = 100;
680 /* !START COUNTDOWN. */
681 newsta_(oindex_1.bucke, 290, rindex_1.twell, 0, 0);
682 /* !REPOSITION BUCKET. */
683 goto L50900;
684 /* !FINISH UP. */
685
686 L50500:
687 if (objcts_1.ocan[oindex_1.water - 1] == oindex_1.bucke || !
688 findex_1.bucktf) {
689 goto L10;
690 }
691 findex_1.bucktf = FALSE_;
692 newsta_(oindex_1.bucke, 291, rindex_1.bwell, 0, 0);
693 /* !BUCKET AT BOTTOM. */
694 L50900:
695 if (av != oindex_1.bucke) {
696 return ret_val;
697 }
698 /* !IN BUCKET? */
699 f = moveto_(objcts_1.oroom[oindex_1.bucke - 1], play_1.winner);
700 /* !MOVE ADVENTURER. */
701 f = rmdesc_(0);
702 /* !DESCRIBE ROOM. */
703 return ret_val;
704 /* OAPPLI, PAGE 9 */
705
706 /* O121-- EATME CAKE */
707
708 L51000:
709 if (prsvec_1.prsa != vindex_1.eatw || prsvec_1.prso != oindex_1.ecake ||
710 play_1.here != rindex_1.alice) {
711 goto L10;
712 }
713 newsta_(oindex_1.ecake, 273, 0, 0, 0);
714 /* !VANISH CAKE. */
715 objcts_1.oflag1[oindex_1.robot - 1] &= ~ VISIBT;
716 ret_val = moveto_(rindex_1.alism, play_1.winner);
717 /* !MOVE TO ALICE SMALL. */
718 iz = 64;
719 ir = rindex_1.alism;
720 io = rindex_1.alice;
721 goto L52405;
722
723 /* O122-- ICINGS */
724
725 L52000:
726 if (prsvec_1.prsa != vindex_1.readw) {
727 goto L52200;
728 }
729 /* !READ? */
730 i = 274;
731 /* !CANT READ. */
732 if (prsvec_1.prsi != 0) {
733 i = 275;
734 }
735 /* !THROUGH SOMETHING? */
736 if (prsvec_1.prsi == oindex_1.bottl) {
737 i = 276;
738 }
739 /* !THROUGH BOTTLE? */
740 if (prsvec_1.prsi == oindex_1.flask) {
741 i = prsvec_1.prso - oindex_1.orice + 277;
742 }
743 /* !THROUGH FLASK? */
744 rspeak_(i);
745 /* !READ FLASK. */
746 return ret_val;
747
748 L52200:
749 if (prsvec_1.prsa != vindex_1.throww || prsvec_1.prso != oindex_1.rdice ||
750 prsvec_1.prsi != oindex_1.pool) {
751 goto L52300;
752 }
753 newsta_(oindex_1.pool, 280, 0, 0, 0);
754 /* !VANISH POOL. */
755 objcts_1.oflag1[oindex_1.saffr - 1] |= VISIBT;
756 return ret_val;
757
758 L52300:
759 if (play_1.here != rindex_1.alice && play_1.here != rindex_1.alism &&
760 play_1.here != rindex_1.alitr) {
761 goto L10;
762 }
763 if (prsvec_1.prsa != vindex_1.eatw && prsvec_1.prsa != vindex_1.throww ||
764 prsvec_1.prso != oindex_1.orice) {
765 goto L52400;
766 }
767 newsta_(oindex_1.orice, 0, 0, 0, 0);
768 /* !VANISH ORANGE ICE. */
769 rooms_1.rflag[play_1.here - 1] |= RMUNG;
770 rrand[play_1.here - 1] = 281;
771 jigsup_(282);
772 /* !VANISH ADVENTURER. */
773 return ret_val;
774
775 L52400:
776 if (prsvec_1.prsa != vindex_1.eatw || prsvec_1.prso != oindex_1.blice) {
777 goto L10;
778 }
779 newsta_(oindex_1.blice, 283, 0, 0, 0);
780 /* !VANISH BLUE ICE. */
781 if (play_1.here != rindex_1.alism) {
782 goto L52500;
783 }
784 /* !IN REDUCED ROOM? */
785 objcts_1.oflag1[oindex_1.robot - 1] |= VISIBT;
786 io = play_1.here;
787 ret_val = moveto_(rindex_1.alice, play_1.winner);
788 iz = 0;
789 ir = rindex_1.alice;
790
791 /* Do a size change, common loop used also by code at 51000 */
792
793 L52405:
794 i__1 = objcts_1.olnt;
795 for (i = 1; i <= i__1; ++i) {
796 /* !ENLARGE WORLD. */
797 if (objcts_1.oroom[i - 1] != io || objcts_1.osize[i - 1] == 10000) {
798 goto L52450;
799 }
800 objcts_1.oroom[i - 1] = ir;
801 objcts_1.osize[i - 1] *= iz;
802 L52450:
803 ;
804 }
805 return ret_val;
806
807 L52500:
808 jigsup_(284);
809 /* !ENLARGED IN WRONG ROOM. */
810 return ret_val;
811
812 /* O123-- BRICK */
813
814 L54000:
815 if (prsvec_1.prsa != vindex_1.burnw) {
816 goto L10;
817 }
818 /* !BURN? */
819 jigsup_(150);
820 /* !BOOM */
821 /* ! */
822 return ret_val;
823
824 /* O124-- MYSELF */
825
826 L55000:
827 if (prsvec_1.prsa != vindex_1.givew) {
828 goto L55100;
829 }
830 /* !GIVE? */
831 newsta_(prsvec_1.prso, 2, 0, 0, aindex_1.player);
832 /* !DONE. */
833 return ret_val;
834
835 L55100:
836 if (prsvec_1.prsa != vindex_1.takew) {
837 goto L55200;
838 }
839 /* !TAKE? */
840 rspeak_(286);
841 /* !JOKE. */
842 return ret_val;
843
844 L55200:
845 if (prsvec_1.prsa != vindex_1.killw && prsvec_1.prsa != vindex_1.mungw) {
846 goto L10;
847 }
848 jigsup_(287);
849 /* !KILL, NO JOKE. */
850 return ret_val;
851 /* OAPPLI, PAGE 10 */
852
853 /* O125-- PANELS INSIDE MIRROR */
854
855 L56000:
856 if (prsvec_1.prsa != vindex_1.pushw) {
857 goto L10;
858 }
859 /* !PUSH? */
860 if (findex_1.poleuf != 0) {
861 goto L56100;
862 }
863 /* !SHORT POLE UP? */
864 i = 731;
865 /* !NO, WONT BUDGE. */
866 if (findex_1.mdir % 180 == 0) {
867 i = 732;
868 }
869 /* !DIFF MSG IF N-S. */
870 rspeak_(i);
871 /* !TELL WONT MOVE. */
872 return ret_val;
873
874 L56100:
875 if (findex_1.mloc != rindex_1.mrg) {
876 goto L56200;
877 }
878 /* !IN GDN ROOM? */
879 rspeak_(733);
880 /* !YOU LOSE. */
881 jigsup_(685);
882 return ret_val;
883
884 L56200:
885 i = 831;
886 /* !ROTATE L OR R. */
887 if (prsvec_1.prso == oindex_1.rdwal || prsvec_1.prso == oindex_1.ylwal) {
888 i = 830;
889 }
890 rspeak_(i);
891 /* !TELL DIRECTION. */
892 findex_1.mdir = (findex_1.mdir + 45 + (i - 830) * 270) % 360;
893 /* !CALCULATE NEW DIR. */
894 i__1 = findex_1.mdir / 45 + 695;
895 rspsub_(734, i__1);
896 /* !TELL NEW DIR. */
897 if (findex_1.wdopnf) {
898 rspeak_(730);
899 }
900 /* !IF PANEL OPEN, CLOSE. */
901 findex_1.wdopnf = FALSE_;
902 return ret_val;
903 /* !DONE. */
904
905 /* O126-- ENDS INSIDE MIRROR */
906
907 L57000:
908 if (prsvec_1.prsa != vindex_1.pushw) {
909 goto L10;
910 }
911 /* !PUSH? */
912 if (findex_1.mdir % 180 == 0) {
913 goto L57100;
914 }
915 /* !MIRROR N-S? */
916 rspeak_(735);
917 /* !NO, WONT BUDGE. */
918 return ret_val;
919
920 L57100:
921 if (prsvec_1.prso != oindex_1.pindr) {
922 goto L57300;
923 }
924 /* !PUSH PINE WALL? */
925 if (findex_1.mloc == rindex_1.mrc && findex_1.mdir == 180 ||
926 findex_1.mloc == rindex_1.mrd && findex_1.mdir == 0 ||
927 findex_1.mloc == rindex_1.mrg) {
928 goto L57200;
929 }
930 rspeak_(736);
931 /* !NO, OPENS. */
932 findex_1.wdopnf = TRUE_;
933 /* !INDICATE OPEN. */
934 cevent_1.cflag[cindex_1.cevpin - 1] = TRUE_;
935 /* !TIME OPENING. */
936 cevent_1.ctick[cindex_1.cevpin - 1] = 5;
937 return ret_val;
938
939 L57200:
940 rspeak_(737);
941 /* !GDN SEES YOU, DIE. */
942 jigsup_(685);
943 return ret_val;
944
945 L57300:
946 nloc = findex_1.mloc - 1;
947 /* !NEW LOC IF SOUTH. */
948 if (findex_1.mdir == 0) {
949 nloc = findex_1.mloc + 1;
950 }
951 /* !NEW LOC IF NORTH. */
952 if (nloc >= rindex_1.mra && nloc <= rindex_1.mrd) {
953 goto L57400;
954 }
955 rspeak_(738);
956 /* !HAVE REACHED END. */
957 return ret_val;
958
959 L57400:
960 i = 699;
961 /* !ASSUME SOUTH. */
962 if (findex_1.mdir == 0) {
963 i = 695;
964 }
965 /* !NORTH. */
966 j = 739;
967 /* !ASSUME SMOOTH. */
968 if (findex_1.poleuf != 0) {
969 j = 740;
970 }
971 /* !POLE UP, WOBBLES. */
972 rspsub_(j, i);
973 /* !DESCRIBE. */
974 findex_1.mloc = nloc;
975 if (findex_1.mloc != rindex_1.mrg) {
976 return ret_val;
977 }
978 /* !NOW IN GDN ROOM? */
979
980 if (findex_1.poleuf != 0) {
981 goto L57500;
982 }
983 /* !POLE UP, GDN SEES. */
984 if (findex_1.mropnf || findex_1.wdopnf) {
985 goto L57600;
986 }
987 /* !DOOR OPEN, GDN SEES. */
988 if (findex_1.mr1f && findex_1.mr2f) {
989 return ret_val;
990 }
991 /* !MIRRORS INTACT, OK. */
992 rspeak_(742);
993 /* !MIRRORS BROKEN, DIE. */
994 jigsup_(743);
995 return ret_val;
996
997 L57500:
998 rspeak_(741);
999 /* !POLE UP, DIE. */
1000 jigsup_(743);
1001 return ret_val;
1002
1003 L57600:
1004 rspeak_(744);
1005 /* !DOOR OPEN, DIE. */
1006 jigsup_(743);
1007 return ret_val;
1008 /* OAPPLI, PAGE 11 */
1009
1010 /* O127-- GLOBAL GUARDIANS */
1011
1012 L58000:
1013 if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw &&
1014 prsvec_1.prsa != vindex_1.mungw) {
1015 goto L58100;
1016 }
1017 jigsup_(745);
1018 /* !LOSE. */
1019 return ret_val;
1020
1021 L58100:
1022 if (prsvec_1.prsa != vindex_1.hellow) {
1023 goto L10;
1024 }
1025 /* !HELLO? */
1026 rspeak_(746);
1027 /* !NO REPLY. */
1028 return ret_val;
1029
1030 /* O128-- GLOBAL MASTER */
1031
1032 L59000:
1033 if (prsvec_1.prsa != vindex_1.attacw && prsvec_1.prsa != vindex_1.killw &&
1034 prsvec_1.prsa != vindex_1.mungw) {
1035 goto L59100;
1036 }
1037 jigsup_(747);
1038 /* !BAD IDEA. */
1039 return ret_val;
1040
1041 L59100:
1042 if (prsvec_1.prsa != vindex_1.takew) {
1043 goto L10;
1044 }
1045 /* !TAKE? */
1046 rspeak_(748);
1047 /* !JOKE. */
1048 return ret_val;
1049
1050 /* O129-- NUMERAL FIVE (FOR JOKE) */
1051
1052 L60000:
1053 if (prsvec_1.prsa != vindex_1.takew) {
1054 goto L10;
1055 }
1056 /* !TAKE FIVE? */
1057 rspeak_(419);
1058 /* !TIME PASSES. */
1059 for (i = 1; i <= 3; ++i) {
1060 /* !WAIT A WHILE. */
1061 if (clockd_()) {
1062 return ret_val;
1063 }
1064 /* L60100: */
1065 }
1066 return ret_val;
1067
1068 /* O130-- CRYPT FUNCTION */
1069
1070 L61000:
1071 if (! findex_1.endgmf) {
1072 goto L45000;
1073 }
1074 /* !IF NOT EG, DIE. */
1075 if (prsvec_1.prsa != vindex_1.openw) {
1076 goto L61100;
1077 }
1078 /* !OPEN? */
1079 i = 793;
1080 if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) {
1081 i = 794;
1082 }
1083 rspeak_(i);
1084 objcts_1.oflag2[oindex_1.tomb - 1] |= OPENBT;
1085 return ret_val;
1086
1087 L61100:
1088 if (prsvec_1.prsa != vindex_1.closew) {
1089 goto L45000;
1090 }
1091 /* !CLOSE? */
1092 i = 795;
1093 if ((objcts_1.oflag2[oindex_1.tomb - 1] & OPENBT) != 0) {
1094 i = 796;
1095 }
1096 rspeak_(i);
1097 objcts_1.oflag2[oindex_1.tomb - 1] &= ~ OPENBT;
1098 if (play_1.here == rindex_1.crypt) {
1099 cevent_1.ctick[cindex_1.cevste - 1] = 3;
1100 }
1101 /* !IF IN CRYPT, START EG. */
1102 return ret_val;
1103 /* OAPPLI, PAGE 12 */
1104
1105 /* O131-- GLOBAL LADDER */
1106
1107 L62000:
1108 if (puzzle_1.cpvec[findex_1.cphere] == -2 || puzzle_1.cpvec[
1109 findex_1.cphere - 2] == -3) {
1110 goto L62100;
1111 }
1112 rspeak_(865);
1113 /* !NO, LOSE. */
1114 return ret_val;
1115
1116 L62100:
1117 if (prsvec_1.prsa == vindex_1.clmbw || prsvec_1.prsa == vindex_1.clmbuw) {
1118
1119 goto L62200;
1120 }
1121 rspeak_(866);
1122 /* !CLIMB IT? */
1123 return ret_val;
1124
1125 L62200:
1126 if (findex_1.cphere == 10 && puzzle_1.cpvec[findex_1.cphere] == -2) {
1127 goto L62300;
1128 }
1129 rspeak_(867);
1130 /* !NO, HIT YOUR HEAD. */
1131 return ret_val;
1132
1133 L62300:
1134 f = moveto_(rindex_1.cpant, play_1.winner);
1135 /* !TO ANTEROOM. */
1136 f = rmdesc_(3);
1137 /* !DESCRIBE. */
1138 return ret_val;
1139
1140 } /* oappli_ */
1141