1: C RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1 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 RAPPL1(RI) 10: IMPLICIT INTEGER (A-Z) 11: LOGICAL QOPEN,QON,QHERE,PROB,F 12: LOGICAL MOVETO,LIT 13: #include "parser.h" 14: #include "gamestate.h" 15: #include "state.h" 16: C 17: C SCREEN OF LIGHT 18: C 19: COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC 20: COMMON /SCREEN/ SCOLDR(8),SCOLWL(12) 21: C 22: C MISCELLANEOUS VARIABLES 23: C 24: COMMON /BATS/ BATDRP(9) 25: #include "rooms.h" 26: #include "rflag.h" 27: #include "rindex.h" 28: #include "objects.h" 29: #include "oflags.h" 30: #include "oindex.h" 31: #include "clock.h" 32: #include "villians.h" 33: #include "advers.h" 34: #include "verbs.h" 35: #include "flags.h" 36: C 37: C FUNCTIONS AND DATA 38: C 39: QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 40: QON(R)=and(OFLAG1(R),ONBT).NE.0 41: C RAPPL1, PAGE 2 42: C 43: RAPPL1=.TRUE. 44: C !USUALLY IGNORED. 45: IF(RI.EQ.0) RETURN 46: C !RETURN IF NAUGHT. 47: C 48: C !SET TO FALSE FOR 49: C 50: C !NEW DESC NEEDED. 51: GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000, 52: & 11000,12000,13000,14000,15000,16000,17000,18000,19000,20000, 53: & 21000,22000,23000,24000,25000,26000,27000,28000,29000,30000, 54: & 31000,32000,33000,34000,35000,36000,37000),RI 55: CALL BUG(1,RI) 56: C 57: C R1-- EAST OF HOUSE. DESCRIPTION DEPENDS ON STATE OF WINDOW 58: C 59: 1000 IF(PRSA.NE.LOOKW) RETURN 60: C !LOOK? 61: I=13 62: C !ASSUME CLOSED. 63: IF(QOPEN(WINDO)) I=12 64: C !IF OPEN, AJAR. 65: CALL RSPSUB(11,I) 66: C !DESCRIBE. 67: RETURN 68: C 69: C R2-- KITCHEN. SAME VIEW FROM INSIDE. 70: C 71: 2000 IF(PRSA.NE.LOOKW) RETURN 72: C !LOOK? 73: I=13 74: C !ASSUME CLOSED. 75: IF(QOPEN(WINDO)) I=12 76: C !IF OPEN, AJAR. 77: CALL RSPSUB(14,I) 78: C !DESCRIBE. 79: RETURN 80: C 81: C R3-- LIVING ROOM. DESCRIPTION DEPENDS ON MAGICF (STATE OF 82: C DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED) 83: C 84: 3000 IF(PRSA.NE.LOOKW) GO TO 3500 85: C !LOOK? 86: I=15 87: C !ASSUME NO HOLE. 88: IF(MAGICF) I=16 89: C !IF MAGICF, CYCLOPS HOLE. 90: CALL RSPEAK(I) 91: C !DESCRIBE. 92: I=17+ORRUG 93: C !ASSUME INITIAL STATE. 94: IF(QOPEN(DOOR)) I=I+2 95: C !DOOR OPEN? 96: CALL RSPEAK(I) 97: C !DESCRIBE. 98: RETURN 99: C 100: C NOT A LOOK WORD. REEVALUATE TROPHY CASE. 101: C 102: 3500 IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE))) 103: & RETURN 104: ASCORE(WINNER)=RWSCOR 105: C !SCORE TROPHY CASE. 106: DO 3600 I=1,OLNT 107: C !RETAIN RAW SCORE AS WELL. 108: J=I 109: C !FIND OUT IF IN CASE. 110: 3550 J=OCAN(J) 111: C !TRACE OWNERSHIP. 112: IF(J.EQ.0) GO TO 3600 113: IF(J.NE.TCASE) GO TO 3550 114: C !DO ALL LEVELS. 115: ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I) 116: 3600 CONTINUE 117: CALL SCRUPD(0) 118: C !SEE IF ENDGAME TRIG. 119: RETURN 120: C RAPPL1, PAGE 3 121: C 122: C R4-- CELLAR. SHUT DOOR AND BAR IT IF HE JUST WALKED IN. 123: C 124: 4000 IF(PRSA.NE.LOOKW) GO TO 4500 125: C !LOOK? 126: CALL RSPEAK(21) 127: C !DESCRIBE CELLAR. 128: RETURN 129: C 130: 4500 IF(PRSA.NE.WALKIW) RETURN 131: C !WALKIN? 132: IF(and(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN 133: OFLAG2(DOOR)=and( or(OFLAG2(DOOR),TCHBT), not(OPENBT)) 134: CALL RSPEAK(22) 135: C !SLAM AND BOLT DOOR. 136: RETURN 137: C 138: C R5-- MAZE11. DESCRIBE STATE OF GRATING. 139: C 140: 5000 IF(PRSA.NE.LOOKW) RETURN 141: C !LOOK? 142: CALL RSPEAK(23) 143: C !DESCRIBE. 144: I=24 145: C !ASSUME LOCKED. 146: IF(GRUNLF) I=26 147: C !UNLOCKED? 148: IF(QOPEN(GRATE)) I=25 149: C !OPEN? 150: CALL RSPEAK(I) 151: C !DESCRIBE GRATE. 152: RETURN 153: C 154: C R6-- CLEARING. DESCRIBE CLEARING, MOVE LEAVES. 155: C 156: 6000 IF(PRSA.NE.LOOKW) GO TO 6500 157: C !LOOK? 158: CALL RSPEAK(27) 159: C !DESCRIBE. 160: IF(RVCLR.EQ.0) RETURN 161: C !LEAVES MOVED? 162: I=28 163: C !YES, ASSUME GRATE CLOSED. 164: IF(QOPEN(GRATE)) I=29 165: C !OPEN? 166: CALL RSPEAK(I) 167: C !DESCRIBE GRATE. 168: RETURN 169: C 170: 6500 IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND. 171: & ((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN 172: CALL RSPEAK(30) 173: C !MOVE LEAVES, REVEAL GRATE. 174: RVCLR=1 175: C !INDICATE LEAVES MOVED. 176: RETURN 177: C RAPPL1, PAGE 4 178: C 179: C R7-- RESERVOIR SOUTH. DESCRIPTION DEPENDS ON LOW TIDE FLAG. 180: C 181: 7000 IF(PRSA.NE.LOOKW) RETURN 182: C !LOOK? 183: I=31 184: C !ASSUME FULL. 185: IF(LWTIDF) I=32 186: C !IF LOW TIDE, EMPTY. 187: CALL RSPEAK(I) 188: C !DESCRIBE. 189: CALL RSPEAK(33) 190: C !DESCRIBE EXITS. 191: RETURN 192: C 193: C R8-- RESERVOIR. STATE DEPENDS ON LOW TIDE FLAG. 194: C 195: 8000 IF(PRSA.NE.LOOKW) RETURN 196: C !LOOK? 197: I=34 198: C !ASSUME FULL. 199: IF(LWTIDF) I=35 200: C !IF LOW TIDE, EMTPY. 201: CALL RSPEAK(I) 202: C !DESCRIBE. 203: RETURN 204: C 205: C R9-- RESERVOIR NORTH. ALSO DEPENDS ON LOW TIDE FLAG. 206: C 207: 9000 IF(PRSA.NE.LOOKW) RETURN 208: C !LOOK? 209: I=36 210: C !YOU GET THE IDEA. 211: IF(LWTIDF) I=37 212: CALL RSPEAK(I) 213: CALL RSPEAK(38) 214: RETURN 215: C 216: C R10-- GLACIER ROOM. STATE DEPENDS ON MELTED, VANISHED FLAGS. 217: C 218: 10000 IF(PRSA.NE.LOOKW) RETURN 219: C !LOOK? 220: CALL RSPEAK(39) 221: C !BASIC DESCRIPTION. 222: I=0 223: C !ASSUME NO CHANGES. 224: IF(GLACMF) I=40 225: C !PARTIAL MELT? 226: IF(GLACRF) I=41 227: C !COMPLETE MELT? 228: CALL RSPEAK(I) 229: C !DESCRIBE. 230: RETURN 231: C 232: C R11-- FOREST ROOM 233: C 234: 11000 IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE. 235: C !IF WALK IN, BIRDIE. 236: RETURN 237: C 238: C R12-- MIRROR ROOM. STATE DEPENDS ON MIRROR INTACT. 239: C 240: 12000 IF(PRSA.NE.LOOKW) RETURN 241: C !LOOK? 242: CALL RSPEAK(42) 243: C !DESCRIBE. 244: IF(MIRRMF) CALL RSPEAK(43) 245: C !IF BROKEN, NASTY REMARK. 246: RETURN 247: C RAPPL1, PAGE 5 248: C 249: C R13-- CAVE2 ROOM. BLOW OUT CANDLES WITH 50% PROBABILITY. 250: C 251: 13000 IF(PRSA.NE.WALKIW) RETURN 252: C !WALKIN? 253: IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR. 254: & .NOT.QON(CANDL)) RETURN 255: OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT)) 256: CALL RSPEAK(47) 257: C !TELL OF WINDS. 258: CFLAG(CEVCND)=.FALSE. 259: C !HALT CANDLE COUNTDOWN. 260: RETURN 261: C 262: C R14-- BOOM ROOM. BLOW HIM UP IF CARRYING FLAMING OBJECT. 263: C 264: 14000 J=ODESC2(CANDL) 265: C !ASSUME CANDLE. 266: IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100 267: J=ODESC2(TORCH) 268: C !ASSUME TORCH. 269: IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100 270: J=ODESC2(MATCH) 271: IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100 272: RETURN 273: C !SAFE 274: C 275: 14100 IF(PRSA.NE.TRNONW) GO TO 14200 276: C !TURN ON? 277: CALL RSPSUB(294,J) 278: C !BOOM 279: C ! 280: CALL JIGSUP(44) 281: RETURN 282: C 283: 14200 IF(PRSA.NE.WALKIW) RETURN 284: C !WALKIN? 285: CALL RSPSUB(295,J) 286: C !BOOM 287: C ! 288: CALL JIGSUP(44) 289: RETURN 290: C 291: C R15-- NO-OBJS. SEE IF EMPTY HANDED, SCORE LIGHT SHAFT. 292: C 293: 15000 EMPTHF=.TRUE. 294: C !ASSUME TRUE. 295: DO 15100 I=1,OLNT 296: C !SEE IF CARRYING. 297: IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE. 298: 15100 CONTINUE 299: C 300: IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN 301: CALL SCRUPD(LTSHFT) 302: C !SCORE LIGHT SHAFT. 303: LTSHFT=0 304: C !NEVER AGAIN. 305: RETURN 306: C RAPPL1, PAGE 6 307: C 308: C R16-- MACHINE ROOM. DESCRIBE MACHINE. 309: C 310: 16000 IF(PRSA.NE.LOOKW) RETURN 311: C !LOOK? 312: I=46 313: C !ASSUME LID CLOSED. 314: IF(QOPEN(MACHI)) I=12 315: C !IF OPEN, OPEN. 316: CALL RSPSUB(45,I) 317: C !DESCRIBE. 318: RETURN 319: C 320: C R17-- BAT ROOM. UNLESS CARRYING GARLIC, FLY AWAY WITH ME... 321: C 322: 17000 IF(PRSA.NE.LOOKW) GO TO 17500 323: C !LOOK? 324: CALL RSPEAK(48) 325: C !DESCRIBE ROOM. 326: IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49) 327: C !BAT HOLDS NOSE. 328: RETURN 329: C 330: 17500 IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN 331: CALL RSPEAK(50) 332: C !TIME TO FLY, JACK. 333: F=MOVETO(BATDRP(RND(9)+1),WINNER) 334: C !SELECT RANDOM DEST. 335: RAPPL1=.FALSE. 336: C !INDICATE NEW DESC NEEDED. 337: RETURN 338: C 339: C R18-- DOME ROOM. STATE DEPENDS ON WHETHER ROPE TIED TO RAILING. 340: C 341: 18000 IF(PRSA.NE.LOOKW) GO TO 18500 342: C !LOOK? 343: CALL RSPEAK(51) 344: C !DESCRIBE. 345: IF(DOMEF) CALL RSPEAK(52) 346: C !IF ROPE, DESCRIBE. 347: RETURN 348: C 349: 18500 IF(PRSA.EQ.LEAPW) CALL JIGSUP(53) 350: C !DID HE JUMP??? 351: RETURN 352: C 353: C R19-- TORCH ROOM. ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING. 354: C 355: 19000 IF(PRSA.NE.LOOKW) RETURN 356: C !LOOK? 357: CALL RSPEAK(54) 358: C !DESCRIBE. 359: IF(DOMEF) CALL RSPEAK(55) 360: C !IF ROPE, DESCRIBE. 361: RETURN 362: C 363: C R20-- CAROUSEL ROOM. SPIN HIM OR KILL HIM. 364: C 365: 20000 IF(PRSA.NE.LOOKW) GO TO 20500 366: C !LOOK? 367: CALL RSPEAK(56) 368: C !DESCRIBE. 369: IF(.NOT.CAROFF) CALL RSPEAK(57) 370: C !IF NOT FLIPPED, SPIN. 371: RETURN 372: C 373: 20500 IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58) 374: C !WALKED IN. 375: RETURN 376: C RAPPL1, PAGE 7 377: C 378: C R21-- LLD ROOM. HANDLE EXORCISE, DESCRIPTIONS. 379: C 380: 21000 IF(PRSA.NE.LOOKW) GO TO 21500 381: C !LOOK? 382: CALL RSPEAK(59) 383: C !DESCRIBE. 384: IF(.NOT.LLDF) CALL RSPEAK(60) 385: C !IF NOT VANISHED, GHOSTS. 386: RETURN 387: C 388: 21500 IF(PRSA.NE.EXORCW) RETURN 389: C !EXORCISE? 390: IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND. 391: & (OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600 392: CALL RSPEAK(62) 393: C !NOT EQUIPPED. 394: RETURN 395: C 396: 21600 IF(QHERE(GHOST,HERE)) GO TO 21700 397: C !GHOST HERE? 398: CALL JIGSUP(61) 399: C !NOPE, EXORCISE YOU. 400: RETURN 401: C 402: 21700 CALL NEWSTA(GHOST,63,0,0,0) 403: C !VANISH GHOST. 404: LLDF=.TRUE. 405: C !OPEN GATE. 406: RETURN 407: C 408: C R22-- LLD2-ROOM. IS HIS HEAD ON A POLE? 409: C 410: 22000 IF(PRSA.NE.LOOKW) RETURN 411: C !LOOK? 412: CALL RSPEAK(64) 413: C !DESCRIBE. 414: IF(ONPOLF) CALL RSPEAK(65) 415: C !ON POLE? 416: RETURN 417: C 418: C R23-- DAM ROOM. DESCRIBE RESERVOIR, PANEL. 419: C 420: 23000 IF(PRSA.NE.LOOKW) RETURN 421: C !LOOK? 422: CALL RSPEAK(66) 423: C !DESCRIBE. 424: I=67 425: IF(LWTIDF) I=68 426: CALL RSPEAK(I) 427: C !DESCRIBE RESERVOIR. 428: CALL RSPEAK(69) 429: C !DESCRIBE PANEL. 430: IF(GATEF) CALL RSPEAK(70) 431: C !BUBBLE IS GLOWING. 432: RETURN 433: C 434: C R24-- TREE ROOM 435: C 436: 24000 IF(PRSA.NE.LOOKW) RETURN 437: C !LOOK? 438: CALL RSPEAK(660) 439: C !DESCRIBE. 440: I=661 441: C !SET FLAG FOR BELOW. 442: DO 24200 J=1,OLNT 443: C !DESCRIBE OBJ IN FORE3. 444: IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) GO TO 24200 445: CALL RSPEAK(I) 446: C !SET STAGE, 447: I=0 448: CALL RSPSUB(502,ODESC2(J)) 449: C !DESCRIBE. 450: 24200 CONTINUE 451: RETURN 452: C RAPPL1, PAGE 8 453: C 454: C R25-- CYCLOPS-ROOM. DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG. 455: C 456: 25000 IF(PRSA.NE.LOOKW) RETURN 457: C !LOOK? 458: CALL RSPEAK(606) 459: C !DESCRIBE. 460: I=607 461: C !ASSUME BASIC STATE. 462: IF(RVCYC.GT.0) I=608 463: C !>0? HUNGRY. 464: IF(RVCYC.LT.0) I=609 465: C !<0? THIRSTY. 466: IF(CYCLOF) I=610 467: C !ASLEEP? 468: IF(MAGICF) I=611 469: C !GONE? 470: CALL RSPEAK(I) 471: C !DESCRIBE. 472: IF(.NOT.CYCLOF .AND.(RVCYC.NE.0)) 473: & CALL RSPEAK(193+IABS(RVCYC)) 474: RETURN 475: C 476: C R26-- BANK BOX ROOM. 477: C 478: 26000 IF(PRSA.NE.WALKIW) RETURN 479: C !SURPRISE HIM. 480: DO 26100 I=1,8,2 481: C !SCOLRM DEPENDS ON 482: IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1) 483: 26100 CONTINUE 484: C !ENTRY DIRECTION. 485: RETURN 486: C 487: C R27-- TREASURE ROOM. 488: C 489: 27000 IF((PRSA.NE.WALKIW).OR. .NOT.THFACT) 490: & RETURN 491: IF(OROOM(THIEF).NE.HERE) 492: & CALL NEWSTA(THIEF,82,HERE,0,0) 493: THFPOS=HERE 494: C !RESET SEARCH PATTERN. 495: OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT) 496: IF(OROOM(CHALI).EQ.HERE) 497: & OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT)) 498: C 499: C VANISH EVERYTHING IN ROOM 500: C 501: J=0 502: C !ASSUME NOTHING TO VANISH. 503: DO 27200 I=1,OLNT 504: IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE)) 505: & GO TO 27200 506: J=83 507: C !FLAG BYEBYE. 508: OFLAG1(I)=and(OFLAG1(I),not(VISIBT)) 509: 27200 CONTINUE 510: CALL RSPEAK(J) 511: C !DESCRIBE. 512: RETURN 513: C 514: C R28-- CLIFF FUNCTION. SEE IF CARRYING INFLATED BOAT. 515: C 516: 28000 DEFLAF=OADV(RBOAT).NE.WINNER 517: C !TRUE IF NOT CARRYING. 518: RETURN 519: C RAPPL1, PAGE 9 520: C 521: C R29-- RIVR4 ROOM. PLAY WITH BUOY. 522: C 523: 29000 IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN 524: CALL RSPEAK(84) 525: C !GIVE HINT, 526: BUOYF=.FALSE. 527: C !THEN DISABLE. 528: RETURN 529: C 530: C R30-- OVERFALLS. DOOM. 531: C 532: 30000 IF(PRSA.NE.LOOKW) CALL JIGSUP(85) 533: C !OVER YOU GO. 534: RETURN 535: C 536: C R31-- BEACH ROOM. DIG A HOLE. 537: C 538: 31000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN 539: RVSND=RVSND+1 540: C !INCREMENT DIG STATE. 541: GO TO (31100,31100,31100,31400,31500),RVSND 542: C !PROCESS STATE. 543: CALL BUG(2,RVSND) 544: C 545: 31100 CALL RSPEAK(85+RVSND) 546: C !1-3... DISCOURAGE HIM. 547: RETURN 548: C 549: 31400 I=89 550: C !ASSUME DISCOVERY. 551: IF(and(OFLAG1(STATU),VISIBT).NE.0) I=88 552: CALL RSPEAK(I) 553: OFLAG1(STATU)=or(OFLAG1(STATU),VISIBT) 554: RETURN 555: C 556: 31500 RVSND=0 557: C !5... SAND COLLAPSES 558: CALL JIGSUP(90) 559: C !AND SO DOES HE. 560: RETURN 561: C 562: C R32-- TCAVE ROOM. DIG A HOLE IN GUANO. 563: C 564: 32000 IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN 565: I=91 566: C !ASSUME NO GUANO. 567: IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100 568: C !IS IT HERE? 569: RVGUA=MIN0(4,RVGUA+1) 570: C !YES, SET NEW STATE. 571: I=91+RVGUA 572: C !GET NASTY REMARK. 573: 32100 CALL RSPEAK(I) 574: C !DESCRIBE. 575: RETURN 576: C 577: C R33-- FALLS ROOM 578: C 579: 33000 IF(PRSA.NE.LOOKW) RETURN 580: C !LOOK? 581: CALL RSPEAK(96) 582: C !DESCRIBE. 583: I=97 584: C !ASSUME NO RAINBOW. 585: IF(RAINBF) I=98 586: C !GOT ONE? 587: CALL RSPEAK(I) 588: C !DESCRIBE. 589: RETURN 590: C RAPPL1, PAGE 10 591: C 592: C R34-- LEDGE FUNCTION. LEDGE CAN COLLAPSE. 593: C 594: 34000 IF(PRSA.NE.LOOKW) RETURN 595: C !LOOK? 596: CALL RSPEAK(100) 597: C !DESCRIBE. 598: I=102 599: C !ASSUME SAFE ROOM OK. 600: IF(and(RFLAG(MSAFE),RMUNG).NE.0) I=101 601: CALL RSPEAK(I) 602: C !DESCRIBE. 603: RETURN 604: C 605: C R35-- SAFE ROOM. STATE DEPENDS ON WHETHER SAFE BLOWN. 606: C 607: 35000 IF(PRSA.NE.LOOKW) RETURN 608: C !LOOK? 609: CALL RSPEAK(104) 610: C !DESCRIBE. 611: I=105 612: C !ASSUME OK. 613: IF(SAFEF) I=106 614: C !BLOWN? 615: CALL RSPEAK(I) 616: C !DESCRIBE. 617: RETURN 618: C 619: C R36-- MAGNET ROOM. DESCRIBE, CHECK FOR SPINDIZZY DOOM. 620: C 621: 36000 IF(PRSA.NE.LOOKW) GO TO 36500 622: C !LOOK? 623: CALL RSPEAK(107) 624: C !DESCRIBE. 625: RETURN 626: C 627: 36500 IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN 628: C !WALKIN ON FLIPPED? 629: IF(CAROZF) GO TO 36600 630: C !ZOOM? 631: CALL RSPEAK(108) 632: C !NO, SPIN HIS COMPASS. 633: RETURN 634: C 635: 36600 I=58 636: C !SPIN HIS INSIDES. 637: IF(WINNER.NE.PLAYER) I=99 638: C !SPIN ROBOT. 639: CALL JIGSUP(I) 640: C !DEAD. 641: RETURN 642: C 643: C R37-- CAGE ROOM. IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM. 644: C 645: 37000 IF(CAGESF) F=MOVETO(CAGER,WINNER) 646: C !IF SOLVED, MOVE. 647: RETURN 648: C 649: END