1C SVERBS- SIMPLE VERBS PROCESSOR 2C ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT 3C OF OBJECT ACTIONS 4C 5C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 6C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 7C WRITTEN BY R. M. SUPNIK 8C 9C DECLARATIONS 10C 11 LOGICAL FUNCTION SVERBS(RI) 12 IMPLICIT INTEGER (A-Z) 13 LOGICAL MOVETO,YESNO 14 LOGICAL RMDESC 15 LOGICAL QOPEN 16 LOGICAL FINDXT,QHERE,F 17 INTEGER JOKES(25) 18 CHARACTER ANSSTR(78) 19 CHARACTER PP1(6),PP2(6),CH(6) 20 INTEGER ANSWER(28) 21#include "parser.h" 22#include "gamestate.h" 23#include "state.h" 24#include "screen.h" 25C 26C MISCELLANEOUS VARIABLES 27C 28 CHARACTER VEDIT 29 COMMON /VERS/ VMAJ,VMIN,VEDIT 30#include "io.h" 31#include "rooms.h" 32#include "rflag.h" 33#include "rindex.h" 34#include "exits.h" 35#include "curxt.h" 36#include "xpars.h" 37#include "xsrch.h" 38#include "objects.h" 39#include "oflags.h" 40#include "oindex.h" 41#include "clock.h" 42 43#include "advers.h" 44#include "verbs.h" 45#include "flags.h" 46C 47C FUNCTIONS AND DATA 48C 49 QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 50 DATA MXNOP/39/,MXJOKE/64/ 51 DATA JOKES/4,5,3,304,305,306,307,308,309,310,311,312, 52& 313,5314,5319,324,325,883,884,120,120,0,0,0,0/ 53 DATA ANSWER/0,6,1,6,2,5,3,5,4,3,4,6,4,6,4,5, 54& 5,5,5,4,5,6,6,10,7,4,7,6/ 55 DATA ANSSTR/'T','E','M','P','L','E', 56& 'F','O','R','E','S','T', 57& '3','0','0','0','3', 58& 'F','L','A','S','K', 59& 'R','U','B', 60& 'F','O','N','D','L','E', 61& 'C','A','R','R','E','S', 62& 'T','O','U','C','H', 63& 'B','O','N','E','S', 64& 'B','O','D','Y', 65& 'S','K','E','L','E','T', 66& 'R','U','S','T','Y','K','N','I','F','E', 67& 'N','O','N','E', 68& 'N','O','W','H','E','R','\0'/ 69C SVERBS, PAGE 2 70C 71 SVERBS=.TRUE. 72C !ASSUME WINS. 73 IF(PRSO.NE.0) ODO2=ODESC2(PRSO) 74C !SET UP DESCRIPTORS. 75 IF(PRSI.NE.0) ODI2=ODESC2(PRSI) 76C 77 IF(RI.EQ.0) CALL BUG(7,RI) 78C !ZERO IS VERBOTEN. 79 IF(RI.LE.MXNOP) RETURN 80C !NOP? 81 IF(RI.LE.MXJOKE) GO TO 100 82C !JOKE? 83 GO TO (65000,66000,67000,68000,69000, 84& 1000,2000,3000,4000,5000,6000,7000,8000,9000,10000, 85& 11000,12000,13000,14000,15000,16000,17000,18000,19000,20000, 86& 21000,22000,23000,24000,25000,26000,27000), 87& (RI-MXJOKE) 88 CALL BUG(7,RI) 89C 90C ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE. 91C 9210 SVERBS=.FALSE. 93C !LOSE. 94 RETURN 95C 96C JOKE PROCESSOR. 97C FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT. 98C 99100 I=JOKES(RI-MXNOP) 100C !GET TABLE ENTRY. 101 J=I/1000 102C !ISOLATE # STRINGS. 103 IF(J.NE.0) I=MOD(I,1000)+RND(J) 104C !IF RANDOM, CHOOSE. 105 CALL RSPEAK(I) 106C !PRINT JOKE. 107 RETURN 108C SVERBS, PAGE 2A 109C 110C V65-- ROOM 111C 11265000 SVERBS=RMDESC(2) 113C !DESCRIBE ROOM ONLY. 114 RETURN 115C 116C V66-- OBJECTS 117C 11866000 SVERBS=RMDESC(1) 119C !DESCRIBE OBJ ONLY. 120 IF(.NOT.TELFLG) CALL RSPEAK(138) 121C !NO OBJECTS. 122 RETURN 123C 124C V67-- RNAME 125C 12667000 CALL RSPEAK(RDESC2-HERE) 127C !SHORT ROOM NAME. 128 RETURN 129C 130C V68-- RESERVED 131C 13268000 RETURN 133C 134C V69-- RESERVED 135C 13669000 RETURN 137C SVERBS, PAGE 3 138C 139C V70-- BRIEF. SET FLAG. 140C 1411000 BRIEFF=.TRUE. 142C !BRIEF DESCRIPTIONS. 143 SUPERF=.FALSE. 144 CALL RSPEAK(326) 145 RETURN 146C 147C V71-- VERBOSE. CLEAR FLAGS. 148C 1492000 BRIEFF=.FALSE. 150C !LONG DESCRIPTIONS. 151 SUPERF=.FALSE. 152 CALL RSPEAK(327) 153 RETURN 154C 155C V72-- SUPERBRIEF. SET FLAG. 156C 1573000 SUPERF=.TRUE. 158 CALL RSPEAK(328) 159 RETURN 160C 161C V73-- STAY (USED IN ENDGAME). 162C 1634000 IF(WINNER.NE.AMASTR) GO TO 4100 164C !TELL MASTER, STAY. 165 CALL RSPEAK(781) 166C !HE DOES. 167 CTICK(CEVFOL)=0 168C !NOT FOLLOWING. 169 RETURN 170C 1714100 IF(WINNER.EQ.PLAYER) CALL RSPEAK(664) 172C !JOKE. 173 RETURN 174C 175C V74-- VERSION. PRINT INFO. 176C 177#ifdef PDP 1785000 call prvers(vmaj,vmin,vedit) 179#else 1805000 WRITE(OUTCH,5010) VMAJ,VMIN,VEDIT 181#ifdef NOCC 1825010 FORMAT('V',I1,'.',I2,A1) 183#else NOCC 1845010 FORMAT(' V',I1,'.',I2,A1) 185#endif NOCC 186#endif PDP 187 TELFLG=.TRUE. 188 RETURN 189C 190C V75-- SWIM. ALWAYS A JOKE. 191C 1926000 I=330 193C !ASSUME WATER. 194 IF(and(RFLAG(HERE),(RWATER+RFILL)).EQ.0) 195& I=331+RND(3) 196 CALL RSPEAK(I) 197 RETURN 198C 199C V76-- GERONIMO. IF IN BARREL, FATAL, ELSE JOKE. 200C 2017000 IF(HERE.EQ.MBARR) GO TO 7100 202C !IN BARREL? 203 CALL RSPEAK(334) 204C !NO, JOKE. 205 RETURN 206C 2077100 CALL JIGSUP(335) 208C !OVER FALLS. 209 RETURN 210C 211C V77-- SINBAD ET AL. CHASE CYCLOPS, ELSE JOKE. 212C 2138000 IF((HERE.EQ.MCYCL).AND.QHERE(CYCLO,HERE)) GO TO 8100 214 CALL RSPEAK(336) 215C !NOT HERE, JOKE. 216 RETURN 217C 2188100 CALL NEWSTA(CYCLO,337,0,0,0) 219C !CYCLOPS FLEES. 220 CYCLOF=.TRUE. 221C !SET ALL FLAGS. 222 MAGICF=.TRUE. 223 OFLAG2(CYCLO)=and(OFLAG2(CYCLO), not(FITEBT)) 224 RETURN 225C 226C V78-- WELL. OPEN DOOR, ELSE JOKE. 227C 2289000 IF(RIDDLF.OR.(HERE.NE.RIDDL)) GO TO 9100 229C !IN RIDDLE ROOM? 230 RIDDLF=.TRUE. 231C !YES, SOLVED IT. 232 CALL RSPEAK(338) 233 RETURN 234C 2359100 CALL RSPEAK(339) 236C !WELL, WHAT? 237 RETURN 238C 239C V79-- PRAY. IF IN TEMP2, POOF 240C ! 241C 24210000 IF(HERE.NE.TEMP2) GO TO 10050 243C !IN TEMPLE? 244 IF(MOVETO(FORE1,WINNER)) GO TO 10100 245C !FORE1 STILL THERE? 24610050 CALL RSPEAK(340) 247C !JOKE. 248 RETURN 249C 25010100 F=RMDESC(3) 251C !MOVED, DESCRIBE. 252 RETURN 253C 254C V80-- TREASURE. IF IN TEMP1, POOF 255C ! 256C 25711000 IF(HERE.NE.TEMP1) GO TO 11050 258C !IN TEMPLE? 259 IF(MOVETO(TREAS,WINNER)) GO TO 10100 260C !TREASURE ROOM THERE? 26111050 CALL RSPEAK(341) 262C !NOTHING HAPPENS. 263 RETURN 264C 265C V81-- TEMPLE. IF IN TREAS, POOF 266C ! 267C 26812000 IF(HERE.NE.TREAS) GO TO 12050 269C !IN TREASURE? 270 IF(MOVETO(TEMP1,WINNER)) GO TO 10100 271C !TEMP1 STILL THERE? 27212050 CALL RSPEAK(341) 273C !NOTHING HAPPENS. 274 RETURN 275C 276C V82-- BLAST. USUALLY A JOKE. 277C 27813000 I=342 279C !DONT UNDERSTAND. 280 IF(PRSO.EQ.SAFE) I=252 281C !JOKE FOR SAFE. 282 CALL RSPEAK(I) 283 RETURN 284C 285C V83-- SCORE. PRINT SCORE. 286C 28714000 CALL SCORE(.FALSE.) 288 RETURN 289C 290C V84-- QUIT. FINISH OUT THE GAME. 291C 29215000 CALL SCORE(.TRUE.) 293C !TELLL SCORE. 294 IF(.NOT.YESNO(343,0,0)) RETURN 295C !ASK FOR Y/N DECISION. 296#ifdef PDP 297C close routine moved to exit for pdp version 298#else 299 CLOSE (DBCH) 300#endif PDP 301 CALL EXIT 302C !BYE. 303C SVERBS, PAGE 4 304C 305C V85-- FOLLOW (USED IN ENDGAME) 306C 30716000 IF(WINNER.NE.AMASTR) RETURN 308C !TELL MASTER, FOLLOW. 309 CALL RSPEAK(782) 310 CTICK(CEVFOL)=-1 311C !STARTS FOLLOWING. 312 RETURN 313C 314C V86-- WALK THROUGH 315C 31617000 IF((SCOLRM.EQ.0).OR.((PRSO.NE.SCOL).AND. 317& ((PRSO.NE.WNORT).OR.(HERE.NE.BKBOX)))) GO TO 17100 318 SCOLAC=SCOLRM 319C !WALKED THRU SCOL. 320 PRSO=0 321C !FAKE OUT FROMDR. 322 CTICK(CEVSCL)=6 323C !START ALARM. 324 CALL RSPEAK(668) 325C !DISORIENT HIM. 326 F=MOVETO(SCOLRM,WINNER) 327C !INTO ROOM. 328 F=RMDESC(3) 329C !DESCRIBE. 330 RETURN 331C 33217100 IF(HERE.NE.SCOLAC) GO TO 17300 333C !ON OTHER SIDE OF SCOL? 334 DO 17200 I=1,12,3 335C !WALK THRU PROPER WALL? 336 IF((SCOLWL(I).EQ.HERE).AND.(SCOLWL(I+1).EQ.PRSO)) 337& GO TO 17500 33817200 CONTINUE 339C 34017300 IF(and(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 17400 341 I=669 342C !NO, JOKE. 343 IF(PRSO.EQ.SCOL) I=670 344C !SPECIAL JOKE FOR SCOL. 345 CALL RSPSUB(I,ODO2) 346 RETURN 347C 34817400 I=671 349C !JOKE. 350 IF(OROOM(PRSO).NE.0) I=552+RND(5) 351C !SPECIAL JOKES IF CARRY. 352 CALL RSPEAK(I) 353 RETURN 354C 35517500 PRSO=SCOLWL(I+2) 356C !THRU SCOL WALL... 357 DO 17600 I=1,8,2 358C !FIND MATCHING ROOM. 359 IF(PRSO.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1) 36017600 CONTINUE 361C !DECLARE NEW SCOLRM. 362 CTICK(CEVSCL)=0 363C !CANCEL ALARM. 364 CALL RSPEAK(668) 365C !DISORIENT HIM. 366 F=MOVETO(BKBOX,WINNER) 367C !BACK IN BOX ROOM. 368 F=RMDESC(3) 369 RETURN 370C 371C V87-- RING. A JOKE. 372C 37318000 I=359 374C !CANT RING. 375 IF(PRSO.EQ.BELL) I=360 376C !DING, DONG. 377 CALL RSPEAK(I) 378C !JOKE. 379 RETURN 380C 381C V88-- BRUSH. JOKE WITH OBSCURE TRAP. 382C 38319000 IF(PRSO.EQ.TEETH) GO TO 19100 384C !BRUSH TEETH? 385 CALL RSPEAK(362) 386C !NO, JOKE. 387 RETURN 388C 38919100 IF(PRSI.NE.0) GO TO 19200 390C !WITH SOMETHING? 391 CALL RSPEAK(363) 392C !NO, JOKE. 393 RETURN 394C 39519200 IF((PRSI.EQ.PUTTY).AND.(OADV(PUTTY).EQ.WINNER)) 396& GO TO 19300 397 CALL RSPSUB(364,ODI2) 398C !NO, JOKE. 399 RETURN 400C 40119300 CALL JIGSUP(365) 402C !YES, DEAD 403C ! 404C ! 405C ! 406C ! 407C ! 408 RETURN 409C SVERBS, PAGE 5 410C 411C V89-- DIG. UNLESS SHOVEL, A JOKE. 412C 41320000 IF(PRSO.EQ.SHOVE) RETURN 414C !SHOVEL? 415 I=392 416C !ASSUME TOOL. 417 IF(and(OFLAG1(PRSO),TOOLBT).EQ.0) I=393 418 CALL RSPSUB(I,ODO2) 419 RETURN 420C 421C V90-- TIME. PRINT OUT DURATION OF GAME. 422C 423#ifdef PDP 424C no duration time available for pdp version (removed 425C to make things fit) 42621000 TELFLG=.TRUE. 427 RETURN 428#else 42921000 CALL GTTIME(K) 430C !GET PLAY TIME. 431 I=K/60 432 J=MOD(K,60) 433C 434#ifdef NOCC 435 IF(I.EQ.0.AND.J.EQ.1) WRITE(OUTCH,21010) J 436 IF(I.EQ.0.AND.J.NE.1) WRITE(OUTCH,21011) J 437 IF(I.EQ.1.AND.J.EQ.1) WRITE(OUTCH,21012) I,J 438 IF(I.EQ.1.AND.J.NE.1) WRITE(OUTCH,21013) I,J 439 IF(I.GE.2.AND.J.EQ.1) WRITE(OUTCH,21014) I,J 440 IF(I.GE.2.AND.J.NE.1) WRITE(OUTCH,21015) I,J 441 TELFLG=.TRUE. 442 RETURN 443C 44421010 FORMAT('You have been playing Dungeon for ',I2,' minute.') 44521011 FORMAT('You have been playing Dungeon for ',I2,' minutes.') 44621012 FORMAT('You have been playing Dungeon for ',I3,' hour and ', 447& I2,' minute.') 44821013 FORMAT('You have been playing Dungeon for ',I3,' hour and ', 449& I2,' minutes.') 45021014 FORMAT('You have been playing Dungeon for ',I3,' hours and ', 451& I2,' minute.') 45221015 FORMAT('You have been playing Dungeon for ',I3,' hours and ', 453& I2,' minutes.') 454#else NOCC 455 WRITE(OUTCH,21010) 456 IF(I.NE.0) WRITE(OUTCH,21011) I 457 IF(I.GE.2) WRITE(OUTCH,21012) 458 IF(I.EQ.1) WRITE(OUTCH,21013) 459 IF(J.EQ.1) WRITE(OUTCH,21014) J 460 IF(J.NE.1) WRITE(OUTCH,21015) J 461 TELFLG=.TRUE. 462 RETURN 463C 46421010 FORMAT(' You have been playing Dungeon for ',$) 46521011 FORMAT('+',I3,' hour',$) 46621012 FORMAT('+s and ',$) 46721013 FORMAT('+ and ',$) 46821014 FORMAT('+',I2,' minute.') 46921015 FORMAT('+',I2,' minutes.') 470#endif NOCC 471#endif PDP 472C 473C V91-- LEAP. USUALLY A JOKE, WITH A CATCH. 474C 47522000 IF(PRSO.EQ.0) GO TO 22200 476C !OVER SOMETHING? 477 IF(QHERE(PRSO,HERE)) GO TO 22100 478C !HERE? 479 CALL RSPEAK(447) 480C !NO, JOKE. 481 RETURN 482C 48322100 IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 22300 484 CALL RSPSUB(448,ODO2) 485C !CANT JUMP VILLAIN. 486 RETURN 487C 48822200 IF(.NOT.FINDXT(XDOWN,HERE)) GO TO 22300 489C !DOWN EXIT? 490 IF((XTYPE.EQ.XNO).OR.((XTYPE.EQ.XCOND).AND. 491& .NOT.FLAGS(XFLAG))) GO TO 22400 49222300 CALL RSPEAK(314+RND(5)) 493C !WHEEEE 494C ! 495 RETURN 496C 49722400 CALL JIGSUP(449+RND(4)) 498C !FATAL LEAP. 499 RETURN 500C SVERBS, PAGE 6 501C 502C V92-- LOCK. 503C 50423000 IF((PRSO.EQ.GRATE).AND.(HERE.EQ.MGRAT)) 505& GO TO 23200 50623100 CALL RSPEAK(464) 507C !NOT LOCK GRATE. 508 RETURN 509C 51023200 GRUNLF=.FALSE. 511C !GRATE NOW LOCKED. 512 CALL RSPEAK(214) 513 TRAVEL(REXIT(HERE)+1)=214 514C !CHANGE EXIT STATUS. 515 RETURN 516C 517C V93-- UNLOCK 518C 51924000 IF((PRSO.NE.GRATE).OR.(HERE.NE.MGRAT)) 520& GO TO 23100 521 IF(PRSI.EQ.KEYS) GO TO 24200 522C !GOT KEYS? 523 CALL RSPSUB(465,ODI2) 524C !NO, JOKE. 525 RETURN 526C 52724200 GRUNLF=.TRUE. 528C !UNLOCK GRATE. 529 CALL RSPEAK(217) 530 TRAVEL(REXIT(HERE)+1)=217 531C !CHANGE EXIT STATUS. 532 RETURN 533C 534C V94-- DIAGNOSE. 535C 53625000 I=FIGHTS(WINNER,.FALSE.) 537C !GET FIGHTS STRENGTH. 538 J=ASTREN(WINNER) 539C !GET HEALTH. 540 K=MIN0(I+J,4) 541C !GET STATE. 542 IF(.NOT.CFLAG(CEVCUR)) J=0 543C !IF NO WOUNDS. 544 L=MIN0(4,IABS(J)) 545C !SCALE. 546 CALL RSPEAK(473+L) 547C !DESCRIBE HEALTH. 548 I=(30*(-J-1))+CTICK(CEVCUR) 549C !COMPUTE WAIT. 550C 551#ifdef PDP 552 if(J .ne. 0) call cured(I) 553#else 554 IF(J.NE.0) WRITE(OUTCH,25100) I 555#ifdef NOCC 55625100 FORMAT('You will be cured after ',I3,' moves.') 557#else NOCC 55825100 FORMAT(' You will be cured after ',I3,' moves.') 559#endif NOCC 560#endif PDP 561C 562 CALL RSPEAK(478+K) 563C !HOW MUCH MORE? 564 IF(DEATHS.NE.0) CALL RSPEAK(482+DEATHS) 565C !HOW MANY DEATHS? 566 RETURN 567C SVERBS, PAGE 7 568C 569C V95-- INCANT 570C 57126000 DO 26100 I=1,6 572C !SET UP PARSE. 573 PP1(I)=' ' 574 PP2(I)=' ' 57526100 CONTINUE 576 WP=1 577C !WORD POINTER. 578 CP=1 579C !CHAR POINTER. 580 IF(PRSCON.LE.1) GO TO 26300 581 DO 26200 I=PRSCON,INLNT 582C !PARSE INPUT 583 IF(INBUF(I).EQ.',') GO TO 26300 584C !END OF PHRASE? 585 IF(INBUF(I).NE.' ') GO TO 26150 586C !SPACE? 587 IF(CP.NE.1) WP=WP+1 588 CP=1 589 GO TO 26200 59026150 IF(WP.EQ.1) PP1(CP)=INBUF(I) 591C !STUFF INTO HOLDER. 592 IF(WP.EQ.2) PP2(CP)=INBUF(I) 593 CP=MIN0(CP+1,6) 59426200 CONTINUE 595C 59626300 PRSCON=1 597C !KILL REST OF LINE. 598 IF(PP1(1).NE.' ') GO TO 26400 599C !ANY INPUT? 600 CALL RSPEAK(856) 601C !NO, HO HUM. 602 RETURN 603C 60426400 CALL ENCRYP(PP1,CH) 605C !COMPUTE RESPONSE. 606 IF(PP2(1).NE.' ') GO TO 26600 607C !TWO PHRASES? 608C 609 IF(SPELLF) GO TO 26550 610C !HE'S TRYING TO LEARN. 611 IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 26575 612 SPELLF=.TRUE. 613C !TELL HIM. 614 TELFLG=.TRUE. 615#ifdef PDP 616 call voice(PP1,CH) 617#else 618 WRITE(OUTCH,26510) PP1,CH 619#ifdef NOCC 62026510 FORMAT('A hollow voice replies: "',6A1,1X,6A1,'".') 621#else NOCC 62226510 FORMAT(' A hollow voice replies: "',6A1,1X,6A1,'".') 623#endif NOCC 624#endif PDP 625C 626 RETURN 627C 62826550 CALL RSPEAK(857) 629C !HE'S GOT ONE ALREADY. 630 RETURN 631C 63226575 CALL RSPEAK(858) 633C !HE'S NOT IN ENDGAME. 634 RETURN 635C 63626600 IF(and(RFLAG(TSTRS),RSEEN).NE.0) GO TO 26800 637 DO 26700 I=1,6 638 IF(PP2(I).NE.CH(I)) GO TO 26575 639C !WRONG. 64026700 CONTINUE 641 SPELLF=.TRUE. 642C !IT WORKS. 643 CALL RSPEAK(859) 644 CTICK(CEVSTE)=1 645C !FORCE START. 646 RETURN 647C 64826800 CALL RSPEAK(855) 649C !TOO LATE. 650 RETURN 651C SVERBS, PAGE 8 652C 653C V96-- ANSWER 654C 65527000 IF((PRSCON.GT.1).AND. 656& (HERE.EQ.FDOOR).AND.INQSTF) 657& GO TO 27100 658 CALL RSPEAK(799) 659C !NO ONE LISTENS. 660 PRSCON=1 661 RETURN 662C 66327100 K=1 664C !POINTER INTO ANSSTR. 665 DO 27300 J=1,28,2 666C !CHECK ANSWERS. 667 NEWK=K+ANSWER(J+1) 668C !COMPUTE NEXT K. 669 IF(QUESNO.NE.ANSWER(J)) GO TO 27300 670C !ONLY CHECK PROPER ANS. 671 I=PRSCON-1 672C !SCAN ANSWER. 673 DO 27200 L=K,NEWK-1 67427150 I=I+1 675C !SKIP INPUT BLANKS. 676 IF(I.GT.INLNT) GO TO 27300 677C !END OF INPUT? LOSE. 678 IF(INBUF(I).EQ.' ') GO TO 27150 679 IF(INBUF(I).NE.ANSSTR(L)) GO TO 27300 68027200 CONTINUE 681 GO TO 27500 682C !RIGHT ANSWER. 68327300 K=NEWK 684C 685 PRSCON=1 686C !KILL REST OF LINE. 687 NQATT=NQATT+1 688C !WRONG, CRETIN. 689 IF(NQATT.GE.5) GO TO 27400 690C !TOO MANY WRONG? 691 CALL RSPEAK(800+NQATT) 692C !NO, TRY AGAIN. 693 RETURN 694C 69527400 CALL RSPEAK(826) 696C !ALL OVER. 697 CFLAG(CEVINQ)=.FALSE. 698C !LOSE. 699 RETURN 700C 70127500 PRSCON=1 702C !KILL REST OF LINE. 703 CORRCT=CORRCT+1 704C !GOT IT RIGHT. 705 CALL RSPEAK(800) 706C !HOORAY. 707 IF(CORRCT.GE.3) GO TO 27600 708C !WON TOTALLY? 709 CTICK(CEVINQ)=2 710C !NO, START AGAIN. 711 QUESNO=MOD(QUESNO+3,8) 712 NQATT=0 713 CALL RSPEAK(769) 714C !ASK NEXT QUESTION. 715 CALL RSPEAK(770+QUESNO) 716 RETURN 717C 71827600 CALL RSPEAK(827) 719C !QUIZ OVER, 720 CFLAG(CEVINQ)=.FALSE. 721 OFLAG2(QDOOR)=or(OFLAG2(QDOOR),OPENBT) 722 RETURN 723C 724 END 725