restaurant/verbs.zap

3757 lines
72 KiB
Plaintext

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