Revision 53 (Original Source)

This commit is contained in:
historicalsource 2019-04-13 21:59:32 -04:00
commit ef6e803369
15 changed files with 16637 additions and 0 deletions

1
README.md Normal file
View file

@ -0,0 +1 @@
# infocom-sampler

1768
a.zil Normal file

File diff suppressed because it is too large Load diff

1770
actions.zil Normal file

File diff suppressed because it is too large Load diff

48
csampler.zil Normal file
View file

@ -0,0 +1,48 @@
"DEMO for
SAMPLER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
<SET REDEFINE T>
;<GLOBAL BIGFIX 10000>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<DEFINE IFILE (STR "OPTIONAL" (FLOAD? <>) "AUX" (TIM <TIME>))
<INSERT-FILE .STR .FLOAD?>>
<PRINC "Sampler ZORK I: The Great Underground Empire
">
<OR <GASSIGNED? INSERT-CRUFTY>
<DEFINE INSERT-CRUFTY (STR) <INSERT-FILE .STR T>>>
<COND (<GASSIGNED? PREDGEN>
<ID 0>)>
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>
<PROPDEF VALUE 0>
<PROPDEF TVALUE 0>
<IFILE "MISC" T>
<IFILE "SYNTAX" T>
<IFILE "DUNGEON" T>
<IFILE "GLOBALS" T>
<IFILE "PARSER" T>
<IFILE "VERBS" T>
<IFILE "ACTIONS" T>
<IFILE "TUTORIAL" T>
<IFILE "PLANETFALL" T>
<IFILE "INFIDEL" T>
<GC 0 T>
<DEFINE CNT (STR OBL)
<PRINC .STR>
<PRIN1 <MAPF ,+ ,LENGTH .OBL>>
<CRLF>>
<COND (<NOT <GASSIGNED? PREDGEN>>
<GC-MON T>)>

1515
dungeon.zil Normal file

File diff suppressed because it is too large Load diff

279
globals.zil Normal file
View file

@ -0,0 +1,279 @@
"GLOBALS for
SAMPLER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
<OBJECT GLOBAL-OBJECTS
(FLAGS RMUNGBIT INVISIBLE TOUCHBIT SURFACEBIT TRYTAKEBIT OPENBIT
SEARCHBIT TRANSBIT ONBIT RLANDBIT FIGHTBIT STAGGERED WEARBIT)>
<OBJECT LOCAL-GLOBALS
(IN GLOBAL-OBJECTS)
(SYNONYM ZZMGCK) ;"Yes, this synonym needs to exist... sigh"
(DESCFCN PATH-OBJECT)
(GLOBAL GLOBAL-OBJECTS)
(FDESC "F")
(LDESC "F")
(PSEUDO "FOOBAR" V-WALK)
(CONTFCN 0)
(VTYPE 1)
(SIZE 0)
(CAPACITY 0)>
<OBJECT ROOMS
(IN TO ROOMS)>
<OBJECT INTNUM
(IN GLOBAL-OBJECTS)
(SYNONYM INTNUM)
(FLAGS TOOLBIT)
(DESC "number")>
<OBJECT PSEUDO-OBJECT
(IN LOCAL-GLOBALS)
(DESC "pseudo")
(ACTION ME-F)>
<OBJECT IT
(IN GLOBAL-OBJECTS)
(SYNONYM IT THEM HER HIM)
(DESC "it")
(FLAGS NDESCBIT TOUCHBIT)>
<OBJECT NOT-HERE-OBJECT
(DESC "thing")
(ACTION NOT-HERE-OBJECT-F)>
<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) OBJ)
;"This COND is game independent (except the TELL)"
<COND (<AND <EQUAL? ,PRSO ,NOT-HERE-OBJECT>
<EQUAL? ,PRSI ,NOT-HERE-OBJECT>>
<TELL "Those things aren't here!" CR>
<RTRUE>)
(<EQUAL? ,PRSO ,NOT-HERE-OBJECT>
<SET TBL ,P-PRSO>)
(T
<SET TBL ,P-PRSI>
<SET PRSO? <>>)>
;"Here is the default 'cant see any' printer"
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<COND (<EQUAL? ,WINNER ,PLAYER>
<TELL "You can't see any">
<NOT-HERE-PRINT .PRSO?>
<TELL " here!" CR>
<COND (<AND ,TUTORIAL-MODE <NOT ,CANT-SEE-FLAG>>
<SETG CANT-SEE-FLAG T>
<TELL "|
(In this case, you referred to an object in the game that was not
accessible to you. This may mean that the object is in a different
location from your own, or that it's in a closed container.)" CR>)>)
(T
<TELL "The " D ,WINNER " seems confused. \"I don't see any">
<NOT-HERE-PRINT .PRSO?>
<TELL " here!\"" CR>)>
<RTRUE>>
<GLOBAL CANT-SEE-FLAG <>>
;<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ)
;"not referenced, removed 2/27/85 by SEM"
;"Here is where special-case code goes. <MOBY-FIND .TBL> returns
number of matches. If 1, then P-MOBY-FOUND is it. One may treat
the 0 and >1 cases alike or different. It doesn't matter. Always
return RFALSE (not handled) if you have resolved the problem."
<SET M-F <MOBY-FIND .TBL>>
<COND (,DEBUG
<TELL "[Moby-found " N .M-F " objects" "]" CR>)>
<COND (<AND <G? .M-F 1>
<SET OBJ <GETP <1 .TBL> ,P?GLOBAL>>>
<SET M-F 1>
<SETG P-MOBY-FOUND .OBJ>)>
<COND (<==? 1 .M-F>
<COND (,DEBUG <TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>
<COND (.PRSO? <SETG PRSO ,P-MOBY-FOUND>)
(T <SETG PRSI ,P-MOBY-FOUND>)>
<RFALSE>)
(<NOT .PRSO?>
<TELL "You wouldn't find any">
<NOT-HERE-PRINT .PRSO?>
<TELL " there." CR>
<RTRUE>)
(T ,NOT-HERE-OBJECT)>>
;<ROUTINE GLOBAL-NOT-HERE-PRINT (OBJ) ;"not referenced, removed 2/27/85 by SEM"
;<COND (,P-MULT <SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>)>
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<TELL "You can't see any">
<COND (<EQUAL? .OBJ ,PRSO> <PRSO-PRINT>)
(T <PRSI-PRINT>)>
<TELL " here." CR>>
<ROUTINE NOT-HERE-PRINT (PRSO?)
<COND (<OR ,P-OFLAG ,P-MERGED>
<COND (,P-XADJ <TELL " "> <PRINTB ,P-XADJN>)>
<COND (,P-XNAM
<COND (<EQUAL? ,P-XNAM ,W?FLOYD> <TELL "Floyd">)
(T <TELL " "> <PRINTB ,P-XNAM>)>)>)
(.PRSO?
<BUFFER-PRINT <GET ,P-ITBL ,P-NC1> <GET ,P-ITBL ,P-NC1L> <>>)
(T
<BUFFER-PRINT <GET ,P-ITBL ,P-NC2> <GET ,P-ITBL ,P-NC2L> <>>)>>
/^L
<GLOBAL LOAD-MAX 100>
<GLOBAL LOAD-ALLOWED 100>
<OBJECT STAIRS
(IN LOCAL-GLOBALS)
(SYNONYM STAIRS STEPS STAIRCASE STAIRWAY ;GANGWAY)
(ADJECTIVE STONE DARK MARBLE FORBIDDING STEEP)
(DESC "flight of stairs")
(FLAGS NDESCBIT CLIMBBIT)
(ACTION STAIRS-F)>
<ROUTINE STAIRS-F ()
<COND (<VERB? THROUGH>
<TELL
"You should indicate whether you want to go up or down." CR>)>>
<OBJECT GROUND
(IN GLOBAL-OBJECTS)
(SYNONYM GROUND SAND DIRT FLOOR)
(DESC "ground")
(ACTION GROUND-FUNCTION)>
<ROUTINE GROUND-FUNCTION ()
<COND (<AND <VERB? PUT PUT-ON>
<EQUAL? ,PRSI ,GROUND>>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<VERB? SIT CLIMB-ON>
<SETG C-ELAPSED 28>
<TELL
"You sit down on the floor. After a while, you stand up again." CR>)
(<AND <VERB? EXAMINE>
<EQUAL? ,HERE ,ADMIN-CORRIDOR-S>>
<TELL "A narrow, jagged crevice runs across the floor." CR>)
(<VERB? DIG>
<TELL "The ground is too hard for digging here." CR>)>>
<OBJECT GRUE
(IN GLOBAL-OBJECTS)
(DESC "lurking grue")
(SYNONYM GRUE)
(ADJECTIVE LURKING VICIOUS CARNIV SINISTER HUNGRY SILENT)
(ACTION GRUE-F)>
<ROUTINE GRUE-F ()
<COND (<VERB? EXAMINE>
<COND (<EQUAL? ,GAME-FLAG 2>
<TELL
"Grues are vicious, carnivorous beasts first introduced to Earth by a
visiting alien spaceship during the late 22nd century. Grues spread throughout
the galaxy alongside man. Although now extinct on all civilized planets,
they still exist in some backwater corners of the galaxy. Their favorite diet
is Ensigns Seventh Class, but their insatiable appetite is tempered by their
fear of light." CR>)
(T
<TELL
"The grue is a sinister, lurking presence in the dark places of the
earth. Its favorite diet is adventurers, but its insatiable appetite
is tempered by its fear of light. No grue has ever been seen by the
light of day, and few have survived its fearsome jaws to tell the tale." CR>)>)
(<VERB? FIND>
<TELL
"There is no grue here, but I'm sure there is at least one lurking
in the darkness nearby. I wouldn't ">
<COND (<EQUAL? ,GAME-FLAG 2>
<TELL "spend much time in the dark">)
(T <TELL "let my light go out">)>
<TELL " if I were you!" CR>)
(<VERB? LISTEN>
<TELL
"It makes no sound but is always lurking in the darkness nearby." CR>)
(T <TELL "There is no grue here, and a good thing too." CR>)>>
<OBJECT ME
(IN GLOBAL-OBJECTS)
(SYNONYM ME MYSELF SELF CRETIN)
(DESC "you")
(FLAGS ACTORBIT)
(ACTION ME-F)>
<ROUTINE ME-F ()
<COND (<VERB? TELL>
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<TELL
"Talking to yourself is said to be a sign of impending mental collapse." CR>)
(<AND <VERB? GIVE>
<EQUAL? ,PRSI ,ME>>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<VERB? FOLLOW>
<TELL "It would be hard not to." CR>)
(<VERB? SMELL>
<TELL "Phew!" CR>)
(<VERB? DROP>
<TELL "Huh?" CR>)
(<VERB? MAKE>
<TELL "Only you can do that." CR>)
(<VERB? DISEMBARK>
<TELL "You'll have to do that on your own." CR>)
(<VERB? EAT>
<TELL "Auto-cannibalism is not the answer." CR>)
(<VERB? ATTACK MUNG>
<COND (<AND ,PRSI <FSET? ,PRSI ,WEAPONBIT>>
<JIGS-UP "If you insist.... Poof, you're dead!">)
(T
<TELL "Suicide is not the answer." CR>)>)
(<VERB? TAKE>
<TELL "How romantic!" CR>)
(<VERB? ALARM>
<TELL "You're awake." CR>)
(<VERB? EXAMINE>
<TELL
"That's difficult unless your eyes are prehensile." CR>)>>
<OBJECT ADVENTURER
(SYNONYM ADVENTURER)
(DESC "cretin")
(FLAGS NDESCBIT INVISIBLE ACTORBIT)
(STRENGTH 0)
(ACTION 0)>
<OBJECT PATHOBJ
(IN GLOBAL-OBJECTS)
(SYNONYM PASSAGE CRAWLWAY TRAIL PATH)
(ADJECTIVE FOREST NARROW LONG WINDING)
(DESC "path")
(FLAGS NDESCBIT)
(ACTION PATH-OBJECT)>
<ROUTINE PATH-OBJECT ()
<COND (<VERB? TAKE FOLLOW>
<TELL "You must specify a direction to go." CR>)
(<VERB? FIND>
<TELL "I can't help you there...." CR>)
(<VERB? DIG>
<TELL "Not a chance." CR>)>>
<OBJECT HANDS
(IN GLOBAL-OBJECTS)
(SYNONYM PAIR HANDS HAND)
(ADJECTIVE BARE)
(DESC "pair of hands")
(FLAGS NDESCBIT TOOLBIT)
(ACTION HANDS-F)>
<OBJECT GLOBAL-DUST
(IN GLOBAL-OBJECTS)
(SYNONYM DUST)
(DESC "clump of dust")
(ACTION GLOBAL-DUST-F)>
<ROUTINE GLOBAL-DUST-F ()
<TELL "Are you really that fascinated by dust?" CR>>

2515
infidel.zil Normal file

File diff suppressed because it is too large Load diff

572
misc.zil Normal file
View file

@ -0,0 +1,572 @@
"MISC for
SAMPLER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
;"former MACROS file"
<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>>)
(<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 "A">
<=? .P "AN">>
<MAPRET <FORM PRINTA .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 ZSTRING>
<MAPRET <FORM PRINTI .E>>)
(<TYPE? .E FORM LVAL GVAL>
<MAPRET <FORM PRINT .E>>)
(ELSE <ERROR UNKNOWN-TYPE .E>)>>>>>
<ROUTINE PRINTA (O)
<COND (<FSET? .O ,VOWELBIT>
<TELL "an " D .O>)
(T
<TELL "a " D .O>)>>
<DEFMAC VERB? ("ARGS" ATMS)
<MULTIFROB PRSA .ATMS>>
<DEFMAC PRSO? ("ARGS" ATMS)
<MULTIFROB PRSO .ATMS>>
<DEFMAC PRSI? ("ARGS" ATMS)
<MULTIFROB PRSI .ATMS>>
<DEFMAC ROOM? ("ARGS" ATMS)
<MULTIFROB HERE .ATMS>>
<DEFINE MULTIFROB (X ATMS "AUX" (OO (OR)) (O .OO) (L ()) ATM)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .OO 1> <ERROR .X>)
(<LENGTH? .OO 2> <NTH .OO 2>)
(ELSE <CHTYPE .OO FORM>)>>)>
<REPEAT ()
<COND (<EMPTY? .ATMS> <RETURN!->)>
<SET ATM <NTH .ATMS 1>>
<SET L
(<COND (<TYPE? .ATM ATOM>
<FORM GVAL
<COND (<==? .X PRSA>
<PARSE
<STRING "V?"
<SPNAME .ATM>>>)
(ELSE .ATM)>>)
(ELSE .ATM)>
!.L)>
<SET ATMS <REST .ATMS>>
<COND (<==? <LENGTH .L> 3> <RETURN!->)>>
<SET O <REST <PUTREST .O (<FORM EQUAL? <FORM GVAL .X> !.L>)>>>
<SET L ()>>>
<DEFMAC BSET ('OBJ "ARGS" BITS)
<MULTIBITS FSET .OBJ .BITS>>
<DEFMAC BCLEAR ('OBJ "ARGS" BITS)
<MULTIBITS FCLEAR .OBJ .BITS>>
<DEFMAC BSET? ('OBJ "ARGS" BITS)
<MULTIBITS FSET? .OBJ .BITS>>
<DEFINE MULTIBITS (X OBJ ATMS "AUX" (O ()) ATM)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .O 1> <NTH .O 1>)
(<==? .X FSET?> <FORM OR !.O>)
(ELSE <FORM PROG () !.O>)>>)>
<SET ATM <NTH .ATMS 1>>
<SET ATMS <REST .ATMS>>
<SET O
(<FORM .X
.OBJ
<COND (<TYPE? .ATM FORM> .ATM)
(ELSE <FORM GVAL .ATM>)>>
!.O)>>>
<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)
<COND (,LUCKY <G? .BASE <RANDOM 100>>)
(ELSE <G? .BASE <RANDOM 300>>)>>
<ROUTINE RANDOM-ELEMENT (FROB)
<GET .FROB <RANDOM <GET .FROB 0>>>>
<ROUTINE PICK-ONE (FROB
"AUX" (L <GET .FROB 0>) (CNT <GET .FROB 1>) RND MSG RFROB)
<SET L <- .L 1>>
<SET FROB <REST .FROB 2>>
<SET RFROB <REST .FROB <* .CNT 2>>>
<SET RND <RANDOM <- .L .CNT>>>
<SET MSG <GET .RFROB .RND>>
<PUT .RFROB .RND <GET .RFROB 1>>
<PUT .RFROB 1 .MSG>
<SET CNT <+ .CNT 1>>
<COND (<==? .CNT .L> <SET CNT 0>)>
<PUT .FROB 0 .CNT>
.MSG>
<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>
<DEFMAC DISABLE ('INT) <FORM PUT .INT ,C-ENABLED? 0>>
<ROUTINE FLAMING? (OBJ)
<AND <FSET? .OBJ ,FLAMEBIT> <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)>>
;"former MAIN file"
<GLOBAL C-ELAPSED 0>
<GLOBAL PLAYER <>>
<GLOBAL P-WON <>>
<CONSTANT M-FATAL 2>
<CONSTANT M-HANDLED 1>
<CONSTANT M-NOT-HANDLED <>>
<CONSTANT M-OBJECT <>>
<CONSTANT M-BEG 1>
<CONSTANT M-END 6>
<CONSTANT M-ENTER 2>
<CONSTANT M-LOOK 3>
<CONSTANT M-FLASH 4>
<CONSTANT M-OBJDESC 5>
<GLOBAL DEBUG <>>
<ROUTINE MAIN-LOOP ("AUX" ICNT OCNT NUM CNT OBJ TBL V PTBL OBJ1 TMP)
<REPEAT ()
<SETG C-ELAPSED 7>
<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 (<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 <>>)
(<NOT ,LIT>
<TELL "It's too dark to see." CR>)
(T
<TELL "It's not clear what you're referring to." CR>
<SET V <>>)>)
(T
<SETG P-NOT-HERE 0>
<SETG P-MULT <>>
<COND (<G? .NUM 1>
<SETG P-MULT T>)>
<SET TMP <>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .NUM>
<COND (<G? ,P-NOT-HERE 0>
<TELL "The ">
<COND (<NOT <EQUAL? ,P-NOT-HERE .NUM>>
<TELL "other ">)>
<TELL "object">
<COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
<TELL "s">)>
<TELL " that you mentioned ">
<COND (<NOT <EQUAL? ,P-NOT-HERE 1>>
<TELL "are">)
(T
<TELL "is">)>
<TELL "n't here." CR>)
(<NOT .TMP>
<TELL
"There's nothing here you can take." CR>)>
<RETURN>)
(T
<COND (.PTBL
<SET OBJ1 <GET ,P-PRSO .CNT>>)
(T
<SET OBJ1 <GET ,P-PRSI .CNT>>)>
<SETG PRSO <COND (.PTBL .OBJ1)
(T .OBJ)>>
<SETG PRSI <COND (.PTBL .OBJ)
(T .OBJ1)>>
<COND (<OR <G? .NUM 1>
<EQUAL?
<GET <GET ,P-ITBL ,P-NC1> 0> ,W?ALL>>
<COND (<EQUAL? .OBJ1 ,NOT-HERE-OBJECT>
<SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>
<AGAIN>)
(<AND <VERB? TAKE>
,PRSI
<EQUAL?
<GET <GET ,P-ITBL ,P-NC1> 0>
,W?ALL>
<NOT <IN? ,PRSO ,PRSI>>>
<AGAIN>)
(<AND <EQUAL? ,P-GETFLAGS ,P-ALL>
<VERB? TAKE>
<OR <AND <NOT <EQUAL?
<LOC .OBJ1>
,WINNER
,HERE>>
<NOT <FSET?
<LOC .OBJ1>
,SURFACEBIT>>>
<NOT <OR <FSET?
.OBJ1
,TAKEBIT>
<FSET?
.OBJ1
,TRYTAKEBIT>>>>>
<AGAIN>)
(T
<COND (<EQUAL? .OBJ1 ,IT>
<PRINTD ,P-IT-OBJECT>)
(T
<PRINTD .OBJ1>)>
<TELL ": ">)>)>
<SET TMP T>
<SET V <PERFORM ,PRSA ,PRSO ,PRSI>>
<COND (<==? .V ,M-FATAL>
<RETURN>)>)>>)>
<COND (<NOT <==? .V ,M-FATAL>>
;<COND (<==? <LOC ,WINNER> ,PRSO>
<SETG PRSO <>>)> ;"Retrofix 17"
<SET V <APPLY <GETP <LOC ,WINNER> ,P?ACTION> ,M-END>>)>
<COND (<VERB? AGAIN ;WALK SAVE RESTORE SCORE VERSION ;WAIT>
T)
(T
<SETG L-PRSA ,PRSA>
<SETG L-PRSO ,PRSO>
<SETG L-PRSI ,PRSI>
<SETG PRSI <>>)> ;"attempted AGAIN patch"
<COND (<VERB? TELL BRIEF SUPER-BRIEF VERBOSE
SAVE RESTORE HELP VERSION SCORE SAY>
<SETG C-ELAPSED 0>)>
<SETG INTERNAL-MOVES <+ ,INTERNAL-MOVES ,C-ELAPSED>>
<COND (<==? .V ,M-FATAL>
<SETG P-CONT <>>)>)
(T
<SETG P-CONT <>>)>
<COND (<EQUAL? ,GAME-FLAG 2>
<COND (<NOT <IN? ,CHRONOMETER ,ADVENTURER>>
<SETG MOVES 0>)
(T
<SETG MOVES ,INTERNAL-MOVES>)>)>
<COND (,P-WON
<COND (<VERB? TELL BRIEF SUPER-BRIEF VERBOSE
HELP SAVE RESTORE VERSION SCORE SAY>
T)
(T
<SET V <CLOCKER>>)>)>>>
<GLOBAL L-PRSA <>>
<GLOBAL L-PRSO <>>
<GLOBAL L-PRSI <>>
<GLOBAL P-MULT <>>
<GLOBAL P-NOT-HERE 0>
%<COND (<GASSIGNED? PREDGEN>
'<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" V OA OO OI)
<COND (,DEBUG
<TELL "[Perform: ">
%<COND (<GASSIGNED? PREDGEN> '<TELL N .A>)
(T '<PRINC <NTH ,ACTIONS <+ <* .A 2> 1>>>)>
<COND (.O
<COND (<NOT <==? .A ,V?WALK>>
<TELL "/" D .O>)
(T <TELL "/" N .O>)>)>
<COND (.I <TELL "/" D .I>)>
<TELL "]" CR>)>
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<COND (<AND <NOT <==? .A ,V?WALK>>
<OR <EQUAL? ,IT .I .O>
<EQUAL? ,NOT-HERE-OBJECT .I .O>>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<SETG P-WON <>> ;"to keep clock from running"
<RFATAL>)>
<COND (<==? .A ,V?WALK> T)
(<==? .O ,IT> <SET O ,P-IT-OBJECT>)
(<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
<SETG PRSA .A>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <EQUAL? ,PRSI ,IT>> <NOT <VERB? WALK>>>
<SETG P-IT-OBJECT ,PRSO>
<SETG P-IT-LOC ,HERE>)>
<SETG PRSI .I>
<COND (<AND <NOT <VERB? WALK>>
<EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<SET V <NOT-HERE-OBJECT-F>>>
<SETG P-WON <>> ;"to keep clock from running"
.V)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<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>>
<LOC .O>
<SET V <APPLY <GETP <LOC .O> ,P?CONTFCN>>>>
.V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <APPLY <GETP .O ,P?ACTION>>>>
.V)
(<SET V <APPLY <GET ,ACTIONS .A>>> .V)>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>)
(T
'<PROG ()
<SETG DEBUG <>>
<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)
<COND (,DEBUG
<TELL "** PERFORM: PRSA = ">
<PRINC <NTH ,ACTIONS <+ <* .A 2> 1>>>
<COND (.O
<COND (<==? .A ,V?WALK>
<TELL " | DIR = " N .O>)
(T <TELL " | PRSO = " D .O>)>)>
<COND (.I <TELL " | PRSI = " D .I>)>)>
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<COND (<AND <NOT <==? .A ,V?WALK>>
<EQUAL? ,IT .I .O>
<NOT <EQUAL? ,P-IT-LOC ,HERE>>>
<TELL "I don't see what you are referring to." CR>
<RFATAL>)>
<COND (<==? .A ,V?WALK> T)
(<==? .O ,IT> <SET O ,P-IT-OBJECT>)
(<==? .I ,IT> <SET I ,P-IT-OBJECT>)>
<SETG PRSA .A>
<SETG PRSO .O>
<COND (<AND ,PRSO <NOT <VERB? WALK>>>
<SETG P-IT-OBJECT ,PRSO>
<SETG P-IT-LOC ,HERE>)>
<SETG PRSI .I>
<COND (<AND <NOT <VERB? WALK>>
<EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<SET V <D-APPLY "Not Here" ,NOT-HERE-OBJECT-F>>> .V)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<COND (<SET V <DD-APPLY "Actor" ,WINNER
<GETP ,WINNER ,P?ACTION>>> .V)
(<SET V <D-APPLY "Room (M-BEG)"
<GETP <LOC ,WINNER> ,P?ACTION>
,M-BEG>> .V)
(<SET V <D-APPLY "Preaction"
<GET ,PREACTIONS .A>>> .V)
(<AND .I <SET V <D-APPLY "PRSI"
<GETP .I ,P?ACTION>>>> .V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<LOC .O>
<GETP <LOC .O> ,P?CONTFCN>
<SET V <DD-APPLY "Container" <LOC .O>
<GETP <LOC .O> ,P?CONTFCN>>>>
.V)
(<AND .O
<NOT <==? .A ,V?WALK>>
<SET V <D-APPLY "PRSO"
<GETP .O ,P?ACTION>>>>
.V)
(<SET V <D-APPLY <>
<GET ,ACTIONS .A>>> .V)>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>
<DEFINE D-APPLY (STR FCN "OPTIONAL" FOO "AUX" RES)
<COND (<NOT .FCN> <>)
(T
<COND (,DEBUG
<COND (<NOT .STR>
<TELL CR " Default ->" CR>)
(T <TELL CR " " .STR " -> ">)>)>
<SET RES
<COND (<ASSIGNED? FOO>
<APPLY .FCN .FOO>)
(T <APPLY .FCN>)>>
<COND (<AND ,DEBUG .STR>
<COND (<==? .RES 2>
<TELL "Fatal" CR>)
(<NOT .RES>
<TELL "Not handled">)
(T <TELL "Handled" CR>)>)>
.RES)>>
<ROUTINE DD-APPLY (STR OBJ FCN "OPTIONAL" (FOO <>))
<COND (,DEBUG <TELL "[" D .OBJ "=]">)>
<D-APPLY .STR .FCN .FOO>>
>)>
;"former CLOCK file"
<CONSTANT C-TABLELEN 180>
<GLOBAL C-TABLE <ITABLE NONE 180>>
<GLOBAL C-DEMONS 180>
<GLOBAL C-INTS 180>
<CONSTANT C-INTLEN 6>
<CONSTANT C-ENABLED? 0>
<CONSTANT C-TICK 1>
<CONSTANT C-RTN 2>
;<ROUTINE DEMON (RTN TICK "AUX" CINT) ;"not referenced, removed 2/27/85 by SEM"
#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>)
(<EQUAL? <GET .C ,C-RTN> .RTN> <RETURN .C>)>
<SET C <REST .C ,C-INTLEN>>>>
<GLOBAL CLOCK-WAIT <>>
<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>)>
<SET C <REST ,C-TABLE <COND (,P-WON ,C-INTS) (T ,C-DEMONS)>>>
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<REPEAT ()
<COND (<==? .C .E>
<COND (<AND <NOT <EQUAL? ,GAME-FLAG 2>>
<G? <SETG MOVES <+ ,MOVES 1>> 999>>
<SETG MOVES 0>)>
<RETURN .FLG>)
(<NOT <0? <GET .C ,C-ENABLED?>>>
<SET TICK <GET .C ,C-TICK>>
<COND (<0? .TICK>)
(<AND <EQUAL? ,GAME-FLAG 2>
<==? .TICK -1>>
<COND (<APPLY <GET .C ,C-RTN>>
<SET FLG T>)>)
(T
<COND (<EQUAL? ,GAME-FLAG 2>
<PUT .C ,C-TICK
<SET TICK <- .TICK ,C-ELAPSED>>>)
(T
<PUT .C ,C-TICK <- .TICK 1>>)>
<COND (<NOT <G? .TICK 1>>
<COND (<EQUAL? ,GAME-FLAG 2>
<PUT .C ,C-TICK 0>)>
<COND (<APPLY <GET .C ,C-RTN>>
<SET FLG T>)>)>)>)>
<SET C <REST .C ,C-INTLEN>>>>

1528
parser.zil Normal file

File diff suppressed because it is too large Load diff

2414
planetfall.zil Normal file

File diff suppressed because it is too large Load diff

13
quit.zil Normal file
View file

@ -0,0 +1,13 @@
<ROUTINE V-QUIT ("OPTIONAL" (ASK? T) "AUX" SCOR)
#DECL ((ASK?) <OR ATOM <PRIMTYPE LIST>> (SCOR) FIX)
<V-SCORE>
<COND (.ASK?
<SAY-SURE>
<TELL "leave the story now?">
<COND (<YES?>
<QUIT>)
(T
<TELL ,OKAY "the story continues..." CR>)>)
(T
<QUIT>)>>

48
sampler.zil Normal file
View file

@ -0,0 +1,48 @@
"DEMO for--
SAMPLER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
<SET REDEFINE T>
;<GLOBAL BIGFIX 10000>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<DEFINE IFILE (STR "OPTIONAL" (FLOAD? <>) "AUX" (TIM <TIME>))
<INSERT-FILE .STR .FLOAD?>>
<PRINC "Sampler ZORK I: The Great Underground Empire
">
<OR <GASSIGNED? INSERT-CRUFTY>
<DEFINE INSERT-CRUFTY (STR) <INSERT-FILE .STR T>>>
<COND (<GASSIGNED? PREDGEN>
<ID 0>)>
<IFILE "MISC" T>
<IFILE "SYNTAX" T>
<IFILE "DUNGEON" T>
<IFILE "GLOBALS" T>
<IFILE "PARSER" T>
<IFILE "VERBS" T>
<IFILE "ACTIONS" T>
<IFILE "TUTORIAL" T>
<IFILE "PLANETFALL" T>
<IFILE "INFIDEL" T>
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>
<PROPDEF VALUE 0>
<PROPDEF TVALUE 0>
<GC 0 T>
<DEFINE CNT (STR OBL)
<PRINC .STR>
<PRIN1 <MAPF ,+ ,LENGTH .OBL>>
<CRLF>>
<COND (<NOT <GASSIGNED? PREDGEN>>
<GC-MON T>)>

634
syntax.zil Normal file
View file

@ -0,0 +1,634 @@
"SYNTAX for
DEMO
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
"Buzzwords, Prepositions and Directions"
<BUZZ A AN THE IS AND OF THEN ALL ONE BUT EXCEPT \. \, \" YES NO Y HERE
TUTORIAL PLANET INFIDE WITNES PROPAG NOTHIN BLATAN>
<SYNONYM WITH USING>
<SYNONYM THROUGH THRU> ;"broken out from WITH by JW - 3/21/85"
<SYNONYM IN INSIDE INTO>
<SYNONYM ON ONTO>
<SYNONYM UNDER UNDERNEATH BENEATH BELOW>
<SYNONYM NORTH N FORE FORWARD FOREWARD F>
<SYNONYM SOUTH S AFT>
<SYNONYM EAST E STARBOARD SB>
<SYNONYM WEST W PORT P>
<SYNONYM DOWN D>
<SYNONYM UP U>
;<SYNONYM NW NORTHWEST>
;<SYNONYM NE NORTHE>
;<SYNONYM SW SOUTHWEST>
;<SYNONYM SE SOUTHE>
^L
"Game Commands"
<SYNTAX VERBOSE = V-VERBOSE>
<SYNTAX BRIEF = V-BRIEF>
<SYNTAX SUPER = V-SUPER-BRIEF>
<SYNONYM SUPER SUPERBRIEF>
<SYNTAX DIAGNOSE = V-DIAGNOSE>
<SYNTAX INVENTORY = V-INVENTORY>
<SYNONYM INVENTORY I>
<SYNTAX QUIT = V-QUIT>
<SYNONYM QUIT Q>
<SYNTAX RESTART = V-RESTART>
<SYNTAX RESTORE = V-RESTORE>
<SYNTAX SAVE = V-SAVE>
<SYNTAX SCORE = V-SCORE>
<SYNTAX SCRIPT = V-SCRIPT>
<SYNTAX UNSCRIPT = V-UNSCRIPT>
<SYNTAX VERSION = V-VERSION>
<SYNTAX $VERIFY = V-VERIFY>
<SYNTAX $DEBUG = V-DEBUG>
^L
"Real Verbs"
<SYNTAX ACTIVATE OBJECT (FIND LIGHTBIT)
(HELD CARRIED ON-GROUND IN-ROOM) = V-LAMP-ON>
<SYNTAX AGAIN = V-AGAIN>
<SYNONYM AGAIN G>
<SYNTAX ANSWER = V-ANSWER>
<SYNTAX ANSWER OBJECT = V-REPLY>
<SYNONYM ANSWER REPLY>
<SYNTAX APPLY OBJECT TO OBJECT = V-PUT PRE-PUT>
<SYNTAX ATTACK OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-ATTACK>
<SYNONYM ATTACK FIGHT HURT INJURE HIT>
<SYNTAX BACK = V-BACK>
<SYNTAX BLAST = V-BLAST>
<SYNTAX BLOW OUT OBJECT = V-LAMP-OFF>
<SYNTAX BLOW UP OBJECT WITH
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED) = V-INFLATE>
<SYNTAX BLOW UP OBJECT = V-BLAST>
<SYNTAX BLOW IN OBJECT = V-BREATHE>
<SYNTAX BOARD OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX BRUSH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-BRUSH>
<SYNTAX BRUSH OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT = V-BRUSH>
<SYNONYM BRUSH CLEAN>
<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 CATCH OBJECT IN OBJECT = V-CATCH>
<SYNTAX CATCH OBJECT WITH OBJECT = V-CATCH>
<SYNTAX TRAP OBJECT IN OBJECT = V-CATCH>
<SYNTAX TRAP OBJECT WITH OBJECT = V-CATCH>
<SYNONYM CATCH SNARE CAPTURE>
<SYNTAX CHOMP = V-CHOMP>
<SYNONYM CHOMP LOSE BARF>
<SYNTAX CLIMB = V-CLIMB-UP>
<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>
<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX CLIMB THROUGH OBJECT = V-THROUGH>
<SYNTAX CLOSE OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM) = V-CLOSE>
<SYNONYM CLOSE SHUT COLLAPSE SHORTEN>
<SYNTAX COMMAND OBJECT (FIND ACTORBIT) = V-COMMAND>
<SYNTAX COUNT OBJECT = V-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 ACTORBIT) = V-CURSES>
<SYNONYM CURSE DAMN SHIT FUCK TROT KRIP MEGAKRIP TROTTING>
<SYNTAX DEFLATE OBJECT = V-DEFLATE>
<SYNTAX DESTROY OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH OBJECT (HELD CARRIED TAKE) = V-MUNG PRE-MUNG>
<SYNTAX DESTROY DOWN OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH OBJECT (HELD CARRIED TAKE) = V-MUNG PRE-MUNG>
<SYNTAX DESTROY IN OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-OPEN>
<SYNONYM DESTROY DAMAGE BREAK BLOCK SMASH>
<SYNTAX DIG IN OBJECT = V-DIG PRE-DIG>
<SYNTAX DIG
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
= V-DIG PRE-DIG ;*>
<SYNTAX DIG
IN
OBJECT (ON-GROUND IN-ROOM)
WITH
OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
= V-DIG PRE-DIG>
<SYNTAX DIG OBJECT IN OBJECT = V-HOLE-DIG>
<SYNTAX DIG WITH OBJECT = V-DIG-WITH>
<SYNTAX DISEMBARK OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM)
= V-DISEMBARK>
<SYNTAX DISENCHANT OBJECT = V-DISENCHANT>
<SYNTAX DRINK OBJECT (FIND DRINKBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-DRINK>
<SYNTAX DRINK FROM OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-DRINK-FROM>
<SYNTAX DRINK OBJECT FROM OBJECT (HELD CARRIED) = V-DRINK-FROM>
<SYNONYM DRINK SIP IMBIBE SWALLOW>
<SYNTAX DROP OBJECT (HELD MANY HAVE) = V-DROP PRE-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-ON PRE-PUT>
<SYNONYM DROP RELEASE>
<SYNTAX EAT OBJECT (FIND FOODBIT) (HELD CARRIED ON-GROUND IN-ROOM ;HAVE)
= V-EAT PRE-EAT>
<SYNONYM EAT CONSUME TASTE BITE>
<SYNTAX ECHO = V-ECHO>
<SYNTAX ENTER = V-ENTER>
<SYNTAX ENTER OBJECT = V-THROUGH>
<SYNTAX EXIT = V-EXIT>
<SYNTAX EXIT OBJECT = V-EXIT>
<SYNTAX EXAMINE OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) ;(MANY)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX EXAMINE IN OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY)
= V-LOOK-INSIDE>
<SYNTAX EXAMINE ON OBJECT (HELD CARRIED IN-ROOM ON-GROUND MANY)
= V-LOOK-INSIDE>
<SYNONYM EXAMINE DESCRIBE WHAT WHATS>
<SYNTAX EXORCISE OBJECT = V-EXORCISE>
<SYNTAX EXORCISE OUT OBJECT (FIND ACTORBIT) = V-EXORCISE>
<SYNTAX EXORCISE AWAY OBJECT (FIND ACTORBIT) = V-EXORCISE>
<SYNONYM EXORCISE BANISH CAST DRIVE BEGONE>
<SYNTAX EXTINGUISH OBJECT (FIND ONBIT)
(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 ;PRE-FILL>
<SYNTAX FILL OBJECT (FIND CONTBIT)
(HELD CARRIED ON-GROUND IN-ROOM) = V-FILL ;PRE-FILL>
<SYNTAX FILL OUT OBJECT = V-FILL-OUT>
<SYNTAX FILL OUT OBJECT WITH OBJECT = V-FILL-OUT>
<SYNTAX FIND OBJECT = V-FIND>
<SYNONYM FIND WHERE SEEK SEE>
<SYNTAX FIRE OBJECT WITH OBJECT (HELD) = V-SZAP PRE-SZAP>
<SYNTAX FIRE OBJECT = V-ZAP PRE-ZAP>
<SYNTAX FIRE AT OBJECT = V-ZAP PRE-ZAP>
<SYNTAX FIRE OBJECT (HELD) AT OBJECT = V-ZAP>
<SYNONYM FIRE ZAP BLAST SHOOT ;BURN>
<SYNTAX FLUSH OBJECT = V-FLUSH>
<SYNTAX FOLD OBJECT = V-FOLD>
<SYNTAX UNFOLD OBJECT = V-UNFOLD>
<SYNTAX FOLLOW = V-FOLLOW>
<SYNTAX FOLLOW OBJECT = V-FOLLOW>
<SYNONYM FOLLOW PURSUE CHASE COME>
<SYNTAX FROBOZZ = V-FROBOZZ>
<SYNTAX GIVE OBJECT (MANY HELD HAVE)
TO OBJECT (FIND ACTORBIT) (ON-GROUND) = V-GIVE PRE-GIVE>
<SYNTAX GIVE OBJECT (FIND ACTORBIT) (ON-GROUND)
OBJECT (MANY HELD HAVE) = V-SGIVE PRE-SGIVE>
<SYNTAX HAND OBJECT (MANY HELD HAVE)
TO OBJECT (FIND ACTORBIT) (ON-GROUND) = V-GIVE PRE-GIVE>
<SYNTAX HAND OBJECT (FIND ACTORBIT) (ON-GROUND)
OBJECT (MANY HELD HAVE) = V-SGIVE PRE-SGIVE>
<SYNONYM GIVE DONATE OFFER FEED>
<SYNTAX HATCH OBJECT = V-HATCH>
<SYNTAX HELLO = V-HELLO>
<SYNTAX HELLO OBJECT = V-HELLO>
<SYNONYM HELLO HI>
<SYNTAX INFLAT OBJECT WITH
OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED) = V-INFLATE>
<SYNTAX IS OBJECT IN OBJECT = V-IS-IN>
<SYNTAX IS OBJECT ON OBJECT = V-IS-IN>
<SYNTAX JUMP = V-LEAP>
<SYNTAX JUMP OVER OBJECT = V-LEAP>
<SYNTAX JUMP ACROSS OBJECT = V-LEAP>
<SYNTAX JUMP IN OBJECT = V-LEAP>
<SYNTAX JUMP FROM OBJECT = V-LEAP>
<SYNTAX JUMP OFF OBJECT = V-LEAP>
<SYNONYM JUMP LEAP DIVE>
<SYNTAX KICK OBJECT = V-KICK>
<SYNONYM KICK TAUNT>
<SYNTAX KILL OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-ATTACK>
<SYNONYM KILL MURDER SLAY DISPATCH>
<SYNTAX STAB OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-STAB>
<SYNTAX STAB OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-ATTACK>
<SYNTAX KISS OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-KISS>
<SYNTAX KNOCK AT OBJECT = V-KNOCK>
<SYNTAX KNOCK ON OBJECT = V-KNOCK>
<SYNTAX KNOCK DOWN OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ATTACK>
<SYNONYM KNOCK RAP>
<SYNTAX LAUNCH OBJECT (FIND VEHBIT) = V-LAUNCH>
<SYNTAX LEAN ON OBJECT (HELD HAVE) = V-LEAN-ON>
<SYNTAX LEAVE = V-LEAVE>
<SYNTAX LEAVE OBJECT = V-DROP PRE-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 FOR 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 OBJECT = V-LOOK-CRETIN>
<SYNTAX LOOK AROUND OBJECT (FIND RMUNGBIT) = V-LOOK>
<SYNTAX LOOK DOWN OBJECT (FIND RMUNGBIT) = V-LOOK>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-EXAMINE
PRE-EXAMINE>
<SYNTAX LOOK ON OBJECT = V-LOOK-ON PRE-LOOK-ON>
<SYNTAX LOOK THROUGH OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) =
V-LOOK-INSIDE>
<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
<SYNTAX LOOK UP OBJECT (FIND RMUNGBIT) = V-LOOK-UP>
<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
<SYNTAX LOOK IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-LOOK-INSIDE>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT = V-READ PRE-READ>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
THROUGH OBJECT = V-READ PRE-READ>
<SYNTAX LOOK FOR OBJECT = V-FIND>
<SYNONYM LOOK L STARE GAZE>
<SYNTAX LOWER OBJECT = V-LOWER>
<SYNTAX OIL OBJECT = V-OIL>
<SYNTAX OIL OBJECT WITH OBJECT (HAVE) = V-OIL>
<SYNONYM OIL LUBRICATE GREASE>
<SYNTAX MAKE OBJECT = V-MAKE>
<SYNTAX MELT OBJECT
WITH OBJECT (FIND FLAMEBIT) (HELD CARRIED ON-GROUND IN-ROOM) = V-MELT>
<SYNONYM MELT LIQUIFY>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX MOVE OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX MOVE OBJECT WITH OBJECT (FIND TOOLBIT) = V-TURN PRE-TURN>
<SYNTAX ROLL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX MUMBLE = V-MUMBLE>
<SYNONYM MUMBLE SIGH>
<SYNTAX ODYSSEUS = V-ODYSSEUS>
<SYNONYM ODYSSEUS ULYSSES>
<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-UNLOCK>
<SYNONYM OPEN EXTEND LENGTHEN>
<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 PLAY OBJECT = V-PLAY>
<SYNTAX PLAY WITH OBJECT (FIND ACTORBIT) = V-PLAY-WITH>
<SYNTAX PLUG OBJECT WITH OBJECT = V-PLUG>
<SYNONYM PLUG GLUE PATCH REPAIR FIX>
<SYNTAX PLUGH = V-ADVENT>
<SYNONYM PLUGH XYZZY PLOVER>
<SYNTAX POKE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-MUNG PRE-MUNG>
<SYNTAX PUNCTURE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-MUNG PRE-MUNG>
<SYNTAX POUR OBJECT (HELD CARRIED) = V-POUR PRE-DROP>
<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-POUR-IN>
<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR-ON>
<SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-DROP PRE-DROP>
<SYNONYM POUR SPILL>
<SYNTAX PRAY = V-PRAY>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNTAX PULL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE PRE-MOVE>
<SYNONYM PULL TUG YANK>
<SYNTAX PUMP UP OBJECT = V-PUMP>
<SYNTAX PUMP UP OBJECT WITH OBJECT = V-PUMP>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND) OBJECT = V-PUSH-TO>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND) TO OBJECT = V-PUSH-TO>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH UP OBJECT = V-PUSH-UP>
<SYNTAX PUSH DOWN OBJECT = V-PUSH-DOWN>
<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND MANY) = V-PUSH>
<SYNTAX PUSH OBJECT WITH OBJECT (FIND TOOLBIT) = V-TURN PRE-TURN>
<SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUSH OBJECT THROUGH OBJECT = V-PUSH-THROUGH>
<SYNONYM PUSH PRESS>
<SYNTAX PUT OBJECT (HELD MANY) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX PUT OBJECT (HELD MANY) ON OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX PUT DOWN OBJECT (HELD MANY) = V-DROP PRE-DROP>
<SYNTAX PUT OBJECT (HELD HAVE) UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUT OUT OBJECT (FIND ONBIT)
(HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE) = V-LAMP-OFF>
<SYNTAX PUT ON OBJECT (IN-ROOM ON-GROUND CARRIED MANY) = V-WEAR>
<SYNTAX PUT OBJECT (HELD MANY HAVE) BEHIND OBJECT = V-PUT-BEHIND>
<SYNTAX PUT OBJECT (HELD CARRIED HAVE) THROUGH OBJECT = V-SLIDE>
<SYNTAX PUT OBJECT (TAKE) OVER OBJECT = V-ATTRACT>
<SYNTAX PUT OBJECT (TAKE) NEAR OBJECT = V-ATTRACT>
<SYNTAX PUT OBJECT ACROSS OBJECT = V-SPAN>
<SYNONYM PUT STUFF INSERT PLACE HIDE>
<SYNTAX RAISE OBJECT = V-RAISE>
<SYNTAX RAISE UP OBJECT = V-RAISE>
<SYNONYM RAISE LIFT>
<SYNTAX RAPE OBJECT (FIND ACTORBIT) = V-RAPE>
<SYNONYM RAPE MOLEST>
<SYNTAX REACH IN OBJECT (FIND CONTBIT) = V-REACH>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
= V-READ PRE-READ>
<SYNTAX READ INSIDE OBJECT = V-READ-INSIDE>
<SYNTAX READ FROM 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)
THROUGH OBJECT = V-READ PRE-READ>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
WITH OBJECT = V-READ PRE-READ>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE)
OBJECT = V-READ-PAGE>
<SYNONYM READ SKIM>
<SYNTAX REMOVE OBJECT = V-REMOVE>
<SYNTAX REPENT = V-REPENT>
<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) = V-ZATTRACT>
<SYNTAX RUB OBJECT (TAKE) TO OBJECT = V-ATTRACT>
<SYNONYM RUB TOUCH FEEL PAT PET>
<SYNTAX TALK TO OBJECT (FIND ACTORBIT) (IN-ROOM) = V-TELL>
<SYNTAX SAY = V-SAY>
<SYNTAX SCOLD OBJECT (FIND ACTORBIT) = V-SCOLD>
<SYNTAX SEARCH OBJECT = V-SEARCH>
<SYNTAX SEARCH IN OBJECT = V-SEARCH>
<SYNTAX SEARCH FOR OBJECT = V-FIND>
<SYNTAX SEND FOR OBJECT = V-SEND>
<SYNTAX SHAKE OBJECT = V-SHAKE>
<SYNTAX SHOW OBJECT (HAVE) TO OBJECT (FIND ACTORBIT) = V-SHOW>
<SYNTAX SKIP = V-SKIP>
<SYNONYM SKIP HOP>
<SYNTAX SIT = V-SIT>
<SYNTAX SIT ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX SIT DOWN OBJECT (FIND RMUNGBIT) = V-SIT-DOWN>
<SYNTAX SIT IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX SIT OBJECT (HELD MANY HAVE TAKE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX SIT OBJECT (HELD MANY HAVE TAKE) UNDER OBJECT
= V-PUT-UNDER PRE-PUT-UNDER>
<SYNTAX SIT OBJECT (TAKE) OVER OBJECT = V-ATTRACT>
<SYNTAX SIT OBJECT (TAKE) NEAR OBJECT = V-ATTRACT>
<SYNTAX SIT OBJECT ACROSS OBJECT = V-SPAN>
<SYNONYM SIT RECLINE LIE LAY>
<SYNTAX SLEEP = V-SLEEP>
<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX SLIDE OBJECT (IN-ROOM ON-GROUND) OBJECT = V-PUSH-TO>
<SYNTAX SLIDE OBJECT (IN-ROOM ON-GROUND) TO OBJECT = V-PUSH-TO>
<SYNTAX SLIDE OBJECT (HELD CARRIED HAVE) THROUGH OBJECT = V-SLIDE>
<SYNTAX SLIDE OBJECT ACROSS OBJECT = V-SPAN>
<SYNTAX SMELL OBJECT = V-SMELL>
<SYNONYM SMELL SNIFF>
<SYNTAX SPIN OBJECT = V-SPIN>
<SYNTAX SPRAY OBJECT ON OBJECT = V-SPRAY>
<SYNTAX SPRAY OBJECT WITH OBJECT = V-SSPRAY>
<SYNTAX SQUEEZE OBJECT = V-SQUEEZE>
<SYNTAX SQUEEZE OBJECT ON OBJECT = V-PUT PRE-PUT>
<SYNTAX STAND = V-STAND>
<SYNTAX STAND UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX STAND UNDER OBJECT = V-STAND-UNDER>
<SYNTAX STAY = V-STAY>
<SYNTAX STRIKE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) WITH OBJECT
(FIND WEAPONBIT) (HELD CARRIED ON-GROUND IN-ROOM HAVE) = V-ATTACK>
<SYNTAX STRIKE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-STRIKE>
<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 ACTORBIT) (ON-GROUND IN-ROOM) = V-SWING>
<SYNONYM SWING THRUST>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (ON-GROUND IN-ROOM 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 UP OBJECT (FIND RMUNGBIT) = V-STAND>
<SYNTAX TAKE OFF OBJECT (FIND WEARBIT) (HELD CARRIED MANY) = V-TAKE-OFF>
<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 (TAKE) OVER OBJECT = V-ATTRACT>
<SYNTAX TAKE OBJECT (TAKE) NEAR OBJECT = V-ATTRACT>
<SYNTAX TAKE OBJECT WITH OBJECT (TAKE) = V-ZATTRACT>
<SYNONYM TAKE GET CARRY ;REMOVE GRAB>
<SYNTAX TASTE OBJECT = V-TASTE>
<SYNTAX TELL OBJECT (FIND ACTORBIT) (IN-ROOM) = V-TELL>
<SYNTAX TELL OBJECT (FIND ACTORBIT) (IN-ROOM) FOR OBJECT = V-ASK-FOR>
<SYNONYM TELL ASK>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
AT OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-THROW>
<SYNTAX THROW OBJECT (HELD MANY HAVE) OVER OBJECT = V-SWING>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
THROUGH OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-THROW>
<SYNTAX THROW OBJECT OBJECT = V-OVERBOARD>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) ON OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OFF OBJECT = V-THROW-OFF>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OVER OBJECT = V-THROW-OFF>
<SYNONYM THROW HURL CHUCK TOSS>
<SYNTAX TIE OBJECT TO OBJECT = V-TIE>
<SYNTAX TIE UP OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) WITH OBJECT
(FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE) = V-TIE-UP>
<SYNONYM TIE FASTEN SECURE ATTACH>
<SYNTAX TIME = V-TIME>
<SYNONYM TIME T>
<SYNTAX TREASURE = V-TREASURE>
<SYNONYM TREASURE TEMPLE>
<SYNTAX TURN OBJECT (FIND TURNBIT) TO OBJECT = V-TURN PRE-TURN>
<SYNTAX TURN OBJECT (FIND TURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED HAVE)
= V-TURN PRE-TURN>
<SYNTAX TURN ON OBJECT (FIND LIGHTBIT)
(HELD CARRIED ON-GROUND IN-ROOM) = V-LAMP-ON>
<SYNTAX TURN ON OBJECT WITH OBJECT (HAVE) = V-LAMP-ON>
<SYNTAX TURN OFF OBJECT (FIND ONBIT)
(HELD CARRIED ON-GROUND IN-ROOM ;HAVE) = V-LAMP-OFF>
<SYNTAX TURN OBJECT (FIND TURNBIT) FOR OBJECT = V-TURN PRE-TURN>
;<SYNTAX TURN OBJECT (FIND TURNBIT) = V-TURN PRE-TURN>
<SYNONYM TURN SET FLIP>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) WITH OBJECT
(FIND TOOLBIT) (HELD CARRIED ON-GROUND IN-ROOM TAKE) = V-UNLOCK>
<SYNTAX UNTIE OBJECT (ON-GROUND IN-ROOM HELD CARRIED) = V-UNTIE>
<SYNTAX UNTIE OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
FROM OBJECT = V-UNTIE>
<SYNONYM UNTIE FREE RELEASE UNFASTEN UNATTACH UNHOOK>
<SYNTAX WAIT = V-WAIT>
<SYNONYM WAIT Z>
<SYNTAX WAKE OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ALARM>
<SYNTAX WAKE UP OBJECT (FIND ACTORBIT) (ON-GROUND IN-ROOM) = V-ALARM>
<SYNONYM WAKE AWAKE SURPRISE STARTLE>
<SYNTAX WALK OBJECT = V-WALK>
<SYNTAX WALK AWAY OBJECT = V-WALK>
<SYNTAX WALK IN OBJECT = V-THROUGH>
<SYNTAX WALK THROUGH OBJECT = V-THROUGH>
<SYNTAX WALK ON OBJECT = V-THROUGH>
<SYNTAX WALK OVER OBJECT = V-LEAP>
<SYNTAX WALK TO OBJECT = V-WALK-TO>
<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 OBJECT (HELD CARRIED HAVE) THROUGH OBJECT = V-SLIDE>
<SYNONYM WALK GO RUN PROCEED STEP RETURN>
<SYNTAX WAVE OBJECT (HELD CARRIED TAKE HAVE) = V-WAVE>
<SYNTAX WAVE AT OBJECT = V-WAVE>
<SYNTAX WAVE OBJECT (HELD CARRIED TAKE HAVE) AT OBJECT = V-WAVE>
<SYNTAX WAVE OBJECT (TAKE) OVER OBJECT = V-ATTRACT>
<SYNTAX WAVE OBJECT (TAKE) NEAR OBJECT = V-ATTRACT>
<SYNONYM WAVE BRANDISH>
<SYNTAX WEAR OBJECT = V-WEAR>
<SYNTAX WIN = V-WIN>
<SYNONYM WIN WINNAGE>
<SYNTAX WIND OBJECT = V-WIND>
<SYNTAX WIND UP OBJECT = V-WIND>
<SYNTAX WISH = V-WISH>
<SYNTAX YELL = V-YELL>
<SYNTAX YELL AT OBJECT (FIND ACTORBIT) = V-SCOLD>
<SYNONYM YELL SCREAM SHOUT>
<SYNTAX ZORK = V-ZORK>
<SYNTAX HELP = V-HELP>
<SYNTAX COMPAR OBJECT TO OBJECT = V-COMPARE PRE-COMPARE>
<SYNTAX COMPAR OBJECT (MANY) = V-FOO-COMPARE>

864
tutorial.zil Normal file
View file

@ -0,0 +1,864 @@
"TUTORIAL for
SAMPLER
(c) Copyright 1984 Infocom, Inc. All Rights Reserved."
<ROUTINE INTRO ()
<TELL "|
In what follows, text in parentheses (here is an example) is part of the
Tutorial and not part of the story itself. Infocom's interactive
fiction starts with a description of your location within a story. At
the end of the description comes the prompting character \">\", which
indicates that the program is waiting for you to type in what to do
next.|
|
The Tutorial is designed to provide you with help as you move through
the sample scenario. If you can't decide what to do at a prompt, type
HELP and press the RETURN (or ENTER) key. Note that HELP is available
only in this Tutorial. You'll have to use your own wits in the excerpts
from Zork I, Planetfall, and Infidel.|
|
Now press the RETURN (or ENTER) key to see the opening of the Tutorial
story.">
<READ ,P-LEXV ,P-INBUF>
<CRLF>
<CRLF>
<V-VERSION>
<CRLF>
<V-LOOK>
<TELL "|
>|
(Hit the RETURN key now to continue the tutorial.)">
<READ ,P-INBUF ,P-LEXV>
<TELL "|
(In order to proceed you need some idea of your purpose in the story. In one
fantasy game, for example, the goal is to obtain treasures; in a mystery game,
the goal is to arrest the murderer. The goal of each game is usually presented
in the game documentation. The goal for the Tutorial Game is:|
|
To trap the prized butterfly in the room to the south of the living room.|
|
Hit the RETURN key now to continue the tutorial.)">
<READ ,P-INBUF ,P-LEXV>
<TELL "|
(You indicate your desires within the story by typing English sentences.
A good rule of thumb in determining the kinds of sentences that will
be understood is to think of completing the following sentence: \"I want
to ... \" The three dots stand for the words you will type in. You will
often want to see the description of the place you're in: you can type
\"LOOK AROUND\" or, simply, \"LOOK\" to do just that. Try that now at the
prompt. Remember to end all of your typing by hitting the RETURN key.)|">
<PUTP ,ADVENTURER ,P?ACTION A-LOOK>>
<ROUTINE A-LOOK ("OPTIONAL" FOO)
<COND (<VERB? QUIT SAVE RESTORE RESTART ;HELP VERSION DEBUG> <RFALSE>)
(<AND <VERB? LOOK>
<EQUAL? ,PRSO ,ROOMS <>>>
<ENABLE <QUEUE I-LOOK 1>>
<RFALSE>)
(T
<TELL
"(Please type \"LOOK\" or \"LOOK AROUND\" to get a description of your
surroundings.)" CR>)>>
<GLOBAL LAST-COMMENT
"If you're having trouble, you might want to review the Tutorial. Type RESTART
to return to the menu.">
<ROUTINE COMMENT (STR "OPTIONAL" (BEF <>) (AFT <>))
<COND (.BEF <CRLF>)>
<SETG LAST-COMMENT .STR>
<TELL .STR>
<COND (.AFT <CRLF>)>
T>
<ROUTINE I-LOOK ()
<COMMENT
"(Good! You have now seen a description of the living room on your screen.
A few special commands should be noted. One, \"SCORE\", lets you know how
well you're doing in comparison to the best possible score. You might have
noticed the special line at the top of the screen. It is called the Status
Line, and always indicates your location in the game, your score, and the
number of turns (sometimes called moves) you have taken.|
|
Another useful command is \"INVENTORY\". It lets you know what objects you
are carrying. Try it now.)|
" T>
<SETG LAST-COMMENT
"(Try using the \"INVENTORY\" command to find out what you're carrying.)">
<PUTP ,WINNER ,P?ACTION A-INVENTORY>>
<ROUTINE A-INVENTORY ("OPTIONAL" FOO)
<COND (<VERB? QUIT SAVE RESTORE RESTART VERIFY HELP VERSION DEBUG>
<RFALSE>)
(<VERB? LOOK SCORE>
<RFALSE>)
(<VERB? INVENTORY>
<ENABLE <QUEUE I-INVENTORY 1>>
<RFALSE>)
(T
<COMMENT
"(Please try typing \"INVENTORY\" to get a list of your possessions.)" <> T>)>>
<ROUTINE I-INVENTORY ()
<COMMENT
"(Oh, well. You weren't carrying anything to start with, but you might have
been, so it's good to have checked. For convenience \"I\" is a short form of
\"INVENTORY\" and \"L\" is a short form of \"LOOK AROUND\".|
|
To move around, you use compass directions. For example,
to walk to the east, you can type \"WALK EAST\". The stories often mention
passages, tunnels, roads, and the like in descriptions, but these are
mentioned for descriptive purposes only. Let's try going east.)" T T>
<PUTP ,WINNER ,P?ACTION A-WALK>>
<ROUTINE ENTER-CHECK ()
<COND (<VERB? THROUGH WALK-TO>
<COND (<EQUAL? ,PRSO ,CLOSET-OBJ>
<COND (<EQUAL? ,HERE ,T-LIVING-ROOM>
<DO-WALK ,P?EAST>
<RTRUE>)>)
(<EQUAL? ,PRSO ,EAST-DOOR>
<COND (<EQUAL? ,HERE ,CLOSET>
<SETG PRSO ,P?WEST>)
(T <SETG PRSO ,P?EAST>)>
<DO-WALK ,PRSO>
<RTRUE>)
(<EQUAL? ,PRSO ,SOUTH-DOOR>
<COND (<EQUAL? ,HERE ,T-LIVING-ROOM>
<SETG PRSO ,P?SOUTH>)
(T
<SETG PRSO ,P?NORTH>)>
<DO-WALK ,PRSO>
<RTRUE>)>)
(<VERB? DROP>
<COND (<EQUAL? ,PRSO ,CLOSET-OBJ>
<COND (<EQUAL? ,HERE ,CLOSET>
<DO-WALK ,P?WEST>
<RTRUE>)>)>)>>
<ROUTINE A-WALK ("OPTIONAL" FOO)
<COND (<AND <VERB? THROUGH DROP WALK-TO> <ENTER-CHECK>> <RTRUE>)>
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY HELP
VERSION DEBUG>
<RFALSE>)
(<VERB? WALK>
<COND (<==? ,PRSO ,P?EAST>
<ENABLE <QUEUE I-WALK 1>>
<RFALSE>)
(T
<TELL
"(Try the other directions on your own time! It's more interesting to the
east. Trust me.)" CR>)>)
(<VERB? LOOK INVENTORY SCORE>
<RFALSE>)
(T
<TELL
"(Let's go east for now.)" CR>)>>
<ROUTINE I-WALK ()
<COMMENT
"(Hmm. This illustrates two important points. First, don't believe
everything a computer tells you. Second, objects lying around like
tools, lights, and weapons can be useful and should probably be
carried around for situations like this. Luckily, we have seen a lantern
in the living room. As the man said, \"Go west!\")" T T>
<PUTP ,WINNER ,P?ACTION A-RETURN-LR>>
<ROUTINE A-RETURN-LR ("OPTIONAL" FOO)
<COND (<AND <VERB? THROUGH DROP WALK-TO> <ENTER-CHECK>> <RTRUE>)>
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG>
<RFALSE>)
(<AND <VERB? WALK> <==? ,PRSO ,P?WEST>>
<ENABLE <QUEUE I-RETURN-LR 1>>
<RFALSE>)
(<AND <VERB? EXAMINE FIND> <==? ,PRSO ,GRUE>>
<ENABLE <QUEUE I-FALSE-1 1>>
<RFALSE>)
(<VERB? LOOK INVENTORY SCORE>
<RFALSE>)
(T
<COMMENT
"(Type \"WALK WEST\", \"GO WEST\", or simply \"WEST\" to go back to
the living room from here.)" <> T>)>>
<ROUTINE I-FALSE-1 ()
<TELL CR
"(You couldn't wait to find out, could you.... Now try going back
to the living room.)" CR>>
<ROUTINE I-RETURN-LR ()
<TELL
"|
(We're back now and, from the look of things, in need of light.
There are many common verbs that are understood in Infocom's interactive
fiction. These include TAKE, DROP, PUT, TURN ON, TURN OFF, EXAMINE,
READ, BREAK, HIT, EAT and a host of others. Rather than include a vocabulary
list, we build a large vocabulary into them and encourage you
to try anything you like.|
|
From now on, you're going to be more on your own. If you get stuck, though,
you can always type \"HELP\" for a nudge in the right direction.|
|
Using some of the verbs mentioned earlier, try to shed some light on the
broom closet.)|
">
<SETG LAST-COMMENT
"(In trying to shed some light on the broom closet, you will need to carry
something that is lighted into the closet with you. Some of the verbs you
might need are TAKE, TURN ON, and WALK.)">
<PUTP ,WINNER ,P?ACTION A-LAMP>>
<ROUTINE A-LAMP ("OPTIONAL" FOO)
<COND (<AND <VERB? THROUGH DROP WALK-TO> <ENTER-CHECK>> <RTRUE>)>
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG>
<RFALSE>)
(<VERB? LOOK INVENTORY SCORE>
<RFALSE>)
(<AND <VERB? LAMP-ON>
<EQUAL? ,PRSO ,T-LANTERN>
<NOT <FSET? ,PRSO ,ONBIT>>>
<ENABLE <QUEUE I-LAMP-ON 1>>
<RFALSE>)
(<AND <VERB? TAKE>
<EQUAL? ,PRSO ,T-LANTERN>
<NOT <IN? ,PRSO ,WINNER>>>
<ENABLE <QUEUE I-LAMP-TAKE 1>>
<RFALSE>)
(<AND <VERB? EXAMINE>
<EQUAL? ,PRSO ,T-LANTERN>
<NOT <FSET? ,PRSO ,ONBIT>>>
<ENABLE <QUEUE I-LAMP-EXAMINE 1>>
<TELL "The lantern isn't lit." CR>)
(<AND <VERB? EXAMINE>
<EQUAL? ,PRSO ,T-LANTERN>>
<ENABLE <QUEUE I-LAMP-EXAMINE-1 1>>
<TELL "The lantern is lit." CR>)
(<VERB? WALK>
<COND (<==? ,PRSO ,P?EAST>
<COND (<AND <FSET? ,T-LANTERN ,ONBIT>
<IN? ,T-LANTERN ,WINNER>
<EQUAL? ,HERE ,T-LIVING-ROOM>>
<ENABLE <QUEUE I-RETURN-CLOSET 1>>
<RFALSE>)
(<AND <IN? ,T-LANTERN ,WINNER>
<EQUAL? ,HERE ,T-LIVING-ROOM>>
<COMMENT
"(You had better light that lantern before going back into that
dark closet again.)" <> T>)
(T
<COMMENT
"(You should get something that gives off light before going into that
dark closet again. Remember, use \"INVENTORY\" to list your possessions
and \"LOOK AROUND\" to describe your location.)" <> T>)>)
(T
<TELL
"(Let's stick to going into the closet for now.)" CR>)>)
(<EQUAL? ,PRSO ,T-LANTERN>
<COND (<AND <IN? ,T-LANTERN ,WINNER>
<FSET? ,T-LANTERN ,ONBIT>>
<TELL
"(You've done enough with the lantern. Why don't you try returning to
the closet to see what's inside?)" CR>)
(<AND <VERB? PUT>
<EQUAL? ,PRSI ,CLOSET-OBJ>>
<TELL
"(You can't do that without going into the closet yourself. Why don't
you try that?)" CR>)
(T
<TELL
"(Doing that to the lantern isn't very useful. Try doing something
with the lantern that will help you see what's in the closet.)" CR>)>)
(<AND <IN? ,T-LANTERN ,WINNER>
<FSET? ,T-LANTERN ,ONBIT>>
<TELL
"(Try returning to the closet, now that you have the lighted
lantern.)" CR>)
(T
<TELL
"(Try sticking to sentences dealing with the lantern, which is
useful if we're going to see anything in the closet.)" CR>)>>
<ROUTINE I-LAMP-ON ()
<TELL CR
"(That was a good idea. If you examined the lantern beforehand, you knew
for a fact that it wasn't lit. By the way, you could have typed \"LIGHT THE
SHINY BRASS LANTERN\", \"TURN ON THE BRASS LANTERN\", \"TURN THE LANTERN
ON\", etc. to turn it on. The large number of ways of expressing your desires
greatly enhances the playability of Infocom's interactive fiction.)" CR>
<SETG SCORE <+ ,SCORE 10>>>
<ROUTINE I-LAMP-TAKE ()
<TELL CR
"(Good move. You will need the lantern with you when you return to the
closet if you intend to see anything. You could have gotten the lamp
with \"TAKE LANTERN\", \"PICK UP THE LANTERN\", \"TAKE THE LANTERN FROM THE
TABLE\", \"GET THE LANTERN\", or anything similar. You could also
have called the lantern a lamp.)" CR>
<SETG SCORE <+ ,SCORE 10>>>
<ROUTINE I-LAMP-EXAMINE ()
<TELL CR
"(Examining the lantern revealed that it wasn't lit. This tells you
something that will need to be done before proceeding. \"LOOK AT
THE LANTERN\" and \"EXAMINE LANTERN\" are two ways of doing this.)" CR>>
<ROUTINE I-LAMP-EXAMINE-1 ()
<TELL CR
"(Examining the lantern revealed that it was lit. It never hurts
to be safe, especially when danger is nearby.)" CR>>
<ROUTINE I-RETURN-CLOSET ()
<COMMENT
"(With the lantern in your possession, you can see what's in the closet.
Two items of interest there are the net, which we will certainly need to
capture the prize butterfly, and a key. One never knows where a key will
be needed. Let's get those things and return to the living room with
them.)" T T>
<PUTP ,WINNER ,P?ACTION A-TAKE-STUFF>>
<ROUTINE A-TAKE-STUFF ("OPTIONAL" FOO)
<COND (<AND <VERB? THROUGH DROP WALK-TO> <ENTER-CHECK>> <RTRUE>)>
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG> <RFALSE>)
(<VERB? LOOK INVENTORY SCORE>
<RFALSE>)
(<VERB? TAKE>
<ENABLE <QUEUE I-TAKE-STUFF 1>>
<RFALSE>)
(<AND <VERB? WALK>
<EQUAL? ,PRSO ,P?WEST ,P?OUT>
<==? ,HERE ,CLOSET>>
<COND (<AND <IN? ,KEY ,WINNER>
<IN? ,NET ,WINNER>>
<ENABLE <QUEUE I-TAKE-STUFF-1 1>>
<RFALSE>)>)
(<AND <VERB? LAMP-OFF>
<==? ,PRSO ,T-LANTERN>
<NOT <FSET? ,HERE ,ONBIT>>>
<TELL
"(This is not a promising idea in an otherwise dark room.)" CR>)
(<VERB? WALK EAT EXAMINE LAMP-ON LAMP-OFF>
<RFALSE>)
(<AND <IN? ,KEY ,WINNER> <IN? ,NET ,WINNER>>
<COMMENT
"(Try returning to the living room.)" <> T>)
(T
<COMMENT
"(Make sure you've taken all of the objects from the broom closet and
then return to the living room.)" <> T>)>>
<GLOBAL TOLD-ALREADY <>>
<ROUTINE I-TAKE-STUFF ()
<COND (,TOLD-ALREADY <RFALSE>)
(<AND <IN? ,KEY ,WINNER>
<IN? ,NET ,WINNER>>
<SETG TOLD-ALREADY T>
<COMMENT
"(It seems as if you have everything worth taking, since the dust
won't be of much help. By the way, Infocom's interactive fiction allows
you to mention more than one object at a time. For example, to take both
the net and the key, you may type \"TAKE THE NET AND THE KEY\".
Let's return now to the living room.)" <> T>
<SETG SCORE <+ ,SCORE 10>>)>>
<ROUTINE I-TAKE-STUFF-1 ()
<COMMENT
"(Great. Notice that the long description of the living room is not
being repeated when we return to it. This is for your convenience. You
can always get the description of your surroundings by typing \"LOOK\".
Now let's try to find those butterflies. There's only one direction that
doesn't return us to the closet and that's south. Oh, I just remembered.
There was a sign over the mahogany door. Like other reading materials
in our scenarios, it's likely to be helpful. Try to find out
what's written on it.)" T T>
<SETG LAST-COMMENT
"(Let's try reading the sign now.)">
<PUTP ,WINNER ,P?ACTION A-READ-SIGN>>
<ROUTINE A-READ-SIGN ("OPTIONAL" FOO)
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG> <RFALSE>)
(<VERB? INVENTORY LOOK SCORE>
<RFALSE>)
(<AND <VERB? READ EXAMINE>
<EQUAL? ,PRSO ,SIGN>>
<ENABLE <QUEUE I-READ-SIGN 1>>
<RFALSE>)
(T
<COMMENT
"(To see what's written on the sign, try simply typing \"READ THE SIGN\" or
\"EXAMINE THE SIGN\".)" <> T>)>>
<ROUTINE I-READ-SIGN ()
<TELL CR
"(This confirms what we had suspected. Now let's get going.)" CR>
<SETG LAST-COMMENT
"(The butterfly is in the room on the other side of the mahogany door. Let's
open it up!)">
<PUTP ,WINNER ,P?ACTION A-GO-SOUTH>>
;<ROUTINE I-UNLOCK-DOOR () ;"not referenced, removed 2/27/85 by SEM"
<TELL CR
"(Makes sense. Let's see what's to the south.)" CR>
<SETG LAST-COMMENT
"(Now that the door's unlocked, let's open it up and go through it.)">
<PUTP ,WINNER ,P?ACTION A-GO-SOUTH>>
<ROUTINE A-GO-SOUTH ("OPTIONAL" FOO)
<COND (<AND <VERB? THROUGH DROP WALK-TO> <ENTER-CHECK>> <RTRUE>)>
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG>
<RFALSE>)
(<VERB? LOOK INVENTORY SCORE>
<RFALSE>)
(<AND <VERB? READ EXAMINE>
<EQUAL? ,PRSO ,SIGN>>
<RFALSE>)
(<AND <VERB? THROUGH> <EQUAL? ,PRSO ,SOUTH-DOOR>>
<TELL
"(This is a reasonable thing to try, although few of our stories will
understand this method of movement. It's always easier to simply use
\"WALK direction\" or just \"direction\" to move around.)" CR>)
(<VERB? WALK>
<COND (<==? ,PRSO ,P?SOUTH>
<COND (<NOT <FSET? ,SOUTH-DOOR ,OPENBIT>>
<ENABLE <QUEUE I-TRY-SOUTH 1>>
<RFALSE>)
(T
<ENABLE <QUEUE I-THROUGH-DOOR 1>>
<RFALSE>)>)
(T
<COMMENT
"(We've been everyplace else in this little universe already. Concentrate
on going to the south.)" <> T>)>)
(<AND <VERB? DROP> <IN? ,PRSO ,WINNER>>
<TELL
"(Be careful! You may need everything you are carrying!)" CR>)
(<AND <VERB? UNLOCK>
<EQUAL? ,PRSO ,SOUTH-DOOR>>
<COND (,DOOR-LOCKED
<ENABLE <QUEUE I-TRY-UNLOCK 1>>)>
<RFALSE>)
(<AND <VERB? OPEN> <EQUAL? ,PRSO ,SOUTH-DOOR>>
<ENABLE <QUEUE I-TRY-OPEN 1>>
<RFALSE>)
(<VERB? SCORE LOOK INVENTORY EXAMINE TAKE DROP EAT MUNG>
<RFALSE>)
(T
<COMMENT
"(Try something relevant to going through the mahogany door.)" <> T>)>>
<ROUTINE I-TRY-UNLOCK ()
<COND (,DOOR-LOCKED
<COMMENT
"(Try unlocking the south door with the key....)" T T>)
(T
<TELL CR
"(Great! You're on your way.)" CR>)>>
<ROUTINE I-TRY-OPEN ()
<COND (,DOOR-LOCKED
<TELL CR
"(It's a lucky thing that you just happened to take that key, isn't it?)" CR>)
(<FSET? ,SOUTH-DOOR ,OPENBIT>
<COMMENT
"(Let's go south and get 'em!)" T T>
<SETG SCORE <+ ,SCORE 10>>)
(T
<TELL CR
"(Maybe you should have tried opening the south door?)" CR>)>>
<ROUTINE I-TRY-SOUTH ()
<COND (,DOOR-LOCKED
<TELL CR
"(Since it's closed, we might as well open it.)" CR>)
(T
<TELL CR
"(It's not locked anymore, but it's still closed....)" CR>)>>
<ROUTINE I-THROUGH-DOOR ()
<COMMENT
"(Congratulations. You're practically finished. All that's left is
to catch that butterfly! Be VERY careful, though. Don't let it get
away!)" T T>
<SETG LAST-COMMENT
"(All that's left is to catch the butterfly! Be very careful, though,
or it'll get away!)">
<PUTP ,WINNER ,P?ACTION A-CLOSE-DOOR>>
<ROUTINE A-CLOSE-DOOR ("OPTIONAL" FOO)
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG> <RFALSE>)
(<VERB? SAVE>
<TELL
"(Not a bad idea. If this weren't the Tutorial, it might be a good
idea to save the game here in case something unexpected happens at
this crucial time. Sadly, you will have to think of something else.)" CR>)
(<AND <VERB? CLOSE> <==? ,PRSO ,SOUTH-DOOR>>
<ENABLE <QUEUE I-CLOSE-DOOR 1>>
<RFALSE>)
(T
<TELL
"Before you can even start, the butterfly flies gaily through the door
and out of your life. As tears well up in your eyes, you ponder
the glory that was yours had you only closed the door first." CR>
<ENABLE <QUEUE I-LOST 1>>
<RTRUE>)>>
<ROUTINE I-LOST ()
<TELL CR
"(Oh, well, you can't win them all. This brings up another important
feature of Infocom's interactive fiction: the ability to suspend your play
at any time and continue from that point at a later time, much like placing a
bookmark in a book that you are reading. In an actual game, you might
have suspended the game prior to entering the Butterfly Room, thus
making it easier for you to go back and try another approach without
restarting the game from scratch. Live and learn.|
|
Another important point: the solution to catching the butterfly involved
using a complex sentence like \"CATCH THE BUTTERFLY IN THE NET\" or
\"PLACE THE NET OVER THE BUTTERFLY\". The ability to understand sentences
of this kind is an integral part of Infocom's interactive fiction.)" CR>
<FINIS>>
<ROUTINE FINIS ()
<SETG LAST-COMMENT
"In the complete versions of these stories you're on your own. Don't spend
too much time working on any one obstacle. Go on and try other things. If you
ever become completely stuck, we offer hint booklets and maps at a nominal
cost.">
<FINISH>>
<ROUTINE V-HELP ()
<TELL ,LAST-COMMENT CR>>
<ROUTINE I-CLOSE-DOOR ()
<COMMENT
"(Your instinct was correct. The butterfly, no mental midget,
headed straight for the open door -- but you were quicker. Had you
not closed the door right away, it would have flown the coop. Let's
get it!)" T T>
<PUTP ,WINNER ,P?ACTION A-CATCH>>
<ROUTINE A-CATCH ("OPTIONAL" FOO)
<COND (<VERB? QUIT SAVE RESTORE WALK-TO RESTART VERIFY
HELP VERSION DEBUG>
<RFALSE>)
(<AND <EQUAL? ,PRSO ,BUTTERFLY>
<EQUAL? ,PRSI ,NET>
<VERB? CATCH PUT>>
<COND (<NOT <IN? ,NET ,WINNER>>
<TELL
"You don't have the net, I'm afraid." CR>
<RTRUE>)>
<SETG SCORE <+ ,SCORE 10>>
<TELL ,WINNAGE CR>
<FINIS>)
(<AND <EQUAL? ,PRSO ,NET>
<EQUAL? ,PRSI ,BUTTERFLY>
<VERB? SWING ATTRACT>>
<COND (<NOT <IN? ,NET ,WINNER>>
<TELL
"You don't have the net, I'm afraid." CR>)>
<TELL ,WINNAGE CR>
<FINIS>)
(<AND <VERB? CATCH PUT>
<EQUAL? ,PRSO ,BUTTERFLY>>
<TELL
"You would catch it in that?!?" CR>)
(<VERB? EXAMINE INVENTORY LOOK SCORE>
<RFALSE>)
(<AND <VERB? TAKE>
<EQUAL? ,PRSO ,BUTTERFLY>>
<TELL
"You grab for the butterfly, but it's too quick! It continues
to flutter gracefully about the room." CR>)
(<VERB? TAKE DROP PUT>
<ENABLE <QUEUE I-COME-ON 1>>
<RFALSE>)
(T
<TELL
"(How about trying something more in line with catching the butterfly?)" CR>)>>
<GLOBAL WINNAGE
"With a deft motion of your arm, the butterfly is trapped within
the net.|
|
(You might have typed anything like the following to have
trapped the butterfly: \"TRAP THE BUTTERFLY IN THE NET\", \"CATCH
THE BUTTERFLY WITH THE NET\", \"SWING THE NET OVER THE BUTTERFLY\",
or anything similar. With Infocom's interactive fiction, you are
encouraged to try whatever comes to your mind. If it doesn't work, try
something similar. Half of the fun is in trying unusual things!)|
|
Congratulations! You have completed your goal of catching the prized
butterfly. You're now ready for the innovative challenges of Infocom's
line of interactive fiction.">
<ROUTINE I-COME-ON ()
<TELL CR
"(All right, all right. Now let's catch the butterfly.)" CR>>
<OBJECT CLOSET-OBJ
(IN LOCAL-GLOBALS)
(DESC "closet")
(SYNONYM CLOSET)
(ADJECTIVE BROOM)
(FLAGS NDESCBIT)>
<OBJECT DUST
(IN CLOSET)
(DESC "dust")
(SYNONYM DUST)
(FLAGS NDESCBIT)
(ACTION DUST-F)>
;"DUST-F is in the PLANETFALL file"
<OBJECT SIGN
(IN T-LIVING-ROOM)
(DESC "sign")
(SYNONYM SIGN LETTER)
(ADJECTIVE FADED)
(FLAGS READBIT NDESCBIT)
(TEXT
"The sign says: \"Butterflies are free. Bring your net.\"")>
<OBJECT LIVING-ROOM-O
(IN GLOBAL-OBJECTS)
(DESC "living room")
(SYNONYM ROOM)
(ADJECTIVE LIVING)
(ACTION ROOM-OBJECT-F)>
<OBJECT BROOM-CLOSET-O
(IN GLOBAL-OBJECTS)
(DESC "broom closet")
(SYNONYM CLOSET)
(ADJECTIVE BROOM)
(ACTION ROOM-OBJECT-F)>
<ROUTINE ROOM-OBJECT-F ()
<COND (<VERB? WALK-TO>
<TELL
"(In most stories of this type, you move around by indicating the direction in
which you wish to travel, rather than referring to the place by name.)" CR>)
(<VERB? EXAMINE>
<TELL
"(To examine your surroundings, type \"LOOK AROUND\" or something like
that.)" CR>)
(T
<TELL
"(You usually can't refer to rooms by their names.)" CR>)>>
<ROOM T-LIVING-ROOM
(IN ROOMS)
(DESC "Living Room")
(SOUTH TO BUTTERFLY-ROOM IF SOUTH-DOOR IS OPEN)
(EAST TO CLOSET IF EAST-DOOR IS OPEN)
(FLAGS ONBIT RLANDBIT)
(ACTION T-LIVING-ROOM-F)
(GLOBAL EAST-DOOR SOUTH-DOOR CLOSET-OBJ)>
<ROUTINE T-LIVING-ROOM-F (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"You are standing in the living room of a large house. The room is bare
except for a small, square table in the center of the room." CR>
<COND (<FSET? ,EAST-DOOR ,OPENBIT>
<TELL
"An oak door to the east opens into a darkened area">)
(T
<TELL
"An oak door to the east is closed">)>
<TELL " and a mahogany door to the south is ">
<COND (<FSET? ,SOUTH-DOOR ,OPENBIT>
<TELL "wide open">)
(T <TELL "closed">)>
<TELL "." CR>
<TELL
"Above the mahogany door is an old sign with some faded lettering." CR>)>>
<OBJECT T-LANTERN
(IN XTABLE)
(DESC "shiny brass lantern")
(FDESC "A shiny brass lantern is sitting in the center of the table.")
(SYNONYM LANTERN LAMP)
(ADJECTIVE SHINY BRASS)
(FLAGS LIGHTBIT TAKEBIT)
(SIZE 10)
(ACTION T-LANTERN-F)>
<ROUTINE T-LANTERN-F ()
<COND (<VERB? EXAMINE>
<TELL "The lantern is ">
<COND (<NOT <FSET? ,T-LANTERN ,ONBIT>>
<TELL "not ">)>
<TELL "lit." CR>)>>
<OBJECT XTABLE
(IN T-LIVING-ROOM)
(DESC "table")
(SYNONYM TABLE)
(ADJECTIVE SMALL SQUARE)
(FLAGS CONTBIT SURFACEBIT OPENBIT NDESCBIT)
(CAPACITY 20)
(ACTION XTABLE-F)>
<ROUTINE XTABLE-F ()
<COND (<VERB? TAKE>
<TELL
"It seems to be firmly attached to the floor." CR>)>>
<ROOM CLOSET
(IN ROOMS)
(DESC "Broom Closet")
(LDESC
"This rather undistinguished place seems to be a broom closet. Oddly
enough, there is no broom here, although there is enough dust and dirt
on the ground to merit a few dozen.")
(FLAGS RLANDBIT)
(WEST TO T-LIVING-ROOM IF EAST-DOOR IS OPEN)
(OUT TO T-LIVING-ROOM IF EAST-DOOR IS OPEN)
(GLOBAL EAST-DOOR CLOSET-OBJ)>
<OBJECT KEY
(IN CLOSET)
(DESC "skeleton key")
(LDESC
"Amidst the grime, a small skeleton key can be seen on the ground.")
(SYNONYM KEY)
(ADJECTIVE SKELETON SMALL)
(FLAGS TAKEBIT TOOLBIT)
(ACTION KEY-F)>
<ROUTINE KEY-F ()
<COND (<VERB? EXAMINE>
<TELL
"The key isn't very interesting, except that it might unlock the mahogany
door in the living room." CR>)>>
<OBJECT NET
(IN CLOSET)
(DESC "net")
(LDESC
"A net, suitable for catching butterflies, is sitting in the corner.")
(SYNONYM NET)
(FLAGS TAKEBIT)
(ACTION NET-F)>
<ROUTINE NET-F ()
<COND (<VERB? EXAMINE>
<TELL
"The net is a typical butterfly net (quite a lucky find)." CR>)>>
<OBJECT EAST-DOOR
(IN LOCAL-GLOBALS)
(DESC "oak door")
(SYNONYM DOOR)
(ADJECTIVE EAST EASTERN OAK)
(FLAGS DOORBIT CONTBIT OPENBIT)>
<OBJECT SOUTH-DOOR
(IN LOCAL-GLOBALS)
(DESC "mahogany door")
(SYNONYM DOOR)
(ADJECTIVE MAHOGANY SOUTH SOUTHE)
(FLAGS DOORBIT CONTBIT)
(ACTION SOUTH-DOOR-F)>
<GLOBAL DOOR-LOCKED T>
<ROUTINE SOUTH-DOOR-F ()
<COND (<VERB? UNLOCK>
<COND (<NOT ,DOOR-LOCKED>
<TELL
"The door is already unlocked, or don't you remember!" CR>)
(<EQUAL? ,PRSI ,KEY>
<TELL
"Fortunately for you, the key was the correct one and the door unlocks." CR>
<SETG DOOR-LOCKED <>>
<RTRUE>)
(T
<TELL
"That wasn't a very smart thing to try; " D ,PRSI "s are rarely used
in unlocking doors." CR>)>)
(<VERB? LOCK>
<COND (,DOOR-LOCKED
<TELL
"The door is sufficiently locked without your help.">)
(<EQUAL? ,PRSI ,KEY>
<TELL
"Very well. The door is now locked." CR>
<SETG DOOR-LOCKED T>)
(T
<TELL
"Dear, dear. What will you think of next?" CR>)>)
(<AND <VERB? OPEN> ,DOOR-LOCKED>
<TELL
"It seems to be locked!" CR>)
(<VERB? KNOCK>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL
"Why are you knocking on an open door?" CR>)
(T
<TELL
"Nobody answers." CR>)>)
(<VERB? MUNG>
<TELL
"Besides hurting your shoulder, the effort gets you nowhere." CR>)
(<VERB? LISTEN>
<TELL
"You hear nothing through the door." CR>)>>
<ROOM BUTTERFLY-ROOM
(IN ROOMS)
(DESC "Butterfly Room")
(NORTH TO T-LIVING-ROOM IF SOUTH-DOOR IS OPEN)
(FLAGS RLANDBIT ONBIT)
(ACTION BUTTERFLY-ROOM-F)
(GLOBAL SOUTH-DOOR)>
<ROUTINE BUTTERFLY-ROOM-F (RARG)
<COND (<==? .RARG ,M-LOOK>
<TELL
"This is a smaller room than one would expect for the storage of
butterflies, but then again, one doesn't expect rooms to be used for
storing butterflies. The only way out is through a door to the north
that is ">
<COND (<FSET? ,SOUTH-DOOR ,OPENBIT>
<TELL "open">)
(T <TELL "closed">)>
<TELL "." CR>)>>
<OBJECT BUTTERFLY
(IN BUTTERFLY-ROOM)
(DESC "beautiful butterfly")
(LDESC
"Flying around the room in graceful arcs is the most beautiful butterfly
you have ever seen. Catching it will enhance your reputation as the world's
foremost collector of rare butterflies.")
(SYNONYM BUTTERFLY INSECT)
(ADJECTIVE MOST BEAUTI)
(FLAGS TAKEBIT)
(ACTION BUTTERFLY-F)>
<ROUTINE BUTTERFLY-F ()
<COND (<VERB? EXAMINE>
<TELL
"This is, without doubt, the most beautiful butterfly you have ever
seen. Your collection would be greatly enhanced by its presence." CR>)>>
<ROUTINE V-CATCH ()
<TELL "Why would you want to catch that!" CR>>
<ROOM WELCOME-MAT
(IN ROOMS)
(DESC "Welcome to Infocom")>
<ROOM WITNESS-ROOM
(IN ROOMS)
(DESC "Witness")>

2668
verbs.zil Normal file

File diff suppressed because it is too large Load diff