hollywoodhijinx/verbs.zil

3056 lines
75 KiB
Plaintext

"VERBS for ANTHILL (C)1986 Infocom Inc. All Rights Reserved."
;"subtitle describers: Mondo-tweked by Lebs for SEM from Leather"
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (VERB-IS-LOOK <>)
"AUX" (FIRST-VISIT <>))
<COND (<AND <NOT ,LIT>
<NOT <EQUAL? ,HERE ,ON-POOL-2>>>
<NOW-BLACK>
<CRLF>
<RFALSE>)>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<FSET ,HERE ,TOUCHBIT>
<SET FIRST-VISIT T>)>
<TELL D ,HERE>
<COND (<FSET? <LOC ,PLAYER> ,VEHBIT>
<TELL ", on" T <LOC ,PLAYER>>)>
<CRLF>
<COND (<OR .VERB-IS-LOOK
<EQUAL? ,VERBOSITY 2>
<AND .FIRST-VISIT
<EQUAL? ,VERBOSITY 1>>>
;<TELL " 1 "> ;"when you enter room or do a look"
<COND (<NOT <APPLY <GETP ,HERE ,P?ACTION> ,M-LOOK>>
<TELL <GETP ,HERE ,P?LDESC>>)>
<CRLF>)>
<RTRUE>>
;"Print FDESCs, then DESCFCNs and LDESCs, then everything else. DESCFCNs
must handle M-OBJDESC? by RTRUEing (but not printing) if the DESCFCN would
like to handle printing the object's description. RFALSE otherwise. DESCFCNs
are responsible for doing the beginning-of-paragraph indentation."
<ROUTINE DESCRIBE-OBJECTS ("AUX" O STR (1ST? T) (AV <LOC ,WINNER>))
<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>>>
<TELL CR ;" 2 " .STR>
<COND (<FSET? .O ,CONTBIT>
<DESCRIBE-CONTENTS .O T <+ ,D-ALL? ,D-PARA?>>)>
<CRLF>)>
<SET O <NEXT? .O>>>
<SET O <FIRST? ,HERE>>
<SET 1ST? T>
<REPEAT () ;"DESCFCNS"
<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 STR <APPLY .STR ,M-OBJDESC>>>
<COND (<AND <FSET? .O ,CONTBIT>
<N==? .STR ,M-FATAL>>
<DESCRIBE-CONTENTS .O T <+ ,D-ALL? ,D-PARA?>>)>
<CRLF>)
(<SET STR <GETP .O ,P?LDESC>>
<TELL ;" 3 " .STR> ;"don't forget to change this"
<COND (<FSET? .O ,CONTBIT>
<DESCRIBE-CONTENTS .O T <+ ,D-ALL? ,D-PARA?>>)>
<CRLF>)>
<SET O <NEXT? .O>>>
<DESCRIBE-CONTENTS ,HERE <> 0>
<COND (<AND .AV <NOT <EQUAL? ,HERE .AV>>>
<DESCRIBE-CONTENTS .AV <> 0>)>>
<CONSTANT D-ALL? 1> ;"print everything?"
<CONSTANT D-PARA? 2> ;"started paragraph?"
"<DESCRIBE-CONTENTS ,OBJECT-WHOSE-CONTENTS-YOU-WANT-DESCRIBED
level: -1 means only top level
0 means top-level (include crlf)
1 for all other levels
or string to print
all?: t if not being called from room-desc >"
<ROUTINE DESCRIBE-CONTENTS (OBJ "OPTIONAL" (LEVEL -1) (ALL? ,D-ALL?)
"AUX" (F <>) N (1ST? T) (IT? <>)
(START? <>) (TWO? <>) (PARA? <>))
<COND (<EQUAL? .LEVEL 2> ;"what is 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 ,ACTORBIT>
<AND <FSET? .OBJ ,CONTBIT>
<OR <FSET? .OBJ ,OPENBIT>
<FSET? .OBJ ,TRANSBIT>>
<FSET? .OBJ ,SEARCHBIT>
.N>>
<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?>
<COND (<NOT <EQUAL? .OBJ
,PLAYER>>
;<TELL " 4 ">
<CRLF>
;"4--You can see a foo here or Sitting on the foo is a... ")>
<SET PARA? T>)
(<EQUAL? .LEVEL T>
<TELL " ">)>
<COND (<EQUAL? .OBJ ,HERE>
<TELL ,YOU-SEE>)
(<EQUAL? .OBJ ,PLAYER>
<TELL "You have">)
(<FSET? .OBJ ,SURFACEBIT>
<TELL "Sitting on" T .OBJ " is">)
(T
<TELL "It looks as if" T .OBJ>
<COND (<FSET? .OBJ ,ACTORBIT>
<TELL " has">)
(T
<TELL " contains">)>)>)>)
(<NOT <EQUAL? .LEVEL -1>>
<TELL .LEVEL>)>)
(T
<COND (.N
<TELL ",">)
(T
<TELL " and">)>)>
<TELL A .F>
<COND (<FSET? .F ,WORNBIT>
<COND ;(<EQUAL? .F ,LIP-BALM>
<TELL " (smeared all over your lips)">)
;(<EQUAL? .F ,COTTON-BALLS>
<TELL " (stuffed in " 'EARS ")">)
;(<EQUAL? .F ,CLOTHES-PIN>
<TELL " (pinned to " 'NOSE ")">)
(T
<TELL " (being worn)">)>)
(<FSET? .F ,ONBIT>
<TELL " (providing light)">)
;(<EQUAL? .F ,COMIC-BOOK>
<TELL " (stuck in your back pocket)">)>
<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?>
;<SET 1ST? <>>
<TELL " nothing">
<RFALSE>)>
<COND (<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>>
<COND (<EQUAL? .OBJ ,HERE>
<TELL " here">)>
<TELL ".">)>
<RETURN>)>>
<SET F <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .F>
<RETURN>)
(<AND <FSET? .F ,CONTBIT>
<DESCRIBABLE? .F T>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .F>>>
<COND (<DESCRIBE-CONTENTS .F T
<COND (.PARA?
<+ ,D-ALL? ,D-PARA?>)
(T
,D-ALL?)>>
<SET 1ST? <>>
<SET PARA? T>)>)>
<SET F <NEXT? .F>>>
<COND (<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>
<EQUAL? .OBJ ,HERE <LOC ,WINNER>>>
<CRLF>)>
<NOT .1ST?>)>>
<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>)
;(<AND <EQUAL? .OBJ ,RAFT ,BARGE>
<EQUAL? ,HERE ,CANAL>
<NOT <ULTIMATELY-IN? .OBJ>>
<NOT <IN? .OBJ ,BARGE>>
<NOT <EQUAL? ,RAFT-LOC-NUM ,BARGE-LOC-NUM>>>
<RFALSE>)
(T
<RTRUE>)>>
<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?>>
<RFALSE>)
(<GETP .OBJ ,P?LDESC>
<RFALSE>)
(T
<RTRUE>)>>
;<ROUTINE DESCRIBE-VEHICLE () ;"for LOOK AT/IN vehicle when you're in it"
<TELL "Other than yourself, you can see">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL " on" TR ,PRSO>)>
<RTRUE>>
<ROUTINE DESCRIBE-NOTHING ()
<COND (<DESCRIBE-CONTENTS ,PRSO 2>
<COND (<NOT <IN? ,PLAYER ,PRSO>>
<CRLF>)>
<RTRUE>)
(T ;"nothing"
<RFALSE>)>>
<ROUTINE V-ALARM ()
<COND (<EQUAL? ,PRSO ,ME ,ROOMS>
<TELL "But you're ">)
(<FSET? ,PRSO ,ACTORBIT>
<BUT-THE ,PRSO>
<TELL "is ">)
(T
<WHAT-A-CONCEPT>
<RTRUE>)>
<TELL "already wide awake!" CR>>
<ROUTINE ALREADY-OPEN ()
<ITS-ALREADY "open">>
<ROUTINE ALREADY-CLOSED ()
<ITS-ALREADY "closed">>
; <ROUTINE V-ANSWER ()
<TELL "Nobody seems to be awaiting your answer." CR>
<PCLEAR>
<RFATAL>>
; <ROUTINE ANYMORE ()
<YOU-CANT-SEE>
<TELL "that anymore." CR>>
; <ROUTINE V-ASK-ABOUT ()
<COND (<EQUAL? ,PRSO ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
; (<FSET? ,PRSO ,ACTORBIT>
<TELL
"After a moment's thought," T ,PRSO " denies any knowledge of" TR ,PRSI>
<COND (<EQUAL? ,PRSO ,PRSI>
<TELL " (Rather disingenuous, eh?)">)>
<CRLF>)
(T
<V-TELL>
<RTRUE>)>>
<ROUTINE V-ASK-ABOUT ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<SETG WINNER ,PRSO>
<PERFORM ,V?TELL ,PRSO>
<SETG WINNER ,PLAYER>
<RTRUE>)
(T
<V-ASK-FOR>)>>
<ROUTINE V-ASK-FOR ()
<COND (<EQUAL? ,PRSO ,ME ,ROOMS>
<PERFORM ,V?TELL ,ME>)
(T
<NOT-LIKELY ,PRSO "would respond">)>
<PCLEAR>
<RFATAL>>
; <ROUTINE V-BACK ()
<V-WALK-AROUND>>
<ROUTINE V-BITE ()
<HACK-HACK "Biting">>
<ROUTINE V-BLOW-INTO ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?USE ,PRSO>
<RTRUE>)
(T
<HACK-HACK "Blowing">)>>
; <ROUTINE BLT (WHO WHERE "AUX" N X (CNT 0))
<SET X <FIRST? .WHO>>
<REPEAT ()
<COND (<NOT .X> <RETURN .CNT>)>
<SET N <NEXT? .X>>
<MOVE .X .WHERE>
<SET CNT <+ .CNT 1>>
<SET X .N>>>
; <ROUTINE PRE-BOARD ("AUX" AV)
<SET AV <LOC ,PLAYER>>
<COND (<FSET? ,PRSO ,VEHBIT>
<COND (<FSET? .AV ,VEHBIT>
<TELL "You're already in ">
;<ARTICLE ,PRSO T>
<TELL D .AV "!" CR>)
(T
<RFALSE>)>)
(T
<TELL ,YOU-CANT "get into ">
<ARTICLE ,PRSO T>
<TELL D ,PRSO "!" CR>)>
<RFATAL>>
; <ROUTINE V-BOARD ("AUX" AV)
#DECL ((AV) OBJECT)
<TELL "You are now in" TR ,PRSO>
<MOVE ,WINNER ,PRSO>
<APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
<RTRUE>>
<ROUTINE PRE-BOARD ()
<COND (<PRSO? <LOC ,PLAYER>>
<TELL "Look around you." CR>)
(<ULTIMATELY-IN? ,PRSO>
<TELL "You're holding it!" CR>)>>
<ROUTINE V-BOARD ()
<COND (<FSET? ,PRSO ,VEHBIT>
<MOVE ,PLAYER ,PRSO>
<TELL "You are now on" T ,PRSO "." CR>
;<APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
;<RTRUE>)
(T
<TELL "You can't get into" T ,PRSO "!" CR>)>>
; <ROUTINE V-BOW ()
<HACK-HACK "Paying respect to">>
<GLOBAL YUKS
<LTABLE 0
;"Get real."
"You can't be serious."
"Don't be silly.">>
<ROUTINE V-BURN ()
<COND (<FSET? ,PRSI ,FLAMEBIT>
<COND (<FSET? ,PRSO ,BURNBIT>
<REMOVE ,PRSO>
<TELL
"The " D ,PRSO " catches fire and is reduced to ashes." CR>)
(T
<TELL ,PYRO>)>)
(T
<TELL "With" A ,PRSI "? " <PICK-ONE ,YUKS> CR>)>>
<GLOBAL PYRO "This isn't a scene from Uncle Buddy's movie \"Pyromaniac.\"~">
<ROUTINE V-BUY ()
<COND (<NOT <VISIBLE? ,PRSO>>
<CANT-SEE-ANY ,PRSO>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,TAKEBIT>>
<NOT <FSET? ,PRSO ,TRYTAKEBIT>>>
<TELL ,YOU-CANT "buy that!" CR>)
(<ULTIMATELY-IN? ,PRSO>
<TELL "You already have one." CR>)
(,PRSI
<NOT-LIKELY ,PRSI "would buy that">)
(T
<TELL "You don't have any money." CR>)>>
<ROUTINE CANT-CLOSE-THAT ()
<TELL ,YOU-CANT "close that!" CR>>
; <ROUTINE CANT-ENTER (LOC "OPTIONAL" (LEAVE <>))
<TELL ,YOU-CANT>
<COND (.LEAVE
<TELL "leave">)
(T
<TELL "enter">)>
<TELL T .LOC " from here." CR>>
<ROUTINE CANT-GO ()
<TELL ,YOU-CANT "go that way." CR>>
<ROUTINE CANT-LOCK ("OPTIONAL" (UN? <>))
<TELL ,YOU-CANT> ;<TELL ,YOU-CANT " ">
<COND (.UN?
<TELL "un">)>
<TELL "lock" T ,PRSO "!" CR>>
<ROUTINE V-CHASTISE ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<PRSO? ,INTDIR>
<TELL
"You'll have to go in that direction to see what's there." CR>)
(T
<TELL
"Use prepositions to indicate precisely what you want to do. For example, LOOK AT the object, LOOK INSIDE it, LOOK UNDER it, etc." CR>)>>
<ROUTINE V-CLEAN ()
<NOT-A "janitor">>
; <ROUTINE V-CLEAN ()
<COND (<EQUAL? ,PRSO ,DUST ,ART>
<TELL "You'd be here all day!" CR>)
(<AND ,PRSI
<NOT <EQUAL? ,PRSI ,BROOM ,BLANKET>>>
<HARD-TIME-WITH ,PRSI>)
(T
<NOT-A "janitor">)>>
"climb"
<ROUTINE V-CLIMB ()
<PERFORM ,V?CLIMB-UP ,PRSO>
<RTRUE>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<DO-WALK ,P?DOWN>)
(T
<WHAT-A-CONCEPT>)>>
; <ROUTINE V-CLIMB-FOO ()
<COND (<OR <NOT ,PRSO>
<EQUAL? ,PRSO ,ROOMS>>
<DO-WALK ,P?UP>)
(T
<WHAT-A-CONCEPT>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?HOLD>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(T
<TELL ,YOU-CANT "climb onto that." CR>)>>
<ROUTINE V-CLIMB-OVER ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<V-WALK-AROUND>)
(T
<TELL ,YOU-CANT "climb over that." CR>)>>
<ROUTINE V-CLIMB-UP ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<DO-WALK ,P?UP>)
(T
<WHAT-A-CONCEPT>)>>
<ROUTINE V-CLOSE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<NOT-A "surgeon">)
(<FSET? ,PRSO ,SURFACEBIT>
<CANT-CLOSE-THAT>)
(<AND <NOT <FSET? ,PRSO ,CONTBIT>>
<NOT <FSET? ,PRSO ,DOORBIT>>>
<PERFORM ,V?OPEN ,PRSO>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,SURFACEBIT>>
<NOT <EQUAL? <GETP ,PRSO ,P?CAPACITY> 0>>>
<COND (<FSET? ,PRSO ,OPENBIT>
<NOW-CLOSED-OR-OPEN ,PRSO>
<SAY-IF-NOT-LIT>)
(T
<ALREADY-CLOSED>)>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<SAY-THE ,PRSO>
<TELL " " <PICK-ONE ,DOOR-NOISES> " as it closes." CR>)
(T
<ALREADY-CLOSED>)>)
(T
<CANT-CLOSE-THAT>)>>
; "Count # objects being carried by THING"
;<ROUTINE CCOUNT (THING "AUX" OBJ (CNT 0))
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (.OBJ
<COND (<NOT <FSET? .OBJ ,WORNBIT>>
<SET CNT <+ .CNT 1>>)>
<SET OBJ <NEXT? .OBJ>>)
(T
<RETURN>)>>
<RETURN .CNT>>
<ROUTINE V-COMPARE ()
<TELL "You compare the two items and find nothing interesting." CR>>
<ROUTINE V-COUNT ()
<WASTE-OF-TIME>>
<ROUTINE V-COVER ()
<PERFORM ,V?PUT-ON ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-CROSS ()
<TELL ,YOU-CANT "cross that!" CR>>
; <ROUTINE V-CURSE ()
<TELL "Such language!" CR>>
<ROUTINE V-CUT ()
<NOT-LIKELY ,PRSI "could cut anything">>
<GLOBAL DEBUG <>>
<ROUTINE V-$DEBUG ()
<COND (,DEBUG
<SETG DEBUG <>>
<TELL "Debug off." CR>)
(T
<SETG DEBUG T>
<TELL "Debug on." CR>)>>
; <ROUTINE V-DEFLATE ()
<WHAT-A-CONCEPT>>
;<GLOBAL FIRST-WARNING? T>
<ROUTINE V-DIAGNOSE ()
<TELL "You're in good health">
<COND (<PROB 50>
<TELL "... at the moment">)>
<TELL "." CR>>
<ROUTINE V-DIG-WITH ()
<PERFORM ,V?DIG ,GROUND ,PRSO>
<RTRUE>>
<ROUTINE V-DIG ()
<COND (<NOT ,PRSI>
<COND (<IN? ,SHOVEL ,PLAYER>
<SETG PRSI ,SHOVEL>
<TELL "[with the shovel]" CR>)
(T
<SETG PRSI ,HANDS>
<TELL "[with your hands]" CR>)>)>
<COND (<PRSO? ,GROUND ,SAND>
<COND (<NOT <PRSI? ,SHOVEL>>
<TELL
"I suppose you also excavate tunnels with a teaspoon." CR>)
(<OR <PRSO? ,SAND>
<EQUAL? ,HERE ,BEACH>>
<TELL "You find nothing, so you fill in the hole." CR>)
(<EQUAL? <GETP ,HERE ,P?CAPACITY> 2> ;"walkway rooms"
<TELL
"You attempt to dig in the stone path, but it proves too tough for
your efforts." CR>)
(<EQUAL? <GETP ,HERE ,P?CAPACITY> 0>
<TELL "The ground is too hard here." CR>)
(<OR <EQUAL? <GETP ,HERE ,P?CAPACITY> 10>
<EQUAL? <GETP ,HERE ,P?CAPACITY> 20>>
<TELL "You can't dig a hole here!" CR>)
(T
<COND (<EQUAL? ,HERE ,HEART-OF-MAZE>
<COND (<IN? ,HEART-OF-MAZE-HOLE ,HEART-OF-MAZE>
<TELL "You already dug a hole here." CR>)
(T
<TELL
"You dig a hole and uncover" AR ,RUBBER-STAMP>
<MOVE ,HEART-OF-MAZE-HOLE
,HEART-OF-MAZE>)>)
(T
<COND (<AND <EQUAL? <GETP ,HERE ,P?CAPACITY> 1>
<G? <GETB ,HM-TABLE ,HM-ROOM> 15>>
<TELL "You've already dug a hole here." CR>)
(<EQUAL? <GETP ,HERE ,P?CAPACITY> 1>
<MOVE ,MAZE-HOLE ,HERE>
<PUTB ,HM-TABLE ,HM-ROOM <ORB <GETB ,HM-TABLE ,HM-ROOM> ,X-H>>
<SETG HM-BITS <GETB ,HM-TABLE ,HM-ROOM>>
<TELL "You dig a good sized hole, but find nothing." CR>)>)>)>)
(T
<WASTE-OF-TIME>)>>
<ROUTINE V-DISEMBARK ()
<COND (<NOT <EQUAL? <LOC ,PLAYER> ,PRSO>>
<TELL "Look around you." CR>
<RFATAL>)
(T
<MOVE ,WINNER ,HERE>
<TELL "You are no longer on" T ,PRSO "." CR>
;<COND (<OR <EQUAL? <LOC ,PLAYER> ,LEFT-END>
<EQUAL? <LOC ,PLAYER> ,RIGHT-END>>
<SETG ON-PLANK <>>
<TELL "SETG ON-PLANK <>">)>)>>
<ROUTINE V-DRINK ()
<TELL ,YOU-CANT "drink that!" CR>>
<ROUTINE V-DRINK-FROM ()
<WHAT-A-CONCEPT>>
"drop"
; <ROUTINE PRE-DROP ()
<COND (<EQUAL? ,PRSO <LOC ,WINNER>>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)>>
<ROUTINE SPECIAL-DROP ()
<COND (<EQUAL? ,HERE ,ROOF-1 ,ROOF-2>
<COND (<OR <AND <PRSO? ,FINCH>
<NOT <FSET? ,FINCH ,BROKEN-BIT>>>
<AND <ULTIMATELY-IN? ,FINCH ,PRSO>
<NOT <FSET? ,FINCH ,BROKEN-BIT>>>>
<BREAK-FINCH T>)>
<COND (<AND
<PRSO? ,RED-CANDLE ,WHITE-CANDLE ,BLUE-CANDLE>
<FSET? ,PRSO ,FLAMEBIT>>
<BLOW-OUT-CANDLE ,PRSO T>)>
<MOVE ,PRSO ,PATIO>
<TELL "The " D ,PRSO " slides off the roof." CR>)
(<EQUAL? ,HERE ,ON-POOL-1 ,ON-POOL-2 ,INLET ,IN-POOL-1
,IN-POOL-2>
<PERFORM ,V?PUT ,PRSO ,WATER>
<RTRUE>)
(<OR <EQUAL? ,HERE ,CHIMNEY-2>
<EQUAL? ,HERE ,CHIMNEY-1>>
<PERFORM ,V?PUT ,PRSO ,CHIMNEY>
<RTRUE>)>>
<ROUTINE V-DROP ()
<COND (<SPECIAL-DROP>
<RTRUE>)
(<IDROP>
<TELL "Dropped." CR>)>>
<ROUTINE IDROP ()
<COND (<DONT-HAVE? ,PRSO>
T)
(<AND <NOT <IN? ,PRSO ,WINNER>>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL ,YOU-CANT "do that while" T ,PRSO>
<IS-CLOSED>
<CRLF>)
(<FSET? ,PRSO ,WORNBIT>
<TELL "You'll have to take off" T ,PRSO " first." CR>)
(T
;<MOVE ,PRSO <LOC ,WINNER>>
<MOVE ,PRSO ,HERE>
;"stuff dropped when on plank to room not plank"
<RTRUE>)>
<RFALSE>>
<ROUTINE V-EAT ()
<NOT-LIKELY ,PRSO "would agree with you">>
<ROUTINE V-EMPTY ("AUX" OBJ NXT)
<COND (<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<SET OBJ <FIRST? ,PRSO>>
<COND (.OBJ
<REPEAT ()
<COND (.OBJ
<SET NXT <NEXT? .OBJ>>
<COND (<NOT <FSET? .OBJ
,NARTICLEBIT>>
<TELL "The ">)>
<TELL D .OBJ ": ">
<PERFORM ,V?TAKE .OBJ ,PRSO>
<SET OBJ .NXT>)
(T
<RETURN>)>>)
(T
<BUT-THE ,PRSO>
<TELL "is already empty!" CR>)>)
(T
<ITS-CLOSED ,PRSO>)>)
(T
<TELL ,YOU-CANT "empty that!" CR>)>
<RTRUE>>
<ROUTINE V-ENTER ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<DO-WALK ,P?IN>)
(<FSET? ,PRSO ,DOORBIT>
<DO-WALK <OTHER-SIDE ,PRSO>>)
(<IN? ,PRSO ,WINNER>
<TELL "That would involve quite a contortion!" CR>)
(<FSET? ,PRSO ,WEARBIT>
<PRESUMABLY-YOU-WANT-TO "wear" ,PRSO>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(T
<TELL
"You hit your head against" T ,PRSO " as you attempt this feat." CR>)>>
;<ROUTINE PRE-EXAMINE ()
<COND (<NOT ,LIT>
<TOO-DARK>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE PRE-EXAMINE ()
<COND (<NOT ,LIT>
<TOO-DARK>
<RTRUE>)>
;<COND (<EQUAL? ,ROPED ,PRSO>
<TELL "The rope is tied to" T ,PRSO "." CR>
<RTRUE>)>>
<GLOBAL YAWNS <LTABLE 0 "unusual" "interesting" "extraordinary" "special">>
<ROUTINE V-EXAMINE ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "It looks as if" T ,PRSO " is ">
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL "open">)
(T
<TELL "closed">)>
<TELL "." CR>
<RTRUE>)
(<FSET? ,PRSO ,SURFACEBIT>
<V-LOOK-ON>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<OR <FSET? ,PRSO ,OPENBIT>
<FSET? ,PRSO ,TRANSBIT>>
<V-LOOK-INSIDE>)
(T
<ITS-CLOSED ,PRSO>)>)
(<FSET? ,PRSO ,READBIT>
<PERFORM ,V?READ ,PRSO>)
(T
<TELL
"You see nothing " <PICK-ONE ,YAWNS> " about" TR ,PRSO>)>>
<ROUTINE V-EXIT ()
<DO-WALK ,P?OUT>>
; <ROUTINE V-EXIT ()
<COND (<IN? ,PRSO ,POCKET>
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(T
<DO-WALK ,P?OUT>)>>
; <ROUTINE V-EXIT ()
<COND (<AND ,PRSO <FSET? ,PRSO ,VEHBIT>>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(T
<DO-WALK ,P?OUT>)>>
<ROUTINE FAILED ()
<TELL "Failed." CR>>
;<ROUTINE PRE-FEED ()
<COND (<PRE-GIVE T>
<RTRUE>)
(T
<RFALSE>)>>
;<ROUTINE V-FEED ()
<V-GIVE T>>
;<ROUTINE V-SFEED ()
<PERFORM ,V?FEED ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-FILL ()
<COND (<NOT ,PRSI>
<COND (<GLOBAL-IN? ,WATER ,HERE>
<PERFORM ,V?FILL ,PRSO ,WATER>
<RTRUE>)
(<FSET? ,PRSO ,CONTBIT>
<TELL "There's nothing to fill it with." CR>)
(T
<V-STAND-UNDER>)>)
(<EQUAL? ,PRSI ,PORTABLE-WATER ,WATER>
<COND (<NOT <GLOBAL-IN? ,WATER ,HERE>>
<CANT-SEE-ANY ,WATER>)
(<NOT <EQUAL? ,PRSO ,BUCKET>>
<V-STAND-UNDER>)
(<AND <FIRST? ,BUCKET>
<NOT <EQUAL? <FIRST? ,BUCKET> ,PORTABLE-WATER>>>
<TELL
"That would get the stuff in the bucket all wet." CR>)
(T
<MOVE ,PORTABLE-WATER ,BUCKET>
<QUEUE I-DRIP 2>
<SETG AMOUNT-OF-WATER 26>
<TELL
"You fill" T ,BUCKET ", which naturally leaks slowly." CR>)>)
(<EQUAL? ,PRSI ,PORTABLE-WATER>
<PERFORM ,V?POUR ,PORTABLE-WATER ,PRSO>
<THIS-IS-IT ,PRSO>
<RTRUE>)
(T
<V-STAND-UNDER>)>>
<ROUTINE V-FIND ("AUX" L)
<SET L <LOC ,PRSO>>
<COND (<EQUAL? ,PRSO ,ME ,HANDS>
<TELL "You're right here">)
(<IN? ,PRSO ,PLAYER>
<TELL "You're holding it">)
(<OR <IN? ,PRSO ,HERE>
<EQUAL? ,PRSO ,PSEUDO-OBJECT>>
<BUT-THE ,PRSO>
<TELL "is right in front of you">)
(<IN? ,PRSO ,LOCAL-GLOBALS>
<HOW?>
<RTRUE>)
(<AND <FSET? .L ,ACTORBIT>
<VISIBLE? .L>>
<TELL "It looks as if" T .L " has it">)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<TELL "It's ">
<COND (<FSET? .L ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T .L>)
(T
<TELL "You'll have to do that yourself">)>
<TELL "." CR>>
<ROUTINE FIND-IN (WHERE WHAT "AUX" W)
<SET W <FIRST? .WHERE>>
<COND (<NOT .W>
<RFALSE>)>
<REPEAT ()
<COND (<FSET? .W .WHAT>
<RETURN .W>)
(<NOT <SET W <NEXT? .W>>>
<RETURN <>>)>>>
<ROUTINE FINISH ("OPTIONAL" (REPEATING <>) "AUX" WORD)
<CRLF>
<COND (<NOT .REPEATING>
<V-SCORE>
<CRLF>)>
<TELL
"Do you want to restart the story, restore a saved position, or quit?~
~
(Please type RESTART, RESTORE or QUIT.) >">
<READ ,P-INBUF ,P-LEXV>
<SET WORD <GET ,P-LEXV 1>>
<COND (<EQUAL? .WORD ,W?RESTAR>
<RESTART>
<FAILED>
<FINISH T>)
(<EQUAL? .WORD ,W?RESTOR>
<COND (<RESTORE>
<SAY-OKAY>)
(T
<FAILED>
<FINISH T>)>)
(<EQUAL? .WORD ,W?QUIT ,W?Q>
<QUIT>)
(T
<FINISH T>)>>
<ROUTINE V-FLY ()
;<TELL ,YOU-CANT "do that!" CR>
<TELL "That's not in the script!" CR>>
<ROUTINE V-FOCUS ()
<TELL "It's your thinking that's out of focus." CR>>
<ROUTINE V-FOLLOW ("AUX" WHERE)
<SET WHERE <LOC ,PRSO>>
<BUT-THE ,PRSO>
<TELL "is ">
<COND (<OR <EQUAL? .WHERE ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>
<TELL "right here in front of you">)
(<EQUAL? .WHERE ,PLAYER>
<TELL "in" D ,HANDS "s">)
(<IN? .WHERE ,PLAYER>
<TELL "in" T .WHERE>)
(T
<TELL "nowhere to be seen">)>
<TELL "!" CR>>
"give"
<ROUTINE PRE-GIVE ()
<COND (<OR <NOT ,PRSO>
<NOT ,PRSI>>
<REFERRING>
<RTRUE>)
; (<AND <FSET? ,PRSO ,ACTORBIT>
<ULTIMATELY-IN? ,PRSI>>
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>)
; (<AND <FSET? ,PRSI ,ACTORBIT>
<DONT-HAVE? ,PRSO>>
<RTRUE>)
(<OR <IN? ,PRSO ,LOCAL-GLOBALS>
<IN? ,PRSO ,PSEUDO-OBJECT>>
<NOT-HOLDING>
<RTRUE>)
(<DONT-HAVE? ,PRSO>
<RTRUE>)
(<NOT <FSET? ,PRSI ,ACTORBIT>>
<TELL ,YOU-CANT "give anything to that!" CR>
<RTRUE>)
(<FSET? ,PRSO ,WORNBIT>
<TAKE-OFF-PRSO-FIRST>)
(T
<RFALSE>)>>
<ROUTINE V-GIVE ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<TELL "Politely," T ,PRSI " refuses your offer." CR>)>>
<ROUTINE V-SGIVE ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
; <ROUTINE GO-NEXT (TBL "AUX" VAL)
#DECL ((TBL) TABLE (VAL) ANY)
<COND (<SET VAL <LKP ,HERE .TBL>>
<GOTO .VAL>)>>
;<ROUTINE V-GOTO (RM "OPTIONAL" (V? T) "AUX" OLIT OHERE)
<SET OHERE ,HERE>
<SET OLIT ,LIT>
<MOVE ,WINNER .RM>
<SETG HERE .RM>
<SETG LIT <LIT? ,HERE>>
;<ROPE-EXITS>
;<COND (<ULTIMATELY-IN? ,ROPE>
<MOVE ,ROPE ,HERE>
<COND (<AND <NOT <ULTIMATELY-IN? ,ROPED>>
<FSET? ,ROPED ,TAKEBIT>>
<TELL
"As you exit you drag" T ,ROPED " along with you." CR CR>
<MOVE ,ROPED ,HERE>)
(<ULTIMATELY-IN? ,ROPED>
<SNAKES>)
(<NOT <FSET? ,ROPED ,TAKEBIT>>
<TUG>)>)>
;<COND (<AND <NOT .OLIT>
<NOT ,LIT>
<NOT ,FIRST-WARNING?>
<PROB 0>> ;"change prob to 0 for now"
<TELL
"Oh, no! Something lurked out of the darkness and devoured you!" CR>
<FINISH>)>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<NOT <EQUAL? ,HERE .RM>>
<RTRUE>)
(.V?
;<V-FIRST-LOOK>)>
<RTRUE>>
<ROUTINE GOTO (RM "OPTIONAL" (V? T) "AUX" OLIT OHERE X)
<SET X <APPLY <GETP ,HERE ,P?ACTION> ,M-EXIT>>
<SET OHERE ,HERE>
<SET OLIT ,LIT>
<MOVE ,WINNER .RM>
<SETG HERE .RM>
<SETG LIT <LIT? ,HERE>>
;<ROPE-EXITS>
;<COND (<AND <NOT .OLIT>
<NOT ,LIT>
<NOT ,FIRST-WARNING?>
<PROB 0>> ;"change prob to 0 for now"
<TELL
"Oh, no! Something lurked out of the darkness and devoured you!" CR>
<FINISH>)>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<AND <DESCRIBE-ROOM>
<NOT <EQUAL? ,VERBOSITY 0>>>
<DESCRIBE-OBJECTS>)>
;<COND (<NOT <EQUAL? ,HERE .RM>>
<RTRUE>)
(.V?
;<V-FIRST-LOOK>)>
<RTRUE>>
;"was part of routine goto"
;<COND (<ULTIMATELY-IN? ,ROPE>
<MOVE ,ROPE ,HERE>
<COND (<AND <NOT <ULTIMATELY-IN? ,ROPED>>
<FSET? ,ROPED ,TAKEBIT>>
<TELL
"As you exit you drag" T ,ROPED " along with you." CR CR>
<MOVE ,ROPED ,HERE>)
(<ULTIMATELY-IN? ,ROPE>
<SNAKES>)
(<NOT <FSET? ,ROPED ,TAKEBIT>>
<TUG>)>)>
<GLOBAL HO-HUM
<LTABLE 0
"doesn't do anything"
"accomplishes nothing"
"has no effect">>
<ROUTINE HACK-HACK (STR)
<TELL .STR T ,PRSO " " <PICK-ONE ,HO-HUM> "." CR>>
<ROUTINE PRE-HANG-UP ()
<COND (<AND <NOT <ULTIMATELY-IN? ,PRSO>>
<NOT <PRSO? ,PHONE>>>
<NOT-HOLDING ,PRSO>)>>
<ROUTINE V-HANG-UP ()
<COND (<NOT ,PRSI>
<COND (<EQUAL? ,HERE ,CLOSET>
<TELL
"Next time, say which peg to hang it on." CR>)
(T
<TELL "There's no place to hang it up." CR>)>)
(T
<TELL "You can't hang something on" AR ,PRSI>)>>
<ROUTINE V-HELLO ("AUX" WHO)
<COND (,PRSO
<SET WHO ,PRSO>)
(T
<SET WHO <ANYONE-HERE?>>
<COND (.WHO
<SPOKEN-TO .WHO>
<PERFORM ,V?HELLO .WHO>
<RTRUE>)>)>
<COND (.WHO
<COND (<FSET? .WHO ,ACTORBIT>
<TELL
"It's apparent that" T .WHO " didn't expect you to say that." CR>)
(T
<NOT-LIKELY .WHO "would respond">)>)
(T
<TALK-TO-SELF>)>>
<ROUTINE V-HELP ()
<TELL
"[If you're really stuck, maps and InvisiClues (TM) hint booklets are available
using the order form that came in your HOLLYWOOD HIJINX package.]" CR>>
<ROUTINE V-HIDE ()
<TELL "There aren't any good hiding places here." CR>>
; <ROUTINE V-INFLATE ()
<TELL "How can you inflate that?" CR>>
; <ROUTINE IN-HERE? (OBJ)
<OR <IN? .OBJ ,HERE>
<GLOBAL-IN? .OBJ ,HERE>>>
;"---- part of new describers ----"
<ROUTINE V-INVENTORY ()
<COND (<NOT <DESCRIBE-CONTENTS ,WINNER <>>>
<TELL "You are empty-handed.">)>
<CRLF>>
;<ROUTINE PRINT-CONT (OBJ
"OPTIONAL" (V? <>) (LEVEL 0)
"AUX" Y (1ST? T) (AV <>) STR (PV? <>) (INV? <>) (SC <>))
<COND (<NOT <SET Y <FIRST? .OBJ>>>
<RTRUE>)>
<COND (<FSET? <LOC ,WINNER> ,VEHBIT>
<SET AV <LOC ,WINNER>>)>
<COND (<EQUAL? ,PLAYER .OBJ <LOC .OBJ>>
<SET INV? T>)
(T
<REPEAT ()
<COND (<NOT .Y>
<RETURN <NOT .1ST?>>)
(<EQUAL? .Y .AV>
<SET PV? T>)
(<EQUAL? .Y ,WINNER>)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<NOT <FSET? .Y ,TOUCHBIT>>
<SET STR <GETP .Y ,P?FDESC>>>
<COND (<NOT <FSET? .Y ,NDESCBIT>>
<TELL .STR CR>)>
<COND (<AND <SEE-INSIDE? .Y>
<NOT <GETP <LOC .Y> ,P?DESCFCN>>
<FIRST? .Y>>
<PRINT-CONT .Y .V? 0>)>)>
<SET Y <NEXT? .Y>>>)>
<SET Y <FIRST? .OBJ>>
;<COND (<AND <EQUAL? .OBJ ,HERE>
<IN? ,SATCHEL ,HERE>>
<DESCRIBE-OBJECT ,SATCHEL .V? .LEVEL>
<SET SC T>)>
<REPEAT ()
<COND (<NOT .Y>
<COND (<AND .PV? .AV <FIRST? .AV>>
<PRINT-CONT .AV .V? .LEVEL>)>
<RETURN <NOT .1ST?>>)
(<EQUAL? .Y .AV ,PLAYER> T)
;(<AND .SC <EQUAL? .Y ,SATCHEL>> T)
(<AND <NOT <FSET? .Y ,INVISIBLE>>
<OR .INV?
<FSET? .Y ,TOUCHBIT>
<NOT <GETP .Y ,P?FDESC>>>>
<COND ;(<AND <EQUAL? .Y ,STONE>
<EQUAL? ,HERE ,OUTER-LAIR>
<IN? .Y ,HERE>>
<FSET .Y ,NDESCBIT>)
(<NOT <FSET? .Y ,NDESCBIT>>
<COND (.1ST?
<COND (<FIRSTER .OBJ .LEVEL>
<COND (<L? .LEVEL 0>
<SET LEVEL 0>)>)>
<SET LEVEL <+ 1 .LEVEL>>
<SET 1ST? <>>)>
<DESCRIBE-OBJECT .Y .V? .LEVEL>)
(<AND <FIRST? .Y>
<SEE-INSIDE? .Y>>
<PRINT-CONT .Y .V? .LEVEL>)>)>
<SET Y <NEXT? .Y>>>>
;<ROUTINE V-INVENTORY ()
<COND (<FIRST? ,WINNER>
<PRINT-CONT ,WINNER>)
(T
<TELL "You are empty-handed." CR>)>>
;<ROUTINE FIRSTER (OBJ LEVEL)
<COND (<EQUAL? .OBJ ,WINNER>
<RTRUE>)
(<NOT <IN? .OBJ ,ROOMS>>
<COND (<G? .LEVEL 0>
<TELL <GET ,INDENTS .LEVEL>>)>
<COND (<FSET? .OBJ ,SURFACEBIT>
<TELL "Sitting on the " D .OBJ " is:" CR>)
(<AND <FSET? .OBJ ,ACTORBIT>
<NOT <EQUAL? .OBJ ,NUTRIMAT>>>
<TELL ,IT-LOOKS-LIKE>
<ARTICLE .OBJ T>
<TELL " is holding:" CR>)
(T
<TELL ,IT-LOOKS-LIKE>
<ARTICLE .OBJ T>
<TELL " contains:" CR>)>)>>
;"semied to allow for new describers"
;<ROUTINE V-INVENTORY ()
<TELL "You're ">
<COND (<FIRST? ,PLAYER>
<TELL "holding ">
<DESCRIBE-CONTENTS ,PLAYER>)
(T
<TELL "not holding anything">)>
<TELL "." CR>>
<ROUTINE ITS-ALREADY (STR)
<TELL "It's already " .STR "." CR>>
<ROUTINE JIGS-UP ("OPTIONAL" (REASON <>))
<COND (.REASON
<TELL .REASON CR>)>
<KILL-INTERRUPTS>
<TELL CR "Fade to black:~
~ **** You have died ****" CR>
<FINISH>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking">>
<ROUTINE V-KILL ()
<COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL ,YOU-CANT "attack" T ,PRSO "!">)
(T
<TELL "Attacking" T ,PRSO>
<COND (,PRSI
<TELL " with" T ,PRSI>)>
<TELL " isn't likely to help matters.">)>
<CRLF>>
; <ROUTINE V-KILL ()
<COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL "How can you attack" A ,PRSO "?" CR>)
(<OR <NOT ,PRSI>
<EQUAL? ,PRSI ,HANDS>>
<TELL
"Attacking" A ,PRSO " with your bare hands is suicidal." CR>)
;(<NOT <FSET? ,PRSI ,WEAPONBIT>>
<TELL "Attacking" T ,PRSO " with " A ,PRSI " is suicidal." CR>)
(T
<TELL "Agilely," T ,PRSO " dodges your blow." CR>)>>
<ROUTINE KILL-INTERRUPTS ()
<RTRUE>>
<ROUTINE V-KISS ()
<TELL "Smack!" CR>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<NO-ANSWER>)
(<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?USE ,PRSO>
<RTRUE>)
(T
<WASTE-OF-TIME>)>>
<GLOBAL OKAY "Okay, ">
; <ROUTINE V-LAMP-OFF ()
<COND (<EQUAL? ,PRSO ,LANTERN>
<COND (<NOT <FSET? ,PRSO ,ONBIT>>
<ITS-ALREADY "off">)
(T
<FCLEAR ,PRSO ,ONBIT>
; <COND (,LIT
<SETG LIT <LIT? ,HERE>>)>
<TELL ,OKAY "the" ,PRSO " is off." CR>
<SAY-IF-NOT-LIT>)>)
(T
<TELL ,YOU-CANT "turn that off." CR>)>
<RTRUE>>
;<ROUTINE V-LAMP-OFF ()
<V-LAMP-ON T>>
<ROUTINE V-LAMP-OFF ()
<COND (<AND <EQUAL? ,P-PRSA-WORD ,W?BLOW>
<EQUAL? ,PRSO ,FLASHLIGHT ,COMPUTER ,FILM-PROJECTOR
,SLIDE-PROJECTOR>>
<TELL <PICK-ONE ,YUKS> CR>)
(<OR <FSET? ,PRSO ,LIGHTBIT>
<FSET? ,PRSO ,BURNBIT>>
<COND (<FSET? ,PRSO ,ONBIT>
<FCLEAR ,PRSO ,ONBIT>
<TELL "Okay," T ,PRSO " is now off." CR>
<SAY-IF-NOT-LIT>
<RTRUE>)
(T
<TELL "It isn't on!" CR>)>)
(T
<CANT-TURN "ff">)>>
<ROUTINE V-LAMP-ON ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<ITS-ALREADY "on">)
(T
<FSET ,PRSO ,ONBIT>
<TELL "Okay," T ,PRSO " is now on." CR>
<NOW-LIT?>)>)
(<FSET? ,PRSO ,BURNBIT>
<COND (<SET-FLAME-SOURCE>
<RTRUE>)
(ELSE
<PERFORM ,V?BURN ,PRSO ,PRSI>
<RTRUE>)>)
(T
<CANT-TURN "n">)>>
<GLOBAL YOU-CANT "You can't ">
<ROUTINE CANT-TURN (STRING)
<TELL ,YOU-CANT "turn that o" .STRING "." CR>>
;<ROUTINE V-LAMP-ON ("OPTIONAL" (OFF? <>))
<TELL ,YOU-CANT "turn that ">
<COND (.OFF?
<TELL "off">)
(T
<TELL "on">)>
<TELL "." CR>>
; <ROUTINE V-LAUNCH ()
<COND (<FSET? ,PRSO ,VEHBIT>
<TELL ,YOU-CANT "launch that by saying \"launch\"!" CR>)
(T
<TELL "Huh?" CR>)>>
<ROUTINE V-LEAP ()
<COND (<NOT <EQUAL? ,PRSO ,ROOMS>>
<TELL "That'd be a cute trick." CR>)
(<EQUAL? ,HERE ,IN-POOL-1 ,IN-POOL-2 ,ON-POOL-1 ,ON-POOL-2
,INLET ,UNDERPASS-1 ,UNDERPASS-2>
<DO-WALK ,P?DOWN>)
(<GLOBAL-IN? ,WATER ,HERE>
<PERFORM ,V?SWIM ,WATER>
<RTRUE>)
(T
<WASTE-OF-TIME>)>>
; <ROUTINE V-LEAP ()
<COND (,PRSO
<DO-WALK ,P?OUT>)
(T
<V-SKIP>)>>
<ROUTINE V-LEAVE ()
<COND (<OR <EQUAL? ,PRSO ,ROOMS>
<NOT <FSET? ,PRSO ,TAKEBIT>>>
<DO-WALK ,P?OUT>)
(<NOT <DONT-HAVE? ,PRSO>>
<PERFORM ,V?DROP ,PRSO>)>
<RTRUE>>
<ROUTINE V-LET-GO ()
<PERFORM ,V?DROP ,PRSO>
<RTRUE>>
<ROUTINE V-LIE-DOWN ()
<TELL "This is no time for resting." CR>
<RTRUE>>
<ROUTINE V-LISTEN ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<COND (<AND <EQUAL? ,HERE ,CLOSET>
,BUCKET-PEG>
<TELL "\"Hummm.\"" CR>)
(T
<TELL "You hear nothing special." CR>)>)
(T
<TELL "At the moment," T ,PRSO " makes no sound." CR>)>>
; <ROUTINE LKP (ITM TBL "AUX" (CNT 0) (LEN <GET .TBL 0>))
#DECL ((ITM) ANY (TBL) TABLE (CNT LEN) FIX)
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> .LEN>
<RFALSE>)
(<EQUAL? <GET .TBL .CNT> .ITM>
<COND (<EQUAL? .CNT .LEN> <RFALSE>)
(T
<RETURN <GET .TBL <+ .CNT 1>>>)>)>>>
"lock"
<ROUTINE V-LOCK ()
<COND (<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,CONTBIT>>
<COND (<NOT <FSET? ,HERE ,LOCKEDBIT>>
<TELL
,YOU-CANT "lock it from here." CR>)
(<FSET? ,PRSO ,OPENBIT>
<TELL
"You can't lock" T ,PRSO " when it's open. You should have eaten more fish
(brain food) as Aunt Hildegarde told you to." CR>)
(<FSET? ,PRSO ,LOCKEDBIT>
<TELL
"You attempt to lock" T ,PRSO " and find it's already locked." CR>)
(,PRSI
<TELL
"When was the last time you locked something with" AR ,PRSI>)
(<FSET? ,HERE ,LOCKEDBIT>
<FSET ,PRSO ,LOCKEDBIT>
<TELL "You lock" TR ,PRSO>)
(T
<THING-WONT-LOCK ,PRSI ,PRSO>)>)
(T
<CANT-LOCK>)>>
<ROUTINE THING-WONT-LOCK (THING CLOSED-THING "OPTIONAL" (UN? <>))
<TELL "A quick test shows that" T .THING " won't ">
<COND (.UN?
<TELL "un">)>
<TELL "lock" TR .CLOSED-THING>>
<ROUTINE V-LOOK ()
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS ;T>)>
<RTRUE>>
;<ROUTINE V-FIRST-LOOK ()
<COND (<DESCRIBE-ROOM>
<COND (<NOT <EQUAL? ,VERBOSITY 0>>
<DESCRIBE-OBJECTS ;T>)>)>
<RTRUE>>
<ROUTINE V-LOOK-BEHIND ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(T
<TELL "There's nothing behind" TR ,PRSO>)>>
<ROUTINE V-LOOK-DOWN ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<EQUAL? ,HERE ,UPPER-BEACH-STAIRS ,LOWER-BEACH-STAIRS>
<PERFORM ,V?LOOK-INSIDE ,GAP>
<RTRUE>)
(<EQUAL? ,PRSO ,ROOMS>
<PERFORM ,V?EXAMINE ,GROUND>
;<TELL "You see">
;<DESCRIBE-REST ,HERE>
;<COND (<EQUAL? ,HERE ,INLET ,ON-POOL-1 ,IN-POOL-1
,UNDERPASS-1 ,UNDERPASS-2
,IN-POOL-2 ,ON-POOL-2>
<TELL " in the water." CR>)
(<OR <FSET? ,HERE ,OUTDOORSBIT>
<FSET? ,HERE ,CAVEBIT>>
<TELL " on the ground." CR>)
(T <TELL " on the floor." CR>)>
<RTRUE>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>
<RTRUE>>
<ROUTINE V-LOOK-INSIDE ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<FSET? ,PRSO ,ACTORBIT>
<NOT-A "surgeon">)
(<FSET? ,PRSO ,DOORBIT>
<COND (<AND <PRSO? ,CELLAR-CD ,FOYER-CD ,UPSTAIRS-CD ,ATTIC-CD>
<NOT <EQUAL? ,HERE ,CLOSET>>
<FSET? ,PRSO ,OPENBIT>>
<PERFORM ,V?LOOK-INSIDE ,CLOSET-REF>
<RTRUE>)
(T
<PERFORM ,V?EXAMINE ,PRSO>
<RTRUE>)>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<EQUAL? ,PRSO <LOC ,WINNER>>
<V-LOOK>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<NOT <FSET? ,PRSO ,TRANSBIT>>>
<ITS-CLOSED ,PRSO>)
(T
<TELL ,YOU-SEE>
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL " in" TR ,PRSO>)>
<RTRUE> ;<DESCRIBE-REST ,PRSO>)>)
(T
<TELL ,YOU-CANT "look inside" AR ,PRSO>)>>
<ROUTINE V-LOOK-ON ()
<COND (<NOT ,LIT>
<TOO-DARK>
<RTRUE>)>
<TELL ,YOU-SEE>
<COND (<FSET? ,PRSO ,SURFACEBIT>
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL " on" TR ,PRSO>)>
<RTRUE>)
(T
<TELL " nothing " <PICK-ONE ,YAWNS> " on" TR ,PRSO>)>>
<ROUTINE V-LOOK-THRU ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<AND ,PRSI
<NOT <FSET? ,PRSI ,TRANSBIT>>>
<TELL ,YOU-CANT "look through that!" CR>)
(T
<NOTHING-INTERESTING T>)>>
<ROUTINE V-LOOK-UNDER ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<IN? ,PRSO ,PLAYER>
<TELL "You're already ">
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "wear">)
(T
<TELL "hold">)>
<TELL "ing that!" CR>)
(T
<NOTHING-INTERESTING T>)>>
<ROUTINE V-LOOK-UP ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<EQUAL? ,HERE ,UPSTAIRS-HALL-MIDDLE>
<COND (<FSET? ,ATTIC-DOOR ,OPENBIT>
<TELL
"You see an opening in the ceiling previously covered by the small panel.
A ladder attached to the small door hangs down from the opening." CR>)
(T
<TELL
"You see the outline of a small panel in the ceiling." CR>)>)
(<EQUAL? ,HERE ,CLOSET-TOP>
<TELL "The shaft continues upward." CR>)
(<EQUAL? ,HERE ,SHAFT-BOTTOM>
<TELL
"You see the bottom of the closet ">
<COND (<EQUAL? ,CLOSET-FLOOR ,UPSTAIRS-HALL-MIDDLE ,ATTIC>
<TELL "far ">)>
<TELL "above you." CR>)
(<OR <EQUAL? ,HERE ,FIREPLACE ,CHIMNEY-1 ,CHIMNEY-2 ,CHIMNEY-3>
<FSET? ,HERE ,OUTDOORSBIT>>
<COND (<G? ,MOVES 556>
<TELL "You see the blue sky of a new day." CR>)
(T
<TELL "You see the night's sky." CR>)>)
(T
<TELL "You begin to get a stiff neck." CR>)>>
<ROUTINE V-LOWER ()
<V-RAISE>>
; <ROUTINE V-MELT ()
<TELL ,YOU-CANT "melt that!" CR>>
<ROUTINE V-MOVE ()
<COND ; (<ULTIMATELY-IN? ,PRSO>
<TELL "Why juggle objects?" CR>)
(<EQUAL? ,PRSO ,ROOMS>
<V-WALK-AROUND>)
(<FSET? ,PRSO ,TAKEBIT>
<TELL
"Moving" T ,PRSO " reveals nothing " <PICK-ONE ,YAWNS> "." CR>)
(T
<TELL ,YOU-CANT "move" TR ,PRSO>)>>
<ROUTINE V-MUNG ()
;<HACK-HACK "Trying to destroy">
<TELL "Let's leave the violence to the movies." CR>>
<ROUTINE NO-ANSWER ()
<TELL "There's no answer." CR>>
<ROUTINE NOT-A (STR)
<TELL "You're not a " .STR "!" CR>>
; <ROUTINE NOTHING-HELD? ("AUX" X N)
<SET X <FIRST? ,PLAYER>>
<REPEAT ()
<COND (.X
<COND (<NOT <FSET? .X ,WORNBIT>>
<RFALSE>)>
<SET X <NEXT? .X>>)
(T
<RTRUE>)>>>
<ROUTINE NOTHING-INTERESTING ("OPTIONAL" (SEE? <>))
<TELL "You ">
<COND (.SEE?
<TELL "see">)
(T
<TELL "find">)>
<TELL " nothing " <PICK-ONE ,YAWNS> "." CR>>
<ROUTINE NOW-BLACK ()
<TELL "It is pitch black.">>
<ROUTINE NOW-CLOSED-OR-OPEN (THING "OPTIONAL" (OPEN? <>))
<THIS-IS-IT .THING>
<TELL ,OKAY "the " D ,PRSO " is now ">
<COND (.OPEN?
<FSET .THING ,OPENBIT>
<TELL "open">)
(T
<FCLEAR .THING ,OPENBIT>
<TELL "closed">)>
<TELL "." CR>>
<ROUTINE V-OPEN ("AUX" F STR)
<COND (<FSET? ,PRSO ,ACTORBIT>
<NOT-A "surgeon">)
(<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,VEHBIT>>
<TELL "Huh?" CR>)
(<AND <NOT <FSET? ,PRSO ,CONTBIT>>
<NOT <FSET? ,PRSO ,DOORBIT>>>
<TELL "How can you do that to">
<TELL A ,PRSO "?" CR>)
(<FSET? ,PRSO ,OPENBIT>
<ALREADY-OPEN>)
;(<AND ,PRSI
<NOT <FSET? ,PRSI ,TOOLBIT>>>
<TELL "With" A ,PRSI "!" CR>)
; "Locked" (<FSET? ,PRSO ,LOCKEDBIT>
<TELL "You'll have to unlock it first." CR>)
; "Container" (<FSET? ,PRSO ,CONTBIT>
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT>
<COND (<OR <NOT <FIRST? ,PRSO>>
<FSET? ,PRSO ,TRANSBIT>>
<NOW-CLOSED-OR-OPEN ,PRSO T>)
;(<AND <SET F <FIRST? ,PRSO>>
<NOT <NEXT? .F>>
<SET STR <GETP .F ,P?FDESC>>>
<TELL
,OKAY "the " D ,PRSO " is now open." CR CR .STR CR>)
(T
<TELL "Opening" T ,PRSO " reveals">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL "." CR>)>
<RTRUE>
;<DESCRIBE-REST ,PRSO>
;<TELL "." CR>)>)
; "Door" (T
<FSET ,PRSO ,OPENBIT>
<SAY-THE ,PRSO>
<COND (<AND ,MYSTERY-GUEST
<PRSO? OAK-DOOR>>
<SETG MYSTERY-GUEST <>>
<TELL
" opens with a long squeal, and you hear hurried footsteps
several rooms away." CR>)
(T
<TELL
" " <PICK-ONE ,DOOR-NOISES> " as it opens." CR>)>)>>
<GLOBAL MYSTERY-GUEST T>
<ROUTINE CANT-OPEN-CLOSE ()
<TELL "You can't ">
<COND (<VERB? OPEN>
<TELL "open">)
(T
<TELL "close">)>
<TELL A ,PRSO "!" CR>>
<GLOBAL DOOR-NOISES
<LTABLE 0
"squeaks"
"squeals"
"whines"
"creaks"
"whinnies"
"breaks into its nightclub act">>
<ROUTINE OTHER-SIDE (DOBJ "AUX" (P 0) T)
<REPEAT ()
<COND (<L? <SET P <NEXTP ,HERE .P>> ,LOW-DIRECTION>
<RETURN <>>)
(T <SET T <GETPT ,HERE .P>>
<COND (<AND <EQUAL? <PTSIZE .T> ,DEXIT>
<EQUAL? <GET-DOOR-OBJ .T> .DOBJ>>
<RETURN .P>)>)>>>
;<ROUTINE V-PAY ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-PICK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<NOT-A "locksmith">)
(T
<WHAT-A-CONCEPT>)>>
<ROUTINE V-PLAY ("AUX" WD PTR)
;<COND (<ZERO? ,P-CONT>
<SET WD <GET ,P-LEXV <+ 1 <GETB ,P-LEXV ,P-LEXWORDS>>>>)
(ELSE
<SET WD <GET ,P-LEXV ,P-CONT>>)>
<SET WD <GET ,P-LEXV <SET PTR <+ ,P-SENTENCE ,P-LEXELEN>>>>
<COND (<EQUAL? .WD ,W?QUOTE>
<SET WD <GET ,P-LEXV <+ .PTR ,P-LEXELEN>>>)>
<COND (<AND ,PRSI <NOT <EQUAL? ,PRSI ,PIANO>>>
<TELL "You can't play" AR ,PRSI>)
(<AND ,PRSO <NOT <EQUAL? ,PRSO ,PIANO>>>
<TELL "You can't play" AR ,PRSO>)
(<NOT <IN? ,PIANO ,HERE>>
<TELL "There's not a musical instrument in sight." CR>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 0>
<EQUAL? .WD ,W?YESTER>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 1>
<EQUAL? .WD ,W?GREENS>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 2>
<EQUAL? .WD ,W?CAMELO>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 3>
<EQUAL? .WD ,W?STARDU>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 4>
<EQUAL? .WD ,W?MISTY>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 5>
<EQUAL? .WD ,W?PEOPLE>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 6>
<EQUAL? .WD ,W?FEELIN>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 7>
<EQUAL? .WD ,W?TOMORR>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 8>
<EQUAL? .WD ,W?TONIGH>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(<AND <EQUAL? ,SONG-NUMBER 9>
<EQUAL? .WD ,W?OKLAHO>>
<OPEN-CRAWL-SPACE-DOOR?>
<PCLEAR>)
(T
<COND (<AND <NOT ,PRSO> <NOT ,PRSI>>
<TELL "[on the piano]" CR>)>
<TELL
"You play for a few moments. It's very beautiful and melodious." CR>
<PCLEAR>)>>
<ROUTINE OPEN-CRAWL-SPACE-DOOR? ()
<COND (,SONG-PLAYED
<TELL
"You play \"" <GET ,SONGS ,SONG-NUMBER> "\" again. You tell yourself
you're getting better and promise to begin taking lessons again soon." CR>)
(T
<FSET ,CRAWL-SPACE-DOOR ,OPENBIT>
<SETG SONG-PLAYED T>
<TELL
"Although a little rusty, you begin to play \"" <GET ,SONGS ,SONG-NUMBER>
".\" Just as you start to seriously consider taking lessons again, a door
in the floor opens." CR>)>>
; <ROUTINE V-PLUG ()
<TELL "This has no effect." CR>>
"pocket"
; <ROUTINE PRE-POCKET ()
<PERFORM ,V?PUT ,PRSO ,POCKET>
<RTRUE>>
; <ROUTINE V-POCKET ()
<WASTE-OF-TIME>>
;<ROUTINE V-POINT ()
<TELL "It's not polite to point." CR>>
<ROUTINE V-POUR ()
<TELL ,YOU-CANT "pour that!" CR>>
<ROUTINE V-PULL ()
<HACK-HACK "Pulling on">>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing around">>
<ROUTINE V-PUSH-DOWN ()
<COND (,PRSI
<TELL ,YOU-CANT "push things down that." CR>)
(T
<HACK-HACK "Pushing down">)>>
<ROUTINE V-PUSH-TO ()
<TELL ,YOU-CANT "push things to that." CR>>
<ROUTINE V-PUSH-UP ()
<HACK-HACK "Pushing up">>
<ROUTINE PRE-PUT ()
<COND (<AND <EQUAL? ,PRSO ,WHITE-WAX ,RED-WAX ,BLUE-WAX>
<VERB? PUT PUT-ON>
<ULTIMATELY-IN? ,PRSO>>
<RFALSE>)
(<AND <PRSO? ,YOUR-FEET>
<PRSI? ,BRICK-HOLE>>
<TELL "If you want to climb up the chimney, say so." CR>)
(<EQUAL? ,PRSO ,WATER ,PORTABLE-WATER>
<RFALSE>)
(<ULTIMATELY-IN? ,PRSI ,PRSO>
<TELL ,YOU-CANT "put" T ,PRSO>
<COND (<EQUAL? <GET ,P-ITBL ,P-PREP2> ,PR?ON>
<TELL " on">)
(T
<TELL " in">)>
<TELL T ,PRSI " when" T ,PRSI " is already ">
<COND (<FSET? ,PRSO ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T ,PRSO "!" CR>)
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT <FSET? ,PRSO ,TAKEBIT>>>
<TELL <PICK-ONE ,YUKS> CR>)
(<DONT-HAVE? ,PRSO>
<RTRUE>)
(<PRSI? ,GROUND>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<AND ,PRSI
<NOT <ACCESSIBLE? ,PRSI>>>
<CANT-SEE-ANY ,PRSI>
<RTRUE>)
(<FSET? ,PRSO ,WORNBIT>
<TAKE-OFF-PRSO-FIRST>)
(T
<RFALSE>)>>
<ROUTINE V-PUT ()
<COND (<AND <PRSO? ,SKIS>
<EQUAL? ,PRSI ,BS-SAFE ,WALL-SAFE ,SACK ,COMPARTMENT>>
<TELL "The skis can't possibly fit in there." CR>)
(<AND ,PRSI
<NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,DOORBIT>>
<NOT <FSET? ,PRSI ,CONTBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>
;<NOT <FSET? ,PRSI ,VEHBIT>>>
<TELL ,YOU-CANT "possibly do that!" CR>
<RTRUE>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<BUT-THE ,PRSI>
<TELL "isn't open!" CR>
<THIS-IS-IT ,PRSI>)
(<EQUAL? ,PRSI ,PRSO>
<WHAT-A-CONCEPT>)
(<IN? ,PRSO ,PRSI>
<BUT-THE ,PRSO>
<TELL "is already ">
<COND (<FSET? ,PRSI ,SURFACEBIT>
<TELL "on ">)
(T
<TELL "in ">)>
<TELL T ,PRSI "!" CR>)
(<AND <FSET? ,PRSI ,BURNBIT>
<FSET? ,PRSO ,FLAMEBIT>>
<PERFORM ,V?BURN ,PRSI ,PRSO>
<RTRUE>)
(<G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<TELL "There's no room.">
<CRLF>)
(<AND <NOT <IN? ,PRSO ,PLAYER>>
<EQUAL? <ITAKE> <> ,M-FATAL>>
<RTRUE>)
(T
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Done." CR>)>>
;"leather v-put"
;<ROUTINE V-PUT ()
<COND (<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,CONTBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>
<NOT <FSET? ,PRSI ,VEHBIT>>>
<TELL ,YOU-CANT "put" T ,PRSO " in" A ,PRSI "!" CR>)
(<OR <PRSI? ,PRSO>
<AND <ULTIMATELY-IN? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>>>
<TELL "How can you do that?" CR>)
(<FSET? ,PRSI ,DOORBIT>
<TELL ,CANT-FROM-HERE>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<THIS-IS-IT ,PRSI>
<DO-FIRST "open" ,PRSI>)
(<IN? ,PRSO ,PRSI>
<TELL "But" T ,PRSO " is already in" TR ,PRSI>)
(<OR <FSET? ,PRSI ,ACTORBIT>
<PRSI? ,STALLION ,BABY>>
<TELL ,HUH>)
(<AND <G? <- <+ <WEIGHT ,PRSI> <WEIGHT ,PRSO>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<NOT <ULTIMATELY-IN? ,PRSO ,PRSI>>>
<TELL "There's no room ">
<COND (<FSET? ,PRSI ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T ,PRSI " for" TR ,PRSO>)
(<AND <NOT <ULTIMATELY-IN? ,PRSO>>
<EQUAL? <ITAKE> ,M-FATAL <>>>
<RTRUE>)
(<AND <OR <PRSO? ,TORCH>
<ULTIMATELY-IN? ,TORCH ,PRSO>>
<FSET? ,TORCH ,ONBIT>
<PRSI? ,BASKET ,SACK>>
<DO-FIRST "extinguish" ,TORCH>)
(<IN? ,PRSI ,ODD-MACHINE>
<TELL ,ONLY-ONE-THING-IN-COMPARTMENT>)
(T
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Done." CR>)>>
<ROUTINE V-PUT-BEHIND ()
<TELL "That hiding place is too obvious." CR>>
<ROUTINE V-PUT-ON ()
<COND (<EQUAL? ,PRSI ,ME>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(<FSET? ,PRSI ,SURFACEBIT>
<V-PUT>)
(<EQUAL? ,PRSI ,FILM-PROJECTOR>
<V-PUT>) ;"SEM"
(T
<TELL "There's no good surface on">
<COND (,PRSI
<TELL T ,PRSI>)
(T
<TELL " that">)>
<TELL "." CR>)>>
<ROUTINE V-PUT-UNDER ()
<TELL ,YOU-CANT "put anything under that." CR>>
<ROUTINE V-QUESTION ()
<V-ASK-FOR>>
; <ROUTINE V-QUESTION ()
<COND (<EQUAL? ,PRSO ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<NOT-LIKELY ,PRSO "is interested">)
(T
<NOT-LIKELY ,PRSO "would reply">)>>
<ROUTINE V-QUIT ("OPTIONAL" (ASK? T))
<V-SCORE>
<COND (.ASK?
<SAY-SURE>
<TELL "leave the story now?">
<COND (<YES?>
<TELL CR "Cut! That's a take." CR>
<QUIT>)
(T
<TELL ,OKAY "continuing." CR>)>)
(T
<QUIT>)>>
; <ROUTINE RANDOMIZE-OBJECTS ("AUX" (F <FIRST? ,WINNER>) N)
<REPEAT ()
<COND (.F
<SET N <NEXT? .F>>
<MOVE .F ,HERE>
<SET F .N>)
(T
<RETURN>)>>
<RTRUE>>
<ROUTINE V-RAPE ()
<TELL "What a wholesome idea." CR>>
<ROUTINE V-RAISE ()
<COND (<PRSO? ,ROOMS> ;"input was GET UP"
<PERFORM ,V?STAND ,ROOMS>
<RTRUE>)
(T
<HACK-HACK "Toying in this way with">)>>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<SET OBJ <FIRST? ,PRSO>>
<COND (<FSET? ,PRSO ,ACTORBIT>
<NOT-A "surgeon">)
(<NOT <FSET? ,PRSO ,CONTBIT>>
<TELL <PICK-ONE ,YUKS> CR>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "It's not open." CR>)
(<OR <NOT .OBJ>
<FSET? .OBJ ,INVISIBLE>
<NOT <FSET? .OBJ ,TAKEBIT>>>
<TELL "It's empty." CR>)
(T
<TELL "You reach into" T ,PRSO " and feel something." CR>
<RTRUE>)>>
<ROUTINE V-READ ()
<COND (<FSET? ,PRSO ,READBIT>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(T
<CANT-VERB-A-PRSO "read">)>>
<ROUTINE CANT-VERB-A-PRSO! (STRING)
<TELL ,YOU-CANT .STRING A ,PRSO "!" CR>>
;<ROUTINE V-READ ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<NOT <FSET? ,PRSO ,READBIT>>
<HOW-READ>
<TELL "?" CR>)
(T
<TELL "It's undecipherable." CR>)>>
<ROUTINE V-READ-TO ()
<COND (<NOT ,LIT>
<TOO-DARK>)
(<NOT <FSET? ,PRSO ,READBIT>>
<HOW-READ>
<TELL " to" A ,PRSI "?" CR>)
(T
<NOT-LIKELY ,PRSI "would appreciate your reading">)>>
<ROUTINE HOW-READ ()
<TELL "How can you read" A ,PRSO>>
;<ROUTINE REFERRING ()
<TELL "[Please be more specific.]" CR>> ;"I HAVE TWO VERSIONS OF THIS"
;"SEM"
<ROUTINE V-REMOVE ()
<COND (<FSET? ,PRSO ,WORNBIT>
<PERFORM ,V?TAKE-OFF ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-REMOVE-FROM ()
<COND (<AND <PRSO? ,WAX-COAT-1 ,WAX-COAT-2>
<PRSI? ,RED-MATCH ,GREEN-MATCH>>
<PERFORM ,V?SCRAPE-OFF ,PRSO ,PRSI>
<RTRUE>)
(T
<PERFORM ,V?TAKE ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-REPLACE ()
<COND (<EQUAL? ,PRSO ,ME>
<TELL "That's easy">)
(T
<BUT-THE ,PRSO>
<TELL "doesn't need replacement">)>
<TELL "." CR>>
<ROUTINE V-REPLY ()
<NOT-LIKELY ,PRSO "is interested">
<PCLEAR>
<RFATAL>>
<ROUTINE V-RESCUE ()
<COND (<EQUAL? ,PRSO ,ME>
<V-HELP>)
;(<EQUAL? ,PRSO ,AUNT>
<TELL "Yes, that's the idea." CR>)
(T
<BUT-THE ,PRSO>
<TELL "doesn't need any help." CR>)>>
<ROUTINE V-RESET ()
<TELL "You don't need to reset that." CR>>
<ROUTINE V-RESTART ()
<V-SCORE>
<SAY-SURE>
<TELL "restart the story?">
<COND (<YES?>
<RESTART>
<FAILED>)>>
<ROUTINE V-RESTORE ()
<COND (<RESTORE>
<SAY-OKAY>)
(T
<FAILED>)>>
<ROUTINE V-RIDE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<NOT-LIKELY ,PRSO "wants to play piggyback">)
(T
<TELL ,YOU-CANT "ride that!" CR>)>
<CRLF>>
; <ROUTINE RIPOFF (X WHERE)
<COND (<AND <NOT <IN? .X .WHERE>>
<NOT <FSET? .X ,INVISIBLE>>
<FSET? .X ,TOUCHBIT>
<FSET? .X ,TAKEBIT>>
<COND (.WHERE <MOVE .X .WHERE>)
(T <MOVE .X ,ROOMS>)>
<RTRUE>)>>
<ROUTINE ROB (WHO WHERE "AUX" N X)
<SET X <FIRST? .WHO>>
<REPEAT ()
<COND (.X
<SET N <NEXT? .X>>
<COND (<FSET? .X ,TAKEBIT>
<MOVE .X .WHERE>)>
<SET X .N>)
(T
<RTRUE>)>>>
; <ROUTINE ROB (WHO "OPTIONAL" (WHERE <>) (HIDE? <>) "AUX" N X (ROBBED? <>))
<SET X <FIRST? .WHO>>
<REPEAT ()
<COND (<NOT .X>
<RETURN .ROBBED?>)>
<SET N <NEXT? .X>>
<COND (<RIPOFF .X .WHERE>
<COND (.HIDE? <FSET .X ,NDESCBIT>)>
<SET ROBBED? .X>)>
<SET X .N>>>
<ROUTINE V-ROLL-UP ()
<TELL ,YOU-CANT "roll up" A ,PRSO "." CR>>
<ROUTINE V-RUB ()
<HACK-HACK "Fiddling with">>
<ROUTINE V-SAVE ()
<TELL
"You can almost hear Buck Palace saying, \"Wimp!\"" CR CR>
<COND (<SAVE>
<SAY-OKAY>)
(T
<FAILED>)>>
<GLOBAL SAYING? <>>
<ROUTINE V-SAY ()
<COND (<ANYONE-HERE?>
<WAY-TO-TALK>
<PCLEAR>
<RFATAL>)
(T
<TALK-TO-SELF>)>>
<ROUTINE SAY-IF-NOT-LIT ()
<SETG LIT <LIT? ,HERE>>
<COND (<NOT ,LIT>
<CRLF>
<NOW-BLACK>
<CRLF>)>>
<ROUTINE SAY-OKAY ()
<TELL ,OKAY "done." CR>>
<ROUTINE SAY-SURE ()
<TELL "Are you sure you want to ">>
<ROUTINE V-SCORE ()
<TELL "Your score is " N ,SCORE " point">
<COND (<NOT <1? ,SCORE>>
<TELL "s">)>
<TELL " out of " N ,SCORE-MAX ", in " N ,MOVES " move">
<COND (<NOT <1? ,MOVES>>
<TELL "s">)>
<TELL "." CR>>
<CONSTANT SCORE-MAX 150>
<ROUTINE V-SCRAPE-OFF ()
<COND (,PRSI
<TELL "You can't scrape" T ,PRSO " off" T ,PRSI "!" CR>)
(T
<TELL "There's nothing to scrape off" TR ,PRSO>)>>
"scripting"
<ROUTINE V-SCRIPT ()
<PUT 0 8 <BOR <GET 0 8> 1>>
<TRANSCRIPT "begin">
<RTRUE>>
<ROUTINE V-UNSCRIPT ()
<TRANSCRIPT "end">
<PUT 0 8 <BAND <GET 0 8> -2>>
<RTRUE>>
<ROUTINE TRANSCRIPT (STR)
<TELL "Here " .STR "s a transcript of interaction with" CR>
<V-VERSION>>
<ROUTINE V-SEARCH ()
<COND (<EQUAL? ,PRSO ,ME>
<V-HELP>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<NOT <FSET? ,PRSO ,TRANSBIT>>>
<YOUD-HAVE-TO "open" ,PRSO>)
(T
<TELL "You find">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL "." CR>)>
<RTRUE>
;<TELL ,YOU-SEE>
;<DESCRIBE-REST ,PRSO>
;<TELL " inside" TR ,PRSO>)>)
(<FSET? ,PRSO ,SURFACEBIT>
<TELL "You find">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL "." CR>)>
<RTRUE>
;<TELL ,YOU-SEE>
;<DESCRIBE-REST ,PRSO>
;<TELL " on" TR ,PRSO>)
(<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?USE ,PRSO>
<RTRUE>)
(T
<NOTHING-INTERESTING>)>>
; <ROUTINE V-SEND ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Why would you send for" T ,PRSO "?" CR>)
(T
<TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE V-SHAKE ("AUX" X)
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?ALARM ,PRSO>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,TAKEBIT>>
<NOT <FSET? ,PRSO ,TRYTAKEBIT>>>
<HACK-HACK "Shaking">)
(T
<WASTE-OF-TIME>)>>
; <ROUTINE V-SHARPEN ()
<TELL "You'll never sharpen anything with that!" CR>>
<ROUTINE V-SHOOT ()
<COND (<AND <NOT ,PRSI>
<ULTIMATELY-IN? ,GUN>>
<PERFORM ,V?SHOOT ,GUN ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "You haven't got a gun." CR>)
(T
<TELL "You can't shoot that." CR>)>>
<ROUTINE V-SSHOOT ()
<PERFORM ,V?SHOOT ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SHOW ()
<TELL "It isn't likely that" T ,PRSI " is interested." CR>>
<ROUTINE V-SSHOW ()
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SIT ("AUX" VEHICLE)
<COND (<AND <PRSO? ,ROOMS>
<GLOBAL-IN? ,SEAT ,HERE>>
<PERFORM ,V?BOARD ,SEAT>
<RTRUE>)
;(<AND <PRSO? ,ROOMS>
<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>>
<PERFORM ,V?BOARD .VEHICLE>
<RTRUE>)
(T
<WASTE-OF-TIME>)>>
<ROUTINE PRE-SKI ()
<COND (<NOT <FSET? ,SKIS ,WORNBIT>>
<TELL "You're not wearing skis!" CR>)>>
<ROUTINE V-SKI ()
<COND (<PRSO? ,INTDIR>
<COND (<EQUAL? ,P-DIRECTION ,P?UP>
<TELL "There's no tow rope here." CR>)
(T
;<TELL "\"Ski slide shuffle shuffle...\"" CR CR>
<DO-WALK ,P-DIRECTION>)>)
(T
<TELL "You can't ski down that!" CR>)>>
; <ROUTINE V-SKIP ()
<TELL "Wheeee! Wasn't that fun?" CR>>
<ROUTINE V-SLEEP ()
<TELL
"Maybe you should've had a nap before the lawyer dropped you off." CR>>
<ROUTINE V-SMELL ()
<COND (<EQUAL? ,PRSO ,ROOMS>
<TELL "You smell nothing " <PICK-ONE ,YAWNS>>)
(T
<TELL "It smells just like" A ,PRSO>)>
<TELL "." CR>>
; <ROUTINE SPEAKING-TO-SOMEONE-ABOUT? (OBJ "AUX" ACTOR)
<COND (<SET ACTOR <ANYONE-HERE?>>
<TELL "[spoken to" T .ACTOR "]" CR>
<PERFORM ,V?ASK-ABOUT .ACTOR .OBJ>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-SPLICE ()
<TELL ,YOU-CANT "splice that!" CR>>
<ROUTINE V-SQUEEZE ()
<WASTE-OF-TIME>>
<ROUTINE V-STAND ()
<COND ;(<FSET? <LOC ,PLAYER> ,VEHBIT>
<MOVE ,PLAYER ,HERE>
<TELL "You're now standing again." CR>)
(<OR <NOT ,PRSO>
<PRSO? ,ROOMS>>
<TELL "You're already standing." CR>)
(T
<TELL ,YOU-CANT "stand that up." CR>)>>
<ROUTINE V-STAND-ON ()
<WASTE-OF-TIME>>
<ROUTINE V-STAND-UNDER ()
<TELL <PICK-ONE ,YUKS> CR>>
;<ROUTINE V-STRIKE ()
<PERFORM ,V?KILL ,PRSO>
<RTRUE>>
<ROUTINE V-SWING ()
<COND (<NOT ,PRSI>
<TELL "Whoosh!" CR>)
(T
<PERFORM ,V?KILL ,PRSI ,PRSO>
<RTRUE>)>>
<ROUTINE V-SWIM ()
<COND (,PRSO
<COND (<PRSO? ,INTDIR>
<COND (<FSET? ,PLAYER ,WETBIT>
<DO-WALK ,P-DIRECTION>)
(T
<TELL "You'd be swimming in air." CR>)>)
(T
<TELL "You can't swim in" AR ,PRSO>)>)
(<GLOBAL-IN? ,WATER ,HERE>
<PERFORM ,V?SWIM ,WATER>
<RTRUE>)
(T
<TELL ,YOU-CANT "swim here!" CR>)>>
<GLOBAL DOG-PADDLE
"You wouldn't even be able to dog paddle wearing a pair of skis.">
<ROUTINE V-SWIM-UP ()
<DO-WALK ,P?UP>>
<ROUTINE V-SWIM-DOWN ()
<DO-WALK ,P?DOWN>>
"take"
<ROUTINE PRE-TAKE ("OPTIONAL" CONTAINER)
<SET CONTAINER <LOC ,PRSO>>
<COND (<IN? ,PRSO ,WINNER>
<TELL "You're already ">
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "wear">)
(T
<TELL "hold">)>
<TELL "ing it." CR>
<RTRUE>)
(<AND .CONTAINER
<FSET? .CONTAINER ,CONTBIT>
<NOT <FSET? .CONTAINER ,OPENBIT>>>
<TELL ,YOU-CANT "reach into" T .CONTAINER ". It's closed." CR>
<RTRUE>)
(,PRSI
<COND (<EQUAL? ,PRSO ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<AND <EQUAL? ,PRSO ,WATER>
<EQUAL? ,PRSI ,POND>>
<RFALSE>)
(<NOT <IN? ,PRSO ,PRSI>>
<COND (<AND <PRSO? ,RING>
<PRSI? ,DOG>
<FSET? ,DOG ,CLUTCHING-BIT>>
;"TAKE RING FROM DOG"
<RFALSE>)
(<AND <PRSO? ,LADDER>
<PRSI? ,HATCH-HOLE>
<FSET? ,LADDER ,HUNG-BIT>>
<RFALSE>)
(<AND <PRSO? ,LENS-CAP>
<PRSI? ,FILM-PROJECTOR-LENS>
<FSET? ,LENS-CAP ,NDESCBIT>>
<RFALSE>)> ;"for TAKE LENS CAP FROM LENS"
<COND (<OR <FSET? ,PRSI ,ACTORBIT>
<EQUAL? ,PRSI ,DOG>>
<BUT-THE ,PRSI>
<TELL "doesn't have" A ,PRSO>)
(T
<BUT-THE ,PRSO>
<TELL "isn't in" T ,PRSI>)>
<TELL "." CR>
<RTRUE>)
(<AND <ULTIMATELY-IN? ,PRSO ,BUCKET>
,BUCKET-PEG>
<TELL ,PEG-IN-WAY>)
(T
;<SETG PRSI <>>
<RFALSE>)>
<RTRUE>)
(<AND <ULTIMATELY-IN? ,PRSO ,BUCKET>
,BUCKET-PEG>
<TELL ,PEG-IN-WAY>)
(<EQUAL? ,PRSO <LOC ,WINNER>>
<TELL "You're in it!" CR>
<RTRUE>)
(T
<RFALSE>)>>
<GLOBAL PEG-IN-WAY
"You'd better take the bucket off the peg first.~">
<ROUTINE V-TAKE ()
<COND (<ITAKE>
<TELL "Taken." CR>)>>
<GLOBAL TREASURES-FOUND 0>
;(;<AND <GETP ,PRSO ,P?VALUE>
<NOT <EQUAL? <GETP ,PRSO ,P?VALUE> 0>>>
<NOT <EQUAL? <GETP ,PRSO ,P?VALUE> 0>>
<SETG SCORE <+ ,SCORE <GETP ,PRSO ,P?VALUE>>>
<PUTP ,PRSO ,P?VALUE 0>
<SETG TREASURES-FOUND <+ ,TREASURES-FOUND 1>>
<COND (<EQUAL? ,TREASURES-FOUND 10>
<MOVE ,PEG-0 <LOC ,PRSO>>
<MOVE ,NOTE <LOC ,PRSO>>
<MOVE ,PRSO ,WINNER>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<COND (<PRSO? ,RING>
<TELL
"As you take" T ,PRSO ", a small peg and a note drop out from
under the model." CR>
<MOVE ,PEG-0 ,HERE>
<MOVE ,NOTE ,HERE>)
(T
<TELL
"As you take" T ,PRSO " you notice a chipped peg and a note ">
<COND (<PRSO? ,CORPSE-LINE ,GRATER
,PARKING-METER>
<TELL "behind">)
;"else PENGUIN RUBBER-STAMP MASK TOUPEE FINCH FIRE-HYDRANT"
(T
<TELL "beneath">)>
<TELL " it." CR>)>
<RFALSE> ;"don't print TAKEN for 10th treasure")>
;"following is for all treasures except the tenth"
<MOVE ,PRSO ,WINNER>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<RTRUE>)
<ROUTINE ITAKE ("OPTIONAL" (VB T))
<THIS-IS-IT ,PRSO>
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<TELL <PICK-ONE ,YUKS> CR>)>
<RFALSE>)
(<TOO-MUCH-JUNK? .VB>
<RFALSE>)
(<AND <BOKS-BIG-ONE ,PRSO>
<EQUAL? ,TREASURES-FOUND 10>>
<RFALSE>)
(T ;"following is for all objects except the treasures"
<MOVE ,PRSO ,WINNER>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<RTRUE>)>>
<ROUTINE BOKS-BIG-ONE (T-OBJ)
<COND (<NOT <EQUAL? <GETP .T-OBJ ,P?VALUE> 0>>
<SETG SCORE <+ ,SCORE <GETP .T-OBJ ,P?VALUE>>>
<PUTP .T-OBJ ,P?VALUE 0>
<SETG TREASURES-FOUND <+ ,TREASURES-FOUND 1>>
<COND (<EQUAL? ,TREASURES-FOUND 10>
<MOVE ,PEG-0 <LOC .T-OBJ>>
<MOVE ,NOTE <LOC .T-OBJ>>
<COND (<NOT <EQUAL? .T-OBJ ,FINCH>>
<MOVE .T-OBJ ,WINNER>)>
<FSET .T-OBJ ,TOUCHBIT>
<FCLEAR .T-OBJ ,NDESCBIT>
<COND (<EQUAL? .T-OBJ ,RING>
<TELL
"As you take" T ,PRSO ", a small peg and a note drop out from
under the model." CR>
<MOVE ,PEG-0 ,HERE>
<MOVE ,NOTE ,HERE>)
(T
<TELL "As you ">
<PRINTB ,P-PRSA-WORD>
<TELL
T ,PRSO " you notice a wooden peg and a note ">
<COND (<EQUAL? .T-OBJ ,CORPSE-LINE ,GRATER
,PARKING-METER>
<TELL "behind">)
(<EQUAL? .T-OBJ ,FINCH>
<TELL "next to" AR ,FINCH>
<RTRUE>)
;"else PENGUIN RUBBER-STAMP MASK TOUPEE FIRE-HYDRANT"
(T
<TELL "beneath">)>
<TELL " it." CR>)>
<RTRUE> ;"don't print TAKEN for 10th treasure")>
;<;"following is for all treasures except the tenth"
<MOVE ,PRSO ,WINNER>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-TAKE-OFF ("AUX" WHERE)
<COND (<EQUAL? ,P-PRSA-WORD ,W?GET>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(<AND <IN? ,PRSO ,PLAYER>
<FSET? ,PRSO ,WORNBIT>>
<FCLEAR ,PRSO ,WORNBIT>
<TELL ,OKAY "you're no longer wearing" TR ,PRSO>)
(T
<TELL "You aren't wearing that!" CR>)>>
<ROUTINE TAKE-OFF-PRSO-FIRST ()
<TELL "You'll have to remove" T ,PRSO " first." CR>>
<ROUTINE V-TASTE ()
<PERFORM ,V?EAT ,PRSO>
<RTRUE>>
<ROUTINE V-TELL ()
<COND (<EQUAL? ,PRSO ,ME ,ROOMS>
<TALK-TO-SELF>)
(<FSET? ,PRSO ,ACTORBIT>
<COND (,P-CONT
<SETG WINNER ,PRSO>
<SETG HERE <LOC ,WINNER>>)
(T
<NO-ANSWER>)>)
(T
<TELL ,YOU-CANT "talk to" A ,PRSO "!" CR>
<PCLEAR>
<RFATAL>)>>
<ROUTINE TELL-TIME ("AUX" MINUTES HOURS (PM <>))
<SET MINUTES <+ ,MOVES 1260>>
<COND (<G? .MINUTES 1439> ;"11:59 pm."
<SET MINUTES <- .MINUTES 1440>>)>
<SET HOURS </ .MINUTES 60>>
<COND (<G? .HOURS 11> ;"after noon"
<SET PM T>
<SET HOURS <- .HOURS 12>>)>
<COND (<EQUAL? .HOURS 0> ;"between 12am and 1am, or 12pm and 1pm"
<SET HOURS 12>)>
<TELL N .HOURS ":">
<SET MINUTES <MOD .MINUTES 60>> ;"remainder"
<COND (<L? .MINUTES 10>
<TELL "0">)>
<TELL N .MINUTES>
<COND (.PM
<TELL " pm">)
(T
<TELL " am">)>>
;<ROUTINE V-THANK ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL
"You do so, but" T ,PRSO " seems less than overjoyed by your gratitude." CR>)
(T
<TELL "You're loony." CR>)>>
<ROUTINE V-TIME ()
<TELL "It's ">
<TELL-TIME>
<TELL "." CR>>
;<ROUTINE V-TIP () ;"these two routines need to be fixed up"
;<TELL
"If Aunt Hildegarde saw you trying that she'd">
;<ASS-KICK>>
;<ROUTINE ASS-KICK ()
<TELL
" kick you in the ass so hard you'd have to take your shirt off to shit!" CR>>
<ROUTINE V-THROW ()
<COND (<IDROP>
<COND (<SPECIAL-DROP>
<RTRUE>)
(,PRSI
<TELL "You missed." CR>)
(T
<TELL "Thrown." CR>)>)>>
<ROUTINE V-THROW-OFF ()
<WASTE-OF-TIME>>
<ROUTINE V-TIE ()
<TELL ,YOU-CANT "tie" T ,PRSO " to that." CR>>
<ROUTINE V-TIE-UP ()
<TELL ,YOU-CANT "tie anything with that!" CR>>
<ROUTINE TOO-DARK ()
<TELL "It's too dark to see!" CR>>
;<CONSTANT FUMBLE-NUMBER 10>
<CONSTANT LOAD-ALLOWED 100>
<ROUTINE TOO-MUCH-JUNK? ("OPTIONAL" (VB T))
<COND (<AND <NOT <IN? <LOC ,PRSO> ,WINNER>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,WINNER>> ,LOAD-ALLOWED>>
<COND (.VB
<COND (<FIRST? ,PLAYER>
<TELL "Your load is">)
(T
<TELL "It's a little">)>
<TELL " too heavy." CR>)>
<RTRUE>)
;(<G? <CCOUNT ,WINNER> ,FUMBLE-NUMBER>
<COND (.VB
<TELL "You're holding too many things already!" CR>)>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-TURN ()
<COND (<AND <NOT <FSET? ,PRSO ,TAKEBIT>>
<NOT <FSET? ,PRSO ,TRYTAKEBIT>>>
<TELL <PICK-ONE ,YUKS> CR>)
(T
<HACK-HACK "Turning">)>>
<ROUTINE V-TURN-LEFT ()
<V-TURN>>
<ROUTINE V-TURN-RIGHT ()
<V-TURN>>
<ROUTINE V-USE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<BUT-THE ,PRSO>
<TELL "might resent that." CR>
<RTRUE>)
(T
<HOW?>)>>
<GLOBAL VERBOSITY 1> ;"0 = superbrief, 1 = brief, 2 = verbose"
<ROUTINE V-VERBOSE ()
<SETG VERBOSITY 2>
<TELL "[Maximum verbosity.]" CR CR>
<V-LOOK>>
<ROUTINE V-BRIEF ()
<SETG VERBOSITY 1>
<TELL "[Brief descriptions.]" CR>>
<ROUTINE V-SUPER-BRIEF ()
<SETG VERBOSITY 0>
<TELL "[Superbrief descriptions.]" CR>>
<ROUTINE V-VERSION ("AUX" (CNT 17) V)
<SET V <BAND <GET 0 1> *3777*>>
<TELL CR
"HOLLYWOOD HIJINX~
Infocom interactive fiction -- a zany treasure hunt~
Copyright (C) 1986 Infocom, Inc. All rights reserved.~" >
%<COND (<AND <GASSIGNED? PLUS-MODE> ,PLUS-MODE>
'<SET V .V>)
(T
'<COND (<NOT <ZERO? <BAND <GETB 0 1> 8>>>
<TELL
"Licensed to Tandy Corporation. Version 00.00." N .V CR>)>)>
<TELL "HOLLYWOOD HIJINX is a trademark of Infocom, Inc.~
Release " N .V " / Serial Number ">
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> 23>
<RETURN>)
(T
<PRINTC <GETB 0 .CNT>>)>>
<CRLF>>
<ROUTINE V-$VERIFY ()
<COND (,PRSO
<COND (<AND <EQUAL? ,PRSO ,INTNUM>
<EQUAL? ,P-NUMBER 57>>
<TELL N ,SERIAL CR>)
(T
<DONT-UNDERSTAND>)>)
(T
<TELL "Verifying disk." CR>
<COND (<VERIFY>
<TELL "Correct." CR>)
(T
<FAILED>)>)>>
<ROUTINE V-$COMMAND ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-$RANDOM ()
<COND (<NOT <EQUAL? ,PRSO INTNUM>>
<TELL "Illegal." 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>>
;"lockedbit for object and in rooms where you can lock the door"
<ROUTINE V-UNLOCK ()
<COND (<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,CONTBIT>>
<COND (<FSET? ,PRSO ,OPENBIT>
<TELL
"The " D ,PRSO " is already open. You should have eaten more carrots as
Aunt Hildegarde always told you." CR>)
(<NOT <FSET? ,PRSO ,LOCKEDBIT>>
<TELL
"You attempt to unlock" T ,PRSO " and find it isn't locked." CR>)
(,PRSI
<TELL
"When was the last time you unlocked something with" A ,PRSI "?" CR>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<NOT <FSET? ,HERE ,LOCKEDBIT>>
<TELL ,YOU-CANT "unlock it from this side." CR>)
(T
<TELL "With a click you unlock" TR ,PRSO>
<FCLEAR ,PRSO ,LOCKEDBIT>)>)
(<AND <FSET? ,PRSO ,CONTBIT> ;"its one of the safes"
<FSET? ,PRSO ,LOCKEDBIT>>
<TELL "Perhaps if you had the combination..." CR>)
(T
<THING-WONT-LOCK ,PRSI ,PRSO T>)>)
(T
<CANT-LOCK T>)>>
<ROUTINE V-UNROLL ()
<TELL ,YOU-CANT "unroll" AR ,PRSO>>
<ROUTINE V-UNTIE ()
<TELL "You don't need to untie it. It's not tied to anything." CR>>
"walk"
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>
<RTRUE>>
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
<COND (<AND <FSET? ,SKIS ,WORNBIT>
<NOT <PRSO? ,P?DOWN>>>
<TELL
"These are downhill skis, not cross-country skis!" CR>
<RFATAL>)
(<NOT ,P-WALK-DIR>
<COND (,PRSO
<PRESUMABLY-YOU-WANT-TO "walk to" ,PRSO>
<PERFORM ,V?WALK-TO ,PRSO>)
(T
<V-WALK-AROUND>)>
<RTRUE>)
(<NOT <EQUAL? <LOC ,PLAYER> ,HERE>>
<TELL
"You're not going anywhere while you're on" TR <LOC ,PLAYER>>
<RFATAL>)
(<SET PT <GETPT ,HERE ,PRSO>>
<COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
<GOTO <GET-REXIT-ROOM .PT>>)
(<EQUAL? .PTS ,NEXIT>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<EQUAL? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<GOTO .RM>)
(T
<RFATAL>)>)
(<EQUAL? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GET-REXIT-ROOM .PT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<CANT-GO>
<RFATAL>)>)
(<EQUAL? .PTS ,DEXIT>
<COND (<FSET? <SET OBJ <GET-DOOR-OBJ .PT>> ,OPENBIT>
<GOTO <GET-REXIT-ROOM .PT>>)
(<SET STR <GET .PT ,DEXITSTR>>
<TELL .STR CR>
<THIS-IS-IT .OBJ>
<RFATAL>)
(T
<ITS-CLOSED .OBJ>
<RFATAL>)>)>)
(T
<COND (<EQUAL? ,P-WALK-DIR ,P?IN ,P?OUT>
<TELL
"Please use compass directions." CR>)
(T
<CANT-GO>
<RFATAL>)>)>> ;"rfatal in right place?"
<ROUTINE V-WALK-AROUND ()
<TELL "[Do you have any particular direction in mind?]" CR>>
<ROUTINE V-WALK-TO ()
<COND (<EQUAL? ,PRSO ,INTDIR>
<DO-WALK ,P-DIRECTION>)
(T
<V-WALK-AROUND>)>>
; <ROUTINE V-WALK-TO ()
<COND (<AND ,PRSO <OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>>
<TELL "It's right here in front of you!" CR>)
(T
<V-WALK-AROUND>)>>
<ROUTINE V-WAIT ("OPTIONAL" (NUM 3))
<TELL "Time passes." CR>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0>
<RETURN>)
(<CLOCKER>
<RETURN>)>>
<SETG CLOCK-WAIT T>>
<ROUTINE V-$WAIT ("AUX" NUM)
<COND (<PRSO? ,INTNUM>
<SET NUM ,P-NUMBER>
<TELL "Time passes." CR>
<REPEAT ()
<COND (<L? <SET NUM <- .NUM 1>> 0>
<RETURN>)
(<CLOCKER>
<RETURN>)>>
<SETG CLOCK-WAIT T>)
(T
<TELL "Youse should use a numba." CR>)>>
<ROUTINE V-WAIT-FOR ()
<COND (<EQUAL? <LOC ,PRSO> ,HERE ,WINNER>
<BUT-THE ,PRSO>
<TELL "is already here!">)
(T
<TELL "You may be waiting quite a while.">)>
<CRLF>>
<ROUTINE PRE-WATER ()
<COND (,PRSI
<COND (<PRSI? ,PORTABLE-WATER>
<RFALSE>)
(<AND <PRSI? ,BUCKET>
<IN? ,PORTABLE-WATER ,BUCKET>>
<SETG PRSI ,PORTABLE-WATER>
<RFALSE>)
(T
<TELL
"As the word implies, you can only water" A ,PRSO " with water." CR>)>)
(T
<COND (<ULTIMATELY-IN? ,PORTABLE-WATER>
<SETG PRSI ,PORTABLE-WATER>
<RFALSE>)
(T
<TELL
"You don't have any water to water" T ,PRSO " with!" CR>)>)>>
<ROUTINE V-WATER ()
<TELL "A nice thought, but" T ,PRSO " doesn't need watering." CR>>
; <ROUTINE V-WAVE-AT ()
<NOT-LIKELY ,PRSO "will respond to your friendly gesture">>
<ROUTINE V-WAVE-AT ()
<V-ASK-FOR>>
; <ROUTINE V-WAVE ()
<HACK-HACK "Waving">>
<ROUTINE V-WEAR ()
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "You're already wearing" TR ,PRSO>)
(<NOT <FSET? ,PRSO ,WEARBIT>>
<TELL ,YOU-CANT "wear" AR ,PRSO>)
(<DONT-HAVE? ,PRSO>
<RTRUE>)
(T
<FSET ,PRSO ,WORNBIT>
<COND (<PRSO? ,TOUPEE>
<TELL
"You put on " D ,TOUPEE " in an attempt to cover that Burbank bald
spot." CR>)
(<PRSO? ,MASK>
<TELL
"You slip on" T ,MASK " and feel an unexplainable urge to go to
summer camp." CR>)
(T
<TELL ,OKAY "you're now wearing" TR ,PRSO>)>)>>
; "Return total weight of objects in THING"
<ROUTINE WEIGHT (THING "AUX" OBJ (WT 0))
<SET OBJ <FIRST? .THING>>
<REPEAT ()
<COND (.OBJ
<COND (<AND <EQUAL? .THING ,PLAYER>
<FSET? .OBJ ,WORNBIT>>
<SET WT <+ .WT 1>>)
(T
<SET WT <+ .WT <WEIGHT .OBJ>>>)>
<SET OBJ <NEXT? .OBJ>>)
(T
<RETURN>)>>
<SET WT <+ .WT <GETP .THING ,P?SIZE>>>
<RETURN .WT>>
;<ROUTINE V-WHAT ("AUX" ACTOR)
<COND (<SPEAKING-TO-SOMEONE-ABOUT? ,PRSO>
<RTRUE>)
(T
<Q-CHASTISE>)>>
; <ROUTINE V-WHAT-ABOUT ("AUX" ACTOR)
<COND (<SPEAKING-TO-SOMEONE-ABOUT? ,PRSO>
<RTRUE>)
(T
<TELL "(Well, what about it?)" CR>)>>
; <ROUTINE V-WHERE ()
<V-FIND T>>
; <ROUTINE V-WHO ()
<COND (<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL ,I-ASSUME " WHAT is" T ,PRSO ".)" CR>)>
<PERFORM ,V?WHAT ,PRSO>
<RTRUE>>
; <ROUTINE V-WHY ("AUX" ACTOR)
<COND (<SPEAKING-TO-SOMEONE-ABOUT? ,PRSO>
<RTRUE>)>
<TELL "(">
<COND (<PROB 50>
<TELL "Why not?">)
(T
<TELL "Because.">)>
<TELL ")">
<CRLF>>
; <ROUTINE WORD-TYPE (OBJ WORD "AUX" SYNS)
#DECL ((OBJ) OBJECT (WORD SYNS) TABLE)
<ZMEMQ .WORD
<SET SYNS <GETPT .OBJ ,P?SYNONYM>>
<- </ <PTSIZE .SYNS> 2> 1>>>
<ROUTINE V-YELL ()
<PCLEAR>
<COND (<ANYONE-HERE?>
<WAY-TO-TALK>
<RFATAL>)
(T
<TELL "You begin to get a sore throat." CR>)>>
<GLOBAL YES-INBUF <ITABLE BYTE 12>>
<GLOBAL YES-LEXV <ITABLE BYTE 10>>
<ROUTINE YES? ("AUX" WORD)
<CRLF>
<REPEAT ()
<TELL CR "(Please type YES or NO.) >">
<PUTB ,YES-LEXV 0 4>
<READ ,YES-INBUF ,YES-LEXV>
<SET WORD <GET ,YES-LEXV ,P-LEXSTART>>
<COND (<ZERO? <GETB ,YES-LEXV ,P-LEXWORDS>>
T)
(<NOT <ZERO? .WORD>>
<COND (<OR <EQUAL? .WORD ,W?YES ,W?Y ,W?YUP>
<EQUAL? .WORD ,W?OKAY ,W?OK ,W?AYE>
<EQUAL? .WORD ,W?SURE ,W?AFFIRM ,W?POSITI>>
<RTRUE>)
(<OR <EQUAL? .WORD ,W?NO ,W?N ,W?NOPE>
<EQUAL? .WORD ,W?NAY ,W?NAW ,W?NEGATIVE>>
<RFALSE>)>)>>>
<ROUTINE NOW-LIT? ()
<COND (<AND <NOT ,LIT>
<LIT? ,HERE>>
<SETG LIT T>
<CRLF>
<V-LOOK>)>>
<ROUTINE WASTE-OF-TIME ()
<TELL <PICK-ONE ,USELESSNESS> "." CR>>
<GLOBAL USELESSNESS
<LTABLE 0
"That's not in the script"
"That would be a waste of time"
"That would be a pointless thing to do"
"That would be useless effort">>
;<ROUTINE WASTE-OF-TIME ()
<TELL "That would be a " <PICK-ONE ,USELESSNESS> "." CR>>
;<GLOBAL USELESSNESS
<LTABLE 0
"waste of time"
"useless effort"
"pointless thing to do">>
"never called"
;<ROUTINE 2OBJS? ()
<COND (<NOT <EQUAL? <GET ,P-PRSO 0> 2>>
<PUT ,P-PRSO 0 1>
<TELL "That sentence doesn't make sense." CR>
<RFALSE>)
(T
<RTRUE>)>>