4502 lines
86 KiB
Plaintext
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
|