checkpoint/verbs.zap

4502 lines
86 KiB
Plaintext

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