.FUNCT TRANSCRIPT:ANY:1:1,STR PRINTI "Here " PRINT STR PRINTR "s a transcript of interaction with" .FUNCT V-SCRIPT:ANY:0:0 GET 0,8 BOR STACK,1 PUT 0,8,STACK ICALL2 TRANSCRIPT,STR?68 ICALL1 V-VERSION RTRUE .FUNCT V-UNSCRIPT:ANY:0:0 ICALL2 TRANSCRIPT,STR?69 ICALL1 V-VERSION GET 0,8 BAND STACK,-2 PUT 0,8,STACK RTRUE .FUNCT V-$ID:ANY:0:0 PRINTI "Interpreter " GETB 0,30 PRINTN STACK PRINTI " Version " GETB 0,31 PRINTC STACK CRLF RTRUE .FUNCT V-$VERIFY:ANY:0:0 ZERO? PRSO /?CCL3 EQUAL? PRSO,INTNUM \?CCL6 EQUAL? P-NUMBER,105 \?CCL6 PRINTN SERIAL CRLF RTRUE ?CCL6: CALL1 DONT-UNDERSTAND RSTACK ?CCL3: PRINTI "Verifying disk..." CRLF VERIFY \?CCL11 PRINTR "The disk is correct." ?CCL11: 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-$CHEAT:ANY:0:0,N,CH EQUAL? PRSO,INTNUM \?CCL2 EQUAL? P-NUMBER,1,2,3 /?CND1 ?CCL2: SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "{Try $CHEAT 1, 2 or 3.}" ?CND1: ZERO? MOVES /FALSE PRINTI "Don't you want to restart first?" CALL1 YES? ZERO? STACK /?CCL10 RESTART RTRUE ?CCL10: PRINTR "Okay, but this may not work!" .FUNCT V-$QUEUE:ANY:0:0,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 ICALL STACK,G-DEBUG PRINTC 9 PRINTN TICK CRLF ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT V-$COMMAND:ANY:0:0 DIRIN 1 RTRUE .FUNCT V-$RANDOM:ANY:0:0 EQUAL? PRSO,INTNUM /?CCL3 PRINTR "Illegal." ?CCL3: SUB 0,P-NUMBER RANDOM STACK RTRUE .FUNCT V-$RECORD:ANY:0:0 DIROUT D-RECORD-ON RTRUE .FUNCT V-$UNRECORD:ANY:0:0 DIROUT D-RECORD-OFF RTRUE .FUNCT YOU-WILL-GET:ANY:1:1,STR PRINTI "[Okay, you will get " PRINT STR PRINTR " descriptions.]" .FUNCT V-SUPER-BRIEF:ANY:0:0 SET 'VERBOSITY,0 CALL2 YOU-WILL-GET,STR?70 RSTACK .FUNCT V-BRIEF:ANY:0:0 SET 'VERBOSITY,1 CALL2 YOU-WILL-GET,STR?71 RSTACK .FUNCT V-VERBOSE:ANY:0:0 SET 'VERBOSITY,2 ICALL2 YOU-WILL-GET,STR?72 CRLF CALL1 V-LOOK RSTACK .FUNCT V-INVENTORY:ANY:0:0 ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " holding" CALL2 PRINT-CONTENTS,WINNER ZERO? STACK \?CND1 PRINTI " nothing" ?CND1: PRINTC 46 CRLF RTRUE .FUNCT V-QUIT:ANY:0:1,ASK? ASSIGNED? 'ASK? /?CND1 SET 'ASK?,TRUE-VALUE ?CND1: ICALL1 V-SCORE ZERO? ASK? \?CND3 QUIT ?CND3: PRINTI "[If you want to continue from this point at another time, you must ""SAVE"" first. Do you want to stop the story now?]" CALL1 YES? ZERO? STACK /?CCL7 QUIT RTRUE ?CCL7: PRINTR "Okay." .FUNCT V-RESTART:ANY:0:0 ICALL1 V-SCORE PRINTI "[Do you want to start over from the beginning?]" CALL1 YES? ZERO? STACK /?CCL3 RESTART CALL1 TELL-FAILED RSTACK ?CCL3: PRINTR "Okay." .FUNCT TELL-FAILED:ANY:0:0 PRINTR "[Sorry, but it didn't work. Maybe your instruction manual or Reference Card can tell you why.]" .FUNCT V-SAVE:ANY:0:0,X PUTB G-INBUF,1,0 SET 'CLOCK-WAIT,TRUE-VALUE SAVE >X EQUAL? X,2 /?CCL2 GET 0,8 BTST STACK,4 \?CND1 ?CCL2: ICALL1 V-$REFRESH ?CND1: ZERO? X \?CCL7 ICALL1 TELL-FAILED RETURN 2 ?CCL7: PRINTI "[Okay.]" CRLF EQUAL? X,1 /TRUE ICALL1 V-FIRST-LOOK RTRUE .FUNCT V-RESTORE:ANY:0:0 RESTORE ZERO? STACK \FALSE ICALL1 TELL-FAILED RFALSE .FUNCT V-FIRST-LOOK:ANY:0:0 CALL1 DESCRIBE-ROOM ZERO? STACK /FALSE ZERO? VERBOSITY /FALSE CALL1 DESCRIBE-OBJECTS RSTACK .FUNCT V-VERSION:ANY:0:0,IDX SET 'IDX,18 PRINTI "MILLIWAYS Infocom interactive science fiction Copyright (c) 1988 by Infocom, Inc. All rights reserved. Release number " GET 0,1 BAND STACK,2047 PRINTN STACK PRINTI " / Serial number " ?PRG1: GETB 0,IDX PRINTC STACK IGRTR? 'IDX,23 \?PRG1 CRLF RTRUE .FUNCT V-SCORE:ANY:0:0 PRINTI "Your score is " PRINTN SCORE PRINTI " of a possible " PRINTN SCORE-MAX PRINTI ", in " PRINTN MOVES PRINTI " turn" EQUAL? MOVES,1 \?CCL3 PRINTC 46 JUMP ?CND1 ?CCL3: PRINTI "s." ?CND1: CRLF RETURN SCORE .FUNCT NO-NEED:ANY:0:2,STR,OBJ SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,WINNER,1,STR?65 PRINTI "n't need to " ZERO? STR /?CCL3 PRINT STR JUMP ?CND1 ?CCL3: ICALL1 VERB-PRINT ?CND1: EQUAL? STR,STR?73,STR?74 \?CCL6 PRINTI " in that " PRINTD INTDIR JUMP ?CND4 ?CCL6: ZERO? OBJ /?CCL8 ICALL2 PRINT-THE,OBJ JUMP ?CND4 ?CCL8: ICALL2 PRINT-THE,PRSO ?CND4: PRINTR ".)" .FUNCT YOU-CANT:ANY:0:3,STR,WHILE,STR1 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,WINNER,1 PRINTI " can't " ZERO? STR \?CCL3 ICALL1 VERB-PRINT JUMP ?CND1 ?CCL3: PRINT STR ?CND1: EQUAL? STR,STR?73,STR?74 \?CCL6 PRINTI " in that " PRINTD INTDIR JUMP ?CND4 ?CCL6: EQUAL? PRSO,PSEUDO-OBJECT \?CCL9 PRINTI " it" JUMP ?CND7 ?CCL9: EQUAL? PRSO,FLOOR \?CCL11 CALL2 OUTSIDE?,HERE ZERO? STACK /?CCL11 PRINTI " the ground" JUMP ?CND7 ?CCL11: ICALL2 PRINT-THE,PRSO ?CND7: ZERO? STR1 /?CND4 PRINTI " while" ZERO? WHILE /?CCL18 ICALL HE-SHE-IT,WHILE,0,STR?61 JUMP ?CND16 ?CCL18: ICALL HE-SHE-IT,PRSO,0,STR?61 ?CND16: PRINTC 32 PRINT STR1 ?CND4: PRINTR ".)" .FUNCT TELL-BEING-WORN:ANY:1:1,OBJ FSET? OBJ,WORNBIT \FALSE PRINTI " (actually, wearing it)" RTRUE .FUNCT PRINT-CONTENTS:ANY:1:1,CONT,OBJ,NXT,1ST?,VAL SET '1ST?,TRUE-VALUE FIRST? CONT >OBJ /?PRG2 ?PRG2: ZERO? OBJ /?REP3 NEXT? OBJ >NXT /?BOGUS7 ?BOGUS7: FSET? OBJ,INVISIBLE /?CCL9 FSET? OBJ,NDESCBIT /?CCL9 EQUAL? OBJ,WINNER \?CND8 ?CCL9: MOVE OBJ,INTDIR ?CND8: SET 'OBJ,NXT JUMP ?PRG2 ?REP3: FIRST? CONT >OBJ /?BOGUS13 ?BOGUS13: ZERO? OBJ \?PRG19 EQUAL? CONT,PLAYER /?CND14 PRINTI " nothing " CALL2 PICK-ONE-NEW,YAWNS PRINT STACK ?CND14: ICALL ROB,INTDIR,CONT RETURN VAL ?PRG19: ZERO? OBJ /?CND14 NEXT? OBJ >NXT /?BOGUS24 ?BOGUS24: ZERO? 1ST? /?CCL27 SET 'VAL,TRUE-VALUE SET '1ST?,FALSE-VALUE JUMP ?CND25 ?CCL27: ZERO? NXT /?CCL30 PRINTC 44 JUMP ?CND25 ?CCL30: PRINTI " and" ?CND25: ICALL2 PRINT-THE,OBJ ICALL2 TELL-BEING-WORN,OBJ ICALL2 THIS-IS-IT,OBJ FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT SET 'OBJ,NXT JUMP ?PRG19 .FUNCT DESCRIBE-OBJECTS:ANY:0:1,CONT,OBJ,NXT,STR,VAL,HE,SHE,FIRST,TWO?,IT?,ANY? SET 'FIRST,TRUE-VALUE ZERO? CONT \?CND1 SET 'CONT,HERE ?CND1: ZERO? LIT \?CND3 ICALL1 TOO-DARK RTRUE ?CND3: FIRST? CONT >OBJ /?BOGUS5 ?BOGUS5: ZERO? OBJ /FALSE ?PRG8: ZERO? OBJ /?REP9 NEXT? OBJ >NXT /?BOGUS13 ?BOGUS13: FSET? OBJ,INVISIBLE /?CCL15 FSET? OBJ,NDESCBIT /?CCL15 EQUAL? OBJ,WINNER /?CCL15 FSET? OBJ,PERSONBIT \?PRD20 FSET? OBJ,RMUNGBIT /?CCL15 ?PRD20: LOC PLAYER EQUAL? OBJ,STACK \?CND14 ?CCL15: FCLEAR OBJ,RMUNGBIT MOVE OBJ,PSEUDO-OBJECT ?CND14: SET 'OBJ,NXT JUMP ?PRG8 ?REP9: EQUAL? CONT,HERE \?CND24 SET 'NXT,CHARACTER-MAX ?PRG26: PUT TOUCHED-LDESCS,NXT,0 DLESS? 'NXT,1 \?PRG26 SET 'NXT,0 ?PRG30: IGRTR? 'NXT,CHARACTER-MAX /?REP31 GET CHARACTER-TABLE,NXT >OBJ IN? OBJ,HERE \?PRG30 PUT FOLLOW-LOC,NXT,HERE GETP OBJ,P?DESCFCN CALL STACK,M-OBJDESC >VAL FSET OBJ,SEENBIT EQUAL? VAL,M-FATAL /?CCL37 ZERO? ANY? \?CND36 ?CCL37: SET 'ANY?,VAL ?CND36: FSET? OBJ,FEMALEBIT \?CCL42 ZERO? SHE \?CCL45 SET 'SHE,OBJ JUMP ?CND40 ?CCL45: SET 'SHE,1 JUMP ?CND40 ?CCL42: ZERO? HE \?CCL48 SET 'HE,OBJ JUMP ?CND40 ?CCL48: SET 'HE,1 ?CND40: MOVE OBJ,PSEUDO-OBJECT JUMP ?PRG30 ?REP31: SET 'NXT,0 ?PRG49: IGRTR? 'NXT,CHARACTER-MAX /?REP50 GET TOUCHED-LDESCS,NXT >OBJ ZERO? OBJ /?PRG49 SET 'FIRST,TRUE-VALUE GET CHARACTER-TABLE,NXT >STR ICALL2 START-SENTENCE,STR SET 'STR,NXT ?PRG55: IGRTR? 'STR,CHARACTER-MAX \?CCL59 ZERO? FIRST /?CCL62 PRINTI " is " JUMP ?CND60 ?CCL62: PRINTI " are " ?CND60: GET LDESC-STRINGS,OBJ PRINT STACK PRINTC 46 CRLF JUMP ?PRG49 ?CCL59: GET TOUCHED-LDESCS,STR EQUAL? OBJ,STACK \?PRG55 PUT TOUCHED-LDESCS,STR,0 SET 'FIRST,FALSE-VALUE PRINTI " and" GET CHARACTER-TABLE,STR ICALL2 PRINT-THE,STACK JUMP ?PRG55 ?REP50: EQUAL? SHE,0,1 /?CCL66 ICALL2 THIS-IS-IT,SHE JUMP ?CND64 ?CCL66: EQUAL? SHE,1 \?CND64 SET 'P-HER-OBJECT,FALSE-VALUE ?CND64: EQUAL? HE,0,1 /?CCL70 ICALL2 THIS-IS-IT,HE JUMP ?CND68 ?CCL70: EQUAL? HE,1 \?CND68 SET 'P-HIM-OBJECT,FALSE-VALUE ?CND68: SET 'FIRST,TRUE-VALUE FIRST? CONT >OBJ /?PRG73 ?PRG73: ZERO? OBJ /?REP74 NEXT? OBJ >NXT /?BOGUS78 ?BOGUS78: GETP OBJ,P?DESCFCN >STR ZERO? STR /?CND79 CALL STR,M-OBJDESC >VAL EQUAL? VAL,M-FATAL /?CCL82 ZERO? ANY? \?CND81 ?CCL82: SET 'ANY?,VAL ?CND81: ICALL2 THIS-IS-IT,OBJ FSET OBJ,SEENBIT MOVE OBJ,PSEUDO-OBJECT ?CND79: SET 'OBJ,NXT JUMP ?PRG73 ?REP74: FIRST? CONT >OBJ /?PRG86 ?PRG86: ZERO? OBJ /?REP87 FSET? OBJ,TOUCHBIT /?REP87 NEXT? OBJ >NXT /?BOGUS93 ?BOGUS93: GETP OBJ,P?FDESC >STR ZERO? STR /?CND94 ZERO? ANY? \?CND96 SET 'ANY?,TRUE-VALUE ?CND96: PRINT STR CRLF FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT ICALL2 THIS-IS-IT,OBJ MOVE OBJ,PSEUDO-OBJECT ?CND94: SET 'OBJ,NXT JUMP ?PRG86 ?REP87: FIRST? CONT >OBJ /?PRG99 ?PRG99: ZERO? OBJ /?CND24 NEXT? OBJ >NXT /?BOGUS104 ?BOGUS104: GETP OBJ,P?LDESC >STR ZERO? STR /?CND105 ZERO? ANY? \?CND107 SET 'ANY?,TRUE-VALUE ?CND107: PRINT STR CRLF FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT ICALL2 THIS-IS-IT,OBJ MOVE OBJ,PSEUDO-OBJECT ?CND105: SET 'OBJ,NXT JUMP ?PRG99 ?CND24: FIRST? HERE >OBJ /?BOGUS109 ?BOGUS109: SET 'VAL,FALSE-VALUE ZERO? OBJ /?CND110 ?PRG112: ZERO? OBJ /?CCL116 NEXT? OBJ >NXT /?BOGUS117 ?BOGUS117: SET 'VAL,TRUE-VALUE ZERO? FIRST /?CCL120 SET 'FIRST,FALSE-VALUE EQUAL? CONT,HERE \?CND118 CRLF FSET? HERE,ONBIT \?CCL125 PRINTI "You see" JUMP ?CND118 ?CCL125: PRINTI "The light reveals" JUMP ?CND118 ?CCL120: ZERO? NXT /?CCL128 PRINTC 44 JUMP ?CND118 ?CCL128: PRINTI " and" ?CND118: ICALL2 PRINT-THE,OBJ FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT ICALL2 THIS-IS-IT,OBJ ICALL2 TELL-BEING-WORN,OBJ CALL2 SEE-INSIDE?,OBJ ZERO? STACK /?CND129 CALL2 SEE-ANYTHING-IN?,OBJ ZERO? STACK /?CND129 MOVE OBJ,INTNUM ?CND129: ZERO? IT? \?CCL135 ZERO? TWO? \?CCL135 SET 'IT?,OBJ JUMP ?CND133 ?CCL135: SET 'TWO?,TRUE-VALUE SET 'IT?,FALSE-VALUE ?CND133: SET 'OBJ,NXT JUMP ?PRG112 ?CCL116: ZERO? IT? /?CND138 ZERO? TWO? \?CND138 SET 'P-IT-OBJECT,IT? ?CND138: EQUAL? CONT,HERE \?CND142 PRINTI " here" ?CND142: PRINTC 46 ZERO? ANY? \?CND110 SET 'ANY?,TRUE-VALUE ?CND110: FIRST? INTNUM >OBJ /?PRG147 ?PRG147: ZERO? OBJ /?REP148 FSET? OBJ,SURFACEBIT \?CCL153 CRLF PRINTI "On" JUMP ?CND151 ?CCL153: CRLF PRINTI "Inside" ?CND151: SET 'VAL,TRUE-VALUE ICALL2 PRINT-THE,OBJ PRINTI " you see" ICALL2 PRINT-CONTENTS,OBJ PRINTC 46 NEXT? OBJ >OBJ /?PRG147 JUMP ?PRG147 ?REP148: ZERO? VAL /?CND155 CRLF ?CND155: ICALL ROB,INTNUM,CONT ICALL ROB,PSEUDO-OBJECT,CONT RETURN ANY? .FUNCT SEE-ANYTHING-IN?:ANY:1:1,CONT,OBJ,NXT,ANY? FIRST? CONT >OBJ /?PRG2 ?PRG2: ZERO? OBJ /?REP3 FSET? OBJ,INVISIBLE /?CND7 FSET? OBJ,NDESCBIT /?CND7 EQUAL? OBJ,WINNER /?CND7 SET 'ANY?,TRUE-VALUE RETURN ANY? ?CND7: NEXT? OBJ >OBJ /?PRG2 JUMP ?PRG2 ?REP3: RETURN ANY? .FUNCT DESCRIBE-ROOM:ANY:0:1,LOOK?,V?,STR,L ZERO? LOOK? /?CCL3 SET 'V?,TRUE-VALUE JUMP ?CND1 ?CCL3: EQUAL? 2,VERBOSITY \?CCL5 SET 'V?,TRUE-VALUE JUMP ?CND1 ?CCL5: ZERO? VERBOSITY \?CCL7 SET 'V?,FALSE-VALUE JUMP ?CND1 ?CCL7: FSET? HERE,TOUCHBIT /?CND1 SET 'V?,TRUE-VALUE ?CND1: PRINTC 40 ZERO? VERBOSITY \?CCL12 PRINTD HERE JUMP ?CND10 ?CCL12: PRINTI "You are" FSET? HERE,TOUCHBIT /?CND13 PRINTI " now" ?CND13: FSET? HERE,SURFACEBIT \?CCL17 PRINTI " on" JUMP ?CND15 ?CCL17: PRINTI " in" ?CND15: ICALL2 PRINT-THE,HERE PRINTC 46 ?CND10: PRINTI ") " ZERO? LIT \?CCL20 ICALL1 TOO-DARK RFALSE ?CCL20: EQUAL? LIT,HERE /?CND18 PRINTI "Light comes from" ICALL2 PRINT-THE,LIT PRINTC 46 CRLF ?CND18: ZERO? V? /?CND22 LOC WINNER >L FSET? L,VEHBIT \?CND24 PRINTI "(You're " PRINTI "sitt" PRINTI "ing on" ICALL2 THIS-IS-IT,L ICALL2 PRINT-THE,L PRINTI ".)" CRLF ?CND24: ZERO? V? /?CCL29 GETP HERE,P?ACTION CALL STACK,M-LOOK ZERO? STACK \?CND22 ?CCL29: ZERO? V? /?CCL33 GETP HERE,P?FDESC >STR ZERO? STR /?CCL33 PRINT STR CRLF JUMP ?CND22 ?CCL33: ZERO? V? /?CCL37 GETP HERE,P?LDESC >STR ZERO? STR /?CCL37 PRINT STR CRLF JUMP ?CND22 ?CCL37: GETP HERE,P?ACTION ICALL STACK,M-FLASH ?CND22: FSET HERE,SEENBIT FSET HERE,TOUCHBIT RTRUE .FUNCT HAR-HAR:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE CALL2 PICK-ONE-NEW,YUKS PRINT STACK CRLF RTRUE .FUNCT IMPOSSIBLE:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE CALL2 PICK-ONE-NEW,IMPOSSIBLES PRINT STACK CRLF RTRUE .FUNCT WONT-HELP:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE CALL2 PICK-ONE-NEW,WASTES PRINT STACK CRLF RTRUE .FUNCT PICK-ONE-NEW:ANY:1:1,FROB,L,CNT,RND,MSG,RFROB GET FROB,0 SUB STACK,1 >L GET FROB,1 >CNT ADD FROB,2 >FROB MUL CNT,2 ADD FROB,STACK >RFROB SUB L,CNT >RND RANDOM RND >RND GRTR? RND,0 /?CND1 PRINTI "{PICK-ONE-NEW: L=" PRINTN L PRINTI " CNT=" PRINTN CNT PRINTI " RND=" PRINTN RND PRINTI " FROB=" PRINTN FROB PRINTC 125 CRLF ?CND1: GET RFROB,RND >MSG GET RFROB,1 PUT RFROB,RND,STACK PUT RFROB,1,MSG INC 'CNT EQUAL? CNT,L \?CND3 SET 'CNT,0 ?CND3: PUT FROB,0,CNT RETURN MSG .FUNCT PICK-ONE:ANY:1:1,FROB GET FROB,0 RANDOM STACK GET FROB,STACK RSTACK .FUNCT NOT-HOLDING?:ANY:1:1,OBJ IN? OBJ,WINNER /FALSE LOC OBJ IN? STACK,WINNER /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " not holding" ICALL2 HIM-HER-IT,OBJ PRINTR ".)" .FUNCT GOTO:ANY:1:3,RM,TEST,FOLLOW?,X ASSIGNED? 'TEST /?CND1 SET 'TEST,TRUE-VALUE ?CND1: ASSIGNED? 'FOLLOW? /?CND3 SET 'FOLLOW?,TRUE-VALUE ?CND3: IN? WINNER,RM \?CND5 ICALL1 WALK-WITHIN-ROOM RFALSE ?CND5: GETP HERE,P?ACTION CALL STACK,M-LEAVE ZERO? STACK \FALSE EQUAL? WINNER,PLAYER \?CND7 ZERO? FOLLOW? /?CND7 ZERO? FOLLOWER /?CND7 ICALL2 FRIEND-FOLLOWS-YOU,RM ?CND7: ZERO? TEST /?CND15 EQUAL? WINNER,PLAYER \?CND15 CALL DIR-FROM,HERE,RM >X ZERO? X /?CND15 GETP HERE,P?ACTION CALL STACK,X EQUAL? M-FATAL,STACK /FALSE ?CND15: GETP WINNER,P?CHARACTER PUT FOLLOW-LOC,STACK,RM MOVE WINNER,RM EQUAL? WINNER,PLAYER \TRUE SET 'OHERE,HERE SET 'HERE,RM ICALL2 MAKE-ALL-PEOPLE,-12 ICALL1 ENTER-ROOM RTRUE .FUNCT MAKE-ALL-PEOPLE:ANY:1:2,NUM,RM,P,NNUM ZERO? RM \?CND1 SET 'RM,HERE ?CND1: LESS? NUM,0 \?CND3 SUB 0,NUM >NNUM ?CND3: FIRST? RM >P /?PRG6 ?PRG6: ZERO? P /TRUE FSET? P,PERSONBIT \?CND8 GRTR? NUM,0 \?CCL14 PUTP P,P?LDESC,NUM JUMP ?CND8 ?CCL14: GETP P,P?LDESC EQUAL? NNUM,STACK \?CND8 PUTP P,P?LDESC,0 ?CND8: NEXT? P >P /?PRG6 JUMP ?PRG6 .FUNCT FRIEND-FOLLOWS-YOU:ANY:1:1,RM,C IN? FOLLOWER,RM /FALSE MOVE FOLLOWER,RM PUTP FOLLOWER,P?LDESC,23 PRINTD FOLLOWER CALL2 PICK-ONE,TRAILS-ALONG PRINT STACK CRLF RTRUE .FUNCT DIR-FROM:ANY:2:2,HERE,THERE,V,P,D CALL DIR-FROM-TEST,HERE,THERE,P?UP ZERO? STACK /?CCL3 RETURN P?UP ?CCL3: CALL DIR-FROM-TEST,HERE,THERE,P?DOWN ZERO? STACK /?CCL5 RETURN P?DOWN ?CCL5: CALL DIR-FROM-TEST,HERE,THERE,P?IN ZERO? STACK /?CCL7 RETURN P?IN ?CCL7: CALL DIR-FROM-TEST,HERE,THERE,P?OUT ZERO? STACK /?CND1 RETURN P?OUT ?CND1: SET 'P,0 ?PRG9: NEXTP HERE,P >P LESS? P,LOW-DIRECTION \?CCL13 RETURN V ?CCL13: CALL DIR-FROM-TEST,HERE,THERE,P >D ZERO? D /?PRG9 LESS? D,LOW-DIRECTION /?PRD19 RETURN P ?PRD19: ZERO? V \?CCL17 SET 'V,P JUMP ?PRG9 ?CCL17: RETURN P .FUNCT DIR-FROM-TEST:ANY:3:3,HERE,THERE,P,L,TBL GETPT HERE,P >TBL ZERO? TBL /FALSE PTSIZE TBL >L EQUAL? L,DEXIT,UEXIT,CEXIT \FALSE GET TBL,REXIT EQUAL? STACK,THERE \FALSE RETURN P .FUNCT HACK-HACK:ANY:1:1,STR PRINT STR ICALL2 HIM-HER-IT,PRSO CALL2 PICK-ONE,HO-HUM PRINT STACK CRLF RTRUE .FUNCT HELD?:ANY:1:2,OBJ,CONT,L ZERO? CONT \?PRG3 SET 'CONT,PLAYER ?PRG3: LOC OBJ >L ZERO? L /FALSE EQUAL? L,CONT /TRUE EQUAL? CONT,PLAYER,WINNER \?CCL11 EQUAL? OBJ,HANDS,HEAD,EYES /TRUE SET 'OBJ,L JUMP ?PRG3 ?CCL11: EQUAL? L,ROOMS,GLOBAL-OBJECTS /FALSE SET 'OBJ,L JUMP ?PRG3 .FUNCT IDROP:ANY:0:0 CALL2 NOT-HOLDING?,PRSO ZERO? STACK \FALSE IN? PRSO,WINNER /?CCL5 LOC PRSO FSET? STACK,OPENBIT /?CCL5 LOC PRSO ICALL TOO-BAD-BUT,STACK,STR?98 RFALSE ?CCL5: MOVE PRSO,HERE FCLEAR PRSO,WORNBIT FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE RTRUE .FUNCT ITAKE:ANY:0:2,VB,OB,CNT,OBJ,L,?TMP1 ASSIGNED? 'VB /?CND1 SET 'VB,TRUE-VALUE ?CND1: ZERO? OB \?CND3 SET 'OB,PRSO ?CND3: LOC OB >L ZERO? L /?CND5 FSET? L,PERSONBIT \?CND5 FSET? OB,TAKEBIT /?CCL11 FSET? L,MUNGBIT /?CCL11 ZERO? VB /FALSE ICALL2 YOU-CANT,STR?99 RFALSE ?CCL11: FSET OB,TAKEBIT ?CND5: FSET? OB,TAKEBIT /?CCL18 ZERO? VB /FALSE ICALL2 YOU-CANT,STR?99 RFALSE ?CCL18: CALL2 CCOUNT,WINNER >CNT GRTR? CNT,FUMBLE-NUMBER \?CCL22 MUL CNT,FUMBLE-PROB >?TMP1 RANDOM 100 LESS? ?TMP1,STACK /?CCL22 CALL FIND-FLAG-NOT,WINNER,WORNBIT >OBJ ZERO? OBJ /?CCL22 ICALL1 TOO-BAD-BUT ICALL2 PRINT-THE,OBJ PRINTI " slips from" ICALL HIM-HER-IT,WINNER,0,TRUE-VALUE PRINTI " arms while" ICALL HE-SHE-IT,WINNER,0,STR?61 PRINTI " taking" ICALL2 HIM-HER-IT,OB PRINTI ", and both tumble " CALL1 GROUND-DESC PRINT STACK PRINTI ". " ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " carrying too many things. " MOVE OBJ,HERE MOVE OB,HERE RETURN 2 ?CCL22: MOVE OB,WINNER FSET OB,SEENBIT FSET OB,TOUCHBIT FCLEAR OB,NDESCBIT FCLEAR OB,INVISIBLE FCLEAR OB,SECRETBIT EQUAL? PRSA,V?TAKE /TRUE EQUAL? L,WINNER /TRUE FSET? L,PERSONBIT \TRUE ICALL FIRST-YOU,STR?99,OB,L RTRUE .FUNCT CCOUNT:ANY:1:1,OBJ,CNT,X FIRST? OBJ >X /?PRG3 RETURN CNT ?PRG3: FSET? X,WORNBIT /?CND5 INC 'CNT ?CND5: NEXT? X >X /?PRG3 RETURN CNT .FUNCT CHECK-DOOR:ANY:1:1,DR ICALL2 START-SENTENCE,DR PRINTI " is " ICALL2 THIS-IS-IT,DR FSET? DR,OPENBIT \?CCL3 PRINTI "open" JUMP ?CND1 ?CCL3: PRINTI "closed and " FSET? DR,LOCKED /?CND4 PRINTI "un" ?CND4: PRINTI "locked" ?CND1: PRINTR "." .FUNCT ROOM-CHECK:ANY:0:0,P,PA SET 'P,PRSO EQUAL? P,ROOMS /FALSE IN? P,ROOMS \?CCL5 EQUAL? HERE,P /FALSE CALL GLOBAL-IN?,P,HERE ZERO? STACK /?CCL10 EQUAL? PRSA,V?SEARCH-FOR /?PRD16 EQUAL? PRSA,V?SEARCH,V?SIT,V?LIE \FALSE ?PRD16: CALL2 META-LOC,P >P EQUAL? P,HERE /FALSE ICALL FIRST-YOU,STR?100,P SET 'PA,PRSA CALL PERFORM,V?THROUGH,P >P SET 'PRSA,PA EQUAL? M-FATAL,P /TRUE RFALSE ?CCL10: CALL2 SEE-INTO?,P ZERO? STACK \FALSE RTRUE ?CCL5: CALL2 META-LOC,P EQUAL? STACK,HERE,GLOBAL-OBJECTS,LOCAL-GLOBALS /FALSE CALL2 VISIBLE?,P ZERO? STACK \FALSE CALL2 NOT-HERE,P RSTACK .FUNCT SEE-INSIDE?:ANY:1:2,OBJ,ONLY-IN FSET? OBJ,TRANSBIT /TRUE FSET? OBJ,OPENBIT /TRUE ZERO? ONLY-IN \FALSE FSET? OBJ,SURFACEBIT /TRUE RFALSE .FUNCT ARENT-TALKING:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You aren't talking to anyone!)" .FUNCT ALREADY:ANY:1:2,OBJ,STR SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL2 START-SENTENCE,OBJ EQUAL? OBJ,PLAYER \?CCL4 PRINTI " are" JUMP ?CND2 ?CCL4: PRINTI " is" ?CND2: PRINTI " already " ZERO? STR /TRUE PRINT STR PRINTR "!)" .FUNCT NOT-CLEAR-WHOM:ANY:0:0 SET 'P-CONT,FALSE-VALUE PRINTR "[It's not clear whom you're talking to.]" .FUNCT OKAY:ANY:0:2,OBJ,STR EQUAL? WINNER,PLAYER \?CCL3 EQUAL? PRSA,V?WALK-TO,V?WALK,V?THROUGH \?CND1 RTRUE ?CCL3: PRINTC 34 ?CND1: PRINTI "Okay" ZERO? OBJ /?CND6 PRINTC 44 ICALL2 HE-SHE-IT,OBJ ZERO? STR /?CND8 PRINTI " is now " PRINT STR ?CND8: EQUAL? STR,STR?101 \?CCL12 FSET OBJ,ONBIT JUMP ?CND6 ?CCL12: EQUAL? STR,STR?102 \?CCL14 FCLEAR OBJ,ONBIT JUMP ?CND6 ?CCL14: EQUAL? STR,STR?103 \?CCL16 FSET OBJ,OPENBIT JUMP ?CND6 ?CCL16: EQUAL? STR,STR?98 \?CCL18 FCLEAR OBJ,OPENBIT JUMP ?CND6 ?CCL18: EQUAL? STR,STR?104 \?CCL20 FSET OBJ,LOCKED JUMP ?CND6 ?CCL20: EQUAL? STR,STR?105 \?CND6 FCLEAR OBJ,LOCKED ?CND6: ZERO? STR \?CCL23 ZERO? OBJ \?CND22 ?CCL23: EQUAL? WINNER,PLAYER /?CND26 PRINTI ","" says " PRINTD WINNER PRINTI ". " ICALL HE-SHE-IT,WINNER,1 PRINTR " does so." ?CND26: PRINTC 46 CRLF ?CND22: ZERO? LIT \TRUE CALL1 LIT? >LIT ZERO? LIT /TRUE CRLF ICALL1 V-LOOK RTRUE .FUNCT TOO-BAD-BUT:ANY:0:2,OBJ,STR PRINTI "Too bad, but" ZERO? OBJ /?CND1 ICALL2 HE-SHE-IT,OBJ ?CND1: ZERO? STR /TRUE PRINTI " is " PRINT STR EQUAL? STR,STR?106,STR?107 \?CND5 PRINTI " with you" ?CND5: PRINTR "." .FUNCT TOO-DARK:ANY:0:0 PRINTR "(It's too dark to see!)" .FUNCT VISIBLE?:ANY:1:1,OBJ,L ZERO? OBJ /FALSE CALL2 ACCESSIBLE?,OBJ ZERO? STACK \TRUE LOC OBJ >L CALL2 SEE-INSIDE?,L ZERO? STACK /FALSE CALL2 VISIBLE?,L RSTACK .FUNCT ACCESSIBLE?:ANY:1:1,OBJ,L ZERO? OBJ /FALSE LOC OBJ >L FSET? OBJ,INVISIBLE /FALSE EQUAL? OBJ,PSEUDO-OBJECT \?CCL8 EQUAL? LAST-PSEUDO-LOC,HERE /TRUE RFALSE ?CCL8: ZERO? L /FALSE EQUAL? L,GLOBAL-OBJECTS /TRUE EQUAL? L,LOCAL-GLOBALS \?CCL17 CALL GLOBAL-IN?,OBJ,HERE RSTACK ?CCL17: CALL2 META-LOC,OBJ EQUAL? STACK,HERE \FALSE EQUAL? L,WINNER,HERE /TRUE FSET? L,OPENBIT /?CTR22 FSET? L,SURFACEBIT /?CTR22 FSET? L,PERSONBIT \FALSE ?CTR22: CALL2 ACCESSIBLE?,L RSTACK .FUNCT WHO-CARES:ANY:0:0,N RANDOM WHO-CARES-LENGTH >N GET WHO-CARES-VERB,N ICALL HE-SHE-IT,PRSO,TRUE-VALUE,STACK GET WHO-CARES-TBL,N PRINT STACK PRINTR "." .FUNCT PRE-SAIM:ANY:0:0 ICALL PERFORM,V?AIM,PRSI,PRSO RTRUE .FUNCT V-SAIM:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT V-AIM:ANY:0:0 CALL1 YOU-CANT RSTACK .FUNCT PRE-SANALYZE:ANY:0:0 ICALL PERFORM,V?ANALYZE,PRSI,PRSO RTRUE .FUNCT V-SANALYZE:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT PRE-ANALYZE:ANY:0:0 CALL1 ROOM-CHECK ZERO? STACK \TRUE FSET? PRSO,PERSONBIT \FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Leave that to the police.)" .FUNCT V-ANALYZE:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 PRINTR "How?" ?CCL3: FSET? PRSO,DOORBIT \?CCL5 CALL2 CHECK-DOOR,PRSO RSTACK ?CCL5: ICALL HE-SHE-IT,PRSO,1,STR?114 PRINTR " normal." .FUNCT V-ANSWER:ANY:0:0 ZERO? AWAITING-REPLY /?CCL3 GET P-LEXV,P-CONT EQUAL? STACK,W?YES \?CCL6 ICALL2 PERFORM,V?YES JUMP ?CND1 ?CCL6: ICALL2 PERFORM,V?NO JUMP ?CND1 ?CCL3: ICALL1 NOT-CLEAR-WHOM ?CND1: SET 'P-CONT,FALSE-VALUE RTRUE .FUNCT V-REPLY:ANY:0:0 SET 'P-CONT,FALSE-VALUE FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 CALL1 WAITING-FOR-YOU-TO-SPEAK RSTACK ?CCL3: CALL1 YOU-CANT RSTACK .FUNCT WAITING-FOR-YOU-TO-SPEAK:ANY:0:0 ICALL HE-SHE-IT,PRSO,1,STR?109 PRINTR " to be waiting for you to speak." .FUNCT V-ASK:ANY:0:0 ZERO? P-CONT /?CCL3 FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 SET 'WINNER,PRSO SET 'QCONTEXT,PRSO RETURN QCONTEXT ?CCL3: CALL1 V-ASK-ABOUT RSTACK .FUNCT PRE-ASK:ANY:0:0 CALL2 META-LOC,PRSO EQUAL? STACK,HERE /?CCL3 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?CCL3 ICALL2 NOT-HERE,PRSO RETURN 2 ?CCL3: EQUAL? PRSO,PLAYER /?CTR8 FSET? PRSO,PERSONBIT /?CCL9 ?CTR8: EQUAL? PRSA,V?$CALL \?CCL14 ZERO? P-CONT \?CCL14 ICALL2 MISSING,STR?56 RETURN 2 ?CCL14: EQUAL? PRSA,V?LISTEN /FALSE ICALL2 WONT-HELP-TO-TALK-TO,PRSO RETURN 2 ?CCL9: CALL GRAB-ATTENTION,PRSO,PRSI ZERO? STACK \FALSE RETURN 2 .FUNCT GRAB-ATTENTION:ANY:1:2,PERSON,OBJ,N,GT,ATT FSET? PERSON,MUNGBIT \?CND1 GETP PERSON,P?LDESC EQUAL? STACK,14 \?CCL5 ICALL TOO-BAD-BUT,PERSON,STR?115 RFALSE ?CCL5: ICALL TOO-BAD-BUT,PERSON,STR?116 RFALSE ?CND1: SET 'QCONTEXT,PERSON GETP PERSON,P?LDESC EQUAL? STACK,21 /TRUE PUTP PERSON,P?LDESC,12 RTRUE .FUNCT V-ASK-ABOUT:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 EQUAL? PRSO,PLAYER /?CCL3 PRINTI "A long silence tells you that" ICALL2 PRINT-THE,PRSO PRINTI " isn't interested in talking about" IN? PRSI,ROOMS \?CCL8 PRINTI " that" JUMP ?CND6 ?CCL8: ICALL2 PRINT-THE,PRSI ?CND6: PRINTR "." ?CCL3: ICALL PERFORM,V?TELL,PRSO RTRUE .FUNCT WONT-HELP-TO-TALK-TO:ANY:1:1,OBJ PRINTI "You talk to" ICALL2 PRINT-THE,OBJ PRINTI " for a minute before you realize that" ICALL2 HE-SHE-IT,OBJ PRINTR " won't respond." .FUNCT PRE-ASK-CONTEXT-ABOUT:ANY:0:1,V,P ZERO? V \?CND1 SET 'V,V?ASK-ABOUT ?CND1: CALL1 QCONTEXT-GOOD? ZERO? STACK /?CCL5 ICALL PERFORM,V,QCONTEXT,PRSO RTRUE ?CCL5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE ICALL TELL-I-ASSUME,P,STR?117 ICALL PERFORM,V,P,PRSO RTRUE .FUNCT V-ASK-CONTEXT-ABOUT:ANY:0:0 CALL1 ARENT-TALKING RSTACK .FUNCT V-ASK-FOR:ANY:0:0 PRINTI "Unsurprisingly," ICALL2 PRINT-THE,PRSO PRINTR " doesn't oblige." .FUNCT PRE-ASK-CONTEXT-FOR:ANY:0:0,P LOC PRSO >P FSET? P,PERSONBIT \?CCL3 ICALL PERFORM,V?ASK-FOR,P,PRSO RTRUE ?CCL3: CALL2 PRE-ASK-CONTEXT-ABOUT,V?ASK-FOR RSTACK .FUNCT V-ASK-CONTEXT-FOR:ANY:0:0 CALL1 ARENT-TALKING RSTACK .FUNCT V-ATTACK:ANY:0:0 CALL2 IKILL,STR?118 RSTACK .FUNCT PRE-BRUSH:ANY:0:0 EQUAL? PRSO,ROOMS \FALSE EQUAL? P-PRSA-WORD,W?SCRAPE,W?SCRATCH /FALSE SET 'PRSO,WINNER RFALSE .FUNCT V-BRUSH:ANY:0:0 ZERO? PRSI \?CCL3 CALL2 HELD?,TOOTHBRUSH ZERO? STACK /?CCL6 PRINTI "(with the " PRINTD TOOTHBRUSH PRINTC 41 CRLF ICALL PERFORM,V?BRUSH,PRSO,TOOTHBRUSH RTRUE ?CCL6: PRINTI "You have nothing to brush" ICALL2 PRINT-THE,PRSO PRINTR " with." ?CCL3: EQUAL? PRSI,TOOTHBRUSH /?CCL8 PRINTI "With " ICALL2 PRINTA,PRSI PRINTR "!" ?CCL8: EQUAL? PRSO,TEETH /?CCL10 PRINTI "In general, " PRINTD TOOTHBRUSH PRINTR "es are meant for teeth." ?CCL10: PRINTR "Congratulations on your fine dental hygiene." .FUNCT V-BUY:ANY:0:0 PRINTI "Sorry," ICALL2 PRINT-THE,PRSO PRINTR " isn't for sale." .FUNCT V-$CALL:ANY:0:0 ICALL2 UNSNOOZE,PRSO FSET? PRSO,PERSONBIT \?CCL3 CALL2 META-LOC,PRSO EQUAL? STACK,HERE \?CCL6 CALL2 GRAB-ATTENTION,PRSO ZERO? STACK /?PRG11 PUTP PRSO,P?LDESC,12 ICALL2 START-SENTENCE,PRSO PRINTI " is " GET LDESC-STRINGS,12 PRINT STACK PRINTR "." ?PRG11: RETURN 2 ?CCL6: CALL2 NOT-HERE,PRSO RSTACK ?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE CALL2 MISSING,STR?56 RSTACK .FUNCT UNSNOOZE:ANY:1:2,PER,NO-TELL?,RM,GT,C GETP PER,P?LDESC >C EQUAL? C,14 \FALSE PUTP PER,P?LDESC,25 FCLEAR PER,MUNGBIT CALL2 META-LOC,PER >RM IN? PER,HERE \?CND5 ZERO? NO-TELL? \?CND5 ICALL HE-SHE-IT,PER,1 PRINTI " wakes up first. " FSET? RM,ONBIT /?CND5 ICALL HE-SHE-IT,PER,1 PRINTI " turns on the light. " ?CND5: FSET RM,ONBIT RTRUE .FUNCT V-CHASTISE:ANY:0:0 EQUAL? PRSO,INTDIR /?CND1 PRINT I-ASSUME PRINTI " Look at" ICALL2 HIM-HER-IT,PRSO PRINTI ", not look in" ICALL2 HIM-HER-IT,PRSO PRINTI " nor look for" ICALL2 HIM-HER-IT,PRSO PRINTI " nor any other preposition.]" CRLF ?CND1: ICALL PERFORM,V?EXAMINE,PRSO RTRUE .FUNCT V-BOARD:ANY:0:0 IN? PRSO,ROOMS /?CTR2 FSET? PRSO,DOORBIT \?CCL3 ?CTR2: CALL1 V-THROUGH RSTACK ?CCL3: FSET? PRSO,VEHBIT \?CCL7 IN? WINNER,PRSO \?CCL10 ICALL2 ALREADY,PLAYER PRINTI "in" ICALL2 PRINT-THE,PRSO PRINTR ".)" ?CCL10: MOVE WINNER,PRSO ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " now " FSET? PRSO,SURFACEBIT \?CCL13 PRINTI "on" JUMP ?CND11 ?CCL13: PRINTI "in" ?CND11: ICALL2 PRINT-THE,PRSO PRINTR "." ?CCL7: CALL2 YOU-CANT,STR?119 RSTACK .FUNCT V-CLIMB-ON:ANY:0:0 ICALL PERFORM,V?SIT,PRSO RTRUE .FUNCT V-CLIMB-UP:ANY:0:2,DIR,OBJ,X ASSIGNED? 'DIR /?CND1 SET 'DIR,P?UP ?CND1: IN? PRSO,ROOMS \?CCL5 ICALL PERFORM,V?WALK-TO,PRSO RTRUE ?CCL5: GETPT HERE,DIR ZERO? STACK /?CCL7 ICALL2 DO-WALK,DIR RTRUE ?CCL7: ZERO? OBJ \?CCL9 CALL2 YOU-CANT,STR?73 RSTACK ?CCL9: CALL1 HAR-HAR RSTACK .FUNCT V-CLIMB-DOWN:ANY:0:0 CALL2 V-CLIMB-UP,P?DOWN RSTACK .FUNCT V-CLOSE:ANY:0:0 FSET? PRSO,CONTBIT /?CCL3 FSET? PRSO,DOORBIT /?CCL3 EQUAL? PRSO,WINDOW /?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: FSET? PRSO,DOORBIT /?CTR7 EQUAL? PRSO,WINDOW \?CCL8 ?CTR7: FSET? PRSO,OPENBIT \?CCL13 CALL OKAY,PRSO,STR?98 RSTACK ?CCL13: CALL ALREADY,PRSO,STR?98 RSTACK ?CCL8: FSET? PRSO,SURFACEBIT /?CCL16 GETP PRSO,P?CAPACITY ZERO? STACK /?CCL16 FSET? PRSO,OPENBIT \?CCL21 CALL OKAY,PRSO,STR?98 RSTACK ?CCL21: CALL ALREADY,PRSO,STR?98 RSTACK ?CCL16: CALL1 YOU-CANT RSTACK .FUNCT V-COUNT:ANY:0:0 CALL1 IMPOSSIBLE RSTACK .FUNCT V-DIAGNOSE:ANY:0:0 ZERO? PRSO /?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTR " wide awake and in good health." .FUNCT TELL-NOT-IN:ANY:1:1,OBJ SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " not in" ICALL2 HIM-HER-IT,OBJ PRINTR "!)" .FUNCT V-DRINK:ANY:0:0 CALL1 YOU-CANT RSTACK .FUNCT V-DROP:ANY:0:0,L CALL1 IDROP ZERO? STACK /FALSE CALL FIND-FLAG-HERE,VEHBIT,PRSO >L ZERO? L /?CCL6 MOVE PRSO,L ICALL2 OKAY,PRSO PRINTI " is now on" ICALL2 PRINT-THE,L PRINTR "." ?CCL6: CALL1 GROUND-DESC CALL OKAY,PRSO,STACK RSTACK .FUNCT GROUND-DESC:ANY:0:0 CALL2 OUTSIDE?,HERE ZERO? STACK \?CCL3 RETURN STR?120 ?CCL3: RETURN STR?121 .FUNCT PRE-EAT:ANY:0:0 EQUAL? PRSO,FALSE-VALUE,ROOMS \FALSE CALL2 META-LOC,DINNER EQUAL? STACK,HERE \?CCL6 ICALL PERFORM,PRSA,DINNER RTRUE ?CCL6: ICALL2 NOT-HERE,DINNER RTRUE .FUNCT V-EAT:ANY:0:0 PRINTI "Stuffing" ICALL2 PRINT-THE,PRSO PRINTR " in your mouth would do little to help at this point." .FUNCT V-ENJOY:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 CALL1 V-KISS RSTACK ?CCL3: PRINTI "Not difficult at all, considering how enjoyable" ICALL2 PRINT-THE,PRSO PRINTR " is." .FUNCT PRE-THROUGH:ANY:0:0,VEH EQUAL? PRSO,GLOBAL-HERE,ROOMS \FALSE CALL FIND-IN,HERE,VEHBIT >VEH ZERO? VEH /?CCL6 ICALL PERFORM,V?BOARD,VEH RTRUE ?CCL6: ICALL2 DO-WALK,P?IN RTRUE .FUNCT V-THROUGH:ANY:0:0,RM,DIR CALL NOUN-USED?,PRSO,W?DOOR ZERO? STACK /?CCL3 FSET? PRSO,OPENBIT /?CTR2 CALL WALK-THRU-DOOR?,FALSE-VALUE,PRSO,FALSE-VALUE ZERO? STACK /?CCL3 ?CTR2: CALL DOOR-ROOM,HERE,PRSO >RM ZERO? RM /?CCL10 CALL2 GOTO,RM ZERO? STACK \FALSE ?CCL10: CALL1 V-FOO RSTACK ?CCL3: IN? PRSO,ROOMS \?CCL14 EQUAL? PRSO,HERE \?CCL17 ICALL1 WALK-WITHIN-ROOM RTRUE ?CCL17: CALL SEE-INTO?,PRSO,FALSE-VALUE ZERO? STACK /?CCL19 ICALL2 GOTO,PRSO RTRUE ?CCL19: ICALL PERFORM,V?WALK-TO,PRSO RTRUE ?CCL14: FSET? PRSO,VEHBIT \?CCL21 CALL PERFORM,V?BOARD,PRSO RSTACK ?CCL21: FSET? PRSO,PERSONBIT \?CCL24 CALL1 HAR-HAR RSTACK ?CCL24: FSET? PRSO,TAKEBIT /?CCL26 ICALL HE-SHE-IT,WINNER,1,STR?122 PRINTI " into" ICALL2 PRINT-THE,PRSO ICALL2 THIS-IS-IT,PRSO PRINTI " trying to go through" ICALL2 HIM-HER-IT,PRSO PRINTR "." ?CCL26: IN? PRSO,WINNER \?CCL28 ICALL PERFORM,V?EXAMINE,EYES RTRUE ?CCL28: CALL1 HAR-HAR RSTACK .FUNCT PRE-EXAMINE:ANY:0:0 CALL1 ROOM-CHECK RSTACK .FUNCT V-EXAMINE:ANY:0:0,TXT EQUAL? PRSO,PSEUDO-OBJECT /?CCL2 CALL NOUN-USED?,PRSO,W?DOOR ZERO? STACK /?CND1 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK /?CND1 ?CCL2: SET 'TXT,TRUE-VALUE ?CND1: EQUAL? PRSO,INTDIR \?CCL9 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(If you want to see what's there, go there!)" ?CCL9: EQUAL? PRSO,LIGHT-GLOBAL /?CTR10 EQUAL? PRSO,WALL,EARS,TEETH /?CTR10 EQUAL? PRSO,EYES,HEAD,HANDS \?CCL11 ?CTR10: CALL1 NOTHING-SPECIAL RSTACK ?CCL11: IN? PRSO,GLOBAL-OBJECTS \?CCL16 ICALL2 NOT-HERE,PRSO RTRUE ?CCL16: IN? PRSO,ROOMS \?CCL18 ZERO? TXT \?CCL18 CALL2 ROOM-PEEK,PRSO RSTACK ?CCL18: CALL2 META-LOC,PRSO EQUAL? STACK,HERE /?CCL22 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?CCL22 ZERO? TXT \?CCL22 CALL TOO-BAD-BUT,PRSO,STR?123 RSTACK ?CCL22: GETP PRSO,P?TEXT >TXT ZERO? TXT /?CCL27 PRINT TXT CRLF RTRUE ?CCL27: FSET? PRSO,DOORBIT \?CCL29 CALL2 CHECK-DOOR,PRSO RSTACK ?CCL29: FSET? PRSO,CONTBIT /?CTR30 FSET? PRSO,SURFACEBIT \?CCL31 ?CTR30: CALL1 V-LOOK-INSIDE RSTACK ?CCL31: CALL1 NOTHING-SPECIAL RSTACK .FUNCT NOTHING-SPECIAL:ANY:0:0 PRINTI "You see nothing special about" ICALL2 PRINT-THE,PRSO PRINTR "." .FUNCT GLOBAL-IN?:ANY:2:2,OBJ1,OBJ2,TEE EQUAL? OBJ1,OBJ2 /TRUE GETPT OBJ2,P?GLOBAL >TEE ZERO? TEE /FALSE PTSIZE TEE DIV STACK,2 INTBL? OBJ1,TEE,STACK /?CND1 ?CND1: RSTACK .FUNCT V-FAINT:ANY:0:0 PRINTI "You doze for several minutes. " CALL1 V-WAIT RSTACK .FUNCT V-FILL:ANY:0:0 CALL1 YOU-CANT RSTACK .FUNCT PRE-FIND:ANY:0:0,?TMP1 EQUAL? PRSO,PLAYER /FALSE FSET? PRSO,SECRETBIT \?CCL5 FSET? PRSO,SEENBIT /?CCL5 CALL1 NO-FUN RSTACK ?CCL5: IN? PRSO,ROOMS \?CCL9 EQUAL? PRSO,HERE \?CCL12 CALL ALREADY,WINNER,STR?124 RSTACK ?CCL12: ICALL PERFORM,V?WALK-TO,PRSO RTRUE ?CCL9: FSET? PRSO,PERSONBIT \FALSE CALL2 META-LOC,WINNER >?TMP1 CALL2 META-LOC,PRSO EQUAL? ?TMP1,STACK \?CCL18 FSET? PRSO,NDESCBIT /?CCL18 ICALL1 BITE-YOU RTRUE ?CCL18: CALL1 FOLLOW-LOC? ZERO? STACK \TRUE ICALL2 WHO-KNOWS?,PRSO RETURN 2 .FUNCT BITE-YOU:ANY:0:0 PRINTI "If" ICALL2 HE-SHE-IT,PRSO PRINTI " were any closer," ICALL2 HE-SHE-IT,PRSO PRINTR "'d bite you!" .FUNCT FAR-AWAY?:ANY:1:1,L EQUAL? L,GLOBAL-OBJECTS /TRUE FSET? L,SECRETBIT \?CND1 FSET? L,SEENBIT \TRUE ?CND1: FSET? HERE,SECRETBIT \?PRD10 FSET? L,SECRETBIT \?CCL8 ?PRD10: FSET? HERE,SECRETBIT /FALSE FSET? L,SECRETBIT \FALSE ?CCL8: CALL SEE-INTO?,L,FALSE-VALUE ZERO? STACK /TRUE RFALSE .FUNCT V-FIND:ANY:0:0,L LOC PRSO >L EQUAL? PRSO,HANDS,HEAD,EARS /?CTR2 EQUAL? PRSO,TEETH,EYES \?CCL3 ?CTR2: PRINTI "Are you sure" ICALL2 PRINT-THE,PRSO PRINTR " is lost?" ?CCL3: CALL2 HELD?,PRSO ZERO? STACK /?CCL7 PRINTR "You have it!" ?CCL7: FSET? L,PERSONBIT \?CCL9 CALL2 VISIBLE?,L ZERO? STACK /?CCL9 PRINTI "As far as you can tell," ICALL2 PRINT-THE,L ICALL2 THIS-IS-IT,L PRINTR " has it." ?CCL9: CALL2 VISIBLE?,PRSO ZERO? STACK /?CCL13 PRINTR "Right in front of you." ?CCL13: FSET? PRSO,SEENBIT /?CCL16 CALL NOT-HERE,PRSO,TRUE-VALUE RSTACK ?CCL16: EQUAL? L,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CCL19 PRINTR "It's around somewhere." ?CCL19: CALL2 META-LOC,PRSO CALL2 FAR-AWAY?,STACK ZERO? STACK /?CCL22 PRINTR "It's far away from here." ?CCL22: FSET? L,SURFACEBIT /?CTR23 FSET? L,CONTBIT /?CTR23 IN? L,ROOMS \?CCL24 ?CTR23: ICALL2 THIS-IS-IT,L PRINTI "It's probably " FSET? L,SURFACEBIT \?CCL30 PRINTI "on" JUMP ?CND28 ?CCL30: PRINTI "in" ?CND28: ICALL2 PRINT-THE,L PRINTR "." ?CCL24: PRINTR "You'll have to do that yourself." .FUNCT NO-FUN:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(If it's that easy, it spoils the fun!)" .FUNCT TELL-LOCATION:ANY:0:0,DIR IN? PLAYER,HERE /?CND1 PRINTI "sitting " ?CND1: FSET? HERE,SURFACEBIT \?CCL5 PRINTI "on" JUMP ?CND3 ?CCL5: PRINTI "in" ?CND3: ICALL2 PRINT-THE,HERE PRINTC 46 RTRUE .FUNCT V-FIX:ANY:0:0 CALL1 MORE-SPECIFIC RSTACK .FUNCT FOLLOW-LOC?:ANY:0:0,L GETP PRSO,P?CHARACTER >L GET FOLLOW-LOC,L >L ZERO? L /FALSE PRINTI "The last you knew," ICALL2 HE-SHE-IT,PRSO PRINTI " was " FSET? L,SURFACEBIT \?CCL6 PRINTI "on" JUMP ?CND4 ?CCL6: PRINTI "in" ?CND4: ICALL2 PRINT-THE,L PRINTI ". " RETURN L .FUNCT V-FOLLOW:ANY:0:0,L EQUAL? PRSO,WINNER \?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: FSET? PRSO,PERSONBIT /?CCL5 CALL1 IMPOSSIBLE RSTACK ?CCL5: CALL2 META-LOC,PRSO EQUAL? HERE,STACK \?CCL8 PRINTI "You're in the same place as" ICALL2 HE-SHE-IT,PRSO PRINTR "!" ?CCL8: ICALL2 WHO-KNOWS?,PRSO RETURN 2 .FUNCT V-FOO:ANY:0:0 PRINTR "[Foo!! This is a bug!!]" .FUNCT V-FOOTNOTE:ANY:0:0 EQUAL? PRSO,INTNUM /?CCL3 PRINTR "Specify a number, as in ""FOOTNOTE 6.""" ?CCL3: EQUAL? P-NUMBER,11 \?CCL5 SET 'AWAITING-REPLY,14 ICALL QUEUE,I-REPLY,2 PRINTR "Isn't it fun reading through all the footnotes?" ?CCL5: EQUAL? P-NUMBER,12 \?CCL7 PRINTR "This is the famous recursive footnote (Footnote 12)." ?CCL7: EQUAL? P-NUMBER,14 \?CCL9 PRINT GUIDE-NAME PRINTI " is also the name of a terrific work of interactive fiction by Douglas Adams and S. Eric Meretzky." PRINT ALREADY-KNOW-THAT CRLF RTRUE ?CCL9: PRINTI "There is no Footnote " PRINTN P-NUMBER PRINTR "." .FUNCT I-REPLY:ANY:0:0 SET 'AWAITING-REPLY,FALSE-VALUE RFALSE .FUNCT PRE-GIVE:ANY:0:0 EQUAL? PRSI,PLAYER /FALSE CALL2 NOT-HOLDING?,PRSO ZERO? STACK \TRUE RFALSE .FUNCT V-GIVE:ANY:0:0 ZERO? PRSI \?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: FSET? PRSI,PERSONBIT /?CCL5 ICALL HE-SHE-IT,WINNER,1 PRINTI " can't give " ICALL2 PRINTA,PRSO PRINTI " to " ICALL2 PRINTA,PRSI PRINTR "!" ?CCL5: EQUAL? PRSI,PLAYER \?CCL7 ICALL PERFORM,V?TAKE,PRSO RTRUE ?CCL7: PRINTI "Politely," ICALL2 PRINT-THE,PRSI PRINTR " refuses your offer." .FUNCT PRE-SGIVE:ANY:0:0,X ICALL PERFORM,V?GIVE,PRSI,PRSO RTRUE .FUNCT V-SGIVE:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT TELL-I-ASSUME:ANY:1:2,OBJ,PRON FSET? PRON,TOUCHBIT /FALSE EQUAL? OPRSO,OBJ /FALSE FSET PRON,TOUCHBIT PRINT I-ASSUME PRINTC 32 ICALL2 TELL-THE,OBJ PRINTR ".]" .FUNCT PRE-HELLO:ANY:0:0,P,WORD EQUAL? P-PRSA-WORD,W?HELLO,W?HI \?CND1 SET 'WORD,STR?126 ?CND1: EQUAL? PRSO,ROOMS /?CCL5 FSET? PRSO,PERSONBIT /?CCL8 ICALL2 WONT-HELP-TO-TALK-TO,PRSO RTRUE ?CCL8: FSET? PRSO,MUNGBIT \?CCL11 ICALL PERFORM,V?ALARM,PRSO RTRUE ?CCL11: ZERO? WORD /FALSE PRINT I-ASSUME PRINT WORD ICALL2 HIM-HER-IT,PRSO PRINTI ".]" CRLF RFALSE ?CCL5: CALL1 QCONTEXT-GOOD? ZERO? STACK /?CCL15 PRINT I-ASSUME PRINTC 32 PRINTD QCONTEXT PRINTI ".]" CRLF ICALL PERFORM,PRSA,QCONTEXT RTRUE ?CCL15: EQUAL? WINNER,PLAYER \?CCL17 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL17 PRINT I-ASSUME PRINTC 32 PRINTD P PRINTI ".]" CRLF ICALL PERFORM,PRSA,P RTRUE ?CCL17: CALL1 NOT-CLEAR-WHOM RSTACK .FUNCT V-HELLO:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL6 PRINTR """Hello to you too.""" ?CCL6: CALL2 WONT-HELP-TO-TALK-TO,PRSO RSTACK ?CCL3: CALL1 NOT-CLEAR-WHOM RSTACK .FUNCT V-HELP:ANY:0:0 EQUAL? PRSO,FALSE-VALUE,PLAYER \?CCL3 CALL1 HELP-TEXT RSTACK ?CCL3: CALL1 MORE-SPECIFIC RSTACK .FUNCT HELP-TEXT:ANY:0:0 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 a complete map and InvisiClues (TM) hint booklet from your dealer or via mail with the form in your package.]" .FUNCT V-HIDE:ANY:0:0 PRINTR "There's no place to hide here." .FUNCT V-KILL:ANY:0:0 PRINTR "You are obviously letting things get to you. You should learn to relax a little." .FUNCT IKILL:ANY:0:1,STR ZERO? PRSO \?CCL3 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(There's nothing here to " PRINT STR PRINTR ".)" ?CCL3: ZERO? PRSI \?CCL5 SET 'CLOCK-WAIT,TRUE-VALUE PRINT YOU-DIDNT-SAY-W PRINTI "hat to " PRINT STR ICALL2 PRINT-THE,PRSO FSET? PRSO,WEAPONBIT \?CCL8 PRINTI " at" JUMP ?CND6 ?CCL8: PRINTI " with" ?CND6: PRINTR ".]" ?CCL5: FSET? PRSO,PERSONBIT /?CCL10 CALL1 HAR-HAR RSTACK ?CCL10: PRINT NO-VIOLENCE RTRUE .FUNCT V-KISS:ANY:0:0,X EQUAL? PRSO,PLAYER \?CCL3 PRINTI "You kiss " PRINTD PLAYER PRINTR " for a minute. Yuk!" ?CCL3: FSET? PRSO,PERSONBIT \?CCL5 FSET? PRSO,MUNGBIT /?CCL5 CALL1 FACE-RED RSTACK ?CCL5: PRINTR "What a (ahem!) strange idea!" .FUNCT V-KNOCK:ANY:0:0,P FSET? PRSO,DOORBIT \?CCL3 FSET? PRSO,OPENBIT \?CCL7 PRINTR "It's open!" ?CCL7: PRINTR "Nobody's home." ?CCL3: CALL2 HACK-HACK,STR?129 RSTACK .FUNCT V-LAMP-OFF:ANY:0:0 FSET? PRSO,LIGHTBIT /?CCL3 CALL2 YOU-CANT,STR?130 RSTACK ?CCL3: FSET? PRSO,ONBIT /?CCL5 CALL ALREADY,PRSO,STR?102 RSTACK ?CCL5: CALL OKAY,PRSO,STR?102 RSTACK .FUNCT V-LAMP-ON:ANY:0:0 FSET? PRSO,ONBIT \?CCL3 CALL ALREADY,PRSO,STR?101 RSTACK ?CCL3: FSET? PRSO,LIGHTBIT \?CCL5 CALL OKAY,PRSO,STR?101 RSTACK ?CCL5: FSET? PRSO,PERSONBIT \?CCL7 CALL1 HAR-HAR RSTACK ?CCL7: CALL2 YOU-CANT,STR?131 RSTACK .FUNCT V-LEAP:ANY:0:0 ZERO? PRSO /?CCL3 EQUAL? PRSO,INTDIR /?CCL3 ICALL1 IMPOSSIBLE RTRUE ?CCL3: CALL1 V-SKIP RSTACK .FUNCT V-SKIP:ANY:0:0 CALL1 WHEE RSTACK .FUNCT WHEE:ANY:0:0,X RANDOM 5 >X EQUAL? 1,X \?CCL3 PRINTR "Very good. Now you can go to the second grade." ?CCL3: EQUAL? 2,X \?CCL5 PRINTR "I hope you enjoyed that more than I did." ?CCL5: EQUAL? 3,X \?CCL7 PRINTI "Are you enjoying " PRINTD PLAYER PRINTR "?" ?CCL7: EQUAL? 4,X \?CCL9 PRINTR "Wheeeeeeeeee!!!!!" ?CCL9: PRINTR "Do you expect someone to applaud?" .FUNCT V-LEAVE:ANY:0:0,GT EQUAL? WINNER,FOLLOWER \?CND1 SET 'FOLLOWER,0 ?CND1: EQUAL? PRSO,FALSE-VALUE,ROOMS,HERE \?CCL5 ICALL2 DO-WALK,P?OUT PUTP WINNER,P?LDESC,9 RTRUE ?CCL5: LOC PRSO EQUAL? STACK,PLAYER \?CCL7 ICALL PERFORM,V?DROP,PRSO RTRUE ?CCL7: LOC WINNER EQUAL? STACK,PRSO \?CCL9 ICALL PERFORM,V?DISEMBARK,PRSO RTRUE ?CCL9: ICALL2 TELL-NOT-IN,PRSO RETURN 2 .FUNCT PRE-LIE:ANY:0:0 CALL1 ROOM-CHECK RSTACK .FUNCT V-LIE:ANY:0:0 CALL2 V-SIT,TRUE-VALUE RSTACK .FUNCT PRE-LISTEN:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 GETP PRSO,P?LDESC EQUAL? STACK,14 \?CCL3 PRINTR """Zzzzzzz...""" ?CCL3: CALL1 PRE-ASK RSTACK .FUNCT V-LISTEN:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 ICALL1 WAITING-FOR-YOU-TO-SPEAK RTRUE ?CCL3: PRINTI "At the moment," ICALL2 PRINT-THE,PRSO PRINTR " makes no sound." .FUNCT V-LOCK:ANY:0:0 CALL1 HAR-HAR RSTACK .FUNCT V-LOOK:ANY:0:0 CALL2 DESCRIBE-ROOM,TRUE-VALUE ZERO? STACK /FALSE CALL1 DESCRIBE-OBJECTS RSTACK .FUNCT V-LOOK-BEHIND:ANY:0:0 FSET? PRSO,DOORBIT \?CCL3 FSET? PRSO,OPENBIT /?CCL3 CALL TOO-BAD-BUT,PRSO,STR?98 RSTACK ?CCL3: PRINTI "There's nothing behind" ICALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-LOOK-DOWN:ANY:0:0 EQUAL? PRSO,ROOMS \?CCL3 ICALL PERFORM,V?EXAMINE,FLOOR RTRUE ?CCL3: ICALL PERFORM,V?LOOK-INSIDE,PRSO RTRUE .FUNCT PRE-LOOK-INSIDE:ANY:0:0 CALL1 ROOM-CHECK RSTACK .FUNCT V-LOOK-INSIDE:ANY:0:1,DIR,RM ASSIGNED? 'DIR /?CND1 SET 'DIR,P?IN ?CND1: EQUAL? PRSO,ROOMS \?CND3 EQUAL? DIR,P?OUT \?CCL7 CALL GLOBAL-IN?,WINDOW,HERE ZERO? STACK /?CND3 ICALL PERFORM,PRSA,WINDOW,PRSI RTRUE ?CCL7: SET 'RM,P-IT-OBJECT FSET? RM,CONTBIT /?CCL11 CALL FIND-FLAG-LG,HERE,CONTBIT >RM ZERO? RM \?CCL11 SET 'RM,WINDOW CALL GLOBAL-IN?,RM,HERE ZERO? STACK \?CCL11 CALL FIND-FLAG-LG,HERE,DOORBIT >RM ZERO? RM /?CND3 ?CCL11: ICALL2 TELL-I-ASSUME,RM ICALL PERFORM,PRSA,RM,PRSI RTRUE ?CND3: EQUAL? PRSO,GLOBAL-HERE \?CCL18 ICALL2 PERFORM,V?LOOK RTRUE ?CCL18: IN? PRSO,ROOMS \?CCL20 CALL NOUN-USED?,PRSO,W?DOOR ZERO? STACK \?CCL20 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?CTR19 CALL SEE-INTO?,PRSO,FALSE-VALUE ZERO? STACK /?CCL20 ?CTR19: CALL2 ROOM-PEEK,PRSO RSTACK ?CCL20: CALL2 V-LOOK-THROUGH,TRUE-VALUE ZERO? STACK \TRUE FSET? PRSO,CONTBIT /?CTR28 FSET? PRSO,SURFACEBIT \?CCL29 ?CTR28: CALL SEE-INSIDE?,PRSO,TRUE-VALUE ZERO? STACK \?CND32 ICALL FIRST-YOU,STR?103,PRSO ?CND32: FIRST? PRSO \?CCL36 PRINTI "You can see" ICALL2 PRINT-CONTENTS,PRSO FSET? PRSO,SURFACEBIT \?CCL39 PRINTI " on" JUMP ?CND37 ?CCL39: PRINTI " inside" ?CND37: ICALL2 HIM-HER-IT,PRSO PRINTR "." ?CCL36: FSET? PRSO,SURFACEBIT \?CCL41 PRINTI "There's nothing on" ICALL2 HIM-HER-IT,PRSO IN? PLAYER,PRSO \?CND42 PRINTI " except you" ?CND42: PRINTR "." ?CCL41: CALL TOO-BAD-BUT,PRSO,STR?132 RSTACK ?CCL29: EQUAL? DIR,P?IN \?CCL45 CALL2 YOU-CANT,STR?133 RSTACK ?CCL45: CALL2 YOU-CANT,STR?134 RSTACK .FUNCT FIRST-YOU:ANY:1:3,STR,OBJ,OBJ2 PRINTC 40 ICALL HE-SHE-IT,WINNER,TRUE-VALUE,STR ZERO? OBJ /?CND1 ICALL2 PRINT-THE,OBJ EQUAL? STR,STR?103 \?CND3 FSET OBJ,OPENBIT ?CND3: ZERO? OBJ2 /?CND1 PRINTI " from" ICALL2 PRINT-THE,OBJ2 ?CND1: PRINTR " first.)" .FUNCT V-LOOK-THROUGH:ANY:0:1,INSIDE,RM FSET? PRSO,DOORBIT \?CCL3 FSET? PRSO,OPENBIT /?CTR5 FSET? PRSO,TRANSBIT \?CCL6 ?CTR5: CALL DOOR-ROOM,HERE,PRSO >RM ZERO? RM /?CCL11 CALL ROOM-PEEK,RM,TRUE-VALUE RSTACK ?CCL11: CALL1 NO-BEYOND RSTACK ?CCL6: CALL TOO-BAD-BUT,PRSO,STR?98 RSTACK ?CCL3: EQUAL? PRSO,WINDOW \?CCL13 CALL1 NO-BEYOND RSTACK ?CCL13: FSET? PRSO,PERSONBIT \?CCL16 PRINTR "You forgot to bring your X-ray glasses." ?CCL16: ZERO? INSIDE \FALSE FSET? PRSO,TRANSBIT \?CCL20 PRINTR "Everything looks bigger." ?CCL20: CALL2 YOU-CANT,STR?135 RSTACK .FUNCT NO-BEYOND:ANY:0:0 PRINTI "You can't tell what's beyond" ICALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT ROOM-PEEK:ANY:1:2,RM,SAFE,X,OHERE,OLIT,TXT EQUAL? RM,HERE \?CCL3 ICALL1 V-LOOK RTRUE ?CCL3: ZERO? SAFE \?CCL5 CALL2 SEE-INTO?,RM ZERO? STACK /FALSE ?CCL5: SET 'OHERE,HERE SET 'OLIT,LIT SET 'HERE,RM ICALL2 MAKE-ALL-PEOPLE,-12 CALL1 LIT? >LIT PRINTI "You peer " FSET? RM,SURFACEBIT \?CCL10 PRINTI "at" JUMP ?CND8 ?CCL10: PRINTI "into" ?CND8: ICALL2 HIM-HER-IT,RM PRINTC 58 CRLF CALL1 DESCRIBE-OBJECTS ZERO? STACK /?CCL13 SET 'X,TRUE-VALUE JUMP ?CND11 ?CCL13: GETP RM,P?LDESC >TXT ZERO? TXT /?CND11 SET 'X,TRUE-VALUE PRINT TXT CRLF ?CND11: ZERO? X \?CND15 PRINTI "You can't see anything suspicious." CRLF ?CND15: SET 'HERE,OHERE SET 'LIT,OLIT RTRUE .FUNCT SEE-INTO?:ANY:1:3,THERE,TELL?,IGNORE-DOOR,P,L,TBL,O ASSIGNED? 'TELL? /?CND1 SET 'TELL?,TRUE-VALUE ?CND1: SET 'P,0 ?PRG3: NEXTP HERE,P >P ZERO? P /?CCL6 LESS? P,LOW-DIRECTION \?CND5 ?CCL6: ZERO? TELL? /FALSE ICALL1 TELL-CANT-FIND RFALSE ?CND5: GETPT HERE,P >TBL PTSIZE TBL >L EQUAL? L,UEXIT \?CCL13 GET TBL,REXIT EQUAL? STACK,THERE \?PRG3 RTRUE ?CCL13: EQUAL? L,DEXIT \?CCL17 GET TBL,REXIT EQUAL? STACK,THERE \?PRG3 GET TBL,DEXITOBJ FSET? STACK,OPENBIT /TRUE GET TBL,DEXITOBJ CALL WALK-THRU-DOOR?,TBL,STACK,FALSE-VALUE ZERO? STACK \TRUE ZERO? IGNORE-DOOR \TRUE ZERO? TELL? /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(The door to that room is closed.)" CRLF RFALSE ?CCL17: EQUAL? L,CEXIT \?PRG3 GET TBL,REXIT EQUAL? STACK,THERE \?PRG3 GETB TBL,CEXITFLAG VALUE STACK ZERO? STACK \TRUE ZERO? TELL? /FALSE ICALL1 TELL-CANT-FIND RFALSE .FUNCT TELL-CANT-FIND:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(That place isn't close enough.)" .FUNCT V-LOOK-ON:ANY:0:0 FSET? PRSO,SURFACEBIT \?CCL3 CALL1 V-LOOK-INSIDE RSTACK ?CCL3: PRINTI "There's no good surface on" ICALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-LOOK-OUTSIDE:ANY:0:0 CALL2 V-LOOK-INSIDE,P?OUT RSTACK .FUNCT PRE-LOOK-UNDER:ANY:0:0 CALL1 ROOM-CHECK RSTACK .FUNCT V-LOOK-UNDER:ANY:0:0 EQUAL? PRSO,TEETH,EARS /?CTR2 EQUAL? PRSO,HEAD,HANDS,EYES \?CCL3 ?CTR2: CALL1 WONT-HELP RSTACK ?CCL3: CALL2 HELD?,PRSO ZERO? STACK /?CCL7 PRINTI "You're " FSET? PRSO,WORNBIT \?CCL10 PRINTI "wear" JUMP ?CND8 ?CCL10: PRINTI "hold" ?CND8: PRINTI "ing" ICALL2 PRINT-THE,PRSO PRINTR "!" ?CCL7: FSET? PRSO,PERSONBIT \?CCL12 PRINTI "Nope. Nothing hiding under" ICALL2 HIM-HER-IT,PRSO PRINTR "." ?CCL12: LOC PRSO EQUAL? STACK,HERE,LOCAL-GLOBALS \?CCL14 PRINTR "There's nothing there but dust." ?CCL14: PRINTR "That's not a bit useful." .FUNCT V-LOOK-UP:ANY:0:0,HR ZERO? PRSI /?CCL3 PRINTI "There's no information in" ICALL2 PRINT-THE,PRSI PRINTI " about" ICALL2 PRINT-THE,PRSO PRINTR "." ?CCL3: EQUAL? PRSO,ROOMS \?CCL5 CALL2 OUTSIDE?,HERE ZERO? STACK /?CCL8 ICALL PERFORM,V?EXAMINE,SKY RTRUE ?CCL8: PRINTR "The ceiling is decorated with swirly lines and patterns." ?CCL5: CALL2 YOU-CANT,STR?136 RSTACK .FUNCT PRE-MOVE:ANY:0:0 CALL2 HELD?,PRSO ZERO? STACK /FALSE PRINTR "Juggling isn't one of your talents." .FUNCT V-MOVE:ANY:0:0 FSET? PRSO,TAKEBIT \?CCL3 PRINTI "Moving" ICALL2 HIM-HER-IT,PRSO PRINTR " reveals nothing." ?CCL3: CALL1 YOU-CANT RSTACK .FUNCT PRE-MOVE-DIR:ANY:0:0 EQUAL? PRSI,INTDIR /FALSE ICALL1 DONT-UNDERSTAND RTRUE .FUNCT V-MOVE-DIR:ANY:0:0 PRINTI "You can't move" ICALL2 HIM-HER-IT,PRSO PRINTI " in any particular " PRINTD INTDIR PRINTR "." .FUNCT V-MUNG:ANY:0:0 FSET? PRSO,DOORBIT \?CCL3 ZERO? PRSI \?CCL3 FSET? PRSO,OPENBIT \?CCL8 PRINTR "You'd fly through the open door if you tried." ?CCL8: CALL2 UNLOCK-DOOR?,PRSO ZERO? STACK /?CCL10 PRINTR "Why don't you just open it instead?" ?CCL10: CALL1 IF-SPY RSTACK ?CCL3: FSET? PRSO,PERSONBIT /?CCL12 CALL1 IF-SPY RSTACK ?CCL12: CALL2 IKILL,STR?137 RSTACK .FUNCT V-NOD:ANY:0:0 EQUAL? PRSO,ROOMS /?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: ZERO? AWAITING-REPLY /?CCL5 ICALL2 PERFORM,V?YES RTRUE ?CCL5: ICALL PERFORM,V?HELLO,ROOMS RTRUE .FUNCT V-OPEN:ANY:0:0,F,STR FSET? PRSO,CONTBIT /?CCL3 FSET? PRSO,DOORBIT /?CCL3 EQUAL? PRSO,WINDOW /?CCL3 CALL1 IMPOSSIBLE RSTACK ?CCL3: FSET? PRSO,DOORBIT /?CTR7 EQUAL? PRSO,WINDOW /?CTR7 GETP PRSO,P?CAPACITY ZERO? STACK /?CCL8 ?CTR7: FSET? PRSO,LOCKED \?CND12 CALL2 UNLOCK-DOOR?,PRSO ZERO? STACK /?CCL16 FCLEAR PRSO,LOCKED ICALL FIRST-YOU,STR?138,PRSO ?CND12: FSET? PRSO,OPENBIT \?CCL19 CALL ALREADY,PRSO,STR?103 RSTACK ?CCL16: ICALL TOO-BAD-BUT,PRSO,STR?104 RTRUE ?CCL19: FSET PRSO,OPENBIT FSET? PRSO,DOORBIT /?CTR21 EQUAL? PRSO,WINDOW /?CTR21 FIRST? PRSO \?CTR21 FSET? PRSO,TRANSBIT \?CCL22 ?CTR21: CALL OKAY,PRSO,STR?103 RSTACK ?CCL22: FIRST? PRSO >F \?CCL28 NEXT? F /?CCL28 GETP F,P?FDESC >STR ZERO? STR /?CCL28 PRINTI "You open" ICALL2 HIM-HER-IT,PRSO PRINTC 46 CRLF PRINT STR CRLF RTRUE ?CCL28: PRINTI "You open" ICALL2 HIM-HER-IT,PRSO PRINTI " and see" ICALL2 PRINT-CONTENTS,PRSO PRINTR "." ?CCL8: CALL1 YOU-CANT RSTACK .FUNCT V-PANIC:ANY:0:0 PRINTR "Not surprised." .FUNCT V-PLAY:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "[Speaking of playing, you'd enjoy Infocom's other fictions, too!]" .FUNCT V-POUR:ANY:0:0 CALL1 HAR-HAR RSTACK .FUNCT V-PULL-TOGETHER:ANY:0:0 CALL1 DONT-UNDERSTAND RSTACK .FUNCT V-PUSH:ANY:0:0 CALL2 HACK-HACK,STR?139 RSTACK .FUNCT V-SPUT-ON:ANY:0:0 ICALL PERFORM,V?PUT,PRSI,PRSO RTRUE .FUNCT PRE-PUT:ANY:0:0 FCLEAR PRSO,WORNBIT EQUAL? PRSO,HANDS,HEAD \?CCL3 ICALL1 WONT-HELP RTRUE ?CCL3: IN? PRSO,GLOBAL-OBJECTS \?CCL5 ICALL2 NOT-HERE,PRSO RTRUE ?CCL5: EQUAL? PRSI,FALSE-VALUE,GLOBAL-HERE,FLOOR /FALSE IN? PRSI,GLOBAL-OBJECTS \?CCL9 ICALL2 NOT-HERE,PRSI RTRUE ?CCL9: CALL HELD?,PRSI,PRSO ZERO? STACK /FALSE CALL YOU-CANT,STR?140,PRSI,STR?141 RSTACK .FUNCT V-PUT:ANY:0:0 FSET? PRSI,SURFACEBIT /?CND1 FSET? PRSI,VEHBIT /?CND1 PRINTI "There's no good surface on" ICALL2 HIM-HER-IT,PRSI PRINTR "." ?CND1: CALL1 PUT-ON-OR-IN RSTACK .FUNCT TELL-FIND-NONE:ANY:1:2,STR,OBJ PRINTI "You search for " PRINT STR ZERO? OBJ /?CND1 ICALL2 PRINT-THE,OBJ ?CND1: PRINTR " but find none." .FUNCT PRE-PUT-IN:ANY:0:0 EQUAL? PRSI,PSEUDO-OBJECT \?CCL3 CALL1 PRE-PUT RSTACK ?CCL3: EQUAL? PRSI,HANDS,EYES \?CCL5 ICALL1 WONT-HELP RETURN 2 ?CCL5: FSET? PRSI,READBIT \?CCL9 ICALL1 WONT-HELP RETURN 2 ?CCL9: FSET? PRSI,CONTBIT /?CND1 ICALL TELL-FIND-NONE,STR?142,PRSI RETURN 2 ?CND1: FSET? PRSI,OPENBIT /?CND15 ICALL FIRST-YOU,STR?103,PRSI ?CND15: CALL1 PRE-PUT RSTACK .FUNCT V-PUT-IN:ANY:0:0 FSET? PRSI,OPENBIT /?CND1 FSET? PRSI,VEHBIT /?CND1 FSET? PRSI,CONTBIT /?CTR6 FSET? PRSI,DOORBIT \?CCL7 ?CTR6: ICALL TOO-BAD-BUT,PRSI,STR?98 RTRUE ?CCL7: PRINTI "You can't open" ICALL2 HIM-HER-IT,PRSI PRINTR "." ?CND1: CALL1 PUT-ON-OR-IN RSTACK .FUNCT PUT-ON-OR-IN:ANY:0:0,?TMP1,?TMP2 ZERO? PRSI \?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: EQUAL? PRSI,PRSO \?CCL5 CALL1 HAR-HAR RSTACK ?CCL5: IN? PRSO,PRSI \?CCL7 ICALL2 TOO-BAD-BUT,PRSO PRINTI " is already " FSET? PRSI,SURFACEBIT \?CCL10 PUSH STR?101 JUMP ?CND8 ?CCL10: PUSH STR?144 ?CND8: PRINT STACK ICALL2 HIM-HER-IT,PRSI PRINTR "!" ?CCL7: CALL2 WEIGHT,PRSI >?TMP2 GETP PRSO,P?SIZE ADD ?TMP2,STACK >?TMP1 GETP PRSI,P?CAPACITY GRTR? ?TMP1,STACK \?CCL12 PRINT NOT-ENOUGH-ROOM RTRUE ?CCL12: CALL2 HELD?,PRSO ZERO? STACK \?CCL14 CALL1 ITAKE ZERO? STACK /TRUE ?CCL14: MOVE PRSO,PRSI FSET PRSO,TOUCHBIT FSET? PRSI,PERSONBIT \?CND17 FSET? PRSO,WEARBIT \?CND17 FSET PRSO,WORNBIT ?CND17: PRINTR "Okay." .FUNCT WEIGHT:ANY:1:1,OBJ,CONT,WT FIRST? OBJ >CONT /?PRG3 RETURN WT ?PRG3: GETP CONT,P?SIZE ADD WT,STACK >WT NEXT? CONT >CONT /?PRG3 RETURN WT .FUNCT V-PUT-UNDER:ANY:0:0 CALL1 WONT-HELP RSTACK .FUNCT PRE-SREAD:ANY:0:0 ICALL PERFORM,V?READ,PRSI,PRSO RTRUE .FUNCT V-SREAD:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT PRE-READ:ANY:0:0,VAL IN? PRSO,GLOBAL-OBJECTS \FALSE CALL2 NOT-HERE,PRSO RSTACK .FUNCT V-READ:ANY:0:0 FSET? PRSO,READBIT /?CCL3 CALL1 YOU-CANT RSTACK ?CCL3: GETP PRSO,P?TEXT PRINT STACK CRLF RTRUE .FUNCT V-REFUSE:ANY:0:0 SET 'PRSA,V?TAKE CALL1 DONT-F RSTACK .FUNCT V-RELAX:ANY:0:0 PRINT ZEN CRLF RTRUE .FUNCT V-REMOVE:ANY:0:0 FSET? PRSO,WORNBIT \?CCL3 ICALL PERFORM,V?TAKE-OFF,PRSO RTRUE ?CCL3: ICALL PERFORM,V?TAKE,PRSO RTRUE .FUNCT V-RING:ANY:0:0 CALL1 YOU-CANT RSTACK .FUNCT V-RUB:ANY:0:0 FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 EQUAL? PRSO,PLAYER /?CCL3 CALL1 FACE-RED RSTACK ?CCL3: CALL2 HACK-HACK,STR?146 RSTACK .FUNCT V-SAY:ANY:0:0,P CALL1 QCONTEXT-GOOD? ZERO? STACK /?CCL3 ICALL PERFORM,V?TELL,QCONTEXT RTRUE ?CCL3: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL5 ICALL TELL-I-ASSUME,P,STR?147 ICALL PERFORM,V?TELL,P RTRUE ?CCL5: CALL1 NOT-CLEAR-WHOM RSTACK .FUNCT PRE-SEARCH:ANY:0:0 CALL1 ROOM-CHECK RSTACK .FUNCT V-SEARCH:ANY:0:0,OBJ IN? PRSO,ROOMS \?CCL3 ICALL PERFORM,PRSA,GLOBAL-HERE RTRUE ?CCL3: FSET? PRSO,PERSONBIT \?CCL5 FIRST? PRSO >OBJ \?CCL5 FSET OBJ,TAKEBIT FCLEAR OBJ,NDESCBIT FCLEAR OBJ,WORNBIT FCLEAR OBJ,SECRETBIT ICALL2 THIS-IS-IT,OBJ MOVE OBJ,PLAYER PRINTI "You find " ICALL2 PRINTA,OBJ PRINTI " and take it. " PRINTC 89 PRINT OU-STOP-SEARCHING PRINTR "." ?CCL5: FSET? PRSO,DOORBIT \?CCL9 CALL1 NOTHING-SPECIAL RSTACK ?CCL9: FSET? PRSO,CONTBIT /?CTR10 FSET? PRSO,SURFACEBIT \?CCL11 ?CTR10: ICALL PERFORM,V?LOOK-INSIDE,PRSO RTRUE ?CCL11: CALL1 NOTHING-SPECIAL RSTACK .FUNCT PRE-SSEARCH-FOR:ANY:0:0 ICALL PERFORM,V?SEARCH-FOR,PRSI,PRSO RTRUE .FUNCT V-SSEARCH-FOR:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT PRE-SEARCH-FOR:ANY:0:0,OBJ CALL1 ROOM-CHECK ZERO? STACK /FALSE RTRUE .FUNCT V-SEARCH-FOR:ANY:0:0 IN? PRSO,ROOMS \?CCL3 ICALL PERFORM,PRSA,GLOBAL-HERE,PRSI RTRUE ?CCL3: FSET? PRSO,PERSONBIT \?CCL5 IN? PRSI,PRSO \?CCL8 PRINTI "Indeed," ICALL HE-SHE-IT,PRSO,0,STR?62 ICALL2 HIM-HER-IT,PRSI PRINTR "." ?CCL8: ICALL2 START-SENTENCE,PRSO PRINTI " doesn't have" IN? PRSI,GLOBAL-OBJECTS \?CCL11 ICALL2 PRINT-THE,PRSI PRINTR "." ?CCL11: ZERO? PRSI \?CCL13 PRINTR " that." ?CCL13: ICALL2 PRINT-THE,PRSI PRINTI " hidden on" ICALL HIM-HER-IT,PRSO,0,TRUE-VALUE PRINTR " person." ?CCL5: FSET? PRSO,CONTBIT \?CCL15 FSET? PRSO,OPENBIT /?CCL15 PRINTI "You'll have to open" ICALL2 HIM-HER-IT,PRSO PRINTR " first." ?CCL15: IN? PRSI,PRSO \?CCL19 PRINTI "How observant you are! There" ICALL HE-SHE-IT,PRSI,0,STR?61 PRINTR "!" ?CCL19: ZERO? PRSI \?CCL22 CALL1 YOU-CANT RSTACK ?CCL22: PRINTI "You don't find" FSET? PRSI,SECRETBIT \?CCL25 PRINTI " it" JUMP ?CND23 ?CCL25: ICALL2 HIM-HER-IT,PRSI ?CND23: PRINTR " there." .FUNCT V-SHAKE:ANY:0:0,X FSET? PRSO,PERSONBIT \?CCL3 PRINTR "Be real." ?CCL3: FSET? PRSO,TAKEBIT /?CCL5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You can't shake it if you can't take it!)" ?CCL5: FSET? PRSO,OPENBIT /?CCL7 FIRST? PRSO \?CCL7 PRINTI "It sounds as if there is something inside" ICALL2 HIM-HER-IT,PRSO PRINTR "." ?CCL7: FSET? PRSO,OPENBIT \?CCL11 FIRST? PRSO >X \?CCL11 PRINTI "Right " CALL1 GROUND-DESC PRINT STACK PRINTI " spill" NEXT? X /?CND14 PRINTC 115 ?CND14: ICALL ROB,PRSO,HERE,TRUE-VALUE CRLF RTRUE ?CCL11: PRINTI "You hear nothing inside" ICALL2 HIM-HER-IT,PRSO PRINTR "." .FUNCT V-SHOOT:ANY:0:0 ZERO? PRSI /?PRD5 LOC PRSI EQUAL? STACK,WINNER /?CCL3 ?PRD5: CALL FIND-IN,WINNER,WEAPONBIT ZERO? STACK \?CCL3 PRINTR "You're not holding anything to shoot with." ?CCL3: CALL2 IKILL,STR?149 RSTACK .FUNCT PRE-SSHOOT:ANY:0:0 ICALL PERFORM,V?SHOOT,PRSI,PRSO RTRUE .FUNCT V-SSHOOT:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT V-SHOW:ANY:0:0 EQUAL? PRSO,PLAYER \?CCL3 SET 'WINNER,PLAYER CALL2 VISIBLE?,PRSO ZERO? STACK /?CCL6 ICALL PERFORM,V?EXAMINE,PRSI RTRUE ?CCL6: ICALL PERFORM,V?FIND,PRSI RTRUE ?CCL3: FSET? PRSO,PERSONBIT \?CTR7 FSET? PRSO,MUNGBIT \?CCL8 ?CTR7: PRINTI "Don't wait for" ICALL2 HIM-HER-IT,PRSO PRINTR " to applaud." ?CCL8: CALL1 WHO-CARES RSTACK .FUNCT PRE-SSHOW:ANY:0:0,P ZERO? PRSI /?CCL3 IN? PRSI,ROOMS \?CND4 ICALL PERFORM,V?TAKE-TO,PRSO,PRSI RTRUE ?CND4: ICALL PERFORM,V?SHOW,PRSI,PRSO RTRUE ?CCL3: CALL2 HELD?,PRSO ZERO? STACK \?CCL7 LOC PRSO FSET? STACK,PERSONBIT \?CCL10 ICALL PERFORM,V?TAKE,PRSO RTRUE ?CCL10: ICALL TELL-I-ASSUME,PRSO,STR?150 ICALL PERFORM,V?ASK-CONTEXT-ABOUT,PRSO RTRUE ?CCL7: CALL1 QCONTEXT-GOOD? ZERO? STACK /?CCL12 ICALL PERFORM,V?SHOW,QCONTEXT,PRSO RTRUE ?CCL12: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL14 ICALL TELL-I-ASSUME,P,STR?151 ICALL PERFORM,V?SHOW,P,PRSO RTRUE ?CCL14: ICALL TELL-I-ASSUME,PLAYER,STR?151 ICALL PERFORM,V?SHOW,PLAYER,PRSO RTRUE .FUNCT V-SSHOW:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT PRE-SIT:ANY:0:0 CALL1 ROOM-CHECK RSTACK .FUNCT V-SIT:ANY:0:1,LIE? EQUAL? WINNER,PLAYER \?CCL3 FSET? PRSO,VEHBIT /?CTR2 EQUAL? PRSO,FLOOR,HERE,GLOBAL-HERE \?CCL3 ?CTR2: PRINTI "You're now " ZERO? LIE? \?CCL11 PRINTI "sitt" JUMP ?CND9 ?CCL11: PRINTI "ly" ?CND9: FSET? PRSO,VEHBIT \?CND12 MOVE PLAYER,PRSO ?CND12: PRINTI "ing " FSET? PRSO,SURFACEBIT \?CCL16 PRINTI "on" JUMP ?CND14 ?CCL16: PRINTI "in" ?CND14: ICALL2 PRINT-THE,PRSO PRINTR "." ?CCL3: CALL1 WONT-HELP RSTACK .FUNCT V-SIT-AT:ANY:0:0 CALL1 V-SIT RSTACK .FUNCT V-SLAP:ANY:0:0 EQUAL? PRSI,ROOMS \?CND1 SET 'PRSI,FALSE-VALUE ?CND1: EQUAL? PRSO,PLAYER \?CCL5 PRINTR "That sounds like a sign you could wear on your back." ?CCL5: FSET? PRSO,PERSONBIT /?CCL7 CALL1 IF-SPY RSTACK ?CCL7: FSET? PRSO,MUNGBIT \?CCL9 PRINTI "If" ICALL2 HE-SHE-IT,PRSO PRINTI " could," ICALL2 HE-SHE-IT,PRSO PRINTR " would slap you right back." ?CCL9: CALL1 FACE-RED RSTACK .FUNCT IF-SPY:ANY:0:0 ZERO? PRSI \?CCL3 PRINTI "You give" ICALL2 HIM-HER-IT,PRSO PRINTI " a swift " EQUAL? P-PRSA-WORD,W?KICK \?CCL6 PRINTI "kick" JUMP ?CND1 ?CCL6: PRINTI "hand chop" JUMP ?CND1 ?CCL3: PRINTI "You swing" ICALL2 HIM-HER-IT,PRSI PRINTI " at" ICALL2 HIM-HER-IT,PRSO ?CND1: PRINTI ", but" ICALL2 HE-SHE-IT,PRSO PRINTR " seems indestructible." .FUNCT FACE-RED:ANY:0:1,P,X ZERO? P \?CND1 SET 'P,PRSO ?CND1: ICALL2 UNSNOOZE,P EQUAL? FOLLOWER,P \?CND3 SET 'FOLLOWER,FALSE-VALUE ?CND3: GETP P,P?LDESC EQUAL? STACK,4 /?CND5 PUTP P,P?LDESC,20 ?CND5: ICALL HE-SHE-IT,P,1 PRINTR " gives you a good slap. It hurts, too!" .FUNCT V-SMELL:ANY:0:0 ICALL HE-SHE-IT,PRSO,1,STR?152 PRINTI " just like " ICALL2 PRINTA,PRSO PRINTR "!" .FUNCT V-SMILE:ANY:0:0 PRINTR "How nice." .FUNCT V-SORRY:ANY:0:0 CALL2 GRAB-ATTENTION,PRSO ZERO? STACK \?CCL3 RETURN 2 ?CCL3: PUTP PRSO,P?LDESC,3 PRINTR """Apology accepted.""" .FUNCT V-STAND:ANY:0:0,P LOC WINNER FSET? STACK,VEHBIT \?CCL3 LOC WINNER ICALL PERFORM,V?DISEMBARK,STACK RTRUE ?CCL3: IN? WINNER,HERE /?CCL5 CALL1 OWN-FEET RSTACK ?CCL5: ZERO? PRSO /?CCL8 FSET? PRSO,TAKEBIT \?CCL8 CALL1 WONT-HELP RSTACK ?CCL8: CALL ALREADY,WINNER,STR?153 RSTACK .FUNCT V-STOP:ANY:0:0 EQUAL? PRSO,FALSE-VALUE,GLOBAL-HERE \?CCL3 PRINTR "Hey, no problem." ?CCL3: FSET? PRSO,PERSONBIT \?CCL5 ICALL PERFORM,V?$CALL,PRSO RTRUE ?CCL5: ICALL PERFORM,V?LAMP-OFF,PRSO RTRUE .FUNCT V-SWIM:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,WINNER,1 PRINTI " can't swim " ZERO? PRSO /?CCL3 PRINTI "in" ICALL2 HIM-HER-IT,PRSO JUMP ?CND1 ?CCL3: CALL1 GROUND-DESC PRINT STACK ?CND1: PRINTR ".)" .FUNCT PRE-TAKE:ANY:0:0,L EQUAL? PRSO,WALL,FLOOR \?CCL3 CALL1 HAR-HAR RSTACK ?CCL3: EQUAL? PRSO,YOU,HANDS /FALSE LOC PRSO >L EQUAL? L,GLOBAL-OBJECTS \?CCL7 CALL2 NOT-HERE,PRSO RSTACK ?CCL7: LOC WINNER EQUAL? PRSO,STACK \?CCL9 PRINTR "You are in it!" ?CCL9: ZERO? L /?CCL11 FSET? L,CONTBIT \?CCL11 FSET? L,OPENBIT /?CCL11 ICALL TOO-BAD-BUT,L,STR?98 RTRUE ?CCL11: ZERO? PRSI /?CCL16 EQUAL? PRSI,WALL,L \?CCL19 SET 'PRSI,FALSE-VALUE RFALSE ?CCL19: FSET? PRSI,SURFACEBIT /?CCL21 FSET? PRSI,OPENBIT /?CCL21 FSET? PRSI,PERSONBIT /?CCL21 ICALL TOO-BAD-BUT,PRSI,STR?98 RTRUE ?CCL21: EQUAL? PRSI,L /FALSE ICALL HE-SHE-IT,PRSO,1,STR?61 PRINTI "n't " FSET? PRSI,PERSONBIT \?CCL29 PRINTI "being held by" JUMP ?CND27 ?CCL29: FSET? PRSI,SURFACEBIT \?CCL32 PRINTI "on" JUMP ?CND27 ?CCL32: PRINTI "in" ?CND27: ICALL2 PRINT-THE,PRSI PRINTR "." ?CCL16: CALL1 PRE-TAKE-WITH RSTACK .FUNCT PRE-TAKE-WITH:ANY:0:0,X EQUAL? PRSO,YOU /FALSE CALL2 META-LOC,PRSO EQUAL? STACK,GLOBAL-OBJECTS \?CCL5 CALL2 HELD?,PRSO ZERO? STACK \FALSE FSET? PRSO,PERSONBIT /FALSE CALL2 NOT-HERE,PRSO RSTACK ?CCL5: IN? PRSO,WINNER \?CCL12 ICALL2 ALREADY,PLAYER PRINTI "holding" ICALL2 PRINT-THE,PRSO PRINTR "!)" ?CCL12: LOC PRSO FSET? STACK,CONTBIT \?CCL14 LOC PRSO FSET? STACK,OPENBIT /?CCL14 CALL2 YOU-CANT,STR?154 RSTACK ?CCL14: IN? WINNER,PRSO \FALSE CALL NOUN-USED?,PRSO,W?DOOR ZERO? STACK \FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " in" ICALL2 HIM-HER-IT,PRSO PRINTR ", nitwit!)" .FUNCT V-TAKE:ANY:0:0 CALL1 ITAKE EQUAL? STACK,TRUE-VALUE \FALSE ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " now holding" ICALL2 PRINT-THE,PRSO PRINTR "." .FUNCT V-TAKE-OFF:ANY:0:0 FSET? PRSO,WORNBIT \?CCL3 FCLEAR PRSO,WORNBIT PRINTI "Okay," LOC PRSO ICALL HE-SHE-IT,STACK,0,STR?61 PRINTI " no longer wearing" MOVE PRSO,WINNER ICALL2 HIM-HER-IT,PRSO PRINTR "." ?CCL3: LOC PRSO ICALL HE-SHE-IT,STACK,1,STR?61 PRINTI "n't wearing" ICALL2 HIM-HER-IT,PRSO PRINTR "!" .FUNCT V-TAKE-TO:ANY:0:0 ICALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT V-DISEMBARK:ANY:0:0 CALL1 ROOM-CHECK ZERO? STACK \TRUE EQUAL? PRSO,GLOBAL-HERE,HERE,ROOMS \?CCL5 EQUAL? WINNER,PLAYER \?CCL8 IN? PLAYER,HERE /?CCL8 CALL1 OWN-FEET RSTACK ?CCL8: ICALL2 DO-WALK,P?OUT RTRUE ?CCL5: LOC PRSO EQUAL? STACK,WINNER \?CCL12 PRINTI "You don't need to take" ICALL2 HIM-HER-IT,PRSO PRINTI " out to use" ICALL2 HIM-HER-IT,PRSO PRINTR "." ?CCL12: LOC WINNER EQUAL? STACK,PRSO /?CCL14 IN? PLAYER,PRSO /?CCL14 PRINTI "You're not " FSET? PRSO,SURFACEBIT \?CCL19 PRINTI "on" JUMP ?CND17 ?CCL19: PRINTI "in" ?CND17: ICALL2 HIM-HER-IT,PRSO PRINTI "! " RETURN 2 ?CCL14: CALL1 OWN-FEET RSTACK .FUNCT OWN-FEET:ANY:0:0 MOVE WINNER,HERE ICALL HE-SHE-IT,WINNER,1,STR?61 PRINTI " on" ICALL HIM-HER-IT,WINNER,0,TRUE-VALUE PRINTR " own feet again." .FUNCT V-HOLD-UP:ANY:0:0 EQUAL? PRSO,ROOMS \?CCL3 ICALL2 PERFORM,V?STAND RTRUE ?CCL3: CALL1 WONT-HELP RSTACK .FUNCT V-TELL:ANY:0:0,P EQUAL? PRSO,PLAYER \?CCL3 EQUAL? WINNER,PLAYER /?CCL6 SET 'P,WINNER SET 'WINNER,PLAYER ICALL PERFORM,V?ASK,P RTRUE ?CCL6: ZERO? QCONTEXT /?CCL8 SET 'QCONTEXT,FALSE-VALUE ZERO? P-CONT /?CCL11 SET 'WINNER,PLAYER RETURN WINNER ?CCL11: PRINTR "Okay, you're not talking to anyone else." ?CCL8: ICALL2 WONT-HELP-TO-TALK-TO,PLAYER SET 'P-CONT,FALSE-VALUE RETURN 2 ?CCL3: FSET? PRSO,PERSONBIT \?CCL15 FSET? PRSO,MUNGBIT /?CCL15 ICALL2 UNSNOOZE,PRSO SET 'QCONTEXT,PRSO ZERO? P-CONT /?CCL20 SET 'CLOCK-WAIT,TRUE-VALUE SET 'WINNER,PRSO RTRUE ?CCL20: PRINTI "Hmmm ..." ICALL2 PRINT-THE,PRSO PRINTR " looks at you expectantly, as if you seemed to be about to talk." ?CCL15: ICALL2 WONT-HELP-TO-TALK-TO,PRSO SET 'P-CONT,FALSE-VALUE RETURN 2 .FUNCT PRE-STELL-ABOUT:ANY:0:0 ICALL PERFORM,V?TELL-ABOUT,PRSI,PRSO RTRUE .FUNCT V-STELL-ABOUT:ANY:0:0 CALL1 V-FOO RSTACK .FUNCT PRE-TELL-ABOUT:ANY:0:0,P EQUAL? PRSO,PLAYER \?CCL3 CALL1 QCONTEXT-GOOD? ZERO? STACK /?CCL6 ICALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSI RTRUE ?CCL6: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL8 ICALL TELL-I-ASSUME,P,STR?117 ICALL PERFORM,V?ASK-ABOUT,P,PRSI RTRUE ?CCL8: ICALL1 ARENT-TALKING RTRUE ?CCL3: FSET? PRSI,SEENBIT /?CCL11 FSET? PRSI,TOUCHBIT /?CCL11 ICALL2 NOT-FOUND,PRSI RTRUE ?CCL11: CALL1 PRE-ASK RSTACK .FUNCT V-TELL-ABOUT:ANY:0:0,P PRINTI "It doesn't look as if" ICALL2 PRINT-THE,PRSO PRINTR " is interested." .FUNCT PRE-TALK-ABOUT:ANY:0:0,P EQUAL? WINNER,PLAYER /?CCL3 SET 'P,WINNER SET 'WINNER,PLAYER ICALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE ?CCL3: CALL1 QCONTEXT-GOOD? ZERO? STACK /?CCL5 ICALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO RTRUE ?CCL5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE ICALL TELL-I-ASSUME,P,STR?155 ICALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE .FUNCT V-TALK-ABOUT:ANY:0:0 CALL1 ARENT-TALKING RSTACK .FUNCT V-THANK:ANY:0:0,P ZERO? PRSO /?CCL3 FSET? PRSO,PERSONBIT \?CCL6 FSET? PRSO,MUNGBIT /?CCL6 PRINTI "You do so, but" ICALL2 PRINT-THE,PRSO PRINTR " seems less than overjoyed." ?CCL6: CALL1 HAR-HAR RSTACK ?CCL3: CALL1 QCONTEXT-GOOD? >P ZERO? P \?CTR10 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL11 ?CTR10: ICALL PERFORM,V?THANK,P RTRUE ?CCL11: PRINTR "You're more than welcome." .FUNCT V-THROW:ANY:0:0 CALL1 IDROP ZERO? STACK /FALSE PRINTR "Thrown." .FUNCT V-THROW-AT:ANY:0:0 CALL1 IDROP ZERO? STACK /TRUE ICALL HE-SHE-IT,PRSI,1,STR?65 PRINTI "n't duck" PRINTI " as" ICALL2 HE-SHE-IT,PRSO PRINTR " flies by." .FUNCT V-THROW-IN-TOWEL:ANY:0:0 EQUAL? PRSO,TOWEL \?CCL3 CALL1 V-QUIT RSTACK ?CCL3: CALL1 DONT-UNDERSTAND RSTACK .FUNCT PRE-THROW-THROUGH:ANY:0:0 FCLEAR PRSO,WORNBIT RFALSE .FUNCT V-THROW-THROUGH:ANY:0:0 FSET? PRSO,PERSONBIT /?CCL3 PRINTR "Let's not resort to vandalism, please." ?CCL3: CALL1 V-THROW RSTACK .FUNCT V-TURN:ANY:0:0 FSET? PRSO,DOORBIT \?CCL3 FSET? PRSO,OPENBIT \?CCL3 ICALL PERFORM,V?CLOSE,PRSO RTRUE ?CCL3: PRINTR "What do you want that to do?" .FUNCT V-UNLOCK:ANY:0:0 FSET? PRSO,DOORBIT /?CTR2 FSET? PRSO,CONTBIT \?CCL3 GETP PRSO,P?CAPACITY ZERO? STACK /?CCL3 ?CTR2: FSET? PRSO,LOCKED /?CCL10 CALL ALREADY,PRSO,STR?105 RSTACK ?CCL10: CALL2 UNLOCK-DOOR?,PRSO ZERO? STACK \?CCL12 CALL1 YOU-CANT RSTACK ?CCL12: FCLEAR PRSO,LOCKED CALL OKAY,PRSO,STR?105 RSTACK ?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 ICALL HE-SHE-IT,PRSO,1,STR?61 PRINTR "n't locked!)" .FUNCT V-USE:ANY:0:0 CALL1 MORE-SPECIFIC RSTACK .FUNCT V-WAIT:ANY:0:3,NUM,WHO,INT,WHO-WAIT,VAL,HR,RESULT ASSIGNED? 'NUM /?CND1 SET 'NUM,-1 ?CND1: SET 'RESULT,TRUE-VALUE EQUAL? -1,NUM \?CND3 SET 'NUM,10 ?CND3: ZERO? INT \?CND5 FSET? PRSO,PERSONBIT /?CND5 EQUAL? PRSO,TURN,INTNUM /?CND5 PRINT I-ASSUME PRINTI " Wait " PRINTN NUM PRINTI " minute" EQUAL? NUM,1 /?CND10 PRINTC 115 ?CND10: PRINTI ".]" CRLF ?CND5: SET 'HR,HERE ZERO? INT \?CND12 PRINTI "Time passes..." CRLF ?CND12: DEC 'NUM ?PRG14: DLESS? 'NUM,0 \?CCL18 SET 'KEEP-WAITING,FALSE-VALUE RETURN RESULT ?CCL18: CALL1 CLOCKER >VAL ZERO? VAL /?CCL20 EQUAL? VAL,M-FATAL /?CTR22 EQUAL? HR,HERE /?CCL23 ?CTR22: SET 'CLOCK-WAIT,TRUE-VALUE SET 'RESULT,M-FATAL RETURN RESULT ?CCL23: ZERO? WHO /?CCL27 IN? WHO,HERE \?CCL27 SET 'CLOCK-WAIT,TRUE-VALUE ICALL2 NOT-IT,WHO ICALL2 START-SENTENCE,WHO PRINTI ", for wh" FSET? WHO,PERSONBIT \?CCL32 PRINTI "om" JUMP ?CND30 ?CCL32: PRINTI "ich" ?CND30: PRINTI " you're waiting, has arrived." CRLF RETURN RESULT ?CCL27: INC 'WHO-WAIT ZERO? KEEP-WAITING /?CND33 ICALL1 UPDATE-STATUS-LINE JUMP ?PRG14 ?CND33: PRINTI "Do you want to keep " CALL2 VERB-PRINT,TRUE-VALUE >VAL CALL1 YES? ZERO? STACK /?CCL37 ICALL1 UPDATE-STATUS-LINE JUMP ?PRG14 ?CCL37: SET 'CLOCK-WAIT,TRUE-VALUE SET 'RESULT,M-FATAL RETURN RESULT ?CCL20: ZERO? WHO /?CCL39 IGRTR? 'WHO-WAIT,30 \?CCL39 CALL2 START-SENTENCE,WHO >VAL PRINTI " still hasn't arrived. Do you want to keep waiting?" CALL1 YES? ZERO? STACK \?CND42 RETURN RESULT ?CND42: SET 'WHO-WAIT,0 ICALL1 UPDATE-STATUS-LINE JUMP ?PRG14 ?CCL39: ICALL1 UPDATE-STATUS-LINE JUMP ?PRG14 .FUNCT V-WAIT-FOR:ANY:0:0,WHO EQUAL? -1,P-NUMBER /?CCL3 EQUAL? PRSO,INTNUM,TURN,ROOMS \?CCL3 CALL2 V-WAIT,P-NUMBER RSTACK ?CCL3: EQUAL? PRSO,GLOBAL-HERE,TURN,ROOMS \?CCL8 CALL1 V-WAIT RSTACK ?CCL8: EQUAL? PRSO,PLAYER \?CCL10 CALL ALREADY,PLAYER,STR?124 RSTACK ?CCL10: FSET? PRSO,PERSONBIT \?CCL12 CALL2 META-LOC,PRSO EQUAL? STACK,HERE \?CCL16 CALL ALREADY,PRSO,STR?124 RSTACK ?CCL16: CALL V-WAIT,10000,PRSO RSTACK ?CCL12: PRINTR "Not a good idea. You might wait forever." .FUNCT V-WAIT-UNTIL:ANY:0:0,N EQUAL? -1,P-NUMBER /?CCL3 EQUAL? PRSO,INTNUM,TURN,ROOMS \?CCL3 SET 'N,P-NUMBER SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(It's already past that time!)" ?CCL3: CALL2 YOU-CANT,STR?156 RSTACK .FUNCT V-ALARM:ANY:0:0 EQUAL? PRSO,ROOMS \?CCL3 ICALL PERFORM,V?ALARM,WINNER RTRUE ?CCL3: CALL TOO-BAD-BUT,PRSO,STR?157 RSTACK .FUNCT DO-WALK:ANY:1:1,DIR,P SET 'P-WALK-DIR,DIR CALL PERFORM,V?WALK,DIR RSTACK .FUNCT V-WALK:ANY:0:0,PT,PTS,STR,RM ZERO? P-WALK-DIR \?CND1 EQUAL? PRSO,P?IN \?CCL5 IN? P-IT-OBJECT,ROOMS /?CTR4 FSET? P-IT-OBJECT,VEHBIT /?CTR4 FSET? P-IT-OBJECT,CONTBIT \?CCL5 ?CTR4: ICALL2 TELL-I-ASSUME,P-IT-OBJECT ICALL PERFORM,V?THROUGH,P-IT-OBJECT RTRUE ?CCL5: ICALL1 V-WALK-AROUND RETURN 2 ?CND1: LOC WINNER GETPT STACK,PRSO >PT ZERO? PT /?CCL15 PTSIZE PT >PTS EQUAL? PTS,UEXIT \?CCL18 GET PT,REXIT CALL2 GOTO,STACK ZERO? STACK /TRUE ICALL1 OKAY RTRUE ?CCL18: EQUAL? PTS,NEXIT \?CCL22 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 GET PT,NEXITSTR PRINT STACK PRINTC 41 CRLF RETURN 2 ?CCL22: EQUAL? PTS,FEXIT \?CCL26 GET PT,FEXITFCN CALL STACK >RM ZERO? RM /?PRG32 CALL2 GOTO,RM ZERO? STACK /TRUE ICALL1 OKAY RTRUE ?PRG32: RETURN 2 ?CCL26: EQUAL? PTS,CEXIT \?CCL35 GETB PT,CEXITFLAG VALUE STACK ZERO? STACK /?CCL38 GET PT,REXIT CALL2 GOTO,STACK ZERO? STACK /TRUE ICALL1 OKAY RTRUE ?CCL38: GET PT,CEXITSTR >STR ZERO? STR /?CCL42 PRINT STR CRLF RETURN 2 ?CCL42: ICALL2 YOU-CANT,STR?73 RETURN 2 ?CCL35: EQUAL? PTS,DEXIT \FALSE CALL2 WALK-THRU-DOOR?,PT ZERO? STACK /?PRG54 GET PT,REXIT CALL2 GOTO,STACK ZERO? STACK /TRUE ICALL1 OKAY RTRUE ?PRG54: RETURN 2 ?CCL15: EQUAL? PRSO,P?IN,P?OUT \?CCL57 CALL1 V-WALK-AROUND RSTACK ?CCL57: EQUAL? PRSO,P?UP \?CCL59 ICALL PERFORM,V?CLIMB-UP,STAIRS RTRUE ?CCL59: EQUAL? PRSO,P?DOWN \?CCL61 ICALL PERFORM,V?CLIMB-DOWN,STAIRS RTRUE ?CCL61: ICALL2 YOU-CANT,STR?73 RETURN 2 .FUNCT UNLOCK-DOOR?:ANY:1:1,DR EQUAL? HERE,DR /TRUE RTRUE .FUNCT WALK-THRU-DOOR?:ANY:1:3,PT,OBJ,TELL?,RM ASSIGNED? 'TELL? /?CND1 SET 'TELL?,TRUE-VALUE ?CND1: ZERO? OBJ \?CND3 GET PT,DEXITOBJ >OBJ ?CND3: FSET? OBJ,OPENBIT /TRUE FSET? OBJ,SECRETBIT \?CCL9 FSET? OBJ,TOUCHBIT /?CCL9 EQUAL? FALSE-VALUE,TELL?,VERBOSITY /FALSE FSET? HERE,SECRETBIT /?CCL16 ICALL2 YOU-CANT,STR?73 RFALSE ?CCL16: ZERO? LIT \?CCL18 ICALL2 NOT-FOUND,OBJ RFALSE ?CCL18: EQUAL? PRSA,V?WALK-TO /TRUE ICALL2 OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ RTRUE ?CCL9: FSET? OBJ,LOCKED /?CCL22 EQUAL? PRSA,V?WALK-TO /TRUE FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT EQUAL? FALSE-VALUE,TELL?,VERBOSITY /TRUE ICALL2 OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ RTRUE ?CCL22: ZERO? PT /?CCL28 GET PT,DEXITSTR >RM ZERO? RM /?CCL28 ZERO? TELL? /FALSE PRINT RM CRLF RFALSE ?CCL28: ZERO? TELL? /FALSE CALL2 UNLOCK-DOOR?,OBJ ZERO? STACK /?CCL37 EQUAL? PRSA,V?WALK-TO /TRUE ZERO? VERBOSITY /TRUE ICALL2 OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ RTRUE ?CCL37: ICALL TOO-BAD-BUT,OBJ,STR?104 ICALL2 THIS-IS-IT,OBJ RFALSE .FUNCT OPEN-DOOR-AND-CLOSE-IT-AGAIN:ANY:1:1,OBJ FSET OBJ,SEENBIT EQUAL? WINNER,PLAYER \TRUE PRINTI "(You " FSET? OBJ,LOCKED \?CND3 FCLEAR OBJ,LOCKED PRINTI "unlock and " ?CND3: PRINTI "open the " PRINTI "door" FSET? OBJ,SECRETBIT \?CCL8 FSET OBJ,OPENBIT JUMP ?CND6 ?CCL8: PRINTI " and close it again" ?CND6: PRINTR ".)" .FUNCT V-WALK-AROUND:ANY:0:0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 91 PRINT WHICH-DIR PRINTI "] " RETURN 2 .FUNCT WHO-KNOWS?:ANY:1:1,OBJ SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(You have no idea where" ICALL2 PRINT-THE,PRSO PRINTR " is.)" .FUNCT WALK-WITHIN-ROOM:ANY:0:0 CALL NO-NEED,STR?159,HERE RSTACK .FUNCT V-WALK-TO:ANY:0:0 IN? PRSO,HERE /?CTR2 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK /?CCL3 ?CTR2: ICALL HE-SHE-IT,PRSO,1 PRINTR "'s here!" ?CCL3: CALL1 V-WALK-AROUND RSTACK .FUNCT ENTER-ROOM:ANY:0:0,VAL CALL1 LIT? >LIT GETP HERE,P?ACTION ICALL STACK,M-ENTER CALL1 V-FIRST-LOOK >VAL GETP HERE,P?ACTION ICALL STACK,M-FLASH RETURN VAL .FUNCT V-RUN-OVER:ANY:0:0 PRINTR "That doesn't make much sense." .FUNCT V-YELL:ANY:0:0 PRINTR "You begin to get a sore throat." .FUNCT V-YES:ANY:0:1,NO?,PER SET 'PER,WINNER EQUAL? PER,PLAYER \?CTR2 CALL1 QCONTEXT-GOOD? >PER ZERO? PER /?CCL3 ?CTR2: GETP PER,P?ACTION CALL D-APPLY,STR?160,STACK,M-WINNER ZERO? STACK \TRUE SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(That was just a rhetorical question.)" ?CCL3: PRINTI "You sound rather " ZERO? NO? /?CCL10 PRINTI "neg" JUMP ?CND8 ?CCL10: PRINTI "pos" ?CND8: PRINTR "ative." .FUNCT V-NO:ANY:0:0 CALL2 V-YES,TRUE-VALUE RSTACK .FUNCT JIGS-UP:ANY:0:1,DESC ASSIGNED? 'DESC \?CND1 PRINT DESC ?CND1: PRINTI " **** You have died **** " CALL1 FINISH RSTACK .FUNCT FINISH:ANY:0:2,REPEATING,VAL ZERO? P-DBUG \TRUE CRLF CRLF ZERO? REPEATING \?CND3 ICALL1 V-SCORE CRLF ?CND3: PRINTI "Would you like to: " ZERO? P-CAN-UNDO /?CND5 PRINTI " UNDO your last action, " ?CND5: PRINTI " RESTORE your place from where you saved it, RESTART the story from the beginning, or QUIT for now?" CRLF ?PRG7: PRINTC 62 PUTB P-INBUF,1,0 READ P-INBUF,P-LEXV GET P-LEXV,P-LEXSTART >VAL ZERO? VAL /?CND9 GET VAL,3 >VAL ZERO? VAL /?CND9 GET VAL,0 >VAL GRTR? 0,VAL /?CND9 ZERO? P-CAN-UNDO /?CCL16 EQUAL? VAL,ACT?UNDO \?CCL16 ICALL1 V-UNDO ICALL2 FINISH,TRUE-VALUE JUMP ?CND9 ?CCL16: EQUAL? VAL,ACT?RESTART \?CCL20 RESTART ICALL2 FINISH,TRUE-VALUE JUMP ?CND9 ?CCL20: EQUAL? VAL,ACT?RESTORE \?CCL22 CALL1 V-RESTORE ZERO? STACK \TRUE ICALL2 FINISH,TRUE-VALUE JUMP ?CND9 ?CCL22: EQUAL? VAL,ACT?QUIT \?CND9 QUIT ?CND9: PRINTI "[Type " ZERO? P-CAN-UNDO /?CND26 PRINTI "UNDO, " ?CND26: PRINTI "RESTORE, RESTART, or QUIT.] " JUMP ?PRG7 .FUNCT V-UNDO:ANY:0:0 ZERO? P-CAN-UNDO /FALSE SET 'OLD-HERE,FALSE-VALUE IRESTORE ZERO? STACK \?CCL6 PRINTR "[UNDO failed.]" ?CCL6: PRINTR "[UNDO is not available.]" .FUNCT REMOTE-VERB?:ANY:0:0 EQUAL? PRSA,V?WALK-TO /TRUE EQUAL? PRSA,V?WAIT-UNTIL,V?WAIT-FOR,V?TELL-ABOUT /TRUE EQUAL? PRSA,V?TALK-ABOUT,V?TAKE-TO,V?SSHOW /TRUE EQUAL? PRSA,V?SHOW,V?SEARCH-FOR,V?SEARCH /TRUE EQUAL? PRSA,V?LOOK-UP,V?LEAVE,V?FOLLOW /TRUE EQUAL? PRSA,V?FIND,V?DISEMBARK,V?ASK-FOR /TRUE EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT /TRUE RFALSE .ENDI