Revision 27 (Original Source)

master
historicalsource 2019-04-13 20:28:54 -04:00
commit ad6dc28bb2
12 changed files with 9964 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# deadline

4532
actions.zil Normal file

File diff suppressed because it is too large Load Diff

82
clock.zil Normal file
View File

@ -0,0 +1,82 @@
"CLOCK for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
<CONSTANT C-TABLELEN 300>
<GLOBAL C-TABLE <ITABLE NONE 300>>
<GLOBAL C-DEMONS 300>
<GLOBAL C-INTS 300>
<CONSTANT C-INTLEN 6>
<CONSTANT C-ENABLED? 0>
<CONSTANT C-TICK 1>
<CONSTANT C-RTN 2>
<ROUTINE DEMON (RTN TICK "AUX" CINT)
#DECL ((RTN) ATOM (TICK) FIX (CINT) <PRIMTYPE VECTOR>)
<PUT <SET CINT <INT .RTN T>> ,C-TICK .TICK>
.CINT>
<ROUTINE QUEUE (RTN TICK "AUX" CINT)
#DECL ((RTN) ATOM (TICK) FIX (CINT) <PRIMTYPE VECTOR>)
<PUT <SET CINT <INT .RTN>> ,C-TICK .TICK>
.CINT>
<ROUTINE INT (RTN "OPTIONAL" (DEMON <>) E C INT)
#DECL ((RTN) ATOM (DEMON) <OR ATOM FALSE> (E C INT) <PRIMTYPE
VECTOR>)
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<==? .C .E>
<SETG C-INTS <- ,C-INTS ,C-INTLEN>>
<AND .DEMON <SETG C-DEMONS <- ,C-DEMONS ,C-INTLEN>>>
<SET INT <REST ,C-TABLE ,C-INTS>>
<PUT .INT ,C-RTN .RTN>
<RETURN .INT>)
(<==? <GET .C ,C-RTN> .RTN> <RETURN .C>)>
<SET C <REST .C ,C-INTLEN>>>>
<GLOBAL CLOCK-WAIT <>>
;"SCORE INDICATES HOURS / MOVES = MINUTES"
<GLOBAL SCORE 8>
<GLOBAL MOVES 0>
<ROUTINE CLOCKER ("AUX" C E TICK (FLG <>))
#DECL ((C E) <PRIMTYPE VECTOR> (TICK) FIX (FLG) <OR FALSE ATOM>)
<COND (,CLOCK-WAIT <SETG CLOCK-WAIT <>> <RFALSE>)>
<SETG PRESENT-TIME <+ ,PRESENT-TIME 1>>
<COND (<G? ,PRESENT-TIME 1199>
<TELL
"Chief Inspector Klutz walks up to you, seemingly from out of nowhere.
\"I'm sorry, Inspector, but your time is up here. I'm sorry that you
didn't have any more time to investigate the case. Maybe next time...\"
He escorts you to a waiting police car, in which you go off into the
sunset." CR>
<QUIT>)>
<COND (<G? <SETG MOVES <+ ,MOVES 1>> 59>
<SETG MOVES 0>
<COND (<G? <SETG SCORE <+ ,SCORE 1>> 23>
<SETG SCORE 0>)>)>
<SET C <REST ,C-TABLE <COND (,P-WON ,C-INTS) (T ,C-DEMONS)>>>
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<REPEAT ()
<COND (<==? .C .E> <RETURN .FLG>)
(<NOT <0? <GET .C ,C-ENABLED?>>>
<SET TICK <GET .C ,C-TICK>>
<COND (<0? .TICK>)
(T
<PUT .C ,C-TICK <- .TICK 1>>
<COND (<AND <NOT <G? .TICK 1>>
<APPLY <GET .C ,C-RTN>>>
<SET FLG T>)>)>)>
<SET C <REST .C ,C-INTLEN>>>>

16
crufty.zil Normal file
View File

@ -0,0 +1,16 @@
"(c) Copyright 1983 Infocom, Inc. All Rights Reserved."
<ROUTINE THIS-IT? (OBJ TBL "AUX" SYNS)
<COND (<FSET? .OBJ ,INVISIBLE> <RFALSE>)
(<AND ,P-NAM
<NOT <ZMEMQ ,P-NAM
<SET SYNS <GETPT .OBJ ,P?SYNONYM>>
<- </ <PTSIZE .SYNS> 2> 1>>>>
<RFALSE>)
(<AND ,P-ADJ
<OR <NOT <SET SYNS <GETPT .OBJ ,P?ADJECTIVE>>>
<NOT <ZMEMQB ,P-ADJ .SYNS <- <PTSIZE .SYNS> 1>>>>>
<RFALSE>)
(<AND <NOT <0? ,P-GWIMBIT>> <NOT <FSET? .OBJ ,P-GWIMBIT>>>
<RFALSE>)>
<RTRUE>>

53
deadline.zil Normal file
View File

@ -0,0 +1,53 @@
"COMPILE FILE for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
;<SNAME "INFOCOM.DEADLINE">
<COND (<GASSIGNED? PREDGEN>
<PRINC "Compiling">
<ID 0>)
(T <PRINC "Loading">)>
<PRINC " DEADLINE: An INTERLOGIC Mystery
">
<BLOAT 90000 0 0 3500 0 0 0 0 0 512>
<SET REDEFINE T>
<GLOBAL BIGFIX 10000>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<OR <GASSIGNED? INSERT-CRUFTY>
<DEFINE INSERT-CRUFTY (STR) <IFILE .STR T>>>
<DEFINE IFILE (STR "OPTIONAL" (FLOAD? <>) "AUX" (TIM <TIME>))
<INSERT-FILE .STR .FLOAD?>>
<IFILE "DUNGEON" T>
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>
<IFILE "SYNTAX" T>
<ENDLOAD>
<IFILE "MACROS" T>
<IFILE "CLOCK" T>
<IFILE "MAIN" T>
<IFILE "PARSER" T>
<INSERT-CRUFTY "CRUFTY">
<IFILE "VERBS" T>
<IFILE "ACTIONS" T>
<IFILE "GOAL" T>
<GC-MON T>
<GC 0 T 5>

BIN
deadline.zip Normal file

Binary file not shown.

2541
dungeon.zil Normal file

File diff suppressed because it is too large Load Diff

730
goal.zil Normal file
View File

@ -0,0 +1,730 @@
"GOAL for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
"This code is the local T system. There are four transit lines:
TOP-OF-THE-LINE, BOTTOM-LINE, FOOD-LINE, and OUTSIDE-LINE,
corresponding to upstairs, downstairs, kitchen area, and outside.
There are routes for each of these lines and transfer points. Much of
this is done for the general case, except transfers. Sigh."
<GLOBAL DIR-STRINGS
<TABLE P?NORTH "north" P?SOUTH "south"
P?EAST "east" P?WEST "west"
P?NW "northwest" P?NE "northeast"
P?SW "southwest" P?SE "southeast"
P?DOWN "downstairs" P?UP "upstairs"
P?IN "in" P?OUT "out">>
<GLOBAL TOP-OF-THE-LINE
<TABLE 0 LIBRARY-BALCONY P?SOUTH
P?NORTH LIBRARY P?SOUTH
P?NORTH CORRIDOR-4 P?EAST
P?WEST CORRIDOR-3 P?EAST
P?WEST CORRIDOR-2 P?EAST
P?WEST CORRIDOR-1 P?EAST
P?WEST STAIR-TOP P?SOUTH
P?NORTH SHALL-11 P?EAST
P?WEST SHALL-12 0 >>
<GLOBAL BOTTOM-LINE
<TABLE 0 FOYER P?NORTH
P?SOUTH NFOYER P?NORTH
P?WEST STAIR-BOTTOM P?SOUTH
P?NORTH SHALL-1 P?EAST
P?WEST SHALL-2 P?EAST
P?WEST SHALL-3 0>>
<GLOBAL OUTSIDE-LINE
<TABLE 0 FRONT-PATH P?EAST
P?WEST EAST-OF-DOOR P?NE
P?SOUTH EAST-SIDE P?EAST
P?WEST EAST-LAWN P?NW
P?SE ORCHARD P?NORTH
P?SE NORTH-LAWN P?SOUTH
P?NORTH ROSE-GARDEN P?WEST
P?NE WEST-LAWN P?EAST
P?WEST WEST-SIDE P?SOUTH
P?NW WEST-OF-DOOR P?SOUTH
P?NORTH SOUTH-LAWN 0>>
<GLOBAL FOOD-LINE
<TABLE 0 DINING-ROOM P?EAST
P?WEST CORNER P?NORTH
P?SOUTH KITCHEN P?EAST
P?WEST PANTRY 0>>
"Rapid Transit Line Identifiers"
<CONSTANT TOP-OF-THE-LINE-C 0>
<CONSTANT BOTTOM-LINE-C 1>
<CONSTANT OUTSIDE-LINE-C 2>
<CONSTANT FOOD-LINE-C 3>
<ROUTINE UNPRIORITIZE (PERSON "AUX" GT)
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<PUT .GT ,GOAL-PRIORITY <>>
<COND (<GET .GT ,GOAL-QUEUED>
<ESTABLISH-GOAL .PERSON <GET .GT ,GOAL-QUEUED>>
<PUT .GT ,GOAL-QUEUED <>>)>>
<ROUTINE ESTABLISH-GOAL (PERSON GOAL "OPTIONAL" (PRIORITY <>)
"AUX" (HERE <LOC .PERSON>) HL GL GT)
#DECL ((PERSON GOAL HERE) OBJECT (HL GL) FIX
(PRIORITY) <OR FALSE ATOM>)
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<COND (.PRIORITY
<PUT .GT ,GOAL-ENABLE T>
<PUT .GT ,GOAL-PRIORITY T>
<PUT .GT ,GOAL-QUEUED .HERE>)>
<COND (<==? <SET HL <GETP .HERE ,P?LINE>>
<SET GL <GETP .GOAL ,P?LINE>>>
<PUT .GT ,GOAL-I <>>)
(<==? .HL ,TOP-OF-THE-LINE-C>
<PUT .GT ,GOAL-I ,STAIR-TOP>)
(<==? .HL ,OUTSIDE-LINE-C>
<PUT .GT ,GOAL-I ,FRONT-PATH>)
(<==? .HL ,FOOD-LINE-C>
<PUT .GT ,GOAL-I ,CORNER>)
(<==? .GL ,TOP-OF-THE-LINE-C>
<PUT .GT ,GOAL-I ,STAIR-BOTTOM>)
(<==? .GL ,FOOD-LINE-C>
<PUT .GT ,GOAL-I ,NFOYER>)
(T
<PUT .GT ,GOAL-I ,FOYER>)>
<PUT .GT ,GOAL-S <GETP .GOAL ,P?STATION> ;CHOMP>
<PUT .GT ,GOAL-F .GOAL>
<LOC .PERSON>>
<ROUTINE FOLLOW-GOAL (PERSON "AUX" (HERE <LOC .PERSON>) LINE LN RM GT GOAL FLG
(GOAL-FLAG <>) (IGOAL <>) LOC (CNT 1) DIR)
#DECL ((PERSON HERE LOC RM) OBJECT (LN CNT) FIX
(GOAL-FLAG IGOAL) <OR ATOM FALSE>)
<SET GT <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>>
<COND (<==? .HERE <GET .GT ,GOAL-F>>
<SET FLG <GOAL-REACHED .PERSON>>
<PUT .GT ,GOAL-S <>>
<RETURN .FLG>)
(<NOT <GET .GT ,GOAL-ENABLE>> <RFALSE>)>
<COND (<NOT <==? <SET LOC <GETP .HERE ,P?STATION> ;CHOMP> .HERE>>
<RETURN <MOVE-PERSON .PERSON .LOC>>)>
<COND (<SET GOAL <GET .GT ,GOAL-I>>
<SET IGOAL T>)
(T <SET GOAL <GET .GT ,GOAL-S>>)>
<COND (<NOT .GOAL> <RFALSE>)
(<==? .HERE ,STAIRS>
<RETURN <TRANSFER .PERSON .HERE <GET .GT ,GOAL-F>>>)
(<==? .HERE .GOAL>
<COND (.IGOAL
<RETURN <TRANSFER .PERSON .GOAL <GET .GT ,GOAL-F>>>)
(<NOT <==? .HERE <GET .GT ,GOAL-F>>>
<SET FLG <MOVE-PERSON .PERSON <GET .GT ,GOAL-F>>>
<PUT .GT ,GOAL-S <>>
<COND (.FLG <GOAL-REACHED .PERSON>)
(T <SET FLG <GOAL-REACHED .PERSON>>)>
<RETURN .FLG>)
(T
<PUT .GT ,GOAL-S <>>
<RETURN <GOAL-REACHED .PERSON>>)>)>
<SET LN <GETP .GOAL ,P?LINE>>
<SET LINE
<COND (<==? .LN ,TOP-OF-THE-LINE-C> ,TOP-OF-THE-LINE)
(<==? .LN ,BOTTOM-LINE-C> ,BOTTOM-LINE)
(<==? .LN ,FOOD-LINE-C> ,FOOD-LINE)
(T ,OUTSIDE-LINE)>>
<REPEAT ()
<COND (<==? <SET RM <GET .LINE .CNT>> .HERE>
<COND (.GOAL-FLAG
<SET LOC <GET .LINE <- .CNT 3>>>)
(T
<SET LOC <GET .LINE <+ .CNT 3>>>)>
<RETURN <MOVE-PERSON .PERSON .LOC>>)
(<==? .RM .GOAL>
<SET GOAL-FLAG T>)>
<SET CNT <+ .CNT 3>>>>
<ROUTINE GOAL-REACHED (PERSON)
#DECL ((PERSON) OBJECT)
<APPLY <GET <GET ,GOAL-TABLES <GETP .PERSON ,P?CHARACTER>>
,GOAL-FUNCTION> ,G-REACHED>>
<ROUTINE MOVE-PERSON (PERSON WHERE "AUX" DIR GT OL COR PCOR CHR NC WT (CNT 0)
(FLG <>) EX)
#DECL ((PERSON WHERE) OBJECT)
<SET GT <GET ,GOAL-TABLES <SET CHR <GETP .PERSON ,P?CHARACTER>>>>
<SET NC .CHR>
<SET OL <LOC .PERSON>>
<SET DIR <DIR-FROM .OL .WHERE>>
<COND (<==? <PTSIZE <SET EX <GETPT .OL .DIR>>> ,DEXIT>
<COND (<NOT <FSET? <SET EX <GETB .EX ,DEXITOBJ>> ,OPENBIT>>
<FSET .EX ,OPENBIT>)
(T <SET EX <>>)>)
(T <SET EX <>>)>
<PUT .GT ,GOAL-LDIR .DIR>
<COND (<==? .OL ,HERE>
<SET FLG T>
<TELL D .PERSON>
<COND (<==? .DIR ,P?OUT>
<TELL " walks out of the room." CR>)
(<EQUAL? .DIR ,P?DOWN> <TELL " is going downstairs." CR>)
(<EQUAL? .DIR ,P?UP> <TELL " is going upstairs." CR>)
(<EQUAL? .DIR ,P?IN>
<COND (.EX <TELL " opens the " D .EX " and">)>
<TELL " goes into another room.">)
(T
<COND (.EX <TELL " opens the " D .EX " and">)>
<TELL " heads off to ">
<DIR-PRINT .DIR>
<TELL "." CR>)>)
(<==? .WHERE ,HERE>
<SET FLG T>
<TELL D .PERSON>
<COND (<NOT <==? ,HERE <GET .GT ,GOAL-F>>>
<TELL " is walking past you." CR>)
(<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
<TELL " stops here." CR>)
(T <TELL " steps into the room." CR>)>)
(<SET COR <GETP ,HERE ,P?CORRIDOR>>
<COND (<AND <SET PCOR <GETP .OL ,P?CORRIDOR>>
<NOT <==? <BAND .COR .PCOR> 0>>>
<SET FLG T>
<COND (<==? .WHERE ,STAIRS>
<TELL D .PERSON
" steps onto the stairs." CR>)
(<NOT <GETP .WHERE ,P?CORRIDOR>>
<TELL D .PERSON ", off to ">
<DIR-PRINT <COR-DIR ,HERE .OL>>
<TELL ",">
<COND (.EX
<TELL " opens a door and">)>
<COND (<==? <GETP ,HERE ,P?LINE>
,OUTSIDE-LINE-C>
<TELL " leaves your view">)
(<==? .WHERE ,SHED-ROOM>
<TELL " darts into the shed">)
(T
<TELL " ducks into a room">)>
<TELL " to ">
<DIR-PRINT <DIR-FROM .OL .WHERE>>
<TELL "." CR>)
(<0? <BAND .COR <GETP .WHERE ,P?CORRIDOR>>>
<TELL D .PERSON
", off to ">
<DIR-PRINT <COR-DIR ,HERE .OL>>
<TELL ", disappears from sight ">
<SET PCOR <DIR-FROM .OL .WHERE>>
<COND (<==? .PCOR ,P?UP>
<TELL "up the stairs">)
(<==? .PCOR ,P?DOWN>
<TELL "down the stairs">)
(T
<TELL "to ">
<DIR-PRINT .PCOR>)>
<TELL "." CR>)
(T
<TELL D .PERSON " is to ">
<DIR-PRINT <COR-DIR ,HERE .WHERE>>
<TELL ", heading toward ">
<DIR-PRINT <DIR-FROM .OL .WHERE>>
<TELL "." CR>)>)
(<AND <SET PCOR <GETP .WHERE ,P?CORRIDOR>>
<NOT <==? <BAND .COR .PCOR> 0>>>
<SET FLG T>
<TELL "To ">
<DIR-PRINT <COR-DIR ,HERE .WHERE>>
<TELL " " D .PERSON>
<COND (<OR <==? <GETP .WHERE ,P?LINE> ,OUTSIDE-LINE-C>
<==? .WHERE ,STAIRS>>
<TELL " comes into view from ">)
(T
<TELL " enters the hallway from ">)>
<DIR-PRINT <DIR-FROM .WHERE .OL>>
<TELL "." CR>)>)>
<SET WT <GET ,WHERE-TABLES .CHR>>
<REPEAT ()
<COND (<G? .CNT ,CHARACTER-MAX> <RETURN>)
(T
<COND (<==? <SET CHR <GET ,CHARACTER-TABLE .CNT>>
.PERSON> T)
(<OR <AND <0? .CNT> .FLG>
<IN? <GET ,CHARACTER-TABLE .CNT> .OL>>
<PUT .WT .CNT ,PRESENT-TIME>
<PUT <GET ,WHERE-TABLES .CNT>
.NC
,PRESENT-TIME>)>
<SET CNT <+ .CNT 1>>)>>
<MOVE .PERSON .WHERE>
.FLG>
<ROUTINE DIR-FROM (HERE THERE "AUX" P L T O)
#DECL ((HERE THERE O) OBJECT (P L) FIX)
<SET P 0>
<REPEAT ()
<COND (<0? <SET P <NEXTP .HERE .P>>>
<RFALSE>)
(<EQUAL? .P ,P?IN ,P?OUT> T)
(<NOT <L? .P ,LOW-DIRECTION>>
<SET T <GETPT .HERE .P>>
<SET L <PTSIZE .T>>
<COND (<AND <EQUAL? .L ,DEXIT ,UEXIT ,CEXIT>
<==? <GETB .T ,REXIT> .THERE>>
<RETURN .P>)>)>>>
<ROUTINE COR-DIR (HERE THERE "AUX" COR RM (PAST 0) (CNT 2))
<SET COR <GET-COR <BAND <GETP .THERE ,P?CORRIDOR>
<GETP .HERE ,P?CORRIDOR>>>>
<REPEAT ()
<COND (<==? <SET RM <GET .COR .CNT>> .HERE>
<SET PAST 1>
<RETURN>)
(<==? .RM .THERE>
<RETURN>)>
<SET CNT <+ .CNT 1>>>
<GET .COR .PAST>>
<ROUTINE GET-COR (NUM)
#DECL ((NUM) FIX)
<COND (<==? .NUM 1> ,COR-1)
(<==? .NUM 2> ,COR-2)
(<==? .NUM 4> ,COR-4)
(<==? .NUM 8> ,COR-8)
(<==? .NUM 16> ,COR-16)
(<==? .NUM 32> ,COR-32)
(<==? .NUM 64> ,COR-64)
(<==? .NUM 128> ,COR-128)
(<==? .NUM 256> ,COR-256)
(<==? .NUM 512> ,COR-512)
(<==? .NUM 1024> ,COR-1024)
(T ,COR-2048)>>
<ROUTINE TRANSFER (PERSON IGOAL FGOAL "AUX" V (FLG <>))
#DECL ((PERSON IGOAL FGOAL) OBJECT)
<COND (<==? .IGOAL ,STAIR-TOP>
<COND (<OR <EQUAL? ,HERE ,STAIR-BOTTOM ,NFOYER ,ROURKE-ROOM>
<EQUAL? ,HERE ,LIVING-ROOM ,FOYER ,CORNER>>
<TELL
"You can hear footsteps on the staircase." CR>
<SET FLG T>)>
<OR <MOVE-PERSON .PERSON ,STAIRS> .FLG>)
(<==? .IGOAL ,STAIR-BOTTOM>
<COND (<OR <EQUAL? ,HERE ,STAIR-TOP ,CORRIDOR-1>
<EQUAL? ,HERE ,CORRIDOR-2 ,CORRIDOR-3>>
<TELL
"You can hear footsteps on the staircase." CR>
<SET FLG T>)>
<OR <MOVE-PERSON .PERSON ,STAIRS> .FLG>)
(T
<SET V
<COND (<==? .IGOAL ,STAIRS>
<COND (<==? <GETP .FGOAL ,P?LINE> 0>
<MOVE-PERSON .PERSON ,STAIR-TOP>)
(T <MOVE-PERSON .PERSON ,STAIR-BOTTOM>)>)
(<==? .IGOAL ,FRONT-PATH>
<FSET ,FRONT-DOOR ,OPENBIT>
<MOVE-PERSON .PERSON ,FOYER>)
(<==? .IGOAL ,FOYER>
<FSET ,FRONT-DOOR ,OPENBIT>
<MOVE-PERSON .PERSON ,FRONT-PATH>)
(<==? .IGOAL ,NFOYER>
<MOVE-PERSON .PERSON ,CORNER>)
(T
<MOVE-PERSON .PERSON ,NFOYER>)>>
<ESTABLISH-GOAL .PERSON .FGOAL>
.V)>>
<ROUTINE DIR-PRINT (DIR "AUX" (CNT 0))
#DECL ((DIR CNT) FIX)
<REPEAT ()
<COND (<==? <GET ,DIR-STRINGS .CNT> .DIR>
<COND (<NOT <EQUAL? .DIR ,P?UP ,P?DOWN>>
<TELL "the ">)>
<PRINT <GET ,DIR-STRINGS <+ .CNT 1>>>
<RTRUE>)>
<SET CNT <+ .CNT 1>>>>
"Here is the code for goal motivation for the various characters.
Each character has a tendency to move from one place to another
at certain times. They all converge on the living room at about
noon."
"Constants used as table offsets for each character, including
the player."
<CONSTANT PLAYER-C 0>
<CONSTANT GARDENER-C 1>
<CONSTANT BAXTER-C 2>
<CONSTANT DUNBAR-C 3>
<CONSTANT GEORGE-C 4>
<CONSTANT MRS-ROBNER-C 5>
<CONSTANT ROURKE-C 6>
<CONSTANT COATES-C 7>
<CONSTANT CHARACTER-MAX 7>
<GLOBAL CHARACTER-DESCS
<TABLE 0
"Mr. McNabb is an elderly Scottish man with a deeply lined face.
He is wearing overalls."
"Baxter is an immaculately dressed middle-aged man with rugged good
looks."
"Ms. Dunbar, wearing a fashionable pants suit, is a rather attractive
woman in her early thirties."
"George is a young man in his mid-twenties. He is poorly dressed in
that each item he is wearing clashes with the others. His attire is
of the highest quality, however. He is wearing various pieces of
jewelry."
"Mrs. Robner is a middle-aged woman of great beauty. She is dressed
in black."
"Mrs. Rourke is a short woman, more than a bit overweight. She is
wearing a maid's outfit."
"Mr. Coates is a rather homely man of advancing years.">>
"Goal tables for the 8 characters (including PLAYER), offset
by the preceding constants, which, for a given character,
is the P?CHARACTER property of the object."
<GLOBAL GOAL-TABLES
<TABLE <TABLE <> <> <> <> 1 <> <> I-FOLLOW 4 4>
<TABLE <> <> <> <> 1 <> <> I-GARDENER 3 3>
<TABLE <> <> <> <> 1 <> <> I-BAXTER 4 4>
<TABLE <> <> <> <> 1 <> <> I-DUNBAR 3 3>
<TABLE <> <> <> <> 1 <> <> I-GEORGE 2 2>
<TABLE <> <> <> <> 1 <> <> I-MRS-ROBNER 4 4>
<TABLE <> <> <> <> 1 <> <> I-ROURKE 6 6>
<TABLE <> <> <> <> 1 <> <> I-COATES 2 2>>>
<GLOBAL ATTENTION-TABLE <TABLE 0 0 0 0 0 0 0 0>>
"Offsets into GOAL-TABLEs"
<CONSTANT GOAL-F 0>
<CONSTANT GOAL-S 1>
<CONSTANT GOAL-I 2>
<CONSTANT GOAL-LDIR 3>
<CONSTANT GOAL-ENABLE 4>
<CONSTANT GOAL-PRIORITY 5>
<CONSTANT GOAL-QUEUED 6>
<CONSTANT GOAL-FUNCTION 7>
<CONSTANT ATTENTION-SPAN 8>
<CONSTANT ATTENTION 9>
"Goal-function constants, similar to M-xxx in MAIN"
<CONSTANT G-REACHED 1>
<CONSTANT G-ENROUTE 2>
"Here's how the movement goals are done: For each player is
a table which consists of triplets, a number of minutes until
the next movement (an clock interrupt number), a number of
minutes allowed variation (for a bit of randomness), and a
room toward which to start. All movement is controlled by
the GOAL-ENABLE flag in the GOAL-TABLE for a character."
"Time starts at 8AM. Characters are at that point in their
starting positions, as reflected in DUNGEON."
<GLOBAL CHARACTER-TABLE
<TABLE PLAYER GARDENER BAXTER DUNBAR GEORGE MRS-ROBNER ROURKE
COATES>>
<GLOBAL GLOBAL-CHARACTER-TABLE
<TABLE PLAYER GLOBAL-GARDENER GLOBAL-BAXTER GLOBAL-DUNBAR GLOBAL-GEORGE
GLOBAL-MRS-ROBNER GLOBAL-ROURKE GLOBAL-COATES>>
<GLOBAL MOVEMENT-GOALS <TABLE
;"PLAYER"
<TABLE 0 0 0>
;"GARDENER"
<TABLE 0
60 10 NORTH-LAWN ;"9-10AM"
60 10 EAST-LAWN ;"10-11AM"
60 10 ROSE-GARDEN ;"11AM-1PM"
60 10 ORCHARD ;"1-2PM"
60 15 SOUTH-LAWN ;"2-3PM"
120 15 WEST-LAWN ;"3-5PM"
0>
;"BAXTER"
<TABLE 0
120 2 LIVING-ROOM ;"Arrival at 9:55"
360 10 SOUTH-LAWN ;"Leave at 4PM"
0>
;"DUNBAR"
<TABLE 0
60 10 DUNBAR-BATH ;"9-9:30AM"
30 10 DUNBAR-ROOM ;"9:30-11:30AM"
135 20 LIVING-ROOM ;"11:30AM-2PM"
135 20 DUNBAR-ROOM
0>
;"GEORGE"
<TABLE 0
80 10 KITCHEN ;"9:20-9:50AM"
30 10 DINING-ROOM ;"9:50-11AM"
70 20 GEORGE-ROOM ;"11-11:45AM"
45 15 LIVING-ROOM ;"11:45AM-12:30PM"
60 10 EAST-LAWN ;"12:30-2PM"
75 20 LIVING-ROOM ;"2-3PM"
60 15 GEORGE-ROOM
0>
;"MRS-ROBNER"
<TABLE 0
30 10 DINING-ROOM ;"8:30-9AM"
100 15 DINING-ROOM ;"10:10-11:10"
60 20 LIVING-ROOM ;"11:10-12:40"
90 20 MASTER-BEDROOM ;"12:40-1:50"
70 30 LIVING-ROOM
0>
;"ROURKE"
<TABLE 0
60 10 KITCHEN ;"9-10AM"
60 20 DINING-ROOM ;"10-11AM"
60 10 KITCHEN ;"11AM-1PM"
120 20 LIVING-ROOM ;"1PM-2PM"
60 30 ROURKE-ROOM
0>>>
<ROUTINE START-MOVEMENT ()
<ENABLE <QUEUE I-GARDENER 1>>
<ENABLE <QUEUE I-BAXTER 1>>
<ENABLE <QUEUE I-DUNBAR 1>>
<ENABLE <QUEUE I-GEORGE 1>>
<ENABLE <QUEUE I-MRS-ROBNER 1>>
<ENABLE <QUEUE I-ROURKE 1>>
<ENABLE <QUEUE I-FOLLOW -1>>
<ENABLE <QUEUE I-ATTENTION -1>>>
<ROUTINE I-G-I-G ()
<SETG G-I-G ,PRESENT-TIME>
<COND (<AND <==? ,HERE ,ROSE-GARDEN> <NOT ,HOLE-SHOWN>>
<SETG HOLE-TELL T>
<TELL
"All of a sudden, Mr. McNabb starts talking to himself quite
loudly about his poor roses being ruined. He walks up to you and
says \"You canna believe the holes someone's made. Crushed my
roses. It'll take me plenty a time to set it right. I just
canna believe it!\" He shakes his head dejectedly." CR>)>>
<ROUTINE I-GARDENER ("OPTIONAL" (GARG <>) "AUX" (GL <LOC ,GARDENER>))
<COND (<NOT .GARG> <IMOVEMENT ,GARDENER I-GARDENER>)
(<==? .GARG ,G-REACHED>
<COND (<==? .GL ,ROSE-GARDEN>
<ENABLE <QUEUE I-G-I-G <+ 2 <RANDOM 10>>>>
<RFALSE>)
(<==? .GL ,ORCHARD>
<COND (<NOT <IN? ,LADDER ,ORCHARD>>
<FCLEAR ,LADDER ,NDESCBIT>
<SETG LADDER-FLAG <>>
<SETG LADDER-FLAG-2 <>>
<FSET ,LADDER ,TOUCHBIT>
<COND (<IN? ,LADDER ,WINNER>
<MOVE ,LADDER ,ORCHARD>
<TELL
"McNabb comes over to you and takes the ladder. He walks off
toward the orchard." CR>
<RTRUE>)
(<IN? ,LADDER ,HERE>
<MOVE ,LADDER ,ORCHARD>
<TELL
"McNabb picks up the ladder and walks away toward the orchard." CR>
<RTRUE>)
(<==? ,HERE ,ORCHARD>
<MOVE ,LADDER ,ORCHARD>
<TELL
"McNabb places the ladder he was carrying on the ground." CR>
<RTRUE>)>
<MOVE ,LADDER ,ORCHARD>
<RFALSE>)>)
(<==? .GL ,IN-ROSES>
<UNPRIORITIZE ,GARDENER>
<COND (<==? ,HERE .GL>
<GRAB-ATTENTION ,GARDENER>
<SHOW-HOLE>
<RTRUE>)
(T
<ENABLE <QUEUE I-SHOW-HOLE -1>>
<RFALSE>)>)>)>>
<ROUTINE I-BAXTER ("OPTIONAL" (GARG <>) "AUX" (BL <LOC ,BAXTER>))
<COND (<NOT .GARG> <IMOVEMENT ,BAXTER I-BAXTER>)
(<AND <==? .GARG ,G-REACHED> <==? .BL ,LIVING-ROOM>>
<COND (<IN? ,RECURSIVE-BOOK ,LIVING-ROOM>
<MOVE ,RECURSIVE-BOOK ,BAXTER>
<FSET ,RECURSIVE-BOOK ,NDESCBIT>
<RFALSE>)>)
(<AND <==? .GARG ,G-REACHED>
<==? .BL ,DUNBAR-ROOM>
<==? ,HERE ,DUNBAR-ROOM>>
<TELL
"Baxter looks at the body of Ms. Dunbar, lying on the floor, and
falls to his knees. He starts to sob. \"I knew she would do this,\"
he says, sobbing, \"but I couldn't stop her. She killed Marshall.
She just told me a few minutes ago. She said that he was going to fire her,
just like that, after all of these years. She was so hysterical,
I couldn't understand everything she said, something about having
stolen some money. I don't know.\" With that, he breaks down again." CR>
<ENABLE <QUEUE I-BAXTER-END-1 10>>)
(<AND <==? .GARG ,G-REACHED> <==? .BL ,SHED-ROOM>>
<COND (<==? ,HERE ,BEHIND-SHED>
<TELL
"The sound of quick footsteps precedes someone into the shed.
You can make out two voices in rapid conversation. The voices
are muffled, however, and cannot be made out." CR>)>)
(<AND <==? .GARG ,G-REACHED> <==? .BL ,SOUTH-LAWN>>
<COND (<==? ,HERE ,SOUTH-LAWN>
<REMOVE ,BAXTER>
<TELL
"A limousine comes up the drive and picks up Mr. Baxter." CR>
<RTRUE>)
(<EQUAL? ,HERE ,FRONT-PATH ,EAST-OF-DOOR ,WEST-OF-DOOR>
<REMOVE ,BAXTER>
<TELL
"To the south, you observe a limousine picking up Mr. Baxter." CR>
<RTRUE>)>
<REMOVE ,BAXTER>
<RFALSE>)>>
<ROUTINE I-DUNBAR ("OPTIONAL" (GARG <>) "AUX" (DL <LOC ,DUNBAR>))
<COND (<NOT .GARG> <IMOVEMENT ,DUNBAR I-DUNBAR>)
(<AND <==? .GARG ,G-REACHED> <==? .DL ,SHED-ROOM>>
<COND (<==? ,HERE ,BEHIND-SHED>
<TELL
"You hear soft footsteps approaching. Someone has entered the shed!" CR>)>)>>
<ROUTINE I-GEORGE ("OPTIONAL" (GARG <>) "AUX" (GL <LOC ,GEORGE>))
<COND (<AND <==? .GARG ,G-REACHED> <==? .GL ,EAST-LAWN>>
<UNPRIORITIZE ,GEORGE>
<RFALSE>)
(<AND <==? .GARG ,G-REACHED> <==? .GL ,GEORGE-ROOM>>
<SETG STEREO-ON T>
<SETG TUNE-ON <PICK-ONE ,RECORD-TABLE>>
<ENABLE <QUEUE I-TUNE-OFF 25>>
<COND (<==? ,HERE .GL>
<TELL
"George walks over to his stereo and puts on a record. He turns
to you. \"I naturally assume that you would like to hear a
" ,TUNE-ON ".\" he says, barely concealing his clear distaste
for you and your profession." CR>)>)
(<AND <==? .GARG ,G-REACHED> <==? .GL ,NORTH-LAWN>>
<REMOVE ,NEW-WILL>
<MOVE ,SOGGY-WILL ,LAKE>
<SETG GEORGE-RUN 0>
<UNPRIORITIZE ,GEORGE>
<COND (<==? ,HERE ,NORTH-LAWN>
<TELL
"You catch, out of the corner of one eye, George motioning with
his arm toward the lake." CR>)>)
(<NOT .GARG> <IMOVEMENT ,GEORGE I-GEORGE>)>>
<ROUTINE I-ROURKE ("OPTIONAL" (GARG <>))
<COND (<AND <==? .GARG ,G-REACHED> <IN? ,ROURKE ,ROURKE-ROOM>>
<UNPRIORITIZE ,ROURKE>
<RFALSE>)
(<NOT .GARG> <IMOVEMENT ,ROURKE I-ROURKE>)>>
<ROUTINE I-MRS-ROBNER ("OPTIONAL" (GARG <>) "AUX" (ML <LOC ,MRS-ROBNER>))
<COND (<AND <==? .GARG ,G-REACHED> <==? .ML ,MASTER-BEDROOM>>
<COND (<AND <NOT ,HC-ROBNER>
<FSET? ,HIDDEN-DOOR-B ,OPENBIT>>
<SETG HC-ROBNER T>
<COND (<EQUAL? ,HERE ,HIDDEN-CLOSET ,MASTER-BEDROOM>
<TELL
"Mrs. Robner stares in complete surprise at the hidden closet. \"I had
no idea that such a place existed!\" She sits down on her bed." CR>)>)>)
(<NOT .GARG> <IMOVEMENT ,MRS-ROBNER I-MRS-ROBNER>)>>
;"This routine does the interrupt-driven goal establishment
for the various characters, using the MOVEMENT-GOALS table."
<CONSTANT MG-ROOM 0>
<CONSTANT MG-TIME 1>
<CONSTANT MG-VARIATION 2>
<CONSTANT MG-LENGTH <* 3 2>>
<CONSTANT MG-NEXT 4>
<ROUTINE IMOVEMENT (PERSON INT "AUX" TB VAR DIS TIM ID RM GT)
#DECL ((PERSON) OBJECT (TB) <PRIMTYPE VECTOR> (ID VAR DIS TIM) FIX)
<SET TB <GET ,MOVEMENT-GOALS <SET ID <GETP .PERSON ,P?CHARACTER>>>>
<SET GT <GET ,GOAL-TABLES .ID>>
<COND (<NOT <==? <SET RM <GET .TB ,MG-ROOM>> 0>>
<COND (<GET .GT ,GOAL-PRIORITY>
<PUT .GT ,GOAL-QUEUED .RM>)
(T
<ESTABLISH-GOAL .PERSON .RM>)>)>
<COND (<NOT <==? <SET TIM <GET .TB ,MG-TIME>> 0>>
<SET VAR <GET .TB ,MG-VARIATION>>
<SET DIS <RANDOM <* .VAR 2>>>
<QUEUE .INT <+ .TIM <- .DIS .VAR>>>
<PUT ,MOVEMENT-GOALS .ID <REST .TB ,MG-LENGTH>>
<COND (<NOT <==? <GET .TB ,MG-NEXT> 0>>
<PUT .TB
,MG-NEXT
<+ <GET .TB ,MG-NEXT> <- .VAR .DIS>>>)>)>
<RFALSE>>
<ROUTINE I-FOLLOW ("AUX" (FLG <>) (CNT 0) GT)
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,CHARACTER-MAX>
<RETURN>)
(<AND <GET <SET GT <GET ,GOAL-TABLES .CNT>> ,GOAL-S>
<OR <GET .GT ,GOAL-ENABLE>
<0? <GET .GT ,ATTENTION>>>>
<PUT .GT ,GOAL-ENABLE T>
<COND (<FOLLOW-GOAL <GET ,CHARACTER-TABLE .CNT>>
<SET FLG T>)>)>>
.FLG>
<ROUTINE I-ATTENTION ("AUX" (FLG <>) (CNT 0) ATT)
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,CHARACTER-MAX> <RETURN>)
(<==? <SET ATT <- <GET ,ATTENTION-TABLE .CNT> 1>> 1>
<COND (<IN? <GET ,CHARACTER-TABLE .CNT> ,HERE>
<TELL D <GET ,CHARACTER-TABLE .CNT>
" starts to move about distractedly." CR>
<SET FLG T>)>)
(<==? .ATT 0>
<PUT <GET ,GOAL-TABLES .CNT> ,GOAL-ENABLE T>)>
<PUT ,ATTENTION-TABLE .CNT .ATT>>
.FLG>
<ROUTINE GRAB-ATTENTION (PERSON "AUX" (CHR <GETP .PERSON ,P?CHARACTER>) GT ATT)
#DECL ((PERSON) OBJECT (ATT) FIX)
<SET GT <GET ,GOAL-TABLES .CHR>>
<COND (<GET .GT ,GOAL-S>
<PUT ,ATTENTION-TABLE .CHR <SET ATT <GET .GT ,ATTENTION-SPAN>>>
<COND (<==? .ATT 0>
<PUT .GT ,GOAL-ENABLE T>
<RFALSE>)
(<GET .GT ,GOAL-ENABLE>
<PUT .GT ,GOAL-ENABLE <>>)>)>
<SETG QCONTEXT .PERSON>
<SETG QCONTEXT-ROOM ,HERE>
<RTRUE>>
<GLOBAL WHERE-TABLES
<TABLE <TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>
<TABLE 0 0 0 0 0 0 0 0>>>
<ROUTINE I-COATES ("OPTIONAL" (RARG <>))
<COND (<==? .RARG ,G-REACHED>
<COND (<IN? ,COATES ,SOUTH-LAWN>
<REMOVE ,COATES>
<SETG POST-WILL <>>
<COND (<OR <EQUAL? ,HERE ,SOUTH-LAWN ,FRONT-PATH
,EAST-OF-DOOR>
<EQUAL? ,HERE ,WEST-OF-DOOR ,EAST-LAWN
,WEST-LAWN>>
<TELL
"A car pulls up the drive. Coates enters the vehicle, motions
to the driver, and the car starts up and leaves the grounds." CR>)>)
(<IN? ,COATES ,LIVING-ROOM>
<COND (<==? ,HERE ,LIVING-ROOM>
<TELL
"Mr. Coates shakes your hand. \"I'm glad you're here, Inspector.
We'll begin the reading soon.\"" CR>)>
<ENABLE <QUEUE I-WILL-READING 0>>
<I-WILL-READING>)>)>>

97
macros.zil Normal file
View File

@ -0,0 +1,97 @@
"MACROS for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
<SETG C-ENABLED? 0>
<SETG C-ENABLED 1>
<SETG C-DISABLED 0>
<DEFMAC TELL ("ARGS" A)
<FORM PROG ()
!<MAPF ,LIST
<FUNCTION ("AUX" E P O)
<COND (<EMPTY? .A> <MAPSTOP>)
(<SET E <NTH .A 1>>
<SET A <REST .A>>)>
<COND (<TYPE? .E ATOM>
<COND (<OR <=? <SET P <SPNAME .E>>
"CRLF">
<=? .P "CR">>
<MAPRET '<CRLF>>)
(<=? .P "PRSO">
<MAPRET '<PRSO-PRINT>>)
(<=? .P "PRSI">
<MAPRET '<PRSI-PRINT>>)
(<EMPTY? .A>
<ERROR INDICATOR-AT-END? .E>)
(ELSE
<SET O <NTH .A 1>>
<SET A <REST .A>>
<COND (<OR <=? <SET P <SPNAME .E>>
"DESC">
<=? .P "D">
<=? .P "OBJ">
<=? .P "O">>
<MAPRET <FORM PRINTD .O>>)
(<OR <=? .P "NUM">
<=? .P "N">>
<MAPRET <FORM PRINTN .O>>)
(<OR <=? .P "CHAR">
<=? .P "CHR">
<=? .P "C">>
<MAPRET <FORM PRINTC .O>>)
(ELSE
<MAPRET
<FORM PRINT
<FORM GETP .O .E>>>)>)>)
(<TYPE? .E STRING>
<MAPRET <FORM PRINTI .E>>)
(<TYPE? .E FORM>
<MAPRET <FORM PRINT .E>>)
(ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>
<DEFMAC VERB? ("TUPLE" ATMS "AUX" (O ()) (L ()))
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .O 1> <NTH .O 1>)
(ELSE <FORM OR !.O>)>>)>
<REPEAT ()
<COND (<EMPTY? .ATMS> <RETURN!->)>
<SET ATM <NTH .ATMS 1>>
<SET L
(<FORM GVAL <PARSE <STRING "V?" <SPNAME .ATM>>>>
!.L)>
<SET ATMS <REST .ATMS>>
<COND (<==? <LENGTH .L> 3> <RETURN!->)>>
<SET O (<FORM EQUAL? ',PRSA !.L> !.O)>
<SET L ()>>>
<DEFMAC RFATAL ()
'<PROG () <PUSH 2> <RSTACK>>>
<DEFMAC PROB ('BASE? "OPTIONAL" 'LOSER?)
<COND (<ASSIGNED? LOSER?> <FORM ZPROB .BASE?>)
(ELSE <FORM G? .BASE? '<RANDOM 100>>)>>
<ROUTINE ZPROB (BASE)
<G? .BASE <RANDOM 100>>>
<ROUTINE PICK-ONE (FROB)
<GET .FROB <RANDOM <GET .FROB 0>>>>
<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
<DEFMAC FLAMING? ('OBJ)
<FORM AND <FORM FSET? .OBJ ',FLAMEBIT>
<FORM FSET? .OBJ ',ONBIT>>>
<DEFMAC OPENABLE? ('OBJ)
<FORM OR <FORM FSET? .OBJ ',DOORBIT>
<FORM FSET? .OBJ ',CONTBIT>>>
<DEFMAC ABS ('NUM)
<FORM COND (<FORM L? .NUM 0> <FORM - 0 .NUM>)
(T .NUM)>>

190
main.zil Normal file
View File

@ -0,0 +1,190 @@
"MAIN for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
<GLOBAL P-WON <>>
<CONSTANT M-FATAL 2>
<CONSTANT M-HANDLED 1>
<CONSTANT M-NOT-HANDLED <>>
<CONSTANT M-BEG 1>
<CONSTANT M-END <>>
<CONSTANT M-ENTER 2>
<CONSTANT M-LOOK 3>
<CONSTANT M-FLASH 4>
<CONSTANT M-OBJDESC 5>
<GLOBAL P-HIM-HER <>>
<GLOBAL P-HIM-HER-LOC <>>
<ROUTINE GO ()
<SETG LIT T>
<SETG SCORE 8>
<SETG WINNER ,PLAYER>
<SETG HERE ,SOUTH-LAWN>
<SETG P-IT-LOC ,HERE>
<SETG P-IT-OBJECT <>>
<SETG P-HIM-HER ,MRS-ROBNER>
<SETG P-HIM-HER-LOC ,FOYER>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<ENABLE <QUEUE I-NEWSPAPER <+ 175 <RANDOM 40>>>>
<ENABLE <QUEUE I-MAIL <+ 70 <RANDOM 60>>>>
<ENABLE <QUEUE I-CALL <+ 60 <RANDOM 10>>>>
<ENABLE <QUEUE I-BAXTER-ARRIVE 115>>
<ENABLE <QUEUE I-COATES-ARRIVE <+ 230 <RANDOM 5>>>>
<START-MOVEMENT>
<V-VERSION>
<CRLF>)>
<MOVE ,WINNER ,HERE>
<V-LOOK>
<MAIN-LOOP>
<AGAIN>>
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP)
#DECL ((CNT OCNT ICNT NUM) FIX (V) <OR 'T FIX FALSE> (OBJ) <OR FALSE OBJECT>
(OBJ1) OBJECT (TBL) TABLE (PTBL) <OR FALSE ATOM>)
<REPEAT ()
<SET CNT 0>
<SET OBJ <>>
<SET PTBL T>
<COND (<SETG P-WON <PARSER>>
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
<SET NUM
<COND (<0? <SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>> .OCNT)
(<G? .OCNT 1>
<SET TBL ,P-PRSO>
<COND (<0? .ICNT> <SET OBJ <>>)
(T <SET OBJ <GET ,P-PRSI 1>>)>
.OCNT)
(<G? .ICNT 1>
<SET PTBL <>>
<SET TBL ,P-PRSI>
<SET OBJ <GET ,P-PRSO 1>>
.ICNT)
(T 1)>>
<COND (<NOT <==? ,QCONTEXT-ROOM ,HERE>>
<SETG QCONTEXT <>>)>
<COND (<AND <NOT .OBJ> <1? .ICNT>> <SET OBJ <GET ,P-PRSI 1>>)>
<COND (<==? ,PRSA ,V?WALK>
<SET V <PERFORM ,PRSA ,PRSO>>)
(<0? .NUM>
<COND (<0? <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
<SET V <PERFORM ,PRSA>>
<SETG PRSO <>>)
(T
<TELL "There isn't anything to ">
<SET TMP <GET ,P-ITBL ,P-VERBN>>
<COND (,P-OFLAG
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>)>
<TELL "!" CR>
<SET V <>>)>)
(<AND .PTBL <==? .NUM 2> <==? ,PRSA ,V?ARREST>>
<SET V <PERFORM ,PRSA ,OBJECT-PAIR>>)
(T
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .NUM> <RETURN>)
(T
<COND (.PTBL <SET OBJ1 <GET ,P-PRSO .CNT>>)
(T <SET OBJ1 <GET ,P-PRSI .CNT>>)>
<COND (<G? .NUM 1>
<COND (<==? .OBJ1 ,PLAYER> <AGAIN>)
(<FSET? .OBJ1 ,DUPLICATE>
<AGAIN>)>
<PRINTD .OBJ1>
<TELL ": ">)>
<SET V <QCONTEXT-CHECK <COND (.PTBL .OBJ1)
(T .OBJ)>>>
<SET V
<PERFORM ,PRSA
<COND (.PTBL .OBJ1) (T .OBJ)>
<COND (.PTBL .OBJ) (T .OBJ1)>>>
<COND (<==? .V ,M-FATAL> <RETURN>)>)>>)>
<COND (<==? .V ,M-FATAL> <SETG P-CONT <>>)>)
(T
<SETG P-CONT <>>)>
<COND (,P-WON
<COND (<VERB? TELL BRIEF SUPER-BRIEF VERBOSE TIME SAVE SPACE
UNSPACE> T)
(T <SET V <CLOCKER>>)>)>>>
<ROUTINE QCONTEXT-CHECK (PRSO)
<COND (<AND ,QCONTEXT
<IN? ,QCONTEXT ,HERE>
<==? ,QCONTEXT-ROOM ,HERE>
<==? ,WINNER ,PLAYER>>
<COND (<OR <VERB? WHAT>
<VERB? FIND>
<AND <VERB? TELL-ME> <==? .PRSO ,PLAYER>>
<AND <VERB? SHOW> <==? .PRSO ,PLAYER>>>
<SETG WINNER ,QCONTEXT>
<TELL "(said to " D ,QCONTEXT ")" CR>)>)>>
<GLOBAL L-PRSA <>>
<GLOBAL L-PRSO <>>
<GLOBAL L-PRSI <>>
<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
#DECL ((A) FIX (O) <OR FALSE OBJECT FIX> (I) <OR FALSE OBJECT> (V) ANY)
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<SETG PRSA .A>
<COND (<AND <EQUAL? ,IT .I .O>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<RFATAL>)
(<AND <EQUAL? ,HIM-HER .I .O>
<NOT <EQUAL? ,P-HIM-HER-LOC ,HERE>>>
<SET V <GET ,GLOBAL-CHARACTER-TABLE
<GETP ,P-HIM-HER ,P?CHARACTER>>>
<COND (<==? ,HIM-HER .O> <SET O .V>)
(<==? ,HIM-HER .I> <SET I .V>)>)>
<COND (<==? .O ,IT> <SET O ,P-IT-OBJECT>)
(<==? .O ,HIM-HER> <SET O ,P-HIM-HER>)>
<COND (<==? .I ,IT> <SET I ,P-IT-OBJECT>)
(<==? .I ,HIM-HER> <SET I ,P-HIM-HER>)>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <VERB? WALK>>>
<COND (<FSET? ,PRSO ,PERSON>
<SETG P-HIM-HER ,PRSO>
<SETG P-HIM-HER-LOC ,HERE>)
(T
<SETG P-IT-OBJECT ,PRSO>
<SETG P-IT-LOC ,HERE>)>)>
<SETG PRSI .I>
<COND (<NOT <==? .A ,V?AGAIN>>
<SETG L-PRSA .A>
<COND (<==? .A ,V?WALK> <SETG L-PRSO <>>)
(T <SETG L-PRSO .O>)>
<SETG L-PRSI .I>)>
<COND (<SET V <APPLY <GETP ,WINNER ,P?ACTION>>> .V)
(<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-BEG>> .V)
(<SET V <APPLY <GET ,PREACTIONS .A>>> .V)
(<AND .I <SET V <APPLY <GETP .I ,P?ACTION>>>> .V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <APPLY <GETP .O ,P?ACTION>>>>
.V)
(<SET V <APPLY <GET ,ACTIONS .A>>> .V)>
<COND (<NOT <==? .V ,M-FATAL>>
<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>

1117
parser.zil Normal file

File diff suppressed because it is too large Load Diff

605
syntax.zil Normal file
View File

@ -0,0 +1,605 @@
"SYNTAX for
DEADLINE
Copyright 1982 Infocom, Inc. All rights reserved.
"
"SUBTITLE VOCABULARY"
<BUZZ A AN THE IS ARE AND OF THEN ALL ONE BUT EXCEPT \. \, \" Y NUMBER
MINUTE BACK PAGE CAREFULLY QUIETLY SLOWLY QUICKLY BRIEFLY
DO YOU HAVE WAS WERE YOUR>
<SYNONYM WITH USING THROUGH>
<SYNONYM IN INSIDE INTO>
<SYNONYM UNDER UNDERNEATH BENEATH>
<SYNONYM NORTH N>
<SYNONYM SOUTH S>
<SYNONYM EAST E>
<SYNONYM WEST W>
<SYNONYM DOWN D DOWNSTAIRS>
<SYNONYM UP U UPSTAIRS>
<SYNONYM NW NORTHWEST>
<SYNONYM NE NORTHEAST>
<SYNONYM SW SOUTHWEST>
<SYNONYM SE SOUTHE>
\
"ZORK game commands"
<SYNTAX BRIEF = V-BRIEF>
<SYNTAX SUPER = V-SUPER-BRIEF>
<SYNONYM SUPER SUPERBRIEF>
<SYNTAX SPACE = V-SPACE>
<SYNTAX UNSPACE = V-UNSPACE>
<SYNTAX DIAGNOSE = V-DIAGNOSE>
<SYNTAX INVENTORY = V-INVENTORY>
<SYNONYM INVENTORY I>
<SYNTAX TIME = V-TIME>
<SYNONYM TIME T>
<SYNTAX QUIT = V-QUIT>
<SYNONYM QUIT Q>
<SYNTAX RESTART = V-RESTART>
<SYNTAX RESTORE = V-RESTORE>
<SYNTAX SAVE = V-SAVE>
<SYNTAX SCORE = V-SCORE>
<SYNTAX VERSION = V-VERSION>
<SYNTAX VERBOSE = V-VERBOSE>
\
"SUBTITLE REAL VERBS"
<SYNTAX ACCUSE OBJECT (FIND PERSON) WITH OBJECT = V-ACCUSE PRE-ACCUSE>
<SYNTAX ACCUSE OBJECT (FIND PERSON) = V-ACCUSE PRE-ACCUSE>
<SYNTAX AGAIN = V-AGAIN>
<SYNTAX ANALYZE OBJECT FOR OBJECT = V-ANALYZE>
<SYNTAX ANALYZE OBJECT = V-ANALYZE>
<SYNTAX ANALYZE OFF OBJECT = V-ANALYZE>
<SYNONYM ANALYZE ANALYSE CHECK TEST DUST>
<SYNTAX ANSWER = V-ANSWER>
<SYNTAX ANSWER OBJECT = V-REPLY>
<SYNONYM ANSWER REPLY>
<SYNTAX APPLY OBJECT TO OBJECT = V-PUT PRE-PUT>
<SYNTAX ARREST OBJECT (FIND PERSON) (MANY) FOR OBJECT = V-ARREST>
<SYNTAX ARREST OBJECT (FIND PERSON) (MANY) = V-ARREST>
<SYNTAX ASK OBJECT (FIND PERSON) ABOUT OBJECT = V-ASK-ABOUT>
;<SYNTAX ASK OBJECT (FIND PERSON) ABOUT OBJECT = V-ASK-ABOUT>
<SYNTAX ASK OBJECT (FIND PERSON) FOR OBJECT = V-ASK-FOR>
<SYNTAX ASK OBJECT (FIND PERSON) = V-TELL>
<SYNONYM ASK QUESTION INQUIRE>
<SYNTAX ATTACK
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-ATTACK>
<SYNONYM ATTACK FIGHT HURT INJURE HIT>
<SYNTAX BRUSH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-BRUSH ;*>
<SYNTAX BRUSH OFF OBJECT (HELD CARRIED) = V-BRUSH>
<SYNTAX BRUSH
OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT
= V-BRUSH>
<SYNONYM BRUSH CLEAN WIPE>
<SYNTAX BUG = V-BUG>
<SYNTAX BURN
OBJECT (FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-BURN PRE-BURN>
<SYNTAX BURN
DOWN
OBJECT (FIND BURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-BURN PRE-BURN>
<SYNONYM BURN INCINERATE IGNITE>
<SYNTAX CALL = V-CALL-LOSE>
<SYNTAX CALL OBJECT = V-CALL>
<SYNTAX CALL UP OBJECT = V-PHONE>
<SYNONYM CALL HEY DIAL>
<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX CLIMB UP OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-UP>
<SYNTAX CLIMB DOWN OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX CLIMB OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-FOO>
;<SYNTAX CLIMB IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNONYM CLIMB SIT HATCH>
<SYNTAX CLOSE
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-CLOSE>
<SYNTAX CONFRONT OBJECT (FIND PERSON) WITH OBJECT = V-CONFRONT>
<SYNTAX COUNT OBJECT = V-COUNT>
<SYNONYM COUNT>
<SYNTAX CROSS OBJECT = V-CROSS>
<SYNONYM CROSS FORD>
<SYNTAX CUT OBJECT WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD) = V-CUT>
<SYNONYM CUT SLICE PIERCE>
<SYNTAX CURSE = V-CURSES>
<SYNTAX CURSE OBJECT (FIND PERSON) = V-CURSES>
<SYNONYM CURSE DAMN>
<SYNTAX DRINK
OBJECT (FIND DRINKBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-DRINK>
<SYNONYM DRINK IMBIBE SWALLOW>
<SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP ;*>
<SYNTAX DROP OBJECT (HELD MANY HAVE) DOWN OBJECT = V-PUT PRE-PUT>
<SYNTAX DROP OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX DROP OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNONYM DROP RELEASE>
<SYNTAX EAT
OBJECT (FIND FOODBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE MANY)
= V-EAT>
<SYNONYM EAT CONSUME>
<SYNTAX ENTER = V-ENTER>
<SYNTAX ENTER OBJECT = V-THROUGH>
<SYNTAX EXIT = V-EXIT>
<SYNTAX EXIT OBJECT = V-EXIT>
<SYNTAX EXAMINE OBJECT (HELD CARRIED IN-ROOM ON-GROUND)
= V-EXAMINE PRE-EXAMINE>
<SYNONYM EXAMINE DESCRIBE>
<SYNTAX EXTINGUISH
OBJECT (FIND LIGHTBIT) (MANY HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
= V-LAMP-OFF>
<SYNONYM EXTINGUISH DOUSE>
<SYNTAX FILL
OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT
= V-FILL>
<SYNTAX FILL
OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-FILL>
<SYNTAX FIND OBJECT = V-FIND PRE-FIND>
<SYNONYM FIND WHERE THERE SEEN>
<SYNTAX FINGERPRINT OBJECT (HELD CARRIED IN-ROOM ON-GROUND) = V-FINGERPRINT>
<SYNTAX FLUSH OBJECT (ON-GROUND IN-ROOM) = V-FLUSH>
<SYNTAX FOLLOW OBJECT = V-FOLLOW>
<SYNONYM FOLLOW PURSUE CHASE>
<SYNTAX GIVE
OBJECT (MANY HELD CARRIED ON-GROUND IN-ROOM)
TO
OBJECT (FIND PERSON) (ON-GROUND)
= V-GIVE PRE-GIVE>
<SYNTAX GIVE
OBJECT (FIND PERSON) (ON-GROUND)
OBJECT (MANY)
= V-SGIVE PRE-SGIVE>
<SYNONYM GIVE HAND DONATE OFFER>
<SYNTAX GOODBYE = V-GOODBYE>
<SYNTAX GOODBYE OBJECT = V-GOODBYE>
<SYNTAX HELLO = V-HELLO ;*>
<SYNTAX HELLO OBJECT = V-HELLO>
<SYNONYM HELLO HI>
<SYNTAX HIDE = V-HIDE>
<SYNTAX HIDE BEHIND OBJECT = V-HIDE-BEHIND>
<SYNTAX HIDE ON OBJECT = V-THROUGH>
<SYNTAX BLOW OUT OBJECT = V-LAMP-OFF>
<SYNTAX JUMP = V-LEAP>
<SYNTAX JUMP OVER OBJECT = V-LEAP>
<SYNTAX JUMP ACROSS OBJECT = V-LEAP>
<SYNTAX JUMP IN OBJECT = V-LEAP>
<SYNONYM JUMP LEAP>
<SYNTAX KICK OBJECT = V-KICK>
<SYNONYM KICK BITE TAUNT>
<SYNTAX KILL OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KILL>
<SYNTAX KILL
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-KILL>
<SYNONYM KILL DISPATCH STRANGLE>
<SYNTAX KISS OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KISS>
<SYNTAX KNOCK ON OBJECT = V-KNOCK>
<SYNTAX KNOCK AT OBJECT = V-KNOCK ;*>
<SYNTAX KNOCK DOWN OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ATTACK>
<SYNONYM KNOCK RAP>
<SYNTAX LEAN OBJECT AGAINST OBJECT = V-LEAN>
<SYNTAX LEAN OBJECT ON OBJECT = V-LEAN>
<SYNTAX LEAN OBJECT UP OBJECT = V-LEAN>
<SYNTAX LEAN = V-STAND>
<SYNTAX LEAN UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNONYM LEAN STAND PROP>
<SYNTAX LEAVE = V-LEAVE>
<SYNTAX LEAVE OBJECT = V-DROP>
<SYNTAX LIGHT
OBJECT (FIND LIGHTBIT)
(HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE)
= V-LAMP-ON ;*>
<SYNTAX LIGHT
OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (FIND FLAMEBIT) (HELD CARRIED TAKE HAVE)
= V-BURN PRE-BURN>
<SYNTAX LISTEN TO OBJECT = V-LISTEN>
<SYNTAX LISTEN AT OBJECT = V-LISTEN>
<SYNTAX LOCK
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-LOCK>
<SYNTAX LOOK = V-LOOK>
<SYNTAX LOOK AROUND OBJECT (FIND RMUNGBIT) = V-LOOK>
<SYNTAX LOOK UP OBJECT (FIND RMUNGBIT) = V-LOOK-UP>
<SYNTAX LOOK DOWN OBJECT (FIND RMUNGBIT) = V-LOOK-DOWN>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX LOOK OVER OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX LOOK WITH OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK THROUGH OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK OUT OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
<SYNTAX LOOK IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-LOOK-INSIDE>
<SYNTAX LOOK ON OBJECT (ON-GROUND IN-ROOM) = V-LOOK-ON>
<SYNTAX LOOK AT OBJECT (HELD CARRIED MANY) WITH OBJECT = V-READ PRE-READ>
<SYNTAX LOOK FOR OBJECT = V-FIND>
<SYNTAX LOOK NEAR OBJECT = V-SEARCH-AROUND>
<SYNONYM LOOK L STARE GAZE>
<SYNTAX WATCH OBJECT = V-EXAMINE>
<SYNTAX SEARCH OBJECT = V-SEARCH PRE-SEARCH>
<SYNTAX SEARCH IN OBJECT = V-SEARCH PRE-SEARCH>
<SYNTAX SEARCH FOR OBJECT = V-FIND>
<SYNTAX SEARCH OBJECT AROUND OBJECT = V-SEARCH-GROUND-AROUND>
<SYNTAX SEARCH OBJECT UNDER OBJECT = V-SEARCH-GROUND-UNDER>
<SYNTAX SEARCH AROUND OBJECT = V-SEARCH-AROUND>
<SYNTAX SEARCH NEAR OBJECT = V-SEARCH-AROUND>
<SYNTAX SEARCH OBJECT NEAR OBJECT = V-SEARCH-GROUND-AROUND>
<SYNTAX SEARCH OBJECT FOR OBJECT = V-SEARCH-OBJECT-FOR>
<SYNTAX SEARCH UP OBJECT = V-SEARCH PRE-SEARCH>
<SYNONYM SEARCH DIG>
<SYNTAX LOWER OBJECT = V-LOWER>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX ROLL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNONYM MOVE>
<SYNTAX PLAY OBJECT = V-PLAY>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE ; *>
<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNONYM PULL TUG>
<SYNTAX MUMBLE = V-MUMBLE>
<SYNONYM MUMBLE SIGH>
<SYNTAX DESTROY
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH
OBJECT (HELD CARRIED TAKE)
= V-MUNG>
<SYNTAX DESTROY
DOWN
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH
OBJECT (HELD CARRIED TAKE)
= V-MUNG>
<SYNONYM DESTROY DAMAGE BREAK SMASH>
<SYNTAX OPEN
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN ;*>
<SYNTAX OPEN
UP
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN ;*>
<SYNTAX OPEN
OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-OPEN>
<SYNTAX PEEK IN OBJECT = V-LOOK-INSIDE>
<SYNTAX PICK OBJECT = V-PICK>
<SYNTAX PICK OBJECT WITH OBJECT = V-PICK>
<SYNTAX PICK UP
OBJECT (FIND TAKEBIT)
(ON-GROUND MANY)
= V-TAKE PRE-TAKE>
<SYNTAX POKE
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-MUNG>
<SYNONYM POKE JAB BLIND>
<SYNTAX POUR OBJECT (HELD CARRIED) = V-DROP ;*>
<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-DROP>
<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR-ON PRE-POUR-ON>
<SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-DROP>
<SYNONYM POUR SPILL>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNONYM PUSH PRESS>
<SYNTAX PUT OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT ;*>
<SYNTAX PUT OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNTAX PUT DOWN OBJECT (HELD MANY HAVE) = V-DROP>
<SYNTAX PUT OBJECT (CARRIED HELD HAVE) UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUT OBJECT (CARRIED HELD HAVE) AGAINST OBJECT = V-LEAN>
<SYNONYM PUT STUFF INSERT PLACE>
<SYNTAX RAISE OBJECT = V-RAISE ;*>
<SYNTAX RAISE UP OBJECT = V-RAISE>
<SYNTAX RAISE OBJECT OFF OBJECT = V-TAKE>
<SYNONYM RAISE LIFT>
<SYNTAX RAPE OBJECT (FIND PERSON) = V-RAPE>
<SYNONYM RAPE MOLEST>
<SYNTAX READ
OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-READ PRE-READ ; *>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
OBJECT = V-READ PRE-READ>
<SYNTAX READ
OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
WITH
OBJECT
= V-READ PRE-READ>
<SYNONYM READ SKIM>
<SYNTAX RING OBJECT (TAKE) = V-RING ;*>
<SYNTAX RING OBJECT (TAKE) WITH OBJECT = V-RING>
<SYNONYM RING PEAL>
<SYNTAX RUB OBJECT = V-RUB>
<SYNTAX RUB OBJECT WITH OBJECT (TAKE HAVE) = V-RUB>
<SYNTAX RUB OBJECT (TAKE HAVE) OVER OBJECT = V-RUB-OVER PRE-RUB-OVER>
<SYNTAX RUB OBJECT (TAKE HAVE) ON OBJECT = V-RUB-OVER PRE-RUB-OVER>
<SYNONYM RUB TOUCH FEEL SHADE>
<SYNTAX SCRIPT = V-SCRIPT>
<SYNTAX UNSCRIPT = V-UNSCRIPT>
<SYNTAX SEND FOR OBJECT = V-SEND-FOR>
<SYNTAX SHAKE OBJECT = V-SHAKE>
<SYNTAX SHOW OBJECT TO OBJECT (FIND PERSON) = V-SSHOW PRE-SSHOW>
<SYNTAX SHOW OBJECT (FIND PERSON) OBJECT = V-SHOW>
<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX SKIP = V-SKIP>
<SYNONYM SKIP HOP>
<SYNTAX SMELL OBJECT = V-SMELL>
<SYNONYM SMELL SNIFF>
<SYNTAX SQUEEZE OBJECT = V-SQUEEZE>
<SYNTAX SQUEEZE OBJECT ON OBJECT = V-PUT PRE-PUT>
<SYNTAX STRIKE
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND WEAPONBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE)
= V-ATTACK>
<SYNTAX STRIKE
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-ATTACK ;*>
<SYNTAX STRIKE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-LAMP-ON>
<SYNTAX SWIM = V-SWIM>
<SYNTAX SWIM IN OBJECT = V-SWIM>
<SYNONYM SWIM BATHE WADE>
<SYNTAX SWING
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
= V-SWING>
<SYNTAX SWING
OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE)
AT
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-SWING>
<SYNONYM SWING THRUST>
<SYNTAX TAKE
OBJECT (FIND TAKEBIT)
(ON-GROUND MANY)
= V-TAKE PRE-TAKE ;*>
;<SYNTAX TAKE IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX TAKE OUT OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
<SYNTAX TAKE ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX TAKE
OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
OUT
OBJECT
= V-TAKE PRE-TAKE>
<SYNTAX TAKE
OBJECT (FIND TAKEBIT) (CARRIED IN-ROOM MANY)
OFF
OBJECT
= V-TAKE PRE-TAKE>
<SYNTAX TAKE
OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED MANY)
FROM
OBJECT
= V-TAKE PRE-TAKE>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED TAKE HAVE)
UP OBJECT = V-HOLD-UP>
<SYNTAX TAKE UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX TAKE OBJECT TO OBJECT = V-SHOW>
<SYNONYM TAKE GET HOLD CARRY REMOVE LEAD>
<SYNTAX TASTE OBJECT = V-TASTE>
<SYNTAX TELL OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNTAX TELL OBJECT (FIND PERSON) ABOUT OBJECT = V-TELL-ME>
<SYNTAX SAY TO OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNTAX SAY = V-SAY>
<SYNONYM SAY TALK>
<SYNTAX THROW
OBJECT (HELD CARRIED HAVE)
AT
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-THROW-AT>
<SYNTAX THROW
OBJECT (HELD CARRIED HAVE)
WITH
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
= V-THROW-THROUGH>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) ON OBJECT = V-PUT PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OVER OBJECT = V-PUT PRE-PUT>
<SYNONYM THROW HURL CHUCK TOSS>
<SYNTAX TIE OBJECT TO OBJECT = V-TIE PRE-TIE>
<SYNTAX TIE UP
OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-TIE-UP>
<SYNONYM TIE FASTEN SECURE ATTACH>
<SYNTAX TURN OBJECT (FIND TURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN PRE-TURN>
<SYNTAX TURN IN OBJECT (FIND TURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN PRE-TURN>
<SYNTAX TURN TO OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN PRE-TURN>
<SYNTAX TURN ON
OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-LAMP-ON>
<SYNTAX TURN OFF
OBJECT (FIND LIGHTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-LAMP-OFF>
<SYNTAX TURN UP OBJECT = V-TURN-UP>
<SYNTAX TURN DOWN OBJECT = V-TURN-DOWN>
<SYNONYM TURN FLIP SHUT>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) = V-UNLOCK>
<SYNTAX UNTIE
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
= V-UNTIE PRE-UNTIE ;*>
<SYNTAX UNTIE
OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
FROM
OBJECT
= V-UNTIE PRE-UNTIE>
<SYNONYM UNTIE FREE UNFASTEN UNATTACH UNHOOK>
<SYNTAX USE OBJECT = V-USE>
<SYNTAX WAIT = V-WAIT>
<SYNTAX WAIT OBJECT = V-WAIT-FOR>
<SYNTAX WAIT UNTIL OBJECT = V-WAIT-UNTIL>
<SYNTAX WAIT FOR OBJECT = V-WAIT-FOR>
<SYNTAX WAKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ALARM ;*>
<SYNTAX WAKE UP OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ALARM>
<SYNONYM WAKE AWAKE SURPRISE STARTLE>
<SYNTAX WALK OBJECT = V-WALK>
<SYNTAX WALK TO OBJECT = V-THROUGH>
<SYNTAX WALK IN OBJECT = V-THROUGH>
<SYNTAX WALK WITH OBJECT = V-THROUGH>
<SYNTAX WALK AROUND OBJECT = V-WALK-AROUND>
<SYNTAX WALK UP OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-UP>
<SYNTAX WALK DOWN OBJECT (FIND CLIMBBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX WALK BEHIND OBJECT = V-HIDE-BEHIND>
<SYNTAX WALK OBJECT OVER OBJECT = V-RUN-OVER>
<SYNONYM WALK GO RUN PROCEED>
<SYNTAX WAVE OBJECT (HELD CARRIED) = V-WAVE>
<SYNTAX WAVE OBJECT (HELD CARRIED) AT OBJECT = V-WAVE>
<SYNONYM WAVE BRANDISH>
<SYNTAX WRITE WITH OBJECT = V-WRITE>
<SYNTAX WRITE ON OBJECT WITH OBJECT = V-WRITE>
;"Simple questions"
<SYNTAX WHAT OBJECT = V-WHAT>
<SYNTAX WHAT ABOUT OBJECT = V-WHAT>
<SYNTAX WHAT IN OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY) = V-LOOK-INSIDE>
<SYNTAX WHAT ON OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY) = V-LOOK-INSIDE>
<SYNONYM WHAT WHATS WHO>
<SYNTAX KNOW ABOUT OBJECT = V-WHAT>
<SYNTAX KNOW WHERE OBJECT = V-FIND PRE-FIND>
;"Yes,no"
<SYNTAX YES = V-YN>
<SYNONYM YES NO MAYBE>
<SYNTAX THANKS = V-THANKS>
<SYNTAX THANKS OBJECT = V-THANKS>
<SYNONYM THANKS THANK>
<SYNTAX $VERIFY = V-$VERIFY>
<SYNTAX WHEN = V-THANKS>
<SYNONYM WHEN DID WHY HOW>