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