.FUNCT TRANSCRIPT,STR PRINTI "Here " PRINT STR PRINTR "s a transcript of interaction with" .FUNCT V-SCRIPT GET 0,8 BOR STACK,1 PUT 0,8,STACK CALL TRANSCRIPT,STR?33 CALL V-VERSION RTRUE .FUNCT V-UNSCRIPT CALL TRANSCRIPT,STR?34 CALL V-VERSION GET 0,8 BAND STACK,-2 PUT 0,8,STACK RTRUE .FUNCT V-$VERIFY ZERO? PRSO /?PRG11 EQUAL? PRSO,INTNUM \?CCL6 EQUAL? P-NUMBER,105 \?CCL6 PRINTN SERIAL CRLF RTRUE ?CCL6: CALL DONT-UNDERSTAND RSTACK ?PRG11: PRINTI "Verifying disk..." CRLF VERIFY \?PRG18 PRINTR "The disk is correct." ?PRG18: 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 YOU-WILL-GET,STR PRINTI "[Okay, you will get " PRINT STR PRINTR " descriptions.]" .FUNCT V-SUPER-BRIEF SET 'VERBOSITY,0 CALL YOU-WILL-GET,STR?35 RSTACK .FUNCT V-BRIEF SET 'VERBOSITY,1 CALL YOU-WILL-GET,STR?36 RSTACK .FUNCT V-VERBOSE SET 'VERBOSITY,2 CALL YOU-WILL-GET,STR?37 CALL V-LOOK RSTACK .FUNCT V-INVENTORY CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " holding" CALL PRINT-CONTENTS,WINNER ZERO? STACK \?PRG7 PRINTI " nothing" ?PRG7: PRINTC 46 CRLF RTRUE .FUNCT V-QUIT,ASK?=1 CALL V-SCORE ZERO? ASK? \?PRG3 QUIT ?PRG3: PRINTI "[If you want to continue from this point at another time, you must ""SAVE"" first. Do you want to stop the story now?]" CALL YES? ZERO? STACK /?PRG8 QUIT RTRUE ?PRG8: PRINTR "Okay." .FUNCT V-RESTART CALL V-SCORE PRINTI "[Do you want to start over from the beginning?]" CALL YES? ZERO? STACK /?PRG6 RESTART CALL TELL-FAILED RSTACK ?PRG6: PRINTR "Okay." .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 PUTB OOPS-INBUF,1,0 SET 'CLOCK-WAIT,TRUE-VALUE SAVE /?PRD4 PUSH 0 JUMP ?PRD5 ?PRD4: PUSH 1 ?PRD5: SET 'X,STACK ZERO? X /?CCL3 PRINTI "[Okay.]" CRLF CALL V-FIRST-LOOK RTRUE ?CCL3: CALL TELL-FAILED RTRUE .FUNCT V-RESTORE RESTORE /FALSE CALL TELL-FAILED RFALSE .FUNCT V-FIRST-LOOK CALL DESCRIBE-ROOM ZERO? STACK /FALSE ZERO? VERBOSITY /FALSE CALL DESCRIBE-OBJECTS RSTACK .FUNCT V-VERSION,CNT=17,V,IDX=18 GET 0,1 BAND STACK,2047 >V PRINTD MOONMIST PRINTI " Infocom interactive fiction - a mystery story Copyright (c) 1986 by Infocom, Inc. All rights reserved." CRLF PRINTD MOONMIST PRINTI " is a trademark of Infocom, Inc. Release number " PRINTN V PRINTI " / Serial number " ?PRG3: GETB 0,IDX PRINTC STACK IGRTR? 'IDX,23 \?PRG3 ZERO? VARIATION /?CND7 PRINTI " / " GET COLOR-WORDS,VARIATION PRINTB STACK PRINTR " variation" ?CND7: CRLF RTRUE .FUNCT V-SCORE,N=0,I,FC GET FOUND-COSTUME,PLAYER-C >FC ZERO? CONFESSED /?PRG8 ZERO? TREASURE-FOUND /?PRG8 ZERO? FC /?PRG8 PRINTI "[Congratulations, " CALL TITLE-NAME PRINTR "! You've won the game!]" ?PRG8: PRINTI "[Well, so far you've " GETB LAST-NAME,0 ZERO? STACK \?PRG14 PRINTR "just gotten started.]" ?PRG14: PRINTI "met " FSET? LORD,TOUCHBIT \?CND16 PRINTD LORD PRINTI " and " ?CND16: GET GUEST-TABLE,0 >I ?PRG20: GET GUEST-TABLE,I FSET? STACK,TOUCHBIT \?CND22 INC 'N ?CND22: DLESS? 'I,1 \?PRG20 GET GUEST-TABLE,0 EQUAL? N,STACK \?CCL28 PRINTI "all" JUMP ?PRG41 ?CCL28: ZERO? N \?CCL32 PRINTI "none" JUMP ?PRG41 ?CCL32: EQUAL? N,1 \?PRG39 PRINTI "one" JUMP ?PRG41 ?PRG39: PRINTI "some" ?PRG41: PRINTI " of the guests" ZERO? WASHED /?CND43 PRINTI ", washed up from your trip" ?CND43: ZERO? WRONG-OUTFIT /?CND47 PRINTI ", worn the " EQUAL? WRONG-OUTFIT,1 \?PRG56 PRINTI "proper" JUMP ?PRG58 ?PRG56: PRINTI "wrong" ?PRG58: PRINTI " outfit to dinner" ?CND47: GET FOUND-PASSAGES,PLAYER-C ZERO? STACK /?CND60 PRINTI ", discovered " PRINTD PASSAGE PRINTC 115 ?CND60: FSET? GHOST-NEW,TOUCHBIT \?CND64 PRINTI ", seen the ghost" ?CND64: ZERO? FC /?CND68 PRINTI ", " PRINT IDENTIFIED-THE-GHOST ?CND68: ZERO? EVIDENCE-FOUND /?CND72 PRINTI ", discovered evidence" ?CND72: ZERO? CONFESSED /?CND76 PRINTI ", " PRINT ARRESTED-THE-VILLAIN ?CND76: ZERO? TREASURE-FOUND /?PRG84 PRINTI ", discovered the " PRINTD ARTIFACT ?PRG84: PRINTI "... " ZERO? N \?PRG91 PRINTI "and" JUMP ?PRG93 ?PRG91: PRINTI "but" ?PRG93: PRINTI " you haven't " ZERO? TREASURE-FOUND \?CND95 PRINTI "found the " PRINTD ARTIFACT ?CND95: ZERO? EVIDENCE-FOUND \?CCL101 ZERO? TREASURE-FOUND \?PRG106 PRINTI " nor " ?PRG106: PRINTI "enough evidence" ZERO? VILLAIN-KNOWN? \?PRG112 ZERO? FC /?CND99 ?PRG112: PRINTI " of why " EQUAL? VILLAIN-PER,LOVER \?PRG121 ZERO? LOVER-SAID /?PRG121 PRINTD LORD PRINTI " killed " PRINTD COUSIN JUMP ?CND99 ?PRG121: PRINTD VILLAIN-PER PRINTI " haunted " PRINTD CASTLE JUMP ?CND99 ?CCL101: ZERO? CONFESSED \?CND99 ZERO? TREASURE-FOUND \?PRG128 PRINTI " nor " ?PRG128: PRINT ARRESTED-THE-VILLAIN ?CND99: ZERO? FC \?PRG141 ZERO? TREASURE-FOUND /?PRG137 ZERO? EVIDENCE-FOUND /?PRG137 ZERO? CONFESSED \?PRG139 ?PRG137: PRINTI " nor " ?PRG139: PRINT IDENTIFIED-THE-GHOST ?PRG141: PRINTR "!]" .FUNCT YES?,WORD,VAL ?PRG1: PRINTI " >" READ YES-INBUF,YES-LEXV GETB YES-LEXV,P-LEXWORDS ZERO? STACK /?PRG19 GET YES-LEXV,P-LEXSTART >WORD ZERO? WORD /?PRG19 CALL WT?,WORD,64,1 >VAL EQUAL? VAL,ACT?YES \?CCL9 SET 'VAL,TRUE-VALUE RETURN VAL ?CCL9: EQUAL? VAL,ACT?NO /?CTR10 EQUAL? WORD,W?N \?CCL11 ?CTR10: SET 'VAL,FALSE-VALUE RETURN VAL ?CCL11: EQUAL? VAL,ACT?RESTART \?CCL15 CALL V-RESTART JUMP ?PRG19 ?CCL15: EQUAL? VAL,ACT?RESTORE \?CCL17 CALL V-RESTORE JUMP ?PRG19 ?CCL17: EQUAL? VAL,ACT?QUIT \?PRG19 CALL V-QUIT ?PRG19: PRINTI "[Please type YES or NO.]" JUMP ?PRG1 .FUNCT NO-NEED,STR=0,OBJ=0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?5 PRINTI "n't need to " ZERO? STR /?CCL5 PRINT STR JUMP ?CND3 ?CCL5: CALL VERB-PRINT ?CND3: EQUAL? STR,STR?40,STR?41 \?CCL10 PRINTI " in that " PRINTD INTDIR JUMP ?PRG19 ?CCL10: ZERO? OBJ /?PRG17 CALL PRINTT,OBJ JUMP ?PRG19 ?PRG17: CALL PRINTT,PRSO ?PRG19: PRINTR ".)" .FUNCT YOU-CANT,STR=0,WHILE=0,STR1=0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't " ZERO? STR \?PRG6 CALL VERB-PRINT JUMP ?CND3 ?PRG6: PRINT STR ?CND3: EQUAL? STR,STR?40,STR?41 \?CCL10 PRINTI " in that " PRINTD INTDIR JUMP ?PRG49 ?CCL10: EQUAL? PRSO,PSEUDO-OBJECT \?CCL15 PRINTI " it" JUMP ?CND13 ?CCL15: EQUAL? PRSO,BUST \?CCL19 CALL NOUN-USED?,W?TAPE ZERO? STACK /?CCL19 EQUAL? STR,STR?42 /?PRG25 EQUAL? STR,STR?43,STR?44,STR?45 \?CCL19 ?PRG25: PRINTI " the tape" JUMP ?CND13 ?CCL19: EQUAL? PRSO,FLOOR \?PRG34 CALL OUTSIDE?,HERE ZERO? STACK /?PRG34 LOC WINNER EQUAL? STACK,CAR /?PRG34 PRINTI " the ground" JUMP ?CND13 ?PRG34: CALL PRINTT,PRSO ?CND13: ZERO? STR1 /?PRG49 PRINTI " while" ZERO? WHILE /?PRG45 CALL HE-SHE-IT,WHILE,0,STR?1 JUMP ?PRG47 ?PRG45: CALL HE-SHE-IT,PRSO,0,STR?1 ?PRG47: PRINTC 32 PRINT STR1 ?PRG49: PRINTR ".)" .FUNCT YOU-SHOULDNT,PREP=0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " shouldn't " CALL VERB-PRINT CALL PRINTT,PRSO ZERO? PREP /?PRG9 PRINT PREP CALL PRINTT,PRSI ?PRG9: PRINTR ".)" .FUNCT TELL-BEING-WORN,OBJ FSET? OBJ,WORNBIT \FALSE PRINTI " (actually, wearing it)" RTRUE .FUNCT PRINT-CONTENTS,THING,OBJ,NXT,1ST?=1,VAL=0 FIRST? THING >OBJ /?PRG1 ?PRG1: ZERO? OBJ /?REP2 NEXT? OBJ >NXT /?KLU36 ?KLU36: FSET? OBJ,INVISIBLE /?CCL7 FSET? OBJ,NDESCBIT /?CCL7 EQUAL? OBJ,WINNER \?CND6 ?CCL7: MOVE OBJ,INTDIR ?CND6: SET 'OBJ,NXT JUMP ?PRG1 ?REP2: FIRST? THING >OBJ /?KLU37 ?KLU37: ZERO? OBJ \?PRG18 EQUAL? THING,PLAYER /?CND11 PRINTI " nothing " CALL PICK-ONE-NEW,YAWNS PRINT STACK ?CND11: CALL ROB,INTDIR,THING RETURN VAL ?PRG18: ZERO? OBJ /?CND11 NEXT? OBJ >NXT /?KLU38 ?KLU38: ZERO? 1ST? /?CCL25 SET 'VAL,TRUE-VALUE SET '1ST?,FALSE-VALUE JUMP ?PRG33 ?CCL25: ZERO? NXT /?PRG31 PRINTC 44 JUMP ?PRG33 ?PRG31: PRINTI " and" ?PRG33: CALL PRINTT,OBJ CALL TELL-BEING-WORN,OBJ CALL THIS-IS-IT,OBJ FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT SET 'OBJ,NXT JUMP ?PRG18 .FUNCT DESCRIBE-OBJECTS,THING=0,OBJ,NXT,STR,VAL=0,HE=0,SHE=0,FIRST=1,TWO?=0,IT?=0,ANY?=0 ZERO? THING \?CND1 SET 'THING,HERE ?CND1: ZERO? LIT \?CND3 CALL TOO-DARK RTRUE ?CND3: FIRST? THING >OBJ /?KLU170 ?KLU170: ZERO? OBJ /FALSE ?PRG7: ZERO? OBJ /?REP8 NEXT? OBJ >NXT /?KLU171 ?KLU171: FSET? OBJ,INVISIBLE /?CCL13 FSET? OBJ,NDESCBIT /?CCL13 EQUAL? OBJ,WINNER /?CCL13 FSET? OBJ,PERSONBIT \?PRD18 FSET? OBJ,RMUNGBIT /?CCL13 ?PRD18: LOC PLAYER EQUAL? OBJ,STACK \?CND12 ?CCL13: FCLEAR OBJ,RMUNGBIT MOVE OBJ,PSEUDO-OBJECT ?CND12: SET 'OBJ,NXT JUMP ?PRG7 ?REP8: EQUAL? THING,HERE \?CND22 SET 'NXT,GHOST-NEW-C ?PRG24: PUT TOUCHED-LDESCS,NXT,0 DLESS? 'NXT,1 \?PRG24 SET 'NXT,0 ?PRG28: IGRTR? 'NXT,GHOST-NEW-C /?REP29 GET CHARACTER-TABLE,NXT >OBJ IN? OBJ,HERE \?PRG28 PUT FOLLOW-LOC,NXT,HERE GETP OBJ,P?DESCFCN CALL STACK,M-OBJDESC >VAL FSET OBJ,SEENBIT EQUAL? VAL,M-FATAL /?CCL35 ZERO? ANY? \?CND34 ?CCL35: SET 'ANY?,VAL ?CND34: FSET? OBJ,FEMALE \?CCL40 ZERO? SHE \?CCL43 SET 'SHE,OBJ JUMP ?CND38 ?CCL43: SET 'SHE,1 JUMP ?CND38 ?CCL40: ZERO? HE \?CCL46 SET 'HE,OBJ JUMP ?CND38 ?CCL46: SET 'HE,1 ?CND38: MOVE OBJ,PSEUDO-OBJECT JUMP ?PRG28 ?REP29: SET 'NXT,0 ?PRG47: IGRTR? 'NXT,GHOST-NEW-C /?REP48 GET TOUCHED-LDESCS,NXT >OBJ ZERO? OBJ /?PRG47 SET 'FIRST,TRUE-VALUE GET CHARACTER-TABLE,NXT >STR CALL START-SENTENCE,STR SET 'STR,NXT ?PRG55: IGRTR? 'STR,GHOST-NEW-C \?CCL59 ZERO? FIRST /?PRG65 PRINTI " is " JUMP ?PRG67 ?PRG65: PRINTI " are " ?PRG67: GET LDESC-STRINGS,OBJ PRINT STACK PRINTC 46 CRLF JUMP ?PRG47 ?CCL59: GET TOUCHED-LDESCS,STR EQUAL? OBJ,STACK \?PRG55 PUT TOUCHED-LDESCS,STR,0 SET 'FIRST,FALSE-VALUE PRINTI " and" GET CHARACTER-TABLE,STR CALL PRINTT,STACK JUMP ?PRG55 ?REP48: EQUAL? SHE,0,1 /?CCL74 CALL THIS-IS-IT,SHE JUMP ?CND72 ?CCL74: EQUAL? SHE,1 \?CND72 SET 'P-HER-OBJECT,FALSE-VALUE ?CND72: EQUAL? HE,0,1 /?CCL78 CALL THIS-IS-IT,HE JUMP ?CND76 ?CCL78: EQUAL? HE,1 \?CND76 SET 'P-HIM-OBJECT,FALSE-VALUE ?CND76: SET 'FIRST,TRUE-VALUE FIRST? THING >OBJ /?PRG80 ?PRG80: ZERO? OBJ /?REP81 NEXT? OBJ >NXT /?KLU173 ?KLU173: GETP OBJ,P?DESCFCN >STR ZERO? STR /?CND85 CALL STR,M-OBJDESC >VAL EQUAL? VAL,M-FATAL /?CCL88 ZERO? ANY? \?CND87 ?CCL88: SET 'ANY?,VAL ?CND87: CALL THIS-IS-IT,OBJ FSET OBJ,SEENBIT MOVE OBJ,PSEUDO-OBJECT ?CND85: SET 'OBJ,NXT JUMP ?PRG80 ?REP81: FIRST? THING >OBJ /?PRG91 ?PRG91: ZERO? OBJ /?CND22 NEXT? OBJ >NXT /?KLU175 ?KLU175: GETP OBJ,P?LDESC >STR ZERO? STR /?CND96 ZERO? ANY? \?PRG100 SET 'ANY?,TRUE-VALUE ?PRG100: PRINT STR CRLF FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT CALL THIS-IS-IT,OBJ MOVE OBJ,PSEUDO-OBJECT ?CND96: SET 'OBJ,NXT JUMP ?PRG91 ?CND22: FIRST? HERE >OBJ /?KLU176 ?KLU176: SET 'VAL,FALSE-VALUE ZERO? OBJ /?CND102 ?PRG104: ZERO? OBJ /?CCL108 NEXT? OBJ >NXT /?KLU177 ?KLU177: SET 'VAL,TRUE-VALUE ZERO? FIRST /?CCL111 SET 'FIRST,FALSE-VALUE EQUAL? THING,HERE \?PRG128 CRLF FSET? HERE,ONBIT \?PRG119 PRINTI "You see" JUMP ?PRG128 ?PRG119: PRINTI "The light reveals" JUMP ?PRG128 ?CCL111: ZERO? NXT /?PRG126 PRINTC 44 JUMP ?PRG128 ?PRG126: PRINTI " and" ?PRG128: CALL PRINTT,OBJ FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT CALL THIS-IS-IT,OBJ CALL TELL-BEING-WORN,OBJ CALL SEE-INSIDE?,OBJ ZERO? STACK /?CND130 CALL SEE-ANYTHING-IN?,OBJ ZERO? STACK /?CND130 MOVE OBJ,INTNUM ?CND130: ZERO? IT? \?CCL136 ZERO? TWO? \?CCL136 SET 'IT?,OBJ JUMP ?CND134 ?CCL136: SET 'TWO?,TRUE-VALUE SET 'IT?,FALSE-VALUE ?CND134: SET 'OBJ,NXT JUMP ?PRG104 ?CCL108: ZERO? IT? /?CND139 ZERO? TWO? \?CND139 SET 'P-IT-OBJECT,IT? ?CND139: EQUAL? THING,HERE \?PRG147 PRINTI " here" ?PRG147: PRINTC 46 ZERO? ANY? \?CND102 SET 'ANY?,TRUE-VALUE ?CND102: FIRST? INTNUM >OBJ /?PRG151 ?PRG151: ZERO? OBJ /?REP152 FSET? OBJ,SURFACEBIT \?PRG160 CRLF PRINTI "On" JUMP ?CND155 ?PRG160: CRLF PRINTI "Inside" ?CND155: SET 'VAL,TRUE-VALUE CALL PRINTT,OBJ PRINTI " you see" CALL PRINT-CONTENTS,OBJ PRINTC 46 NEXT? OBJ >OBJ /?PRG151 JUMP ?PRG151 ?REP152: ZERO? VAL /?CND168 CRLF ?CND168: CALL ROB,INTNUM,THING CALL ROB,PSEUDO-OBJECT,THING RETURN ANY? .FUNCT SEE-ANYTHING-IN?,THING,OBJ,NXT,ANY?=0 FIRST? THING >OBJ /?PRG1 ?PRG1: ZERO? OBJ /?REP2 FSET? OBJ,INVISIBLE /?CND6 FSET? OBJ,NDESCBIT /?CND6 EQUAL? OBJ,WINNER /?CND6 SET 'ANY?,TRUE-VALUE RETURN ANY? ?CND6: NEXT? OBJ >OBJ /?PRG1 JUMP ?PRG1 ?REP2: RETURN ANY? .FUNCT DESCRIBE-ROOM,LOOK?=0,V?,STR,L ZERO? LOOK? /?CCL3 SET 'V?,TRUE-VALUE JUMP ?PRG10 ?CCL3: EQUAL? 2,VERBOSITY \?CCL5 SET 'V?,TRUE-VALUE JUMP ?PRG10 ?CCL5: ZERO? VERBOSITY \?CCL7 SET 'V?,FALSE-VALUE JUMP ?PRG10 ?CCL7: FSET? HERE,TOUCHBIT /?PRG10 SET 'V?,TRUE-VALUE ?PRG10: PRINTC 40 ZERO? VERBOSITY \?PRG17 PRINTD HERE JUMP ?PRG33 ?PRG17: PRINTI "You are" FSET? HERE,TOUCHBIT /?CND19 PRINTI " now" ?CND19: FSET? HERE,SURFACEBIT \?CCL25 PRINTI " on" JUMP ?PRG31 ?CCL25: EQUAL? HERE,BACKSTAIRS /?PRG31 PRINTI " in" ?PRG31: CALL PRINTT,HERE PRINTC 46 ?PRG33: PRINTI ") " ZERO? LIT \?CCL37 CALL TOO-DARK RFALSE ?CCL37: EQUAL? LIT,HERE /?CND35 PRINTI "Light comes from" CALL PRINTT,LIT PRINTC 46 CRLF ?CND35: ZERO? V? /?CND41 LOC WINNER >L FSET? L,VEHBIT \?CND43 PRINTI "(You're " EQUAL? L,COFFIN \?PRG52 PRINTI "ly" JUMP ?PRG54 ?PRG52: PRINTI "sitt" ?PRG54: PRINTI "ing " EQUAL? L,CAR,COFFIN \?PRG61 PRINTI "in" JUMP ?CND56 ?PRG61: PRINTI "on" ?CND56: CALL THIS-IS-IT,L CALL PRINTT,L PRINTI ".)" CRLF ?CND43: ZERO? V? /?CCL67 GETP HERE,P?ACTION CALL STACK,M-LOOK ZERO? STACK \?CND41 ?CCL67: ZERO? V? /?CCL71 GETP HERE,P?LDESC >STR ZERO? STR /?CCL71 PRINT STR CRLF JUMP ?CND41 ?CCL71: GETP HERE,P?ACTION CALL STACK,M-FLASH ?CND41: GETP HERE,P?CORRIDOR ZERO? STACK /?CND76 CALL CORRIDOR-LOOK ?CND76: FSET HERE,SEENBIT FSET HERE,TOUCHBIT RTRUE .FUNCT HAR-HAR SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL PICK-ONE-NEW,YUKS PRINT STACK PRINTC 41 CRLF RTRUE .FUNCT PICK-ONE-NEW,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 GET RFROB,RND >MSG GET RFROB,1 PUT RFROB,RND,STACK PUT RFROB,1,MSG INC 'CNT EQUAL? CNT,L \?CND1 SET 'CNT,0 ?CND1: PUT FROB,0,CNT RETURN MSG .FUNCT PICK-ONE,FROB GET FROB,0 RANDOM STACK GET FROB,STACK RSTACK .FUNCT NOT-HOLDING?,OBJ IN? OBJ,WINNER /FALSE LOC OBJ IN? STACK,WINNER /FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " not holding" CALL HIM-HER-IT,OBJ PRINTR ".)" .FUNCT NEW-FOLLOWER,PER EQUAL? FOLLOWER,FALSE-VALUE,PER /?CND1 PUTP FOLLOWER,P?LDESC,0 PRINTI """I'll leave you two alone, then,"" says " PRINTD FOLLOWER PRINTI ". " ?CND1: SET 'FOLLOWER,PER GETP PER,P?CHARACTER GET GOAL-TABLES,STACK PUT STACK,GOAL-ENABLE,0 RTRUE .FUNCT FRIEND-FOLLOWS-YOU,RM,C EQUAL? RM,CAR,YOUR-BATHROOM /FALSE FSET? RM,SECRETBIT /?CTR4 EQUAL? RM,CRYPT \?CCL5 ?CTR4: CALL NOT-INTO-PASSAGE,FOLLOWER,TRUE-VALUE PUTP FOLLOWER,P?LDESC,9 SET 'FOLLOWER,0 RFALSE ?CCL5: GETP RM,P?LINE ZERO? STACK /FALSE IN? FOLLOWER,RM /FALSE MOVE FOLLOWER,RM PUTP FOLLOWER,P?LDESC,23 EQUAL? FOLLOWER,LORD \?PRG17 PRINTD FRIEND JUMP ?PRG19 ?PRG17: PRINTD FOLLOWER ?PRG19: CALL PICK-ONE,TRAILS-ALONG PRINT STACK EQUAL? FOLLOWER,LORD \?CND21 EQUAL? RM,YOUR-ROOM,YOUR-BATHROOM /?CND21 MOVE LORD,RM PUTP LORD,P?LDESC,23 PRINTI " So does " PRINTD LORD PRINTC 46 ?CND21: CRLF RTRUE .FUNCT NOT-INTO-PASSAGE,PER,FOLLOW=0,PASS=1 ZERO? PASS /?CND1 GETP PER,P?CHARACTER PUT FOUND-PASSAGES,STACK,TRUE-VALUE ?CND1: CALL THIS-IS-IT,PER PRINTI """I'm not " ZERO? FOLLOW /?PRG10 GET LDESC-STRINGS,23 PRINT STACK JUMP ?PRG12 ?PRG10: PRINTI "going" ?PRG12: PRINTI " into that " ZERO? PASS /?PRG25 EQUAL? PER,OFFICER,BUTLER \?PRG21 PRINTI "dirty" JUMP ?PRG23 ?PRG21: PRINTI "spooky" ?PRG23: PRINTC 32 ?PRG25: PRINTI "place!"" says " PRINTD PER ZERO? FOLLOW /?PRG31 PRINTI " as" CALL HE-SHE-IT,PER PRINTI " stays behind" ?PRG31: PRINTR "." .FUNCT TOUR?,RM CALL QUEUED?,I-TOUR ZERO? STACK /FALSE CALL QUEUE,I-TOUR,1 SET 'TOUR-FORCED,TRUE-VALUE CALL QUEUED?,I-REPLY ZERO? STACK /?CND4 CALL QUEUE,I-REPLY,1 ?CND4: EQUAL? HERE,GREAT-HALL \?CCL7 FSET? DOCTOR,TOUCHBIT \?PRG22 ?CCL7: GET TOUR-PATH,TOUR-INDEX >RM EQUAL? PRSA,V?FOLLOW \?CCL12 EQUAL? PRSO,FRIEND \?PRG22 RTRUE ?CCL12: EQUAL? PRSA,V?WALK \?CCL16 CALL DIR-FROM,HERE,RM CALL DIR-EQV?,HERE,PRSO,STACK ZERO? STACK /?PRG22 RTRUE ?CCL16: EQUAL? PRSA,V?THROUGH,V?WALK-TO \?PRG22 CALL META-LOC,PRSO EQUAL? STACK,RM /TRUE ?PRG22: PRINTD FRIEND PRINTI " says, ""Please don't wander off yet. I want you to " FSET? DOCTOR,TOUCHBIT \?PRG29 PRINTI "see " PRINTD YOUR-ROOM PRINTR ".""" ?PRG29: PRINTR "meet the other guests.""" .FUNCT CREEPY?,RM FSET? RM,SECRETBIT /TRUE EQUAL? RM,TOMB,DUNGEON,CRYPT /TRUE RFALSE .FUNCT GOTO,RM,TEST=1,FOLLOW?=1,X IN? WINNER,RM \?CND1 CALL WALK-WITHIN-ROOM RFALSE ?CND1: GETP HERE,P?ACTION CALL STACK,M-EXIT ZERO? STACK \FALSE EQUAL? WINNER,PLAYER \?CCL7 CALL TOUR? ZERO? STACK \FALSE ZERO? FOLLOW? /?CND10 ZERO? FOLLOWER /?CND10 CALL FRIEND-FOLLOWS-YOU,RM ?CND10: RANDOM 2 EQUAL? STACK,1 \?CND3 ZERO? FOLLOWER \?CND3 CALL CREEPY?,HERE ZERO? STACK /?CND3 CALL CREEPY?,RM ZERO? STACK /?CND3 PRINTI "You " CALL PICK-ONE-NEW,CREEPIES PRINT STACK CRLF ?CND3: ZERO? TEST /?CND25 EQUAL? WINNER,PLAYER \?CND25 CALL DIR-FROM,HERE,RM >X ZERO? X /?CND25 GETP HERE,P?ACTION CALL STACK,X EQUAL? M-FATAL,STACK /FALSE ?CND25: GETP WINNER,P?CHARACTER PUT FOLLOW-LOC,STACK,RM IN? WINNER,CAR \?CND33 EQUAL? RM,COURTYARD \?CND33 MOVE CAR,RM ?CND33: MOVE WINNER,RM EQUAL? WINNER,PLAYER \TRUE SET 'OHERE,HERE SET 'HERE,RM CALL MAKE-ALL-PEOPLE,-12 CALL ENTER-ROOM RTRUE ?CCL7: FSET? RM,SECRETBIT \?CCL23 CALL NOT-INTO-PASSAGE,WINNER RFALSE ?CCL23: EQUAL? RM,YOUR-BATHROOM \?CND3 CALL NOT-INTO-PASSAGE,WINNER,FALSE-VALUE,FALSE-VALUE RFALSE .FUNCT HACK-HACK,STR PRINT STR CALL HIM-HER-IT,PRSO CALL PICK-ONE,HO-HUM PRINT STACK CRLF RTRUE .FUNCT HELD?,OBJ,CONT=0,L ZERO? CONT \?CND1 SET 'CONT,PLAYER ?CND1: EQUAL? OBJ,ARTIFACT \?PRG7 ZERO? TREASURE-FOUND /?PRG7 SET 'OBJ,TREASURE ?PRG7: LOC OBJ >L ZERO? L /FALSE EQUAL? L,CONT /TRUE EQUAL? CONT,PLAYER,WINNER \?CCL15 EQUAL? OBJ,HANDS,HEAD,EYE /TRUE EQUAL? OBJ,NOW-WEARING /TRUE EQUAL? OBJ,CAR \?CCL22 EQUAL? PRSA,V?MUNG /TRUE ?CCL22: SET 'OBJ,L JUMP ?PRG7 ?CCL15: EQUAL? L,ROOMS,GLOBAL-OBJECTS /FALSE SET 'OBJ,L JUMP ?PRG7 .FUNCT IDROP CALL NOT-HOLDING?,PRSO ZERO? STACK \FALSE IN? PRSO,WINNER /?CCL5 LOC PRSO FSET? STACK,OPENBIT /?CCL5 LOC PRSO CALL TOO-BAD-BUT,STACK,STR?61 RFALSE ?CCL5: MOVE PRSO,HERE FCLEAR PRSO,WORNBIT FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE RTRUE .FUNCT ITAKE,VB=1,CNT,OBJ,L,?TMP1 LOC PRSO >L ZERO? L /?CND1 FSET? L,PERSONBIT \?CND1 FSET? PRSO,TAKEBIT /?CCL7 FSET? L,MUNGBIT /?CCL7 ZERO? VB /FALSE CALL YOU-CANT,STR?62 RFALSE ?CCL7: FSET PRSO,TAKEBIT ?CND1: FSET? PRSO,TAKEBIT /?CCL14 ZERO? VB /FALSE CALL YOU-CANT,STR?62 RFALSE ?CCL14: CALL CCOUNT,WINNER >CNT GRTR? CNT,FUMBLE-NUMBER \?CCL18 MUL CNT,FUMBLE-PROB >?TMP1 RANDOM 100 LESS? ?TMP1,STACK /?CCL18 CALL FIND-FLAG-NOT,WINNER,WORNBIT >OBJ ZERO? OBJ /?CCL18 CALL TOO-BAD-BUT CALL PRINTT,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" CALL HIM-HER-IT,PRSO PRINTI ", and both tumble " CALL GROUND-DESC PRINT STACK PRINTI ". " CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " carrying too many things. " MOVE OBJ,HERE MOVE PRSO,HERE RETURN 2 ?CCL18: MOVE PRSO,WINNER FSET PRSO,SEENBIT FSET PRSO,TOUCHBIT FCLEAR PRSO,NDESCBIT FCLEAR PRSO,INVISIBLE FCLEAR PRSO,SECRETBIT EQUAL? PRSA,V?TAKE /TRUE EQUAL? L,WINNER /TRUE FSET? L,PERSONBIT /?CCL27 EQUAL? L,SIDEBOARD \TRUE ?CCL27: CALL FIRST-YOU,STR?62,PRSO,L RTRUE .FUNCT CCOUNT,OBJ,CNT=0,X FIRST? OBJ >X /?PRG3 RETURN CNT ?PRG3: FSET? X,WORNBIT /?CND5 INC 'CNT ?CND5: NEXT? X >X /?PRG3 RETURN CNT .FUNCT CHECK-DOOR,DR CALL START-SENTENCE,DR PRINTI " is " CALL THIS-IS-IT,DR FSET? DR,OPENBIT \?PRG8 PRINTI "open" JUMP ?PRG16 ?PRG8: PRINTI "closed and " FSET? DR,LOCKED /?PRG14 PRINTI "un" ?PRG14: PRINTI "locked" ?PRG16: PRINTR "." .FUNCT ROOM-CHECK,P,PA SET 'P,PRSO EQUAL? P,ROOMS /FALSE IN? P,ROOMS \?CCL5 EQUAL? HERE,P /FALSE GETP P,P?STATION EQUAL? HERE,STACK /?CTR9 CALL GLOBAL-IN?,P,HERE ZERO? STACK /?CCL10 ?CTR9: EQUAL? PRSA,V?SEARCH-FOR /?PRD17 EQUAL? PRSA,V?SEARCH,V?SIT,V?LIE \FALSE ?PRD17: CALL META-LOC,P >P EQUAL? P,HERE /FALSE CALL FIRST-YOU,STR?63,P SET 'PA,PRSA CALL PERFORM,V?THROUGH,P >P SET 'PRSA,PA EQUAL? M-FATAL,P /TRUE RFALSE ?CCL10: CALL SEE-INTO?,P ZERO? STACK \FALSE RTRUE ?CCL5: CALL META-LOC,P EQUAL? STACK,HERE,GLOBAL-OBJECTS,LOCAL-GLOBALS /FALSE CALL VISIBLE?,P ZERO? STACK \FALSE CALL NOT-HERE,P RSTACK .FUNCT SEE-INSIDE?,OBJ,ONLY-IN=0 FSET? OBJ,TRANSBIT /TRUE FSET? OBJ,OPENBIT /TRUE ZERO? ONLY-IN \FALSE FSET? OBJ,SURFACEBIT /TRUE RFALSE .FUNCT ARENT-TALKING SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You aren't talking to anyone!)" .FUNCT ALREADY,OBJ,STR=0 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL START-SENTENCE,OBJ EQUAL? OBJ,PLAYER \?PRG11 PRINTI " are" JUMP ?PRG13 ?PRG11: PRINTI " is" ?PRG13: PRINTI " already " ZERO? STR /TRUE PRINT STR PRINTR "!)" .FUNCT NOT-CLEAR-WHOM SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-CONT,FALSE-VALUE PRINTR "[It's not clear whom you're talking to.]" .FUNCT OKAY,OBJ=0,STR=0 EQUAL? WINNER,PLAYER,BUTLER \?PRG6 EQUAL? PRSA,V?WALK-TO,V?WALK,V?THROUGH \?PRG8 RTRUE ?PRG6: PRINTC 34 ?PRG8: PRINTI "Okay" ZERO? OBJ /?CND10 PRINTC 44 CALL HE-SHE-IT,OBJ ZERO? STR /?CND14 PRINTI " is now " PRINT STR ?CND14: EQUAL? STR,STR?64 \?CCL20 FSET OBJ,ONBIT JUMP ?CND10 ?CCL20: EQUAL? STR,STR?65 \?CCL22 FCLEAR OBJ,ONBIT JUMP ?CND10 ?CCL22: EQUAL? STR,STR?66 \?CCL24 FSET OBJ,OPENBIT JUMP ?CND10 ?CCL24: EQUAL? STR,STR?61 \?CCL26 FCLEAR OBJ,OPENBIT JUMP ?CND10 ?CCL26: EQUAL? STR,STR?67 \?CCL28 FSET OBJ,LOCKED JUMP ?CND10 ?CCL28: EQUAL? STR,STR?68 \?CND10 FCLEAR OBJ,LOCKED ?CND10: ZERO? STR \?CCL31 ZERO? OBJ \?CND30 ?CCL31: EQUAL? WINNER,PLAYER /?PRG38 PRINTI ","" says " PRINTD WINNER PRINTI ". " CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTR " does so." ?PRG38: PRINTC 46 CRLF ?CND30: ZERO? LIT \TRUE CALL LIT? >LIT ZERO? LIT /TRUE CRLF CALL V-LOOK RTRUE .FUNCT TOO-BAD-BUT,OBJ=0,STR=0 PRINTI "Too bad, but" ZERO? OBJ /?CND3 CALL HE-SHE-IT,OBJ ?CND3: ZERO? STR /TRUE PRINTI " is " PRINT STR EQUAL? STR,STR?69,STR?70 \?PRG15 PRINTI " with you" ?PRG15: PRINTR "." .FUNCT TOO-DARK PRINTR "(It's too dark to see!)" .FUNCT VISIBLE?,OBJ,H,L,X=0 ZERO? OBJ /FALSE CALL ACCESSIBLE?,OBJ ZERO? STACK \TRUE CALL CORRIDOR-LOOK,OBJ >X ZERO? X \TRUE LOC OBJ >L CALL SEE-INSIDE?,L ZERO? STACK /FALSE CALL VISIBLE?,L RSTACK .FUNCT ACCESSIBLE?,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: CALL 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: CALL ACCESSIBLE?,L RSTACK .FUNCT META-LOC,OBJ,INV=0,L LOC OBJ >L ?PRG1: ZERO? L /FALSE EQUAL? L,NOW-WEARING \?CCL7 RETURN HERE ?CCL7: EQUAL? L,LOCAL-GLOBALS,GLOBAL-OBJECTS \?CCL9 RETURN L ?CCL9: IN? OBJ,ROOMS \?CCL11 RETURN OBJ ?CCL11: ZERO? INV /?CND12 FSET? OBJ,INVISIBLE /FALSE ?CND12: SET 'OBJ,L LOC OBJ >L JUMP ?PRG1 .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 CALL V-FOO RSTACK .FUNCT V-AIM CALL YOU-CANT RSTACK .FUNCT PRE-SANALYZE CALL PERFORM,V?ANALYZE,PRSI,PRSO RTRUE .FUNCT V-SANALYZE CALL V-FOO RSTACK .FUNCT PRE-ANALYZE CALL ROOM-CHECK ZERO? STACK \TRUE FSET? PRSO,PERSONBIT \FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Leave that to the police.)" .FUNCT V-ANALYZE FSET? PRSO,PERSONBIT \?CCL3 PRINTR "How?" ?CCL3: FSET? PRSO,DOORBIT \?PRG8 CALL CHECK-DOOR,PRSO RSTACK ?PRG8: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?84 PRINTR " normal." .FUNCT V-ANSWER ZERO? AWAITING-REPLY /?CCL3 GET P-LEXV,P-CONT EQUAL? STACK,W?YES \?CCL6 CALL PERFORM,V?YES JUMP ?CND1 ?CCL6: CALL PERFORM,V?NO JUMP ?CND1 ?CCL3: CALL NOT-CLEAR-WHOM ?CND1: 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 \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 CALL WAITING-FOR-YOU-TO-SPEAK RSTACK ?CCL3: CALL YOU-CANT RSTACK .FUNCT WAITING-FOR-YOU-TO-SPEAK CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?72 PRINTR " to be waiting for you to speak." .FUNCT PRE-ARREST EQUAL? PRSI,ROOMS \?CND1 SET 'PRSI,FALSE-VALUE ?CND1: FSET? PRSO,PERSONBIT /?CCL5 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(Are you sure you're a" PRINT FAMOUS-YOUNG-DETECTIVE PRINTI "? Arresting " CALL PRINTA,PRSO PRINTR "?!)" ?CCL5: ZERO? CONFESSED /?CCL10 CALL ALREADY,CONFESSED,STR?85 RSTACK ?CCL10: ZERO? LIONEL-SPEAKS-COUNTER /?CCL12 CALL TELL-BAD-FORM RTRUE ?CCL12: EQUAL? PRSO,GHOST-NEW /FALSE CALL UNSNOOZE,PRSO RFALSE .FUNCT TELL-BAD-FORM SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(Bad form" CALL IAN-CALLS-YOU PRINTR ". Wait until after dinner.)" .FUNCT V-ARREST CALL QUEUED?,I-SHOT EQUAL? STACK,1 /TRUE GETP PRSO,P?CHARACTER EQUAL? VARIATION,STACK \?CCL5 ZERO? EVIDENCE-FOUND /?CCL5 CALL CONFESSION,PRSO RSTACK ?CCL5: SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(It would be difficult to convict" CALL HIM-HER-IT,PRSO PRINTR " with the evidence you've found. If you hope to put the culprit behind bars, you'll need more convincing proof.)" .FUNCT CONFESSION,PER,P,DEAD=0 SET 'CONFESSED,PER PUTP PER,P?LINE,2 ZERO? TREASURE-FOUND /?CCL3 GET FOUND-COSTUME,PLAYER-C ZERO? STACK /?CCL3 SET 'P,BUTLER JUMP ?CND1 ?CCL3: EQUAL? VARIATION,LORD-C \?CCL7 SET 'P,DOCTOR JUMP ?CND1 ?CCL7: SET 'P,LORD ?CND1: SET 'CAPTOR,P CALL UNSNOOZE,P,TRUE-VALUE PUTP P,P?LDESC,9 FSET? PER,MUNGBIT \?CCL10 CALL UNSNOOZE,PER ZERO? STACK \?CCL10 SET 'DEAD,TRUE-VALUE JUMP ?PRG24 ?CCL10: GETP PER,P?CHARACTER GET TOLD-ABOUT-EVID,STACK ZERO? STACK /?PRG18 CALL FIND-FLAG-HERE,PERSONBIT,PLAYER,PER ZERO? STACK /?PRG20 ?PRG18: PRINTI "At first" CALL HE-SHE-IT,PER PRINTI " denies everything, but when you tell about" CALL PRINTT,EVIDENCE-FOUND PRINTC 44 CALL HE-SHE-IT,PER JUMP ?PRG22 ?PRG20: CALL HE-SHE-IT,PER,TRUE-VALUE ?PRG22: PRINTI " rushes at you! " GETP PER,P?CHARACTER GET GOAL-TABLES,STACK PUT STACK,GOAL-FUNCTION,NULL-F ?PRG24: PRINTI "Suddenly " PRINTD P IN? P,HERE /?CND28 MOVE P,HERE GETP P,P?CHARACTER GET GOAL-TABLES,STACK PUT STACK,GOAL-ENABLE,0 PRINTI " appears and" ?CND28: ZERO? DEAD \?PRG37 PRINTI " grabs" CALL HIM-HER-IT,PER PRINTI " from behind, saying, ""I'll guard this villain for you."" Then " PRINTD PER PRINTI " glares at you and confesses to " JUMP ?CND32 ?PRG37: PRINTI " agrees that" CALL PRINTT,EVIDENCE-FOUND PRINTI " proves " PRINTD PER PRINTI " guilty of " ?CND32: EQUAL? PER,FRIEND \?CCL41 PRINTI "fraud. " JUMP ?CND39 ?CCL41: EQUAL? PER,PAINTER \?PRG48 PRINTI "attempted " ?PRG48: PRINTI "murder. " ?CND39: ZERO? DEAD \?CND50 PUTP PER,P?LDESC,20 ?CND50: ZERO? TREASURE-FOUND /TRUE GET FOUND-COSTUME,PLAYER-C ZERO? STACK /TRUE CALL WRAP-UP CALL FINISH RTRUE .FUNCT WRAP-UP PRINTI " (Congratulations, " CALL TITLE-NAME PRINTI "! Would you like to read the authors' version of the crime?)" CALL YES? ZERO? STACK \?CCL5 PRINTR "Okay." ?CCL5: EQUAL? VARIATION,LORD-C \?CCL9 PRINTD LORD PRINTI " murdered Lionel in order to inherit the title and castle. " PRINTD LOVER PRINTI " was blackmailing " PRINTD LORD PRINTI " to marry her, because she knew he was plotting to kill Lionel. So Jack tried to do away with her, too, by dumping her down the well. But Jack was wrong in thinking he killed " PRINTD LOVER PRINTI ". She survived and came back to the castle at night -- to play on " PRINTD FRIEND PRINTI "'s nerves, since her arrival seemed to be part of Jack's plot; to hunt for proof that Jack murdered Lionel; and to try to frame him for her own ""murder"" by planting" CALL PRINTT,JEWEL PRINTI " in his trouser cuff, until she lost it in the " PRINTD DRAWING-ROOM PRINTR "." ?CCL9: EQUAL? VARIATION,FRIEND-C \?CCL13 PRINTD FRIEND PRINTI " doubted that she could hold " PRINTD LORD PRINTI "'s love. She was both jealous and fearful of " PRINTD DEB PRINTI " as a rival who might someday take Jack away from her. So she tried to defame " PRINTD DEB PRINTI " by making it appear " PRINTD DEB PRINTI " was a vengeful ghost bent on killing Jack's new love, " PRINTD FRIEND PRINTI ". " PRINTD LOVER PRINTR "'s death was purely an accident." ?CCL13: EQUAL? VARIATION,DOCTOR-C \?PRG20 PRINTD LOVER PRINTI " strongly suspected that her grandfather died because of " PRINTD DOCTOR PRINTI "'s fiendish experiments on his patients. So she wrote a letter to Lionel, begging him to use his influence to investigate " PRINTD DOCTOR PRINTI ", which he did. However, " PRINTD DOCTOR PRINTI " found out what they were up to, and silenced both of them. He has masqueraded as a ghost to cover his midnight searches for the " PRINTD ARTIFACT PRINTI ". He intended the attacks on " PRINTD FRIEND PRINTI " to create the belief that " PRINTD LOVER PRINTR " might still be alive." ?PRG20: PRINTD PAINTER PRINTI " was intensely attached to " PRINTD LOVER PRINTI ", and she jealously hated " PRINTD LORD PRINTI " for coming between them. When " PRINTD LOVER PRINTI " accidentally fell down the well, " PRINTD PAINTER PRINTI " was convinced that she had committed suicide because she felt abandoned by Jack. So " PRINTD PAINTER PRINTI " began her vengeful ghostly masquerade -- to find proof that Jack was responsible for " PRINTD LOVER PRINTI "'s death, to prick his guilty conscience and make him confess, and to terrorize " PRINTD FRIEND PRINTI ", who replaced " PRINTD LOVER PRINTR " in Jack's affections." .FUNCT V-ASK ZERO? P-CONT /?CCL3 FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 SET 'WINNER,PRSO SET 'QCONTEXT,PRSO RETURN QCONTEXT ?CCL3: CALL V-ASK-ABOUT RSTACK .FUNCT PRE-ASK-ABOUT EQUAL? PRSO,VOICE,RECORDER,PLAYER-NAME /FALSE EQUAL? PRSO,PIANO,OCEAN,MUSIC /FALSE EQUAL? PRSO,JACK-TAPE,CREW-GLOBAL,BUST /FALSE EQUAL? PRSO,COUSIN \?CCL8 IN? BUST,HERE \?CCL8 CALL DO-INSTEAD-OF,BUST,COUSIN RSTACK ?CCL8: CALL META-LOC,PRSO EQUAL? STACK,HERE /?CCL12 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?CCL12 CALL NOT-HERE,PRSO RETURN 2 ?CCL12: EQUAL? PRSO,PLAYER /?CTR17 FSET? PRSO,PERSONBIT /?CCL18 ?CTR17: EQUAL? PRSA,V?$CALL \?CCL23 ZERO? P-CONT \?CCL23 CALL MISSING,STR?30 RETURN 2 ?CCL23: EQUAL? PRSA,V?LISTEN /FALSE CALL WONT-HELP-TO-TALK-TO,PRSO RETURN 2 ?CCL18: CALL GRAB-ATTENTION,PRSO,PRSI ZERO? STACK \FALSE RETURN 2 .FUNCT V-ASK-ABOUT FSET? PRSO,PERSONBIT \?CTR2 FSET? PRSO,MUNGBIT \?CCL3 ?CTR2: CALL WONT-HELP-TO-TALK-TO,PRSO RETURN 2 ?CCL3: EQUAL? PRSA,V?ASK \?PRG14 EQUAL? PRSO,PLAYER /?PRG14 PRINTR """Ask me about something in particular.""" ?PRG14: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?5 PRINTI "n't know anything interesting about" ZERO? PRSI \?PRG21 PRINTI " that" JUMP ?PRG23 ?PRG21: CALL PRINTT,PRSI ?PRG23: PRINTR "." .FUNCT WONT-HELP-TO-TALK-TO,OBJ PRINTI "You talk to" CALL PRINTT,OBJ PRINTI " for a minute before you realize that" CALL HE-SHE-IT,OBJ PRINTR " won't respond." .FUNCT PRE-ASK-CONTEXT-ABOUT,V=0,P ZERO? V \?CND1 SET 'V,V?ASK-ABOUT ?CND1: CALL QCONTEXT-GOOD? ZERO? STACK /?CCL5 CALL PERFORM,V,QCONTEXT,PRSO RTRUE ?CCL5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE CALL TELL-I-ASSUME,P,STR?87 CALL PERFORM,V,P,PRSO RTRUE .FUNCT V-ASK-CONTEXT-ABOUT CALL ARENT-TALKING RSTACK .FUNCT V-ASK-FOR FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 EQUAL? PRSO,PLAYER /?CCL3 CALL START-SENTENCE,PRSO IN? PRSI,PRSO \?PRG16 MOVE PRSI,WINNER FSET PRSI,TAKEBIT FSET PRSI,TOUCHBIT FCLEAR PRSI,NDESCBIT FCLEAR PRSI,SECRETBIT PRINTI " hands you" CALL PRINTT,PRSI FSET PRSI,SEENBIT PRINTR "." ?PRG16: PRINTI " doesn't have" CALL PRINTT,PRSI PRINTR "." ?CCL3: CALL HAR-HAR RSTACK .FUNCT PRE-ASK-CONTEXT-FOR,P LOC PRSO >P FSET? P,PERSONBIT \?CCL3 CALL PERFORM,V?ASK-FOR,P,PRSO RTRUE ?CCL3: CALL PRE-ASK-CONTEXT-ABOUT,V?ASK-FOR RSTACK .FUNCT V-ASK-CONTEXT-FOR CALL ARENT-TALKING RSTACK .FUNCT V-ATTACK CALL IKILL,STR?88 RSTACK .FUNCT V-BOW,P SET 'P,PRSO ZERO? P \?CND1 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P \?CND1 PRINTR "No one notices." ?CND1: FSET? P,PERSONBIT \?CTR8 EQUAL? P,PLAYER \?CCL9 ?CTR8: CALL HAR-HAR RSTACK ?CCL9: CALL GRAB-ATTENTION,P ZERO? STACK /TRUE CALL HE-SHE-IT,P,TRUE-VALUE PRINTC 32 FSET? P,FEMALE \?PRG21 PRINTI "curtsey" JUMP ?PRG23 ?PRG21: PRINTI "bow" ?PRG23: PRINTR "s back to you." .FUNCT PRE-BRUSH EQUAL? PRSO,ROOMS \FALSE EQUAL? P-PRSA-WORD,W?SCRAPE,W?SCRATCH /FALSE SET 'PRSO,WINNER RFALSE .FUNCT V-BRUSH EQUAL? P-PRSA-WORD,W?SCRAPE,W?SCRATCH \?CTR2 FSET? PRSO,PERSONBIT \?CCL3 ?CTR2: EQUAL? HERE,YOUR-BATHROOM,KITCHEN \?CCL8 EQUAL? PRSO,PLAYER,HEAD,HANDS \?CCL11 SET 'WASHED,TRUE-VALUE PRINT AHHH RTRUE ?CCL11: FSET? PRSO,PERSONBIT \?CCL15 CALL FACE-RED RSTACK ?CCL15: CALL UNCLEAN RSTACK ?CCL8: CALL TELL-FIND-NONE,STR?90 RSTACK ?CCL3: CALL UNCLEAN RSTACK .FUNCT UNCLEAN PRINTR "You try for a minute and then decide it's an endless task." .FUNCT REMOVE-CAREFULLY,OBJ=0,OLIT SET 'OLIT,LIT ZERO? OBJ /?CND1 CALL NOT-IT,OBJ MOVE OBJ,LOCAL-GLOBALS ?CND1: CALL LIT? >LIT ZERO? OLIT /TRUE ZERO? LIT \TRUE PRINTR "You are left in the dark..." .FUNCT V-$CALL CALL UNSNOOZE,PRSO FSET? PRSO,PERSONBIT \?CCL3 CALL META-LOC,PRSO EQUAL? STACK,HERE \?CCL6 CALL GRAB-ATTENTION,PRSO ZERO? STACK /?PRG15 PUTP PRSO,P?LDESC,12 CALL START-SENTENCE,PRSO PRINTI " is " GET LDESC-STRINGS,12 PRINT STACK PRINTR "." ?PRG15: RETURN 2 ?CCL6: CALL CORRIDOR-LOOK,PRSO ZERO? STACK /?CCL18 CALL START-SENTENCE,PRSO PRINTR " ignores you." ?CCL18: CALL NOT-HERE,PRSO RSTACK ?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE CALL MISSING,STR?30 RSTACK .FUNCT V-CHASTISE EQUAL? PRSO,INTDIR /?CND1 PRINT I-ASSUME PRINTI " Look at" CALL HIM-HER-IT,PRSO PRINTI ", not look in" CALL HIM-HER-IT,PRSO PRINTI " nor look for" CALL HIM-HER-IT,PRSO PRINTI " nor any other preposition.]" CRLF ?CND1: CALL PERFORM,V?EXAMINE,PRSO RTRUE .FUNCT V-BOARD IN? PRSO,ROOMS /?CTR2 FSET? PRSO,DOORBIT \?CCL3 ?CTR2: CALL V-THROUGH RSTACK ?CCL3: FSET? PRSO,VEHBIT \?CCL7 IN? WINNER,PRSO \?CCL11 CALL ALREADY,PLAYER PRINTI "in" CALL PRINTT,PRSO PRINTR ".)" ?CCL11: MOVE WINNER,PRSO PRINTI "You are now " FSET? PRSO,SURFACEBIT \?PRG21 PRINTI "on" JUMP ?PRG23 ?PRG21: PRINTI "in" ?PRG23: CALL PRINTT,PRSO PRINTR "." ?CCL7: CALL YOU-CANT,STR?91 RSTACK .FUNCT V-CLIMB-ON CALL PERFORM,V?SIT,PRSO RTRUE .FUNCT V-CLIMB-UP,DIR=P?UP,OBJ=0,X IN? PRSO,ROOMS \?CCL3 CALL PERFORM,V?WALK-TO,PRSO RTRUE ?CCL3: GETPT HERE,DIR ZERO? STACK /?CCL5 CALL DO-WALK,DIR RTRUE ?CCL5: ZERO? OBJ \?CCL7 CALL YOU-CANT,STR?40 RSTACK ?CCL7: CALL HAR-HAR RSTACK .FUNCT V-CLIMB-DOWN CALL V-CLIMB-UP,P?DOWN RSTACK .FUNCT V-CLOSE FSET? PRSO,CONTBIT /?CCL3 FSET? PRSO,DOORBIT /?CCL3 EQUAL? PRSO,WINDOW /?CCL3 CALL YOU-CANT RSTACK ?CCL3: FSET? PRSO,DOORBIT /?CTR7 EQUAL? PRSO,WINDOW \?CCL8 ?CTR7: FSET? PRSO,OPENBIT \?CCL13 CALL OKAY,PRSO,STR?61 RSTACK ?CCL13: CALL ALREADY,PRSO,STR?61 RSTACK ?CCL8: FSET? PRSO,SURFACEBIT /?CCL16 GETP PRSO,P?CAPACITY ZERO? STACK /?CCL16 FSET? PRSO,OPENBIT \?CCL21 CALL OKAY,PRSO,STR?61 RSTACK ?CCL21: CALL ALREADY,PRSO,STR?61 RSTACK ?CCL16: CALL YOU-CANT RSTACK .FUNCT PRE-COMPARE,?TMP1 ZERO? PRSI \?CCL3 GETB P-PRSO,P-MATCHLEN EQUAL? 1,STACK \?CCL3 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "[Oops! Try: COMPARE IT TO" PRINT SOMETHING RTRUE ?CCL3: GETB P-PRSO,P-MATCHLEN EQUAL? 2,STACK \FALSE PUTB P-PRSO,P-MATCHLEN,1 GETB P-PRSO,1 >?TMP1 GETB P-PRSO,2 CALL PERFORM,PRSA,?TMP1,STACK RTRUE .FUNCT V-COMPARE EQUAL? PRSO,PRSI \?CCL3 PRINTR "They're the same thing!" ?CCL3: EQUAL? PLAYER,PRSO,PRSI \?PRG11 PRINTI "You" JUMP ?PRG13 ?PRG11: PRINTI "They" ?PRG13: PRINTR "'re not a bit alike." .FUNCT V-CONFRONT EQUAL? PRSO,PLAYER \?CCL3 CALL ARENT-TALKING RSTACK ?CCL3: FSET? PRSO,PERSONBIT /?CCL5 PRINTI "Wow! That ought to put a scare into" CALL HIM-HER-IT,PRSO PRINTR "!" ?CCL5: CALL WHO-CARES RSTACK .FUNCT V-MUNG FSET? PRSO,DOORBIT \?CCL3 ZERO? PRSI \?CCL3 FSET? PRSO,OPENBIT \?CCL8 PRINTR "You'd fly through the open door if you tried." ?CCL8: CALL UNLOCK-DOOR?,PRSO ZERO? STACK /?CCL12 PRINTR "Why don't you just open it instead?" ?CCL12: CALL IF-SPY RSTACK ?CCL3: FSET? PRSO,PERSONBIT /?CCL16 CALL IF-SPY RSTACK ?CCL16: CALL IKILL,STR?92 RSTACK .FUNCT V-DANCE,OW EQUAL? WINNER,PLAYER /?CCL3 EQUAL? PRSO,PLAYER \?CCL3 SET 'OW,WINNER SET 'WINNER,PLAYER CALL PERFORM,V?DANCE,OW SET 'WINNER,OW RTRUE ?CCL3: FSET? PRSO,PERSONBIT /?CCL7 CALL HAR-HAR RSTACK ?CCL7: CALL IN-MOTION?,PRSO ZERO? STACK /?CCL9 CALL TOO-BAD-BUT,PRSO,STR?93 RSTACK ?CCL9: ZERO? GENDER-KNOWN \?PRD13 EQUAL? WINNER,PLAYER /?PRG21 ?PRD13: FSET? WINNER,FEMALE /?PRD16 FSET? PRSO,FEMALE /?PRG21 ?PRD16: FSET? WINNER,FEMALE \?PRG23 FSET? PRSO,FEMALE /?PRG23 ?PRG21: CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?94 PRINTI " with" CALL HIM-HER-IT,PRSO PRINTR " for a minute." ?PRG23: CALL HE-SHE-IT,PRSO,TRUE-VALUE PRINTR " doesn't fancy a dance with you." .FUNCT PRE-DESCRIBE EQUAL? WINNER,PLAYER \FALSE EQUAL? PRSI,FALSE-VALUE,ROOMS \?CCL6 CALL QCONTEXT-GOOD? ZERO? STACK /?CCL9 SET 'WINNER,QCONTEXT CALL PERFORM,PRSA,PRSO RTRUE ?CCL9: CALL ARENT-TALKING RSTACK ?CCL6: CALL PERFORM,V?TELL-ABOUT,PRSI,PRSO RTRUE .FUNCT V-DESCRIBE CALL V-FOO RSTACK .FUNCT V-UNDRESS EQUAL? PRSO,ROOMS,PLAYER \?CCL3 ZERO? NOW-WEARING \?CCL6 CALL ALREADY,PLAYER,STR?95 RSTACK ?CCL6: SET 'PRSO,FALSE-VALUE CALL V-WEAR RSTACK ?CCL3: FSET? PRSO,PERSONBIT \?CCL8 FSET? PRSO,MUNGBIT \?CCL11 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(Not in a family story!)" ?CCL11: CALL FACE-RED RSTACK ?CCL8: CALL HAR-HAR RSTACK .FUNCT V-DRESS,X EQUAL? PRSO,PLAYER,ROOMS \?CCL3 ZERO? NOW-WEARING \?CCL6 EQUAL? PLAYER,WINNER,PRSO \?CCL6 CALL FIND-FLAG,WINNER,WEARBIT >X ZERO? X \?CTR10 CALL FIND-FLAG,HERE,WEARBIT >X ZERO? X /?CCL11 ?CTR10: CALL TELL-I-ASSUME,X,STR?96 CALL PERFORM,V?WEAR,X RTRUE ?CCL11: SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You didn't say what to wear!)" ?CCL6: CALL ALREADY,WINNER,STR?97 RSTACK ?CCL3: FSET? PRSO,PERSONBIT \?CCL17 CALL ALREADY,WINNER,STR?97 RSTACK ?CCL17: FSET? PRSO,WEARBIT \?CCL19 CALL V-WEAR RTRUE ?CCL19: CALL FIND-OUTFIT >X ZERO? X /?CCL21 CALL TELL-I-ASSUME,X SET 'PRSO,X CALL V-WEAR RTRUE ?CCL21: CALL HAR-HAR RSTACK .FUNCT FIND-OUTFIT,X,?TMP1 CALL FIND-FLAG,WINNER,WEARBIT,NOW-WEARING >?TMP1 ZERO? ?TMP1 /?PRD3 RETURN ?TMP1 ?PRD3: CALL FIND-FLAG-HERE,WEARBIT >?TMP1 ZERO? ?TMP1 /?PRD4 RETURN ?TMP1 ?PRD4: CALL FIND-OUTFIT-IN,LUGGAGE >?TMP1 ZERO? ?TMP1 /?PRD5 RETURN ?TMP1 ?PRD5: CALL FIND-OUTFIT-IN,BED >?TMP1 ZERO? ?TMP1 /?PRD6 RETURN ?TMP1 ?PRD6: CALL FIND-OUTFIT-IN,CHEST-OF-DRAWERS >?TMP1 ZERO? ?TMP1 /?PRD7 RETURN ?TMP1 ?PRD7: CALL FIND-OUTFIT-IN,WARDROBE RSTACK .FUNCT FIND-OUTFIT-IN,OBJ,X CALL META-LOC,OBJ EQUAL? STACK,HERE \FALSE CALL FIND-FLAG,OBJ,WEARBIT >X ZERO? X /FALSE FSET? OBJ,OPENBIT /?CND6 FSET OBJ,OPENBIT CALL FIRST-YOU,STR?66,OBJ ?CND6: RETURN X .FUNCT V-CHANGE,X EQUAL? PRSO,ROOMS,TWEED-OUTFIT /?CTR2 EQUAL? PRSO,EXERCISE-OUTFIT,DINNER-OUTFIT,SLEEP-OUTFIT \?CCL3 ?CTR2: CALL FIND-OUTFIT >X ZERO? X /?CCL8 CALL PERFORM,V?WEAR,X RTRUE ?CCL8: CALL META-LOC,LUGGAGE EQUAL? STACK,HERE /?CCL10 PRINTI "You look around for " PRINTD LUGGAGE PRINTR " but don't find it." ?CCL10: CALL FIND-FLAG,LUGGAGE,WEARBIT >X ZERO? X /?PRG15 FSET LUGGAGE,OPENBIT CALL PERFORM,V?WEAR,X RTRUE ?PRG15: PRINTR "You can't find anything to change into." ?CCL3: CALL YOU-CANT RSTACK .FUNCT PRE-DRIVE-TO EQUAL? PRSO,CAR /?CCL3 CALL DONT-UNDERSTAND RSTACK ?CCL3: LOC WINNER EQUAL? STACK,CAR /?CCL5 CALL TELL-NOT-IN,CAR RTRUE ?CCL5: EQUAL? PRSI,INTDIR \?CCL7 CALL DO-WALK,P-DIRECTION RTRUE ?CCL7: CALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT TELL-NOT-IN,OBJ SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " not in" CALL HIM-HER-IT,OBJ PRINTR "!)" .FUNCT V-DRIVE-TO CALL V-FOO RSTACK .FUNCT V-DRINK CALL YOU-CANT RSTACK .FUNCT V-DROP,L CALL IDROP ZERO? STACK /FALSE SET 'L,TABLE-DINING IN? L,HERE /?CTR5 CALL FIND-FLAG-HERE,VEHBIT,PRSO >L ZERO? L /?CCL6 ?CTR5: MOVE PRSO,L CALL OKAY,PRSO PRINTI " is now on" CALL PRINTT,L PRINTR "." ?CCL6: CALL GROUND-DESC CALL OKAY,PRSO,STACK RSTACK .FUNCT GROUND-DESC CALL OUTSIDE?,HERE ZERO? STACK /?CTR2 LOC WINNER EQUAL? STACK,CAR \?CCL3 ?CTR2: RETURN STR?98 ?CCL3: RETURN STR?99 .FUNCT PRE-EAT EQUAL? PRSO,FALSE-VALUE,ROOMS \FALSE CALL META-LOC,DINNER EQUAL? STACK,HERE \?CCL6 CALL PERFORM,PRSA,DINNER RTRUE ?CCL6: CALL NOT-HERE,DINNER RTRUE .FUNCT V-EAT PRINTR "It's hard to believe you're that hungry." .FUNCT PRE-EMPTY EQUAL? PRSO,ROOMS \?CND1 CALL META-LOC,LUGGAGE EQUAL? HERE,STACK \?CCL5 SET 'PRSO,LUGGAGE ?CND1: EQUAL? PRSO,POND \?CCL8 CALL WONT-HELP RSTACK ?CCL5: CALL NOT-HERE,LUGGAGE RTRUE ?CCL8: EQUAL? PRSO,WENDISH-KIT,VIVIEN-BOX \?CCL10 CALL YOU-SHOULDNT RSTACK ?CCL10: EQUAL? PRSO,BOTTLE /?CCL12 FIRST? PRSO /?CCL12 CALL ALREADY,PRSO,STR?100 RSTACK ?CCL12: ZERO? PRSI /?CCL16 IN? PRSI,ROOMS /?CCL16 FSET? PRSI,CONTBIT /?CCL16 CALL TELL-FIND-NONE,STR?101,PRSI RETURN 2 ?CCL16: EQUAL? PRSO,CAR \FALSE ZERO? PRSI \FALSE LOC CAR CALL PERFORM,PRSA,PRSO,STACK RTRUE .FUNCT V-EMPTY,?TMP1,?TMP2 FSET? PRSO,CONTBIT \?CCL3 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?4 CALL PRINTT,PRSO ZERO? PRSI \?PRG17 EQUAL? PRSO,COFFIN /?CCL10 CALL FIND-FLAG-HERE,CONTBIT,PRSO >PRSI ZERO? PRSI /?CCL10 FSET PRSI,OPENBIT PRINTI " into" CALL PRINTT,PRSI JUMP ?PRG17 ?CCL10: SET 'PRSI,HERE PRINTC 32 CALL GROUND-DESC PRINT STACK ?PRG17: PRINTC 46 CRLF EQUAL? PRSI,HERE /?CCL21 CALL WEIGHT,PRSI >?TMP2 CALL WEIGHT,PRSO ADD ?TMP2,STACK >?TMP1 GETP PRSI,P?CAPACITY GRTR? ?TMP1,STACK \?CCL21 PRINT NOT-ENOUGH-ROOM RTRUE ?CCL21: CALL ROB,PRSO,PRSI RTRUE ?CCL3: CALL YOU-CANT RSTACK .FUNCT PRE-THROUGH EQUAL? PRSO,GLOBAL-HERE,ROOMS \?CCL3 CALL DO-WALK,P?IN RTRUE ?CCL3: ZERO? PRSI /FALSE EQUAL? PRSO,CAR \?CCL8 LOC WINNER EQUAL? STACK,CAR \?CCL11 SET 'PRSO,PRSI RFALSE ?CCL11: CALL TELL-NOT-IN,CAR RTRUE ?CCL8: CALL DONT-UNDERSTAND RSTACK .FUNCT V-THROUGH,RM,DIR CALL NOUN-USED?,W?DOOR,W?GATE,W?HOLE ZERO? STACK \?PRD5 CALL NOUN-USED?,W?PANEL ZERO? STACK /?CCL3 ?PRD5: 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 /?CCL12 CALL GOTO,RM ZERO? STACK \TRUE ?CCL12: CALL V-FOO RSTACK ?CCL3: IN? PRSO,ROOMS \?CCL16 EQUAL? PRSO,HERE \?CCL19 CALL WALK-WITHIN-ROOM RTRUE ?CCL19: CALL SEE-INTO?,PRSO,FALSE-VALUE ZERO? STACK /?CCL21 CALL GOTO,PRSO RTRUE ?CCL21: CALL PERFORM,V?WALK-TO,PRSO RTRUE ?CCL16: FSET? PRSO,VEHBIT \?CCL23 CALL PERFORM,V?BOARD,PRSO RSTACK ?CCL23: FSET? PRSO,PERSONBIT \?CCL26 CALL HAR-HAR RSTACK ?CCL26: FSET? PRSO,TAKEBIT /?CCL28 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?102 PRINTI " into" CALL PRINTT,PRSO CALL THIS-IS-IT,PRSO PRINTI " trying to go through" CALL HIM-HER-IT,PRSO PRINTR "." ?CCL28: CALL HAR-HAR RSTACK .FUNCT PRE-EXAMINE CALL ROOM-CHECK RSTACK .FUNCT V-EXAMINE,TXT=0 EQUAL? PRSO,PSEUDO-OBJECT /?CCL2 CALL NOUN-USED?,W?DOOR,W?PANEL 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 /?CTR12 EQUAL? PRSO,WALL,TOWER,OTHER-OUTFIT /?CTR12 EQUAL? PRSO,HEAD,HANDS,CASTLE \?CCL13 ?CTR12: CALL NOTHING-SPECIAL RSTACK ?CCL13: IN? PRSO,GLOBAL-OBJECTS \?CCL18 CALL NOT-HERE,PRSO RTRUE ?CCL18: IN? PRSO,ROOMS \?CCL20 ZERO? TXT \?CCL20 CALL ROOM-PEEK,PRSO RSTACK ?CCL20: CALL META-LOC,PRSO EQUAL? STACK,HERE /?CCL24 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?CCL24 ZERO? TXT \?CCL24 CALL TOO-BAD-BUT,PRSO,STR?103 RSTACK ?CCL24: GETP PRSO,P?TEXT >TXT ZERO? TXT /?CCL29 PRINT TXT CRLF RTRUE ?CCL29: FSET? PRSO,DOORBIT \?CCL33 CALL CHECK-DOOR,PRSO RSTACK ?CCL33: FSET? PRSO,CONTBIT /?CTR34 FSET? PRSO,SURFACEBIT \?CCL35 ?CTR34: CALL V-LOOK-INSIDE RSTACK ?CCL35: CALL NOTHING-SPECIAL RSTACK .FUNCT NOTHING-SPECIAL PRINTI "You look over" CALL PRINTT,PRSO PRINTR " for a minute and find nothing suspicious -- for now." .FUNCT GLOBAL-IN?,OBJ1,OBJ2,TBL,VAL=0 GETPT OBJ2,P?GLOBAL >TBL ZERO? TBL /?CND1 PTSIZE TBL SUB STACK,1 CALL ZMEMQB,OBJ1,TBL,STACK >VAL ?CND1: ZERO? VAL /?PRD6 RETURN VAL ?PRD6: EQUAL? OBJ1,OBJ2 /?CCL4 RETURN VAL ?CCL4: SET 'VAL,TRUE-VALUE RETURN VAL .FUNCT V-FAINT CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?3 CALL HIM-HER-IT,WINNER,FALSE-VALUE,TRUE-VALUE PRINTI " best, but" CALL HE-SHE-IT,WINNER,0,STR?1 PRINTR " too excited." .FUNCT V-FILL CALL YOU-CANT RSTACK .FUNCT PRE-FIND,?TMP1 EQUAL? PRSO,PLAYER-NAME,PLAYER /FALSE FSET? PRSO,SECRETBIT \?CCL5 FSET? PRSO,SEENBIT /?CCL5 CALL NO-FUN RSTACK ?CCL5: IN? PRSO,ROOMS \?CCL9 EQUAL? PRSO,HERE \?CCL12 CALL ALREADY,WINNER,STR?104 RSTACK ?CCL12: CALL PERFORM,V?WALK-TO,PRSO RTRUE ?CCL9: FSET? PRSO,PERSONBIT \FALSE CALL META-LOC,WINNER >?TMP1 CALL META-LOC,PRSO EQUAL? ?TMP1,STACK \?CCL18 FSET? PRSO,NDESCBIT /?CCL18 CALL BITE-YOU RTRUE ?CCL18: CALL FOLLOW-LOC? ZERO? STACK \TRUE CALL WHO-KNOWS?,PRSO RETURN 2 .FUNCT BITE-YOU PRINTI "If" CALL HE-SHE-IT,PRSO PRINTI " were any closer," CALL HE-SHE-IT,PRSO PRINTR "'d bite you!" .FUNCT FAR-AWAY?,L GETP HERE,P?LINE ZERO? STACK /TRUE EQUAL? L,GLOBAL-OBJECTS /TRUE FSET? L,SECRETBIT \?CCL7 FSET? L,SEENBIT \TRUE ?CCL7: EQUAL? L,YOUR-ROOM \?CCL11 EQUAL? HERE,YOUR-BATHROOM /FALSE ?CCL11: EQUAL? L,YOUR-BATHROOM \?CCL15 EQUAL? HERE,YOUR-ROOM /FALSE ?CCL15: GETP L,P?LINE ZERO? STACK /TRUE FSET? FRIEND,TOUCHBIT /?CCL21 EQUAL? L,CAR,DRIVEWAY,COURTYARD \TRUE ?CCL21: EQUAL? HERE,DRIVEWAY \?CND1 EQUAL? L,CAR,DRIVEWAY /FALSE GETB LAST-NAME,0 ZERO? STACK /TRUE ?CND1: FSET? HERE,SECRETBIT \?PRD32 FSET? L,SECRETBIT \?CCL30 ?PRD32: FSET? HERE,SECRETBIT /FALSE FSET? L,SECRETBIT \FALSE ?CCL30: CALL SEE-INTO?,L,FALSE-VALUE ZERO? STACK /TRUE RFALSE .FUNCT V-FIND,L LOC PRSO >L EQUAL? PRSO,PLAYER \?CCL3 PRINTI "You're right here, " CALL TELL-LOCATION CRLF RTRUE ?CCL3: EQUAL? PRSO,HANDS,HEAD \?CCL7 CALL BITE-YOU RSTACK ?CCL7: CALL HELD?,PRSO ZERO? STACK /?CCL9 PRINTR "You have it." ?CCL9: FSET? PRSO,SECRETBIT /?CTR12 EQUAL? PRSO,ARTIFACT \?CCL13 ?CTR12: CALL NO-FUN RSTACK ?CCL13: CALL VISIBLE?,PRSO ZERO? STACK /?CCL17 FSET? PRSO,SECRETBIT \?PRG21 CALL DISCOVER,PRSO RSTACK ?PRG21: PRINTR "It's right here." ?CCL17: FSET? PRSO,SEENBIT /?CCL24 CALL NOT-HERE,PRSO,TRUE-VALUE RSTACK ?CCL24: EQUAL? L,GLOBAL-OBJECTS,LOCAL-GLOBALS \?CCL27 PRINTR "It's around somewhere." ?CCL27: CALL META-LOC,PRSO CALL FAR-AWAY?,STACK ZERO? STACK /?CCL32 PRINTR "It's far away from here." ?CCL32: FSET? L,PERSONBIT \?CCL36 CALL THIS-IS-IT,L CALL START-SENTENCE,L PRINTR " probably has it." ?CCL36: FSET? L,SURFACEBIT /?CTR39 FSET? L,CONTBIT /?CTR39 IN? L,ROOMS \?PRG55 ?CTR39: CALL THIS-IS-IT,L PRINTI "It's probably " FSET? L,SURFACEBIT \?PRG51 PRINTI "on" JUMP ?PRG53 ?PRG51: PRINTI "in" ?PRG53: CALL PRINTT,L PRINTR "." ?PRG55: PRINTR "It's nowhere in particular." .FUNCT NO-FUN SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(If it's that easy, it spoils the fun!)" .FUNCT TELL-LOCATION,DIR IN? PLAYER,HERE /?CND1 PRINTI "sitting " ?CND1: FSET? HERE,SURFACEBIT \?PRG10 PRINTI "on" JUMP ?PRG12 ?PRG10: PRINTI "in" ?PRG12: CALL PRINTT,HERE PRINTC 46 RTRUE .FUNCT V-FIX CALL MORE-SPECIFIC RSTACK .FUNCT FOLLOW-LOC?,L GETP PRSO,P?CHARACTER >L GET FOLLOW-LOC,L >L ZERO? L /FALSE PRINTI "The last you knew," CALL HE-SHE-IT,PRSO PRINTI " was " FSET? L,SURFACEBIT \?PRG11 PRINTI "on" JUMP ?CND6 ?PRG11: PRINTI "in" ?CND6: GETP PRSO,P?CHARACTER CALL TELL-HIS-HER-BEDROOM,STACK,L PRINTI ". " RETURN L .FUNCT V-FOLLOW,L EQUAL? PRSO,WINNER \?CCL3 CALL YOU-CANT RSTACK ?CCL3: EQUAL? PRSO,GHOST-NEW /?CCL5 FSET? PRSO,PERSONBIT /?CCL5 PRINTI "How tragic to see you, a" PRINT FAMOUS-YOUNG-DETECTIVE PRINTI ", stalking " CALL PRINTA,PRSO PRINTR "!" ?CCL5: CALL META-LOC,PRSO >L EQUAL? HERE,L \?CCL11 PRINTI "You're in the same place as" CALL HE-SHE-IT,PRSO PRINTR "!" ?CCL11: GETP PRSO,P?CHARACTER GET FOLLOW-LOC,STACK >L ZERO? L /?CCL15 CALL PERFORM,V?WALK-TO,L RSTACK ?CCL15: CALL WHO-KNOWS?,PRSO RETURN 2 .FUNCT V-FOO PRINTR "[Foo!! This is a bug!!]" .FUNCT V-FORGIVE CALL YOU-CANT RSTACK .FUNCT PRE-GIVE EQUAL? PRSI,PLAYER,PLAYER-NAME /FALSE CALL NOT-HOLDING?,PRSO ZERO? STACK \TRUE RFALSE .FUNCT V-GIVE ZERO? PRSI \?CCL3 CALL YOU-CANT RSTACK ?CCL3: FSET? PRSI,PERSONBIT /?CCL5 CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't give " CALL PRINTA,PRSO PRINTI " to " CALL PRINTA,PRSI PRINTR "!" ?CCL5: EQUAL? PRSI,PLAYER \?CCL9 CALL PERFORM,V?TAKE,PRSO RTRUE ?CCL9: EQUAL? PRSO,LUGGAGE \?CCL11 FIRST? PRSO \?CCL11 FSET? YOUR-ROOM,TOUCHBIT \?CCL11 CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?105 PRINTR " your gift." ?CCL11: MOVE PRSO,PRSI CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?106 PRINTI " your gift." CRLF CALL TREASURE-FOUND?,PRSO,PRSI GETP PRSI,P?CHARACTER EQUAL? VARIATION,STACK \TRUE FSET? PRSO,RMUNGBIT /?CCL20 EQUAL? PRSO,BLOWGUN,COSTUME \TRUE ?CCL20: SET 'WINNER,PLAYER CALL PERFORM,V?ASK-ABOUT,PRSI,PRSO RTRUE .FUNCT PRE-SGIVE,X GET P-NAMW,0 >X GET P-NAMW,1 PUT P-NAMW,0,STACK PUT P-NAMW,1,X CALL PERFORM,V?GIVE,PRSI,PRSO RTRUE .FUNCT V-SGIVE CALL V-FOO RSTACK .FUNCT PRE-HELLO,P,WORD=0 EQUAL? P-PRSA-WORD,W?HELLO,W?HI \?CCL3 SET 'WORD,STR?107 JUMP ?CND1 ?CCL3: EQUAL? P-PRSA-WORD,W?SORRY \?CND1 SET 'WORD,STR?108 ?CND1: EQUAL? PRSO,ROOMS /?CCL7 FSET? PRSO,PERSONBIT /?CCL10 EQUAL? PRSO,CREW-GLOBAL /?CCL10 CALL WONT-HELP-TO-TALK-TO,PRSO RTRUE ?CCL10: FSET? PRSO,MUNGBIT \?CCL14 CALL PERFORM,V?ALARM,PRSO RTRUE ?CCL14: ZERO? WORD /FALSE PRINT I-ASSUME PRINT WORD CALL HIM-HER-IT,PRSO PRINTI ".]" CRLF RFALSE ?CCL7: CALL QCONTEXT-GOOD? ZERO? STACK /?CCL20 PRINT I-ASSUME PRINTC 32 PRINTD QCONTEXT PRINTI ".]" CRLF CALL PERFORM,PRSA,QCONTEXT RTRUE ?CCL20: EQUAL? WINNER,PLAYER \?CCL26 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL26 PRINT I-ASSUME PRINTC 32 PRINTD P PRINTI ".]" CRLF CALL PERFORM,PRSA,P RTRUE ?CCL26: CALL NOT-CLEAR-WHOM RSTACK .FUNCT V-HELLO FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL6 ZERO? LIT \?PRG12 PRINTR """Hello.""" ?PRG12: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?109 PRINTR " at you." ?CCL6: CALL WONT-HELP-TO-TALK-TO,PRSO RSTACK ?CCL3: CALL NOT-CLEAR-WHOM RSTACK .FUNCT V-HELP EQUAL? PRSO,FALSE-VALUE,PLAYER \?CCL3 CALL HELP-TEXT RSTACK ?CCL3: CALL MORE-SPECIFIC RSTACK .FUNCT HELP-TEXT SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "[You'll find plenty of help in your " PRINTD MOONMIST 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-KILL CALL IKILL,STR?110 RSTACK .FUNCT IKILL,STR=0 ZERO? PRSO \?CCL3 SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(There's nothing here to " PRINT STR PRINTR ".)" ?CCL3: ZERO? PRSI \?CCL7 SET 'CLOCK-WAIT,TRUE-VALUE PRINT YOU-DIDNT-SAY-W PRINTI "hat to " PRINT STR CALL PRINTT,PRSO FSET? PRSO,WEAPONBIT \?PRG15 PRINTI " at" JUMP ?PRG17 ?PRG15: PRINTI " with" ?PRG17: PRINTR ".]" ?CCL7: FSET? PRSO,PERSONBIT /?PRG21 CALL HAR-HAR RSTACK ?PRG21: PRINT NO-VIOLENCE RTRUE .FUNCT V-KISS,X EQUAL? PRSO,PLAYER \?CCL3 PRINTI "You kiss " PRINTD PLAYER PRINTR " for a minute. Yuk!" ?CCL3: FSET? PRSO,PERSONBIT \?PRG10 FSET? PRSO,MUNGBIT /?PRG10 CALL FACE-RED RSTACK ?PRG10: PRINTR "What a (ahem!) strange idea!" .FUNCT V-KNOCK,P FSET? PRSO,DOORBIT \?CCL3 FSET? PRSO,OPENBIT \?CCL7 PRINTR "It's open!" ?CCL7: CALL DOOR-ROOM,HERE,PRSO >P ZERO? P /?PRG16 CALL FIND-FLAG,P,PERSONBIT,PLAYER >P ZERO? P /?PRG16 FCLEAR PRSO,LOCKED FSET PRSO,OPENBIT FSET PRSO,ONBIT CALL UNSNOOZE,P CALL THIS-IS-IT,P CALL HE-SHE-IT,P,TRUE-VALUE PRINTR " opens the door, then retreats into the room." ?PRG16: PRINTR "There's no answer." ?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(Why knock on " CALL PRINTA,PRSO PRINTR "?)" .FUNCT V-STAND,P EQUAL? WINNER,PLAYER \?CCL3 IN? PLAYER,HERE /?CCL3 CALL OWN-FEET RSTACK ?CCL3: CALL ALREADY,WINNER,STR?113 RSTACK .FUNCT V-LEAP ZERO? PRSO /?CCL3 EQUAL? PRSO,INTDIR /?CCL3 CALL YOU-CANT RTRUE ?CCL3: EQUAL? HERE,DECK,LOVER-PATH \?CCL7 PRINTI "This was not a very safe place to try jumping." CALL FINISH RSTACK ?CCL7: CALL V-SKIP RSTACK .FUNCT V-SKIP CALL WHEE RSTACK .FUNCT WHEE,X RANDOM 5 >X EQUAL? 1,X \?CCL3 PRINTR "Very good. Now you can go to the second grade." ?CCL3: EQUAL? 2,X \?CCL7 PRINTR "I hope you enjoyed that more than I did." ?CCL7: EQUAL? 3,X \?CCL11 PRINTI "Are you enjoying " PRINTD PLAYER PRINTR "?" ?CCL11: EQUAL? 4,X \?PRG18 PRINTR "Wheeeeeeeeee!!!!!" ?PRG18: PRINTR "Do you expect someone to applaud?" .FUNCT V-LEAVE,GT EQUAL? WINNER,FOLLOWER \?CND1 SET 'FOLLOWER,0 ?CND1: EQUAL? PRSO,ROOMS,HERE,GLOBAL-HERE \?CCL5 CALL DO-WALK,P?OUT PUTP WINNER,P?LDESC,9 EQUAL? WINNER,FRIEND \TRUE EQUAL? VARIATION,FRIEND-C /TRUE GET GOAL-TABLES,FRIEND-C >GT LESS? BED-TIME,PRESENT-TIME \?CCL12 EQUAL? HERE,TAMARA-ROOM /TRUE PUT GT,GOAL-FUNCTION,X-RETIRES CALL ESTABLISH-GOAL,FRIEND,TAMARA-ROOM RTRUE ?CCL12: PUT GT,GOAL-FUNCTION,NULL-F IN? LORD,HERE /TRUE LOC LORD CALL ESTABLISH-GOAL,FRIEND,STACK RTRUE ?CCL5: LOC PRSO EQUAL? STACK,PLAYER \?CCL18 CALL PERFORM,V?DROP,PRSO RTRUE ?CCL18: LOC WINNER EQUAL? STACK,PRSO /?CCL20 CALL TELL-NOT-IN,PRSO RETURN 2 ?CCL20: CALL DO-WALK,P?OUT RTRUE .FUNCT PRE-LIE CALL ROOM-CHECK RSTACK .FUNCT V-LIE CALL V-SIT,TRUE-VALUE RSTACK .FUNCT PRE-LISTEN FSET? PRSO,PERSONBIT \?CCL3 GETP PRSO,P?LDESC EQUAL? STACK,22 \?CCL3 CALL PERFORM,V?LISTEN,PIANO RTRUE ?CCL3: CALL PRE-ASK-ABOUT RSTACK .FUNCT V-LISTEN FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 CALL WAITING-FOR-YOU-TO-SPEAK RTRUE ?CCL3: CALL TOO-BAD-BUT,PRSO PRINTR " makes no sound." .FUNCT V-LOCK FSET? PRSO,DOORBIT \?CCL3 EQUAL? PRSO,HERE \?CCL6 CALL OKAY,PRSO,STR?67 RSTACK ?CCL6: CALL TELL-FIND-NONE,STR?114,PRSO RSTACK ?CCL3: CALL YOU-CANT RSTACK .FUNCT V-LOOK CALL DESCRIBE-ROOM,TRUE-VALUE ZERO? STACK /FALSE CALL DESCRIBE-OBJECTS RSTACK .FUNCT V-LOOK-BEHIND FSET? PRSO,DOORBIT \?PRG6 FSET? PRSO,OPENBIT /?PRG6 CALL TOO-BAD-BUT,PRSO,STR?61 RSTACK ?PRG6: PRINTI "There's nothing behind" CALL HIM-HER-IT,PRSO PRINTR "." .FUNCT V-LOOK-DOWN EQUAL? PRSO,ROOMS \?CCL3 PRINTI "You see nothing suspicious " CALL GROUND-DESC PRINT STACK PRINTR "." ?CCL3: CALL HAR-HAR RSTACK .FUNCT PRE-LOOK-INSIDE CALL ROOM-CHECK RSTACK .FUNCT V-LOOK-INSIDE,DIR=P?IN,RM EQUAL? PRSO,ROOMS \?CND1 EQUAL? DIR,P?OUT \?CCL5 CALL GLOBAL-IN?,WINDOW,HERE ZERO? STACK /?CND1 CALL PERFORM,PRSA,WINDOW,PRSI RTRUE ?CCL5: SET 'RM,P-IT-OBJECT FSET? RM,CONTBIT /?CCL9 CALL FIND-FLAG-LG,HERE,CONTBIT >RM ZERO? RM \?CCL9 SET 'RM,WINDOW CALL GLOBAL-IN?,RM,HERE ZERO? STACK \?CCL9 CALL FIND-FLAG-LG,HERE,DOORBIT >RM ZERO? RM /?CND1 ?CCL9: CALL TELL-I-ASSUME,RM CALL PERFORM,PRSA,RM,PRSI RTRUE ?CND1: EQUAL? PRSO,GLOBAL-HERE \?CCL16 CALL PERFORM,V?LOOK RTRUE ?CCL16: IN? PRSO,ROOMS \?CCL18 CALL NOUN-USED?,W?DOOR ZERO? STACK \?CCL18 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK \?CTR17 CALL SEE-INTO?,PRSO,FALSE-VALUE ZERO? STACK /?CCL18 ?CTR17: CALL ROOM-PEEK,PRSO RSTACK ?CCL18: CALL V-LOOK-THROUGH,TRUE-VALUE ZERO? STACK \TRUE FSET? PRSO,CONTBIT /?CTR26 FSET? PRSO,SURFACEBIT \?CCL27 ?CTR26: CALL SEE-INSIDE?,PRSO,TRUE-VALUE ZERO? STACK \?CND30 CALL FIRST-YOU,STR?66,PRSO ?CND30: FIRST? PRSO \?CCL34 PRINTI "You can see" CALL PRINT-CONTENTS,PRSO FSET? PRSO,SURFACEBIT \?PRG42 PRINTI " on" JUMP ?PRG44 ?PRG42: PRINTI " inside" ?PRG44: CALL HIM-HER-IT,PRSO PRINTR "." ?CCL34: EQUAL? PRSO,SIDEBOARD,CHAIR-DINING /?CTR46 EQUAL? PRSO,TABLE-DINING,PIANO,WYVERN /?CTR46 EQUAL? PRSO,COAT-RACK,WRITING-DESK,VICTORIA-CHAIR \?CCL47 ?CTR46: CALL TELL-LIKE-BROCHURE RSTACK ?CCL47: FSET? PRSO,SURFACEBIT \?CCL52 PRINTI "There's nothing on" CALL HIM-HER-IT,PRSO IN? PLAYER,PRSO \?PRG59 PRINTI " except you" ?PRG59: PRINTR "." ?CCL52: CALL TOO-BAD-BUT,PRSO,STR?100 RSTACK ?CCL27: EQUAL? DIR,P?IN \?CCL62 CALL YOU-CANT,STR?115 RSTACK ?CCL62: CALL YOU-CANT,STR?116 RSTACK .FUNCT FIRST-YOU,STR,OBJ=0,OBJ2=0 PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR ZERO? OBJ /?PRG13 CALL PRINTT,OBJ EQUAL? STR,STR?66 \?CND7 FSET OBJ,OPENBIT ?CND7: ZERO? OBJ2 /?PRG13 PRINTI " from" CALL PRINTT,OBJ2 ?PRG13: PRINTR " first.)" .FUNCT V-LOOK-THROUGH,INSIDE=0,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: CALL NO-BEYOND RSTACK ?CCL6: CALL ZMEMQ,PRSO,CHAR-ROOM-TABLE ZERO? STACK /?CCL13 CALL PERFORM,PRSA,KEYHOLE RTRUE ?CCL13: CALL TOO-BAD-BUT,PRSO,STR?61 RSTACK ?CCL3: EQUAL? PRSO,WINDOW \?CCL15 CALL NO-BEYOND RSTACK ?CCL15: FSET? PRSO,PERSONBIT \?CCL18 PRINTR "You forgot to bring your X-ray glasses." ?CCL18: ZERO? INSIDE \FALSE FSET? PRSO,TRANSBIT \?CCL24 PRINTR "Everything looks bigger." ?CCL24: CALL YOU-CANT,STR?117 RSTACK .FUNCT NO-BEYOND PRINTI "You can't tell what's beyond" CALL HIM-HER-IT,PRSO PRINTR "." .FUNCT ROOM-PEEK,RM,SAFE=0,X=0,OHERE,OLIT,TXT EQUAL? RM,HERE \?CCL3 CALL V-LOOK RTRUE ?CCL3: ZERO? SAFE \?CCL5 CALL SEE-INTO?,RM ZERO? STACK /FALSE ?CCL5: SET 'OHERE,HERE SET 'OLIT,LIT SET 'HERE,RM CALL MAKE-ALL-PEOPLE,-12 CALL LIT? >LIT PRINTI "You peer " FSET? RM,SURFACEBIT \?PRG15 PRINTI "at" JUMP ?PRG17 ?PRG15: PRINTI "into" ?PRG17: CALL HIM-HER-IT,RM PRINTC 58 CRLF CALL DESCRIBE-OBJECTS ZERO? STACK /?CCL21 SET 'X,TRUE-VALUE JUMP ?CND19 ?CCL21: GETP RM,P?LDESC >TXT ZERO? TXT /?CND19 SET 'X,TRUE-VALUE PRINT TXT CRLF ?CND19: ZERO? X \?CND25 PRINTI "You can't see anything suspicious." CRLF ?CND25: SET 'HERE,OHERE SET 'LIT,OLIT RTRUE .FUNCT SEE-INTO?,THERE,TELL?=1,IGNORE-DOOR=0,P,L,TBL,O CALL CORRIDOR-LOOK,THERE ZERO? STACK \TRUE SET 'P,0 ?PRG3: NEXTP HERE,P >P ZERO? P /?CCL6 LESS? P,LOW-DIRECTION \?CND5 ?CCL6: ZERO? TELL? /FALSE CALL TELL-CANT-FIND RFALSE ?CND5: GETPT HERE,P >TBL PTSIZE TBL >L EQUAL? L,UEXIT \?CCL13 GETB TBL,REXIT EQUAL? STACK,THERE \?PRG3 RTRUE ?CCL13: EQUAL? L,DEXIT \?CCL17 GETB TBL,REXIT EQUAL? STACK,THERE \?PRG3 GETB TBL,DEXITOBJ FSET? STACK,OPENBIT /TRUE GETB 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 GETB TBL,REXIT EQUAL? STACK,THERE \?PRG3 GETB TBL,CEXITFLAG VALUE STACK ZERO? STACK \TRUE ZERO? TELL? /FALSE CALL TELL-CANT-FIND RFALSE .FUNCT TELL-CANT-FIND SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(That place isn't close enough.)" .FUNCT V-LOOK-ON FSET? PRSO,SURFACEBIT \?PRG4 CALL V-LOOK-INSIDE RSTACK ?PRG4: PRINTI "There's no good surface on" CALL HIM-HER-IT,PRSO PRINTR "." .FUNCT V-LOOK-OUTSIDE CALL V-LOOK-INSIDE,P?OUT RSTACK .FUNCT PRE-LOOK-UNDER CALL ROOM-CHECK RSTACK .FUNCT V-LOOK-UNDER EQUAL? PRSO,HEAD,HANDS,EYE \?CCL3 CALL WONT-HELP RSTACK ?CCL3: CALL HELD?,PRSO ZERO? STACK /?CCL5 PRINTI "You're " FSET? PRSO,WORNBIT \?PRG13 PRINTI "wear" JUMP ?PRG15 ?PRG13: PRINTI "hold" ?PRG15: PRINTI "ing" CALL PRINTT,PRSO PRINTR "!" ?CCL5: FSET? PRSO,PERSONBIT \?CCL18 PRINTI "Nope. Nothing hiding under" CALL HIM-HER-IT,PRSO PRINTR "." ?CCL18: LOC PRSO EQUAL? STACK,VIVIEN-BOX,WENDISH-KIT \?CCL22 PRINTR "There's more stuff there." ?CCL22: LOC PRSO EQUAL? STACK,HERE,LOCAL-GLOBALS \?PRG30 PRINTR "There's nothing there but dust." ?PRG30: PRINTR "That's not a bit useful." .FUNCT V-LOOK-UP,HR ZERO? PRSI /?CCL3 PRINTI "There's no information in" CALL PRINTT,PRSI PRINTI " about" CALL PRINTT,PRSO PRINTR "." ?CCL3: EQUAL? PRSO,ROOMS \?CCL7 CALL OUTSIDE?,HERE ZERO? STACK /?CCL10 CALL PERFORM,V?EXAMINE,MOON RTRUE ?CCL10: CALL CREEPY?,HERE ZERO? STACK /?PRG21 PRINTI "Shadows play on the stone ceiling" EQUAL? HERE,SITTING-PASSAGE \?PRG19 PRINTI " and" CALL PRINTT,SECRET-SITTING-DOOR ?PRG19: PRINTR "." ?PRG21: PRINTI "The ceiling is decorated with swirly lines and patterns." EQUAL? HERE,TAMARA-ROOM \?CND23 GETP LUMBER-ROOM,P?CORRIDOR ZERO? STACK /?CND23 PRINTR " There's a hole directly over the bed." ?CND23: CRLF RTRUE ?CCL7: CALL YOU-CANT,STR?118 RSTACK .FUNCT PRE-MEET IN? PRSO,HERE \?CCL3 CALL PERFORM,V?HELLO,PRSO RTRUE ?CCL3: CALL PERFORM,V?WALK-TO,PRSO RTRUE .FUNCT V-MEET CALL V-FOO RSTACK .FUNCT PRE-MOVE CALL HELD?,PRSO ZERO? STACK /FALSE PRINTR "Juggling isn't one of your talents." .FUNCT V-MOVE FSET? PRSO,TAKEBIT \?CCL3 PRINTI "Moving" CALL HIM-HER-IT,PRSO PRINTR " reveals nothing." ?CCL3: CALL YOU-CANT RSTACK .FUNCT PRE-MOVE-DIR EQUAL? PRSI,INTDIR /FALSE CALL DONT-UNDERSTAND RTRUE .FUNCT V-MOVE-DIR PRINTI "You can't move" CALL HIM-HER-IT,PRSO PRINTI " in any particular " PRINTD INTDIR PRINTR "." .FUNCT V-NOD EQUAL? PRSO,ROOMS /?CCL3 CALL YOU-CANT RSTACK ?CCL3: ZERO? AWAITING-REPLY /?CCL5 CALL PERFORM,V?YES RTRUE ?CCL5: CALL PERFORM,V?HELLO,ROOMS RTRUE .FUNCT V-OPEN,F,STR FSET? PRSO,CONTBIT /?CCL3 FSET? PRSO,DOORBIT /?CCL3 EQUAL? PRSO,WINDOW /?CCL3 CALL YOU-CANT RSTACK ?CCL3: FSET? PRSO,DOORBIT /?CTR7 EQUAL? PRSO,WINDOW /?CTR7 GETP PRSO,P?CAPACITY ZERO? STACK /?CCL8 ?CTR7: FSET? PRSO,LOCKED \?CND12 CALL UNLOCK-DOOR?,PRSO ZERO? STACK /?CCL16 FCLEAR PRSO,LOCKED CALL FIRST-YOU,STR?119,PRSO ?CND12: FSET? PRSO,OPENBIT \?CCL19 CALL ALREADY,PRSO,STR?66 RSTACK ?CCL16: CALL TOO-BAD-BUT,PRSO,STR?67 RTRUE ?CCL19: FSET PRSO,OPENBIT FSET? PRSO,DOORBIT /?CTR21 EQUAL? PRSO,WINDOW /?CTR21 FIRST? PRSO \?CTR21 FSET? PRSO,TRANSBIT \?PRG27 ?CTR21: CALL OKAY,PRSO,STR?66 RSTACK ?PRG27: PRINTI "You open" CALL HIM-HER-IT,PRSO PRINTI " and see" CALL PRINT-CONTENTS,PRSO PRINTR "." ?CCL8: CALL YOU-CANT RSTACK .FUNCT PRE-OPEN-WITH CALL NOT-HOLDING?,PRSI ZERO? STACK \TRUE RFALSE .FUNCT V-OPEN-WITH CALL PERFORM,V?OPEN,PRSO RTRUE .FUNCT V-PLAY SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "[Speaking of playing, you'd enjoy Infocom's other fictions, too!]" .FUNCT V-POUR CALL YOU-CANT RSTACK .FUNCT V-PRAY PRINTR """From ghoulies and ghosties and long-leggety beasties And things that go bump in the night, Good Lord, deliver us!""" .FUNCT V-PUSH CALL HACK-HACK,STR?120 RSTACK .FUNCT WEAR-CHECK,X EQUAL? NOW-WEARING,PRSO \FALSE CALL NOUN-USED?,W?CLOTHES ZERO? STACK /?CCL6 CALL FIND-OUTFIT >X ZERO? X /?CCL6 CALL TELL-I-ASSUME,X SET 'PRSO,X RFALSE ?CCL6: CALL YOU-CANT,FALSE-VALUE,FALSE-VALUE,STR?121 RTRUE .FUNCT PRE-PUT CALL WEAR-CHECK ZERO? STACK \TRUE FCLEAR PRSO,WORNBIT EQUAL? PRSO,OTHER-OUTFIT,HANDS,HEAD \?CCL5 CALL WONT-HELP RTRUE ?CCL5: IN? PRSO,GLOBAL-OBJECTS \?CCL7 CALL NOT-HERE,PRSO RTRUE ?CCL7: EQUAL? PRSI,GLOBAL-HERE,FLOOR /FALSE IN? PRSI,GLOBAL-OBJECTS \FALSE CALL NOT-HERE,PRSI RTRUE .FUNCT V-PUT FSET? PRSI,PERSONBIT \?CCL3 SET 'WINNER,PRSI CALL PERFORM,V?WEAR,PRSO RTRUE ?CCL3: FSET? PRSI,SURFACEBIT /?CND1 EQUAL? PRSI,BOOKCASE /?CND1 FSET? PRSI,VEHBIT /?CND1 PRINTI "There's no good surface on" CALL HIM-HER-IT,PRSI PRINTR "." ?CND1: CALL PUT-ON-OR-IN RSTACK .FUNCT TELL-FIND-NONE,STR,OBJ=0 PRINTI "You search for " PRINT STR ZERO? OBJ /?PRG7 CALL PRINTT,OBJ ?PRG7: PRINTR " but find none." .FUNCT PRE-PUT-IN GET P-OFW,1 EQUAL? STACK,W?FRONT \?CCL3 CALL PERFORM,V?DROP,PRSO RTRUE ?CCL3: EQUAL? PRSI,PSEUDO-OBJECT /?CTR4 EQUAL? PRSI,FIREPLACE,EARRING,CHAIR \?CCL5 ?CTR4: CALL PRE-PUT RSTACK ?CCL5: EQUAL? PRSI,MOONMIST,INKWELL \?CCL9 CALL YOU-SHOULDNT,STR?122 RETURN 2 ?CCL9: EQUAL? PRSI,PEEPHOLE-2,PEEPHOLE,OCEAN /?CTR12 EQUAL? PRSI,HOLE-IN-WALL,HANDS,EYE \?CCL13 ?CTR12: CALL WONT-HELP RETURN 2 ?CCL13: FSET? PRSI,READBIT \?CCL19 CALL WONT-HELP RETURN 2 ?CCL19: FSET? PRSI,CONTBIT /?CND1 CALL TELL-FIND-NONE,STR?101,PRSI RETURN 2 ?CND1: FSET? PRSI,OPENBIT /?CND25 CALL FIRST-YOU,STR?66,PRSI ?CND25: CALL PRE-PUT RSTACK .FUNCT V-PUT-IN FSET? PRSI,OPENBIT /?CND1 FSET? PRSI,VEHBIT /?CND1 FSET? PRSI,DOORBIT /?CTR6 FSET? PRSI,CONTBIT \?PRG10 ?CTR6: CALL TOO-BAD-BUT,PRSI,STR?61 RTRUE ?PRG10: PRINTI "You can't open" CALL HIM-HER-IT,PRSI PRINTR "." ?CND1: CALL PUT-ON-OR-IN RSTACK .FUNCT PUT-ON-OR-IN,?TMP1,?TMP2 ZERO? PRSI \?CCL3 CALL YOU-CANT RSTACK ?CCL3: EQUAL? PRSI,PRSO \?CCL5 CALL HAR-HAR RSTACK ?CCL5: IN? PRSO,PRSI \?CCL7 CALL TOO-BAD-BUT,PRSO PRINTI " is already " FSET? PRSI,SURFACEBIT \?CCL12 PUSH STR?64 JUMP ?CND10 ?CCL12: PUSH STR?124 ?CND10: PRINT STACK CALL HIM-HER-IT,PRSI PRINTR "!" ?CCL7: CALL WEIGHT,PRSI >?TMP2 GETP PRSO,P?SIZE ADD ?TMP2,STACK >?TMP1 GETP PRSI,P?CAPACITY GRTR? ?TMP1,STACK \?CCL14 PRINT NOT-ENOUGH-ROOM RTRUE ?CCL14: CALL HELD?,PRSO ZERO? STACK \?CCL18 CALL ITAKE ZERO? STACK /TRUE ?CCL18: MOVE PRSO,PRSI FSET PRSO,TOUCHBIT FSET? PRSI,PERSONBIT \?PRG25 FSET? PRSO,WEARBIT \?PRG25 FSET PRSO,WORNBIT ?PRG25: PRINTR "Okay." .FUNCT WEIGHT,OBJ,CONT,WT=0 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 PRINT NOT-ENOUGH-ROOM RTRUE .FUNCT PRE-SREAD CALL PERFORM,V?READ,PRSI,PRSO RTRUE .FUNCT V-SREAD CALL V-FOO RSTACK .FUNCT PRE-READ,VAL IN? PRSO,GLOBAL-OBJECTS \FALSE CALL NOT-HERE,PRSO RSTACK .FUNCT V-READ FSET? PRSO,READBIT /?PRG4 CALL YOU-CANT RSTACK ?PRG4: GETP PRSO,P?TEXT PRINT STACK CRLF RTRUE .FUNCT V-REMOVE FSET? PRSO,WORNBIT \?CCL3 CALL PERFORM,V?TAKE-OFF,PRSO RTRUE ?CCL3: CALL PERFORM,V?TAKE,PRSO RTRUE .FUNCT V-RING CALL YOU-CANT RSTACK .FUNCT V-RUB FSET? PRSO,PERSONBIT \?CCL3 FSET? PRSO,MUNGBIT /?CCL3 EQUAL? PRSO,PLAYER /?CCL3 CALL FACE-RED RSTACK ?CCL3: CALL HACK-HACK,STR?125 RSTACK .FUNCT V-SAY,P CALL QCONTEXT-GOOD? ZERO? STACK /?CCL3 CALL PERFORM,V?TELL,QCONTEXT RTRUE ?CCL3: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL5 CALL TELL-I-ASSUME,P,STR?126 CALL PERFORM,V?TELL,P RTRUE ?CCL5: CALL NOT-CLEAR-WHOM RSTACK .FUNCT PRE-SEARCH CALL ROOM-CHECK RSTACK .FUNCT V-SEARCH,OBJ IN? PRSO,ROOMS \?CCL3 CALL 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 CALL THIS-IS-IT,OBJ MOVE OBJ,PLAYER PRINTI "You find " CALL PRINTA,OBJ PRINTI " and take it. " PRINTC 89 PRINT OU-STOP-SEARCHING PRINTR "." ?CCL5: CALL FIND-FLAG,PRSO,SECRETBIT >OBJ ZERO? OBJ /?CCL11 CALL DISCOVER,OBJ,PRSO RSTACK ?CCL11: FSET? PRSO,DOORBIT \?CCL14 CALL NOTHING-SPECIAL RSTACK ?CCL14: FSET? PRSO,CONTBIT /?CTR15 FSET? PRSO,SURFACEBIT \?CCL16 ?CTR15: CALL PERFORM,V?LOOK-INSIDE,PRSO RTRUE ?CCL16: CALL NOTHING-SPECIAL RSTACK .FUNCT DISCOVER,OBJ,WHERE=0 EQUAL? OBJ,YOUR-SWITCH /?CND1 FCLEAR OBJ,NDESCBIT ?CND1: FCLEAR OBJ,SECRETBIT FCLEAR OBJ,WORNBIT ZERO? WHERE \?CND3 LOC OBJ >WHERE ?CND3: EQUAL? OBJ,MOONMIST,YOUR-SWITCH /?CND5 FSET OBJ,TAKEBIT ?CND5: EQUAL? WHERE,COFFIN,INKWELL,JEWELRY-CASE \?CCL9 PRINTI "Inside the " PRINTD WHERE JUMP ?CND7 ?CCL9: EQUAL? WHERE,PAINT \?CCL14 PRINTI "Under the " PRINTD WHERE JUMP ?CND7 ?CCL14: EQUAL? HERE,GARDEN \?CCL18 PRINTI "Buried in the dirt" JUMP ?CND7 ?CCL18: EQUAL? HERE,CRYPT \?CCL23 PRINTI "Hanging on the neck of the " PRINTD WHERE JUMP ?CND7 ?CCL23: EQUAL? HERE,YOUR-ROOM \?CCL27 PRINTI "Behind the " PRINTD YOUR-MIRROR JUMP ?CND7 ?CCL27: EQUAL? HERE,GREAT-HALL \?CCL31 PRINTI "Inside the helmet of the " PRINTD ARMOR JUMP ?CND7 ?CCL31: EQUAL? HERE,CHAPEL \?CCL35 PRINTI "Stuck on the apple of the " PRINTD STAINED-WINDOW JUMP ?CND7 ?CCL35: EQUAL? HERE,GAME-ROOM \?CCL39 PRINTI "Hidden behind the " PRINTD GLASS-EYE PRINTI " of the " PRINTD RHINO-HEAD JUMP ?CND7 ?CCL39: EQUAL? HERE,WENDISH-ROOM \?CCL43 PRINTI "Underneath some items in the " PRINTD WENDISH-KIT JUMP ?CND7 ?CCL43: EQUAL? HERE,TAMARA-ROOM \?CCL47 PRINTI "Neatly hidden under the bed" JUMP ?CND7 ?CCL47: EQUAL? HERE,JACK-ROOM \?CCL51 PRINTI "Inside a drawer of the tallboy" JUMP ?CND7 ?CCL51: EQUAL? HERE,STUDY,LUMBER-ROOM \?CCL55 PRINTI "Among some papers" JUMP ?CND7 ?CCL55: EQUAL? HERE,VIVIEN-ROOM \?CCL59 PRINTI "Inside" CALL PRINTT,VIVIEN-BOX JUMP ?CND7 ?CCL59: FSET? WHERE,SURFACEBIT /?PRG68 FSET? WHERE,PERSONBIT \?PRG70 ?PRG68: PRINTI "On" JUMP ?PRG72 ?PRG70: PRINTI "In" ?PRG72: CALL PRINTT,WHERE ?CND7: EQUAL? OBJ,COSTUME \?PRG79 PRINTI " are a shimmering white gown and blonde wig" JUMP ?CND74 ?PRG79: PRINTI " is " CALL PRINTA,OBJ ?CND74: CALL THIS-IS-IT,OBJ FSET OBJ,SEENBIT EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH \?CND81 PRINTI ", so y" PRINT OU-STOP-SEARCHING ?CND81: EQUAL? HERE,TAMARA-ROOM \?PRG96 MOVE OBJ,PLAYER EQUAL? PRSA,V?SEARCH-FOR,V?SEARCH \?PRG92 PRINTI " and " JUMP ?PRG94 ?PRG92: PRINTI ", so you " ?PRG94: PRINTI "take it" ?PRG96: PRINTI ". " EQUAL? OBJ,COSTUME \?CCL100 GET FOUND-COSTUME,PLAYER-C ZERO? STACK \?CCL100 CALL CONGRATS,COSTUME JUMP ?CND98 ?CCL100: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,PLAYER >WHERE ZERO? WHERE /?CND98 CALL EVIDENCE?,OBJ,WHERE ZERO? STACK \?CND98 CALL GOOD-SHOW,WHERE,OBJ ?CND98: EQUAL? OBJ,TREASURE \TRUE CALL CONGRATS,ARTIFACT RTRUE .FUNCT CONGRATS,FOUND=0 PRINTI " (Congratulations, " CALL TITLE-NAME PRINTI "! You've " EQUAL? FOUND,COSTUME \?PRG8 PRINT IDENTIFIED-THE-GHOST JUMP ?PRG17 ?PRG8: PRINTI "found" ZERO? FOUND \?PRG15 PRINTI " evidence of the crime" JUMP ?PRG17 ?PRG15: CALL PRINTT,FOUND ?PRG17: PRINTI "!)" CRLF EQUAL? FOUND,ARTIFACT \?CCL21 SET 'TREASURE-FOUND,TREASURE GET FOUND-COSTUME,PLAYER-C ZERO? STACK /TRUE ZERO? CONFESSED /TRUE CALL WRAP-UP CALL FINISH RTRUE ?CCL21: EQUAL? FOUND,COSTUME \TRUE PUT FOUND-COSTUME,PLAYER-C,TRUE-VALUE ZERO? TREASURE-FOUND /TRUE ZERO? CONFESSED /TRUE CALL WRAP-UP CALL FINISH RTRUE .FUNCT PRE-SSEARCH-FOR CALL PERFORM,V?SEARCH-FOR,PRSI,PRSO RTRUE .FUNCT V-SSEARCH-FOR CALL V-FOO RSTACK .FUNCT PRE-SEARCH-FOR,OBJ CALL ROOM-CHECK ZERO? STACK /FALSE RTRUE .FUNCT V-SEARCH-FOR IN? PRSO,ROOMS \?CCL3 CALL PERFORM,PRSA,GLOBAL-HERE,PRSI RTRUE ?CCL3: FSET? PRSO,PERSONBIT \?CCL5 IN? PRSI,PRSO \?PRG11 PRINTI "Indeed," CALL HE-SHE-IT,PRSO,0,STR?2 CALL HIM-HER-IT,PRSI PRINTR "." ?PRG11: CALL START-SENTENCE,PRSO PRINTI " doesn't have" IN? PRSI,GLOBAL-OBJECTS \?CCL15 CALL PRINTT,PRSI PRINTR "." ?CCL15: ZERO? PRSI \?PRG22 PRINTR " that." ?PRG22: CALL PRINTT,PRSI PRINTI " hidden on" CALL HIM-HER-IT,PRSO,FALSE-VALUE,TRUE-VALUE PRINTR " person." ?CCL5: FSET? PRSO,CONTBIT \?CCL25 FSET? PRSO,OPENBIT /?CCL25 PRINTI "You'll have to open" CALL HIM-HER-IT,PRSO PRINTR " first." ?CCL25: IN? PRSI,PRSO \?CCL31 FSET? PRSI,SECRETBIT \?PRG35 CALL DISCOVER,PRSI RSTACK ?PRG35: PRINTI "How observant you are! There" CALL HE-SHE-IT,PRSI,0,STR?1 PRINTR "!" ?CCL31: ZERO? PRSI \?PRG39 CALL YOU-CANT RSTACK ?PRG39: PRINTI "You don't find" FSET? PRSI,SECRETBIT \?PRG46 PRINTI " it" JUMP ?PRG48 ?PRG46: CALL HIM-HER-IT,PRSI ?PRG48: PRINTR " there." .FUNCT V-SHAKE,X FSET? PRSO,TAKEBIT /?CCL3 SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(You can't shake it if you can't take it!)" ?CCL3: FSET? PRSO,OPENBIT /?CCL7 FIRST? PRSO \?CCL7 PRINTI "It sounds as if there is something inside" CALL HIM-HER-IT,PRSO PRINTR "." ?CCL7: FSET? PRSO,OPENBIT \?PRG24 FIRST? PRSO >X \?PRG24 PRINTI "Right " CALL GROUND-DESC PRINT STACK PRINTI " spill" NEXT? X /?CND20 PRINTC 115 ?CND20: CALL ROB,PRSO,HERE,TRUE-VALUE CRLF RTRUE ?PRG24: PRINTI "You hear nothing inside" CALL HIM-HER-IT,PRSO PRINTR "." .FUNCT V-SHOOT ZERO? PRSI /?PRD5 LOC PRSI EQUAL? STACK,WINNER /?CCL3 ?PRD5: CALL FIND-FLAG,WINNER,WEAPONBIT ZERO? STACK \?CCL3 PRINTR "You're not holding anything to shoot with." ?CCL3: CALL IKILL,STR?128 RSTACK .FUNCT PRE-SSHOOT CALL PERFORM,V?SHOOT,PRSI,PRSO RTRUE .FUNCT V-SSHOOT CALL V-FOO RSTACK .FUNCT V-SHOW EQUAL? PRSO,PLAYER \?CCL3 SET 'WINNER,PLAYER CALL VISIBLE?,PRSO ZERO? STACK /?CCL6 CALL PERFORM,V?EXAMINE,PRSI RTRUE ?CCL6: CALL PERFORM,V?FIND,PRSI RTRUE ?CCL3: FSET? PRSO,PERSONBIT \?PRG11 FSET? PRSO,MUNGBIT \?CCL8 ?PRG11: PRINTI "Don't wait for" CALL HIM-HER-IT,PRSO PRINTR " to applaud." ?CCL8: CALL WHO-CARES RSTACK .FUNCT PRE-SSHOW,P ZERO? PRSI /?CCL3 SET 'P-MERGED,TRUE-VALUE IN? PRSI,ROOMS \?CND4 CALL PERFORM,V?TAKE-TO,PRSO,PRSI RTRUE ?CND4: CALL PERFORM,V?SHOW,PRSI,PRSO RTRUE ?CCL3: CALL HELD?,PRSO ZERO? STACK \?CCL7 LOC PRSO FSET? STACK,PERSONBIT \?CCL10 CALL PERFORM,V?TAKE,PRSO RTRUE ?CCL10: CALL TELL-I-ASSUME,PRSO,STR?129 CALL PERFORM,V?ASK-CONTEXT-ABOUT,PRSO RTRUE ?CCL7: CALL QCONTEXT-GOOD? ZERO? STACK /?CCL12 CALL PERFORM,V?SHOW,QCONTEXT,PRSO RTRUE ?CCL12: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL14 CALL TELL-I-ASSUME,P,STR?130 CALL PERFORM,V?SHOW,P,PRSO RTRUE ?CCL14: CALL TELL-I-ASSUME,PLAYER,STR?130 CALL PERFORM,V?SHOW,PLAYER,PRSO RTRUE .FUNCT V-SSHOW CALL V-FOO RSTACK .FUNCT V-SIGN PRINTR "You would use your usual hand." .FUNCT PRE-SIT CALL ROOM-CHECK RSTACK .FUNCT V-SIT,LIE?=0 EQUAL? WINNER,PLAYER \?CCL3 FSET? PRSO,VEHBIT /?PRG9 EQUAL? PRSO,FLOOR,HERE,GLOBAL-HERE \?CCL3 ?PRG9: PRINTI "You're now " ZERO? LIE? \?PRG16 PRINTI "sitt" JUMP ?CND11 ?PRG16: PRINTI "ly" ?CND11: FSET? PRSO,VEHBIT \?PRG20 MOVE PLAYER,PRSO ?PRG20: PRINTI "ing " FSET? PRSO,SURFACEBIT \?PRG27 PRINTI "on" JUMP ?PRG29 ?PRG27: PRINTI "in" ?PRG29: CALL PRINTT,PRSO PRINTR "." ?CCL3: CALL WONT-HELP RSTACK .FUNCT WONT-HELP SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(That won't help solve this case!)" .FUNCT V-SIT-AT CALL V-SIT RSTACK .FUNCT V-SLAP 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 /?CCL9 CALL IF-SPY RSTACK ?CCL9: FSET? PRSO,MUNGBIT \?CCL11 PRINTI "If" CALL HE-SHE-IT,PRSO PRINTI " could," CALL HE-SHE-IT,PRSO PRINTR " would slap you right back." ?CCL11: CALL FACE-RED RSTACK .FUNCT IF-SPY ZERO? PRSI \?PRG13 PRINTI "You give" CALL HIM-HER-IT,PRSO PRINTI " a swift " EQUAL? P-PRSA-WORD,W?KICK \?PRG11 PRINTI "kick" JUMP ?PRG15 ?PRG11: PRINTI "hand chop" JUMP ?PRG15 ?PRG13: PRINTI "You swing" CALL HIM-HER-IT,PRSI PRINTI " at" CALL HIM-HER-IT,PRSO ?PRG15: PRINTI ", but" CALL HE-SHE-IT,PRSO PRINTR " seems indestructible." .FUNCT FACE-RED,P=0,X ZERO? P \?CND1 SET 'P,PRSO ?CND1: CALL UNSNOOZE,P GETP P,P?LINE >X ADD 1,X PUTP P,P?LINE,STACK EQUAL? FOLLOWER,P \?CND3 SET 'FOLLOWER,FALSE-VALUE ?CND3: GETP P,P?LDESC EQUAL? STACK,4 /?PRG7 PUTP P,P?LDESC,20 ?PRG7: CALL HE-SHE-IT,P,TRUE-VALUE ZERO? X \?PRG14 PRINTR " looks at you as if you were insane." ?PRG14: PRINTR " gives you a good slap. It hurts, too!" .FUNCT V-SMELL CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?131 PRINTI " just like " CALL PRINTA,PRSO PRINTR "!" .FUNCT V-SMILE CALL HAR-HAR RSTACK .FUNCT V-SORRY EQUAL? PRSO,CONFESSED \?CCL3 CALL WONT-HELP-TO-TALK-TO,PRSO RSTACK ?CCL3: CALL GRAB-ATTENTION,PRSO ZERO? STACK \?CCL6 RETURN 2 ?CCL6: GETP PRSO,P?LINE LESS? 0,STACK /?CCL10 PRINTI """I'm not angry with" CALL HIM-HER-IT,WINNER PRINTR " now.""" ?CCL10: PUTP PRSO,P?LINE,0 PUTP PRSO,P?LDESC,3 PRINTR """Apology accepted.""" .FUNCT V-SOUND CALL YOU-CANT RSTACK .FUNCT V-STOP EQUAL? PRSO,FALSE-VALUE,GLOBAL-HERE \?CCL3 PRINTR "Hey, no problem." ?CCL3: FSET? PRSO,PERSONBIT \?CCL7 CALL PERFORM,V?$CALL,PRSO RTRUE ?CCL7: CALL PERFORM,V?LAMP-OFF,PRSO RTRUE .FUNCT V-SWIM SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't swim " ZERO? PRSO /?PRG8 PRINTI "in" CALL HIM-HER-IT,PRSO JUMP ?PRG10 ?PRG8: CALL GROUND-DESC PRINT STACK ?PRG10: PRINTR ".)" .FUNCT PRE-TAKE,L LOC PRSO >L EQUAL? PRSO,MOONMIST \?CND1 EQUAL? VARIATION,DOCTOR-C \?CND1 IN? MOONMIST,INKWELL \?CND1 ZERO? TREASURE-FOUND /?CND1 LOC INKWELL >L ?CND1: EQUAL? PRSO,KEYHOLE,WALL,FLOOR /?CTR8 EQUAL? PRSO,TOWER,OTHER-OUTFIT,NOW-WEARING /?CTR8 EQUAL? PRSO,OCEAN,MOON,CASTLE \?CCL9 ?CTR8: CALL HAR-HAR RSTACK ?CCL9: EQUAL? PRSO,YOU,TREASURE /FALSE EQUAL? PRSO,PASSAGE,HANDS,ARTIFACT /FALSE EQUAL? PRSO,NIGHTLAMP,LIGHT-GLOBAL \?CCL18 CALL CREEPY?,HERE ZERO? STACK /?PRG22 CALL NOT-HERE,PRSO RSTACK ?PRG22: PRINTR "The cord isn't long enough." ?CCL18: EQUAL? PRSO,MIRROR-GLOBAL \?CCL25 CALL YOU-CANT RSTACK ?CCL25: EQUAL? PRSO,UNDRESSED \?CCL27 CALL NOUN-USED?,W?DRESSE ZERO? STACK /?CCL30 ZERO? PRSI /?CCL33 CALL PERFORM,V?WEAR,PRSI RTRUE ?CCL33: CALL PERFORM,V?DRESS,WINNER RTRUE ?CCL30: CALL PERFORM,V?UNDRESS,WINNER RTRUE ?CCL27: IN? PRSO,GLOBAL-OBJECTS \?CCL35 CALL NOT-HERE,PRSO RSTACK ?CCL35: ZERO? L /?CCL37 FSET? L,CONTBIT \?CCL37 FSET? L,OPENBIT /?CCL37 CALL TOO-BAD-BUT,L,STR?61 RTRUE ?CCL37: ZERO? PRSI /?CCL42 EQUAL? PRSI,WALL,L \?CCL45 SET 'PRSI,FALSE-VALUE RFALSE ?CCL45: FSET? PRSI,SURFACEBIT /?CCL47 FSET? PRSI,OPENBIT /?CCL47 FSET? PRSI,PERSONBIT /?CCL47 CALL TOO-BAD-BUT,PRSI,STR?61 RTRUE ?CCL47: EQUAL? PRSI,L /FALSE FSET? PRSI,PERSONBIT /?PRG58 CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTI "n't in" CALL PRINTT,PRSI PRINTR "!" ?PRG58: CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?5 PRINTI "n't have" CALL PRINTT,PRSO PRINTR "!" ?CCL42: CALL PRE-TAKE-WITH RSTACK .FUNCT PRE-TAKE-WITH,X EQUAL? PRSO,YOU /FALSE FSET? PRSO,PERSONBIT \?CCL5 EQUAL? PRSO,GHOST-NEW /?CCL5 EQUAL? P-PRSA-WORD,W?SEIZE,W?GRAB \?CCL5 CALL PERFORM,V?ARREST,PRSO RTRUE ?CCL5: CALL META-LOC,PRSO EQUAL? STACK,GLOBAL-OBJECTS \?CCL10 CALL HELD?,PRSO ZERO? STACK \FALSE FSET? PRSO,PERSONBIT /FALSE CALL NOT-HERE,PRSO RSTACK ?CCL10: IN? PRSO,WINNER \?CCL17 CALL ALREADY,PLAYER PRINTI "holding" CALL PRINTT,PRSO PRINTR "!)" ?CCL17: LOC PRSO FSET? STACK,CONTBIT \?CCL21 LOC PRSO FSET? STACK,OPENBIT /?CCL21 CALL YOU-CANT,STR?132 RSTACK ?CCL21: IN? WINNER,PRSO \FALSE CALL NOUN-USED?,W?DOOR,W?KEYHOLE ZERO? STACK \FALSE SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " in" CALL HIM-HER-IT,PRSO PRINTR ", nitwit!)" .FUNCT V-TAKE CALL ITAKE EQUAL? STACK,TRUE-VALUE \FALSE CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " now holding" CALL PRINTT,PRSO PRINTR "." .FUNCT V-TAKE-OFF EQUAL? PRSO,NOW-WEARING \?CCL3 SET 'PRSO,FALSE-VALUE CALL V-WEAR RTRUE ?CCL3: FSET? PRSO,WORNBIT \?PRG10 FCLEAR PRSO,WORNBIT PRINTI "Okay," LOC PRSO CALL HE-SHE-IT,STACK,0,STR?1 PRINTI " no longer wearing" MOVE PRSO,WINNER CALL HIM-HER-IT,PRSO PRINTR "." ?PRG10: LOC PRSO CALL HE-SHE-IT,STACK,TRUE-VALUE,STR?1 PRINTI "n't wearing" CALL HIM-HER-IT,PRSO PRINTR "!" .FUNCT V-TAKE-TO CALL PERFORM,V?WALK-TO,PRSI RTRUE .FUNCT V-DISEMBARK CALL ROOM-CHECK ZERO? STACK \TRUE EQUAL? PRSO,GLOBAL-HERE,HERE,ROOMS \?CCL5 EQUAL? WINNER,PLAYER \?CCL8 IN? PLAYER,HERE /?CCL8 CALL OWN-FEET RSTACK ?CCL8: CALL DO-WALK,P?OUT RTRUE ?CCL5: EQUAL? PRSO,NOW-WEARING \?CCL12 CALL V-TAKE-OFF RTRUE ?CCL12: LOC PRSO EQUAL? STACK,WINNER \?CCL14 PRINTI "You don't need to take" CALL HIM-HER-IT,PRSO PRINTI " out to use" CALL HIM-HER-IT,PRSO PRINTR "." ?CCL14: LOC WINNER EQUAL? STACK,PRSO /?CCL18 IN? PLAYER,PRSO /?CCL18 PRINTI "You're not " FSET? PRSO,SURFACEBIT \?PRG28 PRINTI "on" JUMP ?PRG30 ?PRG28: PRINTI "in" ?PRG30: CALL HIM-HER-IT,PRSO PRINTI "! " RETURN 2 ?CCL18: CALL OWN-FEET RSTACK .FUNCT OWN-FEET MOVE WINNER,HERE CALL HE-SHE-IT,WINNER,TRUE-VALUE,STR?1 PRINTI " on" CALL HIM-HER-IT,WINNER,FALSE-VALUE,TRUE-VALUE PRINTI " own feet again." CRLF EQUAL? DRIVEWAY,HERE \TRUE CALL ENTER-ROOM RTRUE .FUNCT V-HOLD-UP EQUAL? PRSO,ROOMS \?CCL3 CALL PERFORM,V?STAND RTRUE ?CCL3: CALL WONT-HELP RSTACK .FUNCT V-TELL,P EQUAL? PRSO,PLAYER \?CCL3 EQUAL? WINNER,PLAYER /?CCL6 SET 'P,WINNER SET 'WINNER,PLAYER CALL PERFORM,V?ASK,P RTRUE ?CCL6: ZERO? QCONTEXT /?CCL8 SET 'QCONTEXT,FALSE-VALUE ZERO? P-CONT /?PRG12 SET 'WINNER,PLAYER RETURN WINNER ?PRG12: PRINTR "Okay, you're not talking to anyone else." ?CCL8: CALL WONT-HELP-TO-TALK-TO,PLAYER SET 'QUOTE-FLAG,FALSE-VALUE SET 'P-CONT,FALSE-VALUE RETURN 2 ?CCL3: FSET? PRSO,PERSONBIT \?CCL17 FSET? PRSO,MUNGBIT /?CCL17 CALL UNSNOOZE,PRSO SET 'QCONTEXT,PRSO ZERO? P-CONT /?PRG23 SET 'CLOCK-WAIT,TRUE-VALUE SET 'WINNER,PRSO RETURN WINNER ?PRG23: CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTC 32 GET LDESC-STRINGS,12 PRINT STACK PRINTR "." ?CCL17: CALL 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 CALL V-FOO RSTACK .FUNCT PRE-TELL-ABOUT,P EQUAL? PRSO,PLAYER-NAME,PLAYER \?CCL3 CALL QCONTEXT-GOOD? ZERO? STACK /?CCL6 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSI RTRUE ?CCL6: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL8 CALL TELL-I-ASSUME,P,STR?87 CALL PERFORM,V?ASK-ABOUT,P,PRSI RTRUE ?CCL8: CALL ARENT-TALKING RTRUE ?CCL3: FSET? PRSI,SEENBIT /?CCL11 FSET? PRSI,TOUCHBIT /?CCL11 CALL NOT-FOUND,PRSI RTRUE ?CCL11: EQUAL? PRSI,BRICKS,COFFIN,CRYPT /?PRG19 EQUAL? PRSI,DUNGEON,IRON-MAIDEN,TOMB /?PRG19 EQUAL? PRSI,WELL \?CCL15 ?PRG19: PRINT ANCIENT-SECRETS CRLF RTRUE ?CCL15: CALL PRE-ASK-ABOUT RSTACK .FUNCT V-TELL-ABOUT,P PRINTR """I'm afraid you'll have to show me instead of telling me.""" .FUNCT PRE-TALK-ABOUT,P EQUAL? WINNER,PLAYER /?CCL3 SET 'P,WINNER SET 'WINNER,PLAYER CALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE ?CCL3: CALL QCONTEXT-GOOD? ZERO? STACK /?CCL5 CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO RTRUE ?CCL5: CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /FALSE CALL TELL-I-ASSUME,P,STR?133 CALL PERFORM,V?ASK-ABOUT,P,PRSO RTRUE .FUNCT V-TALK-ABOUT CALL ARENT-TALKING RSTACK .FUNCT V-THANKS ZERO? PRSO /?CCL3 FSET? PRSO,PERSONBIT \?CCL6 FSET? PRSO,MUNGBIT /?CCL6 PRINT QUITE-WELCOME RTRUE ?CCL6: CALL YOU-CANT RSTACK ?CCL3: CALL QCONTEXT-GOOD? ZERO? STACK \?PRG16 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER ZERO? STACK /?PRG18 ?PRG16: PRINT QUITE-WELCOME RTRUE ?PRG18: PRINTR "You're more than welcome." .FUNCT V-THROW CALL IDROP ZERO? STACK /FALSE PRINTR "Thrown." .FUNCT V-THROW-AT CALL IDROP ZERO? STACK /TRUE CALL HE-SHE-IT,PRSI,TRUE-VALUE,STR?5 PRINTI "n't duck" PRINTI " as" CALL HE-SHE-IT,PRSO PRINTR " flies by." .FUNCT PRE-THROW-THROUGH FCLEAR PRSO,WORNBIT RFALSE .FUNCT V-THROW-THROUGH FSET? PRSO,PERSONBIT /?CCL3 PRINTR "Let's not resort to vandalism, please." ?CCL3: CALL V-THROW RSTACK .FUNCT V-TIME PRINTI "The time is now " CALL TIME-PRINT,PRESENT-TIME PRINTR "." .FUNCT TIME-PRINT,NUM,HR DIV NUM,60 >HR GRTR? HR,12 \?CND1 SUB HR,12 >HR ?CND1: PRINTN HR PRINTC 58 MOD NUM,60 >HR LESS? HR,10 \?PRG9 PRINTC 48 ?PRG9: PRINTN HR RTRUE .FUNCT V-TURN FSET? PRSO,DOORBIT \?PRG6 FSET? PRSO,OPENBIT \?PRG6 CALL PERFORM,V?CLOSE,PRSO RTRUE ?PRG6: PRINTR "What do you want that to do?" .FUNCT V-LAMP-OFF FSET? PRSO,LIGHTBIT /?CCL3 CALL YOU-CANT,STR?44 RSTACK ?CCL3: FSET? PRSO,ONBIT /?CCL5 CALL ALREADY,PRSO,STR?65 RSTACK ?CCL5: CALL OKAY,PRSO,STR?65 RSTACK .FUNCT V-LAMP-ON FSET? PRSO,ONBIT \?CCL3 CALL ALREADY,PRSO,STR?64 RSTACK ?CCL3: FSET? PRSO,LIGHTBIT \?CCL5 CALL OKAY,PRSO,STR?64 RSTACK ?CCL5: FSET? PRSO,PERSONBIT \?CCL7 CALL HAR-HAR RSTACK ?CCL7: CALL YOU-CANT,STR?45 RSTACK .FUNCT V-UNLOCK FSET? PRSO,DOORBIT /?CTR2 FSET? PRSO,CONTBIT \?CCL3 GETP PRSO,P?CAPACITY ZERO? STACK /?CCL3 ?CTR2: FSET? PRSO,LOCKED /?CCL10 CALL ALREADY,PRSO,STR?68 RSTACK ?CCL10: CALL UNLOCK-DOOR?,PRSO ZERO? STACK \?CCL12 CALL YOU-CANT RSTACK ?CCL12: FCLEAR PRSO,LOCKED CALL OKAY,PRSO,STR?68 RSTACK ?CCL3: SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,PRSO,TRUE-VALUE,STR?1 PRINTR "n't locked!)" .FUNCT MORE-SPECIFIC SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "[Please be more specific.]" .FUNCT V-USE CALL MORE-SPECIFIC RSTACK .FUNCT V-WAIT,NUM=-1,WHO=0,INT=0,WHO-WAIT=0,VAL,HR,RESULT=1 EQUAL? -1,NUM \?CND1 SET 'NUM,10 ?CND1: ZERO? INT \?CND3 FSET? PRSO,PERSONBIT /?CND3 EQUAL? PRSO,GHOST-NEW,TURN,INTNUM /?CND3 PRINT I-ASSUME PRINTI " Wait " PRINTN NUM PRINTI " minute" EQUAL? NUM,1 /?PRG14 PRINTC 115 ?PRG14: PRINTI ".]" CRLF ?CND3: SET 'HR,HERE ZERO? INT \?CND16 PRINTI "Time passes..." CRLF ?CND16: DEC 'NUM ?PRG20: DLESS? 'NUM,0 \?CCL24 SET 'KEEP-WAITING,FALSE-VALUE RETURN RESULT ?CCL24: CALL CLOCKER >VAL ZERO? VAL /?CCL26 EQUAL? VAL,M-FATAL /?CTR28 EQUAL? HR,HERE /?CCL29 ?CTR28: SET 'CLOCK-WAIT,TRUE-VALUE SET 'RESULT,M-FATAL RETURN RESULT ?CCL29: ZERO? WHO /?CCL33 IN? WHO,HERE \?CCL33 SET 'CLOCK-WAIT,TRUE-VALUE CALL NOT-IT,WHO CALL START-SENTENCE,WHO PRINTI ", for wh" FSET? WHO,PERSONBIT \?PRG43 PRINTI "om" JUMP ?PRG45 ?PRG43: PRINTI "ich" ?PRG45: PRINTI " you're waiting, has arrived." CRLF RETURN RESULT ?CCL33: INC 'WHO-WAIT GET 0,0 BTST STACK,16 \?CND47 PRINTC 40 CALL TIME-PRINT,PRESENT-TIME >VAL PRINTI ") " ?CND47: ZERO? KEEP-WAITING /?PRG55 USL JUMP ?PRG20 ?PRG55: PRINTI "Do you want to keep " CALL VERB-PRINT,TRUE-VALUE >VAL CALL YES? ZERO? STACK /?CCL59 USL JUMP ?PRG20 ?CCL59: SET 'CLOCK-WAIT,TRUE-VALUE SET 'RESULT,M-FATAL RETURN RESULT ?CCL26: ZERO? WHO /?CCL61 IGRTR? 'WHO-WAIT,30 \?CCL61 CALL START-SENTENCE,WHO >VAL PRINTI " still hasn't arrived. Do you want to keep waiting?" CALL YES? ZERO? STACK \?CND66 RETURN RESULT ?CND66: SET 'WHO-WAIT,0 USL JUMP ?PRG20 ?CCL61: USL JUMP ?PRG20 .FUNCT V-WAIT-FOR,WHO EQUAL? -1,P-NUMBER /?CCL3 EQUAL? PRSO,INTNUM,TURN,ROOMS \?CCL3 ZERO? P-TIME /?CCL8 CALL V-WAIT-UNTIL RSTACK ?CCL8: CALL V-WAIT,P-NUMBER RSTACK ?CCL3: EQUAL? PRSO,GLOBAL-HERE,TURN,ROOMS \?CCL10 CALL V-WAIT RSTACK ?CCL10: EQUAL? PRSO,PLAYER \?CCL12 CALL ALREADY,PLAYER,STR?104 RSTACK ?CCL12: FSET? PRSO,PERSONBIT /?CTR13 EQUAL? PRSO,GHOST-NEW \?PRG20 ?CTR13: CALL META-LOC,PRSO EQUAL? STACK,HERE \?CCL19 CALL ALREADY,PRSO,STR?104 RSTACK ?CCL19: CALL V-WAIT,10000,PRSO RSTACK ?PRG20: PRINTR "Not a good idea. You might wait forever." .FUNCT V-WAIT-UNTIL,N,?TMP1 EQUAL? -1,P-NUMBER /?CCL3 EQUAL? PRSO,INTNUM,TURN,ROOMS \?CCL3 SET 'N,P-NUMBER ZERO? P-TIME /?CCL8 LESS? N,420 \?CND6 ADD N,720 >N JUMP ?CND6 ?CCL8: LESS? N,8 \?CCL13 MUL N,60 ADD STACK,720 >N JUMP ?CND11 ?CCL13: LESS? N,13 \?CCL15 MUL N,60 >N JUMP ?CND11 ?CCL15: LESS? N,24 \?CCL17 MUL N,60 SUB STACK,720 >N JUMP ?CND11 ?CCL17: GRTR? N,99 \?CND11 MOD N,100 >?TMP1 DIV N,100 MUL STACK,60 ADD ?TMP1,STACK >N ?CND11: LESS? N,420 \?PRG21 ADD N,720 >N ?PRG21: PRINT I-ASSUME PRINTC 32 CALL TIME-PRINT,N PRINTC 93 CRLF ?CND6: GRTR? N,PRESENT-TIME \?CCL27 SUB N,PRESENT-TIME CALL V-WAIT,STACK RSTACK ?CCL27: SET 'CLOCK-WAIT,TRUE-VALUE PRINTR "(It's already past that time!)" ?CCL3: CALL YOU-CANT,STR?42 RSTACK .FUNCT V-ALARM EQUAL? PRSO,ROOMS \?CND1 SET 'PRSO,WINNER ?CND1: CALL TOO-BAD-BUT,PRSO,STR?135 RSTACK .FUNCT DO-WALK,DIR,P SET 'P-WALK-DIR,DIR CALL PERFORM,V?WALK,DIR RSTACK .FUNCT V-WALK,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: CALL TELL-I-ASSUME,P-IT-OBJECT CALL PERFORM,V?THROUGH,P-IT-OBJECT RTRUE ?CCL5: CALL V-WALK-AROUND RETURN 2 ?CND1: LOC WINNER GETPT STACK,PRSO >PT ZERO? PT /?CCL15 PTSIZE PT >PTS EQUAL? PTS,UEXIT \?CCL18 GETB PT,REXIT >RM CALL GOTO,RM ZERO? STACK /TRUE CALL 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 \?CCL28 GET PT,FEXITFCN CALL STACK >RM ZERO? RM /?PRG34 CALL GOTO,RM ZERO? STACK /TRUE CALL OKAY RTRUE ?PRG34: RETURN 2 ?CCL28: EQUAL? PTS,CEXIT \?CCL37 GETB PT,CEXITFLAG VALUE STACK ZERO? STACK /?CCL40 GETB PT,REXIT CALL GOTO,STACK ZERO? STACK /TRUE CALL OKAY RTRUE ?CCL40: GET PT,CEXITSTR >STR ZERO? STR /?CCL44 PRINT STR CRLF RETURN 2 ?CCL44: CALL YOU-CANT,STR?40 RETURN 2 ?CCL37: EQUAL? PTS,DEXIT \FALSE CALL WALK-THRU-DOOR?,PT ZERO? STACK /?PRG58 GETB PT,REXIT CALL GOTO,STACK ZERO? STACK /TRUE CALL OKAY RTRUE ?PRG58: RETURN 2 ?CCL15: EQUAL? PRSO,P?IN,P?OUT \?CCL61 CALL V-WALK-AROUND RSTACK ?CCL61: EQUAL? PRSO,P?UP \?CCL63 CALL PERFORM,V?CLIMB-UP,STAIRS RTRUE ?CCL63: EQUAL? PRSO,P?DOWN \?CCL65 CALL PERFORM,V?CLIMB-DOWN,STAIRS RTRUE ?CCL65: EQUAL? HERE,DRIVEWAY \?CCL67 PRINT CASTLE-IS-SOUTH RETURN 2 ?CCL67: CALL YOU-CANT,STR?40 RETURN 2 .FUNCT UNLOCK-DOOR?,DR EQUAL? HERE,DR /TRUE GETP HERE,P?STATION EQUAL? HERE,DRIVEWAY,STACK /FALSE EQUAL? DR,SECRET-SITTING-DOOR,FRONT-GATE /FALSE RTRUE .FUNCT WALK-THRU-DOOR?,PT,OBJ=0,TELL?=1,RM ZERO? OBJ \?CND1 GETB PT,DEXITOBJ >OBJ ?CND1: FSET? OBJ,OPENBIT /TRUE FSET? OBJ,SECRETBIT \?CCL7 FSET? OBJ,TOUCHBIT /?CCL7 EQUAL? FALSE-VALUE,TELL?,VERBOSITY /FALSE FSET? HERE,SECRETBIT /?CCL14 CALL YOU-CANT,STR?40 RFALSE ?CCL14: ZERO? LIT \?CCL16 CALL NOT-FOUND,OBJ RFALSE ?CCL16: EQUAL? PRSA,V?WALK-TO /TRUE CALL OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ RTRUE ?CCL7: FSET? OBJ,LOCKED /?CCL20 EQUAL? PRSA,V?WALK-TO /TRUE FCLEAR OBJ,SECRETBIT FSET OBJ,SEENBIT EQUAL? FALSE-VALUE,TELL?,VERBOSITY /TRUE CALL OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ RTRUE ?CCL20: ZERO? PT /?CCL26 GET PT,DEXITSTR >RM ZERO? RM /?CCL26 ZERO? TELL? /FALSE PRINT RM CRLF RFALSE ?CCL26: ZERO? TELL? /FALSE CALL UNLOCK-DOOR?,OBJ ZERO? STACK /?CCL37 EQUAL? PRSA,V?WALK-TO /TRUE ZERO? VERBOSITY /TRUE CALL OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ RTRUE ?CCL37: CALL TOO-BAD-BUT,OBJ,STR?67 CALL THIS-IS-IT,OBJ RFALSE .FUNCT OPEN-DOOR-AND-CLOSE-IT-AGAIN,OBJ FSET OBJ,SEENBIT EQUAL? WINNER,PLAYER \TRUE PRINTI "(You " FSET? OBJ,LOCKED \?PRG9 FCLEAR OBJ,LOCKED PRINTI "unlock and " ?PRG9: PRINTI "open the " EQUAL? OBJ,FRONT-GATE \?PRG16 PRINTI "gate" JUMP ?CND11 ?PRG16: PRINTI "door" ?CND11: FSET? OBJ,SECRETBIT \?PRG21 FSET OBJ,OPENBIT JUMP ?PRG23 ?PRG21: PRINTI " and close it again" ?PRG23: PRINTR ".)" .FUNCT V-WALK-AROUND SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 91 PRINT WHICH-DIR PRINTI "] " RETURN 2 .FUNCT WHO-KNOWS?,OBJ SET 'CLOCK-WAIT,TRUE-VALUE PRINTI "(Who knows where" CALL HE-SHE-IT,OBJ,0,STR?1 PRINTR "?)" .FUNCT WALK-WITHIN-ROOM CALL NO-NEED,STR?137,HERE RSTACK .FUNCT V-WALK-TO,L,VAL,?TMP1 CALL META-LOC,PRSO >L FSET? PRSO,PERSONBIT \?CND1 CALL META-LOC,WINNER EQUAL? STACK,L \?CCL5 FSET? PRSO,NDESCBIT /?CCL5 CALL BITE-YOU RTRUE ?CCL5: CALL FOLLOW-LOC? >L ZERO? L \?CND1 CALL WHO-KNOWS?,PRSO RETURN 2 ?CND1: FSET? PRSO,SECRETBIT \?CCL13 EQUAL? L,PRSO /?CCL13 CALL NO-FUN RSTACK ?CCL13: LOC WINNER EQUAL? HERE,STACK \?CCL17 EQUAL? L,HERE /?CTR16 EQUAL? PRSO,PSEUDO-OBJECT,WALL /?CTR16 IN? L,ROOMS /?CCL17 CALL GLOBAL-IN?,PRSO,HERE ZERO? STACK /?CCL17 ?CTR16: CALL WALK-WITHIN-ROOM RSTACK ?CCL17: EQUAL? L,LOCAL-GLOBALS \?CCL26 CALL MORE-SPECIFIC RSTACK ?CCL26: CALL TOUR? ZERO? STACK \TRUE GETP HERE,P?ACTION CALL STACK,M-EXIT ZERO? STACK \TRUE EQUAL? PRSO,INTDIR \?CCL34 CALL V-WALK-AROUND RSTACK ?CCL34: IN? PRSO,ROOMS /?CCL36 FSET? PRSO,TOUCHBIT /?CCL36 CALL WHO-KNOWS?,PRSO RETURN 2 ?CCL36: CALL FAR-AWAY?,L ZERO? STACK /?CCL43 SET 'CLOCK-WAIT,TRUE-VALUE PRINTC 40 CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't go there from here" EQUAL? L,GLOBAL-OBJECTS /?PRG50 PRINTI ", at least not directly" ?PRG50: PRINTR ".)" ?CCL43: EQUAL? WINNER,PLAYER /?CCL53 CALL GOTO,L ZERO? STACK /TRUE EQUAL? WINNER,FOLLOWER \?CND56 SET 'FOLLOWER,0 ?CND56: GETP WINNER,P?CHARACTER GET GOAL-TABLES,STACK >L GET L,GOAL-S ZERO? STACK /?CND58 GET L,GOAL-F >?TMP1 GET L,GOAL-ENABLE CALL ESTABLISH-GOAL,WINNER,?TMP1,STACK ?CND58: CALL OKAY RTRUE ?CCL53: CALL SEE-INTO?,PRSO,FALSE-VALUE ZERO? STACK /?CCL62 CALL DIR-FROM,HERE,L >VAL ZERO? VAL /?CND63 GETP HERE,P?ACTION CALL STACK,VAL EQUAL? M-FATAL,STACK \?CND63 RETURN 2 ?CND63: CALL GOTO,PRSO,FALSE-VALUE RTRUE ?CCL62: ZERO? NOW-WEARING \?PRG72 CALL YOUR-ROOM-F,P?OUT RETURN 2 ?PRG72: PRINTI "You go quickly toward" CALL PRINTT,L PRINTI ". " CALL ESTABLISH-GOAL,PLAYER,L SET 'OHERE,HERE FSET PLAYER,INVISIBLE ?PRG74: CALL FOLLOW-GOAL,PLAYER >VAL ZERO? VAL /?PRG74 FCLEAR PLAYER,INVISIBLE ZERO? FOLLOWER /?CND78 CALL FRIEND-FOLLOWS-YOU,HERE ?CND78: EQUAL? OHERE,HERE /?CND80 CALL ENTER-ROOM ?CND80: RETURN VAL .FUNCT ENTER-ROOM,VAL CALL LIT? >LIT FSET? HERE,SECRETBIT \?CCL3 SET 'WASHED,FALSE-VALUE JUMP ?CND1 ?CCL3: EQUAL? HERE,JACK-ROOM,TAMARA-ROOM,IRIS-ROOM /?PRG8 EQUAL? HERE,WENDISH-ROOM,VIVIEN-ROOM,IAN-ROOM /?PRG8 EQUAL? HERE,HYDE-ROOM \?CND1 ?PRG8: PRINTI "You enter the room cautiously after a preliminary peek." CALL ZMEMQ,HERE,CHAR-ROOM-TABLE SUB STACK,1 GET CHARACTER-TABLE,STACK LOC STACK EQUAL? STACK,HERE,LOCAL-GLOBALS /?CND10 SET 'DISCOVERED-HERE,HERE CALL QUEUE,I-DISCOVERED,6 ?CND10: ZERO? LIT /?CND13 CALL FIND-FLAG-HERE,PERSONBIT,PLAYER ZERO? STACK \?CND13 PRINTI " No one is there." ?CND13: CRLF ?CND1: GETP HERE,P?ACTION CALL STACK,M-ENTER CALL V-FIRST-LOOK >VAL GETP HERE,P?ACTION CALL STACK,M-FLASH RETURN VAL .FUNCT V-RUN-OVER PRINTR "That doesn't make much sense." .FUNCT NO-CHANGING?,X CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >X ZERO? X /?CCL3 EQUAL? X,GHOST-NEW \?PRG9 PRINT NO-CHANGING RTRUE ?PRG9: CALL HE-SHE-IT,X,TRUE-VALUE PRINTR " says, ""I wish you wouldn't change clothes while I'm here!""" ?CCL3: EQUAL? HERE,YOUR-BATHROOM,YOUR-ROOM /FALSE PRINT NO-CHANGING RTRUE .FUNCT V-WEAR,X ZERO? PRSO /?CND1 FSET? PRSO,WEARBIT /?CCL5 CALL HE-SHE-IT,WINNER,TRUE-VALUE PRINTI " can't wear" CALL HIM-HER-IT,PRSO EQUAL? PRSO,NECKLACE-OF-D \?PRG12 PRINTI ", because" PRINT CLASP-MUNGED ?PRG12: PRINTR "." ?CCL5: FSET? PRSO,WORNBIT \?CND1 CALL ALREADY,PRSO,STR?121 RTRUE ?CND1: EQUAL? PRSO,LENS-2,LENS-1 /?CND15 EQUAL? PRSO,LENS,EARRING,NECKLACE /?CND15 CALL NO-CHANGING? ZERO? STACK \TRUE ZERO? NOW-WEARING /?CND19 ZERO? PRSO /?CND23 CALL FIRST-YOU,STR?139,NOW-WEARING ?CND23: FCLEAR NOW-WEARING,WORNBIT ?CND19: SET 'NOW-WEARING,PRSO ?CND15: ZERO? PRSO /?PRG38 MOVE PRSO,PLAYER FSET PRSO,WORNBIT EQUAL? PRSO,LENS-2,LENS-1 /?PRG34 EQUAL? PRSO,LENS,EARRING,NECKLACE /?PRG34 FSET? PRSO,MUNGBIT \?CCL30 ?PRG34: PRINTR "Okay." ?CCL30: FSET PRSO,MUNGBIT PRINTR "Ahhh! Nothing like a new outfit to change your whole outlook!" ?PRG38: PRINTI "Okay... " ZERO? GENDER-KNOWN \?PRG45 PRINTR "You immediately wish for central heating!" ?PRG45: PRINTI "My, what a fine figure of a " FSET? PLAYER,FEMALE \?PRG51 PRINTI "wo" ?PRG51: PRINTR "man!" .FUNCT V-YELL,N=0,RM,P CALL QCONTEXT-GOOD? >P ZERO? P \?PRG6 CALL FIND-FLAG-HERE-NOT,PERSONBIT,MUNGBIT,WINNER >P ZERO? P /?CCL3 ?PRG6: CALL START-SENTENCE,P PRINTR " says, ""I'm right here. You needn't yell.""" ?CCL3: GETP HERE,P?CHARACTER EQUAL? 3,STACK \?PRG32 FSET? HERE,WEARBIT /?PRG16 FSET? HERE,WEARBIT /?PRG32 FSET? HERE,SECRETBIT /?PRG32 ?PRG16: IGRTR? 'N,DEB-C /?PRG32 GET CHARACTER-TABLE,N >P EQUAL? P,GHOST-NEW,CONFESSED,CAPTOR /?PRG16 CALL META-LOC,P >RM GETP RM,P?CHARACTER EQUAL? 3,STACK \?PRG16 FSET? HERE,WEARBIT \?PRD27 FSET? RM,WEARBIT /?CCL23 ?PRD27: FSET? HERE,WEARBIT /?PRG16 FSET? RM,WEARBIT /?PRG16 ?CCL23: CALL GO-TO-SOUND,HERE,P JUMP ?PRG16 ?PRG32: PRINTR """Aaaarrrrgggghhhh!""" .FUNCT V-YES,NO?=0,PER SET 'PER,WINNER EQUAL? PER,PLAYER \?CTR2 ZERO? AWAITING-REPLY /?PRD7 GETB QUESTIONERS,AWAITING-REPLY >PER ZERO? PER \?CTR2 ?PRD7: CALL QCONTEXT-GOOD? >PER ZERO? PER /?CCL3 ?CTR2: GETP PER,P?ACTION CALL D-APPLY,STR?10,STACK,M-WINNER ZERO? STACK \TRUE PRINTR """I see...""" ?CCL3: EQUAL? HERE,DRIVEWAY \?CCL15 PRINTR "The echoes fade and silence is soon restored." ?CCL15: CALL ARENT-TALKING RSTACK .FUNCT V-NO CALL V-YES,TRUE-VALUE RSTACK .FUNCT FINISH,REPEATING=0,VAL CRLF CRLF ZERO? REPEATING \?PRG3 CALL V-SCORE CRLF ?PRG3: PRINTI "Would you like to: RESTORE your place from where you saved it, RESTART the story from the beginning, or QUIT for now?" CRLF ?PRG5: PRINTC 62 READ P-INBUF,P-LEXV GET P-LEXV,P-LEXSTART >VAL ZERO? VAL /?PRG19 CALL WT?,VAL,64,1 >VAL EQUAL? VAL,ACT?RESTART \?CCL13 RESTART CALL FINISH,TRUE-VALUE JUMP ?PRG19 ?CCL13: EQUAL? VAL,ACT?RESTORE \?CCL15 CALL V-RESTORE ZERO? STACK \TRUE CALL FINISH,TRUE-VALUE JUMP ?PRG19 ?CCL15: EQUAL? VAL,ACT?QUIT \?PRG19 QUIT ?PRG19: PRINTI "[Type RESTORE, RESTART, or QUIT.] " JUMP ?PRG5 .FUNCT DIVESTMENT?,OBJ EQUAL? PRSO,OBJ \FALSE EQUAL? PRSA,V?THROW-THROUGH /TRUE EQUAL? PRSA,V?THROW-AT,V?REMOVE,V?PUT-UNDER /TRUE EQUAL? PRSA,V?PUT-IN,V?PUT,V?POUR /TRUE EQUAL? PRSA,V?GIVE,V?DROP,V?DISEMBARK /TRUE RFALSE .FUNCT REMOTE-VERB? EQUAL? PRSA,V?WALK-TO,V?WAIT-UNTIL,V?WAIT-FOR /TRUE EQUAL? PRSA,V?TELL-ABOUT,V?TALK-ABOUT,V?TAKE-TO /TRUE EQUAL? PRSA,V?SSHOW,V?SHOW,V?SEARCH-FOR /TRUE EQUAL? PRSA,V?SEARCH,V?LOOK-UP,V?LEAVE /TRUE EQUAL? PRSA,V?FOLLOW,V?FIND,V?DRESS /TRUE EQUAL? PRSA,V?DISEMBARK,V?DESCRIBE,V?ASK-FOR /TRUE EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT /TRUE RFALSE .ENDI