1: C NOBJS- NEW 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 NOBJS(RI,ARG) 12: IMPLICIT INTEGER (A-Z) 13: LOGICAL QOPEN,MOVETO,F 14: LOGICAL QHERE,OPNCLS,MIRPAN 15: #include "parser.h" 16: #include "gamestate.h" 17: #include "state.h" 18: #include "screen.h" 19: #include "puzzle.h" 20: C 21: C MISCELLANEOUS VARIABLES 22: C 23: COMMON /HYPER/ HFACTR 24: #include "rooms.h" 25: #include "rflag.h" 26: #include "rindex.h" 27: #include "objects.h" 28: #include "oflags.h" 29: #include "oindex.h" 30: #include "clock.h" 31: 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: C NOBJS, PAGE 2 41: C 42: IF(PRSO.NE.0) ODO2=ODESC2(PRSO) 43: IF(PRSI.NE.0) ODI2=ODESC2(PRSI) 44: AV=AVEHIC(WINNER) 45: NOBJS=.TRUE. 46: C 47: GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000, 48: & 10000,11000,12000,13000,14000,15000,16000,17000, 49: & 18000,19000,20000,21000), 50: & (RI-31) 51: CALL BUG(6,RI) 52: C 53: C RETURN HERE TO DECLARE FALSE RESULT 54: C 55: 10 NOBJS=.FALSE. 56: RETURN 57: C 58: C O32-- BILLS 59: C 60: 1000 IF(PRSA.NE.EATW) GO TO 1100 61: C !EAT? 62: CALL RSPEAK(639) 63: C !JOKE. 64: RETURN 65: C 66: 1100 IF(PRSA.EQ.BURNW) CALL RSPEAK(640) 67: C !BURN? JOKE. 68: GO TO 10 69: C !LET IT BE HANDLED. 70: C NOBJS, PAGE 3 71: C 72: C O33-- SCREEN OF LIGHT 73: C 74: 2000 TARGET=SCOL 75: C !TARGET IS SCOL. 76: 2100 IF(PRSO.NE.TARGET) GO TO 2400 77: C !PRSO EQ TARGET? 78: IF((PRSA.NE.PUSHW).AND.(PRSA.NE.MOVEW).AND. 79: & (PRSA.NE.TAKEW).AND.(PRSA.NE.RUBW)) GO TO 2200 80: CALL RSPEAK(673) 81: C !HAND PASSES THRU. 82: RETURN 83: C 84: 2200 IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND. 85: & (PRSA.NE.MUNGW)) GO TO 2400 86: CALL RSPSUB(674,ODI2) 87: C !PASSES THRU. 88: RETURN 89: C 90: 2400 IF((PRSA.NE.THROWW).OR.(PRSI.NE.TARGET)) GO TO 10 91: IF(HERE.EQ.BKBOX) GO TO 2600 92: C !THRU SCOL? 93: CALL NEWSTA(PRSO,0,BKBOX,0,0) 94: C !NO, THRU WALL. 95: CALL RSPSUB(675,ODO2) 96: C !ENDS UP IN BOX ROOM. 97: CTICK(CEVSCL)=0 98: C !CANCEL ALARM. 99: SCOLRM=0 100: C !RESET SCOL ROOM. 101: RETURN 102: C 103: 2600 IF(SCOLRM.EQ.0) GO TO 2900 104: C !TRIED TO GO THRU? 105: CALL NEWSTA(PRSO,0,SCOLRM,0,0) 106: C !SUCCESS. 107: CALL RSPSUB(676,ODO2) 108: C !ENDS UP SOMEWHERE. 109: CTICK(CEVSCL)=0 110: C !CANCEL ALARM. 111: SCOLRM=0 112: C !RESET SCOL ROOM. 113: RETURN 114: C 115: 2900 CALL RSPEAK(213) 116: C !CANT DO IT. 117: RETURN 118: C NOBJS, PAGE 4 119: C 120: C O34-- GNOME OF ZURICH 121: C 122: 3000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 3200 123: IF(OTVAL(PRSO).NE.0) GO TO 3100 124: C !THROW A TREASURE? 125: CALL NEWSTA(PRSO,641,0,0,0) 126: C !NO, GO POP. 127: RETURN 128: C 129: 3100 CALL NEWSTA(PRSO,0,0,0,0) 130: C !YES, BYE BYE TREASURE. 131: CALL RSPSUB(642,ODO2) 132: CALL NEWSTA(ZGNOM,0,0,0,0) 133: C !BYE BYE GNOME. 134: CTICK(CEVZGO)=0 135: C !CANCEL EXIT. 136: F=MOVETO(BKENT,WINNER) 137: C !NOW IN BANK ENTRANCE. 138: RETURN 139: C 140: 3200 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND. 141: & (PRSA.NE.MUNGW)) GO TO 3300 142: CALL NEWSTA(ZGNOM,643,0,0,0) 143: C !VANISH GNOME. 144: CTICK(CEVZGO)=0 145: C !CANCEL EXIT. 146: RETURN 147: C 148: 3300 CALL RSPEAK(644) 149: C !GNOME IS IMPATIENT. 150: RETURN 151: C 152: C O35-- EGG 153: C 154: 4000 IF((PRSA.NE.OPENW).OR.(PRSO.NE.EGG)) GO TO 4500 155: IF(.NOT.QOPEN(EGG)) GO TO 4100 156: C !OPEN ALREADY? 157: CALL RSPEAK(649) 158: C !YES. 159: RETURN 160: C 161: 4100 IF(PRSI.NE.0) GO TO 4200 162: C !WITH SOMETHING? 163: CALL RSPEAK(650) 164: C !NO, CANT. 165: RETURN 166: C 167: 4200 IF(PRSI.NE.HANDS) GO TO 4300 168: C !WITH HANDS? 169: CALL RSPEAK(651) 170: C !NOT RECOMMENDED. 171: RETURN 172: C 173: 4300 I=652 174: C !MUNG MESSAGE. 175: IF((and(OFLAG1(PRSI),TOOLBT).NE.0).OR. 176: & (and(OFLAG2(PRSI),WEAPBT).NE.0)) GO TO 4600 177: I=653 178: C !NOVELTY 1. 179: IF(and(OFLAG2(PRSO),FITEBT).NE.0) I=654 180: OFLAG2(PRSO)=or(OFLAG2(PRSO),FITEBT) 181: CALL RSPSUB(I,ODI2) 182: RETURN 183: C 184: 4500 IF((PRSA.NE.OPENW).AND.(PRSA.NE.MUNGW)) GO TO 4800 185: I=655 186: C !YOU BLEW IT. 187: 4600 CALL NEWSTA(BEGG,I,OROOM(EGG),OCAN(EGG),OADV(EGG)) 188: CALL NEWSTA(EGG,0,0,0,0) 189: C !VANISH EGG. 190: OTVAL(BEGG)=2 191: C !BAD EGG HAS VALUE. 192: IF(OCAN(CANAR).NE.EGG) GO TO 4700 193: C !WAS CANARY INSIDE? 194: CALL RSPEAK(ODESCO(BCANA)) 195: C !YES, DESCRIBE RESULT. 196: OTVAL(BCANA)=1 197: RETURN 198: C 199: 4700 CALL NEWSTA(BCANA,0,0,0,0) 200: C !NO, VANISH IT. 201: RETURN 202: C 203: 4800 IF((PRSA.NE.DROPW).OR.(HERE.NE.MTREE)) GO TO 10 204: CALL NEWSTA(BEGG,658,FORE3,0,0) 205: C !DROPPED EGG. 206: CALL NEWSTA(EGG,0,0,0,0) 207: OTVAL(BEGG)=2 208: IF(OCAN(CANAR).NE.EGG) GO TO 4700 209: OTVAL(BCANA)=1 210: C !BAD CANARY. 211: RETURN 212: C NOBJS, PAGE 5 213: C 214: C O36-- CANARIES, GOOD AND BAD 215: C 216: 5000 IF(PRSA.NE.WINDW) GO TO 10 217: C !WIND EM UP? 218: IF(PRSO.EQ.CANAR) GO TO 5100 219: C !RIGHT ONE? 220: CALL RSPEAK(645) 221: C !NO, BAD NEWS. 222: RETURN 223: C 224: 5100 IF(.NOT.SINGSF.AND.((HERE.EQ.MTREE).OR. 225: & ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR)))) 226: & GO TO 5200 227: CALL RSPEAK(646) 228: C !NO, MEDIOCRE NEWS. 229: RETURN 230: C 231: 5200 SINGSF=.TRUE. 232: C !SANG SONG. 233: I=HERE 234: IF(I.EQ.MTREE) I=FORE3 235: C !PLACE BAUBLE. 236: CALL NEWSTA(BAUBL,647,I,0,0) 237: RETURN 238: C 239: C O37-- WHITE CLIFFS 240: C 241: 6000 IF((PRSA.NE.CLMBW).AND.(PRSA.NE.CLMBUW).AND. 242: & (PRSA.NE.CLMBDW)) GO TO 10 243: CALL RSPEAK(648) 244: C !OH YEAH? 245: RETURN 246: C 247: C O38-- WALL 248: C 249: 7000 IF((IABS(HERE-MLOC).NE.1).OR.(MRHERE(HERE).NE.0).OR. 250: & (PRSA.NE.PUSHW)) GO TO 7100 251: CALL RSPEAK(860) 252: C !PUSHED MIRROR WALL. 253: RETURN 254: C 255: 7100 IF(and(RFLAG(HERE),RNWALL).EQ.0) GO TO 10 256: CALL RSPEAK(662) 257: C !NO WALL. 258: RETURN 259: C NOBJS, PAGE 6 260: C 261: C O39-- SONG BIRD GLOBAL 262: C 263: 8000 IF(PRSA.NE.FINDW) GO TO 8100 264: C !FIND? 265: CALL RSPEAK(666) 266: RETURN 267: C 268: 8100 IF(PRSA.NE.EXAMIW) GO TO 10 269: C !EXAMINE? 270: CALL RSPEAK(667) 271: RETURN 272: C 273: C O40-- PUZZLE/SCOL WALLS 274: C 275: 9000 IF(HERE.NE.CPUZZ) GO TO 9500 276: C !PUZZLE WALLS? 277: IF(PRSA.NE.PUSHW) GO TO 10 278: C !PUSH? 279: DO 9100 I=1,8,2 280: C !LOCATE WALL. 281: IF(PRSO.EQ.CPWL(I)) GO TO 9200 282: 9100 CONTINUE 283: CALL BUG(80,PRSO) 284: C !WHAT? 285: C 286: 9200 J=CPWL(I+1) 287: C !GET DIRECTIONAL OFFSET. 288: NXT=CPHERE+J 289: C !GET NEXT STATE. 290: WL=CPVEC(NXT) 291: C !GET C(NEXT STATE). 292: GO TO (9300,9300,9300,9250,9350),(WL+4) 293: C !PROCESS. 294: C 295: 9250 CALL RSPEAK(876) 296: C !CLEAR CORRIDOR. 297: RETURN 298: C 299: 9300 IF(CPVEC(NXT+J).EQ.0) GO TO 9400 300: C !MOVABLE, ROOM TO MOVE? 301: 9350 CALL RSPEAK(877) 302: C !IMMOVABLE, NO ROOM. 303: RETURN 304: C 305: 9400 I=878 306: C !ASSUME FIRST PUSH. 307: IF(CPUSHF) I=879 308: C !NOT? 309: CPUSHF=.TRUE. 310: CPVEC(NXT+J)=WL 311: C !MOVE WALL. 312: CPVEC(NXT)=0 313: C !VACATE NEXT STATE. 314: CALL CPGOTO(NXT) 315: C !ONWARD. 316: CALL CPINFO(I,NXT) 317: C !DESCRIBE. 318: CALL PRINCR(.TRUE.,HERE) 319: C !PRINT ROOMS CONTENTS. 320: RFLAG(HERE)=or(RFLAG(HERE),RSEEN) 321: RETURN 322: C 323: 9500 IF(HERE.NE.SCOLAC) GO TO 9700 324: C !IN SCOL ACTIVE ROOM? 325: DO 9600 I=1,12,3 326: TARGET=SCOLWL(I+1) 327: C !ASSUME TARGET. 328: IF(SCOLWL(I).EQ.HERE) GO TO 2100 329: C !TREAT IF FOUND. 330: 9600 CONTINUE 331: C 332: 9700 IF(HERE.NE.BKBOX) GO TO 10 333: C !IN BOX ROOM? 334: TARGET=WNORT 335: GO TO 2100 336: C NOBJS, PAGE 7 337: C 338: C O41-- SHORT POLE 339: C 340: 10000 IF(PRSA.NE.RAISEW) GO TO 10100 341: C !LIFT? 342: I=749 343: C !ASSUME UP. 344: IF(POLEUF.EQ.2) I=750 345: C !ALREADY UP? 346: CALL RSPEAK(I) 347: POLEUF=2 348: C !POLE IS RAISED. 349: RETURN 350: C 351: 10100 IF((PRSA.NE.LOWERW).AND.(PRSA.NE.PUSHW)) GO TO 10 352: IF(POLEUF.NE.0) GO TO 10200 353: C !ALREADY LOWERED? 354: CALL RSPEAK(751) 355: C !CANT DO IT. 356: RETURN 357: C 358: 10200 IF(MOD(MDIR,180).NE.0) GO TO 10300 359: C !MIRROR N-S? 360: POLEUF=0 361: C !YES, LOWER INTO 362: CALL RSPEAK(752) 363: C !CHANNEL. 364: RETURN 365: C 366: 10300 IF((MDIR.NE.270).OR.(MLOC.NE.MRB)) GO TO 10400 367: POLEUF=0 368: C !LOWER INTO HOLE. 369: CALL RSPEAK(753) 370: RETURN 371: C 372: 10400 CALL RSPEAK(753+POLEUF) 373: C !POLEUF = 1 OR 2. 374: POLEUF=1 375: C !NOW ON FLOOR. 376: RETURN 377: C 378: C O42-- MIRROR SWITCH 379: C 380: 11000 IF(PRSA.NE.PUSHW) GO TO 10 381: C !PUSH? 382: IF(MRPSHF) GO TO 11300 383: C !ALREADY PUSHED? 384: CALL RSPEAK(756) 385: C !BUTTON GOES IN. 386: DO 11100 I=1,OLNT 387: C !BLOCKED? 388: IF(QHERE(I,MREYE).AND.(I.NE.RBEAM)) GO TO 11200 389: 11100 CONTINUE 390: CALL RSPEAK(757) 391: C !NOTHING IN BEAM. 392: RETURN 393: C 394: 11200 CFLAG(CEVMRS)=.TRUE. 395: C !MIRROR OPENS. 396: CTICK(CEVMRS)=7 397: MRPSHF=.TRUE. 398: MROPNF=.TRUE. 399: RETURN 400: C 401: 11300 CALL RSPEAK(758) 402: C !MIRROR ALREADYOPEN. 403: RETURN 404: C NOBJS, PAGE 8 405: C 406: C O43-- BEAM FUNCTION 407: C 408: 12000 IF((PRSA.NE.TAKEW).OR.(PRSO.NE.RBEAM)) GO TO 12100 409: CALL RSPEAK(759) 410: C !TAKE BEAM, JOKE. 411: RETURN 412: C 413: 12100 I=PRSO 414: C !ASSUME BLK WITH DIROBJ. 415: IF((PRSA.EQ.PUTW).AND.(PRSI.EQ.RBEAM)) GO TO 12200 416: IF((PRSA.NE.MUNGW).OR.(PRSO.NE.RBEAM).OR. 417: & (PRSI.EQ.0)) GO TO 10 418: I=PRSI 419: 12200 IF(OADV(I).NE.WINNER) GO TO 12300 420: C !CARRYING? 421: CALL NEWSTA(I,0,HERE,0,0) 422: C !DROP OBJ. 423: CALL RSPSUB(760,ODESC2(I)) 424: RETURN 425: C 426: 12300 J=761 427: C !ASSUME NOT IN ROOM. 428: IF(QHERE(J,HERE)) I=762 429: C !IN ROOM? 430: CALL RSPSUB(J,ODESC2(I)) 431: C !DESCRIBE. 432: RETURN 433: C 434: C O44-- BRONZE DOOR 435: C 436: 13000 IF((HERE.EQ.NCELL).OR.((LCELL.EQ.4).AND. 437: & ((HERE.EQ.CELL).OR.(HERE.EQ.SCORR)))) 438: & GO TO 13100 439: CALL RSPEAK(763) 440: C !DOOR NOT THERE. 441: RETURN 442: C 443: 13100 IF(.NOT.OPNCLS(ODOOR,764,765)) GO TO 10 444: C !OPEN/CLOSE? 445: IF((HERE.EQ.NCELL).AND.QOPEN(ODOOR)) 446: & CALL RSPEAK(766) 447: RETURN 448: C 449: C O45-- QUIZ DOOR 450: C 451: 14000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 14100 452: CALL RSPEAK(767) 453: C !DOOR WONT MOVE. 454: RETURN 455: C 456: 14100 IF(PRSA.NE.KNOCKW) GO TO 10 457: C !KNOCK? 458: IF(INQSTF) GO TO 14200 459: C !TRIED IT ALREADY? 460: INQSTF=.TRUE. 461: C !START INQUISITION. 462: CFLAG(CEVINQ)=.TRUE. 463: CTICK(CEVINQ)=2 464: QUESNO=RND(8) 465: C !SELECT QUESTION. 466: NQATT=0 467: CORRCT=0 468: CALL RSPEAK(768) 469: C !ANNOUNCE RULES. 470: CALL RSPEAK(769) 471: CALL RSPEAK(770+QUESNO) 472: C !ASK QUESTION. 473: RETURN 474: C 475: 14200 CALL RSPEAK(798) 476: C !NO REPLY. 477: RETURN 478: C 479: C O46-- LOCKED DOOR 480: C 481: 15000 IF(PRSA.NE.OPENW) GO TO 10 482: C !OPEN? 483: CALL RSPEAK(778) 484: C !CANT. 485: RETURN 486: C 487: C O47-- CELL DOOR 488: C 489: 16000 NOBJS=OPNCLS(CDOOR,779,780) 490: C !OPEN/CLOSE? 491: RETURN 492: C NOBJS, PAGE 9 493: C 494: C O48-- DIALBUTTON 495: C 496: 17000 IF(PRSA.NE.PUSHW) GO TO 10 497: C !PUSH? 498: CALL RSPEAK(809) 499: C !CLICK. 500: IF(QOPEN(CDOOR)) CALL RSPEAK(810) 501: C !CLOSE CELL DOOR. 502: C 503: DO 17100 I=1,OLNT 504: C !RELOCATE OLD TO HYPER. 505: IF((OROOM(I).EQ.CELL).AND.(and(OFLAG1(I),DOORBT).EQ.0)) 506: & CALL NEWSTA(I,0,LCELL*HFACTR,0,0) 507: IF(OROOM(I).EQ.(PNUMB*HFACTR)) 508: & CALL NEWSTA(I,0,CELL,0,0) 509: 17100 CONTINUE 510: C 511: OFLAG2(ODOOR)=and(OFLAG2(ODOOR), not(OPENBT)) 512: OFLAG2(CDOOR)=and(OFLAG2(CDOOR), not(OPENBT)) 513: OFLAG1(ODOOR)=and(OFLAG1(ODOOR), not(VISIBT)) 514: IF(PNUMB.EQ.4) OFLAG1(ODOOR)=or(OFLAG1(ODOOR),VISIBT) 515: C 516: IF(AROOM(PLAYER).NE.CELL) GO TO 17400 517: C !PLAYER IN CELL? 518: IF(LCELL.NE.4) GO TO 17200 519: C !IN RIGHT CELL? 520: OFLAG1(ODOOR)=or(OFLAG1(ODOOR), VISIBT) 521: F=MOVETO(NCELL,PLAYER) 522: C !YES, MOVETO NCELL. 523: GO TO 17400 524: 17200 F=MOVETO(PCELL,PLAYER) 525: C !NO, MOVETO PCELL. 526: C 527: 17400 LCELL=PNUMB 528: RETURN 529: C NOBJS, PAGE 10 530: C 531: C O49-- DIAL INDICATOR 532: C 533: 18000 IF(PRSA.NE.SPINW) GO TO 18100 534: C !SPIN? 535: PNUMB=RND(8)+1 536: C !WHEE 537: C ! 538: CALL RSPSUB(797,712+PNUMB) 539: RETURN 540: C 541: 18100 IF((PRSA.NE.MOVEW).AND.(PRSA.NE.PUTW).AND. 542: & (PRSA.NE.TRNTOW)) GO TO 10 543: IF(PRSI.NE.0) GO TO 18200 544: C !TURN DIAL TO X? 545: CALL RSPEAK(806) 546: C !MUST SPECIFY. 547: RETURN 548: C 549: 18200 IF((PRSI.GE.NUM1).AND.(PRSI.LE.NUM8)) GO TO 18300 550: CALL RSPEAK(807) 551: C !MUST BE DIGIT. 552: RETURN 553: C 554: 18300 PNUMB=PRSI-NUM1+1 555: C !SET UP NEW. 556: CALL RSPSUB(808,712+PNUMB) 557: RETURN 558: C 559: C O50-- GLOBAL MIRROR 560: C 561: 19000 NOBJS=MIRPAN(832,.FALSE.) 562: RETURN 563: C 564: C O51-- GLOBAL PANEL 565: C 566: 20000 IF(HERE.NE.FDOOR) GO TO 20100 567: C !AT FRONT DOOR? 568: IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10 569: CALL RSPEAK(843) 570: C !PANEL IN DOOR, NOGO. 571: RETURN 572: C 573: 20100 NOBJS=MIRPAN(838,.TRUE.) 574: RETURN 575: C 576: C O52-- PUZZLE ROOM SLIT 577: C 578: 21000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.CSLIT)) GO TO 10 579: IF(PRSO.NE.GCARD) GO TO 21100 580: C !PUT CARD IN SLIT? 581: CALL NEWSTA(PRSO,863,0,0,0) 582: C !KILL CARD. 583: CPOUTF=.TRUE. 584: C !OPEN DOOR. 585: OFLAG1(STLDR)=and(OFLAG1(STLDR),not(VISIBT)) 586: RETURN 587: C 588: 21100 IF((and(OFLAG1(PRSO),VICTBT).EQ.0).AND. 589: & (and(OFLAG2(PRSO),VILLBT).EQ.0)) GO TO 21200 590: CALL RSPEAK(RND(5)+552) 591: C !JOKE FOR VILL, VICT. 592: RETURN 593: C 594: 21200 CALL NEWSTA(PRSO,0,0,0,0) 595: C !KILL OBJECT. 596: CALL RSPSUB(864,ODO2) 597: C !DESCRIBE. 598: RETURN 599: C 600: END 601: C MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL 602: C 603: C DECLARATIONS 604: C 605: LOGICAL FUNCTION MIRPAN(ST,PNF) 606: IMPLICIT INTEGER(A-Z) 607: LOGICAL PNF 608: #include "gamestate.h" 609: #include "parser.h" 610: #include "verbs.h" 611: #include "flags.h" 612: C MIRPAN, PAGE 2 613: C 614: MIRPAN=.TRUE. 615: NUM=MRHERE(HERE) 616: C !GET MIRROR NUM. 617: IF(NUM.NE.0) GO TO 100 618: C !ANY HERE? 619: CALL RSPEAK(ST) 620: C !NO, LOSE. 621: RETURN 622: C 623: 100 MRBF=0 624: C !ASSUME MIRROR OK. 625: IF(((NUM.EQ.1).AND..NOT.MR1F).OR. 626: & ((NUM.EQ.2).AND..NOT.MR2F)) MRBF=1 627: IF((PRSA.NE.MOVEW).AND.(PRSA.NE.OPENW)) GO TO 200 628: CALL RSPEAK(ST+1) 629: C !CANT OPEN OR MOVE. 630: RETURN 631: C 632: 200 IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND. 633: & (PRSA.NE.LOOKW))) GO TO 300 634: CALL RSPEAK(844+MRBF) 635: C !LOOK IN MIRROR. 636: RETURN 637: C 638: 300 IF(PRSA.NE.MUNGW) GO TO 400 639: C !BREAK? 640: CALL RSPEAK(ST+2+MRBF) 641: C !DO IT. 642: IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE. 643: IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE. 644: RETURN 645: C 646: 400 IF(PNF.OR.(MRBF.EQ.0)) GO TO 500 647: C !BROKEN MIRROR? 648: CALL RSPEAK(846) 649: RETURN 650: C 651: 500 IF(PRSA.NE.PUSHW) GO TO 600 652: C !PUSH? 653: CALL RSPEAK(ST+3+NUM) 654: RETURN 655: C 656: 600 MIRPAN=.FALSE. 657: C !CANT HANDLE IT. 658: RETURN 659: C 660: END