Annotation of 43BSDReno/games/dungeon/sverbs.F, revision 1.1.1.1

1.1       root        1: C SVERBS-      SIMPLE VERBS PROCESSOR
                      2: C      ALL VERBS IN THIS ROUTINE MUST BE INDEPENDANT
                      3: C      OF OBJECT ACTIONS
                      4: C
                      5: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
                      6: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
                      7: C WRITTEN BY R. M. SUPNIK
                      8: C
                      9: C DECLARATIONS
                     10: C
                     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"
                     25: C
                     26: C MISCELLANEOUS VARIABLES
                     27: C
                     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"
                     46: C
                     47: C FUNCTIONS AND DATA
                     48: C
                     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'/
                     69: C SVERBS, PAGE 2
                     70: C
                     71:        SVERBS=.TRUE.
                     72: C                                              !ASSUME WINS.
                     73:        IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
                     74: C                                              !SET UP DESCRIPTORS.
                     75:        IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
                     76: C
                     77:        IF(RI.EQ.0) CALL BUG(7,RI)
                     78: C                                              !ZERO IS VERBOTEN.
                     79:        IF(RI.LE.MXNOP) RETURN
                     80: C                                              !NOP?
                     81:        IF(RI.LE.MXJOKE) GO TO 100
                     82: C                                              !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)
                     89: C
                     90: C ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
                     91: C
                     92: 10     SVERBS=.FALSE.
                     93: C                                              !LOSE.
                     94:        RETURN
                     95: C
                     96: C JOKE PROCESSOR.
                     97: C FIND PROPER ENTRY IN JOKES, USE IT TO SELECT STRING TO PRINT.
                     98: C
                     99: 100    I=JOKES(RI-MXNOP)
                    100: C                                              !GET TABLE ENTRY.
                    101:        J=I/1000
                    102: C                                              !ISOLATE # STRINGS.
                    103:        IF(J.NE.0) I=MOD(I,1000)+RND(J)
                    104: C                                              !IF RANDOM, CHOOSE.
                    105:        CALL RSPEAK(I)
                    106: C                                              !PRINT JOKE.
                    107:        RETURN
                    108: C SVERBS, PAGE 2A
                    109: C
                    110: C V65--        ROOM
                    111: C
                    112: 65000  SVERBS=RMDESC(2)
                    113: C                                              !DESCRIBE ROOM ONLY.
                    114:        RETURN
                    115: C
                    116: C V66--        OBJECTS
                    117: C
                    118: 66000  SVERBS=RMDESC(1)
                    119: C                                              !DESCRIBE OBJ ONLY.
                    120:        IF(.NOT.TELFLG) CALL RSPEAK(138)
                    121: C                                              !NO OBJECTS.
                    122:        RETURN
                    123: C
                    124: C V67--        RNAME
                    125: C
                    126: 67000  CALL RSPEAK(RDESC2-HERE)
                    127: C                                              !SHORT ROOM NAME.
                    128:        RETURN
                    129: C
                    130: C V68--        RESERVED
                    131: C
                    132: 68000  RETURN
                    133: C
                    134: C V69--        RESERVED
                    135: C
                    136: 69000  RETURN
                    137: C SVERBS, PAGE 3
                    138: C
                    139: C V70--        BRIEF.  SET FLAG.
                    140: C
                    141: 1000   BRIEFF=.TRUE.
                    142: C                                              !BRIEF DESCRIPTIONS.
                    143:        SUPERF=.FALSE.
                    144:        CALL RSPEAK(326)
                    145:        RETURN
                    146: C
                    147: C V71--        VERBOSE.  CLEAR FLAGS.
                    148: C
                    149: 2000   BRIEFF=.FALSE.
                    150: C                                              !LONG DESCRIPTIONS.
                    151:        SUPERF=.FALSE.
                    152:        CALL RSPEAK(327)
                    153:        RETURN
                    154: C
                    155: C V72--        SUPERBRIEF.  SET FLAG.
                    156: C
                    157: 3000   SUPERF=.TRUE.
                    158:        CALL RSPEAK(328)
                    159:        RETURN
                    160: C
                    161: C V73-- STAY (USED IN ENDGAME).
                    162: C
                    163: 4000   IF(WINNER.NE.AMASTR) GO TO 4100
                    164: C                                              !TELL MASTER, STAY.
                    165:        CALL RSPEAK(781)
                    166: C                                              !HE DOES.
                    167:        CTICK(CEVFOL)=0
                    168: C                                              !NOT FOLLOWING.
                    169:        RETURN
                    170: C
                    171: 4100   IF(WINNER.EQ.PLAYER) CALL RSPEAK(664)
                    172: C                                              !JOKE.
                    173:        RETURN
                    174: C
                    175: C V74--        VERSION.  PRINT INFO.
                    176: C
                    177: #ifdef PDP
                    178: 5000   call prvers(vmaj,vmin,vedit)
                    179: #else
                    180: 5000   WRITE(OUTCH,5010) VMAJ,VMIN,VEDIT
                    181: #ifdef NOCC
                    182: 5010   FORMAT('V',I1,'.',I2,A1)
                    183: #else NOCC
                    184: 5010   FORMAT(' V',I1,'.',I2,A1)
                    185: #endif NOCC
                    186: #endif PDP
                    187:        TELFLG=.TRUE.
                    188:        RETURN
                    189: C
                    190: C V75--        SWIM.  ALWAYS A JOKE.
                    191: C
                    192: 6000   I=330
                    193: C                                              !ASSUME WATER.
                    194:        IF(and(RFLAG(HERE),(RWATER+RFILL)).EQ.0)
                    195: &              I=331+RND(3)
                    196:        CALL RSPEAK(I)
                    197:        RETURN
                    198: C
                    199: C V76--        GERONIMO.  IF IN BARREL, FATAL, ELSE JOKE.
                    200: C
                    201: 7000   IF(HERE.EQ.MBARR) GO TO 7100
                    202: C                                              !IN BARREL?
                    203:        CALL RSPEAK(334)
                    204: C                                              !NO, JOKE.
                    205:        RETURN
                    206: C
                    207: 7100   CALL JIGSUP(335)
                    208: C                                              !OVER FALLS.
                    209:        RETURN
                    210: C
                    211: C V77--        SINBAD ET AL.  CHASE CYCLOPS, ELSE JOKE.
                    212: C
                    213: 8000   IF((HERE.EQ.MCYCL).AND.QHERE(CYCLO,HERE)) GO TO 8100
                    214:        CALL RSPEAK(336)
                    215: C                                              !NOT HERE, JOKE.
                    216:        RETURN
                    217: C
                    218: 8100   CALL NEWSTA(CYCLO,337,0,0,0)
                    219: C                                              !CYCLOPS FLEES.
                    220:        CYCLOF=.TRUE.
                    221: C                                              !SET ALL FLAGS.
                    222:        MAGICF=.TRUE.
                    223:        OFLAG2(CYCLO)=and(OFLAG2(CYCLO), not(FITEBT))
                    224:        RETURN
                    225: C
                    226: C V78--        WELL.  OPEN DOOR, ELSE JOKE.
                    227: C
                    228: 9000   IF(RIDDLF.OR.(HERE.NE.RIDDL)) GO TO 9100
                    229: C                                              !IN RIDDLE ROOM?
                    230:        RIDDLF=.TRUE.
                    231: C                                              !YES, SOLVED IT.
                    232:        CALL RSPEAK(338)
                    233:        RETURN
                    234: C
                    235: 9100   CALL RSPEAK(339)
                    236: C                                              !WELL, WHAT?
                    237:        RETURN
                    238: C
                    239: C V79--        PRAY.  IF IN TEMP2, POOF
                    240: C                                              !
                    241: C
                    242: 10000  IF(HERE.NE.TEMP2) GO TO 10050
                    243: C                                              !IN TEMPLE?
                    244:        IF(MOVETO(FORE1,WINNER)) GO TO 10100
                    245: C                                              !FORE1 STILL THERE?
                    246: 10050  CALL RSPEAK(340)
                    247: C                                              !JOKE.
                    248:        RETURN
                    249: C
                    250: 10100  F=RMDESC(3)
                    251: C                                              !MOVED, DESCRIBE.
                    252:        RETURN
                    253: C
                    254: C V80--        TREASURE.  IF IN TEMP1, POOF
                    255: C                                              !
                    256: C
                    257: 11000  IF(HERE.NE.TEMP1) GO TO 11050
                    258: C                                              !IN TEMPLE?
                    259:        IF(MOVETO(TREAS,WINNER)) GO TO 10100
                    260: C                                              !TREASURE ROOM THERE?
                    261: 11050  CALL RSPEAK(341)
                    262: C                                              !NOTHING HAPPENS.
                    263:        RETURN
                    264: C
                    265: C V81--        TEMPLE.  IF IN TREAS, POOF
                    266: C                                              !
                    267: C
                    268: 12000  IF(HERE.NE.TREAS) GO TO 12050
                    269: C                                              !IN TREASURE?
                    270:        IF(MOVETO(TEMP1,WINNER)) GO TO 10100
                    271: C                                              !TEMP1 STILL THERE?
                    272: 12050  CALL RSPEAK(341)
                    273: C                                              !NOTHING HAPPENS.
                    274:        RETURN
                    275: C
                    276: C V82--        BLAST.  USUALLY A JOKE.
                    277: C
                    278: 13000  I=342
                    279: C                                              !DONT UNDERSTAND.
                    280:        IF(PRSO.EQ.SAFE) I=252
                    281: C                                              !JOKE FOR SAFE.
                    282:        CALL RSPEAK(I)
                    283:        RETURN
                    284: C
                    285: C V83--        SCORE.  PRINT SCORE.
                    286: C
                    287: 14000  CALL SCORE(.FALSE.)
                    288:        RETURN
                    289: C
                    290: C V84--        QUIT.  FINISH OUT THE GAME.
                    291: C
                    292: 15000  CALL SCORE(.TRUE.)
                    293: C                                              !TELLL SCORE.
                    294:        IF(.NOT.YESNO(343,0,0)) RETURN
                    295: C                                              !ASK FOR Y/N DECISION.
                    296: #ifdef PDP
                    297: C      close routine moved to exit for pdp version
                    298: #else
                    299:        CLOSE (DBCH)
                    300: #endif PDP
                    301:        CALL EXIT
                    302: C                                              !BYE.
                    303: C SVERBS, PAGE 4
                    304: C
                    305: C V85--        FOLLOW (USED IN ENDGAME)
                    306: C
                    307: 16000  IF(WINNER.NE.AMASTR) RETURN
                    308: C                                              !TELL MASTER, FOLLOW.
                    309:        CALL RSPEAK(782)
                    310:        CTICK(CEVFOL)=-1
                    311: C                                              !STARTS FOLLOWING.
                    312:        RETURN
                    313: C
                    314: C V86--        WALK THROUGH
                    315: C
                    316: 17000  IF((SCOLRM.EQ.0).OR.((PRSO.NE.SCOL).AND.
                    317: &              ((PRSO.NE.WNORT).OR.(HERE.NE.BKBOX)))) GO TO 17100
                    318:        SCOLAC=SCOLRM
                    319: C                                              !WALKED THRU SCOL.
                    320:        PRSO=0
                    321: C                                              !FAKE OUT FROMDR.
                    322:        CTICK(CEVSCL)=6
                    323: C                                              !START ALARM.
                    324:        CALL RSPEAK(668)
                    325: C                                              !DISORIENT HIM.
                    326:        F=MOVETO(SCOLRM,WINNER)
                    327: C                                              !INTO ROOM.
                    328:        F=RMDESC(3)
                    329: C                                              !DESCRIBE.
                    330:        RETURN
                    331: C
                    332: 17100  IF(HERE.NE.SCOLAC) GO TO 17300
                    333: C                                              !ON OTHER SIDE OF SCOL?
                    334:        DO 17200 I=1,12,3
                    335: C                                              !WALK THRU PROPER WALL?
                    336:          IF((SCOLWL(I).EQ.HERE).AND.(SCOLWL(I+1).EQ.PRSO))
                    337: &              GO TO 17500
                    338: 17200  CONTINUE
                    339: C
                    340: 17300  IF(and(OFLAG1(PRSO),TAKEBT).NE.0) GO TO 17400
                    341:        I=669
                    342: C                                              !NO, JOKE.
                    343:        IF(PRSO.EQ.SCOL) I=670
                    344: C                                              !SPECIAL JOKE FOR SCOL.
                    345:        CALL RSPSUB(I,ODO2)
                    346:        RETURN
                    347: C
                    348: 17400  I=671
                    349: C                                              !JOKE.
                    350:        IF(OROOM(PRSO).NE.0) I=552+RND(5)
                    351: C                                              !SPECIAL JOKES IF CARRY.
                    352:        CALL RSPEAK(I)
                    353:        RETURN
                    354: C
                    355: 17500  PRSO=SCOLWL(I+2)
                    356: C                                              !THRU SCOL WALL...
                    357:        DO 17600 I=1,8,2
                    358: C                                              !FIND MATCHING ROOM.
                    359:          IF(PRSO.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
                    360: 17600  CONTINUE
                    361: C                                              !DECLARE NEW SCOLRM.
                    362:        CTICK(CEVSCL)=0
                    363: C                                              !CANCEL ALARM.
                    364:        CALL RSPEAK(668)
                    365: C                                              !DISORIENT HIM.
                    366:        F=MOVETO(BKBOX,WINNER)
                    367: C                                              !BACK IN BOX ROOM.
                    368:        F=RMDESC(3)
                    369:        RETURN
                    370: C
                    371: C V87--        RING.  A JOKE.
                    372: C
                    373: 18000  I=359
                    374: C                                              !CANT RING.
                    375:        IF(PRSO.EQ.BELL) I=360
                    376: C                                              !DING, DONG.
                    377:        CALL RSPEAK(I)
                    378: C                                              !JOKE.
                    379:        RETURN
                    380: C
                    381: C V88--        BRUSH.  JOKE WITH OBSCURE TRAP.
                    382: C
                    383: 19000  IF(PRSO.EQ.TEETH) GO TO 19100
                    384: C                                              !BRUSH TEETH?
                    385:        CALL RSPEAK(362)
                    386: C                                              !NO, JOKE.
                    387:        RETURN
                    388: C
                    389: 19100  IF(PRSI.NE.0) GO TO 19200
                    390: C                                              !WITH SOMETHING?
                    391:        CALL RSPEAK(363)
                    392: C                                              !NO, JOKE.
                    393:        RETURN
                    394: C
                    395: 19200  IF((PRSI.EQ.PUTTY).AND.(OADV(PUTTY).EQ.WINNER))
                    396: &              GO TO 19300
                    397:        CALL RSPSUB(364,ODI2)
                    398: C                                              !NO, JOKE.
                    399:        RETURN
                    400: C
                    401: 19300  CALL JIGSUP(365)
                    402: C                                              !YES, DEAD
                    403: C                                              !
                    404: C                                              !
                    405: C                                              !
                    406: C                                              !
                    407: C                                              !
                    408:        RETURN
                    409: C SVERBS, PAGE 5
                    410: C
                    411: C V89--        DIG.  UNLESS SHOVEL, A JOKE.
                    412: C
                    413: 20000  IF(PRSO.EQ.SHOVE) RETURN
                    414: C                                              !SHOVEL?
                    415:        I=392
                    416: C                                              !ASSUME TOOL.
                    417:        IF(and(OFLAG1(PRSO),TOOLBT).EQ.0) I=393
                    418:        CALL RSPSUB(I,ODO2)
                    419:        RETURN
                    420: C
                    421: C V90--        TIME.  PRINT OUT DURATION OF GAME.
                    422: C
                    423: #ifdef PDP
                    424: C      no duration time available for pdp version (removed
                    425: C      to make things fit)
                    426: 21000  TELFLG=.TRUE.
                    427:        RETURN
                    428: #else
                    429: 21000  CALL GTTIME(K)
                    430: C                                              !GET PLAY TIME.
                    431:        I=K/60
                    432:        J=MOD(K,60)
                    433: C
                    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
                    443: C
                    444: 21010  FORMAT('You have been playing Dungeon for ',I2,' minute.')
                    445: 21011  FORMAT('You have been playing Dungeon for ',I2,' minutes.')
                    446: 21012  FORMAT('You have been playing Dungeon for ',I3,' hour and ',
                    447: &              I2,' minute.')
                    448: 21013  FORMAT('You have been playing Dungeon for ',I3,' hour and ',
                    449: &              I2,' minutes.')
                    450: 21014  FORMAT('You have been playing Dungeon for ',I3,' hours and ',
                    451: &              I2,' minute.')
                    452: 21015  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
                    463: C
                    464: 21010  FORMAT(' You have been playing Dungeon for ',$)
                    465: 21011  FORMAT('+',I3,' hour',$)
                    466: 21012  FORMAT('+s and ',$)
                    467: 21013  FORMAT('+ and ',$)
                    468: 21014  FORMAT('+',I2,' minute.')
                    469: 21015  FORMAT('+',I2,' minutes.')
                    470: #endif NOCC
                    471: #endif PDP
                    472: C
                    473: C V91--        LEAP.  USUALLY A JOKE, WITH A CATCH.
                    474: C
                    475: 22000  IF(PRSO.EQ.0) GO TO 22200
                    476: C                                              !OVER SOMETHING?
                    477:        IF(QHERE(PRSO,HERE)) GO TO 22100
                    478: C                                              !HERE?
                    479:        CALL RSPEAK(447)
                    480: C                                              !NO, JOKE.
                    481:        RETURN
                    482: C
                    483: 22100  IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 22300
                    484:        CALL RSPSUB(448,ODO2)
                    485: C                                              !CANT JUMP VILLAIN.
                    486:        RETURN
                    487: C
                    488: 22200  IF(.NOT.FINDXT(XDOWN,HERE)) GO TO 22300
                    489: C                                              !DOWN EXIT?
                    490:        IF((XTYPE.EQ.XNO).OR.((XTYPE.EQ.XCOND).AND.
                    491: &              .NOT.FLAGS(XFLAG))) GO TO 22400
                    492: 22300  CALL RSPEAK(314+RND(5))
                    493: C                                              !WHEEEE
                    494: C                                              !
                    495:        RETURN
                    496: C
                    497: 22400  CALL JIGSUP(449+RND(4))
                    498: C                                              !FATAL LEAP.
                    499:        RETURN
                    500: C SVERBS, PAGE 6
                    501: C
                    502: C V92--        LOCK.
                    503: C
                    504: 23000  IF((PRSO.EQ.GRATE).AND.(HERE.EQ.MGRAT))
                    505: &              GO TO 23200
                    506: 23100  CALL RSPEAK(464)
                    507: C                                              !NOT LOCK GRATE.
                    508:        RETURN
                    509: C
                    510: 23200  GRUNLF=.FALSE.
                    511: C                                              !GRATE NOW LOCKED.
                    512:        CALL RSPEAK(214)
                    513:        TRAVEL(REXIT(HERE)+1)=214
                    514: C                                              !CHANGE EXIT STATUS.
                    515:        RETURN
                    516: C
                    517: C V93--        UNLOCK
                    518: C
                    519: 24000  IF((PRSO.NE.GRATE).OR.(HERE.NE.MGRAT))
                    520: &              GO TO 23100
                    521:        IF(PRSI.EQ.KEYS) GO TO 24200
                    522: C                                              !GOT KEYS?
                    523:        CALL RSPSUB(465,ODI2)
                    524: C                                              !NO, JOKE.
                    525:        RETURN
                    526: C
                    527: 24200  GRUNLF=.TRUE.
                    528: C                                              !UNLOCK GRATE.
                    529:        CALL RSPEAK(217)
                    530:        TRAVEL(REXIT(HERE)+1)=217
                    531: C                                              !CHANGE EXIT STATUS.
                    532:        RETURN
                    533: C
                    534: C V94--        DIAGNOSE.
                    535: C
                    536: 25000  I=FIGHTS(WINNER,.FALSE.)
                    537: C                                              !GET FIGHTS STRENGTH.
                    538:        J=ASTREN(WINNER)
                    539: C                                              !GET HEALTH.
                    540:        K=MIN0(I+J,4)
                    541: C                                              !GET STATE.
                    542:        IF(.NOT.CFLAG(CEVCUR)) J=0
                    543: C                                              !IF NO WOUNDS.
                    544:        L=MIN0(4,IABS(J))
                    545: C                                              !SCALE.
                    546:        CALL RSPEAK(473+L)
                    547: C                                              !DESCRIBE HEALTH.
                    548:        I=(30*(-J-1))+CTICK(CEVCUR)
                    549: C                                              !COMPUTE WAIT.
                    550: C
                    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
                    556: 25100  FORMAT('You will be cured after ',I3,' moves.')
                    557: #else NOCC
                    558: 25100  FORMAT(' You will be cured after ',I3,' moves.')
                    559: #endif NOCC
                    560: #endif PDP
                    561: C
                    562:        CALL RSPEAK(478+K)
                    563: C                                              !HOW MUCH MORE?
                    564:        IF(DEATHS.NE.0) CALL RSPEAK(482+DEATHS)
                    565: C                                              !HOW MANY DEATHS?
                    566:        RETURN
                    567: C SVERBS, PAGE 7
                    568: C
                    569: C V95--        INCANT
                    570: C
                    571: 26000  DO 26100 I=1,6
                    572: C                                              !SET UP PARSE.
                    573:          PP1(I)=' '
                    574:          PP2(I)=' '
                    575: 26100  CONTINUE
                    576:        WP=1
                    577: C                                              !WORD POINTER.
                    578:        CP=1
                    579: C                                              !CHAR POINTER.
                    580:        IF(PRSCON.LE.1) GO TO 26300
                    581:        DO 26200 I=PRSCON,INLNT
                    582: C                                              !PARSE INPUT
                    583:          IF(INBUF(I).EQ.',') GO TO 26300
                    584: C                                              !END OF PHRASE?
                    585:          IF(INBUF(I).NE.' ') GO TO 26150
                    586: C                                              !SPACE?
                    587:          IF(CP.NE.1) WP=WP+1
                    588:          CP=1
                    589:          GO TO 26200
                    590: 26150    IF(WP.EQ.1) PP1(CP)=INBUF(I)
                    591: C                                              !STUFF INTO HOLDER.
                    592:          IF(WP.EQ.2) PP2(CP)=INBUF(I)
                    593:          CP=MIN0(CP+1,6)
                    594: 26200  CONTINUE
                    595: C
                    596: 26300  PRSCON=1
                    597: C                                              !KILL REST OF LINE.
                    598:        IF(PP1(1).NE.' ') GO TO 26400
                    599: C                                              !ANY INPUT?
                    600:        CALL RSPEAK(856)
                    601: C                                              !NO, HO HUM.
                    602:        RETURN
                    603: C
                    604: 26400  CALL ENCRYP(PP1,CH)
                    605: C                                              !COMPUTE RESPONSE.
                    606:        IF(PP2(1).NE.' ') GO TO 26600
                    607: C                                              !TWO PHRASES?
                    608: C
                    609:        IF(SPELLF) GO TO 26550
                    610: C                                              !HE'S TRYING TO LEARN.
                    611:        IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 26575
                    612:        SPELLF=.TRUE.
                    613: C                                              !TELL HIM.
                    614:        TELFLG=.TRUE.
                    615: #ifdef PDP
                    616:        call voice(PP1,CH)
                    617: #else
                    618:        WRITE(OUTCH,26510) PP1,CH
                    619: #ifdef NOCC
                    620: 26510  FORMAT('A hollow voice replies:  "',6A1,1X,6A1,'".')
                    621: #else NOCC
                    622: 26510  FORMAT(' A hollow voice replies:  "',6A1,1X,6A1,'".')
                    623: #endif NOCC
                    624: #endif PDP
                    625: C
                    626:        RETURN
                    627: C
                    628: 26550  CALL RSPEAK(857)
                    629: C                                              !HE'S GOT ONE ALREADY.
                    630:        RETURN
                    631: C
                    632: 26575  CALL RSPEAK(858)
                    633: C                                              !HE'S NOT IN ENDGAME.
                    634:        RETURN
                    635: C
                    636: 26600  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
                    639: C                                              !WRONG.
                    640: 26700  CONTINUE
                    641:        SPELLF=.TRUE.
                    642: C                                              !IT WORKS.
                    643:        CALL RSPEAK(859)
                    644:        CTICK(CEVSTE)=1
                    645: C                                              !FORCE START.
                    646:        RETURN
                    647: C
                    648: 26800  CALL RSPEAK(855)
                    649: C                                              !TOO LATE.
                    650:        RETURN
                    651: C SVERBS, PAGE 8
                    652: C
                    653: C V96--        ANSWER
                    654: C
                    655: 27000  IF((PRSCON.GT.1).AND.
                    656: &              (HERE.EQ.FDOOR).AND.INQSTF)
                    657: &              GO TO 27100
                    658:        CALL RSPEAK(799)
                    659: C                                              !NO ONE LISTENS.
                    660:        PRSCON=1
                    661:        RETURN
                    662: C
                    663: 27100  K=1
                    664: C                                              !POINTER INTO ANSSTR.
                    665:        DO 27300 J=1,28,2
                    666: C                                              !CHECK ANSWERS.
                    667:          NEWK=K+ANSWER(J+1)
                    668: C                                              !COMPUTE NEXT K.
                    669:          IF(QUESNO.NE.ANSWER(J)) GO TO 27300
                    670: C                                              !ONLY CHECK PROPER ANS.
                    671:          I=PRSCON-1
                    672: C                                              !SCAN ANSWER.
                    673:          DO 27200 L=K,NEWK-1
                    674: 27150      I=I+1
                    675: C                                              !SKIP INPUT BLANKS.
                    676:            IF(I.GT.INLNT) GO TO 27300
                    677: C                                              !END OF INPUT? LOSE.
                    678:            IF(INBUF(I).EQ.' ') GO TO 27150
                    679:            IF(INBUF(I).NE.ANSSTR(L)) GO TO 27300
                    680: 27200    CONTINUE
                    681:          GO TO 27500
                    682: C                                              !RIGHT ANSWER.
                    683: 27300  K=NEWK
                    684: C
                    685:        PRSCON=1
                    686: C                                              !KILL REST OF LINE.
                    687:        NQATT=NQATT+1
                    688: C                                              !WRONG, CRETIN.
                    689:        IF(NQATT.GE.5) GO TO 27400
                    690: C                                              !TOO MANY WRONG?
                    691:        CALL RSPEAK(800+NQATT)
                    692: C                                              !NO, TRY AGAIN.
                    693:        RETURN
                    694: C
                    695: 27400  CALL RSPEAK(826)
                    696: C                                              !ALL OVER.
                    697:        CFLAG(CEVINQ)=.FALSE.
                    698: C                                              !LOSE.
                    699:        RETURN
                    700: C
                    701: 27500  PRSCON=1
                    702: C                                              !KILL REST OF LINE.
                    703:        CORRCT=CORRCT+1
                    704: C                                              !GOT IT RIGHT.
                    705:        CALL RSPEAK(800)
                    706: C                                              !HOORAY.
                    707:        IF(CORRCT.GE.3) GO TO 27600
                    708: C                                              !WON TOTALLY?
                    709:        CTICK(CEVINQ)=2
                    710: C                                              !NO, START AGAIN.
                    711:        QUESNO=MOD(QUESNO+3,8)
                    712:        NQATT=0
                    713:        CALL RSPEAK(769)
                    714: C                                              !ASK NEXT QUESTION.
                    715:        CALL RSPEAK(770+QUESNO)
                    716:        RETURN
                    717: C
                    718: 27600  CALL RSPEAK(827)
                    719: C                                              !QUIZ OVER,
                    720:        CFLAG(CEVINQ)=.FALSE.
                    721:        OFLAG2(QDOOR)=or(OFLAG2(QDOOR),OPENBT)
                    722:        RETURN
                    723: C
                    724:        END

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.