"VERBS for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
Yes, I added that comment. This is not the original verbs.zil file.
It’s very close, though. Only a few changes were made between r27 and r28, and I’m pretty confident that I reverted them correctly.
"SUBTITLE DESCRIBE THE UNIVERSE"
"SUBTITLE SETTINGS FOR VARIOUS LEVELS OF DESCRIPTION"
<GLOBAL VERBOSE <>>
<GLOBAL SUPER-BRIEF <>>
<ROUTINE V-VERBOSE ()
<TELL "OK, you will get verbose descriptions." CR>>
<ROUTINE V-BRIEF ()
<TELL "OK, you will get brief descriptions." CR>>
<ROUTINE V-SUPER-BRIEF ()
<TELL
"OK, you will get super-brief descriptions. Remember that objects
and people are not mentioned; only the name of the place you are in." CR>>
\
"SUBTITLE DESCRIBERS"
<ROUTINE V-LOOK ()
<ROUTINE V-FIRST-LOOK ()
<ROUTINE ROOM-CHECK ()
<RFALSE>)
(T
<TELL "You aren't in that room!" CR>
<RTRUE>)>)
(T <RFALSE>)>>
<ROUTINE PRE-SEARCH ()
(T <RFALSE>)>>
<ROUTINE PRE-EXAMINE ()
<TELL
"You never got to finish looking over the " D ,PRSO "." CR>)>>
<ROUTINE V-EXAMINE ()
<RTRUE>)
(ELSE
<TELL "There's nothing special about the" PRSO "." CR>)>>
Whether the current location has light. Deadline has no dark areas so this is always true.
<GLOBAL LIT <>>
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (LOOK? <>) "AUX" V? STR)
<SET V? T>)>
<TELL "(You are ">
<TELL "sitting o">)
(T <TELL "standing i">)>
<TELL "n the " D <LOC ,WINNER> ".)" CR>)>
<RTRUE>)
<TELL .STR CR>)
T>
<ROUTINE DESCRIBE-OBJECTS ("OPTIONAL" (V? <>))
(ELSE
<TELL "You can't see anything in the dark." CR>)>>
"DESCRIBE-OBJECT -- takes object and flag. if flag is true will print a
long description (fdesc or ldesc), otherwise will print short."
<ROUTINE DESCRIBE-OBJECT (OBJ V? LEVEL "AUX" (STR <>) AV)
<COND (<AND <0? .LEVEL>
<RTRUE>)
(<AND <0? .LEVEL>
<TELL .STR>)
(<0? .LEVEL>
<TELL "There is a " D .OBJ " here.">)
(ELSE
<TELL "A " D .OBJ>)>
<COND (<AND <0? .LEVEL>
<TELL " (outside the " D .AV ")">)>
<CRLF>
<ROUTINE PRINT-CONT (OBJ "OPTIONAL" (V? <>) (LEVEL 0)
"AUX" Y 1ST? AV STR (PV? <>) (INV? <>))
#DECL ((OBJ) OBJECT (LEVEL) FIX)
<COND (<NOT <SET Y <FIRST? .OBJ>>> <RTRUE>)>
T)
(ELSE <SET AV <>>)>
<SET 1ST? T>
<COND (<EQUAL? ,WINNER .OBJ <LOC .OBJ>>
<SET INV? T>)
(ELSE
<REPEAT ()
<COND (<NOT .Y> <RETURN <NOT .1ST?>>)
(<==? .Y .AV> <SET PV? T>)
<SET 1ST? <>>
<SET LEVEL 0>
<TELL .STR CR>)>
<FIRST? .Y>>
<PRINT-CONT .Y .V? 0>)>)>
<SET Y <NEXT? .Y>>>)>
<SET Y <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .Y>
<COND (<AND .PV? .AV <FIRST? .AV>>
<PRINT-CONT .AV .V? .LEVEL>)>
<RETURN <NOT .1ST?>>)
<OR .INV?
<COND (.1ST?
<COND (<L? .LEVEL 0>
<SET LEVEL 0>)>)>
<SET LEVEL <+ 1 .LEVEL>>
<SET 1ST? <>>)>
<PRINT-CONT .Y .V? .LEVEL>)>)>
<SET Y <NEXT? .Y>>>>
<ROUTINE FIRSTER (OBJ LEVEL)
<TELL "You are carrying:" CR>)
<COND (<G? .LEVEL 0>
<TELL "Sitting on the " D .OBJ
" is:" CR>)
<TELL D .OBJ " is holding:" CR>)
(ELSE
<TELL "The " D .OBJ
" contains:" CR>)>)>>
\
"SUBTITLE SCORING"
<ROUTINE V-SCORE ("OPTIONAL" (ASK? T))
#DECL ((ASK?) <OR ATOM FALSE>)
<TELL
"You are an amateur inspector, at best." CR>>
<ROUTINE V-QUIT ("OPTIONAL" (ASK? T) "AUX" SCOR)
#DECL ((ASK?) <OR ATOM <PRIMTYPE LIST>> (SCOR) FIX)
<COND (<OR <AND .ASK?
<TELL
"Do you wish to stop your investigation (Y/N)">
<NOT .ASK?>>
<QUIT>)
(ELSE <TELL "Ok." CR>)>>
<ROUTINE YES? ()
<PRINTI " >">
<RFALSE>)
(<EQUAL? <GET ,P-LEXV 1> ,W?YES ,W?Y>
<RTRUE>)
(T
<RFALSE>)>>
Print the title, release, and serial number.
In 1982, Infocom briefly branded its games as “INTERLOGIC”. They had mostly switched to “interactive fiction” by 1984.
<ROUTINE V-VERSION ("AUX" (CNT 17))
<TELL
"DEADLINE: An INTERLOGIC Mystery|
Copyright 1982 by Infocom, Inc. All rights reserved.|
DEADLINE and INTERLOGIC are trademarks of Infocom, Inc.|
Release ">
<PRINTN <BAND <GET 0 1> *3777*>>
<TELL " / Serial number ">
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> 23>
<RETURN>)
(T
<PRINTC <GETB 0 .CNT>>)>>
<CRLF>>
<ROUTINE V-AGAIN ("AUX" OBJ)
<SET OBJ
<COND (.OBJ
<TELL "You can't see the " D .OBJ " any more." CR>
<RFATAL>)
(T
\
"SUBTITLE DEATH AND TRANSFIGURATION"
It is possible to die in Deadline, but this variable is never used.
<GLOBAL DEAD <>>
<ROUTINE V-RESTORE ()
<COND (<RESTORE>
<TELL "Ok." CR>
(T
<TELL "Failed." CR>)>>
<ROUTINE V-SAVE ()
<COND (<SAVE>
<TELL "Ok." CR>)
(T
<TELL "Failed." CR>)>>
<ROUTINE V-RESTART ()
<TELL
"Do you wish to restart your investigation (Y/N)">
This wry comment does not appear to have ever been used in a released version of the game.
<RESTART>
<TELL "Failed." CR>)>>
<CONSTANT REXIT 0>
<CONSTANT UEXIT 1>
<CONSTANT NEXIT 2>
<CONSTANT FEXIT 3>
<CONSTANT CEXIT 4>
<CONSTANT DEXIT 5>
<CONSTANT NEXITSTR 0>
<CONSTANT FEXITFCN 0>
<CONSTANT CEXITFLAG 1>
<CONSTANT CEXITSTR 1>
<CONSTANT DEXITOBJ 1>
<CONSTANT DEXITSTR 1>
<ROUTINE V-WALK-AROUND ()
<TELL "Use directions for movement here." CR>>
<ROUTINE GO-NEXT (TBL "AUX" VAL)
#DECL ((TBL) TABLE (VAL) ANY)
<ROUTINE LKP (ITM TBL "AUX" (CNT 0) (LEN <GET .TBL 0>))
#DECL ((ITM) ANY (TBL) TABLE (CNT LEN) FIX)
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RFALSE>)
(<==? <GET .TBL .CNT> .ITM>
<COND (<==? .CNT .LEN> <RFALSE>)
(T
<RETURN <GET .TBL <+ .CNT 1>>>)>)>>>
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
#DECL ((PT) <OR FALSE TABLE> (PTS) FIX (STR) <OR STRING FALSE>
(OBJ) OBJECT (RM) <OR FALSE OBJECT>)
<RTRUE>)
(<NOT ,PRSO> <TELL "You can't go that way." CR>)
<COND (<==? <SET PTS <PTSIZE .PT>> ,UEXIT>
<SET RM <GETB .PT ,REXIT>>
<EQUAL? ,P-ADVERB ,W?QUIETLY ,W?SLOWLY>>
<TELL
"The stairs are still quite noisy even when walking up very slowly." CR>)>
<RFATAL>)
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
(T
<RFATAL>)>)
<TELL .STR CR>
<RFATAL>)
(T
<TELL "You can't go that way." CR>
<RFATAL>)>)
<TELL "You can't go that way." CR>)
<TELL .STR CR>
<RFATAL>)
(T
<TELL "The " D .OBJ " is closed." CR>
<RFATAL>)>)>)
<TELL "In which direction do you want to go?" CR>
<RFATAL>)
(T
<TELL "You can't go that way." CR>
<RFATAL>)>>
<ROUTINE V-INVENTORY ()
(T <TELL "You are empty-handed." CR>)>>
<GLOBAL INDENTS
<TABLE ""
" "
" "
" "
" "
" ">>
\
<ROUTINE PRE-TAKE ()
(<IN? ,PRSO ,WINNER> <TELL "You already have it." CR>)
<TELL "You can't reach that." CR>
<RTRUE>)
<TELL "It's not in that!" CR>)
(T
<RFALSE>)>)
(<==? ,PRSO <LOC ,WINNER>> <TELL "You are in it, loser!" CR>)>>
<ROUTINE V-TAKE ()
<TELL "Taken." CR>)>>
<GLOBAL FUMBLE-NUMBER 7>
<GLOBAL FUMBLE-PROB 8>
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" CNT OBJ)
#DECL ((VB) <OR ATOM FALSE> (CNT) FIX (OBJ) OBJECT)
<COND (.VB
<RFALSE>)
<COND (.VB
<TELL "Your load is too heavy">
<TELL ", especially in light of your condition.">)
(ELSE <TELL ".">)>
<CRLF>)>
<RFATAL>)
<SET OBJ <NEXT? .OBJ>>
<TELL "Oh, no. The " D .OBJ
" slips from your arms while you are taking the "
and both tumble to the ground." CR>
<RFATAL>)
(T
<RTRUE>)>>
<ROUTINE PRE-PUT ()
<TELL "Nice try." CR>)>>
<ROUTINE V-PUT ()
(T
<TELL "You can't do that." CR>
<RTRUE>)>
<TELL "The" PRSI " isn't open." CR>)
<TELL "How can you do that?" CR>)
<TELL "The " D ,PRSO " is already in the " D ,PRSI "." CR>)
<TELL "There's no room." CR>)
<RTRUE>)
(T
<TELL "Done." CR>)>>
<ROUTINE HELD? (OBJ)
<REPEAT ()
(T <SET OBJ <LOC .OBJ>>)>>>
<ROUTINE PRE-DROP ()
<RTRUE>)>>
<ROUTINE PRE-GIVE ()
<TELL
"That's easy for you to say, since you don't even have it." CR>)>>
<ROUTINE PRE-SGIVE ()
<RTRUE>>
<ROUTINE V-GIVE ()
<TELL "You can't give a " D ,PRSO " to a " D ,PRSI "!" CR>)
(T <TELL D ,PRSI " refuses your offer." CR>)>>
<ROUTINE V-SGIVE ()
<TELL "FOOOO!!" CR>>
<ROUTINE V-DROP ()
<TELL "The " D ,PRSO " is now on the ">
<TELL "ground">)
(T <TELL "floor">)>
<TELL "." CR>)>>
<ROUTINE V-THROW () <COND (<IDROP> <TELL "Thrown." CR>)>>
<ROUTINE V-THROW-THROUGH ()
<TELL "Let's not resort to violence, please." CR>)
<ROUTINE V-THROW-AT ()
<COND (<NOT <IDROP>> <RTRUE>)
", puzzled by your unorthodox methods, ducks as the "
D ,PRSO " flies by." CR>)
(T <TELL "Perhaps you aren't feeling well?" CR>)>>
<ROUTINE IDROP
()
<TELL "It's not likely that " D ,PRSO " would enjoy that." CR>
<RFALSE>)
<TELL "You're not carrying the" PRSO "." CR>
<RFALSE>)
<TELL "The " D ,PRSO " is closed." CR>
<RFALSE>)
\
<ROUTINE V-OPEN ("AUX" F STR)
<TELL "You must be very clever to do that to the" PRSO "." CR>)
<COND (<FSET? ,PRSO ,OPENBIT> <TELL "It is already open." CR>)
(T
<TELL "The " D ,PRSO " is now open." CR>)
<TELL "Opened." CR>)
(<AND <SET F <FIRST? ,PRSO>>
<NOT <NEXT? .F>>
<TELL "The " D ,PRSO " opens." CR>
<TELL .STR CR>)
(T
<TELL "Opening the " D ,PRSO " reveals ">
<TELL "." CR>)>)>)
(T <TELL "The" PRSO " cannot be opened." CR>)>>
<ROUTINE PRINT-CONTENTS (OBJ "AUX" F N (1ST? T))
#DECL ((OBJ) OBJECT (F N) <OR FALSE OBJECT>)
<COND (<SET F <FIRST? .OBJ>>
<REPEAT ()
<SET N <NEXT? .F>>
<COND (.1ST? <SET 1ST? <>>)
(ELSE
<TELL ", ">
<COND (<NOT .N> <TELL "and ">)>)>
<TELL "a " D .F>
<SET F .N>
<COND (<NOT .F> <RETURN>)>>)>>
<ROUTINE V-CLOSE ()
<TELL "You must be very clever to do that to the" PRSO "." CR>)
<TELL "The " D ,PRSO " is now closed." CR>
(T <TELL "It is already closed." CR>)>)
<TELL "Closed." CR>)
(T <TELL "It is already closed." CR>)>)
(ELSE
<TELL "You cannot close that." CR>)>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<SET CNT <+ .CNT 1>>
<COND (<NOT <SET X <NEXT? .X>>>
<RETURN>)>>)>
.CNT>
"WEIGHT: Get sum of SIZEs of supplied object, recursing to the nth level."
<ROUTINE WEIGHT
(OBJ "AUX" CONT (WT 0))
#DECL ((OBJ) OBJECT (CONT) <OR FALSE OBJECT> (WT) FIX)
<COND (<SET CONT <FIRST? .OBJ>>
<REPEAT ()
<SET WT <+ .WT <WEIGHT .CONT>>>
<COND (<NOT <SET CONT <NEXT? .CONT>>> <RETURN>)>>)>
<ROUTINE V-BUG ()
<TELL
"If there is a problem here, it is unintentional. You may report
your problem to the address provided in your documentation." CR>>
<GLOBAL COPR-NOTICE
" a transcript of interaction with DEADLINE.|
DEADLINE is a trademark of Infocom, Inc.|
Copyright (c) 1982 Infocom, Inc. All rights reserved.|
">
<ROUTINE V-SCRIPT ()
<PUT 0 8 <BOR <GET 0 8> 1>>
<ROUTINE V-UNSCRIPT ()
<PUT 0 8 <BAND <GET 0 8> -2>>
<RTRUE>>
<ROUTINE PRE-MOVE ()
<TELL "Juggling isn't one of your talents." CR>)>>
<ROUTINE V-MOVE ()
<TELL "Moving the" PRSO " reveals nothing." CR>)
(T <TELL "You can't move the" PRSO "." CR>)>>
<ROUTINE V-LAMP-ON ()
<TELL
"Ahem! You may or may not realize this, but you are on a case. You
shouldn't be wasting your time attempting to flirt with the suspects.
In any event, it's unlikely that you are person enough to do it." CR>)
(T <TELL "You can't turn that on." CR>)>>
<ROUTINE V-LAMP-OFF ()
<TELL "Your uncouth manner is certain to turn anyone off." CR>)
(T <TELL "You can't turn that off." CR>)>>
<GLOBAL WHO-WAIT 0>
<ROUTINE V-WAIT ("OPTIONAL" (NUM 3) (WHO <>) (INT <>) "AUX" VAL)
#DECL ((NUM) FIX)
<COND (<NOT .INT> <TELL "Time passes..." CR>)>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0> <RETURN>)
<COND (<==? .VAL ,M-FATAL> <RETURN>)
<RETURN>)
(<AND .WHO <IN? .WHO ,HERE>>
<TELL D .WHO
", for whom you are waiting, has arrived." CR>
<RETURN>)
(T
<COND (<NOT <==? <BAND <GETB 0 1> 16> 0>>
<TELL "(">
<TELL ") ">)>
<COND (.INT
<TELL
"Do you want to continue what you were doing? (Y/N)">)
(T
<TELL
"Do you want to keep waiting? (Y/N)">)>
<COND (<NOT <YES?>> <RETURN>)
(T <USL>)>)>)
<RETURN>)
(<AND .WHO <IN? .WHO ,HERE>>
<TELL D .WHO
", for whom you are waiting, has arrived." CR>
<RETURN>)
<TELL D .WHO
" still hasn't arrived. Do you want to keep waiting? (Y/N) ">
<COND (<NOT <YES?>> <RETURN>)>
<USL>)
(T <USL>)>>
<RTRUE>>
Run the game time forward by N minutes. Returns true if the full time elapsed, or false if the player chose to stop waiting (because of some observed action).
This is used by a couple of actions that take more than one minute: EXAMINE CAREFULLY, EXAMINE ROOM. If you don’t wait the full interval, the EXAMINE action fails.
<ROUTINE INT-WAIT (N "AUX" TIM REQ)
<V-WAIT <SET REQ <RANDOM <* .N 2>>> <> T>
<RTRUE>)
(T <RFALSE>)>>
<ROUTINE V-WAIT-FOR ("AUX" WHO)
<TELL "That's too long to wait." CR>)
(T
<TELL
"You would wait quite a while, since Sergeant Duffy is always
nearby, but never approaches you unless requested." CR>)>)
<TELL "That person is already here!" CR>)
(T <TELL "Not a good idea. You might wait all day." CR>)>>
<ROUTINE V-WAIT-UNTIL ()
(T <TELL
"You are clearly ahead of your time." CR>)>)
(T <TELL "Your sanity is coming into question." CR>)>>
<ROUTINE V-STAND ()
<TELL "You are on your own feet again." CR>
(T
<TELL "You're already standing up!" CR>)>>
<ROUTINE V-DISEMBARK ()
<TELL "You're not in that!" CR>
<RFATAL>)
(T
<TELL "You are on your own feet again." CR>
>>
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" F WT)
#DECL ((RM) OBJECT)
<TELL "You are seated, if you remember." CR>)
(T
<REPEAT ()
<COND (<NOT .F> <RETURN>)
<SET F <NEXT? .F>>>
<ROUTINE PRE-POUR-ON ()
<TELL "You can't pour that on anything." CR>>
<ROUTINE V-POUR-ON
()
<TELL "The " D ,PRSI " is extinguished." CR>)
(T
<TELL "The water spills over the "
D
" and to the floor where it evaporates." CR>)>>
<ROUTINE V-SQUEEZE
()
<TELL "It's unclear how " D ,PRSO
" would take this, so you defer until after hours.">)
(ELSE <TELL "How singularly useless.">)>
<CRLF>>
<ROUTINE PRE-FILL ("AUX" TX)
<RFALSE>)
(T
<TELL "There's nothing to fill it with." CR>
<RTRUE>)>)>
<RTRUE>)>>
<ROUTINE V-FILL ()
(T
<TELL "There's nothing to fill it with." CR>)>)
(T <TELL "You can't do that." CR>)>>
<ROUTINE V-BRUSH ()
<TELL
"Cleanliness is next to Godliness, although in this case it seems to be
next to Uselessness." CR>>
<ROUTINE V-RING () <TELL "How, exactly, does one ring that?" CR>>
<ROUTINE V-DRINK ()
<ROUTINE V-EAT ("AUX" (EAT? <>) (DRINK? <>) (NOBJ <>))
#DECL ((NOBJ) <OR OBJECT FALSE> (EAT? DRINK?) <OR ATOM FALSE>)
<COND (<VERB? DRINK> <TELL "How does one drink that?" CR>)
(ELSE
<TELL "Mmm. That really hit the spot." CR>
<CRLF>)
<AND <SET NOBJ <LOC ,PRSO>>
<TELL
"Mmm. That really hit the spot." CR>
(T <TELL "You can't get to it." CR>)>)
(<NOT <OR .EAT? .DRINK?>>
<TELL "The"
" wouldn't agree with you." CR>)>>
<ROUTINE V-CURSES ()
<TELL "Insults of this nature won't help you." CR>)
(T
<TELL "What a loony!" CR>)>)
(T
<ROUTINE V-LISTEN ()
<TELL "The ">)>
<TELL D ,PRSO " makes no sound." CR>>
<ROUTINE V-FOLLOW ("AUX" CN CHR COR PCOR L)
<SET L <LOC .CHR>>
<TELL
"It's not clear whom you are talking to." CR>)
<TELL
"How tragic to see a formerly great detective stalking a " D ,PRSO "." CR>)
<TELL
"You're in the same place as " D .CHR "!" CR>)
(<NOT .L>
<TELL D .CHR " has left the grounds." CR>)
<NOT <==? <BAND .COR .PCOR> 0>>>
(T <TELL "You seem to have lost track of " D .CHR "." CR>)>>
<GLOBAL OFFENDED
<LTABLE "You ought to be ashamed of yourself."
"One must try to avoid locker-room talk while working.">>
<ROUTINE V-LEAP ("AUX" TX S)
<TELL "The "
D
" is too big to jump over." CR>)
(T <TELL "That would be a good trick." CR>)>)
<SET S <PTSIZE .TX>>
<COND (<OR <==? .S 2>
<AND <==? .S 4>
<NOT <VALUE <GETB .TX 1>>>>>
<TELL
"For a brief moment, you feel the exhilaration of free fall. A thought
hits you: the ground is moving toward me. It is your last thought." CR>
<QUIT>)
<ROUTINE V-SKIP () <TELL "Wheeeeeeeeee!!!!!" CR>>
<ROUTINE V-GOODBYE () <V-HELLO <>>>
<ROUTINE V-HELLO ("OPTIONAL" (HELL T))
<TELL D
" returns the salutation." CR>)
(ELSE
<TELL
"Only schizophrenics say \"">
<COND (.HELL "Hello") (T "Goodbye")>
<TELL "\" to a "
D
"." CR>)>)
(ELSE <TELL "Good day." CR>)>>
<ROUTINE NOT-HERE (OBJ)
<TELL "You can't see ">
<TELL D .OBJ>)
(T <TELL "that">)>
<TELL " here." CR>>
<ROUTINE PRE-READ ()
<COND (<NOT ,LIT> <TELL "It is impossible to read in the dark." CR>)
<TELL "You examine one of the handful of pills:" CR>
<RFALSE>)
<TELL "How does one look through the" PRSI "?" CR>)
<TELL "You never got to finish reading the " D ,PRSO "." CR>)>>
<ROUTINE V-READ ()
<TELL "You cannot read the" PRSO "?" CR>)
<ROUTINE V-LOOK-UNDER ()
<TELL
"You twist your head to look under the" PRSO " but find nothing." CR>)
<TELL "Nope. Nothing hiding under " D ,PRSO "." CR>)
<TELL "There is nothing but dust there." CR>)
(T
<TELL "That's not so useful." CR>)>>
<ROUTINE V-LOOK-BEHIND ()
<TELL "There is nothing behind ">
<TELL "." CR>>
<ROUTINE V-LOOK-INSIDE
()
<TELL "The "
D
" is open, but you can't tell what's beyond it.">)
(ELSE <TELL "The " D ,PRSO " is closed.">)>
<CRLF>)
<RTRUE>)
<TELL "There is nothing on the" PRSO "." CR>)
(T
<TELL "The " D ,PRSO " is empty." CR>)>)
(ELSE <TELL "The " D ,PRSO " is closed." CR>)>)
(ELSE <TELL "One can't look inside the" PRSO "." CR>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<ROUTINE PRE-BURN ()
<COND (<FLAMING? ,PRSI> <RFALSE>)
(T <TELL "With the" PRSI "??!?" CR>)>>
<ROUTINE V-BURN
()
<TELL "You can't burn the " D ,PRSO "." CR>
>
<ROUTINE PRE-TURN ()
<TELL "Specify a direction if you want to move around." CR>)
<TELL "You can't turn that!" CR>)>>
<ROUTINE V-TURN () <TELL "This has no effect." CR>>
<ROUTINE V-PUMP ()
<TELL "It's not awfully clear how." CR>>
<ROUTINE V-LOCK () <TELL "It doesn't seem to work." CR>>
<ROUTINE V-PICK () <TELL "You can't pick that." CR>>
<ROUTINE V-UNLOCK () <TELL "It doesn't seem to work." CR>>
<ROUTINE V-CUT ()
<TELL "Your skillful "
D
"smanship slices the "
D
" into innumerable
slivers that evaporate instantaneously."
CR>)
<TELL
"You find that the \"cutting edge\" of the" PRSI " is inadequate." CR>)
(T
<TELL "That's a strange concept, cutting the" PRSO "." CR>)>>
<ROUTINE V-KILL ()
<ROUTINE IKILL (STR)
#DECL ((STR) STRING)
<COND (<NOT ,PRSO> <TELL "There is nothing here to " .STR "." CR>)
<TELL "No doubt you need a refresher course at the academy "
"in the martial arts, but the "
D
" is hardly a likely target." CR>)
<TELL
"A shot rings out and " D ,PRSO " falls to the ground, dead. Good shot." CR>
(<PROB 50>
<TELL "You rethink your planned action." CR>)
(T
<TELL
"With a lethal blow of your hand, " D ,PRSO " falls dead." CR>
<ROUTINE V-ATTACK () <IKILL "attack">>
<ROUTINE V-SWING ()
<TELL "Whoosh!" CR>)
<ROUTINE V-KICK ()
<TELL "This sort of shabby behavior is disgusting." CR>)
<ROUTINE V-WAVE () <HACK-HACK "Waving the ">>
<ROUTINE V-RAISE () <HACK-HACK "Playing in this way with the ">>
<ROUTINE V-LOWER () <HACK-HACK "Playing in this way with the ">>
<ROUTINE V-RUB () <HACK-HACK "Fiddling with the ">>
<ROUTINE V-PUSH () <HACK-HACK "Pushing the ">>
<ROUTINE V-MUNG ()
<ROUTINE HACK-HACK
(STR)
#DECL ((STR) STRING)
<GLOBAL HO-HUM
<LTABLE
" isn't particularly useful."
" has no effect.">>
<ROUTINE WORD-TYPE
(OBJ WORD "AUX" SYNS)
#DECL ((OBJ) OBJECT (WORD SYNS) TABLE)
<- </ <PTSIZE .SYNS> 2> 1>>>
<ROUTINE V-KNOCK
()
<TELL "It appears that nobody's home." CR>)
(ELSE <TELL "Why knock on a " D ,PRSO "?" CR>)>>
\
<ROUTINE V-SHAKE ("AUX" X)
<TELL "You can't take it; thus, you can't shake it!" CR>)
<TELL "It sounds as though there is something inside the "
D
"."
CR>)
<REPEAT ()
<COND (<SET X <FIRST? ,PRSO>>
(ELSE <RETURN>)>>
<TELL "Everything in it spills onto the floor." CR>)
(T <TELL "Well, what did you expect to happen?" CR>)>>
<ROUTINE PRE-DIG
()
<TELL "Digging with the" PRSI " is slow and tedious." CR>)
(ELSE
<TELL "Digging with a " D ,PRSI " is silly." CR>)>>
<ROUTINE V-SEARCH-OBJECT-FOR ()
" resignedly allows you to perform the search." CR>
<TELL "Indeed, " D ,PRSO " has the " D ,PRSI "." CR>)
(T <TELL D ,PRSO " doesn't have that." CR>)>)
<TELL "How observant you are! There it is!" CR>)
(T <TELL "You don't find the" PRSI " there." CR>)>>
<ROUTINE V-DIG () <TELL "What a silly idea!" CR>>
<ROUTINE V-SMELL () <TELL "It smells just like a" PRSO "." CR>>
<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TX)
<ZMEMQB .OBJ1 .TX <- <PTSIZE .TX> 1>>)>>
<ROUTINE V-SWIM ()
<TELL "Swimming isn't possible ">
<TELL "in the " D ,PRSO>)
<TELL "on the grounds">)
(T <TELL "right on the floor, Sherlock">)>
<TELL "." CR>>
<ROUTINE PRE-UNTIE ()
<TELL "This cannot be tied, so it cannot be untied!" CR>>
<ROUTINE V-UNTIE () <TELL "Foo!" CR>>
<ROUTINE PRE-TIE
()
<TELL "You can't tie it to yourself." CR>)>>
<ROUTINE V-TIE () <TELL "You can't tie the" PRSO " to that." CR>>
<ROUTINE V-TIE-UP () <TELL "You could certainly never tie it with that!" CR>>
<ROUTINE V-MUMBLE
()
<TELL "It has been a long day, hasn't it?" CR>>
<ROUTINE V-ALARM ()
<TELL "He's wide awake, or haven't you noticed?" CR>)
(ELSE
<TELL "The" PRSO " doesn't sleep." CR>)>>
The ZORK command was removed from the grammar early on; no known release recognizes it. This vestige remains.
<ROUTINE V-ZORK ()
<TELL
"A series of fantasy simulation games and a trademark of Infocom,
Inc." CR>>
\
<ROUTINE V-CLIMB-ON ()
<TELL "You are now seated on the " D ,PRSO "." CR>)
<TELL "This isn't the kind of thing to sit on!" CR>)
(T
<TELL "You can't climb onto the " D ,PRSO "." CR>)>>
<ROUTINE V-CLIMB-UP ("OPTIONAL" (DIR ,P?UP) (OBJ <>) "AUX" X)
#DECL ((DIR) FIX (OBJ) <OR ATOM FALSE> (X) TABLE)
<COND (<GETPT ,HERE .DIR>
<RTRUE>)
(<NOT .OBJ>
<TELL "You can't go that way." CR>)
(<AND .OBJ
<- </ <PTSIZE .X> 2> 1>>>
<TELL "Climbing the walls is to no avail." CR>)
(ELSE <TELL "Bizarre!" CR>)>>
<ROUTINE V-CLIMB-DOWN ()
<RTRUE>)
<ROUTINE V-SEND ()
<TELL "Why would you send for the" PRSO "?" CR>)
(ELSE <TELL "Sigh." CR>)>>
#DECL ((CNT) FIX)
<TELL "There ">
<COND (<1? .CNT> <TELL "is ">)
(T <TELL "are ">)>
<PRINTN .CNT>
<TELL " of them." CR>)
<TELL "There are two in a pair, or have you forgotten?" CR>)
(T
<TELL "Unless you are drunk, one." CR>)>>
<ROUTINE V-PUT-UNDER ()
<TELL "There's not enough room." CR>>
<ROUTINE V-ENTER ()
<ROUTINE V-EXIT ()
<ROUTINE V-CROSS ()
<TELL "You can't cross that!" CR>>
<ROUTINE V-SEARCH ()
" grudgingly allows you to search. You find nothing
whatsoever of interest." CR>)
(T <TELL "You find nothing unusual." CR>)>>
<GLOBAL PRON-HIM "him">
<GLOBAL PRON-HE "he">
<GLOBAL PRON-HER "her">
<GLOBAL PRON-SHE "she">
<ROUTINE PRE-FIND ("AUX" PRON PRON1 CHR NUM)
<TELL "You're already here!" CR>)
<TELL "You should know - you've been there!" CR>)
(T <TELL "You're the detective!" CR>)>)
<TELL
"He's in the morgue, no doubt." CR>)
<RTRUE>)>
<TELL "Are you blind?" CR>)
(T
<TELL "\"Ahem...\"" CR>)>)
(<0? .NUM>
<TELL
"You haven't seen " .PRON " yet." CR>)
(T
<TELL
"\"I haven't seen " .PRON " today.\"" CR>)>)
(T
<TELL
"You last saw " .PRON " ">)
(T
<TELL
"\"I last saw " .PRON " ">)>
<COND (<G? .NUM 120>
<TELL "a few hours ago">)
(<G? .NUM 80>
<TELL "an hour or two ago">)
(<G? .NUM 45>
<TELL "about an hour ago">)
(<G? .NUM 20>
<TELL "about half an hour ago">)
(<G? .NUM 10>
<TELL "about 15 minutes ago">)
(<G? .NUM 5>
<TELL "less than 10 minutes ago">)
(T
<TELL "just a minute ago">)>
<TELL ". I don't know where ">
<TELL .PRON1 " went, though.\"" CR>)
(T <TELL "." CR>)>)>
<RTRUE>)>>
<ROUTINE V-FIND ("AUX" (L <LOC ,PRSO>))
<TELL "You're around here somewhere..." CR>)
<TELL "\"I don't know.\"" CR>)
<TELL "You're the detective." CR>)
<TELL "You have it." CR>)
<TELL "It's right here." CR>)
<TELL D .L " has it." CR>)
<TELL "It's ">
(T <TELL "i">)>
<TELL "n the " D .L "." CR>)
(ELSE
<TELL "Who knows?" CR>)>>
<GLOBAL QCONTEXT <>>
<GLOBAL QCONTEXT-ROOM <>>
<ROUTINE V-TELL ()
<TELL
"Talking to yourself is said to be a sign of impending mental
collapse." CR>)
(T
<TELL
D ,PRSO " is listening." CR>)>
Why did they remove this RTRUE in r28? It appears to be an attempt to save space.
If you reach the end of a ZIL routine without an explicit return statement, it returns the last value expression. In this case that’s <SETG QCONTEXT-ROOM ,HERE>, which is an object number. Object numbers are always positive, so you can save a line of code and still effectively return true.
What the developer didn’t realize is that returning an arbitrary number takes two bytes of Z-code, whereas RTRUE only takes one! The “optimization” in r28 saves a line of code but wastes a byte in the game file.
<RTRUE>)
(T
<TELL "You can't talk to the" PRSO "!" CR>
<RFATAL>)>>
<ROUTINE V-ANSWER ()
<TELL "Nobody seems to be awaiting your answer." CR>
<RTRUE>>
<ROUTINE V-REPLY ()
<TELL "It is hardly likely that the " D ,PRSO " is interested." CR>
<RTRUE>>
<ROUTINE V-WHAT ()
<TELL "Surely you have read the interviews." CR>)
(T <TELL "Are you talking to yourself again?" CR>)>>
<ROUTINE V-KISS ()
<TELL
"Section 204D, Paragraph 7.6 of the Connecticut Police Code of
Conduct specifically prohibits kissing suspects." CR>)
(T <TELL "What a (ahem!) strange idea!" CR>)>>
<ROUTINE V-RAPE ()
<COND (<PROB 75>
<TELL
"Section 29A of the United States Criminal Code, whose provisions
come to your unhealthy mind, tut-tuts this sort of thing. A pity." CR>)
(T <TELL "What a (ahem!) strange idea!" CR>)>>
<ROUTINE V-DIAGNOSE ()
<TELL "You're OK for now." CR>>
<ROUTINE V-SAY ("AUX" V)
<TELL
"To talk to someone, try 'SAY TO someone \"something\"'." CR>>
<ROUTINE PRE-SSHOW ()
<RTRUE>>
<ROUTINE V-SSHOW () <RTRUE>>
<ROUTINE V-SHOW ()
<TELL "Do you often talk to yourself?" CR>)
<TELL "Do you expect applause from the" PRSO "?" CR>)
(T
<GLOBAL WHO-CARES
<LTABLE " doesn't appear interested"
" seems not to care"
" lets out a loud yawn"
" seems to be getting impatient">>
<ROUTINE V-TELL-ME ()
<ROUTINE V-CONFRONT ()
<TELL "You aren't talking to anyone!" CR>)
<TELL "That ought to put a scare into the" PRSO "." CR>)
(T
<ROUTINE V-SEND-FOR ("AUX" REAL)
<TELL "You can only send for a person." CR>)
(T
<TELL D .REAL " is already here." CR>)
(T <TELL "You can't send for people." CR>)>)>>
<ROUTINE V-ANALYZE ()
<RTRUE>)
<TELL "Duffy is already occupied with another errand." CR>)
<TELL
"Duffy appears in an instant. \"Well, I might be able to analyze the "
but you don't even have it with you!\" With that, he discreetly leaves." CR>)
(T
<TELL
"Sergeant Duffy appears with a puzzled look on his face. \"With all
respect, I don't think I can take THAT to the laboratory! I'll
be nearby if you need me.\" He leaves, shaking his head slowly." CR>)>>
<ROUTINE PRE-ACCUSE ()
<TELL "What an accusation!" CR>)
<TELL "What a detective! Quick, Sergeant! Arrest that "
<ROUTINE V-ACCUSE ()
<TELL D ,PRSO " shrugs off your suggestion." CR>>
<ROUTINE V-ARREST ()
<TELL
"You realize that you don't have enough evidence to convict " D ,PRSO>
<TELL " so
you resolve to continue the investigation." CR>)
<TELL "Oh, come on now! Not trusty " D ,PRSO "!" CR>)
(T
<TELL
"Sergeant Duffy enters, strokes his chin, and in a rather puzzled voice
says \"Excuse me, sir, but it would cause quite a stir at the station
to be charging a " D ,PRSO " with murder!\" He leaves quietly." CR>)>>
<ROUTINE V-ASK-ABOUT ()
<TELL
"Talking to yourself is said to be a sign of impending mental
collapse." CR>)
<TELL "Steven isn't in the area." CR>)
<TELL "Do you often talk to a " D ,PRSO "?" CR>)
(T
<TELL D ,PRSO " doesn't seem to know about that." CR>)>>
<ROUTINE V-ASK-FOR ()
<RTRUE>)>
<TELL " hands you the " D ,PRSI "." CR>
(T <TELL " doesn't have that." CR>)>)
(T <TELL "Be serious!" CR>)>>
<ROUTINE V-HOLD-UP ()
<TELL "That doesn't seem to help at all." CR>>
"Routines to do looking down corridors"
<ROUTINE CORRIDOR-LOOK ("OPTIONAL" (ITM <>) "AUX" C Z COR VAL (FOUND <>))
<REPEAT ()
<COND (<NOT <L? <SET Z <- .C 2048>> 0>>
(<NOT <L? <SET Z <- .C 1024>> 0>>
(<NOT <L? <SET Z <- .C 512>> 0>>
(<NOT <L? <SET Z <- .C 256>> 0>>
(<NOT <L? <SET Z <- .C 128>> 0>>
(<NOT <L? <SET Z <- .C 64>> 0>>
(<NOT <L? <SET Z <- .C 32>> 0>>
(<NOT <L? <SET Z <- .C 16>> 0>>
(<NOT <L? <SET Z <- .C 8>> 0>>
(<NOT <L? <SET Z <- .C 4>> 0>>
(<NOT <L? <SET Z <- .C 2>> 0>>
(<NOT <L? <SET Z <- .C 1>> 0>>
(T <RETURN>)>
<COND (<NOT .FOUND> <SET FOUND .VAL>)>
<SET C .Z>>
.FOUND)>>
<ROUTINE CORRIDOR-CHECK (COR ITM "AUX" (CNT 2) (PAST 0) (FOUND <>) RM OBJ)
#DECL ((COR) <PRIMTYPE VECTOR> (CNT PAST) FIX)
<REPEAT ()
<COND (<==? <SET RM <GET .COR .CNT>> 0>
<RFALSE>)
(<==? .RM ,HERE> <SET PAST 1>)
(<SET OBJ <FIRST? .RM>>
<REPEAT ()
<COND (.ITM
<COND (<==? .OBJ .ITM>
<SET FOUND <GET .COR .PAST>>
<RETURN>)>)
<TELL D .OBJ " is ">
<COND (<==? <GETP .RM ,P?LINE>
<TELL "off">)
(T <TELL "down the hall">)>
<TELL " to ">
<TELL "." CR>)>
<SET OBJ <NEXT? .OBJ>>
<COND (<NOT .OBJ> <RETURN>)>>
<COND (.FOUND <RETURN .FOUND>)>)>
<SET CNT <+ .CNT 1>>>>
<ROUTINE V-LEAN ()
<TELL "You can't do that!" CR>>
<GLOBAL FINGERPRINT-OBJ <>>
<ROUTINE V-FINGERPRINT ()
<TELL
"Upon looking over and dusting the" PRSO " you notice that there are no
good fingerprints to be found." CR>>
<ROUTINE V-FLUSH ()
<TELL "Whatever do you have in mind?" CR>>
<ROUTINE V-DIG-AROUND ()
<TELL "You can't do that." CR>>
<ROUTINE V-SEARCH-AROUND ()
<TELL "You don't find anything interesting." CR>>
<ROUTINE V-SEARCH-GROUND-AROUND ()
<TELL "You don't find anything interesting." CR>)
(T <TELL "Huh?" CR>)>>
<ROUTINE V-SEARCH-GROUND-UNDER ()
<ROUTINE V-TASTE ()
<TELL "That's ridiculous!" CR>>
<ROUTINE ROOM-PEEK ("AUX" OHERE)
<TELL
"You take a quick peek into the " D ,PRSO ":" CR>
Why did they remove this RTRUE in r28? It appears to be an attempt to save space.
If you reach the end of a ZIL routine without an explicit return statement, it returns the last value expression. In this case that’s <SETG HERE .OHERE>, which is an object number. Object numbers are always positive, so you can save a line of code and still effectively return true.
What the developer didn’t realize is that returning an arbitrary number takes two bytes of Z-code, whereas RTRUE only takes one! The “optimization” in r28 saves a line of code but wastes a byte in the game file.
<RTRUE>)>>
<ROUTINE SEE-INTO? (THERE "AUX" P L TX O)
<SET P 0>
<REPEAT ()
<COND (<0? <SET P <NEXTP ,HERE .P>>>
<TELL
"You can't seem to find that room." CR>
<RFALSE>)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET TX <GETPT ,HERE .P>>
<SET L <PTSIZE .TX>>
<COND (<AND <==? .L ,UEXIT>
<==? <GETB .TX ,REXIT> .THERE>>
<RTRUE>)
<==? <GETB .TX ,REXIT> .THERE>>
<RTRUE>)
(T
<TELL
"The door to that room is closed." CR>
<RFALSE>)>)
<==? <GETB .TX ,REXIT> .THERE>>
<RTRUE>)
(T
<TELL
"You can't seem to find that room." CR>
<RFALSE>)>)>)>>>
<ROUTINE V-WRITE ()
<TELL "You're nuts." CR>>
<ROUTINE V-THROUGH ("OPTIONAL" (OBJ <>) "AUX" M DIR PT PTS)
#DECL ((OBJ) <OR OBJECT FALSE> (M) <PRIMTYPE VECTOR>)
<TELL "Duuuhhh!" CR>)
<RTRUE>)
(T <TELL
"You can't go directly from here to there." CR>)>)
<TELL "You hit your head against the" PRSO
" as you attempt this feat." CR>)
(.OBJ <TELL "You can't do that!" CR>)
<TELL "That would involve quite a contortion!" CR>)
The current time, stored as minutes after midnight (H*60+M). The game starts at 8:00 am.
See also SCORE and MOVES, which track the current time in a different way.
<GLOBAL PRESENT-TIME 480>
<ROUTINE V-TIME ()
<TELL "It is now ">
<TELL "." CR>>
<ROUTINE TIME-PRINT (NUM "AUX" HR (PM <>))
#DECL ((NUM HR) FIX (PM) <OR FALSE ATOM>)
<COND (<G? <SET HR </ .NUM 60>> 12>
<SET HR <- .HR 12>>
<SET PM T>)
(<==? .HR 12> <SET PM T>)>
<PRINTN .HR>
<TELL ":">
<COND (<L? <SET HR <MOD .NUM 60>> 10>
<TELL "0">)>
<TELL N .HR " ">
<TELL <COND (.PM "pm") (T "am")>>>
<ROUTINE V-USE ()
<TELL "You should be more specific with what you want to do." CR>>
<ROUTINE V-PLAY ()
<TELL "You are adept only at playing the fool." CR>>
<ROUTINE V-TURN-UP ()
<TELL "That is silly." CR>>
<ROUTINE V-TURN-DOWN ()
<TELL "That is silly." CR>>
<ROUTINE V-HIDE-BEHIND ()
<TELL "There's no room to hide behind the" PRSO "." CR>>
<ROUTINE V-HIDE ()
<TELL "You might hide behind the shed." CR>)
<TELL "You might hide on the balcony." CR>)
(T <TELL "There's no good hiding place here." CR>)>>
<ROUTINE V-CALL-LOSE ()
<TELL "You must supply a verb!" CR>>
<ROUTINE V-CALL ("AUX" PER (MOT <>))
<TELL D .PER>
<COND (.MOT
<TELL " stops and turns toward you." CR>)
(T <TELL " is facing you." CR>)>)
(T
<TELL " takes no notice of your call." CR>)>)
(T <TELL "You don't see " D .PER " here." CR>)>)
<ROUTINE V-RUN-OVER ()
<TELL "That doesn't make much sense." CR>>
<ROUTINE PRE-RUB-OVER ()
<RTRUE>>
<ROUTINE V-RUB-OVER ()
<TELL "Do you really expect that to help?" CR>>
<GLOBAL P-SPACE 1>
<ROUTINE V-SPACE ()
<TELL "Spacing." CR>>
<ROUTINE V-UNSPACE ()
<TELL "No spacing." CR>>
<ROUTINE V-LOOK-ON ()
(T <TELL "There's no surface on the" PRSO "." CR>)>>
<ROUTINE V-LOOK-UP ()
<TELL "What a pervert!" CR>
<RTRUE>)
<TELL "Your sanity is in question." CR>
<RTRUE>)
<TELL "You can see a balcony directly above you." CR>)
<TELL "There's nothing up there." CR>)
<TELL "There is blue sky above you." CR>)
(T
<TELL
"You can see the ceiling. It's not the Sistine Chapel, but it's
nicely painted." CR>)>>
<ROUTINE V-LOOK-DOWN ()
<TELL "There's dirt there, mostly. And grass." CR>)
(T
<TELL "Nothing's interesting about the floor." CR>)>)
(T <TELL "Your sanity is in question." CR>)>>
<ROUTINE V-YN ()
<TELL D ,QCONTEXT " ignores you completely." CR>)
(T <TELL "Did you say something?" CR>)>>
<ROUTINE V-THANKS ()
<TELL D <OR ,PRSO ,QCONTEXT> " acknowledges your thanks." CR>)
(T <TELL "Whatever do you have to be thankful for?" CR>)>>
<ROUTINE V-PHONE ()
<TELL "Perhaps it's time for you to rest...." CR>)
<TELL D ,PRSO " is here!" CR>)
<TELL "There's no phone here." CR>)
(T <TELL "There's no sense in phoning " D ,PRSO "." CR>)>>
<ROUTINE V-$VERIFY ()
<TELL "Verifying game..." CR>
<COND (<VERIFY> <TELL "Game correct." CR>)
(T <TELL CR "** Game File Failure **" CR>)>>