moonmist/verbs.zap
historicalsource a2025f6d6c Final Revision
2019-04-14 13:37:43 -04:00

4860 lines
96 KiB
Plaintext

.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