|
|
1.1 ! root 1: C SOBJS- SIMPLE OBJECTS PROCESSOR ! 2: C OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, ! 3: C MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES ! 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 SOBJS(RI,ARG) ! 12: IMPLICIT INTEGER (A-Z) ! 13: LOGICAL QOPEN ! 14: LOGICAL MOVETO,OPNCLS,LIT ! 15: LOGICAL QHERE,F ! 16: #include "parser.h" ! 17: #include "gamestate.h" ! 18: #include "state.h" ! 19: #include "rooms.h" ! 20: #include "rflag.h" ! 21: #include "rindex.h" ! 22: #include "objects.h" ! 23: #include "oflags.h" ! 24: #include "oindex.h" ! 25: #include "clock.h" ! 26: ! 27: #include "villians.h" ! 28: #include "advers.h" ! 29: #include "verbs.h" ! 30: #include "flags.h" ! 31: C ! 32: C FUNCTIONS AND DATA ! 33: C ! 34: QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 ! 35: C SOBJS, PAGE 2 ! 36: C ! 37: IF(PRSO.GT.220) GO TO 5 ! 38: IF(PRSO.NE.0) ODO2=ODESC2(PRSO) ! 39: 5 IF(PRSI.NE.0) ODI2=ODESC2(PRSI) ! 40: AV=AVEHIC(WINNER) ! 41: SOBJS=.TRUE. ! 42: C ! 43: GO TO (1000,3000,4000,6000,7000,8000,9000, ! 44: & 13000,14000,16000,17000, ! 45: & 21000,23000,24000,27000,28000,29000,30000, ! 46: & 31000,33000,34000,36000,37000,38000, ! 47: & 41000,42000,43000,44000,46000, ! 48: & 53000,56000) ! 49: & RI ! 50: CALL BUG(6,RI) ! 51: C ! 52: C RETURN HERE TO DECLARE FALSE RESULT ! 53: C ! 54: 10 SOBJS=.FALSE. ! 55: RETURN ! 56: C SOBJS, PAGE 3 ! 57: C ! 58: C O1-- GUNK FUNCTION ! 59: C ! 60: 1000 IF(OCAN(GUNK).EQ.0) GO TO 10 ! 61: C !NOT INSIDE? F ! 62: CALL NEWSTA(GUNK,122,0,0,0) ! 63: C !FALLS APART. ! 64: RETURN ! 65: C ! 66: C O2-- TROPHY CASE ! 67: C ! 68: 3000 IF(PRSA.NE.TAKEW) GO TO 10 ! 69: C !TAKE? ! 70: CALL RSPEAK(128) ! 71: C !CANT. ! 72: RETURN ! 73: C ! 74: C O3-- BOTTLE FUNCTION ! 75: C ! 76: 4000 IF(PRSA.NE.THROWW) GO TO 4100 ! 77: C !THROW? ! 78: CALL NEWSTA(PRSO,129,0,0,0) ! 79: C !BREAKS. ! 80: RETURN ! 81: C ! 82: 4100 IF(PRSA.NE.MUNGW) GO TO 10 ! 83: C !MUNG? ! 84: CALL NEWSTA(PRSO,131,0,0,0) ! 85: C !BREAKS. ! 86: RETURN ! 87: C SOBJS, PAGE 4 ! 88: C ! 89: C O4-- ROPE FUNCTION ! 90: C ! 91: 6000 IF(HERE.EQ.DOME) GO TO 6100 ! 92: C !IN DOME? ! 93: DOMEF=.FALSE. ! 94: C !NO, ! 95: IF(PRSA.NE.UNTIEW) GO TO 6050 ! 96: C !UNTIE? ! 97: CALL RSPEAK(134) ! 98: C !CANT ! 99: RETURN ! 100: C ! 101: 6050 IF(PRSA.NE.TIEW) GO TO 10 ! 102: C !TIE? ! 103: CALL RSPEAK(135) ! 104: C !CANT TIE ! 105: RETURN ! 106: C ! 107: 6100 IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200 ! 108: IF(DOMEF) GO TO 6150 ! 109: C !ALREADY TIED? ! 110: DOMEF=.TRUE. ! 111: C !NO, TIE IT. ! 112: OFLAG1(ROPE)=or(OFLAG1(ROPE),NDSCBT) ! 113: OFLAG2(ROPE)=or(OFLAG2(ROPE),CLMBBT) ! 114: CALL NEWSTA(ROPE,137,DOME,0,0) ! 115: RETURN ! 116: C ! 117: 6150 CALL RSPEAK(136) ! 118: C !DUMMY. ! 119: RETURN ! 120: C ! 121: 6200 IF(PRSA.NE.UNTIEW) GO TO 6300 ! 122: C !UNTIE? ! 123: IF(DOMEF) GO TO 6250 ! 124: C !TIED? ! 125: CALL RSPEAK(134) ! 126: C !NO, DUMMY. ! 127: RETURN ! 128: C ! 129: 6250 DOMEF=.FALSE. ! 130: C !YES, UNTIE IT. ! 131: OFLAG1(ROPE)=and(OFLAG1(ROPE), not(NDSCBT)) ! 132: OFLAG2(ROPE)=and(OFLAG2(ROPE), not(CLMBBT)) ! 133: CALL RSPEAK(139) ! 134: RETURN ! 135: C ! 136: 6300 IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400 ! 137: C !DROP & UNTIED? ! 138: CALL NEWSTA(ROPE,140,MTORC,0,0) ! 139: C !YES, DROP. ! 140: RETURN ! 141: C ! 142: 6400 IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10 ! 143: CALL RSPEAK(141) ! 144: C !TAKE & TIED. ! 145: RETURN ! 146: C ! 147: C O5-- SWORD FUNCTION ! 148: C ! 149: 7000 IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER)) ! 150: & SWDACT=.TRUE. ! 151: GO TO 10 ! 152: C ! 153: C O6-- LANTERN ! 154: C ! 155: 8000 IF(PRSA.NE.THROWW) GO TO 8100 ! 156: C !THROW? ! 157: CALL NEWSTA(LAMP,0,0,0,0) ! 158: C !KILL LAMP, ! 159: CALL NEWSTA(BLAMP,142,HERE,0,0) ! 160: C !REPLACE WITH BROKEN. ! 161: RETURN ! 162: C ! 163: 8100 IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE. ! 164: IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE. ! 165: GO TO 10 ! 166: C ! 167: C O7-- RUG FUNCTION ! 168: C ! 169: 9000 IF(PRSA.NE.RAISEW) GO TO 9100 ! 170: C !RAISE? ! 171: CALL RSPEAK(143) ! 172: C !CANT ! 173: RETURN ! 174: C ! 175: 9100 IF(PRSA.NE.TAKEW) GO TO 9200 ! 176: C !TAKE? ! 177: CALL RSPEAK(144) ! 178: C !CANT ! 179: RETURN ! 180: C ! 181: 9200 IF(PRSA.NE.MOVEW) GO TO 9300 ! 182: C !MOVE? ! 183: CALL RSPEAK(145+ORRUG) ! 184: ORRUG=1 ! 185: OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT) ! 186: RETURN ! 187: C ! 188: 9300 IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR. ! 189: & QOPEN(DOOR)) GO TO 10 ! 190: CALL RSPEAK(345) ! 191: RETURN ! 192: C SOBJS, PAGE 5 ! 193: C ! 194: C O8-- SKELETON ! 195: C ! 196: 13000 I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0) ! 197: IF(I.NE.0) CALL RSPEAK(162) ! 198: C !IF ROBBED, SAY SO. ! 199: RETURN ! 200: C ! 201: C O9-- MIRROR ! 202: C ! 203: 14000 IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500 ! 204: MROOM=xor(HERE,1) ! 205: DO 14100 I=1,OLNT ! 206: C !INTERCHANGE OBJS. ! 207: IF(OROOM(I).EQ.HERE) OROOM(I)=-1 ! 208: IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE ! 209: IF(OROOM(I).EQ.-1) OROOM(I)=MROOM ! 210: 14100 CONTINUE ! 211: F=MOVETO(MROOM,WINNER) ! 212: CALL RSPEAK(163) ! 213: C !SHAKE WORLD. ! 214: RETURN ! 215: C ! 216: 14500 IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND. ! 217: & (PRSA.NE.EXAMIW)) GO TO 14600 ! 218: I=164 ! 219: C !MIRROR OK. ! 220: IF(MIRRMF) I=165 ! 221: C !MIRROR DEAD. ! 222: CALL RSPEAK(I) ! 223: RETURN ! 224: C ! 225: 14600 IF(PRSA.NE.TAKEW) GO TO 14700 ! 226: C !TAKE? ! 227: CALL RSPEAK(166) ! 228: C !JOKE. ! 229: RETURN ! 230: C ! 231: 14700 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10 ! 232: I=167 ! 233: C !MIRROR BREAKS. ! 234: IF(MIRRMF) I=168 ! 235: C !MIRROR ALREADY BROKEN. ! 236: MIRRMF=.TRUE. ! 237: BADLKF=.TRUE. ! 238: CALL RSPEAK(I) ! 239: RETURN ! 240: C SOBJS, PAGE 6 ! 241: C ! 242: C O10-- DUMBWAITER ! 243: C ! 244: 16000 IF(PRSA.NE.RAISEW) GO TO 16100 ! 245: C !RAISE? ! 246: IF(CAGETF) GO TO 16400 ! 247: C !ALREADY AT TOP? ! 248: CALL NEWSTA(TBASK,175,TSHAF,0,0) ! 249: C !NO, RAISE BASKET. ! 250: CALL NEWSTA(FBASK,0,BSHAF,0,0) ! 251: CAGETF=.TRUE. ! 252: C !AT TOP. ! 253: RETURN ! 254: C ! 255: 16100 IF(PRSA.NE.LOWERW) GO TO 16200 ! 256: C !LOWER? ! 257: IF(.NOT.CAGETF) GO TO 16400 ! 258: C !ALREADY AT BOTTOM? ! 259: CALL NEWSTA(TBASK,176,BSHAF,0,0) ! 260: C !NO, LOWER BASKET. ! 261: CALL NEWSTA(FBASK,0,TSHAF,0,0) ! 262: CAGETF=.FALSE. ! 263: IF(.NOT.LIT(HERE)) CALL RSPEAK(406) ! 264: C !IF DARK, DIE. ! 265: RETURN ! 266: C ! 267: 16200 IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300 ! 268: CALL RSPEAK(130) ! 269: C !WRONG BASKET. ! 270: RETURN ! 271: C ! 272: 16300 IF(PRSA.NE.TAKEW) GO TO 10 ! 273: C !TAKE? ! 274: CALL RSPEAK(177) ! 275: C !JOKE. ! 276: RETURN ! 277: C ! 278: 16400 CALL RSPEAK(125+RND(3)) ! 279: C !DUMMY. ! 280: RETURN ! 281: C ! 282: C O11-- GHOST FUNCTION ! 283: C ! 284: 17000 I=178 ! 285: C !ASSUME DIRECT. ! 286: IF(PRSO.NE.GHOST) I=179 ! 287: C !IF NOT, INDIRECT. ! 288: CALL RSPEAK(I) ! 289: RETURN ! 290: C !SPEAK AND EXIT. ! 291: C SOBJS, PAGE 7 ! 292: C ! 293: C O12-- TUBE ! 294: C ! 295: 21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10 ! 296: CALL RSPEAK(186) ! 297: C !CANT PUT BACK IN. ! 298: RETURN ! 299: C ! 300: C O13-- CHALICE ! 301: C ! 302: 23000 IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR. ! 303: & (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR. ! 304: & (and(OFLAG2(THIEF),FITEBT).EQ.0).OR. ! 305: & .NOT. THFACT) GO TO 10 ! 306: CALL RSPEAK(204) ! 307: C !CANT TAKE. ! 308: RETURN ! 309: C ! 310: C O14-- PAINTING ! 311: C ! 312: 24000 IF(PRSA.NE.MUNGW) GO TO 10 ! 313: C !MUNG? ! 314: CALL RSPEAK(205) ! 315: C !DESTROY PAINTING. ! 316: OFVAL(PRSO)=0 ! 317: OTVAL(PRSO)=0 ! 318: ODESC1(PRSO)=207 ! 319: ODESC2(PRSO)=206 ! 320: RETURN ! 321: C SOBJS, PAGE 8 ! 322: C ! 323: C O15-- BOLT ! 324: C ! 325: 27000 IF(PRSA.NE.TURNW) GO TO 10 ! 326: C !TURN BOLT? ! 327: IF(PRSI.NE.WRENC) GO TO 27500 ! 328: C !WITH WRENCH? ! 329: IF(GATEF) GO TO 27100 ! 330: C !PROPER BUTTON PUSHED? ! 331: CALL RSPEAK(210) ! 332: C !NO, LOSE. ! 333: RETURN ! 334: C ! 335: 27100 IF(LWTIDF) GO TO 27200 ! 336: C !LOW TIDE NOW? ! 337: LWTIDF=.TRUE. ! 338: C !NO, EMPTY DAM. ! 339: CALL RSPEAK(211) ! 340: OFLAG2(COFFI)=and(OFLAG2(COFFI), not(SCRDBT)) ! 341: OFLAG1(TRUNK)=or(OFLAG1(TRUNK),VISIBT) ! 342: RFLAG(RESER)=and(or(RFLAG(RESER),RLAND) ! 343: & ,not(RWATER+RSEEN)) ! 344: RETURN ! 345: C ! 346: 27200 LWTIDF=.FALSE. ! 347: C !YES, FILL DAM. ! 348: CALL RSPEAK(212) ! 349: IF(QHERE(TRUNK,RESER)) ! 350: & OFLAG1(TRUNK)=and(OFLAG1(TRUNK), not(VISIBT)) ! 351: RFLAG(RESER)=and(or(RFLAG(RESER),RWATER) ,not(RLAND)) ! 352: RETURN ! 353: C ! 354: 27500 CALL RSPSUB(299,ODI2) ! 355: C !NOT WITH THAT. ! 356: RETURN ! 357: C ! 358: C O16-- GRATING ! 359: C ! 360: 28000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10 ! 361: IF(GRUNLF) GO TO 28200 ! 362: C !UNLOCKED? ! 363: CALL RSPEAK(214) ! 364: C !NO, LOCKED. ! 365: RETURN ! 366: C ! 367: 28200 I=215 ! 368: C !UNLOCKED, VIEW FRM CLR. ! 369: IF(HERE.NE.CLEAR) I=216 ! 370: C !VIEW FROM BELOW. ! 371: SOBJS=OPNCLS(GRATE,I,885) ! 372: C !OPEN/CLOSE. ! 373: RFLAG(MGRAT)=and(RFLAG(MGRAT), not(RLIGHT)) ! 374: IF(QOPEN(GRATE)) RFLAG(MGRAT)=or(RFLAG(MGRAT),RLIGHT) ! 375: IF(.NOT.LIT(HERE)) CALL RSPEAK(406) ! 376: C !IF DARK, DIE. ! 377: RETURN ! 378: C ! 379: C O17-- TRAP DOOR ! 380: C ! 381: 29000 IF(HERE.NE.LROOM) GO TO 29100 ! 382: C !FROM LIVING ROOM? ! 383: SOBJS=OPNCLS(DOOR,218,219) ! 384: C !OPEN/CLOSE. ! 385: RETURN ! 386: C ! 387: 29100 IF(HERE.NE.CELLA) GO TO 10 ! 388: C !FROM CELLAR? ! 389: IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200 ! 390: CALL RSPEAK(220) ! 391: C !CANT OPEN CLOSED DOOR. ! 392: RETURN ! 393: C ! 394: 29200 SOBJS=OPNCLS(DOOR,0,22) ! 395: C !NORMAL OPEN/CLOSE. ! 396: RETURN ! 397: C ! 398: C O18-- DURABLE DOOR ! 399: C ! 400: 30000 I=0 ! 401: C !ASSUME NO APPL. ! 402: IF(PRSA.EQ.OPENW) I=221 ! 403: C !OPEN? ! 404: IF(PRSA.EQ.BURNW) I=222 ! 405: C !BURN? ! 406: IF(PRSA.EQ.MUNGW) I=223+RND(3) ! 407: C !MUNG? ! 408: IF(I.EQ.0) GO TO 10 ! 409: CALL RSPEAK(I) ! 410: RETURN ! 411: C ! 412: C O19-- MASTER SWITCH ! 413: C ! 414: 31000 IF(PRSA.NE.TURNW) GO TO 10 ! 415: C !TURN? ! 416: IF(PRSI.NE.SCREW) GO TO 31500 ! 417: C !WITH SCREWDRIVER? ! 418: IF(QOPEN(MACHI)) GO TO 31600 ! 419: C !LID UP? ! 420: CALL RSPEAK(226) ! 421: C !NO, ACTIVATE. ! 422: IF(OCAN(COAL).NE.MACHI) GO TO 31400 ! 423: C !COAL INSIDE? ! 424: CALL NEWSTA(COAL,0,0,0,0) ! 425: C !KILL COAL, ! 426: CALL NEWSTA(DIAMO,0,0,MACHI,0) ! 427: C !REPLACE WITH DIAMOND. ! 428: RETURN ! 429: C ! 430: 31400 DO 31450 I=1,OLNT ! 431: C !KILL NONCOAL OBJECTS. ! 432: IF(OCAN(I).NE.MACHI) GO TO 31450 ! 433: C !INSIDE MACHINE? ! 434: CALL NEWSTA(I,0,0,0,0) ! 435: C !KILL OBJECT AND CONTENTS. ! 436: CALL NEWSTA(GUNK,0,0,MACHI,0) ! 437: C !REDUCE TO GUNK. ! 438: 31450 CONTINUE ! 439: RETURN ! 440: C ! 441: 31500 CALL RSPSUB(300,ODI2) ! 442: C !CANT TURN WITH THAT. ! 443: RETURN ! 444: C ! 445: 31600 CALL RSPEAK(227) ! 446: C !LID IS UP. ! 447: RETURN ! 448: C SOBJS, PAGE 9 ! 449: C ! 450: C O20-- LEAK ! 451: C ! 452: 33000 IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0)) ! 453: & GO TO 10 ! 454: IF(PRSI.NE.PUTTY) GO TO 33100 ! 455: C !WITH PUTTY? ! 456: RVMNT=-1 ! 457: C !DISABLE LEAK. ! 458: CTICK(CEVMNT)=0 ! 459: CALL RSPEAK(577) ! 460: RETURN ! 461: C ! 462: 33100 CALL RSPSUB(301,ODI2) ! 463: C !CANT WITH THAT. ! 464: RETURN ! 465: C ! 466: C O21-- DROWNING BUTTONS ! 467: C ! 468: 34000 IF(PRSA.NE.PUSHW) GO TO 10 ! 469: C !PUSH? ! 470: GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1) ! 471: GO TO 10 ! 472: C !NOT A BUTTON. ! 473: C ! 474: 34100 RFLAG(HERE)=xor(RFLAG(HERE),RLIGHT) ! 475: I=230 ! 476: IF(and(RFLAG(HERE),RLIGHT).NE.0) I=231 ! 477: CALL RSPEAK(I) ! 478: RETURN ! 479: C ! 480: 34200 GATEF=.TRUE. ! 481: C !RELEASE GATE. ! 482: CALL RSPEAK(232) ! 483: RETURN ! 484: C ! 485: 34300 GATEF=.FALSE. ! 486: C !INTERLOCK GATE. ! 487: CALL RSPEAK(232) ! 488: RETURN ! 489: C ! 490: 34400 IF(RVMNT.NE.0) GO TO 34500 ! 491: C !LEAK ALREADY STARTED? ! 492: CALL RSPEAK(233) ! 493: C !NO, START LEAK. ! 494: RVMNT=1 ! 495: CTICK(CEVMNT)=-1 ! 496: RETURN ! 497: C ! 498: 34500 CALL RSPEAK(234) ! 499: C !BUTTON JAMMED. ! 500: RETURN ! 501: C ! 502: C O22-- INFLATABLE BOAT ! 503: C ! 504: 36000 IF(PRSA.NE.INFLAW) GO TO 10 ! 505: C !INFLATE? ! 506: IF(OROOM(IBOAT).NE.0) GO TO 36100 ! 507: C !IN ROOM? ! 508: CALL RSPEAK(235) ! 509: C !NO, JOKE. ! 510: RETURN ! 511: C ! 512: 36100 IF(PRSI.NE.PUMP) GO TO 36200 ! 513: C !WITH PUMP? ! 514: CALL NEWSTA(IBOAT,0,0,0,0) ! 515: C !KILL DEFL BOAT, ! 516: CALL NEWSTA(RBOAT,236,HERE,0,0) ! 517: C !REPL WITH INF. ! 518: DEFLAF=.FALSE. ! 519: RETURN ! 520: C ! 521: 36200 I=237 ! 522: C !JOKES. ! 523: IF(PRSI.NE.LUNGS) I=303 ! 524: CALL RSPSUB(I,ODI2) ! 525: RETURN ! 526: C ! 527: C O23-- DEFLATED BOAT ! 528: C ! 529: 37000 IF(PRSA.NE.INFLAW) GO TO 37100 ! 530: C !INFLATE? ! 531: CALL RSPEAK(238) ! 532: C !JOKE. ! 533: RETURN ! 534: C ! 535: 37100 IF(PRSA.NE.PLUGW) GO TO 10 ! 536: C !PLUG? ! 537: IF(PRSI.NE.PUTTY) GO TO 33100 ! 538: C !WITH PUTTY? ! 539: CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT)) ! 540: CALL NEWSTA(DBOAT,0,0,0,0) ! 541: C !KILL DEFL BOAT, REPL. ! 542: RETURN ! 543: C SOBJS, PAGE 10 ! 544: C ! 545: C O24-- RUBBER BOAT ! 546: C ! 547: 38000 IF(ARG.NE.0) GO TO 10 ! 548: C !DISMISS READIN, OUT. ! 549: IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100 ! 550: CALL NEWSTA(RBOAT,0,0,0,0) ! 551: C !KILL INFL BOAT, ! 552: CALL NEWSTA(DBOAT,240,HERE,0,0) ! 553: C !REPL WITH DEAD. ! 554: DEFLAF=.TRUE. ! 555: RETURN ! 556: C ! 557: 38100 IF(PRSA.NE.INFLAW) GO TO 38200 ! 558: C !INFLATE? ! 559: CALL RSPEAK(367) ! 560: C !YES, JOKE. ! 561: RETURN ! 562: C ! 563: 38200 IF(PRSA.NE.DEFLAW) GO TO 10 ! 564: C !DEFLATE? ! 565: IF(AV.EQ.RBOAT) GO TO 38300 ! 566: C !IN BOAT? ! 567: IF(OROOM(RBOAT).EQ.0) GO TO 38400 ! 568: C !ON GROUND? ! 569: CALL NEWSTA(RBOAT,0,0,0,0) ! 570: C !KILL INFL BOAT, ! 571: CALL NEWSTA(IBOAT,241,HERE,0,0) ! 572: C !REPL WITH DEFL. ! 573: DEFLAF=.TRUE. ! 574: RETURN ! 575: C ! 576: 38300 CALL RSPEAK(242) ! 577: C !IN BOAT. ! 578: RETURN ! 579: C ! 580: 38400 CALL RSPEAK(243) ! 581: C !NOT ON GROUND. ! 582: RETURN ! 583: C ! 584: C O25-- BRAIDED ROPE ! 585: C ! 586: 41000 IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR. ! 587: & ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2))) ! 588: & GO TO 41500 ! 589: BTIEF=PRSI ! 590: C !RECORD LOCATION. ! 591: CFLAG(CEVBAL)=.FALSE. ! 592: C !STALL ASCENT. ! 593: CALL RSPEAK(248) ! 594: RETURN ! 595: C ! 596: 41500 IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10 ! 597: IF(BTIEF.NE.0) GO TO 41600 ! 598: C !TIED UP? ! 599: CALL RSPEAK(249) ! 600: C !NO, JOKE. ! 601: RETURN ! 602: C ! 603: 41600 CALL RSPEAK(250) ! 604: BTIEF=0 ! 605: C !UNTIE. ! 606: CTICK(CEVBAL)=3 ! 607: C !RESTART CLOCK. ! 608: CFLAG(CEVBAL)=.TRUE. ! 609: RETURN ! 610: C ! 611: C O26-- SAFE ! 612: C ! 613: 42000 I=0 ! 614: C !ASSUME UNPROCESSED. ! 615: IF(PRSA.EQ.TAKEW) I=251 ! 616: C !TAKE? ! 617: IF((PRSA.EQ.OPENW).AND.SAFEF) I=253 ! 618: C !OPEN AFTER BLAST? ! 619: IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254 ! 620: C !OPEN BEFORE BLAST? ! 621: IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253 ! 622: C !CLOSE AFTER? ! 623: IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255 ! 624: IF(I.EQ.0) GO TO 10 ! 625: CALL RSPEAK(I) ! 626: RETURN ! 627: C ! 628: C O27-- FUSE ! 629: C ! 630: 43000 IF(PRSA.NE.BURNW) GO TO 10 ! 631: C !BURN? ! 632: CALL RSPEAK(256) ! 633: CTICK(CEVFUS)=2 ! 634: C !START COUNTDOWN. ! 635: RETURN ! 636: C ! 637: C O28-- GNOME ! 638: C ! 639: 44000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500 ! 640: IF(OTVAL(PRSO).EQ.0) GO TO 44100 ! 641: C !TREASURE? ! 642: CALL RSPSUB(257,ODO2) ! 643: C !YES, GET DOOR. ! 644: CALL NEWSTA(PRSO,0,0,0,0) ! 645: CALL NEWSTA(GNOME,0,0,0,0) ! 646: C !VANISH GNOME. ! 647: GNODRF=.TRUE. ! 648: RETURN ! 649: C ! 650: 44100 CALL RSPSUB(258,ODO2) ! 651: C !NO, LOSE OBJECT. ! 652: CALL NEWSTA(PRSO,0,0,0,0) ! 653: RETURN ! 654: C ! 655: 44500 CALL RSPEAK(259) ! 656: C !NERVOUS GNOME. ! 657: IF(.NOT.GNOMEF) CTICK(CEVGNO)=5 ! 658: C !SCHEDULE BYEBYE. ! 659: GNOMEF=.TRUE. ! 660: RETURN ! 661: C ! 662: C O29-- COKE BOTTLES ! 663: C ! 664: 46000 IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10 ! 665: CALL NEWSTA(PRSO,262,0,0,0) ! 666: C !MUNG BOTTLES. ! 667: RETURN ! 668: C SOBJS, PAGE 11 ! 669: C ! 670: C ! 671: C O30-- ROBOT ! 672: C ! 673: 53000 IF(PRSA.NE.GIVEW) GO TO 53200 ! 674: C !GIVE? ! 675: CALL NEWSTA(PRSO,0,0,0,AROBOT) ! 676: C !PUT ON ROBOT. ! 677: CALL RSPSUB(302,ODO2) ! 678: RETURN ! 679: C ! 680: 53200 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10 ! 681: CALL NEWSTA(ROBOT,285,0,0,0) ! 682: C !KILL ROBOT. ! 683: RETURN ! 684: C ! 685: C O31-- GRUE ! 686: C ! 687: 56000 IF(PRSA.NE.EXAMIW) GO TO 56100 ! 688: C !EXAMINE? ! 689: CALL RSPEAK(288) ! 690: RETURN ! 691: C ! 692: 56100 IF(PRSA.NE.FINDW) GO TO 10 ! 693: C !FIND? ! 694: CALL RSPEAK(289) ! 695: RETURN ! 696: C ! 697: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.