leathergoddesses/verbs.zil

3465 lines
84 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

"VERBS for
LEATHER GODDESSES OF PHOBOS
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
;"subtitle game commands"
<GLOBAL VERBOSITY 1> ;"0 = super-brief, 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 "Super-brief descriptions." CR>>
<GLOBAL NAUGHTY-LEVEL 1> ;"0 = tame, 1 = suggestive, 2 = lewd"
<GLOBAL AGE -1>
<ROUTINE V-TAME ()
<COND (<EQUAL? ,NAUGHTY-LEVEL 0>
<TELL ,ALREADY-IN-MODE>)
(T
<SETG NAUGHTY-LEVEL 0>
<TELL "Tame descriptions. [Yawn.]" CR>)>>
<ROUTINE V-SUGGESTIVE ()
<COND (<EQUAL? ,NAUGHTY-LEVEL 1>
<TELL ,ALREADY-IN-MODE>)
(T
<SETG NAUGHTY-LEVEL 1>
<TELL "Suggestive descriptions." CR>)>>
<ROUTINE V-LEWD ("AUX" (ACCEPTABLE-AGE <>))
<COND (<EQUAL? ,NAUGHTY-LEVEL 2>
<TELL ,ALREADY-IN-MODE>
<RTRUE>)
(<G? ,AGE 17>
<SET ACCEPTABLE-AGE T>)
(T
<PUTB ,P-LEXV 0 10>
<TELL "What is your age? >">
<REPEAT ()
<READ ,P-INBUF ,P-LEXV>
<CRLF>
<COND (<EQUAL? <NUMBER? ,P-LEXSTART> ,W?NUMBER>
<COND (<L? ,P-NUMBER 18>
<SETG AGE ,P-NUMBER>
<COND (<L? ,P-NUMBER 5>
<TELL
"Precocious, aren't you! Unfortunately">)
(T
<TELL "Sorry">)>
<TELL
", you must be at least 18 to enter LEWD mode." CR>
<RETURN>)
(<G? ,P-NUMBER 120>
<TELL "Bullpuckies. Tell the truth. >">)
(<AND <G? ,AGE -1>
<L? ,AGE 19>>
<TELL
"Liar! You said before that you were " N ,AGE ,PERIOD-CR>
<RETURN>)
(T
<SETG AGE ,P-NUMBER>
<TELL "Acceptable age. ">
<SET ACCEPTABLE-AGE T>
<RETURN>)>)
(T
<TELL "Please tell me your age! >">)>>
<PUTB ,P-LEXV 0 60>)>
<COND (.ACCEPTABLE-AGE
<TELL "Switching to LEWD level." CR>
<SETG NAUGHTY-LEVEL 2>)>>
<ROUTINE V-SAVE ()
<COND (<AND <EQUAL? ,HERE ,AUDIENCE-CHAMBER>
<NOT ,RIDDLE-ANSWERED>>
<TELL
"\"Oh, all right,\" says" T ,SULTAN ", \"I'll bend the rules a tad.
You may SAVE.\"" CR CR>)>
<SETG P-CONT <>> ;"flush anything on input line after SAVE"
<SETG QUOTE-FLAG <>>
<COND (<SAVE>
<TELL ,OK>)
(T
<TELL ,FAILED>)>>
<ROUTINE V-RESTORE ()
<COND (<RESTORE>
<TELL ,OK>)
(T
<TELL ,FAILED>)>>
<ROUTINE TELL-SCORE ()
<TELL "In " N ,MOVES " turn">
<COND (<NOT <EQUAL? ,MOVES 1>>
<TELL "s">)>
<TELL
", you have achieved a score of, um, oh, call it " N ,SCORE " out of "
N ,EXT-MAX " points. This gives you the rank of ">
<COND (,MALE
<TELL <GET ,MALE-RANKS ,RANK>>)
(T
<TELL <GET ,FEMALE-RANKS ,RANK>>)>
<TELL ,PERIOD-CR>>
<GLOBAL MALE-RANKS
<TABLE
"Sandusky Stablehand"
"Knight of Columbus"
"Baron of Buffalo"
"Viscount of Van Wert County"
"Earl of Altoona"
"Marquess of McKeesport"
"Duke of Detroit"
"Prince of Pike's Peak"
"King of Queens"
"Interplanetary Emperor">>
<GLOBAL FEMALE-RANKS
<TABLE
"Sandusky Stablehand"
"Dame of Dayton"
"Baroness of Buffalo"
"Viscountess of Van Wert County"
"Countess of Cleveland"
"Marchioness of McKeesport"
"Duchess of Detroit"
"Princess of Pike's Peak"
"Queen of King of Prussia"
"Interplanetary Empress">>
<ROUTINE V-SCRIPT ()
<PUT 0 8 <BOR <GET 0 8> 1>>
<CORP-NOTICE "begins">
<V-VERSION>>
<ROUTINE V-UNSCRIPT ()
<CORP-NOTICE "ends">
<V-VERSION>
<PUT 0 8 <BAND <GET 0 8> -2>>
<RTRUE>>
<ROUTINE CORP-NOTICE (STRING)
<TELL
"Here " .STRING " a transcript of interaction with " ,LGOP-CAPS ,PERIOD-CR>>
<ROUTINE V-DIAGNOSE ()
<COND (<NOT <FSET? ,CELL ,TOUCHBIT>>
<TELL "You're pretty drunk">
<COND (<RUNNING? ,I-URGE>
<TELL ", and your bladder is about to burst">)>)
(<G? ,ION-DEATH-COUNTER 0>
<TELL
"You now have a " <GET ,ION-TABLE ,ION-DEATH-COUNTER> " headache">)
(<AND <FSET? ,CATACOMBS ,MUNGBIT>
<IN-CATACOMBS>>
<TELL "You have some tiny wounds">)
(<OR <AND ,GONE-APE
<EQUAL? ,SUGAR-RUSH ,GORILLA-ATE-CHOCOLATE>>
<AND <NOT ,GONE-APE>
<EQUAL? ,SUGAR-RUSH ,HUMAN-ATE-CHOCOLATE>>>
<TELL "You're experiencing a sugar rush">)
(<AND <EQUAL? ,HERE ,RUINED-CASTLE-2>
<FSET? ,HERE ,MUNGBIT>
<NOT <EQUAL? ,NAUGHTY-LEVEL 0>>>
<TELL "You feel ">
<COND (<EQUAL? ,NAUGHTY-LEVEL 1>
<TELL "sexually unsatisfied">)
(T
<TELL "horny">)>)
(<AND <EQUAL? ,HERE ,IN-SPACE>
<NOT <FSET? ,WHITE-SUIT ,WORNBIT>>>
<TELL "Brrr">)
(T
<TELL "You are in good health">
<COND (,GONE-APE
<TELL " (for a gorilla)">)>)>
<TELL ,PERIOD-CR>>
<ROUTINE V-INVENTORY ()
<COND (<AND ,GONE-APE
<NOT <FIRST? ,PROTAGONIST>>>
<TELL "You are empty-pawed." CR>)
(T
<DESCRIBE-CONTENTS ,PROTAGONIST <>> ;"you can't have nothing"
<COND (<AND <ULTIMATELY-IN? ,FLASHLIGHT>
<EQUAL? ,HERE ,JOES-BAR ,MENS-ROOM ,LADIES-ROOM>>
<TELL
" It's not clear why you've carried" A ,FLASHLIGHT " into " 'JOES-BAR ", except
that the lighting in the bathrooms isn't too reliable.">)>
<CRLF>)>>
<ROUTINE V-QUIT ()
<TELL-SCORE>
<DO-YOU-WISH "leave the game">
<COND (<YES?>
<QUIT>)
(T
<TELL ,OK>)>>
<ROUTINE V-RESTART ()
<TELL-SCORE>
<DO-YOU-WISH "restart">
<COND (<YES?>
<TELL "Restarting." CR>
<RESTART>
<TELL ,FAILED>)>>
<ROUTINE DO-YOU-WISH (STRING)
<TELL CR "Do you wish to " .STRING "? (Y is affirmative): ">>
<ROUTINE YES? ()
<PRINTI ">">
<READ ,P-INBUF ,P-LEXV>
<COND (<YES-WORD <GET ,P-LEXV 1>>
<RTRUE>)
(<OR <NO-WORD <GET ,P-LEXV 1>>
<EQUAL? <GET ,P-LEXV 1> ,W?N>>
<RFALSE>)
(T
<TELL "Please answer YES or NO. ">
<AGAIN>)>>
<ROUTINE FINISH ("AUX" (REPEATING <>) (CNT 0))
<PROG ()
<CRLF>
<COND (<NOT .REPEATING>
<SET REPEATING T>
<TELL-SCORE>)>
<TELL
"Would you like to start over, restore a saved position, or end this
session of the game?|
(Type RESTART, RESTORE, or QUIT): >">
<PUTB ,P-LEXV 0 10>
<READ ,P-INBUF ,P-LEXV>
<PUTB ,P-LEXV 0 60>
<SET CNT <+ .CNT 1>>
<COND (<EQUAL? <GET ,P-LEXV 1> ,W?RESTAR>
<RESTART>
<TELL ,FAILED>
<AGAIN>)
(<AND <EQUAL? <GET ,P-LEXV 1> ,W?RESTOR>
<NOT <RESTORE>>>
<TELL ,FAILED>
<AGAIN>)
(<OR <EQUAL? <GET ,P-LEXV 1> ,W?QUIT ,W?Q>
<G? .CNT 10>>
<QUIT>)>
<AGAIN>>>
<ROUTINE V-STATUS ()
<TELL "You are currently in ">
<COND (<EQUAL? ,NAUGHTY-LEVEL 0>
<TELL "tame">)
(<EQUAL? ,NAUGHTY-LEVEL 1>
<TELL "suggestive">)
(T
<TELL "lewd">)>
<TELL " mode and are getting ">
<COND (<EQUAL? ,VERBOSITY 0>
<TELL "super-brief">)
(<EQUAL? ,VERBOSITY 1>
<TELL "brief">)
(T
<TELL "verbose">)>
<TELL " descriptions. ">
<TELL-SCORE>>
<ROUTINE V-VERSION ("AUX" (CNT 17) V)
<SET V <BAND <GET 0 1> *3777*>>
<TELL ,LGOP-CAPS CR
"Infocom interactive fiction -- a racy space-age spoof|
Copyright (c) 1986 by Infocom, Inc. All rights reserved.|"
,LGOP-CAPS " 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>>
<CONSTANT D-RECORD-ON 4>
<CONSTANT D-RECORD-OFF -4>
<ROUTINE V-$COMMAND ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-$RANDOM ()
<COND (<NOT <PRSO? ,INTNUM>>
<TELL "ILLEGAL." CR>)
(T
<RANDOM <- 0 ,P-NUMBER>>
<RTRUE>)>>
<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>>
<ROUTINE V-$VERIFY ()
<COND (<AND <PRSO? ,INTNUM>
<EQUAL? ,P-NUMBER 69>>
<TELL N ,SERIAL CR>)
(T
<TELL "Verifying." CR>
<COND (<VERIFY>
<TELL ,OK>)
(T
<TELL CR "** Bad **" CR>)>)>>
<CONSTANT SERIAL 0>
;<GLOBAL DEBUG <>>
;<ROUTINE V-$DEBUG ()
<TELL "O">
<COND (,DEBUG
<SETG DEBUG <>>
<TELL "ff">)
(T
<SETG DEBUG T>
<TELL "n">)>
<TELL ,PERIOD-CR>>
;<ROUTINE CHEAT ()
<SETG SEX-CHOSEN T>
<SETG MALE T>
<FSET ,CELL ,TOUCHBIT>
<FSET ,YOUNG-WOMAN ,FEMALEBIT>
<PUTP ,SIDEKICKS-BODY ,P?SDESC "Trent's body">
<PUTP ,THORBAST ,P?SDESC "Thorbast">
<PUTP ,THORBAST-SWORD ,P?SDESC "his sword">
<PUTP ,YOUNG-WOMAN ,P?SDESC "young woman">
<FSET ,SULTANS-WIFE ,FEMALEBIT>
<FSET ,HAREM-GUARD ,FEMALEBIT>
<PUTP ,SIDEKICK ,P?SDESC "Trent">
<PUTP ,SULTAN ,P?SDESC "Sultan">
<PUTP ,PHOTO ,P?SDESC "photo of Jean Harlow">
<PUTP ,HAREM ,P?ODOR "perfume">
<DEQUEUE I-URGE>
<DEQUEUE I-KIDNAPPING>
<MOVE ,SIDEKICK ,HERE>>
;<ROUTINE V-$PARTS ("AUX" CNT)
<SET CNT 0>
<REPEAT ()
<MOVE <GET ,PARTS-LIST .CNT> ,SIDEKICK>
<SET CNT <+ .CNT 1>>
<COND (<EQUAL? .CNT 8>
<RETURN>)>>
<TELL ,OK>>
;<ROUTINE V-$JUNGLE ()
<CHEAT>
<MOVE ,CHOCOLATE ,PROTAGONIST>
<GOTO ,JUNGLE>>
;<ROUTINE V-$CLEVELAND ()
<CHEAT>
<GOTO ,CLEVELAND>>
;<ROUTINE V-$MARS ()
<CHEAT>
<MOVE ,PAINTING ,PROTAGONIST>
<GOTO ,ROYAL-DOCKS>>
;<ROUTINE V-$SULTAN ()
<CHEAT>
<REPEAT () ;"last digit can't be zero -- number gets reversed"
<SETG WIFE-NUMBER <+ 100 <RANDOM 8270>>>
<COND (<AND <NOT <EQUAL? <MOD ,WIFE-NUMBER 10> 0>>
<NOT <PALINDROME-NUMBER? ,WIFE-NUMBER>>>
<RETURN>)>>
<MOVE ,CODED-MESSAGE ,PROTAGONIST>
<GOTO ,MAIN-HALL-OF-PALACE>>
;<ROUTINE V-$POLE ()
<CHEAT>
<MOVE ,BASKET ,PROTAGONIST>
<MOVE ,BLANKET ,PROTAGONIST>
<MOVE ,TEN-MARSMID-COIN ,PROTAGONIST>
<MOVE ,STAIN ,PROTAGONIST>
<FSET ,STAIN ,TOUCHBIT>
<SETG RAFT-HELD <>>
<FSET ,RAFT ,TOUCHBIT>
<MOVE ,RAFT ,PROTAGONIST>
<GOTO ,ICY-DOCK>>
;<ROUTINE V-$SHOP ()
<CHEAT>
<MOVE ,ONE-MARSMID-COIN ,PROTAGONIST>
<MOVE ,RAFT ,PROTAGONIST>
<SETG RAFT-HELD <>>
<FSET ,RAFT ,TOUCHBIT>
<GOTO ,CANALVIEW-MALL>>
;"subtitle real verbs"
<ROUTINE V-ALARM ()
<COND (<PRSO? ,ROOMS>
<PERFORM-PRSA ,ME>
<RTRUE>)
(T
<TELL "But" T ,PRSO " isn't asleep." CR>)>>
<ROUTINE V-ANSWER ()
<COND (<AND ,AWAITING-REPLY
<YES-WORD <GET ,P-LEXV ,P-CONT>>>
<V-YES>
<STOP>)
(<AND ,AWAITING-REPLY
<NO-WORD <GET ,P-LEXV ,P-CONT>>>
<V-NO>
<STOP>)
(<RUNNING? ,I-SNEEZE>
<RIDDLE-ANSWER>)
(<IN? ,HAREM-GUARD ,HERE>
<PICK-WIFE>)
(T
<TELL "Nobody is awaiting your answer." CR>
<STOP>)>>
<ROUTINE V-ANSWER-KLUDGE ()
<COND (<NOUN-USED ,W?I ,ME>
<V-INVENTORY>)
(T
<SETG P-WON <>>
<TELL ,NO-VERB>
<STOP>)>>
<GLOBAL AWAITING-FAKE-ORPHAN <>>
<ROUTINE ORPHAN-VERB ()
<COND (<NOT <EQUAL? ,HERE ,AUDIENCE-CHAMBER ,BEDROOM>>
<SETG AWAITING-FAKE-ORPHAN <>>
<RFALSE>)>
<PUT ,P-VTBL 0 ,W?ZZMGCK>
<PUT ,P-OVTBL 0 ,W?ANSWER> ;"maybe fix 'what do you want to'"
<PUT ,P-OTBL ,P-VERB ,ACT?ZZMGCK>
<PUT ,P-OTBL ,P-VERBN ,P-VTBL>
<PUT ,P-OTBL ,P-PREP1 0>
<PUT ,P-OTBL ,P-PREP1N 0>
<PUT ,P-OTBL ,P-PREP2 0>
<PUT ,P-OTBL 5 0>
<PUT ,P-OTBL ,P-NC1 1>
<PUT ,P-OTBL ,P-NC1L 0>
<PUT ,P-OTBL ,P-NC2 0>
<PUT ,P-OTBL ,P-NC2L 0>
<SETG P-OFLAG T>>
<ROUTINE V-APPLAUD ()
<COND (<IN-CATACOMBS>
<QUEUE I-BEETLES 6>)>
<TELL "Clap." CR>>
<ROUTINE V-APPLY ()
<COND (<FSET? ,PRSO ,WEARBIT>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(T
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Apply" T ,PRSO " for what? A job?" CR>)>>
<ROUTINE PRE-SPEAK ()
<COND (,GONE-APE
<TELL
"You open " 'MOUTH " to speak, but all that comes out are a few grunts." CR>
<STOP>)
(<FSET? ,EARS ,MUNGBIT>
<TELL ,YOU-CANT "carry on a conversation when " 'EARS " are">
<COND (<EQUAL? ,EARS ,HAND-COVER>
<TELL " covered">)
(T
<TELL " plugged up">)>
<TELL ,PERIOD-CR>
<STOP>)>>
<ROUTINE V-ASK-ABOUT ("AUX" OWINNER)
<COND (<PRSO? ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
(<OR <FSET? ,PRSO ,ACTORBIT>
<AND <PRSO? ,INTNUM>
<EQUAL? ,P-NUMBER ,CHOICE-NUMBER>
<IN? ,SULTANS-WIFE ,HERE>>>
<SET OWINNER ,WINNER>
<SETG WINNER ,PRSO>
<PERFORM ,V?TELL-ABOUT ,ME ,PRSI>
<SETG WINNER .OWINNER>
<THIS-IS-IT ,PRSI>
<THIS-IS-IT ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-FOR ()
<TELL "Unsurprisingly," T ,PRSO " doesn't oblige." CR>>
<ROUTINE V-ASK-NO-ONE-FOR ("AUX" ACTOR)
<COND (<SET ACTOR <FIND-IN ,HERE ,ACTORBIT>>
<PERFORM ,V?ASK-FOR .ACTOR ,PRSO>
<RTRUE>)
(T
<NO-ONE-HERE "ask">)>>
<ROUTINE V-BARTER-WITH ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "But" T ,PRSO " has nothing worth trading for." CR>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-BARTER-FOR ()
<IMPOSSIBLES>>
<ROUTINE V-BEND ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?SPREAD>
<COND (<FSET? ,PRSO ,ACTORBIT>
<V-BOARD>)
(T
<HACK-HACK "Spreading">)>)
(T
<HACK-HACK "Bending">)>>
<ROUTINE V-BITE ()
<HACK-HACK "Biting">>
<ROUTINE V-BLOW ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?EAT ,PRSO>
<RTRUE>)
(T
<CANT-VERB-A-PRSO "blow">)>>
<ROUTINE PRE-BOARD ()
<COND (<IN? ,PROTAGONIST ,PRSO>
<TELL ,LOOK-AROUND>)
(<AND <ULTIMATELY-IN? ,PRSO>
<NOT <PRSO? ,FLEXIBLE-HOLE>>>
<TELL ,HOLDING-IT>)
(<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)>>
<ROUTINE V-BOARD ("AUX" (AV <LOC ,PROTAGONIST>))
<COND (<FSET? ,PRSO ,VEHBIT>
<COND (<NOT <EQUAL? <LOC ,PRSO> ,HERE ,LOCAL-GLOBALS>>
<TELL ,YOU-CANT "board" T ,PRSO " when it's ">
<COND (<FSET? <LOC ,PRSO> ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL TR <LOC ,PRSO>>
<RTRUE>)>
<MOVE ,PROTAGONIST ,PRSO>
<TELL "You are now ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n" T ,PRSO ".">
<COND (<AND <IN? ,SIDEKICK ,HERE>
<PRSO? ,BARGE ,RAFT ,STALLION ,TREE-HOLE>>
<MOVE ,SIDEKICK ,PRSO>
<TELL " " D ,SIDEKICK " gets ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n behind you.">)>
<COND (<AND <PRSO? ,BARGE>
<NOT <FSET? ,BARGE ,TOUCHBIT>>>
<TELL " You notice some simple controls.">)>
<FSET ,PRSO ,TOUCHBIT>
<CRLF>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL
"Let's not beat around the bush. Come out and say what you mean." CR>)
(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN>
<CANT-VERB-A-PRSO "get into">)
(T
<CANT-VERB-A-PRSO "get onto">)>>
<ROUTINE V-BOARD-DIR ()
<RECOGNIZE>>
<ROUTINE V-BURN ()
<COND (<NOT ,PRSI>
<COND (<AND <ULTIMATELY-IN? ,TORCH>
<FSET? ,TORCH ,ONBIT>>
<SETG PRSI ,TORCH>
<TELL "[with the torch]" CR>)
(T
<TELL "You have no source of fire." CR>
<RTRUE>)>)>
<COND (<OR <NOT <PRSI? ,TORCH>>
<NOT <FSET? ,TORCH ,ONBIT>>>
<TELL ,YOU-CANT "burn something with" AR ,PRSI>)
(<AND <PRSO? ,SHEET>
,SHEET-TIED>
<DO-FIRST "untie" ,PRSO>)
(<IN? ,PROTAGONIST ,PRSO>
<DO-FIRST "leave" ,PRSO>)
(<ULTIMATELY-IN? ,PRSO>
<DO-FIRST "drop" ,PRSO>)
(<FSET? ,PRSO ,BURNBIT>
<COND (<AND <PRSO? ,LEAVES>
,LEAVES-PLACED>
<SETG PRSO ,TRELLIS>)>
<REMOVE ,PRSO>
<TELL "In an instant," T ,PRSO>
<COND (<AND <PRSO? ,TRELLIS>
,LEAVES-PLACED>
<REMOVE ,LEAVES>
<SETG LEAVES-PLACED <>>
<TELL " and leaves are">)
(T
<TELL " is">)>
<COND (<PRSO? ,TRELLIS>
<UNDO-TRAP>)
(<PRSO? ,LEAVES>
<SETG LEAVES-PLACED <>>)>
<TELL " consumed by fire." CR>)
(T
<CANT-VERB-A-PRSO "burn">)>>
<ROUTINE V-BUY ()
<TELL "Sorry, there aren't any on sale here." CR>>
<ROUTINE V-BUY-WITH ()
<COND (<PRSI? ,ONE-MARSMID-COIN ,TEN-MARSMID-COIN>
<PERFORM ,V?BUY ,PRSO>
<RTRUE>)
(T
<TELL
"That must be a queer planet you come from, where" A ,PRSI
" is a unit of money." CR>)>>
<ROUTINE V-CALL ()
<COND (<EQUAL? ,HERE ,VIZICOMM-BOOTH>
<PERFORM ,V?SET ,VIZICOMM>
<RTRUE>)
(<NOT <VISIBLE? ,PRSO>>
<CANT-SEE ,PRSO>)
(T
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)>>
<ROUTINE V-CAST-OFF ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?LAUNCH <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<PERFORM ,V?TAKE-OFF ,PRSO>
<RTRUE>)>>
<ROUTINE V-CATCH ()
<TELL "The only thing you're good at catching is a cold." CR>>
<ROUTINE V-CHASTISE ()
<COND (<PRSO? ,INTDIR>
<TELL
,YOULL-HAVE-TO "go in that direction to see what's there." CR>)
(T
<TELL
"Use prepositions to indicate precisely what you want to do: LOOK AT the
object, LOOK INSIDE it, LOOK UNDER it, etc." CR>)>>
<ROUTINE V-CHEER ()
<COND (<PRSO? ,ROOMS>
<TELL ,OK>)
(T
<TELL "Probably," T ,PRSO " is as happy as possible." CR>)>>
<ROUTINE V-CLEAN ()
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Do you also do windows?" CR>>
<ROUTINE V-CLICK ()
<TELL "\"Click.\"" CR>>
<ROUTINE V-CLIMB ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?DOWN>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(<AND <FSET? ,PRSO ,ACTORBIT> ;"GO DOWN ON OBJECT"
<EQUAL? ,P-PRSA-WORD ,W?GO>>
<PERFORM ,V?EAT ,PRSO>
<RTRUE>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<OR <FSET? ,PRSO ,VEHBIT>
<FSET? ,PRSO ,ACTORBIT>>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN ;,PR?INSIDE>
<CANT-VERB-A-PRSO "climb into">)
(T
<CANT-VERB-A-PRSO "climb onto">)>>
<ROUTINE V-CLIMB-OVER ()
<COND (<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-UP ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLOSE ()
<COND (<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,ACTORBIT>
<FSET? ,PRSO ,VEHBIT>>
<CANT-VERB-A-PRSO "close">)
(<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,CONTBIT>>
<COND (<FSET? ,PRSO ,OPENBIT>
<FCLEAR ,PRSO ,OPENBIT>
<TELL "Okay," T ,PRSO " is now closed." CR>
<NOW-DARK?>)
(T
<TELL ,ALREADY-IS>)>)
(T
<CANT-VERB-A-PRSO "close">)>>
<ROUTINE V-COME ()
<COND (<EQUAL? ,NAUGHTY-LEVEL 0>
<TELL "Go." CR>)
(T
<TELL "You're not even breathing hard." CR>)>>
<ROUTINE V-COPULATE ("AUX" (LOVER <>))
<COND (<SET LOVER <FIND-IN ,HERE ,ACTORBIT "with">>
<PERFORM ,V?FUCK .LOVER>
<RTRUE>)
(T
<PERFORM ,V?MAKE ,LOVE>
<RTRUE>)>>
<ROUTINE V-COUNT ()
<IMPOSSIBLES>>
<ROUTINE V-CRAWL-UNDER ()
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CROSS ()
<V-WALK-AROUND>>
<ROUTINE V-CUT ()
<COND (<NOT ,PRSI>
<IMPOSSIBLES>)
(T
<TELL
"To put it bluntly, neither" T ,PRSI " nor you are very sharp." CR>)>>
<ROUTINE V-DECODE ()
<TELL ,YOULL-HAVE-TO "figure it out yourself." CR>>
<ROUTINE V-DEFLATE ()
<IMPOSSIBLES>>
<ROUTINE V-DIG ()
<WASTES>>
<ROUTINE V-DISEMBARK ()
<COND (<NOT ,PRSO>
<COND (<NOT <IN? ,PROTAGONIST ,HERE>>
<PERFORM-PRSA <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<TELL ,LOOK-AROUND>)>)
(<EQUAL? ,P-PRSA-WORD ,W?TAKE> ;"since GET OUT is also TAKE OUT"
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)
(<NOT <IN? ,PROTAGONIST ,PRSO>>
<TELL ,LOOK-AROUND>
<RFATAL>)
(<EQUAL? ,HERE ,CANAL>
<PERFORM ,V?ENTER ,CANAL-OBJECT>
<RTRUE>)
(T
<MOVE ,PROTAGONIST ,HERE>
<TELL "You">
<COND (<IN? ,SIDEKICK ,PRSO>
<MOVE ,SIDEKICK ,HERE>
<TELL " and " D ,SIDEKICK>)>
<TELL " get o">
<COND (<OFF-VEHICLE? ,PRSO>
<TELL "ff">)
(T
<TELL "ut of">)>
<TELL T ,PRSO ".">
<COND (<IN? ,SIDEKICK ,SECOND-SLAB>
<MOVE ,SIDEKICK ,HERE>
<TELL " You also ">
<COND (,SIDEKICKS-BODY-TIED-TO-SLAB
<TELL "untie " D ,SIDEKICK " and help ">
<HIM-HER>)
(T
<TELL "help " D ,SIDEKICK>)>
<TELL " up from" T ,SECOND-SLAB ".">)>
<CRLF>)>>
<ROUTINE V-DRESS ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (<FSET? ,PRSO ,FEMALEBIT>
<TELL "Sh">)
(T
<TELL "H">)>
<TELL "e is dressed!" CR>)
(T
<IMPOSSIBLES>)>)
(T
<SETG PRSO ,ROOMS>
<V-GET-DRESSED>)>>
<ROUTINE V-DRINK ()
<CANT-VERB-A-PRSO "drink">>
<ROUTINE V-DRINK-FROM ()
<IMPOSSIBLES>>
<ROUTINE V-DROP ()
<COND (<NOT <SPECIAL-DROP>>
<COND (<OR <EQUAL? <LOC ,PROTAGONIST> ,BARGE ,RAFT>
<EQUAL? <LOC ,PROTAGONIST> ,TREE-HOLE ,CAGE>>
<MOVE ,PRSO <LOC ,PROTAGONIST>>)
(T
<MOVE ,PRSO ,HERE>)>
<TELL "Dropped." CR>)>>
<ROUTINE SPECIAL-DROP () ;"used by drop and throw"
<COND (<IN-CATACOMBS>
<REMOVE ,PRSO>
<TELL "With a splash," T ,PRSO " is lost forever." CR>)
(<IN-SPACE?>
<MOVE ,PRSO ,PROTAGONIST>
<TELL
"In the absence of gravity," T ,PRSO " floats back into " 'HANDS "s." CR>)
(<EQUAL? ,HERE ,EXIT-SHOP>
<MOVE ,PRSO ,DUST>
<TELL "You lose" T ,PRSO " in the dust." CR>)
(<AND <PRSO? ,TORCH>
<FSET? ,TORCH ,ONBIT>
<IN? ,PROTAGONIST ,BARGE>>
<PERFORM ,V?PUT ,TORCH ,BARGE>
<RTRUE>)>>
<ROUTINE V-EAT ()
<COND (<AND <FSET? ,PRSO ,ACTORBIT>
<NOT ,GONE-APE>
<NOT <EQUAL? ,NAUGHTY-LEVEL 0>>>
<TELL "As you try," T ,PRSO " slaps you across the face.">
<COND (<NOT <PRSO? ,MALE-GORILLA ,FEMALE-GORILLA>>
<TELL " \"Really, we hardly know each other.\"">)>
<CRLF>)
(T
<TELL
"While the foodstuffs of the universe are many and varied," A ,PRSO>
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL " are">)
(T
<TELL " is">)>
<TELL " not one of them." CR>)>>
<ROUTINE V-EMPTY ("AUX" OBJ NXT)
<COND (<NOT ,PRSI>
<SETG PRSI ,GROUND>)>
<COND (<NOT <FSET? ,PRSO ,CONTBIT>>
<TELL ,HUH>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<TELL "But" T ,PRSO " isn't open." CR>)
(<NOT <FIRST? ,PRSO>>
<TELL "But" T ,PRSO " is already empty!" CR>)
(<AND <PRSI? <FIRST? ,PRSO>>
<NOT <NEXT? ,PRSI>>>
<TELL ,THERES-NOTHING "in" T ,PRSO " but" TR ,PRSI>)
(<IN-SPACE?>
<TELL ,YOU-CANT "empty" T ,PRSO " without gravity!" CR>)
(T
<SET OBJ <FIRST? ,PRSO>>
<REPEAT ()
<SET NXT <NEXT? .OBJ>>
<COND (<NOT <EQUAL? .OBJ ,PROTAGONIST>>
<TELL D .OBJ ": ">
<COND (<AND <PRSI? ,TRELLIS>
<EQUAL? .OBJ ,LEAVES>>
<PERFORM ,V?PUT-ON ,LEAVES ,TRELLIS>)
(<FSET? .OBJ ,TAKEBIT>
<MOVE .OBJ ,PROTAGONIST>
<COND (<PRSI? ,HANDS>
<TELL "Taken." CR>)
(<PRSI? ,GROUND>
<PERFORM ,V?DROP .OBJ>)
(<FSET? ,PRSI ,SURFACEBIT>
<PERFORM ,V?PUT-ON .OBJ ,PRSI>)
(T
<PERFORM ,V?PUT .OBJ ,PRSI>)>)
(T
<YUKS>)>)>
<COND (.NXT
<SET OBJ .NXT>)
(T
<RETURN>)>>)>>
<ROUTINE V-EMPTY-FROM ()
<COND (<IN? ,PRSO ,PRSI>
<COND (<FSET? ,PRSO ,TAKEBIT>
<MOVE ,PRSO ,PROTAGONIST>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(T
<YUKS>)>)
(T
<NOT-IN>)>>
<ROUTINE V-ENTER ()
<COND (<FSET? ,PRSO ,DOORBIT>
<DO-WALK <OTHER-SIDE ,PRSO>>
<RTRUE>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>
<RTRUE>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-EXAMINE ()
<COND (<FSET? ,PRSO ,UNTEEDBIT>
<TELL "It looks just like" A ,PRSO ", whatever that is." CR>)
(<FSET? ,PRSO ,ACTORBIT>
<COND (<FIRST? ,PRSO>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)
(T
<NOTHING-INTERESTING>
<TELL "about" TR ,PRSO>)>)
(<OR <FSET? ,PRSO ,DOORBIT>
<FSET? ,PRSO ,SURFACEBIT>>
<V-LOOK-INSIDE>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<V-LOOK-INSIDE>)
(T
<TELL "It's closed." CR>)>)
(<FSET? ,PRSO ,LIGHTBIT>
<TELL "It's o">
<COND (<FSET? ,PRSO ,ONBIT>
<TELL "n">)
(T
<TELL "ff">)>
<TELL ,PERIOD-CR>)
(<FSET? ,PRSO ,READBIT>
<PERFORM ,V?READ ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,NARTICLEBIT>
<SENSE-OBJECT "look">)
(<OR <PROB 25>
<PRSO? ,PSEUDO-OBJECT>>
<TELL "Totally ordinary looking " D ,PRSO ,PERIOD-CR>)
(<PROB 60>
<NOTHING-INTERESTING>
<TELL "about" TR ,PRSO>)
(T
<PRONOUN>
<TELL " look">
<COND (<AND <NOT <FSET? ,PRSO ,PLURALBIT>>
<NOT <PRSO? ,ME>>>
<TELL "s">)>
<TELL " like every other " D ,PRSO " you've ever seen." CR>)>>
<ROUTINE NOTHING-INTERESTING ()
<TELL ,THERES-NOTHING>
<COND (<PROB 25>
<TELL "unusual">)
(<PROB 33>
<TELL "noteworthy">)
(<PROB 50>
<TELL "eye-catching">)
(T
<TELL "special">)>
<TELL " ">>
<ROUTINE V-EXIT ()
<COND (<AND ,PRSO
<FSET? ,PRSO ,VEHBIT>>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(<NOT <IN-EXITABLE-VEHICLE?>>
<DO-WALK ,P?OUT>)>>
<ROUTINE IN-EXITABLE-VEHICLE? ("AUX" AV)
<SET AV <LOC ,PROTAGONIST>>
<COND (<OR <EQUAL? .AV ,RAFT ,BARGE ,CAGE>
<EQUAL? .AV ,TREE-HOLE>>
<PERFORM ,V?DISEMBARK <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-FEED ()
<COND (<ULTIMATELY-IN? ,CHOCOLATE>
<PERFORM ,V?GIVE ,CHOCOLATE ,PRSO>
<RTRUE>)
(T
<TELL "You have no food for" TR ,PRSO>)>>
<ROUTINE V-FILL ()
<COND (<AND <OR <FSET? ,PRSO ,CONTBIT>
<AND <PRSO? ,STAIN ,CREAM>
<FSET? ,STAIN ,MUNGBIT>>>
<OR <PRSI? ,WATER>
<GLOBAL-IN? ,WATER ,HERE>>>
<WASTES>)
(<NOT ,PRSI>
<TELL ,THERES-NOTHING "to fill it with." CR>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-FIND ("OPTIONAL" (WHERE <>) "AUX" (L <LOC ,PRSO>))
<COND (<NOT .L>
<PRONOUN>
<TELL " could be anywhere!" CR>)
(<IN? ,PRSO ,PROTAGONIST>
<TELL "You have it!" CR>)
(<IN? ,PRSO ,HERE>
<TELL "Right in front of you." CR>)
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<GLOBAL-IN? ,PRSO ,HERE>
<PRSO? ,PSEUDO-OBJECT>>
<V-DECODE>)
(<AND <FSET? .L ,ACTORBIT>
<VISIBLE? .L>>
<TELL "Looks as if" T .L " has it." CR>)
(<AND <FSET? .L ,CONTBIT>
<VISIBLE? ,PRSO>
<NOT <IN? .L ,GLOBAL-OBJECTS>>>
<COND (<FSET? .L ,SURFACEBIT>
<TELL "O">)
(<AND <FSET? .L ,VEHBIT>
<NOT <FSET? .L ,INBIT>>>
<TELL "O">)
(T
<TELL "I">)>
<TELL "n" TR .L>)
(.WHERE
<TELL "Beats me." CR>)
(T
<V-DECODE>)>>
<ROUTINE V-FLUSH ()
<TELL "It's your brain that needs flushing." CR>>
<ROUTINE V-FOLLOW ()
<COND (<VISIBLE? ,PRSO>
<TELL "But" T ,PRSO " is right here!" CR>)
(<NOT <FSET? ,PRSO ,ACTORBIT>>
<IMPOSSIBLES>)
(T
<TELL "You have no idea where" T ,PRSO " is." CR>)>>
<GLOBAL FOLLOW-FLAG <>>
<ROUTINE I-FOLLOW ()
<SETG FOLLOW-FLAG <>>
<RFALSE>>
<ROUTINE PRE-FUCK ()
<COND (<G? ,ION-DEATH-COUNTER 0>
<TELL "Not tonight; you have a headache." CR>)>>
<ROUTINE V-FUCK ()
<COND (<EQUAL? ,NAUGHTY-LEVEL 0>
<TELL
"Shocking! What if your mother saw you typing inputs like that?" CR>)
(<NOT <FSET? ,PRSO ,ACTORBIT>>
<TELL "Not in my game, you pansexual pervert!" CR>)
(<EQUAL? ,NAUGHTY-LEVEL 1>
<TELL
"Unfortunately," T ,PRSO
" doesn't seem interested, and it takes two to tango." CR>)
(T
<TELL
"A slap across the face alerts you that" T ,PRSO " isn't that hot to trot.
And not a goddam single cold shower in sight!" CR>)>>
<ROUTINE PRE-GIVE ()
<COND (<AND <VERB? GIVE>
<PRSO? ,HANDS>>
<PERFORM ,V?SHAKE-WITH ,PRSI>
<RTRUE>)
(<IDROP>
<RTRUE>)>>
<ROUTINE V-GET-DRESSED ()
<COND (<PRSO? ,ROOMS>
<TELL "You are!" CR>)
(T
<RECOGNIZE>)>>
<ROUTINE V-GET-DRUNK ()
<COND (<NOT <PRSO? ,ROOMS>>
<RECOGNIZE>)
(<EQUAL? ,HERE ,JOES-BAR>
<PERFORM ,V?BUY ,BEER>
<RTRUE>)
(T
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Here?" CR>)>>
<ROUTINE V-GET-UNDRESSED ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?TAKE-OFF ,GARMENT>
<RTRUE>)
(T
<RECOGNIZE>)>>
<ROUTINE V-GIDDYAP ()
<COND (<IN? ,STALLION ,HERE>
<PERFORM ,V?KICK ,STALLION>
<RTRUE>)
(T
<TELL ,HUH>)>>
<ROUTINE V-GIVE ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<TELL "Briskly," T ,PRSI " refuses your offer." CR>)
(T
<TELL ,YOU-CANT "give" A ,PRSO " to" A ,PRSI "!" CR>)>>
<ROUTINE V-GIVE-UP ()
<COND (<PRSO? ,ROOMS>
<V-QUIT>)
(T
<RECOGNIZE>)>>
<ROUTINE V-HELLO ()
<COND (,PRSO
<TELL
"[The proper way to talk to characters in the story is PERSON, HELLO.]" CR>)
(T
<PERFORM ,V?TELL ,ME>
<RTRUE>)>>
<ROUTINE V-HELP ()
<TELL
"If you're in a bind, maps and hint booklets are available from your
\"dealer,\" or via mail order with the form">
<IN-PACKAGE>
<CRLF>>
<ROUTINE V-HIDE ()
<TELL ,YOU-CANT "hide ">
<COND (,PRSO
<TELL "t">)>
<TELL "here." CR>>
<ROUTINE V-HISS ()
<COND (<VISIBLE? ,FLYTRAP>
<COND (<NOT <FSET? ,FLYTRAP ,MUNGBIT>> ;"prevent double score"
<INCREMENT-SCORE 2 15>)>
<DEQUEUE I-FLYTRAP>
<REMOVE ,FLYTRAP>
<TELL
"The " 'FLYTRAP " assumes the hissing is a spray can of weed killer, dies
of fright, and is immediately consumed by parasites who live inside flytraps
waiting for just such an occasion." CR>)
(T
<TELL "\"Ssss.\"" CR>)>>
<ROUTINE V-IN ("AUX" VEHICLE)
<DO-WALK ,P?IN>>
<ROUTINE V-INFLATE ()
<IMPOSSIBLES>>
<ROUTINE V-INHALE ()
<COND (<NOT ,PRSO>
<TELL ,OK>)
(<PRSO? ,ROOMS>
<TELL "You begin to get light-headed." CR>)
(T
<RECOGNIZE>)>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking">>
<ROUTINE V-KILL ()
<TELL "Relax." CR>>
<ROUTINE V-KISS ()
<TELL "\"Smack.\"" CR>>
<ROUTINE V-KISS-ON ()
<V-KISS>>
<ROUTINE V-KNEEL ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?BOW>
<SORE "waist">)
(<NOT <PRE-POUR>>
<SORE "knee">)>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "Silence answers back." CR>)
(T
<HACK-HACK "Knocking on">)>>
<ROUTINE V-KWEEPA ()
<COND (<IN-CATACOMBS>
<QUEUE I-GATOR 12>)>
<TELL
"A Martian hawk, hearing the cry of a possible mate, flies up and begins
squawking and flapping a mating ritual. As it pauses to catch its breath,
it takes a better look at you, rubs its eyes, and flies quickly away." CR>>
<ROUTINE V-LAND ()
<COND (<AND <NOT ,PRSO>
<EQUAL? <LOC ,PROTAGONIST> ,RAFT ,BARGE>>
<PERFORM-PRSA <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<TELL ,HUH>)>>
<ROUTINE V-LAUGH ()
<TELL "\"Tee hee.\"" CR>>
<ROUTINE V-LAUNCH ()
<TELL "Your brain is out to launch." CR>>
<ROUTINE V-LEAP ()
<COND (<OR <PRSO? ,ROOMS>
<NOT ,PRSO>>
<COND (<EQUAL? ,HERE ,ROOF>
<JIGS-UP
"You leap, and the gravity of Phobos is so weak that you sail up, up, and away!
You achieve escape velocity and sail into the icy depths of space.">)
(<EQUAL? ,HERE ,CLOSET>
<TELL "You still can't reach the shelf." CR>)
(<EQUAL? ,HERE ,ROCKY-CLIFFTOP ,MINARET>
<JIGS-UP "\"Aaaiieeee!\"">)
(T
<WEE>)>)
(<AND ,PRSO
<NOT <IN? ,PRSO ,HERE>>>
<IMPOSSIBLES>)
(T
<WEE>)>>
<ROUTINE V-LEAP-OFF ()
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?LEAP ,PRSO>
<RTRUE>)>>
<ROUTINE V-LEAVE ()
<COND (<NOT ,PRSO>
<SETG PRSO ,ROOMS>)>
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?OUT>)
(<IN? ,PROTAGONIST ,PRSO>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)>>
<ROUTINE V-LICK ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?EAT ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TASTE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LIE-DOWN ()
<COND (<AND <EQUAL? ,HERE ,BEDROOM>
<PRSO? ,ROOMS>>
<SETG PRSO ,BED>)>
<COND (<OR <FSET? ,PRSO ,VEHBIT>
<FSET? ,PRSO ,ACTORBIT>>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE V-LIMBER ()
<TELL "Ahhh. Nothing like a little muscle-loosening." CR>>
<ROUTINE PRE-LISTEN ()
<COND (<AND <FSET? ,EARS ,MUNGBIT>
<NOT ,GONE-APE>>
<TELL "You hear the sound of ">
<COND (<EQUAL? ,EARS ,HAND-COVER>
<TELL "sweating palms">)
(T
<TELL "rustling cotton">)>
<TELL ,PERIOD-CR>)>>
<ROUTINE V-LISTEN ()
<COND (,PRSO
<SENSE-OBJECT "sound">)
(<EQUAL? ,HERE ,BOUDOIR>
<NOT-ALONE-ON-DIVAN>
<CRLF>)
(T
<TELL "You hear nothing of interest." CR>)>>
<ROUTINE V-LOCK ()
<YUKS>>
<ROUTINE PRE-LOOK ()
<COND (<AND <VERB? EXAMINE>
<EQUAL? ,P-PRSA-WORD ,W?DESCRIBE>
<PRSO? ,ODOR>>
<RFALSE>)
(<PLAYER-CANT-SEE>
<RTRUE>)>>
<ROUTINE V-LOOK ()
<COND (<EQUAL? ,HAND-COVER ,EYES>
<UNIFORMLY-COLORED "Palm" "hands over your eyes">)
(<FSET? ,EYES ,MUNGBIT>
<UNIFORMLY-COLORED "Eyelids" "eyes closed">)
(T
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS>)>
<RTRUE>)>>
<ROUTINE UNIFORMLY-COLORED (ROOM-NAME STRING)
<TELL .ROOM-NAME " Room|
This location is dim and uniformly colored, resembling what you see
when you have your " .STRING ". In fact, you have your "
.STRING ,PERIOD-CR>>
<ROUTINE V-LOOK-BEHIND ()
<COND (<FSET? ,PRSO ,DOORBIT>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>
<TELL "There is nothing behind" TR ,PRSO>>
<ROUTINE V-LOOK-DOWN ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?EXAMINE ,GROUND>
<RTRUE>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LOOK-INSIDE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL ,IT-SEEMS-THAT T ,PRSO " has">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(<IN? ,PROTAGONIST ,PRSO>
<DESCRIBE-VEHICLE>)
(<FSET? ,PRSO ,SURFACEBIT>
<TELL ,YOU-SEE>
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL " on" TR ,PRSO>)>
<RTRUE>)
(<FSET? ,PRSO ,DOORBIT>
<TELL "All you can tell is that" T ,PRSO " is ">
<OPEN-CLOSED ,PRSO>
<TELL ,PERIOD-CR>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<SEE-INSIDE? ,PRSO>
<TELL ,YOU-SEE>
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL " in" TR ,PRSO>)>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<FIRST? ,PRSO>>
<COND (<PRE-TOUCH>
<RTRUE>)>
<PERFORM ,V?OPEN ,PRSO>
<RTRUE>)
(T
<DO-FIRST "open" ,PRSO>)>)
(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN ;,PR?INSIDE>
<CANT-VERB-A-PRSO "look inside">)
(T
<TELL
"Even Superman would have trouble seeing through" AR ,PRSO>)>>
<ROUTINE V-LOOK-OVER ()
<V-EXAMINE>>
<ROUTINE V-LOOK-UNDER ()
<COND (<ULTIMATELY-IN? ,PRSO>
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "You're wearing it!" CR>)
(T
<TELL ,HOLDING-IT>)>)
(T
<NOTHING-INTERESTING>
<TELL "under" TR ,PRSO>)>>
<ROUTINE V-LOOK-UP ()
<COND (<PRSO? ,ROOMS>
<COND (<EQUAL? ,HERE ,WELL-BOTTOM>
<TELL ,YOU-SEE " a dot of light." CR>)
(<IN-CATACOMBS>
<TELL ,ONLY-BLACKNESS>)
(<FSET? ,HERE ,INDOORSBIT>
<PERFORM ,V?EXAMINE ,CEILING>
<RTRUE>)
(T
<TELL "The sky is an inky black." CR>)>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LOVE ()
<TELL "Not difficult, considering how lovable" T ,PRSO " ">
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL "are">)
(T
<TELL "is">)>
<TELL ,PERIOD-CR>>
<ROUTINE V-LOWER ()
<V-RAISE>>
<ROUTINE V-MAKE ()
<CANT-VERB-A-PRSO "make">>
<ROUTINE V-MAKE-LOVE ()
<COND (<PRSO? ,LOVE>
<PERFORM ,V?FUCK ,PRSI>
<RTRUE>)
(T
<RECOGNIZE>)>>
<ROUTINE V-MAKE-OUT ("AUX" KISSEE)
<COND (<NOT <PRSO? ,ROOMS>>
<SET KISSEE ,PRSO>)
(<NOT <SET KISSEE <FIND-IN ,HERE ,ACTORBIT "with">>>
<SET KISSEE ,ME>)>
<PERFORM ,V?KISS .KISSEE>
<RTRUE>>
<ROUTINE V-MAKE-WITH ()
<V-MAKE>>
<ROUTINE V-MARRY ()
<TELL "I doubt that" T ,PRSO " is the marrying type." CR>>
<ROUTINE V-MASTURBATE ()
<COND (<AND ,PRSO ;"for JERK OFF OBJECT (FIND RLANDBIT)"
<NOT <PRSO? ,ROOMS>>>
<RECOGNIZE>)
(<EQUAL? ,NAUGHTY-LEVEL 0>
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Don't you know that this causes blindness?" CR>)
(T
<PERFORM ,V?FUCK ,ME>
<RTRUE>)>>
<ROUTINE V-MEASURE ()
<COND (<OR <FSET? ,PRSO ,PARTBIT>
<PRSO? ,ME>>
<TELL "Usual size." CR>)
(T
<TELL "The same size as any other " D ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-MOAN ()
<TELL "\"Ohhhh...\"" CR>>
<ROUTINE V-MOVE ()
<COND (<ULTIMATELY-IN? ,PRSO>
<WASTES>)
(<LOC-CLOSED>
<RTRUE>)
(<FSET? ,PRSO ,TAKEBIT>
<TELL "Moving" T ,PRSO " reveals nothing." CR>)
(<EQUAL? ,P-PRSA-WORD ,W?PULL>
<HACK-HACK "Pulling">)
(T
<CANT-VERB-A-PRSO "move">)>>
<ROUTINE V-MUNG ()
<COND (<PRSO? ,ROOMS> ;"break out"
<COND (<IN? ,PROTAGONIST ,CAGE>
<PERFORM-PRSA ,CAGE>
<RTRUE>)
(T
<TELL "Argh! Pimples!" CR>)>)
(T
<HACK-HACK "Trying to destroy">)>>
<ROUTINE V-NO ()
<COND (<EQUAL? ,AWAITING-REPLY 1>
<TELL "\"Too bad.\" ">
<RIDDLE-DEATH>)
(<EQUAL? ,AWAITING-REPLY 2>
<V-YES>)
(T
<YOU-SOUND "nega">)>>
<ROUTINE NO-WORD (WRD)
<COND (<OR <EQUAL? .WRD ,W?NO ,W?NOPE>
<EQUAL? .WRD ,W?NAH ,W?UH-UH>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE V-OFF ()
<COND (<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<FCLEAR ,PRSO ,ONBIT>
<TELL "Okay," T ,PRSO " is now off." CR>
<NOW-DARK?>)
(T
<TELL "It isn't on!" CR>)>)
(T
<CANT-TURN "ff">)>>
<ROUTINE V-ON ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "Hopefully, your sexy body will do the trick." CR>)
(<FSET? ,PRSO ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ONBIT>
<TELL ,ALREADY-IS>)
(T
<FSET ,PRSO ,ONBIT>
<TELL "Okay," T ,PRSO " is now on." CR>
<NOW-LIT?>)>)
(T
<CANT-TURN "n">)>>
<ROUTINE CANT-TURN (STRING)
<TELL ,YOU-CANT "turn that o" .STRING ,PERIOD-CR>>
<ROUTINE V-OPEN ()
<COND (<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,ACTORBIT>
<FSET? ,PRSO ,VEHBIT>>
<IMPOSSIBLES>)
(<FSET? ,PRSO ,OPENBIT>
<TELL ,ALREADY-IS>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,LOCKEDBIT>
<TELL "It's locked. Very locked." CR>)
(T
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT> ;"important for CELL-DOOR desc"
<TELL "The " D ,PRSO " swings open." CR>)>)
(<FSET? ,PRSO ,CONTBIT>
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT>
<COND (<OR <NOT <FIRST? ,PRSO>>
<FSET? ,PRSO ,TRANSBIT>>
<TELL "Opened." CR>)
(T
<TELL "Opening" T ,PRSO " reveals">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL ,PERIOD-CR>)>
<NOW-LIT?>)>)
(T
<CANT-VERB-A-PRSO "open">)>>
<ROUTINE V-PASS () ;"for PASS WATER"
<TELL ,YOULL-HAVE-TO "say who you want to pass it to." CR>>
<ROUTINE V-PAY ()
<COND (<ULTIMATELY-IN? ,ONE-MARSMID-COIN>
<PERFORM ,V?GIVE ,ONE-MARSMID-COIN ,PRSO>
<RTRUE>)
(<ULTIMATELY-IN? ,TEN-MARSMID-COIN>
<PERFORM ,V?GIVE ,TEN-MARSMID-COIN ,PRSO>
<RTRUE>)
(T
<TELL "You have no money!" CR>)>>
<ROUTINE V-PEE ()
<COND (<RUNNING? ,I-URGE>
<COND (<EQUAL? ,HERE ,MENS-ROOM ,LADIES-ROOM>
<DEQUEUE I-URGE>
<QUEUE I-KIDNAPPING 5>
<COND (<IN? ,PROTAGONIST ,STOOL>
<MOVE ,PROTAGONIST ,HERE>
<TELL "[getting off the stool first]" CR>)>
<TELL "Ahhh...">
<NOTICE-PIZZA-ODOR>)
(T
<SETG AWAITING-REPLY 3>
<QUEUE I-REPLY 2>
<TELL "What, on the floor?" CR>)>)
(T
<V-SHIT T>)>>
<ROUTINE V-PEE-IN ()
<TELL
"Miss Manners would be shocked." ;"next section punted to save space"
;" True; big deal. Miss Manners would be shocked if you put your shrimp fork
on the wrong side of your butter knife. Let me say instead that Ralph Eugene
O'Grady of Tampa, Florida would be shocked, and he frequently puts his shrimp
fork on the wrong side of his butter knife, and once he even put white wine
in a red wine glass!" CR>>
<ROUTINE V-PHONE ()
<COND (<EQUAL? ,HERE ,VIZICOMM-BOOTH>
<V-CALL>)
(T
<TELL ,YOU-CANT-SEE-ANY "phone here!" CR>)>>
<ROUTINE V-PICK ()
<CANT-VERB-A-PRSO "pick">>
<ROUTINE V-PICK-UP ()
<PERFORM ,V?TAKE ,PRSO ,PRSI>
<RTRUE>>
<ROUTINE V-PIN ()
<COND (,PRSI
<TELL ,HUH>)
(<VISIBLE? ,CLOTHES-PIN>
<PERFORM ,V?PUT-ON ,CLOTHES-PIN ,PRSO>
<RTRUE>)
(T
<TELL "You have no pin." CR>)>>
<ROUTINE V-POINT ()
<TELL "That would be pointless." CR>>
<ROUTINE PRE-POUR ()
<COND (<IN-SPACE?>
<TELL "There's no gravity!" CR>)>>
<ROUTINE V-POUR ()
<IMPOSSIBLES>>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing">>
<ROUTINE V-PUSH-DIR ()
<COND (<PRSI? ,INTDIR>
<V-PUSH>)
(T
<RECOGNIZE>)>>
<ROUTINE V-PUSH-OFF ()
<COND (<AND <PRSO? ,ROOMS ,DOCK-OBJECT ,RAFT ,BARGE>
<NOT <IN? ,PROTAGONIST ,HERE>>>
<PERFORM ,V?LAUNCH <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<TELL ,HUH>)>>
<ROUTINE PRE-PUT ()
<COND (<PRSO? ,COCK ,TITS ,CUNT>
<RFALSE> ;"NAUGHTY-BITS-F handles")
(<PRSI? ,GROUND>
<COND (<NOUN-USED ,W?STAIN ,STAIN>
<RFALSE>)
(<AND <PRSO? ,CREAM>
<NOT <EQUAL? <GET ,P-NAMW 0> ,W?JAR>>>
<RFALSE>)>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<PRSO? ,HANDS>
<COND (<AND <VERB? PUT-ON PUT>
<FSET? ,PRSI ,PARTBIT>>
<RFALSE>)
(<VERB? PUT>
<PERFORM ,V?REACH-IN ,PRSI>
<RTRUE>)
(T
<IMPOSSIBLES>)>)
(<AND <NOT <FSET? ,PRSI ,PARTBIT>>
<PLAYER-CANT-SEE>>
<RTRUE>)
(<ULTIMATELY-IN? ,PRSI ,PRSO>
<COND (<AND <PRSO? ,BABY>
<PRSI? ,BLANKET>>
<TELL ,ALREADY-IS>)
(T
<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>)>)
(<AND <VERB? PUT-ON>
<PRSO? ,SOD>
<PRSI? ,HOLE>>
<RFALSE>)
(<UNTOUCHABLE? ,PRSI>
<CANT-REACH ,PRSI>)
(<IDROP>
<RTRUE>)>>
<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-AGAINST ()
<WASTES>>
<ROUTINE V-PUT-BEHIND ()
<WASTES>>
<ROUTINE V-PUT-NEAR ()
<WASTES>>
<ROUTINE V-PUT-ON ()
<COND (<PRSI? ,ME>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(<FSET? ,PRSI ,SURFACEBIT>
<V-PUT>)
(T
<TELL "There's no good surface on" TR ,PRSI>)>>
<ROUTINE V-PUT-THROUGH ()
<COND (<FSET? ,PRSI ,DOORBIT>
<COND (<FSET? ,PRSI ,OPENBIT>
<V-THROW>)
(T
<DO-FIRST "open" ,PRSI>)>)
(<AND <PRSI? <LOC ,PROTAGONIST>>
<EQUAL? ,P-PRSA-WORD ,W?THROW ,W?TOSS ,W?HURL>>
<SETG PRSI <>>
<V-THROW>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-PUT-TO ()
<RECOGNIZE>>
<ROUTINE V-PUT-UNDER ()
<WASTES>>
<ROUTINE V-RAISE ()
<HACK-HACK "Playing in this way with">>
<ROUTINE PRE-RAKE ()
<COND (<NOT <ULTIMATELY-IN? ,RAKE>>
<TELL ,ONLY-WITH-A-RAKE>)>>
<ROUTINE V-RAKE ()
<COND (<NOT ,PRSI>
<SETG PRSI ,RAKE>)>
<COND (<PRSI? ,RAKE>
<TELL "You'll never make it as a gardener." CR>)
(T
<TELL ,ONLY-WITH-A-RAKE>)>>
<ROUTINE V-RAPE ()
<TELL "Unacceptably ungallant behavior." CR>>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<SET OBJ <FIRST? ,PRSO>>
<COND (<OR <FSET? ,PRSO ,ACTORBIT>
<FSET? ,PRSO ,SURFACEBIT>
<NOT <FSET? ,PRSO ,CONTBIT>>>
<YUKS>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
<DO-FIRST "open" ,PRSO>)
(<OR <NOT .OBJ>
<FSET? .OBJ ,INVISIBLE>
<NOT <FSET? .OBJ ,TAKEBIT>>>
<TELL ,THERES-NOTHING "in" TR ,PRSO>)
(T
<TELL "You feel something inside" TR ,PRSO>)>>
<ROUTINE V-READ ()
<COND (<FSET? ,PRSO ,READBIT>
<TELL <GETP ,PRSO ,P?TEXT> CR>)
(T
<CANT-VERB-A-PRSO "read">)>>
<ROUTINE V-RELIEVE ()
<TELL ,HUH>>
<ROUTINE V-REMOVE ()
<COND (<FSET? ,PRSO ,WEARBIT>
<PERFORM ,V?TAKE-OFF ,PRSO>
<RTRUE>)
(<AND <PRSO? ,HANDS>
,HAND-COVER>
<PERFORM ,V?UNCOVER ,HAND-COVER>
<RTRUE>)
(<AND <PRSO? ,HANDS>
,RAFT-HELD>
<PERFORM ,V?DROP ,RAFT>
<RTRUE>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-RETURN ("AUX" ACTOR)
<COND (<NOT ,PRSI>
<COND (<SET ACTOR <FIND-IN ,HERE ,ACTORBIT "to">>
<PERFORM ,V?GIVE ,PRSO .ACTOR>
<RTRUE>)
(T
<NO-ONE-HERE "return it to">)>)
(<FSET? ,PRSI ,ACTORBIT>
<PERFORM ,V?GIVE ,PRSO ,PRSI>
<RTRUE>)
(T
<PERFORM ,V?PUT ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-RIP ()
<COND (<PRSO? ,SCRAP-OF-PAPER ,CODED-MESSAGE ,MATCHBOOK ,MAP>
<WASTES>)
(T
<TELL "Unrippable." CR>)>>
<ROUTINE V-ROLL ()
<TELL "A rolling " D ,PRSO " gathers no moss." CR>>
<ROUTINE V-RUB ()
<PERFORM ,V?TOUCH ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SAVE-SOMETHING ()
<TELL "Sorry, but" T ,PRSO " is beyond help." CR>>
<ROUTINE V-SAY ("AUX" V)
<COND (<AND ,AWAITING-REPLY
<YES-WORD <GET ,P-LEXV ,P-CONT>>>
<V-YES>
<STOP>)
(<AND ,AWAITING-REPLY
<NO-WORD <GET ,P-LEXV ,P-CONT>>>
<V-NO>
<STOP>)
(<RUNNING? ,I-SNEEZE>
<RIDDLE-ANSWER>)
(<IN? ,HAREM-GUARD ,HERE>
<PICK-WIFE>)
(<EQUAL? <GET ,P-LEXV ,P-CONT> ,W?KWEEPA>
<V-KWEEPA>
<STOP>)
(<AND <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?GIDDAP ,W?GIDDYAP>
<IN? ,STALLION ,HERE>>
<V-GIDDYAP>
<STOP>)
(<AND <OR <VISIBLE? ,BEM>
<VISIBLE? ,FLYTRAP>>
<OR <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?SCAT ,W?BOO>
<EQUAL? <GET ,P-LEXV ,P-CONT> ,W?SCRAM ,W?SHOO>>>
<V-SCAT>
<STOP>)
(<SET V <FIND-IN ,HERE ,ACTORBIT>>
<TELL "You must address" T .V " directly." CR>
<STOP>)
(T
<PERFORM ,V?TELL ,ME>
<STOP>)>>
<ROUTINE V-SCAT ("AUX" (SCATEE <>))
<COND (<VISIBLE? ,FLYTRAP>
<SET SCATEE ,FLYTRAP>)
(<VISIBLE? ,BEM>
<SET SCATEE ,BEM>)>
<COND (.SCATEE
<TELL "A weak attempt to scare away" AR .SCATEE>)
(T
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "\"Scat\" to you too!" CR>)>>
<ROUTINE V-SCORE ("AUX" ACTOR) ;"old fashioned V-SCORE is now V-STATUS"
<COND (,PRSO
<PERFORM ,V?FUCK ,PRSO>
<RTRUE>)
(<EQUAL? ,NAUGHTY-LEVEL 0>
<V-STATUS>)
(<SET ACTOR <FIND-IN <LOC ,PROTAGONIST> ,ACTORBIT "with">>
<PERFORM ,V?FUCK .ACTOR>
<RTRUE>)
(T
<NO-ONE-HERE "score with">)>>
<ROUTINE V-SEARCH ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<V-SHAKE>)
(<IN? ,PROTAGONIST ,PRSO>
<DESCRIBE-VEHICLE>)
(<AND <FSET? ,PRSO ,CONTBIT>
<NOT <FSET? ,PRSO ,OPENBIT>>>
<DO-FIRST "open" ,PRSO>)
(<FSET? ,PRSO ,CONTBIT>
<TELL "You find">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(T
<CANT-VERB-A-PRSO "search">)>>
<ROUTINE V-SET ()
<COND (<PRSO? ,ROOMS>
<WEE>)
(<AND <PRSO? ,INTDIR>
<EQUAL? <LOC ,PROTAGONIST> ,BARGE ,RAFT>>
<PERFORM-PRSA <LOC ,PROTAGONIST> ,INTNUM>
<RTRUE>)
(<NOT ,PRSI>
<COND (<FSET? ,PRSO ,TAKEBIT>
<HACK-HACK "Turning">)
(T
<TELL ,YNH TR ,PRSO>)>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-SGIVE ()
<PERFORM ,V?GIVE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SHAKE ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "That wouldn't be polite." CR>)
(T
<HACK-HACK "Shaking">)>>
<ROUTINE V-SHAKE-WITH ()
<COND (<NOT <PRSO? ,HANDS>>
<RECOGNIZE>)
(<NOT <FSET? ,PRSI ,ACTORBIT>>
<TELL "I don't think" T ,PRSI " even has hands." CR>)
(T
<PERFORM ,V?THANK ,PRSI>
<RTRUE>)>>
<ROUTINE V-SHIT ("OPTIONAL" (NUMBER-ONE <>))
<TELL "You don't have to go ">
<COND (.NUMBER-ONE
<TELL "wee-wee">)
(T
<TELL "poo-poo">)>
<TELL " at the moment." CR>>
<ROUTINE V-SHOW ()
<TELL "It doesn't look like" T ,PRSI " is interested." CR>>
<ROUTINE V-SHUT-UP ()
<COND (<PRSO? ,ROOMS>
<TELL "[I hope you're not addressing me...]" CR>)
(T
<PERFORM ,V?CLOSE ,PRSO>
<RTRUE>)>>
<ROUTINE V-SIGH ()
<TELL "\"Ahhhh...\"" CR>>
<ROUTINE V-SINK ()
<IMPOSSIBLES>>
<ROUTINE V-SIT ("AUX" VEHICLE)
<COND (<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
<PERFORM ,V?BOARD .VEHICLE>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE V-SKIP ()
<COND (<AND <IN-CATACOMBS>
<IN? ,PROTAGONIST ,HERE>>
<QUEUE I-CRABS 10>
<TELL "Splash." CR>)
(T
<WEE>)>>
<ROUTINE V-SLEEP ()
<TELL "You're not tired." CR>>
<ROUTINE PRE-SMELL ()
<COND (<AND <FSET? ,NOSE ,MUNGBIT>
<NOT ,GONE-APE>>
<TELL ,YOU-CANT "smell a thing with " 'NOSE " blocked." CR>)>>
<ROUTINE V-SMELL ()
<COND (<NOT ,PRSO>
<PERFORM-PRSA ,ODOR>
<RTRUE>)
(T
<SENSE-OBJECT "smell">)>>
<ROUTINE SENSE-OBJECT (STRING)
<PRONOUN>
<TELL " " .STRING>
<COND (<AND <NOT <FSET? ,PRSO ,PLURALBIT>>
<NOT <PRSO? ,ME>>>
<TELL "s">)>
<TELL " just like" AR ,PRSO>>
<ROUTINE V-SPUT-ON ()
<PERFORM ,V?PUT-ON ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SRUB ()
<PERFORM ,V?RUB ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSHOW ()
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-STAIN ()
<COND (<NOT ,PRSI>
<COND (<AND <ULTIMATELY-IN? ,STAIN>
<NOT <FSET? ,STAIN ,UNTEEDBIT>>>
<APPLY-STAIN ,PRSO>)
(T
<TELL "You have no stain." CR>)>)
(<EQUAL? ,PRSI ,STAIN>
<APPLY-STAIN ,PRSO>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-STAND ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?HOLD> ;"for HOLD UP OBJECT"
<WASTES>)
(<AND <EQUAL? ,P-PRSA-WORD ,W?GET>
<PRSO? ,ROOMS>
<EQUAL? ,HERE ,INNER-HAREM ,BOUDOIR>
<EQUAL? ,NAUGHTY-LEVEL 2>
,MALE>
<TELL "You're already quite hard." CR>)
(<AND <FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<NOT <EQUAL? <LOC ,PROTAGONIST> ,TREE-HOLE ,CAGE>>>
<PERFORM ,V?DISEMBARK <LOC ,PROTAGONIST>>
<RTRUE>)
(<AND ,PRSO
<FSET? ,PRSO ,TAKEBIT>>
<WASTES>)
(<AND <EQUAL? ,HERE ,INNER-HAREM>
<NOT <EQUAL? ,NAUGHTY-LEVEL 0>>>
<TELL D ,SULTANS-WIFE " tugs you back down." CR>)
(T
<TELL "You're already standing." CR>)>>
<ROUTINE V-STAND-ON ()
<COND (<PRSO? ,STOOL>
<PERFORM ,V?BOARD ,STOOL>
<RTRUE>)
(T
<WASTES>)>>
<ROUTINE V-STELL ()
<PERFORM ,V?TELL ,PRSI>
<RTRUE>>
<ROUTINE V-STHROW ()
<PERFORM ,V?THROW-TO ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SUCK ()
<COND (<OR <FSET? ,PRSO ,ACTORBIT>
<EQUAL? ,NAUGHTY-LEVEL 0>>
<PERFORM ,V?EAT ,PRSO>
<RTRUE>)
(T
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Done. Some turn-on, huh?" CR>)>>
<ROUTINE V-SUCKLE ()
<IMPOSSIBLES>>
;<ROUTINE V-SWHIP ()
<PERFORM ,V?WHIP ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SWIM ()
<COND (<OR <PRSO? ,WATER>
<AND <NOT ,PRSO>
<GLOBAL-IN? ,WATER ,HERE>>>
<TELL "This is no time for">)
(T
<TELL "Your head must be">)>
<TELL " swimming." CR>>
<ROUTINE V-SWING ()
<COND (,PRSI
<PERFORM ,V?KILL ,PRSI ,PRSO>
<RTRUE>)
(T
<TELL "\"Whoosh.\"" CR>)>>
<ROUTINE V-SWRAP ()
<PERFORM ,V?WRAP ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE PRE-TAKE ()
<COND (<AND <PRSO? ,HANDS>
,PRSI
<PRSI? ,HAND-COVER>>
<PERFORM ,V?UNCOVER ,HAND-COVER>
<RTRUE>)
(<OR <AND <PRSO? ,CLOTHES-PIN>
<PRSI? ,NOSE>
<FSET? ,CLOTHES-PIN ,WORNBIT>>
<AND <PRSO? ,COTTON-BALLS>
<PRSI? ,EARS>
<FSET? ,COTTON-BALLS ,WORNBIT>>
<AND <PRSO? ,LIP-BALM>
<PRSI? ,MOUTH>
<FSET? ,LIP-BALM ,WORNBIT>>>
<PERFORM ,V?REMOVE ,PRSO>
<RTRUE>)
(<AND <NOT <FSET? ,PRSO ,PARTBIT>>
<PLAYER-CANT-SEE>>
<RTRUE>)
(<LOC-CLOSED>
<RTRUE>)
(<IN? ,PROTAGONIST ,PRSO>
<TELL "You're ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n it!" CR>)
(<OR <IN? ,PRSO ,PROTAGONIST>
<AND <ULTIMATELY-IN? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>>>
<COND (<AND <PRSO? ,COMIC-BOOK>
<PRSI? ,POCKET>>
<RFALSE>)
(<FSET? ,PRSO ,WORNBIT>
<TELL "You're already wearing">)
(T
<TELL "You already have">)>
<TELL T ,PRSO ,PERIOD-CR>)
(<AND ,HAND-COVER
<NOT <PRSO? ,EYES ,EARS, NOSE>>>
<TELL
,YOU-CANT "pick up anything while using " 'HANDS "s to cover" TR ,HAND-COVER>)
(<AND <IN? ,PRSO ,TREE-HOLE>
<IN? ,FLYTRAP ,TREE-HOLE>>
<PERFORM ,V?REACH-IN ,TREE-HOLE>
<RTRUE>)
(<NOT ,PRSI>
<RFALSE>)
(<IN? ,PRSO ,PRSI>
<RFALSE>)
(<PRSO? ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<AND <PRSO? ,SHEET>
<PRSI? ,WINDOW>
,SHEET-HANGING>
<PERFORM ,V?MOVE ,SHEET>
<RTRUE>)
(<AND <PRSO? ,SHEET>
<PRSI? ,BED>
<NOT <FSET? ,SHEET ,TOUCHBIT>>>
<RFALSE>)
(<AND <PRSO? ,BABY ,BLANKET>
<PRSI? ,BABY ,BLANKET>
<IN? ,BLANKET ,BABY>>
<PERFORM ,V?REMOVE ,BABY>
<RTRUE>)
(<AND <PRSO? ,BLANKET>
<PRSI? ,BABY>
<IN? ,BLANKET ,BABY>>
<RFALSE>)
(<NOT <IN? ,PRSO ,PRSI>>
<NOT-IN>)
(T
<SETG PRSI <>>
<RFALSE>)>>
<ROUTINE V-TAKE ()
<COND (<EQUAL? <ITAKE> T>
<COND (<AND <PRSO? ,COTTON-BALLS> ;"possible as gorilla"
<FSET? ,COTTON-BALLS ,WORNBIT>>
<FCLEAR ,COTTON-BALLS ,WORNBIT>
<FCLEAR ,EARS ,MUNGBIT>)
(<AND <PRSO? ,CLOTHES-PIN> ;"possible as gorilla"
<FSET? ,CLOTHES-PIN ,WORNBIT>>
<FCLEAR ,CLOTHES-PIN ,WORNBIT>
<FCLEAR ,NOSE ,MUNGBIT>)>
<TELL "Taken." CR>)>>
<ROUTINE V-TAKE-A-LEAK ()
<COND (<PRSO? ,ROOMS>
<V-PEE>)
(T
<RECOGNIZE>)>>
<ROUTINE V-TAKE-A-SHIT ()
<COND (<PRSO? ,ROOMS>
<V-SHIT>)
(T
<RECOGNIZE>)>>
<ROUTINE V-TAKE-OFF ()
<COND (<PRSO? ,ROOMS>
<COND (<EQUAL? ,P-PRSA-WORD ,W?GET>
<COND (<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<TELL "[of" T <LOC ,PROTAGONIST> "]" CR>
<PERFORM ,V?DISEMBARK <LOC ,PROTAGONIST>>
<RTRUE>)
(<EQUAL? ,NAUGHTY-LEVEL 0>
<V-STAND>)
(T
<PERFORM ,V?FUCK ,ME>
<RTRUE>)>)
(T
<PERFORM-PRSA ,GARMENT>
<RTRUE>)>)
(<FSET? ,PRSO ,WORNBIT>
<FCLEAR ,PRSO ,WORNBIT>
<TELL "Okay, you're no longer wearing" TR ,PRSO>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?DISEMBARK ,PRSO>
<RTRUE>)
(T
<TELL "You aren't wearing" TR ,PRSO>)>>
<ROUTINE V-TAKE-WITH ()
<TELL "Sorry," T ,PRSI " is no help in getting" TR ,PRSO>>
<ROUTINE V-TASTE ()
<SENSE-OBJECT "taste">>
<ROUTINE V-TELL ()
<COND (<AND <PRSO? ,STALLION>
,P-CONT>
<SETG CLOCK-WAIT T>
<SETG WINNER ,STALLION>
<RTRUE>)
(<OR <FSET? ,PRSO ,ACTORBIT>
<AND <PRSO? ,INTNUM>
<IN? ,SULTANS-WIFE ,HERE>>>
<COND (<AND <PRSO? ,INTNUM>
<NOT <EQUAL? ,P-NUMBER ,CHOICE-NUMBER>>>
<TELL "\"That's not my number!\"" CR>
<STOP>)
(,P-CONT
<COND (<PRSO? ,INTNUM>
<SETG WINNER ,SULTANS-WIFE>)
(T
<SETG WINNER ,PRSO>)>
<SETG CLOCK-WAIT T>
<RTRUE>)
(T
<TELL
"Hmmm ..." T ,PRSO " looks at you expectantly,
as if you seemed to be about to talk." CR>)>)
(<AND <PRSO? ,FLYTRAP ,BEM>
<OR <EQUAL? <GET ,P-LEXV ,P-CONT> ,W?SCAT ,W?BOO>
<EQUAL? <GET ,P-LEXV ,P-CONT> ,W?SCRAM ,W?SHOO>>>
<V-SCAT>
<STOP>)
(T
<CANT-VERB-A-PRSO "talk to">
<STOP>)>>
<ROUTINE V-TELL-ABOUT ()
<COND (<PRSO? ,ME>
<PERFORM ,V?WHAT ,PRSI>
<RTRUE>)
(T
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>)>>
<ROUTINE V-THANK ()
<COND (<NOT ,PRSO>
<TELL "[Just doing my job.]" CR>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "\"You're welcome.\"" CR>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-THROW ()
<COND (<NOT <SPECIAL-DROP>>
<COND (<EQUAL? ,HERE ,CANAL>
<PERFORM ,V?PUT ,PRSO ,CANAL-OBJECT>
<RTRUE>)
(,PRSI
<MOVE ,PRSO ,HERE>
<TELL "You missed." CR>)
(T
<MOVE ,PRSO ,HERE>
<TELL "Thrown." CR>)>)>>
;<ROUTINE V-THROW-OVERBOARD ()
<COND (<AND <EQUAL? <LOC ,PROTAGONIST> ,BARGE ,RAFT>
<GLOBAL-IN? ,CANAL-OBJECT ,HERE>>
<PERFORM ,V?PUT ,PRSO ,CANAL-OBJECT>
<RTRUE>)
(T
<TELL "One normally tries this on a boat." CR>)>>
<ROUTINE V-THROW-TO ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<PERFORM ,V?GIVE ,PRSO ,PRSI>
<RTRUE>)
(T
<PERFORM ,V?THROW ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-THROW-UP ()
<COND (<PRSO? ,ROOMS>
<V-VOMIT>)
(T
<PERFORM ,V?THROW ,PRSO>
<RTRUE>)>>
<ROUTINE V-TIE ()
<COND (<AND <OR <FSET? ,PRSO ,ACTORBIT>
<FSET? ,PRSI ,ACTORBIT>>
<NOT <EQUAL? ,NAUGHTY-LEVEL 0>>>
<TELL "Kinky!" CR>
<RTRUE>)
(<EQUAL? ,P-PRSA-WORD ,W?TIE>
<TELL
"You've tied" T ,PRSO "! In the third quarter, with forty seconds on the
clock, the score is " D ,PRSO " 17, player 17!!! But seriously, folks, y">)
(T ;"if you used STRAP instead of TIE"
<TELL "Y">)>
<TELL "ou can't tie" TR ,PRSO>>
<ROUTINE V-TIE-TOGETHER ()
<IMPOSSIBLES>>
<ROUTINE PRE-TOUCH ()
<COND (<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)>>
<ROUTINE V-TOUCH ()
<COND (<LOC-CLOSED>
<RTRUE>)
(<EQUAL? ,NAUGHTY-LEVEL 0>
<HACK-HACK "Touching">)
(T
<HACK-HACK "Fondling">)>>
<ROUTINE V-UNCOVER ()
<COND (<PRSO? ,HAND-COVER>
<SENSE-AGAIN ,HAND-COVER>
<SETG HAND-COVER <>>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?UNDRESS ,OBJECT>
<RTRUE>)
(T
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL "They're">)
(<FSET? ,PRSO ,FEMALEBIT>
<TELL "She's">)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "He's">)
(T
<TELL "It's">)>
<TELL " not covered!" CR>)>>
<ROUTINE SENSE-AGAIN (BODY-PART)
<FCLEAR .BODY-PART ,MUNGBIT>
<TELL "You can once again sense with" TR .BODY-PART>>
<ROUTINE V-UNDRESS ()
<COND (,PRSO
<COND (<FSET? ,PRSO ,ACTORBIT>
<PERFORM ,V?FUCK ,PRSO>
<RTRUE>)
(T
<IMPOSSIBLES>)>)
(T
<SETG PRSO ,ROOMS>
<V-GET-UNDRESSED>)>>
<ROUTINE V-UNLOCK ()
<COND (,PRSI
<IMPOSSIBLES>)
(<FSET? ,PRSO ,LOCKEDBIT>
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Your nose is key-shaped, I suppose?" CR>)
(<FSET? ,PRSO ,DOORBIT>
<TELL "But" T ,PRSO " isn't locked." CR>)
(T
<YUKS>)>>
<ROUTINE V-UNROLL ()
<IMPOSSIBLES>>
<ROUTINE V-UNTIE ()
<IMPOSSIBLES>>
<ROUTINE V-USE ()
<TELL
,YOULL-HAVE-TO "be more specific about how you want to use" TR ,PRSO>>
<ROUTINE V-USE-QUOTES ()
<COND (<IN? ,HAREM-GUARD ,HERE>
<PICK-WIFE ,PRSO>)
(T
<SEE-MANUAL "say something \"out loud.\"">)>>
<ROUTINE V-VOMIT ()
<COND (<AND <IN? ,PIZZA ,HERE>
<FSET? ,PIZZA ,TOUCHBIT>>
<TELL "Just keep trying to eat that " D ,PIZZA ,PERIOD-CR>)
(T
<TELL
"You stick a finger down your throat, but to no avail." CR>)>>
<ROUTINE V-WALK ("AUX" AV VEHICLE PT PTS STR OBJ RM)
<SET AV <LOC ,PROTAGONIST>>
<COND (<NOT ,P-WALK-DIR>
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>)
(<AND <PRSO? ,P?OUT>
<IN-EXITABLE-VEHICLE?>>
<RTRUE>)
(<AND <PRSO? ,P?DOWN>
<EQUAL? .AV ,STOOL ,STALLION>>
<PERFORM ,V?DISEMBARK .AV>
<RTRUE>)
(<AND <PRSO? ,P?IN>
<EQUAL? ,HERE ,LABORATORY>>
<PERFORM ,V?BOARD ,CAGE>
<RTRUE>)
(<AND <PRSO? ,P?IN>
<NOT <GETPT ,HERE ,P?IN>>
<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
<NOT <ULTIMATELY-IN? .VEHICLE>>>
<PERFORM ,V?BOARD .VEHICLE>
<RTRUE>)
(<AND ,RAFT-HELD
<NOT <IN? ,PROTAGONIST ,RAFT>>>
<TELL
"If you want to walk away, you'll either have to take the raft
or let go of it!" CR>
<RFATAL>)
(<AND <FSET? .AV ,VEHBIT>
<NOT <EQUAL? .AV ,STALLION>>>
<COND (<AND <EQUAL? ,HERE ,CELL>
<EQUAL? .AV ,STOOL>
,HOLE-OPEN
<EQUAL? ,PRSO ,P?UP>>
<HOLE-ENTER-F>
<RTRUE>)
(T
<NOT-GOING-ANYWHERE>)>)
(<OR <FSET? ,EYES ,MUNGBIT>
<EQUAL? ,HAND-COVER ,EYES>>
<OPEN-YOUR-EYES!>
<RFATAL>)
(<SET PT <GETPT ,HERE ,PRSO>>
<COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
<GOTO <GETB .PT ,REXIT>>)
(<EQUAL? .PTS ,NEXIT>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<EQUAL? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<COND (<EQUAL? .RM ,ROOMS> ;"catacombs fake-move"
<RTRUE>)>
<GOTO .RM>)
(T
<RFATAL>)>)
(<EQUAL? .PTS ,CEXIT>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<TELL ,CANT-GO>
<RFATAL>)>)
(<EQUAL? .PTS ,DEXIT>
<COND (<FSET? <SET OBJ <GETB .PT ,DEXITOBJ>> ,OPENBIT>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,DEXITSTR>>
<THIS-IS-IT .OBJ>
<TELL .STR CR>
<RFATAL>)
(T
<THIS-IS-IT .OBJ>
<DO-FIRST "open" .OBJ>
<RFATAL>)>)>)
(T
<COND (<PRSO? ,P?OUT ,P?IN>
<V-WALK-AROUND>)
(<OR <EQUAL? ,HERE ,WELL-BOTTOM ,FORGOTTEN-STOREHOUSE>
<EQUAL? ,HERE ,BURIAL-CHAMBER ,LADDER-ROOM>>
<TELL
"You wade into the dark, but find no passage in that direction." CR>)
(T
<TELL ,CANT-GO>)>
<RFATAL>)>>
<ROUTINE NOT-GOING-ANYWHERE ("AUX" AV)
<SET AV <LOC ,PROTAGONIST>>
<TELL "You're not going anywhere until you get ">
<COND (<OFF-VEHICLE? .AV>
<TELL "off">)
(T
<TELL "out of">)>
<TELL TR .AV>
<RFATAL>>
<ROUTINE V-WALK-AROUND ()
<SETG AWAITING-REPLY 2>
<QUEUE I-REPLY 2>
<TELL "Did 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 (<OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>>
<COND (<FSET? ,PRSO ,ACTORBIT>
<TELL "He's">)
(T
<TELL "It's">)>
<TELL " here!" 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-FOR ()
<COND (<VISIBLE? ,PRSO>
<V-FOLLOW>)
(T
<TELL "You may be waiting quite a while." CR>)>>
<ROUTINE V-WEAR ()
<COND (<NOT <FSET? ,PRSO ,WEARBIT>>
<CANT-VERB-A-PRSO "wear">)
(T
<TELL "You're ">
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "already">)
(T
<MOVE ,PRSO ,PROTAGONIST>
<FSET ,PRSO ,WORNBIT>
<TELL "now">)>
<TELL " wearing" TR ,PRSO>)>>
<ROUTINE V-WHAT ()
<TELL "Good question." CR>>
<ROUTINE V-WHERE ()
<V-FIND T>>
<ROUTINE V-WHIP ()
<COND (<EQUAL? ,NAUGHTY-LEVEL 0>
<V-KILL>)
(T
<TELL "Oooo! S & M! Love it!!!" CR>)>>
<ROUTINE V-WRAP ()
<WASTES>>
<ROUTINE V-YELL ()
<SORE "throat">
<STOP>>
<ROUTINE I-REPLY ()
<SETG AWAITING-REPLY <>>
<RFALSE>>
<GLOBAL AWAITING-REPLY <>>
<ROUTINE V-YES ()
<COND (<EQUAL? ,AWAITING-REPLY 1>
<SETG AWAITING-REPLY <>>
<SETG AWAITING-FAKE-ORPHAN T>
<SETG SULTAN-COUNTER 0>
<QUEUE I-SNEEZE 2>
<DEQUEUE I-SULTAN>
<TELL
"\"Here, then, is the riddle. Don't strain " 'HEAD "; no one's ever
gotten it right.\" You hear a growling snarl from somewhere nearby.|
\"Some say I'm pointless,|
yet many are obsessed by me.|
I have caused heroic gambles|
and sown endless frustration.|
Uncounted deaths have I caused.|
What am I?\"" CR>
<COND (<IN? ,SIDEKICK ,HERE>
<TELL
" " D ,SIDEKICK " steps briskly forward. \"That's easy!\" ">
<HE-SHE>
<TELL
" yells. \"A grapefruit!\" As the eunuchs snicker behind their weapons, the "
D ,SULTAN " cries \"Wrongo!\" and ">
<TIGER-EATS-SIDEKICK>
<TELL
" \"Your turn to guess,\" says the " D ,SULTAN ", looking gleeful." CR>)>
<RTRUE>)
(<EQUAL? ,AWAITING-REPLY 2>
<TELL "That was just a rhetorical question." CR>)
(<EQUAL? ,AWAITING-REPLY 3>
<V-PEE-IN>)
(T
<YOU-SOUND "posi">)>>
<ROUTINE YOU-SOUND (STRING)
<TELL "You sound rather " .STRING "tive." CR>>
<ROUTINE YES-WORD (WRD)
<COND (<OR <EQUAL? .WRD ,W?YES ,W?Y ,W?YUP>
<EQUAL? .WRD ,W?OK ,W?OKAY ,W?SURE>>
<RTRUE>)
(T
<RFALSE>)>>
;"subtitle object manipulation"
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" ;CNT OBJ)
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<YUKS>)>
<RFATAL>)
(<PRE-TOUCH>
<RFATAL>)
;(<AND <NOT <ULTIMATELY-IN? ,PRSO>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,PROTAGONIST>> 100>>
<COND (.VB
<TELL
"It's too heavy, considering your current load." CR>)>
<RFATAL>)
(<G? <CCOUNT ,PROTAGONIST> 10>
<COND (.VB
<TELL
"You're already juggling as many items as you could possibly carry." CR>)>
<RFATAL>)>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<COND (<IN? ,PROTAGONIST ,PRSO>
<RFALSE> ;"Hope this is right -- pdl 4/22/86")
(<AND <PRSO? ,RAFT>
,RAFT-HELD>
<SETG RAFT-HELD <>>)>
<MOVE ,PRSO ,PROTAGONIST>>
;"IDROP is called by PRE-GIVE and PRE-PUT.
IDROP acts directly as PRE-DROP, PRE-THROW and PRE-PUT-THROUGH."
<ROUTINE IDROP ()
<COND (<PRSO? ,COCK ,CUNT ,TITS>
<RFALSE>)
(<PRSO? ,HANDS>
<COND (<VERB? DROP THROW GIVE>
<IMPOSSIBLES>)
(T
<RFALSE>)>)
(<AND <PRSO? ,POWER-SWITCH>
<VERB? THROW>>
<RFALSE>)
(<AND <PRSO? ,HEAD>
<VERB? PUT>
<PRSI? ,HOLE>>
<TELL "Hey wow! Vertigo city!" CR>)
(<AND <PRSO? ,ME>
<VERB? PUT>
<FSET? ,PRSI ,ACTORBIT>>
<PERFORM ,V?BOARD ,PRSI>
<RTRUE>)
(<AND <PRSI? ,ME>
<VERB? PUT>
<FSET? ,PRSO ,ACTORBIT>>
<PERFORM ,V?BOARD ,PRSO>
<RTRUE>)
(<AND <VERB? PUT PUT-THROUGH>
<PRSO? ,SHEET>
<PRSI? ,WINDOW>>
<RFALSE>)
(<PRSO? ,HAND-COVER> ;"for LET GO OF NOSE"
<PERFORM ,V?UNCOVER ,PRSO>
<RTRUE>)
(<AND <PRSO? ,NOSE>
<PRSI? ,CLOTHES-PIN>> ;"for PUT NOSE IN PIN"
<RFALSE>)
(<PRSO? ,COMIC-BOOK>
<COND (<PRSI? ,POCKET>
<TELL ,ALREADY-IS>)
(T
<PERFORM ,V?REMOVE ,COMIC-BOOK>
<RTRUE>)>)
(<AND <NOT <ULTIMATELY-IN? ,PRSO>>
<NOT <PRSO? ,LEAVES>>
<NOT <AND <PRSO? ,RAFT>
,RAFT-HELD>>>
<COND (<OR <PRSO? ,ME>
<FSET? ,PRSO ,PARTBIT>>
<IMPOSSIBLES>)
(<AND <PRSO? ,SOD>
<PRSI? ,HOLE>>
<RFALSE>)
(T
<TELL
"That's easy for you to say since you don't even have" TR ,PRSO>)>
<RFATAL>)
(<AND <NOT <IN? ,PRSO ,PROTAGONIST>>
<FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<DO-FIRST "open" <LOC ,PRSO>>)
(<FSET? ,PRSO ,WORNBIT>
<COND (<AND <VERB? PUT PUT-ON>
<OR <AND <PRSO? ,CLOTHES-PIN>
<PRSI? ,NOSE>>
<AND <PRSO? ,COTTON-BALLS>
<PRSI? ,EARS>>
<AND <PRSO? ,LIP-BALM>
<PRSI? ,MOUTH>>>>
<TELL ,SENILITY-STRIKES>)
(T
<DO-FIRST "remove" ,PRSO>)>)
(T
<RFALSE>)>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT <FSET? .X ,WORNBIT>>
<SET CNT <+ .CNT 1>>)>
<COND (<NOT <SET X <NEXT? .X>>>
<RETURN>)>>)>
.CNT>
;"Gets SIZE of supplied object, recursing to nth level."
<ROUTINE WEIGHT (OBJ "AUX" CONT (WT 0))
<COND (<SET CONT <FIRST? .OBJ>>
<REPEAT ()
<SET WT <+ .WT <WEIGHT .CONT>>>
<COND (<NOT <SET CONT <NEXT? .CONT>>>
<RETURN>)>>)>
<+ .WT <GETP .OBJ ,P?SIZE>>>
;"subtitle describers"
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (VERB-IS-LOOK <>)
"AUX" (FIRST-VISIT <>) (NUM 0))
<COND (<NOT ,LIT>
<TELL ,TOO-DARK>
<COND (<AND <EQUAL? ,HERE ,CLOSET>
<NOT <FSET? ,NOSE ,MUNGBIT>>>
<TELL " There's a distinctive odor here, though.">)>
<CRLF>
<RFALSE> ;"so DESCRIBE-CONTENTS of room isn't called")>
<COND (<NOT <FSET? ,HERE ,TOUCHBIT>>
<COND (<NOT <EQUAL? ,HERE ,CANAL ,CATACOMBS ,LONG-CORRIDOR>>
<FSET ,HERE ,TOUCHBIT>)>
<SET FIRST-VISIT T>)>
<TELL D ,HERE>
<SET NUM <CANAL-LOC>>
<COND (<EQUAL? .NUM 10>
<TELL ", near the ">
<COND (<EQUAL? ,NEARER-DOCK ,MY-KIND-OF-DOCK>
<TELL "ea">)
(T
<TELL "we">)>
<TELL "st bank">)>
<COND (<AND <FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<NOT ,DONT-PRINT-VEHICLE>>
<TELL ", ">
<COND (<FSET? <LOC ,PROTAGONIST> ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n" T <LOC ,PROTAGONIST>>)>
<CRLF>
<COND (<OR .VERB-IS-LOOK
<EQUAL? ,VERBOSITY 2>
<AND .FIRST-VISIT
<EQUAL? ,VERBOSITY 1>>>
<TELL " ">
<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 " " .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 " " .STR>
<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>
<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
,PROTAGONIST>>
<TELL " ">)>
<SET PARA? T>)
(<EQUAL? .LEVEL T>
<TELL " ">)>
<COND (<EQUAL? .OBJ ,HERE>
<TELL ,YOU-SEE>)
(<EQUAL? .OBJ ,PROTAGONIST>
<TELL "You have">)
(<FSET? .OBJ ,SURFACEBIT>
<TELL "Sitting on" T .OBJ " is">)
(T
<TELL ,IT-SEEMS-THAT 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"
<COND (<PRSO? ,DIVAN>
<NOT-ALONE-ON-DIVAN>
<CRLF>)
(T
<TELL "Other than yourself, you can see">
<COND (<NOT <DESCRIBE-NOTHING>>
<COND (<FSET? ,PRSO ,INBIT>
<TELL " in">)
(T
<TELL " on">)>
<TELL TR ,PRSO>)>
<RTRUE>)>>
<ROUTINE DESCRIBE-NOTHING ()
<COND (<DESCRIBE-CONTENTS ,PRSO 2>
<COND (<NOT <IN? ,PROTAGONIST ,PRSO>>
<CRLF>)>
<RTRUE>)
(T ;"nothing"
<RFALSE>)>>
;"subtitle movement and death"
<CONSTANT REXIT 0>
<CONSTANT UEXIT 1>
<CONSTANT NEXIT 2>
<CONSTANT FEXIT 3>
<CONSTANT CEXIT 4>
<CONSTANT DEXIT 5>
<CONSTANT NEXITSTR 0>
<CONSTANT FEXITFCN 0>
<CONSTANT CEXITFLAG 1>
<CONSTANT CEXITSTR 1>
<CONSTANT DEXITOBJ 1>
<CONSTANT DEXITSTR 1>
<ROUTINE GOTO (NEW-LOC "OPTIONAL" (DONT-DESCRIBE-SIDEKICK <>) "AUX" OLD-HERE)
<COND (<AND <EQUAL? ,HERE ,THRONE-ROOM>
<NOT <FSET? ,THETA ,MUNGBIT>>>
<FSET ,THETA ,MUNGBIT>
<FSET ,THETA ,NDESCBIT>
<FCLEAR ,THETA ,ACTORBIT>
<FCLEAR ,THETA ,FEMALEBIT>
<FCLEAR ,THETA ,NARTICLEBIT>
<PUTP ,THETA ,P?SDESC "different-looking angle">
<TELL
"As you leave, you hear behind you a sound like a" ,45-DEGREE-ANGLE " landing
on a pile of" ,45-DEGREE-ANGLE "s.">
<EXPLETIVE>
<TELL "Not again!\" you hear Mitre moan." CR CR>)>
<SET OLD-HERE ,HERE>
<OPEN-EYES-AND-REMOVE-HANDS>
<MOVE ,PROTAGONIST .NEW-LOC>
<COND (<IN? .NEW-LOC ,ROOMS>
<SETG HERE .NEW-LOC>)
(T
<SETG HERE <LOC .NEW-LOC>>)>
<SETG LIT <LIT? ,HERE>>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<AND <DESCRIBE-ROOM>
<NOT <EQUAL? ,VERBOSITY 0>>>
<DESCRIBE-OBJECTS>)>
<COND (<AND <IN? ,SIDEKICK .OLD-HERE>
<IN? ,PROTAGONIST ,HERE> ;"don't, if you're in a vehicle"
<NOT .DONT-DESCRIBE-SIDEKICK>>
<SIDEKICK-FOLLOWS-YOU>)>
<SETG HOLE-MOVE <>>
<RTRUE>>
<ROUTINE SIDEKICK-FOLLOWS-YOU ()
<COND (<EQUAL? ,HERE ,BOUDOIR>
<MOVE ,SIDEKICK ,HERE>)
(T
<MOVE ,SIDEKICK <LOC ,PROTAGONIST>>)>
<COND (,HOLE-MOVE
<TELL " A few seconds later, you ">
<COND (<LIT? ,HERE>
<TELL "see ">)
(T
<TELL "feel ">)>
<TELL
D ,SIDEKICK "'s " <PICK-ONE ,SIDEKICK-PARTS> " appear,
followed almost immediately by the rest of ">
<HIM-HER>
<TELL ,PERIOD-CR>)
(T
<NORMAL-SIDEKICK-FOLLOW>)>>
<ROUTINE NORMAL-SIDEKICK-FOLLOW ()
<TELL " " D ,SIDEKICK <PICK-ONE ,FOLLOWS> CR>>
<GLOBAL SIDEKICK-PARTS
<LTABLE
0
"earlobe"
"nose"
"big toe"
"elbow"
"left buttock">>
<GLOBAL FOLLOWS
<LTABLE
0
" trails along."
" follows you."
" enters just a few steps behind you."
" loyally stays at your side.">>
<ROUTINE JIGS-UP (DESC)
<TELL .DESC>
<TELL CR CR
" **** You have died ****" CR>
<FINISH>>
;"subtitle useful utility routines"
<ROUTINE ACCESSIBLE? (OBJ "AUX" L) ;"revised 2/18/86 by SEM"
<COND (<NOT .OBJ>
<RFALSE>)>
<SET L <LOC .OBJ>>
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
(<EQUAL? .OBJ ,PSEUDO-OBJECT>
<COND (<EQUAL? ,LAST-PSEUDO-LOC ,HERE>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT .L>
<RFALSE>)
(<EQUAL? .L ,GLOBAL-OBJECTS>
<RTRUE>)
(<AND <EQUAL? .L ,LOCAL-GLOBALS>
<GLOBAL-IN? .OBJ ,HERE>>
<RTRUE>)
(<NOT <EQUAL? <META-LOC .OBJ> ,HERE>>
<RFALSE>)
(<EQUAL? .L ,WINNER ,HERE>
<RTRUE>)
(<AND <FSET? .L ,OPENBIT>
<ACCESSIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE VISIBLE? (OBJ "AUX" L) ;"revised 5/2/84 by SEM and SWG"
<COND (<NOT .OBJ>
<RFALSE>)>
<SET L <LOC .OBJ>>
<COND (<ACCESSIBLE? .OBJ>
<RTRUE>)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE UNTOUCHABLE? (OBJ)
;"figures out whether, due to vehicle-related locations, object is touchable"
<COND (<NOT .OBJ>
<RFALSE>)
;"next four clauses are special cases for LGOP"
(<OR <ULTIMATELY-IN? .OBJ ,SHELF>
<EQUAL? .OBJ ,SHELF>>
<COND (<IN? ,PROTAGONIST ,STOOL>
<RFALSE>)
(T
<RTRUE>)>)
(<AND <ULTIMATELY-IN? .OBJ ,TREE-HOLE>
<NOT <IN? ,PROTAGONIST ,TREE-HOLE>>>
<RTRUE>)
(<AND <ULTIMATELY-IN? .OBJ ,CAGE>
<NOT <IN? ,PROTAGONIST ,CAGE>>>
<RTRUE>)
(<AND <IN? ,PROTAGONIST ,FIRST-SLAB>
<OR <NOUN-USED ,W?STRAP ,PSEUDO-OBJECT>
<NOUN-USED ,W?STRAPS ,PSEUDO-OBJECT>>>
<RFALSE>)
(<IN? ,PROTAGONIST ,HERE>
<RFALSE>)
(<OR <ULTIMATELY-IN? .OBJ <LOC ,PROTAGONIST>>
<EQUAL? .OBJ <LOC ,PROTAGONIST>>
<IN? .OBJ ,GLOBAL-OBJECTS> ;"me, hands, etc.">
<RFALSE>)
;"next four clauses are a special case for LGOP"
(<AND <EQUAL? .OBJ ,RAFT>
,RAFT-HELD>
<RFALSE>)
(<AND <EQUAL? .OBJ ,CANAL-OBJECT ,WATER ,BARGE>
<EQUAL? <LOC ,PROTAGONIST> ,BARGE ,RAFT>>
<RFALSE>)
(<AND <PRSO? ,SHEET>
,SHEET-TIED> ;"if it's tied you can reach it from bed"
<RFALSE>)
(<AND <PRSO? ,SHEET>
<IN? ,PROTAGONIST ,BED>
<NOT <FSET? ,SHEET ,TOUCHBIT>>>
;"sheet is not in the bed, but it's described as being so"
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE META-LOC (OBJ)
<REPEAT ()
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ ,GLOBAL-OBJECTS>
<RETURN ,GLOBAL-OBJECTS>)>
<COND (<IN? .OBJ ,ROOMS>
<RETURN .OBJ>)
(T
<SET OBJ <LOC .OBJ>>)>>>
<ROUTINE OTHER-SIDE (DOBJ "AUX" (P 0) TEE) ;"finds room on others side of door"
<REPEAT ()
<COND (<L? <SET P <NEXTP ,HERE .P>> ,LOW-DIRECTION>
<RETURN <>>)
(T
<SET TEE <GETPT ,HERE .P>>
<COND (<AND <EQUAL? <PTSIZE .TEE> ,DEXIT>
<EQUAL? <GETB .TEE ,DEXITOBJ> .DOBJ>>
<RETURN .P>)>)>>>
<ROUTINE ULTIMATELY-IN? (OBJ "OPTIONAL" (CONT <>)) ;"formerly HELD?"
<COND (<NOT .CONT>
<SET CONT ,WINNER>)>
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ .CONT>
<RTRUE>)
(<IN? .OBJ ,ROOMS>
<RFALSE>)
;(<IN? .OBJ ,GLOBAL-OBJECTS>
<RFALSE>)
(T
<ULTIMATELY-IN? <LOC .OBJ> .CONT>)>>
<ROUTINE SEE-INSIDE? (OBJ)
<AND .OBJ
<NOT <FSET? .OBJ ,INVISIBLE>>
<OR <FSET? .OBJ ,TRANSBIT>
<FSET? .OBJ ,OPENBIT>>>>
<ROUTINE GLOBAL-IN? (OBJ1 OBJ2 "AUX" TEE)
<COND (<SET TEE <GETPT .OBJ2 ,P?GLOBAL>>
<ZMEMQB .OBJ1 .TEE <- <PTSIZE .TEE> 1>>)>>
<ROUTINE FIND-IN (WHERE FLAG-IN-QUESTION
"OPTIONAL" (STRING <>) "AUX" OBJ RECURSIVE-OBJ)
<SET OBJ <FIRST? .WHERE>>
<COND (<NOT .OBJ>
<RFALSE>)>
<REPEAT ()
<COND (<AND <FSET? .OBJ .FLAG-IN-QUESTION>
<NOT <FSET? .OBJ ,INVISIBLE>>>
<COND (.STRING
<TELL "[" .STRING T .OBJ "]" CR>)>
<RETURN .OBJ>)
(<SET RECURSIVE-OBJ <FIND-IN .OBJ .FLAG-IN-QUESTION>>
<RETURN .RECURSIVE-OBJ>)
(<NOT <SET OBJ <NEXT? .OBJ>>>
<RETURN <>>)>>>
;<ROUTINE DIRECTION? (OBJ)
<COND (<OR <EQUAL? .OBJ ,P?NORTH ,P?SOUTH ,P?EAST>
<EQUAL? .OBJ ,P?WEST ,P?NE ,P?NW>
<EQUAL? .OBJ ,P?SE ,P?SW>>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE NOW-DARK? ()
<COND (<AND ,LIT
<NOT <LIT? ,HERE>>>
<SETG LIT <>>
<TELL " It is now too dark to see." CR>)>>
<ROUTINE NOW-LIT? ()
<COND (<AND <NOT ,LIT>
<LIT? ,HERE>>
<SETG LIT T>
<CRLF>
<V-LOOK>)>>
<ROUTINE LOC-CLOSED ("AUX" (L <LOC ,PRSO>))
<COND (<AND <FSET? .L ,CONTBIT>
<NOT <FSET? .L ,OPENBIT>>
<FSET? ,PRSO ,TAKEBIT>>
<DO-FIRST "open" .L>)
(T
<RFALSE>)>>
<ROUTINE DO-WALK (DIR)
<SETG P-WALK-DIR .DIR>
<PERFORM ,V?WALK .DIR>>
<ROUTINE STOP ()
<SETG P-CONT <>>
<SETG QUOTE-FLAG <>>
<RFATAL>>
<ROUTINE ROB (WHO "OPTIONAL" (WHERE <>) "AUX" N X)
<SET X <FIRST? .WHO>>
<REPEAT ()
<COND (<ZERO? .X>
<RETURN>)>
<SET N <NEXT? .X>>
<MOVE .X .WHERE>
<SET X .N>>>
<ROUTINE WRONG-SEX-WORD (OBJ MALE-WORD FEMALE-WORD)
<COND (<NOT ,SEX-CHOSEN>
<RFALSE>)
(<OR <AND ,MALE
<NOUN-USED .FEMALE-WORD .OBJ>>
<AND <NOT ,MALE>
<NOUN-USED .MALE-WORD .OBJ>>>
<TELL "There's no">
<COND (<EQUAL? .OBJ ,SIDEKICK>
<TELL " one by that name">)
(<PRSO? .OBJ>
<PRSO-PRINT>)
(T
<PRSI-PRINT>)>
<TELL " here.">
<COND (<NOT <EQUAL? ,NAUGHTY-LEVEL 0>>
<TELL
" [I see you've been playing both as a male and as a female! I guess
you're the type who goes both ways, eh? Nudge, nudge, wink, wink!]">)>
<SETG P-WON <>>
<CRLF>)
(T
<RFALSE>)>>
<ROUTINE HACK-HACK (STR)
<TELL .STR T ,PRSO>
<HO-HUM>>
<ROUTINE HO-HUM ()
<TELL <PICK-ONE ,HO-HUM-LIST> CR>>
<GLOBAL HO-HUM-LIST
<LTABLE
0
" doesn't do anything."
" accomplishes nothing."
" has no desirable effect.">>
<ROUTINE YUKS ()
<TELL <PICK-ONE ,YUK-LIST> CR>>
<GLOBAL YUK-LIST
<LTABLE
0
"What a concept."
"Nice try."
"You've gotta be kidding."
"Think again, humanoid.">>
<ROUTINE IMPOSSIBLES ()
<TELL <PICK-ONE ,IMPOSSIBLE-LIST> CR>>
<GLOBAL IMPOSSIBLE-LIST
<LTABLE
0
"Fat chance."
"Imposterous!"
"Dream on."
"Prepossible!"
"It's the looney bin for you!"
"You have lost your mind.">>
<ROUTINE WASTES ()
<TELL <PICK-ONE ,WASTE-LIST> CR>>
<GLOBAL WASTE-LIST
<LTABLE 0
"A bigger waste of time than selling green cheese to the man in the moon."
"It's not worth it. Believe me."
"Useless. Unhelpful. Non-productivish. Ineffectivoid."
"There's another turn down the drain."
"Why bother?">>