1 /* VAPPLI- MAIN VERB PROCESSING ROUTINE */
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
vappli_(ri)10 logical vappli_(ri)
11 integer ri;
12 {
13 /* Initialized data */
14
15 const integer mxnop = 39;
16 const integer mxsmp = 99;
17
18 /* System generated locals */
19 integer i__1;
20 logical ret_val;
21
22 /* Local variables */
23 integer melee;
24 logical f;
25 integer i, j, av;
26 integer rmk;
27 integer odi2 = 0, odo2 = 0;
28
29 ret_val = TRUE_;
30 /* !ASSUME WINS. */
31
32 if (prsvec_1.prso > 220) {
33 goto L5;
34 }
35
36 if (prsvec_1.prso != 0) {
37 odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
38 }
39 /* !SET UP DESCRIPTORS. */
40 L5:
41 if (prsvec_1.prsi != 0) {
42 odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
43 }
44 av = advs_1.avehic[play_1.winner - 1];
45 rmk = rnd_(6) + 372;
46 /* !REMARK FOR HACK-HACKS. */
47
48 if (ri == 0) {
49 goto L10;
50 }
51 /* !ZERO IS FALSE. */
52 if (ri <= mxnop) {
53 return ret_val;
54 }
55 /* !NOP? */
56 if (ri <= mxsmp) {
57 goto L100;
58 }
59 /* !SIMPLE VERB? */
60 switch (ri - mxsmp) {
61 case 1: goto L18000;
62 case 2: goto L20000;
63 case 3: goto L22000;
64 case 4: goto L23000;
65 case 5: goto L24000;
66 case 6: goto L25000;
67 case 7: goto L26000;
68 case 8: goto L27000;
69 case 9: goto L28000;
70 case 10: goto L29000;
71 case 11: goto L30000;
72 case 12: goto L31000;
73 case 13: goto L32000;
74 case 14: goto L33000;
75 case 15: goto L34000;
76 case 16: goto L35000;
77 case 17: goto L36000;
78 case 18: goto L38000;
79 case 19: goto L39000;
80 case 20: goto L40000;
81 case 21: goto L41000;
82 case 22: goto L42000;
83 case 23: goto L43000;
84 case 24: goto L44000;
85 case 25: goto L45000;
86 case 26: goto L46000;
87 case 27: goto L47000;
88 case 28: goto L48000;
89 case 29: goto L49000;
90 case 30: goto L50000;
91 case 31: goto L51000;
92 case 32: goto L52000;
93 case 33: goto L53000;
94 case 34: goto L55000;
95 case 35: goto L56000;
96 case 36: goto L58000;
97 case 37: goto L59000;
98 case 38: goto L60000;
99 case 39: goto L63000;
100 case 40: goto L64000;
101 case 41: goto L65000;
102 case 42: goto L66000;
103 case 43: goto L68000;
104 case 44: goto L69000;
105 case 45: goto L70000;
106 case 46: goto L71000;
107 case 47: goto L72000;
108 case 48: goto L73000;
109 case 49: goto L74000;
110 case 50: goto L77000;
111 case 51: goto L78000;
112 case 52: goto L80000;
113 case 53: goto L81000;
114 case 54: goto L82000;
115 case 55: goto L83000;
116 case 56: goto L84000;
117 case 57: goto L85000;
118 case 58: goto L86000;
119 case 59: goto L87000;
120 case 60: goto L88000;
121 }
122 bug_(7, ri);
123
124 /* ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. */
125
126 L10:
127 ret_val = FALSE_;
128 /* !LOSE. */
129 return ret_val;
130
131 /* SIMPLE VERBS ARE HANDLED EXTERNALLY. */
132
133 L100:
134 ret_val = sverbs_(ri);
135 return ret_val;
136 /* VAPPLI, PAGE 3 */
137
138 /* V100-- READ. OUR FIRST REAL VERB. */
139
140 L18000:
141 if (lit_(play_1.here)) {
142 goto L18100;
143 }
144 /* !ROOM LIT? */
145 rspeak_(356);
146 /* !NO, CANT READ. */
147 return ret_val;
148
149 L18100:
150 if (prsvec_1.prsi == 0) {
151 goto L18200;
152 }
153 /* !READ THROUGH OBJ? */
154 if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TRANBT) != 0) {
155 goto L18200;
156 }
157 rspsub_(357, odi2);
158 /* !NOT TRANSPARENT. */
159 return ret_val;
160
161 L18200:
162 if ((objcts_1.oflag1[prsvec_1.prso - 1] & READBT) != 0) {
163 goto L18300;
164 }
165 rspsub_(358, odo2);
166 /* !NOT READABLE. */
167 return ret_val;
168
169 L18300:
170 if (! objact_()) {
171 rspeak_(objcts_1.oread[prsvec_1.prso - 1]);
172 }
173 return ret_val;
174
175 /* V101-- MELT. UNLESS OBJECT HANDLES, JOKE. */
176
177 L20000:
178 if (! objact_()) {
179 rspsub_(361, odo2);
180 }
181 return ret_val;
182
183 /* V102-- INFLATE. WORKS ONLY WITH BOATS. */
184
185 L22000:
186 if (! objact_()) {
187 rspeak_(368);
188 }
189 /* !OBJ HANDLE? */
190 return ret_val;
191
192 /* V103-- DEFLATE. */
193
194 L23000:
195 if (! objact_()) {
196 rspeak_(369);
197 }
198 /* !OBJ HANDLE? */
199 return ret_val;
200 /* VAPPLI, PAGE 4 */
201
202 /* V104-- ALARM. IF SLEEPING, WAKE HIM UP. */
203
204 L24000:
205 if ((objcts_1.oflag2[prsvec_1.prso - 1] & SLEPBT) == 0) {
206 goto L24100;
207 }
208 ret_val = objact_();
209 /* !SLEEPING, LET OBJ DO. */
210 return ret_val;
211
212 L24100:
213 rspsub_(370, odo2);
214 /* !JOKE. */
215 return ret_val;
216
217 /* V105-- EXORCISE. OBJECTS HANDLE. */
218
219 L25000:
220 f = objact_();
221 /* !OBJECTS HANDLE. */
222 return ret_val;
223
224 /* V106-- PLUG. LET OBJECTS HANDLE. */
225
226 L26000:
227 if (! objact_()) {
228 rspeak_(371);
229 }
230 return ret_val;
231
232 /* V107-- KICK. IF OBJECT IGNORES, JOKE. */
233
234 L27000:
235 if (! objact_()) {
236 rspsb2_(378, odo2, rmk);
237 }
238 return ret_val;
239
240 /* V108-- WAVE. SAME. */
241
242 L28000:
243 if (! objact_()) {
244 rspsb2_(379, odo2, rmk);
245 }
246 return ret_val;
247
248 /* V109,V110-- RAISE, LOWER. SAME. */
249
250 L29000:
251 L30000:
252 if (! objact_()) {
253 rspsb2_(380, odo2, rmk);
254 }
255 return ret_val;
256
257 /* V111-- RUB. SAME. */
258
259 L31000:
260 if (! objact_()) {
261 rspsb2_(381, odo2, rmk);
262 }
263 return ret_val;
264
265 /* V112-- PUSH. SAME. */
266
267 L32000:
268 if (! objact_()) {
269 rspsb2_(382, odo2, rmk);
270 }
271 return ret_val;
272 /* VAPPLI, PAGE 5 */
273
274 /* V113-- UNTIE. IF OBJECT IGNORES, JOKE. */
275
276 L33000:
277 if (objact_()) {
278 return ret_val;
279 }
280 /* !OBJECT HANDLE? */
281 i = 383;
282 /* !NO, NOT TIED. */
283 if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) == 0) {
284 i = 384;
285 }
286 rspeak_(i);
287 return ret_val;
288
289 /* V114-- TIE. NEVER REALLY WORKS. */
290
291 L34000:
292 if ((objcts_1.oflag2[prsvec_1.prso - 1] & TIEBT) != 0) {
293 goto L34100;
294 }
295 rspeak_(385);
296 /* !NOT TIEABLE. */
297 return ret_val;
298
299 L34100:
300 if (! objact_()) {
301 rspsub_(386, odo2);
302 }
303 /* !JOKE. */
304 return ret_val;
305
306 /* V115-- TIE UP. NEVER REALLY WORKS. */
307
308 L35000:
309 if ((objcts_1.oflag2[prsvec_1.prsi - 1] & TIEBT) != 0) {
310 goto L35100;
311 }
312 rspsub_(387, odo2);
313 /* !NOT TIEABLE. */
314 return ret_val;
315
316 L35100:
317 i = 388;
318 /* !ASSUME VILLAIN. */
319 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
320 i = 389;
321 }
322 rspsub_(i, odo2);
323 /* !JOKE. */
324 return ret_val;
325
326 /* V116-- TURN. OBJECT MUST HANDLE. */
327
328 L36000:
329 if ((objcts_1.oflag1[prsvec_1.prso - 1] & TURNBT) != 0) {
330 goto L36100;
331 }
332 rspeak_(390);
333 /* !NOT TURNABLE. */
334 return ret_val;
335
336 L36100:
337 if ((objcts_1.oflag1[prsvec_1.prsi - 1] & TOOLBT) != 0) {
338 goto L36200;
339 }
340 rspsub_(391, odi2);
341 /* !NOT A TOOL. */
342 return ret_val;
343
344 L36200:
345 ret_val = objact_();
346 /* !LET OBJECT HANDLE. */
347 return ret_val;
348
349 /* V117-- BREATHE. BECOMES INFLATE WITH LUNGS. */
350
351 L38000:
352 prsvec_1.prsa = vindex_1.inflaw;
353 prsvec_1.prsi = oindex_1.lungs;
354 goto L22000;
355 /* !HANDLE LIKE INFLATE. */
356
357 /* V118-- KNOCK. MOSTLY JOKE. */
358
359 L39000:
360 if (objact_()) {
361 return ret_val;
362 }
363 /* !OBJ HANDLE? */
364 i = 394;
365 /* !JOKE FOR DOOR. */
366 if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) {
367 i = 395;
368 }
369 rspsub_(i, odo2);
370 /* !JOKE FOR NONDOORS TOO. */
371 return ret_val;
372
373 /* V119-- LOOK. */
374
375 L40000:
376 if (prsvec_1.prso != 0) {
377 goto L41500;
378 }
379 /* !SOMETHING TO LOOK AT? */
380 ret_val = rmdesc_(3);
381 /* !HANDLED BY RMDESC. */
382 return ret_val;
383
384 /* V120-- EXAMINE. */
385
386 L41000:
387 if (prsvec_1.prso != 0) {
388 goto L41500;
389 }
390 /* !SOMETHING TO EXAMINE? */
391 ret_val = rmdesc_(0);
392 /* !HANDLED BY RMDESC. */
393 return ret_val;
394
395 L41500:
396 if (objact_()) {
397 return ret_val;
398 }
399 /* !OBJ HANDLE? */
400 i = objcts_1.oread[prsvec_1.prso - 1];
401 /* !GET READING MATERIAL. */
402 if (i != 0) {
403 rspeak_(i);
404 }
405 /* !OUTPUT IF THERE, */
406 if (i == 0) {
407 rspsub_(429, odo2);
408 }
409 /* !OTHERWISE DEFAULT. */
410 prsvec_1.prsa = vindex_1.foow;
411 /* !DEFUSE ROOM PROCESSORS. */
412 return ret_val;
413
414 /* V121-- SHAKE. IF HOLLOW OBJECT, SOME ACTION. */
415
416 L42000:
417 if (objact_()) {
418 return ret_val;
419 }
420 /* !OBJECT HANDLE? */
421 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
422 goto L42100;
423 }
424 rspeak_(371);
425 /* !JOKE FOR VILLAINS. */
426 return ret_val;
427
428 L42100:
429 if (qempty_(prsvec_1.prso) || (objcts_1.oflag1[prsvec_1.prso - 1] &
430 TAKEBT) == 0) {
431 goto L10;
432 }
433 if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) {
434 goto L42300;
435 }
436 /* !OPEN? SPILL. */
437 rspsub_(396, odo2);
438 /* !NO, DESCRIBE NOISE. */
439 return ret_val;
440
441 L42300:
442 rspsub_(397, odo2);
443 /* !SPILL THE WORKS. */
444 i__1 = objcts_1.olnt;
445 for (i = 1; i <= i__1; ++i) {
446 /* !SPILL CONTENTS. */
447 if (objcts_1.ocan[i - 1] != prsvec_1.prso) {
448 goto L42500;
449 }
450 /* !INSIDE? */
451 objcts_1.oflag2[i - 1] |= TCHBT;
452 if (av == 0) {
453 goto L42400;
454 }
455 /* !IN VEHICLE? */
456 newsta_(i, 0, 0, av, 0);
457 /* !YES, SPILL IN THERE. */
458 goto L42500;
459
460 L42400:
461 newsta_(i, 0, play_1.here, 0, 0);
462 /* !NO, SPILL ON FLOOR, */
463 if (i == oindex_1.water) {
464 newsta_(i, 133, 0, 0, 0);
465 }
466 /* !BUT WATER DISAPPEARS. */
467 L42500:
468 ;
469 }
470 return ret_val;
471
472 /* V122-- MOVE. MOSTLY JOKES. */
473
474 L43000:
475 if (objact_()) {
476 return ret_val;
477 }
478 /* !OBJ HANDLE? */
479 i = 398;
480 /* !ASSUME NOT HERE. */
481 if (qhere_(prsvec_1.prso, play_1.here)) {
482 i = 399;
483 }
484 rspsub_(i, odo2);
485 /* !JOKE. */
486 return ret_val;
487 /* VAPPLI, PAGE 6 */
488
489 /* V123-- TURN ON. */
490
491 L44000:
492 f = lit_(play_1.here);
493 /* !RECORD IF LIT. */
494 if (objact_()) {
495 goto L44300;
496 }
497 /* !OBJ HANDLE? */
498 if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 &&
499 objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
500 goto L44100;
501 }
502 rspeak_(400);
503 /* !CANT DO IT. */
504 return ret_val;
505
506 L44100:
507 if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) == 0) {
508 goto L44200;
509 }
510 rspeak_(401);
511 /* !ALREADY ON. */
512 return ret_val;
513
514 L44200:
515 objcts_1.oflag1[prsvec_1.prso - 1] |= ONBT;
516 rspsub_(404, odo2);
517 L44300:
518 if (! f && lit_(play_1.here)) {
519 f = rmdesc_(0);
520 }
521 /* !ROOM NEWLY LIT. */
522 return ret_val;
523
524 /* V124-- TURN OFF. */
525
526 L45000:
527 if (objact_()) {
528 goto L45300;
529 }
530 /* !OBJ HANDLE? */
531 if ((objcts_1.oflag1[prsvec_1.prso - 1] & LITEBT) != 0 &&
532 objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
533 goto L45100;
534 }
535 rspeak_(402);
536 /* !CANT DO IT. */
537 return ret_val;
538
539 L45100:
540 if ((objcts_1.oflag1[prsvec_1.prso - 1] & ONBT) != 0) {
541 goto L45200;
542 }
543 rspeak_(403);
544 /* !ALREADY OFF. */
545 return ret_val;
546
547 L45200:
548 objcts_1.oflag1[prsvec_1.prso - 1] &= ~ ONBT;
549 rspsub_(405, odo2);
550 L45300:
551 if (! lit_(play_1.here)) {
552 rspeak_(406);
553 }
554 /* !MAY BE DARK. */
555 return ret_val;
556
557 /* V125-- OPEN. A FINE MESS. */
558
559 L46000:
560 if (objact_()) {
561 return ret_val;
562 }
563 /* !OBJ HANDLE? */
564 if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) {
565 goto L46100;
566 }
567 L46050:
568 rspsub_(407, odo2);
569 /* !NOT OPENABLE. */
570 return ret_val;
571
572 L46100:
573 if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) {
574 goto L46200;
575 }
576 rspsub_(408, odo2);
577 /* !NOT OPENABLE. */
578 return ret_val;
579
580 L46200:
581 if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) {
582 goto L46225;
583 }
584 rspeak_(412);
585 /* !ALREADY OPEN. */
586 return ret_val;
587
588 L46225:
589 objcts_1.oflag2[prsvec_1.prso - 1] |= OPENBT;
590 if ((objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0 ||
591 qempty_(prsvec_1.prso)) {
592 goto L46300;
593 }
594 princo_(prsvec_1.prso, 410);
595 /* !PRINT CONTENTS. */
596 return ret_val;
597
598 L46300:
599 rspeak_(409);
600 /* !DONE */
601 return ret_val;
602
603 /* V126-- CLOSE. */
604
605 L47000:
606 if (objact_()) {
607 return ret_val;
608 }
609 /* !OBJ HANDLE? */
610 if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) == 0) {
611 goto L46050;
612 }
613 if (objcts_1.ocapac[prsvec_1.prso - 1] != 0) {
614 goto L47100;
615 }
616 rspsub_(411, odo2);
617 /* !NOT CLOSABLE. */
618 return ret_val;
619
620 L47100:
621 if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0) {
622 goto L47200;
623 }
624 /* !OPEN? */
625 rspeak_(413);
626 /* !NO, JOKE. */
627 return ret_val;
628
629 L47200:
630 objcts_1.oflag2[prsvec_1.prso - 1] &= ~ OPENBT;
631 rspeak_(414);
632 /* !DONE. */
633 return ret_val;
634 /* VAPPLI, PAGE 7 */
635
636 /* V127-- FIND. BIG MEGILLA. */
637
638 L48000:
639 if (objact_()) {
640 return ret_val;
641 }
642 /* !OBJ HANDLE? */
643 i = 415;
644 /* !DEFAULT CASE. */
645 if (qhere_(prsvec_1.prso, play_1.here)) {
646 goto L48300;
647 }
648 /* !IN ROOM? */
649 if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
650 goto L48200;
651 }
652 /* !ON WINNER? */
653 j = objcts_1.ocan[prsvec_1.prso - 1];
654 /* !DOWN ONE LEVEL. */
655 if (j == 0) {
656 goto L10;
657 }
658 if ((objcts_1.oflag1[j - 1] & TRANBT) == 0 && (! ((
659 objcts_1.oflag2[j - 1] & OPENBT) != 0) || (
660 objcts_1.oflag1[j - 1] & DOORBT + CONTBT) == 0))
661 {
662 goto L10;
663 }
664 i = 417;
665 /* !ASSUME IN ROOM. */
666 if (qhere_(j, play_1.here)) {
667 goto L48100;
668 }
669 if (objcts_1.oadv[j - 1] != play_1.winner) {
670 goto L10;
671 }
672 /* !NOT HERE OR ON PERSON. */
673 i = 418;
674 L48100:
675 rspsub_(i, objcts_1.odesc2[j - 1]);
676 /* !DESCRIBE FINDINGS. */
677 return ret_val;
678
679 L48200:
680 i = 416;
681 L48300:
682 rspsub_(i, odo2);
683 /* !DESCRIBE FINDINGS. */
684 return ret_val;
685
686 /* V128-- WAIT. RUN CLOCK DEMON. */
687
688 L49000:
689 rspeak_(419);
690 /* !TIME PASSES. */
691 for (i = 1; i <= 3; ++i) {
692 if (clockd_()) {
693 return ret_val;
694 }
695 /* L49100: */
696 }
697 return ret_val;
698
699 /* V129-- SPIN. */
700 /* V159-- TURN TO. */
701
702 L50000:
703 L88000:
704 if (! objact_()) {
705 rspeak_(663);
706 }
707 /* !IF NOT OBJ, JOKE. */
708 return ret_val;
709
710 /* V130-- BOARD. WORKS WITH VEHICLES. */
711
712 L51000:
713 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) {
714 goto L51100;
715 }
716 rspsub_(421, odo2);
717 /* !NOT VEHICLE, JOKE. */
718 return ret_val;
719
720 L51100:
721 if (qhere_(prsvec_1.prso, play_1.here)) {
722 goto L51200;
723 }
724 /* !HERE? */
725 rspsub_(420, odo2);
726 /* !NO, JOKE. */
727 return ret_val;
728
729 L51200:
730 if (av == 0) {
731 goto L51300;
732 }
733 /* !ALREADY GOT ONE? */
734 rspsub_(422, odo2);
735 /* !YES, JOKE. */
736 return ret_val;
737
738 L51300:
739 if (objact_()) {
740 return ret_val;
741 }
742 /* !OBJ HANDLE? */
743 rspsub_(423, odo2);
744 /* !DESCRIBE. */
745 advs_1.avehic[play_1.winner - 1] = prsvec_1.prso;
746 if (play_1.winner != aindex_1.player) {
747 objcts_1.ocan[advs_1.aobj[play_1.winner - 1] - 1] = prsvec_1.prso;
748 }
749 return ret_val;
750
751 /* V131-- DISEMBARK. */
752
753 L52000:
754 if (av == prsvec_1.prso) {
755 goto L52100;
756 }
757 /* !FROM VEHICLE? */
758 rspeak_(424);
759 /* !NO, JOKE. */
760 return ret_val;
761
762 L52100:
763 if (objact_()) {
764 return ret_val;
765 }
766 /* !OBJ HANDLE? */
767 if ((rooms_1.rflag[play_1.here - 1] & RLAND) != 0) {
768 goto L52200;
769 }
770 rspeak_(425);
771 /* !NOT ON LAND. */
772 return ret_val;
773
774 L52200:
775 advs_1.avehic[play_1.winner - 1] = 0;
776 rspeak_(426);
777 if (play_1.winner != aindex_1.player) {
778 newsta_(advs_1.aobj[play_1.winner - 1], 0, play_1.here, 0, 0);
779 }
780 return ret_val;
781
782 /* V132-- TAKE. HANDLED EXTERNALLY. */
783
784 L53000:
785 ret_val = take_(1);
786 return ret_val;
787
788 /* V133-- INVENTORY. PROCESSED EXTERNALLY. */
789
790 L55000:
791 invent_(play_1.winner);
792 return ret_val;
793 /* VAPPLI, PAGE 8 */
794
795 /* V134-- FILL. STRANGE DOINGS WITH WATER. */
796
797 L56000:
798 if (prsvec_1.prsi != 0) {
799 goto L56050;
800 }
801 /* !ANY OBJ SPECIFIED? */
802 if ((rooms_1.rflag[play_1.here - 1] & RWATER + RFILL) !=
803 0) {
804 goto L56025;
805 }
806 rspeak_(516);
807 /* !NOTHING TO FILL WITH. */
808 prsvec_1.prswon = FALSE_;
809 /* !YOU LOSE. */
810 return ret_val;
811
812 L56025:
813 prsvec_1.prsi = oindex_1.gwate;
814 /* !USE GLOBAL WATER. */
815 L56050:
816 if (objact_()) {
817 return ret_val;
818 }
819 /* !OBJ HANDLE? */
820 if (prsvec_1.prsi != oindex_1.gwate && prsvec_1.prsi != oindex_1.water) {
821 rspsb2_(444, odi2, odo2);
822 }
823 return ret_val;
824
825 /* V135,V136-- EAT/DRINK */
826
827 L58000:
828 L59000:
829 if (objact_()) {
830 return ret_val;
831 }
832 /* !OBJ HANDLE? */
833 if (prsvec_1.prso == oindex_1.gwate) {
834 goto L59500;
835 }
836 /* !DRINK GLOBAL WATER? */
837 if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & FOODBT) != 0)) {
838 goto L59400;
839 }
840 /* !EDIBLE? */
841 if (objcts_1.oadv[prsvec_1.prso - 1] == play_1.winner) {
842 goto L59200;
843 }
844 /* !YES, ON WINNER? */
845 L59100:
846 rspsub_(454, odo2);
847 /* !NOT ACCESSIBLE. */
848 return ret_val;
849
850 L59200:
851 if (prsvec_1.prsa == vindex_1.drinkw) {
852 goto L59300;
853 }
854 /* !DRINK FOOD? */
855 newsta_(prsvec_1.prso, 455, 0, 0, 0);
856 /* !NO, IT DISAPPEARS. */
857 return ret_val;
858
859 L59300:
860 rspeak_(456);
861 /* !YES, JOKE. */
862 return ret_val;
863
864 L59400:
865 if (! ((objcts_1.oflag1[prsvec_1.prso - 1] & DRNKBT) != 0)) {
866 goto L59600;
867 }
868 /* !DRINKABLE? */
869 if (objcts_1.ocan[prsvec_1.prso - 1] == 0) {
870 goto L59100;
871 }
872 /* !YES, IN SOMETHING? */
873 if (objcts_1.oadv[objcts_1.ocan[prsvec_1.prso - 1] - 1] != play_1.winner)
874 {
875 goto L59100;
876 }
877 if ((objcts_1.oflag2[objcts_1.ocan[prsvec_1.prso - 1] - 1] &
878 OPENBT) != 0) {
879 goto L59500;
880 }
881 /* !CONT OPEN? */
882 rspeak_(457);
883 /* !NO, JOKE. */
884 return ret_val;
885
886 L59500:
887 newsta_(prsvec_1.prso, 458, 0, 0, 0);
888 /* !GONE. */
889 return ret_val;
890
891 L59600:
892 rspsub_(453, odo2);
893 /* !NOT FOOD OR DRINK. */
894 return ret_val;
895
896 /* V137-- BURN. COMPLICATED. */
897
898 L60000:
899 if ((objcts_1.oflag1[prsvec_1.prsi - 1] & FLAMBT +
900 LITEBT + ONBT) != FLAMBT +
901 LITEBT + ONBT) {
902 goto L60400;
903 }
904 if (objact_()) {
905 return ret_val;
906 }
907 /* !OBJ HANDLE? */
908 if (objcts_1.ocan[prsvec_1.prso - 1] != oindex_1.recep) {
909 goto L60050;
910 }
911 /* !BALLOON? */
912 if (oappli_(objcts_1.oactio[oindex_1.ballo - 1], 0)) {
913 return ret_val;
914 }
915 /* !DID IT HANDLE? */
916 L60050:
917 if ((objcts_1.oflag1[prsvec_1.prso - 1] & BURNBT) == 0) {
918 goto L60300;
919 }
920 if (objcts_1.oadv[prsvec_1.prso - 1] != play_1.winner) {
921 goto L60100;
922 }
923 /* !CARRYING IT? */
924 rspsub_(459, odo2);
925 jigsup_(460);
926 return ret_val;
927
928 L60100:
929 j = objcts_1.ocan[prsvec_1.prso - 1];
930 /* !GET CONTAINER. */
931 if (qhere_(prsvec_1.prso, play_1.here) || av != 0 && j == av) {
932 goto L60200;
933 }
934 if (j == 0) {
935 goto L60150;
936 }
937 /* !INSIDE? */
938 if (! ((objcts_1.oflag2[j - 1] & OPENBT) != 0)) {
939 goto L60150;
940 }
941 /* !OPEN? */
942 if (qhere_(j, play_1.here) || av != 0 && objcts_1.ocan[j - 1] == av) {
943 goto L60200;
944 }
945 L60150:
946 rspeak_(461);
947 /* !CANT REACH IT. */
948 return ret_val;
949
950 L60200:
951 rspsub_(462, odo2);
952 /* !BURN IT. */
953 newsta_(prsvec_1.prso, 0, 0, 0, 0);
954 return ret_val;
955
956 L60300:
957 rspsub_(463, odo2);
958 /* !CANT BURN IT. */
959 return ret_val;
960
961 L60400:
962 rspsub_(301, odi2);
963 /* !CANT BURN IT WITH THAT. */
964 return ret_val;
965 /* VAPPLI, PAGE 9 */
966
967 /* V138-- MUNG. GO TO COMMON ATTACK CODE. */
968
969 L63000:
970 i = 466;
971 /* !CHOOSE PHRASE. */
972 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) {
973 goto L66100;
974 }
975 if (! objact_()) {
976 rspsb2_(466, odo2, rmk);
977 }
978 return ret_val;
979
980 /* V139-- KILL. GO TO COMMON ATTACK CODE. */
981
982 L64000:
983 i = 467;
984 /* !CHOOSE PHRASE. */
985 goto L66100;
986
987 /* V140-- SWING. INVERT OBJECTS, FALL THRU TO ATTACK. */
988
989 L65000:
990 j = prsvec_1.prso;
991 /* !INVERT. */
992 prsvec_1.prso = prsvec_1.prsi;
993 prsvec_1.prsi = j;
994 j = odo2;
995 odo2 = odi2;
996 odi2 = j;
997 prsvec_1.prsa = vindex_1.attacw;
998 /* !FOR OBJACT. */
999
1000 /* V141-- ATTACK. FALL THRU TO ATTACK CODE. */
1001
1002 L66000:
1003 i = 468;
1004
1005 /* COMMON MUNG/ATTACK/SWING/KILL CODE. */
1006
1007 L66100:
1008 if (prsvec_1.prso != 0) {
1009 goto L66200;
1010 }
1011 /* !ANYTHING? */
1012 rspeak_(469);
1013 /* !NO, JOKE. */
1014 return ret_val;
1015
1016 L66200:
1017 if (objact_()) {
1018 return ret_val;
1019 }
1020 /* !OBJ HANDLE? */
1021 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) != 0) {
1022 goto L66300;
1023 }
1024 if ((objcts_1.oflag1[prsvec_1.prso - 1] & VICTBT) == 0) {
1025 rspsub_(470, odo2);
1026 }
1027 return ret_val;
1028
1029 L66300:
1030 j = 471;
1031 /* !ASSUME NO WEAPON. */
1032 if (prsvec_1.prsi == 0) {
1033 goto L66500;
1034 }
1035 if ((objcts_1.oflag2[prsvec_1.prsi - 1] & WEAPBT) == 0) {
1036 goto L66400;
1037 }
1038 melee = 1;
1039 /* !ASSUME SWORD. */
1040 if (prsvec_1.prsi != oindex_1.sword) {
1041 melee = 2;
1042 }
1043 /* !MUST BE KNIFE. */
1044 i = blow_(aindex_1.player, prsvec_1.prso, melee, 1, 0);
1045 /* !STRIKE BLOW. */
1046 return ret_val;
1047
1048 L66400:
1049 j = 472;
1050 /* !NOT A WEAPON. */
1051 L66500:
1052 rspsb2_(i, odo2, j);
1053 /* !JOKE. */
1054 return ret_val;
1055 /* VAPPLI, PAGE 10 */
1056
1057 /* V142-- WALK. PROCESSED EXTERNALLY. */
1058
1059 L68000:
1060 ret_val = walk_();
1061 return ret_val;
1062
1063 /* V143-- TELL. PROCESSED IN GAME. */
1064
1065 L69000:
1066 rspeak_(603);
1067 return ret_val;
1068
1069 /* V144-- PUT. PROCESSED EXTERNALLY. */
1070
1071 L70000:
1072 ret_val = put_(1);
1073 return ret_val;
1074
1075 /* V145,V146,V147,V148-- DROP/GIVE/POUR/THROW */
1076
1077 L71000:
1078 L72000:
1079 L73000:
1080 L74000:
1081 ret_val = drop_(0);
1082 return ret_val;
1083
1084 /* V149-- SAVE */
1085
1086 L77000:
1087 if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
1088 goto L77100;
1089 }
1090 rspeak_(828);
1091 /* !NO SAVES IN ENDGAME. */
1092 return ret_val;
1093
1094 L77100:
1095 savegm_();
1096 return ret_val;
1097
1098 /* V150-- RESTORE */
1099
1100 L78000:
1101 if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
1102 goto L78100;
1103 }
1104 rspeak_(829);
1105 /* !NO RESTORES IN ENDGAME. */
1106 return ret_val;
1107
1108 L78100:
1109 rstrgm_();
1110 return ret_val;
1111 /* VAPPLI, PAGE 11 */
1112
1113 /* V151-- HELLO */
1114
1115 L80000:
1116 if (prsvec_1.prso != 0) {
1117 goto L80100;
1118 }
1119 /* !ANY OBJ? */
1120 i__1 = rnd_(4) + 346;
1121 rspeak_(i__1);
1122 /* !NO, VANILLA HELLO. */
1123 return ret_val;
1124
1125 L80100:
1126 if (prsvec_1.prso != oindex_1.aviat) {
1127 goto L80200;
1128 }
1129 /* !HELLO AVIATOR? */
1130 rspeak_(350);
1131 /* !NOTHING HAPPENS. */
1132 return ret_val;
1133
1134 L80200:
1135 if (prsvec_1.prso != oindex_1.sailo) {
1136 goto L80300;
1137 }
1138 /* !HELLO SAILOR? */
1139 ++state_1.hs;
1140 /* !COUNT. */
1141 i = 351;
1142 /* !GIVE NORMAL OR */
1143 if (state_1.hs % 10 == 0) {
1144 i = 352;
1145 }
1146 /* !RANDOM MESSAGE. */
1147 if (state_1.hs % 20 == 0) {
1148 i = 353;
1149 }
1150 rspeak_(i);
1151 /* !SPEAK UP. */
1152 return ret_val;
1153
1154 L80300:
1155 if (objact_()) {
1156 return ret_val;
1157 }
1158 /* !OBJ HANDLE? */
1159 i = 354;
1160 /* !ASSUME VILLAIN. */
1161 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT +
1162 ACTRBT) == 0) {
1163 i = 355;
1164 }
1165 rspsub_(i, odo2);
1166 /* !HELLO THERE */
1167 /* ! */
1168 return ret_val;
1169
1170 /* V152-- LOOK INTO */
1171
1172 L81000:
1173 if (objact_()) {
1174 return ret_val;
1175 }
1176 /* !OBJ HANDLE? */
1177 if ((objcts_1.oflag1[prsvec_1.prso - 1] & DOORBT) == 0) {
1178 goto L81300;
1179 }
1180 if (! ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0)) {
1181 goto L81200;
1182 }
1183 /* !OPEN? */
1184 rspsub_(628, odo2);
1185 /* !OPEN DOOR- UNINTERESTING. */
1186 return ret_val;
1187
1188 L81200:
1189 rspsub_(525, odo2);
1190 /* !CLOSED DOOR- CANT SEE. */
1191 return ret_val;
1192
1193 L81300:
1194 if ((objcts_1.oflag2[prsvec_1.prso - 1] & VEHBT) != 0) {
1195 goto L81400;
1196 }
1197 if ((objcts_1.oflag2[prsvec_1.prso - 1] & OPENBT) != 0 || (
1198 objcts_1.oflag1[prsvec_1.prso - 1] & TRANBT) != 0) {
1199 goto L81400;
1200 }
1201 if ((objcts_1.oflag1[prsvec_1.prso - 1] & CONTBT) != 0) {
1202 goto L81200;
1203 }
1204 rspsub_(630, odo2);
1205 /* !CANT LOOK INSIDE. */
1206 return ret_val;
1207
1208 L81400:
1209 if (qempty_(prsvec_1.prso)) {
1210 goto L81500;
1211 }
1212 /* !VEH OR SEE IN. EMPTY? */
1213 princo_(prsvec_1.prso, 573);
1214 /* !NO, LIST CONTENTS. */
1215 return ret_val;
1216
1217 L81500:
1218 rspsub_(629, odo2);
1219 /* !EMPTY. */
1220 return ret_val;
1221
1222 /* V153-- LOOK UNDER */
1223
1224 L82000:
1225 if (! objact_()) {
1226 rspeak_(631);
1227 }
1228 /* !OBJECT HANDLE? */
1229 return ret_val;
1230 /* VAPPLI, PAGE 12 */
1231
1232 /* V154-- PUMP */
1233
1234 L83000:
1235 if (objcts_1.oroom[oindex_1.pump - 1] == play_1.here || objcts_1.oadv[
1236 oindex_1.pump - 1] == play_1.winner) {
1237 goto L83100;
1238 }
1239 rspeak_(632);
1240 /* !NO. */
1241 return ret_val;
1242
1243 L83100:
1244 prsvec_1.prsi = oindex_1.pump;
1245 /* !BECOMES INFLATE */
1246 prsvec_1.prsa = vindex_1.inflaw;
1247 /* !X WITH PUMP. */
1248 goto L22000;
1249 /* !DONE. */
1250
1251 /* V155-- WIND */
1252
1253 L84000:
1254 if (! objact_()) {
1255 rspsub_(634, odo2);
1256 }
1257 /* !OBJ HANDLE? */
1258 return ret_val;
1259
1260 /* V156-- CLIMB */
1261 /* V157-- CLIMB UP */
1262 /* V158-- CLIMB DOWN */
1263
1264 L85000:
1265 L86000:
1266 L87000:
1267 i = xsrch_1.xup;
1268 /* !ASSUME UP. */
1269 if (prsvec_1.prsa == vindex_1.clmbdw) {
1270 i = xsrch_1.xdown;
1271 }
1272 /* !UNLESS CLIMB DN. */
1273 f = (objcts_1.oflag2[prsvec_1.prso - 1] & CLMBBT) != 0;
1274 if (f && findxt_(i, play_1.here)) {
1275 goto L87500;
1276 }
1277 /* !ANYTHING TO CLIMB? */
1278 if (objact_()) {
1279 return ret_val;
1280 }
1281 /* !OBJ HANDLE? */
1282 i = 657;
1283 if (f) {
1284 i = 524;
1285 }
1286 /* !VARIETY OF JOKES. */
1287 if (! f && (prsvec_1.prso == oindex_1.wall || prsvec_1.prso >=
1288 oindex_1.wnort && prsvec_1.prso <= oindex_1.wnort + 3)) {
1289 i = 656;
1290 }
1291 rspeak_(i);
1292 /* !JOKE. */
1293 return ret_val;
1294
1295 L87500:
1296 prsvec_1.prsa = vindex_1.walkw;
1297 /* !WALK */
1298 prsvec_1.prso = i;
1299 /* !IN SPECIFIED DIR. */
1300 ret_val = walk_();
1301 return ret_val;
1302
1303 } /* vappli_ */
1304
1305 /* CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS */
1306
1307 /* DECLARATIONS */
1308
clockd_()1309 logical clockd_()
1310 {
1311 /* System generated locals */
1312 integer i__1;
1313 logical ret_val;
1314
1315 /* Local variables */
1316 integer i;
1317
1318 ret_val = FALSE_;
1319 /* !ASSUME NO ACTION. */
1320 i__1 = cevent_1.clnt;
1321 for (i = 1; i <= i__1; ++i) {
1322 if (! cevent_1.cflag[i - 1] || cevent_1.ctick[i - 1] == 0) {
1323 goto L100;
1324 }
1325 if (cevent_1.ctick[i - 1] < 0) {
1326 goto L50;
1327 }
1328 /* !PERMANENT ENTRY? */
1329 --cevent_1.ctick[i - 1];
1330 if (cevent_1.ctick[i - 1] != 0) {
1331 goto L100;
1332 }
1333 /* !TIMER EXPIRED? */
1334 L50:
1335 ret_val = TRUE_;
1336 cevapp_(cevent_1.cactio[i - 1]);
1337 /* !DO ACTION. */
1338 L100:
1339 ;
1340 }
1341 return ret_val;
1342
1343 } /* clockd_ */
1344