suspect/verbs.zil

2707 lines
73 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"VERBS for M3
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<ROUTINE V-SCRIPT ()
<PUT 0 8 <BOR <GET 0 8> 1>>
<SCRIPT-STUFF "begins">
<V-VERSION>
<RTRUE>>
<ROUTINE V-UNSCRIPT ()
<SCRIPT-STUFF "ends">
<PUT 0 8 <BAND <GET 0 8> -2>>
<RTRUE>>
<ROUTINE SCRIPT-STUFF (STR)
<TELL "Script " .STR "." CR>>
<ROUTINE V-$VERIFY ()
<COND (<AND <EQUAL? ,PRSO ,INTNUM>
<EQUAL? ,P-NUMBER 1949>>
<TELL N ,SERIAL CR>)
(,PRSO <TELL ,SORRY-I-DONT CR>)
(ELSE
<TELL "Verifying disk..." CR>
<COND (<VERIFY> <TELL "The disk is correct." CR>)
(T <TELL CR "** Disk Failure **" CR>)>)>>
" "
"ZORK game commands"
"SUBTITLE SETTINGS FOR VARIOUS LEVELS OF DESCRIPTION"
<GLOBAL VERBOSE <>>
<GLOBAL SUPER-BRIEF <>>
<GDECL (VERBOSE SUPER-BRIEF) <OR ATOM FALSE>>
<ROUTINE V-AGAIN ("AUX" OBJ)
<COND (<NOT ,L-PRSA>
<TELL "Not yet." CR>)
(<==? ,L-PRSA ,V?WALK>
<PERFORM ,L-PRSA ,L-PRSO>)
(T
<SET OBJ
<COND (<AND ,L-PRSO <NOT <LOC ,L-PRSO>>>
,L-PRSO)
(<AND ,L-PRSI <NOT <LOC ,L-PRSO>>>
,L-PRSI)>>
<COND (<AND .OBJ
<NOT <EQUAL? .OBJ ,PSEUDO-OBJECT ,ROOMS>>>
<TELL "I can't see " THE .OBJ " anymore." CR>
<RFATAL>)
(T
<PERFORM ,L-PRSA ,L-PRSO ,L-PRSI>)>)>>
<ROUTINE V-BRIEF ()
<SETG VERBOSE <>>
<SETG SUPER-BRIEF <>>
<SETG P-SPACE 1>
<TELL "Brief" ,DESCRIPTIONS CR>>
<ROUTINE V-SUPER-BRIEF ()
<SETG SUPER-BRIEF T>
<SETG P-SPACE 0>
<TELL
"Super-brief" ,DESCRIPTIONS CR>>
<ROUTINE V-VERBOSE ()
<SETG VERBOSE T>
<SETG SUPER-BRIEF <>>
<SETG P-SPACE 1>
<TELL "Verbose" ,DESCRIPTIONS CR>>
<GLOBAL DESCRIPTIONS " descriptions.">
<GLOBAL P-SPACE 1>
<ROUTINE V-SPACE ()
<SETG P-SPACE 1>>
<ROUTINE V-UNSPACE ()
<SETG P-SPACE 0>
<RTRUE>>
<ROUTINE V-INVENTORY ()
<COND (<AND <FIRST? ,WINNER> <PRINT-CONT ,WINNER>>
<RTRUE>)
(T
<TELL ,YOU-ARE "empty-handed." CR>)>>
<ROUTINE V-TIME ()
<TELL "It's now ">
<TIME-PRINT ,PRESENT-TIME>
<CRLF>>
<ROUTINE TIME-PRINT (NUM "OPTIONAL" (AMPM T) "AUX" HR (AM <>))
#DECL ((NUM HR) FIX (AM) <OR FALSE ATOM>)
<COND (<G? <SET HR </ .NUM 60>> 12>
<SET HR <- .HR 12>>
<SET AM T>)
(<==? .HR 12> <SET AM T>)>
<PRINTN .HR>
<TELL ":">
<COND (<L? <SET HR <MOD .NUM 60>> 10>
<TELL "0">)>
<TELL N .HR>
<COND (.AMPM
<TELL " " <COND (.AM "a.m") (T "p.m")>>)>
<TELL ".">>
<ROUTINE QUIT-WARNING ()
<COND (<NOT <EQUAL? ,L-PRSA ,V?SAVE>>
<TELL
"If you want to continue from this point at another time, you must
\"SAVE\" first. ">)>
<TELL ,DO-YOU-WANT-TO "stop now?">>
<ROUTINE V-QUIT ("OPTIONAL" (ASK? T) "AUX" SCOR)
#DECL ((ASK?) <OR ATOM <PRIMTYPE LIST>> (SCOR) FIX)
<COND (<OR <AND .ASK?
<QUIT-WARNING>
<YES?>>
<NOT .ASK?>>
<QUIT>)
(ELSE <TELL "O.K." CR>)>>
<ROUTINE V-RESTART ()
<TELL
"Do you wish to restart the story?">
<COND (<YES?>
<RESTART>
<TELL-STATUS "original">)>>
<ROUTINE TELL-STATUS (STR)
<TELL "Your " .STR " status couldn't be restored." ,CONSULT CR>>
<ROUTINE V-RESTORE ()
<COND (<RESTORE>
<TELL "O.K." CR>
<V-FIRST-LOOK>)
(T
<TELL-STATUS "previous">)>>
<GLOBAL CONSULT " Consult your manual or Reference Card if necessary.">
<ROUTINE V-FIRST-LOOK ()
<COND (<DESCRIBE-ROOM>
<COND (<NOT ,SUPER-BRIEF> <DESCRIBE-OBJECTS>)>)>>
<ROUTINE V-SAVE ()
<COND (<SAVE>
<TELL "O.K." CR>)
(T
<TELL
"Your story couldn't be saved." ,CONSULT CR>)>>
<ROUTINE V-VERSION ("AUX" (CNT 17))
<TELL
"SUSPECT|
Infocom interactive fiction - a mystery story|
Copyright (c) 1984 Infocom, Inc. All rights reserved.|
">
;<COND (<NOT <==? <BAND <GETB 0 1> 8> 0>>
<TELL "Licensed to Tandy Corporation." CR>)>
<TELL "SUSPECT is a registered trademark of Infocom, Inc.|
Release number ">
<PRINTN <BAND <GET 0 1> *3777*>>
<TELL " / Serial number ">
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> 23>
<RETURN>)
(T
<PRINTC <GETB 0 .CNT>>)>>
<CRLF>>
<GLOBAL Y-INBUF <ITABLE BYTE 12>>
<GLOBAL Y-LEXV <ITABLE BYTE 10>>
<ROUTINE YES? ("OPTIONAL" (RESTORE? <>) "AUX" W)
<REPEAT ()
<PRINTI " (Answer YES">
<COND (.RESTORE? <PRINTI " or RESTORE">)>
<TELL " or NO">
<PRINTI ".) >">
<READ ,Y-INBUF ,Y-LEXV>
<COND (<0? <GETB ,Y-LEXV ,P-LEXWORDS>>
<RFALSE>)>
<SET W <GET ,Y-LEXV 1>>
<COND (<AND .RESTORE? <EQUAL? .W ,W?RESTORE>>
<RFATAL>)
(<EQUAL? .W ,W?YES ,W?Y>
<RTRUE>)
(<EQUAL? .W ,W?NO ,W?N>
<RFALSE>)>>>
" "
"SUBTITLE - GENERALLY USEFUL ROUTINES & CONSTANTS"
"DESCRIBE-OBJECT -- takes object and flag. if flag is true will print a
long description (fdesc or ldesc), otherwise will print short."
<ROUTINE DESCRIBE-OBJECT (OBJ V? LEVEL "AUX" (STR <>) AV)
<COND (<AND <0? .LEVEL>
<FSET? .OBJ ,PERSON>
<IN-MOTION? .OBJ>>
<RTRUE>)>
<COND (<AND <0? .LEVEL>
<APPLY <GETP .OBJ ,P?DESCFCN> ,M-OBJDESC>>
<RTRUE>)>
;<COND (<FSET? .OBJ ,PERSON> <THIS-IS-S-HE .OBJ>)
(T <THIS-IS-IT .OBJ>)>
<COND (<AND <0? .LEVEL>
<OR <AND <NOT <FSET? .OBJ ,TOUCHBIT>>
<SET STR <GETP .OBJ ,P?FDESC>>>
<SET STR <GETP .OBJ ,P?LDESC>>>>
<TELL .STR>)
(<0? .LEVEL>
<COND (<FSET? .OBJ ,PERSON>
<TELL CD .OBJ " is">)
(T
<TELL "There's " A .OBJ>)>
<TELL " here.">)
(ELSE
<TELL <GET ,INDENTS .LEVEL>>
<COND (<OR <FSET? .OBJ ,PERSON> <EQUAL? .OBJ ,CORPSE>>
<TELL D .OBJ>)
(T
<TELL A .OBJ>
<COND (<FSET? .OBJ ,WEARBIT>
<TELL " (being worn)">)>)>)>
<COND (<AND <0? .LEVEL>
<SET AV <LOC ,WINNER>>
<FSET? .AV ,VEHBIT>
<NOT <FSET? .AV ,FURNITURE>>>
<TELL " (outside " THE .AV ")">)>
<CRLF>
<COND (<AND <SEE-INSIDE? .OBJ> <FIRST? .OBJ>>
<PRINT-CONT .OBJ .V? .LEVEL>)>>
<ROUTINE DESCRIBE-OBJECTS ("OPTIONAL" (V? <>))
<COND (<FIRST? ,HERE>
<PRINT-CONT ,HERE <SET V? <OR .V? ,VERBOSE>> -1>)>>
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (LOOK? <>) "AUX" V? (F? <>) STR L)
<SET V? <OR .LOOK? ,VERBOSE>>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<FSET ,HERE ,TOUCHBIT>
<SET V? T>
<SET F? T>)>
<COND (<EQUAL? <GETP ,HERE ,P?LINE>
,BALLROOM-LINE-C>
<TELL "Ballroom, ">)>
<TELL D ,HERE>
<SET L ,PLAYER-HIDING>
<COND (.L
<TELL ", hiding ">
<COND (<EQUAL? .L ,WINDOW-SEAT> <TELL "in ">)
(T <TELL "behind ">)>
<TELL THE .L>)
(<FSET? <SET L <LOC ,WINNER>> ,VEHBIT>
<TELL ", ">
<COND (<EQUAL? .L ,CHAIR ,GLOBAL-CHAIR>
<TELL "sitting in">)
(<OR <FSET? .L ,SURFACEBIT>
<EQUAL? .L ,GLOBAL-SOFA>>
<TELL "sitting on">)
(T <TELL "standing in">)>
<TELL " " THE .L>)>
<CRLF>
<COND (<OR .LOOK? <NOT ,SUPER-BRIEF>>
<COND (<AND <OUTSIDE? ,HERE>
<NOT <OUTSIDE? ,OHERE>>
<NOT <EQUAL? ,RAIN-STATE 0>>>
<COND (<EQUAL? ,RAIN-STATE 1>
<SETG SAW-RAIN-SLACK-OFF? T>
<TELL "Rain is falling in a light drizzle.">)
(ELSE <TELL "Rain falls in a downpour.">)>
<CRLF>)>
<COND (<AND .V? <APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>>
<RTRUE>)
(<AND .V? <SET STR <GETP ,HERE ,P?FDESC>>>
<TELL .STR CR>)
(<AND .V? <SET STR <GETP ,HERE ,P?LDESC>>>
<TELL .STR CR>)
(T <APPLY <GETP ,HERE ,P?ACTION> ,M-FLASH>)>
<COND (<NOT <==? ,HERE .L>>
<APPLY <GETP .L ,P?ACTION> ,M-LOOK>)>)>
<COND (<GETP ,HERE ,P?CORRIDOR> <CORRIDOR-LOOK>)>
T>
"Lengths:"
<CONSTANT UEXIT 1> "Uncondl EXIT:(dir TO rm) = rm"
<CONSTANT NEXIT 2> "Non EXIT: (dir string) = str-ing"
<CONSTANT FEXIT 3> "Fcnl EXIT: (dir PER rtn) = rou-tine, 0"
<CONSTANT CEXIT 4> "Condl EXIT: (dir TO rm IF f) = rm, f, str-ing"
<CONSTANT DEXIT 5> "Door EXIT: (dir TO rm IF dr IS OPEN) = rm, dr, str-ing, 0"
<CONSTANT REXIT 0>
<CONSTANT NEXITSTR 0>
<CONSTANT FEXITFCN 0>
<CONSTANT CEXITFLAG 1> "GETB"
<CONSTANT CEXITSTR 1> "GET"
<CONSTANT DEXITOBJ 1> "GETB"
<CONSTANT DEXITSTR 1> "GET"
<ROUTINE FIRSTER (OBJ LEVEL)
<COND (<==? .OBJ ,WINNER>
<TELL ,YOU-ARE "carrying:" CR>)
(<NOT <IN? .OBJ ,ROOMS>>
<COND (<G? .LEVEL 0>
<TELL <GET ,INDENTS .LEVEL>>)>
<COND (<AND <FSET? .OBJ ,SURFACEBIT>
<NOT <EQUAL? .OBJ ,WINDOW-SEAT>>>
<TELL "Sitting on " THE .OBJ " can be seen:" CR>)
(<FSET? .OBJ ,PERSON>
<TELL CD .OBJ " is holding:" CR>)
(ELSE
<TELL CTHE .OBJ
" contains:" CR>)>)>>
<ROUTINE GONE-CRAZY ()
<TELL
"Murder or no murder, this gets you arrested for sure!" CR>
<FINISH>>
<GLOBAL OHERE <>>
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" F WT VAL (INSIDE? <>))
#DECL ((RM) OBJECT)
<COND (,DUFFY-SNARFED
<IRON-GRIP>
<RTRUE>)>
<PLAYER-GETS-UP>
<COND (<AND <G? ,RAIN-STATE 0> <OUTSIDE? .RM>>
<COND (<OUTSIDE? ,HERE>
<TELL
"It's">)
(T
<SET INSIDE? T>
<TELL
"You go outside, where it's">)>
<TELL
" dark and cloudy, and the territory is unfamiliar." CR>
<COND (.INSIDE? <CRLF>)
(<NOT <SET VAL <INT-WAIT 2>>>
<TELL "You stop." CR>
<RTRUE>)
(<OR <==? .VAL ,M-FATAL>
,DUFFY-SNARFED>
<RTRUE>)
(ELSE
<TELL "You finally get there." CR CR>)>)>
<MOVE-PLAYER .RM>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (.V? <V-FIRST-LOOK>)>>
<ROUTINE MOVE-PLAYER (RM)
<SETG OHERE ,HERE>
<MOVE ,PLAYER .RM>
<SETG HERE .RM>
<WHERE-UPDATE ,PLAYER>>
<ROUTINE HACK-HACK (STR)
<COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT-HERE ,PRSO>)
(T
<TELL .STR " " THE ,PRSO <PICK-ONE ,HO-HUM> CR>)>>
<GLOBAL HO-HUM
<LTABLE 0
" doesn't help."
" has no effect.">>
<ROUTINE HELD? (OBJ "OPTIONAL" (CONT <>))
<COND (<NOT .CONT> <SET CONT ,WINNER>)>
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ .CONT>
<RTRUE>)
(<EQUAL? <LOC .OBJ> ,ROOMS ,GLOBAL-OBJECTS>
<RFALSE>)
(T
<HELD? <LOC .OBJ>>)>>
<ROUTINE IDROP ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL CD ,PRSO " wouldn't enjoy that." CR>
<RFALSE>)
(<AND <NOT <IN? ,PRSO ,WINNER>>
<NOT <IN? <LOC ,PRSO> ,WINNER>>>
<TELL ,YOU-ARENT "carrying ">
<TELL-PRSO>
<RFALSE>)
(<AND <NOT <IN? ,PRSO ,WINNER>>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL-CLOSED>
<RFALSE>)
(T
<FCLEAR ,PRSO ,WEARBIT>
<MOVE ,PRSO ,HERE ;<LOC ,WINNER>>
<RTRUE>)>>
<GLOBAL INDENTS
<TABLE ""
" "
" "
" "
" "
" ">>
<GLOBAL FUMBLE-NUMBER 7>
;<GLOBAL FUMBLE-PROB 8>
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" CNT OBJ)
#DECL ((VB) <OR ATOM FALSE> (CNT) FIX (OBJ) OBJECT)
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<TELL-YOU-CANT "take " <>>
<TELL-PRSO>)>
<RFALSE>)
(<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
<COND (.VB
<COND (<G? <WEIGHT ,PRSO> ,LOAD-ALLOWED>
<TELL "It's too heavy to carry">)
(T
<TELL "Your load's too heavy">)>
<TELL "." CR>)>
<RFATAL>)
(<G? <SET CNT <CCOUNT ,WINNER>> ,FUMBLE-NUMBER>
<COND (.VB
<TELL-YOU-CANT "carry that many things at once">)>
<RFATAL>)
(T
<MOVE ,PRSO ,WINNER>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<FCLEAR ,PRSO ,INVISIBLE>
<RTRUE>)>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT <FSET? .X ,WEARBIT>>
<SET CNT <+ .CNT 1>>)>
<COND (<NOT <SET X <NEXT? .X>>>
<RETURN>)>>)>
.CNT>
<ROUTINE NOT-HERE (OBJ)
<SETG P-WON <>>
<TELL ,YOU-CANT-SEE THE .OBJ>
<TELL-HERE>>
<GLOBAL YOU-CANT-SEE "You can't see ">
<ROUTINE PRINT-CONT (OBJ "OPTIONAL" (V? <>) (LEVEL 0)
"AUX" Y 1ST? AV (STR <>) (PV? <>) (INV? <>))
#DECL ((OBJ) OBJECT (LEVEL) FIX)
<COND (<NOT <SET Y <FIRST? .OBJ>>> <RTRUE>)>
<COND (<AND <SET AV <LOC ,WINNER>>
<FSET? .AV ,VEHBIT>
<OR <NOT <FSET? .AV ,FURNITURE>>
<FSET? .AV ,OPENBIT>>>
T)
(ELSE <SET AV <>>)>
<SET 1ST? T>
<COND (<EQUAL? ,WINNER .OBJ <LOC .OBJ>>
<SET INV? T>)
(ELSE
<REPEAT ()
<COND (<NOT .Y> <RETURN <NOT .1ST?>>)
(<==? .Y .AV> <SET PV? T>)
(<==? .Y ,WINNER>)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<NOT <FSET? .Y ,TOUCHBIT>>
<OR ;<APPLY <GETP .Y ,P?DESCFCN> ,M-OBJDESC>
<SET STR <GETP .Y ,P?FDESC>>>>
<COND (<NOT <FSET? .Y ,NDESCBIT>>
<SET 1ST? <>>
<SET LEVEL 0>
<COND (.STR
<TELL .STR CR>
<SET STR <>>
<COND (<FSET? .Y ,PERSON> <THIS-IS-S-HE .Y>)
(T <THIS-IS-IT .Y>)>)>)>
<COND (<AND <SEE-INSIDE? .Y>
<NOT <GETP <LOC .Y> ,P?DESCFCN>>
<FIRST? .Y>>
<PRINT-CONT .Y .V? 0>)>)>
<SET Y <NEXT? .Y>>>)>
<SET Y <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .Y>
<COND (<AND .PV? .AV <FIRST? .AV>>
<PRINT-CONT .AV .V? .LEVEL>)>
<RETURN <NOT .1ST?>>)
(<EQUAL? .Y .AV ,PLAYER>)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<OR .INV?
<FSET? .Y ,TOUCHBIT>
<NOT <GETP .Y ,P?FDESC>>>>
<COND (<NOT <FSET? .Y ,NDESCBIT>>
<COND (.1ST?
<COND (<FIRSTER .OBJ .LEVEL>
<COND (<L? .LEVEL 0> <SET LEVEL 0>)>)>
<SET LEVEL <+ 1 .LEVEL>>
<SET 1ST? <>>)>
<DESCRIBE-OBJECT .Y .V? .LEVEL>)
(<AND <FIRST? .Y> <SEE-INSIDE? .Y>>
<PRINT-CONT .Y .V? .LEVEL>)>)>
<SET Y <NEXT? .Y>>>>
<ROUTINE PRINT-CONTENTS (OBJ "OPTIONAL" (START <>) (NOT-OBJ <>)
"AUX" F N (1ST? T))
#DECL ((OBJ) OBJECT (F N) <OR FALSE OBJECT>)
<COND (<SET F <FIRST? .OBJ>>
<REPEAT ()
<SET N <NEXT? .F>>
<COND (<AND <NOT <FSET? .F ,INVISIBLE>>
<NOT <EQUAL? .F .NOT-OBJ>>>
<COND (.1ST?
<COND (.START <TELL .START>)>
<SET 1ST? <>>)
(ELSE
<TELL ", ">
<COND (<NOT .N> <TELL "and ">)>)>
<COND (<FSET? .F ,PERSON>
<TELL D .F>)
(T
<TELL A .F>)>
<COND (<FSET? .F ,PERSON> <THIS-IS-S-HE .F>)
(T <THIS-IS-IT .F>)>)>
<SET F .N>
<COND (<NOT .F>
<RETURN <NOT .1ST?>>)>>)>>
<GLOBAL QCONTEXT <>>
<GLOBAL QCONTEXT-ROOM <>>
<ROUTINE ROOM-CHECK ()
<COND (<IN? ,PRSO ,ROOMS>
<COND (<EQUAL? ,PRSO ,HERE ,GLOBAL-HERE>
<PERFORM ,PRSA ,GLOBAL-ROOM ,PRSI>
<RTRUE>)
(T
<TELL ,YOU-ARENT "in that place!" CR>
<RTRUE>)>)
(<OR <EQUAL? ,PRSO ,PSEUDO-OBJECT>
<EQUAL? <META-LOC ,PRSO> ,HERE ,GLOBAL-OBJECTS>
<GLOBAL-IN? ,PRSO ,HERE>>
<RFALSE>)
(T
<NOT-HERE ,PRSO>)>>
<ROUTINE META-LOC (OBJ)
<COND (<AND <EQUAL? .OBJ ,PLAYER>
<FSET? <LOC .OBJ> ,VEHBIT>>
,HERE)
(ELSE
<REPEAT ()
<COND (<NOT .OBJ> <RFALSE>)
(<EQUAL? .OBJ ,GLOBAL-OBJECTS ,LOCAL-GLOBALS>
<RETURN .OBJ>)>
<COND (<IN? .OBJ ,ROOMS>
<RETURN .OBJ>)
(ELSE
<SET OBJ <LOC .OBJ>>)>>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<AND <NOT <FSET? .OBJ ,INVISIBLE>>
<OR <FSET? .OBJ ,TRANSBIT> <FSET? .OBJ ,OPENBIT>>>>
"WEIGHT: Get sum of SIZEs of supplied object, recursing to the nth level."
<ROUTINE WEIGHT
(OBJ "AUX" CONT (WT 0))
#DECL ((OBJ) OBJECT (CONT) <OR FALSE OBJECT> (WT) FIX)
<COND (<FSET? .OBJ ,WEARBIT> 0)
(T
<COND (<SET CONT <FIRST? .OBJ>>
<REPEAT ()
<SET WT <+ .WT <WEIGHT .CONT>>>
<COND (<NOT <SET CONT <NEXT? .CONT>>>
<RETURN>)>>)>
<+ .WT <GETP .OBJ ,P?SIZE>>)>>
<GLOBAL WHO-CARES
<LTABLE 0
" doesn't appear interested"
" doesn't care"
" lets out a loud yawn"
" seems to be getting impatient">>
<GLOBAL YUKS
<LTABLE 0
"That's ridiculous!"
"Nuts!"
"What a screwball!"
"You're off your rocker!"
"You can't be serious!">>
" "
"SUBTITLE REAL VERBS"
<ROUTINE PRE-ACCUSE ()
<COND (<NOT ,PRSI>
<SETG PRSI ,GLOBAL-MURDER>)>
<COND (<AND <EQUAL? ,PRSI ,GLOBAL-MURDER>
<FSET? ,CORPSE ,INVISIBLE>>
<TELL "Nothing's dead here but your head!" CR>)
(<NOT <EQUAL? ,PRSI ,GLOBAL-MURDER ,GLOBAL-EMBEZZLEMENT>>
<TELL "What an accusation!" CR>)
(<NOT <FSET? ,PRSO ,PERSON>>
<TELL "Sure! \"Quick, Sergeant! Arrest that "
D ,PRSO "!\"" CR>)>>
<ROUTINE V-ACCUSE ()
<TELL CD ,PRSO " shrugs off your accusation." CR>>
;<ROUTINE PRE-SANALYZE ()
<PERFORM ,V?ANALYZE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-ANALYZE ()
<COND (<TELL
,YOU-SHOULD "leave these tasks to those who can do them best: the police.">
<COND (<NOT <FSET? ,WINNER ,TOLD>>
<TELL
" Perhaps you should call them if you wish assistance.">)>
<CRLF>)>>
<ROUTINE V-ANSWER ()
<TELL "No one was waiting for your answer." CR>
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<RTRUE>>
<ROUTINE V-REPLY ()
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "No one's knocking at ">
<TELL-PRSO>)
(T <TELL ,TOO-BAD THE ,PRSO " doesn't care." CR>)>>
<ROUTINE PRE-ARREST ()
<COND (<EQUAL? ,WINNER ,PLAYER>
<TELL
"A citizen's arrest, eh? Those only happen in the movies. "
,HAVE-TO "convince " THE ,DETECTIVE " to arrest someone." CR>)>>
<ROUTINE V-ARREST ()
<RTRUE>>
<ROUTINE PRE-ASK-ABOUT ()
<COND (<NOT <FSET? ,PRSO ,PERSON>>
<TELL "Talking to " A ,PRSO " again, huh?" CR>)
(<EQUAL? ,PRSO ,ME>
<TELL "Talking to yourself, again, huh?" CR>)
(<NOT <IN? ,PRSO ,HERE>>
<TELL "You shouldn't shout: " HE/SHE ,PRSO "'s not">
<TELL-HERE>)
(ELSE
<SETG QCONTEXT ,PRSO>
<SETG QCONTEXT-ROOM ,HERE>
<RFALSE>)>>
<ROUTINE INTERVIEW-SELF ()
<TELL "Interviewing yourself again, eh?" CR>>
<ROUTINE V-ASK-ABOUT ()
<COND (<==? ,PRSO ,PLAYER>
<INTERVIEW-SELF>)
(<NOT <FSET? ,PRSO ,PERSON>>
<TELL
"I've known odd reporters, but none of them ever
tried to talk to " A ,PRSO "!" CR>)
(T
<TELL CD ,PRSO " doesn't seem to know about that." CR>)>>
<ROUTINE PRE-ASK-CONTEXT-ABOUT ("AUX" P)
<COND (<AND ,QCONTEXT
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>>
<PERFORM ,V?ASK-ABOUT ,QCONTEXT ,PRSO>
<RTRUE>)
;(<SET P <FIND-FLAG ,HERE ,PERSON ,WINNER>>
<PERFORM ,V?ASK-ABOUT .P ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-CONTEXT-ABOUT ()
<TELL-ISNT-ANYONE>>
<ROUTINE TELL-ISNT-ANYONE ()
<TELL ,YOU-ARENT "talking to anyone." CR>>
<ROUTINE V-ASK-FOR ()
<COND (<AND <FSET? ,PRSO ,PERSON>
<NOT <==? ,PRSO ,PLAYER>>>
<TELL CD ,PRSO>
<COND (<NOT <IN? ,PRSO ,HERE>>
<TELL ,ISNT-HERE CR>)
(<IN? ,PRSI ,PRSO>
<TELL " refuses, somewhat politely." CR>)
(T
<TELL " doesn't have that." CR>)>)
(T <TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE PRE-ASK-CONTEXT-FOR ("AUX" P)
<COND (<AND <FSET? <SET P <LOC ,PRSO>> ,PERSON>
<IN? .P ,HERE>>
<PERFORM ,V?ASK-FOR .P ,PRSO>
<RTRUE>)
(<AND ,QCONTEXT
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>>
<PERFORM ,V?ASK-FOR ,QCONTEXT ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-CONTEXT-FOR ()
<TELL-ISNT-ANYONE>>
<ROUTINE V-ATTACK () <IKILL>>
<ROUTINE V-BRUSH ()
<TELL
"\"Cleanliness is next to Godliness,\" but in this case it seems to be
next to Impossible." CR>>
<ROUTINE V-CALL-LOSE ()
<TELL ,YOU-MUST "use a verb." CR>>
<ROUTINE V-$CALL ("AUX" PER (MOT <>) (HERE? <>))
<COND (<SET PER <CHARACTERIZE? ,PRSO>>
<COND (<IN-MOTION? .PER> <SET MOT T>)>
<COND (<OR <SET HERE? <==? <META-LOC .PER> ,HERE>>
<NEARBY? .PER>>
<TELL CD .PER>
<COND (<AND ,FLEEING?
<EQUAL? .PER ,MICHAEL ,ALICIA>
<IN-MOTION? .PER>>
<TELL-NO-GRAB>)
(<GRAB-ATTENTION .PER>
<COND (<OR .MOT <NOT .HERE?>>
<COND (.MOT <TELL " stops and">)>
<TELL " turns toward you.">)
(ELSE
<TELL ,LISTENING>)>
<CRLF>)
(T
<TELL-NO-GRAB>)>)
(T
<SETG P-WON <>>
<TELL ,YOU-DONT "see " D .PER>
<TELL-HERE>)>)
(T <V-CALL-LOSE>)>>
<ROUTINE TELL-NO-GRAB ()
<TELL ,IGNORES-YOU " or doesn't hear you." CR>>
<GLOBAL LISTENING " is listening.">
<GLOBAL YOU-DONT "You don't ">
<ROUTINE THERE-DOESNT-SEEM () <TELL "There doesn't seem to be ">>
<ROUTINE PRE-PHONE ()
<COND (,PLAYER-HIDING
<PLAYER-EMERGES>
<RFALSE>)>>
<ROUTINE V-PHONE ("AUX" PER)
<COND (<NOT <GLOBAL-IN? ,TELEPHONE ,HERE>>
<THERE-DOESNT-SEEM>
<TELL A ,TELEPHONE>
<TELL-HERE>)
(<AND <FSET? ,PRSO ,PERSON>
<SET PER <CHARACTERIZE ,PRSO>>
<NEARBY? .PER>>
<PERFORM ,V?$CALL ,PRSO>
<RTRUE>)
(<AND ,PRSI <NOT <==? ,PRSI ,TELEPHONE>>>
<TELL
,TOO-BAD THE ,PRSI " isn't a telephone." CR>)
(<==? ,PRSO ,INTNUM>
<DISABLE <INT I-HANG-UP>>
<COND (<AND <EQUAL? ,P-EXCHANGE 0>
<EQUAL? ,P-NUMBER 0>>
<TELL
"You dial the operator, who suggests you dial 911." CR>)
(<AND <EQUAL? ,P-EXCHANGE 0>
<EQUAL? ,P-NUMBER 411>>
<TELL
"The information operator, in a honeyed voice, suggests you consult
your directory if you need a number." CR>)
(<AND <EQUAL? ,P-EXCHANGE 0>
<EQUAL? ,P-NUMBER 911>>
<PERFORM ,V?PHONE ,POLICE>
<RTRUE>)
(<AND <EQUAL? ,P-EXCHANGE 555>
<EQUAL? ,P-NUMBER 9009>>
<PERFORM ,V?PHONE ,COSTUME-SHOP>)
(<PROB 50>
<TELL-NO-ANSWER>)
(<PROB 50>
<TELL
"The telephone is answered. \"Hello? Hello? Hey, what is this, a crank call?\"
The telephone hangs up." CR>)
(T
<TELL "You get a busy signal." CR>)>)
(<IN? ,PRSO ,ROOMS>
<TELL-YOU-CANT "call another room">)
(<NOT <FSET? ,PRSO ,PERSON>>
<TELL ,TOO-BAD THE ,PRSO " has no telephone." CR>)
(<IN? ,PRSO ,HERE>
<TELL CD ,PRSO " is right here!" CR>)
(T
<TELL "There's no sense in phoning ">
<TELL-PRSO>)>>
<ROUTINE TELL-ALREADY-ARE ()
<TELL "You already are." CR>>
<ROUTINE V-CLIMB-ON ()
<COND (<AND <FSET? ,PRSO ,FURNITURE> <FSET? ,PRSO ,VEHBIT>>
<COND (<IN? ,PLAYER ,PRSO>
<TELL-ALREADY-ARE>)
(T
<MOVE ,PLAYER ,PRSO>
<TELL
,YOU-ARE "now sitting on ">
<TELL-PRSO>)>)
(<FSET? ,PRSO ,FURNITURE>
<TELL "This isn't the kind of thing to sit on!" CR>)
(T
<TELL-YOU-CANT
"climb onto " <>>
<TELL-PRSO>)>>
<ROUTINE V-CLIMB-UP (DIR "OPTIONAL" (OBJ <>) "AUX" X)
#DECL ((DIR) FIX (OBJ) <OR ATOM FALSE> (X) TABLE)
<COND (<GETPT ,HERE .DIR>
<DO-WALK .DIR>
<RTRUE>)
(<NOT .OBJ>
<TELL-YOU-CANT ,GO-THAT-WAY>)
(ELSE <TELL <PICK-ONE ,YUKS> CR>)>>
<GLOBAL GO-THAT-WAY "go that way">
<ROUTINE TELL-YOU-CANT (STR "OPTIONAL" (DONE T))
<TELL "You can't " .STR>
<COND (.DONE <TELL "." CR>)>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<AND <FSET? ,PRSO ,FURNITURE> <FSET? ,PRSO ,VEHBIT>>
<V-CLIMB-ON>
<RTRUE>)
(T <V-CLIMB-UP ,P?DOWN>)>>
<ROUTINE V-CLIMB-FOO () <V-CLIMB-UP ,P?UP T>>
<ROUTINE V-CLOSE ()
<COND (<NOT <OR <FSET? ,PRSO ,CONTBIT>
<FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,WINDOWBIT>>>
<TELL-MORE-CLEVER>)
(<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,WINDOWBIT>>
<COND (<FSET? ,PRSO ,OPENBIT>
<COND (<FSET? ,PRSO ,RMUNGBIT>
<TELL
"It won't stay closed. The latch is broken." CR>)
(T
<FCLEAR ,PRSO ,OPENBIT>
<TELL
"Okay, " THE ,PRSO " is now closed." CR>)>)
(T <TELL ,ITS-ALREADY "closed." CR>)>)
(<AND <NOT <FSET? ,PRSO ,SURFACEBIT>>
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
<OPEN-CLOSE>)
(ELSE
<TELL-YOU-CANT "close " <>>
<TELL-PRSO>)>>
<ROUTINE TELL-UNLOCK-IT (OBJ)
<THIS-IS-IT .OBJ>
<TELL ,HAVE-TO "unlock " THE .OBJ " first." CR>>
<ROUTINE OPEN-CLOSE ()
<COND (<VERB? CLOSE>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "Closed." CR>)
(T <TELL ,ITS-ALREADY "closed." CR>)>)
(ELSE
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL ,ITS-ALREADY "open." CR>)
(<FSET? ,PRSO ,LOCKED>
<TELL-UNLOCK-IT ,PRSO>)
(<FSET? ,PRSO ,RMUNGBIT>
<TELL-YOU-CANT "open it. The latch is broken">)
(T
<FSET ,PRSO ,OPENBIT>
<COND (<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,WINDOWBIT>
<IN? ,WINNER ,PRSO>>
<TELL
"Okay, " THE ,PRSO " is now open." CR>)
(<OR <NOT <FIRST? ,PRSO>><FSET? ,PRSO ,TRANSBIT>>
<TELL "Opened." CR>)
(T
<TELL "You open " THE ,PRSO " and see ">
<PRINT-CONTENTS ,PRSO>
<TELL "." CR>)>)>)>>
<ROUTINE PRE-COMPARE ()
<COND (<AND <NOT ,PRSI>
<==? 1 <GET ,P-PRSO 0>>>
<TELL "Oops! Try typing \"Compare it to (something).\"" CR>
<RTRUE>)
(<==? 2 <GET ,P-PRSO 0>>
<PUT ,P-PRSO 0 1>
<PERFORM ,PRSA <GET ,P-PRSO 1> <GET ,P-PRSO 2>>
<RTRUE>)>>
<ROUTINE V-COMPARE ()
<COND (<==? ,PRSO ,PRSI> <TELL "They're the same thing!" CR>)
(T <TELL "They're not a bit alike." CR>)>>
<ROUTINE V-CURSES ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"Insults like that won't help you solve the case." CR>)
(T
<TELL <PICK-ONE ,YUKS> CR>)>)
(T
<TELL <PICK-ONE ,OFFENDED> CR>)>>
<GLOBAL OFFENDED
<LTABLE 0
"You ought to be ashamed of yourself!"
"Hey, save that talk for the locker room!"
"Step outside and say that!"
"So's your old man!">>
<ROUTINE V-MUNG ()
<COND (<AND <FSET? ,PRSO ,DOORBIT> <NOT ,PRSI>>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL
"You'd fly through the open door if you tried." CR>)
(<FSET? ,PRSO ,LOCKED>
<TELL "Oof! All you get is a sore shoulder." CR>)
(T <TELL "Why don't you just open it instead?" CR>)>)
(<NOT <FSET? ,PRSO ,PERSON>>
<HACK-HACK ,TRYING-DESTROY>)
(<OR <NOT ,PRSI>
<NOT <FSET? ,PRSI ,WEAPONBIT>>>
<TELL ,TRYING-DESTROY THE ,PRSO " with ">
<COND (<NOT ,PRSO>
<TELL "your bare hands is suicidal.">)
(T
<TELL A ,PRSI " is silly.">)>
<CRLF>)
(T <TELL-YOU-CANT "do that">)>>
<GLOBAL TRYING-DESTROY "Trying to destroy">
<ROUTINE V-DROP ()
<COND (<IDROP>
<TELL "Okay, " THE ,PRSO " is now on the ">
<COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
<TELL "ground">)
(T <TELL "floor">)>
<TELL "." CR>)>>
<ROUTINE V-DRINK ()
<V-EAT>>
<ROUTINE V-EAT ("AUX" (EAT? <>) (DRINK? <>))
#DECL ((NOBJ) <OR OBJECT FALSE> (EAT? DRINK?) <OR ATOM FALSE>)
<COND (<SET EAT? <FSET? ,PRSO ,FOODBIT>>
<COND (<IN? ,PRSO ,WINNER>
<COND (<AND <VERB? DRINK> <G? ,DRINK-COUNT 2>>
<TELL
"Seems that you've had too much to drink already!" CR>)
(ELSE
<TELL
"Mmm. That really hit the spot." CR>)>)
(ELSE
<TELL ,YOU-DONT-HAVE "that." CR>)>)
(<SET DRINK? <FSET? ,PRSO ,DRINKBIT>>
<PERFORM ,V?DRINK ,PRSO>
<RTRUE>)
(ELSE
<TELL
"Weren't the hors d'oeuvres enough for you?" CR>)>>
<ROUTINE V-ENTER ()
<DO-WALK ,P?IN>
<RTRUE>>
%<COND (<NOT <GASSIGNED? PREDGEN>>
'<ROUTINE V-ESCAPE () <QUITTER <ASCII 7> ,INCHAN>>)>
;<ROUTINE PRE-THROUGH () ;"WALK WITH => FOLLOW"
<COND (<FSET? ,PRSO ,PERSON> <PERFORM ,V?FOLLOW ,PRSO> <RTRUE>)>>
<ROUTINE V-THROUGH ("AUX" RM DIR)
<COND (<IN? ,PRSO ,ROOMS>
<COND (<==? ,PRSO <META-LOC ,PLAYER>>
<TELL-ALREADY-ARE>)
(<SET DIR <DIR-FROM ,HERE ,PRSO>>
<DO-WALK .DIR>
<RTRUE>)
(<OUTSIDE? ,HERE>
<TELL
"It's dark and confusing out here, you'll have to use directions." CR>)
(ELSE
<PLAYER-GETS-UP>
<ESTABLISH-GOAL ,PLAYER ,PRSO>
<V-CONTINUE>
<RTRUE>)>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,LOCKED>
<TELL-LOCKED>)
(<SET RM <DOOR-ROOM ,HERE ,PRSO>>
<OPEN-DOOR ,PRSO>
<GOTO .RM>)
(T <TELL
"Sorry, but the \"" D ,PRSO "\" must be somewhere else." CR>)>)
(<FSET? ,PRSO ,VEHBIT>
<TELL ,YOU-ARE>
<COND (<IN? ,PLAYER ,PRSO>
<TELL "already">)
(T
<SETG PLAYER-HIDING <>>
<MOVE ,PLAYER ,PRSO>
<TELL "now">)>
<TELL " in ">
<TELL-PRSO>)
(<FSET? ,PRSO ,PERSON>
<TELL "A revolting idea." CR>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL "You hit your head against " THE ,PRSO
" as you try it." CR>)
(<IN? ,PRSO ,WINNER>
<TELL ,YOU-MUST "think you're a contortionist!" CR>)
(ELSE <TELL <PICK-ONE ,YUKS> CR>)>>
<GLOBAL YOU-MUST "You must ">
<ROUTINE V-CONTINUE ("AUX" GT OL WHERE OS OI GF DIR)
<SET GT <GET ,GOAL-TABLES ,PLAYER-C>>
<COND (<GET .GT ,GOAL-S>
<SET GF <GET .GT ,GOAL-F>>
<TELL
"(On your way to " THE .GF ".)" CR>
<SET OL ,HERE>
<SET OI <GET .GT ,GOAL-I>>
<FOLLOW-GOAL ,PLAYER>
<SET WHERE ,HERE>
<COND (<NOT <EQUAL? .OL .WHERE>>
<SET DIR <DIR-FROM .OL .WHERE>>
<MOVE ,PLAYER .OL>
<SETG HERE .OL>
<SET OS <GET .GT ,GOAL-S>>
<DO-WALK .DIR>
<PUT .GT ,GOAL-S .OS>
<COND (<EQUAL? ,HERE .OL>
<PUT .GT ,GOAL-I .OI>)>
<COND (<EQUAL? ,HERE .GF>
<PUT .GT ,GOAL-S <>>)>)>
<RTRUE>)
(ELSE
<TELL
"I suppose you have a destination in mind, but I'm not sure what it is." CR>)>>
<ROUTINE PRE-EXAMINE ("AUX" OW)
<COND (<ROOM-CHECK> <RTRUE>)
(<NOT <EQUAL? ,WINNER ,PLAYER>>
<SET OW ,WINNER>
<SETG WINNER ,PLAYER>
<PERFORM ,V?SHOW ,PRSO .OW>
<SETG WINNER .OW>
<RTRUE>)>>
<ROUTINE V-EXAMINE ("AUX" T)
<COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT <EQUAL? <META-LOC ,PRSO> ,HERE ,LOCAL-GLOBALS>>>
<COND (<NEARBY? ,PRSO>
<TELL
"You ought to get closer, you'd get a better look." CR>)
(T
<NOT-HERE ,PRSO>
<RTRUE>)>)
(<SET T <GETP ,PRSO ,P?TEXT>>
<TELL .T CR>)
(<FSET? ,PRSO ,CONTBIT>
<V-LOOK-INSIDE ,P?IN>)
(ELSE
<TELL
"There's nothing special about ">
<TELL-PRSO>)>>
<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" T)
#DECL ((OBJ1 OBJ2) OBJECT (T) <OR FALSE TABLE>)
<COND (<SET T <GETPT .OBJ2 ,P?GLOBAL>>
<ZMEMQB .OBJ1 .T <- <PTSIZE .T> 1>>)>>
<ROUTINE PRE-FIND ("AUX" CHR NUM)
<COND (<AND <FSET? ,PRSO ,PERSON>
<SET CHR <GETP ,PRSO ,P?CHARACTER>>>
<SET NUM <GET <GET ,WHERE-TABLES <GETP ,WINNER ,P?CHARACTER>>
.CHR>>
<COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
<SETG PRSO <GET ,CHARACTER-TABLE .CHR>>)>
<COND (<AND <EQUAL? .CHR ,VERONICA-C>
<NOT <LOC ,CORPSE>>>
<COND (<==? ,WINNER ,PLAYER>
<TELL ,WHAT-DO-YOU-MEAN CR>
<RTRUE>)
(<OR <AND <==? ,WINNER ,MICHAEL>
,MICHAEL-SEEN-CORPSE?>
<AND <==? ,WINNER ,RICHARD>
,RICHARD-SEEN-CORPSE?>>
<TELL "\"" ,WHAT-DO-YOU-MEAN"\"" CR>
<RTRUE>)
(T <RFALSE>)>)>
<COND (<AND <NOT <==? ,WINNER ,PLAYER>>
<NOT <GRAB-ATTENTION ,WINNER>>>
<RTRUE>)>
<COND (<==? <META-LOC ,WINNER> <META-LOC ,PRSO>>
<COND (<==? ,WINNER ,PLAYER>
<TELL
"It sounds as though you need your vision checked." CR>)
(T
<TELL "\"Ahem...\"" CR>)>)
(<0? .NUM>
<COND (<==? ,WINNER ,PLAYER>
<TELL
"You haven't seen " HIM/HER ,PRSO " yet." CR>)
(T
<TELL
"\"I haven't seen " HIM/HER ,PRSO " tonight.\"" CR>)>)
(T
<SET NUM <- ,PRESENT-TIME .NUM>>
<COND (<==? ,WINNER ,PLAYER>
<TELL
"You last saw " HIM/HER ,PRSO " ">)
(T
<TELL
"\"I last saw " HIM/HER ,PRSO " ">)>
<COND (<AND <EQUAL? ,PRSO ,VERONICA>
<FSET? ,WINNER ,TOLD>>
<TELL "alive ">)>
<COND (<G? .NUM 120>
<TELL "a few hours">)
(<G? .NUM 80>
<TELL "an hour or two">)
(<G? .NUM 45>
<TELL "about an hour">)
(<G? .NUM 20>
<TELL "about half an hour">)
(<G? .NUM 10>
<TELL "about 15 minutes">)
(<G? .NUM 5>
<TELL "less than 10 minutes">)
(T
<TELL "just a few minutes">)>
<TELL " ago.">
<COND (<NOT <==? ,WINNER ,PLAYER>>
<TELL " I don't know where ">
<TELL HE/SHE ,PRSO " is now.\"">)>
<CRLF>)>
<RTRUE>)
(<AND <EQUAL? ,PRSO ,YOU>
<NOT <EQUAL? ,PRSI ,INTNUM>>>
<PERFORM ,PRSA ,PRSI>
<RTRUE>)
(<EQUAL? ,PRSO ,POLICE> <RFALSE>)
(<FSET? ,PRSO ,PERSON>
<COND (<NOT <EQUAL? ,WINNER ,PLAYER>>
<TELL "\"">)>
<TELL "I don't remember where ">
<COND (<EQUAL? ,PRSO ,ME ,PLAYER>
<TELL "you are">)
(T <TELL THE ,PRSO " is">)>
<TELL ".">
<COND (<NOT <EQUAL? ,WINNER ,PLAYER>>
<TELL "\"">)>
<CRLF>
<RTRUE>)
(<NOT <EQUAL? ,PLAYER ,WINNER>> <RFALSE>)
(<IN? ,PRSO ,ROOMS>
<COND (<==? ,PRSO ,HERE>
<TELL-ALREADY-ARE>)
(<FSET? ,PRSO ,TOUCHBIT>
<TELL ,YOU-SHOULD "remember!" CR>)
(T <TELL
"I thought reporters always knew their way around!" CR>)>)
(<AND <EQUAL? <META-LOC ,PRSO> ,HERE>
<NOT <EQUAL? ,PRSO ,PULSE>>
<NOT <SEE-INSIDE? <LOC ,PRSO>>>>
<NOT-HERE ,PRSO>)>>
<GLOBAL WHAT-DO-YOU-MEAN "What do you mean? She's dead!">
<GLOBAL RICHARD-SEEN-CORPSE? <>>
<GLOBAL MICHAEL-SEEN-CORPSE? <>>
<ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
<COND (<==? ,PRSO ,PLAYER>
<COND (<NOT <==? ,PLAYER ,WINNER>> <TELL "\"">)>
<TELL "You're right here, ">
<COND (<FSET? .L ,SURFACEBIT> <TELL "on">)
(T <TELL "in">)>
<TELL " " THE .L ".">
<COND (<NOT <==? ,PLAYER ,WINNER>> <TELL "\"">)>
<CRLF>)
(<NOT <EQUAL? ,PLAYER ,WINNER>>
<COND (<AND <EQUAL? ,PRSO ,YOU>
<EQUAL? ,PRSI ,INTNUM>>
<COND (<G? ,P-NUMBER ,PRESENT-TIME>
<TELL "\"I don't understand">)
(ELSE
<TELL
"\"I was ">
<COND (<OR <G? ,P-NUMBER 555>
<AND <G? ,P-NUMBER 480>
<NOT <EQUAL? ,WINNER ,ALICIA>>>>
<TELL "here at the party">)
(<AND <G? ,P-NUMBER 540>
<EQUAL? ,WINNER ,ALICIA>>
<TELL "on my way here">)
(ELSE
<TELL "at home">)>)>
<TELL ".\"" CR>)
(T
<TELL
"\"I thought reporters were resourceful.\"" CR>)>)
(<EQUAL? .L ,GLOBAL-OBJECTS>
<TELL
"You're the reporter, can't you find something as simple as that?" CR>)
(<IN? ,PRSO ,WINNER>
<TELL "You have it." CR>)
(<OR <IN? ,PRSO ,HERE>
<==? ,PRSO ,PSEUDO-OBJECT>
<GLOBAL-IN? ,PRSO ,HERE>>
<TELL "It's right">
<TELL-HERE>)
(<OR <FSET? ,PRSO ,INVISIBLE>
<NOT <EQUAL? <META-LOC ,PRSO> ,HERE>>>
<TELL "Well, it's not here, anyway." CR>)
(<FSET? .L ,PERSON>
<TELL CD .L " has it." CR>)
(<FSET? .L ,SURFACEBIT>
<TELL "It's on " THE .L "." CR>)
(<FSET? .L ,CONTBIT>
<TELL "It's in " THE .L "." CR>)
(ELSE
<TELL "You're certainly no investigative reporter!" CR>)>>
<ROUTINE V-FINGERPRINT ()
<COND (<OR <FSET? ,PRSO ,PERSON> <EQUAL? ,PRSO ,YOU ,ME>>
<COND (<EQUAL? ,WINNER ,DETECTIVE ,DUFFY>
<TELL "\"Everyone will be fingerprinted in due time.\"" CR>)
(ELSE
<TELL "Leave that to the police." CR>)>)
(T
<PERFORM ,V?ANALYZE ,PRSO ,GLOBAL-FINGERPRINTS>
<RTRUE>)>>
<ROUTINE V-FOLLOW ("AUX" CN CHR COR PCOR (L <>))
<COND (<==? ,PRSO ,PLAYER>
<TELL "It's not clear who you're talking to." CR>)
(<NOT <FSET? ,PRSO ,PERSON>>
<TELL
"How tragic to see a respected news writer stalking "
A ,PRSO "!" CR>)
(<AND <SET CHR <CHARACTERIZE? ,PRSO>>
<==? ,HERE <SET L <META-LOC .CHR>>>>
<TELL "You're in the same place as " D ,PRSO "!" CR>)
(<NOT .L>
<TELL "You seem to have lost track of " D ,PRSO "." CR>)
(<AND <IN-BALLROOM? .CHR>
<IN-BALLROOM? ,WINNER>>
<COND (<SET CN <DIR-FROM ,HERE .L>>
<DO-WALK .CN>)
(<SET CN <DIR-FROM ,HERE ,BALLROOM-5>>
<DO-WALK .CN>)
(ELSE
<TELL ,HAVE-TO "give a direction." CR>)>)
(<SET CN <DIR-FROM ,HERE .L>>
<DO-WALK .CN>)
(<AND <SET COR <GETP ,HERE ,P?CORRIDOR>>
<SET PCOR <GETP .L ,P?CORRIDOR>>
<NOT <==? <BAND .COR .PCOR> 0>>>
<SETG PRSO <COR-DIR ,HERE .L>>
<DO-WALK ,PRSO>)
(T
<TELL "You seem to have lost track of " D ,PRSO "." CR>)>>
<GLOBAL HAVE-TO "You'll have to ">
<ROUTINE OUTSIDE? (L)
<OR <EQUAL? <GETP .L ,P?LINE> ,OUTSIDE-LINE-C>
<EQUAL? .L ,WALKWAY ,BACK-PORCH>>>
<ROUTINE PRE-GIVE ()
<COND (<NOT <HELD? ,PRSO>>
<TELL
"That's easy for you to say, since you don't even have it." CR>)>>
<ROUTINE V-GIVE ()
<COND (<NOT <FSET? ,PRSI ,PERSON>>
<TELL-YOU-CANT "give " <>>
<TELL A ,PRSO " to " A ,PRSI "!" CR>)
(T <TELL CD ,PRSI " refuses your offer." CR>)>>
<ROUTINE PRE-SGIVE ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SGIVE ()
<RTRUE>>
<ROUTINE V-GOODBYE () <V-HELLO <>>>
<ROUTINE V-HANDCUFF ()
<COND (<IN? ,HANDCUFFS ,PLAYER>
<PERFORM ,V?TIE-WITH ,PRSO ,HANDCUFFS>
<RTRUE>)
(T <TELL ,YOU-DONT-HAVE THE ,HANDCUFFS "." CR>)>>
<ROUTINE V-HELLO ("OPTIONAL" (HELL T) "AUX" P)
<COND (<SET P <OR ,PRSO ,QCONTEXT ;<FIND-FLAG ,HERE ,PERSON ,WINNER>>>
<COND (<NOT <IN? .P ,HERE>>
<TELL-ISNT-HERE .P>)
(<FSET? .P ,PERSON>
<COND (.HELL
<TELL CD .P " nods at you." CR>)
(ELSE
<TELL
"\"Don't tell me you're leaving already!\"" CR>)>)
(ELSE
<TELL "Only nuts say \""
<COND (.HELL "Hello") (T "Good-bye")>
"\" to " A .P "." CR>)>)
(T <TELL "It's not clear who you're talking to." CR>)>>
<ROUTINE V-HELP ()
<COND (<NOT ,PRSO>
<TELL
"You'll find help in your manual." CR>)
(T
<TELL-SPECIFIC>)>>
<ROUTINE TELL-SPECIFIC ()
<TELL ,HAVE-TO "be more specific." CR>>
<ROUTINE PRE-HIDE ()
<COND (,PLAYER-HIDING <TELL-HIDING>)
(<INHABITED? ,HERE>
<TELL-YOU-CANT "hide when someone is watching you">)>>
<ROUTINE V-HIDE ()
<COND (,PRSO
<TELL "That's not a">)
(T
<TELL ,HAVE-TO "suggest a specific">)>
<TELL-HIDING-PLACE>>
<ROUTINE TELL-HIDING-PLACE ()
<TELL " hiding place." CR>>
<ROUTINE V-HIDE-INSIDE ()
<COND (,PLAYER-HIDING
<TELL-HIDING>)
(ELSE
<TELL-YOU-CANT "hide in " <>>
<TELL-PRSO>)>>
<ROUTINE TELL-PRSO () <TELL THE ,PRSO "." CR>>
<ROUTINE V-HIDE-BEHIND ()
<COND (,PLAYER-HIDING
<TELL-HIDING>)
(T
<TELL-YOU-CANT "hide behind " <>>
<TELL-PRSO>)>>
<ROUTINE TELL-HIDING ()
<TELL "You're already hiding. Are you getting scared?" CR>>
<ROUTINE V-KICK ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL "What terrible manners!" CR>)
(T <HACK-HACK "Kicking">)>>
<ROUTINE V-CUT ()
<COND (<NOT ,PRSI> <TELL "With your cutting wit, I suppose?" CR>)
(<AND <NOT <EQUAL? <META-LOC ,PRSO> ,HERE>>
<NOT <HELD? ,PRSO>>>
<TELL-ISNT-HERE ,PRSO>)
(<GETP ,PRSO ,P?CHARACTER>
<GONE-CRAZY>)
(<FSET? ,PRSO ,PERSON>
<TELL
"You think better of it and don't slice ">
<TELL-PRSO>)
(ELSE
<TELL "The result is unexciting." CR>)>>
<ROUTINE V-KILL ()
<IKILL>>
<ROUTINE IKILL ()
<COND (<NOT ,PRSO> <TELL "There's nothing here to kill." CR>)
(<AND <NOT ,PRSI> <FSET? ,PRSO ,WEAPONBIT>>
<TELL "You didn't say what to kill." CR>)
(<FSET? ,PRSO ,DOORBIT>
<FSET ,PRSO ,RMUNGBIT>
<TELL
"Hey, this isn't a TV crime show! You just broke the lock
beyond repair." CR>)
(<NOT <FSET? ,PRSO ,PERSON>>
<TELL
"Sure, destroy " THE ,PRSO ". Your manners are atrocious! I doubt you'll
ever be invited back." CR>)
(<NOT ,PRSI>
<COND (<EQUAL? ,PRSO ,DUFFY ,DETECTIVE>
<TELL
"That was a bad move. These officers are trained to defend themselves.
They do. You lose, and quickly." CR>
<GONE-CRAZY>)
(<PROB 50>
<TELL-WISE-UP>)
(T <TELL
"With all your ability (which is to say, nearly none), you kill " D ,PRSO
" with one lucky blow." CR>
<GONE-CRAZY>)>)
(<EQUAL? ,PRSO ,DUFFY ,DETECTIVE>
<TELL
"You've had better ideas tonight. With practiced ease, " D ,PRSO " wrests "
THE ,PRSI " from your grasp, slaps on the cuffs, and reads you your
rights." CR>
<GONE-CRAZY>)
(<PROB 50>
<TELL-WISE-UP>)
(T
<TELL
"With lethal facility, you use " THE ,PRSI " on " D ,PRSO ", who dies." CR>
<GONE-CRAZY>)>>
<ROUTINE TELL-WISE-UP ()
<TELL
"You think it over and think better of it." CR>>
<ROUTINE V-KISS ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"This isn't Hollywood; you can't go around kissing at random." CR>)
(T <TELL "What a (ahem!) strange idea!" CR>)>>
<ROUTINE TELL-NO-ANSWER ()
<TELL "There's no answer." CR>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<COND (<INHABITED? <DOOR-ROOM ,HERE ,PRSO>>
<TELL "Someone shouts \"Go away!\"" CR>)
(T <TELL-NO-ANSWER>)>)
(<FSET? ,PRSO ,WINDOWBIT>
<TELL-NO-ANSWER>)
(ELSE
<TELL "Why knock on " A ,PRSO "?" CR>)>>
<ROUTINE DOOR-ROOM (HERE OBJ "AUX" (P 0) L T O)
#DECL ((HERE OBJ O) OBJECT (P L) FIX)
<REPEAT ()
<COND (<0? <SET P <NEXTP .HERE .P>>>
<RFALSE>)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET T <GETPT .HERE .P>>
<SET L <PTSIZE .T>>
<COND (<AND <EQUAL? .L ,DEXIT>
<EQUAL? <GETB .T ,DEXITOBJ> .OBJ>>
<RETURN <GETB .T ,REXIT>>)>)>>>
;<ROUTINE V-LEAN ()
<TELL-YOU-CANT "do that">>
<ROUTINE V-STAND ("AUX" P)
<COND (,PLAYER-HIDING
<PLAYER-GETS-UP>
<RTRUE>)
(<OR <FSET? <LOC ,WINNER> ,SURFACEBIT>
<FSET? <LOC ,WINNER> ,FURNITURE>>
<MOVE ,WINNER ,HERE>
<SETG PLAYER-HIDING <>>
<TELL ,YOU-ARE "on your own feet again." CR>)
(T
<TELL-ALREADY-ARE>)>>
<ROUTINE PRE-LEAVE ()
<COND (,PRSO
<COND (<EQUAL? ,PRSO ,PARTY> <RFALSE>)
(<AND <FSET? ,PRSO ,PERSON>
<NOT <EQUAL? ,PRSO ,CORPSE>>>
<DO-WALK ,P?OUT>
<RTRUE>)
(<EQUAL? ,PRSO <META-LOC ,WINNER> ,GLOBAL-ROOM>
<DO-WALK ,P?OUT>
<RTRUE>)
(ELSE
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)>)>>
<ROUTINE V-LEAVE ()
<DO-WALK ,P?OUT>>
<ROUTINE V-LISTEN ()
<COND (<OR <NOT ,PRSO> <EQUAL? ,PRSO ,DISCUSSION>>
<COND (<AND <G? ,ARGUMENT-COUNT 0>
<EQUAL? ,HERE ,BALLROOM-9>>
<TELL
CTHE ,DISCUSSION " intensifies." CR>)
(ELSE
<TELL
"It's pretty one-sided." CR>)>)
(<FSET? ,PRSO ,PERSON>
<COND (<EQUAL? ,PRSO ,VERONICA>
<COND (<IN-MOTION? ,VERONICA>
<TELL-YOU-CANT
"quite catch what she's saying, but it sounds like it would blister paint">)
(ELSE
<TELL
"She is talking, as usual, about horses." CR>)>)
(<AND <G? ,ARGUMENT-COUNT 0>
<EQUAL? ,HERE ,BALLROOM-9>
<EQUAL? ,PRSO ,MICHAEL ,COL-MARSTON ,COCHRANE>>
<TELL
CD ,PRSO " is taking part in " A ,DISCUSSION "." CR>)
(ELSE
<TELL
"This conversation doesn't appear to be going anywhere, does it?" CR>)>)
(ELSE
<TELL ,TOO-BAD THE ,PRSO " makes no sound." CR>)>>
<ROUTINE TELL-MORE-CLEVER ()
<TELL
"You'd have to be more clever to do that to ">
<TELL-PRSO>>
<ROUTINE V-LOCK ()
<COND (<NOT <OR <FSET? ,PRSO ,CONTBIT>
<FSET? ,PRSO ,DOORBIT>>>
<TELL-MORE-CLEVER>)
(<OR <FSET? ,PRSO ,DOORBIT>
;<FSET? ,PRSO ,WINDOWBIT>
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL ,HAVE-TO "close it first." CR>)
(<FSET? ,PRSO ,LOCKED>
<TELL ,ITS-ALREADY "locked." CR>)
(<FSET? ,PRSO ,RMUNGBIT>
<TELL-YOU-CANT "lock it. The lock is broken">)
(<EQUAL? <GETP ,PRSO ,P?UNLOCK> ,ROOMS>
<TELL
"This door doesn't have a lock." CR>)
(<NOT <EQUAL? <GETP ,PRSO ,P?UNLOCK> ,HERE>>
<TELL-YOU-CANT "lock it from this side without a key">)
(T
<FSET ,PRSO ,LOCKED>
<TELL
"Okay, " THE ,PRSO " is now locked." CR>)>)
(T
<TELL-YOU-CANT "lock " <>>
<TELL-PRSO>)>>
<GLOBAL ITS-ALREADY "It's already ">
<ROUTINE V-LOOK ()
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS T>)>>
<ROUTINE V-LOOK-BEHIND ()
<TELL "There's nothing behind ">
<TELL-PRSO>>
<ROUTINE V-LOOK-DOWN ()
<COND (<==? ,PRSO ,ROOMS>
<COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
<TELL "There's mud and grass there, mostly." CR>)
(T
<TELL-BORING>)>)
(<==? ,PRSO ,HALLWAY>
<COND (<NOT <CORRIDOR-LOOK>>
<TELL "There's no one there." CR>)>)
(T <TELL-LONG-WEEK>)>>
<ROUTINE TELL-LONG-WEEK ()
<TELL "It has been a long week, hasn't it?" CR>>
<ROUTINE TELL-CLOSED ()
<TELL
,TOO-BAD THE ,PRSO " is closed." CR>>
<ROUTINE PRE-LOOK-INSIDE () <ROOM-CHECK>>
<ROUTINE V-LOOK-INSIDE (DIR "AUX" RM)
<COND (<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<COND (<SET RM <DOOR-ROOM ,HERE ,PRSO>>
<ROOM-PEEK .RM>)
(T <TELL
CTHE ,PRSO " is open, but you can't tell what's beyond it." CR>)>)
(ELSE
<TELL-CLOSED>)>)
(<FSET? ,PRSO ,WINDOWBIT>
<TELL-YOU-CANT "tell what's beyond " <>>
<TELL-PRSO>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<SEE-INSIDE? ,PRSO>
<COND (<AND <FIRST? ,PRSO> <PRINT-CONT ,PRSO>>
<RTRUE>)
(<FSET? ,PRSO ,SURFACEBIT>
<TELL
"There's nothing on ">
<TELL-PRSO>)
(T
<TELL
CTHE ,PRSO " is empty." CR>)>)
(ELSE
<TELL-CLOSED>)>)
(<FSET? ,PRSO ,PERSON>
<TELL "You forgot to bring your X-ray glasses." CR>)
(ELSE
<TELL-YOU-CANT "look " <>>
<COND (<==? .DIR ,P?IN>
<TELL "inside ">
<TELL-PRSO>)
(<==? .DIR ,P?OUT>
<TELL "outside ">
<TELL-PRSO>)
(ELSE
<TELL "inside that." CR>)>)>>
<ROUTINE ROOM-PEEK (RM "AUX" OHERE)
<SET OHERE ,HERE>
<COND (<SEE-INTO? .RM>
<SETG HERE .RM>
<TELL "You take a quick peek into " THE .RM ":" CR>
<COND (<NOT <DESCRIBE-OBJECTS T>>
<TELL-BORING>)>
<SETG HERE .OHERE>)>>
<ROUTINE SEE-INTO? (THERE "AUX" P L T O)
#DECL ((THERE O) OBJECT (P L) FIX)
<SET P 0>
<REPEAT ()
<COND (<0? <SET P <NEXTP ,HERE .P>>>
<TELL-CANT-FIND>
<RFALSE>)
(<EQUAL? .P ,P?IN ,P?OUT> T)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET T <GETPT ,HERE .P>>
<SET L <PTSIZE .T>>
<COND (<AND <==? .L ,UEXIT>
<==? <GETB .T ,REXIT> .THERE>>
<RTRUE>)
(<AND <==? .L ,DEXIT>
<==? <GETB .T ,REXIT> .THERE>>
<COND (<FSET? <GETB .T ,DEXITOBJ> ,OPENBIT>
<RTRUE>)
(T
<TELL
"The door to that room is closed." CR>
<RFALSE>)>)
(<AND <==? .L ,CEXIT>
<==? <GETB .T ,REXIT> .THERE>>
<COND (<VALUE <GETB .T ,CEXITFLAG>>
<RTRUE>)
(T
<TELL-CANT-FIND>
<RFALSE>)>)>)>>>
<ROUTINE TELL-CANT-FIND ()
<TELL-YOU-CANT "seem to find that room">>
<ROUTINE V-LOOK-ON ()
<COND (<FSET? ,PRSO ,SURFACEBIT>
<V-LOOK-INSIDE ,P?IN>)
(T
<TELL "There's no good surface on ">
<TELL-PRSO>)>>
<ROUTINE V-LOOK-OUTSIDE () <V-LOOK-INSIDE ,P?OUT>>
<ROUTINE V-LOOK-UNDER ()
<COND (<FSET? ,PRSO ,FURNITURE>
<TELL
"You twist your head to look under " THE ,PRSO " but find nothing." CR>)
(<FSET? ,PRSO ,PERSON>
<TELL "Nope. Nothing hiding under " D ,PRSO "." CR>)
(<EQUAL? <LOC ,PRSO> ,HERE ,LOCAL-GLOBALS ,GLOBAL-OBJECTS>
<TELL "There's nothing there but dust." CR>)
(T
<TELL "That's not a bit useful." CR>)>>
<ROUTINE V-LOOK-UP ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL <PICK-ONE ,YUKS> CR>)
(<NOT <==? ,PRSO ,ROOMS>>
<TELL-LONG-WEEK>)
(<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
<PERFORM ,V?EXAMINE ,WEATHER>
<RTRUE>)
(T
<TELL
"You see the ceiling. It's a nice ceiling. It's smoothly plastered, but
if you don't stop looking at it, people will think you're just
plastered." CR>)>>
<ROUTINE V-MAKE ()
<COND (<NOT ,PRSI>
<PERFORM ,V?MAKE ,PLAYER ,PRSO>)
(T
<TELL
"\"Eat, drink, and be merry,\" eh?" CR>)>>
<ROUTINE PRE-MOVE ()
<COND (<HELD? ,PRSO>
<TELL "Juggling isn't one of your talents." CR>)>>
<ROUTINE V-MOVE ()
<COND (<FSET? ,PRSO ,TAKEBIT>
<TELL
"Moving " THE ,PRSO " reveals nothing." CR>)
(T
<TELL-YOU-CANT "move " <>>
<TELL-PRSO>)>>
<ROUTINE V-OPEN ("AUX" F STR)
<COND (<NOT <OR <FSET? ,PRSO ,CONTBIT>
<FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,WINDOWBIT>>>
<TELL-MORE-CLEVER>)
(<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,WINDOWBIT>
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
<OPEN-CLOSE>)
(T
<TELL-YOU-CANT "open " <>>
<TELL-PRSO>)>>
<ROUTINE V-PICK () <TELL-YOU-CANT "pick that">>
;<ROUTINE V-PLAY ()
<TELL
"(Speaking of playing, you ought to try Infocom's other products.)" CR>>
<ROUTINE V-PUSH () <HACK-HACK "Pushing">>
<ROUTINE V-PUT-UNDER ()
<TELL "There's not enough room." CR>>
<ROUTINE PRE-PUT ()
<COND (<EQUAL? ,PRSO ,HANDCUFFS>
<PERFORM ,V?TIE-WITH ,PRSI ,HANDCUFFS>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL "You can't do that." CR>)>>
<ROUTINE V-PUT ()
<COND (<OR <FSET? ,PRSI ,OPENBIT>
<OPENABLE? ,PRSI>
<FSET? ,PRSI ,VEHBIT>> T)
(T
<TELL-YOU-CANT "do that">
<RTRUE>)>
<COND (<FSET? ,PRSI ,PERSON>
<TELL CD ,PRSI " won't let you." CR>)
(<AND <NOT <FSET? ,PRSI ,FURNITURE>>
<NOT <FSET? ,PRSI ,OPENBIT>>>
<TELL ,TOO-BAD THE ,PRSI " isn't open." CR>)
(<==? ,PRSI ,PRSO>
<TELL <PICK-ONE ,YUKS> CR>)
(<IN? ,PRSO ,PRSI>
<TELL
,TOO-BAD THE ,PRSO " is already in " THE ,PRSI "." CR>)
(<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<TELL "There's no room." CR>)
(<AND <NOT <HELD? ,PRSO>>
<NOT <ITAKE>>>
<RTRUE>)
(T
<MOVE ,PRSO ,PRSI>
<FCLEAR ,PRSO ,WEARBIT>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Okay." CR>)>>
<ROUTINE V-RAISE () <HACK-HACK "Playing in this way with">>
<ROUTINE V-RAPE ()
<COND (<FSET? ,PRSO ,PERSON>
<COND (<PROB 75>
<TELL
"Section 29A of the United States Criminal Code, whose provisions
come to your unhealthy mind, forbids it." CR>)
(T <GONE-CRAZY>)>)
(T <TELL "What a (ahem!) strange idea!" CR>)>>
<ROUTINE PRE-READ ("AUX" VAL)
<COND (<OUTSIDE? ,HERE>
<TELL "It's impossible to read in the dark." CR>)
(<AND ,PRSI
<NOT <FSET? ,PRSI ,TRANSBIT>>
<NOT <==? ,PRSI ,INTNUM>>> ;"? INTNUM?"
<TELL
,YOU-MUST "have a swell method of looking through " THE ,PRSI "." CR>)
(<EQUAL? <LOC ,PRSO> ,WINNER ,ROOMS> <>)
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT <SEE-INSIDE? <LOC ,PRSO>>>>
<NOT-HERE ,PRSO>)>>
<ROUTINE V-READ ()
<COND (<NOT <FSET? ,PRSO ,READBIT>>
<TELL-YOU-CANT "read " <>>
<TELL-PRSO>)
(<AND <NOT <IN? ,PRSO ,PLAYER>>
<FSET? <LOC ,PRSO> ,PERSON>>
<TELL "Trying to read over " D <LOC ,PRSO> "'s shoulder?" CR>)
(ELSE
<TELL <GETP ,PRSO ,P?TEXT> CR>)>>
<ROUTINE V-REVIVE ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL CD ,PRSO " doesn't need reviving." CR>)
(T <HACK-HACK "Trying to revive">)>>
<ROUTINE V-RING ()
<HACK-HACK "Ringing">>
<ROUTINE V-RUB () <HACK-HACK "Fiddling with">>
;<ROUTINE PRE-RUB-OVER ()
<PERFORM ,V?RUB ,PRSI ,PRSO>
<RTRUE>>
;<ROUTINE V-RUB-OVER ()
<TELL "You really can't expect that to help." CR>>
<ROUTINE V-SAY ("AUX" V)
<SETG QUOTE-FLAG <>>
<SETG P-CONT <>>
<TELL "Try instead: Michael, Tell me about Veronica." CR>>
<ROUTINE PRE-SEARCH () <ROOM-CHECK>>
<ROUTINE V-SEARCH ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL-REFUSES>)
(<AND <FSET? ,PRSO ,CONTBIT> <NOT <FSET? ,PRSO ,OPENBIT>>>
<TELL ,HAVE-TO "open it first." CR>)
(T <TELL "You find nothing unusual." CR>)>>
<ROUTINE PRE-SEARCH-OBJECT-FOR ("AUX" OBJ)
<COND (<ROOM-CHECK> <RTRUE>)>
<COND (<EQUAL? ,PRSO ,GLOBAL-ROOM ,GLOBAL-HERE>
<SETG PRSO ,HERE>)>
<RFALSE>>
<ROUTINE TELL-REFUSES ()
<TELL CD ,PRSO
" refuses to let you search " HIM/HER ,PRSO "." CR>>
<ROUTINE V-SEARCH-OBJECT-FOR ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL-REFUSES>)
(<AND <FSET? ,PRSO ,CONTBIT> <NOT <FSET? ,PRSO ,OPENBIT>>>
<TELL ,HAVE-TO "open " THE ,PRSO " first." CR>)
(<IN? ,PRSI ,PRSO>
<TELL "How observant you are! There "
<COND (<FSET? ,PRSI ,FEMALE> "she")
(<FSET? ,PRSI ,PERSON> "he")
(T "it")>
" is!" CR>)
(T <TELL ,YOU-DONT "find " THE ,PRSI " there." CR>)>>
<ROUTINE PRE-SHOW ()
<COND (<EQUAL? ,PRSO ,PRSI>
<TELL "Using a mirror, no doubt?" CR>)
(<AND <IN? ,PRSO ,DETECTIVE>
<NOT <EQUAL? ,PRSI ,DETECTIVE>>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(ELSE
<THIS-IS-S-HE ,PRSO>
<RFALSE>)>>
<ROUTINE V-SHOW ()
<COND (<==? ,PRSI ,PLAYER>
<TELL "Do you often talk to yourself?" CR>)
(<NOT <FSET? ,PRSI ,PERSON>>
<TELL "Don't wait for " THE ,PRSI " to applaud." CR>)
(T
<TELL CD ,PRSI <PICK-ONE ,WHO-CARES> "." CR>)>>
<ROUTINE PRE-SSHOW ()
<SETG P-MERGED T>
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSHOW () <RTRUE>>
<ROUTINE V-SIT ("AUX" F)
<COND (<AND <FSET? ,PRSO ,FURNITURE> <FSET? ,PRSO ,VEHBIT>>
<COND (<IN? ,PLAYER ,PRSO>
<TELL-ALREADY-ARE>)
(<SET F <FIRST? ,PRSO>>
<TELL "You might crush " THE .F "." CR>)
(T
<MOVE ,PLAYER ,PRSO>
<SETG PLAYER-HIDING <>>
<TELL
,YOU-ARE "now sitting on ">
<TELL-PRSO>)>)
(T
<TELL "That isn't something to sit on!" CR>)>>
<ROUTINE V-SLAP ()
<COND (<NOT <IN? ,PRSO ,HERE>>
<TELL "What " ,PRSO "?" CR>)
(<FSET? ,PRSO ,PERSON>
<TELL
CD ,PRSO " slaps you right back. It hurts, too." CR>)
(T
<TELL
"Your hand stings something fierce now!" CR>)>>
<ROUTINE V-SMELL ()
<COND (<FSET? ,PRSO ,PERSON>
<COND (<FSET? ,PRSO ,FEMALE> <TELL "She">)
(T <TELL "He">)>)
(T <TELL "It">)>
<TELL " smells just like " A ,PRSO "." CR>>
<ROUTINE PRE-TAKE ("AUX" (P <LOC ,PRSO>))
<COND (<OR <EQUAL? ,PRSO ,PULSE ,FAIRY-COSTUME ,NOT-ROPE>
<EQUAL? ,PRSO ,NOTEBOOK ,SALE-AGREEMENT ,TRUST-DOCUMENTS>>
<RFALSE>)
(<IN? ,PRSO ,WINNER> <TELL "You already have it." CR>)
(<AND <NOT ,PRSI>
<NOT <IN? ,PRSO ,GLOBAL-OBJECTS>>
<FSET? .P ,PERSON>
<NOT <EQUAL? .P ,CORPSE>>>
<PERFORM ,V?TAKE ,PRSO .P>
<RTRUE>)
(<AND <FSET? .P ,CONTBIT>
<NOT <FSET? .P ,OPENBIT>>
<NOT <FSET? .P ,PERSON>>>
<TELL-YOU-CANT "reach that">
<RTRUE>)
(,PRSI
<COND (<NOT <EQUAL? <META-LOC ,PRSI> ,HERE>>
<TELL-ISNT-HERE ,PRSI>)
(<NOT <==? ,PRSI .P>>
<TELL CTHE ,PRSI " doesn't have ">
<TELL-PRSO>)
(<AND <FSET? ,PRSI ,PERSON>
<NOT <EQUAL? ,PRSI ,CORPSE ,VERONICA>>>
<TELL
"Politeness dictates that you ask " D ,PRSI " for it." CR>)
(T
<SETG PRSI <>>
<RFALSE>)>)
(<==? ,PRSO <LOC ,WINNER>>
<TELL "You're in it, nitwit!" CR>)>>
<ROUTINE V-TAKE ()
<COND (<==? <ITAKE> T>
<TELL
,YOU-ARE "now carrying ">
<TELL-PRSO>)>>
<ROUTINE PRE-TAKEOUT ()
<TELL ,SORRY-I-DONT CR>>
<ROUTINE V-TAKEOUT ()
<RTRUE>>
<ROUTINE V-DISEMBARK ()
<COND (<==? <LOC ,PRSO> ,WINNER>
<TELL
,YOU-DONT "need to take out " THE ,PRSO " to use it." CR>)
(<NOT <==? <LOC ,WINNER> ,PRSO>>
<TELL ,YOU-ARENT "in that!" CR>
<RFATAL>)
(T
<TELL ,YOU-ARE "on your own feet again." CR>
<MOVE ,WINNER ,HERE>)>>
;<ROUTINE V-HOLD-UP ()
<TELL "That doesn't seem to help at all." CR>>
<ROUTINE V-TELL ()
<COND (<==? ,PRSO ,PLAYER>
<TELL
"Talking to yourself is a sign of impending looniness." CR>
<SETG QUOTE-FLAG <>>
<SETG P-CONT <>>
<RFATAL>)
(<AND <EQUAL? ,PRSO ,VERONICA>
<IN-MOTION? ,VERONICA>
<NOT <IN? ,VERONICA ,BALLROOM-8>>>
<TELL-IGNORES>
<SETG QUOTE-FLAG <>>
<SETG P-CONT <>>
<RFATAL>)
(<FSET? ,PRSO ,PERSON>
<COND (<NOT <EQUAL? <META-LOC ,PRSO> ,HERE>>
<TELL-ISNT-HERE ,PRSO>
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<RFATAL>)
(,P-CONT
<SETG WINNER ,PRSO>)
(ELSE
<TELL CD ,PRSO ,LISTENING CR>)>
<SETG QCONTEXT ,PRSO>
<SETG QCONTEXT-ROOM ,HERE>)
(T
<TELL-YOU-CANT "talk to " <>>
<TELL-PRSO>
<SETG QUOTE-FLAG <>>
<SETG P-CONT <>>
<RFATAL>)>>
<ROUTINE PRE-TELL-ME ("AUX" P OW)
<SET OW ,WINNER>
<COND (<AND ,QCONTEXT
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>
<EQUAL? ,PRSO ,PLAYER>>
<SETG WINNER ,PLAYER>
<PERFORM ,V?ASK-ABOUT ,QCONTEXT ,PRSI>
<SETG WINNER .OW>
<RTRUE>)
;(<AND <EQUAL? ,PRSO ,PLAYER>
<SET P <FIND-FLAG ,HERE ,PERSON ,WINNER>>>
<PERFORM ,V?ASK-ABOUT .P ,PRSI>
<RTRUE>)>>
<ROUTINE V-TELL-ME ()
<COND (<NOT <EQUAL? ,PLAYER ,WINNER>>
<COND (<NOT <EQUAL? ,PRSO ,PLAYER>>
<TELL
"\"Tell " HIM/HER ,PRSO " yourself." CR>)
(ELSE
<TELL
"\"I haven't any thing to say about " THE ,PRSI "." CR>)>)
(<EQUAL? ,PRSO ,PLAYER>
<TELL-ISNT-ANYONE>)
(<NOT <FSET? ,PRSO ,PERSON>>
<TELL
CTHE ,PRSO " is certainly unlikely to spread the story." CR>)
(T <TELL CD ,PRSO <PICK-ONE ,WHO-CARES> "." CR>)>>
<ROUTINE PRE-TELL-ME-ABOUT ("AUX" P)
<COND (<AND ,QCONTEXT
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>>
<PERFORM <COND (<EQUAL? ,WINNER ,PLAYER> ,V?TELL-ME)
(T ,V?ASK-ABOUT)>
,QCONTEXT
,PRSO>
<RTRUE>)
;(<SET P <FIND-FLAG ,HERE ,PERSON ,WINNER>>
<PERFORM ,V?ASK-ABOUT .P ,PRSO>
<RTRUE>)>>
<ROUTINE V-TELL-ME-ABOUT ()
<TELL-ISNT-ANYONE>>
<ROUTINE V-THANKS ("AUX" P)
<COND ;(<OR <AND ,PRSO <FSET? ,PRSO ,PERSON>>
<AND ,QCONTEXT
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>>
<SET P <FIND-FLAG ,HERE ,PERSON ,WINNER>>>
<TELL CD <OR ,PRSO ,QCONTEXT .P>
" acknowledges your thanks."CR>)
(T <TELL "You're more than welcome." CR>)>>
<ROUTINE V-THROW () <COND (<IDROP> <TELL "Thrown." CR>)>>
<ROUTINE V-THROW-AT ()
<COND (<NOT <IDROP>> <RTRUE>)
(<FSET? ,PRSI ,PERSON>
<TELL CD ,PRSI
", puzzled by your unusual methods, ducks as "
THE ,PRSO " flies by." CR>)
(T <TELL "Maybe you aren't feeling well." CR>)>>
<ROUTINE V-THROW-THROUGH ()
<COND (<NOT <FSET? ,PRSO ,PERSON>>
<TELL "Let's not resort to violence, please." CR>)
(T <V-THROW>)>>
<ROUTINE PRE-TIE-TO ()
<COND (<OR <NOT <FSET? ,PRSO ,PERSON>>
<NOT <FSET? ,PRSI ,FURNITURE>>>
<TELL "That won't do any good." CR>)>>
<ROUTINE V-TIE-TO ()
<TELL-YOU-CANT "tie " <>>
<TELL D ,PRSO " to that." CR>>
<ROUTINE PRE-TIE-WITH ()
<COND (<OR <NOT <FSET? ,PRSO ,PERSON>>
<NOT <FSET? ,PRSI ,TOOLBIT>>>
<TELL "That won't do any good." CR>)>>
<ROUTINE V-TIE-WITH ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"\"I'll sue!\"" CR>)
(T
<TELL-YOU-CANT <COND (<EQUAL? ,PRSI ,HANDCUFFS> "handcuff ")
(T "tie " ;V)>
<>>
<TELL D ,PRSO " with that." CR>)>>
<ROUTINE V-TURN () <TELL "This has no effect." CR>>
<ROUTINE V-LAMP-ON ()
<COND (<EQUAL? ,PRSO ,SINK ,WATER>
<TELL
"You turn the handle and lo! The water starts to run. Impressed
with yourself, you turn the handle once again, and the water stops
running! You try it once more, just to make sure. Bravo!" CR>)
(<FSET? ,PRSO ,PERSON>
<TELL <PICK-ONE ,YUKS> CR>)
(T
<TELL-YOU-CANT "turn on " <>>
<TELL-PRSO>)>>
<ROUTINE V-LAMP-OFF ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL "Your vulgar ways would turn anyone off." CR>)
(T
<TELL-YOU-CANT "turn off " <>>
<TELL-PRSO>)>>
;<ROUTINE V-TURN-UP ()
<TELL "That's silly." CR>>
;<ROUTINE V-TURN-DOWN ()
<TELL "That's silly." CR>>
<ROUTINE PRE-UNLOCK ()
<COND (<AND <OUTSIDE? ,HERE>
<FSET? ,PRSO ,DOORBIT>
<NOT ,PRSI>>
<TELL ,YOU-DONT-HAVE "the right key." CR>)>>
<GLOBAL YOU-DONT-HAVE "You don't have ">
<ROUTINE V-UNLOCK ()
<COND (,PRSI
<TELL-YOU-CANT "unlock " <>>
<TELL A ,PRSO " with " A ,PRSI "." CR>)
(<NOT <OR <FSET? ,PRSO ,CONTBIT> <FSET? ,PRSO ,DOORBIT>>>
<TELL-MORE-CLEVER>)
(<OR <FSET? ,PRSO ,DOORBIT>
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
<COND (<NOT <FSET? ,PRSO ,LOCKED>>
<TELL ,ITS-ALREADY "unlocked." CR>)
(<FSET? ,PRSO ,OPENBIT>
<TELL ,ITS-ALREADY "open." CR>)
(<EQUAL? <GETP ,PRSO ,P?UNLOCK> ,ROOMS>
<TELL
"This door doesn't have a lock." CR>)
(<FSET? ,PRSO ,RMUNGBIT>
<TELL-YOU-CANT "unlock it. The lock is broken">)
(<NOT <GETP ,PRSO ,P?UNLOCK>>
<TELL-YOU-CANT "unlock it" <>>
<UNLESS-HAVE-KEY>)
(<NOT <EQUAL? <GETP ,PRSO ,P?UNLOCK> ,HERE>>
<TELL
,HAVE-TO "unlock it from the other side">
<UNLESS-HAVE-KEY>)
(T
<FCLEAR ,PRSO ,LOCKED>
<TELL
"Okay, " THE ,PRSO " is now unlocked." CR>)>)
(T
<TELL-YOU-CANT "unlock " <>>
<TELL-PRSO>)>>
<ROUTINE UNLESS-HAVE-KEY ()
<TELL " unless you have the key." CR>>
<ROUTINE V-UNTIE ()
<TELL-YOU-CANT "untie it">>
<GLOBAL YOU-SHOULD "You should ">
<ROUTINE V-USE ()
<TELL-SPECIFIC>>
"V-WAIT has three modes, depending on the arguments:
1) If only one argument is given, it will wait for that many moves.
2) If a second argument is given, it will wait the least of the first
argument number of moves and the time at which the second argument
(an object) is in the room with the player.
3) If the third argument is given, the second should be FALSE. It will
wait <first argument> number of moves (or at least try to). The
third argument means that an 'internal wait' is happening (e.g. for
a 'careful' search)."
<GLOBAL WHO-WAIT 0>
<ROUTINE V-WAIT ("OPTIONAL" (NUM 10) (WHO <>) (INT <>)
"AUX" VAL HR (RESULT T))
#DECL ((NUM) FIX)
<SET HR ,HERE>
<SETG WHO-WAIT 0>
<COND (<NOT .INT> <TELL "Time passes..." CR>)>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0> <RETURN>)
(<SET VAL <CLOCKER>>
<COND (<OR <==? .VAL ,M-FATAL>
<NOT <==? .HR ,HERE>>>
<SET RESULT ,M-FATAL>
<RETURN>)
(<AND .WHO <IN? .WHO ,HERE>>
<TELL CD .WHO
", for whom you are waiting, has arrived." CR>
<RETURN>)
(T
<SETG WHO-WAIT <+ ,WHO-WAIT 1>>
<COND (<NOT <==? <BAND <GETB 0 1> 16> 0>>
<TELL "(">
<TIME-PRINT ,PRESENT-TIME>
<TELL ") ">)>
<TELL ,DO-YOU-WANT-TO>
<COND (.INT <TELL
"continue what you were doing?">)
(T <TELL
"keep waiting?">)>
<COND (<NOT <YES?>>
<SET RESULT <>>
<RETURN>)
(T <USL>)>)>)
(<AND .WHO <IN? .WHO ,HERE>>
<TELL CD .WHO
", for whom you are waiting, has arrived." CR>
<RETURN>)
(<AND .WHO <G? <SETG WHO-WAIT <+ ,WHO-WAIT 1>> 40>>
<TELL CD .WHO
" still hasn't arrived. " ,DO-YOU-WANT-TO "keep waiting?">
<COND (<NOT <YES?>>
<SET RESULT <>>
<RETURN>)>
<SETG WHO-WAIT 0>
<USL>)
(T <USL>)>>
<SETG CLOCK-WAIT T>
<COND (<NOT .INT> <V-TIME>)>
.RESULT>
<GLOBAL DO-YOU-WANT-TO "Do you want to ">
<ROUTINE INT-WAIT (N)
<V-WAIT <* .N 2> <> T>>
;<COND (<==? ,M-FATAL <SET VAL <V-WAIT <SET REQ <* .N 2>> <> T>>>
<RFATAL>)
(<NOT <L? <- ,PRESENT-TIME .TIM> .REQ>>
<RTRUE>)
(T <RFALSE>)>
<ROUTINE V-WAIT-FOR ("AUX" WHO)
<COND (<==? ,PRSO ,INTNUM>
<COND (<G? ,P-NUMBER ,PRESENT-TIME> <V-WAIT-UNTIL> <RTRUE>)
(<G? ,P-NUMBER 180>
<TELL "That's too long to wait." CR>)
(T <V-WAIT ,P-NUMBER>)>)
(<==? ,PRSO ,GLOBAL-HERE> <V-WAIT> <RTRUE>)
(<==? ,PRSO ,MIDNIGHT> <V-WAIT-UNTIL> <RTRUE>)
(<FSET? ,PRSO ,PERSON>
<COND (<SET WHO <CHARACTERIZE? ,PRSO>>
<COND (<IN? .WHO ,HERE>
<TELL "That person's" ,ALREADY-HERE CR>)
(T <V-WAIT 10000 .WHO>)>)
(ELSE <TELL "You would be better off not waiting." CR>)>)
(<EQUAL? ,PRSO ,PLAYER>
<TELL "You're" ,ALREADY-HERE CR>)
(T <TELL "Not a good idea. You might wait all night." CR>)>>
<GLOBAL ALREADY-HERE " already here!">
<ROUTINE V-WAIT-UNTIL () ;"?? time?"
<COND (<==? ,PRSO ,MIDNIGHT>
<SETG P-NUMBER 720>
<SETG PRSO ,INTNUM>)
(<L? ,P-NUMBER 8>
<SETG P-NUMBER <* <+ ,P-NUMBER 12> 60>>)
(<L? ,P-NUMBER 13>
<SETG P-NUMBER <* ,P-NUMBER 60>>)>
<COND (<==? ,PRSO ,INTNUM>
<COND (<G? ,P-NUMBER ,PRESENT-TIME>
<V-WAIT <- ,P-NUMBER ,PRESENT-TIME>>)
(T <TELL
,YOU-ARE "clearly ahead of your time." CR>)>)
(T <TELL "It has been a long week, hasn't it?" CR>)>>
<ROUTINE V-ALARM ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL "He's wide awake, or haven't you noticed?" CR>)
(ELSE
<TELL
,TOO-BAD THE ,PRSO " isn't asleep." CR>)>>
<GLOBAL TOO-BAD "Too bad, but ">
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
#DECL ((PT) <OR FALSE TABLE> (PTS) FIX
(OBJ) OBJECT (RM) <OR FALSE OBJECT>)
<COND (<EQUAL? ,WINNER ,PLAYER>
<PUT <GET ,GOAL-TABLES ,PLAYER-C> ,GOAL-S <>>)>
<COND (<NOT ,PRSO> <TELL-YOU-CANT ,GO-THAT-WAY>)
(<SET PT <GETPT ,HERE ,PRSO>>
<SETG P-WALK-DIR ,PRSO>
<COND (<==? <SET PTS <PTSIZE .PT>> ,UEXIT>
<SET RM <GETB .PT ,REXIT>>
<GOTO .RM>)
(<==? .PTS ,NEXIT>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<==? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<GOTO .RM>)
(T
<RFATAL>)>)
(<==? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<TELL-YOU-CANT ,GO-THAT-WAY>
<RFATAL>)>)
(<==? .PTS ,DEXIT>
<SET OBJ <GETB .PT ,DEXITOBJ>>
<COND (<FSET? .OBJ ,OPENBIT>
<GOTO <GETB .PT ,REXIT>>)
(<NOT <FSET? .OBJ ,LOCKED>>
<OPEN-DOOR .OBJ>
<GOTO <GETB .PT ,REXIT>>)
(<EQUAL? <GETP .OBJ ,P?UNLOCK> ,HERE>
<TELL-UNLOCK-IT .OBJ>)
(<FSET? .OBJ ,INVISIBLE>
<TELL-YOU-CANT ,GO-THAT-WAY>)
(<SET STR <GET .PT ,DEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<TELL ,TOO-BAD THE .OBJ " is locked." CR>
<THIS-IS-IT .OBJ>
<RFATAL>)>)>)
(<==? ,PRSO ,P?IN>
<TELL "What compass direction do you want to go in?" CR>
<RFATAL>)
(T
<TELL-YOU-CANT ,GO-THAT-WAY>
<RFATAL>)>>
<ROUTINE PLAYER-EMERGES ()
<TELL
"You emerge from the concealment of " THE ,PLAYER-HIDING "." CR>
<SETG PLAYER-HIDING <>>>
<ROUTINE PLAYER-GETS-UP ()
<COND (,PLAYER-HIDING
<PLAYER-EMERGES>
<MOVE ,PLAYER ,HERE>)
(<FSET? <LOC ,PLAYER> ,VEHBIT>
<TELL
"You get out of " THE <LOC ,PLAYER> "." CR>
<MOVE ,PLAYER ,HERE>)>>
<ROUTINE OPEN-DOOR (OBJ)
<PLAYER-GETS-UP>
<FSET .OBJ ,OPENBIT>
<COND (<==? ,WINNER ,PLAYER>
<TELL "You open">)
(T
<FCLEAR .OBJ ,LOCKED>
<TELL CD ,WINNER " opens">)>
<TELL " " THE .OBJ "." CR>>
;<ROUTINE V-WALK-AROUND ()
<TELL "(Use compass directions to move around here.)" CR>>
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>>
<GLOBAL P-WALK-DIR <>>
<ROUTINE IRON-GRIP ()
<TELL
'DUFFY " holds you in a grip of iron. You cannot escape!" CR>>
<ROUTINE V-WALK-TO ("AUX" WHO RM)
<COND (,DUFFY-SNARFED
<IRON-GRIP>
<RTRUE>)
(<AND <FSET? ,PRSO ,DOORBIT>
<SET RM <GETP ,PRSO ,P?UNLOCK>>
<NOT <EQUAL? .RM ,ROOMS>>>
<SETG PRSO .RM>
<V-THROUGH>)
(<OR <EQUAL? <META-LOC ,PRSO> ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>
<TELL-CLOSE-ENOUGH>)
(<AND <IN? ,PRSO ,GLOBAL-OBJECTS>
<FSET? ,PRSO ,PERSON>>
<SET WHO <CHARACTERIZE ,PRSO>>
<COND (<NEARBY? .WHO>
<SETG PRSO <META-LOC .WHO>>
<V-THROUGH>)
(ELSE
<TELL-YOU-CANT "even see " <>>
<TELL D ,PRSO "!" CR>)>)
(<EQUAL? ,PRSO ,HALLWAY>
<SETG PRSO ,HALL>
<V-THROUGH>)
(<IN? <META-LOC ,PRSO> ,ROOMS>
<SETG PRSO <META-LOC ,PRSO>>
<V-THROUGH>)
(T
<TELL-YOU-CANT
"go from here to there, at least not directly">)>>
<ROUTINE V-RUN-OVER ()
<TELL "That doesn't make much sense." CR>>
<ROUTINE V-WHAT ("AUX" OW OBJ)
<SET OW ,WINNER>
<COND (<NOT <EQUAL? ,WINNER ,PLAYER>>
<COND (<EQUAL? ,PRSO ,YOU> <SET OBJ ,WINNER>)
(ELSE <SET OBJ ,PRSO>)>
<SETG WINNER ,PLAYER>
<PERFORM ,V?ASK-ABOUT .OW .OBJ>
<SETG WINNER .OW>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL "Try asking that person." CR>)
(T <TELL "Are you talking to yourself again?" CR>)>>
<ROUTINE V-YN ()
<COND (<AND ,QCONTEXT
<==? ,HERE ,QCONTEXT-ROOM>
<==? ,HERE <META-LOC ,QCONTEXT>>>
<TELL CD ,QCONTEXT ,IGNORES-YOU " completely." CR>)
(T <TELL "That deserves to be ignored." CR>)>>
<ROUTINE V-UNMASK ()
<COND (<NOT ,PRSO>
<PERFORM ,V?TAKE ,MASK>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL
CD ,PRSO " isn't wearing a mask! (Well, that's what they always say in
horror movies)." CR>)
(ELSE
<TELL
"You have an odd idea of what constitutes a costume." CR>)>>
<ROUTINE V-HANG-UP ()
<COND (<EQUAL? ,PRSO ,ALICIA-COAT ,YOUR-COAT ,GUNBELT>
<COND (<EQUAL? ,HERE ,EAST-COAT-CLOSET ,WEST-COAT-CLOSET>
<COND (<IN? ,PRSO ,HERE>
<TELL "It already is." CR>)
(T
<MOVE ,PRSO ,HERE>
<TELL "Hung." CR>)>)
(ELSE
<TELL "This isn't a closet." CR>)>)
(ELSE
<TELL
"It's not a picture, and it's not a telephone, so how can you?" CR>)>>
<ROUTINE V-SCORE ()
<TELL
"It's not so much a question of your score, but of whether or not you
get the story." CR>>
<ROUTINE V-DANCE ("AUX" OW)
<COND (<AND <NOT <EQUAL? ,WINNER ,PLAYER>>
<EQUAL? ,PRSO <> ,ME ,PLAYER>>
<SET OW ,WINNER>
<SETG WINNER ,PLAYER>
<PERFORM ,V?DANCE .OW>
<SETG WINNER .OW>
<RTRUE>)
(<NOT <IN-BALLROOM? ,WINNER>>
<TELL ,YOU-ARENT "even in the Ballroom." CR>)
(<NOT ,PRSO>
<TELL
"You dance by yourself for a while." CR>)
(<FSET? ,PRSO ,PERSON>
<COND (<IN-MOTION? ,PERSON>
<TELL
CD ,PRSO " seems to be too busy to dance right now." CR>)
(<OR <AND <NOT ,DANCE-WITH-FEMALE?>
<NOT ,DANCE-WITH-MALE?>>
<AND ,DANCE-WITH-FEMALE? <FSET? ,PRSO ,FEMALE>>
<AND ,DANCE-WITH-MALE? <NOT <FSET? ,PRSO ,FEMALE>>>>
<COND (<FSET? ,PRSO ,FEMALE>
<SETG DANCE-WITH-FEMALE? T>)
(ELSE
<SETG DANCE-WITH-MALE? T>)>
<TELL
"You and " D ,PRSO " dance for a while." CR>)
(ELSE
<TELL
CD ,PRSO " doesn't want to dance with you." CR>)>)
(ELSE
<TELL
"Dancing with " A ,PRSO ", eh? Some see that as a sign of impending mental
collapse." CR>)>>
<GLOBAL DANCE-WITH-FEMALE? <>>
<GLOBAL DANCE-WITH-MALE? <>>
<ROUTINE V-WAVE ()
<COND (<AND <EQUAL? ,HERE ,BALLROOM-9>
<IN? ,VERONICA ,BALLROOM-8>
<EQUAL? ,PRSO <> ,GLOBAL-MICHAEL ,GLOBAL-VERONICA>>
<THIS-IS-S-HE ,MICHAEL>
<TELL
'MICHAEL " waves you over again." CR>)
(<NOT ,PRSO>
<TELL "Calling a taxi, eh?" CR>)
(<FSET? ,PRSO ,PERSON>
<COND (<NOT <NEARBY? ,PRSO>>
<TELL-ISNT-HERE ,PRSO>)
(<PROB 50>
<TELL
CD ,PRSO " waves back, puzzled." CR>)
(T
<TELL
CD ,PRSO " doesn't seem overly interested." CR>)>)
(ELSE
<TELL "Waving at " A ,PRSO " again, eh?" CR>)>>
<ROUTINE NEARBY? (PER)
<COND (<IN? .PER ,HERE> <RTRUE>)
(<AND <IN-BALLROOM? .PER>
<IN-BALLROOM? ,PLAYER>>
<RTRUE>)
(<CORRIDOR-LOOK .PER> <RTRUE>)>>
<ROUTINE V-WHAT-IS-WAS ()
<TELL-DONT-KNOW>
<CRLF>>
<ROUTINE V-DIAGNOSE ()
<COND (<EQUAL? ,DRINK-COUNT 0>
<TELL ,YOU-ARE "healthy and sober.">)
(<EQUAL? ,DRINK-COUNT 1>
<TELL "You've had one drink. The effect has been minimal.">)
(ELSE
<TELL
"You've had " <GET ,NUMBERS <COND (<G? ,DRINK-COUNT 3> 4) (T ,DRINK-COUNT)>>
" drinks. I would think twice
about driving home if I were you. You might call a taxi instead.">)>
<COND (<FSET? ,DOG ,RMUNGBIT>
<TELL " You've been bitten by a dog, but I think he had
a rabies tag, so you're safe.">)>
<CRLF>>
<ROUTINE V-REVEAL ()
<COND (<FSET? ,PRSI ,PERSON>
<TELL
"Your revelation of " D ,PRSO " does not seem to interest " D ,PRSI "." CR>)
(ELSE
<TELL
,YOU-MUST "be pretty anxious to talk about it, if you're telling "
THE ,PRSI "." CR>)>>
<ROUTINE V-$REVEAL ()
<RTRUE>>
<ROUTINE V-$DISCOVER ()
<COND (<IN? ,CORPSE ,PLAYER>
<SETG PLAYER-SEEN-WITH-BODY? T>)>
<COND (<EQUAL? ,PRSI ,PLAYER ,VERONICA> <RTRUE>)
(<NOT <FSET? ,PRSI ,TOLD>>
<REVEAL-MURDER ,PRSI>
<COND (<IN? ,PRSI ,HERE>
<TELL
CD ,PRSI " sees the body and recoils in horror. \"That's " 'VERONICA "!\" "
HE/SHE ,PRSI " exclaims in shock and surprise." CR>)>
<RTRUE>)
(<AND <IN? ,PRSI ,HERE>
<NOT <EQUAL? ,PRSI ,DETECTIVE ,DUFFY>>>
<TELL
CD ,PRSI " stares, horrified, at the body." CR>)>>
<ROUTINE V-ORDER ()
<COND (<IN? ,BARTENDER ,HERE>
<PERFORM ,V?ASK-FOR ,BARTENDER ,PRSO>
<RTRUE>)
(ELSE
<TELL
,THERE-IS "no one here to give you " A ,PRSO "." CR>)>>
<ROUTINE V-POUR-ON ()
<COND (<FSET? ,PRSO ,DRINKBIT>
<COND (<FSET? ,PRSI ,PERSON>
<TELL
CTHE ,PRSI " gets away from you and " THE ,PRSO " pours on the ground." CR>)
(T
<TELL
CTHE ,PRSI " is now wet with some of ">
<TELL-PRSO>)>)
(T
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)>>
<ROUTINE PRE-WEAR ()
<COND (<EQUAL? ,PRSO ,GUNBELT ,YOUR-COAT ,MASK>
<RFALSE>)
(<EQUAL? ,PRSO ,ALICIA-COAT ,FAIRY-MASK>
<IT-DOESNT-FIT>)
(ELSE
<TELL-YOU-CANT "wear that">)>>
<ROUTINE IT-DOESNT-FIT () <TELL "It doesn't fit." CR>>
<ROUTINE V-WEAR ()
<COND (<FSET? ,PRSO ,WEARBIT>
<TELL "You already are wearing the " D ,PRSO "." CR>)
(T
<FSET ,PRSO ,WEARBIT>
<TELL "Okay." CR>)>>
<ROUTINE V-TAKE-OFF ()
<COND (<FSET? ,PRSO ,WEARBIT>
<FCLEAR ,PRSO ,WEARBIT>
<TELL "Okay, you're no longer wearing the " D ,PRSO "." CR>)
(<EQUAL? <META-LOC ,PRSO> ,PLAYER>
<TELL ,YOU-ARENT "wearing that." CR>)
(ELSE
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-COUNT ()
<TELL
"I don't think it's important, and as I recall, you failed \"Math for
Journalists.\" Certainly your expense accounts reveal little mathematical
ability (but a lot of creativity)." CR>>
<ROUTINE V-FLUSH ()
<TELL-YOU-CANT "flush that">>
<ROUTINE V-TIP ()
<TELL "How gauche." CR>>
<ROUTINE V-WRITE ()
<TELL "Trying to deface " THE ,PRSO ", huh?" CR>>
<ROUTINE V-LEAP ()
<TELL "Jumping for joy, eh?" CR>>
<ROUTINE V-BURN ()
<COND (<NOT ,PRSI>
<COND (<EQUAL? ,HERE ,BALLROOM-8>
<PERFORM ,V?PUT ,PRSO ,FIREPLACE>)
(ELSE
<TELL ,THERE-IS "no fire">
<TELL-HERE>)>
<RTRUE>)
(<NOT <FSET? ,PRSO ,BURNBIT>>
<TELL "That won't burn." CR>)>>
<ROUTINE V-IS ()
<TELL "Oh?" CR>>
<GLOBAL YOU-ARE "You are ">
<GLOBAL YOU-ARENT "You aren't ">
<ROUTINE V-INTERVIEW ()
<PERFORM ,V?ASK-ABOUT ,PRSO ,PRSO>
<RTRUE>>