borderzone/verbs.zil
2019-04-14 01:02:51 -04:00

2058 lines
49 KiB
Plaintext

"VERBS for
BORDER ZONE
(c) Copyright 1986 Infocom, Inc. All Rights Reserved."
;"subtitle game commands"
<GLOBAL VERBOSITY 1> ;"0 = super-brief, 2 = verbose (1 not allowed)"
<ROUTINE V-VERBOSE ()
<SETG VERBOSITY 2>
<TELL "Verbose descriptions." CR CR>
<V-LOOK>>
<ROUTINE V-BRIEF ()
<TELL
"In BORDER ZONE, you can choose only between VERBOSE descriptions (the
default) or SUPERBRIEF descriptions." CR>>
<ROUTINE V-SUPER-BRIEF ()
<SETG VERBOSITY 0>
<TELL "Superbrief descriptions." CR>>
<GLOBAL SAVE-FLAG <>>
<ROUTINE V-SAVE ("AUX" SV FLG)
<SETG SAVE-FLAG T>
<COND (<EQUAL? <SET SV <SAVE>> 1>
<CHECK-REFRESH>
<TELL "Ok." CR>)
(<EQUAL? .SV 2>
<CHECK-REFRESH>
<COND (,G-WATCH
<PERFORM ,V?OFF-2 ,TIMING-OBJECT ,GUARDS>
<CRLF>
<PERFORM ,V?WATCH ,GUARDS>
<UPDATE-CHRONOGRAPH 0 T>)
(,SL-WATCH
<PERFORM ,V?OFF-2 ,TIMING-OBJECT ,SEARCHLIGHTS>
<CRLF>
<PERFORM ,V?WATCH ,SEARCHLIGHTS>
<UPDATE-CHRONOGRAPH 0 T>)
(T
<REDISPLAY-CHRONOGRAPH>
<FLUSH-WATCHER>)>
<TELL "Ok." CR>)
(T
<TELL "Failed." CR>)>
<UPDATE-TIME>
<SETG SAVE-FLAG <>>
<RTRUE>>
<ROUTINE V-RESTORE ()
<COND (<ZERO? ,SCENARIO>
<INIT-STATUS-LINE 3>
<CRLF>)>
<COND (<RESTORE>
<TELL "Ok." CR CR>
<V-LOOK>)
(T
<TELL "Failed." CR>)>>
<ROUTINE V-SCRIPT ()
<PRINT "[Transcripting o">
<TELL "n.]" CR>
<DIROUT ,D-PRINTER-ON>
<TRANSCRIPT "begin">
<RTRUE>>
<ROUTINE V-UNSCRIPT ()
<TRANSCRIPT "end">
<DIROUT ,D-PRINTER-OFF>
<PRINT "[Transcripting o">
<TELL "ff.]" CR>
<RTRUE>>
<ROUTINE TRANSCRIPT (STR)
<DIROUT ,D-SCREEN-OFF>
<TELL CR "Here " .STR "s a transcript of interaction with" CR>
<V-VERSION>
<DIROUT ,D-SCREEN-ON>
<RTRUE>>
<ROUTINE V-DIAGNOSE ()
<COND (<OR <L? ,HEALTH 9> <L? ,WARMTH 9>>
<TELL "You are suffering from ">
<SLOWDOWN T>
<TELL ,PERIOD-CR>)
(<NOT <EQUAL? ,SCENARIO 2>>
<TELL
"You're in good enough shape to accomplish your goal." CR>)
(T
<TELL
"You are in reasonably good health, though your arm hurts badly and
you've lost some blood." CR>)>>
<ROUTINE V-INVENTORY ()
<SETG CLOCK-MOVE 5>
<SETG D-BIT <- ,WORNBIT ;,WEARBIT>>
<COND (<NOT <DESCRIBE-CONTENTS ,WINNER
<>
<+ ,D-ALL? ,D-PARA?>>>
<TELL "You are empty-handed.">)>
<SETG D-BIT ,WORNBIT ;,WEARBIT>
<DESCRIBE-CONTENTS ,WINNER
<>
<+ ,D-ALL? ,D-PARA?>>
<SETG D-BIT <>>
<CRLF>>
;<ROUTINE PRINT-AMOUNT (AMT)
<TELL "$" N </ .AMT 100> ".">
<SET AMT <MOD .AMT 100>>
<COND (<0? .AMT>
<TELL "00">)
(<L? .AMT 10>
<TELL "0" N .AMT>)
(T
<TELL N .AMT>)>>
<ROUTINE V-QUIT ()
<DO-YOU-WISH "leave the game">
<COND (<YES?>
<QUIT>)
(T
<TELL "Okay." CR>)>>
<ROUTINE V-RESTART ()
<DO-YOU-WISH "restart">
<COND (<YES?>
<TELL "Restarting." CR>
<RESTART>
<TELL "Failed." CR>)>>
<ROUTINE DO-YOU-WISH (STRING)
<TELL CR "Do you wish to " .STRING "?:">>
<ROUTINE YES? ("OPTIONAL" (TO-PERSON <>))
<COND (.TO-PERSON
<PRINTI ">>">)
(T
<PRINTI ">">)>
<PUTB ,P-INBUF 1 0>
<READ ,P-INBUF ,P-LEXV>
<COND (<YES-WORD? <GET ,P-LEXV 1>>
<RTRUE>)
(<EQUAL? <GET ,P-LEXV 1> ,W?N ,W?NO>
<RFALSE>)
(<EQUAL? .TO-PERSON ,BAD-SPY>
<TELL "\"Please, just a simple yes or no.\"">
<CRLF>
<CRLF>
<AGAIN>)
(T
<TELL "Please answer YES or NO.">)>
<CRLF>
<CRLF>
<AGAIN>>
<ROUTINE YES-WORD? (WRD)
<COND (<EQUAL? .WRD ,W?YES ,W?Y>
<RTRUE>)
(<EQUAL? .WRD ,W?OK ,W?OKAY>
<RTRUE>)
(T
<RFALSE>)>>
<ROUTINE FINISH ("OPTIONAL" (CONTIN <>) "AUX" W)
<HLIGHT ,H-NORMAL>
<CRLF>
<CRLF>
<TELL
"Would you like to ">
<COND (.CONTIN
<TELL "continue with the next scenario, ">)>
<TELL "start over, restore a saved position, get a hint, or
end this session of the game?|
(Type ">
<COND (.CONTIN
<TELL "CONTINUE, ">)>
<TELL "RESTART, RESTORE, HINT, or QUIT) >">
<PUTB ,P-INBUF 1 0>
<READ ,P-INBUF ,P-LEXV>
<COND (<EQUAL? <SET W <GET ,P-LEXV 1>> ,W?RESTART>
<RESTART>
<TELL "Failed." CR>
<FINISH .CONTIN>)
(<EQUAL? .W ,W?RESTORE>
<COND (<RESTORE>
<>)
(T
<TELL "Failed." CR>
<FINISH .CONTIN>)>)
(<EQUAL? .W ,W?HINT>
<V-HINT>
<AGAIN>)
(<EQUAL? .W ,W?QUIT ,W?Q>
<QUIT>)
(<AND .CONTIN
<EQUAL? .W ,W?CONTINUE ,W?C>>
<FLUSH-BAD-SCENARIO .CONTIN>
<COND (<EQUAL? .CONTIN 2>
<START-SCENARIO-2 T>)
(T
<START-SCENARIO-3 T>)>)
(T
<AGAIN>)>>
<ROUTINE V-VERSION ("AUX" (CNT 17) V)
<SET V <BAND <GET 0 1> *3777*>>
<TELL CR
"BORDER ZONE: A Game of Intrigue|
Copyright (c) 1987 by Infocom, Inc. All rights reserved.|
BORDER ZONE 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>>)>>
<TELL " / ">
<V-$ID>
<CRLF>>
<CONSTANT D-RECORD-ON 4>
<CONSTANT D-RECORD-OFF -4>
<ROUTINE V-$RANDOM ()
<COND (<NOT <PRSO? ,INTNUM>>
<TELL "Illegal call to #RANDOM." CR>)
(T
<RANDOM <- 0 ,P-NUMBER>>
<RTRUE>)>>
<ROUTINE V-$ID ()
<TELL "Interpreter ">
<PRINTN <GETB 0 30>>
<TELL " Version ">
<PRINTC <GETB 0 31>>
<CRLF>
<RTRUE>>
<ROUTINE V-$VERIFY ()
<COND (<AND <PRSO? ,INTNUM>
<EQUAL? ,P-NUMBER 811>>
<TELL N ,SERIAL CR>)
(T
<V-$ID>
<TELL CR "[Verifying.]" CR>
<COND (<VERIFY>
<TELL "Ok." CR>)
(T
<TELL CR "** Bad **" CR>)>)>>
<CONSTANT SERIAL 0>
;<GLOBAL DEBUG <>>
;<ROUTINE V-$DEBUG ()
<TELL "Debugging o">
<COND (,DEBUG
<SETG DEBUG <>>
<TELL "ff">)
(T
<SETG DEBUG T>
<TELL "n">)>
<TELL "." CR>>
;"subtitle real verbs"
<ROUTINE V-ADVANCE ()
<WASTES>>
<ROUTINE V-ALARM ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?ALARM ,ME>
<RTRUE>)
(T
<TELL "But" T ,PRSO " isn't asleep." CR>)>>
<ROUTINE V-ANSWER ()
<TELL "Nobody is awaiting your answer." CR>
<STOP>>
<ROUTINE V-ARREST ()
<TELL "Be glad it isn't you that's arrested." CR>>
<ROUTINE V-ASK-ABOUT ()
<COND (<PRSO? ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<SETG WINNER ,PRSO>
<PERFORM ,V?TELL-ABOUT ,ME ,PRSI>
<RTRUE>)
;(<FSET? ,PRSO ,PERSON>
<TELL
"A long silence tells you that" T ,PRSO " isn't interested in talking about">
<COND (<IN? ,PRSI ,ROOMS>
<TELL " that." CR>)
(T
<TELL TR ,PRSI>)>)
(T
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)>>
<ROUTINE V-ASK-FOR ()
<TELL "Unsurprisingly," T ,PRSO " doesn't oblige." CR>>
<ROUTINE V-BITE ()
<HACK-HACK "Biting ">>
<ROUTINE V-BEND ()
<COND (<AND ,PRSI <NOT <EQUAL? ,PRSI ,WAY>>>
<TELL "Huh?" CR>)
(T
<TELL "You can't bend that." CR>)>>
<ROUTINE PRE-BOARD ()
<COND (<IN? ,PROTAGONIST ,PRSO>
<TELL ,LOOK-AROUND>)
(<HELD? ,PRSO>
<TELL ,HOLDING-IT>)>>
<ROUTINE V-BOARD ()
<TELL "You can't get into " THE ,PRSO "!" CR>>
<ROUTINE V-BUY ()
<TELL "It's not for sale." CR>>
<ROUTINE V-BUY-WITH ("AUX" ACTOR) ;"PAY WITH --"
<IMPOSSIBLES>>
<ROUTINE V-BUY-OBJECT-WITH ("AUX" ACTOR)
<IMPOSSIBLES>>
<ROUTINE V-CALL () ;"prso need not be in room"
<COND (<AND <NOT <EQUAL? <META-LOC ,PRSO> ,HERE>>
<NOT <EQUAL? ,PRSO ,ME>>
<NOT <GLOBAL-IN? ,PRSO ,HERE>>>
<CANT-SEE ,PRSO>)
(T
<PERFORM ,V?TELL ,PRSO>
<RTRUE>)>>
<ROUTINE V-CHASTISE () <TELL ,TOO-LATE CR>>
<ROUTINE PRE-CHASTISE ()
<COND (<DIRECTION? ,PRSO>
<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: LOOK AT the
object, LOOK INSIDE it, LOOK UNDER it, etc." CR>)>>
<ROUTINE V-CLEAN ()
<TELL "A nice thought, but not that important just now." CR>>
<ROUTINE V-CLIMB-NUL ()
<TELL
"You'll have to be more specific." CR>>
<ROUTINE V-CLIMB ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(<HELD? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?DOWN>)
(<HELD? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<HELD? ,PRSO>
<TELL ,HOLDING-IT>)
(<EQUAL? <LOC ,PRSO> ,COMP-SEAT-FRONT ,COMP-SEAT-BACK>
<COND (<EQUAL? ,PRSO ,DOCUMENT ,SHRED ,SHREDS>
<TELL
"It's a clever idea, but you wouldn't get away with it." CR>)
(T
<TELL
"It would neither be comfortable nor helpful." CR>)>)
(T
<TELL "You can't climb onto " THE ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-CLIMB-OVER ()
<COND (<HELD? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-UP ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?UP>)
(<HELD? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLOSE ()
<COND (<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,PERSON>>
<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 "It's already closed." CR>)>)
(T
<CANT-VERB-A-PRSO! "close">)>>
<ROUTINE V-COUNT ()
<IMPOSSIBLES>>
<ROUTINE V-CRAWL-UNDER ()
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CUT ()
<COND (<NOT ,PRSI>
<IMPOSSIBLES>)
(<EQUAL? ,PRSI ,WOOD-SAW>
<TELL
"It's not wood, so you won't get anywhere." CR>)
(<EQUAL? ,PRSI ,BOLT-CUTTER>
<TELL
"There's no use cutting that." CR>)
(T
<TELL
"You'll never get anywhere with " A ,PRSI ,PERIOD-CR>)>>
<ROUTINE V-DIG ()
<WASTES>>
<ROUTINE V-DISEMBARK ()
<COND (<AND <FSET? ,PRSO ,TAKEBIT> ;"since GET OUT is also TAKE OUT"
<EQUAL? <META-LOC ,PRSO> ,HERE>
<NOT <IN? ,PRSO ,HERE>>
<NOT <IN? ,PRSO ,PROTAGONIST>>
<NOT <IN? ,PROTAGONIST ,PRSO>>>
<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 out of the " D ,PRSO ".">
<CRLF>)>>
<ROUTINE V-DRINK ()
<TELL "You can't drink that!" CR>>
<ROUTINE V-DRINK-FROM ()
<IMPOSSIBLES>>
<ROUTINE V-DROP ()
<SETG CLOCK-MOVE 6>
<MOVE ,PRSO ,HERE>
<TELL "Dropped." CR>>
<ROUTINE SPECIAL-DROP () ;"used by drop and throw"
<RFALSE>>
<ROUTINE V-EAT ()
<TELL
"Your incipient ulcer would not be helped by eating " A ,PRSO ,PERIOD-CR>>
<ROUTINE V-EMPTY ("AUX" OBJ NXT)
<COND (<FSET? ,PRSO ,CONTBIT>
<COND (<FSET? ,PRSO ,OPENBIT>
<SET OBJ <FIRST? ,PRSO>>
<COND (.OBJ
<REPEAT ()
<SET NXT <NEXT? .OBJ>>
<MOVE .OBJ ,HERE>
<COND (.NXT
<SET OBJ .NXT>)
(T
<RETURN>)>>
<TELL "You dump the contents of" T ,PRSO>
<TELL " onto the ground." CR>)
(T
<TELL "It's already empty!" CR>)>)
(T
<TELL "It's closed." CR>)>)
(<AND <HELD? ,PRSO>
<NOT <IN? ,PRSO ,PROTAGONIST>>>
<MOVE ,PRSO ,HERE>
<TELL "Done." CR>)
(T
<IMPOSSIBLES>)>
<RTRUE>>
<ROUTINE V-ENTER ()
<COND (<FSET? ,PRSO ,DOORBIT>
<DO-WALK <OTHER-SIDE ,PRSO>>
<RTRUE>)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-EXAMINE ()
<COND ;(<FSET? ,PRSO ,UNTEEDBIT>
<TELL "It looks just like" A ,PRSO ", whatever that is." CR>)
(<FSET? ,PRSO ,PERSON>
<COND (<FIRST? ,PRSO>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)
(T
<TELL "There's nothing noteworthy about" TR ,PRSO>)>)
(<AND <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>)>)
;(<GETP ,PRSO ,P?TEXT>
<PERFORM ,V?READ ,PRSO>
<RTRUE>)
(T
<TELL
"It's a pretty typical " D ,PRSO "." CR>)>>
<ROUTINE V-EXAMINE-THROUGH-FLIP ()
<PERFORM ,V?EXAMINE-THROUGH ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-EXAMINE-THROUGH ()
<TELL "This reveals nothing new." CR>>
<ROUTINE V-EXIT ()
<DO-WALK ,P?OUT>>
<ROUTINE V-FEED ()
<TELL "You have nothing to feed " THE ,PRSO " with." CR>>
<ROUTINE V-FILL ()
<COND (<NOT ,PRSI>
<TELL "There's nothing to fill it with.">)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-FIND ("OPTIONAL" (WHERE <>) "AUX" (L <LOC ,PRSO>))
<COND (<NOT .L>
<TELL "You can't tell." CR>)
(<PRSO? ,ME>
<TELL "You're in \"">
<HERE-TELL <>>
<TELL "\"." CR>)
(<IN? ,PRSO ,PROTAGONIST>
<TELL "You're holding it!" CR>)
(<IN? ,PRSO ,HERE>
<TELL "It's right in front of you." CR>)
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<GLOBAL-IN? ,PRSO ,HERE>>
<TELL "You'll have to find it yourself!" CR>)
(<AND <FSET? .L ,PERSON>
<VISIBLE? .L>>
<TELL "It seems as though " THE .L " has it." CR>)
(<AND <FSET? .L ,CONTBIT>
<VISIBLE? ,PRSO>
<NOT <IN? .L ,GLOBAL-OBJECTS>>>
<COND (<FSET? ,PRSO ,PERSON>
<TELL "He">)
(T
<TELL "It">)>
<TELL "'s in" TR .L>)
(T
<TELL "You'll have to find it yourself!" CR>)>>
<ROUTINE V-FLUSH ()
<TELL "Perhaps the strain is getting to you." CR>>
<ROUTINE V-FOLLOW ()
<COND (<IN? ,PRSO ,HERE>
<TELL "But" T ,PRSO " is right here!" CR>)
(<NOT <FSET? ,PRSO ,PERSON>>
<IMPOSSIBLES>)
(T
<TELL "You have no idea where" T ,PRSO " is." CR>)>>
<ROUTINE PRE-GIVE ()
<COND (<AND <VERB? GIVE>
<PRSO? ,HANDS>>
<PERFORM ,V?SHAKE-WITH ,PRSI>
<RTRUE>)
(<IDROP>
<RTRUE>)>>
<ROUTINE V-GIVE ()
<COND (<FSET? ,PRSI ,PERSON>
<TELL "Briskly, " THE ,PRSI " refuses your offer." CR>)
(T
<TELL "You can't give " A ,PRSO " to " A ,PRSI "!" CR>)>>
<ROUTINE V-HELLO ()
<COND (,PRSO
<TELL
"[The proper way to talk to characters in the story is
CHARACTER, HELLO.]" CR>)
(T
<PERFORM ,V?TELL ,ME>
<RTRUE>)>>
<ROUTINE V-HIDE ()
<COND (<EQUAL? ,HERE ,SNIPER-ROOM>
<PERFORM ,V?HIDE-BEHIND ,HALL-DOOR-E>
<RTRUE>)>
<TELL "There's no good place to hide ">
<COND (,PRSO
<TELL "t">)>
<TELL "here." CR>>
<ROUTINE V-HIDE-BEHIND ()
<WASTES>>
<ROUTINE V-HOLD ()
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>>
<ROUTINE V-IN ()
<COND (<FSET? ,HERE ,SWAMPBIT>
<PERFORM ,V?ENTER ,SWAMP>
<RTRUE>)
(T
<DO-WALK ,P?IN>)>>
<ROUTINE V-INFLATE ()
<IMPOSSIBLES>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking ">>
<ROUTINE V-KILL ()
<TELL "Pull yourself together." CR>>
<ROUTINE V-KISS ()
<TELL
"Good grief! The pressure must be getting to you." CR>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "There's no answer." CR>)
(T
<HACK-HACK "Knocking on ">)>>
<ROUTINE V-LEAP ()
<COND (<AND ,PRSO
<NOT <IN? ,PRSO ,HERE>>>
<IMPOSSIBLES>)
(<AND ,PRSO
<FSET? ,PRSO ,PERSON>>
<PERFORM ,V?KILL ,PRSO>
<RTRUE>)
(<EQUAL? ,HERE ,TOWER-SOUTH>
<PERFORM ,V?LEAP ,BORDER-FENCE>
<RTRUE>)
(T
<V-SKIP>)>>
<ROUTINE V-LEAP-OFF ()
<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-LIE-DOWN ()
<WASTES>>
<ROUTINE V-LISTEN ()
<COND (<NOT ,PRSO>
<COND (<EQUAL? ,SCENARIO 2>
<TELL
"The wind is blowing through the trees, but other than that you should
be more specific with what you are listening for." CR>)
(<EQUAL? ,HERE ,ANTIQUE-STORAGE>
<PERFORM ,PRSA ,ANTIQUE-CONVERSATION>
<RTRUE>)
(T
<TELL
"You don't hear anything you haven't heard before." CR>)>)
(T
<TELL "At the moment, " THE ,PRSO " makes no sound." CR>)>>
<ROUTINE PRE-LOCK ()
<RFALSE>>
<ROUTINE V-LOCK ()
<TELL "You can't lock that." CR>>
<ROUTINE V-LOOK ()
<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS>>
<ROUTINE V-LOOK-BEHIND ()
<COND (<FSET? ,PRSO ,DOORBIT>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>
<TELL "There is nothing behind " THE ,PRSO ,PERIOD-CR>>
<ROUTINE V-LOOK-DOWN ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?EXAMINE ,GROUND>
<RTRUE>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE WHAT-CONTENTS ()
<COND (<NOT <DESCRIBE-CONTENTS ,PRSO>>
<TELL "nothing">
<COND (<IN? ,PROTAGONIST ,PRSO>
<TELL " (other than you)">)>)>
<TELL ,PERIOD>>
<ROUTINE V-LOOK-INSIDE ()
<COND (<FSET? ,PRSO ,SURFACEBIT>
<TELL "On " THE ,PRSO " is ">
<WHAT-CONTENTS>)
(<FSET? ,PRSO ,DOORBIT>
<THIS-IS-IT ,PRSO>
<TELL "All you can tell is that ">
<TELL-OPEN-CLOSED>)
(<FSET? ,PRSO ,CONTBIT>
<COND (<PRSO? <LOC ,WINNER>>
<MOVE ,PROTAGONIST ,ROOMS>
<TELL "Aside from you, there's ">
<WHAT-CONTENTS>
<MOVE ,PROTAGONIST ,PRSO>)
(<SEE-INSIDE? ,PRSO>
<TELL CTHE ,PRSO " contains ">
<WHAT-CONTENTS>)
(<AND <NOT <FSET? ,PRSO ,OPENBIT>>
<FIRST? ,PRSO>>
<TELL "But " THE ,PRSO " is closed." CR>
;<NEW-VERB ,V?OPEN>
<RTRUE>)
(T
<THIS-IS-IT ,PRSO>
<TELL "It seems ">
<TELL-OPEN-CLOSED>)>)
(T
<TELL "You can't look inside that." CR>)>>
<ROUTINE V-LOOK-OVER ()
<V-EXAMINE>>
<ROUTINE V-LOOK-UNDER ()
<COND (<HELD? ,PRSO>
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "You're wearing it!" CR>)
(T
<TELL ,HOLDING-IT>)>)
(T
<TELL "There's nothing to be seen under" TR ,PRSO>)>>
<ROUTINE V-LOOK-UP ()
<COND (<PRSO? ,ROOMS>
<COND (<NOT <FSET? ,HERE ,HUTBIT>>
<PERFORM ,V?EXAMINE ,SKY>
<RTRUE>)
(T
<PERFORM ,V?EXAMINE ,CEILING>
<RTRUE>)>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LOWER ()
<V-RAISE>>
<ROUTINE V-MAKE ()
<TELL "You can't make" AR ,PRSO>>
<ROUTINE V-MOVE ()
<COND (<HELD? ,PRSO>
<TELL "Why juggle objects?" CR>)
(<LOC-CLOSED>
<RTRUE>)
(<FSET? ,PRSO ,TAKEBIT>
<TELL "Moving" T ,PRSO " reveals nothing." CR>)
(T
<TELL "You can't move" TR ,PRSO>)>>
<ROUTINE V-MUNG ()
<HACK-HACK "Trying to break ">>
<ROUTINE V-NO ()
<TELL "You could use a better attitude." CR>>
<ROUTINE V-RESET ()
<TELL "You can't reset that." CR>>
<ROUTINE V-OFF-2 ()
<COND (<EQUAL? ,PRSO ,WATCHING-OBJECT>
<TELL "Not implemented." CR>
<RTRUE>)
(<EQUAL? ,PRSO ,TIMING-OBJECT>
<PERFORM ,V?OFF ,PRSO>
<RTRUE>)
(T
<TELL
"That sentence doesn't make sense." CR>)>>
<ROUTINE V-OFF ()
<PERFORM ,V?DISPOSE ,PRSO>
<RTRUE>>
<ROUTINE V-ON-2 ()
<COND (<EQUAL? ,PRSO ,WATCHING-OBJECT ,TIMING-OBJECT>
<PERFORM ,V?WATCH ,PRSI>
<RTRUE>)
(T
<TELL
"That sentence doesn't make sense." CR>)>>
<ROUTINE V-ON ()
<CANT-TURN "n">>
<ROUTINE CANT-TURN (STRING)
<TELL "You can't turn that o" .STRING "." CR>>
<ROUTINE V-OPEN ()
<COND (<OR <FSET? ,PRSO ,SURFACEBIT>
<FSET? ,PRSO ,PERSON>>
<IMPOSSIBLES>)
(<FSET? ,PRSO ,OPENBIT>
<TELL "It's already open." CR>)
(<FSET? ,PRSO ,DOORBIT>
<COND ;(<FSET? ,PRSO ,LOCKEDBIT>
<TELL "It's locked. Very locked." CR>)
(T
<FSET ,PRSO ,OPENBIT>
<FSET ,PRSO ,TOUCHBIT>
<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-CONTENTS ,PRSO -1>>
<TELL "nothing">)>
<TELL "." CR>
;<NOW-LIT?>)>)
(T
<CANT-VERB-A-PRSO! "open">)>>
<ROUTINE V-PICK ()
<TELL "You can't pick that." CR>>
<ROUTINE V-PICK-UP ()
<PERFORM ,V?TAKE ,PRSO ,PRSI>
<RTRUE>>
<ROUTINE V-PLAY ()
<IMPOSSIBLES>>
<ROUTINE V-PLUG-IN ()
<IMPOSSIBLES>>
<ROUTINE V-POINT ("AUX" ACTOR)
<TELL "Pointless." CR>>
<ROUTINE V-POUR ()
<IMPOSSIBLES>>
<ROUTINE V-PUSH ()
<HACK-HACK "Pushing ">>
<ROUTINE PRE-PUT ()
<COND (<EQUAL? ,PRSO ,BODY-PARTS>
<RFALSE>)
(<PRSI? ,GROUND>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<AND <IN? ,PRSO ,WINNER>
<FSET? ,PRSO ,WORNBIT>>
<TELL
"But, you are wearing " THE ,PRSO ,PERIOD-CR>)
(<HELD? ,PRSI ,PRSO>
<TELL
"You can't put" T ,PRSO " in" T ,PRSI
" when" T ,PRSI " is already in" T ,PRSO "!" CR>)
(<IDROP>
<RTRUE>)>>
<ROUTINE V-PUT ()
<COND (<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,DOORBIT>>
<NOT <FSET? ,PRSI ,CONTBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<TELL "You can't put" T ,PRSO " in " A ,PRSI "!" CR>)
(<OR <PRSI? ,PRSO>
<AND <HELD? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>>>
<TELL "How can you do that?" CR>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<SETG P-IT-OBJECT ,PRSI>
<TELL "Inspection reveals that" T ,PRSI " isn't open." CR>)
(<IN? ,PRSO ,PRSI>
<TELL "But" T ,PRSO " is already in" TR ,PRSI>)
(<FSET? ,PRSI ,DOORBIT>
<PERFORM ,V?PUT-THROUGH ,PRSO ,PRSI>
<RTRUE>)
(<G? <- <+ <WEIGHT ,PRSI> <GETP ,PRSO ,P?SIZE>>
<GETP ,PRSI ,P?SIZE>>
<GETP ,PRSI ,P?CAPACITY>>
<TELL "There's no room ">
<COND (<FSET? ,PRSI ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T ,PRSI " for" TR ,PRSO>)
(<AND <NOT <HELD? ,PRSO>>
<EQUAL? <ITAKE> ,M-FATAL <>>>
<RTRUE>)
(T
<MOVE ,PRSO ,PRSI>
<FSET ,PRSO ,TOUCHBIT>
<TELL "Done." CR>)>>
<ROUTINE V-PUT-BEHIND ()
<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>
<TELL
"It would be imprudent to throw things through a door." CR>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-PUT-UNDER ()
<WASTES>>
<ROUTINE V-RAISE ()
<HACK-HACK "Playing in this way with ">>
<ROUTINE V-REACH-IN ("AUX" OBJ)
<SET OBJ <FIRST? ,PRSO>>
<COND (<OR <FSET? ,PRSO ,PERSON>
<FSET? ,PRSO ,SURFACEBIT>
<NOT <FSET? ,PRSO ,CONTBIT>>>
<TELL <PICK-ONE ,YUKS> CR>)
(<NOT <FSET? ,PRSO ,OPENBIT>>
;<TELL "It's not open." CR>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)
(<OR <NOT .OBJ>
<FSET? .OBJ ,INVISIBLE>
<NOT <FSET? .OBJ ,TAKEBIT>>>
<TELL "There's nothing in" TR ,PRSO>)
(T
<TELL "You reach into" T ,PRSO " and feel something." CR>)>>
<ROUTINE PRE-READ ()
<COND (<AND ,PRSI
<NOT <FSET? ,PRSI ,TRANSBIT>>>
<TELL
"You would need an x-ray machine for that." CR>)>>
<ROUTINE V-READ ()
<TELL "You cannot read" AR ,PRSO>>
<ROUTINE V-REMOVE ()
<COND (<FSET? ,PRSO ,WEARBIT>
<PERFORM ,V?TAKE-OFF ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-RIP ()
<TELL "Unrippable." CR>>
<ROUTINE V-SAVE-SOMETHING ()
<TELL "You would do better to start helping yourself." CR>>
<ROUTINE V-SAY ("AUX" V)
<COND (<EQUAL? ,SCENARIO 1>
<SIIF>
<STOP>)
(<AND <EQUAL? ,SCENARIO 3>
,AWAITING-PASSWORD>
<CHECK-PASSWORD>
<STOP>)
(<OR <SET V <FIND-IN ,HERE ,PERSON>>
<GLOBAL-IN? ,VENDOR ,HERE>>
<COND (<ZERO? .V> <SET V ,VENDOR>)>
<COND (<EQUAL? ,SCENARIO 3>
<PERFORM ,V?TELL .V>)
(T
<TELL "You must address" T .V " directly." CR>)>
<STOP>)
(T
<PERFORM ,V?TELL ,ME>
<STOP>)>>
<ROUTINE V-SCORE ()
<TELL "There is no score in this game." CR>>
<ROUTINE V-SEARCH ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL "That wouldn't be polite." CR>)
;(<IN? ,PROTAGONIST ,PRSO>
<DESCRIBE-VEHICLE>)
(<AND <FSET? ,PRSO ,CONTBIT>
<NOT <FSET? ,PRSO ,OPENBIT>>>
<TELL "You'll have to open that first." CR>)
(<AND <FSET? ,PRSO ,CONTBIT>
<FIRST? ,PRSO>
<NOT <FSET? <FIRST? ,PRSO> ,NDESCBIT>>>
<TELL "You find ">
<COND (<NOT <DESCRIBE-CONTENTS ,PRSO -1>>
<TELL " nothing">)>
<TELL "." CR>)
(T
<TELL "You find nothing unusual." CR>)>>
<ROUTINE V-SET ()
<COND (<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 ,PERSON>
<TELL "Try to vent your anger in a more productive way." CR>)
(T
<HACK-HACK "Shaking ">)>>
<ROUTINE V-SHAKE-WITH ()
<COND (<NOT <PRSO? ,HANDS>>
<TELL ,RECOGNIZE>)
(<NOT <FSET? ,PRSI ,PERSON>>
<TELL "I don't think" T ,PRSI " even has hands." CR>)
(T
<PERFORM ,V?THANK ,PRSI>
<RTRUE>)>>
<ROUTINE V-SHOW ()
<TELL "It's doubtful" T ,PRSI " is interested." CR>>
<ROUTINE V-SIGN ()
<IMPOSSIBLES>>
<ROUTINE V-SIT ()
<WASTES>>
<ROUTINE V-SKIP ()
<TELL "That won't help, and just might get you caught." CR>>
<ROUTINE V-SLEEP ()
<TELL "You're not tired." CR>>
<ROUTINE V-SMELL ()
<COND (<NOT ,PRSO>
<PERFORM ,V?SMELL ,ME>
<RTRUE>)
(T
<TELL "It smells just like " A ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-SMILE ()
<TELL "How nice." CR>>
<ROUTINE V-SPIN ()
<TELL "You can't spin that!" CR>>
<ROUTINE V-SPUT-ON ()
<PERFORM ,V?PUT-ON ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSHOW ()
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-STAND ()
<COND (<AND ,PRSO
<FSET? ,PRSO ,TAKEBIT>>
<WASTES>)
(T
<TELL "You are already standing." CR>)>>
<ROUTINE V-STAND-ON ()
<WASTES>>
<ROUTINE V-STELL ()
<PERFORM ,V?TELL ,PRSI>
<RTRUE>>
<ROUTINE PRE-TAKE ()
<COND (<EQUAL? <GET ,P-OFW 0> ,W?PHOTO ,W?PHOTOGRAPH ,W?PICTURE>
<PERFORM ,V?PHOTOGRAPH ,PRSO>
<RTRUE>)
(<LOC-CLOSED>
<RTRUE>)
(<EQUAL? ,PRSI ,GROUND>
<PERFORM ,PRSA ,PRSO>
<RTRUE>)
(<IN? ,PROTAGONIST ,PRSO>
<TELL "You're in it!" CR>)
(<AND ,PRSI
<FSET? ,PRSI ,FILMBIT>
<FSET? ,PRSO ,FILMBIT>>
<TELL
"You can't take the film out of the roll without destroying it." CR>
<RTRUE>)
(<EQUAL? ,PRSO ,PHONY-FILM>
<RFALSE>)
(<AND ,PRSI
<FSET? ,PRSO ,FILMBIT>
<NOT <GET ,P-ADJW 0>>
<EQUAL? ,PRSI ,CAMERA>>
<PERFORM ,PRSA ,PHONY-FILM ,CAMERA>
<RTRUE>)
(<AND <NOT ,PRSI>
<OR <IN? ,PRSO ,PROTAGONIST>
<AND <HELD? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>>>>
<COND (<AND <FSET? ,PRSO ,WORNBIT>
<NOT <EQUAL? ,PRSO ,WOUNDED-LEFT-ARM>>>
<TELL "You are already wearing it." CR>)
(T
<TELL "You already have it." CR>)>)
(<NOT ,PRSI>
<RFALSE>)
(<IN? ,PRSO ,PRSI>
<RFALSE>)
(<PRSO? ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<AND <NOT <IN? ,PRSO ,PRSI>>
;"Oh, I hate this!"
<NOT <EQUAL? ,PRSI ,BY-GUARDS>>>
<TELL "But" T ,PRSO " isn't ">
<COND (<FSET? ,PRSI ,PERSON>
<TELL "being held by ">)
(<FSET? ,PRSI ,SURFACEBIT>
<TELL "on ">)
(T
<TELL "in ">)>
<TELL THE ,PRSI ,PERIOD-CR>)
(T
<SETG PRSI <>>
<RFALSE>)>>
<ROUTINE V-TAKE ()
<COND (<EQUAL? <ITAKE> T>
<TELL "Taken." CR>)>>
<ROUTINE V-TAKE-OFF ()
<COND (<FSET? ,PRSO ,WORNBIT>
<FCLEAR ,PRSO ,WORNBIT>
<REMOVE ,PRSO>
<COND (<G? <+ <WEIGHT ,PRSO> <WEIGHT ,PROTAGONIST>>
,MAX-WEIGHT>
<MOVE ,PRSO ,HERE>
<TELL
"You take off " THE ,PRSO ". It's too heavy to carry, so you put it down on
the ground." CR>)
(T
<MOVE ,PRSO ,WINNER>
<TELL
"Okay, you're no longer wearing " THE ,PRSO ,PERIOD-CR>)>)
(T
<TELL "You aren't wearing" TR ,PRSO>)>>
<ROUTINE V-TELL ()
<COND (<EQUAL? ,SCENARIO 1>
<COND (<EQUAL? ,PRSO ,BAD-SPY>
<TELL
"He is engaged in conversation with some people in another compartment,
so it isn't surprising that he ignores you." CR>)
(T
<TELL
"To say something out loud, try SAY \"what you want to say\"" CR>)>)
(<EQUAL? ,SCENARIO 2>
<TELL
"Talking out loud here is only going to get you caught." CR>)
(T
<TELL "You can't talk to that!" CR>)>
<STOP>>
<ROUTINE V-TELL-ABOUT ()
<COND (<PRSO? ,ME>
<PERFORM ,V?WHAT ,PRSI>
<RTRUE>)
(T
<TELL "It doesn't look like" T ,PRSO " is interested." CR>)>>
<ROUTINE V-THANK ()
<COND (<FSET? ,PRSO ,PERSON>
<TELL
"You do so, but" T ,PRSO " seems less than overjoyed." CR>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-THROW ()
<COND (<NOT <SPECIAL-DROP>>
<TELL "An almost perfect waste of time." CR>)>>
<ROUTINE V-THROW-OFF ()
<IMPOSSIBLES>>
<ROUTINE V-TIE ()
<TELL "You can't tie" AR ,PRSO>>
<ROUTINE V-TIE-FLIP ()
<PERFORM ,V?TIE ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-TIE-TOGETHER ()
<V-TIE>>
<ROUTINE V-TOUCH ()
<COND (<LOC-CLOSED>
<RTRUE>)
(T
<HACK-HACK "Fiddling with ">)>>
<ROUTINE V-UNLOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "But the " D ,PRSO " isn't locked." CR>)
(T
<TELL <PICK-ONE ,YUKS> CR>)>>
<ROUTINE V-UNTIE ()
<IMPOSSIBLES>>
<ROUTINE V-USE ()
<TELL
"You'll have to be more specific about how you want to use" TR ,PRSO>>
<ROUTINE V-WALK ("AUX" PT PTS STR OBJ RM)
<COND (<NOT ,P-WALK-DIR>
<PERFORM ,V?WALK-TO ,PRSO>
<RTRUE>)
(<SET PT <GETPT ,HERE ,PRSO>>
<COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
<GOTO <GET .PT ,REXIT>>)
(<EQUAL? .PTS ,NEXIT>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<EQUAL? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<COND (<AND <EQUAL? ,SCENARIO 3>
<BACKTRACK? .RM T>>
<RFATAL>)>
<GOTO .RM>)
(T
<RFATAL>)>)
(<EQUAL? .PTS ,SEXIT>
<COND (<SET STR <GET .PT ,SEXITSTR>>
<COND (<AND <EQUAL? ,SCENARIO 3>
<BACKTRACK? <GET .PT ,REXIT>>>
<RFATAL>)
(T
<TELL .STR CR>)>)>
<COND (<SET STR <VALUE <GETB .PT ,SEXITFLG>>>
<CRLF>)>
<GOTO <GET .PT ,REXIT> .STR>)
(<EQUAL? .PTS ,DEXIT>
<COND (<FSET? <SET OBJ <GET .PT ,DEXITOBJ>> ,OPENBIT>
<GOTO <GET .PT ,REXIT>>)
(<SET STR <GET .PT ,DEXITSTR>>
<TELL .STR CR>
<SETG P-IT-OBJECT .OBJ>
<RFATAL>)
(T
<TELL "The " D .OBJ " is closed." CR>
<SETG P-IT-OBJECT .OBJ>
<RFATAL>)>)>)
(<AND <EQUAL? ,PRSO ,P?IN>
<SET STR <GETP ,HERE ,P?IN-DIR>>>
<SETG PRSO .STR>
<AGAIN>)
(<AND <EQUAL? ,PRSO ,P?OUT>
<SET STR <GETP ,HERE ,P?OUT-DIR>>>
<SETG PRSO .STR>
<AGAIN>)
(T
<COND (<PRSO? ,P?OUT ,P?IN>
<V-WALK-AROUND>)
(T
<TELL ,CANT-GO>)>
<RFATAL>)>>
<ROUTINE V-WALK-AROUND ()
<TELL "Just say the direction you want to move in." CR>>
<ROUTINE V-WALK-TO ()
<COND (<DIRECTION? ,PRSO>
<DO-WALK ,P-DIRECTION>)
(T
<V-WALK-AROUND>)>>
<ROUTINE V-WAIT ("OPTIONAL" (NUM 0) "AUX" PERSON NW)
<COND (,MINUTES-FLAG
<SET NUM <* .NUM 60>>)>
<COND (<G? .NUM 999>
<TELL
"That's too long to wait! You've not much time left!" CR>
<SETG CLOCK-MOVE 0>
<RTRUE>)>
<TELL "Time passes..." CR>
<COND (<ZERO? .NUM>
<SET NUM 30>
<COND (<EQUAL? ,SCENARIO 1>
<SET NUM 90>)>)>
<SET NW </ .NUM 5>>
<SETG I-FATAL <>>
<REPEAT ()
<COND (<OR ,I-FATAL <L? <SET NW <- .NW 1>> 0>>
<RETURN>)
(T
<I-CLOCKER 5>)>>
<SETG CLOCK-MOVE 0>
<RTRUE>>
<ROUTINE V-$WAIT ()
<COND (<EQUAL? ,PRSO ,INTNUM>
<V-WAIT ,P-NUMBER>)
(T
<V-WAIT>)>>
<ROUTINE V-WAIT-FOR ()
<COND (<EQUAL? ,PRSO ,INTNUM>
<PERFORM ,V?$WAIT ,INTNUM>
<RTRUE>)
(T
<TELL "You may be waiting quite a while." CR>)>>
<ROUTINE V-WAIT-IN ()
<COND (<IN? ,PROTAGONIST ,PRSO>
<V-WAIT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-WAVE ()
<IMPOSSIBLES>>
<ROUTINE V-WAVE-AT ()
<COND (<NOT ,PRSO>
<V-SMILE>)
(T
<TELL
"It doesn't seem that " THE ,PRSO " is likely to respond." CR>)>>
<ROUTINE V-WEAR ()
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "You're already wearing" TR ,PRSO>)
(<FSET? ,PRSO ,WEARBIT>
<MOVE ,PRSO ,PROTAGONIST>
<FSET ,PRSO ,WORNBIT>
<TELL "You are now wearing" TR ,PRSO>)
(T
<TELL "You can't wear " THE ,PRSO ,PERIOD-CR>)>>
<ROUTINE V-WHAT ()
<COND (<NOT ,PRSO>
<TELL "That's what." CR>)
(T
<TELL "Good question." CR>)>
<STOP>>
<ROUTINE V-WHERE ()
<COND (,PRSO
<V-FIND T>)
(T
<TELL "Right here." CR>)>>
<ROUTINE V-WHO ()
<COND (<NOT ,PRSO>
<TELL "You." CR>)
(<FSET? ,PRSO ,PERSON>
<PERFORM ,V?WHAT ,PRSO>
<RTRUE>)
(T
<TELL "That's for you to find out!" CR>)>>
<ROUTINE V-WHY ()
<TELL "In this country, it is best not to ask." CR>>
<ROUTINE V-YELL ()
<TELL "Not wise. It would only call attention to yourself." CR>
<STOP>>
<ROUTINE V-YES ()
<TELL "Yes?" CR>>
;"subtitle object manipulation"
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" ;CNT OBJ)
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<IMPOSSIBLES>)>
<RFATAL>)
(<AND <NOT <HELD? ,PRSO>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,PROTAGONIST>>
,MAX-WEIGHT>>
<COND (.VB
<TELL
"It's too heavy, considering ">
<COND (<OR <NOT <EQUAL? ,SCENARIO 2>>
<G? <WEIGHT ,PROTAGONIST>
</ ,MAX-WEIGHT 2>>>
<TELL "what you're already holding">
<COND (<EQUAL? ,SCENARIO 2>
<TELL " and ">)>)>
<COND (<EQUAL? ,SCENARIO 2>
<TELL "your bad arm">)>
<TELL ,PERIOD-CR>)>
<RFATAL>)
(<G? <CCOUNT ,PROTAGONIST> 5>
<COND (.VB
<TELL
"You're already holding as many items as you can">
<COND (<EQUAL? ,SCENARIO 2>
<TELL ", especially in light
of your bad arm">)>
<TELL ,PERIOD-CR>)>
<RFATAL>)>
<COND (<AND <EQUAL? ,PRSO ,EXPLODING-PEN>
<IN? ,PRSO ,FENCE>>
<FCLEAR ,HERE ,PENBIT>
<FCLEAR <GETP ,HERE ,P?ACROSS> ,PENBIT>)>
<MOVE ,PRSO ,PROTAGONIST>
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<FCLEAR ,PRSO ,WORNBIT>
<RTRUE>>
;"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? ,INTNUM>
<SETG CLOCK-WAIT T>
<RFATAL>)
(<PRSO? ,HANDS>
<COND (<VERB? DROP THROW GIVE>
<IMPOSSIBLES>)
(T
<RFALSE>)>)
(<IN? ,PRSO ,GLOBAL-OBJECTS>
<TELL
"Don't lose your head, now! You can't do that!" CR>)
(<NOT <HELD? ,PRSO>>
<TELL
"That's easy for you to say since you don't even have" TR ,PRSO>)
(<AND <NOT <IN? ,PRSO ,PROTAGONIST>>
<FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<TELL "Impossible because" T <LOC ,PRSO> " is closed." CR>)
(<FSET? ,PRSO ,WORNBIT>
<TELL "You'll have to remove ">
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL "them">)
(T
<TELL "that">)>
<TELL " first." CR>)
(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 ()
<COND (<AND <EQUAL? .OBJ ,PROTAGONIST>
<FSET? .CONT ,WORNBIT>>
<SET WT <+ .WT 1>>) ;"worn things don't count"
(<AND <EQUAL? .OBJ ,PROTAGONIST>
<FSET? <LOC .CONT> ,WORNBIT>>
<SET WT <+ .WT 1>>)
;"things in worn things shouldn't count"
(<EQUAL? .OBJ ,PROTAGONIST>
<SET WT <+ .WT 1>>)
(T
<SET WT <+ .WT <WEIGHT .CONT>>>)>
<COND (<NOT <SET CONT <NEXT? .CONT>>> <RETURN>)>>)>
<+ .WT <GETP .OBJ ,P?SIZE>>>
;"subtitle movement and death"
<CONSTANT REXIT 0>
<CONSTANT UEXIT 2>
<CONSTANT NEXIT 3>
<CONSTANT FEXIT 4>
<CONSTANT SEXIT 5>
<CONSTANT DEXIT 6>
<CONSTANT NEXITSTR 0>
<CONSTANT FEXITFCN 0>
<CONSTANT SEXITSTR 1>
<CONSTANT SEXITFLG 4>
<CONSTANT DEXITOBJ 1>
<CONSTANT DEXITSTR 2>
<GLOBAL MOVE-FORCED <>>
<ROUTINE GOTO (NEW-LOC "OPTIONAL" (DESC? T) "AUX" OLD-HERE)
<COND (<NOT .DESC?> <SETG MOVE-FORCED T>)
(T <SETG MOVE-FORCED <>>)>
<FCLEAR ,COMP-N-DOOR ,OPENBIT>
<COND (<EQUAL? ,SCENARIO 2>
<SETG CLOCK-MOVE
</ </ <* <GETP ,SHOES-WORN ,P?SPEED> 100>
,HEALTH>
,WARMTH>>
<COND (<AND <FSET? .NEW-LOC ,VILLAGEBIT>
<FSET? ,HERE ,VILLAGEBIT>>
<SETG CLOCK-MOVE </ ,CLOCK-MOVE 4>>)
(<EQUAL? ,INSIDE-SHED .NEW-LOC ,HERE>
<SETG CLOCK-MOVE </ ,CLOCK-MOVE 4>>)
(<OR <FSET? .NEW-LOC ,VILLAGEBIT>
<FSET? ,HERE ,VILLAGEBIT>>
<SETG CLOCK-MOVE </ ,CLOCK-MOVE 2>>)
(<AND <FSET? .NEW-LOC ,GVIEWBIT>
<FSET? ,HERE ,GVIEWBIT>>
<COND (<OR <EQUAL? ,PRSO ,P?NORTH ,P?SOUTH>
<EQUAL? ,PRSO ,P?UP ,P?DOWN>>
<SETG CLOCK-MOVE </ ,CLOCK-MOVE 3>>)>)>)
(<EQUAL? ,SCENARIO 1>
<COND (<FSET? ,HERE ,PLATFORMBIT>
<SETG CLOCK-MOVE 25>)
(T
<SETG CLOCK-MOVE 15>)>)
(T
<SETG CLOCK-MOVE 29>
<COND (<FSET? ,HERE ,HUTBIT>
<SETG CLOCK-MOVE 7>)
(<EQUAL? ,HERE ,FIRE-2 ,FIRE-3 ,FIRE-4>
<SETG CLOCK-MOVE 9>)>
<COND (,TOPAZ-FIGHT
<SETG CLOCK-MOVE </ <* ,CLOCK-MOVE 2> 3>>)>)>
;<COND (,DEBUG <TELL "[CLOCK-MOVE = " N ,CLOCK-MOVE "]" CR>)>
<COND (<AND <EQUAL? ,SCENARIO 3>
<BACKTRACK? .NEW-LOC>>
<RTRUE>)>
<SET OLD-HERE ,HERE>
<MOVE ,PROTAGONIST .NEW-LOC>
<COND (<IN? .NEW-LOC ,ROOMS>
<SETG HERE .NEW-LOC>)
(T
<SETG HERE <LOC .NEW-LOC>>)>
;<SETG LIT <LIT? ,HERE>>
<APPLY <GET ,SCENARIO-TBL ,SCENARIO> ,M-ENTER .OLD-HERE>
<COND (<NOT <EQUAL? ,HERE .NEW-LOC>> <RTRUE>)>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<NOT <EQUAL? ,HERE .NEW-LOC>> <RTRUE>)>
<COND (<AND .DESC?
<NOT ,DONT-DESCRIBE-ROOM>>
<DESCRIBE-ROOM>)>
<SETG DONT-DESCRIBE-ROOM <>>
<COND (<AND <NOT <EQUAL? ,VERBOSITY 0>>
<OR <EQUAL? ,SCENARIO 2 3 ;"3 JUST ADDED"> .DESC?>>
<DESCRIBE-OBJECTS>)>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER-DESC>
<COND (<OR ,G-WATCH ,SL-WATCH>
<UPDATE-CHRONOGRAPH 0 T>)>
<RTRUE>>
<ROUTINE BACKTRACK? (NEW-LOC "AUX" (TOO-LATE? <>))
<COND (<AND <IN? ,TOPAZ .NEW-LOC>
;<OR * <BACKTRACKING? ,HERE>>
,CHASE-FLAG
<NOT ,TOPAZ-FIGHT>>
<COND (.TOO-LATE?
<TELL
"Seeing that this has put you closer to Topaz, you hastily retreat to
your last position.">)
(T
<TELL
"You decide not to go in that direction - it would put you in
Topaz's hands.">)>
<TOPAZ-THOUGHT>
<CRLF>
<RTRUE>)>>
<GLOBAL DONT-DESCRIBE-ROOM <>>
<ROUTINE JIGS-UP (DESC "OPTIONAL" (CONTIN <>)
"AUX" (FLG <>) (L <LOC ,EXPLODING-PEN>))
<TELL .DESC>
<COND (<AND <G? ,FUSE-ARMED 0>
<L? <SET DESC <- <GET ,CLOCK-TBL ,I-FUSE-OFF>
,CLOCK-TIME>> 120>
<G? .DESC 0>>
<SETG CHRONOGRAPH-TIME ,FUSE-ARMED>
<COND (<AND <L? .DESC 180>
<IN? .L ,ROOMS>
<IN? ,HUT-MAN ,HERE>>
<COND (<EQUAL? .L ,HERE>
<TELL CR CR
"Just when you think that things couldn't get worse, they do. As
you await the arrival of the border guards, the pen explodes,
seriously wounding both you and your captor. The end result is the
same, however.">)
(<AND <FSET? .L ,HUTBIT>
<FSET? ,HERE ,HUTBIT>>
<TELL CR CR
"A short while later, the pen explodes, turning the hut into an inferno.
Unfortunately, the owner keeps his wits about him, and hustles you out of the
hut to await the authorities." CR>)>)
(<AND <L? .DESC 30>
<BOMB-IN-TOWER?>
<EQUAL? ,HERE
,TOWER-SOUTH
,LADDER-TOP>>
<SET FLG T>
<TELL CR CR
"As you are taken down the ladder, the bomb explodes, sending you and
the guards tumbling to earth. In the confusion, you try to escape, but you
are quickly recaptured.">)
(<AND <FSET? ,HERE ,GVIEWBIT>
<BOMB-IN-TOWER?>>
<SET FLG T>
<TELL CR CR
"As you are taken away, the bomb explodes, and the tower
collapses.">)>
<COND (<AND .FLG
<EQUAL? <LOC ,EXPLODING-PEN> ,NE-POST ,NW-POST>>
<TELL " Ironically, the northernmost part
of the tower falls onto and over the border fence, landing at the place
where you had been hoping to arrive.">)>
<HLIGHT 0>
<UPDATE-CHRONOGRAPH 0>)>
<COND (<EQUAL? ,SCENARIO 2>
<TELL CR CR
"**** You have been arrested ****" CR>)>
<HLIGHT ,H-NORMAL>
<STATUS-LINE>
<FINISH .CONTIN>
;<COND (<NOT ,DEBUG> <FINISH .CONTIN>)>
;<TELL
"|
...continuing...|
">
<RTRUE>>
<ROUTINE BOMB-IN-TOWER? ("AUX" (L <LOC ,EXPLODING-PEN>))
<COND (<OR <EQUAL? .L ,NE-POST ,NW-POST ,TOWER-SOUTH>
<EQUAL? .L ,LADDER-TOP ,SE-POST>
<EQUAL? .L ,SW-POST>>
<RTRUE>)>>
;"subtitle useful utility routines"
<ROUTINE ACCESSIBLE? (OBJ "AUX" L) ;"can player TOUCH object?"
<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) ;"can player SEE object"
<COND (<NOT .OBJ>
<RFALSE>)>
<SET L <LOC .OBJ>>
<COND (<ACCESSIBLE? .OBJ>
<RTRUE>)
(<AND <SEE-INSIDE? .L>
<VISIBLE? .L>>
<RTRUE>)
(T
<RFALSE>)>>
<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" (WHR <>))
<COND (<NOT .WHR> <SET WHR ,PROTAGONIST>)>
<HELD? .OBJ .WHR>>
<ROUTINE HELD? (OBJ "OPTIONAL" (CONT <>))
<COND (<NOT .CONT>
<SET CONT ,WINNER>)>
<COND (<NOT .OBJ>
<RFALSE>)
(<IN? .OBJ .CONT>
<RTRUE>)
(<IN? .OBJ ,ROOMS>
<RFALSE>)
(<IN? .OBJ ,GLOBAL-OBJECTS>
<RFALSE>)
(T
<HELD? <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>>
<INTBL? .OBJ1 .TEE </ <PTSIZE .TEE> 2>>)>>
<ROUTINE FIND-IN (WHERE FLAG-IN-QUESTION "OPTIONAL" (STRING <>) "AUX" 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>)
(<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 LOC-CLOSED ()
<COND (<AND <FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>
<FSET? ,PRSO ,TAKEBIT>>
<TELL "But" T <LOC ,PRSO> " is closed!" CR>
<RTRUE>)
(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 HACK-HACK (STR)
<TELL .STR THE ,PRSO <PICK-ONE ,HO-HUM> CR>>
<GLOBAL HO-HUM
<LTABLE
0
" won't help you."
" is useless, or worse."
" can have no desirable effect.">>
<GLOBAL YUKS
<LTABLE
0
"What a concept!"
"That's ridiculous!"
"Not a chance!">>
<ROUTINE IMPOSSIBLES ()
<TELL <PICK-ONE ,IMPOSSIBLE-LIST> CR>>
<GLOBAL IMPOSSIBLE-LIST
<LTABLE
0
"Don't even consider it!"
"The strain is showing!"
"That's impossible!"
"Try to think more rationally!">>
<ROUTINE WASTES ()
<TELL <PICK-ONE ,WASTE-LIST> CR>>
<GLOBAL WASTE-LIST
<LTABLE 0
"That's a waste of time, and you haven't much left."
"Stop wasting time."
"There's another few seconds down the drain.">>
<ROUTINE V-WATCH () <PERFORM ,V?EXAMINE ,PRSO> <RTRUE>>
<ROUTINE V-SHOOT-FLIP ()
<PERFORM ,V?SHOOT ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SHOOT ()
<COND (<OR <EQUAL? <GET ,P-OFW 0> ,W?PHOTO ,W?PHOTOGRAPH ,W?PICTURE>
<AND <EQUAL? ,SCENARIO 1>
<IN? ,CAMERA ,WINNER>>>
<PERFORM ,V?PHOTOGRAPH ,PRSO>
<RTRUE>)>
<COND (<FSET? ,PRSO ,PERSON>
<TELL "That wouldn't help." CR>)
(T <TELL "You can't shoot that." CR>)>>
<ROUTINE V-OIL ()
<TELL "There's nothing to be gained by oiling that." CR>>
<ROUTINE V-TAKE-WITH ()
<TELL "You don't need to take it with that." CR>>
<ROUTINE V-LOAD ()
<TELL "You can't load that." CR>>
<ROUTINE V-SLOAD ()
<PERFORM ,V?LOAD ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-REPLACE ()
<COND (<AND <NOT ,PRSI>
<EQUAL? ,PRSO ,PEN-CAP>>
<PERFORM ,V?PUT-ON ,PEN-CAP ,EXPLODING-PEN>
<RTRUE>)
(T
<TELL
"You'll have to say what to put the " D ,PRSO " in." CR>)>>
<ROUTINE V-PHOTOGRAPH ()
<COND (<AND ,PRSI <NOT <EQUAL? ,PRSI ,CAMERA>>>
<TELL
"You're not much of a photographer, if you think you can take pictures with
a " D ,PRSI "." CR>)
(<AND <NOT ,PRSI> <NOT <IN? ,CAMERA ,WINNER>>>
<TELL
"Perhaps you're thinking of a mental picture, since you won't get any
other without a camera." CR>)
(<AND <EQUAL? ,PRSO ,CAMERA>
<NOT <EQUAL? ,HERE ,LAVATORY>>>
<TELL
"Too bad you haven't got a mirror." CR>)
(<OR <EQUAL? ,PRSO ,BODY-PARTS ,LEFT-ARM ,RIGHT-ARM>
<EQUAL? ,PRSO ,PICTURE>>
<TELL "That would be a good trick." CR>)
(<AND <ULTIMATELY-IN? ,PRSO ,WINNER>
<NOT <EQUAL? ,PRSO ,CAMERA>>>
<TELL
"You'll have to put it down if you're going to take a picture of it." CR>)
(<EQUAL? ,PRSO ,ME>
<TELL
"You have more than enough of these already." CR>)
(<EQUAL? <LOC ,PRSO> ,TOWEL-DISPENSER ,TOILET-KIT ,BRIEFCASE>
<TELL
"You might take it out of the " D <LOC ,PRSO> " first." CR>)
(<FSET? ,HERE ,PLATFORMBIT>
<TELL
"A guard approaches you, waving his arms, and saying \"Nye mneshna
fotomattni!\"" CR>)
(T
<TAKE-A-PICTURE>
<RTRUE>)>>
<ROUTINE V-REWIND ()
<TELL "That is quite a concept." CR>>
<ROUTINE V-CROSS ()
<TELL
"You'll have to indicate which direction you intend to go." CR>>
<ROUTINE V-FOLD ()
<TELL "There's no use in folding that." CR>>
<ROUTINE V-UNFOLD ()
<TELL "It's not folded up." CR>>
<ROUTINE V-SURRENDER ()
<COND (<EQUAL? ,SCENARIO 2>
<JIGS-UP
"You walk to the border station, waving your bloody shirt like a
white flag, until the guards come and take you away.">)
(T
<TELL
"To whom? Why?" CR>)>>
<ROUTINE V-DISPOSE ()
<COND (<AND <EQUAL? ,HERE ,COMP-5>
<FSET? ,COMP-WINDOW ,OPENBIT>
<IN? ,PRSO ,WINNER>>
<PERFORM ,V?PUT-THROUGH ,PRSO ,COMP-WINDOW>
<RTRUE>)
(<FSET? ,PRSO ,PERSON>
<TELL
"That's something you'll have to do on your own." CR>)
(T
<TELL
"You'll have to be more explicit about how you want to throw it out." CR>)>>
<ROUTINE V-WET ()
<PERFORM ,V?PUT ,PRSO ,GLOBAL-WATER>
<RTRUE>>
<ROUTINE V-BRIBE ()
<TELL "You can't bribe " THE ,PRSO ,PERIOD-CR>>
<ROUTINE V-TOPPLE ()
<PERFORM ,V?KILL ,PRSO>>
<ROUTINE V-STRANGLE ()
<TELL "Why on earth do that?" CR>>
<ROUTINE V-HINTS-OFF ()
<TELL "[Hints are now disabled for this session.]" CR>
<SETG HINTS-OFF T>>
<ROUTINE V-HIT ()
<PERFORM ,V?KILL ,PRSO ,PRSI>
<RTRUE>>
<ROUTINE V-STACK ()
<TELL "You're wasting time." CR>>
;<ROUTINE V-$CLOCK ()
<COND (,VERBOSE-CLOCK <SETG VERBOSE-CLOCK <>>)
(T <SETG VERBOSE-CLOCK T>)>
<RTRUE>>
;<ROUTINE V-$SUSPICION ()
<COND (<NOT ,PRSO>)
(<EQUAL? ,PRSO ,INTNUM>
<SETG SUSPICION ,P-NUMBER>)>
<TELL "[Suspicion: " N ,SUSPICION "]" CR>>
;<ROUTINE V-$CONTACT ()
<TELL D ,CONTACT CR>>
<ROUTINE FLUSH-BAD-SCENARIO (SC "AUX" F N)
<SET F <FIRST? ,PROTAGONIST>>
<REPEAT ()
<COND (<ZERO? .F> <RETURN>)
(T
<SET N <NEXT? .F>>
<COND (<AND <GETP .F ,P?SCENARIO>
<NOT <EQUAL? <GETP .F ,P?SCENARIO> .SC>>>
;<TELL CR "[Flushing " D .F "]">
<REMOVE .F>)>
<SET F .N>)>>
;<TELL CR "[Chapter Flushed/ RETURN to continue]" CR>
;<INPUT 1>>
<ROUTINE V-SLOW-TIME ()
<SETG READ-CLOCK 30>
<SETG CLOCK-MOVE 0>
<TELL "Slow time." CR>>
<ROUTINE V-FAST-TIME ()
<SETG READ-CLOCK 10>
<SETG CLOCK-MOVE 0>
<TELL "Fast (real) time." CR>>
;<ROUTINE V-$WATCH ()
<TELL "WATCH debugging ">
<COND (,SL-DEBUG
<SETG SL-DEBUG <>>
<TELL "off">)
(T
<SETG SL-DEBUG T>
<TELL "on">)>
<TELL ,PERIOD-CR>>
<ROUTINE V-PULL ()
<TELL "It's not clear what you're driving at." CR>>