Revision 203 (Original Source)

This commit is contained in:
historicalsource 2019-04-14 01:53:40 -04:00
commit 7edaa11951
19 changed files with 18126 additions and 0 deletions

1
README.md Normal file
View File

@ -0,0 +1 @@
# lurkinghorror

7087
cs.zil Normal file

File diff suppressed because it is too large Load Diff

35
debug.zil Normal file
View File

@ -0,0 +1,35 @@
"DEBUG for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
%<DEBUG-CODE <GLOBAL ZDEBUG <>>>
%<DEBUG-CODE <SYNTAX $DEBUG = V-$DEBUG>>
%<DEBUG-CODE
<ROUTINE V-$DEBUG ()
<COND (<SETG ZDEBUG <NOT ,ZDEBUG>>
<TELL-ON>)
(T <TELL-OFF>)>>>
%<DEBUG-CODE <ROUTINE TELL-ON () <TELL "On." CR>>>
%<DEBUG-CODE <ROUTINE TELL-OFF () <TELL "Off." CR>>>
%<DEBUG-CODE <SYNTAX $BLORPLE OBJECT = V-$BLORPLE>>
%<DEBUG-CODE <SYNTAX $CHEAT = V-$CHEAT>>
%<DEBUG-CODE
<SYNTAX $TAKE OBJECT = V-$TAKE>>
%<DEBUG-CODE
<ROUTINE V-$TAKE ("AUX" CUBE)
<MOVE ,PRSO ,WINNER>
<FCLEAR ,PRSO ,NDESCBIT>
<FCLEAR ,PRSO ,INVISIBLE>
<TELL ,TAKEN>>>
%<DEBUG-CODE
<ROUTINE TELL-C-INTS ()
<TELL "[MaxInts: " N </ <- ,C-TABLELEN ,C-MAXINTS> ,C-INTLEN>
"]" CR>>>

295
desc.zil Normal file
View File

@ -0,0 +1,295 @@
"DESC for
Your Game
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
"The fabled new describers, as updated and modified to conform to the
latest bug fixes. See ZD:DESC.DOC for details. See Z:DESC.ZIL for
the source."
<CONSTANT M-OBJDESC? 9> ;"modify if necessary for games with other M-..."
<GLOBAL DESCRIBED-ROOM? <>>
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (LOOK? <>) "AUX" V? STR AV)
<COND (<NOT ,LIT>
<TELL "It is pitch black." CR>
<RFALSE>)>
<COND (<IN? ,HERE ,ROOMS> <TELL 'HERE>)>
<SET AV <LOC ,WINNER>>
<COND (<FSET? .AV ,VEHBIT>
<COND (<FSET? .AV ,SURFACEBIT>
<TELL ", on ">)
(ELSE
<TELL ", in ">)>
<TELL THE .AV>)>
<CRLF>
<SET V? <OR .LOOK? <EQUAL? ,VERBOSITY 2>>>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<FSET ,HERE ,TOUCHBIT>
<COND (,VERBOSITY <SET V? T>)>)>
<SETG DESCRIBED-ROOM? .V?>
<COND (.V?
<COND (<AND <NOT <EQUAL? ,HERE .AV>>
<FSET? .AV ,VEHBIT>
<APPLY <GETP .AV ,P?ACTION> ,M-LOOK>>
<RTRUE>)
(<APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>
<RTRUE>)
(<SET STR <GETP ,HERE ,P?LDESC>>
<TELL .STR CR>)>)>
T>
<ROUTINE DESCRIBE-OBJECTS ("AUX" O STR (AV <LOC ,WINNER>) TMP)
<SET O <FIRST? ,HERE>>
<COND (<NOT .O> <RFALSE>)>
<REPEAT () ;"FDESCS and MISC."
<COND (<NOT .O> <RETURN>)
(<AND <DESCRIBABLE? .O>
<NOT <FSET? .O ,TOUCHBIT>>
<SET STR <GETP .O ,P?FDESC>>>
<THIS-IS-IT .O>
<CRLF>
<TELL .STR>
<COND (<FSET? .O ,CONTBIT>
<DESCRIBE-CONTENTS .O
T
<+ ,D-ALL?
,D-PARA?>>)>
<CRLF>)>
<SET O <NEXT? .O>>>
<SET O <FIRST? ,HERE>>
<REPEAT () ;"DESCFCNS and LDESCS"
<COND (<NOT .O> <RETURN>)
(<OR <NOT <DESCRIBABLE? .O>>
<AND <GETP .O ,P?FDESC>
<NOT <FSET? .O ,TOUCHBIT>>>>
T)
(<AND <SET STR <GETP .O ,P?DESCFCN>>
<SET TMP <APPLY .STR ,M-OBJDESC? .O>>>
<COND (<NOT <EQUAL? .TMP ,M-FATAL>>
<THIS-IS-IT .O>
<CRLF>
<COND (<SET STR <APPLY .STR ,M-OBJDESC .O>>
<COND (<AND <FSET? .O ,CONTBIT>
<N==? .STR ,M-FATAL>>
<DESCRIBE-CONTENTS
.O
T
<+ ,D-ALL?
,D-PARA?>>)>)>
<CRLF>)>)
(<SET STR <GETP .O ,P?LDESC>>
<THIS-IS-IT .O>
<CRLF>
<TELL .STR>
<COND (<FSET? .O ,CONTBIT>
<DESCRIBE-CONTENTS .O
T
<+ ,D-ALL?
,D-PARA?>>)>
<CRLF>)>
<SET O <NEXT? .O>>>
<DESCRIBE-CONTENTS ,HERE <> <>>
<COND (<AND .AV <NOT <EQUAL? ,HERE .AV>>>
<DESCRIBE-CONTENTS .AV <> <>>)>>
<CONSTANT D-ALL? 1> ;"print everything?"
<CONSTANT D-PARA? 2> ;"started paragraph yet?"
"<DESCRIBE-CONTENTS object-whose-contents-to-describe
level: -1 means only top level (default)
<> means top-level (include crlf)
T for all other levels
or string to print
all?: t if not being called from room-desc >
Prints nothing and rfalses if there was nothing to list.
'The wall crumbles to dust, revealing ' <DESCRIBE-CONTENTS .OBJ> "
<ROUTINE DESCRIBE-CONTENTS (OBJ "OPTIONAL" (LEVEL -1) (ALL? ,D-ALL?)
"AUX" (F <>) N (1ST? T) (IT? <>) (TWO? <>)
(START? <>) (PARA? <>) DB)
<COND (<EQUAL? .LEVEL 2>
<SET LEVEL T>
<SET PARA? T>
<SET START? T>)
(<BTST .ALL? ,D-PARA?>
<SET PARA? T>)>
<SET N <FIRST? .OBJ>>
<COND (<OR .START?
<IN? .OBJ ,ROOMS>
<FSET? .OBJ ,PERSON>
<AND .N
<FSET? .OBJ ,CONTBIT>
<OR <FSET? .OBJ ,OPENBIT>
<FSET? .OBJ ,TRANSBIT>>
<OR <EQUAL? .LEVEL -1>
<FSET? .OBJ ,SEARCHBIT>>>>
<REPEAT ()
<COND (<OR <NOT .N>
<AND <DESCRIBABLE? .N>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .N>>>>
<COND (.F
<COND (.1ST?
<SET 1ST? <>>
<COND (<EQUAL? .LEVEL <> T>
<COND (<NOT .START?>
<COND (<NOT .PARA?>
<SET PARA? T>
<CRLF>)
(<EQUAL? .LEVEL T>
<TELL " ">)>
<DESCRIBE-START .OBJ .N>)>)
(<NOT <EQUAL? .LEVEL -1>>
<TELL .LEVEL>)>)
(.N
<TELL ", ">)
(ELSE
<TELL " and ">)>
<TELL A .F>
<DESCRIBE-SPECIAL .F>
<COND (<AND <NOT .IT?> <NOT .TWO?>>
<SET IT? .F>)
(T
<SET TWO? T>
<SET IT? <>>)>)>
<SET F .N>)>
<COND (.N <SET N <NEXT? .N>>)>
<COND (<AND <NOT .F> <NOT .N>>
<COND (<AND .IT? <NOT .TWO?>>
<THIS-IS-IT .IT?>)>
<COND (<AND .1ST? .START?>
<TELL " nothing">
<RFALSE>)
(<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>>
<COND (<EQUAL? .OBJ ,HERE>
<TELL " here">)>
<TELL ".">)>
<RETURN>)>>
<COND (<EQUAL? .LEVEL <> T>
<SET F <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .F> <RETURN>)
(<AND <FSET? .F ,CONTBIT>
<DESCRIBABLE? .F T>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .F>>>
<SET DB ,D-BIT>
<SETG D-BIT <>>
<COND (<DESCRIBE-CONTENTS
.F
T
<COND (.PARA?
<+ ,D-ALL?
,D-PARA?>)
(ELSE ,D-ALL?)>>
<SET 1ST? <>>
<SET PARA? T>)>
<SETG D-BIT .DB>)>
<SET F <NEXT? .F>>>)>
<COND (<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>
<EQUAL? .OBJ ,HERE <LOC ,WINNER>>>
<CRLF>)>
<NOT .1ST?>)>>
"DESCRIBE-START -- add starters for special classes of objects here"
<ROUTINE DESCRIBE-START (OBJ N)
<COND (<EQUAL? .OBJ ,HERE>
<TELL "There is ">)
(<EQUAL? .OBJ ,PLAYER>
<COND (<EQUAL? ,D-BIT ,WEARBIT>
<TELL " You are wearing ">)
(T
<TELL "You are carrying ">)>)
(<FSET? .OBJ ,PERSON>
;<COND (<NOT <FSET? .OBJ ,NOTHEBIT>>
<TELL "The ">)> ;"hand is only one this clause catches"
<TELL CTHE .OBJ " wears ">)
(<FSET? .OBJ ,SURFACEBIT>
<TELL "Sitting on " THE .OBJ " is ">)
(ELSE
<TELL CTHE .OBJ " contains ">)>>
"DESCRIBE-SPECIAL -- add special trailers to object descriptions here"
<ROUTINE DESCRIBE-SPECIAL (OBJ)
<COND (<FSET? .OBJ ,ONBIT>
<TELL " (providing light)">)
;(<EQUAL? .OBJ ,SLIME>
<TELL " (crawling up your arm)">)
(<FSET? .OBJ ,SLIMEBIT>
<TELL " (slimed)">)
(<AND <EQUAL? .OBJ ,HAND>
<FSET? ,HAND ,PERSON>
<IN? ,HAND ,PLAYER>>
<TELL " (perched on your shoulder)">)
;(<FSET? .OBJ ,WEARBIT>
<TELL " (being worn)">)>>
"determines if an object is describable at all."
<GLOBAL D-BIT <>> ;"bit to screen objects"
<ROUTINE DESCRIBABLE? (OBJ "OPT" (CONT? <>))
<COND (<FSET? .OBJ ,INVISIBLE> <RFALSE>)
(<EQUAL? .OBJ ,WINNER> <RFALSE>)
(<AND <EQUAL? .OBJ <LOC ,WINNER>>
<NOT <EQUAL? ,HERE <LOC ,WINNER>>>>
<RFALSE>)
(<AND <NOT .CONT?> <FSET? .OBJ ,NDESCBIT>>
<RFALSE>)
(,D-BIT
<COND (<G? ,D-BIT 0>
<COND (<FSET? .OBJ ,D-BIT> <RTRUE>)
(ELSE <RFALSE>)>)
(<NOT <FSET? .OBJ <- ,D-BIT>>>
<RTRUE>)
(ELSE <RFALSE>)>)
(ELSE
<RTRUE>)>>
"Determines, for DESCRIBE-OBJECTS, if an object has a simple description
(not a FDESC, LDESC, or whatever)."
<ROUTINE SIMPLE-DESC? (OBJ "AUX" STR)
<COND (<AND <GETP .OBJ ,P?FDESC>
<NOT <FSET? .OBJ ,TOUCHBIT>>>
<RFALSE>)
(<AND <SET STR <GETP .OBJ ,P?DESCFCN>>
<APPLY .STR ,M-OBJDESC? .OBJ>>
<RFALSE>)
(<GETP .OBJ ,P?LDESC> <RFALSE>)
(ELSE <RTRUE>)>>
"DESCRIBE-REST finishes 'Opening the crocodile's mouth reveals '"
<ROUTINE DESCRIBE-REST (OBJ)
<COND (<NOT <DESCRIBE-CONTENTS .OBJ>>
<TELL "nothing">)>
<RTRUE>>
"DESCRIBE-SENT does the whole ball of wax"
<ROUTINE DESCRIBE-SENT (OBJ)
<COND (<NOT <DESCRIBE-CONTENTS .OBJ <> <+ ,D-ALL? ,D-PARA?>>>
<TELL "The " D .OBJ " is empty.">)>
<RTRUE>>
"DESCRIBE-NOTHING returns false if nothing was described"
;<ROUTINE DESCRIBE-NOTHING ()
<COND (<DESCRIBE-CONTENTS ,PRSO 2>
<COND (<NOT <IN? ,WINNER ,PRSO>>
<CRLF>)>
<RTRUE>)
(T ;"nothing"
<RFALSE>)>>
;"END"

1663
frob.zil Normal file

File diff suppressed because it is too large Load Diff

650
globals.zil Normal file
View File

@ -0,0 +1,650 @@
"GLOBALS for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<DIRECTIONS ;"Do not change the order of the first 8 without consulting MARC!"
NORTH NE EAST SE SOUTH SW WEST NW UP DOWN IN OUT>
<SYNONYM NORTH N>
<SYNONYM SOUTH S>
<SYNONYM EAST E>
<SYNONYM WEST W>
<SYNONYM DOWN D>
<SYNONYM UP U>
<SYNONYM NE NORTHEAST>
<SYNONYM NW NORTHWEST>
<SYNONYM SE SOUTHEAST>
<SYNONYM SW SOUTHWEST>
<SYNONYM IN AHEAD>
<GLOBAL HERE <>>
<GLOBAL LIT <>>
<GLOBAL MOVES 0>
<GLOBAL SCORE 0>
;<GLOBAL DIR-TABLE
<PLTABLE 1 P?NORTH "north"
2 P?EAST "east"
4 P?WEST "west"
8 P?SOUTH "south"
16 P?NE "northeast"
32 P?NW "northwest"
64 P?SE "southeast"
128 P?SW "southwest">>
<CONSTANT DIR-BIT 1>
<CONSTANT DIR-DIR 2>
<CONSTANT DIR-NAME 3>
;<ROUTINE DIR-BASE (DIR I O "AUX" (L <GET ,DIR-TABLE 0>))
<DO (CNT 0 .L 3)
<COND (<EQUAL? <GET ,DIR-TABLE <+ .CNT .I>> .DIR>
<RETURN <GET ,DIR-TABLE <+ .CNT .O>>>)>>>
"global objects and associated routines"
<OBJECT GLOBAL-OBJECTS
(FLAGS AN
CONTBIT
DOORBIT
INVISIBLE
LOCKED
NDESCBIT
NOABIT
NOTHEBIT
ONBIT
OUTSIDE
OPENBIT
PERSON
POWERBIT
;RAIRBIT
READBIT
RLANDBIT
RMUNGBIT
;RWATERBIT
SEARCHBIT
SLIMEBIT
SURFACEBIT
TAKEBIT
THE
TOOLBIT
TOUCHBIT
TRANSBIT
TRYTAKEBIT
VEHBIT
WEAPONBIT
WEARBIT)>
<OBJECT LOCAL-GLOBALS
(IN GLOBAL-OBJECTS)
(SYNONYM ZZMGCK) ;"Yes, this needs to exist."
(DESCFCN 0)
(CONTFCN 0)
(GLOBAL GLOBAL-OBJECTS)
(FDESC "F")
(LDESC "F")
;(NAME 0)
;(PSEUDO "FOOBAR" V-WALK)
(THINGS 0)
(COUNT 0)
(SIZE 0)
(TEXT "")
(CAPACITY 0)>
<OBJECT ROOMS
(IN TO ROOMS)>
<GLOBAL P-DIRECTION <>>
<OBJECT INTDIR
(IN GLOBAL-OBJECTS)
(DESC "direction")>
<OBJECT INTNUM
(IN GLOBAL-OBJECTS)
(DESC "number")
(SYNONYM INTNUM)
(ADJECTIVE NUMBER)
(ACTION INTNUM-F)>
<ROUTINE INTNUM-F ()
<COND (<PRSO? ,INTNUM>
<COND (<HERE? ,CS-ELEVATOR-ROOM>
<REDIRECT ,INTNUM ,FLOOR-BUTTON>
<RTRUE>)
(<HERE? ,KITCHEN>
<PUT ,P-ADJW 0 ,W?INTNUM>
<REDIRECT ,INTNUM ,CONTROLS>
<RTRUE>)
(<VERB? PUSH>
<TELL S "There's no number ""to push here." CR>)>)>>
<OBJECT PSEUDO-OBJECT
(IN GLOBAL-OBJECTS)
(DESC "pseudo")
(ACTION ME-F)>
<OBJECT IT
(IN GLOBAL-OBJECTS)
(SYNONYM IT THEM OBJECT FROB)
(DESC "it")
(FLAGS AN NOABIT NOTHEBIT NDESCBIT TOUCHBIT)>
<OBJECT HIM
(IN GLOBAL-OBJECTS)
(SYNONYM HIM HER)
(DESC "him")
(FLAGS NOABIT NOTHEBIT NDESCBIT TOUCHBIT)>
<OBJECT NOT-HERE-OBJECT
(DESC "it")
(FLAGS NOABIT NOTHEBIT)
(ACTION NOT-HERE-OBJECT-F)>
"NOT-HERE-OBJECT-F returns false if it was successful in substituting
an object for the not-here-object. if it returns true, it failed for
some reason."
<ROUTINE NOT-HERE-OBJECT-F ("AUX" TBL (PRSO? T) (X <>))
<COND (<AND <PRSO? ,NOT-HERE-OBJECT>
<PRSI? ,NOT-HERE-OBJECT>>
<TELL "Those things aren't here!" CR>
<RTRUE>)
(<PRSO? ,NOT-HERE-OBJECT>
<SET TBL ,P-PRSO>
<COND (<VERB? FOLLOW WAIT-FOR FIND
TELL WHAT WHERE WHO>
<SET X T>)>)
(T
<SET TBL ,P-PRSI>
<COND (<VERB? ASK-ABOUT ASK-FOR TELL-ABOUT>
<SET X T>)>
<SET PRSO? <>>)>
<COND (<AND .X <NOT <FIND-NOT-HERE .TBL .PRSO?>>>
<COND (<VERB? FOLLOW>
<TELL
"I'm afraid that's not possible." CR>
<RTRUE>)
(<VERB? WAIT-FOR>
<COND (<AND <PRSO? ,RATS>
<IN-TUNNEL? ,RATS>
<IN-TUNNEL?>>
<TELL "All in good time..." CR>
<RTRUE>)
(ELSE
<COND (<PLURAL? ,PRSO>
<TELL "They're">)
(ELSE
<TELL "He's">)>
<TELL " not expected any time soon." CR>
<RTRUE>)>)
(<AND <VERB? TELL>
<OR <NOT <EQUAL? <LOC ,PRSO>
,INF-1 ,INF-2 ,INF-3
,INF-4 ,INF-5>>
<NOT <HERE? ,INF-1 ,INF-2 ,INF-3
,INF-4 ,INF-5>>>>
;<CANT-SEE-ANY-HERE .PRSO?>
;<RTRUE>)
(ELSE
<RFALSE>)>)>
;"Here is the default 'cant see any' printer"
<CANT-SEE-ANY-HERE .PRSO?>>
<ROUTINE CANT-SEE-ANY-HERE (PRSO?)
<COND (<WINNER? ,PLAYER>
<TELL "You">)
(ELSE
<TELL CTHE ,WINNER>)>
<TELL " can't see any ">
<COND (,P-OFLAG
<COND (<PRINT-ADJT ,P-XADJNT>)>
<COND (,P-XNAM <PRINTB ,P-XNAM>)>)
(ELSE
<THING-PRINT .PRSO?>)>
<TELL " here." CR>
<END-QUOTE>>
<ROUTINE FIND-NOT-HERE (TBL PRSO? "AUX" M-F OBJ)
;"Special-case code goes here. <MOBY-FIND .TBL> returns # of matches. If 1,
then P-MOBY-FOUND is it. You can treat the 0 and >1 cases alike or differently.
Always return RFALSE (not handled) if you have resolved the problem."
<SET M-F <MOBY-FIND .TBL>>
%<DEBUG-CODE
<COND (,ZDEBUG
<TELL "[Found " N .M-F " obj]" CR>)>>
<COND (<EQUAL? 1 .M-F>
%<DEBUG-CODE
<COND (,ZDEBUG
<TELL "[Namely: " D ,P-MOBY-FOUND "]" CR>)>>
<COND (.PRSO?
<SETG PRSO ,P-MOBY-FOUND>)
(T
<SETG PRSI ,P-MOBY-FOUND>)>
<RFALSE>)
(T
,NOT-HERE-OBJECT)>>
<OBJECT LIGHT
(IN GLOBAL-OBJECTS)
(DESC "light")
(SYNONYM LIGHT LIGHTS)
(ACTION LIGHT-F)>
<ROUTINE LIGHT-F ()
<COND (<VERB? LAMP-ON>
<COND (,LIT
<TELL ,IT-IS-ALREADY "light" ,PERIOD>)
(T
<TELL
"You need a light source!" CR>)>)
(<VERB? LAMP-OFF>
<TELL ,WASTE-OF-TIME>)>>
<OBJECT GLOBAL-HOLE
(IN LOCAL-GLOBALS)
(FLAGS NDESCBIT TOUCHBIT)
(DESC "hole")
(SYNONYM HOLE)
(ADJECTIVE MUDDY)
(ACTION GLOBAL-HOLE-F)>
<ROUTINE GLOBAL-HOLE-F ()
<COND (<P? DIG GLOBAL-HOLE *>
<PERFORM ,V?DIG ,PRSI>
<RTRUE>)
(<VERB? REACH-IN>
<TELL ,YOU-FIND-NOTHING " of interest." CR>)>>
<OBJECT CEILING
(IN GLOBAL-OBJECTS)
(FLAGS NDESCBIT TOUCHBIT)
(DESC "ceiling")
(SYNONYM CEILIN ROOF)
(ACTION CEILING-F)>
<ROUTINE CEILING-F ()
<COND (<VERB? LOOK-UNDER>
<NEW-VERB ,V?LOOK>
<RTRUE>)>>
<OBJECT AIR
(IN GLOBAL-OBJECTS)
(DESC "air")
(SYNONYM AIR COLD)
(FLAGS AN NOABIT)>
<OBJECT FEET
(IN GLOBAL-OBJECTS)
(SYNONYM FEET FOOT)
(DESC "your feet")
(FLAGS NDESCBIT TOOLBIT TOUCHBIT NOABIT NOTHEBIT)>
<OBJECT HANDS
(IN GLOBAL-OBJECTS)
(SYNONYM HANDS HAND)
(ADJECTIVE BARE MY)
(DESC "your hand")
(FLAGS NDESCBIT TOOLBIT TOUCHBIT NOABIT NOTHEBIT)
(GENERIC GENERIC-HAND-F)>
<ROUTINE GENERIC-HAND-F ()
,HAND>
<OBJECT HEAD
(IN GLOBAL-OBJECTS)
(DESC "your head")
(SYNONYM HEAD FACE)
(ADJECTIVE YOUR MY)
(FLAGS NOABIT NOTHEBIT)>
<OBJECT EYES
(IN GLOBAL-OBJECTS)
(DESC "your eyes")
(SYNONYM EYE EYES)
(ADJECTIVE YOUR MY)
(FLAGS NOABIT NOTHEBIT)
(ACTION EYES-F)>
<ROUTINE EYES-F ()
<COND (<VERB? OPEN>
<TELL "They are." CR>)
(<VERB? CLOSE>
<TELL "That won't help." CR>)
(<NOT ,LIT>
<TELL ,TOO-DARK>)>>
<OBJECT PLAYER
(IN TERMINAL-ROOM)
(SYNONYM PROTAG)
(DESC "it")
(FLAGS NDESCBIT INVISIBLE PERSON CONTBIT TRANSBIT)
(ACTION PLAYER-F)>
<ROUTINE PLAYER-F ("AUX" DOOR)
<COND (,ON-CABLE?
<COND (<OR <P? DROP ROOMS>
<VERB? DISEMBARK TAKE TAKE-OFF>
<HOSTILE-VERB?>
<AND <VERB? WALK>
<EQUAL? ,P-WALK-DIR ,P?DOWN>>>
<SETG ON-CABLE? <>>
<TELL "You let go of the cable and drop to the floor">
<COND (,RATS-HERE
<COND (<L? ,RATS-HERE 2>
<SETG RATS-HERE 2>)>
<TELL
" among the now-frenzied rats">)>
<TELL ,PERIOD>)>)
(,HOLDING-DOORS?
<SET DOOR <THIS-FLOOR-DOOR>>
<COND (<AND <NOT <PRSO? ,ELEVATOR-DOOR .DOOR>>
<NOT <PRSI? ,ELEVATOR-DOOR .DOOR>>
<NOT <GAME-VERB?>>
<NOT <PASSIVE-VERB?>>>
<TELL ,HOLDING-IS-ALL CR>)>)
(ELSE <RFALSE>)>>
<OBJECT ME
(IN GLOBAL-OBJECTS)
(SYNONYM ME MYSELF SELF)
(DESC "yourself")
(FLAGS PERSON TOUCHBIT NOABIT NOTHEBIT)
(ACTION ME-F)>
<ROUTINE MENTAL-COLLAPSE ()
<TELL
"Talking to yourself is a sign of impending mental collapse." CR>>
<ROUTINE ME-F ("AUX" OLIT)
<COND (<P? EXAMINE ,ME>
<V-DIAGNOSE>)
(<VERB? TELL HELP>
<MENTAL-COLLAPSE>
<END-QUOTE>)
(<VERB? LISTEN>
<TELL "Yes?" CR>)
(<VERB? WAKE>
<TELL ,YOU-ARE>
<TELL ,PERIOD>)
(<AND <WINNER? ,PLAYER>
<VERB? GIVE>>
<COND (<PRSO? ,ME>
<TELL ,WASTE-OF-TIME>)
(<PRSI? ,ME>
<COND (<IN? ,PRSO ,PLAYER>
<PRE-TAKE>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>)>)
(<VERB? MOVE>
<V-WALK-AROUND>)
(<VERB? SEARCH>
<V-INVENTORY>
<RTRUE>)
(<VERB? KILL MUNG BURY SMELL>
<JIGS-UP
"Verdict: suicide while the balance of the mind was disturbed.">
<RTRUE>)
(<VERB? WHO>
<V-WHAT>)
(<VERB? FOLLOW>
<TELL
"You're getting ahead of yourself." CR>)
(<VERB? LOOK-BEHIND>
<TELL
"You look back over your shoulder. ">
<COND (<PROB 80>
<TELL
S "There's nothing ""there." CR>)
(<PROB 80>
<TELL
"Was that a flicker of movement in the distance?" CR>)
(ELSE
<TELL
"You see something duck back into the shadows." CR>)>)>>
<OBJECT GLOBAL-ROOM
(IN GLOBAL-OBJECTS)
(DESC "room")
(SYNONYM ROOM CHAMBER PLACE BASEMENT)
(ADJECTIVE AREA)
(ACTION GLOBAL-ROOM-F)>
<ROUTINE GLOBAL-ROOM-F ()
<COND (<VERB? LOOK EXAMINE LOOK-INSIDE>
<V-LOOK>
<RTRUE>)
(<P? PUT * ,GLOBAL-ROOM>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<VERB? THROUGH WALK-TO>
<V-WALK-AROUND>)
(<VERB? DROP LEAVE EXIT>
<DO-WALK ,P?OUT>)
(<VERB? WALK-AROUND>
<TELL
"Walking around the room reveals nothing new. To move elsewhere, just type
the desired direction." CR>)
(<VERB? LAMP-ON>
<NEW-PRSO ,LIGHT>
<RTRUE>)>>
<SETG C-NORTH 1>
<SETG C-EAST 2>
<SETG C-WEST 4>
<SETG C-SOUTH 8>
<SETG C-NE 16>
<SETG C-NW 32>
<SETG C-SE 64>
<SETG C-SW 128>
<CONSTANT C-NORTH 1>
<CONSTANT C-EAST 2>
<CONSTANT C-WEST 4>
<CONSTANT C-SOUTH 8>
<CONSTANT C-NE 16>
<CONSTANT C-NW 32>
<CONSTANT C-SE 64>
<CONSTANT C-SW 128>
<OBJECT NORTH-WALL
(IN GLOBAL-OBJECTS)
(DESC "north wall")
(SYNONYM WALL)
(ADJECTIVE NORTH)
(GENERIC GENERIC-WALL-F)
(ACTION WALL-F)>
<OBJECT EAST-WALL
(IN GLOBAL-OBJECTS)
(DESC "east wall")
(SYNONYM WALL)
(ADJECTIVE EAST)
(FLAGS AN)
(GENERIC GENERIC-WALL-F)
(ACTION WALL-F)>
<OBJECT WEST-WALL
(IN GLOBAL-OBJECTS)
(DESC "west wall")
(SYNONYM WALL)
(ADJECTIVE WEST)
(GENERIC GENERIC-WALL-F)
(ACTION WALL-F)>
<OBJECT SOUTH-WALL
(IN GLOBAL-OBJECTS)
(DESC "south wall")
(SYNONYM WALL)
(ADJECTIVE SOUTH)
(GENERIC GENERIC-WALL-F)
(ACTION WALL-F)>
<OBJECT WALL
(IN GLOBAL-OBJECTS)
(DESC "wall")
(SYNONYM WALL WALLS)
(GENERIC GENERIC-WALL-F)
(ACTION WALL-F)>
<ROUTINE GENERIC-WALL-F ()
,WALL>
<ROUTINE WALL-F ()
<COND (<VERB? EXAMINE>
<TELL ,IT-LOOKS-LIKE "a wall." CR>)
(<VERB? LOWER MUNG>
<TELL ,YOU-CANT "pull down a wall that easily." CR>)>>
<OBJECT DIRT
(IN GLOBAL-OBJECTS)
(DESC "dirt")
(SYNONYM RUBBLE DEBRIS DUST DIRT)
(FLAGS NOABIT)>
<OBJECT GROUND
(IN GLOBAL-OBJECTS)
(SYNONYM FLOOR GROUND FIELD)
(ADJECTIVE STONE SANDY TINY LEVEL)
(DESC "floor")
;(FLAGS NOABIT)
(ACTION GROUND-F)>
<ROUTINE GROUND-F ()
<COND (<VERB? EXAMINE>
<COND ;(<FSET? ,HERE ,RAIRBIT>
<TELL
"It's a long way down." CR>)
(ELSE
<TELL
"It's still there." CR>)>)
(<P? PUT * ,GROUND>
<PERFORM ,V?BURY ,PRSO>
<RTRUE>)
(<VERB? CLIMB-UP CLIMB-ON CLIMB-FOO BOARD>
<TELL ,WASTE-OF-TIME>)
(<VERB? LOOK-UNDER>
<TELL
"You never did master X-rays. Freshman physics was such a drag." CR>)>>
<OBJECT CORRIDOR
(IN GLOBAL-OBJECTS)
(DESC "passage")
(SYNONYM PASSAGE CORRIDOR EXIT TUNNEL)
(ADJECTIVE LONG DARK STEAM)
(ACTION CORRIDOR-F)>
<ROUTINE CORRIDOR-F ()
<COND (<VERB? THROUGH WALK-TO>
<V-WALK-AROUND>)
(<AND <VERB? FOLLOW CLIMB-DOWN>
<HERE? ,YUGGOTH ,BOWL-ROOM ,PLATFORM-ROOM>>
<DO-WALK ,P?DOWN>)
(<VERB? CLIMB-DOWN>
<COND (<HERE? ,DEAD-STORAGE>
<DO-WALK ,P?EAST>)>)>>
;<OBJECT LOCAL-WATER
(SYNONYM WATER)
(ADJECTIVE FRESH SALT SEA)
(DESC "water")
(FLAGS NOABIT)
(ACTION WATER-F)>
;<OBJECT WATER
(IN LOCAL-GLOBALS)
(SYNONYM WATER)
(DESC "water")
(FLAGS NDESCBIT NOABIT)
(ACTION WATER-F)>
;<ROUTINE WATER-F ()
<COND (<P? (POUR THROW) ,LOCAL-WATER>
<COND (<AND <LOC ,PRSO>
<IN? <LOC ,PRSO> ,WINNER>>
<PERFORM ,V?POUR <LOC ,PRSO>>
<RTRUE>)
(ELSE
<DONT-HAVE-THAT>)>)
(<VERB? EAT DRINK DRINK-FROM>
<COND (<PRSO? ,LOCAL-WATER>
<COND (<IN? <LOC ,PRSO> ,WINNER>
<COND (<FSET? <LOC ,PRSO> ,OPENBIT>
<REMOVE ,PRSO>)
(ELSE
<TELL-OPEN-CLOSED <LOC ,PRSO>>
<RTRUE>)>)
(<NOT <GLOBAL-IN? ,WATER ,HERE>>
<TELL ,YOU-DONT-HAVE THE <LOC ,PRSO> ,PERIOD>
<RTRUE>)>)>
<COND (<OR <AND <PRSO? ,LOCAL-WATER>
<FSET? ,PRSO ,RMUNGBIT>>
;<AND <PRSO? ,WATER>
<HERE? ;"ROOM WITH WATER">>>
<TELL
"It's bitter and you spit it out immediately.">)
(ELSE
<TELL
"That was refreshing, but you shouldn't drink untested water.">)>
<CRLF>)
(<VERB? REACH-IN RUB>
<TELL
"It's wet." CR>)
(<VERB? LOOK-INSIDE LOOK-UNDER>
<MAKE-OUT>)
;(<VERB? THROUGH LEAP>
<COND (<FSET? ,HERE ,RWATERBIT>
<TELL ,YOU-ARE ,PERIOD>)>)>>
<ROUTINE RANDOM-PSEUDO ()
<COND (<AND <EQUAL? ,P-PNAM ,W?SHAFT>
<VERB? EXAMINE LOOK-UP>>
<LIKE-A-SHAFT>)
(<AND <EQUAL? ,P-PNAM ,W?TRIANGLE>
<VERB? EXAMINE>>
<TELL
"It's \"Floppy Triangles,\" a work of modern sculpture." CR>)
(<VERB? EXAMINE LOOK-INSIDE LOOK-BEHIND>
<TELL S "You see nothing special about " "it." CR>)
(<VERB? TAKE>
<YOU-CANT-X-THAT "take">)>>
"sleep, hunger, etc."
;<GLOBAL LAST-SLEPT 40> ;"move when you last woke-up, for purposed of V-TIME"
<OBJECT GLOBAL-SLEEP
(IN GLOBAL-OBJECTS)
(DESC "sleep")
(SYNONYM SLEEP NAP)
(FLAGS NOABIT NOTHEBIT)
(ACTION GLOBAL-SLEEP-F)>
<ROUTINE GLOBAL-SLEEP-F ()
<COND (<VERB? WALK-TO TAKE>
<NEW-VERB ,V?SLEEP>
<RTRUE>)
(<VERB? FIND>
<TELL "Sleep anywhere." CR>)>>
<OBJECT NOISE
(IN GLOBAL-OBJECTS)
(DESC "noise")
(SYNONYM NOISE SOUND)>
<OBJECT SNOW
(IN GLOBAL-OBJECTS)
(DESC "snow")
(SYNONYM SNOW SNOWSTORM BLIZZARD)
(ACTION SNOW-F)>
<ROUTINE SNOW-F ()
<COND (<VERB? EXAMINE>
<COND (<FSET? ,HERE ,OUTSIDE>
<TELL "It's still coming down." CR>)
(ELSE <TELL "You are inside." CR>)>)>>

659
green.zil Normal file
View File

@ -0,0 +1,659 @@
"BROWN for
Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<ROOM BROWN-BUILDING
(IN ROOMS)
(DESC "Brown Building")
(UP TO BROWN-TOP-FLOOR)
(DOWN TO BROWN-BASEMENT)
(SOUTH TO COURTYARD)
(OUT TO COURTYARD)
(FLAGS ONBIT)
(GLOBAL OUTSIDE-DOOR)
(ACTION BROWN-BUILDING-F)>
<OBJECT BROWN-ELEVATOR
(IN BROWN-BUILDING)
(DESC "elevator doors")
(SYNONYM DOOR DOORS ELEVATOR)
(ADJECTIVE ELEVATOR)
(FLAGS NDESCBIT)
(ACTION BROWN-ELEVATOR-F)>
<ROUTINE BROWN-ELEVATOR-F ()
<COND (<VERB? OPEN PRY WEDGE>
<TELL
"It's broken." CR>)>>
<GLOBAL THE-LOBBY "This is the lobby of the ">
<ROUTINE BROWN-BUILDING-F (RARG)
<COND (<RARG? LOOK>
<TELL
,THE-LOBBY "Brown Building, an eighteen-story skyscraper
which houses the Meteorology Department and other outposts of the
Earth Sciences. The elevator is out of order, but a long stairway leads up
to the roof, and another leads
down to the basement. A revolving door leads out into the night." CR>)>>
<ROOM COURTYARD
(IN ROOMS)
(DESC "Small Courtyard")
(LDESC
"This courtyard is a triumph of modern architecture. It is spare,
cold, angular, overwhelming in size, and bears a striking resemblance
to a wind tunnel whenever the breeze picks up. Right now this is true
of the whole campus, though. A huge mass lurks nearby, and an almost
featureless skyscraper is to the north.")
(IN TO BROWN-BUILDING)
(NORTH TO BROWN-BUILDING)
(GLOBAL OUTSIDE-DOOR)
(FLAGS ONBIT OUTSIDE)
(ACTION COURTYARD-F)
(THINGS <PSEUDO (FLOPPY TRIANGLE RANDOM-PSEUDO)
(HUGE MASS RANDOM-PSEUDO)>)>
<ROUTINE COURTYARD-F (RARG)
<COND ;(<RARG? LOOK>
<TELL
CR>)
(<RARG? ENTER>
<EXIT-TO-COLD>)
(<RARG? LEAVE>
<EXIT-FROM-COLD>)>>
<OBJECT OUTSIDE-DOOR
(IN LOCAL-GLOBALS)
(DESC "outside door")
(SYNONYM DOOR)
(ADJECTIVE OUTSIDE)
(FLAGS DOORBIT LOCKED NDESCBIT OPENABLE)
(GENERIC GENERIC-DOOR-F)
(ACTION OUTSIDE-DOOR-F)>
<ROUTINE OUTSIDE-DOOR-F ()
<COND (<FSET? ,HERE ,OUTSIDE>
<COND (<VERB? THROUGH>
<DO-WALK ,P?IN>)
(<HERE? ,MASS-AVE ,SMITH-ST ,COURTYARD ,CS-ROOF>
<COND (<VERB? OPEN>
<TELL
"The door opens from this side." CR>)
(<P? UNLOCK * MASTER-KEY>
<TELL
"The door is not keyed to this key." CR>)>)
(<VERB? OPEN UNLOCK>
<TELL
"The door is securely locked." CR>)>)
(ELSE
<COND (<VERB? THROUGH>
<DO-WALK ,P?OUT>)
(<VERB? OPEN>
<TELL
"You can open the door, but it shuts automatically immediately
thereafter." CR>)>)>>
<ROOM GREAT-COURT
(IN ROOMS)
(DESC "Great Court")
(LDESC
"In the spring and summer, this cheery green court is a haven from
classwork. Right now, the majestic buildings of the main campus are
almost invisible in the howling blizzard. A locked door bars your
way to the north.")
(NORTH "The door is locked.")
(FLAGS ONBIT OUTSIDE)
(GLOBAL OUTSIDE-DOOR)
(ACTION GREAT-COURT-F)>
<ROUTINE GREAT-COURT-F (RARG)
<COND ;(<RARG? LOOK>
<TELL
CR>)
(<RARG? ENTER>
<AS-YOU-ENTER-LEAVE "leave">
<EXIT-TO-COLD>)
;(<RARG? LEAVE>
<EXIT-FROM-COLD>)>>
<ROUTINE AS-YOU-ENTER-LEAVE (EL)
<TELL
"As you " .EL ", the door closes and locks behind you." CR CR>>
<ROOM BROWN-BASEMENT
(IN ROOMS)
(DESC "Brown Basement")
(LDESC
"This is a cluttered basement below the Brown Building. Discarded equipment
nearly blocks an already narrow hallway that terminates in a stairway leading
up. The passage itself continues northwest.")
(UP TO BROWN-BUILDING)
(NW TO BROWN-TUNNEL)
(FLAGS ONBIT)
;(ACTION BROWN-BASEMENT-F)
(THINGS <PSEUDO (ELECTRIC EQUIPMENT RANDOM-PSEUDO)
(FILE CABINET RANDOM-PSEUDO)
(<> DETRITUS RANDOM-PSEUDO)>)>
;<ROUTINE BROWN-BASEMENT-F (RARG)
<COND (<RARG? LOOK>
<TELL
CR>)>>
<ROOM BROWN-TOP-FLOOR
(IN ROOMS)
(DESC "Top Floor")
(LDESC
"This is the top of the stairway. A door leads out to the roof here, and
you can hear the wind blowing beyond. There is a sign on the door.")
(DOWN TO BROWN-BUILDING)
(WEST TO BROWN-ROOF IF ROOF-DOOR IS OPEN)
(OUT TO BROWN-ROOF IF ROOF-DOOR IS OPEN)
(FLAGS ONBIT)
(GLOBAL ROOF-DOOR)
;(ACTION BROWN-TOP-FLOOR-F)>
;<ROUTINE BROWN-TOP-FLOOR-F (RARG)
<COND (<RARG? LOOK>
<TELL
CR>)>>
<OBJECT ROOF-DOOR
(IN LOCAL-GLOBALS)
(DESC "roof door")
(SYNONYM DOOR)
(ADJECTIVE ROOF)
(FLAGS DOORBIT LOCKED NDESCBIT OPENABLE)
(ACTION ROOF-DOOR-F)>
<ROUTINE ROOF-DOOR-F ()
<COND (<AND <VERB? OPEN>
<NOT <FSET? ,ROOF-DOOR ,LOCKED>>
<NOT <FSET? ,ROOF-DOOR ,OPENBIT>>>
<FSET ,ROOF-DOOR ,OPENBIT>
<TELL
"You push the door open">
<COND (<HERE? ,BROWN-TOP-FLOOR>
<TELL
", revealing a windswept, snow-covered roof. Frigid
wind whips snow into your face">)>
<TELL "." CR>)
(<P? UNLOCK * MASTER-KEY>
<FCLEAR ,PRSO ,LOCKED>
<TELL ,DOOR-NOW-UNLOCKED>)
(<P? LOCK * MASTER-KEY>
<FSET ,PRSO ,LOCKED>
<TELL
"The door is now locked." CR>)
(<VERB? THROUGH>
<COND (<HERE? ,BROWN-ROOF>
<DO-WALK ,P?IN>)
(ELSE
<DO-WALK ,P?OUT>)>)>>
<OBJECT ROOF-DOOR-SIGN
(IN BROWN-TOP-FLOOR)
(DESC "sign")
(SYNONYM SIGN)
(FLAGS READBIT NDESCBIT)
(TEXT
"It says \"NO ADMITTANCE!\" In smaller, hand-written letters below,
it says \"This means you!\" and below that in different handwriting,
it says \"Who, me?\"")>
<ROOM BROWN-ROOF
(IN ROOMS)
(DESC "Skyscraper Roof")
(LDESC
"A low parapet surrounds a small roof here. The air conditioning cooling
tower and the small protrusion containing the stairs are dwarfed by a
semitransparent dome which towers above you. The blowing snow obscures
all detail of the city across the river to the south.")
(IN PER BROWN-ROOF-EXIT) ;BROWN-TOP-FLOOR
(EAST PER BROWN-ROOF-EXIT)
(UP TO INSIDE-DOME)
(FLAGS ONBIT OUTSIDE)
(GLOBAL ROOF-DOOR LADDER DOME)
(ACTION BROWN-ROOF-F)>
<ROUTINE BROWN-ROOF-EXIT ()
<COND (<IN? ,FLIER ,HERE>
<TELL
"The dark shape, its foul stench overpowering the wind, ">
<COND (<IN? ,FLIER-SHAPE ,HERE>
<REMOVE ,FLIER-SHAPE>
<SETG FLIER-COUNT 3>
<TELL "drops from the dome and ">)>
<TELL "blocks your escape." CR>
<RFALSE>)
(<FSET? ,ROOF-DOOR ,OPENBIT>
,BROWN-TOP-FLOOR)
(ELSE
<TELL "The door leading inside is closed." CR>
<RFALSE>)>>
<ROUTINE BROWN-ROOF-F (RARG)
<COND ;(<RARG? LOOK>
<TELL
CR>)
(<RARG? ENTER>
<EXIT-TO-COLD>)
(<RARG? LEAVE>
<EXIT-FROM-COLD>)
(<RARG? BEG>
<ROOF-BEGS>)>>
<ROUTINE ROOF-BEGS ()
<COND (<P? EXAMINE CEILING>
<TELL "It's made of ">
<COND (<HERE? ,ON-DOME>
<TELL "concrete." CR>)
(ELSE
<TELL "tiny, tarry cinders." CR>)>)
(<P? THROW-OFF * CEILING>
<COND (<AND <PRSO? SMOOTH-STONE>
<IN? ,FLIER ,HERE>>
<PERFORM ,V?ATTACK ,FLIER ,SMOOTH-STONE>
<RTRUE>)
(ELSE
<COND (<HERE? ,BROWN-ROOF>
<MOVE ,PRSO ,COURTYARD>)
(ELSE <REMOVE ,PRSO>)>
<OBJ-OFF-ROOF ,PRSO>)>)
(<VERB? LEAP>
<COND (<IN? ,FLIER ,HERE>
<TELL
"The creature sees you preparing to leap, and springs toward you in a
desperate effort, blood-red mouth contorted with a cry of frustration,
but it's too late." CR>)>
<JIGS-UP
"You leap over the edge. Freezing ice crystals hitting you in the face
as you fall. Then you hit the ground, which is more unpleasant still.">)>>
<OBJECT DOME
(IN LOCAL-GLOBALS)
(DESC "dome")
(SYNONYM DOME)
(ADJECTIVE LARGE WEATHER GREAT)
(FLAGS NDESCBIT)
(ACTION DOME-F)>
<ROUTINE DOME-F ()
<COND (<VERB? THROUGH CLIMB-FOO>
<DO-WALK ,P?UP>)
(<HERE? ,BROWN-ROOF>
<COND (<VERB? EXAMINE>
<TELL
"The dome is large and semitransparent. It's made of some sort of
milky-colored plastic. It dominates the roof. You can climb up to the
entrance via a short ladder." CR>)>)
(ELSE
<COND (<VERB? LEAP>
<JIGS-UP
"It was a long way down. It was quick, though.">)>)>>
<ROOM INSIDE-DOME
(IN ROOMS)
(DESC "Inside Dome")
(LDESC
"You are inside a large domed area. The dome contains equipment that
makes it clear it is a weather observation station. For some reason,
it also contains a small peach tree. Wind whistles outside, and snow
blasts against the semitransparent material of the dome.")
(DOWN PER INSIDE-DOME-EXIT) ;BROWN-ROOF
(OUT PER INSIDE-DOME-EXIT)
(FLAGS ONBIT)
(GLOBAL GLOBAL-HOLE LADDER)
(ACTION INSIDE-DOME-F)
(THINGS
<PSEUDO (<> EQUIPMENT RANDOM-PSEUDO)
(<> DOME RANDOM-PSEUDO)>)>
<ROUTINE INSIDE-DOME-EXIT ()
<COND (<IN? ,FLIER ,HERE>
<TELL
"The creature is blocking your exit." CR>
<RFALSE>)
(ELSE
,BROWN-ROOF)>>
<ROUTINE INSIDE-DOME-F (RARG)
<COND ;(<RARG? LOOK>
<TELL
CR>)
(<RARG? ENTER>
<COND (<AND <ZERO? ,FLIER-COUNT>
<HELD? ,SMOOTH-STONE>>
<QUEUE I-FLIER -1>)>)
(<RARG? BEG>
<COND (<P? (DIG SEARCH) DIRT>
<NEW-PRSO ,TUB>
<RTRUE>)>)
(<RARG? END>
<COND (<AND <ZERO? ,FLIER-COUNT>
<HELD? ,HAND>>
<QUEUE I-FLIER -1>)>)>>
<GLOBAL FLIER-COUNT 0>
<ROUTINE I-FLIER ()
<COND (<AND <NOT <ZERO? ,FLIER-COUNT>>
<IN? ,FLIER ,GLOBAL-OBJECTS>>
<DEQUEUE I-FLIER>
<RFALSE>)>
<SETG FLIER-COUNT <+ ,FLIER-COUNT 1>>
<QUEUE I-FLIER -1>
<COND (<HERE? ,INSIDE-DOME>
<COND (<EQUAL? ,FLIER-COUNT 1>
<MOVE ,FLIER-SHAPE ,HERE>
<MOVE ,FLIER ,BROWN-ROOF>
<TELL CR
"Something smashes against the glass of the dome! You turn
and see a dark shape clinging to the outside of the structure." CR>)
(<EQUAL? ,FLIER-COUNT 2>
<TELL CR ,SHAPE-TWITCHES CR>)
(<EQUAL? ,FLIER-COUNT 3>
<REMOVE ,FLIER-SHAPE>
<TELL CR
"The shape drops out of view." CR>)
(<EQUAL? ,FLIER-COUNT 4>
<TELL CR
"You hear, on the ladder outside, hard claws painfully
climbing towards the dome entrance." CR>)
(<AND <G=? ,FLIER-COUNT 5>
<NOT <IN? ,FLIER ,HERE>>>
<MOVE ,FLIER ,HERE>
<TELL CR
"The creature enters the dome, screaming viciously at you, its
claws reaching out to grasp and rend." CR>)
(ELSE
<FLIER-EATS-HAND?>)>)
(<HERE? ,BROWN-ROOF>
<COND (<EQUAL? ,FLIER-COUNT 1>
<MOVE ,FLIER-SHAPE ,INSIDE-DOME>
<MOVE ,FLIER ,BROWN-ROOF>
<TELL CR
"You hear a strange confusion of wings, and then something
dark and shapeless smashes against the dome above you!" CR>)
(<EQUAL? ,FLIER-COUNT 2>
<TELL CR ,SHAPE-TWITCHES CR>)
(<EQUAL? ,FLIER-COUNT 3>
<REMOVE ,FLIER-SHAPE>
<TELL CR
"The shape drops, crunching into the snow almost next to you.
Its scaly head turns toward you, eyes like coals
staring into yours." CR>)
(<EQUAL? ,FLIER-COUNT 4>
<TELL CR
"The shape rises, baring needle-sharp teeth and pumping its
wings painfully in the gale." CR>)
(<EQUAL? ,FLIER-COUNT 5>
<TELL CR
"The creature approaches, hissing at you as it nears." CR>)
(ELSE <FLIER-EATS-HAND?>)>)>>
<GLOBAL SHAPE-TWITCHES
"The dark shape moves. Above the howl of the wind you
hear a high-pitched keening noise.">
<ROUTINE FLIER-EATS-HAND? ("OPT" (NOCR? <>))
<COND (<AND <IN? ,FLIER ,HERE>
<OR .NOCR?
<IN? ,HAND ,PLAYER>
<IN? ,HAND ,HERE>>>
<MOVE ,FLIER ,GLOBAL-OBJECTS>
<COND (<NOT .NOCR?> <CRLF>)>
<TELL
"In a snake-like strike, the creature ">
<COND (<IN? ,HAND ,WINNER>
<TELL
"attacks! Its toothy jaws close on your hand! Not your hand, but the ">)
(ELSE
<TELL
"snaps at the ">)>
<REMOVE ,HAND>
<COND (<NOT <FSET? ,HAND ,PERSON>>
<TELL "mummified ">)>
<TELL "hand you dug out of the
tub! With a disgusting gobbling noise, the flier swallows the hand, and
then, ">
<COND (<HERE? ,BROWN-ROOF>
<TELL
"its wings beating feebly against the wind, it sails away into the gale.">)
(ELSE
<TELL
"using its wings to push itself away, it scuttles out into the cold and
away.">)>
<CRLF>)>>
<OBJECT FLIER-SHAPE
(DESC "dark shape")
(SYNONYM SHAPE FLIER THING)
(ADJECTIVE DARK SHAPELESS)
(FLAGS NDESCBIT)
(ACTION FLIER-SHAPE-F)>
<ROUTINE FLIER-SHAPE-F ()
<COND (<VERB? EXAMINE>
<TELL
,YOU-CANT "tell much from here. It's large and dark,
but the dome obscures all detail." CR>)>>
<OBJECT FLIER
(DESC "creature")
(SYNONYM SHAPE FLIER CREATURE)
(ADJECTIVE DARK)
(DESCFCN FLIER-DESC)
(GENERIC GENERIC-CREATURE-F)
(VALUE 5)
(ACTION FLIER-F)>
<ROUTINE FLIER-DESC (RARG OBJ)
<COND (<RARG? OBJDESC?> <RTRUE>)
(ELSE
<TELL
"A dark shape watches balefully from nearby.">)>>
<ROUTINE FLIER-F ()
<COND (<IN? ,FLIER ,GLOBAL-OBJECTS>
<COND (<NOT <ABSTRACT-VERB?>>
<TELL
"The creature has disappeared as though it never was." CR>)>)
(<VERB? EXAMINE>
<TELL
"Like a black sheet flapping in the wind, the dark flier is hard to see.
Red eyes glow like coals on its scaly, bullet-shaped head. Human-like
hands clench and unclench. Sharp needles of teeth project wickedly from
its twisted jaw." CR>)
(<VERB? SMELL>
<TELL
"Its stench is that of a foul eater of carrion, overlaid with another
smell you can't place, but which is even less appetizing." CR>)
(<AND <VERB? ATTACK KILL> <NOT <PRSI? ,SMOOTH-STONE>>>
<TELL
"Hissing and screeching, the creature fends off your attack. Its
head jerks from side to side, watching you." CR>)
(<VERB? GIVE>
<COND (<PRSO? ,HAND>
<FLIER-EATS-HAND? T>)
(<PRSO? ,SMOOTH-STONE>
<TELL
CTHE ,PRSI " edges away." CR>)>)
(<AND <P? (THROW POUR) * FLIER>
<NOT <PRSO? ,SMOOTH-STONE ,ELIXIR>>>
<MOVE ,PRSO ,HERE>
<TELL
"The creature darts to the side, dodging " THE ,PRSO ,PERIOD>)>>
<OBJECT PEACH-TREE
(IN INSIDE-DOME)
(DESC "peach tree")
(SYNONYM TREE)
(ADJECTIVE PEACH)
(FLAGS NDESCBIT)
(ACTION PEACH-TREE-F)>
<ROUTINE PEACH-TREE-F ()
<COND (<VERB? EXAMINE>
<TELL
"It's a small peach tree planted in a very large tub of
earth. It appears healthy, although as it is wintertime, the tree
has no leaves." CR>)
(<VERB? RUB>
<TELL
"It feels like wood, but there is something slippery on it higher up." CR>)
(<P? (ATTACK CUT) * AXE>
<TELL
"At the last second, you realize it would be an unspeakable act of
vandalism." CR>)
(<VERB? SHAKE>
<TELL
"You shake it, but nothing drops. Its branches are bare." CR>)
(<VERB? CLIMB-ON CLIMB-UP CLIMB-FOO>
<TELL
S "You start to climb " "the tree, but
as you get partway up, your hands encounter a slippery substance
which covers the limbs at this height. Not only is it extremely unpleasant
to touch, it makes the tree too slippery to climb any further." CR>)>>
<OBJECT TUB
(IN INSIDE-DOME)
(DESC "tub of dirt")
(SYNONYM TUB DIRT EARTH)
(ADJECTIVE WOODEN LARGE)
(FLAGS NDESCBIT CONTBIT OPENBIT SEARCHBIT)
(CAPACITY 30)
(ACTION TUB-F)>
<ROUTINE TUB-F ()
<COND (<VERB? EXAMINE>
<TELL
"The tub is full of dirt and \"condo chips\" (those pine bark
chips that are spread around condos and shopping centers by the
ton). The dirt has been disturbed recently." CR>)
(<VERB? DIG SEARCH LOOK-INSIDE>
<COND (<NOT <FSET? ,HAND ,TOUCHBIT>>
<FSET ,HAND ,TOUCHBIT>
<MOVE ,HAND ,TUB>
<SCORE-OBJECT ,HAND>
<TELL
S "You root around ""in the dirt for a while, when you encounter something
hard. Further exploration reveals it to be a dried, chewed
looking human hand." CR>)
(ELSE
<TELL
,YOU-FIND-NOTHING " further, which is something of a relief." CR>)>)>>
<OBJECT TATTOO
(IN HAND)
(DESC "tattoo")
(SYNONYM TATTOO SYMBOL)
(ADJECTIVE STRANGE)
(FLAGS NDESCBIT)
(SIZE 0)
(GENERIC GENERIC-SYMBOL-F)
(ACTION TATTOO-F)>
<ROUTINE TATTOO-F ()
<COND (<VERB? EXAMINE READ>
<TELL
"The tattoo is old and faded. It was done in red ink and is very
artistically drawn. ">
<TELL-SYMBOL ,HAND>
<CRLF>)
(<VERB? RUB>
<TELL
"This part of the hand feels particularly cold." CR>)>>
<OBJECT HAND
(DESC "human hand")
(SYNONYM HAND)
(ADJECTIVE DEAD MUMMIFIED HUMAN)
(VALUE 5)
(HEAT 0)
(FLAGS TAKEBIT SEARCHBIT OPENBIT CONTBIT)
(GENERIC GENERIC-HAND-F)
(CONTFCN HAND-F)
(ACTION HAND-F)>
<ROUTINE HAND-F ("OPT" (RARG <>))
<COND (<RARG? CONTAINER>
<COND (<FSET? ,HAND ,PERSON>
<COND (<VERB? WEAR>
<TAKE-OUT-FIRST ,PRSO ,HAND>)
(<OR <NOT <VERB? TAKE>>
<NOT <HELD? ,HAND>>>
<NEW-PRSO ,HAND>)>)>)
(<WINNER? ,HAND>
<TELL
"As you speak, the hand sits still, but there is
no other noticeable result." CR>
<END-QUOTE>)
(<VERB? EXAMINE>
<COND (<FSET? ,HAND ,PERSON>
<TELL
"There are stains, scars, ">
<COND (<IN? ,RING ,HAND>
<TELL A ,RING ", ">)>
<TELL "and a tattoo on the hand. ">
<COND (,LAIR-FLAG
<COND (<HELD? ,HAND>
<HAND-POINTS>)
(ELSE
<TELL
"It's splashing in" ,THE-POOL>)>)
(ELSE
<TELL
"It looks perfectly normal and alive, ignoring the fact that there
is no arm attached to it. It doesn't appear to mind, so why should you?" CR>)>)
(ELSE
<TELL
"The hand is very old. It's dry and very light, mummified in fact. There
are stains, scars, and dried blood on it. There is a tattoo on the back
of it. The hand appears to have been severed by the application of very
sharp teeth, perhaps an animal's." CR>)>)
(<AND <PRSO? ,HAND>
<OR <VERB? TAKE PUT THROW>
<P? RUB * HAND>
<HOSTILE-VERB?>>
<FSET? ,HAND ,PERSON>>
<COND (<HERE? ,INNER-LAIR>
<TELL
CTHE ,HAND ", muddy and wet, wiggles out of your grasp." CR>)
(<IN? ,HAND ,PLAYER>
<TELL
CTHE ,HAND " scuttles away to your other shoulder." CR>)>)
(<P? PUT-ON RING HAND>
<COND (<FSET? ,HAND ,PERSON>
<FCLEAR ,RING ,WEARBIT>
<MOVE ,RING ,HAND>
<TELL
"The ring fits the hand perfectly." CR>)
(ELSE
<TELL
,YOU-CANT "get the ring onto the dry flesh of the hand." CR>)>)
(<P? (GIVE SHOW) * HAND>
<COND (<FSET? ,HAND ,PERSON>
<TELL "The hand ">
<COND (<IN? ,HAND ,VAT>
<TELL "is preoccupied." CR>)
(<FSET? ,PRSO ,PERSON>
<TELL "doesn't react." CR>)
(ELSE
<TELL
"scurries to " THE ,PRSO " and touches it all over, much as a
blind person would examine something." CR>)>)>)
(<P? RUB ,HAND>
<COND (<NOT <HELD? ,HAND>>
<NOT-HOLDING ,HAND>)
(<FSET? ,HAND ,PERSON>
<TELL
"It's warm and dry." CR>)
(ELSE
<TELL
"It's dry and cold. In fact, it's mummified." CR>)>)
(<AND <VERB? FOLLOW>
<HERE? ,INNER-LAIR>>
<TELL
"The pool isn't that deep!" CR>)>>

35
h1.zil Normal file
View File

@ -0,0 +1,35 @@
"H for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<SNAME "H1">
<PRINC "
*** The Lurking Horror: Interactive Horror ***
">
<VERSION ZIP> ;"maybe ezip or xzip someday"
<FREQUENT-WORDS?> ;"include frequent words"
;<LONG-WORDS?> ;"make a table of long words"
<SETG ZDEBUGGING? <>> ;"don't include debugging code"
<SETG NEW-VOC? T> ;"allows words to be adj/noun/verb all at once!"
<SET REDEFINE T> ;"don't stop and ask"
<INSERT-FILE "MISC">
<INSERT-FILE "PARSER">
<INSERT-FILE "SYNTAX">
<INSERT-FILE "DEBUG">
<INSERT-FILE "RECORD">
<INSERT-FILE "INTERRUPTS">
<INSERT-FILE "DESC">
<INSERT-FILE "VERBS">
<INSERT-FILE "GLOBALS">
<INSERT-FILE "CS">
<INSERT-FILE "HACKER">
<INSERT-FILE "PC">
<INSERT-FILE "YUGGOTH">
<INSERT-FILE "GREEN">
<INSERT-FILE "FROB">
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>

BIN
h1.zip Normal file

Binary file not shown.

200
h1freq.xzap Normal file
View File

@ -0,0 +1,200 @@
.FSTR FSTR?1,"the " ;2376 1189
.FSTR FSTR?2,"The " ;1167 390
.FSTR FSTR?3,", " ;1157 1158
.FSTR FSTR?4,"You " ;954 319
.FSTR FSTR?5,"and " ;928 465
.FSTR FSTR?6,". " ;741 742
.FSTR FSTR?7,"It's " ;610 123
.FSTR FSTR?8,"you " ;598 300
.FSTR FSTR?9,"is " ;493 494
.FSTR FSTR?10,"your " ;486 163
.FSTR FSTR?11,"of " ;469 470
.FSTR FSTR?12,"to " ;426 427
.FSTR FSTR?13,"There " ;410 83
.FSTR FSTR?14,"with " ;378 127
.FSTR FSTR?15,"that " ;321 108
.FSTR FSTR?16,"are " ;306 154
.FSTR FSTR?17,"This " ;300 76
.FSTR FSTR?18,"something " ;296 38
.FSTR FSTR?19,"from " ;279 94
.FSTR FSTR?20,"into " ;273 92
.FSTR FSTR?21,"It " ;272 137
.FSTR FSTR?22,"in " ;251 252
.FSTR FSTR?23,"but " ;248 125
.FSTR FSTR?24,"through " ;222 38
.FSTR FSTR?25,"like " ;213 72
.FSTR FSTR?26,"can't " ;210 43
.FSTR FSTR?27,"doesn't " ;210 31
.FSTR FSTR?28,"elevator " ;189 28
.FSTR FSTR?29,"it " ;181 182
.FSTR FSTR?30,"don't " ;180 37
.FSTR FSTR?31,"almost " ;180 37
.FSTR FSTR?32,"already " ;180 31
.FSTR FSTR?33,"around " ;170 35
.FSTR FSTR?34,"appears " ;168 29
.FSTR FSTR?35,"have " ;162 55
.FSTR FSTR?36,"floor " ;160 41
.FSTR FSTR?37,"He " ;156 79
.FSTR FSTR?38,"it's " ;156 40
.FSTR FSTR?39,"looks " ;144 37
.FSTR FSTR?40,"which " ;140 36
.FSTR FSTR?41,"this " ;135 46
.FSTR FSTR?42,"on " ;133 134
.FSTR FSTR?43,"here" ;132 67
.FSTR FSTR?44,"for " ;132 67
.FSTR FSTR?45,"hacker " ;125 26
.FSTR FSTR?46,"about " ;124 32
.FSTR FSTR?47,"very " ;123 42
.FSTR FSTR?48,"out " ;120 61
.FSTR FSTR?49,"more " ;117 40
.FSTR FSTR?50,"chain " ;112 29
.FSTR FSTR?51,"some " ;111 38
.FSTR FSTR?52,"see " ;108 55
.FSTR FSTR?53,"other " ;108 28
.FSTR FSTR?54,"leads " ;108 28
.FSTR FSTR?55,"over " ;105 36
.FSTR FSTR?56,"floor" ;105 36
.FSTR FSTR?57,"isn't " ;105 22
.FSTR FSTR?58,"creature " ;105 16
.FSTR FSTR?59,"They " ;104 27
.FSTR FSTR?60,"revealing " ;104 14
.FSTR FSTR?61,"There's " ;104 14
.FSTR FSTR?62,"one " ;102 52
.FSTR FSTR?63,"can " ;102 52
.FSTR FSTR?64,"not " ;100 51
.FSTR FSTR?65,"tunnel " ;100 21
.FSTR FSTR?66,"anything " ;98 15
.FSTR FSTR?67,"all " ;96 49
.FSTR FSTR?68,"only " ;96 33
.FSTR FSTR?69,"door " ;96 33
.FSTR FSTR?70,"small " ;96 25
.FSTR FSTR?71,"covered " ;96 17
.FSTR FSTR?72,"little " ;95 20
.FSTR FSTR?73,"ladder " ;95 20
.FSTR FSTR?74,"begins " ;95 20
.FSTR FSTR?75,"Tunnel" ;95 20
.FSTR FSTR?76,"has " ;94 48
.FSTR FSTR?77,"open " ;93 32
.FSTR FSTR?78,"just " ;93 32
.FSTR FSTR?79,"as " ;92 93
.FSTR FSTR?80,"Your " ;92 24
.FSTR FSTR?81,"you" ;91 92
.FSTR FSTR?82,"nothing " ;90 16
.FSTR FSTR?83,"holding " ;90 16
.FSTR FSTR?84,"maintenance " ;90 10
.FSTR FSTR?85,"at " ;89 90
.FSTR FSTR?86,"there " ;88 23
.FSTR FSTR?87,"continues " ;88 12
.FSTR FSTR?88,"get " ;86 44
.FSTR FSTR?89,"then " ;84 29
.FSTR FSTR?90,"looking " ;84 15
.FSTR FSTR?91,"You're " ;84 13
.FSTR FSTR?92,"what " ;81 28
.FSTR FSTR?93,"its " ;80 41
.FSTR FSTR?94,"metal " ;80 21
.FSTR FSTR?95,"Department " ;80 9
.FSTR FSTR?96,"been " ;78 27
;word frequency table of 96 most common words
WORDS:: .TABLE
FSTR?1
FSTR?2
FSTR?3
FSTR?4
FSTR?5
FSTR?6
FSTR?7
FSTR?8
FSTR?9
FSTR?10
FSTR?11
FSTR?12
FSTR?13
FSTR?14
FSTR?15
FSTR?16
FSTR?17
FSTR?18
FSTR?19
FSTR?20
FSTR?21
FSTR?22
FSTR?23
FSTR?24
FSTR?25
FSTR?26
FSTR?27
FSTR?28
FSTR?29
FSTR?30
FSTR?31
FSTR?32
FSTR?33
FSTR?34
FSTR?35
FSTR?36
FSTR?37
FSTR?38
FSTR?39
FSTR?40
FSTR?41
FSTR?42
FSTR?43
FSTR?44
FSTR?45
FSTR?46
FSTR?47
FSTR?48
FSTR?49
FSTR?50
FSTR?51
FSTR?52
FSTR?53
FSTR?54
FSTR?55
FSTR?56
FSTR?57
FSTR?58
FSTR?59
FSTR?60
FSTR?61
FSTR?62
FSTR?63
FSTR?64
FSTR?65
FSTR?66
FSTR?67
FSTR?68
FSTR?69
FSTR?70
FSTR?71
FSTR?72
FSTR?73
FSTR?74
FSTR?75
FSTR?76
FSTR?77
FSTR?78
FSTR?79
FSTR?80
FSTR?81
FSTR?82
FSTR?83
FSTR?84
FSTR?85
FSTR?86
FSTR?87
FSTR?88
FSTR?89
FSTR?90
FSTR?91
FSTR?92
FSTR?93
FSTR?94
FSTR?95
FSTR?96
.ENDT
.ENDI

950
hacker.zil Normal file
View File

@ -0,0 +1,950 @@
"HACKER for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<OBJECT HACKER
(IN TERMINAL-ROOM)
(DESC "hacker")
(SYNONYM HACKER YOURSELF)
(FLAGS SEARCHBIT PERSON OPENBIT CONTBIT)
(DESCFCN HACKER-DESC)
(CONTFCN HACKER-F)
(ACTION HACKER-F)>
<ROUTINE HACKER-DESC ("OPT" RARG OBJ)
<COND (<RARG? OBJDESC?> <RTRUE>)
(ELSE
<COND (<HERE? ,TERMINAL-ROOM>
<TELL
"Sitting at a terminal is a hacker whom you recognize.">)
(ELSE
<TELL
"A muddy, scratched-up hacker stands tiredly here.">)>
<RFATAL>)>>
<GLOBAL TOTALLY-UNRESPONSIVE "He is totally unresponsive.|">
<ROUTINE HACKER-F ("OPT" (RARG <>) "AUX" H)
<COND (<RARG? CONTAINER>
<COND (<VERB? TAKE MOVE>
<COND (<G? ,LAIR-CNT 6>
<TELL
"You don't want to get that close to him." CR>)
(ELSE
<TELL
"\"Hey! No snarfage, loser!\" You determine that this means, \"Stop!\"" CR>)>)>)
(<WINNER? ,HACKER>
<COND (<G? ,LAIR-CNT 6>
<TELL
"The hacker replies, \"Meld!\"" CR>)
(<VERB? HELP>
<COND (<HERE? ,TERMINAL-ROOM>
<TELL "\"Be patient!\"" CR>)
(<FSET? ,SMOOTH-STONE ,TOUCHBIT>
<PERFORM ,V?TELL-ME-ABOUT ,PROGRAM>
<RTRUE>)
(ELSE
<TELL
"\"Help? I'm not a T.A. I've got work to do.\"" CR>)>)
(<P? WHO LOVECRAFT>
<NEW-VERB ,V?WHAT>
<RTRUE>)
(<VERB? TELL-ME-ABOUT WHAT>
<COND (<PRSO? ,HACKER>
<TELL
"He's reluctant to boast." CR>)
(<PRSO? ,KEYRING ,KEY-1 ,KEY-2 ,KEY-3 ,KEY-4>
<COND (<GETPT ,MASTER-KEY ,P?VALUE>
<FSET ,MASTER-KEY ,TOUCHBIT>
<MOVE ,MASTER-KEY ,KEYRING>)>
<TELL
"\"I've accumulated a few keys over the years. I'm a licensed locksmith,
which helps. I can get into any room at Tech.\" He pulls the keyring
out on its chain, and shows off a key you hadn't noticed before. \"This is
a master key,\" he says." CR>)
(<PRSO? ,CHINESE-FOOD ,SNACK>
<TELL
"\"Yeah! I'd love some yummy Chinese food. Szechuan style. Ummm!\"" CR>)
(<PRSO? ,MASTER-KEY>
<COND (<IN? ,MASTER-KEY ,GLOBAL-OBJECTS>
<TELL S
"\"Who said anything about any master keys?\" he asks suspiciously.|">)
(ELSE
<THIS-IS-IT ,MASTER-KEY>
<TELL
"\"That's one of my best keys. It's a Tech master key. Not that it really
opens every door at Tech, but I'd say three out of five, at least. Naturally,
some labs are off-limits even to this key.\"" CR>)>)
(<PRSO? ,STUDENTS>
<TELL
"\"Missing students? I knew one of them slightly. Not the sort who would
go away, you know? He was sort of hackeresque, not dumb for an undergrad,
either. Not the type to disappear.\"" CR>)
(<PRSO? ,PROGRAM ,PC ,MENU-BOX ,YAK-WINDOW
,HELP-KEY>
<COND (<ZERO? ,HACKER-HELP>
<TELL
"\"You should consult the documentation.\" He's preoccupied with his
own debugging." CR>)
(<QUEUED? I-HACKER-HELPS>
<TELL
"\"I'm looking at it. Be patient. This isn't some little micro. We're
on a hairy OS on a hairy net.\"" CR>)
(ELSE
<TELL
"\"I already looked at it. The bug is fixed in the sources. Your paper
is gone, unless those Alchemy chompers have a copy.\"" CR>)>)
(<PRSO? ,LOVECRAFT>
<TELL
"\"Wasn't he a fantasy author?\"" CR>)
(<PRSO? ,SMOOTH-STONE>
<TELL
"\"I've never seen one like that. Pretty tasteful, I'd say.\"" CR>)
(<PRSO? ,GLOBAL-URCHINS>
<TELL
"\"There are always urchins around. I remember one or two who became
hackers.\"" CR>)
(<PRSO? ,REPEATER ,INPUT-CABLE ,INPUT-SOCKET>
<TELL
"\"I'll fix it!\"" CR>)
(ELSE
<TELL
"The hacker studiously ignores you, loath to admit there is something he
doesn't know about." CR>)>)
(<VERB? FOLLOW>
<COND (<HERE? ,INNER-LAIR>
<TELL "\"I'm here, aren't I?\"" CR>)
(ELSE
<TELL
"\"I haven't got time. I have new versions of the system, the assembler,
the editor, and the debugger to finish hacking.\"" CR>)>)
(<P? GIVE * ME>
<COND (<NOT <IN? ,CARTON ,HACKER>>
<QUEUE I-FOOD-HINT 2>)>
<COND (<PRSO? ,HELP-KEY>
<PERFORM ,V?HELP>
<RTRUE>)
(<PRSO? ,KEYRING>
<TELL
"\"Well, I can't give you ">
<COND (<IN? ,CARTON ,HACKER>
<TELL "all ">)>
<TELL "my keys, I need them.\" He fondles his
keyring proudly." CR>)
(<PRSO? ,MASTER-KEY>
<COND (<IN? ,MASTER-KEY ,GLOBAL-OBJECTS>
<TELL S
"\"Who said anything about any master keys?\" he asks suspiciously.|">)
(<IN? ,CARTON ,HACKER>
<HACKER-LOANS-KEY>)
(ELSE
<TELL
"\"Fat chance! This is a master key! What have you done for me
lately?\"" CR>)>)
(<PRSO? ,KEY-1 ,KEY-2 ,KEY-3 ,KEY-4>
<TELL
"\"Those are boring old keys. They don't open anything interesting.\"" CR>)
(ELSE
<TELL "\"I don't have that.\"" CR>)>)
(<VERB? TRADE>
<COND (<AND <PRSO? ,CHINESE-FOOD ,CARTON ,MASTER-KEY>
<PRSO? ,CHINESE-FOOD ,CARTON ,MASTER-KEY>>
<SETG HACKER-TRADE? T>
<TELL
"\"You give me the food first.\"" CR>)
(ELSE
<TELL
"\"That's not a good trade.\"" CR>)>)
(<VERB? HELLO>
<TELL
"\"Greetingage.\"">
<COND (<HERE? ,TERMINAL-ROOM>
<TELL " He turns back to his hacking.">)>
<CRLF>)
(ELSE
<TELL "\"Mumble. Frotz.\"" CR>)>)
(<VERB? EXAMINE>
<COND (<HERE? ,INNER-LAIR>
<COND (<G? ,LAIR-CNT 6>
<TELL
"He looks vacant-eyed and dangerous." CR>)
(ELSE
<TELL
"He's muddy, wet, and tired looking." CR>)>)
(ELSE
<TELL "The hacker ">
<COND (<AND <NOT <ZERO? ,HACKER-HELP>>
<QUEUED? I-HACKER-HELPS>>
<TELL "is ">
<COND (<EQUAL? ,HACKER-HELP 1>
<TELL "star">)
(ELSE <TELL "sitt">)>
<TELL "ing at your terminal">
<COND (<G? ,HACKER-HELP 1>
<TELL ", typing furiously">)>
<TELL ". Every so
often, he pauses briefly and twirls a lock of his hair. He is also
humming under his breath.">)
(ELSE
<TELL
"sits comfortably on an office chair facing a terminal table,
or perhaps it's just a pile of old listings as tall as a terminal table.
He is typing madly, using just two fingers, but achieves
speeds that typists using all ten fingers only dream of. He is apparently
debugging a large assembly language program, as the screen of his terminal
looks like a spray of completely random characters.">)>
<TELL " The hacker is dressed
in blue jeans, an old work shirt, and what might once have been running
shoes. Hanging from his belt is an enormous ring of keys. He is in need
of a bath." CR>)>)
(<VERB? THANK>
<COND (<G? ,LAIR-CNT 6>
<TELL "It doesn't impress him." CR>)
(<OR <HELD? ,MASTER-KEY>
<NOT <ZERO? ,HACKER-HELP>>>
<TELL
"He blushes." CR>)>)
(<VERB? LISTEN>
<COND (<G? ,LAIR-CNT 6>
<TELL
"He sounds like an insincere Moonie." CR>)
(ELSE
<TELL
"He is humming something. It sounds classical, perhaps Bach?" CR>)>)
(<VERB? SMELL>
<TELL
"Either the hacker, his clothing, or both are in need of cleaning." CR>)
(<P? TELL-ABOUT HACKER>
<COND (<G? ,LAIR-CNT 6>
<TELL
"He doesn't appear to be listening." CR>)
(<PRSI? ,PROGRAM ,PC>
<COND (,HACKER-HELP
<TELL
"He listens, more or less. The impression he gives is that non-hackers
don't know anything about the bugs they cause." CR>)
(ELSE
<TELL
"The hacker isn't too interested, and doesn't bother to get up and
investigate more closely. He mumbles something about sending him a
bug message, and returns to his work." CR>)>)
(<IN? ,PRSI ,PLAYER>
<PERFORM ,V?SHOW ,PRSI ,HACKER>
<RTRUE>)
(ELSE
<TELL
"The hacker shows little interest in your remarks." CR>)>)
(<VERB? SHOW>
<COND (<G? ,LAIR-CNT 6>
<TELL ,TOTALLY-UNRESPONSIVE>)
(<FSET? ,PRSO ,FOODBIT>
<TELL
"\"Winnage! I could do with some of that.\"" CR>)
(<PRSO? ,SMOOTH-STONE>
<TELL
"\"Odd-looking thing. Are you a rock-jock?\"" CR>)
(<PRSO? ,HAND>
<TELL
"\"Mondo grosso!\"" CR>)
(<PRSO? ,DEAD-RAT>
<TELL
"\"I have enough of those in my basement. Get rid of it!\"" CR>)
(ELSE
<TELL
"He more or less grunts at you, but shows little interest in " THE ,PRSO
,PERIOD>)>)
(<VERB? GIVE>
<COND (<G? ,LAIR-CNT 6>
<TELL ,TOTALLY-UNRESPONSIVE>)
(<AND <PRSO? ,CARTON ,CHINESE-FOOD>
<IN? ,CHINESE-FOOD ,CARTON>>
<DEQUEUE I-FOOD-HINT>
<SET H <GETP ,CHINESE-FOOD ,P?HEAT>>
<COND (<FSET? ,CHINESE-FOOD ,RMUNGBIT>
<REMOVE ,CARTON>
<TELL
"\"Ouch! This is ridiculous! You've overcooked it. Look at those
poor shrimp! It's ruined, chomper!\" He throws it away." CR>)
(<G=? .H 12>
<MOVE ,CARTON ,HACKER>
<REMOVE ,CHINESE-FOOD>
;<SCORE-OBJECT ,CHINESE-FOOD>
<TELL
"\"Ah! Serious food!\" He plunges into the food with all the delicacy
and table manners of a shark at a feeding frenzy. Soon a satisfied
expression appears on his face. ">
<COND (,HACKER-TRADE?
<HACKER-LOANS-KEY>)
(ELSE
<TELL
"\"Now, what was it you were wanting?\" he asks." CR>)>)
(ELSE
<TELL
"\"Yuck! This is">
<COND (<ZERO? .H> <TELL " cold">)
(ELSE
<TELL "n't warm enough">)>
<TELL "!\" He
thrusts it back into your hands." CR>)>)
(<AND <PRSO? ,SNACK>
<NOT <FSET? ,SNACK ,RMUNGBIT>>>
<MOVE ,SNACK ,HACKER>
<TELL
"\"Hey, thanks!\" He stuffs it down in no time.">
<AFTER-HACKER-EATS>)
(<PRSO? ,COKE>
<TELL
"\"I only drink Diet Coke,\" he complains.">
<AFTER-HACKER-EATS>)
(ELSE
<TELL
"\"No thanks, keep it for now.\"" CR>)>)
(<HOSTILE-VERB?>
<COND (<VERB? THROW>
<MOVE ,PRSO ,HERE>
<TELL "Thrown. ">)>
<COND (<G? ,LAIR-CNT 6>
<TELL
"He is unharmed. \"It is peaceful within,\" he remarks." CR>)
(ELSE
<TELL
"The hacker retreats. \"I know karate!\" he says, somewhat
unconvincingly." CR>)>)>>
<ROUTINE AFTER-HACKER-EATS ()
<COND (<NOT <IN? ,CARTON ,HACKER>>
<TELL
" \"I could really do with some Chinese food, though.\"">)>
<CRLF>>
<GLOBAL HACKER-TRADE? <>>
<ROUTINE HACKER-LOANS-KEY ()
<SETG HACKER-TRADE? <>>
<MOVE ,MASTER-KEY ,PLAYER>
<SCORE-OBJECT ,MASTER-KEY>
<TELL
"\"Well, I suppose I could loan you " THE ,MASTER-KEY " for a while. Just
don't get into trouble, okay? I'll find you later, when I'm done with all this,
and get it back.\" He hands you the key." CR>>
<ROUTINE I-FOOD-HINT ()
<COND (<OR <NOT ,FOOD-COUNT>
<NOT <HERE? <LOC ,HACKER>>>>
<RFALSE>)
(ELSE
<COND (<G? <SETG FOOD-COUNT <+ ,FOOD-COUNT 1>>
<GET ,FOOD-HINTS 0>>
<SETG FOOD-COUNT <>>
<RFALSE>)
(ELSE
<QUEUE I-FOOD-HINT 2>
<TELL CR
"The hacker turns to you and says, \"" <GET ,FOOD-HINTS ,FOOD-COUNT>
"\"" CR>)>)>>
<GLOBAL FOOD-COUNT:FIX 1>
<GLOBAL FOOD-HINTS
<LTABLE (PURE)
"I could stand a little snack, though."
"I don't know where I can get something to eat, what with all the snow."
"I'd hate to leave, with the machines so empty. On the other hand, I'm
seriously starving."
"Why don't you see if you can cons up some food? Then I might be able
to do something for you.">>
<OBJECT KEYRING
(IN HACKER)
(DESC "keyring")
(SYNONYM KEYRING RING KEYCHAIN)
(ADJECTIVE YOUR KEY)
(FLAGS NDESCBIT TAKEBIT CONTBIT SURFACEBIT OPENBIT)
(CONTFCN HACKER-F)
(ACTION KEYRING-F)>
<ROUTINE KEYRING-F ()
<FSET ,KEYRING ,SEARCHBIT>
<COND (<VERB? EXAMINE>
<TELL
"Hanging from the hacker's belt is a watchman's keyring. The large and almost
full ring is connected by an extensible chain to a reel attached to the
hacker's belt. It is difficult to lose such a keyring. ">
<AMONG-THE-KEYS>)
(<VERB? TAKE>
<TELL ,HACKER-PREVENTS "Chomp!\" he says." CR>)
(<VERB? LOOK-INSIDE>
<AMONG-THE-KEYS>)>>
<GLOBAL HACKER-PREVENTS "The hacker prevents you. \"">
<ROUTINE AMONG-THE-KEYS ()
<TELL
"There are multitudinous keys hanging on the keyring. Among them are ">
<DESCRIBE-REST ,KEYRING>
<TELL ,PERIOD>>
<OBJECT KEY-1
(IN KEYRING)
(DESC "red aluminum Yale key")
(SYNONYM KEY KEYS)
(ADJECTIVE YOUR RED ALUMINUM METAL YALE)
(FLAGS TAKEBIT)
(GENERIC GENERIC-KEY-F)>
<OBJECT KEY-2
(IN KEYRING)
(DESC "green aluminum Yale key")
(SYNONYM KEY KEYS)
(ADJECTIVE YOUR GREEN ALUMINUM METAL YALE)
(FLAGS TAKEBIT)
(GENERIC GENERIC-KEY-F)>
<OBJECT KEY-3
(IN KEYRING)
(DESC "green brass Yale key")
(SYNONYM KEY KEYS)
(ADJECTIVE YOUR GREEN BRASS METAL YALE)
(FLAGS TAKEBIT)
(GENERIC GENERIC-KEY-F)>
<OBJECT KEY-4
(IN KEYRING)
(DESC "green aluminum Medeco key")
(SYNONYM KEY KEYS)
(ADJECTIVE YOUR GREEN ALUMINUM METAL MEDECO)
(FLAGS TAKEBIT)
(GENERIC GENERIC-KEY-F)>
<ROUTINE GENERIC-KEY-F ()
<COND (<ACCESSIBLE? ,KEYRING>
,KEYRING)>>
<OBJECT MASTER-KEY
(IN GLOBAL-OBJECTS)
(DESC "master key")
(SYNONYM KEY)
(ADJECTIVE MASTER)
(FLAGS TAKEBIT TRYTAKEBIT)
(VALUE 5)
(ACTION MASTER-KEY-F)
(GENERIC GENERIC-KEY-F)>
<ROUTINE MASTER-KEY-F ()
<COND (<AND <VERB? EXAMINE>
<NOT <IN? ,MASTER-KEY ,GLOBAL-OBJECTS>>>
<TELL
"The key appears to be a master key. There is no indication of what locks
it might fit, however." CR>)
(<AND <VERB? TAKE>
<IN? ,MASTER-KEY ,GLOBAL-OBJECTS>>
<TELL
"You haven't seen any master key." CR>)>>
<OBJECT CARTON
(IN REFRIGERATOR)
(DESC "cardboard carton")
(SYNONYM CARTON SYMBOL)
(ADJECTIVE CARDBOARD STRANGE SCRAWLED INCOMPREHENSIBLE)
(FLAGS READBIT TRYTAKEBIT TAKEBIT SEARCHBIT FOODBIT CONTBIT OPENABLE)
(CAPACITY 10)
(GENERIC GENERIC-SYMBOL-F)
(ACTION CARTON-F)>
<ROUTINE CARTON-F ()
<COND (<OR <EQUAL? ,W?SYMBOL <GET ,P-NAMW 0>>
<EQUAL? ,W?SYMBOL <GET ,P-NAMW 1>>>
<CARTON-SYMBOL-F>)
(<VERB? EXAMINE>
<TELL
"This is a cardboard carton with an incomprehensible symbol scrawled on
the top." CR>)
(<VERB? READ>
<CARTON-SYMBOL-F>)
(<AND <VERB? SMELL>
<IN? ,CHINESE-FOOD ,CARTON>>
<NEW-PRSO ,CHINESE-FOOD>
<RTRUE>)
(<AND <VERB? RUB>
<IN? ,CHINESE-FOOD ,CARTON>
<G? <GETP ,CHINESE-FOOD ,P?HEAT> 8>>
<TELL
"The carton feels warm." CR>)
(<VERB? EAT>
<TELL
"You might find the contents more agreeable than the carton itself." CR>)>>
<ROUTINE CARTON-SYMBOL-F ()
<COND (<VERB? EXAMINE READ>
<TELL
S "It doesn't look like ""Chinese, English, or any other language you know. ">
<TELL-SYMBOL ,CARTON>
<CRLF>)>>
<OBJECT CHINESE-FOOD
(IN CARTON)
(DESC "Chinese food")
(SYNONYM FOOD SHRIMP)
(ADJECTIVE CHINESE SZECHUAN)
(FLAGS NOABIT TAKEBIT TRYTAKEBIT FOODBIT)
;(VALUE 5)
(HEAT 0)
(ACTION CHINESE-FOOD-F)>
<ROUTINE HEAT (OBJ "AUX" (H <GETP .OBJ ,P?HEAT>))
<COND (<G=? .H 20> "radioactive")
(<G=? .H 16> "volcanic")
(<G=? .H 12> "hot")
(<G=? .H 8> "warm")
(<G=? .H 4> "lukewarm")
(ELSE "cold")>>
<ROUTINE CHINESE-FOOD-F ()
<COND (<VERB? EXAMINE>
<TELL
"This is a carton of " <HEAT ,CHINESE-FOOD> " Szechuan shrimp. Lovely red peppers
poke out of the sauce." CR>)
(<AND <VERB? TAKE>
<NOT ,PRSI>>
<COND (<IN? ,PRSO ,CARTON>
<TELL
"If you take it out, it will spill
all over you. Why not take the carton instead?" CR>)>)
(<AND <P? PUT ,CHINESE-FOOD>
<IN? ,CHINESE-FOOD ,CARTON>>
<NEW-PRSO ,CARTON>
<RTRUE>)
(<VERB? EAT TASTE>
<TELL
"It's very (chemically) hot, spicy, and " <HEAT ,CHINESE-FOOD> ".">
<COND (<VERB? EAT>
<REMOVE ,CHINESE-FOOD>
<TELL
" You immediately want to drink something to wash it down.">)>
<CRLF>)>>
<OBJECT COKE
(IN REFRIGERATOR)
(DESC "two liter bottle of Classic Coke")
(SYNONYM COKE COCA-COLA CAP)
(ADJECTIVE TWO LITER BOTTLE CLASSIC)
(FLAGS TAKEBIT FOODBIT OPENABLE)
(SIZE 5)
(HEAT 0)
(ACTION COKE-F)>
<ROUTINE COKE-F ("AUX" SIZ TIRE)
<COND (<VERB? EXAMINE>
<TELL
"This is a">
<SET SIZ <GETP ,COKE ,P?SIZE>>
<COND (<EQUAL? .SIZ 1> <TELL "n empty">)
(<EQUAL? .SIZ 2> <TELL " nearly empty">)
(<EQUAL? .SIZ 3> <TELL " partly full">)
(<EQUAL? .SIZ 4> <TELL " partly empty">)
(<EQUAL? .SIZ 5> <TELL " full">)>
<TELL
" two-liter bottle of ">
<COND (<G? .SIZ 1> <TELL <HEAT ,COKE> " ">)>
<TELL "Classic Coke." CR>)
(<VERB? TASTE>
<TELL "Tastes like the real thing." CR>)
(<VERB? DRINK>
<COND (<G? <SET SIZ <GETP ,COKE ,P?SIZE>> 1>
<PUTP ,COKE ,P?SIZE <SET SIZ <- .SIZ 1>>>
<COND (<SET TIRE <QUEUED? I-TIRED>>
<COND (<G? ,AWAKE -1>
<SETG AWAKE <- ,AWAKE 1>>
<SETG FUMBLE-NUMBER <+ ,FUMBLE-NUMBER 1>>
<SETG LOAD-ALLOWED <+ ,LOAD-ALLOWED 10>>)>
<SET SIZ <+ <GET .TIRE ,C-TICK> 200>>
<PUT .TIRE ,C-TICK .SIZ>)>
<TELL
"Delicious! Contains caffeine, one of the four basic food groups. Too
bad they make it with fructose these days, instead of sucrose. You feel
much more alert and awake now." CR>)
(ELSE
<TELL
"The bottle is empty." CR>)>)
(<VERB? OPEN CLOSE>
<TELL
"You fiddle with the cap for a while. What fun! Much better than working
on your paper." CR>)
(<VERB? LOOK-INSIDE>
<TELL
,IT-LOOKS-LIKE "the inside of a Coke bottle." CR>)
(<AND <VERB? SHAKE>
<G? <SET SIZ <GETP ,COKE ,P?SIZE>> 1>>
<TELL
"The Coke fizzes up." CR>)
(<P? POUR COKE>
<COND (<EQUAL? <SET SIZ <GETP ,COKE ,P?SIZE>> 1>
<TELL
"There is none left in the bottle." CR>)
(ELSE
<PUTP ,COKE ,P?SIZE 1>
<TELL
"You pour the Coke on ">
<COND (,PRSI <TELL THE ,PRSI>)
(ELSE <TELL "the ground">)>
<TELL ", wasting it." CR>)>)>>
<OBJECT SNACK
(IN KITCHEN-COUNTER)
(DESC "package of Funny Bones")
(SYNONYM PACKAGE FOOD BONES WRAPPER)
(ADJECTIVE FUNNY SNACK JUNK)
(FLAGS TAKEBIT FOODBIT READBIT OPENABLE)
(HEAT 0)
(TEXT "\"Funny Bones\"")
(ACTION SNACK-F)>
<ROUTINE SNACK-F ()
<COND (<VERB? EXAMINE>
<TELL
"This is a">
<COND (<FSET? ,SNACK ,RMUNGBIT>
<TELL "n empty">)
(<FSET? ,SNACK ,OPENBIT>
<TELL "n open">
<COND (<GETP ,SNACK ,P?HEAT>
<TELL ", " <HEAT ,SNACK>>)>)>
<TELL
" " 'SNACK ", a snack food made with peanut butter
and chocolate cake." CR>)
(<VERB? OPEN>
<COND (<NOT <FSET? ,SNACK ,OPENBIT>>
<FSET ,SNACK ,OPENBIT>
<TELL
"You open the package, revealing yummy junk food inside." CR>)>)
(<VERB? EAT>
<COND (<FSET? ,SNACK ,RMUNGBIT>
<TELL
"You already did. " S "There's nothing " "left but the wrapper." CR>
<RTRUE>)
(ELSE
<TELL
"You ">
<COND (<NOT <FSET? ,SNACK ,OPENBIT>>
<FSET ,SNACK ,OPENBIT>
<TELL "tear open the package and ">)>
<COND (<G? <GETP ,SNACK ,P?HEAT> 12>
<TELL
"discover that they are too hot to eat." CR>)
(ELSE
<FSET ,SNACK ,RMUNGBIT>
<TELL
"devour the delicious food-like substance." CR>)>)>)>>
<OBJECT MICROWAVE
(IN KITCHEN)
(DESC "microwave oven")
(SYNONYM OVEN)
(ADJECTIVE MICROWAVE OVEN)
(FLAGS NDESCBIT SEARCHBIT CONTBIT TRANSBIT OPENABLE)
(CAPACITY 30)
(ACTION MICROWAVE-F)>
<ROUTINE MICROWAVE-F ()
<COND (<VERB? EXAMINE>
<TELL
"The microwave oven hangs over the kitchen counter. It
has more complicated controls than your pc. There is an LED
readout above the controls. The microwave is ">
<COND (<QUEUED? I-MICROWAVE>
<TELL "on." CR>)
(ELSE
<TELL "off and it's ">
<OPEN-CLOSED ,MICROWAVE>)>)
(<VERB? LAMP-ON>
<PUT ,P-ADJW 0 ,W?START>
<PERFORM ,V?PUSH ,CONTROLS>
<RTRUE>)
(<VERB? LAMP-OFF>
<PUT ,P-ADJW 0 ,W?STOP>
<PERFORM ,V?PUSH ,CONTROLS>
<RTRUE>)
(<VERB? UNPLUG>
<CANT-GET-TO-PLUG>)
(<VERB? OPEN>
<COND (<NOT <FSET? ,MICROWAVE ,OPENBIT>>
<FSET ,MICROWAVE ,OPENBIT>
<TELL CTHE ,MICROWAVE>
<COND (<QUEUED? I-MICROWAVE>
<DEQUEUE I-MICROWAVE>
<TELL " shuts off, and">)>
<TELL " is now open." CR>)>)
(<VERB? CLOSE>
<CLOSE-A-DOOR>)>>
<OBJECT READOUT
(IN KITCHEN)
(DESC "display")
(SYNONYM READOUT DISPLAY)
(ADJECTIVE LED)
(FLAGS NDESCBIT)
(ACTION READOUT-F)>
<ROUTINE READOUT-F ("AUX" SEC)
<COND (<VERB? EXAMINE READ>
<TELL
"The display is currently displaying ">
<COND (<ZERO? ,MICROWAVE-TIMER>
<TELL "the current time">)
(ELSE
<TELL N </ ,MICROWAVE-TIMER 60> ":">
<COND (<L? <SET SEC <MOD ,MICROWAVE-TIMER 60>> 10>
<TELL "0">)>
<TELL N .SEC>)>
<TELL " and the word \""
<GET ,MICROWAVE-TEMPS ,MICROWAVE-TEMP>
".\"" CR>)>>
<GLOBAL MICROWAVE-TIMER 0>
<GLOBAL MICROWAVE-TBL <TABLE 0 0 0 0>>
<GLOBAL MICROWAVE-TEMP 0>
<GLOBAL MICROWAVE-TEMPS
<TABLE (PURE) "off" "warm" "low" "medium" "high">>
<OBJECT CONTROLS
(IN KITCHEN)
(DESC "microwave controls")
(SYNONYM CONTROL BUTTON TIMER)
(ADJECTIVE INTNUM WM LO MED HIGH START STOP CLEAR)
(FLAGS NDESCBIT NOABIT)
(ACTION CONTROLS-F)>
<ADJ-SYNONYM HIGH HI>
<ROUTINE CONTROLS-F ("AUX" ADJ N)
<COND (<VERB? EXAMINE READ>
<TELL
"There are controls labelled 0 to 9, WM, LO, MED, HI, START, CLEAR, and
STOP. ">
<TELL-TIMER>)
(<P? TURN * ,INTNUM>
<CLEAR-MICROWAVE-TBL>
<SETG MICROWAVE-TIMER ,P-NUMBER>
<COND (<G? ,MICROWAVE-TIMER 3600>
<TELL
,YOU-CANT "set it for that long a time." CR>
<RTRUE>)
(ELSE
<TELL-TIMER>)>)
(<VERB? RUB PUSH TYPE ENTER>
<COND (<NOT <SET ADJ <GET ,P-ADJW 0>>>)
(<EQUAL? .ADJ ,W?INTNUM>
<COND (<G? ,P-NUMBER 9>
<COND (,P-TIME?
<TELL
"Why don't you try setting the timer to that?" CR>)
(ELSE
<TELL
S "There's no number " "\"" N ,P-NUMBER "\" on the control panel!" CR>)>)
(ELSE
<PUT ,MICROWAVE-TBL 3 <GET ,MICROWAVE-TBL 2>>
<PUT ,MICROWAVE-TBL 2 <GET ,MICROWAVE-TBL 1>>
<PUT ,MICROWAVE-TBL 1 <GET ,MICROWAVE-TBL 0>>
<PUT ,MICROWAVE-TBL 0 ,P-NUMBER>
<SETG MICROWAVE-TIMER
<+ <GET ,MICROWAVE-TBL 0>
<* <GET ,MICROWAVE-TBL 1> 10>
<* <GET ,MICROWAVE-TBL 2> 60>
<* <GET ,MICROWAVE-TBL 3> 600>>>
<TELL-TIMER>)>)
(<EQUAL? .ADJ ,W?START>
<COND (<QUEUED? I-MICROWAVE>
<TELL
"It's already started." CR>)
(<OR <FSET? ,MICROWAVE ,OPENBIT>
<ZERO? ,MICROWAVE-TIMER>>
<TELL "Nothing happens, as there's ">
<COND (<NOT <ZERO? ,MICROWAVE-TIMER>>
<TELL
"a safety interlock engaged when the door is open." CR>)
(<ZERO? ,MICROWAVE-TIMER>
<TELL
"no time set on it yet." CR>)>)
(ELSE
<COND (<ZERO? ,MICROWAVE-TEMP>
<SETG MICROWAVE-TEMP 4>)>
<CLEAR-MICROWAVE-TBL>
<QUEUE I-MICROWAVE -1>
<TELL
"The microwave starts up. The timer begins counting down." CR>)>)
(<EQUAL? .ADJ ,W?STOP>
<COND (<QUEUED? I-MICROWAVE>
<CLEAR-MICROWAVE-TBL>
<DEQUEUE I-MICROWAVE>
;<HEAT-CONTENTS ,MICROWAVE>
<TELL ,MICROWAVE-STOPS>
<TELL-HEAT 0>)
(ELSE
<ITS-ALREADY-X "off">)>)
(<EQUAL? .ADJ ,W?CLEAR>
<COND (<QUEUED? I-MICROWAVE>
<TELL ,NOTHING-HAPPENS>)
(ELSE
<CLEAR-MICROWAVE-TBL>
<SETG MICROWAVE-TIMER 0>
<TELL
"The timer clears to zero." CR>)>)
(<EQUAL? .ADJ ,W?WM ,W?LO ,W?MED ,W?HIGH ,W?HI>
<COND (<QUEUED? I-MICROWAVE>
<TELL ,NOTHING-HAPPENS>)
(<EQUAL? .ADJ ,W?WM> <TELL-HEAT 1>)
(<EQUAL? .ADJ ,W?LO> <TELL-HEAT 2>)
(<EQUAL? .ADJ ,W?MED> <TELL-HEAT 3>)
(ELSE <TELL-HEAT 4>)>)
(ELSE
<TELL
"Which button?" CR>)>)>>
<ROUTINE CLEAR-MICROWAVE-TBL ()
<PUT ,MICROWAVE-TBL 0 0>
<PUT ,MICROWAVE-TBL 1 0>
<PUT ,MICROWAVE-TBL 2 0>
<PUT ,MICROWAVE-TBL 3 0>>
<GLOBAL HEAT-TABLE
<LTABLE SMOOTH-STONE 0 DEAD-RAT 0 HAND 0
CHINESE-FOOD 0 COKE 0 SNACK 0>>
<ROUTINE I-COOL ("AUX" (CNT 0) (L <GET ,HEAT-TABLE 0>) OBJ H (Q? <>)
MICROWAVE-RUNNING?)
<SET MICROWAVE-RUNNING? <QUEUED? I-MICROWAVE>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .L>
<COND (.Q?
<QUEUE I-COOL 2>)>
<RETURN>)>
<SET OBJ <GET ,HEAT-TABLE .CNT>>
<SET CNT <+ .CNT 1>>
<COND (<ZERO? <GET ,HEAT-TABLE .CNT>>
<SET Q? T>
<PUT ,HEAT-TABLE .CNT ,MOVES>)>
<COND (<AND <IN? .OBJ ,MICROWAVE>
.MICROWAVE-RUNNING?>
<SET Q? T>)
(<NOT <ZERO? <SET H <GETP .OBJ ,P?HEAT>>>>
<COND (<G? <- ,MOVES <GET ,HEAT-TABLE .CNT>> 3>
<PUT ,HEAT-TABLE .CNT ,MOVES>
<PUTP .OBJ ,P?HEAT <SET H <- .H 1>>>)>
<COND (<NOT <ZERO? .H>>
<SET Q? T>)>)>>>
<ROUTINE HEAT-CONTENTS (WHAT TIM "AUX" H)
<MAP-CONTENTS (M .WHAT)
<COND (<GETPT .M ,P?HEAT>
<QUEUE I-COOL 2 T>
<SET H <+ <GETP .M ,P?HEAT> ,MICROWAVE-TEMP>>
<COND (<L? .TIM 0>
<SET H
<+ .H
</ .TIM
</ 60 ,MICROWAVE-TEMP>>>>)>
<PUTP .M ,P?HEAT .H>
<COND (<AND <EQUAL? .M ,HAND>
<FSET? .M ,PERSON>>
<SETG ANIMATION-COUNT 0>
<FCLEAR .M ,PERSON>
<COND (<HERE? ,KITCHEN>
<TELL CR
"The hand scrabbles frantically around inside " THE <LOC ,HAND> ", and
then at last lies still." CR>)>)
(<AND <EQUAL? .M ,CHINESE-FOOD>
<G? .H 20>>
<FSET .M ,RMUNGBIT>)>)
(ELSE
<HEAT-CONTENTS .M .TIM>)>>>
;<GLOBAL FOOD-SCORE 5>
<ROUTINE I-MICROWAVE ()
<SETG MICROWAVE-TIMER <- ,MICROWAVE-TIMER 60>>
<HEAT-CONTENTS ,MICROWAVE ,MICROWAVE-TIMER>
<COND (<L=? ,MICROWAVE-TIMER 0>
<SETG MICROWAVE-TIMER 0>
<DEQUEUE I-MICROWAVE>)>
<COND (<HERE? ,KITCHEN>
<CRLF>
<COND (<ZERO? ,MICROWAVE-TIMER>
<TELL ,MICROWAVE-STOPS>)>
<TELL-TIMER>)>>
<GLOBAL MICROWAVE-STOPS "The microwave stops. ">
<ROUTINE TELL-TIMER ()
<TELL
"The timer display now reads " N </ ,MICROWAVE-TIMER 60> ":">
<COND (<L? <MOD ,MICROWAVE-TIMER 60> 10>
<TELL "0">)>
<TELL N <MOD ,MICROWAVE-TIMER 60> ,PERIOD>>
<ROUTINE TELL-HEAT (N)
<SETG MICROWAVE-TEMP .N>
<TELL
"The bottom of the display now reads \"" <GET ,MICROWAVE-TEMPS .N> ".\"" CR>>
<OBJECT KITCHEN-COUNTER
(IN KITCHEN)
(DESC "kitchen counter")
(SYNONYM COUNTER)
(ADJECTIVE KITCHEN)
(FLAGS NDESCBIT OPENBIT CONTBIT SEARCHBIT SURFACEBIT)
(CAPACITY 200)>
<OBJECT REFRIGERATOR
(IN KITCHEN)
(DESC "refrigerator")
(SYNONYM REFRIGERATOR FRIDGE SIGN)
(ADJECTIVE REFRIGERATOR FRIDGE)
(FLAGS NDESCBIT SEARCHBIT CONTBIT OPENABLE READBIT)
(CAPACITY 200)
(ACTION REFRIGERATOR-F)>
<ROUTINE REFRIGERATOR-F ()
<COND (<VERB? EXAMINE READ>
<COND (<EQUAL? <GET ,P-NAMW 0> ,W?SIGN>
<TELL "\"Everything in this fridge must have a
name and date on it!\" (The sign has neither.)" CR>)
(ELSE
<TELL
"This is a medium-sized refrigerator whose door is ">
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL "open">)
(ELSE <TELL "closed">)>
<TELL ". There is a sign on the front." CR>)>)
(<VERB? LOOK-INSIDE>
<COND (<FSET? ,REFRIGERATOR ,OPENBIT>
<TELL
"The interior of the refrigerator is appalling. There are soggy
lunch bags, ancient sandwiches and other less identifiable items">
<COND (<FIRST? ,REFRIGERATOR>
<TELL
". More appetizingly, you see ">
<DESCRIBE-REST ,REFRIGERATOR>)>
<TELL ,PERIOD>)
(ELSE
<TELL
,YOU-HAVE-TO "open it to look in it." CR>)>)
(<VERB? UNPLUG>
<CANT-GET-TO-PLUG>)>>
<ROUTINE CANT-GET-TO-PLUG ()
<TELL ,YOU-CANT "get to the plug." CR>>
<ROOM KITCHEN
(IN ROOMS)
(DESC "Kitchen")
(LDESC
"This is a filthy kitchen. The exit is to the east. On the wall near a
counter are a refrigerator and a microwave.")
(EAST TO CS-2ND)
(FLAGS RLANDBIT ONBIT)
;(ACTION KITCHEN-F)>
;<ROUTINE KITCHEN-F (RARG)
<COND (<RARG? LOOK>
<TELL
CR>)>>

27
interrupts.zil Normal file
View File

@ -0,0 +1,27 @@
"INTERRUPTS for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
;"GENERICS"
<GLOBAL LOAD-MAX 150>
<GLOBAL LOAD-ALLOWED 150>
<GLOBAL AWAKE -1>
<ROUTINE I-TIRED ("AUX" (FORG <>))
<QUEUE I-TIRED 25>
<COND (<G? ,LOAD-ALLOWED 10>
<SETG LOAD-ALLOWED <- ,LOAD-ALLOWED 10>>)>
<COND (<G? ,FUMBLE-NUMBER 1>
<SETG FUMBLE-NUMBER <- ,FUMBLE-NUMBER 1>>)>
<SETG AWAKE <+ ,AWAKE 1>>
<CRLF>
<COND (<G? ,AWAKE 8>
<TELL
"You are so exhausted you can't stay awake any longer." CR>
<CRLF>
<V-SLEEP T>
<RFATAL>)
(T
<TELL "You are " <GET ,TIRED-TELL ,AWAKE> ,PERIOD>)>>

917
misc.zil Normal file
View File

@ -0,0 +1,917 @@
"MISC for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<DEFINE DEBUG-CODE ('X "OPTIONAL" ('Y T))
<COND (,ZDEBUGGING? .X)(ELSE .Y)>>
;"tell macro and friends"
<TELL-TOKENS (CRLF CR) <CRLF>
(NUM N) * <PRINTN .X>
(CHAR CHR C) * <PRINTC .X>
S *:STRING <PRINT .X>
D ,PRSO <DPRINT-PRSO>
D ,PRSI <DPRINT-PRSI>
D * <DPRINT .X>
CD ,PRSO <CDPRINT-PRSO>
CD ,PRSI <CDPRINT-PRSI>
CD * <CDPRINT .X>
THE ,PRSO <THE-PRINT-PRSO>
THE ,PRSI <THE-PRINT-PRSI>
THE * <THE-PRINT .X>
CTHE ,PRSO <CTHE-PRINT-PRSO>
CTHE ,PRSI <CTHE-PRINT-PRSI>
CTHE * <CTHE-PRINT .X>
(A AN) ,PRSO <PRINTA-PRSO>
(A AN) ,PRSI <PRINTA-PRSI>
(A AN) * <PRINTA .X>>
<ROUTINE CTHE-PRINT-PRSO ()
<THE-PRINT ,PRSO T>>
<ROUTINE CTHE-PRINT-PRSI ()
<THE-PRINT ,PRSI T>>
<ROUTINE CTHE-PRINT (O)
<THE-PRINT .O T>>
<ROUTINE THE-PRINT-PRSO ()
<THE-PRINT ,PRSO>>
<ROUTINE THE-PRINT-PRSI ()
<THE-PRINT ,PRSI>>
<ROUTINE THE-PRINT (O "OPTIONAL" (CAP? <>))
<DPRINT .O .CAP? <NOT <FSET? .O ,NOTHEBIT>>>>
<ROUTINE PRINTA-PRSO ()
<PRINTA ,PRSO>>
<ROUTINE PRINTA-PRSI ()
<PRINTA ,PRSI>>
<ROUTINE PRINTA (O)
<COND (<FSET? .O ,THE> <PRINTI "the ">)
(<NOT <FSET? .O ,NOABIT>>
<COND (<FSET? .O ,AN> <PRINTI "an ">)
(ELSE <PRINTI "a ">)>)>
<IPRINT .O>>
;<ROUTINE CDPRINT-PRSO ()
<DPRINT ,PRSO T>>
;<ROUTINE CDPRINT-PRSI ()
<DPRINT ,PRSI T>>
;<ROUTINE CDPRINT (O)
<DPRINT .O T>>
<ROUTINE DPRINT (O "OPTIONAL" (CAP? <>) (THE? <>) "AUX" S)
<COND (<OR .THE? <FSET? .O ,THE>>
<COND (.CAP? <PRINTI "The ">)
(T <PRINTI "the ">)>)>
<IPRINT .O>>
<ROUTINE IPRINT (O)
<COND (<AND <EQUAL? .O ,PSEUDO-OBJECT>
<NOT ,P-MERGED>
<EQUAL? .O ,PRSO ,PRSI>>
<THING-PRINT ,PSEUDO-PRSO ;"<EQUAL? .O ,PRSO>">)
(<EQUAL? .O ,INTNAME>
<PRINTB ,P-NAME>)
(ELSE
<PRINTD .O>)>>
<COND (<GASSIGNED? ZILCH>
<DEFINE PE (F I)
<COND (<TYPE? .I LIST>
<FORM .F !.I>)
(ELSE
<FORM .F .I>)>>
<DEFMAC P? ('V "OPT" ('O '*) ('I '*) ('W '*) "AUX" (L ()))
<COND (<N==? .I '*>
<SET L (<PE PRSI? .I> !.L)>)>
<COND (<N==? .O '*>
<SET L (<PE PRSO? .O> !.L)>)>
<COND (<N==? .V '*>
<SET L (<PE VERB? .V> !.L)>)>
<COND (<N==? .W '*>
<SET L (<PE WINNER? .W> !.L)>)>
<COND (<EMPTY? <REST .L>>
<1 .L>)
(ELSE <FORM AND !.L>)>>
<DEFMAC VERB? ("ARGS" ATMS)
<MULTIFROB ',PRSA .ATMS>>
<DEFMAC CONTEXT? ("ARGS" ATMS)
<MULTIFROB '.RARG .ATMS>>
<SETG RARG? ,CONTEXT?>
<DEFMAC WINNER? ("ARGS" ATMS)
<MULTIFROB ',WINNER .ATMS>>
<DEFMAC PRSO? ("ARGS" ATMS)
<MULTIFROB ',PRSO .ATMS>>
<DEFMAC PRSI? ("ARGS" ATMS)
<MULTIFROB ',PRSI .ATMS>>
<DEFMAC HERE? ("ARGS" ATMS)
<MULTIFROB ',HERE .ATMS>>
<SETG ROOM? ,HERE?>
<DEFINE MULTIFROB (X ATMS "AUX" (OO (OR)) (O .OO) (L ()) ATM SP)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- <COND (<LENGTH? .OO 1> <ERROR .X>)
(<LENGTH? .OO 2> <NTH .OO 2>)
(ELSE <CHTYPE .OO FORM>)>>)>
<REST
<PUTREST
.O
<SET O
(<REPEAT
((LL <FORM EQUAL? .X>)
(L <REST .LL>))
<COND (<OR <EMPTY? .ATMS>
<==? <LENGTH <REST .LL 2>> 3>>
<RETURN!- .LL>)>
<SET ATM <NTH .ATMS 1>>
<PUTREST
.L
<SET L
(<COND
(<TYPE? .ATM ATOM>
<SET SP <SPNAME .ATM>>
<MAKE-GVAL
<COND (<==? .X ',PRSA>
<PARSE <STRING "V?" .SP>>)
(<==? .X '.RARG>
<COND (<AND <G? <LENGTH .SP> 2>
<==? <1 .SP> !\M>
<==? <2 .SP> !\->>
.ATM)
(ELSE
<PARSE
<STRING "M-" .SP>>)>)
(ELSE .ATM)>>)
(ELSE .ATM)>)>>
<SET ATMS <REST .ATMS>>>)>>>>>)
(ELSE
<DEFINE P? (V "OPT" (O '*) (I '*) (W '*) "AUX" (L <>))
<AND <OR <==? .W '*> <WINNER? .W>>
<OR <==? .V '*> <VERB? .V>>
<OR <==? .O '*> <PRSO? .O>>
<OR <==? .I '*> <PRSI? .I>>>>
<DEFINE VERB? ("TUPLE" ATMS)
<MAPF <>
<FUNCTION (A "AUX" ATM)
<COND (<TYPE? .A ATOM>
<COND (<SET ATM
<LOOKUP <STRING "V?" <SPNAME .A>>
<MOBLIST INITIAL>>>
<COND (<EQUAL? ,PRSA ,.ATM>
<MAPLEAVE T>)>)
(ELSE
<ERROR NOT-A-VERB? .A>)>)
(<EQUAL? ,PRSA .A>
<MAPLEAVE T>)>>
.ATMS>>
<DEFINE CONTEXT? ("TUPLE" ATMS)
<MAPF <>
<FUNCTION (A "AUX" ATM)
<COND (<TYPE? .A ATOM>
<COND (<AND <G? <LENGTH <SET ATM <SPNAME .A>>> 2>
<==? <1 .ATM> !\M>
<==? <2 .ATM> !\->>
<COND (<EQUAL? .RARG ,.ATM>
<MAPLEAVE T>)>)
(<SET ATM
<LOOKUP <STRING "M-" <SPNAME .A>>
<MOBLIST INITIAL>>>
<COND (<EQUAL? .RARG ,.ATM>
<MAPLEAVE T>)>)
(ELSE
<ERROR NOT-A-CONTEXT? .A>)>)
(<EQUAL? .RARG .A>
<MAPLEAVE T>)>>
.ATMS>>
<SETG RARG? ,CONTEXT?>
<DEFINE WINNER? ("TUPLE" ATMS)
<MULTIFROB ,WINNER .ATMS>>
<DEFINE PRSO? ("TUPLE" ATMS)
<MULTIFROB ,PRSO .ATMS>>
<DEFINE PRSI? ("TUPLE" ATMS)
<MULTIFROB ,PRSI .ATMS>>
<DEFINE HERE? ("TUPLE" ATMS)
<MULTIFROB HERE .ATMS>>
<SETG ROOM? ,HERE?>
<DEFINE MULTIFROB (X ATMS)
<MAPF <>
<FUNCTION (A)
<COND (<TYPE? .A ATOM> <SET A ,.A>)>
<COND (<EQUAL? .X .A>
<MAPLEAVE T>)>>
.ATMS>>)>
<COND (<GASSIGNED? ZILCH>
<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" (OT <COND (<==? .X FSET?> <FORM OR>)
(ELSE <FORM PROG ()>)>)
(OO <COND (<LENGTH? .OT 1> .OT)
(ELSE <REST .OT>)>)
(O .OO)
ATM)
<REPEAT ()
<COND (<EMPTY? .ATMS>
<RETURN!- .OT>)>
<SET ATM <NTH .ATMS 1>>
<SET ATMS <REST .ATMS>>
<PUTREST .O
<SET O
(<FORM .X
.OBJ
<COND (<TYPE? .ATM FORM> .ATM)
(ELSE <MAKE-GVAL .ATM>)>>)>>>>)
(ELSE
<DEFINE BSET (OBJ "TUPLE" BITS)
<MULTIBITS ,FSET .OBJ .BITS>>
<DEFINE BCLEAR (OBJ "TUPLE" BITS)
<MULTIBITS ,FCLEAR .OBJ .BITS>>
<DEFINE BSET? (OBJ "TUPLE" BITS)
<MAPF <>
<FUNCTION (A)
<COND (<FSET? .OBJ ,.A> <MAPLEAVE T>)>>
.BITS>>
<DEFINE MULTIBITS (X OBJ ATMS)
<MAPF <>
<FUNCTION (A)
<APPLY!- .X .OBJ ,.A>>
.ATMS>>)>
<DEFMAC RFATAL ()
'<RETURN ,M-FATAL>>
<COND (<GASSIGNED? ZILCH>
<DEFMAC PROB ('BASE?)
<FORM NOT <FORM L? .BASE? '<RANDOM 100>>>>)
(ELSE
<DEFINE PROB (BASE?)
<NOT <L? .BASE? <RANDOM 100>>>>)>
<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>
<ROUTINE RANDOM-ELEMENT (FROB)
<GET .FROB <RANDOM <GET .FROB 0>>>>
;"former MAIN.ZIL stuff"
<GLOBAL P-WON <>>
<CONSTANT M-FATAL 2>
<CONSTANT M-BEG 1>
<CONSTANT M-END 2>
<CONSTANT M-ENTER 3>
<CONSTANT M-LEAVE 4>
<CONSTANT M-LOOK 5>
<CONSTANT M-FLASH 6>
<CONSTANT M-OBJDESC 7>
<CONSTANT M-CONTAINER 8>
<ROUTINE GO ()
<PUT-GLOBAL ,TOMB 0 0>
<PUT-GLOBAL ,TOMB 1 0>
;"put interrupts on clock chain"
<SETG CLOCK-HAND <REST ,C-TABLE ,C-TABLELEN>>
<QUEUE I-URCHIN 10>
<QUEUE I-TIRED 200>
;"set up and go"
<SETG P-HIM-OBJECT ,HACKER>
<SETG P-IT-OBJECT ,PC>
<SETG WINNER ,PLAYER>
<SETG HERE ,TERMINAL-ROOM>
<SETG LIT <LIT? ,HERE>>
<USL>
<TELL
"You've waited until the last minute again. This time it's the end of
the term, so all the TechNet terminals in the dorm are occupied.
So, off you go to the old Comp Center. Too bad it's the worst storm of
the winter (Murphy's Law, right?), and you practically froze to death
slogging over here from the dorm. Not to mention jumping at every
shadow, what with all the recent disappearances. Time to find a free
machine, get to work, and write that twenty page paper." CR CR>
<V-VERSION>
<CRLF>
<V-LOOK>
<MAIN-LOOP>>
<ROUTINE MAIN-LOOP ("AUX" TRASH)
<REPEAT ()
<SET TRASH <MAIN-LOOP-1>>>>
<GLOBAL WAS-IT? <>>
<GLOBAL WAS-HIM? <>>
<GLOBAL PERFORM-DEPTH 0> ;"number recursive calls to perform"
<ROUTINE MAIN-LOOP-1 ("AUX" ICNT OCNT NUM (CNT 0) (OBJ <>) TBL
(V <>) (PTBL T) OBJ1 TMP ONUM)
<COND (<SETG P-WON <PARSER>>
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
<SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>
<SETG WAS-IT? <OBJECT-SUBSTITUTE ,IT ,P-IT-OBJECT>>
<SETG WAS-HIM? <OBJECT-SUBSTITUTE ,HIM ,P-HIM-OBJECT>>
<SET ONUM <BAND <GETB ,P-SYNTAX ,P-SBITS> ,P-SONUMS>>
<SET NUM
<COND (<OR <ZERO? .OCNT>
<AND <ZERO? .ICNT>
<EQUAL? .ONUM 2>>>
0)
(<G? .OCNT 1>
<SET TBL ,P-PRSO>
<COND (<ZERO? .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>>)>
<SETG PERFORM-DEPTH 0>
<COND (<EQUAL? ,PRSA ,V?WALK> <SET V <PERFORM-PRSA ,PRSO>>)
(<ZERO? .NUM>
<COND (<ZERO? .ONUM>
<SET V <PERFORM-PRSA>>
<SETG PRSO <>>)
(<NOT ,LIT>
<TELL ,TOO-DARK>
<END-QUOTE>)
(T
<TELL "There isn't anything to ">
<SET TMP <GET ,P-ITBL ,P-VERBN>>
<COND (<VERB? TELL>
<TELL "talk to">)
(<OR ,P-OFLAG ,P-MERGED>
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2>
<GETB .TMP 3>>)>
<TELL "!" CR>
<SET V <>>
<END-QUOTE>)>)
(T
<SETG P-NOT-HERE 0>
<SETG P-MULT <>>
<COND (<G? .NUM 1> <SETG P-MULT 1>)>
<SET TMP <>>
<SET CNT 0>
<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 ,REFERRING CR>)>
<RETURN>)
(T ;"REFORMATTED AREA"
<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 (<MULTIPLE-EXCEPTION? .OBJ1> <AGAIN>)
(<VERB? COMPARE-MANY>)
(T
<COND (<EQUAL? .OBJ1 ,IT>
<TELL D ,P-IT-OBJECT>)
(ELSE
<TELL D .OBJ1>)>
<TELL ": ">)>)>
<SET TMP T>
<SETG PSEUDO-PRSO <COND (<PRSO? ,PSEUDO-OBJECT>)>>
<SET V <PERFORM-PRSA ,PRSO ,PRSI>>
<COND (<EQUAL? .V ,M-FATAL> <RETURN>)>
<COND (,P-MULT <SETG P-MULT <+ ,P-MULT 1>>)>) ;"END REFORMATTING"
>>)>
<COND (<NOT <EQUAL? .V ,M-FATAL>>
<COND (<GAME-VERB?> T)
(<LOC ,WINNER>
<SET V
%<DEBUG-CODE
<D-APPLY "End"
<GETP <LOC ,WINNER> ,P?ACTION>
,M-END>
<APPLY <GETP <LOC ,WINNER> ,P?ACTION>
,M-END>>>)>)>
<COND (<EQUAL? .V ,M-FATAL>
<SETG P-CONT <>>)>)
(T
<SETG P-CONT <>>)>
<COND (,P-WON
%<DEBUG-CODE
<COND (<VERB? $DEBUG>
<AGAIN>)>>
<COND (<GAME-VERB?> T)
(T
<SET V <CLOCKER>>)>
<SETG PRSA <>>
<SETG PRSO <>>
<SETG PRSI <>>)>>
<ROUTINE OBJECT-SUBSTITUTE (OBJ VAR "AUX" (TMP <>) (CNT 0) ICNT OCNT)
<COND (<AND .VAR <ACCESSIBLE? .VAR>>
<SET ICNT <GET ,P-PRSI ,P-MATCHLEN>>
<SET OCNT <GET ,P-PRSO ,P-MATCHLEN>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .ICNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,P-PRSI .CNT> .OBJ>
<PUT ,P-PRSI .CNT .VAR>
<SET TMP T>
<RETURN>)>)>>
<SET CNT 0>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .OCNT>
<RETURN>)
(T
<COND (<EQUAL? <GET ,P-PRSO .CNT> .OBJ>
<PUT ,P-PRSO .CNT .VAR>
<SET TMP T>
<RETURN>)>)>>
.TMP)>>
<GLOBAL PSEUDO-PRSO <>> ;"T IF ORIGINAL PRSO WAS PSEUDO-OBJECT"
<ROUTINE GAME-VERB? ()
<COND (<AND <VERB? TELL> ,P-CONT> <RTRUE>)
(<AND <VERB? HELP>
<NOT ,PRSO>
<NOT <IN? ,PC ,HERE>>>
<RTRUE>)
(<VERB? QUIT VERSION BRIEF SUPER-BRIEF VERBOSE
$VERIFY RESTART SAVE RESTORE SCRIPT UNSCRIPT
$RANDOM $COMMAND $RECORD $UNRECORD SCORE
TIME>
<RTRUE>)>>
"MULTIPLE-EXCEPTION? -- return true if an object found by all should not
be included when the crunch comes."
<ROUTINE MULTIPLE-EXCEPTION? (OBJ1 "AUX" (L <LOC .OBJ1>))
<COND (<EQUAL? .OBJ1 ,NOT-HERE-OBJECT>
<SETG P-NOT-HERE <+ ,P-NOT-HERE 1>>
<RTRUE>)
(<AND <VERB? TAKE>
,PRSI
<NOT <IN? ,PRSO ,PRSI>>>
;"TAKE X FROM Y and x not in y"
<RTRUE>)
(<NOT <ACCESSIBLE? .OBJ1>>
;"can't get at object"
<RTRUE>)
(<EQUAL? ,P-GETFLAGS ,P-ALL>
;"cases for ALL"
<COND (<AND ,PRSI
<PRSO? ,PRSI>>
;"VERB ALL and prso = prsi"
<RTRUE>)
(<AND <VERB? TAKE> <NOT ,PRSI>>
<COND (<OR <AND <NOT <EQUAL? .L ,WINNER ,HERE ,PRSI>>
<NOT <EQUAL? .L <LOC ,WINNER>>>
<NOT <FSET? .L ,SURFACEBIT>>
<NOT <FSET? .L ,SEARCHBIT>>>
<AND <NOT <FSET? .OBJ1 ,TAKEBIT>>
<NOT <FSET? .OBJ1 ,TRYTAKEBIT>>>>
;"TAKE ALL and object not accessible or takeable"
<RTRUE>)
(<OR <FSET? .L ,PERSON>
<FSET? <LOC .L> ,PERSON>>
;"TAKE ALL held by a person (use TAKE ALL FROM)"
<RTRUE>)
(<HELD? ,PRSO>
;"TAKE ALL and one object has others in it"
<RTRUE>)
(<AND <PRSO? DOME-LADDER>
<OR ,LADDER-TOP? ,LADDER-BOTTOM?>>
;"TAKE ALL and ladder set up"
<RTRUE>)
(<AND <PRSO? CHAIN CHAIN-1 CHAIN-2>
<OR ,CHAIN-HOOKED? ,CHAIN-LOOPED?>
<NOT <EQUAL? .L
,ELEVATOR-PIT ,CS-BASEMENT>>>
;"TAKE ALL and chain looped or hooked"
<RTRUE>)
(<AND <PRSO? PADLOCK>
,PADLOCK-ON?>
;"TAKE ALL and padlock locked"
<RTRUE>)>)
(<VERB? DROP GIVE>
<COND (<NOT <IN? .OBJ1 ,WINNER>>
;"GIVE/DROP ALL and object not held"
<RTRUE>)
(<FSET? .OBJ1 ,WEARBIT>
;"GIVE/DROP ALL and object worn"
<RTRUE>)>)
(<AND <VERB? PUT>
<NOT <IN? ,PRSO ,WINNER>>
<HELD? ,PRSO ,PRSI>>
;"PUT ALL IN X and object already in x"
<RTRUE>)>)>>
;<ROUTINE SAVE-INPUT (TBL "AUX" (OFFS 0) CNT TMP)
<SET CNT <+ <GETB ,P-LEXV <SET TMP <* 4 ,P-INPUT-WORDS>>>
<GETB ,P-LEXV <+ .TMP 1>>>>
<COND (<EQUAL? .CNT 0> ;"failed"
<RFALSE>)>
<SET CNT <- .CNT 1>>
<REPEAT ()
<COND (<EQUAL? .OFFS .CNT>
<PUTB .TBL .OFFS 0>
<RETURN>)
(T
<PUTB .TBL .OFFS <GETB ,P-INBUF <+ .OFFS 1>>>)>
<SET OFFS <+ .OFFS 1>>>
<RTRUE>>
;<ROUTINE RESTORE-INPUT (TBL "AUX" CHR)
<REPEAT ()
<COND (<EQUAL? <SET CHR <GETB .TBL 0>> 0>
<RETURN>)
(T
<PRINTC .CHR>
<SET TBL <REST .TBL>>)>>>
<GLOBAL P-MULT <>>
<GLOBAL P-NOT-HERE 0>
<GLOBAL WHAT-DO-YOU-WANT-TO "What do you want to ">
<ROUTINE FAKE-ORPHAN ("AUX" TMP)
<ORPHAN ,P-SYNTAX <>>
<TELL ,WHAT-DO-YOU-WANT-TO>
<SET TMP <GET ,P-OTBL ,P-VERBN>>
<COND (<EQUAL? .TMP 0>
<TELL "tell">)
(<ZERO? <GETB ,P-VTBL 2>>
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>
<PUTB ,P-VTBL 2 0>)>
<SETG P-OFLAG T>
<SETG P-WON <>>
<PREP-PRINT
<GETB ,P-SYNTAX ,P-SPREP1>>
<TELL "?" CR>>
<ROUTINE PERFORM (A "OPTIONAL" (O <>) (I <>) "AUX" (V <>) OA OO OI CNT)
<SETG PERFORM-DEPTH <+ ,PERFORM-DEPTH 1>>
%<DEBUG-CODE
<COND (,ZDEBUG
<TELL "[Perform: ">
%<COND (<GASSIGNED? ZILCH> '<TELL N .A>)
(T '<PRINT <SPNAME <NTH ,ACTIONS <+ <* .A 2> 1>>>>)>
<COND (.O
<COND (<AND <EQUAL? .A ,V?WALK>
,P-WALK-DIR>
<TELL "/" N .O>)
(ELSE
<TELL "/" D .O>)>)>
<COND (.I <TELL "/" D .I>)>
<TELL "]" CR>)>>
<SET OA ,PRSA>
<SET OO ,PRSO>
<SET OI ,PRSI>
<SETG PRSA .A>
<COND (<EQUAL? ,IT .I .O>
<COND (<NOT .I>
<FAKE-ORPHAN>)
(T
<TELL ,REFERRING CR>)>
<RFATAL>)>
<COND (<AND .I
<NOT <VERB? WALK>>
<NOT <EQUAL? .I ,NOT-HERE-OBJECT>>>
<THIS-IS-IT .I>)>
<COND (<AND .O
<NOT <VERB? WALK>>
<NOT <EQUAL? .O ,NOT-HERE-OBJECT>>>
<THIS-IS-IT .O>)>
<SETG PRSO .O>
<SETG PRSI .I>
<COND (<AND <NOT <EQUAL? .A ,V?WALK>>
<EQUAL? ,NOT-HERE-OBJECT ,PRSO ,PRSI>
<SET V
%<DEBUG-CODE
<D-APPLY "Not Here" ,NOT-HERE-OBJECT-F>
<APPLY ,NOT-HERE-OBJECT-F>>>>
;<SETG P-WON <>>)
(T
<SET O ,PRSO>
<SET I ,PRSI>
<COND (<AND <NOT <VERB? TELL-ABOUT SGIVE SSHOW SRUB SPUT-ON>>
<SET V
%<DEBUG-CODE
<DD-APPLY "Actor" ,WINNER
<GETP ,WINNER ,P?ACTION>>
<APPLY <GETP ,WINNER ,P?ACTION>>>>>)
(<AND <LOC ,WINNER>
<NOT <EQUAL? <LOC ,WINNER> ,HERE>>
<SET V
%<DEBUG-CODE
<D-APPLY "Begin"
<GETP <LOC ,WINNER> ,P?ACTION>
,M-BEG>
<APPLY <GETP <LOC ,WINNER> ,P?ACTION>
,M-BEG>>>>)
(<SET V
%<DEBUG-CODE
<D-APPLY "Begin"
<GETP ,HERE ,P?ACTION>
,M-BEG>
<APPLY <GETP ,HERE ,P?ACTION>
,M-BEG>>>)
(<SET V
%<DEBUG-CODE
<D-APPLY "Preaction"
<GET ,PREACTIONS .A>>
<APPLY <GET ,PREACTIONS .A>>>>)
(<AND .I
<SET V
%<DEBUG-CODE
<D-APPLY "PRSI" <GETP .I ,P?ACTION>>
<APPLY <GETP .I ,P?ACTION>>>>>)
(<AND .O
<NOT <EQUAL? .A ,V?WALK>>
<LOC .O>
<GETP <LOC .O> ,P?CONTFCN>
<SET V
%<DEBUG-CODE
<D-APPLY "Container"
<GETP <LOC .O> ,P?CONTFCN>
,M-CONTAINER>
<APPLY <GETP <LOC .O> ,P?CONTFCN>
,M-CONTAINER>>>>)
(<AND .O
<NOT <EQUAL? .A ,V?WALK>>
<SET V
%<DEBUG-CODE
<D-APPLY "PRSO"
<GETP .O ,P?ACTION>>
<APPLY <GETP .O ,P?ACTION>>>>>)
(<SET V
%<DEBUG-CODE
<D-APPLY <>
<GET ,ACTIONS .A>>
<APPLY <GET ,ACTIONS .A>>>>)>)>
<SETG PRSA .OA>
<SETG PRSO .OO>
<SETG PRSI .OI>
.V>
%<COND (,ZDEBUGGING?
<COND (<GASSIGNED? ZILCH>
<ROUTINE II-APPLY (STR FCN)
<COND (,ZDEBUG
<TELL "[I- " N <* .FCN 2> " ">)>
<D-APPLY .STR .FCN>>)
(ELSE
<ROUTINE II-APPLY (STR FCN)
<D-APPLY <COND (<TYPE? .FCN ATOM> <SPNAME .FCN>)
(ELSE .STR)>
.FCN>>)>)>
%<DEBUG-CODE
<ROUTINE DD-APPLY (STR OBJ FCN)
<COND (,ZDEBUG <TELL "[" D .OBJ "=]">)>
<D-APPLY .STR .FCN>>>
%<DEBUG-CODE
<ROUTINE D-APPLY (STR FCN "OPTIONAL" (FOO <>) "AUX" RES)
<COND (<NOT .FCN> <>)
(T
<COND (,ZDEBUG
<COND (<NOT .STR>
<TELL "[Action:]" CR>)
(T <TELL "[" .STR ": ">)>)>
<SET RES
<COND (.FOO <APPLY .FCN .FOO>)
(T <APPLY .FCN>)>>
%<DEBUG-CODE
<COND (<AND ,ZDEBUG .STR>
<COND (<EQUAL? .RES ,M-FATAL>
<TELL "Fatal]" CR>)
(<NOT .RES>
<TELL "Not handled]" CR>)
(T <TELL "Handled]" CR>)>)>>
.RES)>>>
;"former CLOCK.ZIL stuff"
<GLOBAL CLOCK-WAIT <>>
<GLOBAL C-TABLE <ITABLE 13 <> <>>>
<CONSTANT C-INTLEN 4> ;"length of an interrupt entry in bytes"
<CONSTANT C-RTN 0> ;"word offset of routine name"
<CONSTANT C-TICK 1> ;"word offset of count"
<CONSTANT C-TABLELEN 52> ;"length of interrupt table in bytes"
<GLOBAL C-INTS 52> ;"start of queued interrupts in bytes"
%<DEBUG-CODE <GLOBAL C-MAXINTS 52>>
<ROUTINE DEQUEUE (RTN "AUX" TIM)
<COND (<SET RTN <QUEUED? .RTN>>
<SET TIM <GET .RTN ,C-TICK>>
<PUT .RTN ,C-RTN 0>
.TIM)>>
<ROUTINE QUEUED? (RTN "AUX" C E)
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<EQUAL? .C .E> <RFALSE>)
(<EQUAL? <GET .C ,C-RTN> .RTN>
<COND (<ZERO? <GET .C ,C-TICK>>
<RFALSE>)
(T <RETURN .C>)>)>
<SET C <REST .C ,C-INTLEN>>>>
"this version of QUEUE automatically enables as well"
"QUEUE routine when fresh?:t means only queue if not currently queued"
<ROUTINE QUEUE (RTN TICK "OPT" (I? <>) "AUX" C E (INT <>))
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET C <REST ,C-TABLE ,C-INTS>>
<REPEAT ()
<COND (<EQUAL? .C .E>
<COND (.INT
<SET C .INT>)
(ELSE
%<DEBUG-CODE
<COND (<L? ,C-INTS ,C-INTLEN>
<TELL
"[**Too many interrupts!**]" CR>)>>
<SETG C-INTS <- ,C-INTS ,C-INTLEN>>
%<DEBUG-CODE
<COND (<L? ,C-INTS ,C-MAXINTS>
<SETG C-MAXINTS ,C-INTS>)>>
<SET INT <REST ,C-TABLE ,C-INTS>>)>
<PUT .INT ,C-RTN .RTN>
<RETURN>)
(<EQUAL? <GET .C ,C-RTN> .RTN>
<COND (.I? <RFALSE>)
(ELSE
<SET INT .C>
<RETURN>)>)
(<ZERO? <GET .C ,C-RTN>>
<SET INT .C>)>
<SET C <REST .C ,C-INTLEN>>>
<COND (%<COND (<GASSIGNED? ZILCH>
'<G? .INT ,CLOCK-HAND>)
(ELSE
'<L=? <LENGTH .INT> <LENGTH ,CLOCK-HAND>>)>
<SET TICK <- <+ .TICK 3>>>)>
<PUT .INT ,C-TICK .TICK>
.INT>
<GLOBAL CLOCK-HAND <>>
<ROUTINE CLOCKER ("AUX" E TICK RTN (FLG <>) (Q? <>) OWINNER)
<COND (,CLOCK-WAIT <SETG CLOCK-WAIT <>> <RFALSE>)>
<SETG CLOCK-HAND <REST ,C-TABLE ,C-INTS>>
<SET E <REST ,C-TABLE ,C-TABLELEN>>
<SET OWINNER ,WINNER>
<SETG WINNER ,PLAYER>
<REPEAT ()
<COND (<EQUAL? ,CLOCK-HAND .E>
<SETG CLOCK-HAND .E>
<SETG MOVES <+ ,MOVES 1>>
<SETG WINNER .OWINNER>
<RETURN .FLG>)
(<NOT <ZERO? <GET ,CLOCK-HAND ,C-RTN>>>
<SET TICK <GET ,CLOCK-HAND ,C-TICK>>
<COND (<L? .TICK -1>
<PUT ,CLOCK-HAND ,C-TICK <- <- .TICK> 3>>
<SET Q? ,CLOCK-HAND>)
(<NOT <ZERO? .TICK>>
<COND (<G? .TICK 0>
<SET TICK <- .TICK 1>>
<PUT ,CLOCK-HAND ,C-TICK .TICK>)>
<COND (<NOT <ZERO? .TICK>>
<SET Q? ,CLOCK-HAND>)>
<COND (<NOT <G? .TICK 0>>
<SET RTN
%<COND (<GASSIGNED? ZILCH>
'<GET ,CLOCK-HAND ,C-RTN>)
(ELSE
'<NTH ,CLOCK-HAND
<+ <* ,C-RTN 2>
1>>)>>
<COND (<ZERO? .TICK>
<PUT ,CLOCK-HAND ,C-RTN 0>)>
<COND (%<COND
(,ZDEBUGGING?
'<II-APPLY "Int" .RTN>)
(ELSE
'<APPLY .RTN>)>
<SET FLG T>)>
<COND (<AND <NOT .Q?>
<NOT
<ZERO?
<GET ,CLOCK-HAND
,C-RTN>>>>
<SET Q? T>)>)>)>)>
<SETG CLOCK-HAND <REST ,CLOCK-HAND ,C-INTLEN>>
<COND (<NOT .Q?>
<SETG C-INTS <+ ,C-INTS ,C-INTLEN>>)>>>
<DEFINE PSEUDO ("TUPLE" V)
<MAPF ,PLTABLE
<FUNCTION (OBJ)
<COND (<N==? <LENGTH .OBJ> 3>
<ERROR BAD-THING .OBJ>)>
<MAPRET <COND (<NTH .OBJ 1>
<VOC <SPNAME <NTH .OBJ 1>> ADJECTIVE>)>
<COND (<NTH .OBJ 2>
<VOC <SPNAME <NTH .OBJ 2>> NOUN>)>
;<3 .OBJ>>>
.V>>
<ROUTINE PERFORM-PRSA ("OPT" (O <>) (I <>))
<PERFORM ,PRSA .O .I>>
<ROUTINE NEW-VERB (V)
<PERFORM .V ,PRSO ,PRSI>>
<ROUTINE SWAP-VERB (V)
<PERFORM .V ,PRSI ,PRSO>>
<ROUTINE NEW-PRSO (O)
<PERFORM-PRSA .O ,PRSI>>
<ROUTINE NEW-PRSI (I)
<PERFORM-PRSA ,PRSO .I>>
<ROUTINE NEW-WINNER-PRSO (A "OPT" (O <>) (I <>) "AUX" OW)
<SET OW ,WINNER>
<SETG WINNER ,PRSO>
<PERFORM .A .O .I>
<SETG WINNER .OW>>
<ROUTINE REDIRECT (FROM TO "AUX" O I)
<SET O <COND (<PRSO? .FROM> .TO) (ELSE ,PRSO)>>
<SET I <COND (<PRSI? .FROM> .TO) (ELSE ,PRSI)>>
<PERFORM-PRSA .O .I>
<RTRUE>>

1793
parser.zil Normal file

File diff suppressed because it is too large Load Diff

529
pc.zil Normal file
View File

@ -0,0 +1,529 @@
"PC for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<OBJECT ASSIGNMENT
(IN PLAYER)
(DESC "assignment")
(SYNONYM ASSIGNMENT)
(FLAGS AN READBIT TAKEBIT)
(SIZE 1)
(ACTION ASSIGNMENT-F)>
<ROUTINE ASSIGNMENT-F ()
<COND (<VERB? EXAMINE READ>
<TELL
"Laser printed on creamy bond paper, the assignment is due tomorrow.
It's from your freshman course in \"The Classics in the Modern Idiom,\"
better known as \"21.014.\" It reads, in part: \"Twenty pages on modern
analogues of Xenophon's 'Anabasis.'\" You're not sure whether this refers
to the movie \"The Warriors\" or \"Alien,\" but this is the last
assignment you need to complete in this course this term. You wonder,
yet again, why a technical school requires you to endure this sort of
stuff." CR>)>>
<OBJECT CHAIR
(IN TERMINAL-ROOM)
(FDESC
"Nearby is one of those ugly molded plastic chairs.")
(DESC "chair")
(SYNONYM CHAIR)
(ADJECTIVE MOLDED PLASTIC UGLY)
(FLAGS TAKEBIT VEHBIT SEARCHBIT CONTBIT OPENBIT FURNITURE SURFACEBIT)
(SIZE 100)
(ACTION CHAIR-F)>
<ROUTINE CHAIR-F ("OPT" (RARG <>))
<COND (<RARG? BEG>
<COND (<QUEUED? I-COMPULSION> <RFALSE>)
(<VERB? WALK>
<MOVE ,WINNER <LOC ,CHAIR>>
<TELL "First, you arise from the chair." CR>)
(<P? SIT CHAIR>
<TELL ,YOU-ARE ,PERIOD>)
(<P? (STAND DISEMBARK) CHAIR>
<MOVE ,WINNER <LOC ,CHAIR>>
<TELL "You get out of the chair." CR>)>)
(<RARG? <>>
<COND (<VERB? EXAMINE>
<TELL
"It's a molded plastic chair, a cheap knock-off of a designer
chair, and even more uncomfortable." CR>)
(<AND <VERB? TAKE>
<IN? ,HACKER ,CHAIR>>
<TELL "It's in use." CR>)
(<VERB? SIT BOARD>
<COND (<IN? ,HACKER ,CHAIR>
<TELL
"The hacker is already using it." CR>
<RTRUE>)
(ELSE
<COND (<HELD? ,CHAIR>
<MOVE ,CHAIR <LOC ,WINNER>>)>
<MOVE ,WINNER ,CHAIR>
<TELL
,YOU-ARE-NOW "sitting in the chair." CR>)>)>)>>
<OBJECT OUTLET
(IN LOCAL-GLOBALS)
(DESC "outlet")
(SYNONYM OUTLET SOCKET)
(ADJECTIVE ELECTRIC WALL)
(FLAGS NDESCBIT AN)>
<GLOBAL PC-UNPLUGGED? <>>
<OBJECT HELP-KEY
(IN PC)
(DESC "HELP key")
(SYNONYM HELP KEY)
(ADJECTIVE HELP)
(FLAGS NDESCBIT READBIT)
(ACTION HELP-KEY-F)
(TEXT "It says \"HELP\" in reassuring blue letters.")>
<ROUTINE HELP-KEY-F ()
<COND (<MOUSE-VERB?>
<COND (<NOT <FSET? ,PC ,POWERBIT>>
<TELL
"Well," ,LC-NOTHING-HAPPENS " Perhaps you should turn on the computer?" CR>
<RTRUE>)>
<TELL
"You push the friendly-looking HELP key. A spritely little box appears
on the screen, which reads: \"">
<COND (<NOT ,LOGGED-IN?>
<TELL "You should ">
<COND (<NOT ,USERNAME?>
<TELL
"\"LOGIN your-user-id\" and then ">)>
<TELL
"\"PASSWORD your-password\".">)
(<IN? ,MORE-BOX ,PC>
<TELL "Please">
<COND (<NOT ,READ-PAGE?>
<TELL
" read the page on the screen and then">)>
<TELL " click the MORE box.">)
(<IN? ,YAK-WINDOW ,PC>
<TELL
"Please click the box representing the file you wish to edit or view.
I notice that one file is marked as urgent, so you should probably click
its box.">)
(<IN? ,MENU-BOX ,PC>
<TELL
"You should click the menu box, as you previously set it up as an urgent
task.">)
(ELSE
<TELL
"I can't help you at this point.">)>
<TELL "\"" CR>)>>
<OBJECT MOUSE
(IN PC)
(DESC "mouse")
(SYNONYM MOUSE)
(FLAGS NDESCBIT)
(ACTION MOUSE-F)>
<ROUTINE MOUSE-F ()
<COND (<VERB? EXAMINE>
<TELL
"It's a plastic pointing device." CR>)
(<VERB? TAKE>
<TELL
"It's attached to the computer." CR>)
(<VERB? MOVE>
<TELL
"It rolls smoothly." CR>)
(<AND <MOUSE-VERB?>
<PRSO? MOUSE>>
<COND (,PRSI
<PERFORM ,V?CLICK ,PRSI>
<RTRUE>)
(ELSE
<TELL
,YOU-HAVE-TO "click something with the mouse." CR>)>)
(<AND <MOUSE-VERB?>
<PRSI? MOUSE>>
<PERFORM ,V?CLICK ,PRSO>
<RTRUE>)>>
<OBJECT PC
(IN TERMINAL-ROOM)
(DESC "pc")
(FDESC
"A really whiz-bang pc is right inside the door.")
(SYNONYM PC COMPUTER SCREEN TERMINAL)
(ADJECTIVE PERSONAL MY MONITOR)
(FLAGS TAKEBIT TRYTAKEBIT OPENBIT CONTBIT SEARCHBIT SURFACEBIT)
(SIZE 30)
(ACTION PC-F)>
<GLOBAL COMPUTER-POWERS "The computer powers ">
<ROUTINE PC-F ("AUX" TMP)
<COND (<VERB? EXAMINE>
<COND (<EQUAL? <GET ,P-NAMW 0> ,W?SCREEN>
<NEW-VERB ,V?READ>
<RTRUE>)
(ELSE
<TELL
"This is a beyond-state-of-the-art personal computer. It has a
1024 by 1024 pixel color monitor, a mouse, an attached hard disk,
and a local area network connection. Fortunately, one of its features
is a prominent HELP key.">
<COND (<NOT <FSET? ,PC ,POWERBIT>>
<TELL S " It is currently ""turned off.">)
(<FIRST? ,PC>
<TELL
" On the screen you see " A <FIRST? ,PC> ".">)>
<CRLF>)>)
(<AND <VERB? LISTEN>
<FSET? ,PC ,POWERBIT>>
<TELL "It hums contentedly." CR>)
(<VERB? TAKE>
<COND (<QUEUED? I-HACKER-HELPS>
<NEW-VERB ,V?UNPLUG>
<RTRUE>)
(<EQUAL? <ITAKE> T>
<TELL
"You take it">
<COND (<NOT ,PC-UNPLUGGED?>
<TELL ", ">
<COND (<FSET? ,PC ,POWERBIT>
<INIT-PC>
<TELL
"turning it off and ">)>
<SETG PC-UNPLUGGED? T>
<TELL
"unplugging it first">)>
<TELL ,PERIOD>)
(ELSE <RTRUE>)>)
(<P? (PUT PUT-ON) * PC>
<NO-GOOD-SURFACE>)
(<VERB? READ>
<COND (<AND <QUEUED? I-HACKER-HELPS>
<L? ,HACKER-HELP 3>>
<TELL
S "There's nothing ""recognizable on the screen." CR>
<RTRUE>)>
<SET TMP
<COND (<IN? ,ODD-PAPER ,PC> ,ODD-PAPER)
;(<IN? ,REAL-PAPER ,PC> ,REAL-PAPER)
(<IN? ,MENU-BOX ,PC> ,MENU-BOX)
(<IN? ,MORE-BOX ,PC> ,MORE-BOX)
(<IN? ,YAK-WINDOW ,PC> ,YAK-WINDOW)>>
<COND (.TMP
<NEW-PRSO .TMP>
<RTRUE>)
(ELSE
<TELL
S "There's nothing ""to read on the screen now." CR>)>)
(<VERB? LAMP-ON>
<COND (,PC-UNPLUGGED?
<TELL
"It's unplugged. You should plug it in first." CR>)
(<NOT <FSET? ,PC ,POWERBIT>>
<FSET ,PC ,POWERBIT>
<TELL
,COMPUTER-POWERS "up, goes through a remarkably fast self-check,
and greets you, requesting " ,LOGIN-PLEASE " The only sound you hear is
a very low hum." CR>)
(ELSE
<TELL
"It's on. Maybe you didn't notice." CR>)>)
(<VERB? PLUG-IN>
<COND (,PC-UNPLUGGED?
<SETG PC-UNPLUGGED? <>>
<TELL
"You plug in the computer." CR>)
(ELSE <TELL ,IT-ALREADY-IS>)>)
(<VERB? UNPLUG>
<COND (,PC-UNPLUGGED?
<TELL ,IT-ALREADY-IS>
<RTRUE>)
(<QUEUED? I-HACKER-HELPS>
<TELL S
"The hacker stops you. \"You'll mung the bits, chomper!\"|">)
(ELSE
<INIT-PC>
<SETG PC-UNPLUGGED? T>
<TELL
"Okay, it's unplugged now." CR>)>)
(<VERB? LAMP-OFF>
<COND (<QUEUED? I-HACKER-HELPS>
<TELL S
"The hacker stops you. \"You'll mung the bits, chomper!\"|">)
(<FSET? ,PC ,POWERBIT>
<INIT-PC>
<COMPUTER-POWERS-OFF>)
(ELSE
<ITS-ALREADY-X "off">)>)
(<VERB? READ>
<COND (<IN? ,ODD-PAPER ,PC>
<NEW-PRSO ,ODD-PAPER>
<RTRUE>)>)
(<AND <VERB? SIT-AT>
<IN? ,CHAIR ,HERE>>
<PERFORM ,V?SIT ,CHAIR>
<RTRUE>)>>
<ROUTINE COMPUTER-POWERS-OFF ()
<FCLEAR ,PRSO ,POWERBIT>
<TELL
,COMPUTER-POWERS "off. It no longer makes a sound." CR>>
<ROUTINE INIT-PC ()
<FCLEAR ,PC ,POWERBIT>
<SETG LOGGED-IN? <>>
<SETG USERNAME? <>>
<REMOVE ,MENU-BOX>
<REMOVE ,MORE-BOX>
<MOVE ,YAK-WINDOW ,GLOBAL-OBJECTS>
<COND (<NOT <IN? ,ODD-PAPER ,GLOBAL-OBJECTS>>
<REMOVE ,ODD-PAPER>)>>
<OBJECT INTNAME
(IN GLOBAL-OBJECTS)
(SYNONYM INTNAME)
(FLAGS NDESCBIT)>
<SYNTAX LOGIN OBJECT = V-LOGIN>
<SYNTAX LOGIN ON OBJECT = V-LOGIN>
<SYNTAX LOGIN AS OBJECT = V-LOGIN>
<SYNTAX PASSWORD OBJECT = V-PASSWORD>
<GLOBAL LOGGED-IN? <>>
<GLOBAL USERNAME? <>>
<ROUTINE CANT-USE-COMPUTER? ("AUX" (COMP <>))
<COND (<ACCESSIBLE? ,PC> <SET COMP ,PC>)
(<ACCESSIBLE? ,LOVECRAFT> <SET COMP ,LOVECRAFT>)
(ELSE
<TELL "Login on what?" CR>
<RTRUE>)>
<COND (<POWER-ON-FIRST? .COMP> <RTRUE>)
(<EQUAL? .COMP ,LOVECRAFT>
<TELL S "\"Unable to boot because: No disk inserted. Please
insert a dismountable disk.\"" CR>
<RTRUE>)>>
<ROUTINE V-LOGIN ()
<COND (<CANT-USE-COMPUTER?> <RTRUE>)
(<AND <PRSO? ,INTNAME>
<EQUAL? ,P-NAME ,W?XYZZY>>
<SETG USERNAME? ,W?XYZZY>)
(ELSE
<SETG USERNAME? T>)>
<TELL
,COMPUTER-RESPONDS "PASSWORD PLEASE:\"" CR>>
<GLOBAL COMPUTER-RESPONDS "The computer responds \"">
<ROUTINE POWER-ON-FIRST? (COMP)
<COND (<NOT <FSET? .COMP ,POWERBIT>>
<TELL
"It would help if you turned on the computer first." CR>
<RTRUE>)>>
<ROUTINE V-PASSWORD ()
<COND (<CANT-USE-COMPUTER?> <RTRUE>)
(<AND <PRSO? ,INTNAME>
<EQUAL? ,P-NAME ,W?PLUGH>
<EQUAL? ,USERNAME? ,W?XYZZY>>
<SETG LOGGED-IN? T>
<MOVE ,MENU-BOX ,PC>
<TELL
,COMPUTER-RESPONDS "Good evening. You're here awfully late.\" It
displays a list of pending tasks, one of which is in blinking
red letters, with large arrows pointing to it. The task reads \"Classics
Paper,\" some particularly ominous words next to it say \"DUE
TOMORROW!\" and more reassuringly, a menu box next to that
reads " <GETP ,MENU-BOX ,P?TEXT> CR>)
(ELSE
<SETG USERNAME? <>>
<SETG LOGGED-IN? <>>
<TELL
,COMPUTER-RESPONDS "INVALID LOGIN\" and then " ,LOGIN-PLEASE CR>)>>
<GLOBAL LOGIN-PLEASE "\"LOGIN PLEASE:\".">
<OBJECT MENU-BOX
(DESC "menu box")
(SYNONYM BOX PAPER LIST)
(ADJECTIVE EDIT MENU CLASSIC RED)
(FLAGS NDESCBIT READBIT)
(ACTION MENU-BOX-F)
(TEXT
"\"Edit Classics Paper.\"")>
<ROUTINE MOUSE-VERB? ()
<VERB? PUSH RUB CLICK POINT EDIT ATTACK>>
<ROUTINE MENU-BOX-F ()
<COND (<VERB? EXAMINE>
<TELL
"The most immediate thing you see is the red menu box that refers to
an urgent task." CR>)
(<MOUSE-VERB?>
<REMOVE ,MENU-BOX>
<MOVE ,YAK-WINDOW ,PC>
<TELL
"The menu box is replaced by the YAK text editor and menu boxes
listing the titles of your files. The one for your paper is highlighted in a
rather urgent-looking shade of red." CR>)>>
<OBJECT YAK-WINDOW
(IN LOCAL-GLOBALS)
(DESC "YAK editor")
(SYNONYM WINDOW PAPER BOX)
(ADJECTIVE MENU YAK EDITOR FORMATTER CLASSIC RED URGENT)
(FLAGS NDESCBIT READBIT)
(GENERIC GENERIC-PAPER-F)
(ACTION YAK-WINDOW-F)
(TEXT
"\"YAK 5.3\"")>
<ROUTINE GENERIC-PAPER-F ()
<COND (<IN? ,YAK-WINDOW ,PC> ,YAK-WINDOW)
(ELSE ,ODD-PAPER)>>
<ROUTINE YAK-WINDOW-F ()
<COND (<IN? ,YAK-WINDOW ,GLOBAL-OBJECTS>
<COND (<NOT <ABSTRACT-VERB?>>
<YOU-SEE-NO ,YAK-WINDOW>)>)
(<VERB? EXAMINE READ>
<COND (<EQUAL? <GET ,P-NAMW 0> ,W?BOX ,W?SCREEN>
<TELL
"There's one for your paper." CR>)
(ELSE
<TELL
,YOU-HAVE-TO "touch the box for it first." CR>)>)
(<MOUSE-VERB?>
<MOVE ,YAK-WINDOW ,GLOBAL-OBJECTS>
<MOVE ,MORE-BOX ,PC>
<SETG READ-PAGE? <>>
<TELL
"You click the box for your paper, and">
<COND (<NOT <FSET? ,ODD-PAPER ,TOUCHBIT>>
<MOVE ,ODD-PAPER ,PC>
<TELL
" the box grows reassuringly until
it fills most of the screen. Unfortunately, the text that fills it
bears no resemblance to your paper. The title is the same, but after
that, there is something different, very different." CR>)
(ELSE
<TELL
,LC-NOTHING-HAPPENS " \"Your paper is lost!\" reminds the hacker." CR>)>)>>
<OBJECT MORE-BOX
(DESC "more box")
(SYNONYM BOX)
(ADJECTIVE MORE)
(FLAGS READBIT NDESCBIT)
(ACTION MORE-BOX-F)>
<ROUTINE MORE-BOX-F ()
<COND (<VERB? READ>
<TELL "It says \"MORE\" in a subdued typeface." CR>)
(<MOUSE-VERB?>
<COND (<NOT ,READ-PAGE?>
<TELL
"You haven't read the page yet. You probably shouldn't touch the MORE
box until then." CR>)
(ELSE
<TELL
"You touch the MORE box, and a new page appears." CR>)>)>>
<OBJECT ODD-PAPER
(DESC "classics paper")
(SYNONYM PAPER TEXT PAGE)
(ADJECTIVE MY STRANGE ODD CLASSIC)
(FLAGS READBIT NDESCBIT)
(GENERIC GENERIC-PAPER-F)
(ACTION ODD-PAPER-F)>
<GLOBAL ALREADY-DISPLAYED
"It's already displayed. It hasn't changed, either.|">
<ROUTINE ODD-PAPER-F ()
<COND (<IN? ,ODD-PAPER ,GLOBAL-OBJECTS>
<COND (<NOT <ABSTRACT-VERB?>>
<TELL "It's been lost!" CR>)>)
(<MOUSE-VERB?>
<TELL ,ALREADY-DISPLAYED>)
(<VERB? READ EXAMINE>
<SETG READ-PAGE? T>
<COND (<QUEUE I-COMPULSION 2 T>
<SETG COMPCNT 1>
<TELL <GET ,COMPDESCS ,COMPCNT> CR CR
"As you look at it more closely, you
find it hard to focus on the screen, but impossible to look away. Your
finger strays toward the \"MORE\" box..." CR>)
(ELSE
<TELL
"You click the \"MORE\" box and read what appears." CR>)>)>>
<GLOBAL READ-PAGE? <>>
<GLOBAL COMPCNT 0>
<ROUTINE I-COMPULSION ()
<FSET ,ODD-PAPER ,TOUCHBIT>
<COND (<G? <SETG COMPCNT <+ ,COMPCNT 1>> <GET ,COMPDESCS 0>>
<TELL CR "You faint, and when you awaken..." CR CR>
<DEQUEUE I-COMPULSION>
<REMOVE ,MORE-BOX>
<MOVE ,MENU-BOX ,PC>
<COND (<NOT <IN? ,PLAYER ,HERE>>
<MOVE ,PLAYER ,HERE>)>
<ROB ,PLAYER ,FROB>
<GOTO ,YUGGOTH>)
(ELSE
<QUEUE I-COMPULSION 1>
<SETG READ-PAGE? T>
<TELL CR <GET ,COMPDESCS ,COMPCNT> CR>)>>
<GLOBAL COMPDESCS <LTABLE (PURE)
"The paper appears to be a facsimile overlaid with occasional typescript.
The text is mostly in a sort of \"Olde English\" you've never seen before.
What you read is a combination of incomprehensible gibberish, latinate
pseudowords, debased Hebrew and Arabic scripts, and an occasional
disquieting phrase in English."
"The second page is much like the first, but around the edges, not when
you look at it straight, it's almost readable. There is something about
a \"summoning,\" or a \"visitor.\""
"The third page is in the same script as the first, but laid out
like a poem. There are woodcut illustrations
which are queasily disturbing.|
|
There is a translation, or notes for one, typed
between the lines of the poem:|
|
\"He returns, he is called back (?)|
The loyal ones (acolytes?) make a sacrifice|
Those who survive will meet him (be absorbed? eaten?)|
They will live, yet die|
Forever will be (is?) nothing to them (to him?)|
|
\"His place (lair? burrow?) must be prepared|
His food (offerings?) must be prepared|
Call him forth (invite him?) with great power|
Only an acceptable (tasteful?) sacrifice will call him forth|
He will be grateful (satiated?)\"|
|
The rest is even more fragmentary."
"The fourth page is a
photograph. You try to recoil from the screen, but cannot. Fascinated
and repelled at the same time, you wonder: is that a mouth, and what
is in it?">>
<OBJECT PROGRAM
(IN LOCAL-GLOBALS)
(DESC "program")
(SYNONYM PROGRAM BUG PROBLEM)
(ADJECTIVE ASSEMBLY)
(FLAGS NDESCBIT)>

30
record.zil Normal file
View File

@ -0,0 +1,30 @@
"RECORD for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<SYNTAX \#RANDOM OBJECT = V-$RANDOM>
<SYNTAX \#COMMAND = V-$COMMAND>
<SYNTAX \#RECORD = V-$RECORD>
<SYNTAX \#UNRECORD = V-$UNRECORD>
<ROUTINE V-$COMMAND ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-$RANDOM ()
<COND (<NOT <PRSO? ,INTNUM>>
<TELL "Illegal call to #RANDOM." CR>)
(T
<RANDOM <- 0 ,P-NUMBER>>
<RTRUE>)>>
<CONSTANT D-RECORD-ON 4>
<CONSTANT D-RECORD-OFF -4>
<ROUTINE V-$RECORD ()
<DIROUT ,D-RECORD-ON> ;"all READS and INPUTS get sent to command file"
<RTRUE>>
<ROUTINE V-$UNRECORD ()
<DIROUT ,D-RECORD-OFF>
<RTRUE>>

737
syntax.zil Normal file
View File

@ -0,0 +1,737 @@
"SYNTAX for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<BUZZ XYZZY PLUGH> ;"username/password"
<BUZZ A AN THE IS ARE AM AND OF THEN ALL ONE BUT EXCEPT \. \, \"
;PLEASE ;HERE ;SOME G AGAIN OOPS O>
<PREP-SYNONYM WITH USING>
<PREP-SYNONYM THROUGH THRU>
<PREP-SYNONYM ON ONTO>
<PREP-SYNONYM IN INSIDE INTO>
<PREP-SYNONYM UNDER BELOW BENEATH UNDERNEATH>
<PREP-SYNONYM AROUND ALONG>
<SYNONYM ALL BOTH EVERYTHING>
\
;"game commands"
<SYNTAX VERBOSE = V-VERBOSE>
<SYNTAX BRIEF = V-BRIEF>
<SYNTAX SUPER = V-SUPER-BRIEF>
<VERB-SYNONYM SUPER SUPERBRIEF>
<SYNTAX DIAGNOSE = V-DIAGNOSE>
<SYNTAX I = V-INVENTORY>
<VERB-SYNONYM I INVENTORY>
<SYNTAX QUIT = V-QUIT>
<VERB-SYNONYM QUIT Q>
<SYNTAX RESTAR = V-RESTART>
<SYNTAX RESTOR = 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 $VERIFY OBJECT = V-$VERIFY>
\
;"subtitle real verbs"
<SYNTAX ANSWER = V-ANSWER>
<SYNTAX ANSWER OBJECT = V-REPLY>
<VERB-SYNONYM ANSWER REPLY RESPOND>
<SYNTAX APPLY OBJECT (HELD MANY HAVE) TO OBJECT = V-PUT PRE-PUT>
<SYNTAX ASK FOR OBJECT = V-ASK-FOR PRE-ASK-FOR>
<SYNTAX ASK OBJECT (FIND PERSON) FOR OBJECT = V-ASK-FOR PRE-ASK-FOR>
<SYNTAX ASK ABOUT OBJECT = V-ASK-ABOUT PRE-ASK-ABOUT>
<SYNTAX ASK OBJECT (FIND PERSON) ABOUT OBJECT = V-ASK-ABOUT PRE-ASK-ABOUT>
<VERB-SYNONYM ASK QUIZ>
<SYNTAX ATTACK OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ATTACK>
<SYNTAX ATTACK OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED HAVE) = V-ATTACK>
<VERB-SYNONYM ATTACK FIGHT HIT STRIKE>
<SYNTAX BITE OBJECT = V-BITE>
;<SYNTAX BLOW UP OBJECT = V-INFLATE>
<SYNTAX BLOW OUT OBJECT = V-LAMP-OFF>
<SYNTAX BOARD OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<VERB-SYNONYM BOARD RIDE>
<SYNTAX BURN OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE) = V-BURN>
<SYNTAX BURN DOWN OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE) = V-BURN>
<VERB-SYNONYM BURN IGNITE>
<SYNTAX CLIMB OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-FOO>
<SYNTAX CLIMB ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX CLIMB UP OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-CLIMB-UP>
<SYNTAX CLIMB DOWN OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX CLIMB OVER OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-OVER>
<SYNTAX CLIMB IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX CLIMB OFF OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
<SYNTAX CLIMB OUT OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-DISEMBARK>
<VERB-SYNONYM CLIMB SCALE>
<SYNTAX COVER OBJECT WITH OBJECT (ON-GROUND IN-ROOM) = V-SPUT-ON PRE-SPUT-ON>
<SYNTAX DESCEN OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX LIE DOWN OBJECT (FIND RLANDBIT) = V-SLEEP>
<SYNTAX LIE ON OBJECT (FIND VEHBIT) = V-BOARD>
;<VERB-SYNONYM LIE>
<SYNTAX CLOSE OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-CLOSE>
<SYNTAX CLOSE OBJECT (FIND CONTBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) = V-CLOSE>
<VERB-SYNONYM CLOSE SHUT>
<SYNTAX COMPARE OBJECT (MANY) = V-COMPARE-MANY>
<SYNTAX COMPARE OBJECT TO OBJECT = V-COMPARE>
<SYNTAX COMPARE OBJECT WITH OBJECT = V-COMPARE>
<SYNTAX COUNT OBJECT = V-WASTE-OF-TIME <> COUNT>
<SYNTAX COUNT OBJECT IN OBJECT = V-WASTE-OF-TIME <> COUNT>
;<VERB-SYNONYM COUNT>
<SYNTAX CROSS OBJECT = V-CROSS>
;<VERB-SYNONYM CROSS TRAVERSE>
<SYNTAX CUT OBJECT
WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD HAVE) = V-CUT>
<SYNTAX CUT THROUGH OBJECT
WITH OBJECT (FIND WEAPONBIT) (CARRIED HELD HAVE) = V-CUT>
<VERB-SYNONYM CUT CHOP SLICE SLASH ;SEVER SPLIT ;DIVIDE PRUNE>
<SYNTAX SHIT = V-CURSE>
;<SYNTAX SHIT OBJECT = V-CURSE>
;<SYNTAX SHIT OFF OBJECT (FIND RLANDBIT) = V-CURSE>
<VERB-SYNONYM SHIT DAMN FUCK>
<SYNTAX CRACK OBJECT (ON-GROUND IN-ROOM) = V-MUNG>
<SYNTAX CRACK OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH OBJECT (HELD CARRIED TAKE HAVE) = V-MUNG>
<SYNTAX CRACK DOWN OBJECT (ON-GROUND IN-ROOM HELD CARRIED)
WITH OBJECT (HELD CARRIED TAKE HAVE) = V-MUNG>
<VERB-SYNONYM CRACK DESTROY BREAK SMASH WRECK SCRATCH ;SCUFF SCRAPE>
<SYNTAX DIG IN OBJECT = V-WASTE-OF-TIME <> DIG>
<SYNTAX DIG WITH OBJECT = V-WASTE-OF-TIME <> DIG>
<SYNTAX DIG THROUGH OBJECT = V-WASTE-OF-TIME <> DIG>
<SYNTAX DIG OBJECT (ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
= V-WASTE-OF-TIME <> DIG>
<SYNTAX DIG IN OBJECT (ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (HELD CARRIED HAVE)
= V-WASTE-OF-TIME <> DIG>
;<VERB-SYNONYM DIG EXCAVATE>
<SYNTAX DISEMBARK = V-DISEMBARK>
<SYNTAX DISEMBARK OBJECT (ON-GROUND IN-ROOM) = V-DISEMBARK>
;<VERB-SYNONYM DISEMBARK DEBARK DISMOUNT>
<SYNTAX DRINK OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-DRINK>
<SYNTAX DRINK FROM OBJECT (HELD CARRIED) = V-DRINK-FROM>
<VERB-SYNONYM DRINK SIP SWALLOW>
<SYNTAX DROP OBJECT ;(FIND RLANDBIT) (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 PRE-PUT>
<SYNTAX DROP FROM OBJECT = V-DROP PRE-DROP>
<VERB-SYNONYM DROP DUMP>
<SYNTAX RELEASE OBJECT = V-RELEASE>
<SYNTAX EAT OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-EAT>
<VERB-SYNONYM EAT CONSUME ;TASTE ;INGEST GOBBLE>
<SYNTAX TASTE OBJECT (HELD CARRIED ON-GROUND IN-ROOM MANY) = V-TASTE>
<VERB-SYNONYM TASTE SAMPLE>
<SYNTAX ENTER = V-ENTER>
<SYNTAX ENTER OBJECT = V-THROUGH>
<SYNTAX EXIT = V-EXIT>
<SYNTAX EXIT OBJECT = V-EXIT>
<VERB-SYNONYM EXIT DEPART WITHDRAW>
<SYNTAX EXAMINE OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX EXAMINE IN OBJECT (HELD CARRIED IN-ROOM ON-GROUND)
= V-LOOK-INSIDE>
<SYNTAX EXAMINE ON OBJECT (HELD CARRIED IN-ROOM ON-GROUND)
= V-LOOK-INSIDE>
<SYNTAX EXAMINE FOR OBJECT = V-FIND>
<VERB-SYNONYM EXAMINE X ;INSPECT DESCRIBE CHECK ;OBSERVE WATCH>
;<SYNTAX EXORCISE OBJECT = V-EXORCISE>
;<SYNTAX EXORCISE OUT OBJECT (FIND PERSON) = V-EXORCISE>
;<SYNTAX EXORCISE AWAY OBJECT (FIND PERSON) = V-EXORCISE>
;<VERB-SYNONYM EXORCISE BANISH DRIVE>
<SYNTAX EXTINGUISH OBJECT
(MANY HELD CARRIED ON-GROUND IN-ROOM TAKE HAVE) = V-LAMP-OFF>
;<VERB-SYNONYM EXTINGUISH DOUSE>
<SYNTAX FILL OBJECT (FIND CONTBIT) (HELD TAKE HAVE) = V-FILL>
<SYNTAX FILL OBJECT (FIND CONTBIT) (HELD TAKE HAVE)
WITH OBJECT = V-FILL>
<SYNTAX FILL OBJECT (FIND CONTBIT) (HELD TAKE HAVE)
AT OBJECT = V-FILL>
<SYNTAX FIND OBJECT = V-FIND>
;<VERB-SYNONYM FIND SEEK SEE>
;<SYNTAX FLY = V-FLY>
;<SYNTAX FLY OBJECT = V-FLY>
;<SYNONYM FLY LAUNCH>
<SYNTAX FOLLOW = V-FOLLOW>
<SYNTAX FOLLOW OBJECT = V-FOLLOW>
<VERB-SYNONYM FOLLOW ;PURSUE CHASE>
;<SYNTAX FORGET OBJECT = V-FORGET>
;<VERB-SYNONYM FORGET UNLEARN ;UNMEMORIZE>
<SYNTAX GIVE OBJECT (MANY HELD CARRIED HAVE)
TO OBJECT (FIND PERSON) (ON-GROUND) = V-GIVE PRE-GIVE>
<SYNTAX GIVE OBJECT (FIND PERSON) (ON-GROUND) OBJECT (MANY HELD CARRIED HAVE)
= V-SGIVE PRE-SGIVE>
<SYNTAX GIVE OBJECT (FIND PERSON) (ON-GROUND)
WITH OBJECT (MANY HELD CARRIED HAVE)
= V-SGIVE PRE-SGIVE>
<SYNTAX GIVE OBJECT (HELD CARRIED HAVE) FOR OBJECT = V-TRADE>
<VERB-SYNONYM GIVE OFFER FEED ;PRESENT>
<SYNTAX HELLO = V-HELLO>
<SYNTAX HELLO OBJECT = V-HELLO>
<VERB-SYNONYM HELLO HI GREETINGS>
<SYNTAX HELP = V-HELP>
<SYNTAX HELP OBJECT = V-HELP>
<VERB-SYNONYM HELP HINT ;HINTS>
<SYNTAX HIDE = V-HIDE>
<SYNTAX HIDE OBJECT (HELD HAVE) = V-HIDE>
<SYNTAX HIDE UNDER OBJECT = V-HIDE>
<SYNTAX HIDE BEHIND OBJECT = V-HIDE>
<SYNTAX HIDE OBJECT (HELD HAVE) FROM OBJECT = V-HIDE>
<SYNTAX HIDE IN OBJECT = V-BOARD>
<SYNTAX HIDE FROM OBJECT = V-HIDE-FROM>
<VERB-SYNONYM HIDE CONCEAL ;STASH>
;<SYNTAX INFLAT OBJECT = V-INFLATE>
<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 DOWN OBJECT (FIND RLANDBIT) = V-LEAP>
<SYNTAX JUMP OFF OBJECT = V-LEAP>
<SYNTAX JUMP ON OBJECT = V-CLIMB-ON>
<SYNTAX JUMP TO OBJECT = V-CLIMB-ON>
<VERB-SYNONYM JUMP LEAP DIVE>
<SYNTAX KICK OBJECT = V-KICK PRE-OPEN>
<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>
<VERB-SYNONYM KILL MURDER SLAY STAB>
<SYNTAX KISS OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-KISS>
<SYNTAX KNOCK AT OBJECT = V-KNOCK>
<SYNTAX KNOCK ON OBJECT = V-KNOCK>
<SYNTAX KNOCK DOWN OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-ATTACK>
<VERB-SYNONYM KNOCK RAP>
;<SYNTAX LAND = V-LAND>
<SYNTAX LEAN ON OBJECT (HELD HAVE) = V-LEAN-ON>
<SYNTAX LEAN OBJECT ON OBJECT = V-RAISE>
<SYNTAX LEAN OBJECT AGAINST OBJECT = V-RAISE>
<SYNTAX LEAVE = V-LEAVE>
<SYNTAX LEAVE OBJECT = V-DROP PRE-DROP>
<SYNTAX LISTEN = V-LISTEN>
<SYNTAX LISTEN TO OBJECT = V-LISTEN>
<SYNTAX LISTEN FOR OBJECT = V-LISTEN>
<SYNTAX LOCK OBJECT (ON-GROUND IN-ROOM) WITH OBJECT
(HELD CARRIED HAVE) = V-LOCK>
<SYNTAX LOCK OBJECT (ON-GROUND IN-ROOM) TO OBJECT = V-LOCK>
<SYNTAX LOOK = V-LOOK>
<SYNTAX LOOK AROUND OBJECT (FIND RLANDBIT) = V-LOOK>
<SYNTAX LOOK DOWN OBJECT (FIND RLANDBIT) = V-LOOK-DOWN>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-EXAMINE PRE-EXAMINE>
<SYNTAX LOOK THROUGH OBJECT = V-LOOK-INSIDE>
<SYNTAX LOOK UNDER OBJECT = V-LOOK-UNDER>
<SYNTAX LOOK BEHIND OBJECT = V-LOOK-BEHIND>
<SYNTAX LOOK ON OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-LOOK-INSIDE>
<SYNTAX LOOK IN OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-LOOK-INSIDE>
<SYNTAX LOOK AT OBJECT (HELD CARRIED ON-GROUND IN-ROOM TAKE) THROUGH OBJECT
= V-READ PRE-READ>
<SYNTAX LOOK UP OBJECT (FIND RLANDBIT) = V-LOOK-UP>
<SYNTAX LOOK UP OBJECT IN OBJECT = V-WHAT>
<SYNTAX LOOK FOR OBJECT = V-FIND>
<SYNTAX LOOK OBJECT = V-CHASTISE>
<VERB-SYNONYM LOOK L STARE GAZE>
<SYNTAX LOWER OBJECT = V-LOWER>
<SYNTAX LOWER OBJECT IN OBJECT = V-LOWER-INTO>
<SYNTAX LOWER OBJECT DOWN OBJECT = V-LOWER-INTO>
<SYNTAX MELT OBJECT WITH OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-MELT>
<VERB-SYNONYM MELT THAW>
<SYNTAX MOVE = V-WALK-AROUND>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM)
WITH OBJECT = V-PRY PRE-PRY>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM)
TO OBJECT = V-PUSH-TO>
<SYNTAX MOVE OBJECT (ON-GROUND IN-ROOM)
ON OBJECT = V-PUSH-TO>
<SYNTAX ROLL UP OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
<VERB-SYNONYM MOVE SHIFT CLEAR>
;<SYNTAX PAY OBJECT (MANY HELD HAVE) = V-PAY>
;<SYNTAX PAY OBJECT (FIND PERSON) WITH OBJECT (MANY HELD HAVE) = V-PAY>
;<SYNTAX PAY OBJECT (MANY HELD HAVE) TO OBJECT (FIND PERSON) = V-SPAY>
;<SYNTAX PAY OBJECT (FIND PERSON) OBJECT (MANY HELD HAVE) = V-PAY>
;<SYNTAX PLAY OBJECT = V-PLAY>
<SYNTAX PRAY = V-PRAY>
<SYNTAX PULL OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
<SYNTAX PULL ON OBJECT (ON-GROUND IN-ROOM) = V-MOVE>
<SYNTAX PULL DOWN OBJECT = V-LOWER>
<VERB-SYNONYM PULL TUG DRAG>
<SYNTAX OPEN OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN PRE-OPEN>
<SYNTAX OPEN UP OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-OPEN PRE-OPEN>
<SYNTAX OPEN OBJECT (FIND DOORBIT) (HELD CARRIED ON-GROUND IN-ROOM)
WITH OBJECT (FIND TOOLBIT) (ON-GROUND IN-ROOM HELD CARRIED)
= V-OPEN PRE-OPEN>
;<VERB-SYNONYM OPEN UNZIP>
<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 PLUG OBJECT WITH OBJECT = V-PLUG>
<SYNTAX PLUG IN OBJECT = V-PLUG-IN>
<SYNTAX PLUG OBJECT IN OBJECT = V-PLUG>
<VERB-SYNONYM PLUG ;CLOG ;BLOCK SCREW>
<SYNTAX UNPLUG OBJECT = V-UNPLUG>
<SYNTAX UNPLUG OBJECT FROM OBJECT = V-UNTIE>
<SYNTAX UNPLUG OBJECT WITH OBJECT = V-PRY PRE-PRY>
<VERB-SYNONYM UNPLUG UNSCREW>
<SYNTAX REPAIR OBJECT = V-REPAIR>
<SYNTAX REPAIR OBJECT WITH OBJECT = V-REPAIR>
<VERB-SYNONYM REPAIR PATCH FIX>
<SYNTAX POINT AT OBJECT = V-POINT>
<SYNTAX POINT TO OBJECT = V-POINT>
<VERB-SYNONYM POINT GESTURE>
;<SYNTAX POKE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM)
WITH OBJECT (FIND WEAPONBIT) (HELD CARRIED TAKE HAVE) = V-MUNG>
;<VERB-SYNONYM POKE JAB BLIND>
<SYNTAX POUR OBJECT (HELD CARRIED) = V-POUR PRE-POUR>
<SYNTAX POUR OBJECT (HELD CARRIED) IN OBJECT = V-PUT>
<SYNTAX POUR OBJECT (HELD CARRIED) ON OBJECT = V-POUR PRE-POUR>
<SYNTAX POUR OBJECT (HELD CARRIED) OVER OBJECT = V-POUR PRE-POUR>
<SYNTAX POUR OBJECT (HELD CARRIED) THROUGH OBJECT = V-POUR PRE-POUR>
<SYNTAX POUR OBJECT (HELD CARRIED) FROM OBJECT = V-POUR-FROM>
<VERB-SYNONYM POUR EMPTY SPILL>
;<SYNTAX PUMP UP OBJECT = V-PUMP>
;<SYNTAX PUMP UP OBJECT WITH OBJECT = V-PUMP>
<SYNTAX PUSH OBJECT (IN-ROOM ON-GROUND) = V-PUSH>
<SYNTAX PUSH ON OBJECT (IN-ROOM ON-GROUND) = V-PUSH>
<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) ON OBJECT = V-PUSH-TO>
<SYNTAX PUSH OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUSH DOWN OBJECT (FIND RLANDBIT) = V-PUSH-DOWN>
<SYNTAX PUSH UP OBJECT (FIND RLANDBIT) = V-PUSH-UP>
<VERB-SYNONYM PUSH PRESS SHOVE>
<SYNTAX PUT OBJECT (HELD MANY HAVE) IN OBJECT = V-PUT PRE-PUT>
<SYNTAX PUT OBJECT (HELD MANY HAVE) DOWN OBJECT = V-PUT PRE-PUT>
<SYNTAX PUT OBJECT (HELD MANY HAVE) ON OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX PUT OBJECT (HELD MANY HAVE) OVER OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX PUT OBJECT (HELD MANY HAVE) ACROSS OBJECT = V-PUT-ON PRE-PUT>
<SYNTAX PUT DOWN OBJECT (HELD MANY) = V-DROP PRE-DROP>
<SYNTAX PUT OBJECT (HELD MANY HAVE) UNDER OBJECT = V-PUT-UNDER>
<SYNTAX PUT ON OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE TAKE MANY) = V-WEAR>
<SYNTAX PUT OBJECT (HELD MANY HAVE) BEHIND OBJECT = V-PUT-BEHIND>
<SYNTAX PUT OBJECT (HELD HAVE) BETWEEN OBJECT = V-PUT-BETWEEN>
<SYNTAX PUT OBJECT (HELD HAVE) AROUND OBJECT = V-TIE>
<SYNTAX PUT UP OBJECT = V-RAISE>
<VERB-SYNONYM PUT ;STUFF INSERT PLACE LAY ;FIT>
<SYNTAX RAISE OBJECT = V-RAISE>
<SYNTAX RAISE UP OBJECT = V-RAISE>
<SYNTAX RAISE OBJECT WITH OBJECT = V-PRY PRE-PRY>
<SYNTAX RAISE UP OBJECT WITH OBJECT = V-PRY PRE-PRY>
<VERB-SYNONYM RAISE LIFT ERECT>
<SYNTAX REACH IN OBJECT (ON-GROUND IN-ROOM) = V-REACH-IN>
<SYNTAX REACH IN OBJECT (ON-GROUND IN-ROOM)
WITH OBJECT (HELD CARRIED HAVE) = V-REACH-IN>
<SYNTAX REACH UNDER OBJECT (ON-GROUND IN-ROOM) = V-SEARCH>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-READ PRE-READ>
;<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM)
THROUGH OBJECT = V-READ PRE-READ>
<SYNTAX READ OBJECT (FIND READBIT) (HELD CARRIED ON-GROUND IN-ROOM)
TO OBJECT (FIND PERSON) = V-SHOW>
<SYNTAX READ ABOUT OBJECT = V-WHAT>
;<SYNTAX READ ABOUT OBJECT IN OBJECT = V-WHAT>
;<VERB-SYNONYM READ>
<SYNTAX REMOVE OBJECT = V-TAKE-OFF>
<SYNTAX REMOVE OBJECT WITH OBJECT = V-PRY PRE-PRY>
<SYNTAX REMOVE OBJECT FROM OBJECT = V-TAKE PRE-TAKE>
<VERB-SYNONYM REMOVE SHED>
<SYNTAX SAY TO OBJECT (FIND PERSON) (IN-ROOM) = V-TELL>
<SYNTAX SAY = V-SAY>
<SYNTAX SAY OBJECT = V-SAY>
<VERB-SYNONYM SAY TALK CALL>
<SYNTAX SEARCH OBJECT = V-SEARCH>
<SYNTAX SEARCH IN OBJECT = V-SEARCH>
<SYNTAX SEARCH FOR OBJECT = V-FIND>
<VERB-SYNONYM SEARCH RUMMAGE ;FRISK>
;<SYNTAX SEND FOR OBJECT = V-SEND>
<SYNTAX SHAKE OBJECT = V-SHAKE>
<SYNTAX SHAKE OBJECT AT OBJECT = V-WAVE-AT>
<VERB-SYNONYM SHAKE ;JOSTLE RATTLE>
<SYNTAX SHARPEN OBJECT WITH OBJECT = V-SHARPEN>
<SYNTAX SHARPEN OBJECT ON OBJECT = V-SHARPEN>
<VERB-SYNONYM SHARPEN HONE>
<SYNTAX SHOOT OBJECT = V-SHOOT>
;<VERB-SYNONYM SHOOT FIRE>
<SYNTAX SHOW OBJECT TO OBJECT (FIND PERSON) = V-SHOW>
<SYNTAX SHOW OBJECT (FIND PERSON) OBJECT = V-SSHOW PRE-SSHOW>
<SYNTAX SIT ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-SIT>
<SYNTAX SIT DOWN OBJECT (FIND RLANDBIT) (ON-GROUND IN-ROOM) = V-SIT>
<SYNTAX SIT IN OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-BOARD PRE-BOARD>
<SYNTAX SIT AT OBJECT = V-SIT <> SIT-AT>
<VERB-SYNONYM SIT REST ;MEDITATE>
<SYNTAX SKIP = V-SKIP>
<VERB-SYNONYM SKIP HOP ;CAVORT ;GAMBOL>
<SYNTAX SLEEP = V-SLEEP>
<SYNTAX SLEEP IN OBJECT (IN-ROOM ON-GROUND) = V-BOARD>
<SYNTAX SLEEP ON OBJECT (IN-ROOM ON-GROUND) = V-BOARD>
<VERB-SYNONYM SLEEP NAP ;SNOOZE>
<SYNTAX SLIDE OBJECT = V-MOVE>
<SYNTAX SLIDE ON OBJECT = V-BOARD>
<SYNTAX SLIDE OBJECT UNDER OBJECT = V-PUT-UNDER>
<SYNTAX SMELL = V-SMELL>
<SYNTAX SMELL OBJECT = V-SMELL>
<VERB-SYNONYM SMELL SNIFF>
;<SYNTAX SPIN OBJECT = V-SPIN>
;<VERB-SYNONYM SPIN WHIRL ROTATE>
<SYNTAX STAND = V-STAND>
<SYNTAX STAND UP OBJECT (FIND RLANDBIT) = V-STAND>
<SYNTAX STAND IN OBJECT = V-BOARD>
<SYNTAX STAND ON OBJECT = V-WASTE-OF-TIME <> STAND-ON>
<SYNTAX STAND OBJECT AGAINST OBJECT = V-RAISE>
<VERB-SYNONYM STAND RISE>
<SYNTAX START OBJECT = V-LAMP-ON>
<SYNTAX START UP OBJECT = V-LAMP-ON>
<SYNTAX SWIM = V-SWIM>
<SYNTAX SWIM IN OBJECT = V-SWIM>
<VERB-SYNONYM SWIM 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>
<VERB-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 RLANDBIT) (ON-GROUND) = V-DISEMBARK>
<SYNTAX TAKE ON OBJECT (FIND VEHBIT) (ON-GROUND IN-ROOM) = V-CLIMB-ON>
<SYNTAX TAKE UP OBJECT (FIND RLANDBIT) = V-STAND>
<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 MANY)
IN OBJECT = V-TAKE PRE-TAKE>
<SYNTAX TAKE OFF OBJECT = V-TAKE-OFF>
<SYNTAX TAKE DOWN OBJECT = V-LOWER>
<SYNTAX TAKE OBJECT (FIND TAKEBIT) (IN-ROOM CARRIED MANY)
WITH OBJECT = V-PRY PRE-PRY>
<VERB-SYNONYM TAKE GRAB CATCH GET HOLD CARRY SNATCH>
<SYNTAX TELL OBJECT (FIND PERSON) (HELD CARRIED IN-ROOM) = V-TELL>
<SYNTAX TELL OBJECT ABOUT OBJECT = V-TELL-ABOUT PRE-TELL-ABOUT>
<SYNTAX TELL OBJECT OBJECT = V-REPLY>
<SYNTAX TELL ABOUT OBJECT = V-TELL-ME-ABOUT>
<SYNTAX THANK OBJECT = V-THANK>
<SYNTAX THANK = V-THANK>
<VERB-SYNONYM THANK THANKS>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) = V-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
AT OBJECT (ON-GROUND IN-ROOM) = V-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
TO OBJECT (ON-GROUND IN-ROOM) = V-THROW>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OFF OBJECT = V-THROW-OFF>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE) OVER OBJECT = V-THROW-OFF>
<SYNTAX THROW OBJECT (HELD CARRIED HAVE)
THROUGH OBJECT (ON-GROUND IN-ROOM) = V-THROW>
<SYNTAX THROW OBJECT (HELD MANY HAVE) DOWN OBJECT = V-THROW>
<SYNTAX THROW OBJECT (HELD MANY HAVE) IN OBJECT = V-THROW>
<SYNTAX THROW OBJECT (HELD MANY HAVE) ON OBJECT = V-THROW>
<SYNTAX THROW AWAY OBJECT (HELD MANY HAVE) = V-DROP PRE-DROP>
<SYNTAX THROW OBJECT (HELD MANY HAVE)
AWAY OBJECT (FIND RLANDBIT) = V-DROP PRE-DROP>
<VERB-SYNONYM THROW HURL TOSS PITCH>
<SYNTAX TIE OBJECT TO OBJECT = V-TIE>
<SYNTAX TIE OBJECT AROUND OBJECT = V-TIE>
<SYNTAX TIE OBJECT ON OBJECT = V-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>
<VERB-SYNONYM TIE LOOP WRAP FASTEN ATTACH HOOK CONNECT>
<SYNTAX TIME = V-TIME>
<VERB-SYNONYM TIME T>
<SYNTAX TORTUR OBJECT = V-TORTURE>
<SYNTAX TOUCH OBJECT = V-RUB>
<SYNTAX TOUCH OBJECT WITH OBJECT = V-RUB>
<SYNTAX TOUCH OBJECT TO OBJECT = V-SRUB PRE-SRUB>
<VERB-SYNONYM TOUCH FEEL PAT PET RUB SQUEEZE>
<SYNTAX TURN OBJECT TO OBJECT = V-TURN>
<SYNTAX TURN OBJECT = V-TURN>
<SYNTAX TURN OBJECT WITH OBJECT (FIND TOOLBIT) (HAVE) = V-TURN>
<SYNTAX TURN ON OBJECT (HELD CARRIED ON-GROUND IN-ROOM) = V-LAMP-ON>
<SYNTAX TURN OFF OBJECT (HELD CARRIED ON-GROUND IN-ROOM TAKE) = V-LAMP-OFF>
<SYNTAX TURN OVER OBJECT = V-TURN-OVER>
<SYNTAX TURN AROUND OBJECT (FIND RLANDBIT) = V-TURN-AROUND>
<SYNTAX TURN UP OBJECT = V-LAMP-ON>
<VERB-SYNONYM TURN FLIP POWER SET>
<SYNTAX STOP OBJECT = V-STOP>
<SYNTAX LIGHT OBJECT (FIND LIGHTBIT) = V-LAMP-ON>
<SYNTAX LIGHT UP OBJECT (FIND LIGHTBIT) = V-LAMP-ON>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM)
WITH OBJECT (HELD CARRIED HAVE) = 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>
<VERB-SYNONYM UNTIE UNWRAP FREE UNFASTEN UNATTACH UNHOOK DISCONNECT DETACH>
<SYNTAX WAIT = V-WAIT>
<SYNTAX WAIT OBJECT = V-WAIT>
<SYNTAX WAIT FOR OBJECT = V-WAIT-FOR>
<VERB-SYNONYM WAIT Z>
<SYNTAX SCARE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) = V-SCARE>
<SYNTAX SCARE OBJECT (FIND PERSON) (ON-GROUND IN-ROOM) WITH OBJECT = V-SCARE>
<VERB-SYNONYM SCARE SURPRISE STARTLE CURDLE>
<SYNTAX WAKE OBJECT (FIND RLANDBIT) = V-WAKE>
<SYNTAX WAKE UP OBJECT (FIND RLANDBIT) = V-WAKE>
<VERB-SYNONYM WAKE AWAKE ;ROUSE>
<SYNTAX WALK = V-WALK-AROUND>
<SYNTAX WALK OBJECT = V-WALK>
<SYNTAX WALK IN OBJECT (FIND RLANDBIT) = V-THROUGH>
<SYNTAX WALK ON OBJECT = V-STEP-ON>
<SYNTAX WALK OVER OBJECT = V-LEAP>
<SYNTAX WALK THROUGH OBJECT = V-THROUGH>
<SYNTAX WALK AROUND OBJECT = V-WALK-AROUND>
<SYNTAX WALK UP OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-UP>
<SYNTAX WALK DOWN OBJECT (ON-GROUND IN-ROOM) = V-CLIMB-DOWN>
<SYNTAX WALK TO OBJECT = V-WALK-TO>
<SYNTAX WALK UNDER OBJECT = V-WALK-UNDER>
<SYNTAX WALK AWAY OBJECT (FIND RLANDBIT) = V-LEAVE>
<SYNTAX WALK OBJECT ON OBJECT = V-DRIVE-ON>
<SYNTAX WALK OBJECT OVER OBJECT = V-DRIVE-ON>
<SYNTAX WALK OBJECT OBJECT = V-DRIVE-TO>
<VERB-SYNONYM WALK GO RUN PROCEED STEP DRIVE STEER>
<SYNTAX APPROACH OBJECT = V-WALK-TO>
<SYNTAX WAVE OBJECT (HELD CARRIED) = V-WAVE>
<SYNTAX WAVE AT OBJECT = V-WAVE-AT>
<SYNTAX WAVE TO OBJECT = V-WAVE-AT>
<SYNTAX YELL AT OBJECT = V-WAVE-AT>
<SYNTAX WAVE OBJECT (HELD CARRIED) AT OBJECT = V-WAVE>
<VERB-SYNONYM WAVE ;MOTION BECKON>
<SYNTAX WEAR OBJECT (HELD CARRIED ON-GROUND IN-ROOM HAVE TAKE MANY) = V-WEAR>
<SYNTAX WHAT OBJECT = V-WHAT>
<SYNTAX WHAT ABOUT OBJECT = V-WHAT>
;<VERB-SYNONYM WHAT WHATS>
<SYNTAX WHERE = V-WHERE>
<SYNTAX WHERE OBJECT = V-WHERE>
;<VERB-SYNONYM WHERE WHERES>
<SYNTAX WHO = V-WHO>
<SYNTAX WHO OBJECT = V-WHO>
;<VERB-SYNONYM WHO WHOS>
<SYNTAX YAWN = V-YAWN>
<SYNTAX YELL = V-YELL>
<VERB-SYNONYM YELL SCREAM SHOUT>
\^L
;"magic spell syntaxes"
;<SYNTAX LABEL OBJECT (HELD CARRIED) = V-SWRITE PRE-SWRITE>
;<SYNTAX LABEL OBJECT (HELD CARRIED) WITH OBJECT = V-SWRITE PRE-SWRITE>
;<SYNTAX WRITE OBJECT = V-WRITE PRE-WRITE>
;<SYNTAX WRITE OBJECT ON OBJECT (HELD CARRIED) = V-WRITE PRE-WRITE>
;<SYNTAX WRITE OBJECT IN OBJECT (HELD CARRIED) = V-WRITE PRE-WRITE>
;<SYNTAX WRITE ON OBJECT (HELD CARRIED) = V-WRITE-ON PRE-WRITE-ON>
;<SYNTAX WRITE IN OBJECT (HELD CARRIED) = V-WRITE-ON PRE-WRITE-ON>
;<SYNTAX WRITE ON OBJECT (HELD CARRIED)
WITH OBJECT (FIND TOOLBIT) = V-WRITE-ON PRE-WRITE-ON>
;<SYNTAX WRITE IN OBJECT (HELD CARRIED)
WITH OBJECT (FIND TOOLBIT) = V-WRITE-ON PRE-WRITE-ON>
;<VERB-SYNONYM WRITE PRINT INSCRIBE SCRIBE>
<SYNTAX PRY OBJECT WITH OBJECT = V-PRY PRE-PRY>
<SYNTAX PRY OUT OBJECT WITH OBJECT = V-PRY PRE-PRY>
<SYNONYM PRY LEVER>
<SYNTAX BURY OBJECT = V-BURY>
<SYNTAX BURY OBJECT IN OBJECT = V-BURY>
<SYNTAX YES = V-YES>
<VERB-SYNONYM YES Y OKAY>
<SYNTAX NO = V-NO>
<VERB-SYNONYM NO NOPE>
<SYNTAX BUY OBJECT FROM OBJECT (FIND PERSON) = V-BUY>
<SYNTAX BUY OBJECT WITH OBJECT = V-BUY>
<VERB-SYNONYM BUY PURCHASE>
<SYNTAX SELL OBJECT TO OBJECT (FIND PERSON) = V-SELL>
<SYNTAX SELL OBJECT OBJECT = V-SSELL PRE-SSELL>
<SYNTAX TRADE OBJECT (HELD CARRIED HAVE) WITH OBJECT (FIND PERSON) = V-TRADE>
<SYNTAX TRADE OBJECT (HELD CARRIED HAVE) FOR OBJECT = V-TRADE>
<SYNTAX TRADE OBJECT (HELD CARRIED HAVE) = V-TRADE>
<SYNTAX ERASE OBJECT = V-ERASE>
<SYNTAX ADMIRE OBJECT (FIND PERSON) = V-ADMIRE>
<VERB-SYNONYM ADMIRE COMPLIMENT>
;<SYNTAX COPY OBJECT (FIND READBIT)
WITH OBJECT (FIND TOOLBIT) = V-COPY>
;<SYNTAX COPY OBJECT (FIND READBIT)
ON OBJECT = V-COPY>
;<SYNTAX COPY OBJECT (FIND READBIT)
TO OBJECT = V-COPY>
;<SYNTAX COPY OBJECT (FIND READBIT) = V-COPY>
<SYNTAX BARGAIN WITH OBJECT (FIND PERSON) = V-BARGAIN>
;<VERB-SYNONYM BARGAIN HAGGLE>
<SYNTAX EDIT OBJECT = V-EDIT>
<SYNTAX CLICK OBJECT = V-CLICK>
<SYNTAX CLICK OBJECT WITH OBJECT = V-CLICK>
<SYNTAX CLICK ON OBJECT = V-CLICK>
<SYNTAX CLICK ON OBJECT WITH OBJECT = V-CLICK>
<VERB-SYNONYM CLICK SELECT CHOOSE>
<SYNTAX LET GO OBJECT (FIND RLANDBIT) = V-DROP PRE-DROP>
<SYNTAX HANG FROM OBJECT = V-BOARD PRE-BOARD>
<SYNTAX HANG OBJECT ON OBJECT = V-PUT-ON>
<SYNTAX HANG OBJECT FROM OBJECT = V-PUT-ON>
<SYNTAX TYPE OBJECT = V-TYPE>
<SYNTAX TYPE LOGIN OBJECT = V-LOGIN>
<SYNTAX TYPE PASSWORD OBJECT = V-PASSWORD>
<VERB-SYNONYM TYPE INPUT>
<SYNTAX WEDGE OBJECT WITH OBJECT = V-WEDGE>
<SYNTAX WEDGE OBJECT IN OBJECT = V-SWEDGE PRE-SWEDGE>
<SYNTAX WEDGE OBJECT BETWEEN OBJECT = V-SWEDGE PRE-SWEDGE>
<VERB-SYNONYM WEDGE PROP>
<SYNTAX DIE = V-DIE>
<SYNTAX HACK = V-HACK>
<SYNTAX HACK OBJECT = V-HACK>
<SYNTAX COOK OBJECT = V-COOK>
<VERB-SYNONYM COOK WARM HEAT>

2216
verbs.zil Normal file

File diff suppressed because it is too large Load Diff

302
yuggoth.zil Normal file
View File

@ -0,0 +1,302 @@
"YUGGOTH for
The Lurking Horror
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
<ROUTINE I-YUGGOTH ()
<COND (<HERE? ,YUGGOTH>
<TELL CR
"From below, a low noise begins, and slowly builds. You feel yourself drawn
downward by the noise." CR CR>
<GOTO ,BOWL-ROOM>
<RFATAL>)
(<HERE? ,BOWL-ROOM>
<TELL CR
"The crowd around you begins to sway and groan. They are expecting
something. You are drawn forward by the noise." CR CR>
<GOTO ,PLATFORM-ROOM>
<RFATAL>)>>
<ROOM YUGGOTH
(IN ROOMS)
(DESC "Place")
(LDESC
"This is a place. Things move about on a broken, rocky surface.
Harsh sounds split the air. Something sticky grabs at your feet.
There is no color, everything is drained of brightness, dull and
lifeless. A path descends into a shallow bowl of black basalt.")
(DOWN TO BOWL-ROOM)
(FLAGS ONBIT)
(ACTION RANDOM-YUGGOTH-F)>
<ROUTINE RANDOM-YUGGOTH-F (RARG)
<COND (<RARG? ENTER>
<QUEUE I-YUGGOTH 2>)>>
<ROOM BOWL-ROOM
(IN ROOMS)
(DESC "Basalt Bowl")
(LDESC
"You are at the bottom of a deeply cut, smooth basalt bowl. Dimly seen
shapes crowd you on all sides. Ahead, in the focus of the movement, is
a rock platform.")
(UP TO YUGGOTH)
(IN TO PLATFORM-ROOM)
(DOWN TO PLATFORM-ROOM)
(GLOBAL PLATFORM)
(FLAGS ONBIT)
(ACTION RANDOM-YUGGOTH-F)>
<ROOM PLATFORM-ROOM
(IN ROOMS)
(DESC "At Platform")
(LDESC
"You stand before a low rock platform, more like an afterthought of
piled rocks or a glacial moraine than a work of artifice. You are
pushed against the pile by the crowd around you.")
(FLAGS ONBIT)
(GLOBAL PLATFORM)
(ACTION PLATFORM-ROOM-F)>
<ROUTINE PLATFORM-ROOM-F (RARG)
<COND ;(<RARG? LOOK>
<TELL
CR>)
(<RARG? BEG>
<COND (<VERB? WALK>
<COND (<EQUAL? ,P-WALK-DIR ,P?UP>
<TELL
"You are prevented, as the crowd holds you back." CR>)
(ELSE
<TELL
"The crowding is such that you can barely move, much less walk." CR>)>)
(<P? LISTEN (<> NOISE)>
<TELL
"It sounds like supplication." CR>)
(<AND <P? SMELL <>>
<IN? ,LURKER ,HERE>>
<NEW-PRSO ,LURKER>
<RTRUE>)
(<OR <P? (DROP PUT THROW) SMOOTH-STONE>
<P? ATTACK * SMOOTH-STONE>>
<TELL
"You can't. You go through the motions, but the stone doesn't leave your
hand." CR>)>)>>
<OBJECT PLATFORM
(IN LOCAL-GLOBALS)
(DESC "platform")
(SYNONYM PLATFORM ROCKS PILE)
(ADJECTIVE BASALT)
(FLAGS NDESCBIT VEHBIT SURFACEBIT)
(ACTION PLATFORM-F)>
<ROUTINE PLATFORM-F ()
<COND (<VERB? WALK-TO THROUGH BOARD>
<COND (<HERE? ,BOWL-ROOM>
<DO-WALK ,P?IN>)
(ELSE
<DO-WALK ,P?UP>)>)
(<VERB? EXAMINE LOOK-UNDER LOOK-BEHIND>
<TELL
"The platform is made of the same rocks as the surrounding terrain.
In fact, you can't tell whether it is natural or constructed." CR>)>>
<OBJECT SMOOTH-STONE
(IN PLATFORM-ROOM)
(DESC "smooth stone")
(SYNONYM STONE)
(ADJECTIVE SMOOTH SHINY SMALL)
(FLAGS TAKEBIT SEARCHBIT OPENBIT CONTBIT WEAPONBIT)
(VALUE 5)
(DESCFCN SMOOTH-STONE-DESC)
(ACTION SMOOTH-STONE-F)>
<ROUTINE SMOOTH-STONE-DESC (RARG OBJ)
<COND (<RARG? OBJDESC?>
<COND (<NOT <FSET? ,SMOOTH-STONE ,TOUCHBIT>>
<RTRUE>)>)
(<NOT <FSET? ,SMOOTH-STONE ,TOUCHBIT>>
<COND (<HERE? ,INNER-LAIR>
<TELL
"The stone sits on a hummock of mud. From here it appears to have a crack
in it.">)
(ELSE
<TELL
"One small stone stands out in the pile, smooth, shiny, and glowing with a blazing
light.">)>)>>
<ROUTINE SMOOTH-STONE-F ()
<COND (<VERB? EXAMINE>
<TELL
"It's a ">
<COND (<AND <HERE? ,INNER-LAIR>
<NOT <FSET? ,SMOOTH-STONE ,TOUCHBIT>>>
<TELL "cracked">)
(ELSE
<TELL "smooth, shiny">)>
<TELL " piece of what might be obsidian. Scratched on it
is a symbol." CR>)
(<AND <VERB? TAKE>
<IN? ,PRSO ,HERE>>
<COND (<HERE? ,PLATFORM-ROOM>
<QUEUE I-COOL 20 T>
<QUEUE I-LURKER-APPEARS -1>
<RFALSE>)
(<AND <HERE? ,BROWN-ROOF ,INSIDE-DOME>
<IN? ,FLIER ,HERE>>
<TELL
"The noisome creature jabs at you with its razor beak, but appears
unwilling to approach the stone." CR>)
(<AND <HERE? ,INNER-LAIR>
<NOT <FSET? ,SMOOTH-STONE ,TOUCHBIT>>>
<TELL
"You pick up the stone. It has a long jagged crack that almost breaks
it in half. As you pick it up, you feel it bump to one side. Then, as
you are holding it in your hand, something pushes its way out through
the crack, breaking the stone into two pieces. Something small, pale,
and damp blinks its watery eyes at you. It hisses, gaining strength,
and spreads membranous wings. It takes to the air, at first clumsily, then
with increased assurance, and disappears into the gloom. One eerie
cry drifts back to where you stand." CR CR>
<TELL
"Something rises out of the mud, slowly straightening.
The hacker, mud-covered and weak, staggers
to his feet. \"Can I have my key back?\" he asks." CR>
<FINISH>)>)
(<VERB? DROP>
<COND (<IN? ,FLIER ,HERE>
<MOVE ,SMOOTH-STONE ,HERE>
<TELL
"The shape becomes agitated, screeching and cawing as it approaches the
stone." CR>)>)
(<AND <VERB? KICK MOVE RUB>
<NOT <HELD? ,PRSO>>
<IN? ,FLIER ,HERE>>
<TELL
,YOU-CANT "get close enough." CR>)
(<P? RUB SMOOTH-STONE>
<TELL
"The stone is smooth and ">
<COND (<NOT <ZERO? ,END-CNT>> <TELL "warm">)
(ELSE <TELL "cool">)>
<TELL "." CR>)
(<P? ATTACK * SMOOTH-STONE>
<COND (<PRSO? ,FLIER-SHAPE>
<MOVE ,SMOOTH-STONE ,HERE>
<TELL
"The stone crashes against the wall of the dome. The shape
screams, a hissing fit of anger and frustration." CR>)
(<PRSO? ,FLIER>
<TELL
"The stone hits the dark beast, and appears to go completely through
it as though the creature was made of air. ">
<COND (<HERE? ,INSIDE-DOME>
<MOVE ,SMOOTH-STONE ,HERE>
<MOVE ,FLIER ,BROWN-ROOF>
<QUEUE I-FLIER 3> ;"time to get outside"
<TELL
"The stone tumbles onto the floor. The creature, hissing vilely,
retreats." CR>)
(<HERE? ,BROWN-ROOF>
<OBJ-OFF-ROOF ,SMOOTH-STONE>)>)>)
(<VERB? OPEN>
<TELL-YUKS>)>>
<ROUTINE OBJ-OFF-ROOF (OBJ)
<MOVE .OBJ ,COURTYARD>
<TELL
CTHE .OBJ " disappears over the south edge of the building">
<COND (<IN? ,FLIER ,HERE>
<TELL ", and the creature ">
<COND (<EQUAL? .OBJ ,SMOOTH-STONE>
<SCORE-OBJECT ,FLIER>
<MOVE ,FLIER ,GLOBAL-OBJECTS>
<TELL
"follows it, screaming frustration into the storm." CR>)
(ELSE
<TELL
"watches it fall with cunning attention." CR>)>)
(ELSE <TELL "." CR>)>>
<OBJECT STONE-SYMBOL
(IN SMOOTH-STONE)
(DESC "carved symbol")
(SYNONYM SYMBOL)
(ADJECTIVE STONE SCRATCH CARVED STRANGE INCOMPREHENSIBLE)
(FLAGS NDESCBIT)
(SIZE 0)
(GENERIC GENERIC-SYMBOL-F)
(ACTION STONE-SYMBOL-F)>
<ROUTINE STONE-SYMBOL-F ()
<COND (<VERB? EXAMINE READ>
<TELL
,SYMBOL-APPEARS "carved into the " 'SMOOTH-STONE ", perhaps with a claw. ">
<TELL-SYMBOL ,SMOOTH-STONE>
<CRLF>)
(<VERB? RUB>
<TELL
"The symbol is rough." CR>)>>
<GLOBAL YUGGOTH-COUNT 0>
<ROUTINE I-LURKER-APPEARS ()
<CRLF>
<COND (<EQUAL? <SETG YUGGOTH-COUNT <+ ,YUGGOTH-COUNT 1>> 1>
<MOVE ,LURKER ,HERE>
<TELL
"Suddenly, the dimness becomes darkness, and the crowd around you explodes
with excitement. You are jostled and shoved from all sides. A low keening
begins, building into a deafening, almost mechanical chant. The darkness
before you compacts and deepens." CR>)
(<EQUAL? ,YUGGOTH-COUNT 2>
<TELL
"The darkness before you, now visible, is a creature. It towers over the
now-silent crowd. The thing jerks this way and that, spraying a foul
ichor. Its palps twitch expectantly, then pound impatiently against the
rock. You can feel the " 'SMOOTH-STONE " vibrating in your hand." CR>)
(<EQUAL? ,YUGGOTH-COUNT 3>
<TELL
"The thing now turns, sensing the presence of the stone. It quests almost
blindly for it, then those surrounding you thrust you forward. The thing
stoops, its mandibles grasping you. You are lifted towards its gaping
maw. The stench and the sounds issuing from it are overwhelming, and
you fall unconscious." CR CR>
<DEQUEUE I-LURKER-APPEARS>
<COND (<IN? ,CHAIR ,TERMINAL-ROOM>
<MOVE ,CHAIR ,HERE>
<MOVE ,PLAYER ,CHAIR>)>
<MOVE ,ODD-PAPER ,GLOBAL-OBJECTS>
<GOTO ,TERMINAL-ROOM>
<ROB ,FROB ,PLAYER>
<RTRUE>)>>
<OBJECT LURKER
(DESC "thing")
(SYNONYM CREATURE THING DARKNESS DARK)
(ADJECTIVE VISIBLE)
(FLAGS NDESCBIT PERSON)
(GENERIC GENERIC-CREATURE-F)
(ACTION LURKER-F)>
<ROUTINE GENERIC-CREATURE-F ()
,LURKER>
<ROUTINE LURKER-F ()
<COND (<WINNER? ,LURKER>
<TELL
,NO-RESPONSE " You are not even sure that you produced any sound
when you spoke." CR>
<END-QUOTE>)
(<VERB? EXAMINE>
<COND (<G? ,YUGGOTH-COUNT 1>
<TELL
"It is large, smooth and yet scaly. It has too many limbs,
and they are not in the right places. To look at it gives you a
headache." CR>)
(ELSE
<TELL
"You see a visible darkness, in a shape not easily grasped." CR>)>)
(<VERB? SMELL>
<TELL
"The thing gives off a charnel stench." CR>)>>