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