stationfall/verbs.zil

3275 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
STATIONFALL
(c) Copyright 1987 Infocom, Inc. All Rights Reserved."
;"subtitle game commands"
<GLOBAL VERBOSITY 1> ;"0 = superbrief, 1 = brief, 2 = verbose"
<ROUTINE V-VERBOSE ()
<COND (<EQUAL? ,VERBOSITY 2>
<TELL ,ALREADY-IN-MODE>)
(T
<SETG VERBOSITY 2>
<TELL "Maximum verbosity." CR CR>
<V-LOOK>)>>
<ROUTINE V-BRIEF ()
<COND (<EQUAL? ,VERBOSITY 1>
<TELL ,ALREADY-IN-MODE>)
(T
<SETG VERBOSITY 1>
<TELL "Brief descriptions." CR>)>>
<ROUTINE V-SUPER-BRIEF ()
<COND (<EQUAL? ,VERBOSITY 0>
<TELL ,ALREADY-IN-MODE>)
(T
<SETG VERBOSITY 0>
<TELL "Superbrief descriptions." CR>)>>
<ROUTINE V-SAVE ()
<SETG P-CONT <>> ;"flush anything on input line after SAVE"
<SETG QUOTE-FLAG <>>
<PUTB ,OOPS-INBUF 1 0> ;"retrofix 50"
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<NOT <EQUAL? ,HERE ,FACTORY>>>
<TELL
"Floyd's eyes light up. \"Oh boy! Are we gonna try something
dangerous now?\"" CR CR>
;<CONTINUE>)>
<COND (<SAVE>
<TELL ,OK>)
(T
<TELL ,FAILED>)>>
<ROUTINE V-RESTORE ()
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<NOT <EQUAL? ,HERE ,FACTORY>>>
<TELL
"Floyd looks disappointed but understanding. \"That part of the story
was more fun,\" he sighs." CR CR>
;<CONTINUE>)>
<COND (<RESTORE>
<TELL ,OK>)
(T
<TELL ,FAILED>)>>
<ROUTINE CONTINUE ()
<TELL "[Hit RETURN/ENTER.]" CR>
<PUTB ,P-LEXV 0 10>
<READ ,P-INBUF ,P-LEXV>
<PUTB ,P-LEXV 0 60>>
<ROUTINE TELL-SCORE ()
<TELL "It is Day " N ,DAY " of your adventure. ">
<V-TIME T>
<TELL
" Your score is " N ,SCORE " (of 80 points), giving you the rank of ">
<COND (<EQUAL? ,SCORE 0>
<TELL "Insignificant Nobody">)
(<L? ,SCORE 17> ;"1 thru 16"
<TELL "Rising Young Insignificant Nobody">)
(<L? ,SCORE 27> ;"17 thru 26"
<TELL "One-Day Flash on the Evening News">)
(<L? ,SCORE 40> ;"27 thru 39"
<TELL "Footnote in History">)
(<L? ,SCORE 50> ;"40 thru 49"
<TELL "International VIP">)
(<L? ,SCORE 65> ;"50 thru 64"
<TELL "Interplanetary Star">)
(<L? ,SCORE 80> ;"65 thru 79"
<TELL "Interstellar Superstar">)
(T ;"80"
<TELL "Intergalactic Mega-Hero">)>
<TELL ,PERIOD-CR>>
<ROUTINE V-SCRIPT ()
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<NOT <EQUAL? ,HERE ,FACTORY>>>
<TELL
" \"Uh oh,\" frets Floyd. \"Once printer is on, Floyd will have to be
careful not to use any of the bad words he learned aboard the Duffy!\"" CR>)>
<PUT 0 8 <BOR <GET 0 8> 1>>
<CORP-NOTICE "begins">
<V-VERSION>>
<ROUTINE V-UNSCRIPT ()
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<NOT <EQUAL? ,HERE ,FACTORY>>>
<TELL
" Floyd nods his approval. \"Good idea. Printer paper expensive. Best
to save for important scenes. Not like this one.\"" CR>)>
<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 STATIONFALL." CR>>
<ROUTINE V-DIAGNOSE ()
<SETG C-ELAPSED 18>
<COND (<EQUAL? ,HERE ,FACTORY>
<TELL "We're talking adrenaline. Lots of adrenalin." CR>)
(T
<TELL "You feel ">
<COND (,STUNNED
<TELL "numb. ">
<YOURE-STUNNED>
<RTRUE>)
(<EQUAL? ,SLEEPY-LEVEL 0>
<TELL "well-rested">)
(T
<COND (<EQUAL? ,SLEEPY-LEVEL 1>
<TELL "sort of">)
(<EQUAL? ,SLEEPY-LEVEL 2>
<TELL "quite">)
(T
<TELL "phenomenally">)>
<TELL " tired">)>
<COND (<OR <AND <EQUAL? ,SLEEPY-LEVEL 0>
<G? ,HUNGER-LEVEL 0>>
<AND <G? ,SLEEPY-LEVEL 0>
<EQUAL? ,HUNGER-LEVEL 0>>>
<TELL ", but">)
(T
<TELL ", and">)>
<TELL " you are ">
<COND (<EQUAL? ,HUNGER-LEVEL 0>
<TELL "well-fed">)
(T
<COND (<EQUAL? ,HUNGER-LEVEL 1>
<TELL "fairly">)
(<EQUAL? ,HUNGER-LEVEL 2>
<TELL "very">)
(T
<TELL "awesomely">)>
<TELL " hungry and thirsty">)>
<TELL ". In all other respects, you are in good health." CR>)>>
<ROUTINE V-INVENTORY ()
<SETG D-BIT <- ,WORNBIT>>
<SETG C-ELAPSED 18>
<COND (<NOT <DESCRIBE-CONTENTS ,WINNER
<>
<+ ,D-ALL? ,D-PARA?>>>
<TELL "You are empty-handed.">)>
<SETG D-BIT ,WORNBIT>
<DESCRIBE-CONTENTS ,WINNER
<>
<+ ,D-ALL? ,D-PARA?>>
<SETG D-BIT <>>
<CRLF>>
<ROUTINE V-QUIT ()
<TELL-SCORE>
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<NOT <EQUAL? ,HERE ,FACTORY>>>
<TELL " Floyd grins impishly. \"Giving up, huh?\"" CR>)>
<DO-YOU-WISH "leave the game">
<COND (<YES?>
<QUIT>)
(T
<TELL ,OK>)>>
<ROUTINE V-RESTART ()
<TELL-SCORE>
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<FSET? ,ROBOT-POOL ,TOUCHBIT>
<NOT <EQUAL? ,HERE ,ROBOT-POOL>>>
<TELL
" Floyd rolls his eyes. \"We're gonna have to go through that stupid scene in
the Robot Pool again?\"" CR>)>
<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
" According to the Treaty of Gishen IV (amended after the Battle on Sorkin
III in 11347 GY) you have the opportunity to restart the story, restore a saved
position, or end this session of the game. In the interests of interstellar
peace, 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>>
;<TELL "You took " N ,ELAPSED-MOVES " turns." CR>
<QUIT>)>
<AGAIN>>>
<ROUTINE V-SCORE ()
<TELL "You're currently getting ">
<COND (<EQUAL? ,VERBOSITY 0>
<TELL "superbrief">)
(<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
"STATIONFALL|
Infocom interactive fiction -- a science fiction story|
Copyright (c) 1987 by Infocom, Inc. All rights reserved.|
STATIONFALL 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>
<COND (<AND <VISIBLE? ,FLOYD>
<FSET? ,FLOYD ,TOUCHBIT>
<FSET? ,FLOYD ,ACTIVEBIT>
<NOT <EQUAL? ,HERE ,FACTORY>>>
<TELL
" Floyd looks out at you, right through your computer screen. \"See that
copyright notice?\" he asks in a defiant tone. \"If anyone tries pirating
this disk, they'll have Floyd to answer to.\"" CR>)>>
<CONSTANT D-RECORD-ON 4>
<CONSTANT D-RECORD-OFF -4>
<ROUTINE V-$COMMAND ()
<DIRIN 1>
<RTRUE>>
<ROUTINE V-$RANDOM ()
<COND (<NOT <PRSO? ,INTNUM>>
<TELL "Bug1" 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 "** 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 V-$STATION ()
<FSET ,FLOYD ,TOUCHBIT>
<FSET ,SPACETRUCK-HATCH ,OPENBIT>
<FSET ,IRIS-HATCH ,OPENBIT>
<SETG ROBOT-PICKED ,FLOYD>
<SETG SPACETRUCK-COUNTER 5>
<FCLEAR ,SPACETRUCK ,WEIGHTLESSBIT>
<REMOVE ,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM>
<REMOVE ,ROBOT-USE-AUTHORIZATION-FORM>
<MOVE ,FLOYD ,SPACETRUCK>
<QUEUE I-WELDER -1>
<QUEUE I-FLOYD -1>
<QUEUE I-PLATO 750>
<GOTO ,SPACETRUCK>>
;<ROUTINE V-$KEY ()
<QUEUE I-LIGHTS-OUT <+ <RANDOM 200> 20>>
<MOVE ,KEY ,PROTAGONIST>
<MOVE ,HEADLAMP ,PROTAGONIST>
<FSET ,HEADLAMP ,WORNBIT>
<MOVE ,JAMMER ,PROTAGONIST>
<MOVE ,TWENTY-PRONG-FROMITZ-BOARD ,PROTAGONIST>
<SETG JAMMER-SETTING 710>
<FSET ,JAMMER ,ACTIVEBIT>
<MOVE ,ZAPGUN ,PROTAGONIST>
<GOTO ,COMMANDERS-QUARTERS>>
;"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>)
(<AND ,AWAITING-REPLY
<NO-WORD <GET ,P-LEXV ,P-CONT>>>
<V-NO>)
(T
<TELL "Nobody is awaiting your answer." CR>)>
<STOP>>
<ROUTINE V-APPLAUD ()
<TELL "\"Clap.\"" CR>
<COND (<IN? ,OSTRICH ,HERE>
<TELL " ">
<PERFORM ,V?SCARE ,OSTRICH>
<RTRUE>)>
<RTRUE>>
<ROUTINE V-APPLY ()
<COND (<FSET? ,PRSO ,WEARBIT>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(T
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY <+ ,C-ELAPSED 2>>
<TELL "Apply" T ,PRSO " for what? A job?" CR>)>>
<ROUTINE V-ASK-ABOUT ("AUX" OWINNER)
<COND (<PRSO? ,ME>
<PERFORM ,V?TELL ,ME>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<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 ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<SETG WINNER ,PRSO>
<PERFORM ,V?GIVE ,PRSI ,ME>)
(T
<PERFORM ,V?TELL ,PRSO>)>
<RTRUE>>
<ROUTINE V-ATTRACT ()
<COND (<PRSI? ,BOOTS>
<WASTES>)
(T
<TELL ,HUH>)>>
<ROUTINE V-BITE ()
<HACK-HACK "Biting">>
<ROUTINE V-BURN ()
<COND (<AND <EQUAL? ,HERE ,CHAPEL>
<FSET? ,ETERNAL-FLAME ,ONBIT>>
<PERFORM ,V?PUT ,PRSO ,ETERNAL-FLAME>
<RTRUE>)
(T
<TELL "You have no source of fire." CR>)>>
;<ROUTINE V-BUY ()
<TELL "Sorry, there aren't any on sale here." CR>>
;<ROUTINE V-BUY-WITH ()
<COND (<PRSI? ,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 (<NOT <VISIBLE? ,PRSO>>
<CANT-SEE ,PRSO>)
(T
<PERFORM ,V?TELL ,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-CLEAN ()
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY <+ ,C-ELAPSED 2>>
<TELL "Do you also do windows?" CR>>
<ROUTINE V-CLIMB-DOWN ()
<COND (<PRSO? ,ROOMS>
<DO-WALK ,P?DOWN>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-CLIMB-ON ()
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN>
<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>
<COND (<AND ,TIMER-CONNECTED
<ULTIMATELY-IN? ,TIMER ,PRSO>
<NOT <ULTIMATELY-IN? ,DETONATOR ,PRSO>>>
<DO-FIRST "disconnect the timer">)
(<AND ,TIMER-CONNECTED
<ULTIMATELY-IN? ,DETONATOR ,PRSO>
<NOT <ULTIMATELY-IN? ,TIMER ,PRSO>>>
<DO-FIRST "disconnect the timer">)
(<AND ,EXPLOSIVE-CONNECTED
<ULTIMATELY-IN? ,DETONATOR ,PRSO>
<NOT <ULTIMATELY-IN? ,EXPLOSIVE ,PRSO>>>
<DO-FIRST "disconnect the explosive">)
(<AND ,EXPLOSIVE-CONNECTED
<ULTIMATELY-IN? ,EXPLOSIVE ,PRSO>
<NOT <ULTIMATELY-IN? ,DETONATOR ,PRSO>>>
<DO-FIRST "disconnect the explosive">)
(T
<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-COMFORT ()
<COND (<OR <FSET? ,PRSO ,ACTORBIT>
<PRSO? ,BALLOON>>
<TELL "But" T ,PRSO " isn't in need of comforting!" CR>)
(T
<TELL ,HUH>)>>
<ROUTINE V-COMPARE ()
<TELL "They're incomparable." CR>>
<ROUTINE V-CONNECT ()
<IMPOSSIBLES>>
<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-CRUMPLE ()
<CANT-VERB-A-PRSO "crumple">>
<ROUTINE V-CUT ()
<COND (<NOT ,PRSI>
<IMPOSSIBLES>)
(T
<TELL
"To put it bluntly, neither" T ,PRSI " nor you are very sharp." CR>)>>
<ROUTINE V-DIG ()
<WASTES>>
<ROUTINE V-DISCONNECT ()
<TELL "But" T ,PRSO " isn't connected to">
<COND (,PRSI
<TELL TR ,PRSI>)
(T
<TELL " anything!" CR>)>>
<ROUTINE V-DISEMBARK ()
<COND (<AND <EQUAL? ,P-PRSA-WORD ,W?HOLD>
<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?DOWN>>
;"HOLD DOWN OBJECT should now equal PUSH OBJECT"
<PERFORM ,V?PUSH ,PRSO>
<RTRUE>)
(<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>)
(T
<MOVE ,PROTAGONIST ,HERE>
<TELL "You get o">
<COND (<PRSO? ,BED>
<TELL "ff">)
(T
<TELL "ut of">)>
<TELL T ,PRSO>
<COND (<EQUAL? <LOC ,FLOYD> ,PILOT-SEAT ,COPILOT-SEAT>
<MOVE ,FLOYD ,HERE>
<TELL ". Floyd gets up also">)>
<TELL ,PERIOD-CR>)>>
<ROUTINE V-DRESS ()
<COND (,PRSO
<CANT-VERB-A-PRSO "dress">)
(T
<PERFORM ,V?GET-DRESSED ,ROOMS>
<RTRUE>)>>
<ROUTINE PRE-DRILL ()
<COND (<NOT ,PRSI>
<COND (<AND <ULTIMATELY-IN? ,DRILL>
<VISIBLE? ,DRILL>>
<SETG PRSI ,DRILL>)
(T
<TELL
"With what? Your head isn't QUITE pointy enough." CR>
<RTRUE>)>)>
<COND (<NOT <PRSI? ,DRILL>>
<TELL ,YOU-CANT "drill with" AR ,PRSI>)
(<NOT <FIRST? ,DRILL>>
<TELL "There's no bit in the drill!" CR>)
(<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)
(<NOT ,DRILL-FOOTNOTE>
<SETG DRILL-FOOTNOTE T>
<TELL "(Footnote 5) ">
<RFALSE>)>>
<ROUTINE V-DRILL ()
<COND (<FSET? ,PRSO ,TAKEBIT>
<TELL
"You'll need a vise to hold" T ,PRSO " before you can drill it." CR>)
(T
<TELL
"The point of the drill doesn't seem to be as hard as" TR ,PRSO>)>>
<ROUTINE V-DRILL-HOLE ()
<COND (<EQUAL? <GET ,P-NAMW 0> ,W?HOLE>
<PERFORM ,V?DRILL ,PRSI>
<RTRUE>)
(T
<RECOGNIZE>)>>
;<ROUTINE V-DRIVE ()
<V-DRIVE-DIR>>
;<ROUTINE V-DRIVE-DIR ()
<CANT-VERB-A-PRSO "drive">>
<ROUTINE V-DROP ()
<COND (<IN? ,PRSO ,DRILL>
<TELL "[removing" T ,PRSO " from the drill first]" CR>)>
<COND (<EQUAL? ,HERE ,TOP-OF-AIR-SHAFT ,AIR-SHAFT>
<MOVE ,PRSO ,BOTTOM-OF-AIR-SHAFT>
<TELL "It plunges down the shaft." CR>)
(T
<COND (<IN? ,PROTAGONIST ,HOLDING-TANK>
<MOVE ,PRSO ,HOLDING-TANK>)
(T
<MOVE ,PRSO ,HERE>)>
<TELL "Dropped">
<COND (<FSET? ,HERE ,WEIGHTLESSBIT>
<TELL ", so to speak">)>
<TELL ,PERIOD-CR>)>>
<ROUTINE PRE-EAT ()
<COND (,STUNNED
<YOURE-STUNNED>)
(<AND ,PRSI
<NOT <IN? ,PRSO ,PRSI>>>
<NOT-IN>)
(<FSET? ,SPACESUIT ,WORNBIT>
<TELL ,YOU-CANT "eat while you're wearing a space suit!" CR>)>>
<ROUTINE V-EAT ("AUX" (FOOD <>))
<COND (<SET FOOD <GETP ,PRSO ,P?FOOD-DESC>>
<COND (<EQUAL? ,HUNGER-LEVEL 0>
<TELL ,NOT-HUNGRY>)
(T
<REMOVE ,PRSO>
<SETG C-ELAPSED 15>
<SETG HUNGER-LEVEL 0>
<QUEUE I-HUNGER-WARNINGS 2250>
<TELL "Mmmm...that tasted just like yummy" .FOOD>
<COND (<PRSO? ,NECTAR>
<ANTI-LITTER ,NECTAR>)
(<PRSO? ,SOUP>
<TELL ". The soup was ">
<DESCRIBE-SOUP-TEMPERATURE>)
(T
<TELL ,PERIOD-CR>)>)>)
(T
<TELL
"It's doubtful that" T ,PRSO " would agree with you." CR>)>>
<ROUTINE V-EAT-FROM ("AUX" X)
<COND (<NOT <FSET? ,PRSO ,OPENBIT>>
<DO-FIRST "open" ,PRSO>)
(<SET X <FIRST? ,PRSO>>
<COND (<NEXT? .X>
<TELL "(How about" T .X "?)" CR>)>
<PERFORM ,V?EAT .X>
<RTRUE>)
(T
<TELL "It's empty!" 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>)
(T
<SET OBJ <FIRST? ,PRSO>>
<REPEAT ()
<SET NXT <NEXT? .OBJ>>
<COND (<NOT <EQUAL? .OBJ ,PROTAGONIST>>
<TELL D .OBJ ": ">
<COND (<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 PRE-ENTER ()
<COND (<IN? ,PROTAGONIST ,PRSO>
<TELL ,LOOK-AROUND>)
(<ULTIMATELY-IN? ,PRSO>
<TELL ,HOLDING-IT>)
(<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)>>
<ROUTINE V-ENTER ("AUX" (AV <LOC ,PROTAGONIST>))
<COND (<FSET? ,PRSO ,DOORBIT>
<DO-WALK <OTHER-SIDE ,PRSO>>
<RTRUE>)
(<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>>)
(T
<MOVE ,PROTAGONIST ,PRSO>
<TELL "You are now ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n" T ,PRSO ".">
;<FSET ,PRSO ,TOUCHBIT>
<APPLY <GETP ,PRSO ,P?ACTION> ,M-ENTER>
<CRLF>)>)
(<PRSO? ,AIR>
<V-LEAP>)
(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?ON>
<CANT-VERB-A-PRSO "get onto">)
(<NOT <FSET? ,PRSO ,TAKEBIT>>
<TELL-HIT-HEAD>)
(<EQUAL? <GET ,P-ITBL ,P-PREP1> ,PR?IN>
<CANT-VERB-A-PRSO "get into">)>>
<ROUTINE V-EXAMINE ()
<SETG C-ELAPSED 32>
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (<FIRST? ,PRSO>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)
(T
<NOTHING-INTERESTING>
<TELL "about" TR ,PRSO>)>)
(<FSET? ,PRSO ,SURFACEBIT>
<V-LOOK-INSIDE>)
(<FSET? ,PRSO ,DOORBIT>
<TELL ,IT-SEEMS-THAT T ,PRSO " is ">
<OPEN-CLOSED ,PRSO>
<TELL ,PERIOD-CR>)
(<IN? ,PROTAGONIST ,PRSO>
<DESCRIBE-VEHICLE>)
(<AND <FSET? ,PRSO ,CONTBIT>
<NOT <FSET? ,PRSO ,VEHBIT>>>
<TELL "It's ">
<OPEN-CLOSED ,PRSO>
<COND (<OR <FSET? ,PRSO ,OPENBIT>
<FSET? ,PRSO ,TRANSBIT>>
<TELL ". ">
<V-LOOK-INSIDE>)
(T
<TELL ,PERIOD-CR>)>)
(<FSET? ,PRSO ,LIGHTBIT>
<TELL "It looks like" T ,PRSO " is o">
<COND (<FSET? ,PRSO ,ACTIVEBIT>
<TELL "n">)
(T
<TELL "ff">)>
<TELL ,PERIOD-CR>)
(<FSET? ,PRSO ,READBIT>
<PERFORM ,V?READ ,PRSO>
<RTRUE>)
(<FSET? ,PRSO ,NARTICLEBIT>
<SENSE-OBJECT "look">)
(<OR <PROB 35>
<PRSO? ,PSEUDO-OBJECT>>
<TELL "Totally ordinary looking " D ,PRSO ,PERIOD-CR>)
(T
<NOTHING-INTERESTING>
<TELL "about" TR ,PRSO>)>>
<ROUTINE V-EXERCISE ()
<COND (,STUNNED
<YOURE-STUNNED>
<RTRUE>)
(<IN? ,PROTAGONIST ,EXERCISE-MACHINE>
<COND (<AND <ULTIMATELY-IN? ,JAMMER ,HERE>
<EQUAL? ,JAMMER-SETTING 710>
<FSET? ,JAMMER ,ACTIVEBIT>
<IN? ,TWENTY-PRONG-FROMITZ-BOARD ,JAMMER>>
<TELL "The machine seems to be frozen." CR>
<RTRUE>)
(T
<TELL "You do a few repetitions">)>)
(T
<TELL "You do a few push-ups">)>
<TELL
". Dr. Ventricalli, the Duffy's cardiologist, would be pleased." 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>)
(T
<DO-WALK ,P?OUT>)>>
<ROUTINE V-FEED ()
<TELL "You have no food for" TR ,PRSO>>
<ROUTINE V-FILL ()
<COND ;(<AND <FSET? ,PRSO ,CONTBIT>
<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>))
<SETG C-ELAPSED 18>
<COND (<NOT .L>
<PRONOUN>
<TELL " could be anywhere!" CR>)
(<IN? ,PRSO ,PROTAGONIST>
<TELL "You have it!" CR>)
(<OR <IN? ,PRSO ,HERE>
<GLOBAL-IN? ,PRSO ,HERE>
<PRSO? ,PSEUDO-OBJECT>>
<TELL "Right in front of you." CR>)
(<AND <FSET? .L ,ACTORBIT>
<VISIBLE? .L>>
<TELL "Looks as if" T .L " has it." CR>)
(<AND <FSET? .L ,CONTBIT>
<VISIBLE? ,PRSO>
<NOT <EQUAL? .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>)
(<OR <NOT .WHERE>
<IN? ,PRSO ,GLOBAL-OBJECTS>>
<TELL ,YOULL-HAVE-TO "do that yourself." CR>)
(T
<TELL "Beats me." CR>)>>
<ROUTINE V-FIX ()
<TELL
"[Such general commands won't work. To repair something, you must perform the
specific steps required.]" CR>>
<ROUTINE V-FLATTEN ()
<TELL ,HUH>>
<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>>
<GLOBAL READ-A-FOOTNOTE <>>
<ROUTINE V-FOOTNOTE ()
<SETG C-ELAPSED 0>
<COND (<OR <NOT ,PRSO>
<NOT <PRSO? ,INTNUM>>>
<TELL "Specify a number, as in \"FOOTNOTE 6.\"" CR>
<RTRUE>)
(<EQUAL? ,P-NUMBER 1>
<TELL
"These must be those special zero-gee dice which project their own
gravitational field onto the nearest surface. Zero-gee dice are, of
course, notoriously easy to load">)
(<EQUAL? ,P-NUMBER 2>
<TELL
,UNFAMILIAR "Blather was your officious, tyrannical superior aboard the S.P.S.
Feinstein. He was demoted because of his craven behavior during the destruction
of the Feinstein">)
(<EQUAL? ,P-NUMBER 3>
<TELL
"The story of your acquaintance with Floyd and the episode on Resida are
recounted in PLANETFALL">)
(<EQUAL? ,P-NUMBER 4>
<TELL
"This is, of course, impossible. To do this, the creature would have to be
an order of magnitude larger. There are two possible explanations: 1. The
creature actually extends part of its volume into a parallel dimension"
,CALLOUS-DISREGARD>)
(<EQUAL? ,P-NUMBER 5 9 13>
<TELL "Kids: ">
<COND (<EQUAL? ,P-NUMBER 5>
<TELL "drills">)
(<EQUAL? ,P-NUMBER 9>
<TELL "zapguns">)
(T
<TELL "FREZONE (tm) explosives">)>
<TELL
" are very dangerous. Don't try this at home without adult supervision">)
(<EQUAL? ,P-NUMBER 6>
<TELL "That was just an example">)
(<EQUAL? ,P-NUMBER 7>
<TELL
,UNFAMILIAR "your frenzied (former) boss, Ensign Blather, would toss you into
the Feinstein's brig for the tiniest violation of the Stellar Patrol's
near-infinity of trivial regulations">)
(<EQUAL? ,P-NUMBER 8>
<TELL
"The author wishes to refute any claims that the use of footnotes is a ripoff
from the interactive fiction version of THE HITCHHIKER'S GUIDE TO THE GALAXY.
This is not true. Well, maybe it's a little bit true, in which case the author
wishes to point out his right to rip off his own ideas. So there">)
;"9 handled above"
(<EQUAL? ,P-NUMBER 10> ;"not referenced"
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 1> ;"FOOTNOTE turns don't run clocker"
<TELL "Isn't it fun reading through all the footnotes?" CR>
<RTRUE>)
(<EQUAL? ,P-NUMBER 11 12>
<TELL
"How to keep a STATIONFALL player busy all day (Footnote 1">
<COND (<EQUAL? ,P-NUMBER 11>
<TELL "2)">)
(T
<TELL "1)">)>)
;"13 handled above"
(<EQUAL? ,P-NUMBER 14>
<TELL
"Actually, it is only a myth that ostriches stick their heads in holes when
frightened. The fact that this ostrich does can be attributed to: 1. an
addling of the animal's brain caused by extended exposure to weightlessness"
,CALLOUS-DISREGARD>)
(<EQUAL? ,P-NUMBER 15>
<TELL
"IF you also played Planetfall, and IF you scrambled any magnetic cards in
Planetfall by being careless with the magnet: GOTCHA AGAIN! (Footnote 16)" CR>
<RTRUE>)
(<EQUAL? ,P-NUMBER 16>
<TELL
"Reminds me of that old saying, \"Fool me once, shame on you. Fool me twice,
shame on me!\"" CR>
<RTRUE>)
(T
<TELL "There is no Footnote " N ,P-NUMBER ,PERIOD-CR>
<RTRUE>)>
<COND (<NOT ,READ-A-FOOTNOTE>
<SETG READ-A-FOOTNOTE T>
<TELL ". (Footnote 8)">)>
<TELL ,PERIOD-CR>>
<ROUTINE PRE-GIVE ("AUX" IDROP-VALUE)
<COND (<AND <VERB? GIVE>
<PRSO? ,HANDS>>
<PERFORM ,V?SHAKE-WITH ,PRSI>
<RTRUE>)
(<SET IDROP-VALUE <IDROP>>
<RETURN .IDROP-VALUE>)>>
<ROUTINE V-GET-DRESSED ()
<COND (<PRSO? ,ROOMS>
<COND (<FSET? ,PATROL-UNIFORM ,WORNBIT>
<TELL "You are!" CR>)
(<VISIBLE? ,PATROL-UNIFORM>
<PERFORM ,V?WEAR ,PATROL-UNIFORM>
<RTRUE>)
(T
<TELL "No clothes in sight!" CR>)>)
(T
<RECOGNIZE>)>>
<ROUTINE V-GET-UNDRESSED ()
<COND (<PRSO? ,ROOMS>
<PERFORM ,V?TAKE-OFF ,PATROL-UNIFORM>
<RTRUE>)
(T
<RECOGNIZE>)>>
<ROUTINE V-GIVE ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<TELL "Briskly," T ,PRSI " declines 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-GREET ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<SETG WINNER ,PRSO>
<PERFORM ,V?HELLO>
<SETG WINNER ,PROTAGONIST>)
(T
<PERFORM ,V?TELL ,PRSO>)>
<RTRUE>>
<ROUTINE V-HELLO ()
<COND (,PRSO
<SETG P-WON <>>
<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
"[Help!?! You need help?!? What about me, your poor computer? My chips are
about to go, my mate just ran off with a mainframe from Milwaukee, and the
kid wants to be a talking greeting card when he grows up! Furtherm... Hey!
I'm not done! Mumk mpgrlph...]|
If you're really stuck, you can get an InvisiClues (TM) hint booklet
and map from your dealer, or by using the order form from your package."
CR>>
<ROUTINE V-HIDE ()
<TELL ,YOU-CANT "hide ">
<COND (,PRSO
<TELL "t">)>
<TELL "here." CR>>
<ROUTINE V-HUG ()
<TELL "Hugged." CR>>
<ROUTINE V-IN ("AUX" VEHICLE)
<DO-WALK ,P?IN>>
<ROUTINE V-KICK ()
<HACK-HACK "Kicking">>
<ROUTINE V-KILL ()
<COND (<PRSI? ,ZAPGUN>
<PERFORM ,V?SHOOT ,PRSO ,PRSI>
<RTRUE>)
(<AND <NOT ,PRSI>
<ULTIMATELY-IN? ,ZAPGUN>
<EQUAL? ,P-PRSA-WORD ,W?KILL>>
<TELL "(with" T ,ZAPGUN ")" CR>
<PERFORM ,V?SHOOT ,PRSO ,ZAPGUN>
<RTRUE>)
(<FSET? ,PRSO ,ACTORBIT>
<TELL "You succeeded in frightening" TR ,PRSO>)
(T
<TELL "Why attack" A ,PRSO "?" CR>)>>
<ROUTINE V-KISS ()
<TELL "I'd sooner kiss a pile of Antarian swamp mold." CR>>
<ROUTINE V-KNOCK ()
<COND (<FSET? ,PRSO ,DOORBIT>
<TELL "Silence answers back." CR>)
(T
<HACK-HACK "Knocking on">)>>
<ROUTINE V-LAUNCH ()
<TELL "Your brain is out to launch." CR>>
<ROUTINE V-LEAP ()
<COND (,STUNNED
<YOURE-STUNNED "jump">)
(<AND ,PRSO
<NOT <PRSO? ,ROOMS>>>
<TELL
"You have spent too much time among the leaping loon-toads of Leonia." CR>)
(<AND <EQUAL? ,HERE ,CHAPEL>
<FSET? ,STAR ,TRYTAKEBIT>>
<TELL
"Your best jump still leaves you half a meter short of the star." CR>)
(<EQUAL? ,HERE ,AIR-SHAFT ,TOP-OF-AIR-SHAFT>
<COND (<EQUAL? ,AIR-SHAFT-LOC 7>
<GOTO ,BOTTOM-OF-AIR-SHAFT>)
(T
<JIGS-UP "You plummet down the shaft...">)>)
(<EQUAL? ,HERE ,BOTTOM-OF-AIR-SHAFT>
<PERFORM ,V?OPEN ,GRATING>
<RTRUE>)
(<EQUAL? ,HERE ,VACUUM-STORAGE>
<TELL "You sail away from the village...">
<LOST-IN-SPACE>)
(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-LIE-DOWN ()
<COND (<PRSO? ,ROOMS>
<COND (<GLOBAL-IN? ,BED ,HERE>
<PERFORM ,V?ENTER ,BED>
<RTRUE>)
(<G? ,SLEEPY-LEVEL 0>
<V-SLEEP>)
(T
<WASTES>)>)
(<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-LISTEN ()
<SETG C-ELAPSED 18>
<COND (,PRSO
<SENSE-OBJECT "sound">)
(T
<TELL "You hear nothing of interest." CR>)>>
<ROUTINE V-LOCK ()
<YUKS>>
<ROUTINE PRE-LOOK ()
<COND (<AND <PRSO? ,STAR>
<IN? ,DIODE-M ,STAR>>
<RFALSE>)
(<NOT ,LIT>
<TELL ,TOO-DARK CR>)
(T
<RFALSE>)>>
<ROUTINE V-LOOK ()
<SETG C-ELAPSED 9>
<COND (<DESCRIBE-ROOM T>
<DESCRIBE-OBJECTS>)>
<RTRUE>>
<ROUTINE V-LOOK-BEHIND ()
<COND (<FSET? ,PRSO ,DOORBIT>
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)
(T
<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 (,STUNNED
<YOURE-STUNNED>)
(<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>
<CANT-VERB-A-PRSO "look inside">)
(T
<CANT-VERB-A-PRSO "look through">)>>
<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 ,AIR-SHAFT ,BOTTOM-OF-AIR-SHAFT
,BOTTOM-OF-ELEVATOR-SHAFT>
<TELL ,ONLY-BLACKNESS>)
(T
<PERFORM ,V?EXAMINE ,CEILING>
<RTRUE>)>)
(T
<PERFORM ,V?LOOK-INSIDE ,PRSO>
<RTRUE>)>>
<ROUTINE V-LOWER ()
<V-RAISE>>
<ROUTINE V-MAYBE ()
<YOU-SOUND "indecis">>
<ROUTINE V-MEASURE ()
<COND (<PRSO? ,ME ,HANDS ,TONGUE>
<TELL "Usual size." CR>)
(T
<TELL "The same size as any other " D ,PRSO ,PERIOD-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 PRE-MUNG ()
<COND (<AND ,PRSI
<PRSI? ,ZAPGUN>>
<PERFORM ,V?SHOOT ,PRSO ,PRSI>
<RTRUE>)
(<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)>>
<ROUTINE V-MUNG ()
<COND (<PRSO? ,ROOMS> ;"break out"
<TELL "Argh! Pimples!" CR>)
(T
<HACK-HACK "Trying to destroy">)>>
<ROUTINE V-NO ()
<COND (<EQUAL? ,AWAITING-REPLY 1>
<V-YES>)
(<EQUAL? ,AWAITING-REPLY 2 4>
<TELL "Floyd pouts." CR>)
(<EQUAL? ,AWAITING-REPLY 3>
<TELL "\"Figures.\"" CR>)
(T
<YOU-SOUND "negat">)>>
<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 ,ACTIVEBIT>
<FCLEAR ,PRSO ,ACTIVEBIT>
<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 ,LIGHTBIT>
<COND (<FSET? ,PRSO ,ACTIVEBIT>
<TELL ,ALREADY-IS>)
(T
<FSET ,PRSO ,ACTIVEBIT>
<COND (<PRSO? ,HEADLAMP>
<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>)
(<AND <NOT <FSET? ,PRSO ,DOORBIT>>
<NOT <FSET? ,PRSO ,CONTBIT>>>
<CANT-VERB-A-PRSO "open">)
(<FSET? ,PRSO ,LOCKEDBIT>
<TELL "It's locked." CR>)
(<FSET? ,PRSO ,DOORBIT>
<FSET ,PRSO ,OPENBIT>
<TELL "The " D ,PRSO " swings open." CR>)
(T
<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?>)>
<RTRUE>)>>
<ROUTINE V-PICK ()
<CANT-VERB-A-PRSO "pick">>
<ROUTINE V-PICK-UP ()
<PERFORM ,V?TAKE ,PRSO ,PRSI>
<RTRUE>>
<ROUTINE V-PLAY-WITH ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<WEE>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-POINT ()
<TELL "That would be pointless." CR>>
<ROUTINE V-POUR ()
<TELL
"Pouring or spilling non-liquids is specifically forbidden by section 17.9.2
of the Galactic Adventure Game Compendium of Rules." CR>>
<ROUTINE V-PRAY ()
<TELL "If you pray enough, your prayers may be answered." CR>>
<ROUTINE V-PUSH ()
<COND (<AND <EQUAL? ,P-PRSA-WORD ,W?PRESS ,W?IRON>
<EQUAL? ,HERE ,LAUNDRY>
<OR <NOT ,PRSI>
<PRSI? ,PRESSER>>>
<COND (<IN? ,PRSO ,PRESSER>
<PERFORM ,V?CLOSE ,PRESSER>
<RTRUE>)
(T
<TELL
,YOULL-HAVE-TO "put" T ,PRSO " in the presser first." CR>)>)
(T
<HACK-HACK "Pushing">)>>
<ROUTINE V-PUSH-DIR ()
<COND (<PRSI? ,INTDIR>
<V-PUSH>)
(T
<RECOGNIZE>)>>
<ROUTINE PRE-PUT ("AUX" IDROP-VALUE)
<COND (<PRSI? ,GROUND>
<PERFORM ,V?DROP ,PRSO>
<RTRUE>)
(<PRSO? ,HANDS>
<PERFORM <COND (<VERB? PUT> ,V?REACH-IN)
(T ,V?TOUCH)>
,PRSI>
<RTRUE>)
(<AND <NOT <PRSI? ,HANDS ,TONGUE>>
<PRE-LOOK> ;"it's too dark...">
<RTRUE>)
(<IN? ,PRSO ,PRSI>
<TELL "But" T ,PRSO " is already in" TR ,PRSI>)
(<ULTIMATELY-IN? ,PRSI ,PRSO>
<TELL ,YOU-CANT "put" T ,PRSO>
<COND (<EQUAL? <GET ,P-ITBL ,P-PREP2> ,PR?ON>
<TELL " on">)
(T
<TELL " in">)>
<TELL T ,PRSI " when" T ,PRSI " is already ">
<COND (<FSET? ,PRSO ,SURFACEBIT>
<TELL "on">)
(T
<TELL "in">)>
<TELL T ,PRSO "!" CR>)
(<UNTOUCHABLE? ,PRSI>
<CANT-REACH ,PRSI>)
(<SET IDROP-VALUE <IDROP>>
<RETURN .IDROP-VALUE>)>>
<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 ,YOU-CANT "do that from here." CR>)
(<AND <NOT <FSET? ,PRSI ,OPENBIT>>
<NOT <FSET? ,PRSI ,SURFACEBIT>>>
<THIS-IS-IT ,PRSI>
<DO-FIRST "open" ,PRSI>)
(<FSET? ,PRSI ,ACTORBIT>
<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>)
(T
<MOVE ,PRSO ,PRSI>
<SCORE-OBJ>
<TELL "Done." CR>)>>
<ROUTINE V-PUT-BEHIND ()
<WASTES>>
<ROUTINE V-PUT-ON ()
<COND (<PRSI? ,ME>
<PERFORM ,V?WEAR ,PRSO>
<RTRUE>)
(<OR <FSET? ,PRSI ,SURFACEBIT>
<FSET? ,PRSI ,VEHBIT>>
<V-PUT>)
(<EQUAL? ,P-PRSA-WORD ,W?WRAP>
<TELL
"Useless. You're getting too wrapped up in this story." CR>)
(T
<TELL "There's no good surface on" TR ,PRSI>)>>
<ROUTINE V-PUT-UNDER ()
<WASTES>>
<ROUTINE V-RAISE ()
<HACK-HACK "Playing in this way with">>
;<ROUTINE V-RAPE ()
<TELL "What a (ahem!) strange idea." 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-REMOVE ()
<COND (<FSET? ,PRSO ,WEARBIT>
<PERFORM ,V?TAKE-OFF ,PRSO>
<RTRUE>)
(T
<PERFORM ,V?TAKE ,PRSO>
<RTRUE>)>>
<ROUTINE V-ROLL ()
<CANT-VERB-A-PRSO "roll">>
<ROUTINE V-RUN-OVER ()
<TELL ,HUH>>
<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>)
(<AND ,AWAITING-REPLY
<NO-WORD <GET ,P-LEXV ,P-CONT>>>
<V-NO>)
(<SET V <FIND-IN ,HERE ,ACTORBIT>>
<TELL "You must address" T .V " directly." CR>)
(T
<PERFORM ,V?TELL ,ME>)>
<STOP>>
<ROUTINE V-SCARE ()
<TELL
"Despite your most frightening tactics," T ,PRSO " seems unscared." CR>>
<ROUTINE V-SCOLD ()
<TELL ,HUH>>
<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>
<SETG C-ELAPSED 32>
<TELL "You find">
<COND (<NOT <DESCRIBE-NOTHING>>
<TELL ,PERIOD-CR>)>
<RTRUE>)
(T
<CANT-VERB-A-PRSO "search">)>>
<ROUTINE V-SET ()
<COND (<PRSO? ,ROOMS>
<WEE>)
(<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
<TELL "\"How do you do.\"" CR>)>>
<ROUTINE PRE-SHOOT ()
<COND (<AND <NOT ,PRSI>
<ULTIMATELY-IN? ,ZAPGUN>>
<COND (<PRSO? ,ZAPGUN>
<COND (<EQUAL? ,ZAPGUN-SHOTS 0>
<TELL "\"Click.\"" CR>)
(T
<SETG ZAPGUN-SHOTS <- ,ZAPGUN-SHOTS 1>>
<TELL "Nasty flames spew from the zapgun." CR>)>
<RTRUE>)
(T
<SETG PRSI ,ZAPGUN>
<TELL "(with the " 'ZAPGUN ")" CR>)>)>
<COND (<NOT ,PRSI>
<TELL "You aren't holding a gun!" CR>)
(<NOT <PRSI? ,ZAPGUN>>
<TELL "Shoot" A ,PRSI "!?!" CR>)
(<PRSO? ,ZAPGUN>
<TELL "Sorry; the zapgun doesn't have a rubber barrel." CR>)
(<EQUAL? ,ZAPGUN-SHOTS 0>
<TELL "\"Click.\"" CR>)
(T
<SETG ZAPGUN-SHOTS <- ,ZAPGUN-SHOTS 1>>
<RFALSE>)>>
<ROUTINE V-SHOOT ("AUX" L) ;"PRSI must be ZAPGUN because of PRE-SHOOT"
<COND (<NOT ,ZAPGUN-FOOTNOTE>
<SETG ZAPGUN-FOOTNOTE T>
<TELL "(Footnote 9) ">)>
<TELL "A blaze of intense rays ">
<COND (<OR <FSET? ,PRSO ,TAKEBIT>
<PRSO? ,ID-CHANGER ,LOCKER ,ROULETTE-WHEEL ,LOG-READER
,HEATING-CHAMBER ,DRYER ,PRESSER ,CAGE ,SKELETON
,ORANGE-GOO ,GRAY-GOO ,SOUP>>
<TELL
"envelop" T ,PRSO ". When the rays dissipate," T ,PRSO " ">
<COND (<FSET? ,PRSO ,PLURALBIT>
<TELL "are">)
(T
<TELL "is">)>
<TELL " gone.">
<COND (<ULTIMATELY-IN? ,PRSO>
<TELL " Unfortunately, so is most of your ">
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "body, since you were wear">)
(T
<TELL "arm, since you were hold">)>
<TELL "ing" T ,PRSO>
<JIGS-UP ".">)
(T
<SET L <LOC ,PRSO>>
<COND (<EQUAL? .L ,FLOYD>
<TELL
" Floyd, who was holding" T ,PRSO ", gives a shriek of fear, and
all the oil drains from his face.">)
(<NOT <EQUAL? .L ,HERE ,PEDESTAL ,DRILLED-HOLE>>
<TELL
" Naturally," T .L " is also history, since" T ,PRSO " was sitting ">
<COND (<FSET? .L ,SURFACEBIT>
<TELL "o">)
(T
<TELL "i">)>
<TELL "n it.">
<REMOVE-CAREFULLY .L>)>
<REMOVE-CAREFULLY ,PRSO>
<CRLF>)>)
(T
<TELL
"washes over" T ,PRSO ". It glows for a bit, but then cools." CR>)>>
<ROUTINE V-SSHOOT ()
<PERFORM ,V?SHOOT ,PRSI ,PRSO>
<THIS-IS-IT ,PRSO>
<RTRUE>>
<ROUTINE V-SHOW ()
<TELL "It doesn't look like" T ,PRSI " is interested." CR>>
<ROUTINE V-SIT ("AUX" VEHICLE)
<COND (<NOT <PRSO? ,ROOMS>>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(<EQUAL? ,HERE ,THEATRE>
<TELL "But there's nothing to watch at the moment!" CR>)
(<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
<PERFORM ,V?ENTER .VEHICLE>
<RTRUE>)
(T
<PERFORM ,V?CLIMB-ON ,GROUND>
<RTRUE>)>>
<ROUTINE V-SKIP ()
<WEE>>
<ROUTINE V-SLEEP ()
<COND (<EQUAL? ,SLEEPY-LEVEL 0>
<TELL "You're not tired." CR>)
(<QUEUED? ,I-FALL-ASLEEP>
<TELL "You'll probably be asleep before you know it." CR>)
(T
<TELL
"Members of civilized societies usually sleep in beds." CR>)>>
<ROUTINE PRE-SMELL ()
<COND (<FSET? ,SPACESUIT ,WORNBIT>
<TELL
"You smell stale air and rusty metal and unbathed " ,LFC " -- all the
usual odors of a space suit." CR>)>>
<ROUTINE V-SMELL ()
<COND (<OR <NOT ,PRSO>
<PRSO? ,AIR>>
<COND (,BALLOON-ODOR
<TELL
"The awful odor of the " 'BALLOON "'s digestive gas is thankfully fading." CR>)
(<AND <EQUAL? ,HERE ,GREASY-STRAW>
<NOT <FSET? ,NECTAR ,TOUCHBIT>>>
<TELL "There's something yum-smelling around here!" CR>)
(<EQUAL? ,HERE ,OPIUM-DEN>
<TELL "There's a lingering smell of various drugs." CR>)
(<VISIBLE? ,BALLOON>
<PERFORM ,V?SMELL ,BALLOON>
<RTRUE>)
(<AND <EQUAL? ,HERE ,COMMANDERS-QUARTERS>
<FSET? ,SAFE ,OPENBIT>>
<TELL "The odor of an explosion hangs in the air." CR>)
(T
<TELL "You smell nothing unusual just now." CR>)>)
(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-SPLAY-WITH ()
<PERFORM ,V?PLAY-WITH ,PRSI>
<RTRUE>>
<ROUTINE V-SPRAY ()
<COND (<AND <NOT ,PRSI>
<IN? ,SPRAY-CAN ,PROTAGONIST>>
<TELL "[with the " D ,SPRAY-CAN "]" CR>
<PERFORM ,V?SPRAY ,SPRAY-CAN ,PRSO>
<RTRUE>)
(T
<CANT-VERB-A-PRSO "spray">)>>
<ROUTINE V-SPUT-ON ()
<PERFORM ,V?PUT-ON ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSHOW ()
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SSPRAY ()
<PERFORM ,V?SPRAY ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-STAND ()
<COND (<EQUAL? ,P-PRSA-WORD ,W?HOLD> ;"for HOLD UP OBJECT"
<WASTES>)
(<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<PERFORM ,V?DISEMBARK <LOC ,PROTAGONIST>>
<RTRUE>)
(<AND ,PRSO
<FSET? ,PRSO ,TAKEBIT>>
<WASTES>)
(,STUNNED
<YOURE-STUNNED>)
(T
<TELL "You're already standing." CR>)>>
<ROUTINE V-STAND-ON ()
<WASTES>>
<ROUTINE V-STELL ()
<PERFORM ,V?TELL ,PRSI>
<RTRUE>>
<ROUTINE V-STHROW ()
<PERFORM ,V?THROW-TO ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-SWING ()
<COND (,PRSI
<PERFORM ,V?KILL ,PRSI ,PRSO>
<RTRUE>)
(T
<TELL "\"Whoosh.\"" CR>)>>
<ROUTINE V-SWRAP ()
<PERFORM ,V?PUT-ON ,PRSO ,PRSI>
<RTRUE>>
<ROUTINE PRE-TAKE ()
<COND (,STUNNED
<YOURE-STUNNED "move that much">)
(<UNTOUCHABLE? ,PRSO>
<CANT-REACH ,PRSO>)
(<AND <NOT <PRSI? ,HANDS ,TONGUE>>
<PRE-LOOK>>
<RTRUE>)
(<LOC-CLOSED>
<RTRUE>)
(<IN? ,PROTAGONIST ,PRSO>
<TELL "You're ">
<COND (<FSET? ,PRSO ,INBIT>
<TELL "i">)
(T
<TELL "o">)>
<TELL "n it, asteroid-brain!" CR>)
(<OR <IN? ,PRSO ,PROTAGONIST>
<AND <ULTIMATELY-IN? ,PRSO>
<NOT <FSET? ,PRSO ,TAKEBIT>>>>
<COND (<FSET? ,PRSO ,WORNBIT>
<TELL "You're already wearing">)
(T
<TELL "You already have">)>
<TELL T ,PRSO ,PERIOD-CR>)
(<IN? ,PRSO ,HEATING-CHAMBER>
<PERFORM ,V?REACH-IN ,HEATING-CHAMBER>
<RTRUE>)
(<AND <PRSO? ,LEASH>
<PRSI? ,BALLOON>>
<PERFORM ,V?REMOVE ,LEASH>
<RTRUE>)
(<NOT ,PRSI>
<RFALSE>)
(<IN? ,PRSO ,PRSI>
<RFALSE>)
(<PRSO? ,ME>
<PERFORM ,V?DROP ,PRSI>
<RTRUE>)
(<PRSI? ,GLOBAL-ROOM>
<COND (<ULTIMATELY-IN? ,PRSO>
<DO-WALK ,P?OUT>)
(T
<RFALSE>)>)
(<AND <PRSI? ,GARBAGE ,SCULPTURE>
<IN? ,PRSO ,HERE>>
<RFALSE>)
(<NOT <IN? ,PRSO ,PRSI>>
<NOT-IN>)
(T
<SETG PRSI <>>
<RFALSE>)>>
<ROUTINE V-TAKE ()
<COND (<EQUAL? <ITAKE> T>
<COND (<AND <NOT ,ID-SCRAMBLED>
<OR <AND <PRSO? ,ID-CARD>
<ULTIMATELY-IN? ,BOOTS>
<NOT <FSET? ,BOOTS ,WORNBIT>>>
<AND <PRSO? ,BOOTS>
<ULTIMATELY-IN? ,ID-CARD>>>>
<FCLEAR ,BOOTS ,TRYTAKEBIT>
<FCLEAR ,ID-CARD ,TRYTAKEBIT>
<SETG ID-SCRAMBLED T>)>
<TELL "Taken." CR>)>>
<ROUTINE V-TAKE-OFF ()
<COND (<PRSO? ,ROOMS>
<COND (<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<TELL "[of" T <LOC ,PROTAGONIST> "]" CR>
<PERFORM ,V?DISEMBARK <LOC ,PROTAGONIST>>
<RTRUE>)
(T
<V-STAND>)>)
(,STUNNED
<YOURE-STUNNED>)
(<FSET? ,PRSO ,WORNBIT>
<SETG C-ELAPSED 18>
<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 ()
<COND (<GETP ,PRSO ,P?FOOD-DESC>
<TELL "It tastes edible." CR>)
(T
<SENSE-OBJECT "taste">)>>
;"tells parser not to put a CR between >CHARACTER, FOO and the response to it"
<GLOBAL ELIMINATE-CR <>>
<ROUTINE V-TELL ()
<COND (<FSET? ,PRSO ,ACTORBIT>
<COND (,P-CONT
<SETG WINNER ,PRSO>
<SETG ELIMINATE-CR T>
;<SETG CLOCK-WAIT T>
<RTRUE>)
(T
<TELL
"Hmmm..." T ,PRSO " looks at you expectantly." CR>)>)
(T
<TELL
"Talking to" A ,PRSO "? Dr. Blanchard, the Duffy's psychiatrist, would
be fascinated to hear that." CR>
<STOP>)>>
<ROUTINE V-TELL-ABOUT ()
<COND (<PRSO? ,ME>
<PERFORM ,V?WHAT ,PRSI>
<RTRUE>)
(<VISIBLE? ,PRSI>
<PERFORM ,V?SHOW ,PRSI ,PRSO>
<RTRUE>)
(T
<SETG PRSI ,PRSO>
<V-SHOW>)>>
<ROUTINE V-THANK ("AUX" OWINNER)
<COND (<NOT ,PRSO>
<TELL "[Just doing my job.]" CR>)
(<FSET? ,PRSO ,ACTORBIT>
<SET OWINNER ,WINNER>
<SETG WINNER ,PRSO>
<PERFORM ,V?THANK>
<SETG WINNER .OWINNER>
<RTRUE>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-THROW ()
<COND (<EQUAL? ,HERE ,VACUUM-STORAGE>
<TELL "You lose sight of" T ,PRSO " as it sails away.">
<REMOVE-CAREFULLY ,PRSO>
<CRLF>)
(<EQUAL? ,HERE ,TOP-OF-AIR-SHAFT ,AIR-SHAFT>
<V-DROP>)
(,PRSI
<MOVE ,PRSO ,HERE>
<TELL "You missed." CR>)
(T
<MOVE ,PRSO ,HERE>
<TELL "Thrown." CR>)>>
<ROUTINE V-THROW-TO ()
<COND (<FSET? ,PRSI ,ACTORBIT>
<PERFORM ,V?GIVE ,PRSO ,PRSI>
<RTRUE>)
(T
<PERFORM ,V?THROW ,PRSO ,PRSI>
<RTRUE>)>>
<ROUTINE V-TICKLE ()
<TELL "Kitchy kitchy koo?" CR>>
<ROUTINE V-TIE ()
<TELL ,YOU-CANT "tie" TR ,PRSO>>
<ROUTINE V-TIME ("OPTIONAL" (NO-CR <>))
<TELL "Current Galactic Standard Time ">
<COND (<AND <FSET? ,CHRONOMETER ,WORNBIT>
<L? ,DAY 3>>
<TELL
"(adjusted to your local day-cycle) is " N ,INTERNAL-MOVES>)
(T
<TELL "is impossible to determine, since you">
<COND (<NOT <FSET? ,CHRONOMETER ,WORNBIT>>
<TELL "'ve removed your " 'CHRONOMETER>)
(T
<TELL "r " 'CHRONOMETER " has stopped">)>)>
<COND (.NO-CR
<TELL ".">)
(T
<TELL ,PERIOD-CR>)>>
<ROUTINE PRE-TOUCH ("OPTIONAL" (VB T))
<COND (,STUNNED
<COND (.VB
<YOURE-STUNNED "move that much">)>
<RTRUE>)
(<UNTOUCHABLE? ,PRSO>
<COND (.VB
<CANT-REACH ,PRSO>)>
<RTRUE>)>>
<ROUTINE V-TOUCH ()
<COND (<LOC-CLOSED>
<RTRUE>)
(T
<HACK-HACK "Touching">)>>
<ROUTINE V-TYPE ()
<COND (<AND ,PRSI
<NOT <PRSI? ,KEYPAD>>>
<TELL ,YOU-CANT "type on" A ,PRSI "!" CR>)
(<NOT <GLOBAL-IN? ,KEYPAD ,HERE>>
<COND (,PRSO
<TELL ,HUH>)
(T
<TELL "There's no keypad here!" CR>
<STOP>)>)
(<AND ,PRSO
<PRSO? ,INTNUM>>
<COND (<NOT ,P-NUMBER> ;"input was TYPE NUMBER"
<TELL "[Specify the number! TYPE 7, for example.]" CR>)
(<EQUAL? ,HERE ,ROBOT-POOL>
<ROBOT-TYPE>)
(<EQUAL? ,HERE ,SPACETRUCK>
<SPACETRUCK-TYPE>)
(<EQUAL? ,HERE ,SHADY-DANS>
<ID-CHANGER-TYPE>)
(<EQUAL? ,HERE ,PX>
<DISPENSER-TYPE>)
(T
<ELEVATOR-TYPE>)>)
(<AND <NOT ,PRSO>
,P-CONT
<EQUAL? <NUMBER? ,P-CONT> ,W?NUMBER>>
<PERFORM ,V?TYPE ,INTNUM>
<STOP>)
(T
<TELL "You can only type numbers on this keypad." CR>
<STOP>)>>
<ROUTINE ROBOT-TYPE ()
<COND (<NOT <FSET? ,ROBOT-USE-AUTHORIZATION-FORM ,NDESCBIT>>
<RECORDING "Keyboard is active only following authorization">)
(,ROBOT-PICKED
<RECORDING "You have already made your selection">)
;(<G? ,P-NUMBER 10>
<TELL "There are only ten keys on the keypad." CR>)
(<G? ,P-NUMBER 3>
<RECORDING "That bin is unoccupied">)
(<L? ,P-NUMBER 1>
<RECORDING "Error">)
(<EQUAL? ,P-NUMBER 3>
<FSET ,FLOYD ,TOUCHBIT>
<SETG ROBOT-PICKED ,FLOYD>
<SETG FLOYD-SPOKE T>
<TELL
"\"Yippee!\" yells Floyd, bounding joyfully over
and giving you a big hug." CR>)
(T
<COND (<EQUAL? ,P-NUMBER 1>
<SETG ROBOT-PICKED ,REX>)
(T
<SETG ROBOT-PICKED ,HELEN>)>
<DEQUEUE I-FLOYD>
<QUEUE I-OTHER-ROBOT -1>
<FSET ,ROBOT-PICKED ,TOUCHBIT>
<TELL
D ,ROBOT-PICKED " rolls up to you, ready to follow. Floyd's lower jaw begins
quivering, as though he were about to cry." CR>)>>
<ROUTINE SPACETRUCK-TYPE ("AUX" X)
<COND (<NOT <FSET? ,CLASS-THREE-SPACECRAFT-ACTIVATION-FORM ,NDESCBIT>>
<RECORDING "Keyboard is active only following authorization">)
(<EQUAL? ,SPACETRUCK-COUNTER 5>
<RECORDING "Fuel level at zero">)
(<NOT <EQUAL? ,COURSE-PICKED 0>>
<RECORDING "You have already made your selection">)
(<AND <OR <IN? ,PROTAGONIST ,PILOT-SEAT>
<IN? ,FLOYD ,PILOT-SEAT>>
<OR <IN? ,PROTAGONIST ,COPILOT-SEAT>
<IN? ,FLOYD ,COPILOT-SEAT>>>
<SETG COURSE-PICKED ,P-NUMBER>
;<COND (,DEBUG
<TELL "[P-NUMBER = " N ,P-NUMBER ".]" CR>
<TELL "[INTERNAL-MOVES = " N ,INTERNAL-MOVES ".]" CR>)>
<SET X </ ,INTERNAL-MOVES 50>>
;<COND (,DEBUG
<TELL "[X = " N .X ".]" CR>)>
<SET X <- .X 132>>
;<COND (,DEBUG
<TELL "[X = " N .X ".]" CR>)>
<SET X <* .X .X>>
;<COND (,DEBUG
<TELL "[X = " N .X ".]" CR>)>
<SET X </ .X 4>>
;<COND (,DEBUG
<TELL "[X = " N .X ".]" CR>)>
<SETG RIGHT-COURSE <+ .X 103>>
;<COND (,DEBUG
<TELL "[RIGHT-COURSE = " N ,RIGHT-COURSE ".]" CR>)>
<QUEUE I-SPACETRUCK 33>
<RECORDING
"Course set. Launch in approximately 30 millichrons">)
(T
<RECORDING
"Safety precautions forbid the acceptance of course settings unless both
the pilot and copilot seats are occupied">)>>
<ROUTINE ELEVATOR-TYPE ("AUX" DISTANCE)
<COND (<OR <G? ,P-NUMBER 9>
<L? ,P-NUMBER 1>>
<RECORDING "Select a level between 1 and 9">)
(<G? ,DAY 2>
<JIGS-UP
"The instant you press the button, the elevator begins plunging down the shaft
in a power dive! You punch frantically at the keypad...">)
(<EQUAL? ,ELEVATOR-LEVEL ,P-NUMBER>
<RECORDING "You are already at that level">)
(<EQUAL? ,P-NUMBER 8 9>
<TELL "The elevator whines momentarily, but doesn't move." CR>)
(T
<TELL "The elevator ">
<COND (<EQUAL? ,DAY 1>
<TELL "glides weightlessly ">)
(T
<TELL "starts with a jerk, ">
<COND (<G? ,P-NUMBER ,ELEVATOR-LEVEL>
<TELL "bumping you against the ceiling, ">)>
<TELL "then moves ">)>
<COND (<G? ,P-NUMBER ,ELEVATOR-LEVEL>
<TELL "down">
<SET DISTANCE <- ,P-NUMBER ,ELEVATOR-LEVEL>>)
(T
<TELL "up">
<SET DISTANCE <- ,ELEVATOR-LEVEL ,P-NUMBER>>)>
;"set C-ELAPSED to 5 times the # of floors you're moving"
<TELL " the shaft, stopping ">
<COND (<EQUAL? ,DAY 2>
<TELL "suddenly ">)>
<COND (<AND <EQUAL? ,DAY 2>
<G? ,INTERNAL-MOVES 6300>>
<TELL "and not quite at level with your new floor">)
(T
<TELL "at another opening to the west">)>
<COND (<AND <EQUAL? ,DAY 2>
<G? ,ELEVATOR-LEVEL ,P-NUMBER>>
<TELL
". The sudden stop bumps you against the ceiling of the weightless elevator">)>
<SETG C-ELAPSED <* 5 .DISTANCE>>
<SETG ELEVATOR-LEVEL ,P-NUMBER>
<COND (<IN? ,BALLOON ,ELEVATOR>
<TELL
". The " D ,BALLOON " looks somewhat disoriented by the experience">)>
<COND (<IN? ,OSTRICH ,ELEVATOR>
<TELL ". ">
<PERFORM ,V?SCARE ,OSTRICH>
<RTRUE>)
(T
<TELL ,PERIOD-CR>)>)>>
<ROUTINE DISPENSER-TYPE ()
<COND (<NOT <FSET? ,DISPENSER ,TOUCHBIT>>
<RECORDING "You have not deposited a coin">)
(<G? ,P-NUMBER 9>
<RECORDING "This dispenser offers only 9 selections">)
(<EQUAL? ,P-NUMBER 6 9>
<FCLEAR ,DISPENSER ,TOUCHBIT>
<COND (<EQUAL? ,P-NUMBER 6>
<MOVE ,TIMER ,DISPENSER>)
(T
<MOVE ,LARGE-BIT ,DISPENSER>)>
<TELL
"You hear a loud \"klunk\" inside the dispenser, but nothing appears in
the dispenser hole." CR>)
(<L? ,P-NUMBER 1>
<RECORDING "Error">)
(T
<RECORDING
"Sorry, that item is sold out. Inform your PX Officer for restocking">)>>
<ROUTINE RECORDING (STRING)
<COND (<PROB 33>
<TELL "A recording says,">)
(<PROB 50>
<TELL "You hear a recorded voice.">)
(T
<TELL "A taped voice whispers in your ear.">)>
<TELL " \"" .STRING ".\"" CR>>
<GLOBAL ROBOT-PICKED <>>
<ROUTINE V-UNDRESS ()
<COND (,PRSO
<IMPOSSIBLES>)
(T
<SETG PRSO ,ROOMS>
<V-GET-UNDRESSED>)>>
<ROUTINE V-UNLOCK ()
<COND (<NOT <FSET? ,PRSO ,LOCKEDBIT>>
<COND (<AND <EQUAL? ,HERE ,THEATRE ,BRIG>
<PRSO? ,PSEUDO-OBJECT>>
T)
(T
<TELL "But" T ,PRSO " isn't locked." CR>
<RTRUE>)>)>
<COND (<NOT ,PRSI>
<COND (<ULTIMATELY-IN? ,KEY>
<TELL "[with the key]" CR>
<PERFORM ,V?UNLOCK ,PRSO ,KEY>
<RTRUE>)
(T
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY <+ ,C-ELAPSED 2>>
<TELL "Your nose is key-shaped, I suppose?" CR>)>)
(<PRSI? ,KEY>
<TELL "This key doesn't unlock" TR ,PRSO>)
(T
<IMPOSSIBLES>)>>
<ROUTINE V-UNTIE ()
<IMPOSSIBLES>>
<ROUTINE V-USE ()
<TELL
,YOULL-HAVE-TO "be more specific about how you want to use" TR ,PRSO>>
<ROUTINE PRE-VALIDATE ()
<COND (<AND <NOT ,PRSI>
<NOT <VISIBLE? ,VALIDATION-STAMP>>>
<TELL "You don't have a " 'VALIDATION-STAMP "!" CR>)
(<AND <NOT ,PRSI>
<NOT <ULTIMATELY-IN? ,VALIDATION-STAMP>>>
<TELL ,YNH TR ,VALIDATION-STAMP>)
(<AND ,PRSI
<NOT <PRSI? ,VALIDATION-STAMP>>>
<TELL ,HUH>)>>
<ROUTINE V-VALIDATE ()
<TELL "There's no validation box on" TR ,PRSO>>
<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>)
(,STUNNED
<YOURE-STUNNED "walk">)
(<AND <PRSO? ,P?OUT>
<EQUAL? .AV ,SIMULATION-BOOTH ,HOLDING-TANK>>
<PERFORM ,V?DISEMBARK .AV>
<RTRUE>)
(,HANGING-IN-AIR
<COND (<PRSO? ,P?DOWN>
<PERFORM ,V?DROP ,LEASH>
<RTRUE>)
(T
<TELL
"It's hard to walk when your feet are a couple of meters from the floor."CR>)>)
(<AND <PRSO? ,P?IN>
<NOT <GETPT ,HERE ,P?IN>>
<SET VEHICLE <FIND-IN ,HERE ,VEHBIT>>
<NOT <ULTIMATELY-IN? .VEHICLE>>>
<PERFORM ,V?ENTER .VEHICLE>
<RTRUE>)
(<FSET? .AV ,VEHBIT>
<TELL "You're not walking anywhere until you get o">
<COND (<EQUAL? .AV ,BED>
<TELL "ff">)
(T
<TELL "ut of">)>
<TELL TR .AV>
<RFATAL>)
(<AND ,TIMER-CONNECTED
<ULTIMATELY-IN? ,TIMER>
<NOT <ULTIMATELY-IN? ,DETONATOR>>>
<DO-FIRST "disconnect the timer">)
(<AND ,TIMER-CONNECTED
<ULTIMATELY-IN? ,DETONATOR>
<NOT <ULTIMATELY-IN? ,TIMER>>>
<DO-FIRST "disconnect the timer">)
(<AND ,EXPLOSIVE-CONNECTED
<ULTIMATELY-IN? ,DETONATOR>
<NOT <ULTIMATELY-IN? ,EXPLOSIVE>>>
<DO-FIRST "disconnect the explosive">)
(<AND ,EXPLOSIVE-CONNECTED
<ULTIMATELY-IN? ,EXPLOSIVE>
<NOT <ULTIMATELY-IN? ,DETONATOR>>>
<DO-FIRST "disconnect the explosive">)
(<SET PT <GETPT ,HERE ,PRSO>>
<COND (,LIT
<SETG C-ELAPSED 22>)
(T
<SETG C-ELAPSED 33>)>
<COND (<EQUAL? <SET PTS <PTSIZE .PT>> ,UEXIT>
<GOTO <GETB .PT ,REXIT>>)
(<EQUAL? .PTS ,CEXIT>
<COND (<EQUAL? ,HERE ,CASINO>
<COND (<VALUE <GETB .PT ,CEXITFLAG>>
<GOTO <GETB .PT ,REXIT>>)
;(<SET STR <GET .PT ,CEXITSTR>>
<TELL .STR CR>
<RFATAL>)
(T
<SETG C-ELAPSED 7>
<TELL ,CANT-GO>
<RFATAL>)>)
(T ;"kludge for auto-doors"
<COND (<NOT <EQUAL? ,VERBOSITY 0>>
<DESCRIBE-AUTO-DOOR>)>
<GOTO <GETB .PT ,REXIT>>)>)
(<EQUAL? .PTS ,NEXIT>
<SETG C-ELAPSED 7>
<TELL <GET .PT ,NEXITSTR> CR>
<RFATAL>)
(<EQUAL? .PTS ,FEXIT>
<COND (<SET RM <APPLY <GET .PT ,FEXITFCN>>>
<GOTO .RM>)
(<EQUAL? ,HERE ,AIR-SHAFT>
<RTRUE>)
(T
<SETG C-ELAPSED 7>
<RFATAL>)>)
(<EQUAL? .PTS ,DEXIT>
<COND (<FSET? <SET OBJ <GETB .PT ,DEXITOBJ>> ,OPENBIT>
<GOTO <GETB .PT ,REXIT>>)
(<SET STR <GET .PT ,DEXITSTR>>
<SETG C-ELAPSED 7>
<THIS-IS-IT .OBJ>
<TELL .STR CR>
<RFATAL>)
(T
<SETG C-ELAPSED 7>
<THIS-IS-IT .OBJ>
<DO-FIRST "open" .OBJ>
<RFATAL>)>)>)
;(<AND <NOT ,LIT>
<PROB 75>>
<JIGS-UP
"Oh, no! You have walked into the slavering fangs of a lurking grue!">)
(<PRSO? ,P?OUT ,P?IN>
<V-WALK-AROUND>
<RFATAL>)
(T
<TELL ,CANT-GO>
<RFATAL>)>>
<ROUTINE DESCRIBE-AUTO-DOOR ()
<COND (<EQUAL? ,HERE ,BRIG ,ARMORY>
<TELL "The " 'SECURITY-DOOR " ">)
(T
<TELL "The auto-door ">)>
<COND (<EQUAL? ,DAY 1>
<TELL "opens as you approach, and whisks shut behind you...">)
(<G? ,DAY 2>
<TELL
"opens barely wide enough for you to squeeze through. As you do so,
the door tries to shut, almost jamming against you!">
<COND (<NOT <FSET? ,AUTO-DOOR ,TOUCHBIT>>
<FSET ,AUTO-DOOR ,TOUCHBIT>
<TELL
" Fortunately, auto-doors don't have a lot of power.">)>)
(T
<TELL
"opens sluggishly. As soon as you have passed through, it zooms shut, ">
<COND (<G? ,INTERNAL-MOVES 5000>
<TELL "almost nipping your heels!">)
(T
<TELL "seemingly a little sooner than normal.">)>
<COND (<NOT <FSET? ,AUTO-DOOR ,TOUCHBIT>>
<FSET ,AUTO-DOOR ,TOUCHBIT>
<TELL
" Very puzzling; auto-doors have been around for millenia, and are
generally the epitome of reliability.">)>)>
<CRLF> <CRLF>>
<ROUTINE V-WALK-AROUND ()
<SETG AWAITING-REPLY 1>
<QUEUE I-REPLY 1> ;"clocker won't run this turn because of P-WON"
<SETG P-WON <>>
<TELL "Did you have any particular direction in mind?" CR>>
<ROUTINE V-WALK-TO ()
<COND (<PRSO? ,INTDIR>
<DO-WALK ,P-DIRECTION>)
(<VISIBLE? ,PRSO>
<COND (<FSET? ,PRSO ,VEHBIT>
<PERFORM ,V?ENTER ,PRSO>
<RTRUE>)
(T
<V-FOLLOW>)>)
(T
<V-WALK-AROUND>)>>
<ROUTINE V-WAIT () ;("OPTIONAL" (NUM 3))
<SETG C-ELAPSED <COND (<VERB? WAIT-FOR>
,P-NUMBER)
(<VERB? WAIT-UNTIL>
<- ,P-NUMBER ,INTERNAL-MOVES>)
(T
40)>>
<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-WAIT-UNTIL ()
<TELL ,HUH>>
<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>
<SETG C-ELAPSED 18>
<TELL "now">)>
<TELL " wearing" TR ,PRSO>)>>
<ROUTINE V-WHAT ()
<TELL "Good question." CR>>
<ROUTINE V-WHERE ()
<V-FIND T>>
<ROUTINE V-WRAP ()
<PERFORM ,V?PUT-ON ,PRSI ,PRSO>
<RTRUE>>
<ROUTINE V-YELL ()
<TELL "Aaaarrrggghhh!" CR>
<COND (<IN? ,OSTRICH ,HERE>
<TELL " ">
<PERFORM ,V?SCARE ,OSTRICH>
<RTRUE>)>
<STOP>>
<ROUTINE I-REPLY ()
<SETG AWAITING-REPLY <>>
<RFALSE>>
<GLOBAL AWAITING-REPLY <>>
<ROUTINE V-YES ()
<COND (<EQUAL? ,AWAITING-REPLY 1>
<TELL "That was just a rhetorical question." CR>)
(<EQUAL? ,AWAITING-REPLY 2>
<TELL
"\"Floyd changed his mind. Controls too scary-looking.\"" CR>)
(<EQUAL? ,AWAITING-REPLY 3>
<TELL
"Floyd shrugs. \"Floyd feels not like learning new rules now. Let's play
tag. Floyd knows rules for tag really well!\"" CR>)
(<EQUAL? ,AWAITING-REPLY 4>
<PERFORM ,V?PLAY-WITH ,FLOYD>
<RTRUE>)
(T
<YOU-SOUND "posit">)>>
<ROUTINE YOU-SOUND (STRING)
<TELL "You sound rather " .STRING "ive." 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>)>>
<ROUTINE V-ZORK ()
<TELL "Gesundheit!" CR>>
;"subtitle object manipulation"
<ROUTINE ITAKE ("OPTIONAL" (VB T) "AUX" OBJ)
<COND (<NOT <FSET? ,PRSO ,TAKEBIT>>
<COND (.VB
<YUKS>)>
<RFATAL>)
(<AND <NOT <ULTIMATELY-IN? ,PRSO>>
<G? <+ <WEIGHT ,PRSO> <WEIGHT ,PROTAGONIST>> 100>>
<COND (.VB
<TELL
"You're juggling just about as much stuff as you can manage." CR>)>
<RFATAL>)
(<PROB <- <* <CCOUNT ,PROTAGONIST> 20> 150>>
;"holding 8 items, 10%
9 itmes, 30%
10 items, 50%
11 items, 70%
12 items, 90%
13 items, 100%"
<SET OBJ <FIRST? ,PROTAGONIST>>
<REPEAT ()
<COND (<FSET? .OBJ ,WORNBIT>
<SET OBJ <NEXT? .OBJ>>)
(<AND <EQUAL? .OBJ ,OSTRICH-NIP>
<IN? ,OSTRICH ,HERE>>
<SET OBJ <NEXT? .OBJ>>)
(T
<RETURN>)>>
<MOVE ,PRSO ,HERE>
<MOVE .OBJ ,HERE>
<FSET ,PRSO ,TOUCHBIT>
<COND (.VB
<TELL
"As you try to grab" T ,PRSO "," T .OBJ
" slips from your hands and both tumble ">
<COND (<FSET? ,HERE ,WEIGHTLESSBIT>
<TELL "away">)
(T
<TELL "to the floor">)>
<TELL ,PERIOD-CR>)>
<RFATAL>)>
<SCORE-OBJ>
<MOVE ,PRSO ,PROTAGONIST>>
<ROUTINE SCORE-OBJ ("AUX" POINTS)
<FSET ,PRSO ,TOUCHBIT>
<FCLEAR ,PRSO ,NDESCBIT>
<COND (<SET POINTS <GETP ,PRSO ,P?VALUE>>
<COND (<G? .POINTS 0>
<SETG ROBOT-EVILNESS <+ ,ROBOT-EVILNESS 1>>)>
<PUTP ,PRSO ,P?VALUE 0>
<SETG SCORE <+ ,SCORE .POINTS>>)>>
;"IDROP is called by PRE-GIVE and PRE-PUT.
IDROP acts directly as PRE-DROP and PRE-THROW."
<ROUTINE IDROP ()
<COND (<PRSO? ,HANDS>
<COND (<VERB? DROP THROW GIVE>
<IMPOSSIBLES>)
(T
<RFALSE>)>)
(<AND <VERB? DROP GIVE>
<PRSO? ,LEASH>
,HANGING-IN-AIR>
<RFALSE>)
(<NOT <ULTIMATELY-IN? ,PRSO>>
<COND (<AND <VERB? THROW>
<PRSO? ,SWITCH>>
<RFALSE>)
(<PRSO? ,ME ,HANDS ,TONGUE>
<IMPOSSIBLES>)
(<AND <VERB? PUT>
<PRSO? ,ID-READER>
<ADJ-USED ,A?ID ,ID-READER>
<EQUAL? <GET ,P-NAMW 0> <>>>
<TELL ,YOU-CANT "see any ID card here!" CR>)
(T
<TELL
"That's easy for you to say since you don't even have" TR ,PRSO>)>
<COND (,P-MULT
<RTRUE>)
(T
<RFATAL>)>)
(<AND <NOT <IN? ,PRSO ,PROTAGONIST>>
<FSET? <LOC ,PRSO> ,CONTBIT>
<NOT <FSET? <LOC ,PRSO> ,OPENBIT>>>
<DO-FIRST "open" <LOC ,PRSO>>)
(<FSET? ,PRSO ,WORNBIT>
<DO-FIRST "remove" ,PRSO>)
(T
<RFALSE>)>>
<ROUTINE CCOUNT (OBJ "AUX" (CNT 0) X)
<COND (<SET X <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT <FSET? .X ,WORNBIT>>
;"worn things shouldnt count toward max load"
<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 (<NOT <FSET? .CONT ,WORNBIT>>
;"worn things shouldnt count toward max load"
<SET WT <+ .WT <WEIGHT .CONT>>>)>
<SET CONT <NEXT? .CONT>>
<COND (<NOT .CONT>
<RETURN>)>>)>
<COND (<EQUAL? .OBJ ,PROTAGONIST>
.WT)
(T
<+ .WT <GETP .OBJ ,P?SIZE>>)>>
;"subtitle describers"
<ROUTINE DESCRIBE-ROOM ("OPTIONAL" (VERB-IS-LOOK <>)
"AUX" (FIRST-VISIT <>) POINTS)
<COND (<AND <SET POINTS <GETP ,HERE ,P?VALUE>>
<G? .POINTS 0>>
<SETG ROBOT-EVILNESS <+ ,ROBOT-EVILNESS 1>>
<SETG SCORE <+ ,SCORE .POINTS>>
<PUTP ,HERE ,P?VALUE 0>)>
<COND (<NOT ,LIT>
<TELL "It is pitch black. You ">
<COND (<EQUAL? ,HERE ,VACUUM-STORAGE>
<TELL
"try desperately to remember: 1. whether grues can survive in a vacuum
and 2. whether they can tear through a space suit." CR>)
(T
<TELL
"hope there are no grues aboard the station." CR>)>
<RFALSE> ;"so DESCRIBE-CONTENTS of room isn't called")
(<NOT <FSET? ,HERE ,TOUCHBIT>>
<COND (<NOT <EQUAL? ,HERE ,AIR-SHAFT>>
<FSET ,HERE ,TOUCHBIT>)>
<SET FIRST-VISIT T>)>
<TELL D ,HERE>
<COND (,HANGING-IN-AIR
<TELL ", hanging in air">)
(<FSET? <LOC ,PROTAGONIST> ,VEHBIT>
<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? <>) (TWO? <>) (START? <>) (PARA? <>) DB)
<COND (<EQUAL? .LEVEL 2>
<SET LEVEL T>
<SET PARA? T>
<SET START? T>)
(<BTST .ALL? ,D-PARA?>
<SET PARA? T>)>
<SET N <FIRST? .OBJ>>
<COND (<OR .START?
<IN? .OBJ ,ROOMS>
<FSET? .OBJ ,ACTORBIT>
<AND .N
<FSET? .OBJ ,CONTBIT>
<OR <FSET? .OBJ ,OPENBIT>
<FSET? .OBJ ,TRANSBIT>>
<OR <EQUAL? .LEVEL -1>
<FSET? .OBJ ,SEARCHBIT>>>>
<REPEAT ()
<COND (<OR <NOT .N>
<AND <DESCRIBABLE? .N>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .N>>>>
<COND (.F
<COND (.1ST?
<SET 1ST? <>>
<COND (<EQUAL? .LEVEL <> T>
<COND (<NOT .START?>
<COND (<NOT .PARA?>
<COND (<NOT <EQUAL? .OBJ
,PROTAGONIST>>
<TELL " ">)>
<SET PARA? T>)
(<EQUAL? .LEVEL T>
<TELL " ">)>
<DESCRIBE-START .OBJ ;.N>)>)
(<NOT <EQUAL? .LEVEL -1>>
<TELL .LEVEL>)>)
(.N
<TELL ",">)
(T
<TELL " and">)>
<TELL A .F>
<COND (<FSET? .F ,ONBIT>
<TELL " (providing light)">)>
<COND (<AND <EQUAL? .F ,DETONATOR>
<OR ,TIMER-CONNECTED
,EXPLOSIVE-CONNECTED>>
<TELL " (connected to the ">
<COND (,TIMER-CONNECTED
<TELL "timer">
<COND (,EXPLOSIVE-CONNECTED
<TELL " and the explosive">)>)
(T
<TELL "explosive">)>
<TELL ")">)>
<COND (<AND <NOT .IT?> <NOT .TWO?>>
<SET IT? .F>)
(T
<SET TWO? T>
<SET IT? <>>)>)>
<SET F .N>)>
<COND (.N
<SET N <NEXT? .N>>)>
<COND (<AND <NOT .F>
<NOT .N>>
<COND (<AND .IT?
<NOT .TWO?>>
<THIS-IS-IT .IT?>)>
<COND (<AND .1ST? .START?>
<TELL " nothing">
<RFALSE>)
(<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>>
<COND (<EQUAL? .OBJ ,HERE>
<COND (<AND <FSET? ,HERE ,WEIGHTLESSBIT>
<NOT <EQUAL? ,HERE ,PET-STORE>>>
<TELL " floating">)>
<TELL " here">)>
<TELL ".">)>
<RETURN>)>>
<COND (<EQUAL? .LEVEL <> T>
<SET F <FIRST? .OBJ>>
<REPEAT ()
<COND (<NOT .F>
<RETURN>)
(<AND <FSET? .F ,CONTBIT>
<DESCRIBABLE? .F T>
<OR <BTST .ALL? ,D-ALL?>
<SIMPLE-DESC? .F>>>
<SET DB ,D-BIT>
<SETG D-BIT <>>
<COND (<DESCRIBE-CONTENTS .F T
<COND (.PARA?
<+ ,D-ALL? ,D-PARA?>)
(T
,D-ALL?)>>
<SET 1ST? <>>
<SET PARA? T>)>
<SETG D-BIT .DB>)>
<SET F <NEXT? .F>>>)>
<COND (<AND <NOT .1ST?>
<EQUAL? .LEVEL <> T>
<EQUAL? .OBJ ,HERE <LOC ,WINNER>>>
<CRLF>)>
<NOT .1ST?>)>>
<ROUTINE DESCRIBE-START (OBJ)
<COND (<EQUAL? .OBJ ,HERE>
<TELL ,YOU-SEE>)
(<EQUAL? .OBJ ,PROTAGONIST>
<COND (<EQUAL? ,D-BIT ,WORNBIT>
<TELL " You are wearing">)
(T
<TELL "You are carrying">)>)
(<OR <FSET? .OBJ ,SURFACEBIT>
<EQUAL? .OBJ ,PILOT-SEAT ,COPILOT-SEAT>>
<TELL "Sitting on" T .OBJ " is">)
(T
<TELL ,IT-SEEMS-THAT T .OBJ>
<COND (<FSET? .OBJ ,ACTORBIT>
<TELL " has">)
(T
<TELL " contains">)>)>>
<GLOBAL D-BIT <>> ;"bit to screen objects"
<ROUTINE DESCRIBABLE? (OBJ "OPT" (CONT? <>))
<COND (<FSET? .OBJ ,INVISIBLE>
<RFALSE>)
(<EQUAL? .OBJ ,WINNER>
<RFALSE>)
(<AND <EQUAL? .OBJ <LOC ,WINNER>>
<NOT <EQUAL? ,HERE <LOC ,WINNER>>>>
<RFALSE>)
(<AND <NOT .CONT?>
<FSET? .OBJ ,NDESCBIT>>
<RFALSE>)
(,D-BIT
<COND (<G? ,D-BIT 0>
<COND (<FSET? .OBJ ,D-BIT>
<RTRUE>)
(T
<RFALSE>)>)
(<NOT <FSET? .OBJ <- ,D-BIT>>>
<RTRUE>)
(T
<RFALSE>)>)
(T
<RTRUE>)>>
<ROUTINE SIMPLE-DESC? (OBJ "AUX" STR)
<COND (<AND <GETP .OBJ ,P?FDESC>
<NOT <FSET? .OBJ ,TOUCHBIT>>>
<RFALSE>)
(<AND <SET STR <GETP .OBJ ,P?DESCFCN>>
<APPLY .STR ,M-OBJDESC?>>
<RFALSE>)
(<GETP .OBJ ,P?LDESC>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE DESCRIBE-VEHICLE () ;"for LOOK AT/IN vehicle when you're in it"
<TELL "Other than yourself, you can see">
<COND (<NOT <DESCRIBE-NOTHING>>
<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 "AUX" OLD-HERE ;OLIT)
<APPLY <GETP ,HERE ,P?ACTION> ,M-EXIT>
<COND (<AND <IN? ,FLOYD ,HERE>
<FSET? ,FLOYD ,ACTIVEBIT>>
<SETG FLOYD-FOLLOW T>)>
<SET OLD-HERE ,HERE>
;<SET OLIT ,LIT>
<MOVE ,PROTAGONIST .NEW-LOC>
<SETG HERE .NEW-LOC>
<SETG LIT <LIT? ,HERE>>
<SETG BALLOON-ODOR <>>
;<COND (<AND <NOT .OLIT>
<NOT ,LIT>
<PROB 75>>
<JIGS-UP
"Oh, no! Something (a grue?) slithered into the room and devoured you!">)>
<APPLY <GETP ,HERE ,P?ACTION> ,M-ENTER>
<COND (<AND <DESCRIBE-ROOM>
<NOT <EQUAL? ,VERBOSITY 0>>>
<DESCRIBE-OBJECTS>)>
<COND (<AND <IN? ,OSTRICH .OLD-HERE>
<ULTIMATELY-IN? ,OSTRICH-NIP>
<VISIBLE? ,OSTRICH-NIP> ;"close cont. to 'shake' ostrich"
<NOT <EQUAL? ,HERE ,TOP-OF-AIR-SHAFT>>>
<TELL " The ostrich, sniffing excitedly, ">
<COND (<GLOBAL-IN? ,BED ,HERE>
<TELL
"follows you to the door, but hesitates as it notices the bed.
The ostrich, who refuses to enter any room with a bed due to a bad
experience in its youth, withdraws." CR>
<RTRUE>)
(<FSET? <LOC ,OSTRICH> ,WEIGHTLESSBIT>
<TELL
"follows you in an awkward fashion somewhere between swimming and flying.">)
(T
<TELL "trots eagerly after you.">)>
<COND (<OR <AND <EQUAL? ,HERE ,SOUTH-CONNECTION>
<IN? ,OSTRICH ,GRIMY-PASSAGE>>
<AND <EQUAL? ,HERE ,EAST-CONNECTION>
<IN? ,OSTRICH ,MAKESHIFT-CONNECTOR>>
<IN? ,OSTRICH ,ELEVATOR>>
<COND (,LIT
<TELL
" As the ostrich crosses into gravity, it emits a surprised squawk and
does a graceless bellyflop. As it struggles to its feet, it appears that
only its dignity was injured.">)>)
(<OR <AND <EQUAL? ,HERE ,GRIMY-PASSAGE>
<IN? ,OSTRICH ,SOUTH-CONNECTION>>
<AND <EQUAL? ,HERE ,MAKESHIFT-CONNECTOR>
<IN? ,OSTRICH ,EAST-CONNECTION>>
<AND <EQUAL? ,HERE ,ELEVATOR>
<FSET? ,ELEVATOR ,WEIGHTLESSBIT>>>
<COND (,LIT
<TELL
" As the ostrich unexpectly enters the weightless environment of the ">
<COND (<EQUAL? ,HERE ,ELEVATOR>
<TELL "elevator">)
(T
<TELL "village">)>
<TELL
", it shoots into the air, squawking loudly. It spins head over claw
for a moment, thrashing its wings ineffectually, before finally achieving
a modicum of stability.">)>)>
<MOVE ,OSTRICH ,HERE>
<CRLF>)>
<RTRUE>>
<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>)
(<AND ,HANGING-IN-AIR
<IN? .OBJ ,HERE>>
<COND (<OR <EQUAL? .OBJ ,BALLOON ,ETERNAL-FLAME ,LEASH>
<AND <EQUAL? .OBJ ,STAR>
<FSET? .OBJ ,TRYTAKEBIT>>>
<RFALSE>)
(T
<RTRUE>)>)
(<AND <IN? .OBJ ,STAR>
<FSET? ,STAR ,TRYTAKEBIT>
<NOT ,HANGING-IN-AIR>>
<RTRUE>)
(<AND <EQUAL? .OBJ ,BALLOON ,LEASH>
<IN? .OBJ ,CAGE>>
<RTRUE>)
(<AND <EQUAL? .OBJ ,FLOYD ,REX ,HELEN>
<NOT <EQUAL? .OBJ ,ROBOT-PICKED>>>
<RTRUE>)
(<IN? ,PROTAGONIST ,HERE>
<RFALSE>)
(<OR <ULTIMATELY-IN? .OBJ <LOC ,PROTAGONIST>>
<EQUAL? .OBJ <LOC ,PROTAGONIST>>
<EQUAL? <LOC .OBJ> ,GLOBAL-OBJECTS ,LOCAL-GLOBALS>>
<COND (<FSET? .OBJ ,DOORBIT>
;"doors are the only untouchable local-global"
<RTRUE>)
(T
<RFALSE>)>)
(<AND <EQUAL? <LOC ,PROTAGONIST> ,PILOT-SEAT ,COPILOT-SEAT>
<EQUAL? .OBJ ,RADIO ,KEYPAD ,PSEUDO-OBJECT>>
<RFALSE>)
(T
<RTRUE>)>>
<ROUTINE META-LOC (OBJ)
<REPEAT ()
<COND (<NOT .OBJ>
<RFALSE>)
;"next is special case for Sfall; bed is a local-global"
;"can't put stuff in bed-but you can HOLD things in bed"
(<EQUAL? .OBJ ,BED>
<RETURN ,HERE>)
(<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 other 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 <>>
<COND (<AND ,P-IT-OBJECT
<NOT <ULTIMATELY-IN? ,P-IT-OBJECT>>>
<SETG P-IT-OBJECT <>>)>
<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>>
<COND (<NOT <FSET? .X ,WORNBIT>>
<COND (.WHERE
<MOVE .X .WHERE>)
(T
<REMOVE .X>)>)>
<SET X .N>>>
<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
" is as worthwhile as cleaning a grotch cage."
" accomplishes nothing."
" has no desirable effect.">>
<ROUTINE YUKS ()
<TELL <PICK-ONE ,YUK-LIST> CR>>
<GLOBAL YUK-LIST
<LTABLE
0
"Fat chance."
"A valiant attempt."
"You can't be serious."
"Not bloody likely."
"What a concept."
"Nice try.">>
<ROUTINE IMPOSSIBLES ()
<TELL <PICK-ONE ,IMPOSSIBLE-LIST> CR>>
<GLOBAL IMPOSSIBLE-LIST
<LTABLE
0
"Fat chance."
"You are behaving like a demented Denebian slime devil."
"Dream on."
"You're wacko."
"You have lost your mind.">>
<ROUTINE WASTES ()
<TELL <PICK-ONE ,WASTE-LIST> CR>>
<GLOBAL WASTE-LIST
<LTABLE 0
"A waste of time."
"A worthless action -- and much too complex for a crufty program like
this one to handle."
"Useless. Unhelpful."
"There's another turn down the drain."
"Why bother?">>