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