witness/verbs.zap

2962 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,FALSE-VALUE
SET 'SUPER-BRIEF,FALSE-VALUE
SET 'P-SPACE,1
PRINTI "(O.K., you will get "
PRINTI "brief"
PRINTR " descriptions.)"
.FUNCT V-SUPER-BRIEF
SET 'SUPER-BRIEF,TRUE-VALUE
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,TRUE-VALUE
SET 'SUPER-BRIEF,FALSE-VALUE
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,TRUE-VALUE
JUMP ?CND1
?ELS3: EQUAL? HR,12 \?CND1
SET 'AM,TRUE-VALUE
?CND1: PRINTN HR
PRINTI ":"
MOD NUM,60 >HR
LESS? HR,10 \?CND8
PRINTI "0"
?CND8: PRINTN HR
PRINTI " "
ZERO? AM /?ELS21
PUSH STR?148
JUMP ?CND17
?ELS21: PUSH STR?149
?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?150
JUMP ?CND33
?ELS37: PUSH STR?151
?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?150
JUMP ?CND53
?ELS57: PUSH STR?151
?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?,TRUE-VALUE
SET 'F?,TRUE-VALUE
?CND5: IN? HERE,ROOMS \?CND8
ZERO? P-PROMPT /?ELS13
PRINTI "You are now "
FSET? HERE,ON-NOT-IN \?ELS21
PUSH STR?152
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,TRUE-VALUE
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,FALSE-VALUE
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,FALSE-VALUE
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,FALSE-VALUE
?CND4: SET '1ST?,TRUE-VALUE
LOC OBJ
EQUAL? WINNER,OBJ,STACK \?ELS13
SET 'INV?,TRUE-VALUE
JUMP ?CND11
?ELS13:
?PRG16: ZERO? Y \?ELS20
JUMP ?CND11
?ELS20: EQUAL? Y,AV \?ELS22
SET 'PV?,TRUE-VALUE
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?,FALSE-VALUE
SET 'LEVEL,0
ZERO? STR /?CND31
PRINT STR
CRLF
SET 'STR,FALSE-VALUE
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?,FALSE-VALUE
?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?,FALSE-VALUE
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?150
JUMP ?CND30
?ELS34: PUSH STR?151
?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,FALSE-VALUE
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,FALSE-VALUE
SET 'QUOTE-FLAG,FALSE-VALUE
RTRUE
.FUNCT V-REPLY
SET 'P-CONT,FALSE-VALUE
SET 'QUOTE-FLAG,FALSE-VALUE
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?172
JUMP ?CND44
?ELS48: EQUAL? PRSO,GLOBAL-DUFFY /?THN51
FSET? PRSO,PERSON \?ELS50
?THN51: PUSH STR?173
JUMP ?CND44
?ELS50: PUSH STR?174
?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?150
JUMP ?CND12
?ELS16: PUSH STR?151
?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?175
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,TRUE-VALUE
?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,FALSE-VALUE
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,TRUE-VALUE
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?180
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?150
JUMP ?CND33
?ELS37: PUSH STR?151
?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,TXT
IN? PRSO,GLOBAL-OBJECTS \?ELS5
CALL NOT-HERE,PRSO
RTRUE
?ELS5: GETP PRSO,P?TEXT >TXT
ZERO? TXT /?ELS7
PRINT TXT
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?150
JUMP ?CND12
?ELS16: PUSH STR?151
?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?150
JUMP ?CND23
?ELS27: PUSH STR?151
?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,FALSE-VALUE
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?183
JUMP ?CND32
?ELS36: PUSH STR?184
?CND32: PRINT STACK
PRINTI """ to "
FSET? P,AN \?ELS44
PUSH STR?150
JUMP ?CND40
?ELS44: PUSH STR?151
?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?185
RSTACK
.FUNCT V-KILL
CALL IKILL,STR?186
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?150
JUMP ?CND28
?ELS32: PUSH STR?151
?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,FALSE-VALUE
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,FALSE-VALUE
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,TRUE-VALUE
ZERO? STACK /FALSE
CALL DESCRIBE-OBJECTS,TRUE-VALUE
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,TRUE-VALUE
ZERO? STACK \?CND10
PRINTI "You can't see anything interesting."
CRLF
?CND10: SET 'HERE,OHERE
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: EQUAL? P,P?IN,P?OUT \?ELS9
JUMP ?PRG1
?ELS9: LESS? P,LOW-DIRECTION /?PRG1
GETPT HERE,P >TBL
PTSIZE TBL >L
EQUAL? L,UEXIT \?ELS14
GETB TBL,REXIT
EQUAL? STACK,THERE /TRUE
?ELS14: EQUAL? L,DEXIT \?ELS18
GETB TBL,REXIT
EQUAL? STACK,THERE \?ELS18
GETB TBL,DEXITOBJ
FSET? STACK,OPENBIT /TRUE
PRINTI "The door to that room is closed."
CRLF
RFALSE
?ELS18: EQUAL? L,CEXIT \?PRG1
GETB 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
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?187
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?188
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?189
RSTACK
.FUNCT V-RING
PRINTR """DING-DONG!"""
.FUNCT V-RUB
CALL HACK-HACK,STR?190
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,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
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?172
JUMP ?CND54
?ELS58: FSET? PRSI,PERSON \?ELS60
PUSH STR?173
JUMP ?CND54
?ELS60: PUSH STR?174
?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?191
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,TRUE-VALUE
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,FALSE-VALUE
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?150
JUMP ?CND21
?ELS25: PUSH STR?151
?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,FALSE-VALUE
RFALSE
?ELS21: LOC WINNER
EQUAL? PRSO,STACK \FALSE
PRINTR "You're in it, nitwit!"
.FUNCT V-TAKE
CALL ITAKE
EQUAL? STACK,TRUE-VALUE \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-TELL
EQUAL? PRSO,PLAYER \?ELS5
PRINTI "Talking to yourself is a sign of impending looniness."
CRLF
SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
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
RETURN QCONTEXT-ROOM
?ELS11: PRINTI "You can't talk to"
CALL THE-PRSO-PRINT
PRINTI "!"
CRLF
SET 'QUOTE-FLAG,FALSE-VALUE
SET 'P-CONT,FALSE-VALUE
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?111
JUMP ?CND12
?ELS16: PUSH STR?112
?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,TRUE-VALUE
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,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? 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?192
JUMP ?CND10
?ELS14: GETP HERE,P?CORRIDOR
BAND 16,STACK
ZERO? STACK /?ELS16
PUSH STR?193
JUMP ?CND10
?ELS16: PUSH STR?194
?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