Final Revision
authorhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 00:29:53 +0000 (20:29 -0400)
committerhistoricalsource <historicalsoftware@textfiles.com>
Sun, 14 Apr 2019 00:29:53 +0000 (20:29 -0400)
15 files changed:
actions.zil
crufty.xzap [new file with mode: 0644]
dead-deadline.zip [new file with mode: 0644]
deadline.errors [new file with mode: 0644]
deadline.serial [new file with mode: 0644]
deadline.xzap [new file with mode: 0644]
deadlinefreq.xzap [new file with mode: 0644]
del.cmd [new file with mode: 0644]
dungeon.zil
goal.zil
invisicluesdead.mss [new file with mode: 0644]
m1.zil [new file with mode: 0644]
main.zil
parser.zil
verbs.zil [new file with mode: 0644]

index c22cfebed822e55ffaeef60f1fc242f90938c106..2ce45b3536439b9118dad833ef60caa0721bee0d 100644 (file)
@@ -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 (file)
index 0000000..2e59ede
--- /dev/null
@@ -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 (file)
index 0000000..f9468bd
Binary files /dev/null and b/dead-deadline.zip differ
diff --git a/deadline.errors b/deadline.errors
new file mode 100644 (file)
index 0000000..dff4c23
--- /dev/null
@@ -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 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1
diff --git a/deadline.xzap b/deadline.xzap
new file mode 100644 (file)
index 0000000..9c60161
--- /dev/null
@@ -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 (file)
index 0000000..335de7c
--- /dev/null
@@ -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 (file)
index 0000000..c6ad315
--- /dev/null
+++ b/del.cmd
@@ -0,0 +1,3 @@
+DEL *.ZIL,
+K 2
+
index f79e076b316b7a13b5f4d4d7ac760e8809094e2f..32e04b0635d2fca65c4aef7af5af63e16a4ae06e 100644 (file)
@@ -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
index 174c72fcd942df952ae74a6a84618a6125dc3693..02ad286a9b6437aa14d75aabe81d63af050ff376 100644 (file)
--- a/goal.zil
+++ b/goal.zil
         <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 (file)
index 0000000..0b4d961
--- /dev/null
@@ -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 (file)
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>
+
+
+
+
+
index b93193dddbe511f1db22c59621e6a044dfc0107d..d007a21e4abe714767234710b3745f0bb110faf7 100644 (file)
--- 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>
         <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>)>
         <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>>
+
 \f
 <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>
            <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)
index 389209dff6c74068ff5b57fbccb8f88bce519e72..554d56ab49b7e107e61539594776f2d7b6f19795 100644 (file)
@@ -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 (file)
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>>
+
+\\f
+
+"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>)>)>>
+
+\\f
+
+"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>)>>
+
+\\f
+
+"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 ""
+              "  "
+              "    "
+              "      "
+              "        "
+              "          ">>
+
+\\f
+
+<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>)>>
+
+\\f
+
+<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>)>>
+
+\\f
+
+<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>>
+
+\\f
+
+;<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