1C OAPPLI- OBJECT SPECIAL ACTION ROUTINES 2C 3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142 4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED 5C WRITTEN BY R. M. SUPNIK 6C 7C DECLARATIONS 8C 9 LOGICAL FUNCTION OAPPLI(RI,ARG) 10 IMPLICIT INTEGER (A-Z) 11 LOGICAL SOBJS,NOBJS 12 LOGICAL QOPEN,QON,LIT 13 LOGICAL MOVETO,RMDESC,CLOCKD 14 LOGICAL THIEFP,CYCLOP,TROLLP,BALLOP,LIGHTP 15 LOGICAL QEMPTY,QHERE,F,OPNCLS 16#include "parser.h" 17#include "gamestate.h" 18#include "state.h" 19C 20 COMMON /BATS/ BATDRP(9) 21C 22C PUZZLE ROOM 23C 24 COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64) 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 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 40 QON(R)=and(OFLAG1(R),ONBT).NE.0 41 DATA MXSMP/99/ 42C OAPPLI, PAGE 2 43C 44 IF(RI.EQ.0) GO TO 10 45C !ZERO IS FALSE APP. 46 IF(RI.LE.MXSMP) GO TO 100 47C !SIMPLE OBJECT? 48 IF(PRSO.GT.220) GO TO 5 49 IF(PRSO.NE.0) ODO2=ODESC2(PRSO) 505 IF(PRSI.NE.0) ODI2=ODESC2(PRSI) 51 AV=AVEHIC(WINNER) 52 FLOBTS=FLAMBT+LITEBT+ONBT 53 OAPPLI=.TRUE. 54C 55 GO TO (2000,5000,10000,11000,12000,15000,18000, 56& 19000,20000,22000,25000,26000,32000,35000,39000,40000, 57& 45000,47000,48000,49000,50000,51000,52000,54000,55000, 58& 56000,57000,58000,59000,60000,61000,62000), 59& (RI-MXSMP) 60 CALL BUG(6,RI) 61C 62C RETURN HERE TO DECLARE FALSE RESULT 63C 6410 OAPPLI=.FALSE. 65 RETURN 66C 67C SIMPLE OBJECTS, PROCESSED EXTERNALLY. 68C 69100 IF(RI.LT.32) OAPPLI=SOBJS(RI,ARG) 70 IF(RI.GE.32) OAPPLI=NOBJS(RI,ARG) 71 RETURN 72C OAPPLI, PAGE 3 73C 74C O100-- MACHINE FUNCTION 75C 762000 IF(HERE.NE.MMACH) GO TO 10 77C !NOT HERE? F 78 OAPPLI=OPNCLS(MACHI,123,124) 79C !HANDLE OPN/CLS. 80 RETURN 81C 82C O101-- WATER FUNCTION 83C 845000 IF(PRSA.NE.FILLW) GO TO 5050 85C !FILL X WITH Y IS 86 PRSA=PUTW 87C !MADE INTO 88 I=PRSI 89 PRSI=PRSO 90 PRSO=I 91C !PUT Y IN X. 92 I=ODI2 93 ODI2=ODO2 94 ODO2=I 955050 IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 5100 96 CALL RSPEAK(561) 97C !WATER IS IND OBJ, 98 RETURN 99C !PUNT. 100C 1015100 IF(PRSA.NE.TAKEW) GO TO 5400 102C !TAKE WATER? 103 IF((OADV(BOTTL).EQ.WINNER).AND.(OCAN(PRSO).NE.BOTTL)) 104& GO TO 5500 105 IF(OCAN(PRSO).EQ.0) GO TO 5200 106C !INSIDE ANYTHING? 107 IF(QOPEN(OCAN(PRSO))) GO TO 5200 108C !YES, OPEN? 109 CALL RSPEAK(525,ODESC2(OCAN(PRSO))) 110C !INSIDE, CLOSED, PUNT. 111 RETURN 112C 1135200 CALL RSPEAK(615) 114C !NOT INSIDE OR OPEN, 115 RETURN 116C !SLIPS THRU FINGERS. 117C 1185400 IF(PRSA.NE.PUTW) GO TO 5700 119C !PUT WATER IN X? 120 IF((AV.NE.0).AND.(PRSI.EQ.AV)) GO TO 5800 121C !IN VEH? 122 IF(PRSI.EQ.BOTTL) GO TO 5500 123C !IN BOTTLE? 124 CALL RSPSUB(297,ODI2) 125C !WONT GO ELSEWHERE. 126 CALL NEWSTA(PRSO,0,0,0,0) 127C !VANISH WATER. 128 RETURN 129C 1305500 IF(QOPEN(BOTTL)) GO TO 5550 131C !BOTTLE OPEN? 132 CALL RSPEAK(612) 133C !NO, LOSE. 134 RETURN 135C 1365550 IF(QEMPTY(BOTTL)) GO TO 5600 137C !OPEN, EMPTY? 138 CALL RSPEAK(613) 139C !NO, ALREADY FULL. 140 RETURN 141C 1425600 CALL NEWSTA(WATER,614,0,BOTTL,0) 143C !TAKE WATER TO BOTTLE. 144 RETURN 145C 1465700 IF((PRSA.NE.DROPW).AND.(PRSA.NE.POURW).AND. 147& (PRSA.NE.GIVEW)) GO TO 5900 148 IF(AV.NE.0) GO TO 5800 149C !INTO VEHICLE? 150 CALL NEWSTA(PRSO,133,0,0,0) 151C !NO, VANISHES. 152 RETURN 153C 1545800 CALL NEWSTA(WATER,0,0,AV,0) 155C !WATER INTO VEHICLE. 156 CALL RSPSUB(296,ODESC2(AV)) 157C !DESCRIBE. 158 RETURN 159C 1605900 IF(PRSA.NE.THROWW) GO TO 10 161C !LAST CHANCE, THROW? 162 CALL NEWSTA(PRSO,132,0,0,0) 163C !VANISHES. 164 RETURN 165C OAPPLI, PAGE 4 166C 167C O102-- LEAF PILE 168C 16910000 IF(PRSA.NE.BURNW) GO TO 10500 170C !BURN? 171 IF(OROOM(PRSO).EQ.0) GO TO 10100 172C !WAS HE CARRYING? 173 CALL NEWSTA(PRSO,158,0,0,0) 174C !NO, BURN IT. 175 RETURN 176C 17710100 CALL NEWSTA(PRSO,0,HERE,0,0) 178C !DROP LEAVES. 179 CALL JIGSUP(159) 180C !BURN HIM. 181 RETURN 182C 18310500 IF(PRSA.NE.MOVEW) GO TO 10600 184C !MOVE? 185 CALL RSPEAK(2) 186C !DONE. 187 RETURN 188C 18910600 IF((PRSA.NE.LOOKUW).OR.(RVCLR.NE.0)) GO TO 10 190 CALL RSPEAK(344) 191C !LOOK UNDER? 192 RETURN 193C 194C O103-- TROLL, DONE EXTERNALLY. 195C 19611000 OAPPLI=TROLLP(ARG) 197C !TROLL PROCESSOR. 198 RETURN 199C 200C O104-- RUSTY KNIFE. 201C 20212000 IF(PRSA.NE.TAKEW) GO TO 12100 203C !TAKE? 204 IF(OADV(SWORD).EQ.WINNER) CALL RSPEAK(160) 205C !PULSE SWORD. 206 GO TO 10 207C 20812100 IF((((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW)).OR. 209& (PRSI.NE.RKNIF)).AND. 210& (((PRSA.NE.SWINGW).AND.(PRSA.NE.THROWW)).OR. 211& (PRSO.NE.RKNIF))) GO TO 10 212 CALL NEWSTA(RKNIF,0,0,0,0) 213C !KILL KNIFE. 214 CALL JIGSUP(161) 215C !KILL HIM. 216 RETURN 217C OAPPLI, PAGE 5 218C 219C O105-- GLACIER 220C 22115000 IF(PRSA.NE.THROWW) GO TO 15500 222C !THROW? 223 IF(PRSO.NE.TORCH) GO TO 15400 224C !TORCH? 225 CALL NEWSTA(ICE,169,0,0,0) 226C !MELT ICE. 227 ODESC1(TORCH)=174 228C !MUNG TORCH. 229 ODESC2(TORCH)=173 230 OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS)) 231 CALL NEWSTA(TORCH,0,STREA,0,0) 232C !MOVE TORCH. 233 GLACRF=.TRUE. 234C !GLACIER GONE. 235 IF(.NOT.LIT(HERE)) CALL RSPEAK(170) 236C !IN DARK? 237 RETURN 238C 23915400 CALL RSPEAK(171) 240C !JOKE IF NOT TORCH. 241 RETURN 242C 24315500 IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10 244 IF(and(OFLAG1(PRSI),FLOBTS).EQ.FLOBTS) GO TO 15600 245 CALL RSPSUB(298,ODI2) 246C !CANT MELT WITH THAT. 247 RETURN 248C 24915600 GLACMF=.TRUE. 250C !PARTIAL MELT. 251 IF(PRSI.NE.TORCH) GO TO 15700 252C !MELT WITH TORCH? 253 ODESC1(TORCH)=174 254C !MUNG TORCH. 255 ODESC2(TORCH)=173 256 OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS)) 25715700 CALL JIGSUP(172) 258C !DROWN. 259 RETURN 260C 261C O106-- BLACK BOOK 262C 26318000 IF(PRSA.NE.OPENW) GO TO 18100 264C !OPEN? 265 CALL RSPEAK(180) 266C !JOKE. 267 RETURN 268C 26918100 IF(PRSA.NE.CLOSEW) GO TO 18200 270C !CLOSE? 271 CALL RSPEAK(181) 272 RETURN 273C 27418200 IF(PRSA.NE.BURNW) GO TO 10 275C !BURN? 276 CALL NEWSTA(PRSO,0,0,0,0) 277C !FATAL JOKE. 278 CALL JIGSUP(182) 279 RETURN 280C OAPPLI, PAGE 6 281C 282C O107-- CANDLES, PROCESSED EXTERNALLY 283C 28419000 OAPPLI=LIGHTP(CANDL) 285 RETURN 286C 287C O108-- MATCHES, PROCESSED EXTERNALLY 288C 28920000 OAPPLI=LIGHTP(MATCH) 290 RETURN 291C 292C O109-- CYCLOPS, PROCESSED EXTERNALLY. 293C 29422000 OAPPLI=CYCLOP(ARG) 295C !CYCLOPS 296 RETURN 297C 298C O110-- THIEF, PROCESSED EXTERNALLY 299C 30025000 OAPPLI=THIEFP(ARG) 301 RETURN 302C 303C O111-- WINDOW 304C 30526000 OAPPLI=OPNCLS(WINDO,208,209) 306C !OPEN/CLS WINDOW. 307 RETURN 308C 309C O112-- PILE OF BODIES 310C 31132000 IF(PRSA.NE.TAKEW) GO TO 32500 312C !TAKE? 313 CALL RSPEAK(228) 314C !CANT. 315 RETURN 316C 31732500 IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10 318 IF(ONPOLF) RETURN 319C !BURN OR MUNG? 320 ONPOLF=.TRUE. 321C !SET HEAD ON POLE. 322 CALL NEWSTA(HPOLE,0,LLD2,0,0) 323 CALL JIGSUP(229) 324C !BEHEADED. 325 RETURN 326C 327C O113-- VAMPIRE BAT 328C 32935000 CALL RSPEAK(50) 330C !TIME TO FLY, JACK. 331 F=MOVETO(BATDRP(RND(9)+1),WINNER) 332C !SELECT RANDOM DEST. 333 F=RMDESC(0) 334 RETURN 335C OAPPLI, PAGE 7 336C 337C O114-- STICK 338C 33939000 IF(PRSA.NE.WAVEW) GO TO 10 340C !WAVE? 341 IF(HERE.EQ.MRAIN) GO TO 39500 342C !ON RAINBOW? 343 IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200 344 CALL RSPEAK(244) 345C !NOTHING HAPPENS. 346 RETURN 347C 34839200 OFLAG1(POT)=or(OFLAG1(POT),VISIBT) 349 RAINBF=.NOT. RAINBF 350C !COMPLEMENT RAINBOW. 351 I=245 352C !ASSUME OFF. 353 IF(RAINBF) I=246 354C !IF ON, SOLID. 355 CALL RSPEAK(I) 356C !DESCRIBE. 357 RETURN 358C 35939500 RAINBF=.FALSE. 360C !ON RAINBOW, 361 CALL JIGSUP(247) 362C !TAKE A FALL. 363 RETURN 364C 365C O115-- BALLOON, HANDLED EXTERNALLY 366C 36740000 OAPPLI=BALLOP(ARG) 368 RETURN 369C 370C O116-- HEADS 371C 37245000 IF(PRSA.NE.HELLOW) GO TO 45100 373C !HELLO HEADS? 374 CALL RSPEAK(633) 375C !TRULY BIZARRE. 376 RETURN 377C 37845100 IF(PRSA.EQ.READW) GO TO 10 379C !READ IS OK. 380 CALL NEWSTA(LCASE,260,LROOM,0,0) 381C !MAKE LARGE CASE. 382 I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0) 383 CALL JIGSUP(261) 384C !KILL HIM. 385 RETURN 386C OAPPLI, PAGE 8 387C 388C O117-- SPHERE 389C 39047000 IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 10 391C !TAKE? 392 IF(WINNER.NE.PLAYER) GO TO 47500 393C !ROBOT TAKE? 394 CALL RSPEAK(263) 395C !NO, DROP CAGE. 396 IF(OROOM(ROBOT).NE.HERE) GO TO 47200 397C !ROBOT HERE? 398 F=MOVETO(CAGED,WINNER) 399C !YES, MOVE INTO CAGE. 400 CALL NEWSTA(ROBOT,0,CAGED,0,0) 401C !MOVE ROBOT. 402 AROOM(AROBOT)=CAGED 403 OFLAG1(ROBOT)=or(OFLAG1(ROBOT),NDSCBT) 404 CTICK(CEVSPH)=10 405C !GET OUT IN 10 OR ELSE. 406 RETURN 407C 40847200 CALL NEWSTA(SPHER,0,0,0,0) 409C !YOURE DEAD. 410 RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG) 411 RRAND(CAGER)=147 412 CALL JIGSUP(148) 413C !MUNG PLAYER. 414 RETURN 415C 41647500 CALL NEWSTA(SPHER,0,0,0,0) 417C !ROBOT TRIED, 418 CALL NEWSTA(ROBOT,264,0,0,0) 419C !KILL HIM. 420 CALL NEWSTA(CAGE,0,HERE,0,0) 421C !INSERT MANGLED CAGE. 422 RETURN 423C 424C O118-- GEOMETRICAL BUTTONS 425C 42648000 IF(PRSA.NE.PUSHW) GO TO 10 427C !PUSH? 428 I=PRSO-SQBUT+1 429C !GET BUTTON INDEX. 430 IF((I.LE.0).OR.(I.GE.4)) GO TO 10 431C !A BUTTON? 432 IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I 433 CALL JIGSUP(265) 434C !YOU PUSHED, YOU DIE. 435 RETURN 436C 43748100 I=267 438 IF(CAROZF) I=266 439C !SPEED UP? 440 CAROZF=.TRUE. 441 CALL RSPEAK(I) 442 RETURN 443C 44448200 I=266 445C !ASSUME NO CHANGE. 446 IF(CAROZF) I=268 447 CAROZF=.FALSE. 448 CALL RSPEAK(I) 449 RETURN 450C 45148300 CAROFF=.NOT.CAROFF 452C !FLIP CAROUSEL. 453 IF(.NOT.QHERE(IRBOX,CAROU)) RETURN 454C !IRON BOX IN CAROUSEL? 455 CALL RSPEAK(269) 456C !YES, THUMP. 457 OFLAG1(IRBOX)=xor(OFLAG1(IRBOX),VISIBT) 458 IF(CAROFF) RFLAG(CAROU)=and(RFLAG(CAROU), not(RSEEN)) 459 RETURN 460C 461C O119-- FLASK FUNCTION 462C 46349000 IF(PRSA.EQ.OPENW) GO TO 49100 464C !OPEN? 465 IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10 466 CALL NEWSTA(FLASK,270,0,0,0) 467C !KILL FLASK. 46849100 RFLAG(HERE)=or(RFLAG(HERE),RMUNG) 469 RRAND(HERE)=271 470 CALL JIGSUP(272) 471C !POISONED. 472 RETURN 473C 474C O120-- BUCKET FUNCTION 475C 47650000 IF(ARG.NE.2) GO TO 10 477C !READOUT? 478 IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500 479 BUCKTF=.TRUE. 480C !BUCKET AT TOP. 481 CTICK(CEVBUC)=100 482C !START COUNTDOWN. 483 CALL NEWSTA(BUCKE,290,TWELL,0,0) 484C !REPOSITION BUCKET. 485 GO TO 50900 486C !FINISH UP. 487C 48850500 IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10 489 BUCKTF=.FALSE. 490 CALL NEWSTA(BUCKE,291,BWELL,0,0) 491C !BUCKET AT BOTTOM. 49250900 IF(AV.NE.BUCKE) RETURN 493C !IN BUCKET? 494 F=MOVETO(OROOM(BUCKE),WINNER) 495C !MOVE ADVENTURER. 496 F=RMDESC(0) 497C !DESCRIBE ROOM. 498 RETURN 499C OAPPLI, PAGE 9 500C 501C O121-- EATME CAKE 502C 50351000 IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR. 504& (HERE.NE.ALICE)) GO TO 10 505 CALL NEWSTA(ECAKE,273,0,0,0) 506C !VANISH CAKE. 507 OFLAG1(ROBOT)=and(OFLAG1(ROBOT), not(VISIBT)) 508 OAPPLI=MOVETO(ALISM,WINNER) 509C !MOVE TO ALICE SMALL. 510 IZ=64 511 IR=ALISM 512 IO=ALICE 513 GO TO 52405 514C 515C O122-- ICINGS 516C 51752000 IF(PRSA.NE.READW) GO TO 52200 518C !READ? 519 I=274 520C !CANT READ. 521 IF(PRSI.NE.0) I=275 522C !THROUGH SOMETHING? 523 IF(PRSI.EQ.BOTTL) I=276 524C !THROUGH BOTTLE? 525 IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE) 526C !THROUGH FLASK? 527 CALL RSPEAK(I) 528C !READ FLASK. 529 RETURN 530C 53152200 IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL)) 532& GO TO 52300 533 CALL NEWSTA(POOL,280,0,0,0) 534C !VANISH POOL. 535 OFLAG1(SAFFR)=or(OFLAG1(SAFFR),VISIBT) 536 RETURN 537C 53852300 IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR)) 539& GO TO 10 540 IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR. 541& (PRSO.NE.ORICE)) GO TO 52400 542 CALL NEWSTA(ORICE,0,0,0,0) 543C !VANISH ORANGE ICE. 544 RFLAG(HERE)=or(RFLAG(HERE),RMUNG) 545 RRAND(HERE)=281 546 CALL JIGSUP(282) 547C !VANISH ADVENTURER. 548 RETURN 549C 55052400 IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE)) 551& GO TO 10 552 CALL NEWSTA(BLICE,283,0,0,0) 553C !VANISH BLUE ICE. 554 IF(HERE.NE.ALISM) GO TO 52500 555C !IN REDUCED ROOM? 556 OFLAG1(ROBOT)=or(OFLAG1(ROBOT),VISIBT) 557 IO=HERE 558 OAPPLI=MOVETO(ALICE,WINNER) 559 IZ=1/64 560 IR=ALICE 561C 562C Do a size change, common loop used also by code at 51000 563C 56452405 DO 52450 I=1,OLNT 565C !ENLARGE WORLD. 566 IF((OROOM(I).NE.IO).OR.(OSIZE(I).EQ.10000)) 567& GO TO 52450 568 OROOM(I)=IR 569 OSIZE(I)=OSIZE(I)*IZ 57052450 CONTINUE 571 RETURN 572C 57352500 CALL JIGSUP(284) 574C !ENLARGED IN WRONG ROOM. 575 RETURN 576C 577C O123-- BRICK 578C 57954000 IF(PRSA.NE.BURNW) GO TO 10 580C !BURN? 581 CALL JIGSUP(150) 582C !BOOM 583C ! 584 RETURN 585C 586C O124-- MYSELF 587C 58855000 IF(PRSA.NE.GIVEW) GO TO 55100 589C !GIVE? 590 CALL NEWSTA(PRSO,2,0,0,PLAYER) 591C !DONE. 592 RETURN 593C 59455100 IF(PRSA.NE.TAKEW) GO TO 55200 595C !TAKE? 596 CALL RSPEAK(286) 597C !JOKE. 598 RETURN 599C 60055200 IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW)) GO TO 10 601 CALL JIGSUP(287) 602C !KILL, NO JOKE. 603 RETURN 604C OAPPLI, PAGE 10 605C 606C O125-- PANELS INSIDE MIRROR 607C 60856000 IF(PRSA.NE.PUSHW) GO TO 10 609C !PUSH? 610 IF(POLEUF.NE.0) GO TO 56100 611C !SHORT POLE UP? 612 I=731 613C !NO, WONT BUDGE. 614 IF(MOD(MDIR,180).EQ.0) I=732 615C !DIFF MSG IF N-S. 616 CALL RSPEAK(I) 617C !TELL WONT MOVE. 618 RETURN 619C 62056100 IF(MLOC.NE.MRG) GO TO 56200 621C !IN GDN ROOM? 622 CALL RSPEAK(733) 623C !YOU LOSE. 624 CALL JIGSUP(685) 625 RETURN 626C 62756200 I=831 628C !ROTATE L OR R. 629 IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830 630 CALL RSPEAK(I) 631C !TELL DIRECTION. 632 MDIR=MOD(MDIR+45+(270*(I-830)),360) 633C !CALCULATE NEW DIR. 634 CALL RSPSUB(734,695+(MDIR/45)) 635C !TELL NEW DIR. 636 IF(WDOPNF) CALL RSPEAK(730) 637C !IF PANEL OPEN, CLOSE. 638 WDOPNF=.FALSE. 639 RETURN 640C !DONE. 641C 642C O126-- ENDS INSIDE MIRROR 643C 64457000 IF(PRSA.NE.PUSHW) GO TO 10 645C !PUSH? 646 IF(MOD(MDIR,180).EQ.0) GO TO 57100 647C !MIRROR N-S? 648 CALL RSPEAK(735) 649C !NO, WONT BUDGE. 650 RETURN 651C 65257100 IF(PRSO.NE.PINDR) GO TO 57300 653C !PUSH PINE WALL? 654 IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR. 655& ((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR. 656& (MLOC.EQ.MRG)) GO TO 57200 657 CALL RSPEAK(736) 658C !NO, OPENS. 659 WDOPNF=.TRUE. 660C !INDICATE OPEN. 661 CFLAG(CEVPIN)=.TRUE. 662C !TIME OPENING. 663 CTICK(CEVPIN)=5 664 RETURN 665C 66657200 CALL RSPEAK(737) 667C !GDN SEES YOU, DIE. 668 CALL JIGSUP(685) 669 RETURN 670C 67157300 NLOC=MLOC-1 672C !NEW LOC IF SOUTH. 673 IF(MDIR.EQ.0) NLOC=MLOC+1 674C !NEW LOC IF NORTH. 675 IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400 676 CALL RSPEAK(738) 677C !HAVE REACHED END. 678 RETURN 679C 68057400 I=699 681C !ASSUME SOUTH. 682 IF(MDIR.EQ.0) I=695 683C !NORTH. 684 J=739 685C !ASSUME SMOOTH. 686 IF(POLEUF.NE.0) J=740 687C !POLE UP, WOBBLES. 688 CALL RSPSUB(J,I) 689C !DESCRIBE. 690 MLOC=NLOC 691 IF(MLOC.NE.MRG) RETURN 692C !NOW IN GDN ROOM? 693C 694 IF(POLEUF.NE.0) GO TO 57500 695C !POLE UP, GDN SEES. 696 IF(MROPNF.OR.WDOPNF) GO TO 57600 697C !DOOR OPEN, GDN SEES. 698 IF(MR1F.AND.MR2F) RETURN 699C !MIRRORS INTACT, OK. 700 CALL RSPEAK(742) 701C !MIRRORS BROKEN, DIE. 702 CALL JIGSUP(743) 703 RETURN 704C 70557500 CALL RSPEAK(741) 706C !POLE UP, DIE. 707 CALL JIGSUP(743) 708 RETURN 709C 71057600 CALL RSPEAK(744) 711C !DOOR OPEN, DIE. 712 CALL JIGSUP(743) 713 RETURN 714C OAPPLI, PAGE 11 715C 716C O127-- GLOBAL GUARDIANS 717C 71858000 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND. 719& (PRSA.NE.MUNGW)) GO TO 58100 720 CALL JIGSUP(745) 721C !LOSE. 722 RETURN 723C 72458100 IF(PRSA.NE.HELLOW) GO TO 10 725C !HELLO? 726 CALL RSPEAK(746) 727C !NO REPLY. 728 RETURN 729C 730C O128-- GLOBAL MASTER 731C 73259000 IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND. 733& (PRSA.NE.MUNGW)) GO TO 59100 734 CALL JIGSUP(747) 735C !BAD IDEA. 736 RETURN 737C 73859100 IF(PRSA.NE.TAKEW) GO TO 10 739C !TAKE? 740 CALL RSPEAK(748) 741C !JOKE. 742 RETURN 743C 744C O129-- NUMERAL FIVE (FOR JOKE) 745C 74660000 IF(PRSA.NE.TAKEW) GO TO 10 747C !TAKE FIVE? 748 CALL RSPEAK(419) 749C !TIME PASSES. 750 DO 60100 I=1,3 751C !WAIT A WHILE. 752 IF(CLOCKD(X)) RETURN 75360100 CONTINUE 754 RETURN 755C 756C O130-- CRYPT FUNCTION 757C 75861000 IF(.NOT.ENDGMF) GO TO 45000 759C !IF NOT EG, DIE. 760 IF(PRSA.NE.OPENW) GO TO 61100 761C !OPEN? 762 I=793 763 IF(QOPEN(TOMB)) I=794 764 CALL RSPEAK(I) 765 OFLAG2(TOMB)=or(OFLAG2(TOMB),OPENBT) 766 RETURN 767C 76861100 IF(PRSA.NE.CLOSEW) GO TO 45000 769C !CLOSE? 770 I=795 771 IF(QOPEN(TOMB)) I=796 772 CALL RSPEAK(I) 773 OFLAG2(TOMB)=and(OFLAG2(TOMB),not(OPENBT)) 774 IF(HERE.EQ.CRYPT) CTICK(CEVSTE)=3 775C !IF IN CRYPT, START EG. 776 RETURN 777C OAPPLI, PAGE 12 778C 779C O131-- GLOBAL LADDER 780C 78162000 IF((CPVEC(CPHERE+1).EQ.-2).OR.(CPVEC(CPHERE-1).EQ.-3)) 782& GO TO 62100 783 CALL RSPEAK(865) 784C !NO, LOSE. 785 RETURN 786C 78762100 IF((PRSA.EQ.CLMBW).OR.(PRSA.EQ.CLMBUW)) GO TO 62200 788 CALL RSPEAK(866) 789C !CLIMB IT? 790 RETURN 791C 79262200 IF((CPHERE.EQ.10).AND.(CPVEC(CPHERE+1).EQ.-2)) 793& GO TO 62300 794 CALL RSPEAK(867) 795C !NO, HIT YOUR HEAD. 796 RETURN 797C 79862300 F=MOVETO(CPANT,WINNER) 799C !TO ANTEROOM. 800 F=RMDESC(3) 801C !DESCRIBE. 802 RETURN 803C 804 END 805