|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.