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

1.1       root        1: C VAPPLI- MAIN VERB PROCESSING ROUTINE
                      2: C
                      3: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
                      4: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
                      5: C WRITTEN BY R. M. SUPNIK
                      6: C
                      7: C DECLARATIONS
                      8: C
                      9:        LOGICAL FUNCTION VAPPLI(RI)
                     10:        IMPLICIT INTEGER (A-Z)
                     11:        LOGICAL LIT,OBJACT
                     12:        LOGICAL QEMPTY,RMDESC,CLOCKD
                     13:        LOGICAL QOPEN,EDIBLE,DRKBLE
                     14:        LOGICAL TAKE,PUT,DROP,WALK
                     15:        LOGICAL QHERE,SVERBS,FINDXT,OAPPLI,F
                     16: #include "parser.h"
                     17: #include "gamestate.h"
                     18: #include "state.h"
                     19: C
                     20:        COMMON /STAR/ MBASE,STRBIT
                     21: #include "rooms.h"
                     22: #include "rflag.h"
                     23: #include "rindex.h"
                     24: #include "xsrch.h"
                     25: #include "objects.h"
                     26: #include "oflags.h"
                     27: #include "oindex.h"
                     28: #include "advers.h"
                     29: #include "verbs.h"
                     30: C
                     31: C FUNCTIONS AND DATA
                     32: C
                     33:        QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
                     34:        EDIBLE(R)=and(OFLAG1(R),FOODBT).NE.0
                     35:        DRKBLE(R)=and(OFLAG1(R),DRNKBT).NE.0
                     36:        DATA MXNOP/39/,MXSMP/99/
                     37: C VAPPLI, PAGE 2
                     38: C
                     39:        VAPPLI=.TRUE.
                     40: C                                              !ASSUME WINS.
                     41: C
                     42:        IF(PRSO.GT.220) GO TO 5
                     43: C
                     44:        IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
                     45: C                                              !SET UP DESCRIPTORS.
                     46: 5      IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
                     47:        AV=AVEHIC(WINNER)
                     48:        RMK=372+RND(6)
                     49: C                                              !REMARK FOR HACK-HACKS.
                     50: C
                     51:        IF(RI.EQ.0) GO TO 10
                     52: C                                              !ZERO IS FALSE.
                     53:        IF(RI.LE.MXNOP) RETURN
                     54: C                                              !NOP?
                     55:        IF(RI.LE.MXSMP) GO TO 100
                     56: C                                              !SIMPLE VERB?
                     57:        GO TO (18000,20000,
                     58: &             22000,23000,24000,25000,26000,27000,28000,29000,30000,
                     59: &       31000,32000,33000,34000,35000,36000,      38000,39000,40000,
                     60: &       41000,42000,43000,44000,45000,46000,47000,48000,49000,50000,
                     61: &       51000,52000,53000,      55000,56000,      58000,59000,60000,
                     62: &                   63000,64000,65000,66000,      68000,69000,70000,
                     63: &       71000,72000,73000,74000,            77000,78000,
                     64: &       80000,81000,82000,83000,84000,85000,86000,87000,88000),
                     65: &              (RI-MXSMP)
                     66:        CALL BUG(7,RI)
                     67: C
                     68: C ALL VERB PROCESSORS RETURN HERE TO DECLARE FAILURE.
                     69: C
                     70: 10     VAPPLI=.FALSE.
                     71: C                                              !LOSE.
                     72:        RETURN
                     73: C
                     74: C SIMPLE VERBS ARE HANDLED EXTERNALLY.
                     75: C
                     76: 100    VAPPLI=SVERBS(RI)
                     77:        RETURN
                     78: C VAPPLI, PAGE 3
                     79: C
                     80: C V100--       READ.  OUR FIRST REAL VERB.
                     81: C
                     82: 18000  IF(LIT(HERE)) GO TO 18100
                     83: C                                              !ROOM LIT?
                     84:        CALL RSPEAK(356)
                     85: C                                              !NO, CANT READ.
                     86:        RETURN
                     87: C
                     88: 18100  IF(PRSI.EQ.0) GO TO 18200
                     89: C                                              !READ THROUGH OBJ?
                     90:        IF(and(OFLAG1(PRSI),TRANBT).NE.0) GO TO 18200
                     91:        CALL RSPSUB(357,ODI2)
                     92: C                                              !NOT TRANSPARENT.
                     93:        RETURN
                     94: C
                     95: 18200  IF(and(OFLAG1(PRSO),READBT).NE.0) GO TO 18300
                     96:        CALL RSPSUB(358,ODO2)
                     97: C                                              !NOT READABLE.
                     98:        RETURN
                     99: C
                    100: 18300  IF(.NOT.OBJACT(X)) CALL RSPEAK(OREAD(PRSO))
                    101:        RETURN
                    102: C
                    103: C V101--       MELT.  UNLESS OBJECT HANDLES, JOKE.
                    104: C
                    105: 20000  IF(.NOT.OBJACT(X)) CALL RSPSUB(361,ODO2)
                    106:        RETURN
                    107: C
                    108: C V102--       INFLATE.  WORKS ONLY WITH BOATS.
                    109: C
                    110: 22000  IF(.NOT.OBJACT(X)) CALL RSPEAK(368)
                    111: C                                              !OBJ HANDLE?
                    112:        RETURN
                    113: C
                    114: C V103--       DEFLATE.
                    115: C
                    116: 23000  IF(.NOT.OBJACT(X)) CALL RSPEAK(369)
                    117: C                                              !OBJ HANDLE?
                    118:        RETURN
                    119: C VAPPLI, PAGE 4
                    120: C
                    121: C V104--       ALARM.  IF SLEEPING, WAKE HIM UP.
                    122: C
                    123: 24000  IF(and(OFLAG2(PRSO),SLEPBT).EQ.0) GO TO 24100
                    124:        VAPPLI=OBJACT(X)
                    125: C                                              !SLEEPING, LET OBJ DO.
                    126:        RETURN
                    127: C
                    128: 24100  CALL RSPSUB(370,ODO2)
                    129: C                                              !JOKE.
                    130:        RETURN
                    131: C
                    132: C V105--       EXORCISE.  OBJECTS HANDLE.
                    133: C
                    134: 25000  F=OBJACT(X)
                    135: C                                              !OBJECTS HANDLE.
                    136:        RETURN
                    137: C
                    138: C V106--       PLUG.  LET OBJECTS HANDLE.
                    139: C
                    140: 26000  IF(.NOT.OBJACT(X)) CALL RSPEAK(371)
                    141:        RETURN
                    142: C
                    143: C V107--       KICK.  IF OBJECT IGNORES, JOKE.
                    144: C
                    145: 27000  IF(.NOT.OBJACT(X)) CALL RSPSB2(378,ODO2,RMK)
                    146:        RETURN
                    147: C
                    148: C V108--       WAVE.  SAME.
                    149: C
                    150: 28000  IF(.NOT.OBJACT(X)) CALL RSPSB2(379,ODO2,RMK)
                    151:        RETURN
                    152: C
                    153: C V109,V110--  RAISE, LOWER.  SAME.
                    154: C
                    155: 29000  CONTINUE
                    156: 30000  IF(.NOT.OBJACT(X)) CALL RSPSB2(380,ODO2,RMK)
                    157:        RETURN
                    158: C
                    159: C V111--       RUB.  SAME.
                    160: C
                    161: 31000  IF(.NOT.OBJACT(X)) CALL RSPSB2(381,ODO2,RMK)
                    162:        RETURN
                    163: C
                    164: C V112--       PUSH.  SAME.
                    165: C
                    166: 32000  IF(.NOT.OBJACT(X)) CALL RSPSB2(382,ODO2,RMK)
                    167:        RETURN
                    168: C VAPPLI, PAGE 5
                    169: C
                    170: C V113--       UNTIE.  IF OBJECT IGNORES, JOKE.
                    171: C
                    172: 33000  IF(OBJACT(X)) RETURN
                    173: C                                              !OBJECT HANDLE?
                    174:        I=383
                    175: C                                              !NO, NOT TIED.
                    176:        IF(and(OFLAG2(PRSO),TIEBT).EQ.0) I=384
                    177:        CALL RSPEAK(I)
                    178:        RETURN
                    179: C
                    180: C V114--       TIE.  NEVER REALLY WORKS.
                    181: C
                    182: 34000  IF(and(OFLAG2(PRSO),TIEBT).NE.0) GO TO 34100
                    183:        CALL RSPEAK(385)
                    184: C                                              !NOT TIEABLE.
                    185:        RETURN
                    186: C
                    187: 34100  IF(.NOT.OBJACT(X)) CALL RSPSUB(386,ODO2)
                    188: C                                              !JOKE.
                    189:        RETURN
                    190: C
                    191: C V115--       TIE UP.  NEVER REALLY WORKS.
                    192: C
                    193: 35000  IF(and(OFLAG2(PRSI),TIEBT).NE.0) GO TO 35100
                    194:        CALL RSPSUB(387,ODO2)
                    195: C                                              !NOT TIEABLE.
                    196:        RETURN
                    197: C
                    198: 35100  I=388
                    199: C                                              !ASSUME VILLAIN.
                    200:        IF(and(OFLAG2(PRSO),VILLBT).EQ.0) I=389
                    201:        CALL RSPSUB(I,ODO2)
                    202: C                                              !JOKE.
                    203:        RETURN
                    204: C
                    205: C V116--       TURN.  OBJECT MUST HANDLE.
                    206: C
                    207: 36000  IF(and(OFLAG1(PRSO),TURNBT).NE.0) GO TO 36100
                    208:        CALL RSPEAK(390)
                    209: C                                              !NOT TURNABLE.
                    210:        RETURN
                    211: C
                    212: 36100  IF(and(OFLAG1(PRSI),TOOLBT).NE.0) GO TO 36200
                    213:        CALL RSPSUB(391,ODI2)
                    214: C                                              !NOT A TOOL.
                    215:        RETURN
                    216: C
                    217: 36200  VAPPLI=OBJACT(X)
                    218: C                                              !LET OBJECT HANDLE.
                    219:        RETURN
                    220: C
                    221: C V117--       BREATHE.  BECOMES INFLATE WITH LUNGS.
                    222: C
                    223: 38000  PRSA=INFLAW
                    224:        PRSI=LUNGS
                    225:        GO TO 22000
                    226: C                                              !HANDLE LIKE INFLATE.
                    227: C
                    228: C V118--       KNOCK.  MOSTLY JOKE.
                    229: C
                    230: 39000  IF(OBJACT(X)) RETURN
                    231: C                                              !OBJ HANDLE?
                    232:        I=394
                    233: C                                              !JOKE FOR DOOR.
                    234:        IF(and(OFLAG1(PRSO),DOORBT).EQ.0) I=395
                    235:        CALL RSPSUB(I,ODO2)
                    236: C                                              !JOKE FOR NONDOORS TOO.
                    237:        RETURN
                    238: C
                    239: C V119--       LOOK.
                    240: C
                    241: 40000  IF(PRSO.NE.0) GO TO 41500
                    242: C                                              !SOMETHING TO LOOK AT?
                    243:        VAPPLI=RMDESC(3)
                    244: C                                              !HANDLED BY RMDESC.
                    245:        RETURN
                    246: C
                    247: C V120--       EXAMINE.
                    248: C
                    249: 41000  IF(PRSO.NE.0) GO TO 41500
                    250: C                                              !SOMETHING TO EXAMINE?
                    251:        VAPPLI=RMDESC(0)
                    252: C                                              !HANDLED BY RMDESC.
                    253:        RETURN
                    254: C
                    255: 41500  IF(OBJACT(X)) RETURN
                    256: C                                              !OBJ HANDLE?
                    257:        I=OREAD(PRSO)
                    258: C                                              !GET READING MATERIAL.
                    259:        IF(I.NE.0) CALL RSPEAK(I)
                    260: C                                              !OUTPUT IF THERE,
                    261:        IF(I.EQ.0) CALL RSPSUB(429,ODO2)
                    262: C                                              !OTHERWISE DEFAULT.
                    263:        PRSA=FOOW
                    264: C                                              !DEFUSE ROOM PROCESSORS.
                    265:        RETURN
                    266: C
                    267: C V121--       SHAKE.  IF HOLLOW OBJECT, SOME ACTION.
                    268: C
                    269: 42000  IF(OBJACT(X)) RETURN
                    270: C                                              !OBJECT HANDLE?
                    271:        IF(and(OFLAG2(PRSO),VILLBT).EQ.0) GO TO 42100
                    272:        CALL RSPEAK(371)
                    273: C                                              !JOKE FOR VILLAINS.
                    274:        RETURN
                    275: C
                    276: 42100  IF(QEMPTY(PRSO).OR.(and(OFLAG1(PRSO),TAKEBT).EQ.0))
                    277: &              GO TO 10
                    278:        IF(QOPEN(PRSO)) GO TO 42300
                    279: C                                              !OPEN?  SPILL.
                    280:        CALL RSPSUB(396,ODO2)
                    281: C                                              !NO, DESCRIBE NOISE.
                    282:        RETURN
                    283: C
                    284: 42300  CALL RSPSUB(397,ODO2)
                    285: C                                              !SPILL THE WORKS.
                    286:        DO 42500 I=1,OLNT
                    287: C                                              !SPILL CONTENTS.
                    288:          IF(OCAN(I).NE.PRSO) GO TO 42500
                    289: C                                              !INSIDE?
                    290:          OFLAG2(I)=or(OFLAG2(I),TCHBT)
                    291:          IF(AV.EQ.0) GO TO 42400
                    292: C                                              !IN VEHICLE?
                    293:          CALL NEWSTA(I,0,0,AV,0)
                    294: C                                              !YES, SPILL IN THERE.
                    295:          GO TO 42500
                    296: C
                    297: 42400    CALL NEWSTA(I,0,HERE,0,0)
                    298: C                                              !NO, SPILL ON FLOOR,
                    299:          IF(I.EQ.WATER) CALL NEWSTA(I,133,0,0,0)
                    300: C                                              !BUT WATER DISAPPEARS.
                    301: 42500  CONTINUE
                    302:        RETURN
                    303: C
                    304: C V122--       MOVE.  MOSTLY JOKES.
                    305: C
                    306: 43000  IF(OBJACT(X)) RETURN
                    307: C                                              !OBJ HANDLE?
                    308:        I=398
                    309: C                                              !ASSUME NOT HERE.
                    310:        IF(QHERE(PRSO,HERE)) I=399
                    311:        CALL RSPSUB(I,ODO2)
                    312: C                                              !JOKE.
                    313:        RETURN
                    314: C VAPPLI, PAGE 6
                    315: C
                    316: C V123--       TURN ON.
                    317: C
                    318: 44000  F=LIT(HERE)
                    319: C                                              !RECORD IF LIT.
                    320:        IF(OBJACT(X)) GO TO 44300
                    321: C                                              !OBJ HANDLE?
                    322:        IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
                    323: &              (OADV(PRSO).EQ.WINNER)) GO TO 44100
                    324:        CALL RSPEAK(400)
                    325: C                                              !CANT DO IT.
                    326:        RETURN
                    327: C
                    328: 44100  IF(and(OFLAG1(PRSO),ONBT).EQ.0) GO TO 44200
                    329:        CALL RSPEAK(401)
                    330: C                                              !ALREADY ON.
                    331:        RETURN
                    332: C
                    333: 44200  OFLAG1(PRSO)=or(OFLAG1(PRSO),ONBT)
                    334:        CALL RSPSUB(404,ODO2)
                    335: 44300  IF(.NOT.F .AND.LIT(HERE)) F=RMDESC(0)
                    336: C                                              !ROOM NEWLY LIT.
                    337:        RETURN
                    338: C
                    339: C V124--       TURN OFF.
                    340: C
                    341: 45000  IF(OBJACT(X)) GO TO 45300
                    342: C                                              !OBJ HANDLE?
                    343:        IF((and(OFLAG1(PRSO),LITEBT).NE.0).AND.
                    344: &              (OADV(PRSO).EQ.WINNER)) GO TO 45100
                    345:        CALL RSPEAK(402)
                    346: C                                              !CANT DO IT.
                    347:        RETURN
                    348: C
                    349: 45100  IF(and(OFLAG1(PRSO),ONBT).NE.0) GO TO 45200
                    350:        CALL RSPEAK(403)
                    351: C                                              !ALREADY OFF.
                    352:        RETURN
                    353: C
                    354: 45200  OFLAG1(PRSO)=and(OFLAG1(PRSO), not(ONBT))
                    355:        CALL RSPSUB(405,ODO2)
                    356: 45300  IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
                    357: C                                              !MAY BE DARK.
                    358:        RETURN
                    359: C
                    360: C V125--       OPEN.  A FINE MESS.
                    361: C
                    362: 46000  IF(OBJACT(X)) RETURN
                    363: C                                              !OBJ HANDLE?
                    364:        IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 46100
                    365: 46050  CALL RSPSUB(407,ODO2)
                    366: C                                              !NOT OPENABLE.
                    367:        RETURN
                    368: C
                    369: 46100  IF(OCAPAC(PRSO).NE.0) GO TO 46200
                    370:        CALL RSPSUB(408,ODO2)
                    371: C                                              !NOT OPENABLE.
                    372:        RETURN
                    373: C
                    374: 46200  IF(.NOT.QOPEN(PRSO)) GO TO 46225
                    375:        CALL RSPEAK(412)
                    376: C                                              !ALREADY OPEN.
                    377:        RETURN
                    378: C
                    379: 46225  OFLAG2(PRSO)=or(OFLAG2(PRSO),OPENBT)
                    380:        IF((and(OFLAG1(PRSO),TRANBT).NE.0).OR.QEMPTY(PRSO))
                    381: &              GO TO 46300
                    382:        CALL PRINCO(PRSO,410)
                    383: C                                              !PRINT CONTENTS.
                    384:        RETURN
                    385: C
                    386: 46300  CALL RSPEAK(409)
                    387: C                                              !DONE
                    388:        RETURN
                    389: C
                    390: C V126--       CLOSE.
                    391: C
                    392: 47000  IF(OBJACT(X)) RETURN
                    393: C                                              !OBJ HANDLE?
                    394:        IF(and(OFLAG1(PRSO),CONTBT).EQ.0) GO TO 46050
                    395:        IF(OCAPAC(PRSO).NE.0) GO TO 47100
                    396:        CALL RSPSUB(411,ODO2)
                    397: C                                              !NOT CLOSABLE.
                    398:        RETURN
                    399: C
                    400: 47100  IF(QOPEN(PRSO)) GO TO 47200
                    401: C                                              !OPEN?
                    402:        CALL RSPEAK(413)
                    403: C                                              !NO, JOKE.
                    404:        RETURN
                    405: C
                    406: 47200  OFLAG2(PRSO)=and(OFLAG2(PRSO), not(OPENBT))
                    407:        CALL RSPEAK(414)
                    408: C                                              !DONE.
                    409:        RETURN
                    410: C VAPPLI, PAGE 7
                    411: C
                    412: C V127--       FIND.  BIG MEGILLA.
                    413: C
                    414: 48000  IF(OBJACT(X)) RETURN
                    415: C                                              !OBJ HANDLE?
                    416:        I=415
                    417: C                                              !DEFAULT CASE.
                    418:        IF(QHERE(PRSO,HERE)) GO TO 48300
                    419: C                                              !IN ROOM?
                    420:        IF(OADV(PRSO).EQ.WINNER) GO TO 48200
                    421: C                                              !ON WINNER?
                    422:        J=OCAN(PRSO)
                    423: C                                              !DOWN ONE LEVEL.
                    424:        IF(J.EQ.0) GO TO 10
                    425:        IF(((and(OFLAG1(J),TRANBT).EQ.0).AND.
                    426: &       (.NOT.QOPEN(J).OR.(and(OFLAG1(J),(DOORBT+CONTBT)).EQ.0))))
                    427: &              GO TO 10
                    428:        I=417
                    429: C                                              !ASSUME IN ROOM.
                    430:        IF(QHERE(J,HERE)) GO TO 48100
                    431:        IF(OADV(J).NE.WINNER) GO TO 10
                    432: C                                              !NOT HERE OR ON PERSON.
                    433:        I=418
                    434: 48100  CALL RSPSUB(I,ODESC2(J))
                    435: C                                              !DESCRIBE FINDINGS.
                    436:        RETURN
                    437: C
                    438: 48200  I=416
                    439: 48300  CALL RSPSUB(I,ODO2)
                    440: C                                              !DESCRIBE FINDINGS.
                    441:        RETURN
                    442: C
                    443: C V128--       WAIT.  RUN CLOCK DEMON.
                    444: C
                    445: 49000  CALL RSPEAK(419)
                    446: C                                              !TIME PASSES.
                    447:        DO 49100 I=1,3
                    448:          IF(CLOCKD(X)) RETURN
                    449: 49100  CONTINUE
                    450:        RETURN
                    451: C
                    452: C V129--       SPIN.
                    453: C V159--       TURN TO.
                    454: C
                    455: 50000  CONTINUE
                    456: 88000  IF(.NOT.OBJACT(X)) CALL RSPEAK(663)
                    457: C                                              !IF NOT OBJ, JOKE.
                    458:        RETURN
                    459: C
                    460: C V130--       BOARD.  WORKS WITH VEHICLES.
                    461: C
                    462: 51000  IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 51100
                    463:        CALL RSPSUB(421,ODO2)
                    464: C                                              !NOT VEHICLE, JOKE.
                    465:        RETURN
                    466: C
                    467: 51100  IF(QHERE(PRSO,HERE)) GO TO 51200
                    468: C                                              !HERE?
                    469:        CALL RSPSUB(420,ODO2)
                    470: C                                              !NO, JOKE.
                    471:        RETURN
                    472: C
                    473: 51200  IF(AV.EQ.0) GO TO 51300
                    474: C                                              !ALREADY GOT ONE?
                    475:        CALL RSPSUB(422,ODO2)
                    476: C                                              !YES, JOKE.
                    477:        RETURN
                    478: C
                    479: 51300  IF(OBJACT(X)) RETURN
                    480: C                                              !OBJ HANDLE?
                    481:        CALL RSPSUB(423,ODO2)
                    482: C                                              !DESCRIBE.
                    483:        AVEHIC(WINNER)=PRSO
                    484:        IF(WINNER.NE.PLAYER) OCAN(AOBJ(WINNER))=PRSO
                    485:        RETURN
                    486: C
                    487: C V131--       DISEMBARK.
                    488: C
                    489: 52000  IF(AV.EQ.PRSO) GO TO 52100
                    490: C                                              !FROM VEHICLE?
                    491:        CALL RSPEAK(424)
                    492: C                                              !NO, JOKE.
                    493:        RETURN
                    494: C
                    495: 52100  IF(OBJACT(X)) RETURN
                    496: C                                              !OBJ HANDLE?
                    497:        IF(and(RFLAG(HERE),RLAND).NE.0) GO TO 52200
                    498:        CALL RSPEAK(425)
                    499: C                                              !NOT ON LAND.
                    500:        RETURN
                    501: C
                    502: 52200  AVEHIC(WINNER)=0
                    503:        CALL RSPEAK(426)
                    504:        IF(WINNER.NE.PLAYER) CALL NEWSTA(AOBJ(WINNER),0,HERE,0,0)
                    505:        RETURN
                    506: C
                    507: C V132--       TAKE.  HANDLED EXTERNALLY.
                    508: C
                    509: 53000  VAPPLI=TAKE(.TRUE.)
                    510:        RETURN
                    511: C
                    512: C V133--       INVENTORY.  PROCESSED EXTERNALLY.
                    513: C
                    514: 55000  CALL INVENT(WINNER)
                    515:        RETURN
                    516: C VAPPLI, PAGE 8
                    517: C
                    518: C V134--       FILL.  STRANGE DOINGS WITH WATER.
                    519: C
                    520: 56000  IF(PRSI.NE.0) GO TO 56050
                    521: C                                              !ANY OBJ SPECIFIED?
                    522:        IF(and(RFLAG(HERE),(RWATER+RFILL)).NE.0) GO TO 56025
                    523:        CALL RSPEAK(516)
                    524: C                                              !NOTHING TO FILL WITH.
                    525:        PRSWON=.FALSE.
                    526: C                                              !YOU LOSE.
                    527:        RETURN
                    528: C
                    529: 56025  PRSI=GWATE
                    530: C                                              !USE GLOBAL WATER.
                    531: 56050  IF(OBJACT(X)) RETURN
                    532: C                                              !OBJ HANDLE?
                    533:        IF((PRSI.NE.GWATE).AND.(PRSI.NE.WATER))
                    534: &              CALL RSPSB2(444,ODI2,ODO2)
                    535:        RETURN
                    536: C
                    537: C V135,V136--  EAT/DRINK
                    538: C
                    539: 58000  CONTINUE
                    540: 59000  IF(OBJACT(X)) RETURN
                    541: C                                              !OBJ HANDLE?
                    542:        IF(PRSO.EQ.GWATE) GO TO 59500
                    543: C                                              !DRINK GLOBAL WATER?
                    544:        IF(.NOT.EDIBLE(PRSO)) GO TO 59400
                    545: C                                              !EDIBLE?
                    546:        IF(OADV(PRSO).EQ.WINNER) GO TO 59200
                    547: C                                              !YES, ON WINNER?
                    548: 59100  CALL RSPSUB(454,ODO2)
                    549: C                                              !NOT ACCESSIBLE.
                    550:        RETURN
                    551: C
                    552: 59200  IF(PRSA.EQ.DRINKW) GO TO 59300
                    553: C                                              !DRINK FOOD?
                    554:        CALL NEWSTA(PRSO,455,0,0,0)
                    555: C                                              !NO, IT DISAPPEARS.
                    556:        RETURN
                    557: C
                    558: 59300  CALL RSPEAK(456)
                    559: C                                              !YES, JOKE.
                    560:        RETURN
                    561: C
                    562: 59400  IF(.NOT.DRKBLE(PRSO)) GO TO 59600
                    563: C                                              !DRINKABLE?
                    564:        IF(OCAN(PRSO).EQ.0) GO TO 59100
                    565: C                                              !YES, IN SOMETHING?
                    566:        IF(OADV(OCAN(PRSO)).NE.WINNER) GO TO 59100
                    567:        IF(QOPEN(OCAN(PRSO))) GO TO 59500
                    568: C                                              !CONT OPEN?
                    569:        CALL RSPEAK(457)
                    570: C                                              !NO, JOKE.
                    571:        RETURN
                    572: C
                    573: 59500  CALL NEWSTA(PRSO,458,0,0,0)
                    574: C                                              !GONE.
                    575:        RETURN
                    576: C
                    577: 59600  CALL RSPSUB(453,ODO2)
                    578: C                                              !NOT FOOD OR DRINK.
                    579:        RETURN
                    580: C
                    581: C V137--       BURN.  COMPLICATED.
                    582: C
                    583: 60000  IF(and(OFLAG1(PRSI),(FLAMBT+LITEBT+ONBT)).NE.
                    584: &              (FLAMBT+LITEBT+ONBT)) GO TO 60400
                    585:        IF(OBJACT(X)) RETURN
                    586: C                                              !OBJ HANDLE?
                    587:        IF(OCAN(PRSO).NE.RECEP) GO TO 60050
                    588: C                                              !BALLOON?
                    589:        IF(OAPPLI(OACTIO(BALLO),0)) RETURN
                    590: C                                              !DID IT HANDLE?
                    591: 60050  IF(and(OFLAG1(PRSO),BURNBT).EQ.0) GO TO 60300
                    592:        IF(OADV(PRSO).NE.WINNER) GO TO 60100
                    593: C                                              !CARRYING IT?
                    594:        CALL RSPSUB(459,ODO2)
                    595:        CALL JIGSUP(460)
                    596:        RETURN
                    597: C
                    598: 60100  J=OCAN(PRSO)
                    599: C                                              !GET CONTAINER.
                    600:        IF(QHERE(PRSO,HERE).OR. ((AV.NE.0).AND.(J.EQ.AV)))
                    601: &              GO TO 60200
                    602:        IF(J.EQ.0) GO TO 60150
                    603: C                                              !INSIDE?
                    604:        IF(.NOT.QOPEN(J)) GO TO 60150
                    605: C                                              !OPEN?
                    606:        IF(QHERE(J,HERE).OR.((AV.NE.0).AND.(OCAN(J).EQ.AV)))
                    607: &              GO TO 60200
                    608: 60150  CALL RSPEAK(461)
                    609: C                                              !CANT REACH IT.
                    610:        RETURN
                    611: C
                    612: 60200  CALL RSPSUB(462,ODO2)
                    613: C                                              !BURN IT.
                    614:        CALL NEWSTA(PRSO,0,0,0,0)
                    615:        RETURN
                    616: C
                    617: 60300  CALL RSPSUB(463,ODO2)
                    618: C                                              !CANT BURN IT.
                    619:        RETURN
                    620: C
                    621: 60400  CALL RSPSUB(301,ODI2)
                    622: C                                              !CANT BURN IT WITH THAT.
                    623:        RETURN
                    624: C VAPPLI, PAGE 9
                    625: C
                    626: C V138--       MUNG.  GO TO COMMON ATTACK CODE.
                    627: C
                    628: 63000  I=466
                    629: C                                              !CHOOSE PHRASE.
                    630:        IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66100
                    631:        IF(.NOT.OBJACT(X)) CALL RSPSB2(466,ODO2,RMK)
                    632:        RETURN
                    633: C
                    634: C V139--       KILL.  GO TO COMMON ATTACK CODE.
                    635: C
                    636: 64000  I=467
                    637: C                                              !CHOOSE PHRASE.
                    638:        GO TO 66100
                    639: C
                    640: C V140--       SWING.  INVERT OBJECTS, FALL THRU TO ATTACK.
                    641: C
                    642: 65000  J=PRSO
                    643: C                                              !INVERT.
                    644:        PRSO=PRSI
                    645:        PRSI=J
                    646:        J=ODO2
                    647:        ODO2=ODI2
                    648:        ODI2=J
                    649:        PRSA=ATTACW
                    650: C                                              !FOR OBJACT.
                    651: C
                    652: C V141--       ATTACK.  FALL THRU TO ATTACK CODE.
                    653: C
                    654: 66000  I=468
                    655: C
                    656: C COMMON MUNG/ATTACK/SWING/KILL CODE.
                    657: C
                    658: 66100  IF(PRSO.NE.0) GO TO 66200
                    659: C                                              !ANYTHING?
                    660:        CALL RSPEAK(469)
                    661: C                                              !NO, JOKE.
                    662:        RETURN
                    663: C
                    664: 66200  IF(OBJACT(X)) RETURN
                    665: C                                              !OBJ HANDLE?
                    666:        IF(and(OFLAG2(PRSO),VILLBT).NE.0) GO TO 66300
                    667:        IF(and(OFLAG1(PRSO),VICTBT).EQ.0)
                    668: &              CALL RSPSUB(470,ODO2)
                    669:        RETURN
                    670: C
                    671: 66300  J=471
                    672: C                                              !ASSUME NO WEAPON.
                    673:        IF(PRSI.EQ.0) GO TO 66500
                    674:        IF(and(OFLAG2(PRSI),WEAPBT).EQ.0) GO TO 66400
                    675:        MELEE=1
                    676: C                                              !ASSUME SWORD.
                    677:        IF(PRSI.NE.SWORD) MELEE=2
                    678: C                                              !MUST BE KNIFE.
                    679:        I=BLOW(PLAYER,PRSO,MELEE,.TRUE.,0)
                    680: C                                              !STRIKE BLOW.
                    681:        RETURN
                    682: C
                    683: 66400  J=472
                    684: C                                              !NOT A WEAPON.
                    685: 66500  CALL RSPSB2(I,ODO2,J)
                    686: C                                              !JOKE.
                    687:        RETURN
                    688: C VAPPLI, PAGE 10
                    689: C
                    690: C V142--       WALK.  PROCESSED EXTERNALLY.
                    691: C
                    692: 68000  VAPPLI=WALK(X)
                    693:        RETURN
                    694: C
                    695: C V143--       TELL.  PROCESSED IN GAME.
                    696: C
                    697: 69000  CALL RSPEAK(603)
                    698:        RETURN
                    699: C
                    700: C V144--       PUT.  PROCESSED EXTERNALLY.
                    701: C
                    702: 70000  VAPPLI=PUT(.TRUE.)
                    703:        RETURN
                    704: C
                    705: C V145,V146,V147,V148--        DROP/GIVE/POUR/THROW
                    706: C
                    707: 71000  CONTINUE
                    708: 72000  CONTINUE
                    709: 73000  CONTINUE
                    710: 74000  VAPPLI=DROP(.FALSE.)
                    711:        RETURN
                    712: C
                    713: C V149--       SAVE
                    714: C
                    715: 77000  IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 77100
                    716:        CALL RSPEAK(828)
                    717: C                                              !NO SAVES IN ENDGAME.
                    718:        RETURN
                    719: C
                    720: 77100  CALL SAVEGM
                    721:        RETURN
                    722: C
                    723: C V150--       RESTORE
                    724: C
                    725: #ifdef PDP
                    726: 78000  call restor
                    727: #else
                    728: 78000  IF(and(RFLAG(TSTRS),RSEEN).EQ.0) GO TO 78100
                    729:        CALL RSPEAK(829)
                    730: C                                              !NO RESTORES IN ENDGAME.
                    731:        RETURN
                    732: C
                    733: 78100  CALL RSTRGM
                    734: #endif PDP
                    735:        RETURN
                    736: C VAPPLI, PAGE 11
                    737: C
                    738: C V151--       HELLO
                    739: C
                    740: 80000  IF(PRSO.NE.0) GO TO 80100
                    741: C                                              !ANY OBJ?
                    742:        CALL RSPEAK(346+RND(4))
                    743: C                                              !NO, VANILLA HELLO.
                    744:        RETURN
                    745: C
                    746: 80100  IF(PRSO.NE.AVIAT) GO TO 80200
                    747: C                                              !HELLO AVIATOR?
                    748:        CALL RSPEAK(350)
                    749: C                                              !NOTHING HAPPENS.
                    750:        RETURN
                    751: C
                    752: 80200  IF(PRSO.NE.SAILO) GO TO 80300
                    753: C                                              !HELLO SAILOR?
                    754:        HS=HS+1
                    755: C                                              !COUNT.
                    756:        I=351
                    757: C                                              !GIVE NORMAL OR
                    758:        IF(MOD(HS,10).EQ.0) I=352
                    759: C                                              !RANDOM MESSAGE.
                    760:        IF(MOD(HS,20).EQ.0) I=353
                    761:        CALL RSPEAK(I)
                    762: C                                              !SPEAK UP.
                    763:        RETURN
                    764: C
                    765: 80300  IF(OBJACT(X)) RETURN
                    766: C                                              !OBJ HANDLE?
                    767:        I=354
                    768: C                                              !ASSUME VILLAIN.
                    769:        IF(and(OFLAG2(PRSO),(VILLBT+ACTRBT)).EQ.0) I=355
                    770:        CALL RSPSUB(I,ODO2)
                    771: C                                              !HELLO THERE
                    772: C                                              !
                    773:        RETURN
                    774: C
                    775: C V152--       LOOK INTO
                    776: C
                    777: 81000  IF(OBJACT(X)) RETURN
                    778: C                                              !OBJ HANDLE?
                    779:        IF(and(OFLAG1(PRSO),DOORBT).EQ.0) GO TO 81300
                    780:        IF(.NOT.QOPEN(PRSO)) GO TO 81200
                    781: C                                              !OPEN?
                    782:        CALL RSPSUB(628,ODO2)
                    783: C                                              !OPEN DOOR- UNINTERESTING.
                    784:        RETURN
                    785: C
                    786: 81200  CALL RSPSUB(525,ODO2)
                    787: C                                              !CLOSED DOOR- CANT SEE.
                    788:        RETURN
                    789: C
                    790: 81300  IF(and(OFLAG2(PRSO),VEHBT).NE.0) GO TO 81400
                    791:        IF(QOPEN(PRSO).OR.(and(OFLAG1(PRSO),TRANBT).NE.0))
                    792: &              GO TO 81400
                    793:        IF(and(OFLAG1(PRSO),CONTBT).NE.0) GO TO 81200
                    794:        CALL RSPSUB(630,ODO2)
                    795: C                                              !CANT LOOK INSIDE.
                    796:        RETURN
                    797: C
                    798: 81400  IF(QEMPTY(PRSO)) GO TO 81500
                    799: C                                              !VEH OR SEE IN.  EMPTY?
                    800:        CALL PRINCO(PRSO,573)
                    801: C                                              !NO, LIST CONTENTS.
                    802:        RETURN
                    803: C
                    804: 81500  CALL RSPSUB(629,ODO2)
                    805: C                                              !EMPTY.
                    806:        RETURN
                    807: C
                    808: C V153--       LOOK UNDER
                    809: C
                    810: 82000  IF(.NOT.OBJACT(X)) CALL RSPEAK(631)
                    811: C                                              !OBJECT HANDLE?
                    812:        RETURN
                    813: C VAPPLI, PAGE 12
                    814: C
                    815: C V154--       PUMP
                    816: C
                    817: 83000  IF((OROOM(PUMP).EQ.HERE).OR.(OADV(PUMP).EQ.WINNER))
                    818: &              GO TO 83100
                    819:        CALL RSPEAK(632)
                    820: C                                              !NO.
                    821:        RETURN
                    822: C
                    823: 83100  PRSI=PUMP
                    824: C                                              !BECOMES INFLATE
                    825:        PRSA=INFLAW
                    826: C                                              !X WITH PUMP.
                    827:        GO TO 22000
                    828: C                                              !DONE.
                    829: C
                    830: C V155--       WIND
                    831: C
                    832: 84000  IF(.NOT.OBJACT(X)) CALL RSPSUB(634,ODO2)
                    833: C                                              !OBJ HANDLE?
                    834:        RETURN
                    835: C
                    836: C V156--       CLIMB
                    837: C V157--       CLIMB UP
                    838: C V158--       CLIMB DOWN
                    839: C
                    840: 85000  CONTINUE
                    841: 86000  CONTINUE
                    842: 87000  I=XUP
                    843: C                                              !ASSUME UP.
                    844:        IF(PRSA.EQ.CLMBDW) I=XDOWN
                    845: C                                              !UNLESS CLIMB DN.
                    846:        F=(and(OFLAG2(PRSO),CLMBBT)).NE.0
                    847:        IF(F.AND.FINDXT(I,HERE)) GO TO 87500
                    848: C                                              !ANYTHING TO CLIMB?
                    849:        IF(OBJACT(X)) RETURN
                    850: C                                              !OBJ HANDLE?
                    851:        I=657
                    852:        IF(F) I=524
                    853: C                                              !VARIETY OF JOKES.
                    854:        IF(.NOT.F .AND.((PRSO.EQ.WALL).OR.
                    855: &              ((PRSO.GE.WNORT).AND.(PRSO.LE.WNORT+3))))
                    856: &              I=656
                    857:        CALL RSPEAK(I)
                    858: C                                              !JOKE.
                    859:        RETURN
                    860: C
                    861: 87500  PRSA=WALKW
                    862: C                                              !WALK
                    863:        PRSO=I
                    864: C                                              !IN SPECIFIED DIR.
                    865:        VAPPLI=WALK(X)
                    866:        RETURN
                    867: C
                    868:        END
                    869: C CLOCKD- CLOCK DEMON FOR INTERMOVE CLOCK EVENTS
                    870: C
                    871: C DECLARATIONS
                    872: C
                    873:        LOGICAL FUNCTION CLOCKD(X)
                    874:        IMPLICIT INTEGER (A-Z)
                    875: C
                    876: C CLOCK INTERRUPTS
                    877: C
                    878: #include "clock.h"
                    879: C
                    880:        CLOCKD=.FALSE.
                    881: C                                              !ASSUME NO ACTION.
                    882:        DO 100 I=1,CLNT
                    883:          IF(.NOT.CFLAG(I) .OR.(CTICK(I).EQ.0)) GO TO 100
                    884:          IF(CTICK(I).LT.0) GO TO 50
                    885: C                                              !PERMANENT ENTRY?
                    886:          CTICK(I)=CTICK(I)-1
                    887:          IF(CTICK(I).NE.0) GO TO 100
                    888: C                                              !TIMER EXPIRED?
                    889: 50       CLOCKD=.TRUE.
                    890:          CALL CEVAPP(CACTIO(I))
                    891: C                                              !DO ACTION.
                    892: 100    CONTINUE
                    893:        RETURN
                    894: C
                    895:        END

unix.superglobalmegacorp.com

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