1C NOBJS- NEW OBJECTS PROCESSOR 2C OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP, 3C MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES 4C 5C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 6C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 7C WRITTEN BY R. M. SUPNIK 8C 9C DECLARATIONS 10C 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" 20C 21C MISCELLANEOUS VARIABLES 22C 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" 36C 37C FUNCTIONS AND DATA 38C 39 QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0 40C NOBJS, PAGE 2 41C 42 IF(PRSO.NE.0) ODO2=ODESC2(PRSO) 43 IF(PRSI.NE.0) ODI2=ODESC2(PRSI) 44 AV=AVEHIC(WINNER) 45 NOBJS=.TRUE. 46C 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) 52C 53C RETURN HERE TO DECLARE FALSE RESULT 54C 5510 NOBJS=.FALSE. 56 RETURN 57C 58C O32-- BILLS 59C 601000 IF(PRSA.NE.EATW) GO TO 1100 61C !EAT? 62 CALL RSPEAK(639) 63C !JOKE. 64 RETURN 65C 661100 IF(PRSA.EQ.BURNW) CALL RSPEAK(640) 67C !BURN? JOKE. 68 GO TO 10 69C !LET IT BE HANDLED. 70C NOBJS, PAGE 3 71C 72C O33-- SCREEN OF LIGHT 73C 742000 TARGET=SCOL 75C !TARGET IS SCOL. 762100 IF(PRSO.NE.TARGET) GO TO 2400 77C !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) 81C !HAND PASSES THRU. 82 RETURN 83C 842200 IF((PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW).AND. 85& (PRSA.NE.MUNGW)) GO TO 2400 86 CALL RSPSUB(674,ODI2) 87C !PASSES THRU. 88 RETURN 89C 902400 IF((PRSA.NE.THROWW).OR.(PRSI.NE.TARGET)) GO TO 10 91 IF(HERE.EQ.BKBOX) GO TO 2600 92C !THRU SCOL? 93 CALL NEWSTA(PRSO,0,BKBOX,0,0) 94C !NO, THRU WALL. 95 CALL RSPSUB(675,ODO2) 96C !ENDS UP IN BOX ROOM. 97 CTICK(CEVSCL)=0 98C !CANCEL ALARM. 99 SCOLRM=0 100C !RESET SCOL ROOM. 101 RETURN 102C 1032600 IF(SCOLRM.EQ.0) GO TO 2900 104C !TRIED TO GO THRU? 105 CALL NEWSTA(PRSO,0,SCOLRM,0,0) 106C !SUCCESS. 107 CALL RSPSUB(676,ODO2) 108C !ENDS UP SOMEWHERE. 109 CTICK(CEVSCL)=0 110C !CANCEL ALARM. 111 SCOLRM=0 112C !RESET SCOL ROOM. 113 RETURN 114C 1152900 CALL RSPEAK(213) 116C !CANT DO IT. 117 RETURN 118C NOBJS, PAGE 4 119C 120C O34-- GNOME OF ZURICH 121C 1223000 IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 3200 123 IF(OTVAL(PRSO).NE.0) GO TO 3100 124C !THROW A TREASURE? 125 CALL NEWSTA(PRSO,641,0,0,0) 126C !NO, GO POP. 127 RETURN 128C 1293100 CALL NEWSTA(PRSO,0,0,0,0) 130C !YES, BYE BYE TREASURE. 131 CALL RSPSUB(642,ODO2) 132 CALL NEWSTA(ZGNOM,0,0,0,0) 133C !BYE BYE GNOME. 134 CTICK(CEVZGO)=0 135C !CANCEL EXIT. 136 F=MOVETO(BKENT,WINNER) 137C !NOW IN BANK ENTRANCE. 138 RETURN 139C 1403200 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND. 141& (PRSA.NE.MUNGW)) GO TO 3300 142 CALL NEWSTA(ZGNOM,643,0,0,0) 143C !VANISH GNOME. 144 CTICK(CEVZGO)=0 145C !CANCEL EXIT. 146 RETURN 147C 1483300 CALL RSPEAK(644) 149C !GNOME IS IMPATIENT. 150 RETURN 151C 152C O35-- EGG 153C 1544000 IF((PRSA.NE.OPENW).OR.(PRSO.NE.EGG)) GO TO 4500 155 IF(.NOT.QOPEN(EGG)) GO TO 4100 156C !OPEN ALREADY? 157 CALL RSPEAK(649) 158C !YES. 159 RETURN 160C 1614100 IF(PRSI.NE.0) GO TO 4200 162C !WITH SOMETHING? 163 CALL RSPEAK(650) 164C !NO, CANT. 165 RETURN 166C 1674200 IF(PRSI.NE.HANDS) GO TO 4300 168C !WITH HANDS? 169 CALL RSPEAK(651) 170C !NOT RECOMMENDED. 171 RETURN 172C 1734300 I=652 174C !MUNG MESSAGE. 175 IF((and(OFLAG1(PRSI),TOOLBT).NE.0).OR. 176& (and(OFLAG2(PRSI),WEAPBT).NE.0)) GO TO 4600 177 I=653 178C !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 183C 1844500 IF((PRSA.NE.OPENW).AND.(PRSA.NE.MUNGW)) GO TO 4800 185 I=655 186C !YOU BLEW IT. 1874600 CALL NEWSTA(BEGG,I,OROOM(EGG),OCAN(EGG),OADV(EGG)) 188 CALL NEWSTA(EGG,0,0,0,0) 189C !VANISH EGG. 190 OTVAL(BEGG)=2 191C !BAD EGG HAS VALUE. 192 IF(OCAN(CANAR).NE.EGG) GO TO 4700 193C !WAS CANARY INSIDE? 194 CALL RSPEAK(ODESCO(BCANA)) 195C !YES, DESCRIBE RESULT. 196 OTVAL(BCANA)=1 197 RETURN 198C 1994700 CALL NEWSTA(BCANA,0,0,0,0) 200C !NO, VANISH IT. 201 RETURN 202C 2034800 IF((PRSA.NE.DROPW).OR.(HERE.NE.MTREE)) GO TO 10 204 CALL NEWSTA(BEGG,658,FORE3,0,0) 205C !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 210C !BAD CANARY. 211 RETURN 212C NOBJS, PAGE 5 213C 214C O36-- CANARIES, GOOD AND BAD 215C 2165000 IF(PRSA.NE.WINDW) GO TO 10 217C !WIND EM UP? 218 IF(PRSO.EQ.CANAR) GO TO 5100 219C !RIGHT ONE? 220 CALL RSPEAK(645) 221C !NO, BAD NEWS. 222 RETURN 223C 2245100 IF(.NOT.SINGSF.AND.((HERE.EQ.MTREE).OR. 225& ((HERE.GE.FORE1).AND.(HERE.LT.CLEAR)))) 226& GO TO 5200 227 CALL RSPEAK(646) 228C !NO, MEDIOCRE NEWS. 229 RETURN 230C 2315200 SINGSF=.TRUE. 232C !SANG SONG. 233 I=HERE 234 IF(I.EQ.MTREE) I=FORE3 235C !PLACE BAUBLE. 236 CALL NEWSTA(BAUBL,647,I,0,0) 237 RETURN 238C 239C O37-- WHITE CLIFFS 240C 2416000 IF((PRSA.NE.CLMBW).AND.(PRSA.NE.CLMBUW).AND. 242& (PRSA.NE.CLMBDW)) GO TO 10 243 CALL RSPEAK(648) 244C !OH YEAH? 245 RETURN 246C 247C O38-- WALL 248C 2497000 IF((IABS(HERE-MLOC).NE.1).OR.(MRHERE(HERE).NE.0).OR. 250& (PRSA.NE.PUSHW)) GO TO 7100 251 CALL RSPEAK(860) 252C !PUSHED MIRROR WALL. 253 RETURN 254C 2557100 IF(and(RFLAG(HERE),RNWALL).EQ.0) GO TO 10 256 CALL RSPEAK(662) 257C !NO WALL. 258 RETURN 259C NOBJS, PAGE 6 260C 261C O39-- SONG BIRD GLOBAL 262C 2638000 IF(PRSA.NE.FINDW) GO TO 8100 264C !FIND? 265 CALL RSPEAK(666) 266 RETURN 267C 2688100 IF(PRSA.NE.EXAMIW) GO TO 10 269C !EXAMINE? 270 CALL RSPEAK(667) 271 RETURN 272C 273C O40-- PUZZLE/SCOL WALLS 274C 2759000 IF(HERE.NE.CPUZZ) GO TO 9500 276C !PUZZLE WALLS? 277 IF(PRSA.NE.PUSHW) GO TO 10 278C !PUSH? 279 DO 9100 I=1,8,2 280C !LOCATE WALL. 281 IF(PRSO.EQ.CPWL(I)) GO TO 9200 2829100 CONTINUE 283 CALL BUG(80,PRSO) 284C !WHAT? 285C 2869200 J=CPWL(I+1) 287C !GET DIRECTIONAL OFFSET. 288 NXT=CPHERE+J 289C !GET NEXT STATE. 290 WL=CPVEC(NXT) 291C !GET C(NEXT STATE). 292 GO TO (9300,9300,9300,9250,9350),(WL+4) 293C !PROCESS. 294C 2959250 CALL RSPEAK(876) 296C !CLEAR CORRIDOR. 297 RETURN 298C 2999300 IF(CPVEC(NXT+J).EQ.0) GO TO 9400 300C !MOVABLE, ROOM TO MOVE? 3019350 CALL RSPEAK(877) 302C !IMMOVABLE, NO ROOM. 303 RETURN 304C 3059400 I=878 306C !ASSUME FIRST PUSH. 307 IF(CPUSHF) I=879 308C !NOT? 309 CPUSHF=.TRUE. 310 CPVEC(NXT+J)=WL 311C !MOVE WALL. 312 CPVEC(NXT)=0 313C !VACATE NEXT STATE. 314 CALL CPGOTO(NXT) 315C !ONWARD. 316 CALL CPINFO(I,NXT) 317C !DESCRIBE. 318 CALL PRINCR(.TRUE.,HERE) 319C !PRINT ROOMS CONTENTS. 320 RFLAG(HERE)=or(RFLAG(HERE),RSEEN) 321 RETURN 322C 3239500 IF(HERE.NE.SCOLAC) GO TO 9700 324C !IN SCOL ACTIVE ROOM? 325 DO 9600 I=1,12,3 326 TARGET=SCOLWL(I+1) 327C !ASSUME TARGET. 328 IF(SCOLWL(I).EQ.HERE) GO TO 2100 329C !TREAT IF FOUND. 3309600 CONTINUE 331C 3329700 IF(HERE.NE.BKBOX) GO TO 10 333C !IN BOX ROOM? 334 TARGET=WNORT 335 GO TO 2100 336C NOBJS, PAGE 7 337C 338C O41-- SHORT POLE 339C 34010000 IF(PRSA.NE.RAISEW) GO TO 10100 341C !LIFT? 342 I=749 343C !ASSUME UP. 344 IF(POLEUF.EQ.2) I=750 345C !ALREADY UP? 346 CALL RSPEAK(I) 347 POLEUF=2 348C !POLE IS RAISED. 349 RETURN 350C 35110100 IF((PRSA.NE.LOWERW).AND.(PRSA.NE.PUSHW)) GO TO 10 352 IF(POLEUF.NE.0) GO TO 10200 353C !ALREADY LOWERED? 354 CALL RSPEAK(751) 355C !CANT DO IT. 356 RETURN 357C 35810200 IF(MOD(MDIR,180).NE.0) GO TO 10300 359C !MIRROR N-S? 360 POLEUF=0 361C !YES, LOWER INTO 362 CALL RSPEAK(752) 363C !CHANNEL. 364 RETURN 365C 36610300 IF((MDIR.NE.270).OR.(MLOC.NE.MRB)) GO TO 10400 367 POLEUF=0 368C !LOWER INTO HOLE. 369 CALL RSPEAK(753) 370 RETURN 371C 37210400 CALL RSPEAK(753+POLEUF) 373C !POLEUF = 1 OR 2. 374 POLEUF=1 375C !NOW ON FLOOR. 376 RETURN 377C 378C O42-- MIRROR SWITCH 379C 38011000 IF(PRSA.NE.PUSHW) GO TO 10 381C !PUSH? 382 IF(MRPSHF) GO TO 11300 383C !ALREADY PUSHED? 384 CALL RSPEAK(756) 385C !BUTTON GOES IN. 386 DO 11100 I=1,OLNT 387C !BLOCKED? 388 IF(QHERE(I,MREYE).AND.(I.NE.RBEAM)) GO TO 11200 38911100 CONTINUE 390 CALL RSPEAK(757) 391C !NOTHING IN BEAM. 392 RETURN 393C 39411200 CFLAG(CEVMRS)=.TRUE. 395C !MIRROR OPENS. 396 CTICK(CEVMRS)=7 397 MRPSHF=.TRUE. 398 MROPNF=.TRUE. 399 RETURN 400C 40111300 CALL RSPEAK(758) 402C !MIRROR ALREADYOPEN. 403 RETURN 404C NOBJS, PAGE 8 405C 406C O43-- BEAM FUNCTION 407C 40812000 IF((PRSA.NE.TAKEW).OR.(PRSO.NE.RBEAM)) GO TO 12100 409 CALL RSPEAK(759) 410C !TAKE BEAM, JOKE. 411 RETURN 412C 41312100 I=PRSO 414C !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 41912200 IF(OADV(I).NE.WINNER) GO TO 12300 420C !CARRYING? 421 CALL NEWSTA(I,0,HERE,0,0) 422C !DROP OBJ. 423 CALL RSPSUB(760,ODESC2(I)) 424 RETURN 425C 42612300 J=761 427C !ASSUME NOT IN ROOM. 428 IF(QHERE(J,HERE)) I=762 429C !IN ROOM? 430 CALL RSPSUB(J,ODESC2(I)) 431C !DESCRIBE. 432 RETURN 433C 434C O44-- BRONZE DOOR 435C 43613000 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) 440C !DOOR NOT THERE. 441 RETURN 442C 44313100 IF(.NOT.OPNCLS(ODOOR,764,765)) GO TO 10 444C !OPEN/CLOSE? 445 IF((HERE.EQ.NCELL).AND.QOPEN(ODOOR)) 446& CALL RSPEAK(766) 447 RETURN 448C 449C O45-- QUIZ DOOR 450C 45114000 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 14100 452 CALL RSPEAK(767) 453C !DOOR WONT MOVE. 454 RETURN 455C 45614100 IF(PRSA.NE.KNOCKW) GO TO 10 457C !KNOCK? 458 IF(INQSTF) GO TO 14200 459C !TRIED IT ALREADY? 460 INQSTF=.TRUE. 461C !START INQUISITION. 462 CFLAG(CEVINQ)=.TRUE. 463 CTICK(CEVINQ)=2 464 QUESNO=RND(8) 465C !SELECT QUESTION. 466 NQATT=0 467 CORRCT=0 468 CALL RSPEAK(768) 469C !ANNOUNCE RULES. 470 CALL RSPEAK(769) 471 CALL RSPEAK(770+QUESNO) 472C !ASK QUESTION. 473 RETURN 474C 47514200 CALL RSPEAK(798) 476C !NO REPLY. 477 RETURN 478C 479C O46-- LOCKED DOOR 480C 48115000 IF(PRSA.NE.OPENW) GO TO 10 482C !OPEN? 483 CALL RSPEAK(778) 484C !CANT. 485 RETURN 486C 487C O47-- CELL DOOR 488C 48916000 NOBJS=OPNCLS(CDOOR,779,780) 490C !OPEN/CLOSE? 491 RETURN 492C NOBJS, PAGE 9 493C 494C O48-- DIALBUTTON 495C 49617000 IF(PRSA.NE.PUSHW) GO TO 10 497C !PUSH? 498 CALL RSPEAK(809) 499C !CLICK. 500 IF(QOPEN(CDOOR)) CALL RSPEAK(810) 501C !CLOSE CELL DOOR. 502C 503 DO 17100 I=1,OLNT 504C !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) 50917100 CONTINUE 510C 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) 515C 516 IF(AROOM(PLAYER).NE.CELL) GO TO 17400 517C !PLAYER IN CELL? 518 IF(LCELL.NE.4) GO TO 17200 519C !IN RIGHT CELL? 520 OFLAG1(ODOOR)=or(OFLAG1(ODOOR), VISIBT) 521 F=MOVETO(NCELL,PLAYER) 522C !YES, MOVETO NCELL. 523 GO TO 17400 52417200 F=MOVETO(PCELL,PLAYER) 525C !NO, MOVETO PCELL. 526C 52717400 LCELL=PNUMB 528 RETURN 529C NOBJS, PAGE 10 530C 531C O49-- DIAL INDICATOR 532C 53318000 IF(PRSA.NE.SPINW) GO TO 18100 534C !SPIN? 535 PNUMB=RND(8)+1 536C !WHEE 537C ! 538 CALL RSPSUB(797,712+PNUMB) 539 RETURN 540C 54118100 IF((PRSA.NE.MOVEW).AND.(PRSA.NE.PUTW).AND. 542& (PRSA.NE.TRNTOW)) GO TO 10 543 IF(PRSI.NE.0) GO TO 18200 544C !TURN DIAL TO X? 545 CALL RSPEAK(806) 546C !MUST SPECIFY. 547 RETURN 548C 54918200 IF((PRSI.GE.NUM1).AND.(PRSI.LE.NUM8)) GO TO 18300 550 CALL RSPEAK(807) 551C !MUST BE DIGIT. 552 RETURN 553C 55418300 PNUMB=PRSI-NUM1+1 555C !SET UP NEW. 556 CALL RSPSUB(808,712+PNUMB) 557 RETURN 558C 559C O50-- GLOBAL MIRROR 560C 56119000 NOBJS=MIRPAN(832,.FALSE.) 562 RETURN 563C 564C O51-- GLOBAL PANEL 565C 56620000 IF(HERE.NE.FDOOR) GO TO 20100 567C !AT FRONT DOOR? 568 IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10 569 CALL RSPEAK(843) 570C !PANEL IN DOOR, NOGO. 571 RETURN 572C 57320100 NOBJS=MIRPAN(838,.TRUE.) 574 RETURN 575C 576C O52-- PUZZLE ROOM SLIT 577C 57821000 IF((PRSA.NE.PUTW).OR.(PRSI.NE.CSLIT)) GO TO 10 579 IF(PRSO.NE.GCARD) GO TO 21100 580C !PUT CARD IN SLIT? 581 CALL NEWSTA(PRSO,863,0,0,0) 582C !KILL CARD. 583 CPOUTF=.TRUE. 584C !OPEN DOOR. 585 OFLAG1(STLDR)=and(OFLAG1(STLDR),not(VISIBT)) 586 RETURN 587C 58821100 IF((and(OFLAG1(PRSO),VICTBT).EQ.0).AND. 589& (and(OFLAG2(PRSO),VILLBT).EQ.0)) GO TO 21200 590 CALL RSPEAK(RND(5)+552) 591C !JOKE FOR VILL, VICT. 592 RETURN 593C 59421200 CALL NEWSTA(PRSO,0,0,0,0) 595C !KILL OBJECT. 596 CALL RSPSUB(864,ODO2) 597C !DESCRIBE. 598 RETURN 599C 600 END 601C MIRPAN-- PROCESSOR FOR GLOBAL MIRROR/PANEL 602C 603C DECLARATIONS 604C 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" 612C MIRPAN, PAGE 2 613C 614 MIRPAN=.TRUE. 615 NUM=MRHERE(HERE) 616C !GET MIRROR NUM. 617 IF(NUM.NE.0) GO TO 100 618C !ANY HERE? 619 CALL RSPEAK(ST) 620C !NO, LOSE. 621 RETURN 622C 623100 MRBF=0 624C !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) 629C !CANT OPEN OR MOVE. 630 RETURN 631C 632200 IF(PNF.OR.((PRSA.NE.LOOKIW).AND.(PRSA.NE.EXAMIW).AND. 633& (PRSA.NE.LOOKW))) GO TO 300 634 CALL RSPEAK(844+MRBF) 635C !LOOK IN MIRROR. 636 RETURN 637C 638300 IF(PRSA.NE.MUNGW) GO TO 400 639C !BREAK? 640 CALL RSPEAK(ST+2+MRBF) 641C !DO IT. 642 IF((NUM.EQ.1).AND..NOT.PNF) MR1F=.FALSE. 643 IF((NUM.EQ.2).AND..NOT.PNF) MR2F=.FALSE. 644 RETURN 645C 646400 IF(PNF.OR.(MRBF.EQ.0)) GO TO 500 647C !BROKEN MIRROR? 648 CALL RSPEAK(846) 649 RETURN 650C 651500 IF(PRSA.NE.PUSHW) GO TO 600 652C !PUSH? 653 CALL RSPEAK(ST+3+NUM) 654 RETURN 655C 656600 MIRPAN=.FALSE. 657C !CANT HANDLE IT. 658 RETURN 659C 660 END 661