aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhistoricalsource <historicalsoftware@textfiles.com>2019-04-13 20:29:53 -0400
committerhistoricalsource <historicalsoftware@textfiles.com>2019-04-13 20:29:53 -0400
commit93e6139367a0c839d9db189caa756065b5406628 (patch)
tree3c0ae5493b34651739ca333a0e78c1143cbde7d7
parentad6dc28bb24968af58f4bd1c3236116c60aacc8e (diff)
downloaddeadline-93e6139367a0c839d9db189caa756065b5406628.tar.gz
deadline-93e6139367a0c839d9db189caa756065b5406628.tar.bz2
deadline-93e6139367a0c839d9db189caa756065b5406628.zip
Final Revision
-rw-r--r--actions.zil20
-rw-r--r--crufty.xzap23
-rw-r--r--dead-deadline.zipbin0 -> 108420 bytes
-rw-r--r--deadline.errors56
-rw-r--r--deadline.serial1
-rw-r--r--deadline.xzap41
-rw-r--r--deadlinefreq.xzap200
-rw-r--r--del.cmd3
-rw-r--r--dungeon.zil2
-rw-r--r--goal.zil9
-rw-r--r--invisicluesdead.mss829
-rw-r--r--m1.zil53
-rw-r--r--main.zil18
-rw-r--r--parser.zil2
-rw-r--r--verbs.zil1901
15 files changed, 3136 insertions, 22 deletions
diff --git a/actions.zil b/actions.zil
index c22cfeb..2ce45b3 100644
--- a/actions.zil
+++ b/actions.zil
@@ -481,17 +481,16 @@ a day to search the ground in great detail." CR>)>)
(<FRESH-AIR? ,HERE> <RTRUE>)
(T <TELL "The air is rather musty here." CR>)>)>>
-<ROUTINE FRESH-AIR? (RM "AUX" P L T O)
- #DECL ((RM O) OBJECT (P L) FIX)
+<ROUTINE FRESH-AIR? (RM "AUX" P L TX O)
<SET P 0>
<REPEAT ()
<COND (<0? <SET P <NEXTP ,HERE .P>>>
<RFALSE>)
(<NOT <L? .P ,LOW-DIRECTION>>
- <SET T <GETPT ,HERE .P>>
- <SET L <PTSIZE .T>>
+ <SET TX <GETPT ,HERE .P>>
+ <SET L <PTSIZE .TX>>
<COND (<AND <EQUAL? .L ,DEXIT>
- <FSET? <SET O <GETB .T ,DEXITOBJ>>
+ <FSET? <SET O <GETB .TX ,DEXITOBJ>>
,OPENBIT>>
<TELL
"There is a pleasant breeze coming through the " D .O "." CR>
@@ -676,7 +675,7 @@ to himself.">)
"He replies with a brief nod, and then starts mumbling to himself
about the " <PICK-ONE ,GARDEN-MUMBLES> "." CR>)>)
(<==? ,WINNER ,GARDENER>
- <COND (<AND <VERB? SHOW>
+ <COND (<AND <VERB? SHOW SSHOW>
<OR <EQUAL? ,PRSI ,GLOBAL-HOLE ,HOLE>
<EQUAL? ,PRSI ,GLOBAL-ROSES ,ROSE>>>
<COND (<AND <NOT ,HOLE-TELL> <NOT ,G-I-G>>
@@ -1474,7 +1473,7 @@ written on the previous sheet." CR>)
<SETG NOTE-READ T>
<TELL .STR
" reveals impressions left by writing on the previous sheet. The writer must
-borne down heavily, but only a few words come out clearly:|
+have borne down heavily, but only a few words come out clearly:|
|
Baxter,|
|
@@ -2835,7 +2834,7 @@ you probably have better things to do." CR>)>>
(<VERB? EXAMINE LOOK-INSIDE>
<TELL
"You have stooped to a new low, snooping around toilet bowls. Wait! Something
-catches your eye--was it the Tidy-Bowl man? Is he the murderer? Naw..." CR>)
+catches your eye--was it the Tidy-Bowl man? Is he the murderer? Naw..." CR>)
(<VERB? FLUSH>
<TELL "Whhoooossshhhhh!" CR>)>>
@@ -3824,7 +3823,9 @@ balcony is in good repair, but a few spots of dried mud soil the floor." CR>)>>
It is in good repair and is quite clean." CR>)>>
<ROUTINE GLOBAL-ROOM-F ("AUX" TIM)
- <COND (<VERB? KNOCK>
+ <COND (<VERB? THROUGH>
+ <V-WALK-AROUND>)
+ (<VERB? KNOCK>
<COND (<==? ,HERE ,UPSTAIRS-CLOSET>
<TELL
"The wall to the north here sounds unusually hollow." CR>)
@@ -4184,6 +4185,7 @@ down." CR>
(T <TELL "The stereo is now off." CR>)>
<SETG STEREO-ON <>>
<SETG TUNE-ON <>>
+ <QUEUE I-TUNE-OFF 0> ;"Glitch from Electronic Games 10/84"
<RTRUE>)
(<VERB? TURN-UP>
<COND (,TUNE-ON
diff --git a/crufty.xzap b/crufty.xzap
new file mode 100644
index 0000000..2e59ede
--- /dev/null
+++ b/crufty.xzap
@@ -0,0 +1,23 @@
+
+ .FUNCT THIS-IT?,OBJ,TBL,SYNS,?TMP1
+ FSET? OBJ,INVISIBLE /FALSE
+ ZERO? P-NAM /?THN3
+ GETPT OBJ,P?SYNONYM >SYNS
+ PTSIZE SYNS
+ DIV STACK,2
+ SUB STACK,1
+ CALL ZMEMQ,P-NAM,SYNS,STACK
+ ZERO? STACK /FALSE
+?THN3: ZERO? P-ADJ /?ELS8
+ GETPT OBJ,P?ADJECTIVE >SYNS
+ ZERO? SYNS /FALSE
+ PTSIZE SYNS
+ SUB STACK,1
+ CALL ZMEMQB,P-ADJ,SYNS,STACK
+ ZERO? STACK /FALSE
+?ELS8: ZERO? P-GWIMBIT /TRUE
+ FSET? OBJ,P-GWIMBIT /TRUE
+ RFALSE
+
+
+ .ENDI
diff --git a/dead-deadline.zip b/dead-deadline.zip
new file mode 100644
index 0000000..f9468bd
--- /dev/null
+++ b/dead-deadline.zip
Binary files differ
diff --git a/deadline.errors b/deadline.errors
new file mode 100644
index 0000000..dff4c23
--- /dev/null
+++ b/deadline.errors
@@ -0,0 +1,56 @@
+Assembling DEADLINE.XZAP.3
+Release: 28
+
+ 64 Inserting DEADLINEFREQ.XZAP.2 (642 bytes)
+ 706 Inserting DEADLINEDAT.ZAP.1 (19031 bytes)
+ 19737 Inserting DUNGEON.ZAP.1 (0 bytes)
+ 19737 Inserting SYNTAX.ZAP.1
+***** ENDLOD::
+19737? Multiply defined global label
+ (0 bytes)
+ 19737 Inserting MACROS.ZAP.1 (29 bytes)
+ 19766 Inserting CLOCK.ZAP.1 (379 bytes)
+ 20145 Inserting MAIN.ZAP.1 (948 bytes)
+ 21093 Inserting PARSER.ZAP.1 (5138 bytes)
+ 26231 Inserting CRUFTY.XZAP.1 (79 bytes)
+ 26310 Inserting VERBS.ZAP.1 (12384 bytes)
+ 38694 Inserting ACTIONS.ZAP.1 (55128 bytes)
+ 93822 Inserting GOAL.ZAP.1 (3915 bytes)
+ 97737 Inserting DEADLINESTR.ZAP.1 (10683 bytes)
+
+W?. global undefined: 23754, 22363, 22301, 21863, 21628, 21537, 21513
+
+
+Symbols unused:
+SERIAL
+STR?90
+STR?89
+ANALYSIS-PRINT
+V-DIG-AROUND
+V-SEND
+V-ZORK
+V-DIG
+PRE-DIG
+V-PUMP
+PRE-FILL
+PRE-DROP
+GO-NEXT
+LIT?
+DEMON
+ZPROB
+BIGFIX
+GWIM-DISABLE
+DEAD
+HO-HUMS
+WILL-READY
+POOL-OF-BLOOD
+
+
+255 objects.
+198 globals.
+
+108420 bytes (106K).
+ 19737 bytes of preload.
+
+Preload 2329 bytes too large for BBC Acorn.
+
diff --git a/deadline.serial b/deadline.serial
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/deadline.serial
@@ -0,0 +1 @@
+1
diff --git a/deadline.xzap b/deadline.xzap
new file mode 100644
index 0000000..9c60161
--- /dev/null
+++ b/deadline.xzap
@@ -0,0 +1,41 @@
+ .TIME
+ .INSERT "DEADLINEFREQ"
+
+ .INSERT "DEADLINEDAT" ; DATA IS IN THIS FILE
+
+
+ .INSERT "DUNGEON"
+
+
+ .INSERT "SYNTAX"
+
+
+ENDLOD::
+
+ .INSERT "MACROS"
+
+
+ .INSERT "CLOCK"
+
+
+ .INSERT "MAIN"
+
+
+ .INSERT "PARSER"
+
+
+ .INSERT "CRUFTY"
+
+
+ .INSERT "VERBS"
+
+
+ .INSERT "ACTIONS"
+
+
+ .INSERT "GOAL"
+
+
+ .INSERT "DEADLINESTR"
+
+ .END
diff --git a/deadlinefreq.xzap b/deadlinefreq.xzap
new file mode 100644
index 0000000..335de7c
--- /dev/null
+++ b/deadlinefreq.xzap
@@ -0,0 +1,200 @@
+ .FSTR FSTR?1,"the " ;2296 1148
+ .FSTR FSTR?2,". " ;1103 1103
+ .FSTR FSTR?3,", " ;915 915
+ .FSTR FSTR?4,"and " ;772 386
+ .FSTR FSTR?5,"You " ;684 228
+ .FSTR FSTR?6,"The " ;594 198
+ .FSTR FSTR?7,"you " ;586 293
+ .FSTR FSTR?8,"Robner " ;564 94
+ .FSTR FSTR?9,"of " ;533 533
+ .FSTR FSTR?10,"that " ;531 177
+ .FSTR FSTR?11,"to " ;513 513
+ .FSTR FSTR?12,"is " ;450 450
+ .FSTR FSTR?13,"Baxter " ;432 72
+ .FSTR FSTR?14,"don't " ;405 81
+ .FSTR FSTR?15,"George " ;366 61
+ .FSTR FSTR?16,"can't " ;350 70
+ .FSTR FSTR?17,"I " ;323 323
+ .FSTR FSTR?18,"your " ;309 103
+ .FSTR FSTR?19,"with " ;303 101
+ .FSTR FSTR?20,"are " ;298 149
+ .FSTR FSTR?21,"about " ;288 72
+ .FSTR FSTR?22,"There " ;280 56
+ .FSTR FSTR?23,"have " ;279 93
+ .FSTR FSTR?24,"Dunbar " ;276 46
+ .FSTR FSTR?25,"from " ;252 84
+ .FSTR FSTR?26,"Marshall " ;232 29
+ .FSTR FSTR?27,"in " ;227 227
+ .FSTR FSTR?28,"for " ;214 107
+ .FSTR FSTR?29,"around " ;200 40
+ .FSTR FSTR?30,"which " ;196 49
+ .FSTR FSTR?31,"here" ;194 97
+ .FSTR FSTR?32,"was " ;188 94
+ .FSTR FSTR?33,"Robner" ;185 37
+ .FSTR FSTR?34,"He " ;182 91
+ .FSTR FSTR?35,"his " ;176 88
+ .FSTR FSTR?36,"would " ;176 44
+ .FSTR FSTR?37,"but " ;172 86
+ .FSTR FSTR?38,"This " ;172 43
+ .FSTR FSTR?39,"know " ;168 56
+ .FSTR FSTR?40,"through " ;162 27
+ .FSTR FSTR?41,"doesn't " ;161 23
+ .FSTR FSTR?42,"been " ;156 52
+ .FSTR FSTR?43,"Sergeant " ;152 19
+ .FSTR FSTR?44,"can " ;150 75
+ .FSTR FSTR?45,"balcony " ;150 25
+ .FSTR FSTR?46,"Mrs" ;148 74
+ .FSTR FSTR?47,"large " ;148 37
+ .FSTR FSTR?48,"think " ;144 36
+ .FSTR FSTR?49,"quite " ;144 36
+ .FSTR FSTR?50,"She " ;141 47
+ .FSTR FSTR?51,"not " ;138 69
+ .FSTR FSTR?52,"door " ;138 46
+ .FSTR FSTR?53,"seems " ;136 34
+ .FSTR FSTR?54,"Inspector" ;136 17
+ .FSTR FSTR?55,"really " ;135 27
+ .FSTR FSTR?56,"Mr" ;132 132
+ .FSTR FSTR?57,"I'm " ;132 33
+ .FSTR FSTR?58,"into " ;129 43
+ .FSTR FSTR?59,"on " ;126 126
+ .FSTR FSTR?60,"has " ;126 63
+ .FSTR FSTR?61,"Robner's " ;126 14
+ .FSTR FSTR?62,"toward " ;125 25
+ .FSTR FSTR?63,"be " ;124 124
+ .FSTR FSTR?64,"there " ;120 30
+ .FSTR FSTR?65,"anything " ;119 17
+ .FSTR FSTR?66,"this " ;117 39
+ .FSTR FSTR?67,"some " ;117 39
+ .FSTR FSTR?68,"George's " ;117 13
+ .FSTR FSTR?69,"out " ;116 58
+ .FSTR FSTR?70,"south " ;116 29
+ .FSTR FSTR?71,"It's " ;115 23
+ .FSTR FSTR?72,"room " ;114 38
+ .FSTR FSTR?73,"nothing " ;114 19
+ .FSTR FSTR?74,"against " ;114 19
+ .FSTR FSTR?75,"It " ;112 56
+ .FSTR FSTR?76,"something " ;112 14
+ .FSTR FSTR?77,"There's " ;112 14
+ .FSTR FSTR?78,"starts " ;110 22
+ .FSTR FSTR?79,"what " ;108 36
+ .FSTR FSTR?80,"always " ;105 21
+ .FSTR FSTR?81,"other " ;104 26
+ .FSTR FSTR?82,"looking " ;102 17
+ .FSTR FSTR?83,"didn't " ;102 17
+ .FSTR FSTR?84,"Rourke " ;102 17
+ .FSTR FSTR?85,"looks " ;100 25
+ .FSTR FSTR?86,"Dunbar" ;100 20
+ .FSTR FSTR?87,"understand " ;99 11
+ .FSTR FSTR?88,"standing " ;98 14
+ .FSTR FSTR?89,"business " ;98 14
+ .FSTR FSTR?90,"were " ;96 32
+ .FSTR FSTR?91,"McNabb " ;96 16
+ .FSTR FSTR?92,"Coates " ;96 16
+ .FSTR FSTR?93,"it " ;93 93
+ .FSTR FSTR?94,"window" ;92 23
+ .FSTR FSTR?95,"north " ;92 23
+ .FSTR FSTR?96,"house " ;92 23
+
+
+;word frequency table of 96 most common words
+
+WORDS:: .TABLE
+ FSTR?1
+ FSTR?2
+ FSTR?3
+ FSTR?4
+ FSTR?5
+ FSTR?6
+ FSTR?7
+ FSTR?8
+ FSTR?9
+ FSTR?10
+ FSTR?11
+ FSTR?12
+ FSTR?13
+ FSTR?14
+ FSTR?15
+ FSTR?16
+ FSTR?17
+ FSTR?18
+ FSTR?19
+ FSTR?20
+ FSTR?21
+ FSTR?22
+ FSTR?23
+ FSTR?24
+ FSTR?25
+ FSTR?26
+ FSTR?27
+ FSTR?28
+ FSTR?29
+ FSTR?30
+ FSTR?31
+ FSTR?32
+ FSTR?33
+ FSTR?34
+ FSTR?35
+ FSTR?36
+ FSTR?37
+ FSTR?38
+ FSTR?39
+ FSTR?40
+ FSTR?41
+ FSTR?42
+ FSTR?43
+ FSTR?44
+ FSTR?45
+ FSTR?46
+ FSTR?47
+ FSTR?48
+ FSTR?49
+ FSTR?50
+ FSTR?51
+ FSTR?52
+ FSTR?53
+ FSTR?54
+ FSTR?55
+ FSTR?56
+ FSTR?57
+ FSTR?58
+ FSTR?59
+ FSTR?60
+ FSTR?61
+ FSTR?62
+ FSTR?63
+ FSTR?64
+ FSTR?65
+ FSTR?66
+ FSTR?67
+ FSTR?68
+ FSTR?69
+ FSTR?70
+ FSTR?71
+ FSTR?72
+ FSTR?73
+ FSTR?74
+ FSTR?75
+ FSTR?76
+ FSTR?77
+ FSTR?78
+ FSTR?79
+ FSTR?80
+ FSTR?81
+ FSTR?82
+ FSTR?83
+ FSTR?84
+ FSTR?85
+ FSTR?86
+ FSTR?87
+ FSTR?88
+ FSTR?89
+ FSTR?90
+ FSTR?91
+ FSTR?92
+ FSTR?93
+ FSTR?94
+ FSTR?95
+ FSTR?96
+ .ENDT
+
+ .ENDI
diff --git a/del.cmd b/del.cmd
new file mode 100644
index 0000000..c6ad315
--- /dev/null
+++ b/del.cmd
@@ -0,0 +1,3 @@
+DEL *.ZIL,
+K 2
+
diff --git a/dungeon.zil b/dungeon.zil
index f79e076..32e04b0 100644
--- a/dungeon.zil
+++ b/dungeon.zil
@@ -1508,7 +1508,7 @@ down.")>
(ADJECTIVE DRIED)
(FLAGS NDESCBIT INVISIBLE)
(TEXT
-"The spots seem to be dried dirt or mud and are bunched in the area between
+"The spots, which seem to be dried dirt or mud, are in the area between
the balcony and the desk.")>
<OBJECT SINK
diff --git a/goal.zil b/goal.zil
index 174c72f..02ad286 100644
--- a/goal.zil
+++ b/goal.zil
@@ -257,18 +257,17 @@
<MOVE .PERSON .WHERE>
.FLG>
-<ROUTINE DIR-FROM (HERE THERE "AUX" P L T O)
- #DECL ((HERE THERE O) OBJECT (P L) FIX)
+<ROUTINE DIR-FROM (HERE THERE "AUX" P L TX O)
<SET P 0>
<REPEAT ()
<COND (<0? <SET P <NEXTP .HERE .P>>>
<RFALSE>)
(<EQUAL? .P ,P?IN ,P?OUT> T)
(<NOT <L? .P ,LOW-DIRECTION>>
- <SET T <GETPT .HERE .P>>
- <SET L <PTSIZE .T>>
+ <SET TX <GETPT .HERE .P>>
+ <SET L <PTSIZE .TX>>
<COND (<AND <EQUAL? .L ,DEXIT ,UEXIT ,CEXIT>
- <==? <GETB .T ,REXIT> .THERE>>
+ <==? <GETB .TX ,REXIT> .THERE>>
<RETURN .P>)>)>>>
<ROUTINE COR-DIR (HERE THERE "AUX" COR RM (PAST 0) (CNT 2))
diff --git a/invisicluesdead.mss b/invisicluesdead.mss
new file mode 100644
index 0000000..0b4d961
--- /dev/null
+++ b/invisicluesdead.mss
@@ -0,0 +1,829 @@
+@style{leftmargin 0.75 inch}
+@center{@b{The Basics (Start Here)}}
+
+Some advice
+@begin{itemize}
+Like all good detectives throughout history, you will have to do a lot
+of legwork. You should check out the house and all of the grounds, examine everything, analyze everything, check for fingerprints, etc.;
+you must be diligent. If you suspect Ebullion in the sugar, have it
+analyzed for Ebullion. In general, it is a good idea to ask each of the
+characters about all of the others. Sometimes by comparing stories you
+can learn something. Keep an organized record of the results of your
+investigation.
+
+Read very carefully the Inspectors Casebook which came with the game.
+Also be sure to read and refer to the Coroner's examination, the letter
+from Coates, and the police interviews with those who knew the deceased
+well.
+
+If you find out anything which may contradict what someone has said or
+which might be of interest to them, ask them about it, show it to them,
+or confront them with it.
+
+If anyone acts suspiciously, follow them. Watch what they do.
+
+Much of what you need to learn will only come out if you keep after the
+suspects in a "Colombo-like" way (in other words, putting pressure on
+them until they react).
+@end{itemize}
+
+Communicating with Deadline
+@begin{itemize}
+Some people find it frustrating when their words or sentence structures
+are not understood. The Infocom series of games are considered to have
+the best language handling ability of any programs available for
+microcomputers. Deadline is the best of this elite group. However,
+probably due to its real-life setting, some players expect more
+understanding. A careful reading of the Inspector's Casebook,
+especially with respect to "Dealing with Suspects" and "Commonly
+Encountered Terms," should be very helpful. Once you get the hang of
+it, the limitations will disappear.
+@end{itemize}
+
+@newpage
+@center{@b{General Questions}}
+
+Was it suicide?
+@begin{format}
+ Pros Cons
+He was depressed, and taking There was no suicide note.
+medication for it.
+ He had made plans for the next day.
+
+He had spoken of suicide. It wouldn't be much of a game if
+ it were only a suicide.
+There were problems with his
+company, son, and wife.
+@end{format}
+
+Is there anything significant in the library?
+@begin{itemize}
+Examine everything...
+
+... including the balcony, carpet, tray, bowl, cup, saucer, bookshelves,
+calendar, notepad, and wastebasket.
+@end{itemize}
+
+What should I do with the bowl?
+@begin{itemize}
+Did you analyze it for Ebullion?
+
+It seems that no one spiked the sugar.
+@end{itemize}
+
+Is the notepad important?
+@begin{itemize}
+Develop Hidden Question 3.
+@end{itemize}
+
+What should I do with the calendar?
+@begin{itemize}
+"A desk calendar is here, open to July 7."
+
+Don't desk calendars customarily have more than one page?
+
+You can say "Turn to July 15." (or any other date)
+
+Did you find anything interesting?
+
+Do you think any of the other characters might be interested
+(particularly those affected by a change in the will)?
+
+If you show George the calendar entry concerning the new will in the
+afternoon, he reacts very strangely. Develop Hidden Question 5.
+@end{itemize}
+
+What happened to the chair Mr. Robner was sitting on?
+@begin{itemize}
+Artistic license?
+
+There is no good reason for it to be missing. Presumably the author
+didn't consider it important.
+@end{itemize}
+
+Is the wastebasket important?
+@begin{itemize}
+Nothing much of interest here ...
+
+More interesting is what is @b{not} here.
+@end{itemize}
+
+What is the significance of the telephone call?
+@begin{itemize}
+Did you try answering the phone when it rings at around 9 am?
+
+Did Mrs. Robner do anything suspicious afterwards?
+
+Did you try listening to her call on an extension phone?
+
+Develop Hidden Question 1.
+@end{itemize}
+
+Are the paintings important?
+@begin{itemize}
+It appears that the Robners were collectors of fine art.
+
+Some of the paintings appear to be quite valuable.
+
+Particularly the Seurat.
+
+Are there any paintings missing?
+
+Do the paintings conceal anything?
+@end{itemize}
+
+What is the significance of the mail?
+@begin{itemize}
+The mail arrives shortly after N:00.
+
+You only have about an hour before Mrs. Rourke will come across it and
+deliver it.
+
+Develop Hidden Question 2.
+@end{itemize}
+
+Is the newspaper important?
+@begin{itemize}
+Presumably you have read it.
+
+"The Daily Herald is a local paper in two sections."
+
+Did you read the second section? (Alternatively, read the paper slowly
+or carefully.)
+
+Once again, you might want to show this to others for their reactions.
+
+Have we seen a mention of Omnidyne before?
+@end{itemize}
+
+Is the book useful for anything?
+@begin{itemize}
+Did you try to read it?
+
+Did you try to read the ending?
+@end{itemize}
+
+Are all of the drugs in the house significant?
+@begin{itemize}
+There certainly are a lot of them.
+
+Have you read all the labels?
+
+You should ask the other characters about them, particularly those who
+are taking them.
+@end{itemize}
+
+Once Baxter has left, how do I find him?
+@begin{itemize}
+It's too late to do anything with Baxter. You had 6 hours to deal with
+him.
+@end{itemize}
+
+How do I question Mr. Coates?
+@begin{itemize}
+Have you tried calling him on the phone?
+
+Unfortunately, he is too preoccupied to speak to you before the will
+reading.
+
+You won't get anywhere with this; Coates is just not available for you
+to question.
+@end{itemize}
+
+Is Steven's arrival important?
+@begin{itemize}
+Did you follow him?
+
+Did you eavesdrop on his conversation about the paintings?
+
+How did you do these things when he never arrived?
+
+***This space intentionally left blank.*** <Very Large>
+@end{itemize}
+
+Where did Mr. Robner keep important documents?
+@begin{itemize}
+If he kept any at home, they're well-hidden.
+
+Might there be a hidden safe? (You could ask the residents.)
+
+You won't be able to find his documents yourself. One of the characters
+will reveal the location if you cause him/her to panic.
+
+Investigate the desk calendar and proceed from there.
+@end{itemize}
+
+Is the fireplace important?
+@begin{itemize}
+No.
+@end{itemize}
+
+What is the significance of the fragment?
+@begin{itemize}
+Develop Hidden Question 24.
+@end{itemize}
+
+Is Ms. Rourke useful for anything?
+@begin{itemize}
+She seems to be a good housekeeper.
+
+She is a bit of a gossip though.
+
+She could get into trouble sticking her nose into her employers'
+affairs.
+@end{itemize}
+
+How do I open the kitchen window?
+@begin{itemize}
+It won't open.
+@end{itemize}
+
+Who can show me the cellar entrance?
+@begin{itemize}
+Shouldn't any one of the residents be able to do this?
+
+How long could you live in a house without knowing the layout?
+
+What led you to believe there was a cellar?
+@end{itemize}
+
+Is there a new will?
+@begin{itemize}
+You might ask the characters about it.
+
+Mr. Coates says that Mr. Robner told him he was altering the old one.
+
+Mr. Robner's calendar indicates that he wrote one.
+@end{itemize}
+
+How do I get back down from the attic?
+@begin{itemize}
+Who took the ladder?
+
+Did you hide behind the trunk to watch who took it?
+
+This could be important. Is there something you said or did which could
+cause this to happen?
+
+How did you get into the attic?
+@end{itemize}
+
+What is the quickest way to summon Mr. Robner's brother?
+@begin{itemize}
+His brother Clement?
+
+Have you tried the phone?
+
+Where might the phone number be?
+
+Did you ask Duffy to find him?
+
+What brother?
+@end{itemize}
+
+Is Clement's grief sincere?
+@begin{itemize}
+What indication do you have that it isn't?
+
+Isn't a single smirk a rather small thread with which to build a case?
+
+Who the #@@%* is Clement?
+@end{itemize}
+
+Is Mr. McNabb useful for anything?
+@begin{itemize}
+He apparently is a good gardener.
+
+Have you talked to him? (He's not much of a conversationalist on topics
+unrelated to gardening, but if you ask him about the weather, his roses,
+or the lawn, ....)
+
+Have you ever noticed a change in him?
+
+Shortly after 11:00 am he becomes quite annoyed. Why? Ask him.
+
+Ask him to show you the holes he is ranting about.
+@end{itemize}
+
+What is the ladder for?
+@begin{itemize}
+You might ask Mr. McNabb.
+
+In general, ladders are useful for getting to and from high places.
+
+Do you think it would reach the balcony?
+@end{itemize}
+
+Is there any significance to George's long vigil at the lake in the
+afternoon?
+@begin{itemize}
+Did you notice any suspicious behavior before this?
+
+Try looking into the lake where he is standing.
+@end{itemize}
+
+How do I leave the grounds?
+@begin{itemize}
+You don't. The geography certainly can't go on forever.
+@end{itemize}
+
+@newpage
+@center{@b{Develop Only If ...}}
+
+In this section, develop the clues @b{only} if the condition is met.
+
+Someone acted strangely at the will reading or soon after:
+@begin{itemize}
+If this person left in a hurry, go on.
+
+Develop Hidden Question 5.
+@end{itemize}
+
+You have analyzed the footprint:
+@begin{itemize}
+Develop Hidden Question 25.
+@end{itemize}
+
+You have found a couple of holes:
+@begin{itemize}
+Continue only if you have found a pair of holes in the rose garden.
+
+What might fit in them?
+
+Try the ladder (remember that it rained Wednesday night).
+
+There was a way into and/or out of the library, despite the locked door.
+It would be a good idea to search the area carefully.
+
+Search around the holes again.
+@end{itemize}
+
+If you have found a destroyed document:
+@begin{itemize}
+How do you think it got there?
+
+Did you notice anyone acting suspiciously earlier?
+
+The document didn't just appear in the water. George got it from
+somewhere and threw it there.
+
+He began acting strangely when he realized there was a new will which
+Mr. Coates didn't know about.
+
+Follow him when he first starts acting strangely. Develop Hidden
+Question 5.
+@end{itemize}
+
+If you have found the hidden closet:
+@begin{itemize}
+Develop Hidden Question 6.
+@end{itemize}
+
+After you have discovered the missing paintings:
+@begin{itemize}
+Don't go on if you haven't been in the cellar.
+
+Why do I get the distinct impression that you are cheating?
+@end{itemize}
+
+If someone (other than Mr. Robner) has died:
+@begin{itemize}
+If it is Ms. Dunbar, go on. Otherwise, don't develop any further.
+
+Develop Hidden Question 27 and then continue with the next hint for this
+question.
+
+Did anything peculiar happen before this apparent suicide?
+
+Did anyone other than George, Mr. Coates, Duffy, or you leave the house?
+
+Did you follow? (or watch from the guest room window?)
+
+Mr. Baxter and Ms. Dunbar met in the tool shed. What happened there?
+
+Did you watch through the tool shed window? Try looking through several
+times during the course of the discussion.
+
+Might this suicide be a murder?
+
+Did you notice anything odd about the scene of the "suicide"?
+
+Where is the pen Dunbar used to write the suicide note?
+
+Develop Hidden Questions 7 and 8.
+@end{itemize}
+
+You have found a diary:
+@begin{itemize}
+If it is Mrs. Robner's diary, go on. Otherwise, don't develop any
+further.
+
+Don't unlock it until you are positive it is Mrs. Robner's.
+
+Did you find the key under Mrs. Robner's mattress?
+
+Somehow I get the distinct impression that you are cheating.
+@end{itemize}
+
+You have solid proof of the method of Mr. Robner's death:
+@begin{itemize}
+If you don't have the lab report, don't go on.
+
+Develop Hidden Questions 10 through 18.
+@end{itemize}
+
+You have entered the attic:
+@begin{itemize}
+Develop Hidden Question 26.
+@end{itemize}
+
+@newpage
+@center{@b{Hidden Questions}}
+
+Develop the numbered questions only when you are directed to in other
+parts of this booklet.
+
+1. When should I listen to Leslie's phone call?
+@begin{itemize}
+If you listen in on the extension, you will hear the same conversation
+every time. There is no way to hear more of the conversation.
+@end{itemize}
+
+2. What is in the envelope?
+@begin{itemize}
+You won't find out without opening it, illegal and immoral though that
+may be.
+
+It appears that Mrs. Robner had a motive for killing her husband.
+
+Have you shown the letter to anyone? It mentions others by name.
+@end{itemize}
+
+3. What do I do with the notepad?
+@begin{itemize}
+This is something you should examine carefully.
+
+Is there a way you might make sense of the indentations?
+
+What would Sherlock Holmes do? (You've probably done it yourself as a
+child).
+
+Cary Grant did it in Alfred Hitchcock's @u{North by Northwest}.
+
+Try rubbing the notepad with the pencil (alternatively, you can hold it
+up to the light).
+
+Develop Hidden Question 4.
+@end{itemize}
+
+4. What do the indentations on the notepad say?
+@begin{itemize}
+It is clearly a note from Marshall Robner to Mr. Baxter.
+
+It seems a rather forceful note.
+
+It appears that Marshall is insisting that Baxter do something
+concerning a merger. There is also some apparent mention of documents
+and something about "Focus."
+
+"@ @ plica" could be part of replicate or implicate ....
+
+The last line looks like "Reconsider before it is too late!"
+
+Have you asked the other characters about the merger and Focus?
+
+You might want to show certain people the note also.
+
+Isn't it interesting that Baxter claims he never received the note yet
+it isn't in the wastebasket?
+
+<Put the exact text of the note here if we can get it from Marc>
+@end{itemize}
+
+5. What is George up to?
+@begin{itemize}
+Did you follow him?
+
+Did you try to hide so you could watch?
+
+Try hiding in the upstairs closet.
+
+Now that you know he disappeared in the library, you might hide there
+next time to see what he does.
+
+Hide on the balcony.
+
+Now that you have seen someone enter the Hidden Closet, you can discover
+the way to get in - examine the bookshelves. (Alternatively, you could
+have found the way in without seeing George enter if you did a
+@b{careful} examination at some time after George has entered and left
+the button uncovered by books.)
+@end{itemize}
+
+6. How do I open the safe?
+@begin{itemize}
+Have you asked anyone for the combination?
+
+No one will admit to knowing it.
+
+Do you believe no one knows?
+
+What was George doing in the Hidden Closet?
+
+You must time your entry to the Hidden Closet so that you catch George
+with the safe open.
+
+By the way, don't forget to look inside the safe.
+@end{itemize}
+
+7. Who murdered Ms. Dunbar?
+@begin{itemize}
+Who had a motive?
+
+Who has the pen which wrote the "suicide" note?
+
+Ask the suspects for a pen.
+
+When you get one, try writing with it.
+@end{itemize}
+
+8. How did the murderer get to Ms. Dunbar?
+@begin{itemize}
+You might try hiding in the hall closet to see where he comes from.
+
+If you surprise him in the master bedroom or on the master bedroom
+balcony, you will be killed.
+
+Baxter used the ladder to reach the master bedroom balcony.
+
+Develop Hidden Question 9.
+@end{itemize}
+
+9. Is this the proper ending of the game?
+@begin{itemize}
+Do you feel satisfied?
+
+Don't you think you can solve the case without Dunbar being murdered?
+@end{itemize}
+
+10. Was it suicide?
+@begin{itemize}
+You must be kidding!
+
+<big space>***This space intentionally left blank.***
+@end{itemize}
+
+11. What do I need to get a conviction?
+@begin{itemize}
+You need a good case. There must be a clear motive, means of
+administering the drug and removing the evidence, no alibi,
+and no inconsistencies.
+@end{itemize}
+
+12. How can I prove that Mr. Baxter was involved?
+@begin{itemize}
+You'll have to come up with a motive. Develop Hidden Question 19.
+
+He has a good alibi for the night of the crime. You'll have to destroy
+it. Develop Hidden Question 20.
+
+You must also prove he had the means to carry out the crime. Develop Hidden
+Question 21.
+@end{itemize}
+
+13. How can I prove George is guilty?
+@begin{itemize}
+You'll need a solid motive.
+
+"Love of money is the root of all evil."
+
+A threatened change in the will would be a good reason ....
+
+Have you shown him the calendar entry concerning the new will?
+
+You'll also have to prove that he had the means to carry out the crime.
+Develop Hidden Question 22.
+@end{itemize}
+
+14. How do I prove that Mrs. Robner is guilty?
+@begin{itemize}
+She certainly had a motive - Steven.
+
+She also had a convenient balcony to re-enter the house without Mrs.
+Rourke hearing her.
+
+Was there any mud on her balcony or in her room?
+
+How would she have gotten the Loblo into Mr. Robner's tea?
+
+She couldn't do it alone.
+@end{itemize}
+
+15. How do I convict Ms. Dunbar?
+@begin{itemize}
+What would her motive be?
+
+She certainly had the opportunity to put her Loblo in the tea.
+
+How did she re-enter the house without Mrs. Rourke hearing her?
+
+She could not have done it alone. You'll have to find a reason she
+might help someone else.
+@end{itemize}
+
+16. What was McNabb's motive?
+@begin{itemize}
+Is it possible that Mr. Robner stepped on a rosebush?
+
+Be serious. McNabb is certainly not a suspect.
+@end{itemize}
+
+17. How did Steven get the Loblo capsules?
+@begin{itemize}
+This is a red herring.
+
+***This space intentionally left blank.***
+
+***This space intentionally left blank.***
+
+<very big space>***This space intentionally left blank.***
+@end{itemize}
+
+18. What caused the bruise on Mr. Robner's left temple?
+@begin{itemize}
+It is interesting that it was the left temple given that the body way
+lying on the right side on the floor.
+
+It is possible that Mr. Robner hit his head on the desk as he fell.
+
+It is also possible that the body was moved for some reason.
+
+There is no evidence which will allow a definite answer to this. It will
+remain a mystery forever.
+@end{itemize}
+
+19. How do I prove a motive for Mr. Baxter?
+@begin{itemize}
+There is an item of interest in the library.
+
+Check out the notepad.
+
+It appears that Baxter was involved with something called Focus. You
+will need to find the documents referred to in the note.
+@end{itemize}
+
+20. How can Baxter's alibi be destroyed?
+@begin{itemize}
+In his police interview, he said he was at the concert alone.
+
+Before continuing, show Ms. Dunbar the lab report and follow up on the
+subsequent developments.
+
+Develop Hidden Question 28.
+@end{itemize}
+
+21. How did Baxter carry out the murder?
+@begin{itemize}
+How could he have gotten the Loblo into Mr. Robner's tea?
+
+He had to have an accomplice.
+
+Ms. Dunbar delivered the tea and is obviously romantically involved with
+Baxter.
+@end{itemize}
+
+22. How did George carry out the murder?
+@begin{itemize}
+How did he get the Loblo into the tea?
+
+How did he re-enter the house without Mrs. Rourke hearing him (or is she
+lying?)?
+@end{itemize}
+
+23. Why is this question here?
+@begin{itemize}
+If you thought there were no more questions,
+
+you might be able to deduce
+
+something you should not yet know.
+
+This way,
+
+before you have developed @b{every} hint,
+
+the fact that this question remained undeveloped
+
+implied that one of the remaining hints was very important.
+
+<big box if room> But obviously it wasn't.
+@end{itemize}
+
+24. What do I do with the fragment?
+@begin{itemize}
+Did you clean it off and examine it?
+
+Do you recall anything similar?
+
+Didn't you examine the teacup in the library or those in the kitchen?
+
+If you count the teacups and saucers in the kitchen, you'll notice a
+teacup is missing.
+
+Could the teacup in the library be a substitute?
+
+The fragment ought to be analyzed.
+
+What might the chemical which "is not a common medication" be?
+
+One of the bottles of medicine was from another country.
+
+Have the fragment analyzed for the medication you suspect.
+
+Say "Analyze the fragment for Loblo."
+@end{itemize}
+
+25. What does the shoe size and depth indicate?
+@begin{itemize}
+See the answer to Hidden Question 26.
+@end{itemize}
+
+26. Who put the stolen Rembrandt here?
+@begin{itemize}
+See the answer to Hidden Question 25.
+@end{itemize}
+
+27. Why is there both a living and a dead Ms. Dunbar?
+@begin{itemize}
+Do you remember Dunbar referring to her identical twin sister?
+
+Wasn't Mrs. Robner an expert on make-up and impersonations during her
+early theatrical career?
+
+Wasn't Clement a plastic surgeon?
+
+This was a very funny bug in the early versions of the game.
+@end{itemize}
+
+28. Is the ticket stub meaningful?
+@begin{itemize}
+If you show Baxter the ticket stub, he admits that he was at the concert
+with Ms. Dunbar but says that she became ill at intermission and took a
+cab home.
+
+Dunbar originally said she was "out with a friend and we didn't get back
+until 10:30."
+
+If Dunbar is confronted with the ticket stub (and she wasn't present
+when you showed it to Mr. Baxter), she says "... we go to concerts, only
+occasionally, you understand. We went that night, the night Marshall
+died. @b{And then he took me home} and that's it."
+
+So, Baxter @b{was} at the Robner home Wednesday night but lied about it.
+@end{itemize}
+
+
+@newpage
+@center{@b{For Your Amusement (after you have finished the game)}}
+
+Have you ever tried:
+@begin{itemize}
+breaking a teacup (you might have to try several times)?
+
+having the ladder analyzed after noon (can you guess why this happens?)?
+
+smelling, tasting, or trying to eat the various drugs?
+
+swimming in the lake, taking a shower, flushing the toilet, turning on
+the water in the sink, ...?
+
+looking in the toilet or the bathroom mirror?
+
+smelling the sugar?
+
+saying "Find Duffy"
+
+taking or counting the silverware?
+
+picking the fruit or berries?
+
+drinking George's liquor twice?
+
+taking or eating George's red herring?
+
+saying "follow Mr. Robner"?
+
+"squeezing" or "turning on" any of the characters?
+
+waiting until a time earlier in the day?
+
+following an inanimate object?
+
+jumping from the balcony?
+
+saying "Zork"?
+
+kissing anyone?
+
+killing anyone (you might have to try several times)?
+@end{itemize}
diff --git a/m1.zil b/m1.zil
new file mode 100644
index 0000000..64b942f
--- /dev/null
+++ b/m1.zil
@@ -0,0 +1,53 @@
+"COMPILE FILE for
+ DEADLINE
+ Copyright 1982 Infocom, Inc. All rights reserved.
+"
+
+;<SNAME "INFOCOM.DEADLINE">
+
+<COND (<GASSIGNED? PREDGEN>
+ <PRINC "Compiling">
+ <ID 0>)
+ (T <PRINC "Loading">)>
+
+<PRINC " DEADLINE: An INTERLOGIC Mystery
+">
+
+<BLOAT 90000 0 0 3500 0 0 0 0 0 512>
+
+<SET REDEFINE T>
+
+<GLOBAL BIGFIX 10000>
+
+<OR <GASSIGNED? ZILCH>
+ <SETG WBREAKS <STRING !\" !,WBREAKS>>>
+
+<OR <GASSIGNED? INSERT-CRUFTY>
+ <DEFINE INSERT-CRUFTY (STR) <IFILE .STR T>>>
+
+<DEFINE IFILE (STR "OPTIONAL" (FLOAD? <>) "AUX" (TIM <TIME>))
+ <INSERT-FILE .STR .FLOAD?>>
+
+<IFILE "DUNGEON" T>
+
+<PROPDEF SIZE 5>
+<PROPDEF CAPACITY 0>
+
+<IFILE "SYNTAX" T>
+<ENDLOAD>
+<IFILE "MACROS" T>
+<IFILE "CLOCK" T>
+<IFILE "MAIN" T>
+<IFILE "PARSER" T>
+<INSERT-CRUFTY "CRUFTY">
+<IFILE "VERBS" T>
+<IFILE "ACTIONS" T>
+<IFILE "GOAL" T>
+
+<GC-MON T>
+<GC 0 T 5>
+
+
+
+
+
diff --git a/main.zil b/main.zil
index b93193d..d007a21 100644
--- a/main.zil
+++ b/main.zil
@@ -27,6 +27,7 @@
<GLOBAL P-HIM-HER-LOC <>>
<ROUTINE GO ()
+ <PUTB ,P-LEXV 0 59>
<SETG LIT T>
<SETG SCORE 8>
<SETG WINNER ,PLAYER>
@@ -36,11 +37,7 @@
<SETG P-HIM-HER ,MRS-ROBNER>
<SETG P-HIM-HER-LOC ,FOYER>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
- <ENABLE <QUEUE I-NEWSPAPER <+ 175 <RANDOM 40>>>>
- <ENABLE <QUEUE I-MAIL <+ 70 <RANDOM 60>>>>
- <ENABLE <QUEUE I-CALL <+ 60 <RANDOM 10>>>>
- <ENABLE <QUEUE I-BAXTER-ARRIVE 115>>
- <ENABLE <QUEUE I-COATES-ARRIVE <+ 230 <RANDOM 5>>>>
+ <ENABLE <QUEUE I-START-INTERRUPTS 1>>
<START-MOVEMENT>
<V-VERSION>
<CRLF>)>
@@ -49,6 +46,14 @@
<MAIN-LOOP>
<AGAIN>>
+<ROUTINE I-START-INTERRUPTS ()
+ <ENABLE <QUEUE I-NEWSPAPER <+ 175 <RANDOM 40>>>>
+ <ENABLE <QUEUE I-MAIL <+ 70 <RANDOM 60>>>>
+ <ENABLE <QUEUE I-CALL <+ 60 <RANDOM 10>>>>
+ <ENABLE <QUEUE I-BAXTER-ARRIVE 115>>
+ <ENABLE <QUEUE I-COATES-ARRIVE <+ 230 <RANDOM 5>>>>
+ <RFALSE>>
+
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP)
#DECL ((CNT OCNT ICNT NUM) FIX (V) <OR 'T FIX FALSE> (OBJ) <OR FALSE OBJECT>
@@ -116,7 +121,8 @@
<SETG P-CONT <>>)>
<COND (,P-WON
<COND (<VERB? TELL BRIEF SUPER-BRIEF VERBOSE TIME SAVE SPACE
- UNSPACE> T)
+ UNSPACE VERSION
+ QUIT RESTART SCORE SCRIPT UNSCRIPT RESTORE> T)
(T <SET V <CLOCKER>>)>)>>>
<ROUTINE QCONTEXT-CHECK (PRSO)
diff --git a/parser.zil b/parser.zil
index 389209d..554d56a 100644
--- a/parser.zil
+++ b/parser.zil
@@ -918,7 +918,7 @@ questions which cannot be asked directly." CR>
<ROUTINE WHICH-PRINT (TLEN LEN TBL "AUX" OBJ RLEN)
<SET RLEN .LEN>
- <TELL "Which ">
+ <TELL "Which">
<COND (<OR ,P-OFLAG ,P-MERGED> <TELL " "> <PRINTB ,P-NAM>)
(<==? .TBL ,P-PRSO>
<CLAUSE-PRINT ,P-NC1 ,P-NC1L <>>)
diff --git a/verbs.zil b/verbs.zil
new file mode 100644
index 0000000..97a47bc
--- /dev/null
+++ b/verbs.zil
@@ -0,0 +1,1901 @@
+"VERBS for
+ DEADLINE
+ Copyright 1982 Infocom, Inc. All rights reserved.
+"
+
+"SUBTITLE DESCRIBE THE UNIVERSE"
+
+"SUBTITLE SETTINGS FOR VARIOUS LEVELS OF DESCRIPTION"
+
+<GLOBAL VERBOSE <>>
+<GLOBAL SUPER-BRIEF <>>
+<GDECL (VERBOSE SUPER-BRIEF) <OR ATOM FALSE>>
+
+<ROUTINE V-VERBOSE ()
+ <SETG VERBOSE T>
+ <SETG SUPER-BRIEF <>>
+ <TELL "OK, you will get verbose descriptions." CR>>
+
+<ROUTINE V-BRIEF ()
+ <SETG VERBOSE <>>
+ <SETG SUPER-BRIEF <>>
+ <TELL "OK, you will get brief descriptions." CR>>
+
+<ROUTINE V-SUPER-BRIEF ()
+ <SETG SUPER-BRIEF T>
+ <TELL
+"OK, you will get super-brief descriptions. Remember that objects
+and people are not mentioned; only the name of the place you are in." CR>>
+
+\
+
+"SUBTITLE DESCRIBERS"
+
+<ROUTINE V-LOOK ()
+ <COND (<DESCRIBE-ROOM T>
+ <DESCRIBE-OBJECTS T>)>>
+
+<ROUTINE V-FIRST-LOOK ()
+ <COND (<DESCRIBE-ROOM>
+ <COND (<NOT ,SUPER-BRIEF> <DESCRIBE-OBJECTS>)>)>>
+
+<ROUTINE ROOM-CHECK ()
+ <COND (<IN? ,PRSO ,ROOMS>
+ <COND (<==? ,PRSO ,HERE>
+ <SETG PRSO ,GLOBAL-ROOM>
+ <RFALSE>)
+ (T
+ <TELL "You aren't in that room!" CR>
+ <RTRUE>)>)
+ (T <RFALSE>)>>
+
+<ROUTINE PRE-SEARCH ()
+ <COND (<ROOM-CHECK> <RTRUE>)
+ (T <RFALSE>)>>
+
+<ROUTINE PRE-EXAMINE ()
+ <COND (<ROOM-CHECK> <RTRUE>)
+ (<AND <==? ,P-ADVERB ,W?CAREFULLY>
+ <NOT <INT-WAIT 3>>>
+ <TELL
+"You never got to finish looking over the " D ,PRSO "." CR>)>>
+
+<ROUTINE V-EXAMINE ()
+ <COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
+ <NOT-HERE ,PRSO>
+ <RTRUE>)
+ (<GETP ,PRSO ,P?TEXT>
+ <TELL <GETP ,PRSO ,P?TEXT> CR>)
+ (<OR <FSET? ,PRSO ,CONTBIT>
+ <FSET? ,PRSO ,DOORBIT>>
+ <V-LOOK-INSIDE>)
+ (<FSET? ,PRSO ,PERSON>
+ <TELL <GET ,CHARACTER-DESCS <GETP ,PRSO ,P?CHARACTER>> CR>)
+ (ELSE
+ <TELL "There's nothing special about the" PRSO "." CR>)>>
+
+<GLOBAL LIT <>>
+
+<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (LOOK? <>) "AUX" V? STR)
+ <SET V? <OR .LOOK? ,VERBOSE>>
+ <COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
+ <FSET ,HERE ,TOUCHBIT>
+ <SET V? T>)>
+ <COND (<IN? ,HERE ,ROOMS> <TELL D ,HERE CR>)>
+ <COND (<OR .LOOK? <NOT ,SUPER-BRIEF>>
+ <COND (<FSET? <LOC ,WINNER> ,VEHBIT>
+ <TELL "(You are ">
+ <COND (<FSET? <LOC ,WINNER> ,SURFACEBIT>
+ <TELL "sitting o">)
+ (T <TELL "standing i">)>
+ <TELL "n the " D <LOC ,WINNER> ".)" CR>)>
+ <COND (<AND .V? <APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>>
+ <RTRUE>)
+ (<AND .V? <SET STR <GETP ,HERE ,P?LDESC>>>
+ <TELL .STR CR>)
+ (T <APPLY <GETP ,HERE ,P?ACTION> ,M-FLASH>)>
+ <COND (<NOT <==? ,HERE <LOC ,WINNER>>>
+ <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-LOOK>)>)>
+ <COND (<GETP ,HERE ,P?CORRIDOR> <CORRIDOR-LOOK>)>
+ T>
+
+<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>)>>
+
+"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>)
+ (<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>
+ <TELL "There is a " D .OBJ " here.">)
+ (ELSE
+ <TELL <GET ,INDENTS .LEVEL>>
+ <TELL "A " D .OBJ>)>
+ <COND (<AND <0? .LEVEL>
+ <SET AV <LOC ,WINNER>>
+ <FSET? .AV ,VEHBIT>>
+ <TELL " (outside the " D .AV ")">)>
+ <CRLF>
+ <COND (<AND <SEE-INSIDE? .OBJ> <FIRST? .OBJ>>
+ <PRINT-CONT .OBJ .V? .LEVEL>)>>
+
+<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 <NOT <FSET? .Y ,INVISIBLE>>
+ <NOT <FSET? .Y ,TOUCHBIT>>
+ <SET STR <GETP .Y ,P?FDESC>>>
+ <COND (<NOT <FSET? .Y ,NDESCBIT>>
+ <SET 1ST? <>>
+ <SET LEVEL 0>
+ <TELL .STR CR>)>
+ <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 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 " D .OBJ
+ " is:" CR>)
+ (<FSET? .OBJ ,PERSON>
+ <TELL D .OBJ " is holding:" CR>)
+ (ELSE
+ <TELL "The " D .OBJ
+ " contains:" CR>)>)>>
+
+\
+
+"SUBTITLE SCORING"
+
+<ROUTINE V-SCORE ("OPTIONAL" (ASK? T))
+ #DECL ((ASK?) <OR ATOM FALSE>)
+ <TELL
+"You are an amateur inspector, at best." CR>>
+
+<ROUTINE V-QUIT ("OPTIONAL" (ASK? T) "AUX" SCOR)
+ #DECL ((ASK?) <OR ATOM <PRIMTYPE LIST>> (SCOR) FIX)
+ <COND (<OR <AND .ASK?
+ <TELL
+"Do you wish to stop your investigation (Y/N)">
+ <YES?>>
+ <NOT .ASK?>>
+ <QUIT>)
+ (ELSE <TELL "Ok." CR>)>>
+
+<ROUTINE YES? ()
+ <PRINTI " >">
+ <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>)>>
+
+<ROUTINE V-VERSION ("AUX" (CNT 17))
+ <TELL
+"DEADLINE|
+Infocom interactive fiction - a mystery story|
+Copyright (c) 1982, 1983 by Infocom, Inc. All rights reserved.|
+DEADLINE is a registered trademark of Infocom, Inc.|
+Release ">
+ <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 V-AGAIN ("AUX" OBJ)
+ <SET OBJ
+ <COND (<AND ,L-PRSO <NOT <LOC ,L-PRSO>>>
+ ,L-PRSO)
+ (<AND ,L-PRSI <NOT <LOC ,L-PRSI>>>
+ ,L-PRSI)>>
+ <COND (.OBJ
+ <TELL "You can't see the " D .OBJ " any more." CR>
+ <RFATAL>)
+ (T
+ <PERFORM ,L-PRSA ,L-PRSO ,L-PRSI>)>>
+
+\
+
+"SUBTITLE DEATH AND TRANSFIGURATION"
+
+<GLOBAL DEAD <>>
+
+<ROUTINE V-RESTORE ()
+ <COND (<RESTORE>
+ <TELL "Ok." CR>
+ <V-FIRST-LOOK>)
+ (T
+ <TELL "Failed." CR>)>>
+
+<ROUTINE V-SAVE ()
+ <COND (<SAVE>
+ <TELL "Ok." CR>)
+ (T
+ <TELL "Failed." CR>)>>
+
+<ROUTINE V-RESTART ()
+ <TELL
+"Do you wish to restart your investigation (Y/N)">
+ <COND (<YES?>
+ ;<TELL CR "Not much like real life, eh? ... Restarting ..." CR>
+ <RESTART>
+ <TELL "Failed." CR>)>>
+
+<CONSTANT REXIT 0>
+<CONSTANT UEXIT 1>
+<CONSTANT NEXIT 2>
+<CONSTANT FEXIT 3>
+<CONSTANT CEXIT 4>
+<CONSTANT DEXIT 5>
+
+<CONSTANT NEXITSTR 0>
+<CONSTANT FEXITFCN 0>
+<CONSTANT CEXITFLAG 1>
+<CONSTANT CEXITSTR 1>
+<CONSTANT DEXITOBJ 1>
+<CONSTANT DEXITSTR 1>
+
+<ROUTINE V-WALK-AROUND ()
+ <TELL "Use directions for movement here." CR>>
+
+<ROUTINE GO-NEXT (TBL "AUX" VAL)
+ #DECL ((TBL) TABLE (VAL) ANY)
+ <COND (<SET VAL <LKP ,HERE .TBL>>
+ <GOTO .VAL>)>>
+
+<ROUTINE LKP (ITM TBL "AUX" (CNT 0) (LEN <GET .TBL 0>))
+ #DECL ((ITM) ANY (TBL) TABLE (CNT LEN) FIX)
+ <REPEAT ()
+ <COND (<G? <SET CNT <+ .CNT 1>> .LEN>
+ <RFALSE>)
+ (<==? <GET .TBL .CNT> .ITM>
+ <COND (<==? .CNT .LEN> <RFALSE>)
+ (T
+ <RETURN <GET .TBL <+ .CNT 1>>>)>)>>>
+
+<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
+ #DECL ((PT) <OR FALSE TABLE> (PTS) FIX (STR) <OR STRING FALSE>
+ (OBJ) OBJECT (RM) <OR FALSE OBJECT>)
+ <COND (<==? ,PRSO ,GLOBAL-CALL>
+ <PRE-TURN>
+ <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>>
+ <COND (<AND <EQUAL? ,STAIRS ,HERE .RM>
+ <EQUAL? ,P-ADVERB ,W?QUIETLY ,W?SLOWLY>>
+ <TELL
+"The stairs are still quite noisy even when walking up very slowly." CR>)>
+ <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>>)
+ (<FSET? .OBJ ,INVISIBLE>
+ <TELL "You can't go that way." CR>)
+ (<SET STR <GET .PT ,DEXITSTR>>
+ <TELL .STR CR>
+ <RFATAL>)
+ (T
+ <TELL "The " D .OBJ " is closed." CR>
+ <SETG P-IT-LOC ,HERE>
+ <SETG P-IT-OBJECT .OBJ>
+ <RFATAL>)>)>)
+ (<==? ,PRSO ,P?IN>
+ <TELL "In which direction do you want to go?" CR>
+ <RFATAL>)
+ (T
+ <TELL "You can't go that way." CR>
+ <RFATAL>)>>
+
+<ROUTINE V-INVENTORY ()
+ <COND (<FIRST? ,WINNER> <PRINT-CONT ,WINNER>)
+ (T <TELL "You are empty-handed." CR>)>>
+
+<GLOBAL INDENTS
+ <TABLE ""
+ " "
+ " "
+ " "
+ " "
+ " ">>
+
+\
+
+<ROUTINE PRE-TAKE ()
+ <COND (<EQUAL? ,PRSO ,SECOND-SECTION
+ ,GLOBAL-FINGERPRINTS ,GLOBAL-LADDER> <RFALSE>)
+ (<EQUAL? ,PRSO ,GLOBAL-WARRANT ,GLOBAL-RED-HERRINGS> <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 (<==? ,PRSI ,BOOKSHELVES> <RFALSE>)
+ (<NOT <==? ,PRSI <LOC ,PRSO>>>
+ <TELL "It's not in that!" CR>)
+ (T
+ <SETG PRSI <>>
+ <RFALSE>)>)
+ (<==? ,PRSO <LOC ,WINNER>> <TELL "You are in it, loser!" CR>)>>
+
+<ROUTINE V-TAKE ()
+ <COND (<==? <ITAKE> T>
+ <TELL "Taken." CR>)>>
+
+<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 <PICK-ONE ,YUKS> CR>)>
+ <RFALSE>)
+ (<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
+ <G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
+ <COND (.VB
+ <TELL "Your load is 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>>
+ ;"This must go! Chomping compiler strikes again"
+ <TELL "Oh, no. The " D .OBJ
+ " slips from your arms while you are taking the "
+ D ,PRSO ",
+and both tumble to the ground." CR>
+ <PERFORM ,V?DROP .OBJ>
+ <RFATAL>)
+ (T
+ <MOVE ,PRSO ,WINNER>
+ <FSET ,PRSO ,TOUCHBIT>
+ <RTRUE>)>>
+
+<ROUTINE PRE-PUT ()
+ <COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
+ <NOT <FSET? ,PRSO ,TAKEBIT>>>
+ <TELL "Nice try." CR>)>>
+
+<ROUTINE V-PUT ()
+ <COND (<OR <FSET? ,PRSI ,OPENBIT>
+ <OPENABLE? ,PRSI>
+ <FSET? ,PRSI ,VEHBIT>> T)
+ (T
+ <TELL "You can't do that." CR>
+ <RTRUE>)>
+ <COND (<NOT <FSET? ,PRSI ,OPENBIT>>
+ <TELL "The" PRSI " isn't open." CR>)
+ (<==? ,PRSI ,PRSO>
+ <TELL "How can you do that?" CR>)
+ (<IN? ,PRSO ,PRSI>
+ <TELL "The " D ,PRSO " is already in the " D ,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 "Done." CR>)>>
+
+<ROUTINE HELD? (OBJ)
+ <REPEAT ()
+ <COND (<EQUAL? <LOC .OBJ> ,ROOMS ,GLOBAL-OBJECTS> <RFALSE>)
+ (<IN? .OBJ ,WINNER> <RTRUE>)
+ (T <SET OBJ <LOC .OBJ>>)>>>
+
+<ROUTINE PRE-DROP ()
+ <COND (<==? ,PRSO <LOC ,WINNER>>
+ <PERFORM ,V?DISEMBARK ,PRSO>
+ <RTRUE>)>>
+
+<ROUTINE PRE-GIVE ()
+ <COND (<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 PRE-SGIVE ()
+ <PERFORM ,V?GIVE ,PRSI ,PRSO>
+ <RTRUE>>
+
+<ROUTINE V-GIVE ()
+ <COND (<NOT <FSET? ,PRSI ,PERSON>>
+ <TELL "You can't give a " D ,PRSO " to a " D ,PRSI "!" CR>)
+ (T <TELL D ,PRSI " refuses your offer." CR>)>>
+
+<ROUTINE V-SGIVE ()
+ <TELL "FOOOO!!" CR>>
+
+<ROUTINE V-DROP ()
+ <COND (<IDROP>
+ <TELL "The " D ,PRSO " is now on the ">
+ <COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
+ <TELL "ground">)
+ (T <TELL "floor">)>
+ <TELL "." CR>)>>
+
+<ROUTINE V-THROW () <COND (<IDROP> <TELL "Thrown." CR>)>>
+
+<ROUTINE V-THROW-THROUGH ()
+ <COND (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "Let's not resort to violence, please." CR>)
+ (T <V-THROW>)>>
+
+<ROUTINE V-THROW-AT ()
+ <COND (<NOT <IDROP>> <RTRUE>)
+ (<FSET? ,PRSI ,PERSON>
+ <TELL D ,PRSI
+ ", puzzled by your unorthodox methods, ducks as the "
+ D ,PRSO " flies by." CR>)
+ (T <TELL "Perhaps you aren't feeling well?" CR>)>>
+
+<ROUTINE IDROP
+ ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "It's not likely that " D ,PRSO " would 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 "The " D ,PRSO " is closed." CR>
+ <RFALSE>)
+ (T <MOVE ,PRSO <LOC ,WINNER>> <RTRUE>)>>
+
+\
+
+<ROUTINE V-OPEN ("AUX" F STR)
+ <COND (<NOT <FSET? ,PRSO ,CONTBIT>>
+ <TELL "You must be very clever to do that to the" PRSO "." CR>)
+ (<OR <FSET? ,PRSO ,DOORBIT>
+ <NOT <==? <GETP ,PRSO ,P?CAPACITY> 0>>>
+ <COND (<FSET? ,PRSO ,OPENBIT> <TELL "It is already open." CR>)
+ (T
+ <FSET ,PRSO ,OPENBIT>
+ <COND (<FSET? ,PRSO ,DOORBIT>
+ <TELL "The " D ,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 "The " D ,PRSO " opens." CR>
+ <TELL .STR CR>)
+ (T
+ <TELL "Opening the " D ,PRSO " reveals ">
+ <PRINT-CONTENTS ,PRSO>
+ <TELL "." CR>)>)>)
+ (T <TELL "The" PRSO " cannot be opened." CR>)>>
+
+<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 ">)>)>
+ <TELL "a " D .F>
+ <SET F .N>
+ <COND (<NOT .F> <RETURN>)>>)>>
+
+<ROUTINE V-CLOSE ()
+ <COND (<NOT <FSET? ,PRSO ,CONTBIT>>
+ <TELL "You must be very clever to do that to the" PRSO "." CR>)
+ (<FSET? ,PRSO ,DOORBIT>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <TELL "The " D ,PRSO " is now closed." CR>
+ <FCLEAR ,PRSO ,OPENBIT>)
+ (T <TELL "It is 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 is already closed." CR>)>)
+ (ELSE
+ <TELL "You cannot close that." CR>)>>
+
+<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>
+
+"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>>>
+
+<ROUTINE V-BUG ()
+ <TELL
+"If there is a problem here, it is unintentional. You may report
+your problem to the address provided in your documentation." CR>>
+
+<GLOBAL COPR-NOTICE
+" a transcript of interaction with DEADLINE.|
+DEADLINE is a registered trademark of Infocom, Inc.|
+Copyright (c) 1982 Infocom, Inc. All rights reserved.|
+">
+
+<ROUTINE V-SCRIPT ()
+ <PUT 0 8 <BOR <GET 0 8> 1>>
+ <TELL "Here begins" ,COPR-NOTICE CR>>
+
+<ROUTINE V-UNSCRIPT ()
+ <TELL "Here ends" ,COPR-NOTICE CR>
+ <PUT 0 8 <BAND <GET 0 8> -2>>
+ <RTRUE>>
+
+<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-LAMP-ON ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL
+"Ahem! You may or may not realize this, but you are on a case. You
+shouldn't be wasting your time attempting to flirt with the suspects.
+In any event, it's unlikely that you are person enough to do it." CR>)
+ (T <TELL "You can't turn that on." CR>)>>
+
+<ROUTINE V-LAMP-OFF ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "Your uncouth manner is certain to turn anyone off." CR>)
+ (T <TELL "You can't turn that off." CR>)>>
+
+;"V-WAIT has three modes, depending on the arguments:
+1) If only one argument is given, it will wait for that mnay 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 3) (WHO <>) (INT <>) "AUX" VAL)
+ #DECL ((NUM) FIX)
+ <SETG WHO-WAIT 0>
+ <COND (<NOT .INT> <TELL "Time passes..." CR>)>
+ <REPEAT ()
+ <COND (<L? <SET NUM <- .NUM 1>> 0> <RETURN>)
+ (<SET VAL <CLOCKER>>
+ <COND (<==? .VAL ,M-FATAL> <RETURN>)
+ (<AND <==? .WHO ,GLOBAL-DUFFY>
+ <NOT ,FINGERPRINT-OBJ>>
+ <RETURN>)
+ (<AND .WHO <IN? .WHO ,HERE>>
+ <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? (Y/N)">)
+ (T
+ <TELL
+"Do you want to keep waiting? (Y/N)">)>
+ <COND (<NOT <YES?>> <RETURN>)
+ (T <USL>)>)>)
+ (<AND <==? .WHO ,GLOBAL-DUFFY>
+ <NOT ,FINGERPRINT-OBJ>>
+ <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? (Y/N) ">
+ <COND (<NOT <YES?>> <RETURN>)>
+ <SETG WHO-WAIT 0>
+ <USL>)
+ (T <USL>)>>
+ <SETG CLOCK-WAIT T>
+ <COND (<NOT .INT> <V-TIME>)>
+ <RTRUE>>
+
+<ROUTINE INT-WAIT (N "AUX" TIM REQ)
+ <SET TIM ,PRESENT-TIME>
+ <V-WAIT <SET REQ <RANDOM <* .N 2>>> <> T>
+ <COND (<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 ,NOON> <V-WAIT-UNTIL> <RTRUE>)
+ (<==? ,PRSO ,GLOBAL-DUFFY>
+ <COND (,FINGERPRINT-OBJ
+ <V-WAIT 10000 ,PRSO>)
+ (T
+ <TELL
+"You would wait quite a while, since Sergeant Duffy is always
+nearby, but never approaches you unless requested." CR>)>)
+ (<FSET? ,PRSO ,PERSON>
+ <SET WHO <GET ,CHARACTER-TABLE
+ <GETP ,PRSO ,P?CHARACTER>>>
+ <COND (<IN? .WHO ,HERE>
+ <TELL "That person is already here!" CR>)
+ (T <V-WAIT 10000 .WHO>)>)
+ (T <TELL "Not a good idea. You might wait all day." CR>)>>
+
+<ROUTINE V-WAIT-UNTIL ()
+ <COND (<==? ,PRSO ,NOON>
+ <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 "Your sanity is coming into question." CR>)>>
+
+;<ROUTINE PRE-BOARD
+ ("AUX" AV)
+ <SET AV <LOC ,WINNER>>
+ <COND (<FSET? ,PRSO ,VEHBIT>
+ <COND (<NOT <IN? ,PRSO ,HERE>>
+ <TELL "The "
+ D
+ ,PRSO
+ " must be on the ground to be boarded." CR>)
+ (<FSET? .AV ,VEHBIT>
+ <TELL "You are already in the " D .AV ", cretin!" CR>)
+ (T <RFALSE>)>)
+ (<FSET? ,PRSO ,FURNITURE>
+ <TELL
+"You should be solving the case, not sitting down on the job!" CR>)
+ (T
+ <TELL "You no doubt have a theory on boarding a "
+ D
+ ,PRSO
+ "." CR>)>
+ <RFATAL>>
+
+;<ROUTINE V-BOARD
+ ("AUX" AV)
+ #DECL ((AV) OBJECT)
+ <TELL "You are now in the " D ,PRSO "." CR>
+ <MOVE ,WINNER ,PRSO>
+ <APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
+ <RTRUE>>
+
+<ROUTINE V-STAND ()
+ <COND (<OR <FSET? <LOC ,WINNER> ,SURFACEBIT>
+ <FSET? <LOC ,WINNER> ,FURNITURE>>
+ <TELL "You are on your own feet again." CR>
+ <MOVE ,WINNER ,HERE>)
+ (T
+ <TELL "You're already standing up!" CR>)>>
+
+<ROUTINE V-DISEMBARK ()
+ <COND (<NOT <==? <LOC ,WINNER> ,PRSO>>
+ <TELL "You're not in that!" CR>
+ <RFATAL>)
+ (T ;<FSET? ,HERE ,RLANDBIT>
+ <TELL "You are on your own feet again." CR>
+ <MOVE ,WINNER ,HERE>)
+ ;(T
+ <TELL
+"You realize, just in time, that getting out here would probably be fatal." CR>
+ <RFATAL>)>>
+
+<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" F WT)
+ #DECL ((RM) OBJECT)
+ <COND (<NOT <IN? <LOC ,WINNER> ,ROOMS>>
+ <TELL "You are seated, if you remember." CR>)
+ (T
+ <SET F <FIRST? ,HERE>>
+ <SET WT <GET ,WHERE-TABLES 0>>
+ <REPEAT ()
+ <COND (<NOT .F> <RETURN>)
+ (<AND <FSET? .F ,PERSON>
+ <NOT <==? .F ,PLAYER>>>
+ <PUT .WT <GETP .F ,P?CHARACTER> ,PRESENT-TIME>)>
+ <SET F <NEXT? .F>>>
+ <MOVE ,WINNER .RM>
+ <SETG HERE .RM>
+ <SETG LIT T>
+ <APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
+ <COND (.V? <V-FIRST-LOOK>)>)>>
+
+<ROUTINE PRE-POUR-ON ()
+ <TELL "You can't pour that on anything." CR>>
+
+<ROUTINE V-POUR-ON
+ ()
+ <REMOVE ,PRSO>
+ <COND (<FLAMING? ,PRSI>
+ <TELL "The " D ,PRSI " is extinguished." CR>)
+ (T
+ <TELL "The water spills over the "
+ D
+ ,PRSI
+ " and to the floor where it evaporates." CR>)>>
+
+<ROUTINE V-SQUEEZE
+ ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "It's unclear how " D ,PRSO
+ " would take this, so you defer until after hours.">)
+ (ELSE <TELL "How singularly useless.">)>
+ <CRLF>>
+
+<ROUTINE PRE-FILL ("AUX" TX)
+ <COND (<AND <NOT ,PRSI> <SET TX <GETPT ,HERE ,P?GLOBAL>>>
+ <COND (<ZMEMQB ,GLOBAL-WATER .TX <PTSIZE .TX>>
+ <SETG PRSI ,GLOBAL-WATER>
+ <RFALSE>)
+ (T
+ <TELL "There's nothing to fill it with." CR>
+ <RTRUE>)>)>
+ <COND (<NOT <EQUAL? ,PRSI ,GLOBAL-WATER>>
+ <PERFORM ,V?PUT ,PRSI ,PRSO>
+ <RTRUE>)>>
+
+<ROUTINE V-FILL ()
+ <COND (<NOT ,PRSI>
+ <COND (<GLOBAL-IN? ,GLOBAL-WATER ,HERE>
+ <PERFORM ,V?FILL ,PRSO ,GLOBAL-WATER>)
+ (T
+ <TELL "There's nothing to fill it with." CR>)>)
+ (T <TELL "You can't do that." CR>)>>
+
+<ROUTINE V-BRUSH ()
+ <TELL
+"Cleanliness is next to Godliness, although in this case it seems to be
+next to Uselessness." CR>>
+
+<ROUTINE V-RING () <TELL "How, exactly, does one ring that?" CR>>
+
+<ROUTINE V-DRINK ()
+ <V-EAT>>
+
+<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 "How does one drink that?" 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"
+ PRSO
+ " wouldn't agree with you." CR>)>>
+
+<ROUTINE V-CURSES ()
+ <COND (,PRSO
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "Insults of this nature won't help you." CR>)
+ (T
+ <TELL "What a loony!" CR>)>)
+ (T
+ <TELL <PICK-ONE ,OFFENDED> CR>)>>
+
+<ROUTINE V-LISTEN ()
+ <COND (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "The ">)>
+ <TELL D ,PRSO " makes no sound." CR>>
+
+<ROUTINE V-FOLLOW ("AUX" CN CHR COR PCOR L)
+ <SET CN <GETP ,PRSO ,P?CHARACTER>>
+ <SET CHR <GET ,CHARACTER-TABLE .CN>>
+ <SET L <LOC .CHR>>
+ <COND (<==? ,PRSO ,PLAYER>
+ <TELL
+"It's not clear whom you are talking to." CR>)
+ (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL
+"How tragic to see a formerly great detective stalking a " D ,PRSO "." CR>)
+ (<==? ,HERE .L>
+ <TELL
+"You're in the same place as " D .CHR "!" CR>)
+ (<NOT .L>
+ <TELL D .CHR " has left the grounds." CR>)
+ (<==? <GET <GET ,WHERE-TABLES 0> .CN> ,PRESENT-TIME>
+ <GOTO .L>)
+ (<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 " D .CHR "." CR>)>>
+
+<GLOBAL OFFENDED
+ <LTABLE "You ought to be ashamed of yourself."
+ "One must try to avoid locker-room talk while working.">>
+
+<ROUTINE V-LEAP ("AUX" TX S)
+ <COND (,PRSO
+ <COND (<IN? ,PRSO ,HERE>
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "The "
+ D
+ ,PRSO
+ " is too big to jump over." CR>)
+ (T <V-SKIP>)>)
+ (T <TELL "That would be a good trick." CR>)>)
+ (<SET TX <GETPT ,HERE ,P?DOWN>>
+ <SET S <PTSIZE .TX>>
+ <COND (<OR <==? .S 2> ;NEXIT
+ <AND <==? .S 4> ;CEXIT
+ <NOT <VALUE <GETB .TX 1>>>>>
+ <TELL
+"For a brief moment, you feel the exhilaration of free fall. A thought
+hits you: the ground is moving toward me. It is your last thought." CR>
+ <QUIT>)
+ (T <V-SKIP>)>)
+ (ELSE <V-SKIP>)>>
+
+<ROUTINE V-SKIP () <TELL "Wheeeeeeeeee!!!!!" CR>>
+
+<ROUTINE V-LEAVE () <PERFORM ,V?WALK ,P?OUT>>
+
+<ROUTINE V-GOODBYE () <V-HELLO <>>>
+
+<ROUTINE V-HELLO ("OPTIONAL" (HELL T))
+ <COND (,PRSO
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL D
+ ,PRSO
+ " returns the salutation." CR>)
+ (ELSE
+ <TELL
+"Only schizophrenics say \"">
+ <COND (.HELL "Hello") (T "Goodbye")>
+ <TELL "\" to a "
+ D
+ ,PRSO
+ "." CR>)>)
+ (ELSE <TELL "Good day." CR>)>>
+
+<ROUTINE NOT-HERE (OBJ)
+ <TELL "You can't see ">
+ <COND (<FSET? .OBJ ,PERSON>
+ <TELL D .OBJ>)
+ (T <TELL "that">)>
+ <TELL " here." CR>>
+
+<ROUTINE PRE-READ ()
+ <COND (<NOT ,LIT> <TELL "It is impossible to read in the dark." CR>)
+ (<EQUAL? ,PRSO ,GLOBAL-ENDING ,SECOND-SECTION> <RFALSE>)
+ (<IN? ,PRSO ,GLOBAL-OBJECTS>
+ <NOT-HERE ,PRSO>)
+ (<FSET? ,PRSO ,DRUGBIT>
+ <TELL "You examine one of the handful of pills:" CR>
+ <RFALSE>)
+ (<AND ,PRSI
+ <NOT <FSET? ,PRSI ,TRANSBIT>>
+ <NOT <==? ,PRSI ,INTNUM>>>
+ <TELL "How does one look through the" PRSI "?" CR>)
+ (<AND <==? ,P-ADVERB ,W?CAREFULLY>
+ <NOT <INT-WAIT 3>>>
+ <TELL "You never got to finish reading the " D ,PRSO "." CR>)>>
+
+<ROUTINE V-READ ()
+ <COND (<NOT <FSET? ,PRSO ,READBIT>>
+ <TELL "You cannot read the " D ,PRSO "." CR>)
+ (ELSE <TELL <GETP ,PRSO ,P?TEXT> CR>)>>
+
+<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 is nothing but dust there." CR>)
+ (T
+ <TELL "That's not so useful." CR>)>>
+
+<ROUTINE V-LOOK-BEHIND ()
+ <TELL "There is nothing behind ">
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL D ,PRSO>)
+ (T <TELL "the" PRSO>)>
+ <TELL "." CR>>
+
+<ROUTINE V-LOOK-INSIDE
+ ()
+ <COND (<FSET? ,PRSO ,RLANDBIT>
+ <ROOM-PEEK>)
+ (<FSET? ,PRSO ,DOORBIT>
+ <COND (<FSET? ,PRSO ,OPENBIT>
+ <TELL "The "
+ D
+ ,PRSO
+ " is open, but you can't tell what's beyond it.">)
+ (ELSE <TELL "The " D ,PRSO " is closed.">)>
+ <CRLF>)
+ (<FSET? ,PRSO ,CONTBIT>
+ <COND (<SEE-INSIDE? ,PRSO>
+ <COND (<AND <FIRST? ,PRSO> <PRINT-CONT ,PRSO>>
+ <RTRUE>)
+ (<FSET? ,PRSO ,SURFACEBIT>
+ <TELL "There is nothing on the" PRSO "." CR>)
+ (T
+ <TELL "The " D ,PRSO " is empty." CR>)>)
+ (ELSE <TELL "The " D ,PRSO " is closed." CR>)>)
+ (ELSE <TELL "One can't look inside the" PRSO "." CR>)>>
+
+<ROUTINE SEE-INSIDE? (OBJ)
+ <AND <NOT <FSET? .OBJ ,INVISIBLE>>
+ <OR <FSET? .OBJ ,TRANSBIT> <FSET? .OBJ ,OPENBIT>>>>
+
+<ROUTINE PRE-BURN ()
+ <COND (<FLAMING? ,PRSI> <RFALSE>)
+ (T <TELL "With the" PRSI "??!?" CR>)>>
+
+<ROUTINE V-BURN
+ ()
+ <TELL "You can't burn the " D ,PRSO "." CR>
+ ;<COND (<FSET? ,PRSO ,BURNBIT>
+ <COND (<IN? ,PRSO ,WINNER>
+ <REMOVE ,PRSO>
+ <TELL "The " D ,PRSO " catches fire." CR>
+ <TELL
+"Unfortunately, you were holding it at the time." CR>
+ <QUIT>)
+ (T
+ <REMOVE ,PRSO>
+ <TELL "The " D ,PRSO
+ " catches fire and is consumed." CR>)
+ (ELSE <TELL "You don't have that." CR>)>)
+ (T )>>
+
+<ROUTINE PRE-TURN ()
+ <COND (<==? ,PRSO ,GLOBAL-CALL>
+ <TELL "Specify a direction if you want to move around." CR>)
+ (<NOT <FSET? ,PRSO ,TURNBIT>>
+ <TELL "You can't turn that!" CR>)>>
+
+<ROUTINE V-TURN () <TELL "This has no effect." CR>>
+
+<ROUTINE V-PUMP ()
+ <TELL "It's not awfully clear how." CR>>
+
+<ROUTINE V-LOCK () <TELL "It doesn't seem to work." CR>>
+
+<ROUTINE V-PICK () <TELL "You can't pick that." CR>>
+
+<ROUTINE V-UNLOCK () <TELL "It doesn't seem to work." CR>>
+
+<ROUTINE V-CUT ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <PERFORM ,V?KILL ,PRSO ,PRSI>)
+ (<AND <FSET? ,PRSO ,BURNBIT>
+ <FSET? ,PRSI ,WEAPONBIT>>
+ <REMOVE ,PRSO>
+ <TELL "Your skillful "
+ D
+ ,PRSI
+ "smanship slices the "
+ D
+ ,PRSO
+ " into innumerable
+slivers that evaporate instantaneously."
+ CR>)
+ (<NOT <FSET? ,PRSI ,WEAPONBIT>>
+ <TELL
+"You find that the \"cutting edge\" of the" PRSI " is inadequate." CR>)
+ (T
+ <TELL "That's a strange concept, cutting the" PRSO "." CR>)>>
+
+<ROUTINE V-KILL ()
+ <IKILL "kill">>
+
+<ROUTINE IKILL (STR)
+ #DECL ((STR) STRING)
+ <COND (<NOT ,PRSO> <TELL "There is nothing here to " .STR "." CR>)
+ (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "No doubt you need a refresher course at the academy "
+ "in the martial arts, but the "
+ D
+ ,PRSO
+ " is hardly a likely target." CR>)
+ (<==? ,PRSI ,PISTOL>
+ <TELL
+"A shot rings out and " D ,PRSO " falls to the ground, dead. Good shot." CR>
+ <GONE-CRAZY>)
+ (<PROB 50>
+ <TELL "You rethink your planned action." CR>)
+ (T
+ <TELL
+"With a lethal blow of your hand, " D ,PRSO " falls dead." CR>
+ <GONE-CRAZY>)>>
+
+<ROUTINE V-ATTACK () <IKILL "attack">>
+
+<ROUTINE V-SWING ()
+ <COND (<NOT ,PRSI>
+ <TELL "Whoosh!" CR>)
+ (T <PERFORM ,V?ATTACK ,PRSI ,PRSO>)>>
+
+<ROUTINE V-KICK ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "This sort of shabby behavior is disgusting." CR>)
+ (T <HACK-HACK "Kicking the ">)>>
+
+<ROUTINE V-WAVE () <HACK-HACK "Waving the ">>
+
+<ROUTINE V-RAISE () <HACK-HACK "Playing in this way with the ">>
+
+<ROUTINE V-LOWER () <HACK-HACK "Playing in this way with the ">>
+
+<ROUTINE V-RUB () <HACK-HACK "Fiddling with the ">>
+
+<ROUTINE V-PUSH () <HACK-HACK "Pushing the ">>
+
+<ROUTINE V-MUNG ()
+ <HACK-HACK "Trying to destroy the ">>
+
+<ROUTINE HACK-HACK
+ (STR)
+ #DECL ((STR) STRING)
+ <TELL .STR D ,PRSO <PICK-ONE ,HO-HUM> CR>>
+
+<GLOBAL HO-HUM
+ <LTABLE
+ " isn't particularly useful."
+ " has no effect.">>
+
+<ROUTINE WORD-TYPE
+ (OBJ WORD "AUX" SYNS)
+ #DECL ((OBJ) OBJECT (WORD SYNS) TABLE)
+ <ZMEMQ .WORD
+ <SET SYNS <GETPT .OBJ ,P?SYNONYM>>
+ <- </ <PTSIZE .SYNS> 2> 1>>>
+
+<ROUTINE V-KNOCK
+ ()
+ <COND (<WORD-TYPE ,PRSO ,W?DOOR>
+ <TELL "It appears that nobody's home." CR>)
+ (ELSE <TELL "Why knock on a " D ,PRSO "?" CR>)>>
+
+\
+
+<ROUTINE V-SHAKE ("AUX" X)
+ <COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
+ <TELL "You can't take it; thus, you can't shake it!" CR>)
+ (<AND <NOT <FSET? ,PRSO ,OPENBIT>>
+ <FIRST? ,PRSO>>
+ <TELL "It sounds as though there is something inside the "
+ D
+ ,PRSO
+ "."
+ CR>)
+ (<AND <FSET? ,PRSO ,OPENBIT> <FIRST? ,PRSO>>
+ <REPEAT ()
+ <COND (<SET X <FIRST? ,PRSO>>
+ <MOVE .X ,HERE>
+ <FSET .X ,TOUCHBIT>)
+ (ELSE <RETURN>)>>
+ <TELL "Everything in it spills onto the floor." CR>)
+ (T <TELL "Well, what did you expect to happen?" CR>)>>
+
+<ROUTINE PRE-DIG
+ ()
+ <COND (<FSET? ,PRSI ,TOOLBIT>
+ <TELL "Digging with the" PRSI " is slow and tedious." CR>)
+ (ELSE
+ <TELL "Digging with a " D ,PRSI " is silly." CR>)>>
+
+<ROUTINE V-SEARCH-OBJECT-FOR ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL D ,PRSO
+ " resignedly allows you to perform the search." CR>
+ <COND (<IN? ,PRSI ,PRSO>
+ <TELL "Indeed, " D ,PRSO " has the " D ,PRSI "." CR>)
+ (T <TELL D ,PRSO " doesn't have that." CR>)>)
+ (<IN? ,PRSI ,PRSO>
+ <TELL "How observant you are! There it is!" CR>)
+ (T <TELL "You don't find the" PRSI " there." CR>)>>
+
+<ROUTINE V-DIG () <TELL "What a silly idea!" CR>>
+
+<ROUTINE V-SMELL () <TELL "It smells just like a" PRSO "." CR>>
+
+<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TX)
+ <COND (<SET TX <GETPT .OBJ2 ,P?GLOBAL>>
+ <ZMEMQB .OBJ1 .TX <- <PTSIZE .TX> 1>>)>>
+
+<ROUTINE V-SWIM ()
+ <TELL "Swimming isn't possible ">
+ <COND (,PRSO
+ <TELL "in the " D ,PRSO>)
+ (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
+ <TELL "on the grounds">)
+ (T <TELL "right on the floor, Sherlock">)>
+ <TELL "." CR>>
+
+<ROUTINE PRE-UNTIE ()
+ <TELL "This cannot be tied, so it cannot be untied!" CR>>
+
+<ROUTINE V-UNTIE () <TELL "Foo!" CR>>
+
+<ROUTINE PRE-TIE
+ ()
+ <COND (<==? ,PRSI ,WINNER>
+ <TELL "You can't tie it to yourself." CR>)>>
+
+<ROUTINE V-TIE () <TELL "You can't tie the" PRSO " to that." CR>>
+
+<ROUTINE V-TIE-UP () <TELL "You could certainly never tie it with that!" CR>>
+
+<ROUTINE V-MUMBLE
+ ()
+ <TELL "It has been a long day, hasn't it?" CR>>
+
+<ROUTINE V-ALARM ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "He's wide awake, or haven't you noticed?" CR>)
+ (ELSE
+ <TELL "The" PRSO " doesn't sleep." CR>)>>
+
+<ROUTINE V-ZORK ()
+ <TELL
+"A series of fantasy simulation games and a registered trademark of Infocom,
+Inc." CR>>
+
+\
+
+;<ROUTINE MUNG-ROOM (RM STR)
+ #DECL ((STR) STRING)
+ <FSET .RM ,RMUNGBIT>
+ <PUTP .RM ,P?LDESC .STR>>
+
+<ROUTINE V-CLIMB-ON ()
+ <COND (<AND <FSET? ,PRSO ,FURNITURE> <FSET? ,PRSO ,VEHBIT>>
+ <MOVE ,PLAYER ,PRSO>
+ <TELL "You are now seated on the " D ,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 " D ,PRSO "." CR>)>>
+
+<ROUTINE V-CLIMB-FOO () <V-CLIMB-UP ,P?UP T>>
+
+<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 to no avail." CR>)
+ (ELSE <TELL "Bizarre!" 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-SEND ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "Why would you send for the" PRSO "?" CR>)
+ (ELSE <TELL "Sigh." CR>)>>
+
+<ROUTINE V-COUNT ("AUX" (CNT <GETP ,PRSO ,P?COUNT>))
+ #DECL ((CNT) FIX)
+ <COND (<FSET? ,PRSO ,DRUGBIT>
+ <TELL "There ">
+ <COND (<1? .CNT> <TELL "is ">)
+ (T <TELL "are ">)>
+ <PRINTN .CNT>
+ <TELL " of them." CR>)
+ (<==? ,PRSO ,END-TABLE>
+ <TELL "There are two in a pair, or have you forgotten?" CR>)
+ (T
+ <TELL "Unless you are drunk, one." CR>)>>
+
+<ROUTINE V-PUT-UNDER ()
+ <TELL "There's not enough room." CR>>
+
+<ROUTINE V-ENTER ()
+ <PERFORM ,V?WALK ,P?IN>>
+
+<ROUTINE V-EXIT ()
+ <PERFORM ,V?WALK ,P?OUT>>
+
+<ROUTINE V-CROSS ()
+ <TELL "You can't cross that!" CR>>
+
+<ROUTINE V-SEARCH ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL D ,PRSO
+ " grudgingly allows you to search. You find nothing
+whatsoever of interest." CR>)
+ (T <TELL "You find nothing unusual." CR>)>>
+
+<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>)>)
+ (<==? ,PRSO ,GLOBAL-MR-ROBNER>
+ <TELL
+"He's in the morgue, no doubt." 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 (<EQUAL? .CHR ,MRS-ROBNER-C ,ROURKE-C ,DUNBAR-C>
+ <SET PRON ,PRON-HER>
+ <SET PRON1 ,PRON-SHE>)>
+ <COND (<AND <NOT <==? ,WINNER ,PLAYER>>
+ <NOT <GRAB-ATTENTION ,WINNER>>>
+ <RTRUE>)>
+ <COND (<==? <LOC ,WINNER> <LOC ,PRSO>>
+ <COND (<==? ,WINNER ,PLAYER>
+ <TELL "Are you blind?" 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 " today.\"" 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 ago">)
+ (<G? .NUM 80>
+ <TELL "an hour or two ago">)
+ (<G? .NUM 45>
+ <TELL "about an hour ago">)
+ (<G? .NUM 20>
+ <TELL "about half an hour ago">)
+ (<G? .NUM 10>
+ <TELL "about 15 minutes ago">)
+ (<G? .NUM 5>
+ <TELL "less than 10 minutes ago">)
+ (T
+ <TELL "just a minute ago">)>
+ <COND (<NOT <==? ,WINNER ,PLAYER>>
+ <TELL ". I don't know where ">
+ <TELL .PRON1 " went, though.\"" CR>)
+ (T <TELL "." CR>)>)>
+ <RTRUE>)>>
+
+<ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
+ <COND (<==? ,PRSO ,PLAYER>
+ <TELL "You're around here somewhere..." CR>)
+ (<NOT <==? ,PLAYER ,WINNER>>
+ <TELL "\"I don't know.\"" CR>)
+ (<EQUAL? .L ,GLOBAL-OBJECTS>
+ <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 ,CONTBIT>
+ <TELL "It's ">
+ <COND (<FSET? .L ,SURFACEBIT> <TELL "o">)
+ (T <TELL "i">)>
+ <TELL "n the " D .L "." CR>)
+ (ELSE
+ <TELL "Who knows?" CR>)>>
+
+<GLOBAL QCONTEXT <>>
+<GLOBAL QCONTEXT-ROOM <>>
+
+<ROUTINE V-TELL ()
+ <COND (<==? ,PRSO ,PLAYER>
+ <TELL
+"Talking to yourself is said to be a sign of impending mental
+collapse." CR>)
+ (<FSET? ,PRSO ,PERSON>
+ <COND (,P-CONT
+ <SETG WINNER ,PRSO>)
+ (T
+ <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 V-ANSWER ()
+ <TELL "Nobody seems to be awaiting your answer." CR>
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>
+ <RTRUE>>
+
+<ROUTINE V-REPLY ()
+ <TELL "It is hardly likely that the " D ,PRSO " is interested." CR>
+ <SETG P-CONT <>>
+ <SETG QUOTE-FLAG <>>
+ <RTRUE>>
+
+<ROUTINE V-WHAT ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "Surely you have read the interviews." CR>)
+ (T <TELL "Are you talking to yourself again?" CR>)>>
+
+<ROUTINE V-KISS ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL
+"Section 204D, Paragraph 7.6 of the Connecticut Police Code of
+Conduct specifically prohibits kissing suspects." CR>)
+ (T <TELL "What a (ahem!) strange idea!" CR>)>>
+
+<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, tut-tuts this sort of thing. A pity." CR>)
+ (T <GONE-CRAZY>)>)
+ (T <TELL "What a (ahem!) strange idea!" CR>)>>
+
+<ROUTINE V-DIAGNOSE ()
+ <TELL "You're OK for now." 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-SSHOW ()
+ <SETG P-MERGED T>
+ <PERFORM ,V?SHOW ,PRSI ,PRSO>
+ <RTRUE>>
+
+<ROUTINE V-SSHOW () <RTRUE>>
+
+<ROUTINE V-SHOW ()
+ <COND (<==? ,PRSO ,PLAYER>
+ <TELL "Do you often talk to yourself?" CR>)
+ (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "Do you expect applause from the" PRSO "?" CR>)
+ (T
+ <TELL D ,PRSO <PICK-ONE ,WHO-CARES> "." CR>)>>
+
+<GLOBAL WHO-CARES
+ <LTABLE " doesn't appear interested"
+ " seems not to care"
+ " lets out a loud yawn"
+ " seems to be getting impatient">>
+
+<ROUTINE V-TELL-ME ()
+ <V-CONFRONT>>
+
+<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-SEND-FOR ("AUX" REAL)
+ <COND (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "You can only send for a person." CR>)
+ (T
+ <SET REAL <COND (<IN? ,PRSO ,GLOBAL-OBJECTS>
+ <GET ,CHARACTER-TABLE
+ <GETP ,PRSO ,P?CHARACTER>>)
+ (T ,PRSO)>>
+ <COND (<IN? .REAL ,HERE>
+ <TELL D .REAL " is already here." CR>)
+ (T <TELL "You can't send for people." CR>)>)>>
+
+<ROUTINE V-ANALYZE ()
+ <COND (<==? ,PRSI ,GLOBAL-FINGERPRINTS>
+ <PERFORM ,V?FINGERPRINT ,PRSO>
+ <RTRUE>)
+ (<FSET? ,PRSO ,TAKEBIT>
+ <DO-ANALYZE>)
+ (,FINGERPRINT-OBJ
+ <TELL "Duffy is already occupied with another errand." CR>)
+ (<IN? ,PRSO ,GLOBAL-OBJECTS>
+ <TELL
+"Duffy appears in an instant. \"Well, I might be able to analyze the "
+D ,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 PRE-ACCUSE ()
+ <COND (<NOT ,PRSI>
+ <SETG PRSI ,GLOBAL-MURDER>)>
+ <COND (<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 suggestion." CR>>
+
+<ROUTINE V-ARREST ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL
+"You realize that you don't have enough evidence to convict " D ,PRSO>
+ <TELL " so
+you resolve to continue the investigation." CR>)
+ (<==? ,PRSO ,GLOBAL-DUFFY>
+ <TELL "Oh, come on now! Not trusty " D ,PRSO "!" CR>)
+ (T
+ <TELL
+"Sergeant Duffy enters, strokes his chin, and in a rather puzzled voice
+says \"Excuse me, sir, but it would cause quite a stir at the station
+to be charging a " D ,PRSO " with murder!\" He leaves quietly." CR>)>>
+
+<ROUTINE V-ASK-ABOUT ()
+ <COND (<==? ,PRSO ,PLAYER>
+ <TELL
+"Talking to yourself is said to be a sign of impending mental
+collapse." CR>)
+ (<==? ,PRSO ,GLOBAL-STEVEN>
+ <TELL "Steven isn't in the area." CR>)
+ (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "Do you often talk to a " D ,PRSO "?" CR>)
+ (T
+ <TELL D ,PRSO " doesn't seem to know about that." CR>)>>
+
+<ROUTINE V-ASK-FOR ()
+ <COND (<AND <FSET? ,PRSO ,PERSON> <NOT <==? ,PRSO ,PLAYER>>>
+ <COND (<EQUAL? ,PRSI ,SAFE ,GLOBAL-SAFE>
+ <PERFORM ,V?ASK-ABOUT ,PRSO ,PRSI>
+ <RTRUE>)>
+ <TELL D ,PRSO>
+ <COND (<IN? ,PRSI ,PRSO>
+ <TELL " hands you the " D ,PRSI "." CR>
+ <MOVE ,PRSI ,WINNER>)
+ (T <TELL " doesn't have that." CR>)>)
+ (T <TELL "Be serious!" CR>)>>
+
+<ROUTINE V-HOLD-UP ()
+ <TELL "That doesn't seem to help at all." CR>>
+
+"Routines to do looking down corridors"
+
+<ROUTINE CORRIDOR-LOOK ("OPTIONAL" (ITM <>) "AUX" C Z COR VAL (FOUND <>))
+ <COND (<SET C <GETP ,HERE ,P?CORRIDOR>>
+ <REPEAT ()
+ <COND (<NOT <L? <SET Z <- .C 2048>> 0>>
+ <SET COR ,COR-2048>)
+ (<NOT <L? <SET Z <- .C 1024>> 0>>
+ <SET COR ,COR-1024>)
+ (<NOT <L? <SET Z <- .C 512>> 0>>
+ <SET COR ,COR-512>)
+ (<NOT <L? <SET Z <- .C 256>> 0>>
+ <SET COR ,COR-256>)
+ (<NOT <L? <SET Z <- .C 128>> 0>>
+ <SET COR ,COR-128>)
+ (<NOT <L? <SET Z <- .C 64>> 0>>
+ <SET COR ,COR-64>)
+ (<NOT <L? <SET Z <- .C 32>> 0>>
+ <SET COR ,COR-32>)
+ (<NOT <L? <SET Z <- .C 16>> 0>>
+ <SET COR ,COR-16>)
+ (<NOT <L? <SET Z <- .C 8>> 0>>
+ <SET COR ,COR-8>)
+ (<NOT <L? <SET Z <- .C 4>> 0>>
+ <SET COR ,COR-4>)
+ (<NOT <L? <SET Z <- .C 2>> 0>>
+ <SET COR ,COR-2>)
+ (<NOT <L? <SET Z <- .C 1>> 0>>
+ <SET COR ,COR-1>)
+ (T <RETURN>)>
+ <SET VAL <CORRIDOR-CHECK .COR .ITM>>
+ <COND (<NOT .FOUND> <SET FOUND .VAL>)>
+ <SET C .Z>>
+ .FOUND)>>
+
+<ROUTINE CORRIDOR-CHECK (COR ITM "AUX" (CNT 2) (PAST 0) (FOUND <>) RM OBJ)
+ #DECL ((COR) <PRIMTYPE VECTOR> (CNT PAST) FIX)
+ <REPEAT ()
+ <COND (<==? <SET RM <GET .COR .CNT>> 0>
+ <RFALSE>)
+ (<==? .RM ,HERE> <SET PAST 1>)
+ (<SET OBJ <FIRST? .RM>>
+ <REPEAT ()
+ <COND (.ITM
+ <COND (<==? .OBJ .ITM>
+ <SET FOUND <GET .COR .PAST>>
+ <RETURN>)>)
+ (<AND <FSET? .OBJ ,PERSON>
+ <NOT <IN-MOTION? .OBJ>>>
+ <TELL D .OBJ " is ">
+ <COND (<==? <GETP .RM ,P?LINE>
+ ,OUTSIDE-LINE-C>
+ <TELL "off">)
+ (T <TELL "down the hall">)>
+ <TELL " to ">
+ <DIR-PRINT <GET .COR .PAST>>
+ <TELL "." CR>)>
+ <SET OBJ <NEXT? .OBJ>>
+ <COND (<NOT .OBJ> <RETURN>)>>
+ <COND (.FOUND <RETURN .FOUND>)>)>
+ <SET CNT <+ .CNT 1>>>>
+
+<ROUTINE V-LEAN ()
+ <TELL "You can't do that!" CR>>
+
+<GLOBAL FINGERPRINT-OBJ <>>
+
+<ROUTINE V-FINGERPRINT ()
+ <TELL
+"Upon looking over and dusting the" PRSO " you notice that there are no
+good fingerprints to be found." CR>>
+
+<ROUTINE V-FLUSH ()
+ <TELL "Whatever do you have in mind?" CR>>
+
+<ROUTINE V-DIG-AROUND ()
+ <TELL "You can't do that." CR>>
+
+<ROUTINE V-SEARCH-AROUND ()
+ <TELL "You don't find anything interesting." CR>>
+
+<ROUTINE V-SEARCH-GROUND-AROUND ()
+ <COND (<==? ,PRSO ,GROUND>
+ <TELL "You don't find anything interesting." CR>)
+ (T <TELL "Huh?" CR>)>>
+
+<ROUTINE V-SEARCH-GROUND-UNDER ()
+ <V-SEARCH-GROUND-AROUND>>
+
+<ROUTINE V-TASTE ()
+ <TELL "That's ridiculous!" CR>>
+
+<ROUTINE ROOM-PEEK ("AUX" OHERE)
+ <SET OHERE ,HERE>
+ <COND (<SEE-INTO? ,PRSO>
+ <SETG HERE ,PRSO>
+ <TELL
+ "You take a quick peek into the " D ,PRSO ":" CR>
+ <DESCRIBE-OBJECTS>
+ <SETG HERE .OHERE>)>>
+
+ <ROUTINE SEE-INTO? (THERE "AUX" P L TX O)
+ <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 TX <GETPT ,HERE .P>>
+ <SET L <PTSIZE .TX>>
+ <COND (<AND <==? .L ,UEXIT>
+ <==? <GETB .TX ,REXIT> .THERE>>
+ <RTRUE>)
+ (<AND <==? .L ,DEXIT>
+ <==? <GETB .TX ,REXIT> .THERE>>
+ <COND (<FSET? <GETB .TX ,DEXITOBJ> ,OPENBIT>
+ <RTRUE>)
+ (T
+ <TELL
+"The door to that room is closed." CR>
+ <RFALSE>)>)
+ (<AND <==? .L ,CEXIT>
+ <==? <GETB .TX ,REXIT> .THERE>>
+ <COND (<VALUE <GETB .TX ,CEXITFLAG>>
+ <RTRUE>)
+ (T
+ <TELL
+"You can't seem to find that room." CR>
+ <RFALSE>)>)>)>>>
+
+<ROUTINE V-WRITE ()
+ <TELL "You're nuts." CR>>
+
+<ROUTINE V-THROUGH ("OPTIONAL" (OBJ <>) "AUX" M DIR PT PTS)
+ #DECL ((OBJ) <OR OBJECT FALSE> (M) <PRIMTYPE VECTOR>)
+ <COND (<IN? ,PRSO ,ROOMS>
+ <COND (<==? ,HERE ,PRSO>
+ <TELL "Duuuhhh!" CR>)
+ (<SET DIR <DIR-FROM ,HERE ,PRSO>>
+ <PERFORM ,V?WALK .DIR>
+ <RTRUE>)
+ (T <TELL
+"You can't go directly from here to there." CR>)>)
+ (<AND <NOT .OBJ> <NOT <FSET? ,PRSO ,TAKEBIT>>>
+ <TELL "You hit your head against the" PRSO
+ " as you attempt this feat." CR>)
+ (.OBJ <TELL "You can't do that!" CR>)
+ (<IN? ,PRSO ,WINNER>
+ <TELL "That would involve quite a contortion!" CR>)
+ (ELSE <TELL <PICK-ONE ,YUKS> CR>)>>
+
+<GLOBAL PRESENT-TIME 480>
+
+<ROUTINE V-TIME ()
+ <TELL "It is now ">
+ <TIME-PRINT ,PRESENT-TIME>
+ <TELL "." CR>>
+
+<ROUTINE TIME-PRINT (NUM "AUX" HR (PM <>))
+ #DECL ((NUM HR) FIX (PM) <OR FALSE ATOM>)
+ <COND (<G? <SET HR </ .NUM 60>> 12>
+ <SET HR <- .HR 12>>
+ <SET PM T>)
+ (<==? .HR 12> <SET PM T>)>
+ <PRINTN .HR>
+ <TELL ":">
+ <COND (<L? <SET HR <MOD .NUM 60>> 10>
+ <TELL "0">)>
+ <TELL N .HR " ">
+ <TELL <COND (.PM "pm") (T "am")>>>
+
+<ROUTINE V-USE ()
+ <TELL "You should be more specific with what you want to do." CR>>
+
+<ROUTINE V-PLAY ()
+ <TELL "You are adept only at playing the fool." CR>>
+
+<ROUTINE V-TURN-UP ()
+ <TELL "That is silly." CR>>
+
+<ROUTINE V-TURN-DOWN ()
+ <TELL "That is silly." CR>>
+
+<ROUTINE V-HIDE-BEHIND ()
+ <TELL "There's no room to hide behind the" PRSO "." CR>>
+
+<ROUTINE V-HIDE ()
+ <COND (<EQUAL? ,HERE ,EAST-LAWN>
+ <TELL "You might hide behind the shed." CR>)
+ (<EQUAL? ,HERE ,LIBRARY>
+ <TELL "You might hide on the balcony." CR>)
+ (T <TELL "There's no good hiding place here." CR>)>>
+
+<ROUTINE V-CALL-LOSE ()
+ <TELL "You must supply 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 <IN? .PER ,HERE> <CORRIDOR-LOOK .PER>>
+ <TELL D .PER>
+ <COND (<GRAB-ATTENTION .PER>
+ <COND (.MOT
+ <TELL " stops and turns toward you." CR>)
+ (T <TELL " is facing you." CR>)>)
+ (T
+ <TELL " takes no notice of your call." CR>)>)
+ (T <TELL "You don't see " D .PER " here." CR>)>)
+ (T <V-CALL-LOSE>)>>
+
+<ROUTINE V-RUN-OVER ()
+ <TELL "That doesn't make much sense." CR>>
+
+<ROUTINE PRE-RUB-OVER ()
+ <PERFORM ,V?RUB ,PRSI ,PRSO>
+ <RTRUE>>
+
+<ROUTINE V-RUB-OVER ()
+ <TELL "Do you really expect that to help?" CR>>
+
+<GLOBAL P-SPACE 1>
+
+<ROUTINE V-SPACE ()
+ <SETG P-SPACE 1>
+ <TELL "Spacing." CR>>
+
+<ROUTINE V-UNSPACE ()
+ <SETG P-SPACE 0>
+ <TELL "No spacing." CR>>
+
+<ROUTINE V-LOOK-ON ()
+ <COND (<FSET? ,PRSO ,SURFACEBIT>
+ <V-LOOK-INSIDE>)
+ (T <TELL "There's no surface on the" PRSO "." CR>)>>
+
+<ROUTINE V-LOOK-UP ()
+ <COND (<FSET? ,PRSO ,PERSON>
+ <TELL "What a pervert!" CR>
+ <RTRUE>)
+ (<NOT <==? ,PRSO ,ROOMS>>
+ <TELL "Your sanity is in question." CR>
+ <RTRUE>)
+ (<EQUAL? ,HERE ,IN-ROSES ,IN-ORCHARD>
+ <TELL "You can see a balcony directly above you." CR>)
+ (<==? ,HERE ,SHED-ROOM>
+ <TELL "There's nothing up there." CR>)
+ (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
+ <TELL "There is blue sky above you." CR>)
+ (T
+ <TELL
+"You can see the ceiling. It's not the Sistine Chapel, but it's
+nicely painted." CR>)>>
+
+<ROUTINE V-LOOK-DOWN ()
+ <COND (<==? ,PRSO ,ROOMS>
+ <COND (<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
+ <TELL "There's dirt there, mostly. And grass." CR>)
+ (T
+ <TELL "Nothing's interesting about the floor." CR>)>)
+ (T <TELL "Your sanity is in question." CR>)>>
+
+<ROUTINE V-YN ()
+ <COND (,QCONTEXT
+ <TELL D ,QCONTEXT " ignores you completely." CR>)
+ (T <TELL "Did you say something?" CR>)>>
+
+<ROUTINE V-THANKS ()
+ <COND (<OR ,PRSO ,QCONTEXT>
+ <TELL D <OR ,PRSO ,QCONTEXT> " acknowledges your thanks." CR>)
+ (T <TELL "Whatever do you have to be thankful for?" CR>)>>
+
+<ROUTINE V-PHONE ()
+ <COND (<NOT <FSET? ,PRSO ,PERSON>>
+ <TELL "Perhaps it's time for you to rest...." CR>)
+ (<IN? ,PRSO ,HERE>
+ <TELL D ,PRSO " is here!" CR>)
+ (<NOT <EQUAL? ,HERE ,LIVING-ROOM ,LIBRARY ,MASTER-BEDROOM>>
+ <TELL "There's no phone here." CR>)
+ (T <TELL "There's no sense in phoning " D ,PRSO "." CR>)>>
+
+<ROUTINE V-$VERIFY ()
+ <TELL "Verifying game..." CR>
+ <COND (<VERIFY> <TELL "Game correct." CR>)
+ (T <TELL CR "** Game File Failure **" CR>)>> \ No newline at end of file