2966 lines
62 KiB
Plaintext
2966 lines
62 KiB
Plaintext
|
|
||
|
|
||
|
.FUNCT V-SCRIPT
|
||
|
GET 0,8
|
||
|
BOR STACK,1
|
||
|
PUT 0,8,STACK
|
||
|
PRINTI "Here begins"
|
||
|
PRINTI " a transcript of interaction with "
|
||
|
CALL V-VERSION
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-UNSCRIPT
|
||
|
PRINTI "Here ends"
|
||
|
PRINTI " a transcript of interaction with "
|
||
|
CALL V-VERSION
|
||
|
GET 0,8
|
||
|
BAND STACK,-2
|
||
|
PUT 0,8,STACK
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-$VERIFY
|
||
|
PRINTI "Verifying disk..."
|
||
|
CRLF
|
||
|
VERIFY \?ELS7
|
||
|
PRINTR "The disk is correct."
|
||
|
?ELS7: CRLF
|
||
|
PRINTR "** Disk Failure **"
|
||
|
|
||
|
|
||
|
.FUNCT V-$TANDY,X,MSG
|
||
|
ZERO? DEBUG \?CND1
|
||
|
CALL PICK-ONE,UNKNOWN-MSGS >MSG
|
||
|
GET MSG,0
|
||
|
PRINT STACK
|
||
|
PRINTI "$ta"
|
||
|
GET MSG,1
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?CND1: GETB 0,1 >X
|
||
|
BAND X,8
|
||
|
ZERO? STACK \?ELS10
|
||
|
BOR X,8
|
||
|
PUTB 0,1,STACK
|
||
|
PRINTR "[on]"
|
||
|
?ELS10: BAND X,-9
|
||
|
PUTB 0,1,STACK
|
||
|
PRINTR "[off]"
|
||
|
|
||
|
|
||
|
.FUNCT V-$WHERE,CNT=0,O,L,MSG
|
||
|
ZERO? DEBUG \?ELS5
|
||
|
CALL PICK-ONE,UNKNOWN-MSGS >MSG
|
||
|
GET MSG,0
|
||
|
PRINT STACK
|
||
|
PRINTI "$whr"
|
||
|
GET MSG,1
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS5: ZERO? PRSI /?ELS9
|
||
|
MOVE PRSI,PRSO
|
||
|
RTRUE
|
||
|
?ELS9: ZERO? PRSO /?ELS12
|
||
|
CALL GOTO,PRSO
|
||
|
RSTACK
|
||
|
?ELS12:
|
||
|
?PRG16: GET CHARACTER-TABLE,CNT >O
|
||
|
ZERO? O /?CND18
|
||
|
LOC O >L
|
||
|
PRINTD O
|
||
|
PRINTI " is "
|
||
|
ZERO? L /?ELS25
|
||
|
PRINTI "in"
|
||
|
CALL THE?,L
|
||
|
PRINTI " "
|
||
|
PRINTD L
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
JUMP ?CND18
|
||
|
?ELS25: PRINTI "nowhere."
|
||
|
CRLF
|
||
|
?CND18: IGRTR? 'CNT,CHARACTER-MAX \?PRG16
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-DEBUG,MSG
|
||
|
ZERO? DEBUG \?PRD6
|
||
|
PUSH 1
|
||
|
JUMP ?PRD7
|
||
|
?PRD6: PUSH 0
|
||
|
?PRD7: SET 'DEBUG,STACK
|
||
|
ZERO? DEBUG /?ELS5
|
||
|
PRINTR "Find them bugs, boss!"
|
||
|
?ELS5: PRINTR "No bugs left, eh?"
|
||
|
|
||
|
|
||
|
.FUNCT V-BRIEF
|
||
|
SET 'VERBOSE,0
|
||
|
SET 'SUPER-BRIEF,0
|
||
|
SET 'P-SPACE,1
|
||
|
PRINTI "(O.K., you will get "
|
||
|
PRINTI "brief"
|
||
|
PRINTR " descriptions.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-SUPER-BRIEF
|
||
|
SET 'SUPER-BRIEF,1
|
||
|
SET 'P-SPACE,0
|
||
|
PRINTI "(O.K., you will get "
|
||
|
PRINTR "super-brief descriptions. Remember that objects and people won't be described, only the name of the place you are entering.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-VERBOSE
|
||
|
SET 'VERBOSE,1
|
||
|
SET 'SUPER-BRIEF,0
|
||
|
SET 'P-SPACE,1
|
||
|
PRINTI "(O.K., you will get "
|
||
|
PRINTI "verbose"
|
||
|
PRINTR " descriptions.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-SPACE
|
||
|
SET 'P-SPACE,1
|
||
|
PRINTR "(O.K., you will now see a space before each input line.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-UNSPACE
|
||
|
SET 'P-SPACE,0
|
||
|
PRINTR "(O.K., you will not see a space before each input line.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-INVENTORY
|
||
|
FIRST? WINNER \?ELS5
|
||
|
CALL PRINT-CONT,WINNER
|
||
|
RSTACK
|
||
|
?ELS5: PRINTR "You are empty-handed."
|
||
|
|
||
|
|
||
|
.FUNCT V-TIME
|
||
|
PRINTI "It's now "
|
||
|
CALL TIME-PRINT,PRESENT-TIME
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT TIME-PRINT,NUM,HR,AM=0
|
||
|
DIV NUM,60 >HR
|
||
|
GRTR? HR,12 \?ELS3
|
||
|
SUB HR,12 >HR
|
||
|
SET 'AM,1
|
||
|
JUMP ?CND1
|
||
|
?ELS3: EQUAL? HR,12 \?CND1
|
||
|
SET 'AM,1
|
||
|
?CND1: PRINTN HR
|
||
|
PRINTI ":"
|
||
|
MOD NUM,60 >HR
|
||
|
LESS? HR,10 \?CND8
|
||
|
PRINTI "0"
|
||
|
?CND8: PRINTN HR
|
||
|
PRINTI " "
|
||
|
ZERO? AM /?ELS21
|
||
|
PUSH STR?153
|
||
|
JUMP ?CND17
|
||
|
?ELS21: PUSH STR?154
|
||
|
?CND17: PRINT STACK
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-QUIT,ASK?=1,SCOR
|
||
|
ZERO? ASK? /?ELS9
|
||
|
PRINTI "(If you want to continue from this point at another time, you must ""SUSPEND"" first.) Do you want to "
|
||
|
PRINTI "stop your investigation now?"
|
||
|
CALL YES?
|
||
|
ZERO? STACK \?THN6
|
||
|
?ELS9: ZERO? ASK? \?ELS5
|
||
|
?THN6: ZERO? TOO-LATE /?CND12
|
||
|
CALL TOO-LATE-F
|
||
|
?CND12: QUIT
|
||
|
RTRUE
|
||
|
?ELS5: PRINTR "O.K."
|
||
|
|
||
|
|
||
|
.FUNCT V-RESTART
|
||
|
PRINTI "Do you wish to restart your investigation?"
|
||
|
CALL YES?
|
||
|
ZERO? STACK /FALSE
|
||
|
RESTART
|
||
|
PRINTI "Your original"
|
||
|
PRINTI " status couldn't be restored."
|
||
|
PRINTI " Consult your instruction manual"
|
||
|
PRINTR " if necessary."
|
||
|
|
||
|
|
||
|
.FUNCT V-RESTORE
|
||
|
RESTORE \?ELS5
|
||
|
PRINTI "O.K."
|
||
|
CRLF
|
||
|
CALL V-FIRST-LOOK
|
||
|
RSTACK
|
||
|
?ELS5: PRINTI "Your previous"
|
||
|
PRINTI " status couldn't be restored."
|
||
|
PRINTI " Consult your instruction manual"
|
||
|
PRINTI " or Reference Card"
|
||
|
PRINTR " if necessary."
|
||
|
|
||
|
|
||
|
.FUNCT V-FIRST-LOOK
|
||
|
CALL DESCRIBE-ROOM
|
||
|
ZERO? STACK /FALSE
|
||
|
ZERO? SUPER-BRIEF \FALSE
|
||
|
CALL DESCRIBE-OBJECTS
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-SAVE
|
||
|
SAVE \?ELS5
|
||
|
PRINTR "O.K."
|
||
|
?ELS5: PRINTI "Your story couldn't be suspended."
|
||
|
PRINTI " Consult your instruction manual"
|
||
|
PRINTI " or Reference Card"
|
||
|
PRINTR " if necessary."
|
||
|
|
||
|
|
||
|
.FUNCT TANDY?
|
||
|
GETB 0,1
|
||
|
BAND STACK,8
|
||
|
ZERO? STACK /FALSE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-VERSION,CNT=17
|
||
|
PRINTI "The WITNESS: An INTERLOGIC Mystery
|
||
|
Copyright (c) 1983 Infocom, Inc. All rights reserved.
|
||
|
"
|
||
|
CALL TANDY?
|
||
|
ZERO? STACK /?CND3
|
||
|
PRINTI "Licensed to Tandy Corporation.
|
||
|
"
|
||
|
?CND3: PRINTI "WITNESS and INTERLOGIC are trademarks of Infocom, Inc.
|
||
|
Revision number "
|
||
|
GET 0,1
|
||
|
BAND STACK,2047
|
||
|
PRINTN STACK
|
||
|
PRINTI " / Serial number "
|
||
|
?PRG12: IGRTR? 'CNT,23 \?ELS16
|
||
|
JUMP ?REP13
|
||
|
?ELS16: GETB 0,CNT
|
||
|
PRINTC STACK
|
||
|
JUMP ?PRG12
|
||
|
?REP13: CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT YES?
|
||
|
PRINTI " (Answer YES or NO.) >"
|
||
|
READ P-INBUF,P-LEXV
|
||
|
GETB P-LEXV,P-LEXWORDS
|
||
|
ZERO? STACK /FALSE
|
||
|
GET P-LEXV,1
|
||
|
EQUAL? STACK,W?YES,W?Y \FALSE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT DESCRIBE-OBJECT,OBJ,V?,LEVEL,STR=0,AV
|
||
|
ZERO? LEVEL \?CND1
|
||
|
GETP OBJ,P?DESCFCN
|
||
|
CALL STACK,M-OBJDESC
|
||
|
ZERO? STACK \TRUE
|
||
|
?CND1: FSET? OBJ,PERSON \?ELS8
|
||
|
CALL THIS-IS-S-HE,OBJ
|
||
|
JUMP ?CND6
|
||
|
?ELS8: CALL THIS-IS-IT,OBJ
|
||
|
?CND6: ZERO? LEVEL \?ELS13
|
||
|
FSET? OBJ,TOUCHBIT /?ELS19
|
||
|
GETP OBJ,P?FDESC >STR
|
||
|
ZERO? STR \?THN16
|
||
|
?ELS19: GETP OBJ,P?LDESC >STR
|
||
|
ZERO? STR /?ELS13
|
||
|
?THN16: PRINT STR
|
||
|
JUMP ?CND11
|
||
|
?ELS13: ZERO? LEVEL \?ELS23
|
||
|
FSET? OBJ,PERSON \?ELS26
|
||
|
PRINTD OBJ
|
||
|
PRINTI " is here."
|
||
|
JUMP ?CND11
|
||
|
?ELS26: PRINTI "There's "
|
||
|
FSET? OBJ,AN \?ELS37
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND33
|
||
|
?ELS37: PUSH STR?156
|
||
|
?CND33: PRINT STACK
|
||
|
PRINTD OBJ
|
||
|
PRINTI " here."
|
||
|
JUMP ?CND11
|
||
|
?ELS23: GET INDENTS,LEVEL
|
||
|
PRINT STACK
|
||
|
FSET? OBJ,PERSON \?ELS46
|
||
|
PRINTD OBJ
|
||
|
JUMP ?CND11
|
||
|
?ELS46: FSET? OBJ,AN \?ELS57
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND53
|
||
|
?ELS57: PUSH STR?156
|
||
|
?CND53: PRINT STACK
|
||
|
PRINTD OBJ
|
||
|
?CND11: ZERO? LEVEL \?CND60
|
||
|
LOC WINNER >AV
|
||
|
ZERO? AV /?CND60
|
||
|
FSET? AV,VEHBIT \?CND60
|
||
|
PRINTI " (outside"
|
||
|
CALL THE?,AV
|
||
|
PRINTI " "
|
||
|
PRINTD AV
|
||
|
PRINTI ")"
|
||
|
?CND60: CRLF
|
||
|
CALL SEE-INSIDE?,OBJ
|
||
|
ZERO? STACK /FALSE
|
||
|
FIRST? OBJ \FALSE
|
||
|
CALL PRINT-CONT,OBJ,V?,LEVEL
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT DESCRIBE-OBJECTS,V?=0
|
||
|
ZERO? LIT /?ELS5
|
||
|
FIRST? HERE \FALSE
|
||
|
ZERO? V? /?ORP15
|
||
|
PUSH V?
|
||
|
JUMP ?THN12
|
||
|
?ORP15: PUSH VERBOSE
|
||
|
?THN12: POP 'V?
|
||
|
CALL PRINT-CONT,HERE,V?,-1
|
||
|
RSTACK
|
||
|
?ELS5: PRINTR "You can't see anything in the dark."
|
||
|
|
||
|
|
||
|
.FUNCT DESCRIBE-ROOM,LOOK?=0,V?,F?=0,STR,L
|
||
|
ZERO? LOOK? /?ORP4
|
||
|
PUSH LOOK?
|
||
|
JUMP ?THN1
|
||
|
?ORP4: PUSH VERBOSE
|
||
|
?THN1: POP 'V?
|
||
|
FSET? HERE,TOUCHBIT /?CND5
|
||
|
FSET HERE,TOUCHBIT
|
||
|
SET 'V?,1
|
||
|
SET 'F?,1
|
||
|
?CND5: IN? HERE,ROOMS \?CND8
|
||
|
ZERO? P-PROMPT /?ELS13
|
||
|
PRINTI "You are now "
|
||
|
FSET? HERE,ON-NOT-IN \?ELS21
|
||
|
PUSH STR?157
|
||
|
JUMP ?CND17
|
||
|
?ELS21: PUSH STR?11
|
||
|
?CND17: PRINT STACK
|
||
|
CALL THE?,HERE
|
||
|
PRINTI " "
|
||
|
PRINTD HERE
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
JUMP ?CND8
|
||
|
?ELS13: PRINTI "("
|
||
|
PRINTD HERE
|
||
|
PRINTI ")"
|
||
|
CRLF
|
||
|
?CND8: ZERO? LOOK? \?THN33
|
||
|
ZERO? SUPER-BRIEF \?CND30
|
||
|
?THN33: SET 'L,PLAYER-HIDING
|
||
|
ZERO? L /?ELS37
|
||
|
PRINTI "(You are hiding behind"
|
||
|
CALL THE?,L
|
||
|
PRINTI " "
|
||
|
PRINTD L
|
||
|
PRINTI ".)"
|
||
|
CRLF
|
||
|
JUMP ?CND35
|
||
|
?ELS37: LOC WINNER >L
|
||
|
FSET? L,VEHBIT \?CND35
|
||
|
PRINTI "(You are "
|
||
|
FSET? L,SURFACEBIT \?ELS49
|
||
|
PRINTI "sitting o"
|
||
|
JUMP ?CND47
|
||
|
?ELS49: PRINTI "standing i"
|
||
|
?CND47: PRINTI "n"
|
||
|
CALL THE?,L
|
||
|
PRINTI " "
|
||
|
PRINTD L
|
||
|
PRINTI ".)"
|
||
|
CRLF
|
||
|
?CND35: ZERO? V? /?ELS62
|
||
|
GETP HERE,P?ACTION
|
||
|
CALL STACK,M-LOOK
|
||
|
ZERO? STACK \TRUE
|
||
|
?ELS62: ZERO? V? /?ELS66
|
||
|
GETP HERE,P?FDESC >STR
|
||
|
ZERO? STR /?ELS66
|
||
|
PRINT STR
|
||
|
CRLF
|
||
|
JUMP ?CND60
|
||
|
?ELS66: ZERO? V? /?ELS72
|
||
|
GETP HERE,P?LDESC >STR
|
||
|
ZERO? STR /?ELS72
|
||
|
PRINT STR
|
||
|
CRLF
|
||
|
JUMP ?CND60
|
||
|
?ELS72: GETP HERE,P?ACTION
|
||
|
CALL STACK,M-FLASH
|
||
|
?CND60: EQUAL? HERE,L /?CND30
|
||
|
GETP L,P?ACTION
|
||
|
CALL STACK,M-LOOK
|
||
|
?CND30: GETP HERE,P?CORRIDOR
|
||
|
ZERO? STACK /TRUE
|
||
|
CALL CORRIDOR-LOOK
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT FIRSTER,OBJ,LEVEL
|
||
|
EQUAL? OBJ,WINNER \?ELS5
|
||
|
PRINTR "You are carrying:"
|
||
|
?ELS5: IN? OBJ,ROOMS /FALSE
|
||
|
GRTR? LEVEL,0 \?CND10
|
||
|
GET INDENTS,LEVEL
|
||
|
PRINT STACK
|
||
|
?CND10: FSET? OBJ,SURFACEBIT \?ELS19
|
||
|
PRINTI "Sitting on"
|
||
|
CALL THE?,OBJ
|
||
|
PRINTI " "
|
||
|
PRINTD OBJ
|
||
|
PRINTR " can be seen:"
|
||
|
?ELS19: FSET? OBJ,PERSON \?ELS25
|
||
|
PRINTD OBJ
|
||
|
PRINTR " is holding:"
|
||
|
?ELS25: PRINTI "The "
|
||
|
PRINTD OBJ
|
||
|
PRINTR " contains:"
|
||
|
|
||
|
|
||
|
.FUNCT GONE-CRAZY
|
||
|
PRINTI "You vaguely hear screaming and yelling through a haze of confusion and the tugs of your conscience asking ""How could you have done it?"" Before you can answer, you hear police sirens come near. Sergeant Duffy and two others enter and grab you by the arms. They take you to a waiting car, where, forlorn and disgusted, you think about being sent up for life. ""Maybe,"" you think, ""I shouldn't have done that."""
|
||
|
CRLF
|
||
|
CALL CASE-OVER
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT GOTO,RM,V?=1,F,WT
|
||
|
CALL WHERE-UPDATE,PLAYER
|
||
|
MOVE PLAYER,RM
|
||
|
SET 'HERE,RM
|
||
|
SET 'LIT,1
|
||
|
GETP HERE,P?ACTION
|
||
|
CALL STACK,M-ENTER
|
||
|
ZERO? V? /FALSE
|
||
|
CALL V-FIRST-LOOK
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT HACK-HACK,STR
|
||
|
IN? PRSO,GLOBAL-OBJECTS \?ELS5
|
||
|
SET 'P-WON,0
|
||
|
PRINTI "(You can't see any"
|
||
|
CALL PRSO-PRINT
|
||
|
PRINTR " here.)"
|
||
|
?ELS5: PRINT STR
|
||
|
CALL THE-PRSO-PRINT
|
||
|
CALL PICK-ONE,HO-HUM
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT HELD?,OBJ
|
||
|
?PRG1: LOC OBJ
|
||
|
ZERO? STACK /FALSE
|
||
|
LOC OBJ
|
||
|
EQUAL? STACK,ROOMS,GLOBAL-OBJECTS /FALSE
|
||
|
IN? OBJ,WINNER /TRUE
|
||
|
LOC OBJ >OBJ
|
||
|
JUMP ?PRG1
|
||
|
|
||
|
|
||
|
.FUNCT IDROP
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTD PRSO
|
||
|
PRINTI " wouldn't enjoy that."
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?ELS5: IN? PRSO,WINNER /?ELS9
|
||
|
LOC PRSO
|
||
|
IN? STACK,WINNER /?ELS9
|
||
|
PRINTI "You're not carrying"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?ELS9: IN? PRSO,WINNER /?ELS15
|
||
|
LOC PRSO
|
||
|
FSET? STACK,OPENBIT /?ELS15
|
||
|
PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI " is closed."
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?ELS15: MOVE PRSO,HERE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT ITAKE,VB=1,CNT,OBJ,?TMP1
|
||
|
FSET? PRSO,TAKEBIT /?ELS5
|
||
|
ZERO? VB /FALSE
|
||
|
PRINTI "You can't take"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?ELS5: LOC PRSO
|
||
|
IN? STACK,WINNER /?ELS13
|
||
|
CALL WEIGHT,PRSO >?TMP1
|
||
|
CALL WEIGHT,WINNER
|
||
|
ADD ?TMP1,STACK
|
||
|
GRTR? STACK,LOAD-ALLOWED \?ELS13
|
||
|
ZERO? VB /?CND16
|
||
|
PRINTI "Your load's too heavy"
|
||
|
LESS? LOAD-ALLOWED,LOAD-MAX \?ELS24
|
||
|
PRINTI ", especially in light of your condition."
|
||
|
JUMP ?CND22
|
||
|
?ELS24: PRINTI "."
|
||
|
?CND22: CRLF
|
||
|
?CND16: RETURN 2
|
||
|
?ELS13: CALL CCOUNT,WINNER >CNT
|
||
|
GRTR? CNT,FUMBLE-NUMBER \?ELS34
|
||
|
MUL CNT,FUMBLE-PROB >?TMP1
|
||
|
RANDOM 100
|
||
|
GRTR? ?TMP1,STACK \?ELS34
|
||
|
FIRST? WINNER >OBJ /?KLU56
|
||
|
?KLU56: NEXT? OBJ >OBJ /?KLU57
|
||
|
?KLU57: PRINTI "Too bad, but"
|
||
|
CALL THE?,OBJ
|
||
|
PRINTI " "
|
||
|
PRINTD OBJ
|
||
|
PRINTI " slips from your arms while you are taking"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI ", and both tumble to the "
|
||
|
GETP HERE,P?LINE
|
||
|
EQUAL? STACK,OUTSIDE-LINE-C \?ELS43
|
||
|
PRINTI "ground"
|
||
|
JUMP ?CND41
|
||
|
?ELS43: PRINTI "floor"
|
||
|
?CND41: PRINTI "."
|
||
|
CRLF
|
||
|
MOVE OBJ,HERE
|
||
|
MOVE PRSO,HERE
|
||
|
RETURN 2
|
||
|
?ELS34: MOVE PRSO,WINNER
|
||
|
FSET PRSO,TOUCHBIT
|
||
|
FCLEAR PRSO,NDESCBIT
|
||
|
FCLEAR PRSO,INVISIBLE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT CCOUNT,OBJ,CNT=0,X
|
||
|
FIRST? OBJ >X \?CND1
|
||
|
?PRG4: INC 'CNT
|
||
|
NEXT? X >X /?PRG4
|
||
|
?CND1: RETURN CNT
|
||
|
|
||
|
|
||
|
.FUNCT NOT-HERE,OBJ
|
||
|
SET 'P-WON,0
|
||
|
PRINTI "(You can't see"
|
||
|
CALL THE?,OBJ
|
||
|
PRINTI " "
|
||
|
PRINTD OBJ
|
||
|
PRINTR " here.)"
|
||
|
|
||
|
|
||
|
.FUNCT PRINT-CONT,OBJ,V?=0,LEVEL=0,Y,1ST?,AV,STR=0,PV?=0,INV?=0
|
||
|
FIRST? OBJ >Y \TRUE
|
||
|
LOC WINNER >AV
|
||
|
ZERO? AV /?ELS6
|
||
|
FSET? AV,VEHBIT \?ELS6
|
||
|
JUMP ?CND4
|
||
|
?ELS6: SET 'AV,0
|
||
|
?CND4: SET '1ST?,1
|
||
|
LOC OBJ
|
||
|
EQUAL? WINNER,OBJ,STACK \?ELS13
|
||
|
SET 'INV?,1
|
||
|
JUMP ?CND11
|
||
|
?ELS13:
|
||
|
?PRG16: ZERO? Y \?ELS20
|
||
|
JUMP ?CND11
|
||
|
?ELS20: EQUAL? Y,AV \?ELS22
|
||
|
SET 'PV?,1
|
||
|
JUMP ?CND18
|
||
|
?ELS22: EQUAL? Y,WINNER \?ELS24
|
||
|
JUMP ?CND18
|
||
|
?ELS24: FSET? Y,INVISIBLE /?CND18
|
||
|
FSET? Y,TOUCHBIT /?CND18
|
||
|
GETP Y,P?FDESC >STR
|
||
|
ZERO? STR /?CND18
|
||
|
FSET? Y,NDESCBIT \?THN34
|
||
|
ZERO? DEBUG /?CND31
|
||
|
PRINTI "[ndescbit] "
|
||
|
?THN34: SET '1ST?,0
|
||
|
SET 'LEVEL,0
|
||
|
ZERO? STR /?CND31
|
||
|
PRINT STR
|
||
|
CRLF
|
||
|
SET 'STR,0
|
||
|
FSET? Y,PERSON \?ELS48
|
||
|
CALL THIS-IS-S-HE,Y
|
||
|
JUMP ?CND40
|
||
|
?ELS48: CALL THIS-IS-IT,Y
|
||
|
?CND40:
|
||
|
?CND31: CALL SEE-INSIDE?,Y
|
||
|
ZERO? STACK /?CND18
|
||
|
LOC Y
|
||
|
GETP STACK,P?DESCFCN
|
||
|
ZERO? STACK \?CND18
|
||
|
FIRST? Y \?CND18
|
||
|
CALL PRINT-CONT,Y,V?,0
|
||
|
?CND18: NEXT? Y >Y /?KLU99
|
||
|
?KLU99: JUMP ?PRG16
|
||
|
?CND11: FIRST? OBJ >Y /?KLU100
|
||
|
?KLU100:
|
||
|
?PRG56: ZERO? Y \?ELS60
|
||
|
ZERO? PV? /?CND61
|
||
|
ZERO? AV /?CND61
|
||
|
FIRST? AV \?CND61
|
||
|
CALL PRINT-CONT,AV,V?,LEVEL
|
||
|
?CND61: ZERO? 1ST? \?PRD66
|
||
|
PUSH 1
|
||
|
RETURN STACK
|
||
|
?PRD66: PUSH 0
|
||
|
RETURN STACK
|
||
|
?ELS60: EQUAL? Y,AV,PLAYER \?ELS69
|
||
|
JUMP ?CND58
|
||
|
?ELS69: FSET? Y,INVISIBLE /?CND58
|
||
|
ZERO? INV? \?THN74
|
||
|
FSET? Y,TOUCHBIT /?THN74
|
||
|
GETP Y,P?FDESC
|
||
|
ZERO? STACK \?CND58
|
||
|
?THN74: FSET? Y,NDESCBIT \?THN79
|
||
|
ZERO? DEBUG /?ELS78
|
||
|
PRINTI "[ndescbit] "
|
||
|
?THN79: ZERO? 1ST? /?CND85
|
||
|
CALL FIRSTER,OBJ,LEVEL
|
||
|
ZERO? STACK /?CND89
|
||
|
LESS? LEVEL,0 \?CND89
|
||
|
SET 'LEVEL,0
|
||
|
?CND89: INC 'LEVEL
|
||
|
SET '1ST?,0
|
||
|
?CND85: CALL DESCRIBE-OBJECT,Y,V?,LEVEL
|
||
|
JUMP ?CND58
|
||
|
?ELS78: FIRST? Y \?CND58
|
||
|
CALL SEE-INSIDE?,Y
|
||
|
ZERO? STACK /?CND58
|
||
|
CALL PRINT-CONT,Y,V?,LEVEL
|
||
|
?CND58: NEXT? Y >Y /?KLU101
|
||
|
?KLU101: JUMP ?PRG56
|
||
|
|
||
|
|
||
|
.FUNCT PRINT-CONTENTS,OBJ,F,N,1ST?=1
|
||
|
FIRST? OBJ >F \FALSE
|
||
|
?PRG6: NEXT? F >N /?KLU45
|
||
|
?KLU45: ZERO? 1ST? /?ELS10
|
||
|
SET '1ST?,0
|
||
|
JUMP ?CND8
|
||
|
?ELS10: PRINTI ", "
|
||
|
ZERO? N \?CND8
|
||
|
PRINTI "and "
|
||
|
?CND8: FSET? F,PERSON \?ELS23
|
||
|
PRINTD F
|
||
|
JUMP ?CND21
|
||
|
?ELS23: FSET? F,AN \?ELS34
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND30
|
||
|
?ELS34: PUSH STR?156
|
||
|
?CND30: PRINT STACK
|
||
|
PRINTD F
|
||
|
?CND21: FSET? F,PERSON \?ELS39
|
||
|
CALL THIS-IS-S-HE,F
|
||
|
JUMP ?CND37
|
||
|
?ELS39: CALL THIS-IS-IT,F
|
||
|
?CND37: SET 'F,N
|
||
|
ZERO? F \?PRG6
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT ROOM-CHECK
|
||
|
IN? PRSO,ROOMS \?ELS5
|
||
|
EQUAL? PRSO,HERE,GLOBAL-HERE \?ELS10
|
||
|
CALL PERFORM,PRSA,GLOBAL-ROOM,PRSI
|
||
|
RTRUE
|
||
|
?ELS10: PRINTR "You aren't in that place!"
|
||
|
?ELS5: EQUAL? PRSO,PSEUDO-OBJECT /FALSE
|
||
|
CALL META-LOC,PRSO
|
||
|
EQUAL? STACK,HERE,GLOBAL-OBJECTS,LOCAL-GLOBALS /FALSE
|
||
|
SET 'P-WON,0
|
||
|
PRINTI "(You can't see any "
|
||
|
EQUAL? PRSO,CAR-WINDOW \?ELS25
|
||
|
PRINTI "window"
|
||
|
JUMP ?CND23
|
||
|
?ELS25: PRINTD PRSO
|
||
|
?CND23: PRINTR " here!)"
|
||
|
|
||
|
|
||
|
.FUNCT SEE-INSIDE?,OBJ
|
||
|
FSET? OBJ,INVISIBLE /FALSE
|
||
|
FSET? OBJ,TRANSBIT /TRUE
|
||
|
FSET? OBJ,OPENBIT /TRUE
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT WEIGHT,OBJ,CONT,WT=0
|
||
|
FIRST? OBJ >CONT \?CND1
|
||
|
?PRG4: CALL WEIGHT,CONT
|
||
|
ADD WT,STACK >WT
|
||
|
NEXT? CONT >CONT /?PRG4
|
||
|
?CND1: GETP OBJ,P?SIZE
|
||
|
ADD WT,STACK
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT PRE-ACCUSE
|
||
|
ZERO? PRSI \?CND1
|
||
|
SET 'PRSI,GLOBAL-MURDER
|
||
|
?CND1: FSET? CORPSE,INVISIBLE \?ELS8
|
||
|
PRINTR "Nothing's dead here but your head!"
|
||
|
?ELS8: EQUAL? PRSO,CORPSE,GLOBAL-LINDER \?ELS12
|
||
|
EQUAL? PRSI,GLOBAL-SUICIDE \?ELS12
|
||
|
PRINTI "Duffy appears for a moment. "
|
||
|
PRINTI """So you believe that Linder's death was suicide? I'm not convinced. But if you'll "
|
||
|
PRINTR "just ""arrest Mr. Linder,"" we can go on from there."" He disappears again."
|
||
|
?ELS12: EQUAL? PRSO,GLOBAL-MRS-LINDER \?ELS18
|
||
|
EQUAL? PRSI,GLOBAL-SUICIDE \?ELS18
|
||
|
PRINTR "Everybody knows that!"
|
||
|
?ELS18: EQUAL? PRSI,GLOBAL-MURDER /?ELS24
|
||
|
PRINTR "What an accusation!"
|
||
|
?ELS24: FSET? PRSO,PERSON /FALSE
|
||
|
PRINTI "What a detective! ""Quick, Sergeant! Arrest that "
|
||
|
PRINTD PRSO
|
||
|
PRINTR "!"""
|
||
|
|
||
|
|
||
|
.FUNCT V-ACCUSE
|
||
|
PRINTD PRSO
|
||
|
PRINTR " shrugs off your accusation."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-SANALYZE
|
||
|
CALL PERFORM,V?ANALYZE,PRSI,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-SANALYZE
|
||
|
PRINTR "[Foo!! This is a bug!!]"
|
||
|
|
||
|
|
||
|
.FUNCT PRE-ANALYZE
|
||
|
EQUAL? PRSI,GLOBAL-FINGERPRINTS /FALSE
|
||
|
ZERO? MET-DUFFY? \?ELS7
|
||
|
PRINTI "You haven't met Sergeant Duffy yet tonight."
|
||
|
PRINTR " You'll need his help to do that."
|
||
|
?ELS7: ZERO? DUFFY-WITH-STILES /FALSE
|
||
|
PRINTR "You'd better wait until Duffy takes care of his prisoner."
|
||
|
|
||
|
|
||
|
.FUNCT V-ANALYZE
|
||
|
EQUAL? PRSI,GLOBAL-FINGERPRINTS \?ELS5
|
||
|
CALL PERFORM,V?FINGERPRINT,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: ZERO? FINGERPRINT-OBJ \?THN8
|
||
|
ZERO? DUFFY-AT-CORONER \?THN8
|
||
|
FSET? PRSO,TAKEBIT \?ELS7
|
||
|
?THN8: CALL DO-ANALYZE
|
||
|
RSTACK
|
||
|
?ELS7: IN? PRSO,GLOBAL-OBJECTS \?ELS11
|
||
|
PRINTI "Duffy appears in an instant. ""Well, I might be able to analyze"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR ", but you don't even have it with you!"" With that, he discreetly leaves."
|
||
|
?ELS11: PRINTI "Sergeant Duffy appears with a puzzled look on his face."
|
||
|
PRINTI " ""With all respect, I don't think I can take THAT to the laboratory! I'll be nearby if you need me."""
|
||
|
PRINTR " He leaves, shaking his head slowly."
|
||
|
|
||
|
|
||
|
.FUNCT V-ANSWER
|
||
|
PRINTI "Nobody seems to be waiting for your answer."
|
||
|
CRLF
|
||
|
SET 'P-CONT,0
|
||
|
SET 'QUOTE-FLAG,0
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-REPLY
|
||
|
SET 'P-CONT,0
|
||
|
SET 'QUOTE-FLAG,0
|
||
|
FSET? PRSO,DOORBIT \?ELS5
|
||
|
PRINTI "No one's knocking at"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " doesn't care."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-ARREST
|
||
|
FSET? CORPSE,INVISIBLE \?ELS5
|
||
|
PRINTR "For what? You have no evidence of a crime yet."
|
||
|
?ELS5: ZERO? MET-DUFFY? \?ELS9
|
||
|
PRINTI "You haven't met Sergeant Duffy yet tonight."
|
||
|
PRINTR " You'll need his help to do that."
|
||
|
?ELS9: ZERO? FINGERPRINT-OBJ \?THN14
|
||
|
ZERO? DUFFY-AT-CORONER /?ELS13
|
||
|
?THN14: PRINTR "Sergeant Duffy isn't around right now. You'll have to wait for him to help you make the arrest."
|
||
|
?ELS13: EQUAL? PRSO,OBJECT-PAIR,GLOBAL-LINDER,CORPSE /?ELS19
|
||
|
EQUAL? PRSI,RANDOM-CRIME,GLOBAL-SUICIDE \?ELS19
|
||
|
PRINTR "Your Chief would probably want you to be sure there's no bigger fish here, like an honest-to-Pete murderer."
|
||
|
?ELS19: EQUAL? PRSO,GLOBAL-DUFFY /FALSE
|
||
|
FSET? PRSO,PERSON /?ELS31
|
||
|
EQUAL? PRSO,OBJECT-PAIR,GLOBAL-LINDER,CORPSE \?THN28
|
||
|
?ELS31: ZERO? PRSI /FALSE
|
||
|
EQUAL? PRSI,GLOBAL-MURDER /FALSE
|
||
|
?THN28: PRINTI "What a detective! ""Quick, Sergeant! Arrest that "
|
||
|
PRINTD PRSO
|
||
|
ZERO? PRSI /?CND36
|
||
|
PRINTI " for "
|
||
|
PRINTD PRSI
|
||
|
?CND36: PRINTI " before "
|
||
|
FSET? PRSO,FEMALE \?ELS48
|
||
|
PUSH STR?177
|
||
|
JUMP ?CND44
|
||
|
?ELS48: EQUAL? PRSO,GLOBAL-DUFFY /?THN51
|
||
|
FSET? PRSO,PERSON \?ELS50
|
||
|
?THN51: PUSH STR?178
|
||
|
JUMP ?CND44
|
||
|
?ELS50: PUSH STR?179
|
||
|
?CND44: PRINT STACK
|
||
|
PRINTR " gets away!"""
|
||
|
|
||
|
|
||
|
.FUNCT V-ARREST
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTI "You realize that you don't have enough evidence to convict "
|
||
|
PRINTD PRSO
|
||
|
PRINTR ", so you decide to continue the investigation."
|
||
|
?ELS5: PRINTI "Sergeant Duffy enters, strokes his chin, and in a puzzled voice says, ""With all respect, I think we'd be laughed out of the station if we tried to charge"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " with murder!"" He leaves quietly."
|
||
|
|
||
|
|
||
|
.FUNCT V-ASK-ABOUT
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
PRINTR "It's been a long week, but talking to yourself won't end it any sooner."
|
||
|
?ELS5: FSET? PRSO,PERSON /?ELS9
|
||
|
PRINTI "Hey, Duffy! Look at your boss talking to "
|
||
|
FSET? PRSO,AN \?ELS16
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND12
|
||
|
?ELS16: PUSH STR?156
|
||
|
?CND12: PRINT STACK
|
||
|
PRINTD PRSO
|
||
|
PRINTR "!"
|
||
|
?ELS9: FSET PRSO,TOUCHBIT
|
||
|
PRINTD PRSO
|
||
|
PRINTR " doesn't seem to know about that."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-ASK-CONTEXT-ABOUT,P
|
||
|
ZERO? QCONTEXT /?ELS5
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS5
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK \?ELS5
|
||
|
CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: CALL FIND-FLAG,HERE,PERSON,WINNER >P
|
||
|
ZERO? P /FALSE
|
||
|
CALL PERFORM,V?ASK-ABOUT,P,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-ASK-CONTEXT-ABOUT
|
||
|
PRINTR "You aren't talking to anyone!"
|
||
|
|
||
|
|
||
|
.FUNCT V-ASK-FOR
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
EQUAL? PRSO,PLAYER /?ELS5
|
||
|
FSET PRSO,TOUCHBIT
|
||
|
PRINTD PRSO
|
||
|
IN? PRSI,PRSO \?ELS14
|
||
|
PRINTI " hands you"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
MOVE PRSI,WINNER
|
||
|
RTRUE
|
||
|
?ELS14: PRINTR " doesn't have that."
|
||
|
?ELS5: CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT PRE-ASK-CONTEXT-FOR,P
|
||
|
ZERO? QCONTEXT /?ELS5
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS5
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK \?ELS5
|
||
|
CALL PERFORM,V?ASK-FOR,QCONTEXT,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: CALL FIND-FLAG,HERE,PERSON,WINNER >P
|
||
|
ZERO? P /FALSE
|
||
|
CALL PERFORM,V?ASK-FOR,P,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-ASK-CONTEXT-FOR
|
||
|
PRINTR "You aren't talking to anyone!"
|
||
|
|
||
|
|
||
|
.FUNCT V-ATTACK
|
||
|
CALL IKILL,STR?180
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-BRUSH
|
||
|
EQUAL? PRSO,MUDDY-SHOES,OUTSIDE-GUN \?ELS5
|
||
|
PRINTR "You shouldn't try to clean a piece of evidence."
|
||
|
?ELS5: PRINTR """Cleanliness is next to Godliness,"" but in this case it seems to be next to Impossible."
|
||
|
|
||
|
|
||
|
.FUNCT V-CALL-LOSE
|
||
|
PRINTR "(You must use a verb!)"
|
||
|
|
||
|
|
||
|
.FUNCT V-$CALL,PER,MOT=0
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
GETP PRSO,P?CHARACTER
|
||
|
GET CHARACTER-TABLE,STACK >PER
|
||
|
CALL IN-MOTION?,PER
|
||
|
ZERO? STACK /?CND6
|
||
|
SET 'MOT,1
|
||
|
?CND6: CALL META-LOC,PER
|
||
|
EQUAL? STACK,HERE /?THN14
|
||
|
CALL CORRIDOR-LOOK,PER
|
||
|
ZERO? STACK /?ELS13
|
||
|
?THN14: FSET PER,TOUCHBIT
|
||
|
PRINTD PER
|
||
|
CALL GRAB-ATTENTION,PER
|
||
|
ZERO? STACK /?ELS22
|
||
|
ZERO? MOT /?ELS27
|
||
|
PRINTR " stops and turns toward you."
|
||
|
?ELS27: PRINTR " is listening."
|
||
|
?ELS22: PRINTR " ignores you."
|
||
|
?ELS13: SET 'P-WON,0
|
||
|
PRINTI "(You don't see "
|
||
|
PRINTD PER
|
||
|
PRINTR " here.)"
|
||
|
?ELS5: CALL V-CALL-LOSE
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-PHONE,PER
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
GETP PRSO,P?CHARACTER
|
||
|
GET CHARACTER-TABLE,STACK >PER
|
||
|
ZERO? PER /?ELS5
|
||
|
CALL META-LOC,PER
|
||
|
EQUAL? STACK,HERE /?THN8
|
||
|
CALL CORRIDOR-LOOK,PER
|
||
|
ZERO? STACK /?ELS5
|
||
|
?THN8: CALL PERFORM,V?$CALL,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: ZERO? PRSI /?ELS11
|
||
|
EQUAL? PRSI,TELEPHONE /?ELS11
|
||
|
PRINTI "Too bad, but"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR " isn't wired for phoning."
|
||
|
?ELS11: CALL PHONE-IN?,HERE
|
||
|
ZERO? STACK \?ELS17
|
||
|
PRINTR "There's no phone here."
|
||
|
?ELS17: EQUAL? PRSO,INTNUM \?ELS21
|
||
|
ZERO? P-NUMBER \?ELS21
|
||
|
PRINTI "You dial the operator, who doesn't go for any of your cute lines, but does connect you with the police station. "
|
||
|
PRINTR "The night clerk at the station says he'll give Duffy your message."
|
||
|
?ELS21: EQUAL? PRSO,BRASS-LANTERN /?THN28
|
||
|
EQUAL? PRSO,INTNUM \?ELS27
|
||
|
EQUAL? P-NUMBER,1308 \?ELS27
|
||
|
?THN28: PRINTR "You dial the number. A voice with a thick Oriental accent answers and says, ""Sorry, Brass Lantern off tonight. Private party. Thank you."" Then the line goes dead."
|
||
|
?ELS27: EQUAL? PRSO,MATCHBOOK,GLOBAL-STILES,STILES /?THN36
|
||
|
EQUAL? PRSO,INTNUM \?ELS35
|
||
|
EQUAL? P-NUMBER,1729 \?ELS35
|
||
|
?THN36: PRINTR "You dial the number. It rings several times with no answer."
|
||
|
?ELS35: EQUAL? PRSO,INTNUM \?ELS43
|
||
|
PRINTR "There's no point in calling that number."
|
||
|
?ELS43: EQUAL? PRSO,GLOBAL-TERRY \?ELS47
|
||
|
PRINTR "You don't know the number."
|
||
|
?ELS47: FSET? PRSO,PERSON /?ELS51
|
||
|
PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " has no phone."
|
||
|
?ELS51: IN? PRSO,HERE \?ELS55
|
||
|
PRINTD PRSO
|
||
|
PRINTR " is right here!"
|
||
|
?ELS55: PRINTI "There's no sense in phoning "
|
||
|
PRINTD PRSO
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-CLIMB-ON
|
||
|
FSET? PRSO,FURNITURE \?ELS5
|
||
|
FSET? PRSO,VEHBIT \?ELS5
|
||
|
MOVE PLAYER,PRSO
|
||
|
PRINTI "You are now sitting on"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: FSET? PRSO,FURNITURE \?ELS11
|
||
|
PRINTR "This isn't the kind of thing to sit on!"
|
||
|
?ELS11: PRINTI "You can't climb onto"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-CLIMB-UP,DIR=P?UP,OBJ=0,X,?TMP1
|
||
|
GETPT HERE,DIR
|
||
|
ZERO? STACK /?ELS5
|
||
|
CALL PERFORM,V?WALK,DIR
|
||
|
RTRUE
|
||
|
?ELS5: ZERO? OBJ \?ELS7
|
||
|
PRINTR "You can't go that way."
|
||
|
?ELS7: ZERO? OBJ /?ELS11
|
||
|
GETPT PRSO,P?SYNONYM >X
|
||
|
PTSIZE X
|
||
|
DIV STACK,2
|
||
|
SUB STACK,1
|
||
|
CALL ZMEMQ,W?WALL,X,STACK
|
||
|
ZERO? STACK /?ELS11
|
||
|
PRINTR "Climbing the walls is no help."
|
||
|
?ELS11: CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-CLIMB-DOWN
|
||
|
FSET? PRSO,FURNITURE \?ELS5
|
||
|
FSET? PRSO,VEHBIT \?ELS5
|
||
|
CALL V-CLIMB-ON
|
||
|
RTRUE
|
||
|
?ELS5: CALL V-CLIMB-UP,P?DOWN
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-CLIMB-FOO
|
||
|
CALL V-CLIMB-UP,P?UP,1
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-CLOSE
|
||
|
FSET? PRSO,CONTBIT /?ELS5
|
||
|
FSET? PRSO,DOORBIT /?ELS5
|
||
|
FSET? PRSO,WINDOWBIT /?ELS5
|
||
|
PRINTI "You'd have to be more clever to do that to"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: FSET? PRSO,DOORBIT /?THN12
|
||
|
FSET? PRSO,WINDOWBIT \?ELS11
|
||
|
?THN12: FSET? PRSO,OPENBIT \?ELS18
|
||
|
FSET? PRSO,RMUNGBIT \?ELS23
|
||
|
PRINTR "It won't stay closed. The latch is broken."
|
||
|
?ELS23: FCLEAR PRSO,OPENBIT
|
||
|
PRINTI "Okeh,"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is now closed."
|
||
|
?ELS18: PRINTR "It's already closed."
|
||
|
?ELS11: FSET? PRSO,SURFACEBIT /?ELS35
|
||
|
GETP PRSO,P?CAPACITY
|
||
|
ZERO? STACK /?ELS35
|
||
|
FSET? PRSO,OPENBIT \?ELS42
|
||
|
FCLEAR PRSO,OPENBIT
|
||
|
PRINTR "Closed."
|
||
|
?ELS42: PRINTR "It's already closed."
|
||
|
?ELS35: PRINTI "You can't close"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-COMPARE,?TMP1
|
||
|
ZERO? PRSI \?ELS5
|
||
|
GET P-PRSO,0
|
||
|
EQUAL? 1,STACK \?ELS5
|
||
|
PRINTR "Oops! Try typing ""COMPARE IT TO (something)."""
|
||
|
?ELS5: GET P-PRSO,0
|
||
|
EQUAL? 2,STACK \FALSE
|
||
|
PUT P-PRSO,0,1
|
||
|
GET P-PRSO,1 >?TMP1
|
||
|
GET P-PRSO,2
|
||
|
CALL PERFORM,PRSA,?TMP1,STACK
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-COMPARE
|
||
|
EQUAL? PRSO,PRSI \?ELS5
|
||
|
PRINTR "They're the same thing!"
|
||
|
?ELS5: PRINTR "They're not a bit alike."
|
||
|
|
||
|
|
||
|
.FUNCT V-CONFRONT
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
PRINTR "You aren't talking to anyone!"
|
||
|
?ELS5: FSET? PRSO,PERSON /?ELS9
|
||
|
PRINTI "That ought to put a scare into"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS9: PRINTD PRSO
|
||
|
CALL PICK-ONE,WHO-CARES
|
||
|
PRINT STACK
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-CURSES
|
||
|
ZERO? PRSO /?ELS5
|
||
|
FSET? PRSO,PERSON \?ELS11
|
||
|
PRINTR "Insults like that won't help you solve the case."
|
||
|
?ELS11: CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS5: CALL PICK-ONE,OFFENDED
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.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: FSET? PRSO,LOCKED \?ELS16
|
||
|
PRINTR "Oof! All you get is a sore shoulder."
|
||
|
?ELS16: PRINTR "Why don't you just open it instead?"
|
||
|
?ELS5: FSET? PRSO,PERSON /?ELS24
|
||
|
CALL HACK-HACK,STR?185
|
||
|
RSTACK
|
||
|
?ELS24: ZERO? PRSI \?ELS26
|
||
|
PRINTI "Trying to destroy "
|
||
|
PRINTD PRSO
|
||
|
PRINTR " with your bare hands is suicidal."
|
||
|
?ELS26: FSET? PRSI,WEAPONBIT /?ELS30
|
||
|
PRINTI "Trying to destroy "
|
||
|
PRINTD PRSO
|
||
|
PRINTI " with "
|
||
|
FSET? PRSI,AN \?ELS37
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND33
|
||
|
?ELS37: PUSH STR?156
|
||
|
?CND33: PRINT STACK
|
||
|
PRINTD PRSI
|
||
|
PRINTR " is quite self-destructive."
|
||
|
?ELS30: PRINTR "You can't."
|
||
|
|
||
|
|
||
|
.FUNCT V-DRINK
|
||
|
CALL V-EAT
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT PRE-DROP
|
||
|
CALL META-LOC,WINNER
|
||
|
EQUAL? PRSO,STACK \FALSE
|
||
|
CALL PERFORM,V?WALK,P?OUT
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-DROP
|
||
|
CALL IDROP
|
||
|
ZERO? STACK /FALSE
|
||
|
PRINTI "Okeh,"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI " is now on the "
|
||
|
GETP HERE,P?LINE
|
||
|
EQUAL? STACK,OUTSIDE-LINE-C \?ELS10
|
||
|
PRINTI "ground"
|
||
|
JUMP ?CND8
|
||
|
?ELS10: PRINTI "floor"
|
||
|
?CND8: PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-EAT,EAT?=0,DRINK?=0,NOBJ=0
|
||
|
FSET? PRSO,FOODBIT /?PRD8
|
||
|
PUSH 0
|
||
|
JUMP ?PRD9
|
||
|
?PRD8: PUSH 1
|
||
|
?PRD9: SET 'EAT?,STACK
|
||
|
ZERO? EAT? /?ELS5
|
||
|
IN? PRSO,WINNER \?ELS5
|
||
|
EQUAL? PRSA,V?DRINK \?ELS12
|
||
|
PRINTI "Seems that you've had too much to drink already!"
|
||
|
CRLF
|
||
|
JUMP ?CND10
|
||
|
?ELS12: PRINTI "Mmm. That really hit the spot."
|
||
|
CRLF
|
||
|
REMOVE PRSO
|
||
|
?CND10: CRLF
|
||
|
RTRUE
|
||
|
?ELS5: FSET? PRSO,DRINKBIT /?PRD21
|
||
|
PUSH 0
|
||
|
JUMP ?PRD22
|
||
|
?PRD21: PUSH 1
|
||
|
?PRD22: SET 'DRINK?,STACK
|
||
|
ZERO? DRINK? /?ELS20
|
||
|
IN? PRSO,GLOBAL-OBJECTS /?THN28
|
||
|
LOC PRSO >NOBJ
|
||
|
ZERO? NOBJ /?ELS27
|
||
|
IN? NOBJ,WINNER \?ELS27
|
||
|
FSET? NOBJ,OPENBIT \?ELS27
|
||
|
?THN28: PRINTI "Mmm. That really hit the spot."
|
||
|
CRLF
|
||
|
REMOVE PRSO
|
||
|
RTRUE
|
||
|
?ELS27: PRINTR "You can't get to it."
|
||
|
?ELS20: ZERO? EAT? \FALSE
|
||
|
ZERO? DRINK? \FALSE
|
||
|
PRINTR "The blue-plate special at the diner was enough for you."
|
||
|
|
||
|
|
||
|
.FUNCT V-ENTER
|
||
|
CALL PERFORM,V?WALK,P?IN
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT PRE-THROUGH
|
||
|
FSET? PRSO,PERSON \FALSE
|
||
|
CALL PERFORM,V?FOLLOW,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-THROUGH,OBJ=0,RM,DIR
|
||
|
IN? PRSO,ROOMS \?ELS5
|
||
|
CALL DIR-FROM,HERE,PRSO >DIR
|
||
|
ZERO? DIR /?ELS10
|
||
|
CALL PERFORM,V?WALK,DIR
|
||
|
RTRUE
|
||
|
?ELS10: CALL META-LOC,PLAYER
|
||
|
EQUAL? PRSO,STACK \?ELS12
|
||
|
PRINTR "You're already there!"
|
||
|
?ELS12: PRINTR "You can't go from here to there, at least not directly."
|
||
|
?ELS5: FSET? PRSO,DOORBIT \?ELS20
|
||
|
FSET? PRSO,OPENBIT \?ELS20
|
||
|
CALL DOOR-ROOM,HERE,PRSO >RM
|
||
|
ZERO? RM /?ELS27
|
||
|
CALL GOTO,RM
|
||
|
RSTACK
|
||
|
?ELS27: PRINTI "Sorry, but the """
|
||
|
PRINTD PRSO
|
||
|
PRINTR """ must be somewhere else."
|
||
|
?ELS20: EQUAL? PRSO,BACK-FOOTPRINTS,SIDE-FOOTPRINTS \?ELS33
|
||
|
PRINTR "You could mess up valuable evidence that way."
|
||
|
?ELS33: ZERO? OBJ \?ELS37
|
||
|
FSET? PRSO,TAKEBIT /?ELS37
|
||
|
PRINTI "You hit your head against"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " as you try it."
|
||
|
?ELS37: ZERO? OBJ /?ELS43
|
||
|
PRINTR "You can't do that!"
|
||
|
?ELS43: IN? PRSO,WINNER \?ELS48
|
||
|
PRINTR "You must think you're a contortionist!"
|
||
|
?ELS48: CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT PRE-EXAMINE,VAL
|
||
|
CALL ROOM-CHECK
|
||
|
ZERO? STACK \TRUE
|
||
|
EQUAL? P-ADVERB,W?CAREFULLY \FALSE
|
||
|
CALL INT-WAIT,3 >VAL
|
||
|
ZERO? VAL \?ELS12
|
||
|
PRINTI "You never got to finish looking over"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS12: EQUAL? VAL,M-FATAL /TRUE
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT V-EXAMINE,T
|
||
|
IN? PRSO,GLOBAL-OBJECTS \?ELS5
|
||
|
CALL NOT-HERE,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: GETP PRSO,P?TEXT >T
|
||
|
ZERO? T /?ELS7
|
||
|
PRINT T
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS7: FSET? PRSO,CONTBIT \?ELS11
|
||
|
CALL V-LOOK-INSIDE
|
||
|
RSTACK
|
||
|
?ELS11: PRINTI "There's nothing special about"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-FIND,PRON,PRON1,CHR,NUM,?TMP1
|
||
|
SET 'PRON,PRON-HIM
|
||
|
SET 'PRON1,PRON-HE
|
||
|
IN? PRSO,ROOMS \?ELS5
|
||
|
EQUAL? PRSO,HERE \?ELS10
|
||
|
PRINTR "You're already here!"
|
||
|
?ELS10: FSET? PRSO,TOUCHBIT \?ELS14
|
||
|
PRINTR "You should know - you've been there!"
|
||
|
?ELS14: PRINTR "You're the detective!"
|
||
|
?ELS5: FSET? PRSO,PERSON \FALSE
|
||
|
GETP WINNER,P?CHARACTER
|
||
|
GET WHERE-TABLES,STACK >?TMP1
|
||
|
GETP PRSO,P?CHARACTER >CHR
|
||
|
GET ?TMP1,CHR >NUM
|
||
|
IN? PRSO,GLOBAL-OBJECTS \?CND23
|
||
|
GET CHARACTER-TABLE,CHR >PRSO
|
||
|
?CND23: FSET? PRSO,FEMALE \?ELS28
|
||
|
SET 'PRON,PRON-HER
|
||
|
SET 'PRON1,PRON-SHE
|
||
|
JUMP ?CND26
|
||
|
?ELS28: EQUAL? CHR,LINDER-C \?CND26
|
||
|
LOC LINDER
|
||
|
ZERO? STACK \?CND26
|
||
|
EQUAL? WINNER,PLAYER \?ELS35
|
||
|
PRINTR "What do you mean? He's dead!"
|
||
|
?ELS35: EQUAL? WINNER,PHONG \?ELS43
|
||
|
ZERO? PHONG-SEEN-CORPSE? \?THN40
|
||
|
?ELS43: EQUAL? WINNER,MONICA \FALSE
|
||
|
ZERO? MONICA-SEEN-CORPSE? /FALSE
|
||
|
?THN40: PRINTI """"
|
||
|
PRINTI "What do you mean? He's dead!"
|
||
|
PRINTR """"
|
||
|
?CND26: EQUAL? WINNER,PLAYER /?CND50
|
||
|
CALL GRAB-ATTENTION,WINNER
|
||
|
ZERO? STACK /TRUE
|
||
|
?CND50: CALL META-LOC,WINNER >?TMP1
|
||
|
CALL META-LOC,PRSO
|
||
|
EQUAL? ?TMP1,STACK \?ELS57
|
||
|
EQUAL? WINNER,PLAYER \?ELS60
|
||
|
PRINTR "It sounds as though you need your vision checked."
|
||
|
?ELS60: PRINTR """Ahem..."""
|
||
|
?ELS57: ZERO? NUM \?ELS68
|
||
|
EQUAL? WINNER,PLAYER \?ELS71
|
||
|
PRINTI "You haven't seen "
|
||
|
PRINT PRON
|
||
|
PRINTR " yet."
|
||
|
?ELS71: PRINTI """I haven't seen "
|
||
|
PRINT PRON
|
||
|
PRINTR " tonight."""
|
||
|
?ELS68: SUB PRESENT-TIME,NUM >NUM
|
||
|
EQUAL? WINNER,PLAYER \?ELS82
|
||
|
PRINTI "You last saw "
|
||
|
PRINT PRON
|
||
|
PRINTI " "
|
||
|
JUMP ?CND80
|
||
|
?ELS82: PRINTI """I last saw "
|
||
|
PRINT PRON
|
||
|
PRINTI " "
|
||
|
?CND80: GRTR? NUM,120 \?ELS91
|
||
|
PRINTI "a few hours"
|
||
|
JUMP ?CND89
|
||
|
?ELS91: GRTR? NUM,80 \?ELS95
|
||
|
PRINTI "an hour or two"
|
||
|
JUMP ?CND89
|
||
|
?ELS95: GRTR? NUM,45 \?ELS99
|
||
|
PRINTI "about an hour"
|
||
|
JUMP ?CND89
|
||
|
?ELS99: GRTR? NUM,20 \?ELS103
|
||
|
PRINTI "about half an hour"
|
||
|
JUMP ?CND89
|
||
|
?ELS103: GRTR? NUM,10 \?ELS107
|
||
|
PRINTI "about 15 minutes"
|
||
|
JUMP ?CND89
|
||
|
?ELS107: GRTR? NUM,5 \?ELS111
|
||
|
PRINTI "less than 10 minutes"
|
||
|
JUMP ?CND89
|
||
|
?ELS111: PRINTI "just a few minutes"
|
||
|
?CND89: EQUAL? WINNER,PLAYER /?ELS120
|
||
|
PRINTI " ago. I don't know where "
|
||
|
PRINT PRON1
|
||
|
PRINTR " is now."""
|
||
|
?ELS120: PRINTI " ago."
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-FIND,L
|
||
|
LOC PRSO >L
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
EQUAL? PLAYER,WINNER /?CND6
|
||
|
PRINTI """"
|
||
|
?CND6: PRINTI "You're right here, "
|
||
|
FSET? L,SURFACEBIT \?ELS15
|
||
|
PRINTI "on"
|
||
|
JUMP ?CND13
|
||
|
?ELS15: PRINTI "in"
|
||
|
?CND13: CALL THE?,L
|
||
|
PRINTI " "
|
||
|
PRINTD L
|
||
|
PRINTI "."
|
||
|
EQUAL? PLAYER,WINNER /?CND24
|
||
|
PRINTI """"
|
||
|
?CND24: CRLF
|
||
|
RTRUE
|
||
|
?ELS5: EQUAL? PLAYER,WINNER /?ELS30
|
||
|
PRINTI """"
|
||
|
PRINTI "You're the detective!"
|
||
|
PRINTR """"
|
||
|
?ELS30: EQUAL? L,GLOBAL-OBJECTS /?THN35
|
||
|
FSET? PRSO,TOUCHBIT /?ELS34
|
||
|
?THN35: PRINTR "You're the detective!"
|
||
|
?ELS34: IN? PRSO,WINNER \?ELS40
|
||
|
PRINTR "You have it."
|
||
|
?ELS40: IN? PRSO,HERE /?THN45
|
||
|
EQUAL? PRSO,PSEUDO-OBJECT \?ELS44
|
||
|
?THN45: PRINTR "It's right here."
|
||
|
?ELS44: FSET? L,PERSON \?ELS50
|
||
|
PRINTD L
|
||
|
PRINTR " has it."
|
||
|
?ELS50: FSET? L,SURFACEBIT \?ELS54
|
||
|
PRINTI "It's on"
|
||
|
CALL THE?,L
|
||
|
PRINTI " "
|
||
|
PRINTD L
|
||
|
PRINTR "."
|
||
|
?ELS54: FSET? L,CONTBIT \?ELS60
|
||
|
PRINTI "It's in"
|
||
|
CALL THE?,L
|
||
|
PRINTI " "
|
||
|
PRINTD L
|
||
|
PRINTR "."
|
||
|
?ELS60: PRINTR "You're the detective!"
|
||
|
|
||
|
|
||
|
.FUNCT V-FINGERPRINT
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTR "You can't find prints on a person!"
|
||
|
?ELS5: PRINTI "You don't find any good prints on"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-FOLLOW,CN,CHR,COR,PCOR,L
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
PRINTR "It's not clear who you're talking to."
|
||
|
?ELS5: FSET? PRSO,PERSON /?ELS9
|
||
|
PRINTI "How tragic to see a formerly great detective stalking "
|
||
|
FSET? PRSO,AN \?ELS16
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND12
|
||
|
?ELS16: PUSH STR?156
|
||
|
?CND12: PRINT STACK
|
||
|
PRINTD PRSO
|
||
|
PRINTR "!"
|
||
|
?ELS9: GETP PRSO,P?CHARACTER >CN
|
||
|
GET CHARACTER-TABLE,CN >CHR
|
||
|
CALL META-LOC,CHR >L
|
||
|
EQUAL? HERE,L \?ELS20
|
||
|
PRINTI "You're in the same place as "
|
||
|
FSET? CHR,TOUCHBIT \?ELS27
|
||
|
PRINTD PRSO
|
||
|
PRINTR "!"
|
||
|
?ELS27: PRINTI "the "
|
||
|
GETP CHR,P?XDESC
|
||
|
PRINT STACK
|
||
|
PRINTR "!"
|
||
|
?ELS20: ZERO? L /?THN36
|
||
|
EQUAL? L,LIMBO \?ELS35
|
||
|
?THN36: FSET? CHR,TOUCHBIT \?ELS40
|
||
|
PRINTD PRSO
|
||
|
JUMP ?CND38
|
||
|
?ELS40: PRINTI "The "
|
||
|
GETP CHR,P?XDESC
|
||
|
PRINT STACK
|
||
|
?CND38: PRINTR " has left the grounds."
|
||
|
?ELS35: GET WHERE-TABLES,0
|
||
|
GET STACK,CN
|
||
|
EQUAL? STACK,PRESENT-TIME \?ELS50
|
||
|
CALL OUTSIDE?,L
|
||
|
ZERO? STACK /?ELS59
|
||
|
CALL OUTSIDE?,HERE
|
||
|
ZERO? STACK \?THN56
|
||
|
?ELS59: CALL OUTSIDE?,L
|
||
|
ZERO? STACK \?ELS55
|
||
|
CALL OUTSIDE?,HERE
|
||
|
ZERO? STACK \?ELS55
|
||
|
?THN56: CALL GOTO,L
|
||
|
RSTACK
|
||
|
?ELS55: PRINTI "You seem to have lost track of "
|
||
|
FSET? CHR,TOUCHBIT \?ELS70
|
||
|
PRINTD PRSO
|
||
|
PRINTR "."
|
||
|
?ELS70: PRINTI "the "
|
||
|
GETP CHR,P?XDESC
|
||
|
PRINT STACK
|
||
|
PRINTR "."
|
||
|
?ELS50: GETP HERE,P?CORRIDOR >COR
|
||
|
ZERO? COR /?ELS78
|
||
|
GETP L,P?CORRIDOR >PCOR
|
||
|
ZERO? PCOR /?ELS78
|
||
|
BAND COR,PCOR
|
||
|
ZERO? STACK /?ELS78
|
||
|
CALL COR-DIR,HERE,L >PRSO
|
||
|
CALL V-WALK
|
||
|
RSTACK
|
||
|
?ELS78: PRINTI "You seem to have lost track of "
|
||
|
FSET? CHR,TOUCHBIT \?ELS89
|
||
|
PRINTD PRSO
|
||
|
PRINTR "."
|
||
|
?ELS89: PRINTI "the "
|
||
|
GETP CHR,P?XDESC
|
||
|
PRINT STACK
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-GIVE
|
||
|
EQUAL? PRSO,OFFICE-BACK-DOOR /FALSE
|
||
|
CALL HELD?,PRSO
|
||
|
ZERO? STACK \FALSE
|
||
|
EQUAL? PRSI,PLAYER /FALSE
|
||
|
PRINTR "That's easy for you to say, since you don't even have it."
|
||
|
|
||
|
|
||
|
.FUNCT V-GIVE
|
||
|
FSET? PRSI,PERSON /?ELS5
|
||
|
PRINTI "You can't give "
|
||
|
FSET? PRSO,PERSON /?CND8
|
||
|
EQUAL? PRSO,GLOBAL-DUFFY \?ELS10
|
||
|
JUMP ?CND8
|
||
|
?ELS10: FSET? PRSO,AN \?ELS14
|
||
|
PRINTI "an "
|
||
|
JUMP ?CND8
|
||
|
?ELS14: PRINTI "a "
|
||
|
?CND8: PRINTD PRSO
|
||
|
PRINTI " to "
|
||
|
FSET? PRSI,AN \?ELS27
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND23
|
||
|
?ELS27: PUSH STR?156
|
||
|
?CND23: PRINT STACK
|
||
|
PRINTD PRSI
|
||
|
PRINTR "!"
|
||
|
?ELS5: PRINTD PRSI
|
||
|
PRINTR " refuses your offer."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-SGIVE
|
||
|
CALL PERFORM,V?GIVE,PRSI,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-SGIVE
|
||
|
PRINTR "[Foo!! This is a bug!!]"
|
||
|
|
||
|
|
||
|
.FUNCT V-GOODBYE
|
||
|
CALL V-HELLO,0
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-HANDCUFF
|
||
|
IN? HANDCUFFS,PLAYER \?ELS5
|
||
|
CALL PERFORM,V?TIE-WITH,PRSO,HANDCUFFS
|
||
|
RTRUE
|
||
|
?ELS5: PRINTI "You don't have the "
|
||
|
PRINTD HANDCUFFS
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-HELLO,HELL=1,P
|
||
|
ZERO? PRSO /?ORP9
|
||
|
PUSH PRSO
|
||
|
JUMP ?THN6
|
||
|
?ORP9: ZERO? QCONTEXT /?ORP10
|
||
|
PUSH QCONTEXT
|
||
|
JUMP ?THN6
|
||
|
?ORP10: CALL FIND-FLAG,HERE,PERSON,WINNER
|
||
|
?THN6: POP 'P
|
||
|
ZERO? P /?ELS5
|
||
|
FSET? P,PERSON \?ELS15
|
||
|
ZERO? HELL /?ELS20
|
||
|
FSET P,TOUCHBIT
|
||
|
PRINTD P
|
||
|
PRINTR " nods at you."
|
||
|
?ELS20: PRINTR """Don't tell me you're leaving already!"""
|
||
|
?ELS15: PRINTI "Only nuts say """
|
||
|
ZERO? HELL /?ELS36
|
||
|
PUSH STR?189
|
||
|
JUMP ?CND32
|
||
|
?ELS36: PUSH STR?190
|
||
|
?CND32: PRINT STACK
|
||
|
PRINTI """ to "
|
||
|
FSET? P,AN \?ELS44
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND40
|
||
|
?ELS44: PUSH STR?156
|
||
|
?CND40: PRINT STACK
|
||
|
PRINTD P
|
||
|
PRINTR "."
|
||
|
?ELS5: PRINTR "It's not clear who you're talking to."
|
||
|
|
||
|
|
||
|
.FUNCT V-HELP
|
||
|
ZERO? PRSO \?ELS5
|
||
|
PRINTR "(You'll find plenty of help in your instruction manual.)"
|
||
|
?ELS5: EQUAL? PRSO,PLAYER \?ELS9
|
||
|
CALL PERFORM,V?GIVE,HINT,PLAYER
|
||
|
RTRUE
|
||
|
?ELS9: PRINTR "You'll have to be more specific."
|
||
|
|
||
|
|
||
|
.FUNCT V-HIDE
|
||
|
EQUAL? HERE,OFFICE \?ELS5
|
||
|
PRINTR "You could hide behind the lounge."
|
||
|
?ELS5: PRINTR "There's no good hiding place here."
|
||
|
|
||
|
|
||
|
.FUNCT V-HIDE-BEHIND
|
||
|
CALL FIND-FLAG,HERE,PERSON,WINNER
|
||
|
ZERO? STACK /?ELS5
|
||
|
PRINTR "You can't hide when people are watching you!"
|
||
|
?ELS5: EQUAL? PRSO,LOUNGE \?ELS9
|
||
|
SET 'PLAYER-HIDING,PRSO
|
||
|
PRINTR "Okeh, you're now crouching down behind the lounge."
|
||
|
?ELS9: PRINTI "There's no room to hide behind"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-KICK
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTI """I get no "
|
||
|
CALL VERB-PRINT
|
||
|
PRINTR " from shampoo..."" -- Cole Flathead"
|
||
|
?ELS5: CALL HACK-HACK,STR?191
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-KILL
|
||
|
CALL IKILL,STR?192
|
||
|
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: EQUAL? PRSO,WORKSHOP-DOOR,GARAGE-DOOR,FRONT-DOOR \?ELS15
|
||
|
PRINTR "There must be an easier way to do what you want."
|
||
|
?ELS15: FSET? PRSO,DOORBIT \?ELS19
|
||
|
FSET PRSO,RMUNGBIT
|
||
|
PRINTI "Hey, this isn't a "
|
||
|
PRINT STR
|
||
|
PRINTI "-em-up Western!"
|
||
|
PRINTR " You just broke the lock beyond repair."
|
||
|
?ELS19: FSET? PRSO,PERSON /?ELS25
|
||
|
PRINTI "Sure, you probably need to sharpen your eye, but "
|
||
|
FSET? PRSO,AN \?ELS32
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND28
|
||
|
?ELS32: PUSH STR?156
|
||
|
?CND28: PRINT STACK
|
||
|
PRINTD PRSO
|
||
|
PRINTR " is a lousy target."
|
||
|
?ELS25: ZERO? PRSI \?ELS36
|
||
|
RANDOM 100
|
||
|
GRTR? 50,STACK \?ELS41
|
||
|
PRINTR "You think it over. It's not worth the trouble."
|
||
|
?ELS41: PRINTI "With your expert ability, you "
|
||
|
PRINT STR
|
||
|
CALL PRSO-PRINT
|
||
|
PRINTI " in no time."
|
||
|
CRLF
|
||
|
CALL GONE-CRAZY
|
||
|
RSTACK
|
||
|
?ELS36: EQUAL? PRSI,PISTOL,INSIDE-GUN,OUTSIDE-GUN \?ELS49
|
||
|
RANDOM 100
|
||
|
GRTR? 50,STACK \?ELS54
|
||
|
PRINTR "You think it over. It's not worth the trouble."
|
||
|
?ELS54: PRINTI "A shot rings out and"
|
||
|
CALL PRSO-PRINT
|
||
|
PRINTI " crumples to the ground, dead. Good shot."
|
||
|
CRLF
|
||
|
CALL GONE-CRAZY
|
||
|
RSTACK
|
||
|
?ELS49: RANDOM 100
|
||
|
GRTR? 50,STACK \?ELS62
|
||
|
PRINTR "You think it over. It's not worth the trouble."
|
||
|
?ELS62: PRINTI "With a lethal blow of"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTI ","
|
||
|
CALL PRSO-PRINT
|
||
|
PRINTI " falls dead."
|
||
|
CRLF
|
||
|
CALL GONE-CRAZY
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-KISS
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTR "Section 204D, Paragraph 7.6 of the California Police Code of Conduct specifically prohibits kissing potential suspects or witnesses."
|
||
|
?ELS5: PRINTR "What a (ahem!) strange idea!"
|
||
|
|
||
|
|
||
|
.FUNCT V-KNOCK
|
||
|
FSET? PRSO,DOORBIT /?THN6
|
||
|
FSET? PRSO,WINDOWBIT \?ELS5
|
||
|
?THN6: FSET? PRSO,DOORBIT \?ELS17
|
||
|
CALL DOOR-ROOM,HERE,PRSO
|
||
|
JUMP ?CND13
|
||
|
?ELS17: CALL WINDOW-ROOM,HERE,PRSO
|
||
|
?CND13: CALL INHABITED?,STACK
|
||
|
ZERO? STACK /?ELS12
|
||
|
PRINTI "Someone"
|
||
|
ZERO? TOO-LATE /?ELS26
|
||
|
PRINTR " shouts ""Go away!"""
|
||
|
?ELS26: PRINTR " shouts ""Go to the front door!"""
|
||
|
?ELS12: PRINTR "There's no answer."
|
||
|
?ELS5: PRINTI "Why knock on "
|
||
|
FSET? PRSO,PERSON /?CND42
|
||
|
EQUAL? PRSO,GLOBAL-DUFFY \?ELS44
|
||
|
JUMP ?CND42
|
||
|
?ELS44: FSET? PRSO,AN \?ELS48
|
||
|
PRINTI "an "
|
||
|
JUMP ?CND42
|
||
|
?ELS48: PRINTI "a "
|
||
|
?CND42: PRINTD PRSO
|
||
|
PRINTR "?"
|
||
|
|
||
|
|
||
|
.FUNCT V-LEAN
|
||
|
PRINTR "You can't do that!"
|
||
|
|
||
|
|
||
|
.FUNCT V-STAND,P
|
||
|
ZERO? PLAYER-HIDING /?ELS5
|
||
|
PRINTI "You are no longer hiding behind"
|
||
|
CALL THE?,PLAYER-HIDING
|
||
|
PRINTI " "
|
||
|
PRINTD PLAYER-HIDING
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
SET 'PLAYER-HIDING,0
|
||
|
CALL INHABITED?,HERE
|
||
|
ZERO? STACK /TRUE
|
||
|
CALL FIND-FLAG,HERE,PERSON >P
|
||
|
PRINTD P
|
||
|
PRINTR " looks startled to find you here."
|
||
|
?ELS5: LOC WINNER
|
||
|
FSET? STACK,SURFACEBIT /?THN18
|
||
|
LOC WINNER
|
||
|
FSET? STACK,FURNITURE \?ELS17
|
||
|
?THN18: MOVE WINNER,HERE
|
||
|
SET 'PLAYER-HIDING,0
|
||
|
PRINTR "You are on your own feet again."
|
||
|
?ELS17: PRINTR "You're already standing up!"
|
||
|
|
||
|
|
||
|
.FUNCT V-LEAVE
|
||
|
CALL PERFORM,V?WALK,P?OUT
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-LISTEN
|
||
|
CALL CAN-HEAR-RECORD?
|
||
|
ZERO? STACK /?ELS5
|
||
|
PRINTI "Through the door you can hear a "
|
||
|
PRINTI "record"
|
||
|
PRINTR " playing."
|
||
|
?ELS5: CALL CAN-HEAR-RADIO?
|
||
|
ZERO? STACK /?ELS9
|
||
|
PRINTI "Through the door you can hear a "
|
||
|
PRINTI "radio"
|
||
|
PRINTR " playing."
|
||
|
?ELS9: PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " makes no sound."
|
||
|
|
||
|
|
||
|
.FUNCT V-LOCK
|
||
|
FSET? PRSO,CONTBIT /?ELS5
|
||
|
FSET? PRSO,DOORBIT /?ELS5
|
||
|
PRINTI "You'd have to be more clever to do that to"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: FSET? PRSO,DOORBIT /?THN12
|
||
|
GETP PRSO,P?CAPACITY
|
||
|
ZERO? STACK /?ELS11
|
||
|
?THN12: FSET? PRSO,OPENBIT \?ELS18
|
||
|
PRINTR "You'll have to close it first."
|
||
|
?ELS18: FSET? PRSO,LOCKED \?ELS22
|
||
|
PRINTR "It's already locked."
|
||
|
?ELS22: FSET? PRSO,RMUNGBIT \?ELS26
|
||
|
PRINTR "You can't lock it. The lock is broken."
|
||
|
?ELS26: FSET PRSO,LOCKED
|
||
|
PRINTI "Okeh,"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is now locked."
|
||
|
?ELS11: PRINTI "You can't lock"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK
|
||
|
CALL DESCRIBE-ROOM,1
|
||
|
ZERO? STACK /FALSE
|
||
|
CALL DESCRIBE-OBJECTS,1
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK-BEHIND
|
||
|
PRINTI "There's nothing behind "
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTD PRSO
|
||
|
JUMP ?CND3
|
||
|
?ELS5: PRINTI "the"
|
||
|
CALL PRSO-PRINT
|
||
|
?CND3: PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK-DOWN
|
||
|
EQUAL? PRSO,ROOMS \?ELS5
|
||
|
GETP HERE,P?LINE
|
||
|
EQUAL? STACK,OUTSIDE-LINE-C \?ELS10
|
||
|
PRINTI "There's "
|
||
|
CALL GROUND-SURFACE
|
||
|
PRINT STACK
|
||
|
PRINTR " there, mostly."
|
||
|
?ELS10: PRINTR "Nothing's interesting about the floor."
|
||
|
?ELS5: PRINTR "It has been a long week, hasn't it?"
|
||
|
|
||
|
|
||
|
.FUNCT PRE-LOOK-INSIDE
|
||
|
CALL ROOM-CHECK
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK-INSIDE,DIR=P?IN,RM
|
||
|
EQUAL? PRSO,GLOBAL-ROOM \?ELS5
|
||
|
CALL PERFORM,V?LOOK
|
||
|
RTRUE
|
||
|
?ELS5: FSET? PRSO,RLANDBIT \?ELS7
|
||
|
CALL ROOM-PEEK,PRSO
|
||
|
RSTACK
|
||
|
?ELS7: FSET? PRSO,DOORBIT \?ELS9
|
||
|
FSET? PRSO,OPENBIT \?ELS14
|
||
|
CALL DOOR-ROOM,HERE,PRSO >RM
|
||
|
ZERO? RM /?ELS19
|
||
|
CALL ROOM-PEEK,RM
|
||
|
RSTACK
|
||
|
?ELS19: PRINTI "The "
|
||
|
PRINTD PRSO
|
||
|
PRINTR " is open, but you can't tell what's beyond it."
|
||
|
?ELS14: PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is closed."
|
||
|
?ELS9: FSET? PRSO,WINDOWBIT \?ELS29
|
||
|
CALL WINDOW-ROOM,HERE,PRSO >RM
|
||
|
ZERO? RM /?ELS34
|
||
|
CALL ROOM-PEEK,RM
|
||
|
RSTACK
|
||
|
?ELS34: PRINTI "You can't tell what's beyond"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS29: FSET? PRSO,CONTBIT \?ELS40
|
||
|
CALL SEE-INSIDE?,PRSO
|
||
|
ZERO? STACK /?ELS45
|
||
|
FIRST? PRSO \?ELS50
|
||
|
CALL PRINT-CONT,PRSO
|
||
|
ZERO? STACK \TRUE
|
||
|
?ELS50: FSET? PRSO,SURFACEBIT \?ELS54
|
||
|
PRINTI "There's nothing on"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS54: PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is empty."
|
||
|
?ELS45: PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is closed."
|
||
|
?ELS40: FSET? PRSO,PERSON \?ELS66
|
||
|
PRINTR "You forgot to bring your X-ray glasses."
|
||
|
?ELS66: EQUAL? DIR,P?IN \?ELS70
|
||
|
PRINTI "You can't look inside"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS70: EQUAL? DIR,P?OUT \FALSE
|
||
|
PRINTI "You can't look outside"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT ROOM-PEEK,RM,OHERE
|
||
|
SET 'OHERE,HERE
|
||
|
CALL SEE-INTO?,RM
|
||
|
ZERO? STACK /FALSE
|
||
|
SET 'HERE,RM
|
||
|
PRINTI "You take a quick peek into"
|
||
|
CALL THE?,RM
|
||
|
PRINTI " "
|
||
|
PRINTD RM
|
||
|
PRINTI ":"
|
||
|
CRLF
|
||
|
CALL DESCRIBE-OBJECTS,1
|
||
|
ZERO? STACK \?CND10
|
||
|
PRINTI "You can't see anything interesting."
|
||
|
CRLF
|
||
|
?CND10: SET 'HERE,OHERE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT SEE-INTO?,THERE,P,L,T,O
|
||
|
SET 'P,0
|
||
|
?PRG1: NEXTP HERE,P >P
|
||
|
ZERO? P \?ELS5
|
||
|
PRINTI "You can't seem to find that room."
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?ELS5: EQUAL? P,P?IN,P?OUT \?ELS9
|
||
|
JUMP ?PRG1
|
||
|
?ELS9: LESS? P,LOW-DIRECTION /?PRG1
|
||
|
GETPT HERE,P >T
|
||
|
PTSIZE T >L
|
||
|
EQUAL? L,UEXIT \?ELS14
|
||
|
GETB T,REXIT
|
||
|
EQUAL? STACK,THERE /TRUE
|
||
|
?ELS14: EQUAL? L,DEXIT \?ELS18
|
||
|
GETB T,REXIT
|
||
|
EQUAL? STACK,THERE \?ELS18
|
||
|
GETB T,DEXITOBJ
|
||
|
FSET? STACK,OPENBIT /TRUE
|
||
|
PRINTI "The door to that room is closed."
|
||
|
CRLF
|
||
|
RFALSE
|
||
|
?ELS18: EQUAL? L,CEXIT \?PRG1
|
||
|
GETB T,REXIT
|
||
|
EQUAL? STACK,THERE \?PRG1
|
||
|
GETB T,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
|
||
|
CALL V-LOOK-INSIDE
|
||
|
RSTACK
|
||
|
?ELS5: PRINTI "There's no good surface on"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK-OUTSIDE
|
||
|
CALL V-LOOK-INSIDE,P?OUT
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK-UNDER
|
||
|
FSET? PRSO,FURNITURE \?ELS5
|
||
|
PRINTI "You twist your head to look under"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " but find nothing."
|
||
|
?ELS5: FSET? PRSO,PERSON \?ELS9
|
||
|
PRINTI "Nope. Nothing hiding under "
|
||
|
PRINTD PRSO
|
||
|
PRINTR "."
|
||
|
?ELS9: LOC PRSO
|
||
|
EQUAL? STACK,HERE,LOCAL-GLOBALS,GLOBAL-OBJECTS \?ELS13
|
||
|
PRINTR "There's nothing there but dust."
|
||
|
?ELS13: PRINTR "That's not a bit useful."
|
||
|
|
||
|
|
||
|
.FUNCT V-LOOK-UP
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
CALL TANDY?
|
||
|
ZERO? STACK /?ELS10
|
||
|
CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS10: PRINTR "What a pervert!"
|
||
|
?ELS5: EQUAL? PRSO,ROOMS /?ELS18
|
||
|
PRINTR "It has been a long week, hasn't it?"
|
||
|
?ELS18: GETP HERE,P?LINE
|
||
|
EQUAL? STACK,OUTSIDE-LINE-C \?ELS22
|
||
|
PRINT SKY-DESC
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS22: PRINTR "You can see the ceiling. It's not Union Station, but it's nicely painted."
|
||
|
|
||
|
|
||
|
.FUNCT V-MAKE
|
||
|
PRINTR """Eat, drink, and make merry, for tomorrow we shall die!"""
|
||
|
|
||
|
|
||
|
.FUNCT PRE-MOVE
|
||
|
CALL HELD?,PRSO
|
||
|
ZERO? STACK /FALSE
|
||
|
PRINTR "Juggling isn't one of your talents."
|
||
|
|
||
|
|
||
|
.FUNCT V-MOVE
|
||
|
FSET? PRSO,TAKEBIT \?ELS5
|
||
|
PRINTI "Moving"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " reveals nothing."
|
||
|
?ELS5: PRINTI "You can't move"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-OPEN,F,STR
|
||
|
FSET? PRSO,CONTBIT /?ELS5
|
||
|
FSET? PRSO,DOORBIT /?ELS5
|
||
|
FSET? PRSO,WINDOWBIT /?ELS5
|
||
|
PRINTI "You'd have to be more clever to do that to"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: FSET? PRSO,DOORBIT /?THN12
|
||
|
FSET? PRSO,WINDOWBIT /?THN12
|
||
|
GETP PRSO,P?CAPACITY
|
||
|
ZERO? STACK /?ELS11
|
||
|
?THN12: FSET? PRSO,OPENBIT \?ELS18
|
||
|
PRINTR "It's already open."
|
||
|
?ELS18: FSET? PRSO,LOCKED \?ELS22
|
||
|
PRINTR "You'll have to unlock it first."
|
||
|
?ELS22: FSET? PRSO,RMUNGBIT \?ELS26
|
||
|
PRINTR "You can't open it. The latch is broken."
|
||
|
?ELS26: FSET PRSO,OPENBIT
|
||
|
FSET? PRSO,DOORBIT /?THN36
|
||
|
FSET? PRSO,WINDOWBIT \?ELS35
|
||
|
?THN36: PRINTI "Okeh,"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is now open."
|
||
|
?ELS35: FIRST? PRSO \?THN42
|
||
|
FSET? PRSO,TRANSBIT \?ELS41
|
||
|
?THN42: PRINTR "Opened."
|
||
|
?ELS41: FIRST? PRSO >F \?ELS47
|
||
|
NEXT? F /?ELS47
|
||
|
GETP F,P?FDESC >STR
|
||
|
ZERO? STR /?ELS47
|
||
|
PRINTI "You open"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI "."
|
||
|
CRLF
|
||
|
PRINT STR
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS47: PRINTI "You open"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI " and see "
|
||
|
CALL PRINT-CONTENTS,PRSO
|
||
|
PRINTR "."
|
||
|
?ELS11: PRINTI "You can't open"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-PICK
|
||
|
PRINTR "You can't pick that."
|
||
|
|
||
|
|
||
|
.FUNCT V-PLAY
|
||
|
PRINTR "(Speaking of playing, you ought to try Infocom's other products.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-PUSH
|
||
|
CALL HACK-HACK,STR?193
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-PUT-UNDER
|
||
|
PRINTR "There's not enough room."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-PUT
|
||
|
EQUAL? PRSO,HANDCUFFS \?ELS5
|
||
|
CALL PERFORM,V?TIE-WITH,PRSI,HANDCUFFS
|
||
|
RTRUE
|
||
|
?ELS5: IN? PRSO,GLOBAL-OBJECTS /?THN8
|
||
|
FSET? PRSO,TAKEBIT /FALSE
|
||
|
?THN8: PRINTR "That would be a mistake."
|
||
|
|
||
|
|
||
|
.FUNCT V-PUT,?TMP1
|
||
|
FSET? PRSI,OPENBIT /?CND1
|
||
|
FSET? PRSI,DOORBIT /?THN6
|
||
|
FSET? PRSI,CONTBIT /?CND1
|
||
|
?THN6: FSET? PRSI,VEHBIT \?ELS3
|
||
|
JUMP ?CND1
|
||
|
?ELS3: EQUAL? PRSI,BACK-FOOTPRINTS,SIDE-FOOTPRINTS \?ELS9
|
||
|
PRINTR "You could mess up valuable evidence that way."
|
||
|
?ELS9: PRINTR "You can't do that."
|
||
|
?CND1: FSET? PRSI,OPENBIT /?ELS20
|
||
|
PRINTI "Too bad, but"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR " isn't open."
|
||
|
?ELS20: EQUAL? PRSI,PRSO \?ELS24
|
||
|
CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS24: IN? PRSO,PRSI \?ELS28
|
||
|
PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI " is already in"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS28: CALL WEIGHT,PRSI >?TMP1
|
||
|
CALL WEIGHT,PRSO
|
||
|
ADD ?TMP1,STACK >?TMP1
|
||
|
GETP PRSI,P?SIZE
|
||
|
SUB ?TMP1,STACK >?TMP1
|
||
|
GETP PRSI,P?CAPACITY
|
||
|
GRTR? ?TMP1,STACK \?ELS32
|
||
|
PRINTR "There's no room."
|
||
|
?ELS32: CALL HELD?,PRSO
|
||
|
ZERO? STACK \?ELS36
|
||
|
CALL ITAKE
|
||
|
ZERO? STACK /TRUE
|
||
|
?ELS36: MOVE PRSO,PRSI
|
||
|
FSET PRSO,TOUCHBIT
|
||
|
PRINTR "Okeh."
|
||
|
|
||
|
|
||
|
.FUNCT V-RAISE
|
||
|
CALL HACK-HACK,STR?194
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-RAPE
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
RANDOM 100
|
||
|
GRTR? 75,STACK \?ELS10
|
||
|
PRINTR "Section 29A of the United States Criminal Code, whose provisions come to your unhealthy mind, forbids it."
|
||
|
?ELS10: CALL GONE-CRAZY
|
||
|
RSTACK
|
||
|
?ELS5: PRINTR "What a (ahem!) strange idea!"
|
||
|
|
||
|
|
||
|
.FUNCT PRE-READ,VAL
|
||
|
ZERO? LIT \?ELS5
|
||
|
PRINTR "It's impossible to read in the dark."
|
||
|
?ELS5: IN? PRSO,GLOBAL-OBJECTS \?ELS9
|
||
|
CALL NOT-HERE,PRSO
|
||
|
RSTACK
|
||
|
?ELS9: ZERO? PRSI /?ELS11
|
||
|
FSET? PRSI,TRANSBIT /?ELS11
|
||
|
EQUAL? PRSI,INTNUM /?ELS11
|
||
|
PRINTI "You must have a swell method of looking through"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS11: EQUAL? P-ADVERB,W?CAREFULLY \FALSE
|
||
|
CALL INT-WAIT,3 >VAL
|
||
|
ZERO? VAL \?ELS22
|
||
|
PRINTI "You never got to finish reading"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS22: EQUAL? VAL,M-FATAL /TRUE
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT V-READ
|
||
|
FSET? PRSO,READBIT /?ELS5
|
||
|
PRINTI "You can't read"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: GETP PRSO,P?TEXT
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-REVIVE
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTD PRSO
|
||
|
PRINTR " doesn't need reviving."
|
||
|
?ELS5: CALL HACK-HACK,STR?195
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-RING
|
||
|
PRINTR """DING-DONG!"""
|
||
|
|
||
|
|
||
|
.FUNCT V-RUB
|
||
|
CALL HACK-HACK,STR?196
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT PRE-RUB-OVER
|
||
|
CALL PERFORM,V?RUB,PRSI,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-RUB-OVER
|
||
|
PRINTR "You really can't expect that to help."
|
||
|
|
||
|
|
||
|
.FUNCT V-SAY,V
|
||
|
SET 'QUOTE-FLAG,0
|
||
|
SET 'P-CONT,0
|
||
|
PRINTR "To talk to someone, try 'SAY TO someone ""something""'."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-SEARCH
|
||
|
CALL ROOM-CHECK
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT V-SEARCH
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTD PRSO
|
||
|
PRINTR " grudgingly allows you to search. You find nothing whatsoever of interest."
|
||
|
?ELS5: FSET? PRSO,CONTBIT \?ELS9
|
||
|
FSET? PRSO,OPENBIT /?ELS9
|
||
|
PRINTR "You'll have to open it first."
|
||
|
?ELS9: PRINTR "You find nothing unusual."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-SEARCH-OBJECT-FOR,OBJ
|
||
|
CALL ROOM-CHECK
|
||
|
ZERO? STACK \TRUE
|
||
|
IN? PRSI,PLAYER \?CND1
|
||
|
GETP PRSI,P?GENERIC
|
||
|
ZERO? STACK /?CND1
|
||
|
GETP PRSI,P?GENERIC
|
||
|
CALL STACK,PRSI >OBJ
|
||
|
ZERO? OBJ /?CND1
|
||
|
SET 'PRSI,OBJ
|
||
|
?CND1: EQUAL? PRSO,GLOBAL-HERE,GLOBAL-ROOM \FALSE
|
||
|
SET 'PRSO,HERE
|
||
|
RFALSE
|
||
|
|
||
|
|
||
|
.FUNCT V-SEARCH-OBJECT-FOR
|
||
|
EQUAL? PRSI,MONEY \?ELS5
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
CALL SAID-TO,PRSO
|
||
|
PRINTR "You can find only pocket change. ""I could have told you that."""
|
||
|
?ELS5: FSET? PRSO,PERSON \?ELS11
|
||
|
PRINTD PRSO
|
||
|
PRINTI " resignedly allows you to perform the search."
|
||
|
CRLF
|
||
|
IN? PRSI,PRSO \?ELS18
|
||
|
PRINTI "Indeed, "
|
||
|
PRINTD PRSO
|
||
|
PRINTI " has"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS18: IN? PRSI,GLOBAL-OBJECTS \?ELS22
|
||
|
PRINTD PRSO
|
||
|
PRINTI " doesn't have "
|
||
|
FSET? PRSI,PERSON /?CND25
|
||
|
EQUAL? PRSI,GLOBAL-DUFFY \?ELS27
|
||
|
JUMP ?CND25
|
||
|
?ELS27: FSET? PRSI,AN \?ELS31
|
||
|
PRINTI "an "
|
||
|
JUMP ?CND25
|
||
|
?ELS31: PRINTI "a "
|
||
|
?CND25: PRINTD PRSI
|
||
|
PRINTR "."
|
||
|
?ELS22: PRINTD PRSO
|
||
|
PRINTI " doesn't have"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS11: FSET? PRSO,CONTBIT \?ELS45
|
||
|
FSET? PRSO,OPENBIT /?ELS45
|
||
|
PRINTI "You'll have to open"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " first."
|
||
|
?ELS45: IN? PRSI,PRSO \?ELS51
|
||
|
PRINTI "How observant you are! There "
|
||
|
FSET? PRSI,FEMALE \?ELS58
|
||
|
PUSH STR?177
|
||
|
JUMP ?CND54
|
||
|
?ELS58: FSET? PRSI,PERSON \?ELS60
|
||
|
PUSH STR?178
|
||
|
JUMP ?CND54
|
||
|
?ELS60: PUSH STR?179
|
||
|
?CND54: PRINT STACK
|
||
|
PRINTR " is!"
|
||
|
?ELS51: PRINTI "You don't find"
|
||
|
CALL THE-PRSI-PRINT
|
||
|
PRINTR " there."
|
||
|
|
||
|
|
||
|
.FUNCT V-SHOOT
|
||
|
CALL FIND-FLAG,WINNER,WEAPONBIT
|
||
|
ZERO? STACK \?ELS5
|
||
|
PRINTR "You don't have anything to shoot with."
|
||
|
?ELS5: CALL IKILL,STR?197
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT PRE-SSHOOT
|
||
|
CALL PERFORM,V?SHOOT,PRSI,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-SSHOOT
|
||
|
PRINTR "[Foo!! This is a bug!!]"
|
||
|
|
||
|
|
||
|
.FUNCT V-SHOW
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
PRINTR "Do you often talk to yourself?"
|
||
|
?ELS5: FSET? PRSO,PERSON /?ELS9
|
||
|
PRINTI "Don't wait for"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " to applaud."
|
||
|
?ELS9: PRINTD PRSO
|
||
|
CALL PICK-ONE,WHO-CARES
|
||
|
PRINT STACK
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-SSHOW
|
||
|
SET 'P-MERGED,1
|
||
|
CALL PERFORM,V?SHOW,PRSI,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-SSHOW
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-SIT
|
||
|
FSET? PRSO,FURNITURE \?ELS5
|
||
|
FSET? PRSO,VEHBIT \?ELS5
|
||
|
MOVE PLAYER,PRSO
|
||
|
SET 'PLAYER-HIDING,0
|
||
|
PRINTI "You are now sitting on"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: PRINTR "That isn't something to sit on!"
|
||
|
|
||
|
|
||
|
.FUNCT V-SLAP
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTD PRSO
|
||
|
PRINTR " slaps you right back. Wow, is your face red!"
|
||
|
?ELS5: PRINTR "You should see Phong. He breaks boards with the edge of his hand!"
|
||
|
|
||
|
|
||
|
.FUNCT V-SMELL
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
FSET? PRSO,FEMALE \?ELS8
|
||
|
PRINTI "She"
|
||
|
JUMP ?CND6
|
||
|
?ELS8: PRINTI "He"
|
||
|
?CND6: PRINTI " smells just like "
|
||
|
PRINTD PRSO
|
||
|
PRINTR "."
|
||
|
?ELS5: PRINTI "It"
|
||
|
PRINTI " smells just like "
|
||
|
FSET? PRSO,AN \?ELS25
|
||
|
PUSH STR?155
|
||
|
JUMP ?CND21
|
||
|
?ELS25: PUSH STR?156
|
||
|
?CND21: PRINT STACK
|
||
|
PRINTD PRSO
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-SMOKE
|
||
|
PRINTI "You can't burn"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-TAKE
|
||
|
EQUAL? PRSO,GLOBAL-WARRANT,HANDCUFFS,GLOBAL-CAN-OF-WORMS /FALSE
|
||
|
EQUAL? PRSO,CIGARETTE,DRINK,HINT /FALSE
|
||
|
EQUAL? PRSO,GLOBAL-FINGERPRINTS,BLACK-WIRE,WHITE-WIRE /FALSE
|
||
|
IN? PRSO,GLOBAL-OBJECTS \?ELS9
|
||
|
CALL NOT-HERE,PRSO
|
||
|
RSTACK
|
||
|
?ELS9: IN? PRSO,WINNER \?ELS11
|
||
|
PRINTR "You already have it."
|
||
|
?ELS11: LOC PRSO
|
||
|
FSET? STACK,CONTBIT \?ELS15
|
||
|
LOC PRSO
|
||
|
FSET? STACK,OPENBIT /?ELS15
|
||
|
PRINTR "You can't reach that."
|
||
|
?ELS15: ZERO? PRSI /?ELS21
|
||
|
EQUAL? PRSI,LINDER-BACK-DOOR,MONICA-BACK-DOOR,OFFICE-BACK-DOOR /FALSE
|
||
|
LOC PRSO
|
||
|
EQUAL? PRSI,STACK /?ELS29
|
||
|
FSET? PRSO,PERSON /?ELS34
|
||
|
FSET? PRSI,PERSON /?ELS39
|
||
|
PRINTR "It's not in that!"
|
||
|
?ELS39: FSET? PRSI,FEMALE \?ELS43
|
||
|
PRINTR "She doesn't have it!"
|
||
|
?ELS43: PRINTR "He doesn't have it!"
|
||
|
?ELS34: FSET? PRSO,FEMALE \?ELS51
|
||
|
FSET? PRSI,PERSON /?ELS56
|
||
|
PRINTR "She's not in that!"
|
||
|
?ELS56: FSET? PRSI,FEMALE \?ELS60
|
||
|
PRINTR "She doesn't have her!"
|
||
|
?ELS60: PRINTR "He doesn't have her!"
|
||
|
?ELS51: FSET? PRSI,PERSON /?ELS73
|
||
|
PRINTR "He's not in that!"
|
||
|
?ELS73: FSET? PRSI,FEMALE \?ELS77
|
||
|
PRINTR "She doesn't have him!"
|
||
|
?ELS77: PRINTR "He doesn't have him!"
|
||
|
?ELS29: SET 'PRSI,0
|
||
|
RFALSE
|
||
|
?ELS21: LOC WINNER
|
||
|
EQUAL? PRSO,STACK \FALSE
|
||
|
PRINTR "You're in it, nitwit!"
|
||
|
|
||
|
|
||
|
.FUNCT V-TAKE
|
||
|
CALL ITAKE
|
||
|
EQUAL? STACK,1 \FALSE
|
||
|
PRINTI "You are now carrying"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-TAKEOUT
|
||
|
EQUAL? PRSI,LINDER-BACK-DOOR,MONICA-BACK-DOOR,OFFICE-BACK-DOOR \?ELS5
|
||
|
EQUAL? PRSO,CORPSE /FALSE
|
||
|
FSET? PRSO,PERSON /FALSE
|
||
|
PRINTR "(If you want to go outside, simply type ""OUT."")"
|
||
|
?ELS5: PRINTR "(Sorry, but English is my second language. Please rephrase that.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-TAKEOUT
|
||
|
PRINTR "[Foo!! This is a bug!!]"
|
||
|
|
||
|
|
||
|
.FUNCT V-DISEMBARK
|
||
|
LOC PRSO
|
||
|
EQUAL? STACK,WINNER \?ELS5
|
||
|
PRINTI "You don't need to take out"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " to use it."
|
||
|
?ELS5: LOC WINNER
|
||
|
EQUAL? STACK,PRSO /?ELS9
|
||
|
PRINTI "You're not in that!"
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
?ELS9: PRINTI "You are on your own feet again."
|
||
|
CRLF
|
||
|
MOVE WINNER,HERE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-HOLD-UP
|
||
|
PRINTR "That doesn't seem to help at all."
|
||
|
|
||
|
|
||
|
.FUNCT V-TELL
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
PRINTI "Talking to yourself is a sign of impending looniness."
|
||
|
CRLF
|
||
|
SET 'QUOTE-FLAG,0
|
||
|
SET 'P-CONT,0
|
||
|
RETURN 2
|
||
|
?ELS5: FSET? PRSO,PERSON /?THN12
|
||
|
ZERO? MET-DUFFY? /?ELS11
|
||
|
EQUAL? PRSO,GLOBAL-DUFFY \?ELS11
|
||
|
?THN12: ZERO? P-CONT /?ELS18
|
||
|
SET 'WINNER,PRSO
|
||
|
JUMP ?CND16
|
||
|
?ELS18: FSET PRSO,TOUCHBIT
|
||
|
PRINTD PRSO
|
||
|
PRINTI " is listening."
|
||
|
CRLF
|
||
|
?CND16: SET 'QCONTEXT,PRSO
|
||
|
SET 'QCONTEXT-ROOM,HERE
|
||
|
RTRUE
|
||
|
?ELS11: PRINTI "You can't talk to"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTI "!"
|
||
|
CRLF
|
||
|
SET 'QUOTE-FLAG,0
|
||
|
SET 'P-CONT,0
|
||
|
RETURN 2
|
||
|
|
||
|
|
||
|
.FUNCT PRE-TELL-ME,P
|
||
|
ZERO? QCONTEXT /?ELS5
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS5
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK \?ELS5
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSI
|
||
|
RTRUE
|
||
|
?ELS5: EQUAL? PRSO,PLAYER \FALSE
|
||
|
CALL FIND-FLAG,HERE,PERSON,WINNER >P
|
||
|
ZERO? P /FALSE
|
||
|
CALL PERFORM,V?ASK-ABOUT,P,PRSI
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-TELL-ME
|
||
|
EQUAL? PRSO,PLAYER \?ELS5
|
||
|
PRINTR "You aren't talking to anyone!"
|
||
|
?ELS5: PRINTD PRSO
|
||
|
CALL PICK-ONE,WHO-CARES
|
||
|
PRINT STACK
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-TELL-ME-ABOUT,P
|
||
|
ZERO? QCONTEXT /?ELS5
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS5
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK \?ELS5
|
||
|
CALL PERFORM,V?ASK-ABOUT,QCONTEXT,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: CALL FIND-FLAG,HERE,PERSON,WINNER >P
|
||
|
ZERO? P /FALSE
|
||
|
CALL PERFORM,V?ASK-ABOUT,P,PRSO
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-TELL-ME-ABOUT
|
||
|
PRINTR "You aren't talking to anyone!"
|
||
|
|
||
|
|
||
|
.FUNCT V-THANKS,P
|
||
|
ZERO? PRSO /?ELS9
|
||
|
FSET? PRSO,PERSON /?THN6
|
||
|
?ELS9: ZERO? QCONTEXT /?ELS11
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS11
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK /?THN6
|
||
|
?ELS11: CALL FIND-FLAG,HERE,PERSON,WINNER >P
|
||
|
ZERO? P /?ELS5
|
||
|
?THN6: ZERO? PRSO /?ORP17
|
||
|
PUSH PRSO
|
||
|
JUMP ?THN14
|
||
|
?ORP17: ZERO? QCONTEXT /?ORP18
|
||
|
PUSH QCONTEXT
|
||
|
JUMP ?THN14
|
||
|
?ORP18: PUSH P
|
||
|
?THN14: PRINTD STACK
|
||
|
PRINTR " acknowledges your thanks."
|
||
|
?ELS5: PRINTR "You're more than welcome."
|
||
|
|
||
|
|
||
|
.FUNCT V-THROW
|
||
|
CALL IDROP
|
||
|
ZERO? STACK /FALSE
|
||
|
PRINTR "Thrown."
|
||
|
|
||
|
|
||
|
.FUNCT V-THROW-AT
|
||
|
CALL IDROP
|
||
|
ZERO? STACK /TRUE
|
||
|
FSET? PRSI,PERSON \?ELS7
|
||
|
PRINTD PRSI
|
||
|
PRINTI ", puzzled by your unusual methods, ducks as"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " flies by."
|
||
|
?ELS7: PRINTR "Maybe you aren't feeling well."
|
||
|
|
||
|
|
||
|
.FUNCT V-THROW-THROUGH
|
||
|
FSET? PRSO,PERSON /?ELS5
|
||
|
PRINTR "Let's not resort to violence, please."
|
||
|
?ELS5: CALL V-THROW
|
||
|
RSTACK
|
||
|
|
||
|
|
||
|
.FUNCT PRE-TIE-TO
|
||
|
FSET? PRSO,PERSON \?THN6
|
||
|
FSET? PRSI,FURNITURE /FALSE
|
||
|
?THN6: PRINTR "That won't do any good."
|
||
|
|
||
|
|
||
|
.FUNCT V-TIE-TO
|
||
|
PRINTI "You can't tie"
|
||
|
CALL PRSO-PRINT
|
||
|
PRINTR " to that."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-TIE-WITH
|
||
|
FSET? PRSO,PERSON \?THN6
|
||
|
FSET? PRSI,TOOLBIT /FALSE
|
||
|
?THN6: PRINTR "That won't do any good."
|
||
|
|
||
|
|
||
|
.FUNCT V-TIE-WITH
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTR """If you don't formally arrest me first, I'll sue!"""
|
||
|
?ELS5: PRINTI "You can't "
|
||
|
EQUAL? PRSI,HANDCUFFS \?ELS16
|
||
|
PUSH STR?112
|
||
|
JUMP ?CND12
|
||
|
?ELS16: PUSH STR?113
|
||
|
?CND12: PRINT STACK
|
||
|
CALL PRSO-PRINT
|
||
|
PRINTR " with that."
|
||
|
|
||
|
|
||
|
.FUNCT V-TURN
|
||
|
PRINTR "This has no effect."
|
||
|
|
||
|
|
||
|
.FUNCT V-LAMP-ON
|
||
|
EQUAL? PRSO,GLOBAL-WATER,SINK \?ELS5
|
||
|
PRINTR "You turn the handle and lo! The water starts to run. Impressed with yourself, you turn the handle again, and the water stops running! You try it again, just to make sure. Bravo!"
|
||
|
?ELS5: FSET? PRSO,PERSON \?ELS9
|
||
|
CALL PICK-ONE,YUKS
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS9: PRINTI "You can't turn on"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-LAMP-OFF
|
||
|
FSET? PRSO,PERSON \?ELS5
|
||
|
PRINTR "Your vulgar ways would turn anyone off."
|
||
|
?ELS5: PRINTI "You can't turn off"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-TURN-UP
|
||
|
PRINTR "That's silly."
|
||
|
|
||
|
|
||
|
.FUNCT V-TURN-DOWN
|
||
|
PRINTR "That's silly."
|
||
|
|
||
|
|
||
|
.FUNCT PRE-UNLOCK
|
||
|
EQUAL? PRSO,CLOCK \?ELS5
|
||
|
IN? CLOCK-KEY,WINNER /FALSE
|
||
|
PRINTR "You don't have the right key."
|
||
|
?ELS5: ZERO? LINDER-FOLLOWS-YOU /?ELS16
|
||
|
PRINTR "Linder says, ""Don't leave yet. We're just getting started."""
|
||
|
?ELS16: CALL OUTSIDE?,HERE
|
||
|
ZERO? STACK /FALSE
|
||
|
IN? PHONG-KEYS,WINNER /FALSE
|
||
|
PRINTR "You don't have the right key."
|
||
|
|
||
|
|
||
|
.FUNCT V-UNLOCK
|
||
|
FSET? PRSO,CONTBIT /?ELS5
|
||
|
FSET? PRSO,DOORBIT /?ELS5
|
||
|
PRINTI "You'd have to be more clever to do that to"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
?ELS5: FSET? PRSO,DOORBIT /?THN12
|
||
|
GETP PRSO,P?CAPACITY
|
||
|
ZERO? STACK /?ELS11
|
||
|
?THN12: FSET? PRSO,OPENBIT \?ELS18
|
||
|
PRINTR "You'll have to close it first."
|
||
|
?ELS18: FSET? PRSO,LOCKED /?ELS22
|
||
|
PRINTR "It's already unlocked."
|
||
|
?ELS22: FSET? PRSO,RMUNGBIT \?ELS26
|
||
|
PRINTR "You can't unlock it. The lock is broken."
|
||
|
?ELS26: FCLEAR PRSO,LOCKED
|
||
|
PRINTI "Okeh,"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " is now unlocked."
|
||
|
?ELS11: PRINTI "You can't unlock"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR "."
|
||
|
|
||
|
|
||
|
.FUNCT V-UNTIE
|
||
|
PRINTR "You can't tie it, so you can't untie it!"
|
||
|
|
||
|
|
||
|
.FUNCT V-USE
|
||
|
PRINTR "You should be more specific about what you want to do."
|
||
|
|
||
|
|
||
|
.FUNCT V-WAIT,NUM=10,WHO=0,INT=0,VAL,HR,RESULT=1
|
||
|
SET 'HR,HERE
|
||
|
SET 'WHO-WAIT,0
|
||
|
ZERO? INT \?CND1
|
||
|
PRINTI "Time passes..."
|
||
|
CRLF
|
||
|
?CND1:
|
||
|
?PRG6: DLESS? 'NUM,0 \?ELS10
|
||
|
JUMP ?REP7
|
||
|
?ELS10: CALL CLOCKER >VAL
|
||
|
ZERO? VAL /?ELS12
|
||
|
EQUAL? VAL,M-FATAL /?THN16
|
||
|
EQUAL? HR,HERE /?ELS15
|
||
|
?THN16: SET 'RESULT,M-FATAL
|
||
|
JUMP ?REP7
|
||
|
?ELS15: EQUAL? WHO,GLOBAL-DUFFY \?ELS19
|
||
|
ZERO? MET-DUFFY? /?ELS19
|
||
|
ZERO? FINGERPRINT-OBJ \?ELS19
|
||
|
ZERO? DUFFY-AT-CORONER \?ELS19
|
||
|
JUMP ?REP7
|
||
|
?ELS19: ZERO? WHO /?ELS23
|
||
|
IN? WHO,HERE \?ELS23
|
||
|
FSET WHO,TOUCHBIT
|
||
|
PRINTD WHO
|
||
|
PRINTI ", for whom you are waiting, has arrived."
|
||
|
CRLF
|
||
|
JUMP ?REP7
|
||
|
?ELS23: INC 'WHO-WAIT
|
||
|
GETB 0,1
|
||
|
BAND STACK,16
|
||
|
ZERO? STACK /?CND30
|
||
|
PRINTI "("
|
||
|
CALL TIME-PRINT,PRESENT-TIME
|
||
|
PRINTI ") "
|
||
|
?CND30: ZERO? INT /?ELS39
|
||
|
PRINTI "Do you want to continue what you were doing?"
|
||
|
JUMP ?CND37
|
||
|
?ELS39: PRINTI "Do you want to keep waiting?"
|
||
|
?CND37: CALL YES?
|
||
|
ZERO? STACK \?ELS49
|
||
|
JUMP ?REP7
|
||
|
?ELS49: USL
|
||
|
JUMP ?PRG6
|
||
|
?ELS12: EQUAL? WHO,GLOBAL-DUFFY \?ELS53
|
||
|
ZERO? FINGERPRINT-OBJ \?ELS53
|
||
|
ZERO? DUFFY-AT-CORONER \?ELS53
|
||
|
JUMP ?REP7
|
||
|
?ELS53: ZERO? WHO /?ELS57
|
||
|
IN? WHO,HERE \?ELS57
|
||
|
PRINTD WHO
|
||
|
PRINTI ", for whom you are waiting, has arrived."
|
||
|
CRLF
|
||
|
JUMP ?REP7
|
||
|
?ELS57: ZERO? WHO /?ELS63
|
||
|
IGRTR? 'WHO-WAIT,30 \?ELS63
|
||
|
PRINTD WHO
|
||
|
PRINTI " still hasn't arrived. Do you want to keep waiting?"
|
||
|
CALL YES?
|
||
|
ZERO? STACK \?CND68
|
||
|
JUMP ?REP7
|
||
|
?CND68: SET 'WHO-WAIT,0
|
||
|
USL
|
||
|
JUMP ?PRG6
|
||
|
?ELS63: USL
|
||
|
JUMP ?PRG6
|
||
|
?REP7: SET 'CLOCK-WAIT,1
|
||
|
ZERO? INT \?CND73
|
||
|
CALL V-TIME
|
||
|
RETURN RESULT
|
||
|
?CND73: RETURN RESULT
|
||
|
|
||
|
|
||
|
.FUNCT INT-WAIT,N,TIM,REQ,VAL
|
||
|
SET 'TIM,PRESENT-TIME
|
||
|
MUL N,2
|
||
|
RANDOM STACK >REQ
|
||
|
CALL V-WAIT,REQ,0,1
|
||
|
EQUAL? M-FATAL,STACK \?ELS5
|
||
|
RETURN 2
|
||
|
?ELS5: SUB PRESENT-TIME,TIM
|
||
|
LESS? STACK,REQ /FALSE
|
||
|
RTRUE
|
||
|
|
||
|
|
||
|
.FUNCT V-WAIT-FOR,WHO
|
||
|
EQUAL? PRSO,INTNUM \?ELS5
|
||
|
GRTR? P-NUMBER,PRESENT-TIME \?ELS10
|
||
|
CALL V-WAIT-UNTIL
|
||
|
RTRUE
|
||
|
?ELS10: GRTR? P-NUMBER,180 \?ELS12
|
||
|
PRINTR "That's too long to wait."
|
||
|
?ELS12: CALL V-WAIT,P-NUMBER
|
||
|
RSTACK
|
||
|
?ELS5: EQUAL? PRSO,GLOBAL-HERE \?ELS18
|
||
|
CALL V-WAIT
|
||
|
RTRUE
|
||
|
?ELS18: EQUAL? PRSO,MIDNIGHT \?ELS20
|
||
|
CALL V-WAIT-UNTIL
|
||
|
RTRUE
|
||
|
?ELS20: FSET? PRSO,PERSON \?ELS22
|
||
|
GETP PRSO,P?CHARACTER
|
||
|
GET CHARACTER-TABLE,STACK >WHO
|
||
|
IN? WHO,HERE \?ELS27
|
||
|
PRINTR "That person's already here!"
|
||
|
?ELS27: CALL V-WAIT,10000,WHO
|
||
|
RSTACK
|
||
|
?ELS22: EQUAL? PRSO,PLAYER \?ELS33
|
||
|
PRINTR "You're already here!"
|
||
|
?ELS33: PRINTR "Not a good idea. You might wait all night."
|
||
|
|
||
|
|
||
|
.FUNCT V-WAIT-UNTIL
|
||
|
EQUAL? PRSO,MIDNIGHT \?ELS3
|
||
|
SET 'P-NUMBER,720
|
||
|
SET 'PRSO,INTNUM
|
||
|
JUMP ?CND1
|
||
|
?ELS3: LESS? P-NUMBER,8 \?ELS5
|
||
|
ADD P-NUMBER,12
|
||
|
MUL STACK,60 >P-NUMBER
|
||
|
JUMP ?CND1
|
||
|
?ELS5: LESS? P-NUMBER,13 \?CND1
|
||
|
MUL P-NUMBER,60 >P-NUMBER
|
||
|
?CND1: EQUAL? PRSO,INTNUM \?ELS12
|
||
|
GRTR? P-NUMBER,PRESENT-TIME \?ELS17
|
||
|
SUB P-NUMBER,PRESENT-TIME
|
||
|
CALL V-WAIT,STACK
|
||
|
RSTACK
|
||
|
?ELS17: PRINTR "You are clearly ahead of your time."
|
||
|
?ELS12: PRINTR "It has been a long week, hasn't it?"
|
||
|
|
||
|
|
||
|
.FUNCT V-ALARM
|
||
|
EQUAL? PRSO,CAT \?ELS5
|
||
|
PRINTR "The cat yawns, licks its lips, and settles down again."
|
||
|
?ELS5: EQUAL? PRSO,MONICA \?ELS9
|
||
|
PRINTR "You wouldn't like that."
|
||
|
?ELS9: FSET? PRSO,PERSON \?ELS13
|
||
|
PRINTR "He's wide awake, or haven't you noticed?"
|
||
|
?ELS13: PRINTI "Too bad, but"
|
||
|
CALL THE-PRSO-PRINT
|
||
|
PRINTR " isn't asleep."
|
||
|
|
||
|
|
||
|
.FUNCT V-WALK,PT,PTS,STR,OBJ,RM
|
||
|
EQUAL? PRSO,GLOBAL-CALL \?ELS5
|
||
|
CALL PERFORM,V?TURN,PRSO
|
||
|
RTRUE
|
||
|
?ELS5: ZERO? PRSO \?ELS7
|
||
|
PRINTR "You can't go that way."
|
||
|
?ELS7: GETPT HERE,PRSO >PT
|
||
|
ZERO? PT /?ELS11
|
||
|
PTSIZE PT >PTS
|
||
|
EQUAL? PTS,UEXIT \?ELS16
|
||
|
GETB PT,REXIT >RM
|
||
|
CALL GOTO,RM
|
||
|
RSTACK
|
||
|
?ELS16: EQUAL? PTS,NEXIT \?ELS18
|
||
|
GET PT,NEXITSTR
|
||
|
PRINT STACK
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
?ELS18: EQUAL? PTS,FEXIT \?ELS24
|
||
|
GET PT,FEXITFCN
|
||
|
CALL STACK >RM
|
||
|
ZERO? RM /?ELS29
|
||
|
CALL GOTO,RM
|
||
|
RSTACK
|
||
|
?ELS29: RETURN 2
|
||
|
?ELS24: EQUAL? PTS,CEXIT \?ELS35
|
||
|
GETB PT,CEXITFLAG
|
||
|
VALUE STACK
|
||
|
ZERO? STACK /?ELS40
|
||
|
GETB PT,REXIT
|
||
|
CALL GOTO,STACK
|
||
|
RSTACK
|
||
|
?ELS40: GET PT,CEXITSTR >STR
|
||
|
ZERO? STR /?ELS42
|
||
|
PRINT STR
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
?ELS42: PRINTI "You can't go that way."
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
?ELS35: EQUAL? PTS,DEXIT \FALSE
|
||
|
GETB PT,DEXITOBJ >OBJ
|
||
|
FSET? OBJ,OPENBIT \?ELS59
|
||
|
GETB PT,REXIT
|
||
|
CALL GOTO,STACK
|
||
|
RSTACK
|
||
|
?ELS59: FSET? OBJ,INVISIBLE \?ELS61
|
||
|
ZERO? DEBUG /?THN64
|
||
|
PRINTI "[invisible] "
|
||
|
?THN64: PRINTR "You can't go that way."
|
||
|
?ELS61: GET PT,DEXITSTR >STR
|
||
|
ZERO? STR /?ELS71
|
||
|
PRINT STR
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
?ELS71: PRINTI "Too bad, but"
|
||
|
CALL THE?,OBJ
|
||
|
PRINTI " "
|
||
|
PRINTD OBJ
|
||
|
PRINTI " is closed."
|
||
|
CRLF
|
||
|
SET 'P-IT-LOC,HERE
|
||
|
SET 'P-IT-OBJECT,OBJ
|
||
|
RETURN 2
|
||
|
?ELS11: EQUAL? PRSO,P?IN \?ELS85
|
||
|
PRINTI "(What compass direction do you want to go in?)"
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
?ELS85: PRINTI "You can't go that way."
|
||
|
CRLF
|
||
|
RETURN 2
|
||
|
|
||
|
|
||
|
.FUNCT V-WALK-AROUND
|
||
|
PRINTR "(Use compass directions to move around here.)"
|
||
|
|
||
|
|
||
|
.FUNCT V-WALK-TO
|
||
|
CALL META-LOC,PRSO
|
||
|
EQUAL? STACK,HERE,LOCAL-GLOBALS /?THN6
|
||
|
FSET? PRSO,DOORBIT /?THN6
|
||
|
FSET? PRSO,WINDOWBIT \?ELS5
|
||
|
?THN6: PRINTI "You don't need to walk around within a "
|
||
|
CALL OUTSIDE?,HERE
|
||
|
ZERO? STACK /?ELS14
|
||
|
PUSH STR?198
|
||
|
JUMP ?CND10
|
||
|
?ELS14: GETP HERE,P?CORRIDOR
|
||
|
BAND 16,STACK
|
||
|
ZERO? STACK /?ELS16
|
||
|
PUSH STR?199
|
||
|
JUMP ?CND10
|
||
|
?ELS16: PUSH STR?200
|
||
|
?CND10: PRINT STACK
|
||
|
CRLF
|
||
|
RTRUE
|
||
|
?ELS5: CALL META-LOC,PRSO
|
||
|
IN? STACK,ROOMS \?ELS20
|
||
|
CALL META-LOC,PRSO >PRSO
|
||
|
CALL V-THROUGH
|
||
|
RSTACK
|
||
|
?ELS20: PRINTR "You can't go from here to there, at least not directly."
|
||
|
|
||
|
|
||
|
.FUNCT V-RUN-OVER
|
||
|
PRINTR "That doesn't make much sense."
|
||
|
|
||
|
|
||
|
.FUNCT V-WHAT
|
||
|
ZERO? QCONTEXT /?ELS9
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS9
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK \?ELS9
|
||
|
FSET? QCONTEXT,PERSON /?THN6
|
||
|
?ELS9: CALL FIND-FLAG,HERE,PERSON,WINNER
|
||
|
ZERO? STACK /?ELS5
|
||
|
?THN6: PRINTR """Isn't it obvious?"""
|
||
|
?ELS5: FSET? PRSO,PERSON \?ELS13
|
||
|
PRINTR "Try asking that person."
|
||
|
?ELS13: PRINTR "Are you talking to yourself again?"
|
||
|
|
||
|
|
||
|
.FUNCT V-YN
|
||
|
ZERO? QCONTEXT /?ELS5
|
||
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS5
|
||
|
CALL META-LOC,QCONTEXT
|
||
|
EQUAL? HERE,STACK \?ELS5
|
||
|
PRINTD QCONTEXT
|
||
|
PRINTR " ignores you completely."
|
||
|
?ELS5: PRINTR "That deserves to be ignored."
|
||
|
|
||
|
.ENDI
|