713 lines
20 KiB
Plaintext
713 lines
20 KiB
Plaintext
|
|
|
|
.FUNCT RANDOM-PSEUDO
|
|
PRINTR "You can't do anything useful with that."
|
|
|
|
|
|
.FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=1,OBJ
|
|
EQUAL? PRSO,NOT-HERE-OBJECT \?ELS3
|
|
EQUAL? PRSI,NOT-HERE-OBJECT \?ELS3
|
|
PRINTR "(Those things aren't here!)"
|
|
?ELS3: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS9
|
|
SET 'TBL,P-PRSO
|
|
JUMP ?CND1
|
|
?ELS9: SET 'TBL,P-PRSI
|
|
SET 'PRSO?,FALSE-VALUE
|
|
?CND1: ZERO? PRSO? /?ELS14
|
|
EQUAL? PRSA,V?WALK-TO,V?THROUGH,V?MAKE /?THN19
|
|
EQUAL? PRSA,V?GIVE,V?$WHERE,V?WHAT /?THN19
|
|
EQUAL? PRSA,V?SEARCH,V?LOOK-OUTSIDE,V?LOOK-INSIDE /?THN19
|
|
EQUAL? PRSA,V?FOLLOW,V?FIND,V?EXAMINE /?THN19
|
|
EQUAL? PRSA,V?CLIMB-UP,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \?CND12
|
|
?THN19: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
|
|
ZERO? OBJ /FALSE
|
|
EQUAL? OBJ,NOT-HERE-OBJECT \TRUE
|
|
JUMP ?CND12
|
|
?ELS14: EQUAL? PRSA,V?TELL-ME,V?SGIVE /?THN34
|
|
EQUAL? PRSA,V?SEARCH-OBJECT-FOR,V?ASK-FOR,V?ASK-ABOUT \?CND12
|
|
?THN34: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
|
|
ZERO? OBJ /FALSE
|
|
EQUAL? OBJ,NOT-HERE-OBJECT \TRUE
|
|
?CND12: SET 'P-WON,FALSE-VALUE
|
|
PRINTI "(You can't see any"
|
|
CALL NOT-HERE-PRINT
|
|
PRINTR " here!)"
|
|
|
|
|
|
.FUNCT FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ
|
|
CALL MOBY-FIND,TBL >M-F
|
|
ZERO? DEBUG /?CND1
|
|
PRINTI "[Moby-found "
|
|
PRINTN M-F
|
|
PRINTI " objects"
|
|
PRINTI "]"
|
|
CRLF
|
|
?CND1: EQUAL? 1,M-F \?ELS11
|
|
ZERO? DEBUG /?CND12
|
|
PRINTI "[Namely: "
|
|
PRINTD P-MOBY-FOUND
|
|
PRINTI "]"
|
|
CRLF
|
|
?CND12: ZERO? PRSO? /?ELS20
|
|
SET 'PRSO,P-MOBY-FOUND
|
|
RFALSE
|
|
?ELS20: SET 'PRSI,P-MOBY-FOUND
|
|
RFALSE
|
|
?ELS11: LESS? 1,M-F \?ELS25
|
|
GET TBL,1 >OBJ
|
|
GETP OBJ,P?GENERIC
|
|
CALL STACK,OBJ >OBJ
|
|
ZERO? OBJ /?ELS25
|
|
ZERO? DEBUG /?CND28
|
|
PRINTI "[Generic: "
|
|
PRINTD OBJ
|
|
PRINTI "]"
|
|
CRLF
|
|
?CND28: EQUAL? OBJ,NOT-HERE-OBJECT /TRUE
|
|
ZERO? PRSO? /?ELS38
|
|
SET 'PRSO,OBJ
|
|
RFALSE
|
|
?ELS38: SET 'PRSI,OBJ
|
|
RFALSE
|
|
?ELS25: ZERO? PRSO? \?ELS47
|
|
EQUAL? PRSA,V?TELL-ME,V?ASK-FOR,V?ASK-ABOUT /?THN52
|
|
?ELS47: ZERO? PRSO? /?ELS49
|
|
EQUAL? PRSA,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /?THN52
|
|
?ELS49: EQUAL? WINNER,PLAYER /?ELS43
|
|
EQUAL? PRSA,V?SGIVE /?THN52
|
|
EQUAL? PRSA,V?GIVE,V?WHAT,V?FIND \?ELS43
|
|
?THN52: EQUAL? PRSA,V?ASK-FOR,V?ASK-ABOUT \?ELS56
|
|
PRINTD PRSO
|
|
JUMP ?CND54
|
|
?ELS56: ZERO? QCONTEXT /?ELS67
|
|
EQUAL? HERE,QCONTEXT-ROOM \?ELS67
|
|
CALL META-LOC,QCONTEXT
|
|
EQUAL? HERE,STACK \?ELS67
|
|
PUSH QCONTEXT
|
|
JUMP ?CND63
|
|
?ELS67: EQUAL? WINNER,PLAYER /?ELS71
|
|
PUSH WINNER
|
|
JUMP ?CND63
|
|
?ELS71: CALL FIND-FLAG,HERE,PERSON
|
|
?CND63: PRINTD STACK
|
|
?CND54: PRINTI " looks confused. ""I don't know anything about any"
|
|
CALL NOT-HERE-PRINT
|
|
PRINTR "!"""
|
|
?ELS43: ZERO? PRSO? \?ELS79
|
|
PRINTI "You wouldn't find any"
|
|
CALL NOT-HERE-PRINT
|
|
PRINTR " there."
|
|
?ELS79: RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT NOT-HERE-PRINT,?TMP1
|
|
ZERO? P-OFLAG \?THN6
|
|
ZERO? P-MERGED /?ELS5
|
|
?THN6: ZERO? P-XADJ /?CND8
|
|
PRINTI " "
|
|
PRINTB P-XADJN
|
|
?CND8: ZERO? P-XNAM /FALSE
|
|
PRINTI " "
|
|
PRINTB P-XNAM
|
|
RTRUE
|
|
?ELS5: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS23
|
|
GET P-ITBL,P-NC1 >?TMP1
|
|
GET P-ITBL,P-NC1L
|
|
CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
|
|
RSTACK
|
|
?ELS23: GET P-ITBL,P-NC2 >?TMP1
|
|
GET P-ITBL,P-NC2L
|
|
CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT IT-F
|
|
EQUAL? PRSI,IT \?THN10
|
|
EQUAL? PRSA,V?TELL-ME /?THN10
|
|
EQUAL? PRSA,V?SEARCH-OBJECT-FOR,V?ASK-FOR,V?ASK-ABOUT /?THN14
|
|
?THN10: EQUAL? PRSO,IT \FALSE
|
|
EQUAL? PRSA,V?WHAT /?THN14
|
|
EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT \FALSE
|
|
?THN14: PRINTR """I'm not sure what you're talking about."""
|
|
|
|
|
|
.FUNCT THE?,NOUN
|
|
EQUAL? NOUN,MONICA-ROOM,LINDER-ROOM,LIMBO /TRUE
|
|
EQUAL? NOUN,PHONG,LINDER,STILES /TRUE
|
|
EQUAL? NOUN,GLOBAL-PHONG,GLOBAL-LINDER,GLOBAL-STILES /TRUE
|
|
EQUAL? NOUN,MONICA,GLOBAL-MONICA,GLOBAL-TERRY /TRUE
|
|
EQUAL? NOUN,IT,YOU,HIM-HER /TRUE
|
|
EQUAL? NOUN,LINDER-WINDOW,GLOBAL-DUFFY /TRUE
|
|
PRINTI " the"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT THIS-IS-IT,OBJ
|
|
SET 'P-IT-OBJECT,OBJ
|
|
SET 'P-IT-LOC,HERE
|
|
RETURN P-IT-LOC
|
|
|
|
|
|
.FUNCT RECURSIVE-BOOK-F
|
|
EQUAL? PRSA,V?ASK-FOR \?ELS5
|
|
EQUAL? PRSO,PHONG \?ELS5
|
|
FCLEAR PRSI,NDESCBIT
|
|
RFALSE
|
|
?ELS5: EQUAL? PRSA,V?TAKE,V?GIVE \?ELS9
|
|
IN? RECURSIVE-BOOK,PHONG \?ELS9
|
|
FCLEAR PRSO,NDESCBIT
|
|
RFALSE
|
|
?ELS9: EQUAL? PRSA,V?DROP \?ELS13
|
|
IN? PHONG,BUTLER-ROOM \?ELS13
|
|
MOVE RECURSIVE-BOOK,PHONG
|
|
PRINTR "Phong picks up the book and starts to read."
|
|
?ELS13: EQUAL? PRSA,V?EXAMINE \?ELS19
|
|
PRINTR "This is a mystery story called 'Deadline,' just now published as a book."
|
|
?ELS19: EQUAL? PRSA,V?LOOK-INSIDE /?THN24
|
|
EQUAL? PRSA,V?OPEN,V?READ,V?SEARCH \FALSE
|
|
?THN24: FSET RECURSIVE-BOOK,OPENBIT
|
|
PRINTI "The book is a novel-length version of 'Deadline,' a whodunit set in the future in Connecticut. You start to read it, and it seems oddly familiar, as if you might live through it yourself some day."
|
|
IN? GUN-RECEIPT,RECURSIVE-BOOK \?CND28
|
|
FCLEAR GUN-RECEIPT,INVISIBLE
|
|
PRINTI " A receipt of some kind is being used as a bookmark."
|
|
?CND28: CRLF
|
|
RTRUE
|
|
|
|
|
|
.FUNCT GUN-RECEIPT-F
|
|
EQUAL? PRSA,V?READ,V?EXAMINE \FALSE
|
|
GET 0,8
|
|
BOR STACK,2
|
|
PUT 0,8,STACK
|
|
PRINTI """ FRITZI'S
|
|
fine merchandise - quick loans
|
|
Cabeza Plana, Calif.
|
|
Number: 69105
|
|
Date: 12/1/37
|
|
Sold to: Nemo Newbourne
|
|
Address: 137 E. Second Street
|
|
|
|
Two handguns - - - - - - - - - $ 8.00
|
|
|
|
[PAID]"""
|
|
GET 0,8
|
|
BAND STACK,-3
|
|
PUT 0,8,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT MATCHBOOK-F
|
|
EQUAL? PRSA,V?SLAP,V?LAMP-ON \?ELS5
|
|
PRINTR "The matches don't seem to work."
|
|
?ELS5: EQUAL? PRSA,V?OPEN,V?LOOK-INSIDE \?ELS9
|
|
PRINTR "(You'll find the match book in your game package.)"
|
|
?ELS9: EQUAL? PRSA,V?LOOK-UP \FALSE
|
|
CALL PHONE-IN?,HERE
|
|
ZERO? STACK /FALSE
|
|
PRINTR "The listing for Stiles in the phone book is the same as the number written in the match book."
|
|
|
|
|
|
.FUNCT HANDCUFFS-F
|
|
EQUAL? PRSA,V?TAKE \FALSE
|
|
EQUAL? PRSO,HANDCUFFS \FALSE
|
|
EQUAL? HANDCUFFS,MONICA-TIED-WITH \FALSE
|
|
ZERO? PRSI /?THN15
|
|
EQUAL? PRSI,MONICA \FALSE
|
|
?THN15: CALL PERFORM,V?UNTIE,MONICA
|
|
RTRUE
|
|
|
|
|
|
.FUNCT HOUSE-F
|
|
EQUAL? PRSA,V?FIND \?ELS5
|
|
PRINTR "It's right here. Some detective you are."
|
|
?ELS5: EQUAL? PRSA,V?WALK-TO \?ELS9
|
|
EQUAL? HERE,DRIVEWAY-ENTRANCE,DRIVEWAY \?ELS9
|
|
CALL PERFORM,V?WALK,P?NORTH
|
|
RTRUE
|
|
?ELS9: EQUAL? PRSA,V?THROUGH \?ELS13
|
|
EQUAL? HERE,FRONT-YARD \?ELS18
|
|
FSET? DINING-DOOR,OPENBIT \?ELS18
|
|
CALL GOTO,DINING-ROOM
|
|
RSTACK
|
|
?ELS18: EQUAL? HERE,FRONT-PORCH \?ELS22
|
|
FSET? FRONT-DOOR,OPENBIT \?ELS22
|
|
CALL GOTO,ENTRY
|
|
RSTACK
|
|
?ELS22: EQUAL? HERE,OFFICE-PORCH \?ELS26
|
|
FSET? OFFICE-BACK-DOOR,OPENBIT \?ELS26
|
|
CALL GOTO,OFFICE
|
|
RSTACK
|
|
?ELS26: EQUAL? HERE,BACK-YARD \?ELS30
|
|
FSET? MONICA-BACK-DOOR,OPENBIT \?ELS30
|
|
CALL GOTO,MONICA-ROOM
|
|
RSTACK
|
|
?ELS30: EQUAL? HERE,ROCK-GARDEN \?ELS34
|
|
FSET? LINDER-BACK-DOOR,OPENBIT \?ELS34
|
|
CALL GOTO,LINDER-ROOM
|
|
RSTACK
|
|
?ELS34: PRINTR "You might try the front door."
|
|
?ELS13: EQUAL? PRSA,V?EXAMINE \FALSE
|
|
PRINTR "The house looks like a mixture of a California bungalow and East Asian influences."
|
|
|
|
|
|
.FUNCT FENCE-F
|
|
EQUAL? PRSA,V?CLIMB-UP,V?CLIMB-ON,V?CLIMB-FOO \?ELS5
|
|
PRINTR "You can't leave the property yet. It would mean your job."
|
|
?ELS5: EQUAL? PRSA,V?LOOK-OUTSIDE,V?LOOK-INSIDE,V?LOOK-BEHIND \?ELS9
|
|
PRINTR "It's too dark to see anything."
|
|
?ELS9: EQUAL? PRSA,V?FIND \?ELS13
|
|
PRINTR "It's right here. Some detective you are."
|
|
?ELS13: EQUAL? PRSA,V?EXAMINE \FALSE
|
|
PRINTR "This is a Japanese-style ""shadow fence"" made of wooden slats, opaque from most angles but designed to let breezes through."
|
|
|
|
|
|
.FUNCT GROUND-F
|
|
EQUAL? PRSO,GROUND \?ELS5
|
|
EQUAL? PRSA,V?WHAT /FALSE
|
|
EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /FALSE
|
|
?ELS5: EQUAL? PRSI,GROUND \?ELS11
|
|
EQUAL? PRSA,V?TELL-ME /FALSE
|
|
EQUAL? PRSA,V?SEARCH-OBJECT-FOR,V?ASK-FOR,V?ASK-ABOUT /FALSE
|
|
?ELS11: GETP HERE,P?LINE
|
|
EQUAL? STACK,OUTSIDE-LINE-C /?ELS17
|
|
SET 'P-WON,FALSE-VALUE
|
|
PRINTI "(You can't see any"
|
|
CALL PRSO-PRINT
|
|
PRINTR " here!)"
|
|
?ELS17: EQUAL? PRSA,V?PUT \?ELS21
|
|
EQUAL? PRSI,GROUND \?ELS21
|
|
CALL PERFORM,V?DROP,PRSO
|
|
RTRUE
|
|
?ELS21: EQUAL? PRSA,V?SEARCH,V?EXAMINE \FALSE
|
|
PRINTR "You don't find anything new there."
|
|
|
|
|
|
.FUNCT FLOOR-F
|
|
EQUAL? PRSO,FLOOR \?ELS5
|
|
EQUAL? PRSA,V?WHAT /FALSE
|
|
EQUAL? PRSA,V?FIND,V?ASK-CONTEXT-FOR,V?ASK-CONTEXT-ABOUT /FALSE
|
|
?ELS5: EQUAL? PRSI,FLOOR \?ELS11
|
|
EQUAL? PRSA,V?TELL-ME /FALSE
|
|
EQUAL? PRSA,V?SEARCH-OBJECT-FOR,V?ASK-FOR,V?ASK-ABOUT /FALSE
|
|
?ELS11: GETP HERE,P?LINE
|
|
EQUAL? STACK,OUTSIDE-LINE-C \?ELS17
|
|
SET 'P-WON,FALSE-VALUE
|
|
PRINTI "(You can't see any"
|
|
CALL PRSO-PRINT
|
|
PRINTR " here!)"
|
|
?ELS17: EQUAL? PRSA,V?PUT \?ELS21
|
|
EQUAL? PRSI,FLOOR \?ELS21
|
|
CALL PERFORM,V?DROP,PRSO
|
|
RTRUE
|
|
?ELS21: EQUAL? PRSA,V?SEARCH,V?EXAMINE \FALSE
|
|
PRINTR "You don't find anything new there."
|
|
|
|
|
|
.FUNCT MUSIC-F
|
|
EQUAL? PRSA,V?LISTEN \FALSE
|
|
ZERO? RADIO-ON /?ELS10
|
|
PRINTR "You're too far away to make out what it is."
|
|
?ELS10: PRINTR "You'd enjoy it more if you turned on the radio."
|
|
|
|
|
|
.FUNCT LIQUOR-F
|
|
ZERO? LINDER-FOLLOWS-YOU /?ELS5
|
|
EQUAL? PRSA,V?EXAMINE \?ELS5
|
|
PRINTR "Linder is drinking something that looks like whisky, straight up."
|
|
?ELS5: EQUAL? PRSA,V?GIVE \?ELS15
|
|
EQUAL? PRSI,PLAYER \?ELS15
|
|
EQUAL? WINNER,PLAYER \?THN22
|
|
?ELS15: EQUAL? PRSA,V?SGIVE \?ELS17
|
|
EQUAL? PRSO,PLAYER \?ELS17
|
|
EQUAL? WINNER,PLAYER \?THN22
|
|
?ELS17: EQUAL? PRSA,V?ASK-FOR \?ELS19
|
|
FSET? PRSO,PERSON /?THN22
|
|
?ELS19: EQUAL? PRSA,V?TAKE \?ELS11
|
|
CALL FIND-FLAG,HERE,PERSON
|
|
ZERO? STACK \?THN22
|
|
ZERO? PRSI /?ELS11
|
|
FSET? PRSI,PERSON \?ELS11
|
|
?THN22: ZERO? DRUNK-FLAG /?CND24
|
|
CALL NO-DRINK
|
|
RTRUE
|
|
?CND24: SET 'DRUNK-FLAG,TRUE-VALUE
|
|
EQUAL? MONICA,WINNER,PRSO,PRSI \?ELS32
|
|
PRINTR """So you want to dip your beak? Go ahead."""
|
|
?ELS32: MOVE DRINK,PLAYER
|
|
FSET DRINK,TAKEBIT
|
|
PRINTR """I think we both need one."" And so you both have one."
|
|
?ELS11: EQUAL? PRSA,V?DRINK /?THN41
|
|
EQUAL? PRSA,V?OPEN \FALSE
|
|
EQUAL? PRSO,BOURBON,SCOTCH \FALSE
|
|
?THN41: ZERO? DRUNK-FLAG /?ELS49
|
|
CALL NO-DRINK
|
|
RTRUE
|
|
?ELS49: SET 'DRUNK-FLAG,TRUE-VALUE
|
|
MOVE DRINK,PLAYER
|
|
FSET DRINK,TAKEBIT
|
|
PRINTR "You take a belt of the stuff and roll it on your tongue before swallowing. It's good whisky."
|
|
|
|
|
|
.FUNCT NO-DRINK
|
|
PRINTR "You could drink this stuff all night, but you have work to do."
|
|
|
|
|
|
.FUNCT CIGARETTE-F
|
|
EQUAL? PRSA,V?SEARCH-OBJECT-FOR,V?SEARCH,V?FIND \?ELS5
|
|
PRINTR "Like any hard-boiled police detective, you must have a pack on you somewhere."
|
|
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS9
|
|
EQUAL? HERE,KITCHEN \?ELS14
|
|
PRINTR "Phong's cigarettes are Lucky Strikes."
|
|
?ELS14: PRINTR "All you can see is an ashtray full of butts."
|
|
?ELS9: EQUAL? PRSA,V?SMOKE \?ELS22
|
|
PRINTR "You light up a Camel, take a deep drag, and watch the smoke drift through the air. A few more puffs, and you're ready to go to work again."
|
|
?ELS22: EQUAL? PRSA,V?TURN,V?GIVE \?ELS30
|
|
EQUAL? PRSI,PLAYER \?ELS30
|
|
EQUAL? WINNER,PLAYER \?THN37
|
|
?ELS30: EQUAL? PRSA,V?SGIVE \?ELS32
|
|
EQUAL? PRSO,PLAYER \?ELS32
|
|
EQUAL? WINNER,PLAYER \?THN37
|
|
?ELS32: EQUAL? PRSA,V?ASK-FOR \?ELS34
|
|
FSET? PRSO,PERSON /?THN37
|
|
?ELS34: EQUAL? PRSA,V?TAKE \FALSE
|
|
CALL FIND-FLAG,HERE,PERSON,WINNER
|
|
ZERO? STACK \?THN37
|
|
FSET? PRSI,PERSON \FALSE
|
|
?THN37: PRINTR """I think we both need one."" And so you both have one."
|
|
|
|
|
|
.FUNCT BROKEN-GLASS-F
|
|
EQUAL? PRSA,V?TAKE \FALSE
|
|
PRINTR "You'd probably cut yourself on the sharp edges."
|
|
|
|
|
|
.FUNCT INSIDE-GUN-F
|
|
EQUAL? PRSA,V?COMPARE \?ELS5
|
|
EQUAL? PRSO,OUTSIDE-GUN /?THN8
|
|
EQUAL? PRSI,OUTSIDE-GUN \?ELS5
|
|
?THN8: EQUAL? P-ADVERB,W?CAREFULLY \?ELS14
|
|
SET 'GUNS-MATCHED,TRUE-VALUE
|
|
PRINTI "The two guns are virtually identical,"
|
|
PRINTR " except that one has a very short barrel."
|
|
?ELS14: PRINTI "The two guns appear to be very similar,"
|
|
PRINTR " except that one has a very short barrel."
|
|
?ELS5: EQUAL? PRSA,V?EXAMINE \?ELS22
|
|
PRINTI "Y"
|
|
PRINTI "ou can see it's just a cheap low-quality handgun."
|
|
PRINTR " The barrel is very short, as if someone sawed it off."
|
|
?ELS22: EQUAL? PRSA,V?OPEN \?ELS26
|
|
PRINTR "You open the gun, find no spare bullets inside, and close it again."
|
|
?ELS26: EQUAL? PRSA,V?SMELL \FALSE
|
|
PRINTR "It smells as though it's recently been fired."
|
|
|
|
|
|
.FUNCT OUTSIDE-GUN-F
|
|
EQUAL? PRSA,V?EXAMINE \?ELS5
|
|
PRINTI "The gun is muddy from the ground, but y"
|
|
PRINTR "ou can see it's just a cheap low-quality handgun."
|
|
?ELS5: EQUAL? PRSA,V?OPEN \?ELS9
|
|
PRINTR "You open the gun, find no spare bullets inside, and close it again."
|
|
?ELS9: EQUAL? PRSA,V?SMELL \FALSE
|
|
PRINTR "It smells as though it's recently been fired."
|
|
|
|
|
|
.FUNCT GENERIC-GUN-F,OBJ
|
|
EQUAL? PRSA,V?TAKE,V?SEARCH-OBJECT-FOR /?THN6
|
|
EQUAL? PRSA,V?SGIVE,V?GIVE,V?WHAT /?THN6
|
|
EQUAL? PRSA,V?TELL-ME,V?FIND,V?ASK-CONTEXT-FOR /?THN6
|
|
EQUAL? PRSA,V?ASK-FOR,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT \?ELS5
|
|
?THN6: RETURN GENERIC-GUN
|
|
?ELS5: LOC PISTOL
|
|
EQUAL? STACK,PLAYER,HERE /FALSE
|
|
SET 'P-WON,FALSE-VALUE
|
|
PRINTI "(You can't see any "
|
|
PRINTI "gun"
|
|
PRINTI " here!)"
|
|
CRLF
|
|
RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT PHONG-KEYS-F
|
|
EQUAL? PRSA,V?GIVE \?ELS9
|
|
EQUAL? PRSI,PLAYER \?ELS9
|
|
EQUAL? WINNER,PHONG /?THN6
|
|
?ELS9: EQUAL? PRSA,V?TAKE \FALSE
|
|
IN? PHONG-KEYS,PHONG \FALSE
|
|
?THN6: ZERO? PHONG-SEEN-CORPSE? /?ELS16
|
|
MOVE PHONG-KEYS,PLAYER
|
|
FCLEAR PHONG-KEYS,NDESCBIT
|
|
PRINTR """Here, you may as well take them. I don't see how Mr. Linder can object now."""
|
|
?ELS16: PRINTR """I don't think Mr. Linder would like that."""
|
|
|
|
|
|
.FUNCT GENERIC-KEY-F,OBJ
|
|
EQUAL? PRSA,V?TAKE,V?SEARCH-OBJECT-FOR /?THN6
|
|
EQUAL? PRSA,V?SGIVE,V?GIVE,V?WHAT /?THN6
|
|
EQUAL? PRSA,V?TELL-ME,V?FIND,V?ASK-CONTEXT-FOR /?THN6
|
|
EQUAL? PRSA,V?ASK-FOR,V?ASK-CONTEXT-ABOUT,V?ASK-ABOUT \?ELS5
|
|
?THN6: RETURN GENERIC-KEY
|
|
?ELS5: LOC PHONG-KEYS
|
|
EQUAL? STACK,PLAYER,HERE /FALSE
|
|
SET 'P-WON,FALSE-VALUE
|
|
PRINTI "(You can't see any "
|
|
PRINTI "key"
|
|
PRINTI " here!)"
|
|
CRLF
|
|
RETURN NOT-HERE-OBJECT
|
|
|
|
|
|
.FUNCT HANDWRITING-F,?TMP1
|
|
EQUAL? PRSA,V?ANALYZE \FALSE
|
|
EQUAL? PRSO,HANDWRITING \FALSE
|
|
ZERO? PRSI \FALSE
|
|
LOC MATCHBOOK >?TMP1
|
|
LOC THREAT-NOTE
|
|
EQUAL? PLAYER,?TMP1,STACK \FALSE
|
|
PRINTR "You didn't say what to analyze the handwriting on."
|
|
|
|
|
|
.FUNCT GLOBAL-FINGERPRINTS-F
|
|
EQUAL? PRSA,V?TAKE \FALSE
|
|
EQUAL? PRSO,GLOBAL-FINGERPRINTS \FALSE
|
|
ZERO? PRSI \?ELS12
|
|
PRINTR "You didn't say what to take the fingerprints from."
|
|
?ELS12: CALL PERFORM,V?FINGERPRINT,PRSI
|
|
RTRUE
|
|
|
|
|
|
.FUNCT GLOBAL-SUICIDE-F,STR
|
|
EQUAL? PRSA,V?FIND \FALSE
|
|
EQUAL? WINNER,PLAYER /FALSE
|
|
PRINTR """She shot herself in the bathtub."""
|
|
|
|
|
|
.FUNCT TELEPHONE-F
|
|
EQUAL? PRSA,V?PHONE \?ELS5
|
|
PRINTR "You should type what number to call, for example ""DIAL HYACINTH 1031."""
|
|
?ELS5: EQUAL? PRSA,V?REPLY \?ELS9
|
|
PRINTR "Don't bother unless it rings."
|
|
?ELS9: EQUAL? PRSA,V?TAKE,V?RAISE \FALSE
|
|
PRINTR "You lift the receiver and get a dial tone. Well done!"
|
|
|
|
|
|
.FUNCT CORONER-F
|
|
EQUAL? PRSA,V?PHONE \FALSE
|
|
CALL PHONE-IN?,HERE
|
|
ZERO? STACK /FALSE
|
|
RANDOM 100
|
|
GRTR? 69,STACK \?ELS12
|
|
PRINTR "You dial the number and wait a long time for someone to answer. Finally you hear a voice: ""We're awful busy here. Call back in ten minutes."" He hangs up before you can say a word."
|
|
?ELS12: PRINTR "You dial the number and get a busy signal."
|
|
|
|
|
|
.FUNCT BUTTON-F
|
|
EQUAL? HERE,FRONT-PORCH \?ELS5
|
|
EQUAL? PRSI,BUTTON \?ELS8
|
|
CALL PERFORM,PRSA,PRSO,DOORBELL
|
|
RTRUE
|
|
?ELS8: EQUAL? PRSO,BUTTON \FALSE
|
|
CALL PERFORM,PRSA,DOORBELL,PRSI
|
|
RTRUE
|
|
?ELS5: CALL OUTSIDE?,HERE
|
|
ZERO? STACK /?ELS12
|
|
PRINTR "There's no button here."
|
|
?ELS12: EQUAL? PRSA,V?RING,V?PUSH \FALSE
|
|
IN? PHONG,HERE \?ELS21
|
|
PRINTR "Phong looks annoyed. ""You needn't ring for me. I'm right here."""
|
|
?ELS21: CALL YOU-RANG
|
|
PRINTR "You barely hear a bell ring in the distance."
|
|
|
|
|
|
.FUNCT YOU-RANG
|
|
GET GOAL-TABLES,PHONG-C
|
|
GET STACK,GOAL-S
|
|
ZERO? STACK \FALSE
|
|
SET 'PHONG-CALLED,TRUE-VALUE
|
|
LOC PHONG >PHONG-OLD-LOC
|
|
CALL ESTABLISH-GOAL,PHONG,HERE
|
|
RSTACK
|
|
|
|
|
|
.FUNCT BLACK-WIRE-F
|
|
GETP HERE,P?LINE
|
|
EQUAL? STACK,OUTSIDE-LINE-C \?ELS5
|
|
PRINTR "There's no wire here."
|
|
?ELS5: EQUAL? PRSO,WHITE-WIRE \?ELS9
|
|
EQUAL? HERE,WORKSHOP /?ELS9
|
|
CALL WINDOW-IN?,HERE
|
|
ZERO? STACK \?ELS9
|
|
PRINTR "There's no white wire here."
|
|
?ELS9: EQUAL? PRSA,V?EXAMINE \?ELS15
|
|
EQUAL? PRSO,BLACK-WIRE \?ELS20
|
|
EQUAL? HERE,WORKSHOP \?ELS25
|
|
PRINTI "You can see several kinds of "
|
|
PRINTI "black"
|
|
PRINTR " wire on spools, not to mention the snarl in the junction box."
|
|
?ELS25: PRINTR "A pair of black wires goes from the butler's button into the floor."
|
|
?ELS20: EQUAL? HERE,WORKSHOP \?ELS33
|
|
PRINTI "You can see several kinds of "
|
|
PRINTI "white"
|
|
PRINTR " wire on spools, not to mention the snarl in the junction box."
|
|
?ELS33: PRINTI "A pair of white wires goes from some sort of electric switch on the "
|
|
EQUAL? HERE,ENTRY,GARAGE \?ELS44
|
|
PUSH STR?128
|
|
JUMP ?CND40
|
|
?ELS44: PUSH STR?129
|
|
?CND40: PRINT STACK
|
|
PRINTR " into the frame."
|
|
?ELS15: EQUAL? PRSA,V?FOLLOW \?ELS48
|
|
EQUAL? PRSO,BLACK-WIRE \?ELS53
|
|
PRINTR "The wire goes into the floor and disappears."
|
|
?ELS53: EQUAL? HERE,WORKSHOP \?ELS57
|
|
PRINTR "It just goes around and around the spools."
|
|
?ELS57: PRINTR "The wire goes into the wall and disappears."
|
|
?ELS48: EQUAL? PRSA,V?TAKE \FALSE
|
|
PRINTR "You don't really want to do that."
|
|
|
|
|
|
.FUNCT MUDDY-SHOES-F
|
|
EQUAL? PRSA,V?PUT,V?COMPARE \?ELS5
|
|
EQUAL? PRSO,BACK-FOOTPRINTS-CAST,BACK-FOOTPRINTS /?THN8
|
|
EQUAL? PRSI,BACK-FOOTPRINTS-CAST,BACK-FOOTPRINTS \?ELS5
|
|
?THN8: PRINTI "The boots don't seem to match "
|
|
PRINTI "the foot prints that you found in the "
|
|
PRINTR "back yard."
|
|
?ELS5: EQUAL? PRSA,V?PUT,V?COMPARE \?ELS13
|
|
EQUAL? PRSO,SIDE-FOOTPRINTS-CAST,SIDE-FOOTPRINTS /?THN16
|
|
EQUAL? PRSI,SIDE-FOOTPRINTS-CAST,SIDE-FOOTPRINTS \?ELS13
|
|
?THN16: EQUAL? PRSA,V?PUT /?THN23
|
|
EQUAL? P-ADVERB,W?CAREFULLY \?ELS22
|
|
?THN23: SET 'SIDE-FOOTPRINTS-MATCHED,TRUE-VALUE
|
|
PRINTR "The boots and the foot prints match each other perfectly."
|
|
?ELS22: PRINTI "The boots appear to be similar to "
|
|
PRINTI "the foot prints that you found in the "
|
|
PRINTR "side yard."
|
|
?ELS13: EQUAL? PRSA,V?EXAMINE \?ELS32
|
|
PRINTR "They're just ordinary gardening boots, with some fresh adobe mud around the bottom."
|
|
?ELS32: EQUAL? PRSA,V?TAKE \FALSE
|
|
FCLEAR MUDDY-SHOES,NDESCBIT
|
|
RFALSE
|
|
|
|
|
|
.FUNCT BED-F,RARG=100
|
|
EQUAL? RARG,100 \FALSE
|
|
EQUAL? PRSA,V?LOOK-ON,V?LOOK-INSIDE,V?EXAMINE \?ELS7
|
|
EQUAL? HERE,MONICA-ROOM \?ELS7
|
|
IN? MONICA,MONICA-ROOM \?ELS7
|
|
PRINTR "Monica is lying on her bed, softly sobbing."
|
|
?ELS7: EQUAL? PRSA,V?LOOK-UNDER \FALSE
|
|
PRINTR "If you wanted to find the bogey man, you're out of luck."
|
|
|
|
|
|
.FUNCT GLOBAL-CALL-F
|
|
EQUAL? PRSA,V?WALK,V?TURN \FALSE
|
|
PRINTR "(Use compass directions to move around here.)"
|
|
|
|
|
|
.FUNCT CORPSE-F,ARG=0,T
|
|
SUB PRESENT-TIME,MURDER-TIME >T
|
|
EQUAL? ARG,M-OBJDESC \?ELS5
|
|
PRINTR "The body of Mr. Linder is still crumpled in a heap on the floor."
|
|
?ELS5: EQUAL? PRSA,V?ANALYZE \?ELS9
|
|
EQUAL? PRSO,CORPSE \?ELS9
|
|
EQUAL? PRSI,TUMOR \?CND12
|
|
SET 'DUFFY-SAW-MEDICAL-REPORT,TRUE-VALUE
|
|
?CND12: PRINTR "Only the coroner can do that."
|
|
?ELS9: EQUAL? PRSA,V?ARREST \?ELS18
|
|
EQUAL? PRSO,CORPSE \?ELS18
|
|
CALL ARREST,GLOBAL-LINDER
|
|
RSTACK
|
|
?ELS18: EQUAL? PRSA,V?$CALL,V?PHONE /?THN25
|
|
EQUAL? PRSA,V?TELL,V?ASK-FOR,V?ASK-ABOUT \?ELS22
|
|
?THN25: EQUAL? PRSO,CORPSE \?ELS22
|
|
PRINTI "Talking to corpses will get you nowhere."
|
|
CRLF
|
|
RETURN M-FATAL
|
|
?ELS22: EQUAL? PRSA,V?TAKEOUT \?ELS30
|
|
EQUAL? PRSI,LINDER-BACK-DOOR,MONICA-BACK-DOOR,OFFICE-BACK-DOOR \?ELS30
|
|
PRINTI "You can't move"
|
|
CALL THE-PRSO-PRINT
|
|
PRINTR "."
|
|
?ELS30: EQUAL? PRSA,V?TIE-WITH,V?TIE-TO \?ELS36
|
|
PRINTR "Don't tell me you think the body's going to run away!"
|
|
?ELS36: EQUAL? PRSA,V?RUB,V?EXAMINE \FALSE
|
|
LESS? T,10 \?ELS45
|
|
PRINTR "The blood is still spreading on Linder's shirt."
|
|
?ELS45: LESS? T,60 \?ELS49
|
|
PRINTR "The blood on Linder's shirt has clotted and turned dark."
|
|
?ELS49: LESS? T,180 \?ELS53
|
|
PRINTR "Linder's body is getting stiff."
|
|
?ELS53: PRINTR "The corpse is pretty stiff now."
|
|
|
|
|
|
.FUNCT GLOBAL-WARRANT-F
|
|
EQUAL? PRSA,V?FIND,V?TAKE \FALSE
|
|
PRINTR "Knowing the courts, it would probably take days to get one."
|
|
|
|
|
|
.FUNCT STUB-F
|
|
EQUAL? PRSA,V?READ,V?EXAMINE \FALSE
|
|
GET 0,8
|
|
BOR STACK,2
|
|
PUT 0,8,STACK
|
|
PRINTI "
|
|
#570716
|
|
|
|
BIJOU THEATRE
|
|
|
|
ADMIT ONE
|
|
|
|
25 CENTS
|
|
|
|
-^-^-^-^-^-^-
|
|
"
|
|
GET 0,8
|
|
BAND STACK,-3
|
|
PUT 0,8,STACK
|
|
RTRUE
|
|
|
|
|
|
.FUNCT MIRROR-F
|
|
EQUAL? PRSA,V?MUNG \?ELS5
|
|
PRINTR "According to superstition, it's bad luck to break mirrors."
|
|
?ELS5: EQUAL? PRSA,V?LOOK-INSIDE \FALSE
|
|
PRINTR "A harried and weary police detective looks back at you, with a look that seems to say, ""Look what the cat dragged in."""
|
|
|
|
|
|
.FUNCT CLOSET-F
|
|
EQUAL? HERE,MONICA-ROOM,LINDER-ROOM,BUTLER-ROOM /?ELS5
|
|
EQUAL? HERE,ENTRY /?ELS5
|
|
SET 'P-WON,FALSE-VALUE
|
|
PRINTI "(You can't see any "
|
|
PRINTI "closet"
|
|
PRINTR " here!)"
|
|
?ELS5: EQUAL? PRSA,V?OPEN /?THN12
|
|
EQUAL? PRSA,V?SEARCH,V?LOOK-INSIDE,V?EXAMINE \?ELS11
|
|
?THN12: PRINTR "You open the closet and find a bunch of stylish clothes, but nothing in your size."
|
|
?ELS11: EQUAL? PRSA,V?THROUGH \FALSE
|
|
PRINTR "The closet's too crowded to get in."
|
|
|
|
|
|
.FUNCT GLOBAL-CAN-OF-WORMS-F
|
|
EQUAL? PHONG,PRSO,WINNER /FALSE
|
|
EQUAL? PRSA,V?FIND \?ELS7
|
|
PRINTR "In a sense, they're all around you!"
|
|
?ELS7: EQUAL? PRSA,V?WHAT \?ELS11
|
|
PRINTR "That would be telling!"
|
|
?ELS11: EQUAL? HERE,KITCHEN \FALSE
|
|
PRINTR "This case is tangled enough already."
|
|
|
|
|
|
.FUNCT RANDOM-MEAL-F
|
|
EQUAL? PRSA,V?FIND /?THN6
|
|
EQUAL? PRSA,V?EAT,V?ASK-FOR,V?ASK-ABOUT \?ELS5
|
|
?THN6: PRINTR "The blue-plate special at the diner was enough for you."
|
|
?ELS5: PRINTR "What a strange notion!"
|
|
|
|
|
|
.FUNCT GLOBAL-HOUSE-F
|
|
EQUAL? PRSA,V?WALK-AROUND \FALSE
|
|
PRINTR "(Use compass directions to move around here.)"
|
|
|
|
.ENDI
|