.FUNCT TRANSCRIPT,STR PRINTI "Here " PRINT STR PRINTR "s a transcript of interaction with" .FUNCT V-SCRIPT DIROUT 2 CALL2 TRANSCRIPT,STR?177 CALL1 V-VERSION RTRUE .FUNCT V-UNSCRIPT CALL2 TRANSCRIPT,STR?178 CALL1 V-VERSION DIROUT -2 RTRUE .FUNCT V-$VERIFY ZERO? PRSO /?ELS5 EQUAL? PRSO,INTNUM \?ELS11 EQUAL? P-NUMBER,105 \?ELS11 PRINTN SERIAL CRLF RTRUE ?ELS11: CALL1 DONT-UNDERSTAND RSTACK ?ELS5: PRINTI "Verifying disk..." CRLF VERIFY \?ELS26 PRINTR "The disk is correct." ?ELS26: PRINTR "Oh, oh! The disk seems to have a defect. Try verifying again. (If you've already done that, the disk surely has a defect.)" .FUNCT V-$ANSWER,MSG PRINTI "Pssst! The bad spy is the " PRINTD BAD-SPY PRINTI ". The contact is the " PRINTD CONTACT ZERO? PICKPOCKET /?CND8 PRINTI ". The pickpocket is the " PRINTD PICKPOCKET ?CND8: PRINTI ". The password is """ PRINTD PASSWORD PRINTI "."" The passobject is" CALL2 PRINTT,PASSOBJECT PRINTR "." .FUNCT V-$FCLEAR,F=0 ZERO? PRSO /?ELS5 EQUAL? PRSI,INTNUM \?ELS5 FSET? PRSO,P-NUMBER \?CND8 SET 'F,TRUE-VALUE ?CND8: FCLEAR PRSO,P-NUMBER ZERO? F /?ELS15 PRINTR "T" ?ELS15: PRINTR "#FALSE ()" ?ELS5: PRINTR "OOPS!" .FUNCT V-$FSET,F=0 ZERO? PRSO /?ELS5 EQUAL? PRSI,INTNUM \?ELS5 FSET? PRSO,P-NUMBER \?CND8 SET 'F,TRUE-VALUE ?CND8: FSET PRSO,P-NUMBER ZERO? F /?ELS15 PRINTR "T" ?ELS15: PRINTR "#FALSE ()" ?ELS5: PRINTR "OOPS!" .FUNCT V-$QFSET ZERO? PRSO /?ELS5 EQUAL? PRSI,INTNUM \?ELS5 FSET? PRSO,P-NUMBER \?ELS12 PRINTR "T" ?ELS12: PRINTR "#FALSE ()" ?ELS5: PRINTR "OOPS!" .FUNCT V-$GOAL,CNT=0,O,L,C,S ?PRG1: IGRTR? 'CNT,CHARACTER-MAX /TRUE GET CHARACTER-TABLE,CNT >C GET GOAL-TABLES,CNT >O GET O,GOAL-S >S EQUAL? CNT,EXTRA-C,STAR-C \?ELS8 ZERO? S \?ELS8 PRINTD C PRINTI ": " CALL2 INT,I-EXTRA >L GET L,C-TICK PRINTN STACK PRINTI " min" GET L,C-ENABLED? ZERO? STACK \?CND15 PRINTI " (DISABLED)" ?CND15: CRLF JUMP ?PRG1 ?ELS8: LOC C ZERO? STACK /?PRG1 ZERO? S /?PRG1 PRINTD C PRINTI ": " PRINTD S CALL2 ON-PLATFORM?,S ZERO? STACK /?CND26 PRINTI " (" GETP S,P?CAR PRINTN STACK PRINTI ")" ?CND26: GET O,GOAL-F >L EQUAL? S,L /?CND31 PRINTI "/F:" PRINTD L CALL2 ON-PLATFORM?,L ZERO? STACK /?CND31 PRINTI " (" GETP L,P?CAR PRINTN STACK PRINTI ")" ?CND31: GET O,GOAL-I >L ZERO? L /?CND41 GET TRANSFER-TABLE,L >L ZERO? L \?ELS46 PRINTI "/I:0" JUMP ?CND41 ?ELS46: PRINTI "/I:" PRINTD L CALL2 ON-PLATFORM?,L ZERO? STACK /?CND44 PRINTI " (" GETP L,P?CAR PRINTN STACK PRINTI ")" ?CND44: ?CND41: GET O,GOAL-FUNCTION EQUAL? I-WALK-TRAIN,STACK \?CND58 PRINTI "/Q:" GET O,GOAL-QUEUED PRINTD STACK PRINTI "(car #" GET O,GOAL-CAR PRINTN STACK PRINTI ")" ?CND58: GET O,GOAL-ENABLE ZERO? STACK \?CND63 PRINTI " (DISABLED)" ?CND63: PRINTC 32 GET O,GOAL-FUNCTION CALL STACK,G-DEBUG PRINTC 32 GET O,GOAL-SCRIPT CALL STACK,G-DEBUG CRLF JUMP ?PRG1 .FUNCT V-$QUEUE,C,E,TICK ADD C-TABLE,C-INTS >C ADD C-TABLE,C-TABLELEN >E ?PRG1: EQUAL? C,E /TRUE GET C,C-ENABLED? ZERO? STACK /?CND3 GET C,C-TICK >TICK ZERO? TICK /?CND3 GET C,C-RTN CALL STACK,G-DEBUG PRINTC 9 PRINTN TICK CRLF ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT V-$STATION,TBL,CNT CALL ZMEMZ,PRSO,TRAIN-TABLE-A >CNT ZERO? CNT /?ELS3 SET 'TBL,TRAIN-TABLE-A JUMP ?CND1 ?ELS3: CALL ZMEMZ,PRSO,TRAIN-TABLE-B >CNT ZERO? CNT /?ELS5 SET 'TBL,TRAIN-TABLE-B JUMP ?CND1 ?ELS5: PRINTR "[Not in timetable!]" ?CND1: GET TBL,0 >TRAIN-NAME SUB CNT,1 MUL 2,STACK ADD TBL,STACK >TRAIN-TABLE CALL QUEUE,I-TRAIN-SCENERY,1 PUT STACK,0,1 PRINTR "[okay]" .FUNCT V-$WHERE,CNT=0,O,L,MSG ZERO? PRSI /?ELS5 MOVE PRSO,PRSI RTRUE ?ELS5: ZERO? PRSO /?ELS8 CALL2 TELL-$WHERE,PRSO RSTACK ?ELS8: ?PRG12: GET CHARACTER-TABLE,CNT >O ZERO? O /?CND14 CALL2 TELL-$WHERE,O ?CND14: IGRTR? 'CNT,CHARACTER-MAX \?PRG12 GET EXTRA-TABLE,0 >CNT ?PRG20: GET EXTRA-TABLE,CNT >O ZERO? O /?CND22 CALL2 TELL-$WHERE,O ?CND22: DLESS? 'CNT,1 \?PRG20 RTRUE .FUNCT TELL-$WHERE,O,L=0 PRINTD O PRINTI " is " ZERO? L \?CND3 LOC O >L ?CND3: ZERO? L /?ELS10 PRINTI "in" GETP O,P?CAR ZERO? STACK /?CND14 PRINTI " (car #" GETP O,P?CAR PRINTN STACK PRINTI ")" ?CND14: CALL2 PRINTT,L CALL ZMEMQ,L,CAR-ROOMS-DINER ZERO? STACK /?ELS23 PRINTI " (diner)" JUMP ?CND21 ?ELS23: CALL ZMEMQ,L,CAR-ROOMS-FANCY ZERO? STACK /?ELS27 PRINTI " (fancy)" JUMP ?CND21 ?ELS27: CALL2 ON-PLATFORM?,L ZERO? STACK /?CND21 PRINTI " (" GETP L,P?CAR PRINTN STACK PRINTI ")" ?CND21: PRINTR "." ?ELS10: PRINTR "nowhere." .FUNCT V-DEBUG ZERO? PRSO /?ELS5 ZERO? IDEBUG \?PRD7 PUSH 1 JUMP ?PRD8 ?PRD7: PUSH 0 ?PRD8: SET 'IDEBUG,STACK PRINTI "[" PRINTN IDEBUG PRINTR "]" ?ELS5: ZERO? DEBUG \?PRD13 PUSH 1 JUMP ?PRD14 ?PRD13: PUSH 0 ?PRD14: SET 'DEBUG,STACK ZERO? DEBUG /?ELS12 PRINTR "Find them bugs, boss!" ?ELS12: PRINTR "No bugs left, eh?" .FUNCT YOU-WILL-GET,STR PRINTI "(Okay, you will get " PRINT STR PRINTR " descriptions.)" .FUNCT V-BRIEF SET 'VERBOSE,1 CALL2 YOU-WILL-GET,STR?179 RSTACK .FUNCT V-SUPER-BRIEF SET 'VERBOSE,0 CALL2 YOU-WILL-GET,STR?180 RSTACK .FUNCT V-VERBOSE SET 'VERBOSE,2 CALL2 YOU-WILL-GET,STR?181 CALL1 V-LOOK RSTACK .FUNCT V-INVENTORY,X CALL2 PRINT-CONT,WINNER >X ZERO? X \?CND1 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " not holding anything." ?CND1: EQUAL? WINNER,PLAYER \?CND6 FIRST? POCKET /?THN11 GETP PLAYER,P?SOUTH GRTR? STACK,0 \?CND6 ?THN11: CALL2 THIS-IS-IT,POCKET ZERO? X /?ELS15 PRINTI "And" JUMP ?CND13 ?ELS15: PRINTI " But" ?CND13: PRINTI " there's something in " PRINTD POCKET PRINTI "." ?CND6: CRLF RTRUE .FUNCT V-QUIT,ASK?=1 ZERO? ASK? \?CND1 QUIT ?CND1: PRINTI "(If you want to continue from this point at another time, you must ""SAVE"" first.) " PRINTI "Do you want to stop the story now?" CALL1 YES? ZERO? STACK /?ELS15 QUIT RTRUE ?ELS15: PRINTR "Okay." .FUNCT V-RESTART PRINTI "Do you want to start over from the beginning?" CALL1 YES? ZERO? STACK /FALSE RESTART CALL1 TELL-FAILED RSTACK .FUNCT TELL-FAILED PRINTR "(Sorry, but it didn't work. Maybe your instruction manual or Reference Card can tell you why.)" .FUNCT V-SAVE,X PRINTI "(In this variation, 1 minute will pass in the story before you can type another command. Are you sure you want to SAVE now?" CALL1 YES? ZERO? STACK \?ELS5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "Okay.)" ?ELS5: PRINTI "Okay.)" CRLF ?CND3: SAVE >X ZERO? X /?ELS14 PRINTI "Okay." CRLF EQUAL? X,1 /TRUE CALL1 INIT-STATUS-LINE CLEAR 0 CALL1 V-FIRST-LOOK RTRUE ?ELS14: SET 'CLOCK-WAIT,TRUE-VALUE CALL1 TELL-FAILED RTRUE .FUNCT V-RESTORE RESTORE ZERO? STACK \FALSE CALL1 TELL-FAILED RFALSE .FUNCT V-FIRST-LOOK CALL1 DESCRIBE-ROOM ZERO? VERBOSE /FALSE CALL1 DESCRIBE-OBJECTS RSTACK .FUNCT V-VERSION,CNT=17 PRINTD GAME PRINTI " Infocom interactive fiction - a story of intrigue Copyright (c) 1985 by Infocom, Inc. All rights reserved. " PRINTD GAME PRINTI " is a trademark of Infocom, Inc. Release " GET 0,1 BAND STACK,2047 PRINTN STACK PRINTI " / Serial number " ?PRG7: IGRTR? 'CNT,23 \?ELS11 JUMP ?REP8 ?ELS11: GETB 0,CNT PRINTC STACK JUMP ?PRG7 ?REP8: ZERO? VARIATION /?CND14 PRINTI " / " EQUAL? VARIATION,1,2 \?ELS21 PRINTI "Traveler" JUMP ?CND19 ?ELS21: PRINTI "Spy" ?CND19: PRINTI "'s viewpoint, " MOD VARIATION,2 ZERO? STACK \?ELS32 PRINTI "long" JUMP ?CND30 ?ELS32: PRINTI "short" ?CND30: PRINTI " variation" ?CND14: CRLF RTRUE .FUNCT YES?,WORD,VAL ?PRG1: PRINTI " >" READ YES-INBUF,YES-LEXV GET YES-LEXV,P-LEXSTART >WORD GETB YES-LEXV,P-LEXWORDS ZERO? STACK \?ELS5 JUMP ?CND3 ?ELS5: ZERO? WORD /?CND3 CALL WT?,WORD,PS?VERB,P1?VERB >VAL EQUAL? VAL,ACT?YES \?ELS10 SET 'VAL,TRUE-VALUE RETURN VAL ?ELS10: EQUAL? VAL,ACT?NO /?THN13 EQUAL? WORD,W?N \?CND3 ?THN13: SET 'VAL,FALSE-VALUE RETURN VAL ?CND3: PRINTI "(Please type YES or NO.)" JUMP ?PRG1 .FUNCT YOU-CANT,STR=0,WHILE=0,STR1=0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(" CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't " ZERO? STR /?ELS5 PRINT STR JUMP ?CND3 ?ELS5: CALL1 VERB-PRINT ?CND3: EQUAL? STR,STR?182 \?ELS13 PRINTI " in that direction" JUMP ?CND11 ?ELS13: EQUAL? STR,STR?183,STR?184 \?ELS20 CALL2 PRINTT,PRSO JUMP ?CND18 ?ELS20: CALL2 HIM-HER-IT,PRSO ?CND18: ZERO? STR1 /?CND11 PRINTI " while" ZERO? WHILE /?ELS35 CALL HE-SHE-IT,WHILE,0,STR?1 CALL2 THIS-IS-IT,WHILE JUMP ?CND33 ?ELS35: CALL HE-SHE-IT,PRSO,0,STR?1 ?CND33: PRINTC 32 PRINT STR1 ?CND11: PRINTR ".)" .FUNCT DESCRIBE-OBJECT,OBJ,LEVEL,STR=0 ZERO? LEVEL \?CND1 GETP OBJ,P?DESCFCN CALL STACK,M-OBJDESC ZERO? STACK /?CND1 CALL2 THIS-IS-IT,OBJ RTRUE ?CND1: CALL2 THIS-IS-IT,OBJ ZERO? LEVEL \?ELS8 FSET? OBJ,TOUCHBIT /?ELS14 GETP OBJ,P?FDESC >STR ZERO? STR \?THN11 ?ELS14: GETP OBJ,P?LDESC >STR ZERO? STR /?ELS8 ?THN11: PRINT STR CRLF JUMP ?CND6 ?ELS8: ZERO? LEVEL \?ELS18 PRINTI "There's " CALL2 PRINTA,OBJ PRINTI " on the floor." CRLF JUMP ?CND6 ?ELS18: CALL2 PRINTA,OBJ FSET? OBJ,WORNBIT \?CND6 PRINTI " (being worn)" ?CND6: CALL2 SEE-INSIDE?,OBJ ZERO? STACK /FALSE FIRST? OBJ \FALSE PRINTI " (" CALL PRINT-CONT,OBJ,LEVEL FSET? OBJ,SURFACEBIT \?CND39 PRINTI " sitting on it" ?CND39: PRINTI ")" RTRUE .FUNCT DESCRIBE-OBJECTS,V?=0 FIRST? HERE \FALSE ZERO? V? \?CND11 EQUAL? 2,VERBOSE \?CND11 SET 'V?,TRUE-VALUE ?CND11: CALL PRINT-CONT,HERE,-1,V? RSTACK .FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,L ZERO? LOOK? \?ELS3 EQUAL? 2,VERBOSE \?ELS6 SET 'V?,TRUE-VALUE JUMP ?CND1 ?ELS6: SET 'V?,FALSE-VALUE JUMP ?CND1 ?ELS3: SET 'V?,TRUE-VALUE ?CND1: FSET? HERE,TOUCHBIT /?CND11 SET 'V?,TRUE-VALUE ?CND11: IN? HERE,ROOMS \?CND14 PRINTI "(" PRINTD HERE PRINTI ")" CRLF ?CND14: ZERO? PLAYER-NOT-FACING /?CND19 ZERO? LOOK? \?THN24 EQUAL? PLAYER-NOT-FACING,PLAYER-NOT-FACING-OLD /?CND19 ?THN24: ZERO? LOOK? /?CND26 PRINTI "(" ?CND26: ZERO? LOOK? /?CND32 PRINTI "You're facing to " CALL2 OPP-DIR,PLAYER-NOT-FACING CALL2 DIR-PRINT,STACK ?CND32: ZERO? LOOK? /?CND38 PRINTI ", but you look in all directions for a moment" ?CND38: ZERO? LOOK? /?CND44 PRINTI "." ?CND44: ZERO? LOOK? /?CND50 PRINTI ")" ?CND50: ZERO? LOOK? /?CND19 CRLF ?CND19: ZERO? V? /?CND60 LOC WINNER >L FSET? L,VEHBIT \?CND64 PRINTI "(You're " FSET? L,SURFACEBIT \?ELS71 PRINTI "sitting o" JUMP ?CND69 ?ELS71: PRINTI "standing i" ?CND69: PRINTI "n" CALL2 HIM-HER-IT,L PRINTI ".)" CRLF ?CND64: ZERO? V? /?ELS82 GETP HERE,P?ACTION CALL STACK,M-LOOK ZERO? STACK /?ELS82 JUMP ?CND80 ?ELS82: ZERO? V? /?ELS86 GETP HERE,P?FDESC >STR ZERO? STR /?ELS86 PRINT STR CRLF JUMP ?CND80 ?ELS86: ZERO? V? /?ELS92 GETP HERE,P?LDESC >STR ZERO? STR /?ELS92 PRINT STR CRLF JUMP ?CND80 ?ELS92: GETP HERE,P?ACTION CALL STACK,M-FLASH ?CND80: EQUAL? HERE,L /?CND60 GETP L,P?ACTION CALL STACK,M-LOOK ?CND60: GETP HERE,P?CORRIDOR ZERO? STACK /?CND102 ZERO? LOOK? /?CND105 SET 'COR-ALL-DIRS,TRUE-VALUE ?CND105: CALL1 CORRIDOR-LOOK SET 'COR-ALL-DIRS,FALSE-VALUE ?CND102: FSET HERE,SEENBIT FSET HERE,TOUCHBIT RTRUE .FUNCT FAR-AWAY?,L EQUAL? L,GLOBAL-OBJECTS /TRUE CALL ZMEMQ,HERE,CAR-ROOMS ZERO? STACK \?THN8 EQUAL? HERE,BESIDE-TRACKS \?ELS7 EQUAL? CAR-HERE,DINER-CAR,FANCY-CAR /?ELS7 ?THN8: CALL ZMEMQ,L,CAR-ROOMS ZERO? STACK \FALSE RTRUE ?ELS7: CALL ZMEMQ,HERE,CAR-ROOMS-DINER ZERO? STACK \?THN16 EQUAL? HERE,BESIDE-TRACKS \?ELS15 EQUAL? CAR-HERE,DINER-CAR \?ELS15 ?THN16: CALL ZMEMQ,L,CAR-ROOMS-DINER ZERO? STACK \FALSE RTRUE ?ELS15: CALL ZMEMQ,HERE,CAR-ROOMS-FANCY ZERO? STACK \?THN24 EQUAL? HERE,BESIDE-TRACKS \?ELS23 EQUAL? CAR-HERE,FANCY-CAR \?ELS23 ?THN24: CALL ZMEMQ,L,CAR-ROOMS-FANCY ZERO? STACK \FALSE RTRUE ?ELS23: CALL ZMEMQ,HERE,STATION-ROOMS ZERO? STACK /?ELS31 CALL ZMEMQ,L,STATION-ROOMS ZERO? STACK /TRUE ZERO? CUSTOMS-SWEEP /FALSE EQUAL? HERE,PLATFORM-A \?ELS40 EQUAL? L,PLATFORM-A /FALSE RTRUE ?ELS40: EQUAL? L,PLATFORM-A /TRUE RFALSE ?ELS31: EQUAL? HERE,ROOF \?ELS48 EQUAL? L,ROOF /FALSE RTRUE ?ELS48: PRINTR "[Foo! Where is HERE?]" .FUNCT COMPASS-EQV,RM,DIR,DIRTBL,DIRL,P,L,TBL,VAL=0,?TMP1 EQUAL? DIR,P?NORTH,P?EAST /?THN4 EQUAL? DIR,P?SOUTH,P?WEST \?CND1 ?THN4: RETURN DIR ?CND1: GETPT RM,DIR >DIRTBL PTSIZE DIRTBL >DIRL SET 'P,0 ?PRG6: ZERO? VAL /?ELS10 RETURN VAL ?ELS10: NEXTP RM,P >P ZERO? P /FALSE EQUAL? P,P?NORTH,P?EAST /?ELS15 EQUAL? P,P?SOUTH,P?WEST /?ELS15 JUMP ?PRG6 ?ELS15: LESS? P,LOW-DIRECTION /?PRG6 GETPT RM,P >TBL PTSIZE TBL >L EQUAL? L,DIRL /?CND20 JUMP ?PRG6 ?CND20: DEC 'L ?PRG23: GETB TBL,L >?TMP1 GETB DIRTBL,L EQUAL? ?TMP1,STACK /?ELS27 JUMP ?PRG6 ?ELS27: DLESS? 'L,0 \?PRG23 SET 'VAL,P JUMP ?PRG6 .FUNCT FIRSTER,OBJ,LEVEL,VAL=1 EQUAL? OBJ,PLAYER \?ELS5 PRINTI "You're holding " RTRUE ?ELS5: GETP OBJ,P?CHARACTER ZERO? STACK /?ELS9 CALL HE-SHE-IT,OBJ,TRUE-VALUE,STR?1 PRINTI " holding " RTRUE ?ELS9: IN? OBJ,ROOMS /FALSE FSET? OBJ,SURFACEBIT \?ELS18 GRTR? LEVEL,0 \?ELS23 PRINTI "which has " RETURN 2 ?ELS23: PRINTI "Sitting on" CALL2 HIM-HER-IT,OBJ PRINTC 32 FIRST? OBJ /?PRD37 PUSH 0 JUMP ?PRD38 ?PRD37: PUSH 1 ?PRD38: NEXT? STACK /?PRD39 PUSH 0 JUMP ?PRD40 ?PRD39: PUSH 1 ?PRD40: ZERO? STACK \?ELS36 PRINTI "is " RTRUE ?ELS36: PRINTI "are " RTRUE ?ELS18: GRTR? LEVEL,0 \?ELS51 PRINTI "which" SET 'VAL,M-FATAL JUMP ?CND49 ?ELS51: CALL2 START-SENTENCE,OBJ ?CND49: PRINTI " contains " RETURN VAL .FUNCT HAR-HAR CALL2 PICK-ONE-NEW,YUKS PRINT STACK CRLF RTRUE .FUNCT NOT-HOLDING?,OBJ IN? OBJ,WINNER /FALSE LOC OBJ IN? STACK,WINNER /FALSE CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " not holding" CALL2 HIM-HER-IT,OBJ PRINTR "." .FUNCT GOTO,RM,V?=1,L IN? WINNER,RM \?CND1 EQUAL? RM,ROOF /?CND1 CALL1 HAR-HAR RFALSE ?CND1: MOVE WINNER,RM SET 'LIT,TRUE-VALUE EQUAL? WINNER,PLAYER \TRUE CALL DIR-FROM,HERE,RM >L ZERO? L /?CND9 CALL COMPASS-EQV,HERE,L >L ZERO? L /?CND9 CALL2 OPP-DIR,L >PLAYER-NOT-FACING ?CND9: SET 'LAST-PLAYER-LOC,HERE SET 'HERE,RM GETP HERE,P?ACTION CALL STACK,M-ENTER ZERO? V? /?CND14 CALL1 V-FIRST-LOOK ?CND14: GETP HERE,P?ACTION CALL STACK,M-FLASH RTRUE .FUNCT HACK-HACK,STR PRINT STR CALL2 HIM-HER-IT,PRSO CALL2 PICK-ONE,HO-HUM PRINT STACK CRLF RTRUE .FUNCT HELD?,OBJ,CONT=0,L,X ZERO? CONT \?CND1 SET 'CONT,PLAYER ?CND1: EQUAL? OBJ,BRIEFCASE-LATCH,BRIEFCASE-HANDLE \?CND4 SET 'OBJ,BRIEFCASE ?CND4: ?PRG7: LOC OBJ >L ZERO? L /FALSE EQUAL? L,CONT /TRUE EQUAL? CONT,PLAYER \?ELS15 GETP PLAYER,P?SOUTH >X EQUAL? OBJ,GLOBAL-MONEY \?ELS18 LESS? 0,X \FALSE RTRUE ?ELS18: EQUAL? OBJ,DOLLARS \?ELS25 ZERO? P-DOLLAR-FLAG /?ELS28 LESS? X,P-AMOUNT \TRUE RFALSE ?ELS28: ZERO? P-NUMBER \?ELS36 LESS? X,1 \TRUE RFALSE ?ELS36: LESS? X,P-NUMBER \TRUE RFALSE ?ELS25: EQUAL? OBJ,INTNUM \?ELS50 ZERO? P-DOLLAR-FLAG /FALSE LESS? X,P-AMOUNT \TRUE RFALSE ?ELS50: SET 'OBJ,L JUMP ?PRG7 ?ELS15: EQUAL? L,ROOMS,GLOBAL-OBJECTS /FALSE SET 'OBJ,L JUMP ?PRG7 .FUNCT IDROP CALL2 NOT-HOLDING?,PRSO ZERO? STACK \FALSE IN? PRSO,WINNER /?ELS7 LOC PRSO FSET? STACK,OPENBIT /?ELS7 LOC PRSO CALL TOO-BAD-BUT,STACK,STR?13 RFALSE ?ELS7: MOVE PRSO,HERE FCLEAR PRSO,WORNBIT FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE RTRUE .FUNCT ITAKE,VB=1,CNT,OBJ,L,?TMP1 LOC PRSO >L FSET? L,PERSONBIT /?THN4 EQUAL? L,BRIEFCASE \?CND1 LOC L >L FSET? L,PERSONBIT \?CND1 ?THN4: FSET? PRSO,TAKEBIT /?ELS10 FSET? L,MUNGBIT /?ELS10 CALL2 BRIBED?,L ZERO? STACK \?ELS10 ZERO? VB /FALSE CALL HE-SHE-IT,L,TRUE-VALUE,STR?187 CALL2 HIM-HER-IT,PRSO PRINTI " more tightly and" CALL HE-SHE-IT,L,-1,STR?10 PRINTI " at you " CALL2 THIS-IS-IT,L CALL2 UNSNOOZE,L GETP L,P?SOUTH ZERO? STACK \?ELS21 PRINTI "defiant" JUMP ?CND19 ?ELS21: PRINTI "hopeful" ?CND19: PRINTI "ly." CRLF RFALSE ?ELS10: FSET PRSO,TAKEBIT ?CND1: EQUAL? PRSO,GLOBAL-MONEY \?ELS36 GETP PLAYER,P?SOUTH LESS? STACK,P-AMOUNT \TRUE ?ELS36: FSET? PRSO,TAKEBIT /?ELS40 ZERO? VB /FALSE CALL2 YOU-CANT,STR?188 RFALSE ?ELS40: EQUAL? NOW-LURCHING,PRESENT-TIME \?ELS46 ZERO? TRAIN-MOVING /?ELS46 ZERO? VB /FALSE CALL2 LURCH-MISS,PRSO RFALSE ?ELS46: EQUAL? PRSO,KILLED-PERSON \?ELS54 FIRST? WINNER >CNT \?ELS54 EQUAL? CNT,POCKET,POCKET-C /?ELS54 PRINTI "You try to pick up the body, but" CALL2 PRINTT,CNT PRINTI " keeps getting in the way." CRLF RFALSE ?ELS54: CALL2 CCOUNT,WINNER >CNT GRTR? CNT,FUMBLE-NUMBER \?ELS60 MUL CNT,FUMBLE-PROB >?TMP1 RANDOM 100 LESS? ?TMP1,STACK /?ELS60 FIRST? WINNER >OBJ /?KLU80 ?KLU80: CALL2 TOO-BAD-BUT,OBJ PRINTI " slips from" CALL HIM-HER-IT,WINNER,FALSE-VALUE,TRUE-VALUE PRINTI " arms while" CALL HE-SHE-IT,WINNER,0,STR?1 PRINTI " taking" CALL2 HIM-HER-IT,PRSO PRINTI ", and both tumble " CALL1 GROUND-DESC PRINT STACK PRINTI "." CRLF MOVE OBJ,HERE CALL MOVE-FROM,PRSO,HERE RETURN 2 ?ELS60: EQUAL? PRSO,FILM \?CND69 EQUAL? L,CAMERA \?CND69 ZERO? CAMERA-COCKED /?CND69 SET 'CAMERA-COCKED,FALSE-VALUE PUT FILM-TBL,PICTURE-NUMBER,GLOBAL-OBJECTS ?CND69: SET 'ITAKE-LOC,FALSE-VALUE FSET? L,PERSONBIT \?CND74 ZERO? VB \?CND74 SET 'ITAKE-LOC,L ?CND74: CALL MOVE-FROM,PRSO,WINNER FSET PRSO,TOUCHBIT FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE RTRUE .FUNCT LURCH-MISS,OBJ PRINTI "The train's lurching puts you off balance, and you miss" CALL2 HIM-HER-IT,OBJ PRINTR "." .FUNCT MOVE-FROM,OBJ,HERE,P EQUAL? OBJ,NEWSPAPER,CIGARETTE \?CND1 LOC OBJ >P FSET? P,PERSONBIT \?CND1 GETP P,P?LDESC EQUAL? STACK,5,6,7 \?CND1 FCLEAR P,TOUCHBIT PUTP P,P?LDESC,1 ?CND1: MOVE OBJ,HERE RTRUE .FUNCT CCOUNT,OBJ,CNT=0,X FIRST? OBJ >X \?CND1 ?PRG4: FSET? X,WORNBIT /?CND6 INC 'CNT ?CND6: NEXT? X >X /?PRG4 ?CND1: RETURN CNT .FUNCT CHECK-DOOR,DR CALL2 START-SENTENCE,DR PRINTI " is " FSET? DR,OPENBIT \?ELS5 PRINTI "open" JUMP ?CND3 ?ELS5: PRINTI "closed and " FSET? DR,LOCKED /?CND12 PRINTI "un" ?CND12: PRINTI "locked" ?CND3: PRINTR "." .FUNCT PRINT-CONT,OBJ,LEVEL=0,V?=0,Y,1ST?,STR=0,INV?=0,VAL=0,LAST=0 FIRST? OBJ >Y \FALSE SET '1ST?,TRUE-VALUE LOC OBJ EQUAL? WINNER,OBJ,STACK \?CND4 SET 'INV?,TRUE-VALUE ?CND4: ?PRG10: ZERO? Y \?ELS14 JUMP ?CND7 ?ELS14: EQUAL? Y,WINNER,POCKET \?ELS16 JUMP ?CND12 ?ELS16: EQUAL? OBJ,HERE \?ELS18 FSET? Y,PERSONBIT \?ELS18 CALL2 IN-MOTION?,Y ZERO? STACK /?ELS18 FSET Y,ONBIT MOVE Y,LAST-OBJECT JUMP ?CND12 ?ELS18: FSET? Y,INVISIBLE \?ELS28 ZERO? DEBUG /?ELS28 PRINTI "[invisible] " ?ELS28: FSET? Y,TOUCHBIT /?CND12 GETP Y,P?FDESC >STR ZERO? STR /?CND12 GETP Y,P?DESCFCN ZERO? STACK \?CND12 FSET? Y,NDESCBIT \?THN34 ZERO? DEBUG /?CND31 PRINTI "[ndescbit] " ?THN34: SET '1ST?,FALSE-VALUE SET 'LEVEL,0 ZERO? STR /?CND31 PRINT STR CRLF SET 'STR,FALSE-VALUE SET 'VAL,TRUE-VALUE CALL2 THIS-IS-IT,Y ?CND31: CALL2 SEE-INSIDE?,Y ZERO? STACK /?CND12 LOC Y GETP STACK,P?DESCFCN ZERO? STACK \?CND12 FIRST? Y \?CND12 CALL PRINT-CONT,Y,0,V? ZERO? STACK /?CND46 SET 'VAL,TRUE-VALUE ?CND46: ?CND12: FSET? Y,INVISIBLE /?CND54 FSET? Y,NDESCBIT /?CND54 SET 'LAST,Y ?CND54: NEXT? Y >Y /?KLU134 ?KLU134: JUMP ?PRG10 ?CND7: FIRST? OBJ >Y /?KLU135 ?KLU135: ?PRG59: ZERO? Y \?ELS63 JUMP ?REP60 ?ELS63: EQUAL? Y,PLAYER,POCKET \?ELS65 JUMP ?CND61 ?ELS65: FSET? Y,INVISIBLE \?ELS73 ZERO? DEBUG /?ELS73 PRINTI "[invisible] " ?ELS73: ZERO? INV? \?THN76 FSET? Y,TOUCHBIT /?THN76 GETP Y,P?FDESC ZERO? STACK \?CND61 ?THN76: FSET? Y,NDESCBIT \?THN81 ZERO? DEBUG /?ELS80 PRINTI "[ndescbit] " ?THN81: SET 'VAL,TRUE-VALUE ZERO? 1ST? /?ELS89 SET '1ST?,FALSE-VALUE CALL FIRSTER,OBJ,LEVEL >STR ZERO? STR /?CND91 LESS? LEVEL,0 \?CND91 SET 'LEVEL,0 ?CND91: INC 'LEVEL JUMP ?CND87 ?ELS89: IN? OBJ,ROOMS /?CND87 EQUAL? Y,LAST \?CND87 PRINTI "and " ?CND87: CALL DESCRIBE-OBJECT,Y,LEVEL EQUAL? Y,LAST \?ELS106 EQUAL? STR,TRUE-VALUE /?THN110 LESS? 0,LEVEL \?CND61 FSET? OBJ,NDESCBIT \?CND61 ?THN110: PRINTI "." CRLF JUMP ?CND61 ?ELS106: IN? OBJ,ROOMS /?CND78 PRINTI ", " JUMP ?CND78 ?ELS80: FIRST? Y \?CND61 CALL2 SEE-INSIDE?,Y ZERO? STACK /?CND61 CALL PRINT-CONT,Y,LEVEL,V? ZERO? STACK /?CND78 SET 'VAL,TRUE-VALUE ?CND78: ?CND61: NEXT? Y >Y /?KLU136 ?KLU136: JUMP ?PRG59 ?REP60: ?PRG127: FIRST? LAST-OBJECT >Y \?REP128 MOVE Y,HERE JUMP ?PRG127 ?REP128: RETURN VAL .FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1 FIRST? OBJ >F \FALSE ?PRG6: NEXT? F >N /?KLU26 ?KLU26: ZERO? 1ST? /?ELS10 SET '1ST?,FALSE-VALUE JUMP ?CND8 ?ELS10: PRINTI ", " ZERO? N \?CND8 PRINTI "and " ?CND8: CALL2 PRINTA,F CALL2 THIS-IS-IT,F SET 'F,N ZERO? F \?PRG6 RTRUE .FUNCT ROOM-CHECK,P SET 'P,PRSO IN? P,ROOMS \?ELS5 EQUAL? P,HERE /FALSE CALL NEXT-ROOM,HERE,P?IN EQUAL? P,STACK /FALSE CALL NEXT-ROOM,HERE,P?OUT EQUAL? P,STACK /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(You aren't close enough to" CALL2 HIM-HER-IT,P PRINTR "!)" ?ELS5: CALL2 META-LOC,P EQUAL? STACK,HERE,GLOBAL-OBJECTS,LOCAL-GLOBALS /FALSE CALL2 VISIBLE?,P ZERO? STACK \FALSE GETP P,P?CHARACTER ZERO? STACK /?ELS29 IN? P,GLOBAL-OBJECTS \?ELS29 GETP P,P?CHARACTER GET CHARACTER-TABLE,STACK >P CALL2 VISIBLE?,P ZERO? STACK \FALSE CALL2 NOT-HERE,P RSTACK ?ELS29: CALL2 NOT-HERE,P RSTACK .FUNCT SEE-INSIDE?,OBJ,ONLY-IN=0 FSET? OBJ,INVISIBLE /FALSE FSET? OBJ,TRANSBIT /TRUE FSET? OBJ,OPENBIT /TRUE ZERO? ONLY-IN \FALSE FSET? OBJ,PERSONBIT \?ELS14 EQUAL? OBJ,PLAYER \TRUE ?ELS14: FSET? OBJ,SURFACEBIT /TRUE RFALSE .FUNCT ARENT-TALKING PRINTR "You aren't talking to anyone!" .FUNCT ALREADY,OBJ,STR=0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(" CALL HE-SHE-IT,OBJ,TRUE-VALUE,STR?1 PRINTI " already " ZERO? STR /TRUE PRINT STR PRINTR "!)" .FUNCT NOT-CLEAR-WHOM,GEST=0 SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-CONT,FALSE-VALUE PRINTI "(It's not clear whom you're " ZERO? GEST \?ELS5 PRINTI "talk" JUMP ?CND3 ?ELS5: PRINTI "gestur" ?CND3: PRINTR "ing to.)" .FUNCT OKAY,OBJ=0,STR=0 EQUAL? WINNER,PLAYER \?ELS3 EQUAL? PRSA,V?WALK-TO,V?WALK,V?THROUGH \?CND1 RTRUE ?ELS3: CALL1 PRODUCE-GIBBERISH RTRUE ?CND1: PRINTI "Okay" ZERO? OBJ /?CND11 PRINTI "," CALL2 HE-SHE-IT,OBJ ZERO? STR /?CND17 PRINTI " is now " PRINT STR ?CND17: EQUAL? STR,STR?189 \?ELS25 FSET OBJ,ONBIT JUMP ?CND11 ?ELS25: EQUAL? STR,STR?190 \?ELS27 FCLEAR OBJ,ONBIT JUMP ?CND11 ?ELS27: EQUAL? STR,STR?12 \?ELS29 FSET OBJ,OPENBIT JUMP ?CND11 ?ELS29: EQUAL? STR,STR?13 \?ELS31 FCLEAR OBJ,OPENBIT JUMP ?CND11 ?ELS31: EQUAL? STR,STR?191 \?ELS33 FSET OBJ,LOCKED JUMP ?CND11 ?ELS33: EQUAL? STR,STR?192 \?CND11 FCLEAR OBJ,LOCKED ?CND11: ZERO? STR \?THN39 ZERO? OBJ \TRUE ?THN39: PRINTR "." .FUNCT WONT-HELP-TO-TALK-TO,OBJ PRINTI "You talk to" CALL2 HIM-HER-IT,OBJ PRINTI " for a minute before you realize that" CALL2 HE-SHE-IT,OBJ PRINTR " won't respond." .FUNCT TOO-BAD-BUT,OBJ,STR=0 PRINTI "Too bad, but" CALL2 HE-SHE-IT,OBJ CALL2 THIS-IS-IT,OBJ ZERO? STR /TRUE CALL HE-SHE-IT,OBJ,-1,STR?1 PRINTC 32 PRINT STR PRINTR "." .FUNCT TOO-DARK PRINTR "(It's too dark to see!)" .FUNCT VISIBLE?,OBJ,ALL-DIR=0,L,LL,X=0 ZERO? OBJ /FALSE CALL2 ACCESSIBLE?,OBJ ZERO? STACK \TRUE EQUAL? OBJ,SCENERY-OBJ \?CND1 ZERO? ON-TRAIN /TRUE CALL FIND-FLAG-LG,HERE,WINDOWBIT ZERO? STACK \TRUE ?CND1: SET 'LL,COR-ALL-DIRS SET 'COR-ALL-DIRS,ALL-DIR CALL2 CORRIDOR-LOOK,OBJ >X SET 'COR-ALL-DIRS,LL ZERO? X /?CND12 ZERO? ALL-DIR /?ELS17 RETURN X ?ELS17: EQUAL? X,PLAYER-NOT-FACING /FALSE RETURN X ?CND12: LOC OBJ >L CALL2 SEE-INSIDE?,L ZERO? STACK /FALSE CALL2 VISIBLE?,L RSTACK .FUNCT ACCESSIBLE?,OBJ,L ZERO? OBJ /FALSE LOC OBJ >L FSET? OBJ,INVISIBLE /FALSE ZERO? L /FALSE EQUAL? L,GLOBAL-OBJECTS /TRUE EQUAL? L,LOCAL-GLOBALS \?ELS16 CALL GLOBAL-IN?,OBJ,HERE RSTACK ?ELS16: EQUAL? HERE,OBJ /TRUE CALL2 META-LOC,OBJ EQUAL? STACK,HERE \FALSE EQUAL? L,WINNER,HERE /TRUE FSET? L,OPENBIT /?THN29 GETP L,P?CHARACTER ZERO? STACK /FALSE ?THN29: CALL2 ACCESSIBLE?,L ZERO? STACK /FALSE RTRUE .FUNCT META-LOC,OBJ,INV=0,L LOC OBJ >L ?PRG1: ZERO? L /FALSE EQUAL? L,LOCAL-GLOBALS,GLOBAL-OBJECTS \?ELS7 RETURN L ?ELS7: IN? OBJ,ROOMS \?ELS9 RETURN OBJ ?ELS9: ZERO? INV /?CND12 FSET? OBJ,INVISIBLE /FALSE ?CND12: SET 'OBJ,L LOC OBJ >L JUMP ?PRG1 .FUNCT WEIGHT,OBJ,CONT,WT=0 FIRST? OBJ >CONT \?CND1 ?PRG4: EQUAL? OBJ,PLAYER \?ELS8 FSET? CONT,WORNBIT \?ELS8 INC 'WT JUMP ?CND6 ?ELS8: EQUAL? OBJ,PLAYER \?ELS12 LOC CONT FSET? STACK,WORNBIT \?ELS12 INC 'WT JUMP ?CND6 ?ELS12: CALL2 WEIGHT,CONT ADD WT,STACK >WT ?CND6: NEXT? CONT >CONT /?PRG4 ?CND1: GETP OBJ,P?SIZE ADD WT,STACK RSTACK .FUNCT WHO-CARES,N RANDOM WHO-CARES-LENGTH >N GET WHO-CARES-VERB,N CALL HE-SHE-IT,PRSO,TRUE-VALUE,STACK GET WHO-CARES-TBL,N PRINT STACK PRINTR "." .FUNCT PRE-SAIM CALL PERFORM,V?AIM,PRSI,PRSO RTRUE .FUNCT V-SAIM CALL1 V-FOO RSTACK .FUNCT V-AIM CALL1 YOU-CANT RSTACK .FUNCT PRE-SANALYZE CALL PERFORM,V?ANALYZE,PRSI,PRSO RTRUE .FUNCT V-SANALYZE CALL1 V-FOO RSTACK .FUNCT PRE-ANALYZE CALL1 ROOM-CHECK RSTACK .FUNCT V-ANALYZE FSET? PRSO,PERSONBIT \?ELS5 PRINTR "How?" ?ELS5: FSET? PRSO,DOORBIT \?ELS9 CALL2 CHECK-DOOR,PRSO RSTACK ?ELS9: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?10 PRINTR " normal." .FUNCT V-ANSWER PRINTI "Nobody seems to be waiting for an answer." CRLF SET 'P-CONT,FALSE-VALUE SET 'QUOTE-FLAG,FALSE-VALUE RTRUE .FUNCT V-REPLY SET 'P-CONT,FALSE-VALUE SET 'QUOTE-FLAG,FALSE-VALUE FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 CALL1 WAITING-FOR-YOU-TO-SPEAK RSTACK ?ELS5: CALL1 YOU-CANT RSTACK .FUNCT WAITING-FOR-YOU-TO-SPEAK CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?194 PRINTR " to be waiting for you to speak." .FUNCT PRE-ASK CALL1 PRE-ASK-ABOUT RSTACK .FUNCT V-ASK ZERO? P-CONT /?ELS5 FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 SET 'WINNER,PRSO SET 'QCONTEXT,PRSO SET 'QCONTEXT-ROOM,HERE RETURN QCONTEXT-ROOM ?ELS5: CALL1 V-ASK-ABOUT RSTACK .FUNCT PRE-ASK-ABOUT,L FSET? PRSO,PERSONBIT \?THN6 FSET? PRSO,MUNGBIT \?ELS5 ?THN6: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?3 PRINTR "n't respond at the moment." ?ELS5: CALL2 UNSNOOZE,PRSO CALL2 META-LOC,PRSO >L EQUAL? L,HERE /FALSE CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \FALSE CALL2 NOT-HERE-PERSON,PRSO RTRUE .FUNCT V-ASK-ABOUT EQUAL? PRSO,PLAYER /?THN6 FSET? PRSO,PERSONBIT \?THN6 FSET? PRSO,MUNGBIT \?ELS5 ?THN6: CALL2 WONT-HELP-TO-TALK-TO,PRSO RETURN 2 ?ELS5: EQUAL? PRSA,V?ASK \?ELS11 CALL1 PRODUCE-GIBBERISH RSTACK ?ELS11: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?3 PRINTI "n't seem to know about" CALL2 HIM-HER-IT,PRSI PRINTR "." .FUNCT PRE-ASK-CONTEXT-ABOUT,P CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS5 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO RTRUE ?ELS5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE PRINT I-ASSUME PRINTI " ask" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE .FUNCT V-ASK-CONTEXT-ABOUT CALL1 ARENT-TALKING RSTACK .FUNCT PRE-ASK-FOR CALL1 PRE-ASK-ABOUT RSTACK .FUNCT V-ASK-FOR FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 EQUAL? PRSO,PLAYER /?ELS5 CALL1 PRODUCE-GIBBERISH RSTACK ?ELS5: CALL1 HAR-HAR RSTACK .FUNCT PRE-ASK-CONTEXT-FOR,P CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS5 CALL PERFORM,V?ASK-FOR,QCONTEXT,PRSO RTRUE ?ELS5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE PRINT I-ASSUME PRINTI " ask" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?ASK-FOR,P,PRSO RTRUE .FUNCT V-ASK-CONTEXT-FOR CALL1 ARENT-TALKING RSTACK .FUNCT V-ATTACK CALL2 IKILL,STR?208 RSTACK .FUNCT PRE-BRING EQUAL? PRSI,FALSE-VALUE,PLAYER,GLOBAL-HERE /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Sorry, but I don't understand.)" .FUNCT V-BRING CALL1 V-TAKE RSTACK .FUNCT PRE-SBRING CALL PERFORM,V?BRING,PRSI,PRSO RTRUE .FUNCT V-SBRING CALL1 V-FOO RSTACK .FUNCT V-BRUSH PRINTR "You try for a minute and then decide it's an endless task." .FUNCT TELL-NO-PRSI SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You didn't say with what!)" .FUNCT PRE-BURN ZERO? PRSI \?ELS5 CALL1 TELL-NO-PRSI RSTACK ?ELS5: EQUAL? PRSI,LIGHTER /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(With a " PRINTD PRSI PRINTR "??!?)" .FUNCT V-BURN EQUAL? PRSO,CIGARETTE,NEWSPAPER /?THN6 EQUAL? PRSO,SPY-LIST,MCGUFFIN,CHECK /?THN6 EQUAL? PRSO,TIMETABLE,PASSPORT,TICKET \?ELS5 ?THN6: CALL2 REMOVE-CAREFULLY,PRSO CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?209 PRINTR " fire and is consumed." ?ELS5: CALL1 YOU-CANT RSTACK .FUNCT REMOVE-CAREFULLY,OBJ,OLIT CALL2 NOT-IT,OBJ SET 'OLIT,LIT REMOVE OBJ CALL2 LIT?,HERE >LIT ZERO? OLIT /TRUE EQUAL? OLIT,LIT /TRUE PRINTR "You are left in the dark...." .FUNCT PRE-BUY IN? MACHINE,HERE /FALSE CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER ZERO? STACK \FALSE SET 'CLOCK-WAIT,TRUE-VALUE CALL2 VISIBLE?,WAITER ZERO? STACK /?ELS12 CALL HE-SHE-IT,WAITER,TRUE-VALUE,STR?1 PRINTR "n't close enough!)" ?ELS12: PRINTR "(There's no one here to serve you!)" .FUNCT PRE-BUY-TICKET EQUAL? HERE,TICKET-AREA /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You can't buy that here.)" .FUNCT V-BUY-TICKET CALL1 YOU-CANT RSTACK .FUNCT V-BUY,COST,X EQUAL? HERE,CAFE /?ELS5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(You can't buy " CALL2 PRINTA,PRSO PRINTR " here.)" ?ELS5: IN? PRSO,ROOMS /?ELS9 GETP PRSO,P?NORTH >COST LESS? 0,COST \?ELS9 FSET? PRSO,PERSONBIT /?ELS9 GETP PLAYER,P?SOUTH >X GRTR? COST,X \?ELS16 PRINTR "You don't have enough money." ?ELS16: SUB X,COST PUTP PLAYER,P?SOUTH,STACK PUTP PRSO,P?NORTH,-1 FSET PRSO,TAKEBIT FCLEAR PRSO,NDESCBIT MOVE PRSO,WINNER PRINTI "You have bought " CALL2 PRINTA,PRSO PRINTI " for " PRINTC CURRENCY-SYMBOL PRINTN COST PRINTR "." ?ELS9: EQUAL? COST,-1 \?ELS31 PRINTI "You've already bought" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS31: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTR " not for sale." .FUNCT V-$CALL,PER,MOT=0,C SET 'PER,PRSO FSET? PER,PERSONBIT \?THN4 FSET? PER,MUNGBIT /?THN4 EQUAL? PER,PLAYER \?CND1 ?THN4: CALL2 WONT-HELP-TO-TALK-TO,PER RTRUE ?CND1: CALL2 UNSNOOZE,PER GETP PER,P?CHARACTER >C ZERO? C /?ELS10 CALL2 IN-MOTION?,PER ZERO? STACK /?CND11 SET 'MOT,TRUE-VALUE ?CND11: CALL2 META-LOC,PER EQUAL? STACK,HERE \?ELS18 CALL2 START-SENTENCE,PER CALL2 GRAB-ATTENTION,PER ZERO? STACK /?ELS25 FCLEAR PER,TOUCHBIT PUTP PER,P?LDESC,21 ZERO? MOT /?ELS30 CALL HE-SHE-IT,PER,-1,STR?210 PRINTI " and" CALL HE-SHE-IT,PER,-1,STR?211 PRINTR " toward you." ?ELS30: CALL HE-SHE-IT,PER,-1,STR?1 PRINTR " listening." ?ELS25: CALL HE-SHE-IT,PER,-1,STR?212 PRINTR " you." ?ELS18: CALL2 CORRIDOR-LOOK,PER ZERO? STACK /?ELS43 CALL1 COR-GRAB-ATTENTION ZERO? STACK \TRUE CALL2 START-SENTENCE,PER CALL HE-SHE-IT,PER,-1,STR?212 PRINTR " you." ?ELS43: CALL2 NOT-HERE,PER RSTACK ?ELS10: SET 'CLOCK-WAIT,TRUE-VALUE CALL1 MISSING-VERB RSTACK .FUNCT PRE-PHONE,P,PP ZERO? PRSI /?ELS5 CALL TOO-BAD-BUT,PRSI,STR?213 RSTACK ?ELS5: FSET? PRSO,PERSONBIT \?ELS14 IN? PRSO,HERE \?ELS14 FSET? PRSO,NDESCBIT /?ELS14 CALL1 BITE-YOU RSTACK ?ELS14: EQUAL? PRSO,PLAYER \?ELS18 CALL1 HAR-HAR RSTACK ?ELS18: ZERO? PRSI \FALSE PRINTR "There's nothing to phone with here." .FUNCT V-PHONE,PER GETP PRSO,P?CHARACTER >PER ZERO? PER /?ELS5 GET CHARACTER-TABLE,PER >PER ZERO? PER /?ELS5 CALL2 META-LOC,PER EQUAL? STACK,HERE /?THN8 CALL2 CORRIDOR-LOOK,PER ZERO? STACK /?ELS5 ?THN8: CALL PERFORM,V?$CALL,PRSO RTRUE ?ELS5: EQUAL? -1,P-NUMBER /?ELS11 PRINTR "There's no point in calling that number." ?ELS11: FSET? PRSO,PERSONBIT /?ELS15 CALL2 TOO-BAD-BUT,PRSO PRINTR " has no phone." ?ELS15: CALL2 META-LOC,PRSO EQUAL? STACK,HERE \?ELS19 FSET? PRSO,NDESCBIT /?ELS19 CALL1 BITE-YOU RSTACK ?ELS19: PRINTI "There's no sense in phoning" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-CHANGE CALL1 YOU-CANT RSTACK .FUNCT V-CHASTISE EQUAL? PRSO,INTDIR /?CND1 PRINT I-ASSUME PRINTI " look at" CALL2 HIM-HER-IT,PRSO PRINTI ", not look in" CALL2 HIM-HER-IT,PRSO PRINTI " nor look for" CALL2 HIM-HER-IT,PRSO PRINTI " nor any other preposition.)" CRLF ?CND1: CALL PERFORM,V?EXAMINE,PRSO RTRUE .FUNCT V-BOARD IN? PRSO,ROOMS /?THN6 FSET? PRSO,DOORBIT \?ELS5 ?THN6: CALL1 V-THROUGH RSTACK ?ELS5: CALL2 YOU-CANT,STR?214 RSTACK .FUNCT V-CLIMB-ON CALL2 YOU-CANT,STR?215 RSTACK .FUNCT V-CLIMB-UP,DIR=P?UP,OBJ=0,X GETPT HERE,DIR ZERO? STACK /?ELS5 CALL2 DO-WALK,DIR RTRUE ?ELS5: ZERO? OBJ \?ELS7 CALL2 YOU-CANT,STR?182 RSTACK ?ELS7: CALL1 HAR-HAR RSTACK .FUNCT V-CLIMB-DOWN CALL2 V-CLIMB-UP,P?DOWN RSTACK .FUNCT V-CLOSE FSET? PRSO,CONTBIT /?ELS5 FSET? PRSO,DOORBIT /?ELS5 FSET? PRSO,WINDOWBIT /?ELS5 CALL1 YOU-CANT RSTACK ?ELS5: FSET? PRSO,DOORBIT /?THN10 FSET? PRSO,WINDOWBIT \?ELS9 ?THN10: FSET? PRSO,OPENBIT \?ELS16 FSET? PRSO,MUNGBIT \?ELS21 PRINTR "It won't stay closed. The latch is broken." ?ELS21: FSET? PRSO,LOCKED \?CND26 CALL ZMEMQ,HERE,CAR-ROOMS-REST ZERO? STACK /?CND26 PRINTI "(You lock" CALL2 HIM-HER-IT,PRSO PRINTI " too.)" CRLF ?CND26: CALL OKAY,PRSO,STR?13 RSTACK ?ELS16: CALL ALREADY,PRSO,STR?13 RSTACK ?ELS9: FSET? PRSO,SURFACEBIT /?ELS39 GETP PRSO,P?CAPACITY ZERO? STACK /?ELS39 FSET? PRSO,OPENBIT \?ELS46 CALL OKAY,PRSO,STR?13 RSTACK ?ELS46: CALL ALREADY,PRSO,STR?13 RSTACK ?ELS39: CALL1 YOU-CANT RSTACK .FUNCT PRE-COME-WITH CALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT V-COME-WITH CALL1 V-FOO RSTACK .FUNCT V-CONFRONT EQUAL? PRSO,PLAYER \?ELS5 CALL1 ARENT-TALKING RSTACK ?ELS5: FSET? PRSO,PERSONBIT /?ELS7 PRINTI "Wow! That ought to put a scare into" CALL2 HIM-HER-IT,PRSO PRINTR "!" ?ELS7: CALL1 WHO-CARES RSTACK .FUNCT V-COUNT PRINTR "Uhhh... ONE!" .FUNCT V-CUT CALL1 YOU-CANT RSTACK .FUNCT V-MUNG FSET? PRSO,DOORBIT \?ELS5 ZERO? PRSI \?ELS5 FSET? PRSO,OPENBIT \?ELS12 PRINTR "You'd fly through the open door if you tried." ?ELS12: PRINTR "Why don't you just open it instead?" ?ELS5: FSET? PRSO,PERSONBIT /?ELS20 CALL1 IF-SPY RSTACK ?ELS20: ZERO? PRSI \?ELS22 PRINTI "Trying to destroy" CALL2 HIM-HER-IT,PRSO PRINTR " with your bare hands is suicidal." ?ELS22: FSET? PRSI,WEAPONBIT /?ELS26 PRINTI "You can't destroy" CALL2 HIM-HER-IT,PRSO PRINTI " with" CALL2 HIM-HER-IT,PRSI PRINTR "!" ?ELS26: CALL1 YOU-CANT RSTACK .FUNCT V-DIAGNOSE ZERO? PRSO /?ELS5 CALL1 YOU-CANT RSTACK ?ELS5: PRINTR "You're wide awake and in good health." .FUNCT PRE-DISCUSS ZERO? PRSI \?CND1 SET 'PRSI,PLAYER ?CND1: CALL PERFORM,V?TELL-ABOUT,PRSI,PRSO RTRUE .FUNCT V-DISCUSS CALL1 V-FOO RSTACK .FUNCT V-DRINK CALL1 YOU-CANT RSTACK .FUNCT V-DROP CALL1 IDROP ZERO? STACK /FALSE CALL1 GROUND-DESC CALL OKAY,PRSO,STACK RSTACK .FUNCT GROUND-DESC EQUAL? HERE,ROOF \?ELS5 RETURN STR?216 ?ELS5: EQUAL? HERE,BESIDE-TRACKS \?ELS7 RETURN STR?217 ?ELS7: RETURN STR?218 .FUNCT V-EAT PRINTR "It's hard to believe that you're that hungry." .FUNCT PRE-EMPTY FIRST? PRSO /FALSE CALL ALREADY,PRSO,STR?219 RSTACK .FUNCT V-EMPTY CALL1 V-FILL RSTACK .FUNCT V-ENTER CALL2 DO-WALK,P?IN RTRUE .FUNCT V-THROUGH,OBJ=0,RM,DIR IN? PRSO,ROOMS \?ELS5 CALL PERFORM,V?WALK-TO,PRSO RTRUE ?ELS5: FSET? PRSO,DOORBIT \?ELS7 FSET? PRSO,OPENBIT \?ELS7 CALL DOOR-ROOM,HERE,PRSO >RM ZERO? RM /?ELS14 CALL2 GOTO,RM ZERO? STACK /?ELS14 CALL1 OKAY RSTACK ?ELS14: PRINTI "Sorry, but the """ PRINTD PRSO PRINTR """ must be somewhere else." ?ELS7: ZERO? OBJ \?ELS22 FSET? PRSO,TAKEBIT /?ELS22 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?220 PRINTI " into it trying to go through" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS22: ZERO? OBJ /?ELS28 PRINTR "You can't do that!" ?ELS28: IN? PRSO,WINNER \?ELS33 PRINTR "You must think you're a contortionist!" ?ELS33: CALL1 HAR-HAR RSTACK .FUNCT PRE-EXAMINE,VAL CALL1 ROOM-CHECK ZERO? STACK \TRUE EQUAL? P-ADVERB,W?CAREFULLY \FALSE CALL2 INT-WAIT,3 >VAL ZERO? VAL \?ELS12 PRINTI "You never got to finish examining" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS12: EQUAL? VAL,M-FATAL /TRUE RFALSE .FUNCT V-EXAMINE,TXT,P EQUAL? PRSO,INTDIR \?ELS5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(If you want to see what's there, face that way or go there!)" ?ELS5: EQUAL? PRSO,HANDS,HEAD \?ELS9 CALL1 NOTHING-SPECIAL RSTACK ?ELS9: IN? PRSO,GLOBAL-OBJECTS \?ELS11 CALL2 CORRIDOR-LOOK,PRSO ZERO? STACK \?ELS11 CALL2 NOT-HERE,PRSO RTRUE ?ELS11: IN? PRSO,ROOMS \?ELS15 CALL2 ROOM-PEEK,PRSO RSTACK ?ELS15: CALL2 META-LOC,PRSO EQUAL? STACK,HERE,LOCAL-GLOBALS /?ELS17 CALL TOO-BAD-BUT,PRSO,STR?221 RSTACK ?ELS17: GETP PRSO,P?TEXT >TXT ZERO? TXT /?ELS19 PRINT TXT CRLF RTRUE ?ELS19: FSET? PRSO,CONTBIT \?ELS23 CALL1 V-LOOK-INSIDE RSTACK ?ELS23: FSET? PRSO,DOORBIT \?ELS27 CALL2 CHECK-DOOR,PRSO RSTACK ?ELS27: CALL1 NOTHING-SPECIAL RSTACK .FUNCT NOTHING-SPECIAL PRINTI "Yup. That's " CALL2 PRINTA,PRSO PRINTR ", all right." .FUNCT GLOBAL-IN?,OBJ1,OBJ2,TBL GETPT OBJ2,P?GLOBAL >TBL ZERO? TBL /FALSE PTSIZE TBL DIV STACK,2 SUB STACK,1 CALL ZMEMQ,OBJ1,TBL,STACK RSTACK .FUNCT V-$FACE ZERO? PLAYER-NOT-FACING \?ELS5 PRINTR "0" ?ELS5: PRINTI "not " CALL2 DIR-PRINT,PLAYER-NOT-FACING CRLF RTRUE .FUNCT V-FACE,P ZERO? P-WALK-DIR \?ELS3 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(I can't figure out what direction that is.)" CRLF RETURN 2 ?ELS3: CALL COMPASS-EQV,HERE,PRSO >P ZERO? P \?CND1 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(You can't face that way!)" CRLF RETURN 2 ?CND1: CALL2 OPP-DIR,P >PLAYER-NOT-FACING PRINTI "Okay, you're now facing to " CALL2 DIR-PRINT,P PRINTI "." CRLF GETP HERE,P?CORRIDOR ZERO? STACK /TRUE CALL1 CORRIDOR-LOOK RTRUE .FUNCT V-FAINT PRINTI "As you wish." CALL1 UNCONSCIOUS-FCN RSTACK .FUNCT PRE-FILL ZERO? PRSI /FALSE CALL1 HAR-HAR RSTACK .FUNCT V-FILL PRINTR "You may know how to do that, but this story doesn't." .FUNCT PRE-FIND,CHR,?TMP1 EQUAL? PRSO,PLAYER /FALSE IN? PRSO,ROOMS \?ELS8 EQUAL? PRSO,HERE \?ELS13 CALL ALREADY,PLAYER,STR?222 RSTACK ?ELS13: FSET? PRSO,TOUCHBIT \?ELS15 PRINTR "You should know - you've been there!" ?ELS15: PRINTR "You'll have to figure that out." ?ELS8: GETP PRSO,P?CHARACTER >CHR ZERO? CHR /FALSE CALL2 META-LOC,WINNER >?TMP1 CALL2 META-LOC,PRSO EQUAL? ?TMP1,STACK \?ELS28 FSET? PRSO,NDESCBIT /?ELS28 CALL1 BITE-YOU RTRUE ?ELS28: CALL2 WHO-KNOWS?,PRSO RTRUE .FUNCT BITE-YOU PRINTI "If" CALL2 HE-SHE-IT,PRSO PRINTI " were any closer," CALL2 HE-SHE-IT,PRSO PRINTR "'d bite you!" .FUNCT V-FIND,L LOC PRSO >L EQUAL? PRSO,PLAYER \?ELS5 PRINTI "You're right here, " CALL1 TELL-LOCATION CRLF RTRUE ?ELS5: CALL2 HELD?,PRSO ZERO? STACK /?ELS9 PRINTR "You have it." ?ELS9: EQUAL? L,LOCAL-GLOBALS \?ELS17 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?THN14 ?ELS17: CALL2 META-LOC,PRSO EQUAL? STACK,HERE \?ELS13 CALL2 VISIBLE?,PRSO ZERO? STACK /?ELS13 ?THN14: PRINTR "It's right here." ?ELS13: FSET? PRSO,TOUCHBIT /?ELS23 IN? PRSO,ROOMS /?THN26 FSET? PRSO,PERSONBIT \?ELS23 ?THN26: FSET? PRSO,SEENBIT /?ELS23 PRINTI "You can't see any " PRINTD PRSO PRINTR " here." ?ELS23: EQUAL? L,GLOBAL-OBJECTS,LOCAL-GLOBALS /?THN32 EQUAL? L,UNDER-SEAT-1,UNDER-SEAT-2,UNDER-SEAT-3 /?THN32 EQUAL? L,UNDER-SEAT-4,UNDER-SEAT-5 \?ELS31 ?THN32: PRINTR "It's around somewhere." ?ELS31: CALL2 META-LOC,PRSO CALL2 FAR-AWAY?,STACK ZERO? STACK /?ELS37 PRINTR "It's far away from here." ?ELS37: FSET? L,PERSONBIT \?ELS41 CALL2 START-SENTENCE,L PRINTR " probably has it." ?ELS41: FSET? L,SURFACEBIT \?ELS45 PRINTI "It's probably on" CALL2 PRINTT,L PRINTR "." ?ELS45: FSET? L,CONTBIT /?THN50 IN? L,ROOMS \?ELS49 ?THN50: PRINTI "It's probably in" CALL2 PRINTT,L PRINTR "." ?ELS49: PRINTR "It's nowhere in particular." .FUNCT V-FIND-WITH CALL1 V-FIND RSTACK .FUNCT V-FIX CALL1 MORE-SPECIFIC RSTACK .FUNCT V-FLUSH CALL GLOBAL-IN?,TOILET,HERE ZERO? STACK /?ELS5 CALL PERFORM,V?FLUSH,PRSO,TOILET RTRUE ?ELS5: PRINTR "You look around for a toilet but find none." .FUNCT V-FLUSH-AWAY CALL1 V-FLUSH RSTACK .FUNCT V-FLUSH-DOWN CALL1 V-FLUSH RSTACK .FUNCT V-FOLLOW,CN,CHR,COR,PCOR,L EQUAL? PRSO,PLAYER \?ELS5 CALL1 NOT-CLEAR-WHOM RSTACK ?ELS5: GETP PRSO,P?CHARACTER >CN ZERO? CN \?ELS7 PRINTI "How tragic to see a would-be spy stalking " CALL2 PRINTA,PRSO PRINTR "!" ?ELS7: GET CHARACTER-TABLE,CN >CHR CALL2 META-LOC,CHR >L EQUAL? HERE,L \?ELS11 PRINTI "You're in the same place as" CALL2 HE-SHE-IT,PRSO PRINTR "!" ?ELS11: ZERO? L \?ELS15 CALL2 START-SENTENCE,PRSO PRINTR " has left the story." ?ELS15: CALL PERFORM,V?WALK-TO,CHR RTRUE .FUNCT V-FOO PRINTR "[Foo!! This is a bug!!]" .FUNCT PRE-GESTURE CALL PERFORM,V?MAKE,GESTURE,PRSO RTRUE .FUNCT V-GESTURE CALL1 V-FOO RSTACK .FUNCT PRE-GIVE FSET? PRSO,PERSONBIT \?ELS9 FSET? PRSO,MUNGBIT \?THN6 ?ELS9: EQUAL? PRSO,GLOBAL-MONEY \?ELS5 ?THN6: CALL1 MORE-SPECIFIC RSTACK ?ELS5: ZERO? P-DOLLAR-FLAG /?ELS11 EQUAL? PRSO,INTNUM \?ELS11 GETP PLAYER,P?SOUTH GRTR? P-AMOUNT,STACK \FALSE PRINTR "You don't have that much." ?ELS11: CALL2 HELD?,PRSO ZERO? STACK \FALSE EQUAL? PRSI,PLAYER /FALSE PRINTI "That's easy for you to say, since " CALL HE-SHE-IT,WINNER,0,STR?1 PRINTI "n't holding" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-GIVE ZERO? PRSI \?ELS5 CALL1 YOU-CANT RSTACK ?ELS5: FSET? PRSI,PERSONBIT /?ELS7 PRINTI "You can't give " CALL2 PRINTA,PRSO PRINTI " to " CALL2 PRINTA,PRSI PRINTR "!" ?ELS7: FSET? PRSI,MUNGBIT \?ELS11 CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?3 PRINTR "n't respond." ?ELS11: EQUAL? PRSI,PLAYER \?ELS15 CALL PERFORM,V?TAKE,PRSO RTRUE ?ELS15: MOVE PRSO,PRSI CALL2 START-SENTENCE,PRSI PRINTR " accepts the offer." .FUNCT PRE-SGIVE CALL PERFORM,V?GIVE,PRSI,PRSO RTRUE .FUNCT V-SGIVE CALL1 V-FOO RSTACK .FUNCT PRE-GOODBYE CALL1 PRE-HELLO RSTACK .FUNCT V-GOODBYE CALL2 V-HELLO,FALSE-VALUE RSTACK .FUNCT PRE-HANGUP EQUAL? PRSO,ROOMS /FALSE CALL TOO-BAD-BUT,PRSO,STR?213 RSTACK .FUNCT V-HANGUP PRINTR "You're not talking to anyone!" .FUNCT PRE-HEAT CALL1 PRE-BURN RSTACK .FUNCT V-HEAT CALL HE-SHE-IT,PRSO,TRUE-VALUE PRINTR " gets a little bit hotter." .FUNCT PRE-HELLO,P ZERO? PRSO /?ELS5 CALL2 UNSNOOZE,PRSO RFALSE ?ELS5: CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS8 CALL PERFORM,PRSA,QCONTEXT RTRUE ?ELS8: EQUAL? WINNER,PLAYER \?ELS10 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?ELS10 FSET? P,INVISIBLE /?ELS10 PRINT I-ASSUME PRINTI " hello " PRINTD P PRINTI ".)" CRLF CALL PERFORM,PRSA,P RTRUE ?ELS10: CALL1 NOT-CLEAR-WHOM RSTACK .FUNCT V-HELLO,HELL=1 GETP PRSO,P?CHARACTER ZERO? STACK /?ELS5 FSET? PRSO,PERSONBIT \?ELS10 FSET? PRSO,MUNGBIT /?ELS10 CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?8 PRINTR " at you." ?ELS10: CALL2 WONT-HELP-TO-TALK-TO,PRSO RSTACK ?ELS5: ZERO? PRSO /?ELS18 PRINTI "Only nuts say """ ZERO? HELL /?ELS26 PUSH STR?223 JUMP ?CND22 ?ELS26: PUSH STR?224 ?CND22: PRINT STACK PRINTI """ to " CALL2 PRINTA,PRSO PRINTR "." ?ELS18: CALL1 NOT-CLEAR-WHOM RSTACK .FUNCT V-HELP EQUAL? PRSO,FALSE-VALUE,PLAYER \?ELS5 CALL1 HELP-TEXT RSTACK ?ELS5: CALL1 MORE-SPECIFIC RSTACK .FUNCT HELP-TEXT SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(You'll find plenty of help in your " PRINTD GAME PRINTR " package. If you're really stuck, you can order an InvisiClues (TM) hint booklet and map from your dealer or via mail with the form in your package.)" .FUNCT V-HIDE PRINTR "There's no good hiding place here." .FUNCT V-HIDE-BEHIND CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER ZERO? STACK /?ELS5 PRINTI "As you start to hide" ZERO? PRSI /?CND8 CALL2 HIM-HER-IT,PRSO ?CND8: PRINTR ", you realize that someone may be watching you." ?ELS5: PRINTI "There's no room to hide" ZERO? PRSI /?CND18 CALL2 HIM-HER-IT,PRSO ?CND18: PRINTI " behind" ZERO? PRSI /?ELS26 CALL2 HIM-HER-IT,PRSI JUMP ?CND24 ?ELS26: CALL2 HIM-HER-IT,PRSO ?CND24: PRINTR "." .FUNCT PRE-HOLD-OVER CALL PERFORM,V?HOLD-UNDER,PRSI,PRSO RTRUE .FUNCT V-HOLD-OVER CALL1 V-FOO RSTACK .FUNCT V-HOLD-UNDER,X CALL1 ANYONE-VISIBLE? >X ZERO? X /?ELS5 CALL2 UNSNOOZE,X CALL HE-SHE-IT,X,TRUE-VALUE,STR?225 PRINTR " sarcastically for your feat." ?ELS5: PRINTR "Nothing happens." .FUNCT V-KILL CALL2 IKILL,STR?226 RSTACK .FUNCT IKILL,STR ZERO? PRSO \?ELS5 PRINTI "There's nothing here to " PRINT STR PRINTR "." ?ELS5: ZERO? PRSI \?ELS9 FSET? PRSO,WEAPONBIT \?ELS9 PRINTI "You didn't say what to " PRINT STR PRINTR " at." ?ELS9: FSET? PRSO,PERSONBIT /?ELS15 CALL1 HAR-HAR RSTACK ?ELS15: IN? PRSO,GLOBAL-OBJECTS \?ELS17 PRINTR "You can't do it from here." ?ELS17: PRINTR "You think it over. It's not worth the hassle." .FUNCT V-KISS FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 CALL2 FACE-RED,STR?4 RSTACK ?ELS5: PRINTR "What a (ahem!) strange idea!" .FUNCT V-KNOCK,P FSET? PRSO,DOORBIT /?THN6 FSET? PRSO,WINDOWBIT \?ELS5 ?THN6: CALL DOOR-ROOM,HERE,PRSO CALL FIND-FLAG,STACK,PERSONBIT,PLAYER >P ZERO? P /?ELS12 CALL2 UNSNOOZE,P PRINTI "Someone shouts, " CALL1 PRODUCE-GIBBERISH RSTACK ?ELS12: PRINTR "There's no answer." ?ELS5: PRINTI "Why knock on " CALL2 PRINTA,PRSO PRINTR "?" .FUNCT V-STAND,P ZERO? PLAYER-SEATED /?ELS5 SET 'PLAYER-SEATED,FALSE-VALUE PRINTR "You're on your own feet again." ?ELS5: CALL ALREADY,PLAYER,STR?227 RSTACK .FUNCT V-LEAP ZERO? PRSO /?ELS5 EQUAL? PRSO,INTDIR /?ELS5 CALL PERFORM,V?BOARD,PRSO RTRUE ?ELS5: GETPT HERE,P?DOWN ZERO? STACK /?ELS9 PRINTI "This was not a very safe place to try jumping." CALL1 FINISH RSTACK ?ELS9: CALL1 V-SKIP RSTACK .FUNCT V-SKIP LOC PLAYER FSET? STACK,VEHBIT \?ELS5 PRINTR "That would be tough from your current position." ?ELS5: CALL1 WHEE RSTACK .FUNCT WHEE,X RANDOM 5 >X EQUAL? 1,X \?ELS5 PRINTR "Very good. Now you can go to the second grade." ?ELS5: EQUAL? 2,X \?ELS9 PRINTR "I hope you enjoyed that more than I did." ?ELS9: EQUAL? 3,X \?ELS13 PRINTR "Are you enjoying yourself?" ?ELS13: EQUAL? 4,X \?ELS17 PRINTR "Wheeeeeeeeee!!!!!" ?ELS17: PRINTR "Do you expect someone to applaud?" .FUNCT V-LEARN CALL1 YOU-CANT RSTACK .FUNCT V-LEAVE LOC PRSO EQUAL? STACK,PLAYER,POCKET \?ELS5 CALL PERFORM,V?DROP,PRSO RTRUE ?ELS5: ZERO? PRSO /?ELS7 LOC WINNER EQUAL? STACK,PRSO /?ELS7 PRINTI "You're not in" CALL2 HIM-HER-IT,PRSO PRINTI "!" CRLF RETURN 2 ?ELS7: ZERO? ON-TRAIN /?ELS15 EQUAL? PRSO,TRAIN \?ELS15 CALL PERFORM,V?WALK-TO,PLATFORM-GLOBAL RTRUE ?ELS15: CALL2 DO-WALK,P?OUT RTRUE .FUNCT PRE-LIE CALL1 ROOM-CHECK RSTACK .FUNCT V-LIE CALL2 V-SIT,TRUE-VALUE RSTACK .FUNCT V-LISTEN FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 CALL1 WAITING-FOR-YOU-TO-SPEAK RTRUE ?ELS5: CALL2 TOO-BAD-BUT,PRSO CALL HE-SHE-IT,PRSO,-1,STR?154 PRINTR " no sound." .FUNCT V-LOCK FSET? PRSO,DOORBIT \?ELS5 CALL ZMEMQ,HERE,CAR-ROOMS-COMPS ZERO? STACK \?THN11 CALL ZMEMQ,HERE,CAR-ROOMS-REST ZERO? STACK /?ELS10 ?THN11: FSET? PRSO,OPENBIT \?CND13 FCLEAR PRSO,OPENBIT PRINTI "(You close" CALL2 HIM-HER-IT,PRSO PRINTI " first.)" CRLF ?CND13: CALL OKAY,PRSO,STR?191 RSTACK ?ELS10: PRINTI "You search for a way to lock it " EQUAL? PRSO,VESTIBULE-REAR-DOOR,VESTIBULE-FWD-DOOR /?CND22 PRINTI "from the outside " ?CND22: PRINTR "but find none." ?ELS5: CALL1 YOU-CANT RSTACK .FUNCT V-LOOK CALL2 DESCRIBE-ROOM,TRUE-VALUE ZERO? STACK /FALSE CALL2 DESCRIBE-OBJECTS,TRUE-VALUE CRLF RTRUE .FUNCT V-LOOK-BEHIND FSET? PRSO,DOORBIT \?ELS5 FSET? PRSO,OPENBIT /?ELS5 CALL TOO-BAD-BUT,PRSO,STR?13 RSTACK ?ELS5: PRINTI "There's nothing behind" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-LOOK-DOWN EQUAL? PRSO,ROOMS \?ELS5 EQUAL? P-ADVERB,W?CAREFULLY \?ELS10 CALL PERFORM,V?SEARCH,FLOOR RTRUE ?ELS10: PRINTI "A quick look reveals nothing interesting " CALL1 GROUND-DESC PRINT STACK PRINTR "." ?ELS5: CALL1 HAR-HAR RSTACK .FUNCT PRE-LOOK-INSIDE CALL1 ROOM-CHECK RSTACK .FUNCT V-LOOK-INSIDE,DIR=P?IN,RM EQUAL? PRSO,ROOMS \?CND1 EQUAL? DIR,P?OUT \?ELS6 CALL FIND-FLAG-LG,HERE,WINDOWBIT >RM ZERO? RM /?CND4 PRINT I-ASSUME CALL2 PRINTT,RM PRINTI ".)" CRLF CALL PERFORM,PRSA,RM,PRSI RTRUE ?ELS6: CALL FIND-FLAG-LG,HERE,CONTBIT >RM ZERO? RM \?THN17 CALL FIND-FLAG-LG,HERE,WINDOWBIT >RM ZERO? RM \?THN17 CALL FIND-FLAG-LG,HERE,DOORBIT >RM ZERO? RM /?CND4 ?THN17: PRINT I-ASSUME CALL2 PRINTT,RM PRINTI ".)" CRLF CALL PERFORM,PRSA,RM,PRSI RTRUE ?CND4: ?CND1: EQUAL? PRSO,GLOBAL-HERE \?ELS25 CALL2 PERFORM,V?LOOK RTRUE ?ELS25: IN? PRSO,ROOMS \?ELS27 CALL2 ROOM-PEEK,PRSO RSTACK ?ELS27: FSET? PRSO,CONTBIT \?ELS29 CALL SEE-INSIDE?,PRSO,TRUE-VALUE ZERO? STACK \?CND30 FSET PRSO,OPENBIT PRINTI "(You open" CALL2 HIM-HER-IT,PRSO PRINTI " first.)" CRLF ?CND30: FIRST? PRSO \?ELS39 CALL2 PRINT-CONT,PRSO ZERO? STACK \TRUE ?ELS39: CALL TOO-BAD-BUT,PRSO,STR?219 RSTACK ?ELS29: FSET? PRSO,SURFACEBIT \?ELS45 FIRST? PRSO \?ELS50 CALL2 PRINT-CONT,PRSO ZERO? STACK \TRUE ?ELS50: PRINTI "There's nothing on" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS45: CALL2 V-LOOK-THROUGH,TRUE-VALUE ZERO? STACK \TRUE EQUAL? DIR,P?IN \?ELS60 CALL2 YOU-CANT,STR?228 RSTACK ?ELS60: CALL2 YOU-CANT,STR?229 RSTACK .FUNCT V-LOOK-THROUGH,INSIDE=0,RM FSET? PRSO,DOORBIT \?ELS5 FSET? PRSO,OPENBIT /?THN11 FSET? PRSO,TRANSBIT \?ELS10 ?THN11: CALL DOOR-ROOM,HERE,PRSO >RM ZERO? RM /?ELS17 CALL ROOM-PEEK,RM,TRUE-VALUE RSTACK ?ELS17: PRINTI "You can't tell what's beyond" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS10: CALL TOO-BAD-BUT,PRSO,STR?13 RSTACK ?ELS5: FSET? PRSO,WINDOWBIT \?ELS25 PRINTI "You can't tell what's beyond" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS25: FSET? PRSO,PERSONBIT \?ELS34 PRINTR "You forgot to bring your X-ray glasses." ?ELS34: ZERO? INSIDE \FALSE CALL2 YOU-CANT,STR?230 RSTACK .FUNCT ROOM-PEEK,RM,SAFE=0,X=0,OLD-HERE,TXT SET 'OLD-HERE,HERE ZERO? SAFE \?THN6 CALL2 SEE-INTO?,RM ZERO? STACK /FALSE ?THN6: ZERO? PLAYER-SEATED \?CND8 ZERO? PLAYER-HIDING \?CND8 CALL DIR-FROM,HERE,RM CALL COMPASS-EQV,HERE,STACK >TXT ZERO? TXT /?CND8 CALL2 OPP-DIR,TXT >PLAYER-NOT-FACING ?CND8: SET 'HERE,RM PRINTI "You take a quick peek into" CALL2 HIM-HER-IT,RM PRINTI ":" CRLF EQUAL? PLAYER-NOT-FACING-OLD,PLAYER-NOT-FACING /?CND15 PRINTI "[You're facing to " CALL2 OPP-DIR,PLAYER-NOT-FACING CALL2 DIR-PRINT,STACK PRINTI ".]" CRLF ?CND15: CALL2 DESCRIBE-OBJECTS,TRUE-VALUE ZERO? STACK /?ELS24 SET 'X,TRUE-VALUE JUMP ?CND22 ?ELS24: GETP RM,P?LDESC >TXT ZERO? TXT /?CND22 SET 'X,TRUE-VALUE PRINT TXT CRLF ?CND22: ZERO? X \?CND29 PRINTI "You can't see anything interesting." CRLF ?CND29: SET 'HERE,OLD-HERE RETURN HERE .FUNCT SEE-INTO?,THERE,P,L,TBL,O SET 'P,0 ?PRG1: NEXTP HERE,P >P ZERO? P \?ELS5 PRINTI "You can't seem to find that room." CRLF RFALSE ?ELS5: LESS? P,LOW-DIRECTION /?PRG1 GETPT HERE,P >TBL PTSIZE TBL >L EQUAL? L,UEXIT \?ELS12 GET TBL,REXIT EQUAL? STACK,THERE /TRUE ?ELS12: EQUAL? L,DEXIT \?ELS16 GET TBL,REXIT EQUAL? STACK,THERE \?ELS16 GET TBL,DEXITOBJ FSET? STACK,OPENBIT /TRUE PRINTR "(The door to that room is closed.)" ?ELS16: EQUAL? L,CEXIT \?PRG1 GET TBL,REXIT EQUAL? STACK,THERE \?PRG1 GETB TBL,CEXITFLAG VALUE STACK ZERO? STACK \TRUE PRINTI "You can't seem to find that room." CRLF RFALSE .FUNCT V-LOOK-ON FSET? PRSO,SURFACEBIT \?ELS5 CALL1 V-LOOK-INSIDE RSTACK ?ELS5: PRINTI "There's no good surface on" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-LOOK-OUTSIDE CALL2 V-LOOK-INSIDE,P?OUT RSTACK .FUNCT V-LOOK-UNDER CALL2 HELD?,PRSO ZERO? STACK /?ELS5 FSET? PRSO,WORNBIT \?ELS10 PRINTR "You're wearing it!" ?ELS10: PRINTR "You're holding it!" ?ELS5: FSET? PRSO,PERSONBIT \?ELS18 PRINTI "Nope. Nothing hiding under" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS18: LOC PRSO EQUAL? STACK,HERE,LOCAL-GLOBALS \?ELS22 PRINTR "There's nothing there but dust." ?ELS22: PRINTR "That's not a bit useful." .FUNCT V-LOOK-UP,HR ZERO? PRSI /?ELS5 PRINTI "There's no information in" CALL2 HIM-HER-IT,PRSI PRINTR " about that." ?ELS5: EQUAL? PRSO,ROOMS \?ELS10 CALL2 OUTSIDE?,HERE ZERO? STACK /?ELS15 DIV PRESENT-TIME,60 MOD STACK,24 >HR GRTR? HR,6 \?ELS18 LESS? HR,18 \?ELS18 PRINTI "The sun" JUMP ?CND16 ?ELS18: PRINTI "The moon" ?CND16: PRINTR " is shining with all its might." ?ELS15: CALL ZMEMQ,HERE,STATION-ROOMS ZERO? STACK /?ELS30 CALL2 ON-PLATFORM?,HERE ZERO? STACK /?ELS33 PRINTI "The overhanging roof" JUMP ?CND31 ?ELS33: PRINTI "The ceiling" ?CND31: PRINTR " is constructed on a grand scale, with crossed beams and numerous chandeliers." ?ELS30: PRINTR "The ceiling has seen better years, but a little soot removal would do wonders." ?ELS10: IN? TIMETABLE,WINNER \?ELS47 CALL PERFORM,V?LOOK-UP,PRSO,TIMETABLE RTRUE ?ELS47: PRINTI "Huh? Without the " PRINTD TIMETABLE PRINTR "?" .FUNCT V-MAKE PRINTR """Eat, drink, and make merry, for tomorrow we shall die!""" .FUNCT PRE-MOVE CALL2 HELD?,PRSO ZERO? STACK /FALSE PRINTR "Juggling isn't one of your talents." .FUNCT V-MOVE FSET? PRSO,TAKEBIT \?ELS5 PRINTI "Moving" CALL2 HIM-HER-IT,PRSO PRINTR " reveals nothing." ?ELS5: CALL1 YOU-CANT RSTACK .FUNCT PRE-MOVE-DIR SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Sorry, but I don't understand that sentence.)" .FUNCT V-MOVE-DIR PRINTI "You can't move" CALL2 HIM-HER-IT,PRSO PRINTR " in any particular direction." .FUNCT V-NOD CALL1 YOU-CANT RSTACK .FUNCT V-OPEN,F,STR FSET? PRSO,CONTBIT /?ELS5 FSET? PRSO,DOORBIT /?ELS5 FSET? PRSO,WINDOWBIT /?ELS5 CALL1 YOU-CANT RSTACK ?ELS5: FSET? PRSO,DOORBIT /?THN10 FSET? PRSO,WINDOWBIT /?THN10 GETP PRSO,P?CAPACITY ZERO? STACK /?ELS9 ?THN10: FSET? PRSO,LOCKED \?CND12 CALL ZMEMQ,HERE,CAR-ROOMS-COMPS ZERO? STACK \?ELS19 CALL ZMEMQ,HERE,CAR-ROOMS-REST ZERO? STACK \?ELS19 CALL TOO-BAD-BUT,PRSO,STR?191 RTRUE ?ELS19: FCLEAR PRSO,LOCKED PRINTI "(You unlock" CALL2 HIM-HER-IT,PRSO PRINTI " first.)" CRLF ?CND12: FSET? PRSO,OPENBIT \?ELS30 CALL ALREADY,PRSO,STR?12 RSTACK ?ELS30: FSET? PRSO,MUNGBIT \?ELS32 PRINTR "You can't open it. The latch is broken." ?ELS32: FSET PRSO,OPENBIT FSET? PRSO,DOORBIT /?THN42 FSET? PRSO,WINDOWBIT /?THN42 FIRST? PRSO \?THN42 FSET? PRSO,TRANSBIT \?ELS41 ?THN42: CALL OKAY,PRSO,STR?12 RSTACK ?ELS41: FIRST? PRSO >F \?ELS45 NEXT? F /?ELS45 GETP F,P?FDESC >STR ZERO? STR /?ELS45 PRINTI "You open" CALL2 HIM-HER-IT,PRSO PRINTI "." CRLF PRINT STR CRLF RTRUE ?ELS45: PRINTI "You open" CALL2 HIM-HER-IT,PRSO PRINTI " and see " CALL2 PRINT-CONTENTS,PRSO PRINTR "." ?ELS9: CALL1 YOU-CANT RSTACK .FUNCT PRE-OPEN-WITH CALL2 NOT-HOLDING?,PRSI ZERO? STACK \TRUE RFALSE .FUNCT V-OPEN-WITH CALL PERFORM,V?OPEN,PRSO RTRUE .FUNCT V-PASS CALL PERFORM,V?WALK-TO,PRSO RTRUE .FUNCT PRE-PHOTO ZERO? PRSI /?ELS5 EQUAL? PRSI,CAMERA /?ELS5 CALL1 HAR-HAR RTRUE ?ELS5: CALL2 NOT-HOLDING?,CAMERA ZERO? STACK \TRUE FSET? CAMERA,OPENBIT \?ELS11 CALL TOO-BAD-BUT,CAMERA,STR?12 RTRUE ?ELS11: ZERO? LENS-CRACKED /?ELS13 PRINTR "The lens is cracked." ?ELS13: LOC FILM EQUAL? STACK,CAMERA \?THN19 ZERO? CAMERA-COCKED \FALSE ?THN19: PRINTR "You push the button, but it won't move." .FUNCT TAKE-PICTURE,OBJ EQUAL? OBJ,PLAYER \?CND1 SET 'LENS-CRACKED,TRUE-VALUE SET 'OBJ,GLOBAL-OBJECTS PRINTI "This camera was designed to work on the ocean floor or in outer space, in arctic cold or tropical heat. It has photographed nuclear explosions without the slightest difficulty. Your face, however, has cracked its lens!" CRLF ?CND1: SET 'CAMERA-COCKED,FALSE-VALUE EQUAL? OBJ,MCGUFFIN \?CND6 FSET? MCGUFFIN,LOCKED \?CND6 FSET FILM,LOCKED ?CND6: PUT FILM-TBL,PICTURE-NUMBER,OBJ RTRUE .FUNCT V-PHOTO EQUAL? PRSO,FILM,CAMERA \?ELS5 CALL1 HAR-HAR RSTACK ?ELS5: CALL2 TAKE-PICTURE,PRSO PRINTR """Click!""" .FUNCT V-PLAY SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Speaking of playing, you ought to try Infocom's other products, too!)" .FUNCT PRE-POCKET CALL PERFORM,V?PUT-IN,PRSO,POCKET RTRUE .FUNCT V-POCKET CALL1 V-FOO RSTACK .FUNCT V-POUR CALL1 YOU-CANT RSTACK .FUNCT V-PUSH CALL2 HACK-HACK,STR?231 RSTACK .FUNCT PRE-PUT EQUAL? PRSO,GLOBAL-MONEY \?ELS5 PRINT I-ASSUME PRINTC 32 PRINTC CURRENCY-SYMBOL PRINTI "1.)" CRLF SET 'P-DOLLAR-FLAG,TRUE-VALUE SET 'P-AMOUNT,1 RFALSE ?ELS5: CALL2 HELD?,PRSO ZERO? STACK \FALSE FSET? PRSO,TAKEBIT /?ELS13 CALL2 YOU-CANT,STR?232 RSTACK ?ELS13: IN? PRSO,GLOBAL-OBJECTS \?ELS15 CALL2 NOT-HERE,PRSO RSTACK ?ELS15: EQUAL? PRSI,GLOBAL-HERE,FLOOR /FALSE IN? PRSI,GLOBAL-OBJECTS \FALSE CALL2 NOT-HERE,PRSI RSTACK .FUNCT PRE-SPUT-IN CALL PERFORM,V?PUT-IN,PRSI,PRSO RTRUE .FUNCT V-SPUT-IN CALL1 V-FOO RSTACK .FUNCT PRE-PUT-IN EQUAL? PRSI,WINE-WHITE,WINE-RED \?ELS5 LOC PRSI EQUAL? STACK,CUP-A,CUP-B \?ELS5 CALL1 PRE-PUT RSTACK ?ELS5: EQUAL? PRSI,FOOD \?ELS9 CALL1 PRE-PUT RSTACK ?ELS9: EQUAL? PRSI,CHAIR \?ELS13 CALL1 PRE-PUT RSTACK ?ELS13: FSET? PRSI,CONTBIT /?ELS15 PRINTI "You search for an opening in" CALL2 HIM-HER-IT,PRSI PRINTR " but find none." ?ELS15: FSET? PRSI,OPENBIT /?ELS19 CALL TOO-BAD-BUT,PRSI,STR?13 RSTACK ?ELS19: CALL1 PRE-PUT RSTACK .FUNCT V-PUT-IN CALL1 V-PUT RSTACK .FUNCT V-PUT,?TMP1 EQUAL? PRSI,PLAYER \?ELS3 CALL PERFORM,V?WEAR,PRSO RTRUE ?ELS3: EQUAL? PRSI,WINE-WHITE,WINE-RED,FOOD \?ELS5 JUMP ?CND1 ?ELS5: FSET? PRSI,OPENBIT /?CND1 FSET? PRSI,SURFACEBIT /?CND1 FSET? PRSI,VEHBIT /?CND1 FSET? PRSI,DOORBIT /?THN13 FSET? PRSI,CONTBIT \?ELS12 ?THN13: CALL TOO-BAD-BUT,PRSI,STR?13 RTRUE ?ELS12: FSET? PRSI,SURFACEBIT /?ELS16 PRINTI "There's no good surface on" CALL2 HIM-HER-IT,PRSI PRINTR "." ?ELS16: PRINTI "You can't open" CALL2 HIM-HER-IT,PRSI PRINTR "." ?CND1: ZERO? PRSI \?ELS27 CALL1 YOU-CANT RSTACK ?ELS27: EQUAL? PRSI,PRSO \?ELS29 CALL1 HAR-HAR RSTACK ?ELS29: IN? PRSO,PRSI \?ELS31 CALL2 TOO-BAD-BUT,PRSO CALL HE-SHE-IT,PRSO,-1,STR?1 PRINTI " already " FSET? PRSI,SURFACEBIT \?ELS38 PUSH STR?189 JUMP ?CND34 ?ELS38: PUSH STR?233 ?CND34: PRINT STACK CALL2 HIM-HER-IT,PRSI PRINTR "!" ?ELS31: CALL2 WEIGHT,PRSI >?TMP1 CALL2 WEIGHT,PRSO ADD ?TMP1,STACK >?TMP1 GETP PRSI,P?SIZE SUB ?TMP1,STACK >?TMP1 GETP PRSI,P?CAPACITY GRTR? ?TMP1,STACK \?ELS42 PRINTR "There's not enough room." ?ELS42: CALL2 HELD?,PRSO ZERO? STACK \?ELS46 CALL1 ITAKE ZERO? STACK /TRUE ?ELS46: MOVE PRSO,PRSI FSET PRSO,TOUCHBIT EQUAL? PRSI,WINE-WHITE,WINE-RED,FOOD \?CND51 FSET PRSO,MUNGBIT ?CND51: PRINTR "Okay." .FUNCT V-PUT-UNDER PRINTR "There's not enough room." .FUNCT V-RAISE CALL PERFORM,V?TAKE,PRSO RTRUE .FUNCT PRE-READ,VAL ZERO? LIT \?ELS5 CALL1 TOO-DARK RTRUE ?ELS5: IN? PRSO,GLOBAL-OBJECTS \?ELS7 CALL2 NOT-HERE,PRSO RSTACK ?ELS7: ZERO? PRSI /?ELS9 FSET? PRSI,TRANSBIT /?ELS9 EQUAL? -1,P-NUMBER \?ELS9 PRINTI "You must have a swell method of looking through" CALL2 HIM-HER-IT,PRSI PRINTR "." ?ELS9: EQUAL? P-ADVERB,W?CAREFULLY \FALSE CALL2 INT-WAIT,3 >VAL ZERO? VAL \?ELS20 PRINTI "You never got to finish reading" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS20: EQUAL? VAL,M-FATAL /TRUE RFALSE .FUNCT V-READ FSET? PRSO,READBIT /?ELS5 CALL1 YOU-CANT RSTACK ?ELS5: GETP PRSO,P?TEXT PRINT STACK CRLF RTRUE .FUNCT V-REMOVE FSET? PRSO,WEARBIT \?ELS5 CALL PERFORM,V?TAKE-OFF,PRSO RTRUE ?ELS5: CALL PERFORM,V?TAKE,PRSO RTRUE .FUNCT V-RING PRINTR """DING-DONG!""" .FUNCT V-RIP CALL1 YOU-CANT RSTACK .FUNCT V-RISE CALL2 DO-WALK,P?UP RTRUE .FUNCT V-RUB CALL2 HACK-HACK,STR?234 RSTACK .FUNCT PRE-RUB-OVER CALL PERFORM,V?RUB,PRSI,PRSO RTRUE .FUNCT V-RUB-OVER CALL1 V-FOO RSTACK .FUNCT V-SAY,P CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS5 CALL PERFORM,V?TELL,QCONTEXT RTRUE ?ELS5: SET 'P,CONTACT IN? P,HERE /?THN8 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?ELS7 ?THN8: PRINT I-ASSUME PRINTI " say to" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?TELL,P RTRUE ?ELS7: CALL1 NOT-CLEAR-WHOM RSTACK .FUNCT PRE-SAY-INTO FSET? PRSO,ONBIT /FALSE PRINTI "Sorry, but" CALL HE-SHE-IT,PRSO,0,STR?1 PRINTR "n't on!" .FUNCT V-SAY-INTO CALL2 YOU-CANT,STR?235 RSTACK .FUNCT PRE-SEARCH CALL1 ROOM-CHECK RSTACK .FUNCT V-SEARCH,OBJ GETP PRSO,P?CHARACTER ZERO? STACK /?ELS5 FIRST? PRSO >OBJ \?ELS10 FSET OBJ,TAKEBIT FCLEAR OBJ,NDESCBIT CALL2 THIS-IS-IT,OBJ MOVE OBJ,PLAYER PRINTI "You find " CALL2 PRINTA,OBJ PRINTR " and take it." ?ELS10: GETP PRSO,P?SOUTH >OBJ ZERO? OBJ /?ELS14 CALL2 THIS-IS-IT,GLOBAL-MONEY GETP PLAYER,P?SOUTH ADD STACK,OBJ PUTP PLAYER,P?SOUTH,STACK PRINTI "You find " PRINTC CURRENCY-SYMBOL PRINTN OBJ PRINTR " and take it." ?ELS14: PRINTR "You don't find anything interesting." ?ELS5: FSET? PRSO,CONTBIT \?ELS24 FSET? PRSO,OPENBIT /?ELS29 CALL TOO-BAD-BUT,PRSO,STR?13 RTRUE ?ELS29: CALL PERFORM,V?LOOK-INSIDE,PRSO RTRUE ?ELS24: IN? BLOOD-SPOT,PRSO \?ELS33 FSET? BLOOD-SPOT,NDESCBIT \?ELS33 FCLEAR BLOOD-SPOT,NDESCBIT GETP BLOOD-SPOT,P?FDESC PRINT STACK CRLF RTRUE ?ELS33: PRINTR "You find nothing unusual." .FUNCT PRE-SSEARCH-FOR CALL PERFORM,V?SEARCH-FOR,PRSI,PRSO RTRUE .FUNCT V-SSEARCH-FOR CALL1 V-FOO RSTACK .FUNCT PRE-SEARCH-FOR,OBJ CALL1 ROOM-CHECK ZERO? STACK \TRUE EQUAL? PRSO,GLOBAL-HERE \FALSE SET 'PRSO,HERE RFALSE .FUNCT V-SEARCH-FOR FSET? PRSO,PERSONBIT \?ELS5 IN? PRSI,PRSO \?ELS10 PRINTI "Indeed," CALL HE-SHE-IT,PRSO,0,STR?2 CALL2 HIM-HER-IT,PRSI PRINTR "." ?ELS10: CALL2 START-SENTENCE,PRSO CALL HE-SHE-IT,PRSO,-1,STR?3 PRINTI "n't have" IN? PRSI,GLOBAL-OBJECTS \?ELS21 PRINTI " " CALL2 PRINTA,PRSI PRINTR "." ?ELS21: ZERO? PRSI \?ELS25 PRINTR " that." ?ELS25: CALL2 HIM-HER-IT,PRSI PRINTI " concealed on" CALL HIM-HER-IT,PRSO,FALSE-VALUE,TRUE-VALUE PRINTR " person." ?ELS5: FSET? PRSO,CONTBIT \?ELS33 FSET? PRSO,OPENBIT /?ELS33 PRINTI "You'll have to open" CALL2 HIM-HER-IT,PRSO PRINTR " first." ?ELS33: IN? PRSI,PRSO \?ELS39 PRINTI "How observant you are! There " CALL HE-SHE-IT,PRSI,0,STR?1 PRINTR "!" ?ELS39: ZERO? PRSI \?ELS45 CALL1 YOU-CANT RSTACK ?ELS45: PRINTI "You don't find" CALL2 HIM-HER-IT,PRSI PRINTR " there." .FUNCT V-SEND CALL1 YOU-CANT RSTACK .FUNCT PRE-SSEND CALL PERFORM,V?SEND,PRSI,PRSO RTRUE .FUNCT V-SSEND CALL1 V-FOO RSTACK .FUNCT V-SEND-OUT CALL1 V-SEND RSTACK .FUNCT PRE-SEND-TO EQUAL? PRSI,FALSE-VALUE,PLAYER,GLOBAL-HERE /FALSE FSET? PRSO,PERSONBIT \?ELS7 CALL PERFORM,V?$CALL,PRSO EQUAL? WINNER,PLAYER /TRUE CALL PERFORM,V?WALK-TO,PRSI RTRUE ?ELS7: SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Sorry, but I don't understand.)" .FUNCT V-SEND-TO CALL1 V-SEND RSTACK .FUNCT V-SHAKE,X FSET? PRSO,TAKEBIT /?ELS5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You can't shake it if you can't take it!)" ?ELS5: FSET? PRSO,OPENBIT /?ELS9 FIRST? PRSO \?ELS9 PRINTI "It sounds as if there is something inside" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS9: FSET? PRSO,OPENBIT \?ELS15 FIRST? PRSO >X \?ELS15 PRINTI "Onto the " EQUAL? HERE,ROOF \?ELS22 PRINTI "roof" JUMP ?CND20 ?ELS22: EQUAL? HERE,BESIDE-TRACKS \?ELS26 PRINTI "ground" JUMP ?CND20 ?ELS26: PRINTI "floor" ?CND20: PRINTI " spill" NEXT? X /?PRD38 PUSH 0 JUMP ?PRD39 ?PRD38: PUSH 1 ?PRD39: ZERO? STACK \?CND35 PRINTI "s" ?CND35: CALL ROB,PRSO,HERE,TRUE-VALUE CRLF RTRUE ?ELS15: PRINTI "You hear nothing inside" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT PRE-SHOOT ZERO? PRSI \FALSE IN? CAMERA,WINNER \?ELS6 SET 'PRSI,CAMERA JUMP ?CND4 ?ELS6: IN? GUN,WINNER \?CND4 SET 'PRSI,GUN ?CND4: ZERO? PRSI /FALSE PRINTI "(with" CALL2 PRINTT,PRSI PRINTI ")" CRLF RFALSE .FUNCT V-SHOOT LOC PRSI EQUAL? STACK,WINNER,POCKET /?ELS5 CALL FIND-FLAG,WINNER,WEAPONBIT ZERO? STACK \?ELS5 CALL FIND-FLAG,POCKET,WEAPONBIT ZERO? STACK \?ELS5 PRINTR "You're not holding anything to shoot with." ?ELS5: CALL2 IKILL,STR?236 RSTACK .FUNCT PRE-SSHOOT CALL PERFORM,V?SHOOT,PRSI,PRSO RTRUE .FUNCT V-SSHOOT CALL1 V-FOO RSTACK .FUNCT V-SHOW EQUAL? PRSO,PLAYER \?ELS5 SET 'WINNER,PLAYER CALL2 VISIBLE?,PRSO ZERO? STACK /?ELS8 CALL PERFORM,V?EXAMINE,PRSI RTRUE ?ELS8: CALL PERFORM,V?FIND,PRSI RTRUE ?ELS5: FSET? PRSO,PERSONBIT \?THN13 FSET? PRSO,MUNGBIT \?ELS12 ?THN13: PRINTI "Don't wait for" CALL2 HIM-HER-IT,PRSO PRINTR " to applaud." ?ELS12: CALL1 WHO-CARES RSTACK .FUNCT PRE-SSHOW,P ZERO? PRSI /?ELS5 SET 'P-MERGED,TRUE-VALUE CALL PERFORM,V?SHOW,PRSI,PRSO RTRUE ?ELS5: CALL2 HELD?,PRSO ZERO? STACK \?ELS8 LOC PRSO FSET? STACK,PERSONBIT \?ELS11 CALL PERFORM,V?TAKE,PRSO RTRUE ?ELS11: CALL PERFORM,V?ASK-CONTEXT-FOR,PRSO RTRUE ?ELS8: CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS15 CALL PERFORM,V?SHOW,QCONTEXT,PRSO RTRUE ?ELS15: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?ELS17 PRINT I-ASSUME PRINTI " show" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?SHOW,P,PRSO RTRUE ?ELS17: PRINT I-ASSUME PRINTI " show" CALL2 PRINTT,PLAYER PRINTI ".)" CRLF CALL PERFORM,V?SHOW,PLAYER,PRSO RTRUE .FUNCT V-SSHOW RTRUE .FUNCT V-SIGN PRINTI "You can't sign " CALL2 PRINTA,PRSO PRINTI " with " CALL2 PRINTA,PRSI PRINTR "!" .FUNCT PRE-SIT CALL1 ROOM-CHECK RSTACK .FUNCT V-SIT,LIE?=0 FSET? PRSO,VEHBIT /?THN6 EQUAL? PRSO,FLOOR,HERE,GLOBAL-HERE \?ELS5 ?THN6: SET 'PLAYER-NOT-FACING,FALSE-VALUE PRINTI "You're now " ZERO? LIE? \?ELS14 SET 'PLAYER-SEATED,PRSO PRINTI "sitt" JUMP ?CND12 ?ELS14: SUB 0,PRSO >PLAYER-SEATED PRINTI "ly" ?CND12: PRINTI "ing on" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS5: CALL1 YOU-CANT RSTACK .FUNCT V-SIT-AT CALL1 V-SIT RSTACK .FUNCT V-SLAP EQUAL? PRSI,ROOMS \?CND1 SET 'PRSI,FALSE-VALUE ?CND1: EQUAL? PRSO,PLAYER \?ELS8 PRINTR "That sounds like a sign that you could wear on your back." ?ELS8: FSET? PRSO,PERSONBIT /?ELS12 CALL1 IF-SPY RSTACK ?ELS12: FSET? PRSO,MUNGBIT \?ELS14 PRINTI "If" CALL2 HE-SHE-IT,PRSO PRINTI " could," CALL2 HE-SHE-IT,PRSO PRINTR " would slap you right back." ?ELS14: CALL2 FACE-RED,STR?237 RSTACK .FUNCT IF-SPY ZERO? PRSI \?ELS3 PRINTI "You give" CALL2 HIM-HER-IT,PRSO PRINTI " a swift hand chop" JUMP ?CND1 ?ELS3: PRINTI "You swing" CALL2 HIM-HER-IT,PRSI PRINTI " at" CALL2 HIM-HER-IT,PRSO ?CND1: CALL2 THIS-IS-IT,PRSO PRINTI ", but" CALL2 HE-SHE-IT,PRSO PRINTI " seems indestructible. If only you were a " EQUAL? VARIATION,3,4 \?ELS14 PRINTI "better" JUMP ?CND12 ?ELS14: PRINTI "real" ?CND12: PRINTR " spy!" .FUNCT FACE-RED,STR CALL2 UNSNOOZE,PRSO CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?237 PRINTR " you right back. Wow, is your face red!" .FUNCT V-SLIDE CALL1 YOU-CANT RSTACK .FUNCT V-SMELL CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?238 PRINTI " just like " CALL2 PRINTA,PRSO PRINTR "!" .FUNCT V-SMILE FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 IN? PRSO,GLOBAL-OBJECTS /?ELS5 CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?34 PRINTR " back at you." ?ELS5: CALL1 HAR-HAR RSTACK .FUNCT V-SMOKE CALL1 YOU-CANT RSTACK .FUNCT V-STOP EQUAL? PRSO,FALSE-VALUE,GLOBAL-HERE \?ELS5 PRINTR "Hey, no problem." ?ELS5: FSET? PRSO,PERSONBIT \?ELS9 CALL PERFORM,V?$CALL,PRSO RTRUE ?ELS9: CALL PERFORM,V?LAMP-OFF,PRSO RTRUE .FUNCT V-SWIM PRINTI "You can't swim " ZERO? PRSO /?ELS7 PRINTI "in" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS7: CALL1 GROUND-DESC PRINT STACK PRINTR "." .FUNCT PRE-TAKE,L LOC PRSO >L EQUAL? PRSO,BRIEFCASE-HANDLE,BRIEFCASE-LATCH \?CND1 LOC BRIEFCASE >L ?CND1: ZERO? P-DOLLAR-FLAG /?ELS12 EQUAL? PRSO,INTNUM /?THN9 ?ELS12: EQUAL? PRSO,DOLLARS,GLOBAL-MONEY \?ELS8 ?THN9: EQUAL? PRSI,FALSE-VALUE,POCKET \FALSE GETP PLAYER,P?SOUTH LESS? 0,STACK \FALSE CALL1 TELL-FLASHING-CASH RSTACK ?ELS8: EQUAL? PRSO,FOOD-GLOBAL \?ELS21 EQUAL? HERE,GALLEY,CAFE \?ELS21 CALL1 YOU-CANT RSTACK ?ELS21: EQUAL? PRSO,PICTURE-GLOBAL \?ELS25 CALL1 MORE-SPECIFIC RSTACK ?ELS25: EQUAL? PRSO,TRAIN /FALSE IN? PRSO,GLOBAL-OBJECTS \?ELS29 CALL2 NOT-HERE,PRSO RSTACK ?ELS29: EQUAL? L,WINNER \?ELS31 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You already have it!)" ?ELS31: IN? WINNER,PRSO \?ELS35 PRINTR "You're in it, nitwit!" ?ELS35: ZERO? L /?ELS39 FSET? L,CONTBIT \?ELS39 FSET? L,OPENBIT /?ELS39 CALL TOO-BAD-BUT,L,STR?13 RTRUE ?ELS39: ZERO? PRSI /?ELS43 EQUAL? PRSI,POCKET,L \?ELS49 SET 'PRSI,FALSE-VALUE RFALSE ?ELS49: FSET? PRSI,SURFACEBIT /?ELS51 FSET? PRSI,OPENBIT /?ELS51 GETP PRSI,P?CHARACTER ZERO? STACK \?ELS51 CALL TOO-BAD-BUT,PRSI,STR?13 RTRUE ?ELS51: EQUAL? PRSI,L /FALSE FSET? PRSI,PERSONBIT /?ELS60 CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTR " not in that!" ?ELS60: CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?3 PRINTI "n't have" CALL2 HIM-HER-IT,PRSO PRINTR "!" ?ELS43: CALL1 PRE-TAKE-WITH RSTACK .FUNCT PRE-TAKE-WITH,X EQUAL? PRSO,YOU /FALSE EQUAL? PRSO,PICTURE-GLOBAL \?ELS7 CALL2 NOT-HOLDING?,CAMERA ZERO? STACK \TRUE CALL PERFORM,V?PHOTO,PRSI RTRUE ?ELS7: EQUAL? PRSO,FOOD-GLOBAL \?ELS16 EQUAL? HERE,GALLEY,CAFE \?ELS16 CALL1 YOU-CANT RSTACK ?ELS16: EQUAL? HERE,CAFE \?ELS20 IN? PRSO,ROOMS /?ELS20 FSET? PRSO,PERSONBIT /?ELS20 GETP PRSO,P?NORTH GRTR? STACK,0 \?ELS20 CALL2 START-SENTENCE,WAITRESS PRINTR " makes a gesture, asking for some money." ?ELS20: CALL2 META-LOC,PRSO EQUAL? STACK,GLOBAL-OBJECTS \?ELS26 CALL2 HELD?,PRSO ZERO? STACK \FALSE FSET? PRSO,PERSONBIT /FALSE CALL2 NOT-HERE,PRSO RSTACK ?ELS26: IN? PRSO,WINNER \?ELS35 CALL ALREADY,PLAYER,STR?239 RSTACK ?ELS35: LOC PRSO FSET? STACK,CONTBIT \?ELS37 LOC PRSO FSET? STACK,OPENBIT /?ELS37 CALL2 YOU-CANT,STR?240 RSTACK ?ELS37: LOC WINNER EQUAL? PRSO,STACK \FALSE PRINTR "You're in it, nitwit!" .FUNCT V-TAKE CALL1 ITAKE EQUAL? STACK,TRUE-VALUE \FALSE EQUAL? PRSO,KILLED-PERSON \?ELS10 PRINTI "It's not easy, but you manage to throw" CALL2 HIM-HER-IT,PRSO PRINTR " over your shoulder." ?ELS10: CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " now holding" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-TAKE-OFF FSET? PRSO,WORNBIT \?ELS5 FCLEAR PRSO,WORNBIT PRINTI "Okay," CALL HE-SHE-IT,WINNER,0,STR?1 PRINTI " no longer wearing" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS5: PRINTR "You aren't wearing that!" .FUNCT V-TAKE-TO CALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT V-TAKE-WITH PRINTI "You can't remove" CALL2 HIM-HER-IT,PRSO PRINTI " with" CALL2 HIM-HER-IT,PRSI PRINTR "!" .FUNCT V-DISEMBARK LOC PRSO EQUAL? STACK,WINNER \?ELS5 PRINTI "You don't need to take" CALL2 HIM-HER-IT,PRSO PRINTI " out to use" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS5: LOC PRSO EQUAL? STACK,POCKET \?ELS9 MOVE PRSO,WINNER CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " now holding" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS9: EQUAL? PRSO,GLOBAL-HERE,HERE,ROOMS \?ELS13 CALL2 DO-WALK,P?OUT RTRUE ?ELS13: LOC WINNER EQUAL? STACK,PRSO /?ELS15 PRINTI "You're not in" CALL2 HIM-HER-IT,PRSO PRINTI "!" CRLF RETURN 2 ?ELS15: CALL1 OWN-FEET RSTACK .FUNCT OWN-FEET MOVE WINNER,HERE PRINTR "You're on your own feet again." .FUNCT V-HOLD-UP EQUAL? PRSO,ROOMS \?ELS5 CALL2 PERFORM,V?STAND RTRUE ?ELS5: PRINTR "That doesn't seem to help at all." .FUNCT V-TELL,P EQUAL? PRSO,PLAYER \?ELS5 EQUAL? WINNER,PLAYER /?ELS10 SET 'P,WINNER SET 'WINNER,PLAYER CALL PERFORM,V?ASK,P RTRUE ?ELS10: ZERO? QCONTEXT /?ELS12 SET 'QCONTEXT,FALSE-VALUE ZERO? P-CONT /?ELS18 SET 'WINNER,PLAYER RETURN WINNER ?ELS18: PRINTR "Okay, you're not talking to anyone else." ?ELS12: CALL2 WONT-HELP-TO-TALK-TO,PLAYER SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-CONT,FALSE-VALUE RETURN 2 ?ELS5: FSET? PRSO,PERSONBIT \?ELS29 FSET? PRSO,MUNGBIT /?ELS29 CALL2 UNSNOOZE,PRSO SET 'QCONTEXT,PRSO SET 'QCONTEXT-ROOM,HERE ZERO? P-CONT /?ELS36 SET 'CLOCK-WAIT,TRUE-VALUE SET 'WINNER,PRSO RETURN WINNER ?ELS36: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTR " listening." ?ELS29: CALL2 WONT-HELP-TO-TALK-TO,PRSO SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-CONT,FALSE-VALUE RETURN 2 .FUNCT PRE-STELL-ABOUT CALL PERFORM,V?TELL-ABOUT,PRSI,PRSO RTRUE .FUNCT V-STELL-ABOUT CALL1 V-FOO RSTACK .FUNCT PRE-TELL-ABOUT,P CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS5 EQUAL? PRSO,PLAYER \?ELS5 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSI RTRUE ?ELS5: EQUAL? PRSO,PLAYER \?ELS9 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?ELS9 FSET? P,INVISIBLE /?ELS9 PRINT I-ASSUME PRINTI " ask" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?ASK-ABOUT,P,PRSI RTRUE ?ELS9: CALL1 PRE-ASK-ABOUT RSTACK .FUNCT V-TELL-ABOUT,P GETP PRSI,P?TEXT ZERO? STACK /?ELS5 GETP PRSI,P?TEXT PRINT STACK CRLF RTRUE ?ELS5: EQUAL? PRSO,PLAYER \?ELS9 CALL1 ARENT-TALKING RSTACK ?ELS9: CALL PERFORM,V?ASK-ABOUT,PRSO,PRSI RTRUE .FUNCT PRE-TALK-ABOUT,P EQUAL? WINNER,PLAYER /?ELS5 CALL PERFORM,V?TELL-ABOUT,PLAYER,PRSO RTRUE ?ELS5: CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS7 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO RTRUE ?ELS7: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE PRINT I-ASSUME PRINTI " to" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE .FUNCT V-TALK-ABOUT CALL1 ARENT-TALKING RSTACK .FUNCT V-THANKS,P ZERO? PRSO /?ELS5 FSET? PRSO,PERSONBIT \?ELS5 FSET? PRSO,MUNGBIT /?ELS5 CALL2 THANKS-ACT,PRSO RSTACK ?ELS5: CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS9 CALL2 THANKS-ACT,QCONTEXT RSTACK ?ELS9: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?ELS11 CALL2 THANKS-ACT,P RSTACK ?ELS11: PRINTR "You're more than welcome." .FUNCT THANKS-ACT,P CALL HE-SHE-IT,P,TRUE-VALUE,STR?241 PRINTR " your thanks." .FUNCT V-THROW CALL1 IDROP ZERO? STACK /FALSE PRINTR "Thrown." .FUNCT V-THROW-AT CALL1 IDROP ZERO? STACK /TRUE FSET? PRSI,PERSONBIT \?ELS6 FSET? PRSO,MUNGBIT /?ELS6 CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?242 JUMP ?CND4 ?ELS6: CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?3 PRINTI "n't duck" ?CND4: PRINTI " as" CALL2 HE-SHE-IT,PRSO PRINTR " flies by." .FUNCT V-THROW-OFF,X EQUAL? PRSI,ROOF,TRAIN \FALSE ZERO? ON-TRAIN \?ELS10 CALL1 HAR-HAR RSTACK ?ELS10: CALL2 WINDOW-IN?,HERE >X ZERO? X /?ELS12 CALL PERFORM,V?THROW-THROUGH,PRSO,X RTRUE ?ELS12: EQUAL? HERE,ROOF /?ELS14 PRINTR "You look for a window but find none." ?ELS14: ZERO? TRAIN-MOVING \?ELS18 GET STATION-ROOMS,HERE MOVE PRSO,STACK CALL2 START-SENTENCE,PRSO PRINTR " drops out of sight." ?ELS18: MOVE PRSO,LIMBO-FWD CALL2 START-SENTENCE,PRSO PRINTR " is gone with the wind." .FUNCT V-THROW-THROUGH FSET? PRSO,PERSONBIT /?ELS5 PRINTR "Let's not resort to vandalism, please." ?ELS5: CALL1 V-THROW RSTACK .FUNCT PRE-TIE-TO FSET? PRSO,PERSONBIT /FALSE PRINTR "That won't do any good." .FUNCT V-TIE-TO PRINTI "You can't tie" CALL2 HIM-HER-IT,PRSO PRINTR " to that." .FUNCT PRE-TIE-WITH FSET? PRSO,PERSONBIT \?THN6 FSET? PRSI,TOOLBIT /FALSE ?THN6: PRINTR "That won't do any good." .FUNCT V-TIE-WITH CALL1 PRODUCE-GIBBERISH RSTACK .FUNCT V-TIME CALL1 STATUS-LINE PRINTI "The time is now " CALL2 TIME-PRINT,PRESENT-TIME PRINTR "." .FUNCT TIME-PRINT,NUM,HR DIV NUM,60 MOD STACK,24 >HR LESS? HR,10 \?CND1 PRINTI "0" ?CND1: PRINTN HR PRINTI "." MOD NUM,60 >HR LESS? HR,10 \?CND8 PRINTI "0" ?CND8: PRINTN HR RTRUE .FUNCT V-TURN FSET? PRSO,DOORBIT \?ELS5 FSET? PRSO,OPENBIT \?ELS5 CALL PERFORM,V?CLOSE,PRSO RTRUE ?ELS5: PRINTR "What do you want that to do?" .FUNCT V-TURN-AROUND ZERO? PLAYER-NOT-FACING \?ELS5 PRINTR "It's not clear which way you're facing." ?ELS5: SET 'P-WALK-DIR,PLAYER-NOT-FACING CALL PERFORM,V?FACE,PLAYER-NOT-FACING RTRUE .FUNCT V-LAMP-OFF FSET? PRSO,PERSONBIT \?ELS5 PRINTR "Your vulgar ways would turn anyone off." ?ELS5: CALL2 YOU-CANT,STR?183 RSTACK .FUNCT V-LAMP-ON FSET? PRSO,ONBIT \?ELS5 CALL ALREADY,PRSO,STR?189 RSTACK ?ELS5: FSET? PRSO,PERSONBIT \?ELS7 CALL1 HAR-HAR RSTACK ?ELS7: CALL2 YOU-CANT,STR?184 RSTACK .FUNCT V-UNLOCK FSET? PRSO,DOORBIT \?ELS5 CALL ZMEMQ,HERE,CAR-ROOMS-COMPS ZERO? STACK \?ELS12 CALL ZMEMQ,HERE,CAR-ROOMS-REST ZERO? STACK \?ELS12 PRINTI "You can't unlock" CALL2 HIM-HER-IT,PRSO PRINTR " from here." ?ELS12: FSET? PRSO,LOCKED /?ELS18 CALL ALREADY,PRSO,STR?192 RSTACK ?ELS18: FSET? PRSO,OPENBIT \?CND21 FCLEAR PRSO,OPENBIT PRINTI "(You close" CALL2 HIM-HER-IT,PRSO PRINTI " first.)" CRLF ?CND21: FCLEAR PRSO,LOCKED CALL OKAY,PRSO,STR?192 RSTACK ?ELS5: SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(" CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTR "n't locked!)" .FUNCT V-UNTIE PRINTI "You can't tie" CALL2 HIM-HER-IT,PRSO PRINTI ", so you can't untie" CALL2 HIM-HER-IT,PRSO PRINTR "!" .FUNCT MORE-SPECIFIC SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Please be more specific.)" .FUNCT V-USE CALL1 MORE-SPECIFIC RSTACK .FUNCT V-USE-AGAINST CALL1 MORE-SPECIFIC RSTACK .FUNCT HAS-ARRIVED,OBJ CALL2 NOT-IT,OBJ CALL2 START-SENTENCE,OBJ PRINTI ", for wh" FSET? OBJ,PERSONBIT \?ELS7 PUSH STR?243 JUMP ?CND3 ?ELS7: PUSH STR?244 ?CND3: PRINT STACK PRINTI " you're waiting," CALL HE-SHE-IT,OBJ,-1,STR?2 PRINTR " arrived." .FUNCT V-WAIT,NUM=-1,WHO=0,INT=0,VAL,HR,RESULT=1 EQUAL? -1,NUM \?CND1 SET 'NUM,10 PRINT I-ASSUME PRINTI " wait 10 minutes.)" CRLF ?CND1: SET 'HR,HERE SET 'WHO-WAIT,0 ZERO? INT \?CND6 PRINTI "Time passes..." CRLF ?CND6: ?PRG11: DLESS? 'NUM,0 \?ELS15 JUMP ?REP12 ?ELS15: CALL1 CLOCKER >VAL ZERO? VAL /?ELS17 EQUAL? VAL,M-FATAL /?THN21 EQUAL? HR,HERE /?ELS20 ?THN21: SET 'RESULT,M-FATAL JUMP ?REP12 ?ELS20: ZERO? WHO /?ELS24 CALL2 META-LOC,WHO EQUAL? HERE,STACK /?THN27 EQUAL? SCENERY-OBJ,WHO /?THN27 EQUAL? WHO,TRAIN \?ELS24 ZERO? IN-STATION /?ELS24 ?THN27: CALL2 HAS-ARRIVED,WHO JUMP ?REP12 ?ELS24: INC 'WHO-WAIT IN? PLAYER,UNCONSCIOUS \?CND33 JUMP ?REP12 ?CND33: PRINTI "Do you want to " ZERO? INT /?ELS40 PRINTI "continue what you were doing?" JUMP ?CND38 ?ELS40: PRINTI "keep waiting?" ?CND38: CALL1 YES? ZERO? STACK \?ELS50 JUMP ?REP12 ?ELS50: CALL1 STATUS-LINE JUMP ?PRG11 ?ELS17: ZERO? WHO /?ELS54 IN? WHO,HERE \?ELS54 CALL2 HAS-ARRIVED,WHO JUMP ?REP12 ?ELS54: ZERO? WHO /?ELS58 IGRTR? 'WHO-WAIT,30 \?ELS58 CALL2 START-SENTENCE,WHO PRINTI " still" CALL HE-SHE-IT,WHO,-1,STR?2 PRINTI "n't arrived. Do you want to keep waiting?" CALL1 YES? ZERO? STACK \?CND63 JUMP ?REP12 ?CND63: SET 'WHO-WAIT,0 CALL1 STATUS-LINE JUMP ?PRG11 ?ELS58: CALL1 STATUS-LINE JUMP ?PRG11 ?REP12: SET 'CLOCK-WAIT,TRUE-VALUE ZERO? INT \?CND68 CALL1 V-TIME RETURN RESULT ?CND68: RETURN RESULT .FUNCT INT-WAIT,N,TIM,REQ,VAL SET 'TIM,PRESENT-TIME MUL N,2 RANDOM STACK >REQ CALL V-WAIT,REQ,FALSE-VALUE,TRUE-VALUE EQUAL? M-FATAL,STACK \?ELS5 RETURN 2 ?ELS5: SUB PRESENT-TIME,TIM LESS? STACK,REQ /FALSE RTRUE .FUNCT V-WAIT-FOR,WHO EQUAL? -1,P-NUMBER /?ELS5 EQUAL? PRSO,INTNUM,TURN,ROOMS \?ELS5 CALL2 V-WAIT,P-NUMBER RSTACK ?ELS5: EQUAL? PRSO,GLOBAL-HERE,TURN,ROOMS \?ELS14 CALL1 V-WAIT RTRUE ?ELS14: EQUAL? PRSO,PLAYER \?ELS16 CALL ALREADY,PLAYER,STR?222 RSTACK ?ELS16: GETP PRSO,P?CHARACTER >WHO ZERO? WHO /?ELS18 GET CHARACTER-TABLE,WHO >WHO CALL2 META-LOC,WHO EQUAL? STACK,HERE \?ELS23 CALL ALREADY,WHO,STR?222 RSTACK ?ELS23: CALL V-WAIT,10000,WHO RSTACK ?ELS18: CALL ZMEMZ,PRSO,TRAIN-TABLE ZERO? STACK /?ELS27 ZERO? ON-TRAIN /?ELS27 EQUAL? PRSO,SCENERY-OBJ \?ELS34 CALL ALREADY,PRSO,STR?222 RSTACK ?ELS34: CALL V-WAIT,10000,PRSO RSTACK ?ELS27: EQUAL? PRSO,TRAIN \?ELS38 ZERO? ON-TRAIN /?ELS43 CALL1 HAR-HAR RSTACK ?ELS43: ZERO? IN-STATION /?ELS46 CALL ALREADY,PRSO,STR?222 RSTACK ?ELS46: CALL V-WAIT,10000,PRSO RSTACK ?ELS38: PRINTR "Not a good idea. You might wait forever." .FUNCT V-WAIT-UNTIL,?TMP1 EQUAL? -1,P-NUMBER /?ELS5 EQUAL? PRSO,TURN,INTNUM \?ELS5 ZERO? P-CENT-FLAG \?CND8 LESS? P-NUMBER,24 \?ELS13 MUL P-NUMBER,60 >P-NUMBER JUMP ?CND11 ?ELS13: GRTR? P-NUMBER,99 \?CND11 MOD P-NUMBER,100 >?TMP1 DIV P-NUMBER,100 MUL STACK,60 ADD ?TMP1,STACK >P-NUMBER ?CND11: PRINT I-ASSUME PRINTI " " CALL2 TIME-PRINT,P-NUMBER PRINTI ".)" CRLF ?CND8: GRTR? P-NUMBER,PRESENT-TIME \?ELS24 SUB P-NUMBER,PRESENT-TIME CALL2 V-WAIT,STACK RSTACK ?ELS24: SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(It's already past that time!)" ?ELS5: CALL2 YOU-CANT,STR?245 RSTACK .FUNCT V-ALARM EQUAL? PRSO,ROOMS \?CND1 SET 'PRSO,WINNER ?CND1: FSET? PRSO,PERSONBIT \?ELS8 FSET? PRSO,MUNGBIT /?ELS8 CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTR " wide awake, or haven't you noticed?" ?ELS8: CALL TOO-BAD-BUT,PRSO,STR?246 RSTACK .FUNCT DO-WALK,DIR,P CALL COMPASS-EQV,HERE,DIR >P ZERO? P /?CND1 CALL2 OPP-DIR,P >PLAYER-NOT-FACING ?CND1: SET 'P-WALK-DIR,DIR CALL PERFORM,V?WALK,DIR RSTACK .FUNCT V-WALK,PT,PTS,STR,RM ZERO? P-WALK-DIR \?CND1 CALL1 V-WALK-AROUND RETURN 2 ?CND1: LOC WINNER GETPT STACK,PRSO >PT ZERO? PT /?ELS10 PTSIZE PT >PTS EQUAL? PTS,UEXIT \?ELS15 GET PT,REXIT >RM CALL2 GOTO,RM ZERO? STACK /TRUE CALL1 OKAY RTRUE ?ELS15: EQUAL? PTS,NEXIT \?ELS20 GET PT,NEXITSTR PRINT STACK CRLF RETURN 2 ?ELS20: EQUAL? PTS,FEXIT \?ELS26 GET PT,FEXITFCN CALL STACK >RM ZERO? RM /?ELS31 CALL2 GOTO,RM ZERO? STACK /TRUE CALL1 OKAY RTRUE ?ELS31: RETURN 2 ?ELS26: EQUAL? PTS,CEXIT \?ELS40 GETB PT,CEXITFLAG VALUE STACK ZERO? STACK /?ELS45 GET PT,REXIT CALL2 GOTO,STACK ZERO? STACK /TRUE CALL1 OKAY RTRUE ?ELS45: GET PT,CEXITSTR >STR ZERO? STR /?ELS50 PRINT STR CRLF RETURN 2 ?ELS50: CALL2 YOU-CANT,STR?182 RETURN 2 ?ELS40: EQUAL? PTS,DEXIT \FALSE CALL2 WALK-THRU-DOOR?,PT ZERO? STACK /?ELS65 GET PT,REXIT CALL2 GOTO,STACK ZERO? STACK /TRUE CALL1 OKAY RTRUE ?ELS65: RETURN 2 ?ELS10: EQUAL? PRSO,P?IN,P?OUT \?ELS74 CALL1 V-WALK-AROUND RSTACK ?ELS74: CALL2 YOU-CANT,STR?182 RETURN 2 .FUNCT WALK-THRU-DOOR?,PT,OBJ,RM GET PT,DEXITOBJ >OBJ GET PT,REXIT >RM ZERO? CUSTOMS-SWEEP /?ELS3 FSET? PASSPORT,LOCKED \?ELS3 ZERO? ON-TRAIN /?ELS3 CALL ZMEMQ,RM,CAR-ROOMS-VESTIB ZERO? STACK \?ELS3 CALL ZMEMQ,RM,CAR-ROOMS-CORRID ZERO? STACK \?ELS3 CALL VISIBLE?,CONDUCTOR,TRUE-VALUE ZERO? STACK /?ELS8 CALL HE-SHE-IT,CONDUCTOR,TRUE-VALUE PRINTI " gestures for you to leave the train." JUMP ?CND6 ?ELS8: PRINTI "You should leave the train now to pass customs." ?CND6: CRLF RFALSE ?ELS3: FSET? OBJ,OPENBIT /TRUE ?CND1: EQUAL? RM,GAS-CAR-RM \?ELS19 EQUAL? CAR-HERE,GAS-CAR \?ELS22 FSET OBJ,LOCKED JUMP ?CND17 ?ELS22: FCLEAR OBJ,LOCKED JUMP ?CND17 ?ELS19: CALL ZMEMQ,RM,CAR-ROOMS-REST ZERO? STACK /?CND17 CALL OCCUPIED?,RM,CAR-HERE ZERO? STACK /?ELS29 FSET OBJ,LOCKED JUMP ?CND17 ?ELS29: FCLEAR OBJ,LOCKED ?CND17: FSET? OBJ,LOCKED /?ELS36 EQUAL? PRSA,V?WALK-TO /TRUE PRINTI "(You open" CALL2 HIM-HER-IT,OBJ PRINTR " and close it again.)" ?ELS36: LOC WINNER CALL ZMEMQ,STACK,CAR-ROOMS-REST ZERO? STACK \?THN44 LOC WINNER CALL ZMEMQ,STACK,CAR-ROOMS-COMPS ZERO? STACK /?ELS43 ?THN44: FCLEAR OBJ,LOCKED EQUAL? PRSA,V?WALK-TO /TRUE PRINTI "(You unlock and open" CALL2 HIM-HER-IT,OBJ PRINTR " and close it again.)" ?ELS43: GET PT,DEXITSTR >RM ZERO? RM /?ELS52 PRINT RM CRLF RFALSE ?ELS52: CALL TOO-BAD-BUT,OBJ,STR?191 RFALSE .FUNCT V-WALK-AROUND SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(What " PRINTD INTDIR PRINTI " do you want to go in?)" CRLF RETURN 2 .FUNCT WHO-KNOWS?,OBJ SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(Who knows where" CALL HE-SHE-IT,OBJ,0,STR?1 PRINTR " now?)" .FUNCT V-WALK-TO,O,L SET 'O,PRSO GETP O,P?CHARACTER >L ZERO? L /?CND1 FSET? O,SEENBIT \?CND1 IN? O,GLOBAL-OBJECTS \?CND1 GET CHARACTER-TABLE,L >O ?CND1: CALL2 META-LOC,O >L LOC WINNER EQUAL? HERE,STACK \?ELS10 EQUAL? L,HERE /?THN13 EQUAL? L,LOCAL-GLOBALS \?ELS10 CALL GLOBAL-IN?,O,HERE ZERO? STACK /?ELS10 ?THN13: SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(" CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?3 PRINTR "n't need to walk around within a place.)" ?ELS10: EQUAL? L,LOCAL-GLOBALS \?ELS22 EQUAL? PRSO,SCENERY-OBJ \?ELS27 CALL TOO-BAD-BUT,PRSO,STR?221 RSTACK ?ELS27: CALL1 MORE-SPECIFIC RSTACK ?ELS22: EQUAL? PRSO,INTDIR \?ELS31 CALL1 V-WALK-AROUND RSTACK ?ELS31: CALL ZMEMQ,O,STATIONS ZERO? STACK /?ELS33 EQUAL? O,SCENERY-OBJ \?ELS38 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(You're already in " PRINTD O PRINTR "!)" ?ELS38: CALL ZMEMQ,O,TRAIN-TABLE ZERO? STACK /?ELS42 PRINTR "The train will take you there if you're patient." ?ELS42: PRINTI "You'll have to take a " ZERO? IN-STATION \?CND49 PRINTI "different " ?CND49: PRINTR "train." ?ELS33: FSET? O,PERSONBIT \?ELS61 FSET? O,NDESCBIT /?THN58 ?ELS61: IN? L,ROOMS /?ELS57 FSET? O,TOUCHBIT /?ELS57 ?THN58: CALL2 WHO-KNOWS?,O RTRUE ?ELS57: EQUAL? L,ROOF \?ELS65 EQUAL? HERE,VESTIBULE-REAR-DINER,VESTIBULE-REAR-FANCY,VESTIBULE-REAR \?ELS65 CALL2 DO-WALK,P?UP RTRUE ?ELS65: CALL2 FAR-AWAY?,L ZERO? STACK /?ELS69 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(" CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't get there from here" EQUAL? L,GLOBAL-OBJECTS /?CND72 PRINTI ", at least not directly" ?CND72: PRINTR ".)" ?ELS69: CALL ESTABLISH-GOAL,PLAYER,L SET 'LAST-PLAYER-LOC,HERE FSET PLAYER,INVISIBLE ?PRG81: CALL2 FOLLOW-GOAL,PLAYER ZERO? STACK /?PRG81 FCLEAR PLAYER,INVISIBLE EQUAL? LAST-PLAYER-LOC,HERE /TRUE SET 'LIT,TRUE-VALUE GETP HERE,P?ACTION CALL STACK,M-ENTER CALL1 V-FIRST-LOOK GETP HERE,P?ACTION CALL STACK,M-FLASH RTRUE .FUNCT V-WALK-UNDER CALL2 YOU-CANT,STR?247 RSTACK .FUNCT V-RUN-OVER PRINTR "That doesn't make much sense." .FUNCT V-WEAR FSET? PRSO,WEARBIT /?ELS5 PRINTI "You can't wear" CALL2 HIM-HER-IT,PRSO PRINTR "." ?ELS5: FSET? PRSO,WORNBIT \?ELS9 CALL ALREADY,PRSO,STR?248 RSTACK ?ELS9: MOVE PRSO,PLAYER FSET PRSO,WORNBIT PRINTI "You are now wearing" CALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-WHAT,P EQUAL? PRSO,PLAYER \?ELS5 PRINTI "You're the " EQUAL? VARIATION,3,4 \?ELS12 PRINTR "good spy!" ?ELS12: PRINTR "innocent traveler!" ?ELS5: CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS24 SET 'P,QCONTEXT FSET? P,PERSONBIT \?ELS24 FSET? P,MUNGBIT \?THN21 ?ELS24: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?ELS20 ?THN21: PRINT I-ASSUME PRINTI " ask" CALL2 PRINTT,P PRINTI ".)" CRLF CALL PERFORM,V?ASK-ABOUT,P,PRSO RSTACK ?ELS20: FSET? PRSO,PERSONBIT \?ELS28 GETP PRSO,P?TEXT PRINT STACK CRLF RTRUE ?ELS28: CALL2 WONT-HELP-TO-TALK-TO,PLAYER RSTACK .FUNCT V-WIND CALL1 YOU-CANT RSTACK .FUNCT V-YELL CALL1 V-YES RSTACK .FUNCT V-YELL-FOR CALL1 V-YES RSTACK .FUNCT V-YES,NO?=0 CALL1 QCONTEXT-GOOD? ZERO? STACK /?ELS5 EQUAL? WINNER,PLAYER \?ELS5 SET 'WINNER,QCONTEXT ZERO? NO? /?ELS10 CALL2 PERFORM,V?NO RTRUE ?ELS10: CALL2 PERFORM,V?YES RTRUE ?ELS5: CALL1 ARENT-TALKING RSTACK .FUNCT V-NO CALL2 V-YES,TRUE-VALUE RSTACK .FUNCT FINISH,REPEATING=0,VAL ZERO? DEBUG \TRUE CRLF CRLF PRINTI "Would you like to: RESTORE your place from where you saved it, RESTART the story from the beginning, or QUIT for now? " ?PRG7: PRINTI ">" READ P-INBUF,P-LEXV GET P-LEXV,P-LEXSTART >VAL ZERO? VAL /?CND11 CALL WT?,VAL,PS?VERB,P1?VERB >VAL EQUAL? VAL,ACT?RESTART \?ELS16 RESTART CALL2 FINISH,TRUE-VALUE JUMP ?CND11 ?ELS16: EQUAL? VAL,ACT?RESTORE \?ELS18 CALL1 V-RESTORE ZERO? STACK \TRUE CALL2 FINISH,TRUE-VALUE JUMP ?CND11 ?ELS18: EQUAL? VAL,ACT?QUIT \?CND11 QUIT ?CND11: PRINTI "(Type RESTORE, RESTART, or QUIT.) " JUMP ?PRG7 .FUNCT DIVESTMENT?,OBJ EQUAL? PRSO,OBJ \FALSE EQUAL? PRSA,V?THROW-THROUGH /TRUE EQUAL? PRSA,V?THROW-AT,V?PUT-IN,V?PUT /TRUE EQUAL? PRSA,V?POUR,V?GIVE,V?DROP /TRUE RFALSE .FUNCT EXIT-VERB?,P EQUAL? PRSA,V?WALK \?ELS5 RETURN PRSO ?ELS5: EQUAL? PRSA,V?THROUGH,V?FOLLOW,V?WALK-TO \FALSE CALL2 META-LOC,PRSO >P EQUAL? HERE,P /FALSE EQUAL? PRSA,V?WALK-TO \?ELS14 CALL FOLLOW-GOAL-DIR,HERE,P RSTACK ?ELS14: CALL DIR-FROM,HERE,P RSTACK .FUNCT REMOTE-VERB?,V=0 ZERO? V \?CND1 SET 'V,PRSA ?CND1: EQUAL? V,V?ASK-ABOUT,V?ASK-CONTEXT-ABOUT,V?ASK-CONTEXT-FOR /TRUE EQUAL? V,V?ASK-FOR,V?BUY,V?DISEMBARK /TRUE EQUAL? V,V?FIND,V?LEAVE,V?LOOK-UP /TRUE EQUAL? V,V?MAKE,V?SEARCH,V?SEARCH-FOR /TRUE EQUAL? V,V?TALK-ABOUT,V?TELL-ABOUT,V?WAIT-FOR /TRUE EQUAL? V,V?WAIT-UNTIL /TRUE EQUAL? V,V?WALK-TO,V?WHAT,V?$WHERE /TRUE EQUAL? V,V?$FCLEAR,V?$FSET,V?$QFSET \FALSE RTRUE .ENDI