.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