]> github.com/historicalsource and other repositories - zork1.git/blob - gverbs.zil
Update README.md
[zork1.git] / gverbs.zil
1                         "Generic VERBS file for
2                             The ZORK Trilogy
3                        started on 7/25/83 by SEM"
4
5 ^L
6
7 "Verb Functions for Game Commands"
8
9 <GLOBAL VERBOSE <>>
10 <GLOBAL SUPER-BRIEF <>>
11 <GDECL (VERBOSE SUPER-BRIEF) <OR ATOM FALSE>>
12
13 <ROUTINE V-VERBOSE ()
14          <SETG VERBOSE T>
15          <SETG SUPER-BRIEF <>>
16          <TELL "Maximum verbosity." CR>>
17
18 <ROUTINE V-BRIEF ()
19          <SETG VERBOSE <>>
20          <SETG SUPER-BRIEF <>>
21          <TELL "Brief descriptions." CR>>
22
23 <ROUTINE V-SUPER-BRIEF ()
24          <SETG SUPER-BRIEF T>
25          <TELL "Superbrief descriptions." CR>>
26
27 ;"V-DIAGNOSE is in ACTIONS.ZIL"
28
29 <ROUTINE V-INVENTORY ()
30          <COND (<FIRST? ,WINNER> <PRINT-CONT ,WINNER>)
31                (T <TELL "You are empty-handed." CR>)>>
32
33 <ROUTINE FINISH ("AUX" WRD)
34          <V-SCORE>
35          <REPEAT ()
36                  <CRLF>
37                  <TELL
38 "Would you like to restart the game from the beginning, restore a saved
39 game position, or end this session of the game?|
40 (Type RESTART, RESTORE, or QUIT):|
41 >">
42                  <READ ,P-INBUF ,P-LEXV>
43                  <SET WRD <GET ,P-LEXV 1>>
44                  <COND (<EQUAL? .WRD ,W?RESTART>
45                         <RESTART>
46                         <TELL "Failed." CR>)
47                        (<EQUAL? .WRD ,W?RESTORE>
48                         <COND (<RESTORE>
49                                <TELL "Ok." CR>)
50                               (T
51                                <TELL "Failed." CR>)>)
52                        (<EQUAL? .WRD ,W?QUIT ,W?Q>
53                         <QUIT>)>>>
54
55 <ROUTINE V-QUIT ("AUX" SCOR)
56          <V-SCORE>
57          <TELL 
58 "Do you wish to leave the game? (Y is affirmative): ">
59          <COND (<YES?>
60                 <QUIT>)
61                (ELSE <TELL "Ok." CR>)>>
62
63 <ROUTINE V-RESTART ()
64          <V-SCORE T>
65          <TELL "Do you wish to restart? (Y is affirmative): ">
66          <COND (<YES?>
67                 <TELL "Restarting." CR>
68                 <RESTART>
69                 <TELL "Failed." CR>)>>
70
71 <ROUTINE V-RESTORE ()
72          <COND (<RESTORE>
73                 <TELL "Ok." CR>
74                 <V-FIRST-LOOK>)
75                (T
76                 <TELL "Failed." CR>)>>
77
78 <ROUTINE V-SAVE ()
79          <COND (<SAVE>
80                 <TELL "Ok." CR>)
81                (T
82                 <TELL "Failed." CR>)>>
83
84 ;"V-SCORE is in ACTIONS.ZIL"
85
86 <ROUTINE V-SCRIPT ()
87         <PUT 0 8 <BOR <GET 0 8> 1>>
88         <TELL "Here begins a transcript of interaction with" CR>
89         <V-VERSION>
90         <RTRUE>>
91
92 <ROUTINE V-UNSCRIPT ()
93         <TELL "Here ends a transcript of interaction with" CR>
94         <V-VERSION>
95         <PUT 0 8 <BAND <GET 0 8> -2>>
96         <RTRUE>>
97
98 <ROUTINE V-VERSION ("AUX" (CNT 17))
99         %<COND (<==? ,ZORK-NUMBER 1>
100                 '<TELL "ZORK I: The Great Underground Empire|
101 Infocom interactive fiction - a fantasy story|
102 Copyright (c) 1981, 1982, 1983, 1984, 1985, 1986">)
103                (<==? ,ZORK-NUMBER 2>
104                 '<TELL "ZORK II: The Wizard of Frobozz|
105 Infocom interactive fiction - a fantasy story|
106 Copyright (c) 1981, 1982, 1983, 1986">)
107                (<==? ,ZORK-NUMBER 3>
108                 '<TELL "ZORK III: The Dungeon Master|
109 Infocom interactive fiction - a fantasy story|
110 Copyright 1982, 1983, 1984, 1986">)>
111         <TELL " Infocom, Inc. All rights reserved." CR>
112         <TELL "ZORK is a registered trademark of Infocom, Inc.|
113 Release ">
114         <PRINTN <BAND <GET 0 1> *3777*>>
115         <TELL " / Serial number ">
116         <REPEAT ()
117                 <COND (<G? <SET CNT <+ .CNT 1>> 23>
118                        <RETURN>)
119                       (T
120                        <PRINTC <GETB 0 .CNT>>)>>
121         <CRLF>>
122
123 <ROUTINE V-VERIFY ()
124          <TELL "Verifying disk..." CR>
125          <COND (<VERIFY>
126                 <TELL "The disk is correct." CR>)
127                (T
128                 <TELL CR "** Disk Failure **" CR>)>>
129
130 <ROUTINE V-COMMAND-FILE ()
131          <DIRIN 1>
132          <RTRUE>>
133
134 <ROUTINE V-RANDOM ()
135          <COND (<NOT <EQUAL? ,PRSO ,INTNUM>>
136                 <TELL "Illegal call to #RND." CR>)
137                (T
138                 <RANDOM <- 0 ,P-NUMBER>>
139                 <RTRUE>)>>
140
141 <ROUTINE V-RECORD ()
142          <DIROUT 4>
143          <RTRUE>>
144
145 <ROUTINE V-UNRECORD ()
146          <DIROUT -4>
147          <RTRUE>>
148
149 ^L
150
151 "Real Verb Functions"
152
153 <ROUTINE V-ADVENT ()
154          <TELL "A hollow voice says \"Fool.\"" CR>>
155
156 <ROUTINE V-ALARM ()
157          <COND (<FSET? ,PRSO ,ACTORBIT>
158                 <COND %<COND (<==? ,ZORK-NUMBER 1>
159                               '(<L? <GETP ,PRSO ,P?STRENGTH> 0>
160                                 <TELL "The " D ,PRSO " is rudely awakened." CR>
161                                 <AWAKEN ,PRSO>))
162                              (T
163                               '(<NULL-F> <RTRUE>))>
164                       (T
165                        <TELL
166 "He's wide awake, or haven't you noticed..." CR>)>)
167                (T
168                 <TELL "The " D ,PRSO " isn't sleeping." CR>)>>
169
170 <ROUTINE V-ANSWER ()
171          <TELL "Nobody seems to be awaiting your answer." CR>
172          <SETG P-CONT <>>
173          <SETG QUOTE-FLAG <>>
174          <RTRUE>>
175
176 <ROUTINE V-ATTACK ()
177          <COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
178                 <TELL
179 "I've known strange people, but fighting a " D ,PRSO "?" CR>)
180                (<OR <NOT ,PRSI>
181                     <EQUAL? ,PRSI ,HANDS>>
182                 <TELL
183 "Trying to attack a " D ,PRSO " with your bare hands is suicidal." CR>)
184                (<NOT <IN? ,PRSI ,WINNER>>
185                 <TELL "You aren't even holding the " D ,PRSI "." CR>)
186                (<NOT <FSET? ,PRSI ,WEAPONBIT>>
187                 <TELL
188 "Trying to attack the " D ,PRSO " with a " D ,PRSI " is suicidal." CR>)
189                (T
190                 %<COND (<==? ,ZORK-NUMBER 1>
191                         '<HERO-BLOW>)
192                        (T
193                         '<TELL "You can't." CR>)>)>>
194
195 <ROUTINE V-BACK ()
196          <TELL "Sorry, my memory is poor. Please give a direction." CR>>
197
198 <ROUTINE V-BLAST ()
199          <TELL "You can't blast anything by using words." CR>>
200
201 <ROUTINE PRE-BOARD ("AUX" AV)
202          <SET AV <LOC ,WINNER>>
203          <COND %<COND (<==? ,ZORK-NUMBER 3>
204                        '(<EQUAL? ,PRSO ,WATER-CHANNEL ,TM-SEAT ,LAKE>
205                          <RFALSE>))
206                       (T
207                        '(<NULL-F> <RTRUE>))>
208                (<FSET? ,PRSO ,VEHBIT>
209                 <COND (<NOT <IN? ,PRSO ,HERE>>
210                        <TELL
211 "The " D ,PRSO " must be on the ground to be boarded." CR>)
212                       (<FSET? .AV ,VEHBIT>
213                        <TELL "You are already in the " D .AV "!" CR>)
214                       (T
215                        <RFALSE>)>)
216                (<EQUAL? ,PRSO ,WATER ,GLOBAL-WATER>
217                 <PERFORM ,V?SWIM ,PRSO>
218                 <RTRUE>)
219                (T
220                 <TELL
221 "You have a theory on how to board a " D ,PRSO ", perhaps?" CR>)>
222          <RFATAL>>
223
224 <ROUTINE V-BOARD ("AUX" AV)
225          <TELL "You are now in the " D ,PRSO "." CR>
226          <MOVE ,WINNER ,PRSO>
227          <APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
228          <RTRUE>>
229
230 <ROUTINE V-BREATHE ()
231          <PERFORM ,V?INFLATE ,PRSO ,LUNGS>>
232
233 <ROUTINE V-BRUSH ()
234          <TELL "If you wish, but heaven only knows why." CR>>
235
236 <ROUTINE V-BUG ()
237          <TELL
238 "Bug? Not in a flawless program like this! (Cough, cough)." CR>>
239
240 <ROUTINE TELL-NO-PRSI ()
241          <TELL "You didn't say with what!" CR>>
242
243 <ROUTINE PRE-BURN ()
244          <COND (<NOT ,PRSI>
245                 <TELL-NO-PRSI>)
246                (<FLAMING? ,PRSI>
247                 <RFALSE>)
248                (T
249                 <TELL "With a " D ,PRSI "??!?" CR>)>>
250
251 <ROUTINE V-BURN ()
252          <COND %<COND (<==? ,ZORK-NUMBER 2>
253                        '(<EQUAL? <LOC ,PRSO> ,RECEPTACLE>
254                          <BALLOON-BURN>
255                          <RTRUE>))
256                       (T
257                        '(<NULL-F> <RFALSE>))>
258                (<FSET? ,PRSO ,BURNBIT>
259                 <COND (<OR <IN? ,PRSO ,WINNER>
260                            <IN? ,WINNER ,PRSO>>
261                        <REMOVE-CAREFULLY ,PRSO>
262                        <TELL "The " D ,PRSO>
263                        <TELL
264 " catches fire. Unfortunately, you were ">
265                        <COND (<IN? ,WINNER ,PRSO>
266                               <TELL "in">)
267                              (T <TELL "holding">)>
268                        <JIGS-UP " it at the time.">)
269                       (T
270                        <REMOVE-CAREFULLY ,PRSO>
271                        <TELL
272 "The " D ,PRSO " catches fire and is consumed." CR>)>)
273                (T
274                 <TELL "You can't burn a " D ,PRSO "." CR>)>>
275
276 <ROUTINE V-CHOMP ()
277          <TELL "Preposterous!" CR>>
278
279 <ROUTINE V-CLIMB-DOWN () <V-CLIMB-UP ,P?DOWN ,PRSO>>
280
281 <ROUTINE V-CLIMB-FOO ()
282          %<COND (<==? ,ZORK-NUMBER 3>
283                  '<V-CLIMB-UP <COND (<EQUAL? ,PRSO ,ROPE ,GLOBAL-ROPE>
284                                      ,P?DOWN)
285                                     (T ,P?UP)>
286                               T>)
287                 (ELSE
288                  '<V-CLIMB-UP ,P?UP ,PRSO>)>>
289
290 <ROUTINE V-CLIMB-ON ()
291          <COND (<FSET? ,PRSO ,VEHBIT>
292                 %<COND (<==? ,ZORK-NUMBER 3>
293                         '<V-CLIMB-UP ,P?UP T>)
294                        (ELSE
295                         '<PERFORM ,V?BOARD ,PRSO>)>
296                 <RTRUE>)
297                (T
298                 <TELL "You can't climb onto the " D ,PRSO "." CR>)>>
299
300 <ROUTINE V-CLIMB-UP ("OPTIONAL" (DIR ,P?UP) (OBJ <>) "AUX" X TX)
301          <COND (<AND .OBJ <NOT <EQUAL? ,PRSO ,ROOMS>>>
302                 <SET OBJ ,PRSO>)>
303          <COND (<SET TX <GETPT ,HERE .DIR>>
304                 <COND (.OBJ
305                        <SET X <PTSIZE .TX>>
306                        <COND (<OR <EQUAL? .X ,NEXIT>
307                                   <AND <EQUAL? .X ,CEXIT ,DEXIT ,UEXIT>
308                                        <NOT <GLOBAL-IN? ,PRSO <GETB .TX 0>>>>>
309                               <TELL "The " D .OBJ " do">
310                               <COND (<NOT <EQUAL? .OBJ ,STAIRS>>
311                                      <TELL "es">)>
312                               <TELL "n't lead ">
313                               <COND (<==? .DIR ,P?UP>
314                                      <TELL "up">)
315                                     (T <TELL "down">)>
316                               <TELL "ward." CR>
317                               <RTRUE>)>)>
318                 <DO-WALK .DIR>
319                 <RTRUE>)
320                (<AND .OBJ
321                      <ZMEMQ ,W?WALL
322                             <SET X <GETPT ,PRSO ,P?SYNONYM>> <PTSIZE .X>>>
323                 <TELL "Climbing the walls is to no avail." CR>)
324                (%<COND (<==? ,ZORK-NUMBER 1>
325                         '<AND <NOT <EQUAL? ,HERE ,PATH>>
326                               <EQUAL? .OBJ <> ,TREE>
327                               <GLOBAL-IN? ,TREE ,HERE>>)
328                        (ELSE '<NULL-F>)>
329                 <TELL "There are no climbable trees here." CR>
330                 <RTRUE>)
331                (<EQUAL? .OBJ <> ,ROOMS>
332                 <TELL "You can't go that way." CR>)
333                (T
334                 <TELL "You can't do that!" CR>)>>
335
336 <ROUTINE V-CLOSE ()
337          <COND (<AND <NOT <FSET? ,PRSO ,CONTBIT>>
338                      <NOT <FSET? ,PRSO ,DOORBIT>>>
339                 <TELL "You must tell me how to do that to a " D ,PRSO "." CR>)
340                (<AND <NOT <FSET? ,PRSO ,SURFACEBIT>>
341                      <NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>>
342                 <COND (<FSET? ,PRSO ,OPENBIT>
343                        <FCLEAR ,PRSO ,OPENBIT>
344                        <TELL "Closed." CR>
345                        <COND (<AND ,LIT <NOT <SETG LIT <LIT? ,HERE>>>>
346                               <TELL "It is now pitch black." CR>)>
347                        <RTRUE>)
348                       (T
349                        <TELL "It is already closed." CR>)>)
350                (<FSET? ,PRSO ,DOORBIT>
351                 <COND (<FSET? ,PRSO ,OPENBIT>
352                        <FCLEAR ,PRSO ,OPENBIT>
353                        <TELL "The " D ,PRSO " is now closed." CR>)
354                       (T
355                        <TELL "It is already closed." CR>)>)
356                (T
357                 <TELL "You cannot close that." CR>)>>
358
359 <ROUTINE V-COMMAND ()
360          <COND (<FSET? ,PRSO ,ACTORBIT>
361                 <TELL "The " D ,PRSO " pays no attention." CR>)
362                (T
363                 <TELL "You cannot talk to that!" CR>)>>
364
365 <ROUTINE V-COUNT ()
366          <COND (<EQUAL? ,PRSO ,BLESSINGS>
367                 <TELL "Well, for one, you are playing Zork..." CR>)
368                (T
369                 <TELL "You have lost your mind." CR>)>>
370
371 <ROUTINE V-CROSS ()
372          <TELL "You can't cross that!" CR>>
373
374 <ROUTINE V-CURSES ()
375          <COND (,PRSO
376                 <COND (<FSET? ,PRSO ,ACTORBIT>
377                        <TELL "Insults of this nature won't help you." CR>)
378                       (T
379                        <TELL "What a loony!" CR>)>)
380                (T
381                 <TELL
382 "Such language in a high-class establishment like this!" CR>)>>
383
384 <ROUTINE V-CUT ()
385          <COND (<FSET? ,PRSO ,ACTORBIT>
386                 <PERFORM ,V?ATTACK ,PRSO ,PRSI>)
387                (<AND <FSET? ,PRSO ,BURNBIT>
388                      <FSET? ,PRSI ,WEAPONBIT>>
389                 <COND (<IN? ,WINNER ,PRSO>
390                        <TELL
391 "Not a bright idea, especially since you're in it." CR>
392                        <RTRUE>)>
393                 <REMOVE-CAREFULLY ,PRSO>
394                 <TELL "Your skillful " D ,PRSI "smanship slices the " D ,PRSO
395 " into innumerable slivers which blow away." CR>)
396                (<NOT <FSET? ,PRSI ,WEAPONBIT>>
397                 <TELL
398 "The \"cutting edge\" of a " D ,PRSI " is hardly adequate." CR>)
399                (T
400                 <TELL "Strange concept, cutting the " D ,PRSO "...." CR>)>>
401
402 <ROUTINE V-DEFLATE ()
403          <TELL "Come on, now!" CR>>
404
405 <ROUTINE V-DIG ()
406          <COND (<NOT ,PRSI>
407                 <SETG PRSI ,HANDS>)>
408          %<COND (<==? ,ZORK-NUMBER 1>
409                  '<COND (<EQUAL? ,PRSI ,SHOVEL>
410                          <TELL "There's no reason to be digging here." CR>
411                          <RTRUE>)>)
412                 (ELSE T)>
413          <COND (<FSET? ,PRSI ,TOOLBIT>
414                 <TELL "Digging with the " D ,PRSI " is slow and tedious." CR>)
415                (T
416                 <TELL "Digging with a " D ,PRSI " is silly." CR>)>>
417
418 <ROUTINE V-DISEMBARK ()
419          <COND (<AND <EQUAL? ,PRSO ,ROOMS>
420                      <FSET? <LOC ,WINNER> ,VEHBIT>>
421                 <PERFORM ,V?DISEMBARK <LOC ,WINNER>>
422                 <RTRUE>)
423                (<NOT <EQUAL? <LOC ,WINNER> ,PRSO>>
424                 <TELL "You're not in that!" CR>
425                 <RFATAL>)
426                (<FSET? ,HERE ,RLANDBIT>
427                 <TELL "You are on your own feet again." CR>
428                 <MOVE ,WINNER ,HERE>)
429                (T
430                 <TELL
431 "You realize that getting out here would be fatal." CR>
432                 <RFATAL>)>>
433
434 <ROUTINE V-DISENCHANT ()
435          %<COND (<==? ,ZORK-NUMBER 2>
436                  '<COND (<NOT <IN? ,PRSO ,HERE>>
437                          <RTRUE>)
438                         (<OR <EQUAL? ,SPELL-USED ,W?FEEBLE ,W?FUMBLE ,W?FEAR>
439                           <EQUAL? ,SPELL-USED ,W?FREEZE ,W?FALL ,W?FERMENT>
440                           <EQUAL? ,SPELL-USED ,W?FIERCE ,W?FENCE ,W?FANTASIZE>>
441                           <COND (<FSET? ,PRSO ,ACTORBIT>
442                                  <COND (<EQUAL? ,SPELL-USED ,W?FEEBLE>
443                                         <TELL
444 "The " D ,PRSO " seems stronger now." CR>)
445                                        (<EQUAL? ,SPELL-USED ,W?FUMBLE>
446                                         <TELL
447 "The " D ,PRSO " no longer appears clumsy." CR>)
448                                        (<EQUAL? ,SPELL-USED ,W?FEAR>
449                                         <TELL
450 "The " D ,PRSO " no longer appears afraid." CR>)
451                                        (<EQUAL? ,SPELL-USED ,W?FREEZE>
452                                         <TELL
453 "The " D ,PRSO " moves again." CR>)
454                                        (<EQUAL? ,SPELL-USED ,W?FERMENT>
455                                         <TELL
456 "The " D ,PRSO " stops swaying." CR>)
457                                        (<EQUAL? ,SPELL-USED ,W?FIERCE>
458                                         <TELL
459 "The " D ,PRSO " appears more peaceful." CR>)>)>)
460                                 (<EQUAL? ,SPELL-USED ,W?FLOAT>
461                                  <TELL
462 "The " D ,PRSO " sinks to the ground." CR>)
463                                 (<EQUAL? ,SPELL-USED ,W?FUDGE>
464                                  <TELL "The sweet smell has dispersed." CR>)>)
465                 (T
466                  '<TELL "Nothing happens." CR>)>>
467
468 <ROUTINE V-DRINK ()
469          <V-EAT>>
470
471 <ROUTINE V-DRINK-FROM ()
472          <TELL "How peculiar!" CR>>
473
474 <ROUTINE PRE-DROP ()
475          <COND (<EQUAL? ,PRSO <LOC ,WINNER>>
476                 <PERFORM ,V?DISEMBARK ,PRSO>
477                 <RTRUE>)>>
478
479 <ROUTINE V-DROP ()
480          <COND (<IDROP>
481                 <TELL "Dropped." CR>)>>
482
483 <ROUTINE V-EAT ("AUX" (EAT? <>) (DRINK? <>) (NOBJ <>))
484          <COND (<SET EAT? <FSET? ,PRSO ,FOODBIT>>
485                 <COND (<AND <NOT <IN? ,PRSO ,WINNER>>
486                             <NOT <IN? <LOC ,PRSO> ,WINNER>>>
487                        <TELL "You're not holding that." CR>)
488                       (<VERB? DRINK>
489                        <TELL "How can you drink that?">)
490                       (T
491                        <TELL "Thank you very much. It really hit the spot.">
492                        <REMOVE-CAREFULLY ,PRSO>)>
493                 <CRLF>)
494                (<FSET? ,PRSO ,DRINKBIT>
495                 <SET DRINK? T>
496                 <SET NOBJ <LOC ,PRSO>>
497                 <COND (<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
498                            <GLOBAL-IN? ,GLOBAL-WATER ,HERE>
499                            <EQUAL? ,PRSO ,PSEUDO-OBJECT>>
500                        <HIT-SPOT>)
501                       (<OR <NOT .NOBJ>
502                            <NOT <ACCESSIBLE? .NOBJ>>>
503                        <TELL
504 "There isn't any water here." CR>)
505                       (<AND <ACCESSIBLE? .NOBJ>
506                             <NOT <IN? .NOBJ ,WINNER>>>
507                        <TELL
508 "You have to be holding the " D .NOBJ " first." CR>)
509                       (<NOT <FSET? .NOBJ ,OPENBIT>>
510                        <TELL
511 "You'll have to open the " D .NOBJ " first." CR>)
512                       (T
513                        <HIT-SPOT>)>)
514                (<NOT <OR .EAT? .DRINK?>>
515                 <TELL
516 "I don't think that the " D ,PRSO " would agree with you." CR>)>>
517
518 <ROUTINE HIT-SPOT ()
519          <COND (<AND <EQUAL? ,PRSO ,WATER>
520                      <NOT <GLOBAL-IN? ,GLOBAL-WATER ,HERE>>>
521                 <REMOVE-CAREFULLY ,PRSO>)>
522          <TELL
523 "Thank you very much. I was rather thirsty (from all this talking,
524 probably)." CR>>
525
526 <ROUTINE V-ECHO ("AUX" LST MAX (ECH 0) CNT) 
527          #DECL ((LST) <PRIMTYPE VECTOR> (MAX CNT ECH) FIX)
528          %<COND (<==? ,ZORK-NUMBER 1>
529                  '<COND (<G? <GETB ,P-LEXV ,P-LEXWORDS> 0>
530                          <SET LST <REST 
531                                    ,P-LEXV
532                                    <* <GETB ,P-LEXV ,P-LEXWORDS> ,P-WORDLEN>>>
533                          <SET MAX <- <+ <GETB .LST 0> <GETB .LST 1>> 1>>
534                          <REPEAT ()
535                             <COND (<G? <SET ECH <+ .ECH 1>> 2>
536                                    <TELL "..." CR>
537                                    <RETURN>)
538                                   (T
539                                    <SET CNT <- <GETB .LST 1> 1>>
540                                    <REPEAT ()
541                                       <COND (<G? <SET CNT <+ .CNT 1>> .MAX>
542                                              <RETURN>)
543                                             (T
544                                              <PRINTC <GETB ,P-INBUF .CNT>>)>>
545                                    <TELL " ">)>>)
546                         (T <TELL "echo echo ..." CR>)>)
547                 (T
548                  '<TELL "echo echo ..." CR>)>>
549
550 <ROUTINE V-ENCHANT ()
551 %<COND (<==? ,ZORK-NUMBER 2>
552         '<COND (,WAND-ON <SETG SPELL-VICTIM ,WAND-ON>)>)
553        (T
554         '<NULL-F>)>
555 %<COND (<==? ,ZORK-NUMBER 2>
556         '<COND (,SPELL-VICTIM
557                 <COND (<NOT ,SPELL-USED>
558                        <TELL "You must be more specific." CR>
559                        <RTRUE>)>
560                 <COND (<OR <EQUAL? ,SPELL-USED ,W?FEEBLE ,W?FUMBLE ,W?FEAR>
561                            <EQUAL? ,SPELL-USED ,W?FREEZE ,W?FALL ,W?FERMENT>
562                            <EQUAL? ,SPELL-USED ,W?FIERCE ,W?FENCE ,W?FANTASIZE>>
563                        <COND (<FSET? ,PRSO ,ACTORBIT>
564                               <TELL
565 "The wand stops glowing, but there is no other obvious effect." CR>)
566                              (T
567                               <TELL
568 "That might have done something, but it's hard to tell with a " D ,PRSO "." CR>)>)
569                       ;(<EQUAL? ,SPELL-USED ,W?FIREPROOF>
570                        <RTRUE>)
571                       (<EQUAL? ,SPELL-USED ,W?FUDGE>
572                        <TELL
573 "A strong odor of chocolate permeates the room." CR>)
574                       (<EQUAL? ,SPELL-USED ,W?FLUORESCE>
575                        <FSET ,PRSO ,LIGHTBIT>
576                        <FSET ,PRSO ,ONBIT>
577                        <SETG LIT T>
578                        <TELL
579 "The " D ,PRSO " begins to glow." CR>)
580                       (<EQUAL? ,SPELL-USED ,W?FILCH>
581                        <SETG SPELL-HANDLED? T>
582                        <COND (<FSET? ,PRSO ,TAKEBIT>
583                               <MOVE ,PRSO ,WINNER>
584                               <SCORE-OBJ ,PRSO>
585                               <TELL "Filched!" CR>)
586                              (ELSE
587                               <TELL "You can't filch the " D ,PRSO "!" CR>)>)
588                       (<AND <EQUAL? ,SPELL-USED ,W?FLOAT>
589                             <FSET? ,PRSO ,TAKEBIT>>
590                        <COND (<AND <EQUAL? ,SPELL-VICTIM ,COLLAR>
591                                    <IN? ,COLLAR ,CERBERUS>>
592                               <SETG SPELL-VICTIM ,CERBERUS>)>
593                        <TELL
594 "The " D ,PRSO " floats serenely in midair." CR>)
595                       (<AND <EQUAL? ,SPELL-USED ,W?FRY>
596                             <FSET? ,PRSO ,TAKEBIT>>
597                        <SETG SPELL-HANDLED? T>
598                        <REMOVE-CAREFULLY ,PRSO>
599                        <TELL "The " D ,PRSO " goes up in a puff of smoke." CR>)
600                       (ELSE
601                        <SETG SPELL-VICTIM <>>
602                        <TELL
603 "The wand stops glowing, but there is no other apparent effect." CR>)>)
604                (ELSE
605                 <SETG SPELL-VICTIM <>>
606                 <TELL "Nothing happens." CR>)>)
607        (T
608         '<V-DISENCHANT>)>>
609
610 <ROUTINE REMOVE-CAREFULLY (OBJ "AUX" OLIT)
611          <COND (<EQUAL? .OBJ ,P-IT-OBJECT>
612                 <SETG P-IT-OBJECT <>>)>
613          <SET OLIT ,LIT>
614          <REMOVE .OBJ>
615          <SETG LIT <LIT? ,HERE>>
616          <COND (<AND .OLIT <NOT <EQUAL? .OLIT ,LIT>>>
617                 <TELL "You are left in the dark..." CR>)>
618          T>
619
620 <ROUTINE V-ENTER ()
621         <DO-WALK ,P?IN>>
622
623 <ROUTINE V-EXAMINE ()
624          <COND (<GETP ,PRSO ,P?TEXT>
625                 <TELL <GETP ,PRSO ,P?TEXT> CR>)
626                (<OR <FSET? ,PRSO ,CONTBIT>
627                     <FSET? ,PRSO ,DOORBIT>>
628                 <V-LOOK-INSIDE>)
629                (T
630                 <TELL "There's nothing special about the " D ,PRSO "." CR>)>>
631
632 <ROUTINE V-EXIT ()
633          <COND (<AND <EQUAL? ,PRSO <> ,ROOMS>
634                      <FSET? <LOC ,WINNER> ,VEHBIT>>
635                 <PERFORM ,V?DISEMBARK <LOC ,WINNER>>
636                 <RTRUE>)
637                (<AND ,PRSO <IN? ,WINNER ,PRSO>>
638                 <PERFORM ,V?DISEMBARK ,PRSO>
639                 <RTRUE>)
640                (ELSE
641                 <DO-WALK ,P?OUT>)>>
642
643 <ROUTINE V-EXORCISE ()
644          <TELL "What a bizarre concept!" CR>>
645
646 <ROUTINE PRE-FILL ("AUX" TX)
647          <COND (<NOT ,PRSI>
648                 <SET TX <GETPT ,HERE ,P?GLOBAL>>
649                 <COND (<AND .TX <ZMEMQB ,GLOBAL-WATER .TX <- <PTSIZE .TX> 1>>>
650                        <PERFORM ,V?FILL ,PRSO ,GLOBAL-WATER>
651                        <RTRUE>)
652                       (<IN? ,WATER <LOC ,WINNER>>
653                        <PERFORM ,V?FILL ,PRSO ,WATER>
654                        <RTRUE>)
655                       (T
656                        <TELL "There is nothing to fill it with." CR>
657                        <RTRUE>)>)>
658          <COND (<EQUAL? ,PRSI ,WATER>
659                 <RFALSE>)
660                (<NOT <EQUAL? ,PRSI ,GLOBAL-WATER>>
661                 <PERFORM ,V?PUT ,PRSI ,PRSO>
662                 <RTRUE>)>>
663
664 <ROUTINE V-FILL ()
665          <COND (<NOT ,PRSI>
666                 <COND (<GLOBAL-IN? ,GLOBAL-WATER ,HERE>
667                        <PERFORM ,V?FILL ,PRSO ,GLOBAL-WATER>
668                        <RTRUE>)
669                       (<IN? ,WATER <LOC ,WINNER>>
670                        <PERFORM ,V?FILL ,PRSO ,WATER>
671                        <RTRUE>)
672                       (T
673                        <TELL "There's nothing to fill it with." CR>)>)
674                (T
675                 <TELL "You may know how to do that, but I don't." CR>)>>
676
677 <ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
678          <COND (<EQUAL? ,PRSO ,HANDS ,LUNGS>
679                 <TELL
680 "Within six feet of your head, assuming you haven't left that
681 somewhere." CR>)
682                (<EQUAL? ,PRSO ,ME>
683                 <TELL "You're around here somewhere..." CR>)
684                (<EQUAL? .L ,GLOBAL-OBJECTS>
685                 <TELL "You find it." CR>)
686                (<IN? ,PRSO ,WINNER>
687                 <TELL "You have it." CR>)
688                (<OR <IN? ,PRSO ,HERE>
689                     <GLOBAL-IN? ,PRSO ,HERE>
690                     <EQUAL? ,PRSO ,PSEUDO-OBJECT>>
691                 <TELL "It's right here." CR>)
692                (<FSET? .L ,ACTORBIT>
693                 <TELL "The " D .L " has it." CR>)
694                (<FSET? .L ,SURFACEBIT>
695                 <TELL "It's on the " D .L "." CR>)
696                (<FSET? .L ,CONTBIT>
697                 <TELL "It's in the " D .L "." CR>)
698                (T
699                 <TELL "Beats me." CR>)>>
700
701 <ROUTINE V-FOLLOW ()
702          <TELL "You're nuts!" CR>>
703
704 <ROUTINE V-FROBOZZ ()
705          <TELL
706 "The FROBOZZ Corporation created, owns, and operates this dungeon." CR>>
707
708 <ROUTINE PRE-GIVE ()
709          <COND (<NOT <HELD? ,PRSO>>
710                 <TELL 
711 "That's easy for you to say since you don't even have the " D ,PRSO "." CR>)>>
712
713 <ROUTINE V-GIVE ()
714          <COND (<NOT <FSET? ,PRSI ,ACTORBIT>>
715                 <TELL "You can't give a " D ,PRSO " to a " D ,PRSI "!" CR>)
716                (T
717                 <TELL "The " D ,PRSI " refuses it politely." CR>)>>
718
719 <ROUTINE V-HATCH ()
720          <TELL "Bizarre!" CR>>
721
722 <GLOBAL HS 0> ;"counts occurences of HELLO, SAILOR"
723
724 <ROUTINE V-HELLO ()
725          <COND (,PRSO
726                 <COND (<FSET? ,PRSO ,ACTORBIT>
727                        <TELL
728 "The " D ,PRSO " bows his head to you in greeting." CR>)
729                       (T
730                        <TELL
731 "It's a well known fact that only schizophrenics say \"Hello\" to a "
732 D ,PRSO "." CR>)>)
733                (T
734                 <TELL <PICK-ONE ,HELLOS> CR>)>>
735
736 <ROUTINE V-INCANT ()
737 %<COND (<==? ,ZORK-NUMBER 2>
738         '<COND (,SPELL-USED
739                 <TELL "Nothing happens." CR>)
740                (,WAND-ON
741                 <SETG SPELL-VICTIM ,WAND-ON>
742                 <SETG SPELL-USED <GET ,P-LEXV ,P-CONT>>
743                 <TELL "The wand glows very brightly for a moment." CR>
744                 <ENABLE <QUEUE I-SPELL <+ 10 <RANDOM 10>>>>
745                 <SETG WAND-ON <>>
746                 <PERFORM ,V?ENCHANT ,SPELL-VICTIM>)
747                (T
748                 <TELL
749 "The incantation echoes back faintly, but nothing else happens." CR>)>)
750        (T
751         '<TELL
752 "The incantation echoes back faintly, but nothing else happens." CR>)>
753          <SETG QUOTE-FLAG <>>
754          <SETG P-CONT <>>
755          <RTRUE>>
756
757 <ROUTINE V-INFLATE ()
758          <TELL "How can you inflate that?" CR>>
759
760 <ROUTINE V-KICK () <HACK-HACK "Kicking the ">>
761
762 <ROUTINE V-KISS ()
763          <TELL "I'd sooner kiss a pig." CR>>
764
765 <ROUTINE V-KNOCK ()
766          <COND (<FSET? ,PRSO ,DOORBIT>
767                 <TELL "Nobody's home." CR>)
768                (T
769                 <TELL "Why knock on a " D ,PRSO "?" CR>)>>
770
771 <ROUTINE V-LAMP-OFF ()
772          <COND (<FSET? ,PRSO ,LIGHTBIT>
773                 <COND (<NOT <FSET? ,PRSO ,ONBIT>>
774                        <TELL "It is already off." CR>)
775                       (T
776                        <FCLEAR ,PRSO ,ONBIT>
777                        <COND (,LIT
778                               <SETG LIT <LIT? ,HERE>>)>
779                        <TELL "The " D ,PRSO " is now off." CR>
780                        <COND (<NOT ,LIT>
781                               <TELL "It is now pitch black." CR>)>)>)
782                (T
783                 <TELL "You can't turn that off." CR>)>
784          <RTRUE>>
785
786 <ROUTINE V-LAMP-ON ()
787          <COND (<FSET? ,PRSO ,LIGHTBIT>
788                 <COND (<FSET? ,PRSO ,ONBIT>
789                        <TELL "It is already on." CR>)
790                       (T
791                        <FSET ,PRSO ,ONBIT>
792                        <TELL "The " D ,PRSO " is now on." CR>
793                        <COND (<NOT ,LIT>
794                               <SETG LIT <LIT? ,HERE>>
795                               <CRLF>
796                               <V-LOOK>)>)>)
797                (<FSET? ,PRSO ,BURNBIT>
798                 <TELL
799 "If you wish to burn the " D ,PRSO ", you should say so." CR>)
800                (T
801                 <TELL "You can't turn that on." CR>)>
802          <RTRUE>>
803
804 <ROUTINE V-LAUNCH ()
805          <COND (<FSET? ,PRSO ,VEHBIT>
806                 <TELL "You can't launch that by saying \"launch\"!" CR>)
807                (T
808                 <TELL "That's pretty weird." CR>)>>
809
810 <ROUTINE V-LEAN-ON ()
811          <TELL "Getting tired?" CR>>
812
813 <ROUTINE V-LEAP ("AUX" TX S)
814          <COND (,PRSO
815                 <COND (<IN? ,PRSO ,HERE>
816                        <COND (<FSET? ,PRSO ,ACTORBIT>
817                               <TELL
818 "The " D ,PRSO " is too big to jump over." CR>)
819                              (T
820                               <V-SKIP>)>)
821                       (T
822                        <TELL "That would be a good trick." CR>)>)
823                (<SET TX <GETPT ,HERE ,P?DOWN>>
824                 <SET S <PTSIZE .TX>>
825                 <COND (<OR <EQUAL? .S 2> ;NEXIT
826                            <AND <EQUAL? .S 4> ;CEXIT
827                                 <NOT <VALUE <GETB .TX 1>>>>>
828                        <TELL
829 "This was not a very safe place to try jumping." CR>
830                        <JIGS-UP <PICK-ONE ,JUMPLOSS>>)
831                       %<COND (<==? ,ZORK-NUMBER 1>
832                               '(<EQUAL? ,HERE ,UP-A-TREE>
833                                 <TELL
834 "In a feat of unaccustomed daring, you manage to land on your feet without
835 killing yourself." CR CR>
836                                 <DO-WALK ,P?DOWN>
837                                 <RTRUE>))
838                              (T '(<NULL-F> T))>
839                       (T
840                        <V-SKIP>)>)
841                (T
842                 <V-SKIP>)>>
843
844 <GLOBAL JUMPLOSS
845         <LTABLE 0
846                "You should have looked before you leaped."
847                "In the movies, your life would be passing before your eyes."
848                "Geronimo...">>
849
850 <ROUTINE V-LEAVE () <DO-WALK ,P?OUT>>
851
852 <ROUTINE V-LISTEN ()
853          <TELL "The " D ,PRSO " makes no sound." CR>>
854
855 <ROUTINE V-LOCK ()
856          <TELL "It doesn't seem to work." CR>>
857
858 <ROUTINE V-LOOK ()
859          <COND (<DESCRIBE-ROOM T>
860                 <DESCRIBE-OBJECTS T>)>>
861
862 <ROUTINE V-LOOK-BEHIND ()
863          <TELL "There is nothing behind the " D ,PRSO "." CR>>
864
865 <ROUTINE V-LOOK-INSIDE ()
866          <COND (<FSET? ,PRSO ,DOORBIT>
867                 <COND (<FSET? ,PRSO ,OPENBIT>
868                        <TELL
869 "The " D ,PRSO " is open, but I can't tell what's beyond it.">)
870                       (T
871                        <TELL "The " D ,PRSO " is closed.">)>
872                 <CRLF>)
873                (<FSET? ,PRSO ,CONTBIT>
874                 <COND (<FSET? ,PRSO ,ACTORBIT>
875                        <TELL "There is nothing special to be seen." CR>)
876                       (<SEE-INSIDE? ,PRSO>
877                        <COND (<AND <FIRST? ,PRSO>
878                                    <PRINT-CONT ,PRSO>>
879                               <RTRUE>)
880                              %<COND (<==? ,ZORK-NUMBER 3>
881                                      '(<FSET? ,PRSO ,SURFACEBIT>
882                                        <TELL
883 "There is nothing on the " D ,PRSO "." CR>))
884                                     (ELSE '(<NULL-F> <RTRUE>))>
885                              (T
886                               <TELL "The " D ,PRSO " is empty." CR>)>)
887                       (T
888                        <TELL "The " D ,PRSO " is closed." CR>)>)
889                (T
890                 <TELL "You can't look inside a " D ,PRSO "." CR>)>>
891
892 <ROUTINE V-LOOK-ON ()
893          <COND (<FSET? ,PRSO ,SURFACEBIT>
894                 <PERFORM ,V?LOOK-INSIDE ,PRSO>
895                 <RTRUE>)
896                (T
897                 <TELL "Look on a " D ,PRSO "???" CR>)>>
898
899 <ROUTINE V-LOOK-UNDER ()
900          <TELL "There is nothing but dust there." CR>>
901
902 <ROUTINE V-LOWER () <HACK-HACK "Playing in this way with the ">>
903
904 <ROUTINE V-MAKE ()
905         <TELL "You can't do that." CR>>
906
907 <ROUTINE V-MELT ()
908          <TELL "It's not clear that a " D ,PRSO " can be melted." CR>>
909
910 <ROUTINE PRE-MOVE ()
911          <COND (<HELD? ,PRSO>
912                 <TELL "You aren't an accomplished enough juggler." CR>)>>
913
914 <ROUTINE V-MOVE ()
915          <COND (<FSET? ,PRSO ,TAKEBIT>
916                 <TELL "Moving the " D ,PRSO " reveals nothing." CR>)
917                (T
918                 <TELL "You can't move the " D ,PRSO "." CR>)>>
919
920 <ROUTINE V-MUMBLE ()
921          <TELL "You'll have to speak up if you expect me to hear you!" CR>>
922
923 <ROUTINE PRE-MUNG ()
924          <COND %<COND (<==? ,ZORK-NUMBER 3>
925                        '(<EQUAL? ,PRSO ,BEAM>
926                          <RFALSE>))
927                       (T
928                        '(<NULL-F> <RTRUE>))>
929                (<OR <NOT ,PRSI>
930                     <NOT <FSET? ,PRSI ,WEAPONBIT>>>
931                 <TELL "Trying to destroy the " D ,PRSO " with ">
932                 <COND (<NOT ,PRSI>
933                        <TELL "your bare hands">)
934                       (T
935                        <TELL "a " D ,PRSI>)>
936                 <TELL " is futile." CR>)>>
937
938 <ROUTINE V-MUNG ()
939          <COND (<FSET? ,PRSO ,ACTORBIT>
940                 <PERFORM ,V?ATTACK ,PRSO>
941                 <RTRUE>)
942                (T
943                 <TELL "Nice try." CR>)>>
944
945 <ROUTINE V-ODYSSEUS ()
946          <COND %<COND (<==? ,ZORK-NUMBER 1>
947                        '(<AND <EQUAL? ,HERE ,CYCLOPS-ROOM>
948                               <IN? ,CYCLOPS ,HERE>
949                               <NOT ,CYCLOPS-FLAG>>
950                          <DISABLE <INT I-CYCLOPS>>
951                          <SETG CYCLOPS-FLAG T>
952                          <TELL 
953 "The cyclops, hearing the name of his father's deadly nemesis, flees the room
954 by knocking down the wall on the east of the room." CR>
955                         <SETG MAGIC-FLAG T>
956                         <FCLEAR ,CYCLOPS ,FIGHTBIT>
957                         <REMOVE-CAREFULLY ,CYCLOPS>))
958                       (T
959                        '(<NULL-F> T))>
960                (T
961                 <TELL "Wasn't he a sailor?" CR>)>>
962
963 <ROUTINE V-OIL ()
964          <TELL "You probably put spinach in your gas tank, too." CR>>
965
966 <ROUTINE V-OPEN ("AUX" F STR)
967          <COND (<AND <FSET? ,PRSO ,CONTBIT>
968                      <NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>>
969                 <COND (<FSET? ,PRSO ,OPENBIT>
970                        <TELL "It is already open." CR>)
971                       (T
972                        <FSET ,PRSO ,OPENBIT>
973                        <FSET ,PRSO ,TOUCHBIT>
974                        <COND (<OR <NOT <FIRST? ,PRSO>> <FSET? ,PRSO ,TRANSBIT>>
975                               <TELL "Opened." CR>)
976                              (<AND <SET F <FIRST? ,PRSO>>
977                                    <NOT <NEXT? .F>>
978                                    <NOT <FSET? .F ,TOUCHBIT>>
979                                    <SET STR <GETP .F ,P?FDESC>>>
980                               <TELL "The " D ,PRSO " opens." CR>
981                               <TELL .STR CR>)
982                              (T
983                               <TELL "Opening the " D ,PRSO " reveals ">
984                               <PRINT-CONTENTS ,PRSO>
985                               <TELL "." CR>)>)>)
986                (<FSET? ,PRSO ,DOORBIT>
987                 <COND (<FSET? ,PRSO ,OPENBIT>
988                        <TELL "It is already open." CR>)
989                       (T
990                        <TELL "The " D ,PRSO " opens." CR>
991                        <FSET ,PRSO ,OPENBIT>)>)
992                (T
993                 <TELL
994 "You must tell me how to do that to a " D ,PRSO "." CR>)>>
995
996 <ROUTINE V-OVERBOARD ("AUX" LOCN)
997          <COND %<COND (<==? ,ZORK-NUMBER 1>
998                        '(<EQUAL? ,PRSI ,TEETH>
999                          <COND (<FSET? <SET LOCN <LOC ,WINNER>> ,VEHBIT>
1000                                 <MOVE ,PRSO <LOC .LOCN>>
1001                                 <TELL "Ahoy -- " D ,PRSO " overboard!" CR>)
1002                                (T
1003                                 <TELL "You're not in anything!" CR>)>))
1004                       (T '(<NULL-F> T))>
1005                (<FSET? <LOC ,WINNER> ,VEHBIT>
1006                 <PERFORM ,V?THROW ,PRSO>
1007                 <RTRUE>)
1008                (T
1009                 <TELL "Huh?" CR>)>>
1010
1011 <ROUTINE V-PICK () <TELL "You can't pick that." CR>>
1012
1013 <ROUTINE V-PLAY ()
1014     <COND (<FSET? ,PRSO ,ACTORBIT>
1015            <TELL
1016 "You become so engrossed in the role of the " D ,PRSO " that
1017 you kill yourself, just as he might have done!" CR>
1018            <JIGS-UP "">)
1019           (ELSE <TELL "That's silly!" CR>)>>
1020
1021 <ROUTINE V-PLUG ()
1022          <TELL "This has no effect." CR>>
1023
1024 <ROUTINE V-POUR-ON ()
1025          <COND (<EQUAL? ,PRSO ,WATER>
1026                 <REMOVE-CAREFULLY ,PRSO>
1027                 <COND (<FLAMING? ,PRSI>
1028                        <TELL "The " D ,PRSI " is extinguished." CR>
1029                        %<COND (<==? ,ZORK-NUMBER 2>
1030                                '<COND (<EQUAL? ,PRSI ,BINF-FLAG>
1031                                        <SETG BINF-FLAG <>>)>)
1032                               (ELSE '<NULL-F>)>
1033                        <FCLEAR ,PRSI ,ONBIT>
1034                        <FCLEAR ,PRSI ,FLAMEBIT>)
1035                       (T
1036                        <TELL
1037 "The water spills over the " D ,PRSI ", to the floor, and evaporates." CR>)>)
1038                %<COND (<==? ,ZORK-NUMBER 1>
1039                        '(<EQUAL? ,PRSO ,PUTTY>
1040                          <PERFORM ,V?PUT ,PUTTY ,PRSI>))
1041                       (T
1042                        '(<NULL-F> <RTRUE>))>
1043                (T
1044                 <TELL "You can't pour that." CR>)>>
1045
1046 <ROUTINE V-PRAY ()
1047          <COND %<COND (<==? ,ZORK-NUMBER 1>
1048                        '(<EQUAL? ,HERE ,SOUTH-TEMPLE>
1049                          <GOTO ,FOREST-1>))
1050                       (T
1051                        '(<NULL-F> <RTRUE>))>
1052                (T
1053                 <TELL
1054 "If you pray enough, your prayers may be answered." CR>)>>
1055
1056 <ROUTINE V-PUMP ()
1057          <COND %<COND (<==? ,ZORK-NUMBER 1>
1058                        '(<AND ,PRSI <NOT <EQUAL? ,PRSI ,PUMP>>>
1059                          <TELL "Pump it up with a " D ,PRSI "?" CR>))
1060                       (T
1061                        '(<NULL-F> <RTRUE>))>
1062                %<COND (<==? ,ZORK-NUMBER 1>
1063                        '(<IN? ,PUMP ,WINNER>
1064                          <PERFORM ,V?INFLATE ,PRSO ,PUMP>))
1065                       (T
1066                        '(<NULL-F> <RTRUE>))>
1067                (T
1068                 <TELL "It's really not clear how." CR>)>>
1069
1070 <ROUTINE V-PUSH () <HACK-HACK "Pushing the ">>
1071
1072 <ROUTINE V-PUSH-TO ()
1073          <TELL "You can't push things to that." CR>>
1074
1075 <ROUTINE PRE-PUT ()
1076          <COND %<COND (<==? ,ZORK-NUMBER 3>
1077                        '(<EQUAL? ,PRSO ,SHORT-POLE>
1078                          <RFALSE>))
1079                       (T
1080                        '(<NULL-F>
1081                          <RFALSE>))>
1082                (T
1083                 <PRE-GIVE>)>> ;"That's easy for you to say..."
1084
1085 <ROUTINE V-PUT ()
1086          <COND (<OR <FSET? ,PRSI ,OPENBIT>
1087                     <OPENABLE? ,PRSI>
1088                     <FSET? ,PRSI ,VEHBIT>>)
1089                (T
1090                 <TELL "You can't do that." CR>
1091                 <RTRUE>)>
1092          <COND (<NOT <FSET? ,PRSI ,OPENBIT>>
1093                 <TELL "The " D ,PRSI " isn't open." CR>
1094                 <THIS-IS-IT ,PRSI>)
1095                (<EQUAL? ,PRSI ,PRSO>
1096                 <TELL "How can you do that?" CR>)
1097                (<IN? ,PRSO ,PRSI>
1098                 <TELL "The " D ,PRSO " is already in the " D ,PRSI "." CR>)
1099                (<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
1100                        <GETP ,PRSI ,P?SIZE>>
1101                     <GETP ,PRSI ,P?CAPACITY>>
1102                 <TELL "There's no room." CR>)
1103                (<AND <NOT <HELD? ,PRSO>>
1104                      <FSET? ,PRSO ,TRYTAKEBIT>>
1105                 <TELL "You don't have the " D ,PRSO "." CR>
1106                 <RTRUE>)
1107                (<AND <NOT <HELD? ,PRSO>>
1108                      <NOT <ITAKE>>>
1109                 <RTRUE>)
1110                (T
1111                 <MOVE ,PRSO ,PRSI>
1112                 <FSET ,PRSO ,TOUCHBIT>
1113                 <SCORE-OBJ ,PRSO>
1114                 <TELL "Done." CR>)>>
1115
1116 <ROUTINE V-PUT-BEHIND ()
1117          <TELL "That hiding place is too obvious." CR>>
1118
1119 <ROUTINE V-PUT-ON ()
1120          <COND (<EQUAL? ,PRSI ,GROUND>
1121                 <PERFORM ,V?DROP ,PRSO>
1122                 <RTRUE>)
1123                (<FSET? ,PRSI ,SURFACEBIT>
1124                 <V-PUT>)
1125                (T
1126                 <TELL "There's no good surface on the " D ,PRSI "." CR>)>>
1127
1128 <ROUTINE V-PUT-UNDER ()
1129          <TELL "You can't do that." CR>>
1130
1131 <ROUTINE V-RAISE ()
1132          <V-LOWER>>
1133
1134 <ROUTINE V-RAPE ()
1135          <TELL "What a (ahem!) strange idea." CR>>
1136
1137 <ROUTINE PRE-READ ()
1138          <COND (<NOT ,LIT>
1139                 <TELL "It is impossible to read in the dark." CR>)
1140                (<AND ,PRSI <NOT <FSET? ,PRSI ,TRANSBIT>>>
1141                 <TELL "How does one look through a " D ,PRSI "?" CR>)>>
1142
1143 <ROUTINE V-READ ()
1144          <COND (<NOT <FSET? ,PRSO ,READBIT>>
1145                 <TELL "How does one read a " D ,PRSO "?" CR>)
1146                (T
1147                 <TELL <GETP ,PRSO ,P?TEXT> CR>)>>
1148
1149 <ROUTINE V-READ-PAGE ()
1150          <PERFORM ,V?READ ,PRSO>
1151          <RTRUE>>
1152
1153 <ROUTINE V-REPENT ()
1154          <TELL "It could very well be too late!" CR>>
1155
1156 <ROUTINE V-REPLY ()
1157          <TELL "It is hardly likely that the " D ,PRSO " is interested." CR>
1158          <SETG P-CONT <>>
1159          <SETG QUOTE-FLAG <>>
1160          <RTRUE>>
1161
1162 <ROUTINE V-RING ()
1163          <TELL "How, exactly, can you ring that?" CR>>
1164
1165 <ROUTINE V-RUB () <HACK-HACK "Fiddling with the ">>
1166
1167 <ROUTINE V-SAY ("AUX" V)
1168          %<COND (<==? ,ZORK-NUMBER 2>
1169                  '<COND (<OR ,SPELL-USED ,WAND-ON>
1170                          <PERFORM ,V?INCANT>
1171                          <RTRUE>)>)
1172                 (<==? ,ZORK-NUMBER 3>
1173                  '<COND (<AND <FSET? ,FRONT-DOOR ,TOUCHBIT>
1174                               <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?FROTZ>
1175                               <EQUAL? <GET ,P-LEXV <+ ,P-CONT 2>> ,W?OZMOO>>
1176                          <SETG P-CONT <>>
1177                          <COND (<EQUAL? ,HERE ,MSTAIRS>
1178                                 <CRLF>
1179                                 <GOTO ,FRONT-DOOR>)
1180                                (T
1181                                 <TELL "Nothing happens." CR>)>
1182                                 <RTRUE>)>)
1183                 (T
1184                  '<COND (<NOT ,P-CONT>
1185                          <TELL "Say what?" CR>
1186                          <RTRUE>)>)>
1187          <SETG QUOTE-FLAG <>>
1188          <COND (<SET V <FIND-IN ,HERE ,ACTORBIT>>
1189                 <TELL "You must address the " D .V " directly." CR>
1190                 <SETG P-CONT <>>)
1191                (<NOT <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?HELLO>>
1192                 <SETG P-CONT <>>
1193                 <TELL
1194 "Talking to yourself is a sign of impending mental collapse." CR>)>
1195          <RTRUE>>
1196
1197 <ROUTINE V-SEARCH ()
1198          <TELL "You find nothing unusual." CR>>
1199
1200 <ROUTINE V-SEND ()
1201          <COND (<FSET? ,PRSO ,ACTORBIT>
1202                 <TELL "Why would you send for the " D ,PRSO "?" CR>)
1203                (T
1204                 <TELL "That doesn't make sends." CR>)>>
1205
1206 <ROUTINE PRE-SGIVE ()
1207          <PERFORM ,V?GIVE ,PRSI ,PRSO>
1208          <RTRUE>>
1209
1210 <ROUTINE V-SGIVE ()
1211          <TELL "Foo!" CR>>
1212
1213 <ROUTINE V-SHAKE ()
1214          <COND (<FSET? ,PRSO ,ACTORBIT>
1215                 <TELL "This seems to have no effect." CR>)
1216                (<NOT <FSET? ,PRSO ,TAKEBIT>>
1217                 <TELL "You can't take it; thus, you can't shake it!" CR>)
1218                (<FSET? ,PRSO ,CONTBIT>
1219                 <COND (<FSET? ,PRSO ,OPENBIT>
1220                        <COND (<FIRST? ,PRSO>
1221                               <SHAKE-LOOP>
1222                               <TELL "The contents of the " D, PRSO " spill ">
1223                               <COND (%<COND (<==? ,ZORK-NUMBER 3>
1224                                              '<FSET? ,HERE ,NONLANDBIT>)
1225                                             (ELSE
1226                                              '<NOT <FSET? ,HERE ,RLANDBIT>>)>
1227                                      <TELL "out and disappears">)
1228                                     (T
1229                                      <TELL "to the ground">)>
1230                               <TELL "." CR>)
1231                              (T
1232                               <TELL "Shaken." CR>)>)
1233                       (T
1234                        <COND (<FIRST? ,PRSO>
1235                               <TELL
1236 "It sounds like there is something inside the " D ,PRSO "." CR>)
1237                              (T
1238                               <TELL "The " D, PRSO " sounds empty." CR>)>)>)
1239                (T
1240                 <TELL "Shaken." CR>)>>
1241
1242 <ROUTINE SHAKE-LOOP ("AUX" X)
1243          <REPEAT ()
1244                  <COND (<SET X <FIRST? ,PRSO>>
1245                         <FSET .X ,TOUCHBIT>
1246                         <MOVE .X
1247                               %<COND (<==? ,ZORK-NUMBER 1>
1248                                       '<COND (<EQUAL? ,HERE ,UP-A-TREE>
1249                                               ,PATH)
1250                                              (<NOT <FSET? ,HERE ,RLANDBIT>>
1251                                               ,PSEUDO-OBJECT)
1252                                              (T
1253                                               ,HERE)>)
1254                                      (<==? ,ZORK-NUMBER 2>
1255                                       '<COND (<EQUAL? .X ,WATER>
1256                                               ,PSEUDO-OBJECT)
1257                                              (<NOT <FSET? ,HERE ,RLANDBIT>>
1258                                               ,PSEUDO-OBJECT)
1259                                              (T
1260                                               ,HERE)>)
1261                                      (T
1262                                       '<COND (<EQUAL? ,HERE ,ON-LAKE>
1263                                               ,IN-LAKE)
1264                                              (T
1265                                               ,HERE)>)>>)
1266                        (T
1267                         <RETURN>)>>>
1268
1269 <ROUTINE V-SKIP ()
1270          <TELL <PICK-ONE ,WHEEEEE> CR>>
1271
1272 <GLOBAL WHEEEEE
1273         <LTABLE 0 "Very good. Now you can go to the second grade."
1274                "Are you enjoying yourself?"
1275                "Wheeeeeeeeee!!!!!"
1276                "Do you expect me to applaud?">>
1277
1278 <ROUTINE V-SMELL ()
1279          <TELL "It smells like a " D ,PRSO "." CR>>
1280
1281 <ROUTINE V-SPIN ()
1282          <TELL "You can't spin that!" CR>>
1283
1284 <ROUTINE V-SPRAY ()
1285          <V-SQUEEZE>>
1286
1287 <ROUTINE V-SQUEEZE ()
1288          <COND (<FSET? ,PRSO ,ACTORBIT>
1289                 <TELL "The " D ,PRSO " does not understand this.">)
1290                (T
1291                 <TELL "How singularly useless.">)>
1292          <CRLF>>
1293
1294 <ROUTINE V-SSPRAY ()
1295          <PERFORM ,V?SPRAY ,PRSI ,PRSO>>
1296
1297 <ROUTINE V-STAB ("AUX" W)
1298          <COND (<SET W <FIND-WEAPON ,WINNER>>
1299                 <PERFORM ,V?ATTACK ,PRSO .W>
1300                 <RTRUE>)
1301                (T
1302                 <TELL
1303 "No doubt you propose to stab the " D ,PRSO " with your pinky?" CR>)>>
1304
1305 <ROUTINE V-STAND ()
1306          <COND (<FSET? <LOC ,WINNER> ,VEHBIT>
1307                 <PERFORM ,V?DISEMBARK <LOC ,WINNER>>
1308                 <RTRUE>)
1309                (T
1310                 <TELL "You are already standing, I think." CR>)>>
1311
1312 <ROUTINE V-STAY ()
1313          <TELL "You will be lost without me!" CR>>
1314
1315 <ROUTINE V-STRIKE ()
1316          <COND (<FSET? ,PRSO ,ACTORBIT>
1317                 <TELL
1318 "Since you aren't versed in hand-to-hand combat, you'd better attack the "
1319 D ,PRSO " with a weapon." CR>)
1320                (T
1321                 <PERFORM ,V?LAMP-ON ,PRSO>
1322                 <RTRUE>)>>
1323
1324 <ROUTINE V-SWIM ()
1325          <COND %<COND (<OR <==? ,ZORK-NUMBER 1>
1326                            <==? ,ZORK-NUMBER 2>>
1327                        '(<GLOBAL-IN? ,GLOBAL-WATER ,HERE>
1328                          <TELL "Swimming isn't usually allowed in the ">
1329                          <COND (<NOT <EQUAL? ,PRSO ,WATER ,GLOBAL-WATER>>
1330                                 <TELL D ,PRSO ".">)
1331                                (T
1332                                 <TELL "dungeon.">)>
1333                          <CRLF>))
1334                       (T
1335                        '(<EQUAL? ,HERE ,ON-LAKE ,IN-LAKE>
1336                          <TELL "What do you think you're doing?" CR>))>
1337                %<COND (<==? ,ZORK-NUMBER 3>
1338                        '(<EQUAL? ,HERE ,FLATHEAD-OCEAN>
1339                          <TELL
1340 "Between the rocks and waves, you wouldn't last a minute!" CR>))
1341                       (T
1342                        '(<NULL-F>
1343                          <RFALSE>))>
1344                (T
1345                 <TELL "Go jump in a lake!" CR>)>>
1346
1347 <ROUTINE V-SWING ()
1348          <COND (<NOT ,PRSI>
1349                 <TELL "Whoosh!" CR>)
1350                (T
1351                 <PERFORM ,V?ATTACK ,PRSI ,PRSO>)>>
1352
1353 <ROUTINE PRE-TAKE ()
1354          <COND (<IN? ,PRSO ,WINNER>
1355                 <COND (<FSET? ,PRSO ,WEARBIT>
1356                        <TELL "You are already wearing it." CR>)
1357                       (T
1358                        <TELL "You already have that!" CR>)>)
1359                (<AND <FSET? <LOC ,PRSO> ,CONTBIT>
1360                      <NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
1361                 <TELL
1362 "You can't reach something that's inside a closed container." CR>
1363                 <RTRUE>)
1364                (,PRSI
1365                 <COND (<EQUAL? ,PRSI ,GROUND>
1366                        <SETG PRSI <>>
1367                        <RFALSE>)>
1368                 %<COND (<==? ,ZORK-NUMBER 2>
1369                         '<COND (<EQUAL? ,PRSO ,DOOR-KEEPER>
1370                                 <SETG PRSI <>>
1371                                 <RFALSE>)>)
1372                        (ELSE
1373                         '<NULL-F>)>
1374                 <COND (<NOT <EQUAL? ,PRSI <LOC ,PRSO>>>
1375                        <TELL "The " D ,PRSO " isn't in the " D ,PRSI "." CR>)
1376                       (T
1377                        <SETG PRSI <>>
1378                        <RFALSE>)>)
1379                (<EQUAL? ,PRSO <LOC ,WINNER>>
1380                 <TELL "You're inside of it!" CR>)>>
1381
1382 <ROUTINE V-TAKE ()
1383          <COND (<EQUAL? <ITAKE> T>
1384                 <COND (<FSET? ,PRSO ,WEARBIT>
1385                        <TELL "You are now wearing the " D ,PRSO "." CR>)
1386                       (T
1387                        <TELL "Taken." CR>)>)>>
1388
1389 <ROUTINE V-TELL ()
1390          <COND (<FSET? ,PRSO ,ACTORBIT>
1391                 <COND (,P-CONT
1392                        <SETG WINNER ,PRSO>
1393                        <SETG HERE <LOC ,WINNER>>)
1394                       (T
1395                        <TELL "The " D ,PRSO
1396 " pauses for a moment, perhaps thinking that you should reread
1397 the manual." CR>)>)
1398                (T
1399                 <TELL "You can't talk to the " D ,PRSO "!" CR>
1400                 <SETG QUOTE-FLAG <>>
1401                 <SETG P-CONT <>>
1402                 <RFATAL>)>>
1403
1404 <ROUTINE V-THROUGH ("OPTIONAL" (OBJ <>) "AUX" M)
1405         #DECL ((OBJ) <OR OBJECT FALSE> (M) <PRIMTYPE VECTOR>)
1406         <COND (<AND <FSET? ,PRSO ,DOORBIT>
1407                     <SET M <OTHER-SIDE ,PRSO>>>
1408                <DO-WALK .M>
1409                <RTRUE>)
1410               (<AND <NOT .OBJ> <FSET? ,PRSO ,VEHBIT>>
1411                <PERFORM ,V?BOARD ,PRSO>
1412                <RTRUE>)
1413               (<OR .OBJ <NOT <FSET? ,PRSO ,TAKEBIT>>>
1414                %<COND (<==? ,ZORK-NUMBER 2>
1415                        '<COND (<AND ,SCOL-ROOM
1416                                    <OR .OBJ <EQUAL? ,PRSO ,CURTAIN>>>
1417                               <SCOL-GO .OBJ>
1418                               <RTRUE>)
1419                              (<AND <EQUAL? ,HERE ,DEPOSITORY>
1420                                    <EQUAL? ,PRSO ,SNWL>
1421                                    ,SCOL-ROOM>
1422                               <SCOL-GO .OBJ>
1423                               <RTRUE>)
1424                              (<AND <EQUAL? ,HERE ,SCOL-ACTIVE>
1425                                    <EQUAL? ,PRSO 
1426                                            <GET <SET M <GET-WALL ,HERE>> 1>>>
1427                               <SETG SCOL-ROOM <GET .M 2>>
1428                               <SETG PRSO <GETP ,PRSO ,P?SIZE>>
1429                               <COND (.OBJ <SCOL-OBJ .OBJ 0 ,DEPOSITORY>)
1430                                     (T
1431                                      <SCOL-THROUGH 0 ,DEPOSITORY>)>
1432                               <RTRUE>)
1433                              (<EQUAL? ,PRSO ,CURTAIN>
1434                               <TELL
1435 "You can't go more than part way through the curtain." CR>
1436                               <RTRUE>)>)
1437                       (ELSE '<NULL-F>)>
1438                <TELL
1439 "You hit your head against the " D ,PRSO " as you attempt this feat." CR>)
1440               (<IN? ,PRSO ,WINNER>
1441                <TELL "That would involve quite a contortion!" CR>)
1442               (T
1443                <TELL <PICK-ONE ,YUKS> CR>)>>
1444
1445 <ROUTINE V-THROW ()
1446          <COND (<IDROP>
1447                 <COND (<EQUAL? ,PRSI ,ME>
1448                        <TELL
1449 "A terrific throw! The " D ,PRSO>
1450                        <SETG WINNER ,PLAYER>
1451                        <JIGS-UP " hits you squarely in the head. Normally,
1452 this wouldn't do much damage, but by incredible mischance, you fall over
1453 backwards trying to duck, and break your neck, justice being swift and
1454 merciful in the Great Underground Empire.">)
1455                       (<AND ,PRSI <FSET? ,PRSI ,ACTORBIT>>
1456                        <TELL
1457 "The " D ,PRSI " ducks as the " D ,PRSO " flies by and crashes to the ground."
1458 CR>)
1459                       (T <TELL "Thrown." CR>)>)
1460                (ELSE <TELL "Huh?" CR>)>>
1461
1462 <ROUTINE V-THROW-OFF ()
1463          <TELL "You can't throw anything off of that!" CR>>
1464
1465 <ROUTINE V-TIE ()
1466          <COND (<EQUAL? ,PRSI ,WINNER>
1467                 <TELL "You can't tie anything to yourself." CR>)
1468                (T
1469                 <TELL "You can't tie the " D ,PRSO " to that." CR>)>>
1470
1471 <ROUTINE V-TIE-UP ()
1472          <TELL "You could certainly never tie it with that!" CR>>
1473
1474 <ROUTINE V-TREASURE ()
1475          <COND %<COND (<==? ,ZORK-NUMBER 1>
1476                        '(<EQUAL? ,HERE ,NORTH-TEMPLE>
1477                          <GOTO ,TREASURE-ROOM>))
1478                       (T
1479                        '(<NULL-F> <RTRUE>))>
1480                %<COND (<==? ,ZORK-NUMBER 1>
1481                        '(<EQUAL? ,HERE ,TREASURE-ROOM>
1482                          <GOTO ,NORTH-TEMPLE>))
1483                       (T
1484                        '(<NULL-F> <RTRUE>))>
1485                (T
1486                 <TELL "Nothing happens." CR>)>>
1487
1488 <ROUTINE PRE-TURN ()
1489          %<COND (<==? ,ZORK-NUMBER 3>
1490                  '<COND (<AND <EQUAL? ,PRSI <> ,ROOMS>
1491                               <EQUAL? ,PRSO ,DIAL ,TM-DIAL ,T-BAR>>
1492                          <TELL
1493 "You should turn the " D ,PRSO " to something." CR>
1494                          <RTRUE>)>)
1495                 (ELSE T)>
1496          <COND (%<COND (<==? ,ZORK-NUMBER 1>
1497                         '<AND <EQUAL? ,PRSI <> ,ROOMS>
1498                               <NOT <EQUAL? ,PRSO ,BOOK>>>)
1499                        (ELSE
1500                         '<EQUAL? ,PRSI <> ,ROOMS>)>
1501                 <TELL "Your bare hands don't appear to be enough." CR>)
1502                (<NOT <FSET? ,PRSO ,TURNBIT>>
1503                 <TELL "You can't turn that!" CR>)>>
1504
1505 <ROUTINE V-TURN ()
1506          <TELL "This has no effect." CR>>
1507
1508 <ROUTINE V-UNLOCK ()
1509          <V-LOCK>>
1510
1511 <ROUTINE V-UNTIE ()
1512          <TELL "This cannot be tied, so it cannot be untied!" CR>>
1513
1514 <ROUTINE V-WAIT ("OPTIONAL" (NUM 3))
1515          <TELL "Time passes..." CR>
1516          <REPEAT ()
1517                  <COND (<L? <SET NUM <- .NUM 1>> 0> <RETURN>)
1518                        (<CLOCKER> <RETURN>)>>
1519          <SETG CLOCK-WAIT T>>
1520
1521 <ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
1522          <COND (<NOT ,P-WALK-DIR>
1523                 <PERFORM ,V?WALK-TO ,PRSO>
1524                 <RTRUE>)
1525                (<SET PT <GETPT ,HERE ,PRSO>>
1526                 <COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
1527                        <GOTO <GETB .PT ,REXIT>>)
1528                       (<EQUAL? .PTS ,NEXIT>
1529                        <TELL <GET .PT ,NEXITSTR> CR>
1530                        <RFATAL>)
1531                       (<EQUAL? .PTS ,FEXIT>
1532                        <COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
1533                               <GOTO .RM>)
1534                              %<COND (<==? ,ZORK-NUMBER 3>
1535                                      '(<AND <EQUAL? ,HERE ,CP> ,CP-MOVED>
1536                                        <RTRUE>))
1537                                     (T
1538                                      '(<NULL-F> <RFALSE>))>
1539                              (T
1540                               <RFATAL>)>)
1541                       (<EQUAL? .PTS ,CEXIT>
1542                        <COND (<VALUE <GETB .PT ,CEXITFLAG>>
1543                               <GOTO <GETB .PT ,REXIT>>)
1544                              (<SET STR <GET .PT ,CEXITSTR>>
1545                               <TELL .STR CR>
1546                               <RFATAL>)
1547                              (T
1548                               <TELL "You can't go that way." CR>
1549                               <RFATAL>)>)
1550                       (<EQUAL? .PTS ,DEXIT>
1551                        <COND (<FSET? <SET OBJ <GETB .PT ,DEXITOBJ>> ,OPENBIT>
1552                               <GOTO <GETB .PT ,REXIT>>)
1553                              (<SET STR <GET .PT ,DEXITSTR>>
1554                               <TELL .STR CR>
1555                               <RFATAL>)
1556                              (T
1557                               <TELL "The " D .OBJ " is closed." CR>
1558                               <THIS-IS-IT .OBJ>
1559                               <RFATAL>)>)>)
1560                (<AND <NOT ,LIT>
1561                      <PROB 80>
1562                      <EQUAL? ,WINNER ,ADVENTURER>
1563                      <NOT <FSET? ,HERE ,NONLANDBIT>>>
1564                 <COND (,SPRAYED?
1565                        <TELL
1566 "There are odd noises in the darkness, and there is no exit in that
1567 direction." CR>
1568                        <RFATAL>)
1569                       %<COND (<==? ,ZORK-NUMBER 3>
1570                               '(<EQUAL? ,HERE ,DARK-1 ,DARK-2>
1571                                 <JIGS-UP
1572 "Oh, no! You have walked into a den of hungry grues and it's dinner time!">))
1573                              (T
1574                               '(<NULL-F>
1575                                 <RFALSE>))>
1576                       (T
1577                        <JIGS-UP
1578 "Oh, no! You have walked into the slavering fangs of a lurking grue!">)>)
1579                (T
1580                 <TELL "You can't go that way." CR>
1581                 <RFATAL>)>>
1582
1583 <ROUTINE V-WALK-AROUND ()
1584          <TELL "Use compass directions for movement." CR>>
1585
1586 <ROUTINE V-WALK-TO ()
1587          <COND (<AND ,PRSO
1588                      <OR <IN? ,PRSO ,HERE>
1589                          <GLOBAL-IN? ,PRSO ,HERE>>>
1590                 <TELL "It's here!" CR>)
1591                (T
1592                 <TELL "You should supply a direction!" CR>)>>
1593
1594 <ROUTINE V-WAVE ()
1595          <HACK-HACK "Waving the ">>
1596
1597 <ROUTINE V-WEAR ()
1598          <COND (<NOT <FSET? ,PRSO ,WEARBIT>>
1599                 <TELL "You can't wear the " D ,PRSO "." CR>)
1600                (T
1601                 <PERFORM ,V?TAKE ,PRSO>
1602                 <RTRUE>)>>
1603
1604 <ROUTINE V-WIN ()
1605          <TELL "Naturally!" CR>>
1606
1607 <ROUTINE V-WIND ()
1608          <TELL "You cannot wind up a " D ,PRSO "." CR>>
1609
1610 <ROUTINE V-WISH ()
1611          %<COND (<==? ,ZORK-NUMBER 2>
1612                  '<PERFORM ,V?MAKE ,WISH>)
1613                 (T
1614                  '<TELL "With luck, your wish will come true." CR>)>>
1615
1616 <ROUTINE V-YELL () <TELL "Aaaarrrrgggghhhh!" CR>>
1617
1618 <ROUTINE V-ZORK () <TELL "At your service!" CR>>
1619
1620 ^L
1621
1622 "Verb-Associated Routines"
1623
1624 "Descriptions"
1625
1626 <GLOBAL LIT <>>
1627
1628 <GLOBAL SPRAYED? <>>
1629
1630 <ROUTINE V-FIRST-LOOK ()
1631          <COND (<DESCRIBE-ROOM>
1632                 <COND (<NOT ,SUPER-BRIEF>
1633                        <DESCRIBE-OBJECTS>)>)>>
1634
1635 <ROUTINE DESCRIBE-ROOM ("OPTIONAL" (LOOK? <>) "AUX" V? STR AV)
1636          <SET V? <OR .LOOK? ,VERBOSE>>
1637          <COND (<NOT ,LIT>
1638                 <TELL "It is pitch black.">
1639                 <COND (<NOT ,SPRAYED?>
1640                        <TELL " You are likely to be eaten by a grue.">)>
1641                 <CRLF>
1642                 %<COND (<==? ,ZORK-NUMBER 3>
1643                         '<COND (<EQUAL? ,HERE ,DARK-2>
1644                                 <TELL
1645 "The ground continues to slope upwards away from the lake. You can barely
1646 detect a dim light from the east." CR>)>)
1647                        (T
1648                         '<NULL-F>)>
1649                 <RFALSE>)>
1650          <COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
1651                 <FSET ,HERE ,TOUCHBIT>
1652                 <SET V? T>)>
1653          %<COND (<==? ,ZORK-NUMBER 1>
1654                  '<COND (<FSET? ,HERE ,MAZEBIT>
1655                          <FCLEAR ,HERE ,TOUCHBIT>)>)
1656                 (T
1657                  '<NULL-F>)>
1658          <COND (<IN? ,HERE ,ROOMS>
1659                 ;"Was <TELL D ,HERE CR>"
1660                 <TELL D ,HERE>
1661                 <COND (<FSET? <SET AV <LOC ,WINNER>> ,VEHBIT>
1662                        <TELL ", in the " D .AV>)>
1663                 <CRLF>)>
1664          <COND (%<COND (<==? ,ZORK-NUMBER 2>
1665                         '<OR .LOOK? <NOT ,SUPER-BRIEF> <EQUAL? ,HERE ,ZORK3>>)
1666                        (ELSE
1667                         '<OR .LOOK? <NOT ,SUPER-BRIEF>>)>
1668                 <SET AV <LOC ,WINNER>>
1669                 ;<COND (<FSET? .AV ,VEHBIT>
1670                        <TELL "(You are in the " D .AV ".)" CR>)>
1671                 <COND (<AND .V? <APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>>
1672                        <RTRUE>)
1673                       (<AND .V? <SET STR <GETP ,HERE ,P?LDESC>>>
1674                        <TELL .STR CR>)
1675                       (T
1676                        <APPLY <GETP ,HERE ,P?ACTION> ,M-FLASH>)>
1677                 <COND (<AND <NOT <EQUAL? ,HERE .AV>> <FSET? .AV ,VEHBIT>>
1678                        <APPLY <GETP .AV ,P?ACTION> ,M-LOOK>)>)>
1679          T>
1680
1681 <ROUTINE DESCRIBE-OBJECTS ("OPTIONAL" (V? <>))
1682          <COND (,LIT
1683                 <COND (<FIRST? ,HERE>
1684                        <PRINT-CONT ,HERE <SET V? <OR .V? ,VERBOSE>> -1>)>)
1685                (T
1686                 <TELL "Only bats can see in the dark. And you're not one." CR>)>>
1687
1688 "DESCRIBE-OBJECT -- takes object and flag.  if flag is true will print a
1689 long description (fdesc or ldesc), otherwise will print short."
1690
1691 <GLOBAL DESC-OBJECT <>>
1692
1693 <ROUTINE DESCRIBE-OBJECT (OBJ V? LEVEL "AUX" (STR <>) AV)
1694          <SETG DESC-OBJECT .OBJ>
1695          <COND (<AND <0? .LEVEL>
1696                      <APPLY <GETP .OBJ ,P?DESCFCN> ,M-OBJDESC>>
1697                 <RTRUE>)
1698                (<AND <0? .LEVEL>
1699                      <OR <AND <NOT <FSET? .OBJ ,TOUCHBIT>>
1700                               <SET STR <GETP .OBJ ,P?FDESC>>>
1701                          <SET STR <GETP .OBJ ,P?LDESC>>>>
1702                 <TELL .STR>)
1703                (<0? .LEVEL>
1704                 <TELL "There is a " D .OBJ " here">
1705                 <COND (<FSET? .OBJ ,ONBIT>
1706                        <TELL " (providing light)">)>
1707                 <TELL ".">)
1708                (T
1709                 <TELL <GET ,INDENTS .LEVEL>>
1710                 <TELL "A " D .OBJ>
1711                 <COND (<FSET? .OBJ ,ONBIT>
1712                        <TELL " (providing light)">)
1713                       (<AND <FSET? .OBJ ,WEARBIT>
1714                             <IN? .OBJ ,WINNER>>
1715                        <TELL " (being worn)">)>)>
1716          %<COND (<==? ,ZORK-NUMBER 2>
1717                  '<COND (<AND <EQUAL? .OBJ ,SPELL-VICTIM>
1718                               <EQUAL? ,SPELL-USED ,W?FLOAT>>
1719                          <TELL " (floating in midair)">)>)
1720                 (T
1721                  '<NULL-F>)>
1722          <COND (<AND <0? .LEVEL>
1723                      <SET AV <LOC ,WINNER>>
1724                      <FSET? .AV ,VEHBIT>>
1725                 <TELL " (outside the " D .AV ")">)>
1726          <CRLF>
1727          <COND (<AND <SEE-INSIDE? .OBJ> <FIRST? .OBJ>>
1728                 <PRINT-CONT .OBJ .V? .LEVEL>)>>
1729
1730 <ROUTINE PRINT-CONTENTS (OBJ "AUX" F N (1ST? T) (IT? <>) (TWO? <>))
1731          <COND (<SET F <FIRST? .OBJ>>
1732                 <REPEAT ()
1733                         <SET N <NEXT? .F>>
1734                         <COND (.1ST? <SET 1ST? <>>)
1735                               (ELSE
1736                                <TELL ", ">
1737                                <COND (<NOT .N> <TELL "and ">)>)>
1738                         <TELL "a " D .F>
1739                         <COND (<AND <NOT .IT?> <NOT .TWO?>>
1740                                <SET IT? .F>)
1741                               (ELSE
1742                                <SET TWO? T>
1743                                <SET IT? <>>)>
1744                         <SET F .N>
1745                         <COND (<NOT .F>
1746                                <COND (<AND .IT? <NOT .TWO?>>
1747                                       <THIS-IS-IT .IT?>)>
1748                                <RTRUE>)>>)>>
1749
1750 <ROUTINE PRINT-CONT (OBJ "OPTIONAL" (V? <>) (LEVEL 0)
1751                      "AUX" Y 1ST? SHIT AV STR (PV? <>) (INV? <>))
1752          <COND (<NOT <SET Y <FIRST? .OBJ>>> <RTRUE>)>
1753          <COND (<AND <SET AV <LOC ,WINNER>> <FSET? .AV ,VEHBIT>>
1754                 T)
1755                (ELSE <SET AV <>>)>
1756          <SET 1ST? T>
1757          <SET SHIT T>
1758          <COND (<EQUAL? ,WINNER .OBJ <LOC .OBJ>>
1759                 <SET INV? T>)
1760                (ELSE
1761                 <REPEAT ()
1762                         <COND %<COND (<==? ,ZORK-NUMBER 2>
1763                                       '(<NOT .Y>
1764                                         <COND (<AND <0? .LEVEL>
1765                                                     <==? ,SPELL? ,S-FANTASIZE>
1766                                                     <PROB 20>>
1767                                                <TELL "There is a "
1768                                                      <PICK-ONE ,FANTASIES>
1769                                                      " here." CR>
1770                                                <SET 1ST? <>>)>
1771                                         <RETURN>))
1772                                      (ELSE
1773                                       '(<NOT .Y>
1774                                         <RETURN>))>
1775                               (<EQUAL? .Y .AV> <SET PV? T>)
1776                               (<EQUAL? .Y ,WINNER>)
1777                               (<AND <NOT <FSET? .Y ,INVISIBLE>>
1778                                     <NOT <FSET? .Y ,TOUCHBIT>>
1779                                     <SET STR <GETP .Y ,P?FDESC>>>
1780                                <COND (<NOT <FSET? .Y ,NDESCBIT>>
1781                                       <TELL .STR CR>
1782                                       <SET SHIT <>>
1783                                       ;<SET 1ST? <>>)>
1784                                <COND (<AND <SEE-INSIDE? .Y>
1785                                            <NOT <GETP <LOC .Y> ,P?DESCFCN>>
1786                                            <FIRST? .Y>>
1787                                       <COND (<PRINT-CONT .Y .V? 0>
1788                                              <SET 1ST? <>>)>)>)>
1789                         <SET Y <NEXT? .Y>>>)>
1790          <SET Y <FIRST? .OBJ>>
1791          <REPEAT ()
1792                  <COND (<NOT .Y>
1793                         <COND (<AND .PV? .AV <FIRST? .AV>>
1794                                <SET LEVEL <+ .LEVEL 1>> ;"not in Zork III"
1795                                <PRINT-CONT .AV .V? .LEVEL>)>
1796                         <RETURN>)
1797                        (<EQUAL? .Y .AV ,ADVENTURER>)
1798                        (<AND <NOT <FSET? .Y ,INVISIBLE>>
1799                              <OR .INV?
1800                                  <FSET? .Y ,TOUCHBIT>
1801                                  <NOT <GETP .Y ,P?FDESC>>>>
1802                         <COND (<NOT <FSET? .Y ,NDESCBIT>>
1803                                <COND (.1ST?
1804                                       <COND (<FIRSTER .OBJ .LEVEL>
1805                                              <COND (<L? .LEVEL 0>
1806                                                     <SET LEVEL 0>)>)>
1807                                       <SET LEVEL <+ 1 .LEVEL>>
1808                                       <SET 1ST? <>>)>
1809                                <COND (<L? .LEVEL 0> <SET LEVEL 0>)>
1810                                <DESCRIBE-OBJECT .Y .V? .LEVEL>)
1811                               (<AND <FIRST? .Y> <SEE-INSIDE? .Y>>
1812                                <SET LEVEL <+ .LEVEL 1>> ;"not in Zork III"
1813                                <PRINT-CONT .Y .V? .LEVEL>
1814                                <SET LEVEL <- .LEVEL 1>> ;"not in Zork III")>)>
1815                  <SET Y <NEXT? .Y>>>
1816          <COND (<AND .1ST? .SHIT> <RFALSE>) (T <RTRUE>)>>
1817
1818 <ROUTINE FIRSTER (OBJ LEVEL)
1819          <COND %<COND (<==? ,ZORK-NUMBER 1>
1820                        '(<EQUAL? .OBJ ,TROPHY-CASE>
1821                          <TELL
1822 "Your collection of treasures consists of:" CR>))
1823                       (T
1824                        '(<NULL-F> <RTRUE>))>
1825                (<EQUAL? .OBJ ,WINNER>
1826                 <TELL "You are carrying:" CR>)
1827                (<NOT <IN? .OBJ ,ROOMS>>
1828                 <COND (<G? .LEVEL 0>
1829                        <TELL <GET ,INDENTS .LEVEL>>)>
1830                 <COND (<FSET? .OBJ ,SURFACEBIT>
1831                        <TELL "Sitting on the " D .OBJ " is: " CR>)
1832                       (<FSET? .OBJ ,ACTORBIT>
1833                        <TELL "The " D .OBJ " is holding: " CR>)
1834                       (T
1835                        <TELL "The " D .OBJ " contains:" CR>)>)>>
1836
1837 <ROUTINE SEE-INSIDE? (OBJ)
1838          <AND <NOT <FSET? .OBJ ,INVISIBLE>>
1839               <OR <FSET? .OBJ ,TRANSBIT> <FSET? .OBJ ,OPENBIT>>>>
1840
1841 "Scoring"
1842
1843 <GLOBAL MOVES 0>
1844
1845 <GLOBAL SCORE 0>
1846
1847 <GLOBAL BASE-SCORE 0>
1848
1849 <GLOBAL WON-FLAG <>>
1850
1851 <ROUTINE SCORE-UPD (NUM)
1852          <SETG BASE-SCORE <+ ,BASE-SCORE .NUM>>
1853          <SETG SCORE <+ ,SCORE .NUM>>
1854          %<COND (<==? ,ZORK-NUMBER 1>
1855                  '<COND (<AND <EQUAL? ,SCORE 350>
1856                               <NOT ,WON-FLAG>>
1857                          <SETG WON-FLAG T>
1858                          <FCLEAR ,MAP ,INVISIBLE>
1859                          <FCLEAR ,WEST-OF-HOUSE ,TOUCHBIT>
1860                          <TELL
1861 "An almost inaudible voice whispers in your ear, \"Look to your treasures
1862 for the final secret.\"" CR>)>)
1863                 (T
1864                  '<NULL-F>)>
1865          T>
1866
1867 <ROUTINE SCORE-OBJ (OBJ "AUX" TEMP)
1868          <COND (<G? <SET TEMP <GETP .OBJ ,P?VALUE>> 0>
1869                 <SCORE-UPD .TEMP>
1870                 <PUTP .OBJ ,P?VALUE 0>)>>
1871
1872 <ROUTINE YES? ()
1873          <PRINTI ">">
1874          <READ ,P-INBUF ,P-LEXV>
1875          <COND (<EQUAL? <GET ,P-LEXV 1> ,W?YES ,W?Y>
1876                 <RTRUE>)
1877                (T
1878                 <RFALSE>)>>
1879
1880 "Death"
1881
1882 <GLOBAL DEAD <>>
1883
1884 <GLOBAL DEATHS 0>
1885
1886 <GLOBAL LUCKY 1>
1887
1888 ;"JIGS-UP is in ACTIONS.ZIL"
1889
1890 ;"RANDOMIZE-OBJECTS is in ACTIONS.ZIL"
1891
1892 ;"KILL-INTERRUPTS is in ACTIONS.ZIL"
1893
1894 "Object Manipulation"
1895
1896 <GLOBAL FUMBLE-NUMBER 7>
1897
1898 <GLOBAL FUMBLE-PROB 8>
1899
1900 <ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" CNT OBJ)
1901          #DECL ((VB) <OR ATOM FALSE> (CNT) FIX (OBJ) OBJECT)
1902          <COND %<COND (<==? ,ZORK-NUMBER 1>
1903                        '(,DEAD
1904                          <COND (.VB
1905                                 <TELL
1906 "Your hand passes through its object." CR>)>
1907                          <RFALSE>))
1908                       (T
1909                        '(<NULL-F>
1910                          <RFALSE>))>
1911                (<NOT <FSET? ,PRSO ,TAKEBIT>>
1912                 <COND (.VB
1913                        <TELL <PICK-ONE ,YUKS> CR>)>
1914                 <RFALSE>)
1915                %<COND (<==? ,ZORK-NUMBER 2>
1916                        '(<AND <EQUAL? ,PRSO ,SPELL-VICTIM>
1917                               <EQUAL? ,SPELL-USED ,W?FLOAT ,W?FREEZE>>
1918                          <COND (<EQUAL? ,SPELL-USED ,W?FLOAT>
1919                                 <TELL
1920 "You can't reach that. It's floating above your head." CR>)
1921                                (T
1922                                 <TELL "It seems rooted to the spot." CR>)>
1923                          <RFALSE>))
1924                       (T
1925                        '(<NULL-F>
1926                          <RFALSE>))>
1927                (<AND <FSET? <LOC ,PRSO> ,CONTBIT>
1928                      <NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
1929                 ;"Kludge for parser calling itake"
1930                 <RFALSE>)
1931                (<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
1932                      <G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
1933                 <COND (.VB
1934                        <TELL "Your load is too heavy">
1935                        <COND (<L? ,LOAD-ALLOWED ,LOAD-MAX>
1936                               <TELL", especially in light of your condition.">)
1937                              (T
1938                               <TELL ".">)>
1939                        <CRLF>)>
1940                 <RFATAL>)
1941                (<AND <VERB? TAKE>
1942                      <G? <SET CNT <CCOUNT ,WINNER>> ,FUMBLE-NUMBER>
1943                      <PROB <* .CNT ,FUMBLE-PROB>>>
1944                 <TELL
1945 "You're holding too many things already!" CR>
1946                 <RFALSE>)
1947                (T
1948                 <MOVE ,PRSO ,WINNER>
1949                 <FCLEAR ,PRSO ,NDESCBIT>
1950                 <FSET ,PRSO ,TOUCHBIT>
1951                 %<COND (<==? ,ZORK-NUMBER 2>
1952                         '<COND (<EQUAL? ,SPELL? ,S-FILCH>
1953                                 <COND (<RIPOFF ,PRSO ,WIZARD-CASE>
1954                                        <TELL
1955 "When you touch the " D ,PRSO " it immediately disappears!" CR>
1956                                        <RFALSE>)>)>)
1957                        (T
1958                         '<NULL-F>)>
1959                 %<COND (<OR <==? ,ZORK-NUMBER 1>
1960                             <==? ,ZORK-NUMBER 2>>
1961                         '<SCORE-OBJ ,PRSO>)
1962                        (T
1963                         '<NULL-F>)>
1964                 <RTRUE>)>>
1965
1966 <ROUTINE IDROP ()
1967          <COND (<AND <NOT <IN? ,PRSO ,WINNER>>
1968                      <NOT <IN? <LOC ,PRSO> ,WINNER>>>
1969                 <TELL "You're not carrying the " D ,PRSO "." CR>
1970                 <RFALSE>)
1971                (<AND <NOT <IN? ,PRSO ,WINNER>>
1972                      <NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
1973                 <TELL "The " D ,PRSO " is closed." CR>
1974                 <RFALSE>)
1975                (T
1976                 <MOVE ,PRSO <LOC ,WINNER>>
1977                 <RTRUE>)>>
1978
1979 <ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
1980          <COND (<SET X <FIRST? .OBJ>>
1981                 <REPEAT ()
1982                         <COND (<NOT <FSET? .X ,WEARBIT>>
1983                                <SET CNT <+ .CNT 1>>)>
1984                         <COND (<NOT <SET X <NEXT? .X>>>
1985                                <RETURN>)>>)>
1986          .CNT>
1987
1988 <ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
1989          <COND (<SET CONT <FIRST? .OBJ>>
1990                 <REPEAT ()
1991                         <COND (<AND <EQUAL? .OBJ ,PLAYER>
1992                                     <FSET? .CONT ,WEARBIT>>
1993                                <SET WT <+ .WT 1>>)
1994                               (T
1995                                <SET WT <+ .WT <WEIGHT .CONT>>>)>
1996                         <COND (<NOT <SET CONT <NEXT? .CONT>>> <RETURN>)>>)>
1997          <+ .WT <GETP .OBJ ,P?SIZE>>>
1998
1999 "Miscellaneous"
2000
2001 <CONSTANT REXIT 0>
2002 <CONSTANT UEXIT 1>
2003 <CONSTANT NEXIT 2>
2004 <CONSTANT FEXIT 3>
2005 <CONSTANT CEXIT 4>
2006 <CONSTANT DEXIT 5>
2007
2008 <CONSTANT NEXITSTR 0>
2009 <CONSTANT FEXITFCN 0>
2010 <CONSTANT CEXITFLAG 1>
2011 <CONSTANT CEXITSTR 1>
2012 <CONSTANT DEXITOBJ 1>
2013 <CONSTANT DEXITSTR 1>
2014
2015 <GLOBAL INDENTS
2016         <TABLE (PURE)
2017                ""
2018                "  "
2019                "    "
2020                "      "
2021                "        "
2022                "          ">>
2023
2024 <ROUTINE HACK-HACK (STR)
2025          <COND (<AND <IN? ,PRSO ,GLOBAL-OBJECTS>
2026                      <VERB? WAVE RAISE LOWER>>
2027                 <TELL "The " D ,PRSO " isn't here!" CR>)
2028                (T
2029                 <TELL .STR D ,PRSO <PICK-ONE ,HO-HUM> CR>)>>
2030
2031 <GLOBAL HO-HUM
2032         <LTABLE
2033          0
2034          " doesn't seem to work."
2035          " isn't notably helpful."
2036          " has no effect.">>
2037
2038 <ROUTINE NO-GO-TELL (AV WLOC)
2039          <COND (.AV
2040                 <TELL "You can't go there in a " D .WLOC ".">)
2041                (T
2042                 <TELL "You can't go there without a vehicle.">)>
2043          <CRLF>>
2044
2045 <ROUTINE GOTO (RM "OPTIONAL" (V? T)
2046                "AUX" (LB <FSET? .RM ,RLANDBIT>) (WLOC <LOC ,WINNER>)
2047                      (AV <>) OLIT OHERE)
2048          <SET OLIT ,LIT>
2049          <SET OHERE ,HERE>
2050          <COND (<FSET? .WLOC ,VEHBIT>
2051                 <SET AV <GETP .WLOC ,P?VTYPE>>)>
2052          <COND (<AND <NOT .LB>
2053                      <NOT .AV>>
2054                 <NO-GO-TELL .AV .WLOC>
2055                 <RFALSE>)
2056                (<AND <NOT .LB>
2057                      <NOT <FSET? .RM .AV>>>
2058                 <NO-GO-TELL .AV .WLOC>
2059                 <RFALSE>)
2060                (<AND <FSET? ,HERE ,RLANDBIT>
2061                      .LB
2062                      .AV
2063                      <NOT <EQUAL? .AV ,RLANDBIT>>
2064                      <NOT <FSET? .RM .AV>>>
2065                 <NO-GO-TELL .AV .WLOC>
2066                 <RFALSE>)
2067                (<FSET? .RM ,RMUNGBIT>
2068                 <TELL <GETP .RM ,P?LDESC> CR>
2069                 <RFALSE>)
2070                (T
2071                 <COND (<AND .LB
2072                             <NOT <FSET? ,HERE ,RLANDBIT>>
2073                             <NOT ,DEAD>
2074                             <FSET? .WLOC ,VEHBIT>>
2075                        %<COND (<==? ,ZORK-NUMBER 1>
2076                                '<TELL
2077 "The " D .WLOC " comes to a rest on the shore." CR CR>)
2078                               (<==? ,ZORK-NUMBER 2>
2079                                '<COND (<EQUAL? .WLOC ,BALLOON>
2080                                        <TELL
2081 "The balloon lands." CR>)
2082                                       (<FSET? .WLOC ,VEHBIT>
2083                                        <TELL
2084 "The " D .WLOC " comes to a stop." CR CR>)>)
2085                               (<==? ,ZORK-NUMBER 3>
2086                                '<COND (<FSET? .WLOC ,VEHBIT>
2087                                        <TELL
2088 "The " D .WLOC " comes to a stop." CR CR>)>)>)>
2089                 <COND (.AV
2090                        <MOVE .WLOC .RM>)
2091                       (T
2092                        <MOVE ,WINNER .RM>)>
2093                 <SETG HERE .RM>
2094                 <SETG LIT <LIT? ,HERE>>
2095                 <COND (<AND <NOT .OLIT>
2096                             <NOT ,LIT>
2097                             <PROB 80>>
2098                        <COND (,SPRAYED?
2099                               <TELL
2100 "There are sinister gurgling noises in the darkness all around you!" CR>)
2101                              %<COND (<==? ,ZORK-NUMBER 3>
2102                                      '(<EQUAL? ,HERE ,DARK-1 ,DARK-2>
2103                                        <JIGS-UP
2104 "Oh, no! Dozen of lurking grues attack and devour you! You must have
2105 stumbled into an authentic grue lair!">))
2106                                     (T
2107                                      '(<NULL-F>
2108                                        <RFALSE>))>
2109                              (T
2110                               <TELL
2111 "Oh, no! A lurking grue slithered into the ">
2112                               <COND (<FSET? <LOC ,WINNER> ,VEHBIT>
2113                                      <TELL D <LOC ,WINNER>>)
2114                                     (T <TELL "room">)>
2115                               <JIGS-UP " and devoured you!">
2116                               <RTRUE>)>)>
2117                 <COND (<AND <NOT ,LIT>
2118                             <EQUAL? ,WINNER ,ADVENTURER>>
2119                        <TELL "You have moved into a dark place." CR>
2120                        <SETG P-CONT <>>)>
2121                 <APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
2122                 <SCORE-OBJ .RM>
2123                 <COND (<NOT <EQUAL? ,HERE .RM>> <RTRUE>)
2124                       (<AND <NOT <EQUAL? ,ADVENTURER ,WINNER>>
2125                             <IN? ,ADVENTURER .OHERE>>
2126                        <TELL "The " D ,WINNER " leaves the room." CR>)
2127                       %<COND (<==? ,ZORK-NUMBER 1>
2128                               '(<AND <EQUAL? ,HERE .OHERE>
2129                                       ;"no double description"
2130                                      <EQUAL? ,HERE ,ENTRANCE-TO-HADES>>
2131                                 <RTRUE>))
2132                              (ELSE
2133                               '(<NULL-F> <RTRUE>))>
2134                       (<AND .V?
2135                             <EQUAL? ,WINNER ,ADVENTURER>>
2136                        <V-FIRST-LOOK>)>
2137                 <RTRUE>)>>
2138
2139 <ROUTINE LKP (ITM TBL "AUX" (CNT 0) (LEN <GET .TBL 0>))
2140          <REPEAT ()
2141                  <COND (<G? <SET CNT <+ .CNT 1>> .LEN>
2142                         <RFALSE>)
2143                        (<EQUAL? <GET .TBL .CNT> .ITM>
2144                         <COND (<EQUAL? .CNT .LEN> <RFALSE>)
2145                               (T
2146                                <RETURN <GET .TBL <+ .CNT 1>>>)>)>>>
2147
2148 <ROUTINE DO-WALK (DIR)
2149          <SETG P-WALK-DIR .DIR>
2150          <PERFORM ,V?WALK .DIR>>
2151
2152 <ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TX)
2153          <COND (<SET TX <GETPT .OBJ2 ,P?GLOBAL>>
2154                 <ZMEMQB .OBJ1 .TX <- <PTSIZE .TX> 1>>)>> 
2155
2156 <ROUTINE FIND-IN (WHERE WHAT "AUX" W)
2157          <SET W <FIRST? .WHERE>>
2158          <COND (<NOT .W>
2159                 <RFALSE>)>
2160          <REPEAT ()
2161                  <COND (<AND <FSET? .W .WHAT>
2162                              <NOT <EQUAL? .W ,ADVENTURER>>>
2163                         <RETURN .W>)
2164                        (<NOT <SET W <NEXT? .W>>>
2165                         <RETURN <>>)>>>
2166
2167 <ROUTINE HELD? (CAN)
2168          <REPEAT ()
2169                  <SET CAN <LOC .CAN>>
2170                  <COND (<NOT .CAN> <RFALSE>)
2171                        (<EQUAL? .CAN ,WINNER> <RTRUE>)>>>
2172
2173 <ROUTINE OTHER-SIDE (DOBJ "AUX" (P 0) TX) ;"finds room beyond given door"
2174          <REPEAT ()
2175                  <COND (<L? <SET P <NEXTP ,HERE .P>> ,LOW-DIRECTION>
2176                         <RETURN <>>)
2177                        (ELSE
2178                         <SET TX <GETPT ,HERE .P>>
2179                         <COND (<AND <EQUAL? <PTSIZE .TX> ,DEXIT>
2180                                     <EQUAL? <GETB .TX ,DEXITOBJ> .DOBJ>>
2181                                <RETURN .P>)>)>>>
2182
2183 <ROUTINE MUNG-ROOM (RM STR)
2184          %<COND (<==? ,ZORK-NUMBER 2>
2185                  '<COND (<EQUAL? .RM ,INSIDE-BARROW>
2186                          <RFALSE>)>)
2187                 (ELSE T)>
2188          <FSET .RM ,RMUNGBIT>
2189          <PUTP .RM ,P?LDESC .STR>>
2190
2191 <ROUTINE THIS-IS-IT (OBJ)
2192          <SETG P-IT-OBJECT .OBJ>>
2193
2194 <COND (<N==? ,ZORK-NUMBER 3>
2195        <GLOBAL SWIMYUKS
2196                <LTABLE 0 "You can't swim in the dungeon.">>)>
2197
2198 <GLOBAL HELLOS
2199         <LTABLE 0 "Hello."
2200                "Good day."
2201                "Nice weather we've been having lately."
2202                "Goodbye.">>
2203
2204 <GLOBAL YUKS
2205         <LTABLE
2206          0
2207          "A valiant attempt."
2208          "You can't be serious."
2209          ;"Not bloody likely."
2210          "An interesting idea..."
2211          "What a concept!">>
2212
2213 <GLOBAL DUMMY
2214         <LTABLE 0 
2215                 "Look around."
2216                 "Too late for that."
2217                 "Have your eyes checked.">>