1 /* SVERBS-	SIMPLE VERBS PROCESSOR */
2 /* 	ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT */
3 /* 	OF OBJECT ACTIONS */
4 
5 /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
6 /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
7 /* WRITTEN BY R. M. SUPNIK */
8 
9 #include <stdio.h>
10 #include "funcs.h"
11 #include "vars.h"
12 
sverbs_(ri)13 logical sverbs_(ri)
14 integer ri;
15 {
16     /* Initialized data */
17 
18     const integer mxnop = 39;
19     const integer mxjoke = 64;
20     static const integer jokes[25] = { 4,5,3,304,305,306,307,308,309,310,311,
21 	    312,313,5314,5319,324,325,883,884,120,120,0,0,0,0 };
22     static const integer answer[14] = { 0,1,2,3,4,4,4,4,5,5,5,6,7,7};
23     static const char * const ansstr[14] =
24 	    { "TEMPLE", "FOREST", "30003", "FLASK", "RUB", "FONDLE",
25 	      "CARRES", "TOUCH", "BONES", "BODY", "SKELE", "RUSTYKNIFE",
26 	      "NONE", "NOWHER" };
27 
28     /* System generated locals */
29     integer i__1, i__2;
30     logical ret_val;
31 
32     /* Local variables */
33     logical f;
34     const char *z, *z2;
35     integer i, j;
36     integer k;
37     integer l;
38     char ch[1*6];
39     integer cp, wp;
40     char pp1[1*6], pp2[1*6];
41     integer odi2 = 0, odo2 = 0;
42 
43     ret_val = TRUE_;
44 /* 						!ASSUME WINS. */
45     if (prsvec_1.prso != 0) {
46 	odo2 = objcts_1.odesc2[prsvec_1.prso - 1];
47     }
48 /* 						!SET UP DESCRIPTORS. */
49     if (prsvec_1.prsi != 0) {
50 	odi2 = objcts_1.odesc2[prsvec_1.prsi - 1];
51     }
52 
53     if (ri == 0) {
54 	bug_(7, ri);
55     }
56 /* 						!ZERO IS VERBOTEN. */
57     if (ri <= mxnop) {
58 	return ret_val;
59     }
60 /* 						!NOP? */
61     if (ri <= mxjoke) {
62 	goto L100;
63     }
64 /* 						!JOKE? */
65     switch (ri - mxjoke) {
66 	case 1:  goto L65000;
67 	case 2:  goto L66000;
68 	case 3:  goto L67000;
69 	case 4:  goto L68000;
70 	case 5:  goto L69000;
71 	case 6:  goto L1000;
72 	case 7:  goto L2000;
73 	case 8:  goto L3000;
74 	case 9:  goto L4000;
75 	case 10:  goto L5000;
76 	case 11:  goto L6000;
77 	case 12:  goto L7000;
78 	case 13:  goto L8000;
79 	case 14:  goto L9000;
80 	case 15:  goto L10000;
81 	case 16:  goto L11000;
82 	case 17:  goto L12000;
83 	case 18:  goto L13000;
84 	case 19:  goto L14000;
85 	case 20:  goto L15000;
86 	case 21:  goto L16000;
87 	case 22:  goto L17000;
88 	case 23:  goto L18000;
89 	case 24:  goto L19000;
90 	case 25:  goto L20000;
91 	case 26:  goto L21000;
92 	case 27:  goto L22000;
93 	case 28:  goto L23000;
94 	case 29:  goto L24000;
95 	case 30:  goto L25000;
96 	case 31:  goto L26000;
97 	case 32:  goto L27000;
98     }
99     bug_(7, ri);
100 
101 /* ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. */
102 
103 /* L10: */
104     ret_val = FALSE_;
105 /* 						!LOSE. */
106     return ret_val;
107 
108 /* JOKE PROCESSOR. */
109 /* FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT. */
110 
111 L100:
112     i = jokes[ri - mxnop - 1];
113 /* 						!GET TABLE ENTRY. */
114     j = i / 1000;
115 /* 						!ISOLATE # STRINGS. */
116     if (j != 0) {
117 	i = i % 1000 + rnd_(j);
118     }
119 /* 						!IF RANDOM, CHOOSE. */
120     rspeak_(i);
121 /* 						!PRINT JOKE. */
122     return ret_val;
123 /* SVERBS, PAGE 2A */
124 
125 /* V65--	ROOM */
126 
127 L65000:
128     ret_val = rmdesc_(2);
129 /* 						!DESCRIBE ROOM ONLY. */
130     return ret_val;
131 
132 /* V66--	OBJECTS */
133 
134 L66000:
135     ret_val = rmdesc_(1);
136 /* 						!DESCRIBE OBJ ONLY. */
137     if (! play_1.telflg) {
138 	rspeak_(138);
139     }
140 /* 						!NO OBJECTS. */
141     return ret_val;
142 
143 /* V67--	RNAME */
144 
145 L67000:
146     i__1 = rooms_1.rdesc2[play_1.here - 1];
147     rspeak_(i__1);
148 /* 						!SHORT ROOM NAME. */
149     return ret_val;
150 
151 /* V68--	RESERVED */
152 
153 L68000:
154     return ret_val;
155 
156 /* V69--	RESERVED */
157 
158 L69000:
159     return ret_val;
160 /* SVERBS, PAGE 3 */
161 
162 /* V70--	BRIEF.  SET FLAG. */
163 
164 L1000:
165     findex_1.brieff = TRUE_;
166 /* 						!BRIEF DESCRIPTIONS. */
167     findex_1.superf = FALSE_;
168     rspeak_(326);
169     return ret_val;
170 
171 /* V71--	VERBOSE.  CLEAR FLAGS. */
172 
173 L2000:
174     findex_1.brieff = FALSE_;
175 /* 						!LONG DESCRIPTIONS. */
176     findex_1.superf = FALSE_;
177     rspeak_(327);
178     return ret_val;
179 
180 /* V72--	SUPERBRIEF.  SET FLAG. */
181 
182 L3000:
183     findex_1.superf = TRUE_;
184     rspeak_(328);
185     return ret_val;
186 
187 /* V73-- STAY (USED IN ENDGAME). */
188 
189 L4000:
190     if (play_1.winner != aindex_1.amastr) {
191 	goto L4100;
192     }
193 /* 						!TELL MASTER, STAY. */
194     rspeak_(781);
195 /* 						!HE DOES. */
196     cevent_1.ctick[cindex_1.cevfol - 1] = 0;
197 /* 						!NOT FOLLOWING. */
198     return ret_val;
199 
200 L4100:
201     if (play_1.winner == aindex_1.player) {
202 	rspeak_(664);
203     }
204 /* 						!JOKE. */
205     return ret_val;
206 
207 /* V74--	VERSION.  PRINT INFO. */
208 
209 L5000:
210     more_output(NULL);
211     printf("V%1d.%1d%c\n", vers_1.vmaj, vers_1.vmin, vers_1.vedit);
212     play_1.telflg = TRUE_;
213     return ret_val;
214 
215 /* V75--	SWIM.  ALWAYS A JOKE. */
216 
217 L6000:
218     i = 330;
219 /* 						!ASSUME WATER. */
220     if ((rooms_1.rflag[play_1.here - 1] & RWATER + RFILL) ==
221 	    0) {
222 	i = rnd_(3) + 331;
223     }
224     rspeak_(i);
225     return ret_val;
226 
227 /* V76--	GERONIMO.  IF IN BARREL, FATAL, ELSE JOKE. */
228 
229 L7000:
230     if (play_1.here == rindex_1.mbarr) {
231 	goto L7100;
232     }
233 /* 						!IN BARREL? */
234     rspeak_(334);
235 /* 						!NO, JOKE. */
236     return ret_val;
237 
238 L7100:
239     jigsup_(335);
240 /* 						!OVER FALLS. */
241     return ret_val;
242 
243 /* V77--	SINBAD ET AL.  CHASE CYCLOPS, ELSE JOKE. */
244 
245 L8000:
246     if (play_1.here == rindex_1.mcycl && qhere_(oindex_1.cyclo, play_1.here)
247 	    ) {
248 	goto L8100;
249     }
250     rspeak_(336);
251 /* 						!NOT HERE, JOKE. */
252     return ret_val;
253 
254 L8100:
255     newsta_(oindex_1.cyclo, 337, 0, 0, 0);
256 /* 						!CYCLOPS FLEES. */
257     findex_1.cyclof = TRUE_;
258 /* 						!SET ALL FLAGS. */
259     findex_1.magicf = TRUE_;
260     objcts_1.oflag2[oindex_1.cyclo - 1] &= ~ FITEBT;
261     return ret_val;
262 
263 /* V78--	WELL.  OPEN DOOR, ELSE JOKE. */
264 
265 L9000:
266     if (findex_1.riddlf || play_1.here != rindex_1.riddl) {
267 	goto L9100;
268     }
269 /* 						!IN RIDDLE ROOM? */
270     findex_1.riddlf = TRUE_;
271 /* 						!YES, SOLVED IT. */
272     rspeak_(338);
273     return ret_val;
274 
275 L9100:
276     rspeak_(339);
277 /* 						!WELL, WHAT? */
278     return ret_val;
279 
280 /* V79--	PRAY.  IF IN TEMP2, POOF */
281 /* 						! */
282 
283 L10000:
284     if (play_1.here != rindex_1.temp2) {
285 	goto L10050;
286     }
287 /* 						!IN TEMPLE? */
288     if (moveto_(rindex_1.fore1, play_1.winner)) {
289 	goto L10100;
290     }
291 /* 						!FORE1 STILL THERE? */
292 L10050:
293     rspeak_(340);
294 /* 						!JOKE. */
295     return ret_val;
296 
297 L10100:
298     f = rmdesc_(3);
299 /* 						!MOVED, DESCRIBE. */
300     return ret_val;
301 
302 /* V80--	TREASURE.  IF IN TEMP1, POOF */
303 /* 						! */
304 
305 L11000:
306     if (play_1.here != rindex_1.temp1) {
307 	goto L11050;
308     }
309 /* 						!IN TEMPLE? */
310     if (moveto_(rindex_1.treas, play_1.winner)) {
311 	goto L10100;
312     }
313 /* 						!TREASURE ROOM THERE? */
314 L11050:
315     rspeak_(341);
316 /* 						!NOTHING HAPPENS. */
317     return ret_val;
318 
319 /* V81--	TEMPLE.  IF IN TREAS, POOF */
320 /* 						! */
321 
322 L12000:
323     if (play_1.here != rindex_1.treas) {
324 	goto L12050;
325     }
326 /* 						!IN TREASURE? */
327     if (moveto_(rindex_1.temp1, play_1.winner)) {
328 	goto L10100;
329     }
330 /* 						!TEMP1 STILL THERE? */
331 L12050:
332     rspeak_(341);
333 /* 						!NOTHING HAPPENS. */
334     return ret_val;
335 
336 /* V82--	BLAST.  USUALLY A JOKE. */
337 
338 L13000:
339     i = 342;
340 /* 						!DONT UNDERSTAND. */
341     if (prsvec_1.prso == oindex_1.safe) {
342 	i = 252;
343     }
344 /* 						!JOKE FOR SAFE. */
345     rspeak_(i);
346     return ret_val;
347 
348 /* V83--	SCORE.  PRINT SCORE. */
349 
350 L14000:
351     score_(0);
352     return ret_val;
353 
354 /* V84--	QUIT.  FINISH OUT THE GAME. */
355 
356 L15000:
357     score_(1);
358 /* 						!TELLL SCORE. */
359     if (! yesno_(343, 0, 0)) {
360 	return ret_val;
361     }
362 /* 						!ASK FOR Y/N DECISION. */
363     exit_();
364 /* 						!BYE. */
365 /* SVERBS, PAGE 4 */
366 
367 /* V85--	FOLLOW (USED IN ENDGAME) */
368 
369 L16000:
370     if (play_1.winner != aindex_1.amastr) {
371 	return ret_val;
372     }
373 /* 						!TELL MASTER, FOLLOW. */
374     rspeak_(782);
375     cevent_1.ctick[cindex_1.cevfol - 1] = -1;
376 /* 						!STARTS FOLLOWING. */
377     return ret_val;
378 
379 /* V86--	WALK THROUGH */
380 
381 L17000:
382     if (screen_1.scolrm == 0 || prsvec_1.prso != oindex_1.scol && (
383 	    prsvec_1.prso != oindex_1.wnort || play_1.here != rindex_1.bkbox))
384 	     {
385 	goto L17100;
386     }
387     screen_1.scolac = screen_1.scolrm;
388 /* 						!WALKED THRU SCOL. */
389     prsvec_1.prso = 0;
390 /* 						!FAKE OUT FROMDR. */
391     cevent_1.ctick[cindex_1.cevscl - 1] = 6;
392 /* 						!START ALARM. */
393     rspeak_(668);
394 /* 						!DISORIENT HIM. */
395     f = moveto_(screen_1.scolrm, play_1.winner);
396 /* 						!INTO ROOM. */
397     f = rmdesc_(3);
398 /* 						!DESCRIBE. */
399     return ret_val;
400 
401 L17100:
402     if (play_1.here != screen_1.scolac) {
403 	goto L17300;
404     }
405 /* 						!ON OTHER SIDE OF SCOL? */
406     for (i = 1; i <= 12; i += 3) {
407 /* 						!WALK THRU PROPER WALL? */
408 	if (screen_1.scolwl[i - 1] == play_1.here && screen_1.scolwl[i] ==
409 		prsvec_1.prso) {
410 	    goto L17500;
411 	}
412 /* L17200: */
413     }
414 
415 L17300:
416     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TAKEBT) != 0) {
417 	goto L17400;
418     }
419     i = 669;
420 /* 						!NO, JOKE. */
421     if (prsvec_1.prso == oindex_1.scol) {
422 	i = 670;
423     }
424 /* 						!SPECIAL JOKE FOR SCOL. */
425     rspsub_(i, odo2);
426     return ret_val;
427 
428 L17400:
429     i = 671;
430 /* 						!JOKE. */
431     if (objcts_1.oroom[prsvec_1.prso - 1] != 0) {
432 	i = rnd_(5) + 552;
433     }
434 /* 						!SPECIAL JOKES IF CARRY. */
435     rspeak_(i);
436     return ret_val;
437 
438 L17500:
439     prsvec_1.prso = screen_1.scolwl[i + 1];
440 /* 						!THRU SCOL WALL... */
441     for (i = 1; i <= 8; i += 2) {
442 /* 						!FIND MATCHING ROOM. */
443 	if (prsvec_1.prso == screen_1.scoldr[i - 1]) {
444 	    screen_1.scolrm = screen_1.scoldr[i];
445 	}
446 /* L17600: */
447     }
448 /* 						!DECLARE NEW SCOLRM. */
449     cevent_1.ctick[cindex_1.cevscl - 1] = 0;
450 /* 						!CANCEL ALARM. */
451     rspeak_(668);
452 /* 						!DISORIENT HIM. */
453     f = moveto_(rindex_1.bkbox, play_1.winner);
454 /* 						!BACK IN BOX ROOM. */
455     f = rmdesc_(3);
456     return ret_val;
457 
458 /* V87--	RING.  A JOKE. */
459 
460 L18000:
461     i = 359;
462 /* 						!CANT RING. */
463     if (prsvec_1.prso == oindex_1.bell) {
464 	i = 360;
465     }
466 /* 						!DING, DONG. */
467     rspeak_(i);
468 /* 						!JOKE. */
469     return ret_val;
470 
471 /* V88--	BRUSH.  JOKE WITH OBSCURE TRAP. */
472 
473 L19000:
474     if (prsvec_1.prso == oindex_1.teeth) {
475 	goto L19100;
476     }
477 /* 						!BRUSH TEETH? */
478     rspeak_(362);
479 /* 						!NO, JOKE. */
480     return ret_val;
481 
482 L19100:
483     if (prsvec_1.prsi != 0) {
484 	goto L19200;
485     }
486 /* 						!WITH SOMETHING? */
487     rspeak_(363);
488 /* 						!NO, JOKE. */
489     return ret_val;
490 
491 L19200:
492     if (prsvec_1.prsi == oindex_1.putty && objcts_1.oadv[oindex_1.putty - 1]
493 	    == play_1.winner) {
494 	goto L19300;
495     }
496     rspsub_(364, odi2);
497 /* 						!NO, JOKE. */
498     return ret_val;
499 
500 L19300:
501     jigsup_(365);
502 /* 						!YES, DEAD */
503 /* 						! */
504 /* 						! */
505 /* 						! */
506 /* 						! */
507 /* 						! */
508     return ret_val;
509 /* SVERBS, PAGE 5 */
510 
511 /* V89--	DIG.  UNLESS SHOVEL, A JOKE. */
512 
513 L20000:
514     if (prsvec_1.prso == oindex_1.shove) {
515 	return ret_val;
516     }
517 /* 						!SHOVEL? */
518     i = 392;
519 /* 						!ASSUME TOOL. */
520     if ((objcts_1.oflag1[prsvec_1.prso - 1] & TOOLBT) == 0) {
521 	i = 393;
522     }
523     rspsub_(i, odo2);
524     return ret_val;
525 
526 /* V90--	TIME.  PRINT OUT DURATION OF GAME. */
527 
528 L21000:
529     gttime_(&k);
530 /* 						!GET PLAY TIME. */
531     i = k / 60;
532     j = k % 60;
533 
534     more_output(NULL);
535     printf("You have been playing Dungeon for ");
536     if (i >= 1) {
537 	printf("%d hour", i);
538 	if (i >= 2)
539 	    printf("s");
540 	printf(" and ");
541     }
542     printf("%d minute", j);
543     if (j != 1)
544 	printf("s");
545     printf(".\n");
546     play_1.telflg = TRUE_;
547     return ret_val;
548 
549 
550 /* V91--	LEAP.  USUALLY A JOKE, WITH A CATCH. */
551 
552 L22000:
553     if (prsvec_1.prso == 0) {
554 	goto L22200;
555     }
556 /* 						!OVER SOMETHING? */
557     if (qhere_(prsvec_1.prso, play_1.here)) {
558 	goto L22100;
559     }
560 /* 						!HERE? */
561     rspeak_(447);
562 /* 						!NO, JOKE. */
563     return ret_val;
564 
565 L22100:
566     if ((objcts_1.oflag2[prsvec_1.prso - 1] & VILLBT) == 0) {
567 	goto L22300;
568     }
569     rspsub_(448, odo2);
570 /* 						!CANT JUMP VILLAIN. */
571     return ret_val;
572 
573 L22200:
574     if (! findxt_(xsrch_1.xdown, play_1.here)) {
575 	goto L22300;
576     }
577 /* 						!DOWN EXIT? */
578     if (curxt_1.xtype == xpars_1.xno || curxt_1.xtype == xpars_1.xcond && !
579 	    flags[*xflag - 1]) {
580 	goto L22400;
581     }
582 L22300:
583     i__1 = rnd_(5) + 314;
584     rspeak_(i__1);
585 /* 						!WHEEEE */
586 /* 						! */
587     return ret_val;
588 
589 L22400:
590     i__1 = rnd_(4) + 449;
591     jigsup_(i__1);
592 /* 						!FATAL LEAP. */
593     return ret_val;
594 /* SVERBS, PAGE 6 */
595 
596 /* V92--	LOCK. */
597 
598 L23000:
599     if (prsvec_1.prso == oindex_1.grate && play_1.here == rindex_1.mgrat) {
600 	goto L23200;
601     }
602 L23100:
603     rspeak_(464);
604 /* 						!NOT LOCK GRATE. */
605     return ret_val;
606 
607 L23200:
608     findex_1.grunlf = FALSE_;
609 /* 						!GRATE NOW LOCKED. */
610     rspeak_(214);
611     exits_1.travel[rooms_1.rexit[play_1.here - 1]] = 214;
612 /* 						!CHANGE EXIT STATUS. */
613     return ret_val;
614 
615 /* V93--	UNLOCK */
616 
617 L24000:
618     if (prsvec_1.prso != oindex_1.grate || play_1.here != rindex_1.mgrat) {
619 	goto L23100;
620     }
621     if (prsvec_1.prsi == oindex_1.keys) {
622 	goto L24200;
623     }
624 /* 						!GOT KEYS? */
625     rspsub_(465, odi2);
626 /* 						!NO, JOKE. */
627     return ret_val;
628 
629 L24200:
630     findex_1.grunlf = TRUE_;
631 /* 						!UNLOCK GRATE. */
632     rspeak_(217);
633     exits_1.travel[rooms_1.rexit[play_1.here - 1]] = 217;
634 /* 						!CHANGE EXIT STATUS. */
635     return ret_val;
636 
637 /* V94--	DIAGNOSE. */
638 
639 L25000:
640     i = fights_(play_1.winner, 0);
641 /* 						!GET FIGHTS STRENGTH. */
642     j = advs_1.astren[play_1.winner - 1];
643 /* 						!GET HEALTH. */
644 /* Computing MIN */
645     i__1 = i + j;
646     k = min(i__1,4);
647 /* 						!GET STATE. */
648     if (! cevent_1.cflag[cindex_1.cevcur - 1]) {
649 	j = 0;
650     }
651 /* 						!IF NO WOUNDS. */
652 /* Computing MIN */
653     i__1 = 4, i__2 = abs(j);
654     l = min(i__1,i__2);
655 /* 						!SCALE. */
656     i__1 = l + 473;
657     rspeak_(i__1);
658 /* 						!DESCRIBE HEALTH. */
659     i = (-j - 1) * 30 + cevent_1.ctick[cindex_1.cevcur - 1];
660 /* 						!COMPUTE WAIT. */
661 
662     if (j != 0) {
663 	more_output(NULL);
664 	printf("You will be cured after %d moves.\n", i);
665     }
666 
667     i__1 = k + 478;
668     rspeak_(i__1);
669 /* 						!HOW MUCH MORE? */
670     if (state_1.deaths != 0) {
671 	i__1 = state_1.deaths + 482;
672 	rspeak_(i__1);
673     }
674 /* 						!HOW MANY DEATHS? */
675     return ret_val;
676 /* SVERBS, PAGE 7 */
677 
678 /* V95--	INCANT */
679 
680 L26000:
681     for (i = 1; i <= 6; ++i) {
682 /* 						!SET UP PARSE. */
683 	pp1[i - 1] = ' ';
684 	pp2[i - 1] = ' ';
685 /* L26100: */
686     }
687     wp = 1;
688 /* 						!WORD POINTER. */
689     cp = 1;
690 /* 						!CHAR POINTER. */
691     if (prsvec_1.prscon <= 1) {
692 	goto L26300;
693     }
694     for (z = input_1.inbuf + prsvec_1.prscon - 1; *z != '\0'; ++z) {
695 /* 						!PARSE INPUT */
696 	if (*z == ',')
697 	    goto L26300;
698 /* 						!END OF PHRASE? */
699 	if (*z != ' ')
700 	    goto L26150;
701 /* 						!SPACE? */
702 	if (cp != 1) {
703 	    ++wp;
704 	}
705 	cp = 1;
706 	goto L26200;
707 L26150:
708 	if (wp == 1) {
709 	    pp1[cp - 1] = *z;
710 	}
711 /* 						!STUFF INTO HOLDER. */
712 	if (wp == 2) {
713 	    pp2[cp - 1] = *z;
714 	}
715 /* Computing MIN */
716 	i__2 = cp + 1;
717 	cp = min(i__2,6);
718 L26200:
719 	;
720     }
721 
722 L26300:
723     prsvec_1.prscon = 1;
724 /* 						!KILL REST OF LINE. */
725     if (pp1[0] != ' ') {
726 	goto L26400;
727     }
728 /* 						!ANY INPUT? */
729     rspeak_(856);
730 /* 						!NO, HO HUM. */
731     return ret_val;
732 
733 L26400:
734     encryp_(pp1, ch);
735 /* 						!COMPUTE RESPONSE. */
736     if (pp2[0] != ' ') {
737 	goto L26600;
738     }
739 /* 						!TWO PHRASES? */
740 
741     if (findex_1.spellf) {
742 	goto L26550;
743     }
744 /* 						!HE'S TRYING TO LEARN. */
745     if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) == 0) {
746 	goto L26575;
747     }
748     findex_1.spellf = TRUE_;
749 /* 						!TELL HIM. */
750     play_1.telflg = TRUE_;
751     more_output(NULL);
752     printf("A hollow voice replies:  \"%.6s %.6s\".\n", pp1, ch);
753 
754     return ret_val;
755 
756 L26550:
757     rspeak_(857);
758 /* 						!HE'S GOT ONE ALREADY. */
759     return ret_val;
760 
761 L26575:
762     rspeak_(858);
763 /* 						!HE'S NOT IN ENDGAME. */
764     return ret_val;
765 
766 L26600:
767     if ((rooms_1.rflag[rindex_1.tstrs - 1] & RSEEN) != 0) {
768 	goto L26800;
769     }
770     for (i = 1; i <= 6; ++i) {
771 	if (pp2[i - 1] != ch[i - 1]) {
772 	    goto L26575;
773 	}
774 /* 						!WRONG. */
775 /* L26700: */
776     }
777     findex_1.spellf = TRUE_;
778 /* 						!IT WORKS. */
779     rspeak_(859);
780     cevent_1.ctick[cindex_1.cevste - 1] = 1;
781 /* 						!FORCE START. */
782     return ret_val;
783 
784 L26800:
785     rspeak_(855);
786 /* 						!TOO LATE. */
787     return ret_val;
788 /* SVERBS, PAGE 8 */
789 
790 /* V96--	ANSWER */
791 
792 L27000:
793     if (prsvec_1.prscon > 1 && play_1.here == rindex_1.fdoor &&
794 	    findex_1.inqstf) {
795 	goto L27100;
796     }
797     rspeak_(799);
798 /* 						!NO ONE LISTENS. */
799     prsvec_1.prscon = 1;
800     return ret_val;
801 
802 L27100:
803     for (j = 1; j <= 14; j ++) {
804 /* 						!CHECK ANSWERS. */
805 	if (findex_1.quesno != answer[j - 1])
806 	    goto L27300;
807 /* 						!ONLY CHECK PROPER ANS. */
808 	z = ansstr[j - 1];
809 	z2 = input_1.inbuf + prsvec_1.prscon - 1;
810 	while (*z != '\0') {
811 	    while (*z2 == ' ')
812 		z2++;
813 /* 						!STRIP INPUT BLANKS. */
814 	    if (*z++ != *z2++)
815 		goto L27300;
816 	}
817 	goto L27500;
818 /* 						!RIGHT ANSWER. */
819 L27300:
820 	;
821     }
822 
823     prsvec_1.prscon = 1;
824 /* 						!KILL REST OF LINE. */
825     ++findex_1.nqatt;
826 /* 						!WRONG, CRETIN. */
827     if (findex_1.nqatt >= 5) {
828 	goto L27400;
829     }
830 /* 						!TOO MANY WRONG? */
831     i__1 = findex_1.nqatt + 800;
832     rspeak_(i__1);
833 /* 						!NO, TRY AGAIN. */
834     return ret_val;
835 
836 L27400:
837     rspeak_(826);
838 /* 						!ALL OVER. */
839     cevent_1.cflag[cindex_1.cevinq - 1] = FALSE_;
840 /* 						!LOSE. */
841     return ret_val;
842 
843 L27500:
844     prsvec_1.prscon = 1;
845 /* 						!KILL REST OF LINE. */
846     ++findex_1.corrct;
847 /* 						!GOT IT RIGHT. */
848     rspeak_(800);
849 /* 						!HOORAY. */
850     if (findex_1.corrct >= 3) {
851 	goto L27600;
852     }
853 /* 						!WON TOTALLY? */
854     cevent_1.ctick[cindex_1.cevinq - 1] = 2;
855 /* 						!NO, START AGAIN. */
856     findex_1.quesno = (findex_1.quesno + 3) % 8;
857     findex_1.nqatt = 0;
858     rspeak_(769);
859 /* 						!ASK NEXT QUESTION. */
860     i__1 = findex_1.quesno + 770;
861     rspeak_(i__1);
862     return ret_val;
863 
864 L27600:
865     rspeak_(827);
866 /* 						!QUIZ OVER, */
867     cevent_1.cflag[cindex_1.cevinq - 1] = FALSE_;
868     objcts_1.oflag2[oindex_1.qdoor - 1] |= OPENBT;
869     return ret_val;
870 
871 } /* sverbs_ */
872