.FUNCT GO START:: ?FCN: CALL QUEUE,I-UNWOUND,20 PUT STACK,0,1 CALL QUEUE,I-BUSINESS-HOURS,60 PUT STACK,0,1 CALL QUEUE,I-FERRY-APPROACHING,117 PUT STACK,0,1 CALL QUEUE,I-FERRY,120 PUT STACK,0,1 CALL QUEUE,I-HUNGER,15 PUT STACK,0,1 CALL QUEUE,I-THIRST,25 PUT STACK,0,1 CALL QUEUE,I-TIRED,929 PUT STACK,0,1 CALL QUEUE,I-LIVER,10 PUT STACK,0,1 CALL QUEUE,I-DRILL,5 CALL QUEUE,I-MM-COMPRESSOR,80 CALL QUEUE,I-PLOT-NEVER-STARTS,60 PUT STACK,0,1 SET 'LIT,TRUE-VALUE SET 'SCORE,8 SET 'WINNER,ADVENTURER SET 'PLAYER,WINNER SET 'SAMPLE-TREASURE,GLOBAL-OBJECTS CALL PUT-IN-TABLE,ENVELOPE,MCGINTY-HQ,GLOBAL-SURFACE SET 'HERE,BEDROOM SET 'P-IT-OBJECT,FALSE-VALUE FSET? HERE,TOUCHBIT /?CND1 CALL START-MOVEMENT CALL TELL-START-STR CRLF CALL V-VERSION CRLF ?CND1: MOVE WINNER,BED CALL V-LOOK CALL MAIN-LOOP JUMP ?FCN .FUNCT MAIN-VERB-PRINT,TMP,?TMP1 GET P-ITBL,P-VERBN >TMP ZERO? P-OFLAG /?ELS5 GET TMP,0 PRINTB STACK RTRUE ?ELS5: GETB TMP,2 >?TMP1 GETB TMP,3 CALL WORD-PRINT,?TMP1,STACK RSTACK .FUNCT MAIN-LOOP,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,PLACE ?PRG1: SET 'CNT,0 SET 'OBJ,FALSE-VALUE SET 'PTBL,TRUE-VALUE SET 'WAITED?,FALSE-VALUE SET 'P-WALK-DIR,FALSE-VALUE EQUAL? HERE,QCONTEXT-ROOM /?CND3 SET 'QCONTEXT,FALSE-VALUE ?CND3: CALL PARSER >P-WON ZERO? P-WON /?ELS8 LOC PLAYER >LAST-PLAYER-LOC GET P-PRSI,P-MATCHLEN >ICNT GET P-PRSO,P-MATCHLEN >OCNT ZERO? P-IT-OBJECT /?CND9 CALL ACCESSIBLE?,P-IT-OBJECT ZERO? STACK /?CND9 SET 'TMP,FALSE-VALUE ?PRG14: IGRTR? 'CNT,ICNT \?ELS18 JUMP ?REP15 ?ELS18: GET P-PRSI,CNT EQUAL? STACK,IT \?PRG14 PUT P-PRSI,CNT,P-IT-OBJECT SET 'TMP,TRUE-VALUE ?REP15: ZERO? TMP \?CND24 SET 'CNT,0 ?PRG27: IGRTR? 'CNT,OCNT \?ELS31 JUMP ?CND24 ?ELS31: GET P-PRSO,CNT EQUAL? STACK,IT \?PRG27 PUT P-PRSO,CNT,P-IT-OBJECT ?CND24: SET 'CNT,0 ?CND9: ZERO? OCNT \?ELS41 PUSH OCNT JUMP ?CND37 ?ELS41: GRTR? OCNT,1 \?ELS43 SET 'TBL,P-PRSO ZERO? ICNT \?ELS46 SET 'OBJ,FALSE-VALUE JUMP ?CND44 ?ELS46: GET P-PRSI,1 >OBJ ?CND44: PUSH OCNT JUMP ?CND37 ?ELS43: GRTR? ICNT,1 \?ELS50 SET 'PTBL,FALSE-VALUE SET 'TBL,P-PRSI GET P-PRSO,1 >OBJ PUSH ICNT JUMP ?CND37 ?ELS50: PUSH 1 ?CND37: SET 'NUM,STACK ZERO? OBJ \?CND53 EQUAL? ICNT,1 \?CND53 GET P-PRSI,1 >OBJ ?CND53: EQUAL? PRSA,V?WALK \?ELS60 ZERO? P-WALK-DIR /?ELS60 CALL PERFORM,PRSA,PRSO >V JUMP ?CND58 ?ELS60: ZERO? NUM \?ELS64 GETB P-SYNTAX,P-SBITS BAND STACK,P-SONUMS ZERO? STACK \?ELS67 CALL PERFORM,PRSA >V SET 'PRSO,FALSE-VALUE JUMP ?CND58 ?ELS67: ZERO? LIT \?ELS69 CALL TELL-TOO-DARK JUMP ?CND58 ?ELS69: ZERO? OBJ /?ELS74 EQUAL? OBJ,NOT-HERE-OBJECT \?ELS78 CALL GLOBAL-NOT-HERE-PRINT,OBJ JUMP ?CND58 ?ELS78: LOC WINNER >PLACE FSET? PLACE,VEHBIT \?ELS80 LOC OBJ EQUAL? PLACE,STACK /?CND58 PRINTI "You should get " FSET? PLACE,SURFACEBIT \?ELS88 PRINTI "off" JUMP ?CND86 ?ELS88: PRINTI "out" ?CND86: PRINTI " of " CALL THE?,PLACE CALL DPRINT,PLACE PRINTI " first." CRLF SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS80: EQUAL? PRSA,V?GIVE \?ELS100 CALL TELL-NOTHING,STR?48 CALL MAIN-VERB-PRINT PRINTI "." CRLF SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS100: FSET? OBJ,CONTBIT \?ELS104 FSET? OBJ,OPENBIT /?ELS104 PRINTI "Better open the " CALL DPRINT,OBJ PRINTI " first." CRLF SET 'P-IT-OBJECT,OBJ SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS104: FSET? OBJ,CONTBIT /?ELS110 CALL TELL-NOTHING,STR?49,TRUE-VALUE SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS110: PRINTI "It's not in that." CRLF SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS74: EQUAL? PRSA,V?$CALL \?ELS116 CALL V-CALL-LOSE SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS116: ZERO? P-NONE /?ELS118 PRINTI "I can't find any here!" CRLF SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS118: PRINTI "There isn't anything to " CALL MAIN-VERB-PRINT PRINTI " here!" CRLF SET 'V,FALSE-VALUE JUMP ?CND58 ?ELS64: SET 'P-NOT-HERE,0 SET 'P-MULT,FALSE-VALUE GRTR? NUM,1 \?CND130 SET 'P-MULT,TRUE-VALUE ?CND130: SET 'TMP,FALSE-VALUE ?PRG133: IGRTR? 'CNT,NUM \?ELS137 GRTR? P-NOT-HERE,0 \?ELS140 PRINTI "The " EQUAL? P-NOT-HERE,NUM /?CND143 PRINTI "other " ?CND143: PRINTI "object" EQUAL? P-NOT-HERE,1 /?CND150 PRINTI "s" ?CND150: PRINTI " that you mentioned " EQUAL? P-NOT-HERE,1 /?ELS159 PRINTI "are" JUMP ?CND157 ?ELS159: PRINTI "is" ?CND157: PRINTI "n't here." CRLF JUMP ?REP134 ?ELS140: ZERO? TMP \?REP134 PRINTI "I don't know what you're referring to." CRLF JUMP ?REP134 ?ELS137: ZERO? PTBL /?ELS176 GET P-PRSO,CNT >OBJ1 JUMP ?CND174 ?ELS176: GET P-PRSI,CNT >OBJ1 ?CND174: ZERO? PTBL /?ELS184 PUSH OBJ1 JUMP ?CND180 ?ELS184: PUSH OBJ ?CND180: SET 'PRSO,STACK ZERO? PTBL /?ELS192 PUSH OBJ JUMP ?CND188 ?ELS192: PUSH OBJ1 ?CND188: SET 'PRSI,STACK GRTR? NUM,1 \?CND196 EQUAL? OBJ1,NOT-HERE-OBJECT \?ELS201 INC 'P-NOT-HERE JUMP ?PRG133 ?ELS201: EQUAL? PRSA,V?TAKE \?ELS203 ZERO? PRSI /?ELS203 GET P-ITBL,P-NC1 GET STACK,0 EQUAL? STACK,W?ALL \?ELS203 IN? PRSO,PRSI /?ELS203 JUMP ?PRG133 ?ELS203: EQUAL? P-GETFLAGS,P-ALL \?ELS207 EQUAL? PRSA,V?TAKE \?ELS207 LOC OBJ1 EQUAL? STACK,WINNER,HERE /?ELS213 LOC OBJ1 FSET? STACK,TRANSBIT \?PRG133 ?ELS213: FSET? OBJ1,TAKEBIT /?ELS207 FSET? OBJ1,TRYTAKEBIT /?ELS207 JUMP ?PRG133 ?ELS207: EQUAL? P-GETFLAGS,P-ALL \?ELS217 EQUAL? PRSA,V?DROP \?ELS217 IN? OBJ1,WINNER /?ELS217 IN? P-IT-OBJECT,WINNER /?ELS217 JUMP ?PRG133 ?ELS217: EQUAL? OBJ1,IT \?ELS224 CALL DPRINT,P-IT-OBJECT JUMP ?CND222 ?ELS224: CALL DPRINT,OBJ1 ?CND222: PRINTI ": " ?CND196: ZERO? PTBL /?ELS233 PUSH OBJ1 JUMP ?CND229 ?ELS233: PUSH OBJ ?CND229: CALL QCONTEXT-CHECK,STACK >V SET 'TMP,TRUE-VALUE CALL PERFORM,PRSA,PRSO,PRSI >V EQUAL? V,M-FATAL \?PRG133 JUMP ?CND58 ?REP134: ?CND58: EQUAL? V,M-FATAL /?CND240 LOC WINNER GETP STACK,P?ACTION CALL STACK,M-END >V ?CND240: EQUAL? PRSA,V?FOLLOW,V?WALK,V?AGAIN /?CND243 EQUAL? PRSA,V?WAIT /?CND243 CALL GAME-COMMAND? ZERO? STACK /?ELS245 JUMP ?CND243 ?ELS245: SET 'L-PRSA,PRSA SET 'L-PRSO,PRSO SET 'L-PRSI,PRSI SET 'L-WALK-DIR,P-WALK-DIR SET 'L-WINNER,WINNER ?CND243: EQUAL? V,M-FATAL \?CND6 SET 'P-CONT,FALSE-VALUE JUMP ?CND6 ?ELS8: SET 'P-CONT,FALSE-VALUE ?CND6: ZERO? P-WON /?CND255 CALL GAME-COMMAND? ZERO? STACK /?ELS261 JUMP ?CND255 ?ELS261: EQUAL? PRSA,V?TELL \?ELS263 ZERO? PRSI \?ELS263 JUMP ?CND255 ?ELS263: ZERO? CLOCK-WAIT \?THN268 ZERO? I-WAIT-DURATION \?ELS267 ?THN268: CALL CLOCKER >V CALL DETECTOR-NOISE >V JUMP ?CND255 ?ELS267: CALL V-WAIT,I-WAIT-DURATION,FALSE-VALUE >I-WAIT-FLAG ZERO? I-WAIT-FLAG /?ELS274 CALL I-WAIT-RTN SET 'I-WAIT-FLAG,FALSE-VALUE JUMP ?CND272 ?ELS274: SET 'I-WAIT-DURATION,0 CALL CLOCKER >V ?CND272: CALL DETECTOR-NOISE >V ?CND255: SET 'PRSA,FALSE-VALUE SET 'PRSO,FALSE-VALUE SET 'PRSI,FALSE-VALUE JUMP ?PRG1 .FUNCT GAME-COMMAND? EQUAL? PRSA,V?VERBOSE,V?SUPER-BRIEF,V?BRIEF /TRUE EQUAL? PRSA,V?RESTART,V?RESTORE,V?SAVE /TRUE EQUAL? PRSA,V?UNSCRIPT,V?SCRIPT,V?QUIT /TRUE EQUAL? PRSA,V?SCORE,V?VERSION,V?$VERIFY /TRUE EQUAL? PRSA,V?TIME /TRUE RFALSE .FUNCT QCONTEXT-CHECK,PRSO,OTHER,WHO=0,N=0 EQUAL? PRSA,V?LONGITUDE,V?LATITUDE,V?HELP /?THN6 EQUAL? PRSA,V?GIVE,V?TELL,V?SHOW \FALSE EQUAL? PRSO,PLAYER \FALSE ?THN6: FIRST? HERE >OTHER /?KLU33 ?KLU33: ?PRG10: ZERO? OTHER \?ELS14 JUMP ?REP11 ?ELS14: FSET? OTHER,PERSON \?CND12 EQUAL? OTHER,PLAYER /?CND12 INC 'N SET 'WHO,OTHER ?CND12: NEXT? OTHER >OTHER /?KLU34 ?KLU34: JUMP ?PRG10 ?REP11: EQUAL? 1,N \?CND19 ZERO? QCONTEXT \?CND19 CALL SAID-TO,WHO ?CND19: ZERO? QCONTEXT /FALSE IN? QCONTEXT,HERE \FALSE EQUAL? QCONTEXT-ROOM,HERE \FALSE EQUAL? WINNER,PLAYER \FALSE SET 'WINNER,QCONTEXT PRINTI "(said to " CALL DPRINT,QCONTEXT PRINTR ")" .FUNCT SAID-TO,WHO SET 'WINNER,WHO SET 'QCONTEXT,WHO SET 'QCONTEXT-ROOM,HERE RETURN QCONTEXT-ROOM .FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI SET 'OA,PRSA SET 'OO,PRSO SET 'OI,PRSI EQUAL? A,V?WALK /?CND1 EQUAL? IT,I,O \?CND1 PRINTI "I don't see what you are referring to." CRLF RETURN 2 ?CND1: SET 'PRSA,A SET 'PRSO,O ZERO? PRSO /?CND10 EQUAL? PRSI,IT /?CND10 EQUAL? PRSA,V?WALK /?CND10 SET 'P-IT-OBJECT,PRSO ?CND10: SET 'PRSI,I EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?ELS17 EQUAL? PRSA,V?WALK /?ELS17 CALL NOT-HERE-OBJECT-F >V ZERO? V /?ELS17 SET 'P-WON,FALSE-VALUE JUMP ?CND15 ?ELS17: SET 'O,PRSO SET 'I,PRSI GETP WINNER,P?ACTION CALL STACK >V ZERO? V /?ELS24 JUMP ?CND15 ?ELS24: LOC WINNER GETP STACK,P?ACTION CALL STACK,M-BEG >V ZERO? V /?ELS26 JUMP ?CND15 ?ELS26: GET PREACTIONS,A CALL STACK >V ZERO? V /?ELS28 JUMP ?CND15 ?ELS28: SET 'I,PRSI ZERO? I /?ELS30 ZERO? I /?ELS30 GETP I,P?ACTION CALL STACK >V ZERO? V /?ELS30 JUMP ?CND15 ?ELS30: ZERO? O /?ELS34 EQUAL? A,V?WALK /?ELS34 LOC O ZERO? STACK /?ELS34 LOC O GETP STACK,P?CONTFCN CALL STACK,M-CONT >V ZERO? V /?ELS34 JUMP ?CND15 ?ELS34: ZERO? O /?ELS38 EQUAL? A,V?WALK /?ELS38 GETP O,P?ACTION CALL STACK >V ZERO? V /?ELS38 JUMP ?CND15 ?ELS38: GET ACTIONS,A CALL STACK >V ZERO? V /?CND15 ?CND15: EQUAL? V,M-FATAL /?CND43 LOC WINNER EQUAL? STACK,PRSO \?CND46 SET 'PRSO,FALSE-VALUE ?CND46: LOC WINNER GETP STACK,P?ACTION CALL STACK,M-END >V ?CND43: SET 'PRSA,OA SET 'PRSO,OO SET 'PRSI,OI RETURN V .FUNCT TELL-START-STR PRINTR "Nights on Hardscrabble Island are lonely and cold when the lighthouse barely pierces the gloom. You sit on your bed, thinking of better times and far-off places. A knock on your door stirs you, and Hevlin, a shipmate you haven't seen for years, staggers in. ""I'm in trouble,"" he says. ""I had a few too many at The Shanty. I was looking for Red, but he wasn't around, and I started talking about ... here,"" he says, handing you a slim volume that you recognize as a shipwreck book written years ago by the Historical Society. You smile. Every diver on the island has looked for those wrecks, without even an old boot to show for it. You open the door, hoping the drunken fool will leave. ""I know what you're thinkin',"" Hevlin scowls, ""but look!"" He points to the familiar map, and you see new locations marked for two of the wrecks. ""Keep it for me,"" he says. ""Just for tonight. It'll be safe here with you. Don't let -- "" He stops and broods for a moment. ""I've got to go find Red!"" And with that, Hevlin leaves. You put the book in your dresser and think about following Hevlin. Then you hear a scuffle outside. You look through your window and see two men struggling. One falls to the ground in a heap. The other man bends down beside him, then turns as if startled and runs away. Another man then approaches the wounded figure. He kneels beside him for a long moment, then takes off after the other man. It isn't long before the police arrive to tell you that Hevlin's been murdered. You don't mention the book, and hours later, as you lie awake in your bed, you wonder if the book could really be what it seems." .FUNCT ACCESSIBLE?,OBJ,L LOC OBJ >L FSET? OBJ,INVISIBLE /FALSE EQUAL? OBJ,PSEUDO-OBJECT \?ELS7 GETP PSEUDO-OBJECT,P?DESCFCN EQUAL? STACK,HERE \FALSE RTRUE ?ELS7: ZERO? L /FALSE EQUAL? L,GLOBAL-OBJECTS /TRUE EQUAL? L,LOCAL-GLOBALS \?ELS20 CALL GLOBAL-IN?,OBJ,HERE ZERO? STACK \TRUE ?ELS20: CALL META-LOC,OBJ EQUAL? STACK,HERE \FALSE EQUAL? L,WINNER,HERE /TRUE FSET? L,OPENBIT /?THN31 FSET? L,PERSON \FALSE ?THN31: CALL ACCESSIBLE?,L ZERO? STACK /FALSE RTRUE .FUNCT VISIBLE?,OBJ,L LOC OBJ >L CALL ACCESSIBLE?,OBJ ZERO? STACK \TRUE CALL SEE-INSIDE?,L ZERO? STACK /FALSE CALL VISIBLE?,L ZERO? STACK /FALSE RTRUE .FUNCT META-LOC,OBJ ?PRG1: ZERO? OBJ /FALSE EQUAL? OBJ,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CND3 RETURN OBJ ?CND3: IN? OBJ,ROOMS \?ELS10 RETURN OBJ ?ELS10: LOC OBJ >OBJ JUMP ?PRG1 .ENDI