|
|
1.1 ! root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.