mirror of
https://github.com/historicalsource/witness
synced 2024-04-26 14:09:42 +03:00
2240 lines
67 KiB
Plaintext
2240 lines
67 KiB
Plaintext
"VERBS for WITNESS
|
||
Copyright (C) 1983 Infocom, Inc. All rights reserved."
|
||
|
||
;<GLOBAL COPR-NOTICE
|
||
" a transcript of interaction with WITNESS.|
|
||
WITNESS is a registered trademark of Infocom, Inc.|
|
||
Copyright (c) 1983 Infocom, Inc. All rights reserved.">
|
||
|
||
<ROUTINE V-SCRIPT ()
|
||
<PUT 0 8 <BOR <GET 0 8> 1>>
|
||
<TELL "Here begins" " a transcript of interaction with ">
|
||
<V-VERSION>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE V-UNSCRIPT ()
|
||
<TELL "Here ends" " a transcript of interaction with ">
|
||
<V-VERSION>
|
||
<PUT 0 8 <BAND <GET 0 8> -2>>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE V-$VERIFY ()
|
||
<TELL "Verifying disk..." CR>
|
||
<COND (<VERIFY> <TELL "The disk is correct." CR>)
|
||
(T <TELL CR "** Disk Failure **" CR>)>>
|
||
|
||
"
|
||
<ROUTINE V-$WHEN ('AUX' (CNT 0) O L NUM RM)
|
||
<REPEAT ()
|
||
<COND (<G? <SET CNT <+ .CNT 1>> ,CHARACTER-MAX>
|
||
<RETURN>)
|
||
(<SET O <GET ,CHARACTER-TABLE .CNT>>
|
||
<SET L <GET ,MOVEMENT-GOALS .CNT>>
|
||
<REPEAT ()
|
||
<COND (<0? <SET NUM <GET .L ,MG-TIME>>> <RETURN>)
|
||
(<SET RM <GET .L 3>>
|
||
<TELL D .O ' will go in ' N .NUM ' minutes to'>
|
||
<THE? .RM>
|
||
<TELL ' ' D .RM '.' CR>
|
||
<SET L <REST .L ,MG-LENGTH>>)>>)>>>
|
||
"
|
||
|
||
<ROUTINE V-$TANDY ("AUX" X MSG)
|
||
<COND (<NOT ,DEBUG>
|
||
<SET MSG <PICK-ONE ,UNKNOWN-MSGS>>
|
||
<TELL <GET .MSG 0> "$ta" <GET .MSG 1> CR>
|
||
<RTRUE>)>
|
||
<SET X <GETB 0 1>>
|
||
<COND (<==? <BAND .X 8> 0>
|
||
<PUTB 0 1 <BOR .X 8>>
|
||
<TELL "[on]" CR>)
|
||
(T
|
||
<PUTB 0 1 <BAND .X -9>>
|
||
<TELL "[off]" CR>)>>
|
||
|
||
<ROUTINE V-$WHERE ("AUX" (CNT 0) O L MSG)
|
||
<COND (<NOT ,DEBUG>
|
||
<SET MSG <PICK-ONE ,UNKNOWN-MSGS>>
|
||
<TELL <GET .MSG 0> "$whr" <GET .MSG 1> CR>)
|
||
(,PRSI <MOVE ,PRSI ,PRSO>)
|
||
(,PRSO <GOTO ,PRSO>)
|
||
(T
|
||
<REPEAT ()
|
||
<COND (<SET O <GET ,CHARACTER-TABLE .CNT>>
|
||
<SET L <LOC .O>>
|
||
<TELL D .O " is ">
|
||
<COND (.L <TELL "in"> <THE? .L> <TELL " " D .L "."CR>)
|
||
(T <TELL "nowhere." CR>)>)>
|
||
<COND (<G? <SET CNT <+ .CNT 1>> ,CHARACTER-MAX>
|
||
<RETURN>)>>)>>
|
||
|
||
<GLOBAL DEBUG <>>
|
||
<ROUTINE V-DEBUG ("AUX" MSG)
|
||
<COND (<SETG DEBUG <NOT ,DEBUG>>
|
||
<TELL "Find them bugs, boss!" CR>)
|
||
(T <TELL "No bugs left, eh?" CR>)>>
|
||
|
||
""
|
||
|
||
"ZORK game commands"
|
||
|
||
<CONSTANT DIFFICULTY-MAX 2>
|
||
<GLOBAL DIFFICULTY 0>
|
||
|
||
"
|
||
<ROUTINE V-EASIER ()
|
||
<COND (<0? ,DIFFICULTY>
|
||
<TELL 'If this were any easier, there'd be no mystery!' CR>)
|
||
(T <SETG DIFFICULTY <- ,DIFFICULTY 1>>
|
||
<TELL 'O.K., let's see if you can handle it now.' CR>)>
|
||
<COND (<0? ,DIFFICULTY>
|
||
<COND (<IN? ,BROOM ,STORAGE-CLOSET> <MOVE ,BROOM ,OFFICE>)>
|
||
<MOVE ,BROKEN-GLASS ,OFFICE-PORCH>)
|
||
(<1? ,DIFFICULTY> <MOVE ,BROKEN-GLASS ,LOCAL-GLOBALS>)
|
||
(<RTRUE>)>>
|
||
|
||
<ROUTINE V-HARDER ()
|
||
<COND (<==? ,DIFFICULTY ,DIFFICULTY-MAX>
|
||
<TELL 'If this were any harder, you'd never solve it!' CR>)
|
||
(T <SETG DIFFICULTY <+ ,DIFFICULTY 1>>
|
||
<TELL 'O.K., let's see how you handle it now.' CR>)>
|
||
<COND (<NOT <0? ,DIFFICULTY>>
|
||
<COND (<IN? ,BROOM ,OFFICE> <MOVE ,BROOM ,STORAGE-CLOSET>)>)
|
||
(<1? ,DIFFICULTY> <MOVE ,BROKEN-GLASS ,LOCAL-GLOBALS>)
|
||
(<==? ,DIFFICULTY ,DIFFICULTY-MAX> <MOVE ,BROKEN-GLASS ,OFFICE>)
|
||
(<RTRUE>)>>
|
||
"
|
||
|
||
"SUBTITLE SETTINGS FOR VARIOUS LEVELS OF DESCRIPTION"
|
||
|
||
<GLOBAL VERBOSE <>>
|
||
<GLOBAL SUPER-BRIEF <>>
|
||
<GDECL (VERBOSE SUPER-BRIEF) <OR ATOM FALSE>>
|
||
|
||
<ROUTINE V-BRIEF ()
|
||
<SETG VERBOSE <>>
|
||
<SETG SUPER-BRIEF <>>
|
||
<SETG P-SPACE 1>
|
||
<TELL "(O.K., you will get " "brief" " descriptions.)" CR>>
|
||
|
||
<ROUTINE V-SUPER-BRIEF ()
|
||
<SETG SUPER-BRIEF T>
|
||
<SETG P-SPACE 0>
|
||
<TELL
|
||
"(O.K., you will get " "super-brief descriptions. Remember that objects and
|
||
people won't be described, only the name of the place you are entering.)" CR>>
|
||
|
||
<ROUTINE V-VERBOSE ()
|
||
<SETG VERBOSE T>
|
||
<SETG SUPER-BRIEF <>>
|
||
<SETG P-SPACE 1>
|
||
<TELL "(O.K., you will get " "verbose" " descriptions.)" CR>>
|
||
|
||
<GLOBAL P-SPACE 1>
|
||
|
||
<ROUTINE V-SPACE ()
|
||
<SETG P-SPACE 1>
|
||
<TELL
|
||
"(O.K., you will now see a space before each input line.)" CR>>
|
||
|
||
<ROUTINE V-UNSPACE ()
|
||
<SETG P-SPACE 0>
|
||
<TELL
|
||
"(O.K., you will not see a space before each input line.)" CR>>
|
||
|
||
<ROUTINE V-INVENTORY ()
|
||
<COND (<FIRST? ,WINNER> <PRINT-CONT ,WINNER>)
|
||
(T <TELL "You are empty-handed." CR>)>>
|
||
|
||
<ROUTINE V-TIME ()
|
||
<TELL "It's now ">
|
||
<TIME-PRINT ,PRESENT-TIME>
|
||
<CRLF>>
|
||
|
||
<ROUTINE TIME-PRINT (NUM "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 " ">
|
||
<TELL <COND (.AM "a.m.") (T "p.m.")>>>
|
||
|
||
<ROUTINE V-QUIT ("OPTIONAL" (ASK? T) "AUX" SCOR)
|
||
#DECL ((ASK?) <OR ATOM <PRIMTYPE LIST>> (SCOR) FIX)
|
||
<COND (<OR <AND .ASK?
|
||
<TELL
|
||
"(If you want to continue from this point at another time, you must
|
||
\"SUSPEND\" first.) Do you want to " "stop your investigation now?">
|
||
<YES?>>
|
||
<NOT .ASK?>>
|
||
<COND (,TOO-LATE <TOO-LATE-F>)>
|
||
<QUIT>)
|
||
(ELSE <TELL "O.K." CR>)>>
|
||
|
||
<ROUTINE V-RESTART ()
|
||
<TELL
|
||
"Do you wish to restart your investigation?">
|
||
<COND (<YES?>
|
||
<RESTART>
|
||
<TELL "Your original" " status couldn't be restored."
|
||
" Consult your instruction manual" ;"Nat'l Detective Gazette" " if necessary."
|
||
CR>)>>
|
||
|
||
<ROUTINE V-RESTORE ()
|
||
<COND (<RESTORE>
|
||
<TELL "O.K." CR>
|
||
<V-FIRST-LOOK>)
|
||
(T
|
||
<TELL "Your previous" " status couldn't be restored."
|
||
" Consult your instruction manual" ;"Nat'l Detective Gazette"
|
||
" or Reference Card" " if necessary."
|
||
CR>)>>
|
||
|
||
<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 suspended."
|
||
" Consult your instruction manual" ;"Nat'l Detective Gazette"
|
||
" or Reference Card" " if necessary."
|
||
CR>)>>
|
||
|
||
<ROUTINE TANDY? () <NOT <==? <BAND <GETB 0 1> 8> 0>>>
|
||
|
||
<ROUTINE V-VERSION ("AUX" (CNT 17))
|
||
<TELL
|
||
"The WITNESS
|
||
Infocom interactive fiction - a mystery story|
|
||
Copyright (c) 1983 by Infocom, Inc. All rights reserved.|
|
||
">
|
||
;<COND (<TANDY?>
|
||
<TELL "Licensed to Tandy Corporation." CR>)>
|
||
<TELL "The WITNESS 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>>
|
||
|
||
<ROUTINE YES? ()
|
||
<PRINTI " (Answer YES or NO.) >">
|
||
<READ ,P-INBUF ,P-LEXV>
|
||
<COND (<0? <GETB ,P-LEXV ,P-LEXWORDS>>
|
||
<RFALSE>)
|
||
(<EQUAL? <GET ,P-LEXV 1> ,W?YES ,W?Y>
|
||
<RTRUE>)
|
||
(T
|
||
<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>
|
||
<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 D .OBJ " is here.">)
|
||
(T
|
||
<TELL "There's "
|
||
<COND (<FSET? .OBJ ,AN> "an ")
|
||
(T "a ")>
|
||
D .OBJ " here.">)>)
|
||
(ELSE
|
||
<TELL <GET ,INDENTS .LEVEL>>
|
||
<COND (<FSET? .OBJ ,PERSON>
|
||
<TELL D .OBJ>)
|
||
(T
|
||
<TELL <COND (<FSET? .OBJ ,AN> "an ")
|
||
(T "a ")>
|
||
D .OBJ>)>)>
|
||
<COND (<AND <0? .LEVEL>
|
||
<SET AV <LOC ,WINNER>>
|
||
<FSET? .AV ,VEHBIT>>
|
||
<TELL " (outside"> <THE? .AV> <TELL " " D .AV ")">)>
|
||
<CRLF>
|
||
<COND (<AND <SEE-INSIDE? .OBJ> <FIRST? .OBJ>>
|
||
<PRINT-CONT .OBJ .V? .LEVEL>)>>
|
||
|
||
<ROUTINE DESCRIBE-OBJECTS ("OPTIONAL" (V? <>))
|
||
<COND (,LIT
|
||
<COND (<FIRST? ,HERE>
|
||
<PRINT-CONT ,HERE <SET V? <OR .V? ,VERBOSE>> -1>)>)
|
||
(ELSE
|
||
<TELL "You can't see anything in the dark." CR>)>>
|
||
|
||
<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 (<IN? ,HERE ,ROOMS>
|
||
<COND (,P-PROMPT
|
||
<TELL "You are now "
|
||
<COND (<FSET? ,HERE ,ON-NOT-IN> "on")
|
||
(T "in")>>
|
||
<THE? ,HERE>
|
||
<TELL " " D ,HERE "." CR>)
|
||
(T
|
||
<TELL "(" D ,HERE ")" CR>)>)>
|
||
<COND (<OR .LOOK? <NOT ,SUPER-BRIEF>>
|
||
<SET L ,PLAYER-HIDING>
|
||
<COND (.L
|
||
<TELL "(You are hiding behind">
|
||
<THE? .L>
|
||
<TELL " " D .L ".)" CR>)
|
||
(<FSET? <SET L <LOC ,WINNER>> ,VEHBIT>
|
||
<TELL "(You are ">
|
||
<COND (<FSET? .L ,SURFACEBIT>
|
||
<TELL "sitting o">)
|
||
(T <TELL "standing i">)>
|
||
<TELL "n">
|
||
<THE? .L>
|
||
<TELL " " D .L ".)" CR>)>
|
||
<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"
|
||
|
||
<GLOBAL FINGERPRINT-OBJ <>>
|
||
|
||
<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 (<FSET? .OBJ ,SURFACEBIT>
|
||
<TELL "Sitting on">
|
||
<THE? .OBJ>
|
||
<TELL " " D .OBJ " can be seen:" CR>)
|
||
(<FSET? .OBJ ,PERSON>
|
||
<TELL D .OBJ " is holding:" CR>)
|
||
(ELSE
|
||
<TELL "The " D .OBJ
|
||
" contains:" CR>)>)>>
|
||
|
||
<ROUTINE GONE-CRAZY ()
|
||
<TELL
|
||
"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.\"" CR>
|
||
<CASE-OVER>>
|
||
|
||
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" F WT)
|
||
#DECL ((RM) OBJECT)
|
||
<WHERE-UPDATE ,PLAYER>
|
||
<MOVE ,PLAYER .RM>
|
||
<SETG HERE .RM>
|
||
<SETG LIT T>
|
||
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
|
||
<COND (.V? <V-FIRST-LOOK>)>>
|
||
|
||
<ROUTINE HACK-HACK (STR)
|
||
<COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<SETG P-WON <>>
|
||
<TELL "(You can't see any" PRSO " here.)" CR>)
|
||
(T
|
||
<TELL .STR THE-PRSO <PICK-ONE ,HO-HUM> CR>)>>
|
||
|
||
<GLOBAL HO-HUM
|
||
<PLTABLE
|
||
" doesn't help."
|
||
" has no effect.">>
|
||
|
||
<ROUTINE HELD? (OBJ)
|
||
<REPEAT ()
|
||
<COND (<NOT <LOC .OBJ>> <RFALSE>)
|
||
(<EQUAL? <LOC .OBJ> ,ROOMS ,GLOBAL-OBJECTS> <RFALSE>)
|
||
(<IN? .OBJ ,WINNER> <RTRUE>)
|
||
(T <SET OBJ <LOC .OBJ>>)>>>
|
||
|
||
<ROUTINE IDROP ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL D ,PRSO " wouldn't enjoy that." CR>
|
||
<RFALSE>)
|
||
(<AND <NOT <IN? ,PRSO ,WINNER>>
|
||
<NOT <IN? <LOC ,PRSO> ,WINNER>>>
|
||
<TELL "You're not carrying" THE-PRSO "." CR>
|
||
<RFALSE>)
|
||
(<AND <NOT <IN? ,PRSO ,WINNER>>
|
||
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
|
||
<TELL "Too bad, but" THE-PRSO " is closed."CR>
|
||
<RFALSE>)
|
||
(T <MOVE ,PRSO ,HERE ;<LOC ,WINNER>> <RTRUE>)>>
|
||
|
||
<GLOBAL INDENTS
|
||
<PTABLE ""
|
||
" "
|
||
" "
|
||
" "
|
||
" "
|
||
" ">>
|
||
|
||
<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 can't take" THE-PRSO "." CR>)>
|
||
<RFALSE>)
|
||
(<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
|
||
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
|
||
<COND (.VB
|
||
<TELL "Your load's too heavy">
|
||
<COND (<L? ,LOAD-ALLOWED ,LOAD-MAX>
|
||
<TELL ", especially in light of your condition.">)
|
||
(ELSE <TELL ".">)>
|
||
<CRLF>)>
|
||
<RFATAL>)
|
||
(<AND <G? <SET CNT <CCOUNT ,WINNER>> ,FUMBLE-NUMBER>
|
||
<PROB <* .CNT ,FUMBLE-PROB>>>
|
||
<SET OBJ <FIRST? ,WINNER>>
|
||
<SET OBJ <NEXT? .OBJ>>
|
||
<TELL "Too bad, but">
|
||
<THE? .OBJ>
|
||
<TELL " " D .OBJ
|
||
" slips from your arms while you are taking"
|
||
THE-PRSO
|
||
", and both tumble to the ">
|
||
<COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
|
||
<TELL "ground">)
|
||
(T <TELL "floor">)>
|
||
<TELL "." CR>
|
||
<MOVE .OBJ ,HERE> ;<PERFORM ,V?DROP .OBJ>
|
||
<MOVE ,PRSO ,HERE>
|
||
<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 ()
|
||
<SET CNT <+ .CNT 1>>
|
||
<COND (<NOT <SET X <NEXT? .X>>>
|
||
<RETURN>)>>)>
|
||
.CNT>
|
||
|
||
<ROUTINE NOT-HERE (OBJ)
|
||
<SETG P-WON <>>
|
||
<TELL "(You can't see">
|
||
<THE? .OBJ>
|
||
<TELL " " D .OBJ " here.)" CR>>
|
||
|
||
<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>>
|
||
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 %<COND (<GASSIGNED? PREDGEN>'<NOT <FSET? .Y ,INVISIBLE>>)
|
||
(T '<OR <NOT <FSET? .Y ,INVISIBLE>>
|
||
<AND ,DEBUG <TELL "[invisible] ">>>)>
|
||
<NOT <FSET? .Y ,TOUCHBIT>>
|
||
<OR ;<APPLY <GETP .Y ,P?DESCFCN> ,M-OBJDESC>
|
||
<SET STR <GETP .Y ,P?FDESC>>>>
|
||
<COND (<OR <NOT <FSET? .Y ,NDESCBIT>>
|
||
<AND ,DEBUG <TELL "[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 %<COND (<GASSIGNED? PREDGEN>'<NOT <FSET? .Y ,INVISIBLE>>)
|
||
(T '<OR <NOT <FSET? .Y ,INVISIBLE>>
|
||
<AND ,DEBUG <TELL "[invisible] ">>>)>
|
||
<OR .INV?
|
||
<FSET? .Y ,TOUCHBIT>
|
||
<NOT <GETP .Y ,P?FDESC>>>>
|
||
<COND (<OR <NOT <FSET? .Y ,NDESCBIT>>
|
||
<AND ,DEBUG <TELL "[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 "AUX" F N (1ST? T))
|
||
#DECL ((OBJ) OBJECT (F N) <OR FALSE OBJECT>)
|
||
<COND (<SET F <FIRST? .OBJ>>
|
||
<REPEAT ()
|
||
<SET N <NEXT? .F>>
|
||
<COND (.1ST? <SET 1ST? <>>)
|
||
(ELSE
|
||
<TELL ", ">
|
||
<COND (<NOT .N> <TELL "and ">)>)>
|
||
<COND (<FSET? .F ,PERSON>
|
||
<TELL D .F>)
|
||
(T
|
||
<TELL <COND (<FSET? .F ,AN> "an ")
|
||
(T "a ")>
|
||
D .F>)>
|
||
<COND (<FSET? .F ,PERSON> <THIS-IS-S-HE .F>)
|
||
(T <THIS-IS-IT .F>)>
|
||
<SET F .N>
|
||
<COND (<NOT .F> <RETURN>)>>)>>
|
||
|
||
<GLOBAL QCONTEXT <>>
|
||
<GLOBAL QCONTEXT-ROOM <>>
|
||
|
||
<ROUTINE ROOM-CHECK ()
|
||
<COND (<IN? ,PRSO ,ROOMS>
|
||
<COND (<EQUAL? ,PRSO ,HERE ,GLOBAL-HERE>
|
||
<PERFORM ,PRSA ,GLOBAL-ROOM ,PRSI>
|
||
<RTRUE>)
|
||
;(<DOBJ? DRIVEWAY> <RFALSE>)
|
||
(T
|
||
<TELL "You aren't in that place!" CR>
|
||
<RTRUE>)>)
|
||
(<OR <DOBJ? PSEUDO-OBJECT>
|
||
<EQUAL? <META-LOC ,PRSO>
|
||
,HERE ,GLOBAL-OBJECTS ,LOCAL-GLOBALS>>
|
||
<RFALSE>)
|
||
(T
|
||
<SETG P-WON <>>
|
||
<TELL "(You can't see any ">
|
||
<COND (<==? ,PRSO ,CAR-WINDOW> <TELL "window">)
|
||
(T <TELL D ,PRSO>)>
|
||
<TELL " here!)" CR>)>>
|
||
|
||
<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 (<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
|
||
<PLTABLE " doesn't appear interested"
|
||
" doesn't care"
|
||
" lets out a loud yawn"
|
||
" seems to be getting impatient">>
|
||
|
||
<GLOBAL YUKS
|
||
<PLTABLE "That's ridiculous!"
|
||
"That's wacky!"
|
||
"Nuts!"
|
||
"What a fruitcake!"
|
||
"What a screwball!"
|
||
"You're off your rocker!"
|
||
"You're crazy in the head!"
|
||
"You can't be serious!">>
|
||
""
|
||
"SUBTITLE REAL VERBS"
|
||
|
||
<ROUTINE PRE-ACCUSE ()
|
||
<COND (<NOT ,PRSI>
|
||
<SETG PRSI ,GLOBAL-MURDER>)>
|
||
<COND (<FSET? ,CORPSE ,INVISIBLE>
|
||
<TELL "Nothing's dead here but your head!" CR>)
|
||
(<AND <DOBJ? GLOBAL-LINDER CORPSE> <IOBJ? GLOBAL-SUICIDE>>
|
||
<TELL
|
||
"Duffy appears for a moment. "
|
||
"\"So you believe that Linder's death was suicide? I'm not convinced.
|
||
But if you'll "
|
||
"just \"arrest Mr. Linder,\" we can go on from there.\" He disappears again."
|
||
CR>
|
||
<RTRUE>)
|
||
(<AND <DOBJ? GLOBAL-MRS-LINDER> <IOBJ? GLOBAL-SUICIDE>>
|
||
<TELL "Everybody knows that!" CR>
|
||
<RTRUE>)
|
||
(<NOT <==? ,PRSI ,GLOBAL-MURDER>>
|
||
<TELL "What an accusation!" CR>)
|
||
(<NOT <FSET? ,PRSO ,PERSON>>
|
||
<TELL "What a detective! \"Quick, Sergeant! Arrest that "
|
||
D ,PRSO "!\"" CR>)>>
|
||
|
||
<ROUTINE V-ACCUSE ()
|
||
<TELL D ,PRSO " shrugs off your accusation." CR>>
|
||
|
||
<ROUTINE PRE-SANALYZE ()
|
||
<PERFORM ,V?ANALYZE ,PRSI ,PRSO>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE V-SANALYZE ()
|
||
<TELL "[Foo!! This is a bug!!]" CR>>
|
||
|
||
<ROUTINE PRE-ANALYZE ()
|
||
<COND (<IOBJ? GLOBAL-FINGERPRINTS> <RFALSE>)
|
||
(<NOT ,MET-DUFFY?>
|
||
<TELL
|
||
"You haven't met Sergeant Duffy yet tonight."
|
||
" You'll need his help to do that." CR>
|
||
<RTRUE>)
|
||
(,DUFFY-WITH-STILES
|
||
<TELL
|
||
"You'd better wait until Duffy takes care of his prisoner." CR>)>>
|
||
|
||
<ROUTINE V-ANALYZE ()
|
||
<COND (<==? ,PRSI ,GLOBAL-FINGERPRINTS>
|
||
<PERFORM ,V?FINGERPRINT ,PRSO>
|
||
<RTRUE>)
|
||
(<OR ,FINGERPRINT-OBJ ,DUFFY-AT-CORONER <FSET? ,PRSO ,TAKEBIT>>
|
||
<DO-ANALYZE>)
|
||
(<IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<TELL
|
||
"Duffy appears in an instant. \"Well, I might be able to analyze"
|
||
THE-PRSO ",
|
||
but you don't even have it with you!\" With that, he discreetly leaves." CR>)
|
||
(T
|
||
<TELL
|
||
"Sergeant Duffy appears with a puzzled look on his face." " \"With all
|
||
respect, I don't think I can take THAT to the laboratory! I'll
|
||
be nearby if you need me.\"" " He leaves, shaking his head slowly." CR>)>>
|
||
|
||
<ROUTINE V-ANSWER ()
|
||
<TELL "Nobody seems to be 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" THE-PRSO "." CR>)
|
||
(T <TELL "Too bad, but" THE-PRSO " doesn't care." CR>)>>
|
||
|
||
<ROUTINE PRE-ARREST ()
|
||
<COND (<FSET? ,CORPSE ,INVISIBLE>
|
||
<TELL "For what? You have no evidence of a crime yet." CR>)
|
||
(<NOT ,MET-DUFFY?>
|
||
<TELL
|
||
"You haven't met Sergeant Duffy yet tonight."
|
||
" You'll need his help to do that." CR>)
|
||
(<OR ,FINGERPRINT-OBJ ,DUFFY-AT-CORONER>
|
||
<TELL
|
||
"Sergeant Duffy isn't around right now. You'll have to wait for him to
|
||
help you make the arrest." CR>)
|
||
(<AND <NOT <DOBJ? CORPSE GLOBAL-LINDER OBJECT-PAIR>>
|
||
<IOBJ? GLOBAL-SUICIDE RANDOM-CRIME>>
|
||
<TELL
|
||
"Your Chief would probably want you to be sure there's no bigger fish
|
||
here, like an honest-to-Pete murderer." CR>)
|
||
(<DOBJ? GLOBAL-DUFFY> <RFALSE>)
|
||
(<OR <AND <NOT <FSET? ,PRSO ,PERSON>>
|
||
<NOT <DOBJ? CORPSE GLOBAL-LINDER OBJECT-PAIR>>>
|
||
<AND ,PRSI <NOT <IOBJ? GLOBAL-MURDER>>>>
|
||
<TELL "What a detective! \"Quick, Sergeant! Arrest that "
|
||
D ,PRSO>
|
||
<COND (,PRSI <TELL " for " D ,PRSI>)>
|
||
<TELL " before "
|
||
<COND (<FSET? ,PRSO ,FEMALE> "she")
|
||
(<OR <DOBJ? GLOBAL-DUFFY> <FSET? ,PRSO ,PERSON>>
|
||
"he")
|
||
(T "it")>
|
||
" gets away!\"" CR>)>>
|
||
|
||
<ROUTINE V-ARREST ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL
|
||
"You realize that you don't have enough evidence to convict " D ,PRSO
|
||
", so you decide to continue the investigation." CR>)
|
||
(T
|
||
<TELL
|
||
"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" THE-PRSO " with murder!\" He leaves quietly." CR>)>>
|
||
|
||
<ROUTINE V-ASK-ABOUT ()
|
||
<COND (<==? ,PRSO ,PLAYER>
|
||
<TELL
|
||
"It's been a long week, but talking to yourself won't end it any sooner." CR>)
|
||
(<NOT <FSET? ,PRSO ,PERSON>>
|
||
<TELL "Hey, Duffy! Look at your boss talking to "
|
||
<COND (<FSET? ,PRSO ,AN> "an ")
|
||
(T "a ")>
|
||
D ,PRSO "!" CR>)
|
||
(T
|
||
<FSET ,PRSO ,TOUCHBIT>
|
||
<TELL D ,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 "You aren't talking to anyone!" CR>>
|
||
|
||
<ROUTINE V-ASK-FOR ()
|
||
<COND (<AND <FSET? ,PRSO ,PERSON> <NOT <==? ,PRSO ,PLAYER>>>
|
||
<FSET ,PRSO ,TOUCHBIT>
|
||
<TELL D ,PRSO>
|
||
<COND (<IN? ,PRSI ,PRSO>
|
||
<TELL " hands you" THE-PRSI "." CR>
|
||
<MOVE ,PRSI ,WINNER>)
|
||
(T <TELL " doesn't have that." CR>)>)
|
||
(T <TELL <PICK-ONE ,YUKS> CR>)>>
|
||
|
||
<ROUTINE PRE-ASK-CONTEXT-FOR ("AUX" P)
|
||
<COND (<AND ,QCONTEXT
|
||
<==? ,HERE ,QCONTEXT-ROOM>
|
||
<==? ,HERE <META-LOC ,QCONTEXT>>>
|
||
<PERFORM ,V?ASK-FOR ,QCONTEXT ,PRSO>
|
||
<RTRUE>)
|
||
(<SET P <FIND-FLAG ,HERE ,PERSON ,WINNER>>
|
||
<PERFORM ,V?ASK-FOR .P ,PRSO>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE V-ASK-CONTEXT-FOR ()
|
||
<TELL "You aren't talking to anyone!" CR>>
|
||
|
||
<ROUTINE V-ATTACK () <IKILL "attack">>
|
||
|
||
<ROUTINE V-BRUSH ()
|
||
<COND (<DOBJ? OUTSIDE-GUN MUDDY-SHOES>
|
||
<TELL "You shouldn't try to clean a piece of evidence." CR>)
|
||
(T <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 <>))
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<SET PER <GET ,CHARACTER-TABLE <GETP ,PRSO ,P?CHARACTER>>>
|
||
<COND (<IN-MOTION? .PER> <SET MOT T>)>
|
||
<COND (<OR <==? <META-LOC .PER> ,HERE> <CORRIDOR-LOOK .PER>>
|
||
<FSET .PER ,TOUCHBIT>
|
||
<TELL D .PER>
|
||
<COND (<GRAB-ATTENTION .PER>
|
||
<COND (.MOT
|
||
<TELL " stops and turns toward you." CR>)
|
||
(T <TELL " is listening." CR>)>)
|
||
(T
|
||
<TELL " ignores you." CR>)>)
|
||
(T
|
||
<SETG P-WON <>>
|
||
<TELL "(You don't see " D .PER " here.)" CR>)>)
|
||
(T <V-CALL-LOSE>)>>
|
||
|
||
<ROUTINE V-PHONE ("AUX" PER)
|
||
<COND (<AND <FSET? ,PRSO ,PERSON>
|
||
<SET PER <GET ,CHARACTER-TABLE<GETP ,PRSO ,P?CHARACTER>>>
|
||
<OR <==? <META-LOC .PER> ,HERE> <CORRIDOR-LOOK .PER>>>
|
||
<PERFORM ,V?$CALL ,PRSO>
|
||
<RTRUE>)
|
||
(<AND ,PRSI <NOT <==? ,PRSI ,TELEPHONE>>>
|
||
<TELL
|
||
"Too bad, but" THE-PRSI " isn't wired for phoning." CR>)
|
||
(<NOT <PHONE-IN? ,HERE>>
|
||
<TELL "There's no phone here." CR>)
|
||
(<AND <DOBJ? INTNUM> <==? ,P-NUMBER 0>>
|
||
<TELL
|
||
"You dial the operator, who doesn't go for any of your cute lines, but
|
||
does connect you with the police station. "
|
||
"The night clerk at the station says he'll give Duffy your message." CR>)
|
||
(<OR <DOBJ? BRASS-LANTERN>
|
||
<AND <DOBJ? INTNUM> <==? ,P-NUMBER 1308>>>
|
||
<TELL
|
||
"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." CR>)
|
||
(<OR <DOBJ? STILES GLOBAL-STILES MATCHBOOK>
|
||
<AND <DOBJ? INTNUM> <==? ,P-NUMBER 1729>>>
|
||
<TELL
|
||
"You dial the number. It rings several times with no answer." CR>)
|
||
(<DOBJ? INTNUM>
|
||
<TELL "There's no point in calling that number." CR>)
|
||
(<DOBJ? GLOBAL-TERRY>
|
||
<TELL "You don't know the number." CR>)
|
||
(<NOT <FSET? ,PRSO ,PERSON>>
|
||
<TELL "Too bad, but" THE-PRSO " has no phone." CR>)
|
||
(<IN? ,PRSO ,HERE>
|
||
<TELL D ,PRSO " is right here!" CR>)
|
||
(T <TELL "There's no sense in phoning " D ,PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-CLIMB-ON ()
|
||
<COND (<AND <FSET? ,PRSO ,FURNITURE> <FSET? ,PRSO ,VEHBIT>>
|
||
<MOVE ,PLAYER ,PRSO>
|
||
<TELL
|
||
"You are now sitting on" THE-PRSO "." CR>)
|
||
(<FSET? ,PRSO ,FURNITURE>
|
||
<TELL "This isn't the kind of thing to sit on!" CR>)
|
||
(T
|
||
<TELL
|
||
"You can't climb onto" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-CLIMB-UP ("OPTIONAL" (DIR ,P?UP) (OBJ <>) "AUX" X)
|
||
#DECL ((DIR) FIX (OBJ) <OR ATOM FALSE> (X) TABLE)
|
||
<COND (<GETPT ,HERE .DIR>
|
||
<PERFORM ,V?WALK .DIR>
|
||
<RTRUE>)
|
||
(<NOT .OBJ>
|
||
<TELL "You can't go that way." CR>)
|
||
(<AND .OBJ
|
||
<ZMEMQ ,W?WALL
|
||
<SET X <GETPT ,PRSO ,P?SYNONYM>>
|
||
<- </ <PTSIZE .X> 2> 1>>>
|
||
<TELL "Climbing the walls is no help." CR>)
|
||
(ELSE <TELL <PICK-ONE ,YUKS> 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
|
||
"You'd have to be more clever to do that to" THE-PRSO "." CR>)
|
||
(<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
|
||
"Okeh," THE-PRSO " is now closed." CR>)>)
|
||
(T <TELL "It's already closed." CR>)>)
|
||
(<AND <NOT <FSET? ,PRSO ,SURFACEBIT>>
|
||
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
|
||
<COND (<FSET? ,PRSO ,OPENBIT>
|
||
<FCLEAR ,PRSO ,OPENBIT>
|
||
<TELL "Closed." CR>)
|
||
(T <TELL "It's already closed." CR>)>)
|
||
(ELSE
|
||
<TELL "You can't close" THE-PRSO "." 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-CONFRONT ()
|
||
<COND (<==? ,PRSO ,PLAYER>
|
||
<TELL "You aren't talking to anyone!" CR>)
|
||
(<NOT <FSET? ,PRSO ,PERSON>>
|
||
<TELL
|
||
"That ought to put a scare into" THE-PRSO "." CR>)
|
||
(T
|
||
<TELL D ,PRSO <PICK-ONE ,WHO-CARES> "." 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
|
||
<PLTABLE "You ought to be ashamed of yourself!"
|
||
"Hey, save that talk for the locker room!"
|
||
"Step outside and say that!"
|
||
"And so's your grandmother!">>
|
||
|
||
<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 to destroy">)
|
||
(<NOT ,PRSI>
|
||
<TELL "Trying to destroy " D ,PRSO
|
||
" with your bare hands is suicidal." CR>)
|
||
(<NOT <FSET? ,PRSI ,WEAPONBIT>>
|
||
<TELL "Trying to destroy " D ,PRSO " with "
|
||
<COND (<FSET? ,PRSI ,AN> "an ") (T "a ")>
|
||
D ,PRSI " is quite self-destructive." CR>)
|
||
(T <TELL "You can't." CR>)>>
|
||
|
||
<ROUTINE V-DRINK ()
|
||
<V-EAT>>
|
||
|
||
;<ROUTINE PRE-DROP ()
|
||
<COND (<==? ,PRSO <META-LOC ,WINNER>>
|
||
<PERFORM ,V?WALK ,P?OUT>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE V-DROP ()
|
||
<COND (<IDROP>
|
||
<TELL "Okeh," THE-PRSO " is now on the ">
|
||
<COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
|
||
<TELL "ground">)
|
||
(T <TELL "floor">)>
|
||
<TELL "." CR>)>>
|
||
|
||
<ROUTINE V-EAT ("AUX" (EAT? <>) (DRINK? <>) (NOBJ <>))
|
||
#DECL ((NOBJ) <OR OBJECT FALSE> (EAT? DRINK?) <OR ATOM FALSE>)
|
||
<COND (<AND <SET EAT? <FSET? ,PRSO ,FOODBIT>> <IN? ,PRSO ,WINNER>>
|
||
<COND (<VERB? DRINK>
|
||
<TELL
|
||
"Seems that you've had too much to drink already!"CR>)
|
||
(ELSE
|
||
<TELL "Mmm. That really hit the spot." CR>
|
||
<REMOVE ,PRSO>)>
|
||
<CRLF>)
|
||
(<SET DRINK? <FSET? ,PRSO ,DRINKBIT>>
|
||
<COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<AND <SET NOBJ <LOC ,PRSO>>
|
||
<IN? .NOBJ ,WINNER>
|
||
<FSET? .NOBJ ,OPENBIT>>>
|
||
<TELL "Mmm. That really hit the spot." CR>
|
||
<REMOVE ,PRSO>)
|
||
(T <TELL "You can't get to it." CR>)>)
|
||
(<NOT <OR .EAT? .DRINK?>>
|
||
<TELL
|
||
"The blue-plate special at the diner was enough for you." CR>)>>
|
||
|
||
<ROUTINE V-ENTER ()
|
||
<PERFORM ,V?WALK ,P?IN>
|
||
<RTRUE>>
|
||
|
||
;<ROUTINE PRE-THROUGH () ;"WALK WITH => FOLLOW"
|
||
<COND (<FSET? ,PRSO ,PERSON> <PERFORM ,V?FOLLOW ,PRSO> <RTRUE>)>>
|
||
|
||
<ROUTINE V-THROUGH ("OPTIONAL" (OBJ <>) "AUX" RM ;M DIR ;PT ;PTS)
|
||
#DECL ((OBJ) <OR OBJECT FALSE> (M) <PRIMTYPE VECTOR>)
|
||
<COND (<IN? ,PRSO ,ROOMS>
|
||
<COND (<SET DIR <DIR-FROM ,HERE ,PRSO>>
|
||
<PERFORM ,V?WALK .DIR>
|
||
<RTRUE>)
|
||
(<==? ,PRSO <META-LOC ,PLAYER>>
|
||
<TELL "You're already there!" CR>)
|
||
(T <TELL
|
||
"You can't go from here to there, at least not directly." CR>)>)
|
||
(<AND <FSET? ,PRSO ,DOORBIT> <FSET? ,PRSO ,OPENBIT>>
|
||
<COND (<SET RM <DOOR-ROOM ,HERE ,PRSO>>
|
||
<GOTO .RM>)
|
||
(T <TELL
|
||
"Sorry, but the \"" D ,PRSO "\" must be somewhere else." CR>)>)
|
||
(<DOBJ? SIDE-FOOTPRINTS BACK-FOOTPRINTS>
|
||
<TELL "You could mess up valuable evidence that way." CR>
|
||
<RTRUE>)
|
||
(<AND <NOT .OBJ> <NOT <FSET? ,PRSO ,TAKEBIT>>>
|
||
<TELL "You hit your head against" THE-PRSO
|
||
" as you try it." CR>)
|
||
(.OBJ <TELL "You can't do that!" CR>)
|
||
(<IN? ,PRSO ,WINNER>
|
||
<TELL "You must think you're a contortionist!" CR>)
|
||
(ELSE <TELL <PICK-ONE ,YUKS> CR>)>>
|
||
|
||
<ROUTINE PRE-EXAMINE ("AUX" VAL)
|
||
<COND (<ROOM-CHECK> <RTRUE>)
|
||
(<==? ,P-ADVERB ,W?CAREFULLY>
|
||
<COND (<NOT <SET VAL <INT-WAIT 3>>>
|
||
<TELL
|
||
"You never got to finish looking over" THE-PRSO "." CR>)
|
||
(<==? .VAL ,M-FATAL> <RTRUE>)>)>>
|
||
|
||
<ROUTINE V-EXAMINE ("AUX" TXT)
|
||
<COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<NOT-HERE ,PRSO>
|
||
<RTRUE>)
|
||
(<SET TXT <GETP ,PRSO ,P?TEXT>>
|
||
<TELL .TXT CR>)
|
||
(<OR <FSET? ,PRSO ,CONTBIT>
|
||
;<FSET? ,PRSO ,DOORBIT>
|
||
;<FSET? ,PRSO ,WINDOWBIT>>
|
||
<V-LOOK-INSIDE>)
|
||
(ELSE
|
||
<TELL
|
||
"There's nothing special about" THE-PRSO "." CR>)>>
|
||
|
||
;<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TBL)
|
||
#DECL ((OBJ1 OBJ2) OBJECT (TBL) <OR FALSE TABLE>)
|
||
<COND (<SET TBL <GETPT .OBJ2 ,P?GLOBAL>>
|
||
<ZMEMQB .OBJ1 .TBL <- <PTSIZE .TBL> 1>>)>>
|
||
|
||
<GLOBAL PRON-HIM "him">
|
||
<GLOBAL PRON-HE "he">
|
||
<GLOBAL PRON-HER "her">
|
||
<GLOBAL PRON-SHE "she">
|
||
|
||
<ROUTINE PRE-FIND ("AUX" PRON PRON1 CHR NUM)
|
||
<SET PRON ,PRON-HIM>
|
||
<SET PRON1 ,PRON-HE>
|
||
<COND (<IN? ,PRSO ,ROOMS>
|
||
<COND (<==? ,PRSO ,HERE>
|
||
<TELL "You're already here!" CR>)
|
||
(<FSET? ,PRSO ,TOUCHBIT>
|
||
<TELL "You should know - you've been there!" CR>)
|
||
(T <TELL "You're the detective!" CR>)>)
|
||
(<FSET? ,PRSO ,PERSON>
|
||
<SET NUM <GET <GET ,WHERE-TABLES <GETP ,WINNER ,P?CHARACTER>>
|
||
<SET CHR <GETP ,PRSO ,P?CHARACTER>>>>
|
||
<COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<SETG PRSO <GET ,CHARACTER-TABLE .CHR>>)>
|
||
<COND (<FSET? ,PRSO ,FEMALE>
|
||
<SET PRON ,PRON-HER>
|
||
<SET PRON1 ,PRON-SHE>)
|
||
(<AND <EQUAL? .CHR ,LINDER-C>
|
||
<NOT <LOC ,LINDER>>>
|
||
<COND (<==? ,WINNER ,PLAYER>
|
||
<TELL "What do you mean? He's dead!" CR>
|
||
<RTRUE>)
|
||
(<OR <AND <==? ,WINNER ,PHONG>
|
||
,PHONG-SEEN-CORPSE?>
|
||
<AND <==? ,WINNER ,MONICA>
|
||
,MONICA-SEEN-CORPSE?>>
|
||
<TELL "\"" "What do you mean? He's dead!"
|
||
"\"" 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 " .PRON " yet." CR>)
|
||
(T
|
||
<TELL
|
||
"\"I haven't seen " .PRON " tonight.\"" CR>)>)
|
||
(T
|
||
<SET NUM <- ,PRESENT-TIME .NUM>>
|
||
<COND (<==? ,WINNER ,PLAYER>
|
||
<TELL
|
||
"You last saw " .PRON " ">)
|
||
(T
|
||
<TELL
|
||
"\"I last saw " .PRON " ">)>
|
||
<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">)>
|
||
<COND (<NOT <==? ,WINNER ,PLAYER>>
|
||
<TELL " ago. I don't know where ">
|
||
<TELL .PRON1 " is now.\"" CR>)
|
||
(T <TELL " ago." CR>)>)>
|
||
<RTRUE>)>>
|
||
|
||
<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">)>
|
||
<THE? .L>
|
||
<TELL " " D .L ".">
|
||
<COND (<NOT <==? ,PLAYER ,WINNER>> <TELL "\"">)>
|
||
<CRLF>)
|
||
(<NOT <==? ,PLAYER ,WINNER>>
|
||
<TELL "\"" "You're the detective!" "\"" CR>)
|
||
(<OR <EQUAL? .L ,GLOBAL-OBJECTS> <NOT <FSET? ,PRSO ,TOUCHBIT>>>
|
||
<TELL "You're the detective!" CR>)
|
||
(<IN? ,PRSO ,WINNER>
|
||
<TELL "You have it." CR>)
|
||
(<OR <IN? ,PRSO ,HERE>
|
||
<==? ,PRSO ,PSEUDO-OBJECT>>
|
||
<TELL "It's right here." CR>)
|
||
(<FSET? .L ,PERSON>
|
||
<TELL D .L " has it." CR>)
|
||
(<FSET? .L ,SURFACEBIT>
|
||
<TELL "It's on">
|
||
<THE? .L>
|
||
<TELL " " D .L "." CR>)
|
||
(<FSET? .L ,CONTBIT>
|
||
<TELL "It's in">
|
||
<THE? .L>
|
||
<TELL " " D .L "." CR>)
|
||
(ELSE
|
||
<TELL "You're the detective!" CR>)>>
|
||
|
||
<ROUTINE V-FINGERPRINT ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL "You can't find prints on a person!" CR>)
|
||
(T <TELL
|
||
"You don't find any good prints on" THE-PRSO "." CR>)>>
|
||
|
||
<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 formerly great detective stalking "
|
||
<COND (<FSET? ,PRSO ,AN> "an ") (T "a ")>
|
||
D ,PRSO "!" CR>)
|
||
(<==? ,HERE
|
||
<SET L <META-LOC
|
||
<SET CHR <GET ,CHARACTER-TABLE
|
||
<SET CN <GETP ,PRSO ,P?CHARACTER>>>>>>>
|
||
<TELL "You're in the same place as ">
|
||
<COND (<FSET? .CHR ,TOUCHBIT> <TELL D ,PRSO "!" CR>)
|
||
(T <TELL "the " <GETP .CHR ,P?XDESC> "!" CR>)>)
|
||
(<OR <NOT .L> <==? .L ,LIMBO>>
|
||
<COND (<FSET? .CHR ,TOUCHBIT> <TELL D ,PRSO>)
|
||
(T <TELL "The " <GETP .CHR ,P?XDESC>>)>
|
||
<TELL " has left the grounds." CR>)
|
||
(<==? <GET <GET ,WHERE-TABLES 0> .CN> ,PRESENT-TIME>
|
||
<COND (<OR <AND <OUTSIDE? .L> <OUTSIDE? ,HERE>>
|
||
<AND <NOT <OUTSIDE? .L>> <NOT <OUTSIDE? ,HERE>>>>
|
||
<GOTO .L>)
|
||
(T
|
||
<TELL "You seem to have lost track of ">
|
||
<COND (<FSET? .CHR ,TOUCHBIT> <TELL D ,PRSO "." CR>)
|
||
(T <TELL "the " <GETP .CHR ,P?XDESC> "." CR>)>)>)
|
||
(<AND <SET COR <GETP ,HERE ,P?CORRIDOR>>
|
||
<SET PCOR <GETP .L ,P?CORRIDOR>>
|
||
<NOT <==? <BAND .COR .PCOR> 0>>>
|
||
<SETG PRSO <COR-DIR ,HERE .L>>
|
||
<V-WALK>)
|
||
(T
|
||
<TELL "You seem to have lost track of ">
|
||
<COND (<FSET? .CHR ,TOUCHBIT> <TELL D ,PRSO "." CR>)
|
||
(T <TELL "the " <GETP .CHR ,P?XDESC> "." CR>)>)>>
|
||
|
||
<ROUTINE PRE-GIVE ()
|
||
<COND (<EQUAL? ,PRSO ,OFFICE-BACK-DOOR> <RFALSE>)
|
||
(<AND <NOT <HELD? ,PRSO>> <NOT <EQUAL? ,PRSI ,PLAYER>>>
|
||
<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 can't give ">
|
||
<COND (<OR <FSET? ,PRSO ,PERSON> <DOBJ? GLOBAL-DUFFY>> T)
|
||
(<FSET? ,PRSO ,AN> <TELL "an ">)
|
||
(T <TELL "a ">)>
|
||
<TELL D ,PRSO " to "
|
||
<COND (<FSET? ,PRSI ,AN> "an ") (T "a ")>
|
||
D ,PRSI "!" CR>)
|
||
(T <TELL D ,PRSI " refuses your offer." CR>)
|
||
;(<IDROP>
|
||
<TELL D ,PRSI " takes" THE-PRSO
|
||
" and then puts it down." CR>)>>
|
||
|
||
<ROUTINE PRE-SGIVE ()
|
||
<PERFORM ,V?GIVE ,PRSI ,PRSO>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE V-SGIVE ()
|
||
<TELL "[Foo!! This is a bug!!]" CR>>
|
||
|
||
<ROUTINE V-GOODBYE () <V-HELLO <>>>
|
||
|
||
<ROUTINE V-HANDCUFF ()
|
||
<COND (<IN? ,HANDCUFFS ,PLAYER>
|
||
<PERFORM ,V?TIE-WITH ,PRSO ,HANDCUFFS>
|
||
<RTRUE>)
|
||
(T <TELL "You don't have the " D ,HANDCUFFS "." CR>)>>
|
||
|
||
<ROUTINE V-HELLO ("OPTIONAL" (HELL T) "AUX" P)
|
||
<COND (<SET P <OR ,PRSO ,QCONTEXT <FIND-FLAG ,HERE ,PERSON ,WINNER>>>
|
||
<COND (<FSET? .P ,PERSON>
|
||
<COND (.HELL
|
||
<FSET .P ,TOUCHBIT>
|
||
<TELL D .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 "
|
||
<COND (<FSET? .P ,AN> "an ") (T "a ")>
|
||
D .P "." CR>)>)
|
||
(T <TELL "It's not clear who you're talking to." CR>)>>
|
||
|
||
<ROUTINE V-HELP ()
|
||
<COND (<ZERO? ,PRSO>
|
||
<TELL
|
||
"(You'll find plenty of help in your instruction manual."
|
||
;"Nat'l Detective Gazette" CR
|
||
"If you really need help, you can order an InvisiClues Hint Booklet
|
||
and a complete map by using the order form that came in your package.)" CR>)
|
||
(<DOBJ? PLAYER> <PERFORM ,V?GIVE ,HINT ,PLAYER> <RTRUE>)
|
||
(T <TELL "You'll have to be more specific." CR>)>>
|
||
|
||
<ROUTINE V-HIDE ()
|
||
<COND (<EQUAL? ,HERE ,OFFICE>
|
||
<TELL "You could hide behind the lounge." CR>)
|
||
(T <TELL "There's no good hiding place here." CR>)>>
|
||
|
||
<ROUTINE V-HIDE-BEHIND ()
|
||
<COND (<FIND-FLAG ,HERE ,PERSON ,WINNER>
|
||
<TELL "You can't hide when people are watching you!" CR>)
|
||
(<DOBJ? LOUNGE>
|
||
<SETG PLAYER-HIDING ,PRSO>
|
||
<TELL "Okeh, you're now crouching down behind the lounge." CR>)
|
||
(T <TELL "There's no room to hide behind" THE-PRSO "."CR>)>>
|
||
|
||
<ROUTINE V-KICK ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL "\"I get no ">
|
||
<VERB-PRINT>
|
||
<TELL " from shampoo...\" -- Cole Flathead" CR>)
|
||
(T <HACK-HACK "Kicking">)>>
|
||
|
||
<ROUTINE V-KILL ()
|
||
<IKILL "kill">>
|
||
|
||
<ROUTINE IKILL (STR)
|
||
<COND (<NOT ,PRSO> <TELL "There's nothing here to " .STR "." CR>)
|
||
(<AND <NOT ,PRSI> <FSET? ,PRSO ,WEAPONBIT>>
|
||
<TELL "You didn't say what to " .STR " at." CR>)
|
||
(<DOBJ? FRONT-DOOR GARAGE-DOOR WORKSHOP-DOOR>
|
||
<TELL "There must be an easier way to do what you want."CR>)
|
||
(<OR <FSET? ,PRSO ,DOORBIT>
|
||
;<FSET? ,PRSO ,WINDOWBIT>>
|
||
<FSET ,PRSO ,RMUNGBIT>
|
||
<TELL "Hey, this isn't a " .STR "-em-up Western!"
|
||
" You just broke the lock beyond repair." CR>)
|
||
(<NOT <FSET? ,PRSO ,PERSON>>
|
||
<TELL
|
||
"Sure, you probably need to sharpen your eye, but "
|
||
<COND (<FSET? ,PRSO ,AN> "an ") (T "a ")>
|
||
D ,PRSO " is a lousy target." CR>)
|
||
(<NOT ,PRSI>
|
||
<COND (<PROB 50>
|
||
<TELL
|
||
"You think it over. It's not worth the trouble." CR>)
|
||
(T <TELL
|
||
"With your expert ability, you " .STR PRSO " in no time." CR>
|
||
<GONE-CRAZY>)>)
|
||
(<EQUAL? ,PRSI ,PISTOL ,INSIDE-GUN ,OUTSIDE-GUN>
|
||
<COND (<PROB 50>
|
||
<TELL
|
||
"You think it over. It's not worth the trouble." CR>)
|
||
(T <TELL
|
||
"A shot rings out and" PRSO " crumples to the ground, dead. Good shot." CR>
|
||
<GONE-CRAZY>)>)
|
||
(<PROB 50>
|
||
<TELL
|
||
"You think it over. It's not worth the trouble." CR>)
|
||
(T
|
||
<TELL
|
||
"With a lethal blow of" THE-PRSI "," PRSO " falls dead." CR>
|
||
<GONE-CRAZY>)>>
|
||
|
||
<ROUTINE V-KISS ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL
|
||
"Section 204D, Paragraph 7.6 of the California Police Code of
|
||
Conduct specifically prohibits kissing potential suspects or witnesses." CR>)
|
||
(T <TELL "What a (ahem!) strange idea!" CR>)>>
|
||
|
||
<ROUTINE V-KNOCK ()
|
||
<COND (<OR <FSET? ,PRSO ,DOORBIT>
|
||
<FSET? ,PRSO ,WINDOWBIT>>
|
||
<COND (<INHABITED?
|
||
<COND (<FSET? ,PRSO ,DOORBIT> <DOOR-ROOM ,HERE ,PRSO>)
|
||
(T <WINDOW-ROOM ,HERE ,PRSO>)>>
|
||
<TELL "Someone">
|
||
<COND (,TOO-LATE <TELL " shouts \"Go away!\"" CR>)
|
||
(T <TELL " shouts \"Go to the front door!\"" CR>)>)
|
||
(T <TELL "There's no answer." CR>)>)
|
||
(ELSE
|
||
<TELL "Why knock on ">
|
||
<COND (<OR <FSET? ,PRSO ,PERSON> <DOBJ? GLOBAL-DUFFY>> T)
|
||
(<FSET? ,PRSO ,AN> <TELL "an ">)
|
||
(T <TELL "a ">)>
|
||
<TELL D ,PRSO "?" CR>)>>
|
||
|
||
<ROUTINE V-LEAN ()
|
||
<TELL "You can't do that!" CR>>
|
||
|
||
<ROUTINE V-STAND ("AUX" P)
|
||
<COND (,PLAYER-HIDING
|
||
<TELL "You are no longer hiding behind">
|
||
<THE? ,PLAYER-HIDING>
|
||
<TELL " " D ,PLAYER-HIDING "." CR>
|
||
<SETG PLAYER-HIDING <>>
|
||
<COND (<INHABITED? ,HERE>
|
||
<SET P <FIND-FLAG ,HERE ,PERSON>>
|
||
<TELL D .P " looks startled to find you here." CR>)>
|
||
<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 "You're already standing up!" CR>)>>
|
||
|
||
<ROUTINE V-LEAVE () <PERFORM ,V?WALK ,P?OUT>>
|
||
|
||
<ROUTINE V-LISTEN ()
|
||
<COND (<CAN-HEAR-RECORD?>
|
||
<TELL "Through the door you can hear a " "record" " playing." CR>)
|
||
(<CAN-HEAR-RADIO?>
|
||
<TELL "Through the door you can hear a " "radio" " playing." CR>)
|
||
(T <TELL "Too bad, but" THE-PRSO " makes no sound." CR>)>>
|
||
|
||
<ROUTINE V-LOCK ()
|
||
<COND (<NOT <OR <FSET? ,PRSO ,CONTBIT> <FSET? ,PRSO ,DOORBIT>>>
|
||
<TELL
|
||
"You'd have to be more clever to do that to" THE-PRSO "." CR>)
|
||
(<OR <FSET? ,PRSO ,DOORBIT>
|
||
;<FSET? ,PRSO ,WINDOWBIT>
|
||
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
|
||
<COND (<FSET? ,PRSO ,OPENBIT>
|
||
<TELL "You'll have to close it first." CR>)
|
||
(<FSET? ,PRSO ,LOCKED>
|
||
<TELL "It's already locked." CR>)
|
||
(<FSET? ,PRSO ,RMUNGBIT>
|
||
<TELL "You can't lock it. The lock is broken." CR>)
|
||
(T
|
||
<FSET ,PRSO ,LOCKED>
|
||
<TELL
|
||
"Okeh," THE-PRSO " is now locked." CR>)>)
|
||
(T <TELL "You can't lock" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-LOOK ()
|
||
<COND (<DESCRIBE-ROOM T>
|
||
<DESCRIBE-OBJECTS T>)>>
|
||
|
||
<ROUTINE V-LOOK-BEHIND ()
|
||
<TELL "There's nothing behind ">
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
;"? looks at you as though you were a lower form of life."
|
||
<TELL D ,PRSO>)
|
||
(T <TELL "the" PRSO>)>
|
||
<TELL "." CR>>
|
||
|
||
<ROUTINE V-LOOK-DOWN ()
|
||
<COND (<==? ,PRSO ,ROOMS>
|
||
<COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
|
||
<TELL "There's " <GROUND-SURFACE> " there, mostly." CR>)
|
||
(T
|
||
<TELL "Nothing's interesting about the floor." CR>)>)
|
||
(T <TELL "It has been a long week, hasn't it?" CR>)>>
|
||
|
||
<ROUTINE PRE-LOOK-INSIDE () <ROOM-CHECK>>
|
||
|
||
<ROUTINE V-LOOK-INSIDE ("OPTIONAL" (DIR ,P?IN) "AUX" RM)
|
||
<COND (<DOBJ? GLOBAL-ROOM>
|
||
<PERFORM ,V?LOOK>
|
||
<RTRUE>)
|
||
(<FSET? ,PRSO ,RLANDBIT>
|
||
<ROOM-PEEK ,PRSO>)
|
||
(<FSET? ,PRSO ,DOORBIT>
|
||
<COND (<FSET? ,PRSO ,OPENBIT>
|
||
<COND (<SET RM <DOOR-ROOM ,HERE ,PRSO>>
|
||
<ROOM-PEEK .RM>)
|
||
(T <TELL
|
||
"The " D ,PRSO " is open, but you can't tell what's beyond it." CR>)>)
|
||
(ELSE <TELL
|
||
"Too bad, but" THE-PRSO " is closed." CR>)>)
|
||
(<FSET? ,PRSO ,WINDOWBIT>
|
||
<COND (<SET RM <WINDOW-ROOM ,HERE ,PRSO>>
|
||
<ROOM-PEEK .RM>)
|
||
(T <TELL
|
||
"You can't tell what's beyond" THE-PRSO "." CR>)>)
|
||
(<FSET? ,PRSO ,CONTBIT>
|
||
<COND (<SEE-INSIDE? ,PRSO>
|
||
<COND (<AND <FIRST? ,PRSO> <PRINT-CONT ,PRSO>>
|
||
<RTRUE>)
|
||
(<FSET? ,PRSO ,SURFACEBIT>
|
||
<TELL
|
||
"There's nothing on" THE-PRSO "." CR>)
|
||
(T
|
||
<TELL
|
||
"Too bad, but" THE-PRSO " is empty." CR>)>)
|
||
(ELSE <TELL
|
||
"Too bad, but" THE-PRSO " is closed." CR>)>)
|
||
(<FSET? ,PRSO ,PERSON>
|
||
<TELL "You forgot to bring your X-ray glasses." CR>)
|
||
(<==? .DIR ,P?IN>
|
||
<TELL "You can't look inside" THE-PRSO "." CR>)
|
||
(<==? .DIR ,P?OUT>
|
||
<TELL "You can't look outside" THE-PRSO "." 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>
|
||
<TELL " " D .RM ":" CR>
|
||
<COND (<NOT <DESCRIBE-OBJECTS T>>
|
||
<TELL "You can't see anything interesting." CR>)>
|
||
<SETG HERE .OHERE>)>>
|
||
|
||
<ROUTINE SEE-INTO? (THERE "AUX" P L TBL O)
|
||
#DECL ((THERE O) OBJECT (P L) FIX)
|
||
<SET P 0>
|
||
<REPEAT ()
|
||
<COND (<0? <SET P <NEXTP ,HERE .P>>>
|
||
<TELL "You can't seem to find that room." CR>
|
||
<RFALSE>)
|
||
(<EQUAL? .P ,P?IN ,P?OUT> T)
|
||
(<NOT <L? .P ,LOW-DIRECTION>>
|
||
<SET TBL <GETPT ,HERE .P>>
|
||
<SET L <PTSIZE .TBL>>
|
||
<COND (<AND <==? .L ,UEXIT>
|
||
<==? <GETB .TBL ,REXIT> .THERE>>
|
||
<RTRUE>)
|
||
(<AND <==? .L ,DEXIT>
|
||
<==? <GETB .TBL ,REXIT> .THERE>>
|
||
<COND (<FSET? <GETB .TBL ,DEXITOBJ> ,OPENBIT>
|
||
<RTRUE>)
|
||
(T
|
||
<TELL
|
||
"The door to that room is closed." CR>
|
||
<RFALSE>)>)
|
||
(<AND <==? .L ,CEXIT>
|
||
<==? <GETB .TBL ,REXIT> .THERE>>
|
||
<COND (<VALUE <GETB .TBL ,CEXITFLAG>>
|
||
<RTRUE>)
|
||
(T
|
||
<TELL
|
||
"You can't seem to find that room." CR>
|
||
<RFALSE>)>)>)>>>
|
||
|
||
<ROUTINE V-LOOK-ON ()
|
||
<COND (<FSET? ,PRSO ,SURFACEBIT>
|
||
<V-LOOK-INSIDE>)
|
||
(T <TELL "There's no good surface on" THE-PRSO "." CR>)>>
|
||
|
||
<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>
|
||
<COND (<TANDY?> <TELL <PICK-ONE ,YUKS> CR>)
|
||
(T <TELL "What a pervert!" CR>)>)
|
||
(<NOT <==? ,PRSO ,ROOMS>>
|
||
<TELL "It has been a long week, hasn't it?" CR>
|
||
<RTRUE>)
|
||
(<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
|
||
<TELL ,SKY-DESC CR>)
|
||
(T
|
||
<TELL
|
||
"You can see the ceiling. It's not Union Station, but it's
|
||
nicely painted." CR>)>>
|
||
|
||
<ROUTINE V-MAKE ()
|
||
<TELL
|
||
"\"Eat, drink, and make merry, for tomorrow we shall die!\"" 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 can't move" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-OPEN ("AUX" F STR)
|
||
<COND (<NOT <OR <FSET? ,PRSO ,CONTBIT>
|
||
<FSET? ,PRSO ,DOORBIT>
|
||
<FSET? ,PRSO ,WINDOWBIT>>>
|
||
<TELL
|
||
"You'd have to be more clever to do that to" THE-PRSO "." CR>)
|
||
(<OR <FSET? ,PRSO ,DOORBIT>
|
||
<FSET? ,PRSO ,WINDOWBIT>
|
||
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
|
||
<COND (<FSET? ,PRSO ,OPENBIT> <TELL "It's already open." CR>)
|
||
(<FSET? ,PRSO ,LOCKED>
|
||
<TELL "You'll have to unlock it first." CR>)
|
||
(<FSET? ,PRSO ,RMUNGBIT>
|
||
<TELL
|
||
"You can't open it. The latch is broken." CR>)
|
||
(T
|
||
<FSET ,PRSO ,OPENBIT>
|
||
<COND (<OR <FSET? ,PRSO ,DOORBIT>
|
||
<FSET? ,PRSO ,WINDOWBIT>>
|
||
<TELL
|
||
"Okeh," THE-PRSO " is now open." CR>)
|
||
(<OR <NOT <FIRST? ,PRSO>><FSET? ,PRSO ,TRANSBIT>>
|
||
<TELL "Opened." CR>)
|
||
(<AND <SET F <FIRST? ,PRSO>>
|
||
<NOT <NEXT? .F>>
|
||
<SET STR <GETP .F ,P?FDESC>>>
|
||
<TELL "You open" THE-PRSO "."CR>
|
||
<TELL .STR CR>)
|
||
(T
|
||
<TELL "You open" THE-PRSO
|
||
" and see ">
|
||
<PRINT-CONTENTS ,PRSO>
|
||
<TELL "." CR>)>)>)
|
||
(T <TELL "You can't open" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-PICK () <TELL "You can't pick that." CR>>
|
||
|
||
<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 (<DOBJ? HANDCUFFS>
|
||
<PERFORM ,V?TIE-WITH ,PRSI ,HANDCUFFS>
|
||
<RTRUE>)
|
||
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<NOT <FSET? ,PRSO ,TAKEBIT>>>
|
||
<TELL "That would be a mistake." CR>)>>
|
||
|
||
<ROUTINE V-PUT ()
|
||
<COND (<OR <FSET? ,PRSI ,OPENBIT>
|
||
<OPENABLE? ,PRSI>
|
||
<FSET? ,PRSI ,VEHBIT>> T)
|
||
(<IOBJ? SIDE-FOOTPRINTS BACK-FOOTPRINTS>
|
||
<TELL "You could mess up valuable evidence that way." CR>
|
||
<RTRUE>)
|
||
(T
|
||
<TELL "You can't do that." CR>
|
||
<RTRUE>)>
|
||
<COND (<NOT <FSET? ,PRSI ,OPENBIT>>
|
||
<TELL "Too bad, but" THE-PRSI " isn't open." CR>)
|
||
(<==? ,PRSI ,PRSO>
|
||
<TELL <PICK-ONE ,YUKS> CR>)
|
||
(<IN? ,PRSO ,PRSI>
|
||
<TELL
|
||
"Too bad, but" 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>
|
||
<FSET ,PRSO ,TOUCHBIT>
|
||
<TELL "Okeh." 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>)>>
|
||
|
||
<GLOBAL LIT <>>
|
||
|
||
<ROUTINE PRE-READ ("AUX" VAL)
|
||
<COND (<NOT ,LIT> <TELL "It's impossible to read in the dark." CR>)
|
||
(<IN? ,PRSO ,GLOBAL-OBJECTS>
|
||
<NOT-HERE ,PRSO>)
|
||
(<AND ,PRSI
|
||
<NOT <FSET? ,PRSI ,TRANSBIT>>
|
||
<NOT <==? ,PRSI ,INTNUM>>> ;"? INTNUM?"
|
||
<TELL
|
||
"You must have a swell method of looking through" THE-PRSI "." CR>)
|
||
(<==? ,P-ADVERB ,W?CAREFULLY>
|
||
<COND (<NOT <SET VAL <INT-WAIT 3>>>
|
||
<TELL
|
||
"You never got to finish reading" THE-PRSO "." CR>)
|
||
(<==? .VAL ,M-FATAL> <RTRUE>)>)>>
|
||
|
||
<ROUTINE V-READ ()
|
||
<COND (<NOT <FSET? ,PRSO ,READBIT>>
|
||
<TELL "You can't read" THE-PRSO "." CR>)
|
||
(ELSE <TELL <GETP ,PRSO ,P?TEXT> CR>)>>
|
||
|
||
<ROUTINE V-REVIVE ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL D ,PRSO " doesn't need reviving." CR>)
|
||
(T <HACK-HACK "Trying to revive">)>>
|
||
|
||
<ROUTINE V-RING () <TELL "\"DING-DONG!\"" CR>>
|
||
|
||
<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
|
||
"To talk to someone, try 'SAY TO someone \"something\"'." CR>>
|
||
|
||
<ROUTINE PRE-SEARCH () <ROOM-CHECK>>
|
||
|
||
<ROUTINE V-SEARCH ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL D ,PRSO
|
||
" grudgingly allows you to search. You find nothing
|
||
whatsoever of interest." CR>)
|
||
(<AND <FSET? ,PRSO ,CONTBIT> <NOT <FSET? ,PRSO ,OPENBIT>>>
|
||
<TELL "You'll have to open it first." CR>)
|
||
(T <TELL "You find nothing unusual." CR>)>>
|
||
|
||
<ROUTINE PRE-SEARCH-OBJECT-FOR ("AUX" OBJ)
|
||
<COND (<ROOM-CHECK> <RTRUE>)
|
||
(<AND <IN? ,PRSI ,PLAYER>
|
||
<GETP ,PRSI ,P?GENERIC>
|
||
<SET OBJ <APPLY <GETP ,PRSI ,P?GENERIC> ,PRSI>>>
|
||
<SETG PRSI .OBJ>)>
|
||
<COND (<DOBJ? GLOBAL-ROOM GLOBAL-HERE>
|
||
<SETG PRSO ,HERE>)>
|
||
<RFALSE>>
|
||
|
||
<ROUTINE V-SEARCH-OBJECT-FOR ()
|
||
<COND (<AND <IOBJ? MONEY> <FSET? ,PRSO ,PERSON>>
|
||
<SAID-TO ,PRSO>
|
||
<TELL
|
||
"You can find only pocket change. \"I could have told you that.\"" CR>)
|
||
(<FSET? ,PRSO ,PERSON>
|
||
<TELL D ,PRSO
|
||
" resignedly allows you to perform the search." CR>
|
||
<COND (<IN? ,PRSI ,PRSO>
|
||
<TELL
|
||
"Indeed, " D ,PRSO " has" THE-PRSI "." CR>)
|
||
(<IN? ,PRSI ,GLOBAL-OBJECTS>
|
||
<TELL D ,PRSO " doesn't have ">
|
||
<COND (<OR <FSET? ,PRSI ,PERSON>
|
||
<IOBJ? GLOBAL-DUFFY>> T)
|
||
(<FSET? ,PRSI ,AN> <TELL "an ">)
|
||
(T <TELL "a ">)>
|
||
<TELL D ,PRSI "." CR>)
|
||
(T <TELL D ,PRSO " doesn't have"
|
||
THE-PRSI "." CR>)>)
|
||
(<AND <FSET? ,PRSO ,CONTBIT> <NOT <FSET? ,PRSO ,OPENBIT>>>
|
||
<TELL "You'll 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 don't find" THE-PRSI " there." CR>)>>
|
||
|
||
<ROUTINE V-SHOOT ()
|
||
<COND (<NOT <FIND-FLAG ,WINNER ,WEAPONBIT>>
|
||
<TELL "You don't have anything to shoot with." CR>)
|
||
(T <IKILL "shoot">)>>
|
||
|
||
<ROUTINE PRE-SSHOOT ()
|
||
<PERFORM ,V?SHOOT ,PRSI ,PRSO>
|
||
<RTRUE>>
|
||
|
||
<ROUTINE V-SSHOOT ()
|
||
<TELL "[Foo!! This is a bug!!]" CR>>
|
||
|
||
<ROUTINE V-SHOW ()
|
||
<COND (<==? ,PRSO ,PLAYER>
|
||
<TELL "Do you often talk to yourself?" CR>)
|
||
(<NOT <FSET? ,PRSO ,PERSON>>
|
||
<TELL "Don't wait for" THE-PRSO " to applaud." CR>)
|
||
(T
|
||
<TELL D ,PRSO <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 ()
|
||
<COND (<AND <FSET? ,PRSO ,FURNITURE> <FSET? ,PRSO ,VEHBIT>>
|
||
<MOVE ,PLAYER ,PRSO>
|
||
<SETG PLAYER-HIDING <>>
|
||
<TELL
|
||
"You are now sitting on" THE-PRSO "." CR>)
|
||
(T
|
||
<TELL "That isn't something to sit on!" CR>)>>
|
||
|
||
<ROUTINE V-SLAP ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL D ,PRSO " slaps you right back. Wow, is your face red!" CR>)
|
||
(T <TELL
|
||
"You should see Phong. He breaks boards with the edge of his hand!" CR>)>>
|
||
|
||
<ROUTINE V-SMELL ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<COND (<FSET? ,PRSO ,FEMALE> <TELL "She">)
|
||
(T <TELL "He">)>
|
||
<TELL " smells just like " D ,PRSO "." CR>)
|
||
(T <TELL "It" " smells just like "
|
||
<COND (<FSET? ,PRSO ,AN> "an ") (T "a ")>
|
||
D ,PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-SMOKE ()
|
||
<COND ;(<FSET? ,PRSO ,BURNBIT>
|
||
<TELL "You must think you're a jazz musician." CR>)
|
||
(T <TELL "You can't burn" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE PRE-TAKE ()
|
||
<COND (<DOBJ? WHITE-WIRE BLACK-WIRE GLOBAL-FINGERPRINTS HINT DRINK
|
||
CIGARETTE GLOBAL-CAN-OF-WORMS HANDCUFFS GLOBAL-WARRANT>
|
||
<RFALSE>)
|
||
(<IN? ,PRSO ,GLOBAL-OBJECTS> <NOT-HERE ,PRSO>)
|
||
(<IN? ,PRSO ,WINNER> <TELL "You already have it." CR>)
|
||
(<AND <FSET? <LOC ,PRSO> ,CONTBIT>
|
||
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
|
||
<TELL "You can't reach that." CR>
|
||
<RTRUE>)
|
||
(,PRSI
|
||
<COND (<IOBJ? OFFICE-BACK-DOOR
|
||
MONICA-BACK-DOOR LINDER-BACK-DOOR>
|
||
<RFALSE>)
|
||
(<NOT <==? ,PRSI <LOC ,PRSO>>>
|
||
<COND (<NOT <FSET? ,PRSO ,PERSON>>
|
||
<COND (<NOT <FSET? ,PRSI ,PERSON>>
|
||
<TELL "It's not in that!" CR>)
|
||
(<FSET? ,PRSI ,FEMALE>
|
||
<TELL "She doesn't have it!" CR>)
|
||
(T <TELL "He doesn't have it!" CR>)>)
|
||
(<FSET? ,PRSO ,FEMALE>
|
||
<COND (<NOT <FSET? ,PRSI ,PERSON>>
|
||
<TELL "She's not in that!" CR>)
|
||
(<FSET? ,PRSI ,FEMALE>
|
||
<TELL "She doesn't have her!" CR>)
|
||
(T <TELL "He doesn't have her!" CR>)>)
|
||
(T
|
||
<COND (<NOT <FSET? ,PRSI ,PERSON>>
|
||
<TELL "He's not in that!" CR>)
|
||
(<FSET? ,PRSI ,FEMALE>
|
||
<TELL "She doesn't have him!" CR>)
|
||
(T <TELL "He doesn't have him!" 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" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE PRE-TAKEOUT ()
|
||
<COND (<IOBJ? OFFICE-BACK-DOOR MONICA-BACK-DOOR LINDER-BACK-DOOR>
|
||
<COND (<OR <DOBJ? CORPSE> <FSET? ,PRSO ,PERSON>>
|
||
<RFALSE>) ;"TAKE person OUTSIDE"
|
||
(T <TELL
|
||
"(If you want to go outside, simply type \"OUT.\")" CR>)>)
|
||
(T <TELL
|
||
"(Sorry, but English is my second language. Please rephrase that.)" CR>)>>
|
||
|
||
<ROUTINE V-TAKEOUT ()
|
||
<TELL "[Foo!! This is a bug!!]" CR>>
|
||
|
||
<ROUTINE V-DISEMBARK ()
|
||
<COND (<==? <LOC ,PRSO> ,WINNER>
|
||
<TELL
|
||
"You don't need to take out" THE-PRSO " to use it." CR>)
|
||
(<NOT <==? <LOC ,WINNER> ,PRSO>>
|
||
<TELL "You're not 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>)
|
||
(<OR <FSET? ,PRSO ,PERSON>
|
||
<AND ,MET-DUFFY? <==? ,PRSO ,GLOBAL-DUFFY>>>
|
||
<COND (,P-CONT
|
||
<SETG WINNER ,PRSO>)
|
||
(T
|
||
<FSET ,PRSO ,TOUCHBIT>
|
||
<TELL D ,PRSO " is listening." CR>)>
|
||
<SETG QCONTEXT ,PRSO>
|
||
<SETG QCONTEXT-ROOM ,HERE>)
|
||
(T
|
||
<TELL "You can't talk to" THE-PRSO "!" CR>
|
||
<SETG QUOTE-FLAG <>>
|
||
<SETG P-CONT <>>
|
||
<RFATAL>)>>
|
||
|
||
<ROUTINE PRE-TELL-ME ("AUX" P)
|
||
<COND (<AND ,QCONTEXT
|
||
<==? ,HERE ,QCONTEXT-ROOM>
|
||
<==? ,HERE <META-LOC ,QCONTEXT>>
|
||
<DOBJ? PLAYER>>
|
||
<PERFORM ,V?ASK-ABOUT ,QCONTEXT ,PRSI>
|
||
<RTRUE>)
|
||
(<AND <DOBJ? PLAYER>
|
||
<SET P <FIND-FLAG ,HERE ,PERSON ,WINNER>>>
|
||
<PERFORM ,V?ASK-ABOUT .P ,PRSI>
|
||
<RTRUE>)>>
|
||
|
||
<ROUTINE V-TELL-ME ()
|
||
<COND (<DOBJ? PLAYER>
|
||
<TELL "You aren't talking to anyone!" CR>)
|
||
(T <TELL D ,PRSO <PICK-ONE ,WHO-CARES> "." CR>)>>
|
||
|
||
<ROUTINE PRE-TELL-ME-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-TELL-ME-ABOUT ()
|
||
<TELL "You aren't talking to anyone!" CR>>
|
||
|
||
<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 D <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 D ,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 can't tie" 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
|
||
"\"If you don't formally arrest me first, I'll sue!\"" CR>)
|
||
(T <TELL "You can't "
|
||
<COND (<IOBJ? HANDCUFFS> "handcuff ")
|
||
(T "tie " ;V)>
|
||
PRSO " with that." CR>)>>
|
||
|
||
<ROUTINE V-TURN () <TELL "This has no effect." CR>>
|
||
|
||
<ROUTINE V-LAMP-ON ()
|
||
<COND (<DOBJ? SINK GLOBAL-WATER>
|
||
<TELL
|
||
"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!" CR>)
|
||
(<FSET? ,PRSO ,PERSON>
|
||
<TELL <PICK-ONE ,YUKS> CR>)
|
||
(T <TELL "You can't turn on" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-LAMP-OFF ()
|
||
<COND (<FSET? ,PRSO ,PERSON>
|
||
<TELL "Your vulgar ways would turn anyone off." CR>)
|
||
(T <TELL "You can't turn off" THE-PRSO "." CR>)>>
|
||
|
||
<ROUTINE V-TURN-UP ()
|
||
<TELL "That's silly." CR>>
|
||
|
||
<ROUTINE V-TURN-DOWN ()
|
||
<TELL "That's silly." CR>>
|
||
|
||
<ROUTINE PRE-UNLOCK ()
|
||
<COND (<DOBJ? CLOCK>
|
||
<COND (<IN? ,CLOCK-KEY ,WINNER> <RFALSE>)
|
||
(T <TELL "You don't have the right key." CR>)>)
|
||
(,LINDER-FOLLOWS-YOU
|
||
<TELL
|
||
"Linder says, \"Don't leave yet. We're just getting started.\"" CR>)
|
||
(<OUTSIDE? ,HERE>
|
||
<COND (<IN? ,PHONG-KEYS ,WINNER> <RFALSE>)
|
||
(T <TELL "You don't have the right key." CR>)>)>>
|
||
|
||
<ROUTINE V-UNLOCK ()
|
||
<COND (<NOT <OR <FSET? ,PRSO ,CONTBIT> <FSET? ,PRSO ,DOORBIT>>>
|
||
<TELL
|
||
"You'd have to be more clever to do that to" THE-PRSO "." CR>)
|
||
(<OR <FSET? ,PRSO ,DOORBIT>
|
||
<NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
|
||
<COND (<FSET? ,PRSO ,OPENBIT>
|
||
<TELL "You'll have to close it first." CR>)
|
||
(<NOT <FSET? ,PRSO ,LOCKED>>
|
||
<TELL "It's already unlocked." CR>)
|
||
(<FSET? ,PRSO ,RMUNGBIT>
|
||
<TELL "You can't unlock it. The lock is broken." CR>)
|
||
(T
|
||
<FCLEAR ,PRSO ,LOCKED>
|
||
<TELL
|
||
"Okeh," THE-PRSO " is now unlocked." CR>)>)
|
||
(T <TELL "You can't unlock" THE-PRSO"."CR>)>>
|
||
|
||
<ROUTINE V-UNTIE ()
|
||
<TELL "You can't tie it, so you can't untie it!" CR>>
|
||
|
||
<ROUTINE V-USE ()
|
||
<TELL "You should be more specific about what you want to do." CR>>
|
||
|
||
"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 ,GLOBAL-DUFFY>
|
||
,MET-DUFFY?
|
||
<NOT ,FINGERPRINT-OBJ>
|
||
<NOT ,DUFFY-AT-CORONER>>
|
||
<RETURN>)
|
||
(<AND .WHO <IN? .WHO ,HERE>>
|
||
<FSET .WHO ,TOUCHBIT>
|
||
<TELL D .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 ") ">)>
|
||
<COND (.INT <TELL
|
||
"Do you want to continue what you were doing?">)
|
||
(T <TELL
|
||
"Do you want to keep waiting?">)>
|
||
<COND (<NOT <YES?>> <RETURN>)
|
||
(T <USL>)>)>)
|
||
(<AND <==? .WHO ,GLOBAL-DUFFY>
|
||
<NOT ,FINGERPRINT-OBJ>
|
||
<NOT ,DUFFY-AT-CORONER>>
|
||
<RETURN>)
|
||
(<AND .WHO <IN? .WHO ,HERE>>
|
||
<TELL D .WHO
|
||
", for whom you are waiting, has arrived." CR>
|
||
<RETURN>)
|
||
(<AND .WHO <G? <SETG WHO-WAIT <+ ,WHO-WAIT 1>> 30>>
|
||
<TELL D .WHO
|
||
" still hasn't arrived. Do you want to keep waiting?">
|
||
<COND (<NOT <YES?>> <RETURN>)>
|
||
<SETG WHO-WAIT 0>
|
||
<USL>)
|
||
(T <USL>)>>
|
||
<SETG CLOCK-WAIT T>
|
||
<COND (<NOT .INT> <V-TIME>)>
|
||
.RESULT>
|
||
|
||
<ROUTINE INT-WAIT (N "AUX" TIM REQ VAL)
|
||
<SET TIM ,PRESENT-TIME>
|
||
<COND (<==? ,M-FATAL <V-WAIT <SET REQ <RANDOM <* .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>
|
||
<SET WHO <GET ,CHARACTER-TABLE
|
||
<GETP ,PRSO ,P?CHARACTER>>>
|
||
<COND (<IN? .WHO ,HERE>
|
||
<TELL "That person's already here!" CR>)
|
||
(T <V-WAIT 10000 .WHO>)>)
|
||
(<DOBJ? PLAYER> <TELL "You're already here!" CR>)
|
||
(T <TELL "Not a good idea. You might wait all night." CR>)>>
|
||
|
||
<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 (<==? ,PRSO ,CAT>
|
||
<TELL
|
||
"The cat yawns, licks its lips, and settles down again." CR>)
|
||
(<==? ,PRSO ,MONICA>
|
||
<TELL "You wouldn't like that." CR>) ;"?"
|
||
(<FSET? ,PRSO ,PERSON>
|
||
<TELL "He's wide awake, or haven't you noticed?" CR>)
|
||
(ELSE
|
||
<TELL
|
||
"Too bad, but" THE-PRSO " isn't asleep." CR>)>>
|
||
|
||
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
|
||
#DECL ((PT) <OR FALSE TABLE> (PTS) FIX
|
||
(OBJ) OBJECT (RM) <OR FALSE OBJECT>)
|
||
<COND (<==? ,PRSO ,GLOBAL-CALL>
|
||
<PERFORM ,V?TURN ,PRSO>
|
||
<RTRUE>)
|
||
(<NOT ,PRSO> <TELL "You can't go that way." CR>)
|
||
(<SET PT <GETPT ,HERE ,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 can't go that way." CR>
|
||
<RFATAL>)>)
|
||
(<==? .PTS ,DEXIT>
|
||
<COND (<FSET? <SET OBJ <GETB .PT ,DEXITOBJ>> ,OPENBIT>
|
||
<GOTO <GETB .PT ,REXIT>>)
|
||
(<AND <FSET? .OBJ ,INVISIBLE>
|
||
<NOT <AND ,DEBUG
|
||
<TELL "[invisible] ">>>>
|
||
<TELL "You can't go that way." CR>)
|
||
(<SET STR <GET .PT ,DEXITSTR>>
|
||
<TELL .STR CR>
|
||
<RFATAL>)
|
||
(T
|
||
<TELL "Too bad, but">
|
||
<THE? .OBJ>
|
||
<TELL " " D .OBJ " is closed." CR>
|
||
<SETG P-IT-LOC ,HERE>
|
||
<SETG P-IT-OBJECT .OBJ>
|
||
<RFATAL>)>)>)
|
||
(<==? ,PRSO ,P?IN>
|
||
<TELL "(What compass direction do you want to go in?)" CR>
|
||
<RFATAL>)
|
||
(T
|
||
<TELL "You can't go that way." CR>
|
||
<RFATAL>)>>
|
||
|
||
<ROUTINE V-WALK-AROUND ()
|
||
<TELL "(Use compass directions to move around here.)" CR>>
|
||
|
||
<ROUTINE V-WALK-TO ()
|
||
<COND (<OR <EQUAL? <META-LOC ,PRSO> ,HERE ,LOCAL-GLOBALS>
|
||
<FSET? ,PRSO ,DOORBIT>
|
||
<FSET? ,PRSO ,WINDOWBIT>>
|
||
<TELL "You don't need to walk around within a "
|
||
<COND (<OUTSIDE? ,HERE> "part of the yard.")
|
||
(<NOT <0? <BAND 16 <GETP ,HERE ,P?CORRIDOR>>>>
|
||
"part of the hall.")
|
||
(T "room.")>
|
||
CR>)
|
||
(<IN? <META-LOC ,PRSO> ,ROOMS>
|
||
<SETG PRSO <META-LOC ,PRSO>>
|
||
<V-THROUGH>)
|
||
(T
|
||
<TELL
|
||
"You can't go from here to there, at least not directly." CR>)>>
|
||
|
||
<ROUTINE V-RUN-OVER ()
|
||
<TELL "That doesn't make much sense." CR>>
|
||
|
||
<ROUTINE V-WHAT ()
|
||
<COND (<OR <AND ,QCONTEXT
|
||
<==? ,HERE ,QCONTEXT-ROOM>
|
||
<==? ,HERE <META-LOC ,QCONTEXT>>
|
||
<FSET? ,QCONTEXT ,PERSON>>
|
||
<FIND-FLAG ,HERE ,PERSON ,WINNER>>
|
||
<TELL "\"Isn't it obvious?\"" CR>)
|
||
(<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 D ,QCONTEXT " ignores you completely." CR>)
|
||
(T <TELL "That deserves to be ignored." CR>)>>
|
||
|